diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1aea02516f..3e71b4b33b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -109,6 +109,69 @@ jobs: path: | gh-pages + build-sa1-gba: + if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork || github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.fork}} + runs-on: ubuntu-22.04 + name: Build SA1 GBA (Europe) + steps: + - name: Checkout PR + if: ${{ github.event_name == 'pull_request' || github.event_name == 'pull_request_target'}} + uses: actions/checkout@master + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Checkout + if: ${{ github.event_name == 'push' }} + uses: actions/checkout@master + + - name: Checkout agbcc + uses: actions/checkout@master + with: + path: agbcc + repository: SAT-R/agbcc + + - name: Install tools + run: | + sudo apt update && sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi xorg-dev + python3 -m pip install gitpython + # build-essential, git, and libpng-dev are already installed + # gcc-arm-none-eabi is only needed for the modern build + # as an alternative to dkP + + - name: Install agbcc + run: | + ./build.sh + ./install.sh ../ + working-directory: agbcc + + - name: Fetch assets + run: curl -o sa1/baserom_sa1.gba -u ${{ secrets.STORAGE_USERNAME }}:${{ secrets.STORAGE_PASSWORD }} ${{ secrets.STORAGE_BASE_URL }}/sa1/baserom.gba + + - name: Compare + run: make sa1 -j${nproc} + + # - name: Progress + # run: | + # python3 scripts/progress.py text + + # - name: Generate reports + # run: | + # mkdir -p gh-pages/reports + # mkdir -p gh-pages/maps + # python3 sa1/scripts/progress.py csv >> gh-pages/reports/progress-sa1-nonmatching.csv + # python3 sa1/scripts/progress.py csv -m >> gh-pages/reports/progress-sa1-matching.csv + # python3 sa1/scripts/progress.py shield-json > gh-pages/reports/progress-sa1-shield.json + # python3 sa1/scripts/progress.py shield-json -m > gh-pages/reports/progress-sa1-shield-matching.json + # echo "REPORTS_COMMIT_MSG=$( git log --format=%s ${GITHUB_SHA} )" >> $GITHUB_ENV + # cp sa1.map gh-pages/maps/${GITHUB_SHA}.map + + # - name: Upload progress + # if: ${{ github.event_name == 'push' || github.event_name == 'pull_request' }} + # uses: actions/upload-artifact@v7 + # with: + # path: | + # gh-pages + publish-progress: name: Publish progress runs-on: ubuntu-24.04 diff --git a/Makefile b/Makefile index 7e7754e123..585cf5c8cd 100644 --- a/Makefile +++ b/Makefile @@ -369,7 +369,7 @@ endif #### MAIN TARGETS #### # these commands will run regardless of deps being completed -.PHONY: clean tools tidy clean-tools $(TOOLDIRS) libagbsyscall ps2 +.PHONY: clean tools tidy clean-tools $(TOOLDIRS) libagbsyscall ps2 sa1 # Ensure required directories exist $(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR) $(SOUND_ASM_BUILDDIR) $(SONG_BUILDDIR) $(MID_BUILDDIR)) @@ -436,6 +436,7 @@ tool_libs: clean: tidy clean-tools @$(MAKE) clean -C tools/BriBaSA_ex @$(MAKE) clean -C chao_garden + @$(MAKE) clean -C sa1 @$(MAKE) clean -C multi_boot/subgame_bootstrap @$(MAKE) clean -C multi_boot/programs/subgame_loader @$(MAKE) clean -C multi_boot/collect_rings @@ -663,6 +664,9 @@ libagbsyscall: bribasa: @$(MAKE) -C tools/BriBaSA_ex +sa1: + @$(MAKE) -C sa1 + $(TOOLDIRS): tool_libs @$(MAKE) -C $@ diff --git a/asm/non_matching/engine/sub_8002B20.inc b/asm/non_matching/engine/sa2__sub_8002B20.inc similarity index 100% rename from asm/non_matching/engine/sub_8002B20.inc rename to asm/non_matching/engine/sa2__sub_8002B20.inc diff --git a/asm/non_matching/engine/sub_80039E4.inc b/asm/non_matching/engine/sa2__sub_80039E4.inc similarity index 100% rename from asm/non_matching/engine/sub_80039E4.inc rename to asm/non_matching/engine/sa2__sub_80039E4.inc diff --git a/asm/non_matching/engine/sub_8004010.inc b/asm/non_matching/engine/sa2__sub_8004010.inc similarity index 100% rename from asm/non_matching/engine/sub_8004010.inc rename to asm/non_matching/engine/sa2__sub_8004010.inc diff --git a/asm/non_matching/engine/unused_sub_8005C54.inc b/asm/non_matching/engine/sa2__unused_sub_8005C54.inc similarity index 100% rename from asm/non_matching/engine/unused_sub_8005C54.inc rename to asm/non_matching/engine/sa2__unused_sub_8005C54.inc diff --git a/asm/non_matching/engine/unused_sub_8005FB4.inc b/asm/non_matching/engine/sa2__unused_sub_8005FB4.inc similarity index 100% rename from asm/non_matching/engine/unused_sub_8005FB4.inc rename to asm/non_matching/engine/sa2__unused_sub_8005FB4.inc diff --git a/asm/non_matching/engine/unused_sub_800672C.inc b/asm/non_matching/engine/sa2__unused_sub_800672C.inc similarity index 100% rename from asm/non_matching/engine/unused_sub_800672C.inc rename to asm/non_matching/engine/sa2__unused_sub_800672C.inc diff --git a/graphics.mk b/graphics.mk index af7a59daa1..6a14a25244 100644 --- a/graphics.mk +++ b/graphics.mk @@ -1,25 +1,3 @@ - -%_tiles_1.4bpp: %_tiles_1.png - $(GFX) $< $@ -num_tiles 1 - -%_tiles_2.4bpp: %_tiles_2.png - $(GFX) $< $@ -num_tiles 2 - -%_tiles_4.4bpp: %_tiles_4.png - $(GFX) $< $@ -num_tiles 4 - -%_tiles_8.4bpp: %_tiles_8.png - $(GFX) $< $@ -num_tiles 8 - -%_tiles_16.4bpp: %_tiles_16.png - $(GFX) $< $@ -num_tiles 16 - -%_tiles_32.4bpp: %_tiles_32.png - $(GFX) $< $@ -num_tiles 32 - -%_tiles_64.4bpp: %_tiles_64.png - $(GFX) $< $@ -num_tiles 64 - tileset_%.4bpp: tileset_%.png $(GFX) $< $@ -ignore_trailing @@ -30,12 +8,7 @@ ifeq ($(PLATFORM),win32) # For experimental OpenGL renderer GFX_CVT_FLAGS := else -# Japan rom compiled without split into oam shapes -ifeq ($(GAME_REGION),JAPAN) GFX_CVT_FLAGS := -split_into_oam_shapes -else - GFX_CVT_FLAGS := -split_into_oam_shapes -endif endif graphics/obj_tiles/4bpp/%.4bpp: graphics/obj_tiles/4bpp/%.png diff --git a/include/bg_triangles.h b/include/bg_triangles.h index f0a1ad4b52..d265f935a3 100644 --- a/include/bg_triangles.h +++ b/include/bg_triangles.h @@ -23,9 +23,12 @@ typedef struct { #endif } TriParam1; -extern void sub_800724C(u8 bg, TriParam1 *param1); -extern void sub_80075D0(u8 bg, int_vcount param1, int_vcount param2, s16 param3, s16 param4, u16 param5); -extern void sub_8007858(u8 param0, int_vcount minY, int_vcount maxY, u16 param3, u16 param4); -extern void sub_80078D4(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 offsetOdd); - +extern void SA2_LABEL(sub_8006DB4)(u8 bg, TriParam1 *arg1, s32 unused, s32 arg3); +extern void SA2_LABEL(sub_800724C)(u8 bg, TriParam1 *param1); +extern void SA2_LABEL(sub_80075D0)(u8 bg, int_vcount param1, int_vcount param2, s16 param3, s16 param4, u16 param5); +extern void SA2_LABEL(sub_8007738)(u8 bg, int_vcount minY, int_vcount maxY, u16 param3, u8 param4, u8 param5, u16 param6, u8 param7, + u8 param8, s16 param9, s16 param10); +extern void SA2_LABEL(sub_8007858)(u8 param0, int_vcount minY, int_vcount maxY, u16 param3, u16 param4); +extern void SA2_LABEL(sub_80078D4)(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 offsetOdd); +void SA2_LABEL(sub_8007958)(u8 bg, int_vcount minY, int_vcount maxY, s16 param3, s8 param4, u16 param5, u16 param6); #endif diff --git a/include/lib/agb_flash/flash_internal.h b/include/lib/agb_flash/flash_internal.h index 6ff24db095..5573c2d09f 100644 --- a/include/lib/agb_flash/flash_internal.h +++ b/include/lib/agb_flash/flash_internal.h @@ -57,7 +57,7 @@ extern u8 (*PollFlashStatus)(u8 *); extern u16 (*WaitForFlashWrite)(u8, u8 *, u8); extern const struct FlashSetupInfo LE39FW512; -// extern const struct FlashSetupInfo AT29LV512; +extern const struct FlashSetupInfo AT29LV512; extern const struct FlashSetupInfo MN63F805MNP; extern const struct FlashSetupInfo MX29L512; extern const struct FlashSetupInfo DefaultFlash512K; @@ -82,11 +82,18 @@ u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData); u16 ProgramByte(u8 *src, u8 *dest); u16 EraseFlashChip_LE(void); +u16 EraseFlashChip_AT(void); u16 EraseFlashSector_LE(u16 sectorNum); +u16 EraseFlashSector_AT(u16 sectorNum); u16 ProgramFlashSector_LE(u16 sectorNum, void *src); u16 ProgramFlashSector_MX(u16 sectorNum, void *src); +u16 ProgramFlashSector_AT(u16 sectorNum, void *src); // agb_flash_1m u16 IdentifyFlash(void); +/* Manufacturers and chips */ +#define MANUFACTURER_ATMEL 0x1F +#define CHIP_ATMEL_AT29LV512 0x3D + #endif // GUARD_GBA_FLASH_INTERNAL_H diff --git a/include/rect.h b/include/rect.h index a640cda1e2..6cefe9570f 100644 --- a/include/rect.h +++ b/include/rect.h @@ -56,11 +56,11 @@ typedef struct { /* Rect collision checks using integer values Clones of the RECT_ ,macros that access values directly */ -#define HB_WIDTH(hb) ((hb).right - (hb).left) -#define HB_HEIGHT(hb) ((hb).bottom - (hb).top) -#define HB_LEFT(x, hb) ((x) + hb.left) +#define HB_WIDTH(hb) ((hb).b.right - (hb).b.left) +#define HB_HEIGHT(hb) ((hb).b.bottom - (hb).b.top) +#define HB_LEFT(x, hb) ((x) + hb.b.left) #define HB_RIGHT(x, hb) (HB_LEFT((x), (hb)) + HB_WIDTH(hb)) -#define HB_TOP(y, hb) ((y) + hb.top) +#define HB_TOP(y, hb) ((y) + hb.b.top) #define HB_BOTTOM(y, hb) (HB_TOP(y, hb) + HB_HEIGHT(hb)) #define HB_COLLISION_A_X(x0, hb0, x1, hb1) (HB_LEFT(x0, hb0) <= HB_LEFT(x1, hb1) && HB_RIGHT(x0, hb0) >= HB_LEFT(x1, hb1)) diff --git a/include/sprite.h b/include/sprite.h index 21464bca50..343b619e5a 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -2,16 +2,17 @@ #define GUARD_SPRITE_H #include "global.h" +#include "rect.h" #include "malloc_vram.h" typedef u16 AnimId; -struct GraphicsData { +typedef struct GraphicsData { /* 0x00 */ const void *src; /* 0x04 */ void *dest; /* 0x08 */ u16 size; /* 0x0A */ AnimId anim; -}; +} GraphicsData; // TODO: Put this somewhere else! (or is this already somewhere?) #define TileMask_Index (0x3FF) @@ -157,12 +158,7 @@ typedef struct { typedef struct { // index: -1 on init; lower 4 bits = index (in anim-cmds) /* 0x00 */ s32 index; - - // TODO: Make this a Rect8, like in SA1 and SA3! - /* 0x04 */ s8 left; - /* 0x05 */ s8 top; - /* 0x06 */ s8 right; - /* 0x07 */ s8 bottom; + /* 0x04 */ Rect8 b; } Hitbox; #define SPRITE_ANIM_SPEED(speed) ((int)((float)(speed)*0x10)) @@ -267,6 +263,27 @@ PACKED(TileInfo16, { /* 0x04 */ u16 variant; }); +#if (ENGINE == ENGINE_1) +typedef struct { + u32 anim : 16; + u32 variant : 8; + u32 size : 8; +} TileInfoBitfield; + +// Used in the background code of Casino Paradise +// TODO: Rename TileInfoFirework! +typedef struct { + /* 0x00 */ AnimId anim; + /* 0x04 */ u8 variant; + /* 0x06 */ u8 numTiles; +} TileInfoFirework; + +typedef struct { + AnimId anim; + u16 variant; +} TileInfoBarrel; +#endif + extern const u8 gOamShapesSizes[12][2]; typedef enum { @@ -286,18 +303,19 @@ void ProcessOamBuffers(void); OamData *OamMalloc(u8 order); void TransformSprite(Sprite *, SpriteTransform *); +// NOTE: Not actually unused in SA1. TODO: Align name with SA2! void UnusedTransform(Sprite *, SpriteTransform *); -void sub_8004E14(Sprite *, SpriteTransform *); +void SA2_LABEL(sub_8004E14)(Sprite *, SpriteTransform *); -void sub_8003EE4(u16 p0, s16 p1, s16 p2, s16 p3, s16 p4, s16 p5, s16 p6, BgAffineReg *affine); -void sub_8006228(u8 p0, u8 p1, u8 p2, u8 p3, u8 p4, u8 p5); -void sub_80064A8(u8 p0, u8 p1, u8 p2, u8 p3, u8 p4, u8 p5); +void SA2_LABEL(sub_8003EE4)(u16 p0, s16 p1, s16 p2, s16 p3, s16 p4, s16 p5, s16 p6, BgAffineReg *affine); +void SA2_LABEL(sub_8006228)(u8 p0, u8 p1, u8 p2, u8 p3, u8 p4, u8 p5); +void SA2_LABEL(sub_80064A8)(u8 p0, u8 p1, u8 p2, u8 p3, u8 p4, u8 p5); s32 UpdateSpriteAnimation_BG(Sprite *); void DisplaySprite_BG(Sprite *); -void sub_80047A0(u16, s16, s16, u16); +void SA2_LABEL(sub_80047A0)(u16 angle, s16 p1, s16 p2, u16 affineIndex); -s16 sub_8004418(s16 x, s16 y); +s16 SA2_LABEL(sub_8004418)(s16 x, s16 y); void numToASCII(u8 digits[5], u16 number); #if ((GAME == GAME_SA1) || (GAME == GAME_SA2)) @@ -326,7 +344,7 @@ void numToASCII(u8 digits[5], u16 number); #define SPRITE_INIT_SCRIPT(_sprite, _speed) \ _sprite->animCursor = 0; \ - _sprite->qAnimDelay = 0; \ + _sprite->qAnimDelay = Q(0); \ _sprite->prevVariant = -1; \ _sprite->animSpeed = SPRITE_ANIM_SPEED(_speed); \ _sprite->palId = 0; \ @@ -375,6 +393,9 @@ void numToASCII(u8 digits[5], u16 number); #define SPRITE_FLAG_SET_VALUE(sprite, flagName, value) (sprite)->frameFlags |= SPRITE_FLAG(flagName, value) +#define SPRITE_FLAG_ENABLE_ROTATION(value) \ + (SPRITE_FLAG(ROT_SCALE, value) | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE) + #define SPRITE_FLAG_SHIFT_ROT_SCALE 0 #define SPRITE_FLAG_SHIFT_ROT_SCALE_ENABLE 5 #define SPRITE_FLAG_SHIFT_ROT_SCALE_DOUBLE_SIZE 6 diff --git a/sa1/.clang-format b/sa1/.clang-format new file mode 100644 index 0000000000..6618450ed4 --- /dev/null +++ b/sa1/.clang-format @@ -0,0 +1,175 @@ +--- +AccessModifierOffset: -4 +AlignConsecutiveMacros: Consecutive +AlignConsecutiveAssignments: None +AlignConsecutiveBitFields: None +AlignConsecutiveDeclarations: None +AlignEscapedNewlines: Right +AlignOperands: DontAlign +AlignTrailingComments: false +AllowAllArgumentsOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortEnumsOnASingleLine: true +AllowShortBlocksOnASingleLine: Empty +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: + - __capability +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: All +BreakBeforeConceptDeclarations: true +BreakBeforeBraces: WebKit +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 140 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +BasedOnStyle: '' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +AllowAllConstructorInitializersOnNextLine: true +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentAccessModifiers: false +IndentCaseLabels: true +IndentCaseBlocks: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentExternBlock: AfterExternBlock +IndentRequires: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertTrailingCommas: None +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +LambdaBodyIndentation: Signature +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: Inner +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 4 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PenaltyIndentedWhitespace: 0 +PointerAlignment: Right +PPIndentWidth: -1 +ReferenceAlignment: Pointer +ReflowComments: true +ShortNamespaceLines: 1 +SortIncludes: Never +SortJavaStaticImport: Before +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceAroundPointerQualifiers: Default +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +BitFieldColonSpacing: Both +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseCRLF: false +UseTab: Never +WhitespaceSensitiveMacros: + - STRINGIZE + - PP_STRINGIZE + - BOOST_PP_STRINGIZE + - NS_SWIFT_NAME + - CF_SWIFT_NAME +... + diff --git a/sa1/.gitattributes b/sa1/.gitattributes new file mode 100644 index 0000000000..1520f837b1 --- /dev/null +++ b/sa1/.gitattributes @@ -0,0 +1,25 @@ +*.pal text eol=crlf + +*.s text eol=lf +*.txt text eol=lf +Makefile text eol=lf +*.mk text eol=lf +*.c text eol=lf +*.h text eol=lf +*.pl text eol=lf +*.inc text eol=lf +*.sha1 text eol=lf +*.sed text eol=lf +*.sh text eol=lf +*.json text eol=lf + +*.png binary +*.bin binary +*.gba binary +*.pcm binary + +*.h linguist-language=C +*.inc linguist-language=Assembly + +tools/** linguist-vendored +scripts/** linguist-vendored diff --git a/sa1/.gitignore b/sa1/.gitignore new file mode 100644 index 0000000000..6cd9e3cb7e --- /dev/null +++ b/sa1/.gitignore @@ -0,0 +1,94 @@ +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Visual Studio folder +.vs +*.pdb + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# ========================= +# Build Outputs +# ========================= +*.gba +*.sav +*.elf +*.map +*.bin + +*.a + +*.hex +*.o +*.obj +*.rdi +*.dump +build +tools/agbcc +**/sound/songs/midi/*.s +/ctx.c +reports +.vscode/*.log +*.gbapal +*.lz +*.rl +*.gba +./maps +*.4bpp +*.8bpp +libagbsyscall/*.s + +!data/maps/*/*/tilemaps/*/*.bin +*.exe +*.dll +*.lib +*.sdl + +# Third Party deps +/ext + +# Generated nob files +/nob* diff --git a/sa1/Makefile b/sa1/Makefile new file mode 100644 index 0000000000..f87267d607 --- /dev/null +++ b/sa1/Makefile @@ -0,0 +1,664 @@ +# +# NOTE: Overrideable default flags are set in config.mk +# +include config.mk + +MAKEFLAGS += --no-print-directory + +# Clear the default suffixes +.SUFFIXES: +# Don't delete intermediate files +.SECONDARY: +# Delete files that weren't built properly +.DELETE_ON_ERROR: +# Secondary expansion is required for dependency variables in object rules. +.SECONDEXPANSION: + +# Quotes must remain to ensure that paths with spaces are respected +ROOT_DIR := "$(shell dirname "$(realpath $(firstword $(MAKEFILE_LIST)))")" +OS := $(shell uname) + +### TOOLCHAIN ### + +# GBA +ifeq ($(PLATFORM),gba) + TOOLCHAIN := $(DEVKITARM) + COMPARE ?= 0 + + ifeq (compare,$(MAKECMDGOALS)) + COMPARE := 1 + endif + + # don't use dkP's base_tools anymore + # because the redefinition of $(CC) conflicts + # with when we want to use $(CC) to preprocess files + # thus, manually create the variables for the bin + # files, or use arm-none-eabi binaries on the system + # if dkP is not installed on this system + + ifneq (,$(TOOLCHAIN)) + ifneq ($(wildcard $(TOOLCHAIN)/bin),) + export PATH := $(TOOLCHAIN)/bin:$(PATH) + endif + endif + + PREFIX := arm-none-eabi- +# x86 +else ifeq ($(CPU_ARCH),i386) + ifeq ($(PLATFORM),sdl_win32) + TOOLCHAIN := /usr/x86_64-w64-mingw32/ + PREFIX := x86_64-w64-mingw32- + else ifeq ($(PLATFORM),win32) + TOOLCHAIN := /usr/x86_64-w64-mingw32/ + PREFIX := x86_64-w64-mingw32- + endif +else +# Native + ifneq ($(PLATFORM),sdl) + $(error Unsupported CPU arch for platform '$(CPU_ARCH)', '$(PLATFORM)') + endif +endif # (PLATFORM == gba) + + +ifeq ($(OS),Windows_NT) +EXE := .exe +else +EXE := +endif + +SHELL := /bin/bash -o pipefail +SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c + +ifeq ($(PLATFORM),gba) +CC1 := ../tools/agbcc/bin/agbcc$(EXE) +CC1_OLD := ../tools/agbcc/bin/old_agbcc$(EXE) +else +CC1 := $(PREFIX)gcc$(EXE) +CC1_OLD := $(CC1) +endif + +CPP := $(PREFIX)cpp +LD := $(PREFIX)ld +OBJCOPY := $(PREFIX)objcopy +AS := $(PREFIX)as + +FORMAT := clang-format-13 + +### TOOLS ### +GFX := ../tools/gbagfx/gbagfx$(EXE) +ENT_POS := ../tools/entity_positions/entity_positions$(EXE) +AIF := ../tools/aif2pcm/aif2pcm$(EXE) +MID2AGB := ../tools/mid2agb/mid2agb$(EXE) +SCANINC := ../tools/scaninc/scaninc$(EXE) +PREPROC := ../tools/preproc/preproc$(EXE) +RAMSCRGEN := ../tools/ramscrgen/ramscrgen$(EXE) +FIX := ../tools/gbafix/gbafix$(EXE) + +TOOLDIRS := $(filter-out ../tools/agbcc/ ../tools/BriBaSA_ex/, $(dir $(wildcard ../tools/*/Makefile))) +TOOLBASE = $(TOOLDIRS:tools/%=%) +TOOLS = $(foreach tool,$(TOOLBASE),../tools/$(tool)/$(tool)$(EXE)) + +### DEPS ### + +SDL_MINGW_PKG := $(ROOT_DIR)/ext/SDL2-2.30.3/x86_64-w64-mingw32 +SDL_MINGW_INCLUDE := $(SDL_MINGW_PKG)/include/SDL2 +SDL_MINGW_SDL_DLL := $(SDL_MINGW_PKG)/bin/SDL2.dll +SDL_MINGW_LIB := $(SDL_MINGW_PKG)/lib +SDL_MINGW_FLAGS := -I$(SDL_MINGW_INCLUDE) -D_THREAD_SAFE +SDL_MINGW_LIBS := -L$(SDL_MINGW_LIB) -lSDL2main -lSDL2.dll + +LIBABGSYSCALL_LIBS := -L$(ROOT_DIR)/../libagbsyscall/build/gba -lagbsyscall + +### FILES ### + +OBJ_DIR := build/$(PLATFORM)/$(BUILD_NAME) +ifeq ($(PLATFORM),gba) +ROM := $(BUILD_NAME).gba +ELF := $(ROM:.gba=.elf) +MAP := $(ROM:.gba=.map) +else ifeq ($(PLATFORM),sdl) +ROM := $(BUILD_NAME).sdl +ELF := $(ROM).elf +MAP := $(ROM).map +else +ROM := $(BUILD_NAME).$(PLATFORM).exe +ELF := $(ROM:.exe=.elf) +MAP := $(ROM:.exe=.map) +endif + +INCLUDE_DIRS = include +INCLUDE_CPP_ARGS := $(INCLUDE_DIRS:%=-iquote %) +INCLUDE_SCANINC_ARGS := $(INCLUDE_DIRS:%=-I %) + +SA2_INCLUDE_DIRS = ../include +SA2_INCLUDE_CPP_ARGS := $(SA2_INCLUDE_DIRS:%=-iquote %) + +ASM_SUBDIR = asm +ASM_BUILDDIR = $(OBJ_DIR)/$(ASM_SUBDIR) + +C_SUBDIR = src +C_BUILDDIR = $(OBJ_DIR)/$(C_SUBDIR) + +DATA_ASM_SUBDIR = data +DATA_ASM_BUILDDIR = $(OBJ_DIR)/$(DATA_ASM_SUBDIR) + +SONG_SUBDIR = sound/songs +SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) + +SOUND_ASM_SUBDIR = sound +SOUND_ASM_BUILDDIR = $(OBJ_DIR)/$(SOUND_ASM_SUBDIR) + +MID_SUBDIR = sound/songs/midi +MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) + +SAMPLE_SUBDIR = sound/direct_sound_samples + +OBJ_TILES_4BPP_SUBDIR = graphics/obj_tiles/4bpp +TILESETS_SUBDIR = graphics/tilesets/ + +ifeq ($(PLATFORM),gba) +C_SRCS := $(shell find $(C_SUBDIR) -name "*.c" -not -path "*/platform/*") +else ifeq ($(PLATFORM),sdl) +C_SRCS := $(shell find $(C_SUBDIR) -name "*.c" -not -path "*/platform/win32/*") +else ifeq ($(PLATFORM),sdl_win32) +C_SRCS := $(shell find $(C_SUBDIR) -name "*.c" -not -path "*/platform/win32/*") +else ifeq ($(PLATFORM),win32) +C_SRCS := $(shell find $(C_SUBDIR) -name "*.c" -not -path "*/platform/pret_sdl/*") +else +C_SRCS := $(shell find $(C_SUBDIR) -name "*.c") +endif +C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) + +# Platform not included as we only need the headers for decomp scratches +C_HEADERS := $(shell find $(INCLUDE_DIRS) -name "*.h" -not -path "*/platform/*") + +ifeq ($(PLATFORM),gba) +C_ASM_SRCS := $(shell find $(C_SUBDIR) -name "*.s") +C_ASM_OBJS := $(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o,$(C_ASM_SRCS)) + +ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s) +ASM_OBJS := $(patsubst $(ASM_SUBDIR)/%.s,$(ASM_BUILDDIR)/%.o,$(ASM_SRCS)) +endif + +# TEMP SOLUTION UNTIL MAKEFILES ARE COMBINED +# Moves any relevant sa2 c files to the build dir +SA2_C_FILES := \ + src/lib/m4a/m4a.c \ + src/lib/m4a/m4a_tables.c \ + src/lib/agb_flash/agb_flash_at_512k.c \ + src/lib/agb_flash/agb_flash_le_512k.c \ + src/lib/agb_flash/agb_flash_mx_512k.c \ + src/multi_sio.c \ + src/sio32_multi_load.c \ + src/multi_boot.c \ + src/core.c \ + src/main.c \ + src/task.c \ + src/sprite.c \ + src/trig.c \ + src/malloc_vram.c \ + src/malloc_ewram.c \ + src/bg_triangles.c \ + src/input_recorder.c \ + src/background.c \ + +SA2_C_ASM_FILES := \ + src/rom_header.s \ + src/lib/m4a/m4a0.s \ + src/crt0.s \ + src/multi_sio_asm.s + +SA2_C_SRCS = $(patsubst %.c,$(OBJ_DIR)/sa2/%.c,$(SA2_C_FILES)) +SA2_C_OBJS = $(patsubst %.c,%.o,$(SA2_C_SRCS)) + +SA2_C_ASM_SRCS = $(patsubst %.s,$(OBJ_DIR)/sa2/%.s,$(SA2_C_ASM_FILES)) +SA2_C_ASM_OBJS = $(patsubst %.s,%.o,$(SA2_C_ASM_SRCS)) + +DATA_ASM_SRCS := $(wildcard $(DATA_ASM_SUBDIR)/*.s) +DATA_ASM_OBJS := $(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o,$(DATA_ASM_SRCS)) + +SONG_SRCS := $(wildcard $(SONG_SUBDIR)/*.s) +SONG_OBJS := $(patsubst $(SONG_SUBDIR)/%.s,$(SONG_BUILDDIR)/%.o,$(SONG_SRCS)) + +MID_SRCS := $(wildcard $(MID_SUBDIR)/*.mid) +MID_OBJS := $(patsubst $(MID_SUBDIR)/%.mid,$(MID_BUILDDIR)/%.o,$(MID_SRCS)) + +SOUND_ASM_SRCS := $(wildcard $(SOUND_ASM_SUBDIR)/*.s) +SOUND_ASM_OBJS := $(patsubst $(SOUND_ASM_SUBDIR)/%.s,$(SOUND_ASM_BUILDDIR)/%.o,$(SOUND_ASM_SRCS)) + +OBJS := $(C_OBJS) $(ASM_OBJS) $(C_ASM_OBJS) $(DATA_ASM_OBJS) $(SONG_OBJS) $(SA2_C_OBJS) $(SA2_C_ASM_OBJS) $(MID_OBJS) +OBJS_REL := $(patsubst $(OBJ_DIR)/%,%,$(OBJS)) + +FORMAT_SRC_PATHS := $(shell find . -name "*.c" ! -path '*/src/data/*' ! -path '*/build/*' ! -path '*/ext/*') +FORMAT_H_PATHS := $(shell find . -name "*.h" ! -path '*/build/*' ! -path '*/ext/*') + +### COMPILER FLAGS ### + +# -P disables line markers (don't EVER use this, if you want proper debug info!) +# -I sets an include path +# -D defines a symbol +CPPFLAGS ?= $(INCLUDE_CPP_ARGS) -D $(GAME_REGION) +CC1FLAGS ?= -Wimplicit -Wparentheses -Werror + +ifneq ($(GAME_VARIANT), DEFAULT) + CPPFLAGS += -D $(GAME_VARIANT) +endif + +# These have to(?) be defined this way, because +# the C-preprocessor cannot resolve stuff like: +# #if (PLATFORM == gba), where PLATFORM is defined via -D. +ifeq ($(PLATFORM),gba) + INCLUDE_SCANINC_ARGS += -I ../tools/agbcc/include + CPPFLAGS += -D PLATFORM_GBA=1 -D PLATFORM_SDL=0 -D PLATFORM_WIN32=0 -D CPU_ARCH_X86=0 -D CPU_ARCH_ARM=1 -nostdinc -I ../tools/agbcc/include + CC1FLAGS += -fhex-asm + +ifeq ($(BUILD_NAME), sa1) + # It seems this bug was introduced to GCC after SA1 released. + PROLOGUE_FIX := -fprologue-bugfix +endif # BUILD_NAME == sa1 + +else + CC1FLAGS += -Wstrict-overflow=1 + ifeq ($(PLATFORM),sdl) + CC1FLAGS += -Wno-parentheses-equality -Wno-unused-value + CPPFLAGS += -D TITLE_BAR=$(BUILD_NAME).$(PLATFORM) -D PLATFORM_GBA=0 -D PLATFORM_SDL=1 -D PLATFORM_WIN32=0 $(shell sdl2-config --cflags) + else ifeq ($(PLATFORM),sdl_win32) + CPPFLAGS += -D TITLE_BAR=$(BUILD_NAME).$(PLATFORM) -D PLATFORM_GBA=0 -D PLATFORM_SDL=1 -D PLATFORM_WIN32=0 $(SDL_MINGW_FLAGS) + else ifeq ($(PLATFORM),win32) + CPPFLAGS += -D TITLE_BAR=$(BUILD_NAME).$(PLATFORM) -D PLATFORM_GBA=0 -D PLATFORM_SDL=0 -D PLATFORM_WIN32=1 + endif + + ifeq ($(CPU_ARCH),i386) + CPPFLAGS += -D CPU_ARCH_X86=1 -D CPU_ARCH_ARM=0 + + # Use the more legible Intel dialect for x86, without underscores + CC1FLAGS += -masm=intel + else + CPPFLAGS += -D CPU_ARCH_X86=0 -D CPU_ARCH_ARM=0 + endif +endif + +ifeq ($(PLATFORM),gba) + ASFLAGS += -mcpu=arm7tdmi -mthumb-interwork + CC1FLAGS += -mthumb-interwork +else + ifeq ($(PLATFORM), sdl) + # for modern we are using a modern compiler + # so instead of CPP we can use gcc -E to "preprocess only" + CPP := $(CC1) -E + endif + # Allow file input through stdin on modern GCC and set it to "compile only" + CC1FLAGS += -x c -S +endif + +ifeq ($(DEBUG),1) + CC1FLAGS += -g3 -O0 + CPPFLAGS += -D DEBUG=1 +else + CC1FLAGS += -O2 + CPPFLAGS += -D DEBUG=0 +endif + +ifeq ($(PORTABLE),1) + CPPFLAGS += -D PORTABLE=1 +else + CPPFLAGS += -D PORTABLE=0 +endif + +ifeq ($(TAS_TESTING),1) + CPPFLAGS += -D TAS_TESTING=1 +else + CPPFLAGS += -D TAS_TESTING=0 +endif + +ifeq ($(NON_MATCHING),1) +# TODO: We use "#if(n)def NON_MATCHING a lot, maybe we should switch to "#if (!)NON_MATCHING" +# CPPFLAGS += -D NON_MATCHING=1 +endif + +ifeq ($(ENABLE_DECOMP_CREDITS),0) + CPPFLAGS += -D ENABLE_DECOMP_CREDITS=0 +else + CPPFLAGS += -D ENABLE_DECOMP_CREDITS=1 +endif + +### LINKER FLAGS ### + +# GBA +ifeq ($(PLATFORM),gba) + MAP_FLAG := -Map +# Native +else ifeq ($(PLATFORM),sdl) + ifeq ($(OS), Darwin) + MAP_FLAG := -Wl,-map, + else + MAP_FLAG := -Xlinker -Map= + endif +# Win32 +else + MAP_FLAG := -Xlinker -Map= +endif + +# Libs +ifeq ($(PLATFORM),gba) + LIBS := $(ROOT_DIR)/../tools/agbcc/lib/libgcc.a $(ROOT_DIR)/../tools/agbcc/lib/libc.a $(LIBABGSYSCALL_LIBS) +else ifeq ($(PLATFORM),sdl) + LIBS := $(shell sdl2-config --cflags --libs) +else ifeq ($(PLATFORM),sdl_win32) + LIBS := -mwin32 -lkernel32 -lwinmm -lmingw32 -lxinput $(SDL_MINGW_LIBS) +else ifeq ($(PLATFORM), win32) + LIBS := -mwin32 -lkernel32 -lwinmm -lgdi32 -lxinput -lopengl32 $(LIBABGSYSCALL_LIBS) +endif + +#### MAIN TARGETS #### + +# these commands will run regardless of deps being completed +.PHONY: clean tools tidy clean-tools $(TOOLDIRS) libagbsyscall + +# Ensure required directories exist +$(shell mkdir -p $(C_BUILDDIR) $(ASM_BUILDDIR) $(DATA_ASM_BUILDDIR) $(SOUND_ASM_BUILDDIR) $(SONG_BUILDDIR) $(MID_BUILDDIR)) + +# a special command which ensures that stdout and stderr +# get printed instead of output into the makefile +infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) + +# Build tools when building the rom +# Disable dependency scanning for clean/tidy/tools +ifeq (,$(filter-out all rom compare libagbsyscall,$(MAKECMDGOALS))) +# if we are doing any of these things, build tools first +$(call infoshell, $(MAKE) tools) +# ensure that tools did build +MAKE_TOOLS_OUTCOME=$(shell $(MAKE) tools > /dev/null 2>&1 && echo 0 || echo 1) +ifneq ($(MAKE_TOOLS_OUTCOME),0) + $(error Make tools command failed!) +endif +else +NODEP ?= 1 +endif + +# When not building tools, we should specify this +ifneq ($(NODEP),1) +# MacOS refuses to link the songs data because some pointers +# are not aligned. The music player code reads pointers from raw +# bytes, so they don't need to be aligned. But this is a simple +# work around which tells the compiler not to care. Once we are +# compiling the songs to C, we can cast the pointers to integers +# which means the linker will not notice. +# +# TODO: compile songs to C so that we can work around this. +export MACOSX_DEPLOYMENT_TARGET := 11 +endif + +ifeq ($(PLATFORM),gba) +# Use the old compiler for m4a, as it was prebuilt and statically linked to the original codebase +# PROLOGUE_FIX has to be set to nothing, since -fprologue-bugfix does not work with oldagbcc +$(OBJ_DIR)/sa2/src/lib/m4a/m4a.o: CC1 := $(CC1_OLD) +$(OBJ_DIR)/sa2/src/lib/m4a/m4a.o: PROLOGUE_FIX := +# Use `-O1` for agb_flash libs, as these were also prebuilt +$(C_BUILDDIR)/lib/agb_flash/agb_flash.o: CC1FLAGS := -O1 -mthumb-interwork -Werror +$(OBJ_DIR)/sa2/src/lib/agb_flash/agb_flash%.o: CC1FLAGS := -O1 -mthumb-interwork -Werror +$(C_BUILDDIR)/lib/agb_flash/agb_flash%.o: CC1FLAGS := -O1 -mthumb-interwork -Werror +endif + +#### Main Targets #### + +ifeq ($(PLATFORM),gba) +all: compare + +compare: rom + $(SHA1) $(BUILD_NAME).sha1 +else +all: rom +endif + +rom: $(ROM) + +tools: $(TOOLDIRS) + +tool_libs: + @$(MAKE) -C ../tools/_shared + +clean: tidy clean-tools + @$(MAKE) clean -C ../tools/BriBaSA_ex +# @$(MAKE) clean -C chao_garden +# @$(MAKE) clean -C multi_boot/subgame_bootstrap +# @$(MAKE) clean -C multi_boot/programs/subgame_loader +# @$(MAKE) clean -C multi_boot/collect_rings + @$(MAKE) clean -C ../libagbsyscall PLATFORM=$(PLATFORM) CPU_ARCH=$(CPU_ARCH) + + $(RM) $(SAMPLE_SUBDIR)/*.bin $(MID_SUBDIR)/*.s + find . \( -iwholename './data/maps/*/*/entities/*.bin' -o -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec $(RM) {} + + +clean-tools: + @$(foreach tooldir,$(TOOLDIRS),$(MAKE) clean -C $(tooldir);) + +tidy: + $(RM) -r build/* + #$(RM) SDL2.dll + $(RM) $(BUILD_NAME)*.exe $(BUILD_NAME)*.elf $(BUILD_NAME)*.map $(BUILD_NAME)*.sdl $(BUILD_NAME)*.gba + +japan: ; @$(MAKE) GAME_REGION=JAPAN + +europe: ; @$(MAKE) GAME_REGION=EUROPE + +sdl: ; @$(MAKE) PLATFORM=sdl + +sdl_win32: + @$(MAKE) PLATFORM=sdl_win32 CPU_ARCH=i386 + +win32: ; @$(MAKE) PLATFORM=win32 CPU_ARCH=i386 + +#### RECIPES #### + +include songs.mk +include ../graphics.mk + +%.png: ; +%.pal: ; + +%.1bpp: %.png ; $(GFX) $< $@ +%.4bpp: %.png ; $(GFX) $< $@ +%.8bpp: %.png ; $(GFX) $< $@ +%.gbapal: %.pal ; $(GFX) $< $@ +%.gbapal: %.png ; $(GFX) $< $@ + +chao_garden/mb_chao_garden.gba.lz: chao_garden/mb_chao_garden.gba + $(GFX) $< $@ -search 1 + +data/mb_chao_garden_japan.gba.lz: data/mb_chao_garden_japan.gba + $(GFX) $< $@ -search 1 + +%interactables.bin: %interactables.csv + $(ENT_POS) $< $@ -entities INTERACTABLES -header "./include/constants/interactables.h" + +%itemboxes.bin: %itemboxes.csv + $(ENT_POS) $< $@ -entities ITEMS -header "./include/constants/items.h" + +%enemies.bin: %enemies.csv + $(ENT_POS) $< $@ -entities ENEMIES -header "./include/constants/enemies.h" + +%rings.bin: %rings.csv + $(ENT_POS) $< $@ -entities RINGS + +%.gba.lz: %.gba + $(GFX) $< $@ +%.bin.lz: %.bin + $(GFX) $< $@ + +%.lz: % ; $(GFX) $< $@ +%.rl: % ; $(GFX) $< $@ + +%.bin: %.aif ; $(AIF) $< $@ + +$(ELF): $(OBJS) libagbsyscall +ifeq ($(PLATFORM),gba) + @echo "$(LD) -T $(LDSCRIPT) $(MAP_FLAG) $(MAP) -o $@" + @$(CPP) -P $(CPPFLAGS) $(LDSCRIPT) > $(OBJ_DIR)/$(LDSCRIPT) + @cd $(OBJ_DIR) && $(LD) -T $(LDSCRIPT) $(MAP_FLAG) $(ROOT_DIR)/$(MAP) $(OBJS_REL) $(LIBS) -o $(ROOT_DIR)/$@ +else + @echo "$(CC1) $(MAP_FLAG)$(MAP) -o $@" + @touch $(ROOT_DIR)/$(MAP) + @cd $(OBJ_DIR) && $(CC1) $(MAP_FLAG)$(ROOT_DIR)/$(MAP) $(OBJS_REL) $(LIBS) -o $(ROOT_DIR)/$@ +endif + +$(ROM): $(ELF) +ifeq ($(PLATFORM),gba) + $(OBJCOPY) -O binary --pad-to 0x8400000 $< $@ + $(FIX) $@ -p -t"$(TITLE)" -c$(GAME_CODE) -m$(MAKER_CODE) -r$(GAME_REVISION) --silent +else ifeq ($(PLATFORM),sdl) + cp $< $@ +else + $(OBJCOPY) -O pei-x86-64 $< $@ +endif + +# Copy files from SA2 +$(OBJ_DIR)/sa2/%.c: ../%.c + $(shell mkdir -p $(shell dirname '$@')) + cp $< $@ + +$(OBJ_DIR)/sa2/%.s: ../%.s + $(shell mkdir -p $(shell dirname '$@')) + cp $< $@ + +# TODO: remove once we are building sources from the same makefile +# Build C and ASM sources from SA2 +$(OBJ_DIR)/sa2/%.o: $(OBJ_DIR)/sa2/%.c + @echo "$(CC1) -o $@ $<" + @$(shell mkdir -p $(shell dirname '$(OBJ_DIR)/sa2/$*.i')) + @$(CPP) $(CPPFLAGS) $< -o $(OBJ_DIR)/sa2/$*.i + @$(PREPROC) $(OBJ_DIR)/sa2/$*.i $(PLATFORM) "" | $(CC1) $(PROLOGUE_FIX) $(CC1FLAGS) -o $(OBJ_DIR)/sa2/$*.s - + @printf ".text\n\t.align\t2, 0\n" >> $(OBJ_DIR)/sa2/$*.s + @$(AS) $(ASFLAGS) $(OBJ_DIR)/sa2/$*.s -o $@ + +$(OBJ_DIR)/sa2/%.d: $(OBJ_DIR)/sa2/%.c + @$(shell mkdir -p $(shell dirname '$(OBJ_DIR)/sa2/$*.d')) + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) $< + +$(OBJ_DIR)/sa2/%.o: $(OBJ_DIR)/sa2/%.s + @echo "$(AS) -o $@ $<" + @$(shell mkdir -p $(shell dirname '$(OBJ_DIR)/$*.s')) + @$(AS) $(ASFLAGS) -o $@ $< + +# Build c sources, and ensure alignment +$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c + @echo "$(CC1) -o $@ $<" + @$(shell mkdir -p $(shell dirname '$(C_BUILDDIR)/$*.i')) + @$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i + @$(PREPROC) $(C_BUILDDIR)/$*.i $(PLATFORM) "" | $(CC1) $(PROLOGUE_FIX) $(CC1FLAGS) -o $(C_BUILDDIR)/$*.s - +ifeq ($(PLATFORM), gba) + @printf ".text\n\t.align\t2, 0\n" >> $(C_BUILDDIR)/$*.s +endif + @$(AS) $(ASFLAGS) $(C_BUILDDIR)/$*.s -o $@ + +# Scan the src dependencies to determine if any dependent files have changed +$(C_BUILDDIR)/%.d: $(C_SUBDIR)/%.c + @$(shell mkdir -p $(shell dirname '$(C_BUILDDIR)/$*.d')) + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) $< + +# rule for sources from the src dir (parts of libraries) +$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s + @echo "$(AS) -o $@ $<" + @$(shell mkdir -p $(shell dirname '$(C_BUILDDIR)/$*.s')) + @$(AS) $(ASFLAGS) -o $@ $< + +$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s + @echo "$(AS) -o $@ $<" + @$(PREPROC) $< $(PLATFORM) "" | $(CPP) $(CPPFLAGS) - | $(AS) $(ASFLAGS) -o $@ - + +# Scan the ASM data dependencies to determine if any .inc files have changed +$(DATA_ASM_BUILDDIR)/%.d: $(DATA_ASM_SUBDIR)/%.s + $(SCANINC) -M $@ $(INCLUDE_SCANINC_ARGS) $< + +ifneq ($(NODEP),1) +-include $(addprefix $(OBJ_DIR)/,$(C_SRCS:.c=.d)) +-include $(addprefix $(OBJ_DIR)/,$(DATA_ASM_SRCS:.s=.d)) +endif + +$(SONG_BUILDDIR)/%.o: $(SONG_SUBDIR)/%.s + @echo "$(AS) -o $@ $<" + @$(PREPROC) $< $(PLATFORM) "" | $(CPP) $(CPPFLAGS) - | $(AS) $(ASFLAGS) -o $@ - + +### SUB-PROGRAMS ### + +chao_garden/mb_chao_garden.gba: +ifeq ($(PLATFORM), gba) + @$(MAKE) -C chao_garden DEBUG=0 +else + @echo "Not building on the chao garden rom, as platform is $(PLATFORM)" + @printf "1" > chao_garden/mb_chao_garden.gba +endif + +chao_garden: tools + @$(MAKE) -C chao_garden DEBUG=0 + +# Dependency here is already explicit, but we sometimes get a race condition if this +# is not specified +multi_boot/subgame_bootstrap/subgame_bootstrap.gba: multi_boot/programs/subgame_loader/subgame_loader.bin +ifeq ($(PLATFORM), gba) + @$(MAKE) -C multi_boot/subgame_bootstrap DEBUG=0 +else + @echo "Not building on the subgame bootstrap rom, as platform is $(PLATFORM)" + @printf "1" > multi_boot/subgame_bootstrap/subgame_bootstrap.gba +endif + +multi_boot/programs/subgame_loader/subgame_loader.bin: +ifeq ($(PLATFORM), gba) + @$(MAKE) -C multi_boot/programs/subgame_loader DEBUG=0 +else + @echo "Not building on the subgame loader rom, as platform is $(PLATFORM)" + @printf "1" > multi_boot/programs/subgame_loader/subgame_loader.bin +endif + +multi_boot/collect_rings/mb_signed_collect_rings.gba: +ifeq ($(PLATFORM), gba) + @$(MAKE) -C multi_boot/collect_rings DEBUG=0 +else + @echo "Not building on the collect the rings rom, as platform is $(PLATFORM)" + @printf "1" > multi_boot/collect_rings/mb_signed_collect_rings.gba +endif + +subgame_bootstrap: tools + @$(MAKE) -C multi_boot/subgame_bootstrap DEBUG=0 + +subgame_loader: tools + @$(MAKE) -C multi_boot/programs/subgame_loader DEBUG=0 + +collect_rings: tools + @$(MAKE) -C multi_boot/collect_rings DEBUG=0 + +libagbsyscall: + @$(MAKE) -C ../libagbsyscall MODERN=0 PLATFORM=$(PLATFORM) CPU_ARCH=$(CPU_ARCH) + +bribasa: + @$(MAKE) -C tools/BriBaSA_ex + +$(TOOLDIRS): tool_libs + @$(MAKE) -C $@ + +### DEPS INSTALL COMMANDS ### + +$(SDL_MINGW_LIB): + @mkdir -p ext + cd ext && wget -qO- https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-devel-2.30.3-mingw.zip | bsdtar -xvf- + +SDL2.dll: $(SDL_MINGW_LIB) + cp $(SDL_MINGW_SDL_DLL) SDL2.dll + +### FORMATTER ### + +format: + @echo $(FORMAT) -i -style=file "**/*.c" "**/*.h" + @$(FORMAT) -i --verbose -style=file $(FORMAT_SRC_PATHS) $(FORMAT_H_PATHS) + +check_format: + @echo $(FORMAT) -i -style=file --dry-run --Werror "**/*.c" "**/*.h" + @$(FORMAT) -i --verbose -style=file --dry-run --Werror $(FORMAT_SRC_PATHS) $(FORMAT_H_PATHS) + + +### DECOMP TOOLS ### + +CONTEXT_FLAGS := -DM2C -DPLATFORM_GBA=1 -DGEN_CTX=1 -Dsize_t=int -D "offsetof(TYPE, MEMBER)"="((size_t)&((TYPE *)0)->MEMBER)" + +ctx.c: $(C_HEADERS) + @for header in $(C_HEADERS); do echo "#include \"$$header\""; done > ctx.h + gcc -P -E -dD -undef -I ./tools/agbcc/include -I include $(CONTEXT_FLAGS) ctx.h | sed '/^\/\/ TODO: Remove M2C occurences EVERYWHERE once ctx is not needed anymore!/d' | sed '/#undef/d' | sed '/typedef unsigned long int int;/d' | sed 's/__attribute__((.*))//' | sed '/^#define __STDC/d' > ctx.c diff --git a/sa1/README.md b/sa1/README.md new file mode 100644 index 0000000000..6c3632e50b --- /dev/null +++ b/sa1/README.md @@ -0,0 +1,22 @@ +# Sonic Advance (Europe) + +This is a work in progress matching decompilation of Sonic Advance +

+ CI status + Decompilation Progress + Decompilation Matching Progress + Contributors + Discord +

+ +> :warning: **This project is not completed and still under active development** + +This is a work in progress matching decompilation of Sonic Advance + +It so far builds the following ROM: +* [**sa1.gba**](https://datomatic.no-intro.org/index.php?page=show_record&s=23&n=0330) `sha1: eb00f101af23d728075ac2117e27ecd8a4b4c3e9` (Europe) (En,Ja,Fr,De,Es) + +**Provide assets** + +You must have a copy of the Sonic Advance ROM mentioned above named `baserom_sa1.gba` in the repository's root directory. + diff --git a/sa1/asm/macros.inc b/sa1/asm/macros.inc new file mode 100644 index 0000000000..497a8576b4 --- /dev/null +++ b/sa1/asm/macros.inc @@ -0,0 +1,5 @@ + .include "asm/macros/misc.inc" + + .include "asm/macros/function.inc" + .include "asm/macros/m4a.inc" + .include "asm/macros/music_voice.inc" diff --git a/sa1/asm/macros/animations.inc b/sa1/asm/macros/animations.inc new file mode 100644 index 0000000000..975504937e --- /dev/null +++ b/sa1/asm/macros/animations.inc @@ -0,0 +1,85 @@ +.equ AnimCmd_GetTiles, -1 +.equ AnimCmd_GetPalette, -2 +.equ AnimCmd_JumpBack, -3 +.equ AnimCmd_4, -4 +.equ AnimCmd_PlaySoundEffect, -5 +.equ AnimCmd_6, -6 +.equ AnimCmd_TranslateSprite, -7 +.equ AnimCmd_8, -8 +.equ AnimCmd_SetIdAndVariant, -9 +.equ AnimCmd_10, -10 +.equ AnimCmd_11, -11 +.equ AnimCmd_12, -12 + +.equ NUM_ANIMATION_TABLE_ENTRIES, 1133 + + +.macro mGetTiles tile_index:req, num_tiles_to_copy:req +.4byte AnimCmd_GetTiles + .4byte \tile_index + .4byte \num_tiles_to_copy +.endm + +.macro mGetPalette pal_id:req, num_colors_to_copy:req, insert_offset:req +.4byte AnimCmd_GetPalette + .4byte \pal_id + .2byte \num_colors_to_copy + .2byte \insert_offset +.endm + +.macro mJumpBack offset:req +.4byte AnimCmd_JumpBack + .4byte \offset +.endm + +.macro mAnimCmd4 +.4byte AnimCmd_4 +.endm + +.macro mPlaySoundEffect songId:req +.4byte AnimCmd_PlaySoundEffect + .2byte \songId + .space 2 +.endm + +.macro mAnimCmd6 unk4:req, unk8:req +.4byte AnimCmd_6 + .4byte \unk4 + .4byte \unk8 +.endm + +.macro mTranslateSprite x:req y:req +.4byte AnimCmd_TranslateSprite + .2byte \x + .2byte \y +.endm + +.macro mAnimCmd8 unk4:req, unk8:req +.4byte AnimCmd_8 + .4byte \unk4 + .4byte \unk8 +.endm + +.macro mSetIdAndVariant animId:req, variant:req +.4byte AnimCmd_SetIdAndVariant + .2byte \animId + .2byte \variant +.endm + +.macro mAnimCmd10 unk4:req, unk8:req, unkC:req +.4byte AnimCmd_10 + .4byte \unk4 + .4byte \unk8 + .4byte \unkC +.endm + +.macro mAnimCmd11 unk4:req +.4byte AnimCmd_11 + .4byte \unk4 +.endm + +.macro mAnimCmd12 unk4:req +.4byte AnimCmd_12 + .4byte \unk4 +.endm + diff --git a/sa1/asm/macros/c_decl.inc b/sa1/asm/macros/c_decl.inc new file mode 100644 index 0000000000..72820ce208 --- /dev/null +++ b/sa1/asm/macros/c_decl.inc @@ -0,0 +1,10 @@ +// NOTE: +// For this to work, the file that is including this file HAS to be passed through the C preprocessor before assembling! + +// 32bit Windows and MacOS versions prefix labels using an underscore. +// For interoperability we need to replicate that behavior here. +#if ( (CPU_ARCH_X86 && defined(_WIN32) && !defined(_WIN64)) || defined(__APPLE__) ) + #define C_DECL(label) _##label +#else + #define C_DECL(label) label +#endif diff --git a/sa1/asm/macros/function.inc b/sa1/asm/macros/function.inc new file mode 100644 index 0000000000..f3bcb50f8e --- /dev/null +++ b/sa1/asm/macros/function.inc @@ -0,0 +1,29 @@ + .macro arm_func_start name + .align 2, 0 + .global \name + .arm + .type \name, function + .endm + + .macro arm_func_end name + .size \name, .-\name + .endm + + .macro THUMB_FUNC_START name + .align 2, 0 + .global \name + .thumb + .thumb_func + .type \name, function + .endm + + .macro non_word_aligned_thumb_func_start name + .global \name + .thumb + .thumb_func + .type \name, function + .endm + + .macro thumb_func_end name + .size \name, .-\name + .endm diff --git a/sa1/asm/macros/m4a.inc b/sa1/asm/macros/m4a.inc new file mode 100644 index 0000000000..1e5a98e6d0 --- /dev/null +++ b/sa1/asm/macros/m4a.inc @@ -0,0 +1,13 @@ + .macro song label, music_player, unknown + mPtr \label + .short \music_player + .short \unknown + .endm + + .macro music_player info_struct, track_struct, unknown_1, unknown_2 + mPtr \info_struct + mPtr \track_struct + .byte \unknown_1 + .space 1 + .short \unknown_2 + .endm diff --git a/sa1/asm/macros/maps.inc b/sa1/asm/macros/maps.inc new file mode 100644 index 0000000000..932f90af0a --- /dev/null +++ b/sa1/asm/macros/maps.inc @@ -0,0 +1,17 @@ + +@ TODO: Replace MapHeaders in ASM format with C structs +.macro MapHeader_BG xTiles:req, yTiles:req, animTileSize:req, animFrameCount:req, animDelay:req, tileset:req, num_colors:req, palette:req, palOffset:req, palLength:req, metatiles:req, map:req + .2byte \xTiles, \yTiles + .2byte \animTileSize + .byte \animFrameCount, \animDelay + .4byte \tileset, \num_colors + .4byte \palette + .2byte \palOffset, \palLength + .4byte \metatiles + .4byte \map +.endm + +.macro MapHeader xTiles:req, yTiles:req, animTileSize:req, animFrameCount:req, animDelay:req, tileset:req, num_colors:req, palette:req, palOffset:req, palLength:req, metatiles:req, map:req, width:req, height:req + MapHeader_BG \xTiles, \yTiles, \animTileSize, \animFrameCount, \animDelay, \tileset, \num_colors, \palette, \palOffset, \palLength, \metatiles, \map + .2byte \width, \height +.endm diff --git a/sa1/asm/macros/misc.inc b/sa1/asm/macros/misc.inc new file mode 100644 index 0000000000..99520eea10 --- /dev/null +++ b/sa1/asm/macros/misc.inc @@ -0,0 +1,7 @@ +.macro mDataSize label:req + .size \label, .-\label +.endm + +.macro RGB r:req g:req b:req + .short ((\r << 0) | (\g << 5) | (\b << 10)) +.endm diff --git a/sa1/asm/macros/music_voice.inc b/sa1/asm/macros/music_voice.inc new file mode 100644 index 0000000000..28f8173af3 --- /dev/null +++ b/sa1/asm/macros/music_voice.inc @@ -0,0 +1,125 @@ + .macro voice_directsound base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .byte 0 + _voice_directsound \base_midi_key, \pan, \sample_data_pointer, \attack, \decay, \sustain, \release + .endm + + .macro voice_directsound_no_resample base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .byte 8 + _voice_directsound \base_midi_key, \pan, \sample_data_pointer, \attack, \decay, \sustain, \release + .endm + + .macro voice_directsound_alt base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .byte 16 + _voice_directsound \base_midi_key, \pan, \sample_data_pointer, \attack, \decay, \sustain, \release + .endm + + .macro _voice_directsound base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + .byte \base_midi_key + .byte 0 + .if \pan != 0 + .byte (0x80 | \pan) + .else + .byte 0 + .endif +mAlignWord + mPtr \sample_data_pointer + .byte \attack + .byte \decay + .byte \sustain + .byte \release + .endm + + .macro voice_square_1 sweep, duty_cycle, attack, decay, sustain, release + _voice_square_1 1, \sweep, \duty_cycle, \attack, \decay, \sustain, \release + .endm + + .macro voice_square_1_alt sweep, duty_cycle, attack, decay, sustain, release + _voice_square_1 9, \sweep, \duty_cycle, \attack, \decay, \sustain, \release + .endm + + .macro _voice_square_1 type, sweep, duty_cycle, attack, decay, sustain, release + .byte \type, 60, 0 + .byte \sweep +mAlignWord + .byte (\duty_cycle & 0x3) + .byte 0, 0, 0 +mAlignWord + .byte (\attack & 0x7) + .byte (\decay & 0x7) + .byte (\sustain & 0xF) + .byte (\release & 0x7) + .endm + + .macro voice_square_2 duty_cycle, attack, decay, sustain, release + _voice_square_2 2, \duty_cycle, \attack, \decay, \sustain, \release + .endm + + .macro voice_square_2_alt duty_cycle, attack, decay, sustain, release + _voice_square_2 10, \duty_cycle, \attack, \decay, \sustain, \release + .endm + + .macro _voice_square_2 type, duty_cycle, attack, decay, sustain, release + .byte \type, 60, 0, 0 +mAlignWord + .byte (\duty_cycle & 0x3) + .byte 0, 0, 0 +mAlignWord + .byte (\attack & 0x7) + .byte (\decay & 0x7) + .byte (\sustain & 0xF) + .byte (\release & 0x7) + .endm + + .macro voice_programmable_wave wave_samples_pointer, attack, decay, sustain, release + _voice_programmable_wave 3, \wave_samples_pointer, \attack, \decay, \sustain, \release + .endm + + .macro voice_programmable_wave_alt wave_samples_pointer, attack, decay, sustain, release + _voice_programmable_wave 11, \wave_samples_pointer, \attack, \decay, \sustain, \release + .endm + + .macro _voice_programmable_wave type, wave_samples_pointer, attack, decay, sustain, release + .byte \type, 60, 0, 0 +mAlignWord + mPtr \wave_samples_pointer + .byte (\attack & 0x7) + .byte (\decay & 0x7) + .byte (\sustain & 0xF) + .byte (\release & 0x7) + .endm + + .macro voice_noise unk1, unk2, unk3, period, attack, decay, sustain, release + _voice_noise 4, \unk1, \unk2, \unk3, \period, \attack, \decay, \sustain, \release + .endm + + .macro voice_noise_alt unk1, unk2, unk3, period, attack, decay, sustain, release + _voice_noise 12, \unk1, \unk2, \unk3, \period, \attack, \decay, \sustain, \release + .endm + + .macro _voice_noise type, unk1, unk2, unk3, period, attack, decay, sustain, release + .byte \type, \unk1, \unk2, \unk3 +mAlignWord + .byte (\period & 0x1) + .byte 0, 0, 0 +mAlignWord + .byte (\attack & 0x7) + .byte (\decay & 0x7) + .byte (\sustain & 0xF) + .byte (\release & 0x7) + .endm + + .macro voice_keysplit voice_group_pointer, keysplit_table_pointer +mAlignWord + .byte 0x40, 0, 0, 0 +mAlignWord + mPtr \voice_group_pointer + mPtr \keysplit_table_pointer + .endm + + .macro voice_keysplit_all voice_group_pointer +mAlignWord + .byte 0x80, 0, 0, 0 +mAlignWord + mPtr \voice_group_pointer + mPtr 0 + .endm diff --git a/sa1/asm/macros/portable.inc b/sa1/asm/macros/portable.inc new file mode 100644 index 0000000000..b389fb26a0 --- /dev/null +++ b/sa1/asm/macros/portable.inc @@ -0,0 +1,29 @@ +.macro mSectionRodata +#if (!CPU_ARCH_X86 && defined(__APPLE__)) // On macos, native compilation uses this name for the rodata section + .section __DATA,__data +#else + .section .rodata +#endif +.endm + +// Used so that we can have cross platform (32bit or 64bit) pointers +.macro mPtr value +#if defined(__aarch64__) || defined(__x86_64__) + .quad \value +#else + .int \value +#endif +.endm + +// Used for cross platform aligning of labels +.macro mAlignWord +#if defined(__APPLE__) && (defined(__aarch64__) || defined(__x86_64__)) + .align 3 // Align to 8 bytes on macOS (2^3 = 8) +#elif defined(__aarch64__) || defined(__x86_64__) + .align 8 // Align to 8 bytes on other platforms +#elif defined(PLATFORM_GBA) + .align 2 // Align to 4 bytes on GBA +#else + .align 4 // Default alignment to 4 bytes +#endif +.endm diff --git a/sa1/asm/non_matching/engine/TransformSprite.inc b/sa1/asm/non_matching/engine/TransformSprite.inc new file mode 100644 index 0000000000..4971f1c8db --- /dev/null +++ b/sa1/asm/non_matching/engine/TransformSprite.inc @@ -0,0 +1,307 @@ +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x2c + str r0, [sp, #0x24] + adds r6, r1, #0 + ldr r1, [r0, #0xc] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _080037EC + b _08003A1A +_080037EC: + mov r8, r1 + add r2, sp, #0x20 + ldr r1, [sp, #0x24] + ldr r0, [r1, #0x10] + movs r1, #0x1f + ands r0, r1 + strh r0, [r2] + ldrh r4, [r2] + lsls r4, r4, #5 + ldr r0, _08003984 @ =gOamBuffer+0x6 + adds r4, r4, r0 + subs r2, #0x18 + str r2, [sp, #0x28] + ldr r2, _08003988 @ =gSineTable + ldrh r0, [r6] + ldr r1, _0800398C @ =0x000003FF + ands r1, r0 + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r2 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r7, [sp, #0x28] + strh r0, [r7] + movs r0, #0xa + add r0, sp + mov sl, r0 + lsls r1, r1, #1 + adds r1, r1, r2 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r1, sl + strh r0, [r1] + add r7, sp, #0xc + ldrh r0, [r6, #2] + strh r0, [r7] + movs r2, #0xe + add r2, sp + mov sb, r2 + ldrh r0, [r6, #4] + strh r0, [r2] + movs r5, #0x80 + lsls r5, r5, #9 + ldrh r1, [r7] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + ldr r3, [sp, #0x28] + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4] + ldrh r1, [r7] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + mov r2, sl + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #8] + mov r3, sb + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + mov r2, sl + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + rsbs r1, r1, #0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #0x10] + mov r3, sb + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + ldr r2, [sp, #0x28] + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #0x18] + ldrh r0, [r6, #2] + movs r3, #2 + ldrsh r5, [r6, r3] + cmp r5, #0 + bge _080038D6 + rsbs r0, r0, #0 + strh r0, [r7] +_080038D6: + movs r1, #4 + ldrsh r0, [r6, r1] + ldrh r2, [r6, #4] + mov ip, r2 + cmp r0, #0 + bge _080038EA + mov r3, ip + rsbs r0, r3, #0 + mov r1, sb + strh r0, [r1] +_080038EA: + mov r2, sp + ldr r3, [sp, #0x28] + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r2] + mov r4, sp + adds r4, #2 + mov r0, sl + ldrh r1, [r0] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + rsbs r1, r1, #0 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4] + add r3, sp, #4 + mov r2, sl + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov r7, sb + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r3] + mov r2, sp + adds r2, #6 + ldr r0, [sp, #0x28] + ldrh r1, [r0] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r2] + add r0, sp, #0x18 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + adds r0, #2 + movs r1, #0 + strh r1, [r0] + add r0, sp, #0x1c + strh r1, [r0] + adds r0, #2 + movs r7, #0x80 + lsls r7, r7, #1 + strh r7, [r0] + movs r1, #6 + ldrsh r0, [r6, r1] + str r0, [sp, #0x10] + movs r7, #8 + ldrsh r0, [r6, r7] + str r0, [sp, #0x14] + adds r6, r4, #0 + adds r7, r3, #0 + mov sb, r2 + cmp r5, #0 + ble _08003990 + mov r0, r8 + ldrh r4, [r0, #8] + ldrh r2, [r0, #4] + b _0800399E + .align 2, 0 +_08003984: .4byte gOamBuffer+0x6 +_08003988: .4byte gSineTable +_0800398C: .4byte 0x000003FF +_08003990: + mov r2, r8 + ldrh r1, [r2, #4] + ldrh r0, [r2, #8] + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + adds r2, r1, #0 +_0800399E: + mov r3, ip + lsls r0, r3, #0x10 + cmp r0, #0 + ble _080039AE + mov r0, r8 + ldrh r3, [r0, #0xa] + ldrh r5, [r0, #6] + b _080039BC +_080039AE: + mov r3, r8 + ldrh r1, [r3, #6] + ldrh r0, [r3, #0xa] + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + adds r5, r1, #0 +_080039BC: + mov r0, sp + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + lsls r4, r4, #0x10 + asrs r4, r4, #0x10 + lsrs r2, r2, #1 + subs r4, r4, r2 + adds r1, r0, #0 + muls r1, r4, r1 + ldrh r0, [r6] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + lsls r3, r3, #0x10 + asrs r3, r3, #0x10 + lsrs r5, r5, #1 + subs r3, r3, r5 + muls r0, r3, r0 + adds r1, r1, r0 + lsls r2, r2, #8 + adds r1, r1, r2 + asrs r1, r1, #8 + ldr r0, [sp, #0x10] + subs r0, r0, r1 + str r0, [sp, #0x10] + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r0, #0 + muls r1, r4, r1 + mov r7, sb + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r3, r0 + adds r1, r1, r0 + lsls r5, r5, #8 + adds r1, r1, r5 + asrs r1, r1, #8 + ldr r0, [sp, #0x14] + subs r0, r0, r1 + str r0, [sp, #0x14] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x24] + strh r0, [r1, #0x16] + ldr r0, [sp, #0x14] + strh r0, [r1, #0x18] +_08003A1A: + add sp, #0x2c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/engine/UnusedTransform.inc b/sa1/asm/non_matching/engine/UnusedTransform.inc new file mode 100644 index 0000000000..1d64d00823 --- /dev/null +++ b/sa1/asm/non_matching/engine/UnusedTransform.inc @@ -0,0 +1,428 @@ +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x3c + str r0, [sp, #0x24] + adds r7, r1, #0 + ldr r1, [r0, #0xc] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08003A48 + b _08003D74 +_08003A48: + mov sb, r1 + add r2, sp, #0x20 + ldr r1, [sp, #0x24] + ldr r0, [r1, #0x10] + movs r1, #0x1f + ands r0, r1 + strh r0, [r2] + ldrh r4, [r2] + lsls r4, r4, #5 + ldr r0, _08003CC8 @ =gOamBuffer+0x6 + adds r4, r4, r0 + subs r2, #0x18 + str r2, [sp, #0x28] + ldrh r0, [r7] + ldr r3, _08003CCC @ =sa2__gUnknown_03001944 + ldrh r1, [r3] + adds r0, r0, r1 + ldr r2, _08003CD0 @ =0x000003FF + ands r0, r2 + movs r5, #0x80 + lsls r5, r5, #1 + adds r0, r0, r5 + lsls r0, r0, #1 + ldr r6, _08003CD4 @ =gSineTable + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [sp, #0x28] + strh r0, [r1] + movs r3, #0xa + add r3, sp + mov r8, r3 + ldrh r0, [r7] + ldr r5, _08003CCC @ =sa2__gUnknown_03001944 + ldrh r1, [r5] + adds r0, r0, r1 + ands r0, r2 + lsls r0, r0, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + strh r0, [r3] + add r6, sp, #0xc + movs r0, #2 + ldrsh r1, [r7, r0] + ldr r2, _08003CD8 @ =sa2__gUnknown_030017F0 + ldrh r0, [r2] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r6] + movs r3, #0xe + add r3, sp + mov sl, r3 + movs r5, #4 + ldrsh r1, [r7, r5] + ldr r2, _08003CDC @ =sa2__gUnknown_03005394 + ldrh r0, [r2] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r3] + movs r5, #0x80 + lsls r5, r5, #9 + ldrh r1, [r6] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + ldr r3, [sp, #0x28] + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4] + ldrh r1, [r6] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + mov r2, r8 + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #8] + mov r3, sl + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + mov r2, r8 + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + rsbs r1, r1, #0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #0x10] + mov r3, sl + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + ldr r5, [sp, #0x28] + ldrh r1, [r5] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #0x18] + movs r1, #2 + ldrsh r0, [r7, r1] + str r0, [sp, #0x2c] + cmp r0, #0 + bge _08003B60 + movs r2, #2 + ldrsh r0, [r7, r2] + rsbs r0, r0, #0 + ldr r3, _08003CD8 @ =sa2__gUnknown_030017F0 + ldrh r1, [r3] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r6] +_08003B60: + movs r4, #4 + ldrsh r0, [r7, r4] + ldr r5, _08003CDC @ =sa2__gUnknown_03005394 + ldrh r3, [r5] + ldrh r2, [r7, #4] + mov r1, sp + strh r2, [r1, #0x34] + cmp r0, #0 + bge _08003B84 + movs r4, #4 + ldrsh r0, [r7, r4] + rsbs r0, r0, #0 + muls r0, r3, r0 + asrs r0, r0, #8 + mov r5, sl + strh r0, [r5] + ldr r0, _08003CDC @ =sa2__gUnknown_03005394 + ldrh r3, [r0] +_08003B84: + mov r2, sp + ldr r4, [sp, #0x28] + ldrh r1, [r4] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r0, [r6] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r2] + mov r5, sp + adds r5, #2 + str r5, [sp, #0x30] + mov r0, r8 + ldrh r1, [r0] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + rsbs r1, r1, #0 + ldrh r0, [r6] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r5] + add r1, sp, #4 + mov ip, r1 + mov r2, r8 + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov r4, sl + ldrh r0, [r4] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + mov r5, ip + strh r0, [r5] + mov r6, sp + adds r6, #6 + str r6, [sp, #0x38] + ldr r0, [sp, #0x28] + ldrh r1, [r0] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r0, [r4] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r6] + add r5, sp, #0x18 + ldr r1, _08003CCC @ =sa2__gUnknown_03001944 + ldrh r0, [r1] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + ldr r4, _08003CD4 @ =gSineTable + adds r0, r0, r4 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r6, _08003CD8 @ =sa2__gUnknown_030017F0 + ldrh r1, [r6] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r5] + mov r2, sp + adds r2, #0x1a + ldr r1, _08003CCC @ =sa2__gUnknown_03001944 + ldrh r0, [r1] + lsls r0, r0, #1 + adds r0, r0, r4 + movs r4, #0 + ldrsh r0, [r0, r4] + rsbs r0, r0, #0 + asrs r0, r0, #6 + ldrh r1, [r6] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r2] + add r4, sp, #0x1c + ldr r6, _08003CCC @ =sa2__gUnknown_03001944 + ldrh r0, [r6] + lsls r0, r0, #1 + ldr r1, _08003CD4 @ =gSineTable + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r3, r0 + asrs r0, r0, #8 + strh r0, [r4] + mov r3, sp + adds r3, #0x1e + ldrh r0, [r6] + movs r6, #0x80 + lsls r6, r6, #1 + adds r0, r0, r6 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r6, _08003CDC @ =sa2__gUnknown_03005394 + ldrh r1, [r6] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r3] + ldrh r0, [r5] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r5, #6 + ldrsh r1, [r7, r5] + muls r1, r0, r1 + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r6, #8 + ldrsh r2, [r7, r6] + muls r0, r2, r0 + adds r1, r1, r0 + ldr r0, _08003CE0 @ =sa2__gUnknown_0300194C + movs r2, #0 + ldrsh r0, [r0, r2] + lsls r0, r0, #8 + adds r1, r1, r0 + asrs r1, r1, #8 + str r1, [sp, #0x10] + ldrh r0, [r4] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r4, #6 + ldrsh r1, [r7, r4] + muls r1, r0, r1 + ldrh r0, [r3] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r5, #8 + ldrsh r2, [r7, r5] + muls r0, r2, r0 + adds r1, r1, r0 + ldr r0, _08003CE4 @ =sa2__gUnknown_03002820 + movs r6, #0 + ldrsh r0, [r0, r6] + lsls r0, r0, #8 + adds r1, r1, r0 + asrs r1, r1, #8 + str r1, [sp, #0x14] + ldr r7, [sp, #0x30] + mov r8, ip + ldr r6, [sp, #0x38] + ldr r0, [sp, #0x2c] + cmp r0, #0 + ble _08003CE8 + mov r1, sb + ldrh r4, [r1, #8] + ldrh r2, [r1, #4] + b _08003CF6 + .align 2, 0 +_08003CC8: .4byte gOamBuffer+0x6 +_08003CCC: .4byte sa2__gUnknown_03001944 +_08003CD0: .4byte 0x000003FF +_08003CD4: .4byte gSineTable +_08003CD8: .4byte sa2__gUnknown_030017F0 +_08003CDC: .4byte sa2__gUnknown_03005394 +_08003CE0: .4byte sa2__gUnknown_0300194C +_08003CE4: .4byte sa2__gUnknown_03002820 +_08003CE8: + mov r2, sb + ldrh r1, [r2, #4] + ldrh r0, [r2, #8] + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + adds r2, r1, #0 +_08003CF6: + mov r3, sp + ldrh r3, [r3, #0x34] + lsls r0, r3, #0x10 + cmp r0, #0 + ble _08003D08 + mov r5, sb + ldrh r3, [r5, #0xa] + ldrh r5, [r5, #6] + b _08003D16 +_08003D08: + mov r0, sb + ldrh r1, [r0, #6] + ldrh r0, [r0, #0xa] + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + adds r5, r1, #0 +_08003D16: + mov r0, sp + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + lsls r4, r4, #0x10 + asrs r4, r4, #0x10 + lsrs r2, r2, #1 + subs r4, r4, r2 + adds r1, r0, #0 + muls r1, r4, r1 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + lsls r3, r3, #0x10 + asrs r3, r3, #0x10 + lsrs r5, r5, #1 + subs r3, r3, r5 + muls r0, r3, r0 + adds r1, r1, r0 + lsls r2, r2, #8 + adds r1, r1, r2 + asrs r1, r1, #8 + ldr r0, [sp, #0x10] + subs r0, r0, r1 + str r0, [sp, #0x10] + mov r1, r8 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r0, #0 + muls r1, r4, r1 + ldrh r0, [r6] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r3, r0 + adds r1, r1, r0 + lsls r5, r5, #8 + adds r1, r1, r5 + asrs r1, r1, #8 + ldr r0, [sp, #0x14] + subs r0, r0, r1 + str r0, [sp, #0x14] + ldr r0, [sp, #0x10] + ldr r2, [sp, #0x24] + strh r0, [r2, #0x16] + ldr r0, [sp, #0x14] + strh r0, [r2, #0x18] +_08003D74: + add sp, #0x3c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/engine/sa2__sub_8002B20.inc b/sa1/asm/non_matching/engine/sa2__sub_8002B20.inc new file mode 100644 index 0000000000..b9560e9520 --- /dev/null +++ b/sa1/asm/non_matching/engine/sa2__sub_8002B20.inc @@ -0,0 +1,1476 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x40 + movs r0, #0 + str r0, [sp, #4] + ldr r0, _08001ADC @ =gBackgroundsCopyQueueCursor + ldr r1, _08001AE0 @ =gBackgroundsCopyQueueIndex + ldrb r2, [r0] + adds r3, r0, #0 + adds r4, r1, #0 + ldrb r1, [r4] + cmp r2, r1 + bne _08001AC8 + bl _0800258C +_08001AC8: + ldr r0, _08001AE4 @ =0x04000004 + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _08001AE8 + movs r0, #0 + bl sub_800258E + .align 2, 0 +_08001ADC: .4byte gBackgroundsCopyQueueCursor +_08001AE0: .4byte gBackgroundsCopyQueueIndex +_08001AE4: .4byte 0x04000004 +_08001AE8: + ldr r0, _08001B48 @ =0x04000006 + ldrh r0, [r0] + ldr r2, _08001B4C @ =gBackgroundsCopyQueue + ldrb r1, [r3] + lsls r0, r1, #2 + adds r0, r0, r2 + ldr r6, [r0] + adds r1, #1 + movs r0, #0xf + ands r1, r0 + strb r1, [r3] + ldrh r2, [r6, #0x2e] + movs r0, #0x20 + ands r0, r2 + cmp r0, #0 + beq _08001B14 + ldr r1, [r6, #0x30] + ldr r0, [r6, #0x34] + cmp r1, r0 + bne _08001B14 + bl _8002580 +_08001B14: + ldrh r3, [r6, #0x14] + str r3, [sp] + movs r3, #3 + adds r5, r3, #0 + ands r5, r2 + ldr r4, [sp] + cmp r5, #1 + bls _08001B58 + ldr r0, _08001B50 @ =gDispCnt + ldrh r1, [r0] + adds r0, r3, #0 + ands r0, r1 + cmp r0, #0 + beq _08001B58 + ldr r1, _08001B54 @ =gBgCntRegs + lsls r0, r5, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsrs r3, r0, #0xe + movs r0, #0x80 + lsls r0, r0, #0xd + lsls r0, r3 + lsrs r0, r0, #0x10 + str r0, [sp, #0xc] + movs r0, #1 + b _08001B76 + .align 2, 0 +_08001B48: .4byte 0x04000006 +_08001B4C: .4byte gBackgroundsCopyQueue +_08001B50: .4byte gDispCnt +_08001B54: .4byte gBgCntRegs +_08001B58: + movs r1, #0x20 + str r1, [sp, #0xc] + ldr r0, _08001C48 @ =gBgCntRegs + lsls r1, r5, #1 + adds r1, r1, r0 + ldrh r0, [r1] + lsrs r3, r0, #0xe + cmp r3, #1 + beq _08001B6E + cmp r3, #3 + bne _08001B74 +_08001B6E: + movs r2, #0x80 + lsls r2, r2, #4 + str r2, [sp, #4] +_08001B74: + movs r0, #2 +_08001B76: + str r0, [sp, #8] + ldr r1, [sp, #0xc] + ldr r2, [sp, #8] + adds r0, r1, #0 + muls r0, r2, r0 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0xc] + ldrh r2, [r6, #0x2e] + movs r0, #0x20 + mov sb, r0 + ands r0, r2 + cmp r0, #0 + beq _08001B94 + b _08001F60 +_08001B94: + movs r0, #0x40 + ands r0, r2 + cmp r0, #0 + beq _08001B9E + b _08001E50 +_08001B9E: + ldrh r0, [r6, #0x24] + ldr r1, [sp, #0xc] + muls r0, r1, r0 + ldr r1, [r6, #0xc] + adds r1, r1, r0 + ldrh r5, [r6, #0x22] + mov r8, r5 + ldr r5, [sp, #8] + mov r0, r8 + muls r0, r5, r0 + adds r7, r1, r0 + ldrh r5, [r6, #0x28] + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r1, #0 + ands r0, r2 + cmp r0, #0 + bne _08001BC4 + b _08001CCC +_08001BC4: + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + beq _08001C50 + ldrh r0, [r6, #0x20] + adds r0, r0, r5 + subs r0, #1 + muls r0, r4, r0 + ldr r2, [sp, #8] + muls r0, r2, r0 + ldr r2, [r6, #0x10] + adds r2, r2, r0 + ldrh r0, [r6, #0x1e] + ldrh r1, [r6, #0x26] + adds r0, r0, r1 + subs r0, #1 + ldr r3, [sp, #8] + muls r0, r3, r0 + adds r4, r2, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, _08001C4C @ =0x0000FFFF + cmp r5, r0 + bne _08001BFA + bl _08002570 +_08001BFA: + ldr r2, [sp] + adds r1, r2, #0 + muls r1, r3, r1 + mov sb, r1 + mov sl, r0 +_08001C04: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _08001C36 + movs r0, #0xc0 + lsls r0, r0, #4 + mov r8, r0 +_08001C18: + lsls r0, r3, #1 + adds r1, r0, r7 + mov ip, r1 + subs r0, r4, r0 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + mov r1, ip + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _08001C18 +_08001C36: + adds r7, r2, #0 + mov r1, sb + subs r4, r4, r1 + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, sl + bne _08001C04 + bl _08002570 + .align 2, 0 +_08001C48: .4byte gBgCntRegs +_08001C4C: .4byte 0x0000FFFF +_08001C50: + ldrh r0, [r6, #0x20] + muls r0, r4, r0 + ldr r2, [sp, #8] + muls r0, r2, r0 + ldr r2, [r6, #0x10] + adds r2, r2, r0 + ldrh r0, [r6, #0x1e] + ldrh r1, [r6, #0x26] + adds r0, r0, r1 + subs r0, #1 + ldr r3, [sp, #8] + muls r0, r3, r0 + adds r4, r2, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, _08001CC8 @ =0x0000FFFF + cmp r5, r0 + bne _08001C7A + bl _08002570 +_08001C7A: + ldr r2, [sp] + adds r1, r2, #0 + muls r1, r3, r1 + mov sb, r1 + mov sl, r0 +_08001C84: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _08001CB6 + movs r0, #0x80 + lsls r0, r0, #3 + mov r8, r0 +_08001C98: + lsls r0, r3, #1 + adds r1, r0, r7 + mov ip, r1 + subs r0, r4, r0 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + mov r1, ip + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _08001C98 +_08001CB6: + adds r7, r2, #0 + add r4, sb + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, sl + bne _08001C84 + bl _08002570 + .align 2, 0 +_08001CC8: .4byte 0x0000FFFF +_08001CCC: + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + beq _08001D50 + ldrh r0, [r6, #0x20] + adds r0, r0, r5 + subs r0, #1 + muls r0, r4, r0 + ldr r1, [sp, #8] + muls r0, r1, r0 + ldr r1, [r6, #0x10] + adds r1, r1, r0 + ldrh r0, [r6, #0x1e] + ldr r2, [sp, #8] + muls r0, r2, r0 + adds r4, r1, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r3, _08001D4C @ =0x0000FFFF + cmp r5, r3 + bne _08001CFC + bl _08002570 +_08001CFC: + ldr r1, [sp] + adds r0, r1, #0 + muls r0, r2, r0 + mov sb, r0 + mov sl, r3 +_08001D06: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _08001D38 + movs r0, #0x80 + lsls r0, r0, #4 + mov r8, r0 +_08001D1A: + lsls r0, r3, #1 + adds r1, r0, r7 + mov ip, r1 + adds r0, r0, r4 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + mov r1, ip + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _08001D1A +_08001D38: + adds r7, r2, #0 + mov r1, sb + subs r4, r4, r1 + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, sl + bne _08001D06 + bl _08002570 + .align 2, 0 +_08001D4C: .4byte 0x0000FFFF +_08001D50: + movs r0, #1 + ands r3, r0 + cmp r3, #0 + beq _08001DF0 + ldr r2, [sp, #8] + cmp r2, #2 + bne _08001DF0 + mov r3, sb + mov r0, r8 + subs r3, r3, r0 + cmp r3, #0 + ble _08001DF0 + ldrh r0, [r6, #0x26] + add r0, r8 + adds r2, r0, #0 + subs r2, #0x20 + cmp r2, #0 + ble _08001DF0 + ldrh r0, [r6, #0x20] + muls r0, r4, r0 + lsls r0, r0, #1 + ldr r1, [r6, #0x10] + adds r1, r1, r0 + ldrh r0, [r6, #0x1e] + lsls r0, r0, #1 + adds r4, r1, r0 + lsls r3, r3, #1 + mov sb, r3 + lsls r2, r2, #1 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r1, _08001DE8 @ =0x0000FFFF + cmp r5, r1 + bne _08001D98 + b _08002570 +_08001D98: + ldr r1, _08001DEC @ =0x040000D4 + asrs r3, r3, #1 + movs r0, #0x80 + lsls r0, r0, #0x18 + orrs r3, r0 + mov r8, r3 + asrs r2, r2, #1 + mov ip, r2 + orrs r2, r0 + mov ip, r2 +_08001DAC: + str r4, [r1] + str r7, [r1, #4] + mov r3, r8 + str r3, [r1, #8] + ldr r0, [r1, #8] + adds r0, r4, #0 + add r0, sb + str r0, [r1] + ldr r2, [sp, #4] + adds r2, r2, r7 + str r2, [r1, #4] + mov r3, ip + str r3, [r1, #8] + ldr r0, [r1, #8] + ldr r0, [sp, #0xc] + adds r7, r7, r0 + ldr r3, [sp] + ldr r0, [sp, #8] + adds r2, r3, #0 + muls r2, r0, r2 + mov sl, r2 + add r4, sl + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r2, _08001DE8 @ =0x0000FFFF + cmp r5, r2 + bne _08001DAC + b _08002570 + .align 2, 0 +_08001DE8: .4byte 0x0000FFFF +_08001DEC: .4byte 0x040000D4 +_08001DF0: + ldrh r0, [r6, #0x20] + muls r0, r4, r0 + ldr r3, [sp, #8] + muls r0, r3, r0 + ldr r1, [r6, #0x10] + adds r1, r1, r0 + ldrh r0, [r6, #0x1e] + muls r0, r3, r0 + adds r4, r1, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, _08001E48 @ =0x0000FFFF + cmp r5, r0 + bne _08001E10 + b _08002570 +_08001E10: + ldr r1, _08001E4C @ =0x040000D4 + movs r2, #0x80 + lsls r2, r2, #0x18 + mov r8, r2 + mov sb, r0 + ldr r0, [sp] + adds r2, r0, #0 + muls r2, r3, r2 +_08001E20: + str r4, [r1] + str r7, [r1, #4] + ldrh r0, [r6, #0x26] + ldr r3, [sp, #8] + muls r0, r3, r0 + asrs r0, r0, #1 + mov r3, r8 + orrs r0, r3 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldr r0, [sp, #0xc] + adds r7, r7, r0 + adds r4, r4, r2 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + cmp r5, sb + bne _08001E20 + b _08002570 + .align 2, 0 +_08001E48: .4byte 0x0000FFFF +_08001E4C: .4byte 0x040000D4 +_08001E50: + ldrh r1, [r6, #0x1e] + str r1, [sp, #0x10] + ldrh r2, [r6, #0x20] + str r2, [sp, #0x14] + movs r3, #0 + mov sl, r3 + ldrh r4, [r6, #0x26] + cmp sl, r4 + blt _08001E64 + b _08002570 +_08001E64: + ldr r4, [sp, #0x10] + add r4, sl + ldrh r1, [r6, #0x14] + adds r0, r4, #0 + bl Div + str r0, [sp, #0x18] + ldrh r1, [r6, #0x14] + adds r5, r0, #0 + adds r0, r5, #0 + muls r0, r1, r0 + subs r4, r4, r0 + str r4, [sp, #0x1c] + ldrh r0, [r6, #0x28] + mov r8, r0 + ldrh r0, [r6, #0x26] + mov r2, sl + subs r0, r0, r2 + subs r1, r1, r4 + cmp r1, r0 + ble _08001E90 + adds r1, r0, #0 +_08001E90: + ldr r4, [sp, #8] + adds r3, r1, #0 + muls r3, r4, r3 + str r3, [sp, #0x20] + movs r5, #0 + mov sb, r5 + add r1, sl + str r1, [sp, #0x38] + cmp sb, r8 + bge _08001F50 +_08001EA4: + ldr r4, [sp, #0x14] + add r4, sb + ldrh r1, [r6, #0x16] + adds r0, r4, #0 + bl Div + ldrh r3, [r6, #0x16] + adds r1, r0, #0 + muls r1, r3, r1 + subs r4, r4, r1 + subs r5, r3, r4 + ldrh r1, [r6, #0x3c] + muls r1, r0, r1 + ldr r0, [r6, #0x38] + adds r0, r0, r1 + ldr r1, [sp, #0x18] + adds r0, r0, r1 + ldrb r0, [r0] + ldrh r2, [r6, #0x14] + muls r0, r2, r0 + adds r1, r0, #0 + muls r1, r3, r1 + adds r0, r4, #0 + muls r0, r2, r0 + ldr r2, [sp, #0x1c] + adds r0, r0, r2 + adds r1, r1, r0 + ldr r3, [sp, #8] + muls r1, r3, r1 + ldr r0, [r6, #0x10] + adds r4, r0, r1 + ldrh r1, [r6, #0x24] + ldr r0, [r6, #0xc] + adds r0, r0, r1 + ldr r2, [sp, #0xc] + mov r1, sb + muls r1, r2, r1 + adds r0, r0, r1 + ldrh r3, [r6, #0x22] + adds r0, r0, r3 + ldr r2, [sp, #8] + mov r1, sl + muls r1, r2, r1 + adds r7, r0, r1 + add sb, r5 + cmp r5, r8 + ble _08001F04 + mov r5, r8 +_08001F04: + mov r3, r8 + subs r3, r3, r5 + mov r8, r3 + adds r0, r5, #0 + subs r5, #1 + cmp r0, #0 + beq _08001F4A + ldr r3, _08001F5C @ =0x040000D4 + ldr r1, [sp, #0x20] + lsrs r0, r1, #0x1f + adds r0, r1, r0 + asrs r0, r0, #1 + str r0, [sp, #0x3c] + movs r0, #0x80 + lsls r0, r0, #0x18 + ldr r2, [sp, #0x3c] + orrs r2, r0 + str r2, [sp, #0x3c] + ldr r1, [sp] + ldr r2, [sp, #8] + adds r0, r1, #0 + muls r0, r2, r0 + mov ip, r0 +_08001F32: + str r4, [r3] + str r7, [r3, #4] + ldr r0, [sp, #0x3c] + str r0, [r3, #8] + ldr r0, [r3, #8] + ldr r1, [sp, #0xc] + adds r7, r7, r1 + add r4, ip + adds r0, r5, #0 + subs r5, #1 + cmp r0, #0 + bne _08001F32 +_08001F4A: + ldrh r2, [r6, #0x28] + cmp sb, r2 + blt _08001EA4 +_08001F50: + ldr r3, [sp, #0x38] + mov sl, r3 + ldrh r4, [r6, #0x26] + cmp sl, r4 + blt _08001E64 + b _08002570 + .align 2, 0 +_08001F5C: .4byte 0x040000D4 +_08001F60: + movs r0, #0x40 + ands r0, r2 + ldrh r3, [r6, #0x30] + ldr r1, _08002030 @ =gBgScrollRegs + mov sb, r1 + lsls r5, r5, #2 + mov r8, r5 + cmp r0, #0 + bne _08001FAC + adds r2, r4, #0 + lsls r0, r4, #3 + ldrh r5, [r6, #0x16] + ldrh r7, [r6, #0x32] + cmp r3, r0 + blt _08001F90 +_08001F7E: + lsls r1, r2, #3 + ldrh r0, [r6, #0x30] + subs r0, r0, r1 + strh r0, [r6, #0x30] + ldrh r1, [r6, #0x30] + adds r2, r4, #0 + lsls r0, r4, #3 + cmp r1, r0 + bge _08001F7E +_08001F90: + adds r2, r5, #0 + lsls r0, r2, #3 + ldrh r3, [r6, #0x30] + cmp r7, r0 + blt _08001FAC +_08001F9A: + lsls r1, r2, #3 + ldrh r0, [r6, #0x32] + subs r0, r0, r1 + strh r0, [r6, #0x32] + ldrh r1, [r6, #0x32] + adds r2, r5, #0 + lsls r0, r2, #3 + cmp r1, r0 + bge _08001F9A +_08001FAC: + mov r0, r8 + add r0, sb + movs r2, #7 + ands r3, r2 + strh r3, [r0] + mov r1, sb + adds r1, #2 + add r1, r8 + ldrh r0, [r6, #0x32] + ands r0, r2 + strh r0, [r1] + ldrh r0, [r6, #0x34] + ldrh r4, [r6, #0x30] + lsrs r2, r4, #3 + lsrs r0, r0, #3 + cmp r0, r2 + bne _08001FDC + ldrh r1, [r6, #0x36] + ldrh r0, [r6, #0x32] + lsrs r1, r1, #3 + lsrs r0, r0, #3 + cmp r1, r0 + bne _08001FDC + b _08002570 +_08001FDC: + ldrh r1, [r6, #0x2e] + movs r0, #0x40 + ands r0, r1 + adds r3, r1, #0 + cmp r0, #0 + beq _08001FEA + b _08002454 +_08001FEA: + ldrh r0, [r6, #0x1e] + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x10] + ldrh r0, [r6, #0x32] + lsrs r0, r0, #3 + ldrh r2, [r6, #0x20] + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x14] + ldrh r0, [r6, #0x24] + ldr r4, [sp, #0xc] + muls r0, r4, r0 + ldr r1, [r6, #0xc] + adds r1, r1, r0 + ldrh r0, [r6, #0x22] + ldr r5, [sp, #8] + muls r0, r5, r0 + adds r7, r1, r0 + ldrh r0, [r6, #0x26] + ldr r1, [sp, #0x10] + adds r2, r1, r0 + adds r1, r2, #1 + ldrh r4, [r6, #0x14] + mov r8, r0 + cmp r1, r4 + ble _08002034 + subs r0, r4, #1 + subs r0, r2, r0 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + b _08002036 + .align 2, 0 +_08002030: .4byte gBgScrollRegs +_08002034: + movs r2, #0 +_08002036: + ldrh r0, [r6, #0x28] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r1, #0 + ands r0, r3 + cmp r0, #0 + bne _0800204C + b _08002148 +_0800204C: + movs r0, #0x80 + ands r0, r3 + cmp r0, #0 + beq _080020D0 + ldrh r0, [r6, #0x20] + adds r0, r0, r5 + subs r0, #1 + muls r0, r4, r0 + ldr r3, [sp, #8] + muls r0, r3, r0 + ldr r1, [r6, #0x10] + adds r1, r1, r0 + ldrh r0, [r6, #0x1e] + add r0, r8 + subs r0, #1 + muls r0, r3, r0 + adds r4, r1, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + lsls r2, r2, #0x10 + mov sl, r2 + ldr r0, _080020CC @ =0x0000FFFF + cmp r5, r0 + bne _08002080 + b _0800223C +_08002080: + ldr r2, [sp] + adds r1, r2, #0 + muls r1, r3, r1 + mov sb, r1 + mov ip, r0 +_0800208A: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _080020BC + movs r0, #0xc0 + lsls r0, r0, #4 + mov r8, r0 +_0800209E: + lsls r0, r3, #1 + adds r1, r0, r7 + str r1, [sp, #0x3c] + subs r0, r4, r0 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + ldr r1, [sp, #0x3c] + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _0800209E +_080020BC: + adds r7, r2, #0 + mov r1, sb + subs r4, r4, r1 + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, ip + bne _0800208A + b _0800223C + .align 2, 0 +_080020CC: .4byte 0x0000FFFF +_080020D0: + ldrh r0, [r6, #0x20] + muls r0, r4, r0 + ldr r3, [sp, #8] + muls r0, r3, r0 + ldr r1, [r6, #0x10] + adds r1, r1, r0 + ldrh r0, [r6, #0x1e] + add r0, r8 + subs r0, #1 + muls r0, r3, r0 + adds r4, r1, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + lsls r2, r2, #0x10 + mov sl, r2 + ldr r0, _08002144 @ =0x0000FFFF + cmp r5, r0 + bne _080020F8 + b _0800223C +_080020F8: + ldr r2, [sp] + adds r1, r2, #0 + muls r1, r3, r1 + mov sb, r1 + mov ip, r0 +_08002102: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _08002134 + movs r0, #0x80 + lsls r0, r0, #3 + mov r8, r0 +_08002116: + lsls r0, r3, #1 + adds r1, r0, r7 + str r1, [sp, #0x3c] + subs r0, r4, r0 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + ldr r1, [sp, #0x3c] + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _08002116 +_08002134: + adds r7, r2, #0 + add r4, sb + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, ip + bne _08002102 + b _0800223C + .align 2, 0 +_08002144: .4byte 0x0000FFFF +_08002148: + movs r0, #0x80 + ands r0, r3 + cmp r0, #0 + beq _080021CC + ldr r1, [sp, #0x14] + adds r0, r1, r5 + subs r0, #1 + muls r0, r4, r0 + ldr r3, [sp, #8] + adds r1, r0, #0 + muls r1, r3, r1 + ldr r0, [r6, #0x10] + adds r0, r0, r1 + ldr r4, [sp, #0x10] + adds r1, r4, #0 + muls r1, r3, r1 + adds r4, r0, r1 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + lsls r2, r2, #0x10 + mov sl, r2 + ldr r0, _080021C8 @ =0x0000FFFF + cmp r5, r0 + beq _0800223C + ldr r2, [sp] + adds r1, r2, #0 + muls r1, r3, r1 + mov sb, r1 + mov ip, r0 +_08002184: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _080021B6 + movs r0, #0x80 + lsls r0, r0, #4 + mov r8, r0 +_08002198: + lsls r0, r3, #1 + adds r1, r0, r7 + str r1, [sp, #0x3c] + adds r0, r0, r4 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + ldr r1, [sp, #0x3c] + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _08002198 +_080021B6: + adds r7, r2, #0 + mov r1, sb + subs r4, r4, r1 + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, ip + bne _08002184 + b _0800223C + .align 2, 0 +_080021C8: .4byte 0x0000FFFF +_080021CC: + ldr r3, [sp, #0x14] + adds r0, r3, #0 + muls r0, r4, r0 + ldr r4, [sp, #8] + adds r1, r0, #0 + muls r1, r4, r1 + ldr r0, [r6, #0x10] + adds r0, r0, r1 + ldr r3, [sp, #0x10] + adds r1, r3, #0 + muls r1, r4, r1 + adds r4, r0, r1 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + lsls r2, r2, #0x10 + mov sl, r2 + ldr r0, _080022F0 @ =0x0000FFFF + cmp r5, r0 + beq _0800223C + ldr r2, _080022F4 @ =0x040000D4 + mov r1, sl + asrs r0, r1, #0x10 + subs r0, #1 + mov r8, r0 + ldr r3, _080022F0 @ =0x0000FFFF + mov ip, r3 + movs r0, #0x80 + lsls r0, r0, #0x18 + mov sb, r0 + ldr r1, [sp] + ldr r0, [sp, #8] + adds r3, r1, #0 + muls r3, r0, r3 +_08002210: + str r4, [r2] + str r7, [r2, #4] + ldrh r0, [r6, #0x26] + mov r1, r8 + subs r0, r0, r1 + ldr r1, [sp, #8] + muls r0, r1, r0 + lsrs r1, r0, #0x1f + adds r0, r0, r1 + asrs r0, r0, #1 + mov r1, sb + orrs r0, r1 + str r0, [r2, #8] + ldr r0, [r2, #8] + ldr r0, [sp, #0xc] + adds r7, r7, r0 + adds r4, r4, r3 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + cmp r5, ip + bne _08002210 +_0800223C: + mov r1, sl + asrs r3, r1, #0x10 + cmp r3, #0 + bne _08002246 + b _08002570 +_08002246: + ldrh r0, [r6, #0x24] + ldr r2, [sp, #0xc] + muls r0, r2, r0 + ldr r1, [r6, #0xc] + adds r1, r1, r0 + ldrh r0, [r6, #0x22] + ldrh r4, [r6, #0x14] + adds r0, r0, r4 + ldr r5, [sp, #0x10] + subs r0, r0, r5 + ldr r2, [sp, #8] + muls r0, r2, r0 + adds r7, r1, r0 + ldrh r0, [r6, #0x28] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldrh r1, [r6, #0x2e] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + beq _0800236C + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080022F8 + ldr r1, [sp, #0x14] + adds r0, r1, r5 + subs r0, #1 + muls r0, r4, r0 + ldr r2, [sp, #8] + muls r0, r2, r0 + ldr r1, [r6, #0x10] + adds r1, r1, r0 + subs r0, r3, #1 + muls r0, r2, r0 + adds r4, r1, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r3, _080022F0 @ =0x0000FFFF + cmp r5, r3 + bne _080022A2 + b _08002570 +_080022A2: + ldr r1, [sp] + adds r0, r1, #0 + muls r0, r2, r0 + mov sb, r0 + mov sl, r3 +_080022AC: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _080022DE + movs r0, #0xc0 + lsls r0, r0, #4 + mov r8, r0 +_080022C0: + lsls r0, r3, #1 + adds r1, r0, r7 + mov ip, r1 + subs r0, r4, r0 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + mov r1, ip + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _080022C0 +_080022DE: + adds r7, r2, #0 + mov r1, sb + subs r4, r4, r1 + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, sl + bne _080022AC + b _08002570 + .align 2, 0 +_080022F0: .4byte 0x0000FFFF +_080022F4: .4byte 0x040000D4 +_080022F8: + ldr r2, [sp, #0x14] + adds r0, r2, #0 + muls r0, r4, r0 + ldr r4, [sp, #8] + muls r0, r4, r0 + ldr r1, [r6, #0x10] + adds r1, r1, r0 + subs r0, r3, #1 + muls r0, r4, r0 + adds r4, r1, r0 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, _08002368 @ =0x0000FFFF + cmp r5, r0 + bne _0800231A + b _08002570 +_0800231A: + ldr r2, [sp] + ldr r3, [sp, #8] + adds r1, r2, #0 + muls r1, r3, r1 + mov sb, r1 + mov sl, r0 +_08002326: + movs r3, #0 + subs r5, #1 + ldr r0, [sp, #0xc] + adds r2, r7, r0 + ldrh r1, [r6, #0x26] + cmp r3, r1 + bhs _08002358 + movs r0, #0x80 + lsls r0, r0, #3 + mov r8, r0 +_0800233A: + lsls r0, r3, #1 + adds r1, r0, r7 + mov ip, r1 + subs r0, r4, r0 + ldrh r0, [r0] + mov r1, r8 + eors r0, r1 + mov r1, ip + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldrh r0, [r6, #0x26] + cmp r3, r0 + blo _0800233A +_08002358: + adds r7, r2, #0 + add r4, sb + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + cmp r5, sl + bne _08002326 + b _08002570 + .align 2, 0 +_08002368: .4byte 0x0000FFFF +_0800236C: + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080023EC + ldr r1, [sp, #0x14] + adds r0, r1, r5 + subs r0, #1 + muls r0, r4, r0 + ldr r2, [sp, #8] + adds r1, r0, #0 + muls r1, r2, r1 + ldr r0, [r6, #0x10] + adds r4, r0, r1 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, _080023E8 @ =0x0000FFFF + cmp r5, r0 + bne _08002394 + b _08002570 +_08002394: + mov r1, sl + str r1, [sp, #0x30] + mov ip, r3 + ldr r0, [sp] + adds r3, r0, #0 + muls r3, r2, r3 + mov sb, r3 +_080023A2: + movs r3, #0 + subs r5, #1 + ldr r1, [sp, #0xc] + adds r2, r7, r1 + cmp r3, ip + bge _080023D6 + movs r0, #0x80 + lsls r0, r0, #4 + mov sl, r0 + ldr r1, [sp, #0x30] + asrs r1, r1, #0x10 + mov r8, r1 +_080023BA: + lsls r0, r3, #1 + adds r1, r0, r7 + str r1, [sp, #0x3c] + adds r0, r0, r4 + ldrh r0, [r0] + mov r1, sl + eors r0, r1 + ldr r1, [sp, #0x3c] + strh r0, [r1] + adds r0, r3, #1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + cmp r3, r8 + blt _080023BA +_080023D6: + adds r7, r2, #0 + mov r2, sb + subs r4, r4, r2 + lsls r0, r5, #0x10 + lsrs r5, r0, #0x10 + ldr r3, _080023E8 @ =0x0000FFFF + cmp r5, r3 + bne _080023A2 + b _08002570 + .align 2, 0 +_080023E8: .4byte 0x0000FFFF +_080023EC: + ldr r1, [sp, #0x14] + adds r0, r1, #0 + muls r0, r4, r0 + ldr r2, [sp, #8] + adds r1, r0, #0 + muls r1, r2, r1 + ldr r0, [r6, #0x10] + adds r4, r0, r1 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, _0800244C @ =0x0000FFFF + cmp r5, r0 + bne _0800240A + b _08002570 +_0800240A: + ldr r2, _08002450 @ =0x040000D4 + ldr r1, [sp, #8] + adds r0, r3, #0 + muls r0, r1, r0 + lsrs r1, r0, #0x1f + adds r0, r0, r1 + asrs r0, r0, #1 + mov sb, r0 + movs r0, #0x80 + lsls r0, r0, #0x18 + mov r3, sb + orrs r3, r0 + mov sb, r3 + ldr r1, [sp] + ldr r3, [sp, #8] + adds r0, r1, #0 + muls r0, r3, r0 + mov r8, r0 +_0800242E: + str r4, [r2] + str r7, [r2, #4] + mov r0, sb + str r0, [r2, #8] + ldr r0, [r2, #8] + ldr r1, [sp, #0xc] + adds r7, r7, r1 + add r4, r8 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r3, _0800244C @ =0x0000FFFF + cmp r5, r3 + bne _0800242E + b _08002570 + .align 2, 0 +_0800244C: .4byte 0x0000FFFF +_08002450: .4byte 0x040000D4 +_08002454: + lsrs r0, r4, #3 + ldrh r4, [r6, #0x1e] + adds r0, r0, r4 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x10] + ldrh r0, [r6, #0x32] + lsrs r0, r0, #3 + ldrh r5, [r6, #0x20] + adds r0, r0, r5 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x14] + movs r0, #0 + mov sl, r0 + ldrh r1, [r6, #0x26] + cmp sl, r1 + bge _08002570 +_08002478: + ldr r4, [sp, #0x10] + add r4, sl + ldrh r1, [r6, #0x14] + adds r0, r4, #0 + bl Div + str r0, [sp, #0x24] + ldrh r1, [r6, #0x14] + adds r2, r0, #0 + adds r0, r2, #0 + muls r0, r1, r0 + subs r4, r4, r0 + str r4, [sp, #0x28] + ldrh r3, [r6, #0x28] + mov r8, r3 + ldrh r0, [r6, #0x26] + mov r4, sl + subs r0, r0, r4 + ldr r5, [sp, #0x28] + subs r1, r1, r5 + cmp r1, r0 + ble _080024A6 + adds r1, r0, #0 +_080024A6: + ldr r2, [sp, #8] + adds r0, r1, #0 + muls r0, r2, r0 + str r0, [sp, #0x2c] + movs r3, #0 + mov sb, r3 + add r1, sl + str r1, [sp, #0x34] + cmp sb, r8 + bge _08002566 +_080024BA: + ldr r4, [sp, #0x14] + add r4, sb + ldrh r1, [r6, #0x16] + adds r0, r4, #0 + bl Div + ldrh r3, [r6, #0x16] + adds r1, r0, #0 + muls r1, r3, r1 + subs r4, r4, r1 + subs r5, r3, r4 + ldrh r1, [r6, #0x3c] + muls r1, r0, r1 + ldr r0, [r6, #0x38] + adds r0, r0, r1 + ldr r1, [sp, #0x24] + adds r0, r0, r1 + ldrb r0, [r0] + ldrh r2, [r6, #0x14] + muls r0, r2, r0 + adds r1, r0, #0 + muls r1, r3, r1 + adds r0, r4, #0 + muls r0, r2, r0 + ldr r2, [sp, #0x28] + adds r0, r0, r2 + adds r1, r1, r0 + ldr r3, [sp, #8] + muls r1, r3, r1 + ldr r0, [r6, #0x10] + adds r4, r0, r1 + ldrh r1, [r6, #0x24] + ldr r0, [r6, #0xc] + adds r0, r0, r1 + ldr r2, [sp, #0xc] + mov r1, sb + muls r1, r2, r1 + adds r0, r0, r1 + ldrh r3, [r6, #0x22] + adds r0, r0, r3 + ldr r2, [sp, #8] + mov r1, sl + muls r1, r2, r1 + adds r7, r0, r1 + add sb, r5 + cmp r5, r8 + ble _0800251A + mov r5, r8 +_0800251A: + mov r3, r8 + subs r3, r3, r5 + mov r8, r3 + adds r0, r5, #0 + subs r5, #1 + cmp r0, #0 + beq _08002560 + ldr r3, _080025A0 @ =0x040000D4 + ldr r1, [sp, #0x2c] + lsrs r0, r1, #0x1f + adds r0, r1, r0 + asrs r0, r0, #1 + str r0, [sp, #0x3c] + movs r0, #0x80 + lsls r0, r0, #0x18 + ldr r2, [sp, #0x3c] + orrs r2, r0 + str r2, [sp, #0x3c] + ldr r1, [sp] + ldr r2, [sp, #8] + adds r0, r1, #0 + muls r0, r2, r0 + mov ip, r0 +_08002548: + str r4, [r3] + str r7, [r3, #4] + ldr r0, [sp, #0x3c] + str r0, [r3, #8] + ldr r0, [r3, #8] + ldr r1, [sp, #0xc] + adds r7, r7, r1 + add r4, ip + adds r0, r5, #0 + subs r5, #1 + cmp r0, #0 + bne _08002548 +_08002560: + ldrh r2, [r6, #0x28] + cmp sb, r2 + blt _080024BA +_08002566: + ldr r3, [sp, #0x34] + mov sl, r3 + ldrh r4, [r6, #0x26] + cmp sl, r4 + blt _08002478 +_08002570: + ldr r0, _080025A4 @ =0x04000006 + ldrh r0, [r0] + ldrh r0, [r6, #0x30] + strh r0, [r6, #0x34] + ldrh r0, [r6, #0x32] + strh r0, [r6, #0x36] + ldr r3, _080025A8 @ =gBackgroundsCopyQueueCursor + ldr r4, _080025AC @ =gBackgroundsCopyQueueIndex +_8002580: @ 0x08002580 + ldrb r0, [r3] + ldrb r5, [r4] + cmp r0, r5 + beq _0800258C + bl _08001AC8 +_0800258C: + movs r0, #1 +sub_800258E: + add sp, #0x40 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_080025A0: .4byte 0x040000D4 +_080025A4: .4byte REG_VCOUNT +_080025A8: .4byte gBackgroundsCopyQueueCursor +_080025AC: .4byte gBackgroundsCopyQueueIndex + +.syntax divided diff --git a/sa1/asm/non_matching/engine/sa2__sub_80039E4.inc b/sa1/asm/non_matching/engine/sa2__sub_80039E4.inc new file mode 100644 index 0000000000..c866957708 --- /dev/null +++ b/sa1/asm/non_matching/engine/sa2__sub_80039E4.inc @@ -0,0 +1,672 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x44 + movs r0, #5 + str r0, [sp, #0x28] + ldr r0, _08003A04 @ =REG_DISPSTAT + ldrh r1, [r0] + movs r0, #1 @ DISPSTAT_VBLANK + ands r0, r1 + cmp r0, #0 + bne _08003A08 + movs r0, #0 + b sub_80039E4_return + .align 2, 0 +_08003A04: .4byte REG_DISPSTAT +_08003A08: + ldr r0, _08003BA4 @ =gBgSpritesCount + ldrb r1, [r0] + cmp r1, #0 + bne _08003A12 + b sub_80039E4_return_1 +_08003A12: + movs r5, #0 @ r5 = r5 = 0 + cmp r5, r1 @ for(; r5 < gBgSpritesCount; r5++) + blo _08003A1A + b _08003EC2 +_08003A1A: + lsls r0, r5, #2 + ldr r1, _08003BA8 @ =gBgSprites + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0xc] @ sp0C = s + ldr r1, [r0, #0xc] + movs r0, #1 + rsbs r0, r0, #0 + adds r2, r5, #1 + str r2, [sp, #0x3c] + cmp r1, r0 + bne _08003A34 + b _08003EB2 +_08003A34: + mov sl, r1 @ sl = dims + ldr r3, [sp, #0xc] @ r3 = sp0C = s + ldr r0, [r3, #0x10] + movs r1, #0xc0 + lsls r1, r1, #9 + ands r0, r1 + lsrs r3, r0, #0xf + lsls r0, r3, #1 + ldr r4, _08003BAC @ =gBgCntRegs + adds r0, r0, r4 + ldrh r2, [r0] + movs r0, #0xc + ands r0, r2 + lsls r0, r0, #0xc + movs r1, #0xc0 + lsls r1, r1, #0x13 + adds r0, r0, r1 + str r0, [sp, #0x14] @ sp14 = bgVram + movs r0, #0xf8 + lsls r0, r0, #5 + ands r0, r2 + lsls r0, r0, #3 + adds r0, r0, r1 + str r0, [sp, #0x18] @ sp18 = bgBase + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + beq _08003A70 + movs r6, #6 + str r6, [sp, #0x28] +_08003A70: + cmp r3, #1 + bhi _08003A76 + b _08003C2C +_08003A76: + ldr r7, _08003BB0 @ =gDispCnt + ldrh r1, [r7] + movs r0, #3 + ands r0, r1 + cmp r0, #0 + bne _08003A84 + b _08003C2C +_08003A84: + lsrs r1, r2, #0xe + movs r0, #0x80 + lsls r0, r0, #0xd + lsls r0, r1 + lsrs r0, r0, #0x10 + str r0, [sp, #0x10] @ sp10 = bg_affine_pixelcount + ldr r0, _08003BB4 @ =gRefSpriteTables + ldr r1, [r0] + ldr r2, [sp, #0xc] @ r2 = sp0C = s + ldrh r0, [r2, #0xa] + ldr r1, [r1, #8] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x1c] + mov r3, sl @ r3 = sl = dims + ldrb r1, [r3, #1] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r4, [sp, #0x1c] + adds r4, r4, r0 + str r4, [sp, #0x1c] + movs r5, #0 + str r5, [sp, #8] + ldrh r6, [r3, #2] + cmp r5, r6 + blo _08003ABE + b _08003EB2 +_08003ABE: + mov sb, sp @ sb = sp = oam + ldr r7, [sp, #0x10] + lsls r0, r7, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #0x30] +_08003AC8: + ldr r0, [sp, #0x1c] + ldr r1, _08003BB8 @ =0x040000D4 + str r0, [r1] + mov r2, sp + str r2, [r1, #4] + ldr r0, _08003BBC @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldr r3, [sp, #0x1c] + adds r3, #6 + str r3, [sp, #0x1c] + mov r4, sb @ r4 = sb = sp = oam + ldrh r3, [r4] + movs r1, #0xc0 + lsls r1, r1, #8 + ands r1, r3 + lsrs r1, r1, #0xc + ldrh r2, [r4, #2] + movs r0, #0xc0 + lsls r0, r0, #8 + ands r0, r2 + lsrs r0, r0, #0xe + orrs r1, r0 + lsls r1, r1, #1 + ldr r5, _08003BC0 @ =gOamShapesSizes + adds r0, r1, r5 + ldrb r0, [r0] + lsrs r0, r0, #3 + str r0, [sp, #0x20] @ sp20 = tilesX + ldr r6, _08003BC4 @ =gOamShapesSizes+1 + adds r1, r1, r6 + ldrb r0, [r1] + lsrs r0, r0, #3 + mov ip, r0 + mov r4, ip @ r4 = ip = tilesY + ldr r7, [sp, #0xc] @ r7 = sp0C = s + movs r0, #0x18 + ldrsh r1, [r7, r0] + mov r2, sl @ r2 = sl = dims + movs r5, #0xa + ldrsh r0, [r2, r5] + subs r5, r1, r0 @ r5 = yPos + movs r6, #0x16 + ldrsh r1, [r7, r6] + movs r7, #8 + ldrsh r0, [r2, r7] + subs r1, r1, r0 + mov r8, r1 @ r8 = xPos + movs r0, #0x10 + rsbs r0, r0, #0 + ands r1, r0 + mov r8, r1 + movs r0, #0xff + ands r0, r3 + adds r0, r5, r0 + asrs r0, r0, #3 + ldr r2, [sp, #0x10] + muls r0, r2, r0 + ldr r3, [sp, #0x18] @ r3 = sp18 = bgBase + adds r7, r3, r0 @ r7 = r3 + ldr r5, [sp, #0xc] @ r5 = sp0C = s + ldr r1, [r5, #4] + ldr r6, [sp, #0x14] + subs r1, r1, r6 + ldr r0, [sp, #0x28] + lsrs r1, r0 @ r1 = tileId = ((size_t)(s->graphics.dest - bgVram)) >> sp28 + mov r3, sb @ r3 = oam + ldrh r2, [r3, #4] + ldr r0, _08003BC8 @ =0x000003FF + ands r0, r2 + adds r5, r1, r0 + movs r6, #0xff + ands r5, r6 @ r5 = shrunkTileId + subs r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov ip, r0 + ldr r0, [sp, #8] + adds r0, #1 + str r0, [sp, #0x40] +__08003B68: + cmp r4, #0 + beq _08003C18 + ldr r1, [sp, #0x30] + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + str r0, [sp, #0x34] +_08003B74: + mov r2, sb @ r2 = sb = oam + ldrh r0, [r2, #2] + ldr r1, _08003BCC @ =0x000001FF + ands r1, r0 @ r1 = oam->tileNum + add r1, r8 + asrs r1, r1, #3 + adds r2, r7, r1 @ r2 = (bgBase + (oam.tileNum >> 3)) + ldr r0, [sp, #0x20] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + mov r6, ip + subs r6, #1 + ldr r4, [sp, #0x20] + cmp r4, #0 + beq _08003BF2 + movs r4, #1 +_08003B96: + adds r0, r2, #0 + ands r0, r4 + cmp r0, #0 + bne _08003BD0 + str r5, [sp, #0x24] + b _08003BDE + .align 2, 0 +_08003BA4: .4byte gBgSpritesCount +_08003BA8: .4byte gBgSprites +_08003BAC: .4byte gBgCntRegs +_08003BB0: .4byte gDispCnt +_08003BB4: .4byte gRefSpriteTables +_08003BB8: .4byte 0x040000D4 +_08003BBC: .4byte 0x80000003 +_08003BC0: .4byte gOamShapesSizes +_08003BC4: .4byte gOamShapesSizes+1 +_08003BC8: .4byte 0x000003FF +_08003BCC: .4byte 0x000001FF +_08003BD0: + lsls r0, r5, #8 + ldr r1, [sp, #0x24] + orrs r1, r0 + lsls r0, r1, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x24] + strh r0, [r2] +_08003BDE: + adds r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + adds r2, #1 + adds r1, r3, #0 + subs r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + cmp r1, #0 + bne _08003B96 +_08003BF2: + movs r0, #1 + ands r0, r2 + cmp r0, #0 + beq _08003C08 + ldrh r1, [r2] + movs r0, #0xff + lsls r0, r0, #8 + ands r0, r1 + ldr r1, [sp, #0x24] + orrs r0, r1 + strh r0, [r2] +_08003C08: + ldr r2, [sp, #0x34] + adds r7, r7, r2 + mov r1, ip + lsls r0, r6, #0x18 + lsrs r0, r0, #0x18 + mov ip, r0 + cmp r1, #0 + bne _08003B74 +_08003C18: + ldr r3, [sp, #0x40] + lsls r0, r3, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #8] + mov r4, sl + ldrh r4, [r4, #2] + cmp r0, r4 + bhs _08003C2A + b _08003AC8 @ -> for (sp08 = 0; sp08 < dims->numSubframes; sp08++) +_08003C2A: + b _08003EB2 +_08003C2C: + movs r6, #0x20 + str r6, [sp, #0x10] + lsls r0, r3, #1 @ r3 = bgId + adds r0, r0, r4 + ldrh r0, [r0] @ r0 = gBgCntRegs[bgId] + lsrs r1, r0, #0xe + subs r0, r1, #2 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _08003C46 + movs r7, #0x40 + str r7, [sp, #0x10] +_08003C46: + ldr r0, _08003D14 @ =gRefSpriteTables + ldr r1, [r0] + ldr r2, [sp, #0xc] @ r2 = sp0C = s + ldrh r0, [r2, #0xa] + ldr r1, [r1, #8] @ r1 = gRefSpriteTables->oamData + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x1c] @ sp1C = gRefSpriteTables->oamData[s->graphics.anim]; + mov r3, sl @ r3 = dims + ldrb r1, [r3, #1] @ r1 = dims->oamIndex + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r4, [sp, #0x1c] + adds r4, r4, r0 + str r4, [sp, #0x1c] @ sp1C = &sp1C[dims->oamIndex]; + movs r6, #0 + str r6, [sp, #8] + adds r5, #1 + str r5, [sp, #0x3c] + ldrh r7, [r3, #2] + cmp r6, r7 + blo _08003C78 + b _08003EB2 +_08003C78: + mov sb, sp @ sb = sp = oam +_08003C7A: + ldr r0, [sp, #0x1c] + ldr r1, _08003D18 @ =0x040000D4 + str r0, [r1] + mov r2, sp + str r2, [r1, #4] + ldr r0, _08003D1C @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldr r3, [sp, #0x1c] + adds r3, #6 + str r3, [sp, #0x1c] + mov r4, sb @ r4 = sb = sp = oam + ldrh r2, [r4] + movs r1, #0xc0 + lsls r1, r1, #8 + ands r1, r2 + lsrs r1, r1, #0xc @ r1 = oam.shape << 2 + ldrh r3, [r4, #2] + movs r0, #0xc0 + lsls r0, r0, #8 + ands r0, r3 + lsrs r0, r0, #0xe @ r0 = oam.size + orrs r1, r0 @ r1 = shapeAndSize + lsls r1, r1, #1 + ldr r5, _08003D20 @ =gOamShapesSizes + adds r0, r1, r5 + ldrb r0, [r0] + lsrs r0, r0, #3 + str r0, [sp, #0x20] @ sp20 = tilesX + ldr r6, _08003D24 @ =gOamShapesSizes+1 + adds r1, r1, r6 + ldrb r0, [r1] + lsrs r0, r0, #3 + mov ip, r0 @ ip = tilesY + ldr r4, _08003D28 @ =0x000001FF + ands r4, r3 + movs r6, #0xff + ands r6, r2 @ r6 = oamX + ldr r0, [sp, #0xc] @ r0 = sp0C = s + adds r0, #0x25 + ldrb r0, [r0] @ r0 = s->palId + lsls r0, r0, #0xc + mov r7, sb + ldrh r7, [r7, #4] + adds r0, r0, r7 + mov r1, sb + strh r0, [r1, #4] +__08003CD8: + ldr r2, [sp, #0xc] @ r2 = sp0C = s + ldr r1, [r2, #0x10] + lsrs r1, r1, #0xb + mov r5, sl + ldrb r0, [r5] + lsrs r0, r0, #1 + eors r0, r1 + movs r7, #1 + ands r0, r7 + cmp r0, #0 + beq _08003D4A +___08003CEE: + movs r1, #0x80 + lsls r1, r1, #6 + adds r0, r1, #0 + eors r0, r3 + mov r2, sb + strh r0, [r2, #2] + ldrb r1, [r5] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08003D2C +__08003D04: + ldr r3, [sp, #0xc] @ r3 = sp0C = s + movs r5, #0x18 + ldrsh r0, [r3, r5] + mov r7, sl @ r7 = sl = dims + movs r2, #0xa + ldrsh r1, [r7, r2] + b _08003D3C + .align 2, 0 +_08003D14: .4byte gRefSpriteTables +_08003D18: .4byte 0x040000D4 +_08003D1C: .4byte 0x80000003 +_08003D20: .4byte gOamShapesSizes +_08003D24: .4byte gOamShapesSizes+1 +_08003D28: .4byte 0x000001FF +_08003D2C: + ldr r3, [sp, #0xc] @ r3 = sp0C = s + movs r5, #0x18 + ldrsh r0, [r3, r5] + mov r7, sl @ r7 = sl = dims + ldrh r1, [r7, #6] + movs r3, #0xa + ldrsh r2, [r7, r3] + subs r1, r1, r2 +_08003D3C: + adds r0, r0, r1 + adds r5, r0, #0 + subs r5, #8 @ r5 = someOffsetY + lsls r0, r6, #0x10 + rsbs r0, r0, #0 + lsrs r6, r0, #0x10 + b _08003D58 +_08003D4A: + ldr r5, [sp, #0xc] @ r5 = sp0C = s + movs r7, #0x18 + ldrsh r1, [r5, r7] + mov r2, sl @ r2 = sl = dims + movs r3, #0xa + ldrsh r0, [r2, r3] + subs r5, r1, r0 @ r5 = someOffsetY +_08003D58: + ldr r7, [sp, #0xc] @ r7 = sp0C = s + ldr r0, [r7, #0x10] + lsrs r0, r0, #0xa + movs r3, #1 + ands r0, r3 + mov r1, sl @ r1 = sl = dims + ldrb r2, [r1] + adds r1, r3, #0 + ands r1, r2 + cmp r0, r1 + beq _08003DB4 +__08003D6E: + mov r2, sb @ r2 = sb = oam + ldrh r0, [r2, #2] + movs r7, #0x80 + lsls r7, r7, #5 + adds r1, r7, #0 + eors r0, r1 + strh r0, [r2, #2] + mov r0, sl @ r0 = sl = dims + ldrb r1, [r0] + adds r0, r3, #0 + ands r0, r1 + cmp r0, #0 + beq _08003D96 + ldr r1, [sp, #0xc] @ r1 = sp0C = s + movs r2, #0x16 + ldrsh r0, [r1, r2] + mov r3, sl + movs r7, #8 + ldrsh r1, [r3, r7] + b _08003DA6 +_08003D96: + ldr r1, [sp, #0xc] @ r1 = sp0C = s + movs r2, #0x16 + ldrsh r0, [r1, r2] + mov r3, sl @ r3 = sl = dims + ldrh r1, [r3, #4] + movs r7, #8 + ldrsh r2, [r3, r7] + subs r1, r1, r2 +_08003DA6: + adds r0, r0, r1 + subs r0, #8 + mov r8, r0 + lsls r0, r4, #0x10 + rsbs r0, r0, #0 + lsrs r4, r0, #0x10 + b _08003DC4 +_08003DB4: + ldr r0, [sp, #0xc] @ r0 = sp0C = s + movs r2, #0x16 + ldrsh r1, [r0, r2] + mov r3, sl @ r3 = sl = dims + movs r7, #8 + ldrsh r0, [r3, r7] + subs r1, r1, r0 + mov r8, r1 +_08003DC4: + movs r0, #0x10 + rsbs r0, r0, #0 + mov r1, r8 + ands r1, r0 + mov r8, r1 + adds r0, #8 + ands r5, r0 + mov r2, sb + ldrh r1, [r2, #2] + movs r0, #0x80 + lsls r0, r0, #5 + ands r0, r1 + movs r3, #2 + str r3, [sp, #0x2c] + cmp r0, #0 + beq _08003DE8 + movs r7, #0xfe + str r7, [sp, #0x2c] +_08003DE8: + movs r0, #0x80 + lsls r0, r0, #6 + ands r0, r1 + cmp r0, #0 + beq _08003DFA + ldr r1, [sp, #0x10] + lsls r0, r1, #0x19 + rsbs r0, r0, #0 + b _08003DFE +_08003DFA: + ldr r2, [sp, #0x10] + lsls r0, r2, #0x19 +_08003DFE: + lsrs r0, r0, #0x18 + str r0, [sp, #0x30] + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + adds r0, r5, r0 + asrs r0, r0, #2 + ldr r3, [sp, #0x10] + muls r0, r3, r0 + ldr r5, [sp, #0x18] + adds r7, r5, r0 + ldr r6, [sp, #0xc] @ r6 = sp0C = s + ldr r1, [r6, #4] + ldr r0, [sp, #0x14] + subs r1, r1, r0 + ldr r2, [sp, #0x28] + lsrs r1, r2 + mov r3, sb + ldrh r2, [r3, #4] + ldr r0, _08003EDC @ =0x0000F3FF + ands r0, r2 + adds r1, r1, r0 + ldrh r2, [r3, #2] + movs r0, #0xc0 + lsls r0, r0, #6 + ands r0, r2 + lsrs r0, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r5, r1, #0x10 + mov r1, ip @ r1 = ip = tilesY + subs r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov ip, r0 @ ip = tilesY--; + ldr r6, [sp, #8] + adds r6, #1 + str r6, [sp, #0x40] + cmp r1, #0 + beq _08003EA0 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + add r0, r8 + asrs r0, r0, #2 + str r0, [sp, #0x38] + ldr r1, [sp, #0x30] + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + mov r8, r0 +_08003E5E: + ldr r3, [sp, #0x38] + adds r2, r7, r3 + ldr r0, [sp, #0x20] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + mov r6, ip + subs r6, #1 + ldr r4, [sp, #0x20] + cmp r4, #0 + beq _08003E92 + ldr r1, [sp, #0x2c] + lsls r0, r1, #0x18 + asrs r4, r0, #0x18 +_08003E7A: + adds r1, r5, #0 + adds r0, r1, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + strh r1, [r2] + adds r2, r2, r4 + adds r1, r3, #0 + subs r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + cmp r1, #0 + bne _08003E7A +_08003E92: + add r7, r8 + mov r1, ip + lsls r0, r6, #0x18 + lsrs r0, r0, #0x18 + mov ip, r0 + cmp r1, #0 + bne _08003E5E +_08003EA0: + ldr r2, [sp, #0x40] + lsls r0, r2, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #8] + mov r3, sl @ r3 = sl = dims + ldrh r3, [r3, #2] + cmp r0, r3 + bhs _08003EB2 + b _08003C7A +_08003EB2: + ldr r4, [sp, #0x3c] + lsls r0, r4, #0x18 + lsrs r5, r0, #0x18 + ldr r6, _08003EE0 @ =gBgSpritesCount + ldrb r6, [r6] + cmp r5, r6 + bhs _08003EC2 + b _08003A1A +_08003EC2: + movs r0, #0 + ldr r7, _08003EE0 @ =gBgSpritesCount + strb r0, [r7] +sub_80039E4_return_1: + movs r0, #1 +sub_80039E4_return: + add sp, #0x44 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_08003EDC: .4byte 0x0000F3FF +_08003EE0: .4byte gBgSpritesCount + +.syntax divided diff --git a/sa1/asm/non_matching/engine/sa2__sub_8004010.inc b/sa1/asm/non_matching/engine/sa2__sub_8004010.inc new file mode 100644 index 0000000000..6180591a02 --- /dev/null +++ b/sa1/asm/non_matching/engine/sa2__sub_8004010.inc @@ -0,0 +1,307 @@ +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + movs r0, #0 + mov r8, r0 + mov r1, sp + str r1, [sp, #0x10] +_08002F98: + mov r2, r8 + lsls r0, r2, #2 + ldr r1, _08003050 @ =gBgSprites_Unknown2 + adds r1, #1 + adds r4, r0, r1 + ldr r6, _08003054 @ =gBgSprites_Unknown2+3 + adds r6, r0, r6 + str r6, [sp, #0xc] + ldrb r1, [r4] + ldrb r2, [r6] + mov ip, r2 + mov sl, r0 + cmp r1, ip + bne _08002FCA + ldr r0, _08003050 @ =gBgSprites_Unknown2 + add r0, sl + ldr r1, _08003058 @ =gBgSprites_Unknown2+ + add r1, sl + ldrb r0, [r0] + mov r7, r8 + adds r7, #1 + ldrb r1, [r1] + cmp r0, r1 + bne _08002FCA + b _080031B6 +_08002FCA: + ldr r2, _0800305C @ =gBgCntRegs + mov r6, r8 + lsls r3, r6, #1 + adds r0, r3, r2 + ldrh r6, [r0] + movs r1, #0xc0 + lsls r1, r1, #0x13 + movs r0, #0xf8 + lsls r0, r0, #5 + ands r0, r6 + lsls r0, r0, #3 + adds r5, r0, r1 + ldrb r4, [r4] + ldr r0, _08003050 @ =gBgSprites_Unknown2 + add r0, sl + ldrb r0, [r0] + str r0, [sp, #8] + adds r7, r2, #0 + adds r2, r3, #0 + mov r0, r8 + cmp r0, #1 + bls _080030DC + ldr r0, _08003060 @ =gDispCnt + ldrh r1, [r0] + movs r0, #3 + ands r0, r1 + cmp r0, #0 + beq _080030DC + ldr r1, [sp, #8] + adds r5, r5, r1 + lsrs r2, r6, #0xe + movs r0, #0x80 + lsls r0, r0, #0xd + lsls r0, r2 + lsrs r3, r0, #0x10 + mov r2, ip + cmp r2, #0xff + bne _0800306C + ldr r0, _08003064 @ =gBgSprites_Unknown1 + add r0, r8 + ldrb r1, [r0] + lsls r0, r1, #8 + orrs r1, r0 + adds r0, r4, #0 + muls r0, r3, r0 + adds r0, r5, r0 + ldr r6, [sp, #0x10] + strh r1, [r6] + mov r1, sp + ldr r2, _08003068 @ =0x040000D4 + str r1, [r2] + str r0, [r2, #4] + ldr r6, [sp, #0xc] + ldrb r0, [r6] + subs r0, r0, r4 + muls r0, r3, r0 + lsrs r1, r0, #0x1f + adds r0, r0, r1 + asrs r0, r0, #1 + movs r1, #0x81 + lsls r1, r1, #0x18 + orrs r0, r1 + str r0, [r2, #8] + ldr r0, [r2, #8] + add r2, sp, #4 + mov sb, r2 + b _08003134 + .align 2, 0 +_08003050: .4byte gBgSprites_Unknown2 +_08003054: .4byte gBgSprites_Unknown2+3 +_08003058: .4byte gBgSprites_Unknown2+2 +_0800305C: .4byte gBgCntRegs +_08003060: .4byte gDispCnt +_08003064: .4byte gBgSprites_Unknown1 +_08003068: .4byte 0x040000D4 +_0800306C: + add r6, sp, #4 + mov sb, r6 + mov r7, r8 + adds r7, #1 + cmp r4, ip + bls _0800307A + b _080031A0 +_0800307A: + ldr r0, _080030D0 @ =gBgSprites_Unknown1 + add r0, r8 + mov ip, r0 + ldr r2, _080030D4 @ =0x040000D4 + ldr r1, _080030D8 @ =gBgSprites_Unknown2 + add r1, sl + mov r8, r1 + ldr r6, [sp, #0xc] + str r6, [sp, #0x14] +_0800308C: + mov r0, ip + ldrb r1, [r0] + lsls r0, r1, #8 + orrs r1, r0 + adds r0, r4, #0 + muls r0, r3, r0 + adds r0, r5, r0 + ldr r6, [sp, #0x10] + strh r1, [r6] + mov r1, sp + str r1, [r2] + str r0, [r2, #4] + mov r6, r8 + ldrb r0, [r6] + ldr r1, [sp, #8] + subs r0, r0, r1 + adds r0, #1 + asrs r1, r0, #1 + lsrs r0, r0, #0x1f + adds r1, r1, r0 + asrs r1, r1, #1 + movs r6, #0x81 + lsls r6, r6, #0x18 + orrs r1, r6 + str r1, [r2, #8] + ldr r0, [r2, #8] + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + ldr r0, [sp, #0x14] + ldrb r0, [r0] + cmp r4, r0 + bls _0800308C + b _080031A0 + .align 2, 0 +_080030D0: .4byte gBgSprites_Unknown1 +_080030D4: .4byte 0x040000D4 +_080030D8: .4byte gBgSprites_Unknown2+2 +_080030DC: + ldr r1, [sp, #8] + lsls r0, r1, #1 + adds r5, r5, r0 + movs r3, #0x20 + adds r0, r2, r7 + ldrh r0, [r0] + lsrs r2, r0, #0xe + subs r0, r2, #2 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _080030F6 + movs r3, #0x40 +_080030F6: + ldr r1, _0800313C @ =gBgSprites_Unknown2+2 + add r1, sl + ldrb r0, [r1] + cmp r0, #0xff + bne _0800314C + ldr r0, _08003140 @ =gBgSprites_Unknown1 + add r0, r8 + ldrb r1, [r0] + lsls r0, r3, #1 + muls r0, r4, r0 + adds r0, r5, r0 + ldr r2, [sp, #0x10] + strh r1, [r2] + mov r6, sp + ldr r1, _08003144 @ =0x040000D4 + str r6, [r1] + str r0, [r1, #4] + ldr r0, _08003148 @ =gBgSprites_Unknown2+3 + add r0, sl + ldrb r0, [r0] + subs r0, r0, r4 + muls r0, r3, r0 + lsls r0, r0, #1 + asrs r0, r0, #1 + movs r2, #0x81 + lsls r2, r2, #0x18 + orrs r0, r2 + str r0, [r1, #8] + ldr r0, [r1, #8] + add r6, sp, #4 + mov sb, r6 +_08003134: + mov r7, r8 + adds r7, #1 + b _080031A0 + .align 2, 0 +_0800313C: .4byte gBgSprites_Unknown2+2 +_08003140: .4byte gBgSprites_Unknown1 +_08003144: .4byte 0x040000D4 +_08003148: .4byte gBgSprites_Unknown2+3 +_0800314C: + ldr r0, _080031D4 @ =gBgSprites_Unknown2+3 + add r0, sl + add r2, sp, #4 + mov sb, r2 + mov r7, r8 + adds r7, #1 + ldrb r6, [r0] + cmp r4, r6 + bhi _080031A0 + ldr r2, _080031D8 @ =gBgSprites_Unknown1 + add r8, r2 + ldr r2, _080031DC @ =0x040000D4 + mov ip, r1 + str r0, [sp, #0x14] + lsls r3, r3, #1 +_0800316A: + mov r6, r8 + ldrb r1, [r6] + adds r0, r4, #0 + muls r0, r3, r0 + adds r0, r5, r0 + ldr r6, [sp, #0x10] + strh r1, [r6] + mov r1, sp + str r1, [r2] + str r0, [r2, #4] + mov r6, ip + ldrb r0, [r6] + ldr r1, [sp, #8] + subs r0, r0, r1 + adds r0, #1 + movs r6, #0x81 + lsls r6, r6, #0x18 + orrs r0, r6 + str r0, [r2, #8] + ldr r0, [r2, #8] + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + ldr r0, [sp, #0x14] + ldrb r0, [r0] + cmp r4, r0 + bls _0800316A +_080031A0: + movs r0, #0 + str r0, [sp, #4] + mov r1, sb + ldr r2, _080031DC @ =0x040000D4 + str r1, [r2] + ldr r0, _080031E0 @ =gBgSprites_Unknown2 + add r0, sl + str r0, [r2, #4] + ldr r0, _080031E4 @ =0x85000001 + str r0, [r2, #8] + ldr r0, [r2, #8] +_080031B6: + lsls r0, r7, #0x18 + lsrs r0, r0, #0x18 + mov r8, r0 + cmp r0, #3 + bhi _080031C2 + b _08002F98 +_080031C2: + movs r0, #1 + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_080031D4: .4byte gBgSprites_Unknown2+3 +_080031D8: .4byte gBgSprites_Unknown1 +_080031DC: .4byte 0x040000D4 +_080031E0: .4byte gBgSprites_Unknown2 +_080031E4: .4byte 0x85000001 + +.syntax divided diff --git a/sa1/asm/non_matching/engine/sa2__sub_8004E14.inc b/sa1/asm/non_matching/engine/sa2__sub_8004E14.inc new file mode 100644 index 0000000000..2fe83c7739 --- /dev/null +++ b/sa1/asm/non_matching/engine/sa2__sub_8004E14.inc @@ -0,0 +1,490 @@ +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x40 + str r0, [sp, #0x24] + adds r6, r1, #0 + ldr r1, [r0, #0xc] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08003DA0 + b _08004148 +_08003DA0: + mov sb, r1 + add r2, sp, #0x20 + ldr r1, [sp, #0x24] + ldr r0, [r1, #0x10] + movs r1, #0x1f + ands r0, r1 + strh r0, [r2] + ldrh r4, [r2] + lsls r4, r4, #5 + ldr r0, _08004098 @ =gOamBuffer+0x6 + adds r4, r4, r0 + subs r2, #0x18 + str r2, [sp, #0x28] + ldrh r0, [r6] + ldr r3, _0800409C @ =sa2__gUnknown_03001944 + ldrh r1, [r3] + adds r0, r0, r1 + ldr r2, _080040A0 @ =0x000003FF + ands r0, r2 + movs r5, #0x80 + lsls r5, r5, #1 + adds r0, r0, r5 + lsls r0, r0, #1 + ldr r7, _080040A4 @ =gSineTable + adds r0, r0, r7 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [sp, #0x28] + strh r0, [r1] + movs r3, #0xa + add r3, sp + mov r8, r3 + ldrh r0, [r6] + ldr r5, _0800409C @ =sa2__gUnknown_03001944 + ldrh r1, [r5] + adds r0, r0, r1 + ands r0, r2 + lsls r0, r0, #1 + adds r0, r0, r7 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + strh r0, [r3] + add r7, sp, #0xc + movs r0, #2 + ldrsh r1, [r6, r0] + ldr r2, _080040A8 @ =sa2__gUnknown_030017F0 + ldrh r0, [r2] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r7] + movs r3, #0xe + add r3, sp + mov sl, r3 + movs r5, #4 + ldrsh r1, [r6, r5] + ldr r2, _080040AC @ =sa2__gUnknown_03005394 + ldrh r0, [r2] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r3] + movs r5, #0x80 + lsls r5, r5, #9 + ldrh r1, [r7] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + ldr r3, [sp, #0x28] + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4] + ldrh r1, [r7] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + mov r2, r8 + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #8] + mov r3, sl + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + mov r2, r8 + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + rsbs r1, r1, #0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #0x10] + mov r3, sl + ldrh r1, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r0, r5, #0 + bl Div + ldr r5, [sp, #0x28] + ldrh r1, [r5] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r4, #0x18] + movs r1, #2 + ldrsh r0, [r6, r1] + str r0, [sp, #0x2c] + cmp r0, #0 + bge _08003EB8 + movs r2, #2 + ldrsh r0, [r6, r2] + rsbs r0, r0, #0 + ldr r3, _080040A8 @ =sa2__gUnknown_030017F0 + ldrh r1, [r3] + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r7] +_08003EB8: + movs r4, #4 + ldrsh r0, [r6, r4] + ldr r5, _080040AC @ =sa2__gUnknown_03005394 + ldrh r4, [r5] + ldrh r2, [r6, #4] + mov r1, sp + strh r2, [r1, #0x3c] + cmp r0, #0 + bge _08003EDA + movs r3, #4 + ldrsh r0, [r6, r3] + rsbs r0, r0, #0 + muls r0, r4, r0 + asrs r0, r0, #8 + mov r4, sl + strh r0, [r4] + ldrh r4, [r5] +_08003EDA: + mov r2, sp + ldr r5, [sp, #0x28] + ldrh r1, [r5] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r2] + mov r0, sp + adds r0, #2 + str r0, [sp, #0x30] + mov r2, r8 + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + rsbs r1, r1, #0 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + ldr r3, [sp, #0x30] + strh r0, [r3] + mov r5, sp + adds r5, #4 + str r5, [sp, #0x34] + ldrh r1, [r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov r2, sl + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r5] + mov r3, sp + adds r3, #6 + str r3, [sp, #0x38] + ldr r5, [sp, #0x28] + ldrh r1, [r5] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + strh r0, [r3] + add r0, sp, #0x18 + mov r8, r0 + ldr r1, _0800409C @ =sa2__gUnknown_03001944 + ldrh r0, [r1] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + ldr r3, _080040A4 @ =gSineTable + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r5, _080040A8 @ =sa2__gUnknown_030017F0 + ldrh r1, [r5] + adds r2, r0, #0 + muls r2, r1, r2 + lsls r2, r2, #8 + asrs r2, r2, #0x10 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + ldr r3, _080040B0 @ =sa2__gUnknown_03005398 + movs r5, #0 + ldrsh r1, [r3, r5] + muls r0, r1, r0 + lsls r0, r0, #8 + asrs r0, r0, #0x10 + muls r0, r2, r0 + asrs r0, r0, #8 + mov r1, r8 + strh r0, [r1] + movs r2, #0x1a + add r2, sp + mov ip, r2 + ldr r5, _0800409C @ =sa2__gUnknown_03001944 + ldrh r0, [r5] + lsls r0, r0, #1 + ldr r1, _080040A4 @ =gSineTable + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + rsbs r0, r0, #0 + asrs r0, r0, #6 + ldr r5, _080040A8 @ =sa2__gUnknown_030017F0 + ldrh r1, [r5] + adds r2, r0, #0 + muls r2, r1, r2 + lsls r2, r2, #8 + asrs r2, r2, #0x10 + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r7, #0 + ldrsh r1, [r3, r7] + muls r0, r1, r0 + lsls r0, r0, #8 + asrs r0, r0, #0x10 + muls r0, r2, r0 + asrs r0, r0, #8 + mov r1, ip + strh r0, [r1] + add r5, sp, #0x1c + ldr r2, _0800409C @ =sa2__gUnknown_03001944 + ldrh r0, [r2] + lsls r0, r0, #1 + ldr r7, _080040A4 @ =gSineTable + adds r0, r0, r7 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + adds r2, r0, #0 + muls r2, r4, r2 + lsls r2, r2, #8 + asrs r2, r2, #0x10 + mov r1, sl + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r4, #0 + ldrsh r1, [r3, r4] + muls r0, r1, r0 + lsls r0, r0, #8 + asrs r0, r0, #0x10 + muls r0, r2, r0 + asrs r0, r0, #8 + strh r0, [r5] + mov r4, sp + adds r4, #0x1e + ldr r7, _0800409C @ =sa2__gUnknown_03001944 + ldrh r0, [r7] + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r2, _080040A4 @ =gSineTable + adds r0, r0, r2 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r7, _080040AC @ =sa2__gUnknown_03005394 + ldrh r1, [r7] + adds r2, r0, #0 + muls r2, r1, r2 + lsls r2, r2, #8 + asrs r2, r2, #0x10 + mov r1, sl + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r7, #0 + ldrsh r1, [r3, r7] + muls r0, r1, r0 + lsls r0, r0, #8 + asrs r0, r0, #0x10 + muls r0, r2, r0 + asrs r0, r0, #8 + strh r0, [r4] + mov r1, r8 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r2, #6 + ldrsh r1, [r6, r2] + muls r1, r0, r1 + mov r3, ip + ldrh r0, [r3] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r7, #8 + ldrsh r2, [r6, r7] + muls r0, r2, r0 + adds r1, r1, r0 + ldr r0, _080040B4 @ =sa2__gUnknown_0300194C + movs r2, #0 + ldrsh r0, [r0, r2] + lsls r0, r0, #8 + adds r1, r1, r0 + asrs r1, r1, #8 + str r1, [sp, #0x10] + ldrh r0, [r5] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r3, #6 + ldrsh r1, [r6, r3] + muls r1, r0, r1 + ldrh r0, [r4] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r4, #8 + ldrsh r2, [r6, r4] + muls r0, r2, r0 + adds r1, r1, r0 + ldr r0, _080040B8 @ =sa2__gUnknown_03002820 + movs r5, #0 + ldrsh r0, [r0, r5] + lsls r0, r0, #8 + adds r1, r1, r0 + asrs r1, r1, #8 + str r1, [sp, #0x14] + ldr r6, [sp, #0x30] + ldr r7, [sp, #0x34] + ldr r0, [sp, #0x38] + mov r8, r0 + ldr r1, [sp, #0x2c] + cmp r1, #0 + ble _080040BC + mov r2, sb + ldrh r4, [r2, #8] + ldrh r2, [r2, #4] + b _080040CA + .align 2, 0 +_08004098: .4byte gOamBuffer+0x6 +_0800409C: .4byte sa2__gUnknown_03001944 +_080040A0: .4byte 0x000003FF +_080040A4: .4byte gSineTable +_080040A8: .4byte sa2__gUnknown_030017F0 +_080040AC: .4byte sa2__gUnknown_03005394 +_080040B0: .4byte sa2__gUnknown_03005398 +_080040B4: .4byte sa2__gUnknown_0300194C +_080040B8: .4byte sa2__gUnknown_03002820 +_080040BC: + mov r3, sb + ldrh r1, [r3, #4] + ldrh r0, [r3, #8] + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + adds r2, r1, #0 +_080040CA: + mov r5, sp + ldrh r5, [r5, #0x3c] + lsls r0, r5, #0x10 + cmp r0, #0 + ble _080040DC + mov r0, sb + ldrh r3, [r0, #0xa] + ldrh r5, [r0, #6] + b _080040EA +_080040DC: + mov r3, sb + ldrh r1, [r3, #6] + ldrh r0, [r3, #0xa] + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + adds r5, r1, #0 +_080040EA: + mov r0, sp + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + lsls r4, r4, #0x10 + asrs r4, r4, #0x10 + lsrs r2, r2, #1 + subs r4, r4, r2 + adds r1, r0, #0 + muls r1, r4, r1 + ldrh r0, [r6] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + lsls r3, r3, #0x10 + asrs r3, r3, #0x10 + lsrs r5, r5, #1 + subs r3, r3, r5 + muls r0, r3, r0 + adds r1, r1, r0 + lsls r2, r2, #8 + adds r1, r1, r2 + asrs r1, r1, #8 + ldr r0, [sp, #0x10] + subs r0, r0, r1 + str r0, [sp, #0x10] + ldrh r0, [r7] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r0, #0 + muls r1, r4, r1 + mov r4, r8 + ldrh r0, [r4] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r3, r0 + adds r1, r1, r0 + lsls r5, r5, #8 + adds r1, r1, r5 + asrs r1, r1, #8 + ldr r0, [sp, #0x14] + subs r0, r0, r1 + str r0, [sp, #0x14] + ldr r0, [sp, #0x10] + ldr r5, [sp, #0x24] + strh r0, [r5, #0x16] + ldr r0, [sp, #0x14] + strh r0, [r5, #0x18] +_08004148: + add sp, #0x40 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/engine/sa2__unused_sub_8005C54.inc b/sa1/asm/non_matching/engine/sa2__unused_sub_8005C54.inc new file mode 100644 index 0000000000..bab3dc6e87 --- /dev/null +++ b/sa1/asm/non_matching/engine/sa2__unused_sub_8005C54.inc @@ -0,0 +1,450 @@ +.include "asm/macros.inc" +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x2c + ldr r4, [sp, #0x4c] + ldr r5, [sp, #0x50] + mov sb, r5 + ldr r5, [sp, #0x54] + ldr r6, [sp, #0x58] + ldr r7, [sp, #0x5c] + mov r8, r7 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp] + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + mov ip, r1 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #4] + lsls r3, r3, #0x18 + lsrs r3, r3, #0x18 + mov sl, r3 + lsls r4, r4, #0x18 + lsrs r4, r4, #0x18 + str r4, [sp, #8] + mov r0, sb + lsls r0, r0, #0x10 + lsls r5, r5, #0x10 + lsrs r5, r5, #0x10 + str r5, [sp, #0xc] + lsls r6, r6, #0x18 + lsrs r6, r6, #0x18 + mov r1, r8 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #0x10] + movs r2, #1 + str r2, [sp, #0x14] + lsrs r5, r0, #0x10 + asrs r2, r0, #0x10 + cmp r2, #0 + beq _08004BFE + movs r0, #0x80 + lsls r0, r0, #1 + cmp r2, r0 + bne _08004C10 +_08004BFE: + ldr r0, _08004C0C @ =gFlags + ldr r1, [r0] + movs r2, #5 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0] + b _08004EE6 + .align 2, 0 +_08004C0C: .4byte gFlags +_08004C10: + ldr r3, [sp, #0xc] + mov r4, ip + subs r0, r3, r4 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + ldr r7, [sp, #4] + subs r0, r7, r3 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + cmp r2, #0 + bge _08004C50 + movs r0, #0xff + str r0, [sp, #0x14] + rsbs r0, r2, #0 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r2, [sp, #0xc] + adds r0, r2, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #4] + subs r0, r2, r3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov ip, r0 + eors r1, r3 + lsls r1, r1, #0x10 + lsrs r0, r1, #0x10 + eors r3, r0 + lsls r0, r3, #0x10 + eors r0, r1 + lsrs r1, r0, #0x10 +_08004C50: + lsls r0, r1, #0x10 + asrs r4, r0, #0x10 + lsls r1, r5, #0x10 + asrs r7, r1, #0x10 + adds r0, r4, #0 + muls r0, r7, r0 + asrs r0, r0, #8 + mov r5, sl + subs r2, r6, r5 + str r1, [sp, #0x20] + lsls r3, r3, #0x10 + mov r8, r3 + ldr r1, [sp, #8] + subs r1, r1, r6 + str r1, [sp, #0x28] + ldr r3, [sp] + lsls r3, r3, #2 + str r3, [sp, #0x1c] + ldr r5, [sp, #0x14] + lsls r5, r5, #0x18 + str r5, [sp, #0x24] + cmp r0, r2 + bge _08004CC4 + mov r3, sl + lsls r0, r7, #8 + muls r0, r4, r0 + lsls r0, r0, #8 + asrs r0, r0, #0x18 + subs r0, r6, r0 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov sl, r0 + lsls r1, r3, #2 + ldr r7, _08004D70 @ =gBgOffsetsHBlankPrimary + ldr r0, [r7] + adds r4, r0, r1 + mov r0, ip + subs r5, r0, r3 + ldr r1, _08004D74 @ =0x000001FF + adds r0, r1, #0 + ands r5, r0 + cmp r3, sl + bhs _08004CC4 +_08004CA6: + mov r2, sp + ldrh r2, [r2, #0x10] + strh r2, [r4] + adds r4, #2 + adds r0, r5, #0 + subs r1, r0, #1 + lsls r1, r1, #0x10 + lsrs r5, r1, #0x10 + strh r0, [r4] + adds r4, #2 + adds r0, r3, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + cmp r3, sl + blo _08004CA6 +_08004CC4: + mov r3, r8 + asrs r2, r3, #0x10 + ldr r4, [sp, #0x20] + asrs r1, r4, #0x10 + adds r0, r2, #0 + muls r0, r1, r0 + asrs r0, r0, #8 + mov r5, sl + subs r5, r6, r5 + mov r8, r5 + mov r7, sl + lsls r7, r7, #2 + mov sb, r7 + ldr r3, [sp, #0x28] + cmp r0, r3 + bge _08004D2C + ldr r7, [sp, #8] + lsls r0, r1, #8 + muls r0, r2, r0 + lsls r0, r0, #8 + asrs r0, r0, #0x18 + adds r0, r6, r0 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #8] + adds r3, r0, #0 + lsls r1, r0, #2 + ldr r4, _08004D70 @ =gBgOffsetsHBlankPrimary + ldr r0, [r4] + adds r4, r0, r1 + ldr r0, [sp, #4] + subs r5, r0, r3 + ldr r1, _08004D74 @ =0x000001FF + adds r0, r1, #0 + ands r5, r0 + cmp r3, r7 + bhs _08004D2C +_08004D0E: + mov r2, sp + ldrh r2, [r2, #0x10] + strh r2, [r4] + adds r4, #2 + adds r0, r5, #0 + subs r1, r0, #1 + lsls r1, r1, #0x10 + lsrs r5, r1, #0x10 + strh r0, [r4] + adds r4, #2 + adds r0, r3, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + cmp r3, r7 + blo _08004D0E +_08004D2C: + ldr r3, _08004D78 @ =gFlags + ldr r0, [r3] + movs r1, #4 + orrs r0, r1 + str r0, [r3] + ldr r4, [sp, #0x1c] + ldr r5, _08004D7C @ =0x04000010 + adds r0, r4, r5 + ldr r7, _08004D80 @ =gHBlankCopyTarget + str r0, [r7] + ldr r0, _08004D84 @ =gHBlankCopySize + strb r1, [r0] + ldr r1, _08004D70 @ =gBgOffsetsHBlankPrimary + ldr r0, [r1] + mov r2, sb + adds r4, r0, r2 + mov r3, r8 + lsls r6, r3, #8 + lsls r0, r3, #0x10 + ldr r5, [sp, #0x20] + asrs r1, r5, #0x10 + bl __divsi3 + asrs r2, r0, #8 + ldr r7, [sp, #0x24] + asrs r1, r7, #0x18 + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _08004D88 + ldr r1, [sp, #0xc] + subs r0, r1, r2 + b _08004D8C + .align 2, 0 +_08004D70: .4byte gBgOffsetsHBlankPrimary +_08004D74: .4byte 0x000001FF +_08004D78: .4byte gFlags +_08004D7C: .4byte 0x04000010 +_08004D80: .4byte gHBlankCopyTarget +_08004D84: .4byte gHBlankCopySize +_08004D88: + ldr r1, [sp, #0xc] + adds r0, r1, r2 +_08004D8C: + mov r3, sl + subs r5, r0, r3 + ldr r7, _08004E34 @ =0x000001FF + adds r0, r7, #0 + ands r5, r0 + ldr r0, [sp, #0x20] + asrs r7, r0, #0x10 + adds r0, r2, #0 + muls r0, r7, r0 + subs r0, r6, r0 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + asrs r1, r0, #0x10 + cmp r1, #0 + beq _08004DBA + ldr r2, [sp, #0x24] + asrs r0, r2, #0x18 + subs r0, r5, r0 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + subs r0, r7, r1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 +_08004DBA: + movs r3, #0x80 + lsls r3, r3, #1 + mov r8, r3 + cmp r7, r8 + ble _08004E38 + mov r3, sl + ldr r0, [sp, #8] + cmp r3, r0 + blo _08004DCE + b _08004EE6 +_08004DCE: + ldr r1, [sp, #0x20] + mov sl, r1 + mov sb, r7 + ldr r2, _08004E34 @ =0x000001FF + mov ip, r2 +_08004DD8: + mov r7, sp + ldrh r7, [r7, #0x10] + strh r7, [r4] + adds r4, #2 + strh r5, [r4] + adds r4, #2 + subs r0, r5, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + lsls r2, r6, #0x10 + asrs r0, r2, #0x10 + mov r7, sl + adds r3, #1 + mov r8, r3 + cmp r0, sb + ble _08004E22 + ldr r0, [sp, #0x24] + asrs r3, r0, #0x18 +_08004E0A: + adds r0, r5, r3 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + asrs r0, r2, #0x10 + asrs r1, r7, #0x10 + subs r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + lsls r2, r6, #0x10 + asrs r0, r2, #0x10 + cmp r0, r1 + bgt _08004E0A +_08004E22: + mov r1, ip + ands r5, r1 + mov r2, r8 + lsls r0, r2, #0x18 + lsrs r3, r0, #0x18 + ldr r7, [sp, #8] + cmp r3, r7 + blo _08004DD8 + b _08004EE6 + .align 2, 0 +_08004E34: .4byte 0x000001FF +_08004E38: + movs r0, #0x80 + lsls r0, r0, #9 + adds r1, r7, #0 + bl __udivsi3 + lsrs r0, r0, #8 + movs r1, #0xff + ands r0, r1 + adds r1, r0, #0 + muls r1, r7, r1 + mov r2, r8 + subs r1, r2, r1 + lsls r1, r1, #0x10 + lsrs r2, r1, #0x10 + subs r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + ldr r3, [sp, #0x24] + asrs r1, r3, #0x18 + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08004E78 + mov r1, sb + lsls r0, r1, #0x10 + movs r3, #0x80 + lsls r3, r3, #0xa + adds r0, r0, r3 + rsbs r0, r0, #0 + lsrs r0, r0, #0x10 + mov sb, r0 +_08004E78: + mov r3, sl + ldr r0, [sp, #8] + cmp r3, r0 + bhs _08004EE6 + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + str r0, [sp, #0x18] + ldr r1, [sp, #0x20] + mov ip, r1 + mov sl, r7 +_08004E8C: + mov r2, sp + ldrh r2, [r2, #0x10] + strh r2, [r4] + adds r4, #2 + strh r5, [r4] + adds r4, #2 + mov r7, sb + adds r0, r5, r7 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + ldr r1, [sp, #0x18] + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + lsls r2, r6, #0x10 + asrs r0, r2, #0x10 + mov r7, ip + adds r3, #1 + mov r8, r3 + cmp r0, sl + ble _08004ED6 + ldr r0, [sp, #0x24] + asrs r3, r0, #0x18 +_08004EBE: + adds r0, r5, r3 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + asrs r0, r2, #0x10 + asrs r1, r7, #0x10 + subs r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + lsls r2, r6, #0x10 + asrs r0, r2, #0x10 + cmp r0, r1 + bgt _08004EBE +_08004ED6: + ldr r1, _08004EF8 @ =0x000001FF + ands r5, r1 + mov r2, r8 + lsls r0, r2, #0x18 + lsrs r3, r0, #0x18 + ldr r7, [sp, #8] + cmp r3, r7 + blo _08004E8C +_08004EE6: + add sp, #0x2c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08004EF8: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/engine/sa2__unused_sub_8005FB4.inc b/sa1/asm/non_matching/engine/sa2__unused_sub_8005FB4.inc new file mode 100644 index 0000000000..af51806bf8 --- /dev/null +++ b/sa1/asm/non_matching/engine/sa2__unused_sub_8005FB4.inc @@ -0,0 +1,338 @@ + + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r4, [sp, #0x20] + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 + lsls r1, r1, #0x18 + lsrs r5, r1, #0x18 + lsls r2, r2, #0x18 + lsrs r2, r2, #0x18 + mov sl, r2 + lsls r3, r3, #0x18 + lsrs r2, r3, #0x18 + lsls r4, r4, #0x18 + lsrs r4, r4, #0x18 + ldr r1, _08004F40 @ =gFlags + ldr r0, [r1] + movs r7, #4 + orrs r0, r7 + str r0, [r1] + cmp r6, #1 + bls _08004F58 + ldr r1, _08004F44 @ =gHBlankCopySize + strb r7, [r1] + movs r0, #1 + ands r0, r6 + cmp r0, #0 + beq _08004F4C + ldr r0, _08004F48 @ =gBgOffsetsHBlankPrimary + ldr r0, [r0] + adds r3, r0, #2 + b _08004F80 + .align 2, 0 +_08004F40: .4byte gFlags +_08004F44: .4byte gHBlankCopySize +_08004F48: .4byte gBgOffsetsHBlankPrimary +_08004F4C: + ldr r0, _08004F54 @ =gBgOffsetsHBlankPrimary + ldr r3, [r0] + b _08004F80 + .align 2, 0 +_08004F54: .4byte gBgOffsetsHBlankPrimary +_08004F58: + ldr r1, _08004F70 @ =gHBlankCopySize + movs r0, #2 + strb r0, [r1] + ldr r0, _08004F74 @ =gBgOffsetsHBlankPrimary + ldr r3, [r0] + movs r0, #1 + ands r0, r6 + cmp r0, #0 + beq _08004F80 + ldr r1, _08004F78 @ =gHBlankCopyTarget + ldr r0, _08004F7C @ =0x04000042 + b _08004F84 + .align 2, 0 +_08004F70: .4byte gHBlankCopySize +_08004F74: .4byte gBgOffsetsHBlankPrimary +_08004F78: .4byte gHBlankCopyTarget +_08004F7C: .4byte 0x04000042 +_08004F80: + ldr r1, _08004FE8 @ =gHBlankCopyTarget + ldr r0, _08004FEC @ =0x04000040 +_08004F84: + str r0, [r1] + subs r1, r2, r5 + mov r2, sl + subs r0, r4, r2 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + lsls r7, r1, #0x10 + asrs r2, r7, #0x10 + adds r0, r2, #0 + cmp r2, #0 + bge _08004F9C + rsbs r0, r2, #0 +_08004F9C: + lsls r0, r0, #0x11 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r0, r4, #0x10 + asrs r1, r0, #0x10 + adds r4, r1, #0 + mov sb, r0 + cmp r1, #0 + bge _08004FB0 + rsbs r4, r1, #0 +_08004FB0: + lsls r0, r4, #0x11 + lsrs r0, r0, #0x10 + mov ip, r0 + ldr r4, _08004FF0 @ =gHBlankCopySize + ldrb r0, [r4] + mov r4, sl + muls r4, r0, r4 + adds r0, r4, #0 + adds r3, r3, r0 + adds r6, r2, #0 + cmp r2, #0 + bge _08004FCA + rsbs r6, r2, #0 +_08004FCA: + adds r0, r1, #0 + cmp r1, #0 + bge _08004FD2 + rsbs r0, r1, #0 +_08004FD2: + cmp r6, r0 + ble _080050A4 + rsbs r0, r2, #0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + cmp r2, #0 + ble _08005044 + strb r5, [r3, #1] + movs r2, #0 + adds r6, r7, #0 + b _0800502C + .align 2, 0 +_08004FE8: .4byte gHBlankCopyTarget +_08004FEC: .4byte 0x04000040 +_08004FF0: .4byte gHBlankCopySize +_08004FF4: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + mov r4, ip + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r4, r1, #0x10 + asrs r1, r1, #0x10 + cmp r1, #0 + blt _08005026 + mov r4, r8 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + strb r5, [r3] + ldr r1, _08005040 @ =gHBlankCopySize + ldrb r0, [r1] + adds r3, r3, r0 + strb r5, [r3, #1] +_08005026: + adds r0, r2, #1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 +_0800502C: + lsls r0, r2, #0x10 + asrs r2, r0, #0x10 + asrs r0, r6, #0x10 + cmp r0, #0 + bge _08005038 + rsbs r0, r0, #0 +_08005038: + cmp r2, r0 + blt _08004FF4 + strb r5, [r3] + b _0800515C + .align 2, 0 +_08005040: .4byte gHBlankCopySize +_08005044: + strb r5, [r3] + adds r3, #1 + movs r2, #0 + adds r6, r7, #0 + b _0800508A +_0800504E: + subs r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + mov r4, ip + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r4, r1, #0x10 + asrs r1, r1, #0x10 + cmp r1, #0 + blt _08005084 + mov r4, r8 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + strb r5, [r3] + ldr r1, _080050A0 @ =gHBlankCopySize + ldrb r0, [r1] + adds r0, r0, r3 + subs r3, r0, #1 + strb r5, [r3] + adds r3, #1 +_08005084: + adds r0, r2, #1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 +_0800508A: + lsls r0, r2, #0x10 + asrs r2, r0, #0x10 + asrs r0, r6, #0x10 + cmp r0, #0 + bge _08005096 + rsbs r0, r0, #0 +_08005096: + cmp r2, r0 + blt _0800504E + strb r5, [r3] + b _0800515C + .align 2, 0 +_080050A0: .4byte gHBlankCopySize +_080050A4: + rsbs r0, r1, #0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + cmp r2, #0 + ble _08005108 + movs r2, #0 + mov r1, r8 + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + mov r8, r0 + mov r1, ip + lsls r0, r1, #0x10 + asrs r7, r0, #0x10 + b _080050F0 +_080050C0: + adds r2, r5, #1 + strb r2, [r3] + adds r3, #1 + strb r5, [r3] + ldr r1, _08005104 @ =gHBlankCopySize + ldrb r0, [r1] + adds r0, r0, r3 + subs r3, r0, #1 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + add r0, r8 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + asrs r1, r0, #0x10 + cmp r1, #0 + blt _080050EA + lsls r0, r2, #0x18 + lsrs r5, r0, #0x18 + subs r0, r1, r7 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 +_080050EA: + adds r0, r6, #1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 +_080050F0: + lsls r0, r2, #0x10 + asrs r6, r0, #0x10 + mov r2, sb + asrs r0, r2, #0x10 + cmp r0, #0 + bge _080050FE + rsbs r0, r0, #0 +_080050FE: + cmp r6, r0 + blt _080050C0 + b _0800515C + .align 2, 0 +_08005104: .4byte gHBlankCopySize +_08005108: + movs r2, #0 + mov r1, r8 + lsls r0, r1, #0x10 + asrs r7, r0, #0x10 + mov r1, ip + lsls r0, r1, #0x10 + asrs r6, r0, #0x10 + b _0800514A +_08005118: + adds r0, r5, #1 + strb r0, [r3] + adds r3, #1 + strb r5, [r3] + ldr r1, _0800516C @ =gHBlankCopySize + ldrb r0, [r1] + adds r0, r0, r3 + subs r3, r0, #1 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + adds r0, r0, r7 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + asrs r1, r0, #0x10 + cmp r1, #0 + blt _08005144 + subs r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + subs r0, r1, r6 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 +_08005144: + adds r0, r2, #1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 +_0800514A: + lsls r0, r2, #0x10 + asrs r2, r0, #0x10 + mov r1, sb + asrs r0, r1, #0x10 + cmp r0, #0 + bge _08005158 + rsbs r0, r0, #0 +_08005158: + cmp r2, r0 + blt _08005118 +_0800515C: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0800516C: .4byte gHBlankCopySize + +.syntax divided diff --git a/sa1/asm/non_matching/engine/sa2__unused_sub_800672C.inc b/sa1/asm/non_matching/engine/sa2__unused_sub_800672C.inc new file mode 100644 index 0000000000..ef5facaca1 --- /dev/null +++ b/sa1/asm/non_matching/engine/sa2__unused_sub_800672C.inc @@ -0,0 +1,904 @@ +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x30 + mov ip, r1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + ldr r1, _080056A8 @ =gFlags + ldr r0, [r1] + movs r3, #4 + orrs r0, r3 + str r0, [r1] + cmp r2, #1 + bls _080056C0 + ldr r1, _080056AC @ =gHBlankCopySize + strb r3, [r1] + movs r0, #1 + ands r0, r2 + cmp r0, #0 + beq _080056B4 + ldr r0, _080056B0 @ =gBgOffsetsHBlankPrimary + ldr r0, [r0] + adds r7, r0, #2 + b _080056E8 + .align 2, 0 +_080056A8: .4byte gFlags +_080056AC: .4byte gHBlankCopySize +_080056B0: .4byte gBgOffsetsHBlankPrimary +_080056B4: + ldr r0, _080056BC @ =gBgOffsetsHBlankPrimary + ldr r7, [r0] + b _080056E8 + .align 2, 0 +_080056BC: .4byte gBgOffsetsHBlankPrimary +_080056C0: + ldr r1, _080056D8 @ =gHBlankCopySize + movs r0, #2 + strb r0, [r1] + ldr r0, _080056DC @ =gBgOffsetsHBlankPrimary + ldr r7, [r0] + movs r0, #1 + ands r0, r2 + cmp r0, #0 + beq _080056E8 + ldr r1, _080056E0 @ =gHBlankCopyTarget + ldr r0, _080056E4 @ =0x04000042 + b _080056EC + .align 2, 0 +_080056D8: .4byte gHBlankCopySize +_080056DC: .4byte gBgOffsetsHBlankPrimary +_080056E0: .4byte gHBlankCopyTarget +_080056E4: .4byte 0x04000042 +_080056E8: + ldr r1, _080057EC @ =gHBlankCopyTarget + ldr r0, _080057F0 @ =0x04000040 +_080056EC: + str r0, [r1] + mov r2, sp + mov r1, ip + ldrb r0, [r1, #2] + ldrb r1, [r1] + subs r0, r0, r1 + strh r0, [r2] + add r2, sp, #4 + mov r3, ip + ldrb r0, [r3, #3] + ldrb r1, [r3, #1] + subs r0, r0, r1 + strh r0, [r2] + mov r0, sp + movs r5, #0 + ldrsh r0, [r0, r5] + ldrb r3, [r3] + mov r1, ip + ldrb r4, [r1, #1] + adds r2, #8 + str r2, [sp, #0x24] + cmp r0, #0 + bge _0800571C + rsbs r0, r0, #0 +_0800571C: + lsls r0, r0, #1 + ldr r5, [sp, #0x24] + strh r0, [r5] + mov r1, sp + movs r2, #4 + ldrsh r0, [r1, r2] + adds r1, #0x10 + str r1, [sp, #0x28] + cmp r0, #0 + bge _08005732 + rsbs r0, r0, #0 +_08005732: + lsls r0, r0, #1 + ldr r5, [sp, #0x28] + strh r0, [r5] + mov r1, sp + mov r2, ip + ldrb r0, [r2, #4] + subs r0, r0, r3 + strh r0, [r1, #2] + ldrb r0, [r2, #5] + subs r0, r0, r4 + strh r0, [r1, #6] + mov r0, sp + movs r3, #2 + ldrsh r0, [r0, r3] + cmp r0, #0 + bge _08005754 + rsbs r0, r0, #0 +_08005754: + lsls r0, r0, #1 + ldr r5, [sp, #0x24] + strh r0, [r5, #2] + mov r1, sp + movs r2, #6 + ldrsh r0, [r1, r2] + cmp r0, #0 + bge _08005766 + rsbs r0, r0, #0 +_08005766: + lsls r0, r0, #1 + ldr r3, [sp, #0x28] + strh r0, [r3, #2] + add r2, sp, #0x14 + mov r5, ip + ldrb r0, [r5] + strb r0, [r2, #1] + strb r0, [r2] + ldr r1, _080057F4 @ =gHBlankCopySize + ldrb r0, [r1] + muls r0, r4, r0 + adds r7, r7, r0 + add r1, sp, #8 + mov r3, sp + ldrh r0, [r3, #4] + rsbs r0, r0, #0 + strh r0, [r1] + ldrh r0, [r3, #6] + rsbs r0, r0, #0 + strh r0, [r1, #2] + ldrb r0, [r5, #5] + ldrb r3, [r5, #3] + adds r6, r2, #0 + mov sb, r1 + cmp r0, r3 + bls _0800579C + adds r0, r3, #0 +_0800579C: + str r0, [sp, #0x18] + cmp r4, r0 + bhs _08005882 + mov r8, sb +_080057A4: + ldrb r0, [r6, #1] + strb r0, [r7] + ldrb r0, [r6] + strb r0, [r7, #1] + mov r3, r8 + mov r5, sp + ldrh r2, [r5, #0xc] + ldrh r0, [r3] + adds r2, r2, r0 + strh r2, [r3] + ldrh r0, [r3, #2] + ldrh r1, [r5, #0xe] + adds r0, r0, r1 + strh r0, [r3, #2] + lsls r2, r2, #0x10 + adds r4, #1 + mov sl, r4 + cmp r2, #0 + blt _0800581E + str r6, [sp, #0x2c] + ldr r4, [sp, #0x28] + mov r2, sb +_080057D0: + mov r0, sp + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + ble _080057F8 + ldr r5, [sp, #0x2c] + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + ldrh r0, [r3] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r3] + b _08005814 + .align 2, 0 +_080057EC: .4byte gHBlankCopyTarget +_080057F0: .4byte 0x04000040 +_080057F4: .4byte gHBlankCopySize +_080057F8: + ldrb r0, [r6] + cmp r0, #0 + beq _08005802 + subs r0, #1 + strb r0, [r6] +_08005802: + ldrh r0, [r2] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005814 + ldrb r0, [r6] + strb r0, [r7, #1] +_08005814: + mov r3, sb + movs r1, #0 + ldrsh r0, [r3, r1] + cmp r0, #0 + bge _080057D0 +_0800581E: + mov r2, r8 + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005870 + adds r3, r6, #0 + ldr r5, [sp, #0x28] + mov r4, sb +_0800582E: + mov r0, sp + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + ble _08005854 + ldrb r0, [r3, #1] + adds r0, #1 + strb r0, [r3, #1] + ldrh r0, [r2, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005866 + ldrb r0, [r6, #1] + adds r0, #1 + strb r0, [r7] + b _08005866 +_08005854: + ldrb r0, [r3, #1] + cmp r0, #0 + beq _0800585E + subs r0, #1 + strb r0, [r6, #1] +_0800585E: + ldrh r0, [r4, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r4, #2] +_08005866: + mov r2, sb + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _0800582E +_08005870: + ldr r2, _08005934 @ =gHBlankCopySize + ldrb r0, [r2] + adds r7, r7, r0 + mov r3, sl + lsls r0, r3, #0x18 + lsrs r4, r0, #0x18 + ldr r5, [sp, #0x18] + cmp r4, r5 + blo _080057A4 +_08005882: + mov r1, ip + ldrb r0, [r1, #3] + ldrb r2, [r1, #5] + cmp r0, r2 + bne _0800588E + b _08005B78 +_0800588E: + ldr r3, [sp, #0x18] + cmp r3, r0 + beq _08005896 + b _080059FC +_08005896: + mov r2, sp + ldrb r0, [r1, #6] + ldrb r1, [r1, #2] + subs r0, r0, r1 + strh r0, [r2] + mov r5, ip + ldrb r0, [r5, #7] + ldrb r1, [r5, #3] + subs r0, r0, r1 + strh r0, [r2, #4] + mov r0, sp + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + bge _080058B6 + rsbs r0, r0, #0 +_080058B6: + lsls r0, r0, #1 + ldr r2, [sp, #0x24] + strh r0, [r2] + mov r3, sp + movs r5, #4 + ldrsh r0, [r3, r5] + cmp r0, #0 + bge _080058C8 + rsbs r0, r0, #0 +_080058C8: + lsls r0, r0, #1 + ldr r1, [sp, #0x28] + strh r0, [r1] + mov r2, sp + ldrh r0, [r2, #4] + rsbs r0, r0, #0 + mov r3, sb + strh r0, [r3] + mov r5, ip + ldrb r0, [r5, #2] + strb r0, [r6] + ldrb r0, [r5, #5] + str r0, [sp, #0x18] + cmp r4, r0 + bhs _080059C2 + mov r8, sb + ldr r1, [sp, #0x24] + str r1, [sp, #0x1c] +_080058EC: + ldrb r0, [r6, #1] + strb r0, [r7] + ldrb r0, [r6] + strb r0, [r7, #1] + mov r3, r8 + ldr r5, [sp, #0x1c] + ldrh r2, [r5] + ldrh r0, [r3] + adds r2, r2, r0 + strh r2, [r3] + ldrh r0, [r3, #2] + ldrh r1, [r5, #2] + adds r0, r0, r1 + strh r0, [r3, #2] + lsls r2, r2, #0x10 + adds r4, #1 + mov sl, r4 + cmp r2, #0 + blt _0800595E + str r6, [sp, #0x2c] + ldr r4, [sp, #0x28] + mov r2, sb +_08005918: + mov r0, sp + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + ble _08005938 + ldr r5, [sp, #0x2c] + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + ldrh r0, [r3] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r3] + b _08005954 + .align 2, 0 +_08005934: .4byte gHBlankCopySize +_08005938: + ldrb r0, [r6] + cmp r0, #0 + beq _08005942 + subs r0, #1 + strb r0, [r6] +_08005942: + ldrh r0, [r2] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005954 + ldrb r0, [r6] + strb r0, [r7, #1] +_08005954: + mov r3, sb + movs r1, #0 + ldrsh r0, [r3, r1] + cmp r0, #0 + bge _08005918 +_0800595E: + mov r2, r8 + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _080059B0 + adds r3, r6, #0 + ldr r5, [sp, #0x28] + mov r4, sb +_0800596E: + mov r0, sp + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + ble _08005994 + ldrb r0, [r3, #1] + adds r0, #1 + strb r0, [r3, #1] + ldrh r0, [r2, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _080059A6 + ldrb r0, [r6, #1] + adds r0, #1 + strb r0, [r7] + b _080059A6 +_08005994: + ldrb r0, [r3, #1] + cmp r0, #0 + beq _0800599E + subs r0, #1 + strb r0, [r6, #1] +_0800599E: + ldrh r0, [r4, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r4, #2] +_080059A6: + mov r2, sb + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _0800596E +_080059B0: + ldr r2, _080059F8 @ =gHBlankCopySize + ldrb r0, [r2] + adds r7, r7, r0 + mov r3, sl + lsls r0, r3, #0x18 + lsrs r4, r0, #0x18 + ldr r5, [sp, #0x18] + cmp r4, r5 + blo _080058EC +_080059C2: + mov r2, sp + mov r1, ip + ldrb r0, [r1, #6] + ldrb r1, [r1, #4] + subs r0, r0, r1 + strh r0, [r2, #2] + mov r2, ip + ldrb r0, [r2, #7] + ldrb r1, [r2, #5] + subs r0, r0, r1 + mov r3, sp + strh r0, [r3, #6] + mov r0, sp + movs r5, #2 + ldrsh r0, [r0, r5] + ldrb r3, [r2, #7] + cmp r0, #0 + bge _080059E8 + rsbs r0, r0, #0 +_080059E8: + lsls r0, r0, #1 + ldr r1, [sp, #0x24] + strh r0, [r1, #2] + mov r2, sp + movs r5, #6 + ldrsh r0, [r2, r5] + b _08005BEC + .align 2, 0 +_080059F8: .4byte gHBlankCopySize +_080059FC: + mov r2, sp + mov r3, ip + ldrb r0, [r3, #6] + ldrb r1, [r3, #4] + subs r0, r0, r1 + strh r0, [r2, #2] + ldrb r0, [r3, #7] + ldrb r1, [r3, #5] + subs r0, r0, r1 + strh r0, [r2, #6] + mov r0, sp + movs r5, #2 + ldrsh r0, [r0, r5] + cmp r0, #0 + bge _08005A1C + rsbs r0, r0, #0 +_08005A1C: + lsls r0, r0, #1 + ldr r1, [sp, #0x24] + strh r0, [r1, #2] + mov r2, sp + movs r3, #6 + ldrsh r0, [r2, r3] + cmp r0, #0 + bge _08005A2E + rsbs r0, r0, #0 +_08005A2E: + lsls r0, r0, #1 + ldr r5, [sp, #0x28] + strh r0, [r5, #2] + mov r1, sp + ldrh r0, [r1, #6] + rsbs r0, r0, #0 + mov r2, sb + strh r0, [r2, #2] + mov r3, ip + ldrb r0, [r3, #4] + strb r0, [r6, #1] + ldrb r5, [r3, #3] + str r5, [sp, #0x18] + cmp r4, r5 + bhs _08005B24 + mov r8, sb + ldr r0, [sp, #0x24] + str r0, [sp, #0x20] +_08005A52: + ldrb r0, [r6, #1] + strb r0, [r7] + ldrb r0, [r6] + strb r0, [r7, #1] + mov r3, r8 + ldr r1, [sp, #0x20] + ldrh r2, [r1] + ldrh r5, [r3] + adds r2, r2, r5 + strh r2, [r3] + ldrh r0, [r3, #2] + ldrh r1, [r1, #2] + adds r0, r0, r1 + strh r0, [r3, #2] + lsls r2, r2, #0x10 + adds r4, #1 + mov sl, r4 + cmp r2, #0 + blt _08005AC0 + str r6, [sp, #0x2c] + ldr r4, [sp, #0x28] + mov r2, sb +_08005A7E: + mov r0, sp + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + ble _08005A9A + ldr r5, [sp, #0x2c] + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + ldrh r0, [r3] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r3] + b _08005AB6 +_08005A9A: + ldrb r0, [r6] + cmp r0, #0 + beq _08005AA4 + subs r0, #1 + strb r0, [r6] +_08005AA4: + ldrh r0, [r2] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005AB6 + ldrb r0, [r6] + strb r0, [r7, #1] +_08005AB6: + mov r3, sb + movs r1, #0 + ldrsh r0, [r3, r1] + cmp r0, #0 + bge _08005A7E +_08005AC0: + mov r2, r8 + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005B12 + adds r3, r6, #0 + ldr r5, [sp, #0x28] + mov r4, sb +_08005AD0: + mov r0, sp + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + ble _08005AF6 + ldrb r0, [r3, #1] + adds r0, #1 + strb r0, [r3, #1] + ldrh r0, [r2, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005B08 + ldrb r0, [r6, #1] + adds r0, #1 + strb r0, [r7] + b _08005B08 +_08005AF6: + ldrb r0, [r3, #1] + cmp r0, #0 + beq _08005B00 + subs r0, #1 + strb r0, [r6, #1] +_08005B00: + ldrh r0, [r4, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r4, #2] +_08005B08: + mov r2, sb + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _08005AD0 +_08005B12: + ldr r2, _08005B74 @ =gHBlankCopySize + ldrb r0, [r2] + adds r7, r7, r0 + mov r3, sl + lsls r0, r3, #0x18 + lsrs r4, r0, #0x18 + ldr r5, [sp, #0x18] + cmp r4, r5 + blo _08005A52 +_08005B24: + mov r2, sp + mov r1, ip + ldrb r0, [r1, #6] + ldrb r1, [r1, #2] + subs r0, r0, r1 + strh r0, [r2] + mov r2, ip + ldrb r0, [r2, #7] + ldrb r1, [r2, #3] + subs r0, r0, r1 + mov r3, sp + strh r0, [r3, #4] + mov r0, sp + movs r5, #0 + ldrsh r0, [r0, r5] + ldrb r3, [r2, #7] + cmp r0, #0 + bge _08005B4A + rsbs r0, r0, #0 +_08005B4A: + lsls r0, r0, #1 + ldr r1, [sp, #0x24] + strh r0, [r1] + mov r2, sp + movs r5, #4 + ldrsh r0, [r2, r5] + cmp r0, #0 + bge _08005B5C + rsbs r0, r0, #0 +_08005B5C: + lsls r0, r0, #1 + ldr r1, [sp, #0x28] + strh r0, [r1] + mov r2, sp + ldrh r0, [r2, #4] + rsbs r0, r0, #0 + mov r5, sb + strh r0, [r5] + mov r1, ip + ldrb r0, [r1, #2] + strb r0, [r6] + b _08005C08 + .align 2, 0 +_08005B74: .4byte gHBlankCopySize +_08005B78: + mov r2, sp + mov r3, ip + ldrb r0, [r3, #6] + ldrb r1, [r3, #2] + subs r0, r0, r1 + strh r0, [r2] + add r2, sp, #4 + ldrb r0, [r3, #7] + ldrb r1, [r3, #3] + subs r0, r0, r1 + strh r0, [r2] + mov r0, sp + movs r5, #0 + ldrsh r0, [r0, r5] + ldrb r1, [r3, #6] + mov r8, r1 + ldrb r3, [r3, #7] + cmp r0, #0 + bge _08005BA0 + rsbs r0, r0, #0 +_08005BA0: + lsls r0, r0, #1 + ldr r5, [sp, #0x24] + strh r0, [r5] + movs r1, #0 + ldrsh r0, [r2, r1] + cmp r0, #0 + bge _08005BB0 + rsbs r0, r0, #0 +_08005BB0: + lsls r0, r0, #1 + ldr r5, [sp, #0x28] + strh r0, [r5] + ldrh r0, [r2] + rsbs r0, r0, #0 + mov r1, sb + strh r0, [r1] + mov r5, ip + ldrb r0, [r5, #2] + strb r0, [r6] + mov r1, sp + ldrb r0, [r5, #4] + mov r5, r8 + subs r0, r5, r0 + strh r0, [r1, #2] + mov r1, ip + ldrb r0, [r1, #5] + subs r0, r3, r0 + strh r0, [r2, #2] + mov r0, sp + movs r5, #2 + ldrsh r0, [r0, r5] + cmp r0, #0 + bge _08005BE2 + rsbs r0, r0, #0 +_08005BE2: + lsls r0, r0, #1 + ldr r1, [sp, #0x24] + strh r0, [r1, #2] + movs r5, #2 + ldrsh r0, [r2, r5] +_08005BEC: + cmp r0, #0 + bge _08005BF2 + rsbs r0, r0, #0 +_08005BF2: + lsls r0, r0, #1 + ldr r1, [sp, #0x28] + strh r0, [r1, #2] + mov r2, sp + ldrh r0, [r2, #6] + rsbs r0, r0, #0 + mov r5, sb + strh r0, [r5, #2] + mov r1, ip + ldrb r0, [r1, #4] + strb r0, [r6, #1] +_08005C08: + str r3, [sp, #0x18] + cmp r4, r3 + bhs _08005CE6 + mov r8, sb + ldr r2, [sp, #0x24] + mov ip, r2 +_08005C14: + ldrb r0, [r6, #1] + strb r0, [r7] + ldrb r0, [r6] + strb r0, [r7, #1] + mov r3, r8 + mov r5, ip + ldrh r2, [r5] + ldrh r0, [r3] + adds r2, r2, r0 + strh r2, [r3] + ldrh r0, [r3, #2] + ldrh r1, [r5, #2] + adds r0, r0, r1 + strh r0, [r3, #2] + lsls r2, r2, #0x10 + adds r4, #1 + mov sl, r4 + cmp r2, #0 + blt _08005C82 + str r6, [sp, #0x2c] + ldr r4, [sp, #0x28] + mov r2, sb +_08005C40: + mov r0, sp + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + ble _08005C5C + ldr r5, [sp, #0x2c] + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + ldrh r0, [r3] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r3] + b _08005C78 +_08005C5C: + ldrb r0, [r6] + cmp r0, #0 + beq _08005C66 + subs r0, #1 + strb r0, [r6] +_08005C66: + ldrh r0, [r2] + ldrh r1, [r4] + subs r0, r0, r1 + strh r0, [r2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005C78 + ldrb r0, [r6] + strb r0, [r7, #1] +_08005C78: + mov r3, sb + movs r1, #0 + ldrsh r0, [r3, r1] + cmp r0, #0 + bge _08005C40 +_08005C82: + mov r2, r8 + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005CD4 + adds r3, r6, #0 + ldr r5, [sp, #0x28] + mov r4, sb +_08005C92: + mov r0, sp + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + ble _08005CB8 + ldrb r0, [r3, #1] + adds r0, #1 + strb r0, [r3, #1] + ldrh r0, [r2, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + blt _08005CCA + ldrb r0, [r6, #1] + adds r0, #1 + strb r0, [r7] + b _08005CCA +_08005CB8: + ldrb r0, [r3, #1] + cmp r0, #0 + beq _08005CC2 + subs r0, #1 + strb r0, [r6, #1] +_08005CC2: + ldrh r0, [r4, #2] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r4, #2] +_08005CCA: + mov r2, sb + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _08005C92 +_08005CD4: + ldr r2, _08005CF8 @ =gHBlankCopySize + ldrb r0, [r2] + adds r7, r7, r0 + mov r3, sl + lsls r0, r3, #0x18 + lsrs r4, r0, #0x18 + ldr r5, [sp, #0x18] + cmp r4, r5 + blo _08005C14 +_08005CE6: + add sp, #0x30 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08005CF8: .4byte gHBlankCopySize + +.syntax divided diff --git a/sa1/asm/non_matching/game/char_select__CreateCharacterSelectionScreen.inc b/sa1/asm/non_matching/game/char_select__CreateCharacterSelectionScreen.inc new file mode 100644 index 0000000000..aa44bf2bf3 --- /dev/null +++ b/sa1/asm/non_matching/game/char_select__CreateCharacterSelectionScreen.inc @@ -0,0 +1,912 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x40 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #0x34] + ldr r1, _08059BD8 @ =gTailsEnabled + movs r0, #0 + strb r0, [r1] + ldr r0, _08059BDC @ =gMultiplayerMissingHeartbeats + movs r5, #0 + strb r5, [r0, #3] + strb r5, [r0, #2] + strb r5, [r0, #1] + strb r5, [r0] + bl sub_80535FC + bl UiGfxStackInit + ldr r1, _08059BE0 @ =gDispCnt + movs r2, #0x92 + lsls r2, r2, #5 + adds r0, r2, #0 + strh r0, [r1] + ldr r3, _08059BE4 @ =gBgCntRegs + mov r8, r3 + ldr r0, _08059BE8 @ =0x00001907 + strh r0, [r3, #2] + ldr r0, _08059BEC @ =gBgScrollRegs + strh r5, [r0, #4] + strh r5, [r0, #6] + strh r5, [r0, #8] + strh r5, [r0, #0xa] + ldr r0, _08059BF0 @ =Task_8059F9C + movs r4, #0x80 + lsls r4, r4, #6 + str r5, [sp] + movs r1, #0x3c + adds r2, r4, #0 + movs r3, #0 + bl TaskCreate + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r2, r0 + ldr r1, [sp, #0x34] + movs r3, #3 + ands r1, r3 + lsls r0, r1, #8 + adds r0, r0, r4 + strh r0, [r7, #0x28] + adds r1, #0x20 + ldr r4, _08059BF4 @ =0x0300002A + adds r0, r2, r4 + strb r1, [r0] + ldr r3, _08059BF8 @ =0x0300002B + adds r0, r2, r3 + strb r1, [r0] + adds r4, #2 + adds r0, r2, r4 + movs r1, #0 + strb r1, [r0] + adds r3, #2 + adds r0, r2, r3 + strb r1, [r0] + adds r4, #2 + adds r0, r2, r4 + strb r1, [r0] + str r5, [r7, #0x24] + ldr r0, _08059BFC @ =0x03000039 + adds r1, r2, r0 + movs r0, #0xff + strb r0, [r1] + ldr r1, _08059C00 @ =0x0300002F + adds r2, r2, r1 + movs r3, #0 + strb r3, [r2] + strh r5, [r7] + strh r5, [r7, #2] + movs r4, #2 + strh r4, [r7, #4] + strh r5, [r7, #6] + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r7, #8] + movs r4, #1 + strb r4, [r7, #0xa] + ldr r6, _08059C04 @ =0x00002030 + str r5, [sp] + ldr r0, _08059C08 @ =Task_nullsub_805B980 + movs r1, #0x20 + adds r2, r6, #0 + movs r3, #0 + bl TaskCreate + adds r3, r0, #0 + ldrh r0, [r3, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + movs r2, #0x80 + lsls r2, r2, #1 + strh r2, [r0, #0xa] + movs r1, #0x40 + strh r1, [r0, #0xc] + movs r1, #8 + strh r1, [r0, #0xe] + strh r5, [r0, #0x10] + movs r1, #0xf + strh r1, [r0, #0x12] + strb r4, [r0, #0x16] + movs r1, #0x5a + strh r1, [r0, #8] + str r5, [r0, #0x18] + ldrh r1, [r7, #0x28] + strh r1, [r0, #0x1c] + ldrh r1, [r7, #0x28] + strh r1, [r0, #0x1e] + str r3, [r7, #0x10] + movs r2, #0x81 + lsls r2, r2, #6 + str r5, [sp] + ldr r0, _08059C08 @ =Task_nullsub_805B980 + movs r1, #0x20 + movs r3, #0 + bl TaskCreate + adds r3, r0, #0 + ldrh r0, [r3, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r0, r0, r2 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0, #0xa] + movs r1, #0x28 + strh r1, [r0, #0xc] + strh r4, [r0, #0xe] + strh r4, [r0, #0x10] + strh r5, [r0, #0x12] + movs r2, #1 + strb r2, [r0, #0x16] + strh r5, [r0, #8] + str r5, [r0, #0x18] + strh r5, [r0, #0x1c] + str r3, [r7, #0x1c] + str r5, [sp] + ldr r0, _08059C08 @ =Task_nullsub_805B980 + movs r1, #0x20 + adds r2, r6, #0 + movs r3, #0 + bl TaskCreate + adds r3, r0, #0 + ldrh r0, [r3, #6] + movs r4, #0xc0 + lsls r4, r4, #0x12 + adds r0, r0, r4 + strh r5, [r0, #0xa] + movs r1, #0x54 + strh r1, [r0, #0xc] + movs r1, #6 + strh r1, [r0, #0xe] + movs r2, #2 + strh r2, [r0, #0x10] + strh r5, [r0, #0x12] + movs r4, #1 + strb r4, [r0, #0x16] + movs r1, #0x14 + strh r1, [r0, #8] + str r5, [r0, #0x18] + strh r5, [r0, #0x1c] + strh r5, [r0, #0x1e] + str r3, [r7, #0x18] + str r5, [sp] + ldr r0, _08059C08 @ =Task_nullsub_805B980 + movs r1, #0x44 + adds r2, r6, #0 + movs r3, #0 + bl TaskCreate + adds r3, r0, #0 + ldrh r2, [r3, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r2, r1 + strb r4, [r0, #0x16] + movs r4, #3 + strh r4, [r0, #0x10] + strh r5, [r0, #0xa] + movs r1, #0x38 + strh r1, [r0, #0xc] + movs r1, #8 + strh r1, [r0, #0xe] + strh r5, [r0, #0x12] + movs r1, #0x78 + strh r1, [r0, #8] + movs r4, #0x8c + lsls r4, r4, #1 + strh r4, [r0, #0x22] + movs r1, #0x3a + strh r1, [r0, #0x24] + movs r1, #9 + strh r1, [r0, #0x26] + movs r4, #4 + strh r4, [r0, #0x28] + strh r5, [r0, #0x2a] + ldr r4, _08059C0C @ =0x0300002E + adds r1, r2, r4 + movs r4, #1 + strb r4, [r1] + movs r1, #0x64 + strh r1, [r0, #0x20] + str r5, [r0, #0x38] + str r5, [r0, #0x30] + movs r1, #0x8c + lsls r1, r1, #7 + str r1, [r0, #0x34] + str r1, [r0, #0x3c] + ldr r0, _08059C10 @ =0x03000040 + adds r2, r2, r0 + strh r5, [r2] + str r3, [r7, #0x14] + ldr r0, _08059C14 @ =Task_805B984 + ldr r2, _08059C18 @ =0x00002020 + str r5, [sp] + movs r1, #0x34 + movs r3, #0 + bl TaskCreate + adds r3, r0, #0 + ldrh r2, [r3, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r4, r2, r1 + strh r5, [r4, #0x30] + strh r5, [r4, #0x32] + mov r0, r8 + ldrh r1, [r0, #2] + movs r0, #0xc + ands r0, r1 + lsls r0, r0, #0xc + ldr r1, _08059C1C @ =0x06000040 + adds r0, r0, r1 + str r0, [r4, #4] + strh r5, [r4, #8] + movs r0, #0x80 + lsls r0, r0, #8 + str r0, [r4, #0x10] + strh r5, [r4, #0x16] + strh r5, [r4, #0x18] + strh r5, [r4, #0x1a] + strh r5, [r4, #0x1c] + ldr r0, _08059C20 @ =0x03000021 + adds r1, r2, r0 + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + ldr r1, _08059C24 @ =0x03000022 + adds r0, r2, r1 + movs r1, #0x10 + strb r1, [r0] + ldr r1, _08059C28 @ =0x03000025 + adds r0, r2, r1 + movs r1, #0 + strb r1, [r0] + ldr r0, _08059C2C @ =0x000002D3 + strh r0, [r4, #0xa] + ldr r0, _08059C30 @ =0x03000020 + adds r2, r2, r0 + strb r1, [r2] + str r3, [r7, #0x20] + adds r0, r4, #0 + bl UpdateSpriteAnimation_BG + adds r0, r4, #0 + bl DisplaySprite_BG + add r4, sp, #0x30 + movs r0, #0x27 + strb r0, [r4] + mov r1, sp + adds r1, #0x2f + str r1, [sp, #0x3c] + movs r2, #0 + strb r2, [r1] + ldr r6, _08059C34 @ =gUiGraphics + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r6 + ldr r0, [r0] + str r0, [sp, #0x18] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C38 @ =gUiGraphics + 0x4 + adds r0, r0, r3 + ldr r1, [sp, #0x34] + lsls r1, r1, #1 + mov r8, r1 + ldr r2, [sp, #0x34] + add r8, r2 + mov r3, r8 + lsls r1, r3, #1 + ldr r0, [r0] + adds r0, r0, r1 + str r0, [sp, #0x24] + movs r0, #0x80 + lsls r0, r0, #3 + str r0, [sp, #0x1c] + movs r1, #8 + str r1, [sp, #0x28] + add r2, sp, #0x2c + mov sb, r2 + movs r3, #0xf + strb r3, [r2] + ldr r0, _08059C3C @ =0x06010020 + str r0, [sp, #0x10] + movs r0, #0x2e + add r0, sp + mov sl, r0 + movs r0, #0xd + mov r1, sl + strb r0, [r1] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r2, _08059C40 @ =gUiGraphics + 0x8 + adds r0, r0, r2 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C44 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059C48 @ =gUiGraphics + 0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C4C @ =gUiGraphics + 0x14 + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059C50 @ =gUiGraphics + 0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + movs r2, #0x28 + strb r2, [r4] + movs r0, #1 + ldr r3, [sp, #0x3c] + strb r0, [r3] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r6 + ldr r0, [r0] + str r0, [sp, #0x18] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059C38 @ =gUiGraphics + 0x4 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x24] + movs r2, #0x80 + lsls r2, r2, #3 + str r2, [sp, #0x1c] + movs r3, #0x20 + str r3, [sp, #0x28] + movs r1, #0 + mov r0, sb + strb r1, [r0] + ldr r0, _08059C54 @ =0x06010420 + str r0, [sp, #0x10] + movs r0, #0xd + mov r2, sl + strb r0, [r2] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C40 @ =gUiGraphics + 0x8 + adds r0, r0, r3 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059C44 @ =gUiGraphics + 0xC + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C48 @ =gUiGraphics + 0x10 + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059C4C @ =gUiGraphics + 0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C50 @ =gUiGraphics + 0x18 + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + movs r0, #0x29 + strb r0, [r4] + movs r1, #2 + ldr r0, [sp, #0x3c] + strb r1, [r0] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r6 + mov r2, r8 + lsls r2, r2, #0xa + mov r8, r2 + ldr r0, [r0] + add r0, r8 + str r0, [sp, #0x18] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C38 @ =gUiGraphics + 0x4 + adds r0, r0, r3 + ldr r0, [r0] + str r0, [sp, #0x24] + movs r0, #0xc0 + lsls r0, r0, #4 + str r0, [sp, #0x1c] + ldr r0, _08059C58 @ =0x06011120 + str r0, [sp, #0x10] + movs r0, #0x20 + str r0, [sp, #0x28] + movs r2, #0 + mov r1, sb + strb r2, [r1] + movs r0, #9 + mov r3, sl + strb r0, [r3] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059C40 @ =gUiGraphics + 0x8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059C44 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r4] + lsls r0, r1, #3 + b _08059C5C + .align 2, 0 +_08059BD8: .4byte gTailsEnabled +_08059BDC: .4byte gMultiplayerMissingHeartbeats +_08059BE0: .4byte gDispCnt +_08059BE4: .4byte gBgCntRegs +_08059BE8: .4byte 0x00001907 +_08059BEC: .4byte gBgScrollRegs +_08059BF0: .4byte Task_8059F9C +_08059BF4: .4byte 0x0300002A +_08059BF8: .4byte 0x0300002B +_08059BFC: .4byte 0x03000039 +_08059C00: .4byte 0x0300002F +_08059C04: .4byte 0x00002030 +_08059C08: .4byte Task_nullsub_805B980 +_08059C0C: .4byte 0x0300002E +_08059C10: .4byte 0x03000040 +_08059C14: .4byte Task_805B984 +_08059C18: .4byte 0x00002020 +_08059C1C: .4byte 0x06000040 +_08059C20: .4byte 0x03000021 +_08059C24: .4byte 0x03000022 +_08059C28: .4byte 0x03000025 +_08059C2C: .4byte 0x000002D3 +_08059C30: .4byte 0x03000020 +_08059C34: .4byte gUiGraphics +_08059C38: .4byte gUiGraphics + 0x4 +_08059C3C: .4byte 0x06010020 +_08059C40: .4byte gUiGraphics + 0x8 +_08059C44: .4byte gUiGraphics + 0xC +_08059C48: .4byte gUiGraphics + 0x10 +_08059C4C: .4byte gUiGraphics + 0x14 +_08059C50: .4byte gUiGraphics + 0x18 +_08059C54: .4byte 0x06010420 +_08059C58: .4byte 0x06011120 +_08059C5C: + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059F10 @ =gUiGraphics + 0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059F14 @ =gUiGraphics + 0x14 + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059F18 @ =gUiGraphics + 0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + movs r0, #0x2b + strb r0, [r4] + movs r3, #3 + ldr r2, [sp, #0x3c] + strb r3, [r2] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r6 + ldr r0, [r0] + str r0, [sp, #0x18] + movs r0, #0x80 + lsls r0, r0, #1 + str r0, [sp, #0x1c] + ldr r0, _08059F1C @ =0x06010820 + str r0, [sp, #0x10] + movs r1, #0x20 + str r1, [sp, #0x28] + movs r3, #0 + mov r2, sb + strb r3, [r2] + movs r1, #9 + mov r0, sl + strb r1, [r0] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r2, _08059F20 @ =gUiGraphics + 0x8 + adds r0, r0, r2 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059F24 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059F10 @ =gUiGraphics + 0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059F14 @ =gUiGraphics + 0x14 + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059F18 @ =gUiGraphics + 0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + movs r0, #0x2a + strb r0, [r4] + movs r3, #4 + ldr r2, [sp, #0x3c] + strb r3, [r2] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r6 + ldr r0, [r0] + str r0, [sp, #0x18] + movs r0, #0x80 + lsls r0, r0, #4 + str r0, [sp, #0x1c] + ldr r0, _08059F28 @ =0x06010920 + str r0, [sp, #0x10] + movs r0, #0x20 + str r0, [sp, #0x28] + movs r2, #0 + mov r1, sb + strb r2, [r1] + movs r0, #9 + mov r3, sl + strb r0, [r3] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059F20 @ =gUiGraphics + 0x8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059F24 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08059F10 @ =gUiGraphics + 0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08059F14 @ =gUiGraphics + 0x14 + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r4, _08059F18 @ =gUiGraphics + 0x18 + adds r0, r0, r4 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + ldr r2, _08059F2C @ =0x00002010 + str r5, [sp] + ldr r0, _08059F30 @ =Task_nullsub_805B980 + movs r1, #0xcc + movs r3, #0 + bl TaskCreate + ldrh r2, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r1, r2, r1 + str r1, [sp, #0x38] + ldr r3, _08059F34 @ =0x030000C0 + adds r1, r2, r3 + str r5, [r1] + ldr r4, _08059F38 @ =0x030000C4 + adds r1, r2, r4 + strh r5, [r1] + adds r3, #6 + adds r1, r2, r3 + movs r4, #0 + strb r4, [r1] + adds r3, #2 + adds r1, r2, r3 + strb r4, [r1] + str r0, [r7, #0xc] + ldr r4, _08059F3C @ =0x03000030 + adds r1, r2, r4 + ldr r0, _08059F40 @ =0x06012520 + str r0, [r1, #4] + strh r5, [r1, #8] + str r5, [r1, #0x10] + movs r0, #0x8c + lsls r0, r0, #1 + strh r0, [r1, #0x16] + movs r3, #0x6e + mov r8, r3 + mov r4, r8 + strh r4, [r1, #0x18] + movs r6, #0xf8 + lsls r6, r6, #3 + strh r6, [r1, #0x1a] + strh r5, [r1, #0x1c] + ldr r0, _08059F44 @ =0x03000051 + adds r3, r2, r0 + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r3] + ldr r3, _08059F48 @ =0x03000052 + adds r0, r2, r3 + movs r4, #0x10 + strb r4, [r0] + adds r3, #3 + adds r0, r2, r3 + movs r4, #0 + strb r4, [r0] + ldr r4, _08059F4C @ =0x000002D2 + strh r4, [r1, #0xa] + ldr r1, _08059F50 @ =0x03000050 + adds r0, r2, r1 + movs r3, #0 + strb r3, [r0] + ldr r0, _08059F54 @ =0x06013920 + ldr r1, [sp, #0x38] + str r0, [r1, #4] + strh r5, [r1, #8] + str r5, [r1, #0x10] + ldr r0, _08059F58 @ =0x0000FFCE + strh r0, [r1, #0x16] + mov r3, r8 + strh r3, [r1, #0x18] + strh r6, [r1, #0x1a] + strh r5, [r1, #0x1c] + ldr r0, _08059F5C @ =0x03000021 + adds r1, r2, r0 + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + ldr r1, _08059F60 @ =0x03000022 + adds r0, r2, r1 + movs r3, #0x10 + strb r3, [r0] + adds r1, #3 + adds r0, r2, r1 + movs r3, #0 + strb r3, [r0] + ldr r0, [sp, #0x38] + strh r4, [r0, #0xa] + subs r1, #5 + adds r0, r2, r1 + movs r3, #6 + strb r3, [r0] + ldr r0, _08059F64 @ =0x03000060 + adds r1, r2, r0 + ldr r0, _08059F68 @ =0x06014D20 + str r0, [r1, #4] + strh r5, [r1, #8] + str r5, [r1, #0x10] + movs r3, #0x91 + lsls r3, r3, #1 + strh r3, [r1, #0x16] + mov r0, r8 + strh r0, [r1, #0x18] + strh r6, [r1, #0x1a] + strh r5, [r1, #0x1c] + ldr r0, _08059F6C @ =0x03000081 + adds r3, r2, r0 + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r3] + ldr r3, _08059F70 @ =0x03000082 + adds r0, r2, r3 + movs r3, #0x10 + strb r3, [r0] + ldr r3, _08059F74 @ =0x03000085 + adds r0, r2, r3 + movs r3, #0 + strb r3, [r0] + strh r4, [r1, #0xa] + ldr r4, _08059F78 @ =0x03000080 + adds r0, r2, r4 + movs r1, #2 + strb r1, [r0] + ldr r3, _08059F7C @ =0x03000090 + adds r0, r2, r3 + ldr r1, _08059F80 @ =0x06016120 + str r1, [r0, #4] + strh r5, [r0, #8] + str r5, [r0, #0x10] + movs r4, #0x91 + lsls r4, r4, #1 + strh r4, [r0, #0x16] + mov r1, r8 + strh r1, [r0, #0x18] + movs r1, #0xe0 + lsls r1, r1, #3 + strh r1, [r0, #0x1a] + strh r5, [r0, #0x1c] + ldr r4, _08059F84 @ =0x030000B1 + adds r3, r2, r4 + movs r1, #1 + rsbs r1, r1, #0 + strb r1, [r3] + ldr r3, _08059F88 @ =0x030000B2 + adds r1, r2, r3 + movs r4, #0x10 + strb r4, [r1] + adds r3, #3 + adds r1, r2, r3 + movs r4, #0 + strb r4, [r1] + ldr r1, _08059F8C @ =0x000002DA + strh r1, [r0, #0xa] + ldr r1, _08059F90 @ =0x030000B0 + adds r2, r2, r1 + strb r4, [r2] + bl UpdateSpriteAnimation + ldr r0, _08059F94 @ =gBgSprites_Unknown1 + strb r4, [r0, #1] + ldr r0, _08059F98 @ =gBgSprites_Unknown2 + strb r4, [r0, #4] + strb r4, [r0, #5] + movs r1, #1 + rsbs r1, r1, #0 + strb r1, [r0, #6] + movs r2, #0x20 + strb r2, [r0, #7] + movs r0, #3 @ MUS_CHARACTER_SELECTION + bl m4aSongNumStartOrContinue + adds r0, r7, #0 + bl sub_805423C + add sp, #0x40 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08059F10: .4byte gUiGraphics + 0x10 +_08059F14: .4byte gUiGraphics + 0x14 +_08059F18: .4byte gUiGraphics + 0x18 +_08059F1C: .4byte 0x06010820 +_08059F20: .4byte gUiGraphics + 0x8 +_08059F24: .4byte gUiGraphics + 0xC +_08059F28: .4byte 0x06010920 +_08059F2C: .4byte 0x00002010 +_08059F30: .4byte Task_nullsub_805B980 +_08059F34: .4byte 0x030000C0 +_08059F38: .4byte 0x030000C4 +_08059F3C: .4byte 0x03000030 +_08059F40: .4byte 0x06012520 +_08059F44: .4byte 0x03000051 +_08059F48: .4byte 0x03000052 +_08059F4C: .4byte 0x000002D2 +_08059F50: .4byte 0x03000050 +_08059F54: .4byte 0x06013920 +_08059F58: .4byte 0x0000FFCE +_08059F5C: .4byte 0x03000021 +_08059F60: .4byte 0x03000022 +_08059F64: .4byte 0x03000060 +_08059F68: .4byte 0x06014D20 +_08059F6C: .4byte 0x03000081 +_08059F70: .4byte 0x03000082 +_08059F74: .4byte 0x03000085 +_08059F78: .4byte 0x03000080 +_08059F7C: .4byte 0x03000090 +_08059F80: .4byte 0x06016120 +_08059F84: .4byte 0x030000B1 +_08059F88: .4byte 0x030000B2 +_08059F8C: .4byte 0x000002DA +_08059F90: .4byte 0x030000B0 +_08059F94: .4byte gBgSprites_Unknown1 +_08059F98: .4byte gBgSprites_Unknown2 + +.syntax divided diff --git a/sa1/asm/non_matching/game/char_select__Task_805A060.inc b/sa1/asm/non_matching/game/char_select__Task_805A060.inc new file mode 100644 index 0000000000..e3d782344e --- /dev/null +++ b/sa1/asm/non_matching/game/char_select__Task_805A060.inc @@ -0,0 +1,644 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _0805A0FC @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r5, r0, r1 + ldr r0, [r5, #0x18] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #8] + ldr r0, [r5, #0x10] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp] + ldr r0, [r5, #0xc] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sl, r0 + ldr r0, [r5, #0x14] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #4] + ldr r0, [r5, #0x20] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #0xc] + ldr r0, _0805A100 @ =gGameMode + ldrb r1, [r0] + cmp r1, #1 + bls _0805A18E + movs r3, #0 + ldr r0, _0805A104 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + adds r7, r0, #0 + cmp r1, #0 + beq _0805A13E + movs r6, #1 + ldr r2, _0805A108 @ =gMultiplayerMissingHeartbeats +_0805A0BC: + ldr r1, _0805A10C @ =gMultiSioStatusFlags + adds r0, r6, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _0805A128 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _0805A12C + movs r0, #0 + ldr r1, _0805A110 @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _0805A114 @ =gBackgroundsCopyQueueCursor + ldr r0, _0805A118 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0805A11C @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _0805A120 @ =gVramGraphicsCopyCursor + ldr r0, _0805A124 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _0805A52C + .align 2, 0 +_0805A0FC: .4byte gCurTask +_0805A100: .4byte gGameMode +_0805A104: .4byte gMultiplayerConnections +_0805A108: .4byte gMultiplayerMissingHeartbeats +_0805A10C: .4byte gMultiSioStatusFlags +_0805A110: .4byte 0x0000FFFF +_0805A114: .4byte gBackgroundsCopyQueueCursor +_0805A118: .4byte gBackgroundsCopyQueueIndex +_0805A11C: .4byte gBgSpritesCount +_0805A120: .4byte gVramGraphicsCopyCursor +_0805A124: .4byte gVramGraphicsCopyQueueIndex +_0805A128: + movs r0, #0 + strb r0, [r2] +_0805A12C: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _0805A13E + ldrb r0, [r7] + asrs r0, r3 + ands r0, r6 + cmp r0, #0 + bne _0805A0BC +_0805A13E: + ldr r1, _0805A1E8 @ =gGameMode + ldrb r0, [r1] + cmp r0, #1 + bls _0805A18E + adds r1, r5, #0 + adds r1, #0x2f + movs r0, #0 + strb r0, [r1] + movs r3, #0 + adds r4, r1, #0 + ldr r2, _0805A1EC @ =gMultiSioRecv + mov r8, r2 + movs r6, #0 +_0805A158: + ldr r0, _0805A1F0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r3, r0 + beq _0805A186 + ldrb r0, [r7] + asrs r0, r3 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0805A186 + mov r0, r8 + adds r2, r6, r0 + ldrh r0, [r2] + cmp r0, #0x20 + bls _0805A186 + adds r0, r1, #0 + ldrb r2, [r2, #2] + lsls r0, r2 + ldrb r1, [r4] + orrs r0, r1 + strb r0, [r4] +_0805A186: + adds r6, #0x14 + adds r3, #1 + cmp r3, #3 + bls _0805A158 +_0805A18E: + adds r4, r5, #0 + adds r4, #0x2b + movs r0, #0 + ldrsb r0, [r4, r0] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + bl CheckCPUPartnerUnlock + ldr r0, _0805A1F4 @ =gRepeatedKeys + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + mov sb, r4 + adds r7, r5, #0 + adds r7, #0x2a + cmp r0, #0 + beq _0805A1F8 + ldr r0, [r5, #0x24] + cmp r0, #0x21 + bls _0805A1F8 + mov r1, r8 + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + movs r1, #0 + ldrsb r1, [r7, r1] + cmp r0, r1 + bne _0805A1F8 + ldr r0, _0805A1E8 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bhi _0805A1F8 + movs r0, #0x6b + bl m4aSongNumStart + bl sub_805B858 + adds r2, r5, #0 + adds r2, #0x2f + str r2, [sp, #0x10] + adds r6, r5, #0 + adds r6, #0x2c + adds r4, #2 + b _0805A358 + .align 2, 0 +_0805A1E8: .4byte gGameMode +_0805A1EC: .4byte gMultiSioRecv +_0805A1F0: .4byte 0x04000128 +_0805A1F4: .4byte gRepeatedKeys +_0805A1F8: + ldr r2, _0805A244 @ =gRepeatedKeys + ldrh r1, [r2] + movs r4, #1 + adds r0, r4, #0 + ands r0, r1 + adds r3, r5, #0 + adds r3, #0x2f + str r3, [sp, #0x10] + mov r1, r8 + lsls r6, r1, #0x10 + cmp r0, #0 + beq _0805A270 + asrs r3, r6, #0x10 + movs r0, #0 + ldrsb r0, [r7, r0] + cmp r3, r0 + bne _0805A270 + ldr r0, [r5, #0x24] + cmp r0, #0x21 + bls _0805A270 + ldr r0, [sp, #0x10] + ldrb r1, [r0] + movs r0, #3 + ands r0, r3 + asrs r1, r0 + ands r1, r4 + cmp r1, #0 + bne _0805A270 + movs r0, #0x6a + bl m4aSongNumStart + ldr r0, _0805A248 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bhi _0805A24C + bl sub_805A9A4 + b _0805A25E + .align 2, 0 +_0805A244: .4byte gRepeatedKeys +_0805A248: .4byte gGameMode +_0805A24C: + ldr r2, [r5, #0x1c] + ldrh r0, [r2, #0x12] + movs r1, #1 + orrs r0, r1 + strh r0, [r2, #0x12] + ldr r0, _0805A268 @ =gCurTask + ldr r1, [r0] + ldr r0, _0805A26C @ =Task_805A54C + str r0, [r1, #8] +_0805A25E: + adds r6, r5, #0 + adds r6, #0x2c + adds r4, r5, #0 + adds r4, #0x2d + b _0805A358 + .align 2, 0 +_0805A268: .4byte gCurTask +_0805A26C: .4byte Task_805A54C +_0805A270: + ldrh r1, [r2] + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + beq _0805A290 + ldr r0, [r5, #0x24] + cmp r0, #0x21 + bls _0805A290 + ldr r1, _0805A28C @ =0xFFFF0000 + adds r0, r6, r1 + lsrs r0, r0, #0x10 + mov r8, r0 + b _0805A2E8 + .align 2, 0 +_0805A28C: .4byte 0xFFFF0000 +_0805A290: + ldrh r1, [r2] + movs r0, #0x10 + ands r0, r1 + cmp r0, #0 + beq _0805A2C6 + ldr r0, [r5, #0x24] + cmp r0, #0x21 + bls _0805A2C6 + movs r2, #0x80 + lsls r2, r2, #9 + adds r0, r6, r2 + lsrs r0, r0, #0x10 + mov r8, r0 + adds r0, r5, #0 + adds r0, #0x2c + ldrb r1, [r0] + adds r6, r0, #0 + adds r4, r5, #0 + adds r4, #0x2d + cmp r1, #0 + bne _0805A358 + movs r0, #1 + strb r0, [r6] + adds r1, r5, #0 + adds r1, #0x2e + movs r0, #0x10 + b _0805A302 +_0805A2C6: + asrs r2, r6, #0x10 + movs r0, #0 + ldrsb r0, [r7, r0] + cmp r2, r0 + ble _0805A2E4 + adds r0, r5, #0 + adds r0, #0x2c + ldrb r1, [r0] + adds r6, r0, #0 + adds r4, r5, #0 + adds r4, #0x2d + cmp r1, #0 + bne _0805A358 + movs r0, #1 + b _0805A2FA +_0805A2E4: + cmp r2, r0 + bge _0805A30C +_0805A2E8: + adds r0, r5, #0 + adds r0, #0x2c + ldrb r1, [r0] + adds r6, r0, #0 + adds r4, r5, #0 + adds r4, #0x2d + cmp r1, #0 + bne _0805A358 + movs r0, #2 +_0805A2FA: + strb r0, [r6] + adds r1, r5, #0 + adds r1, #0x2e + movs r0, #0x10 +_0805A302: + strb r0, [r1] + movs r0, #0x67 @ SE_SHIFT + bl m4aSongNumStart + b _0805A358 +_0805A30C: + ldr r3, [sp, #0x10] + ldrb r1, [r3] + movs r0, #3 + ands r0, r2 + asrs r1, r0 + movs r3, #1 + ands r1, r3 + adds r6, r5, #0 + adds r6, #0x2c + adds r4, r5, #0 + adds r4, #0x2d + cmp r1, #0 + beq _0805A358 + ldr r0, [r5, #0x24] + cmp r0, #0x21 + bls _0805A358 + ldrb r1, [r4] + cmp r1, #0 + beq _0805A348 + adds r0, r3, #0 + ands r0, r1 + cmp r0, #0 + beq _0805A33E + adds r0, r2, #1 + b _0805A340 +_0805A33E: + subs r0, r2, #1 +_0805A340: + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + b _0805A358 +_0805A348: + strb r3, [r6] + adds r1, r5, #0 + adds r1, #0x2e + movs r0, #0x10 + strb r0, [r1] + movs r0, #0x67 @ SE_SHIFT + bl m4aSongNumStart +_0805A358: + ldrb r0, [r6] + strb r0, [r4] + ldrb r1, [r6] + cmp r1, #0 + beq _0805A39A + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0805A37A + adds r1, r5, #0 + adds r1, #0x2e + ldrb r0, [r1] + cmp r0, #0 + beq _0805A39A + ldrh r0, [r5, #0x28] + adds r0, #0x10 + b _0805A388 +_0805A37A: + adds r1, r5, #0 + adds r1, #0x2e + ldrb r0, [r1] + cmp r0, #0 + beq _0805A39A + ldrh r0, [r5, #0x28] + subs r0, #0x10 +_0805A388: + strh r0, [r5, #0x28] + ldrb r0, [r1] + subs r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0805A39A + movs r0, #0 + strb r0, [r6] +_0805A39A: + ldrh r1, [r5, #0x28] + ldr r0, _0805A3BC @ =0x00003FFF + ands r0, r1 + strh r0, [r5, #0x28] + movs r0, #0x3f + mov r1, r8 + ands r0, r1 + mov r2, sb + strb r0, [r2] + movs r1, #0 + ldrsb r1, [r7, r1] + cmp r1, r0 + bgt _0805A3C0 + ldrh r0, [r5, #0x28] + lsrs r0, r0, #8 + b _0805A3D4 + .align 2, 0 +_0805A3BC: .4byte 0x00003FFF +_0805A3C0: + ldrh r0, [r5, #0x28] + lsls r0, r0, #0x10 + asrs r2, r0, #0x18 + strb r2, [r7] + ldrh r1, [r5, #0x28] + movs r0, #0xff + ands r0, r1 + cmp r0, #0 + beq _0805A3D6 + adds r0, r2, #1 +_0805A3D4: + strb r0, [r7] +_0805A3D6: + adds r2, r7, #0 + ldrb r1, [r7] + movs r0, #0x3f + ands r0, r1 + strb r0, [r7] + cmp r0, #0x24 + ble _0805A458 + mov r3, sb + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #0x24 + ble _0805A458 + movs r0, #0x28 + ldrsh r1, [r5, r0] + movs r0, #0x90 + lsls r0, r0, #6 + movs r3, #0xc4 + add r3, sl + mov r8, r3 + movs r3, #0xc6 + add r3, sl + mov ip, r3 + mov r3, sl + adds r3, #0xc8 + str r3, [sp, #0x14] + cmp r1, r0 + ble _0805A458 +_0805A40C: + ldrb r0, [r2] + subs r0, #4 + strb r0, [r2] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x24 + bgt _0805A40C + mov r4, sb + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, #0x24 + ble _0805A432 +_0805A424: + ldrb r0, [r4] + subs r0, #4 + strb r0, [r4] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x24 + bgt _0805A424 +_0805A432: + movs r1, #0x28 + ldrsh r0, [r5, r1] + adds r1, r0, #0 + movs r2, #0x90 + lsls r2, r2, #6 + cmp r0, r2 + ble _0805A4D0 + ldr r0, _0805A454 @ =0xFFFFFC00 + adds r3, r0, #0 +_0805A444: + adds r0, r1, r3 + strh r0, [r5, #0x28] + adds r1, r0, #0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, r2 + bgt _0805A444 + b _0805A4D0 + .align 2, 0 +_0805A454: .4byte 0xFFFFFC00 +_0805A458: + adds r2, r7, #0 + movs r0, #0 + ldrsb r0, [r2, r0] + movs r1, #0xc4 + add r1, sl + mov r8, r1 + movs r3, #0xc6 + add r3, sl + mov ip, r3 + mov r1, sl + adds r1, #0xc8 + str r1, [sp, #0x14] + cmp r0, #0x1b + bgt _0805A4D0 + mov r3, sb + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #0x1b + bgt _0805A4D0 + movs r0, #0x28 + ldrsh r1, [r5, r0] + ldr r0, _0805A53C @ =0x00001BFF + cmp r1, r0 + bgt _0805A4D0 +_0805A488: + ldrb r0, [r2] + adds r0, #4 + strb r0, [r2] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x1b + ble _0805A488 + mov r4, sb + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, #0x1b + bgt _0805A4AE +_0805A4A0: + ldrb r0, [r4] + adds r0, #4 + strb r0, [r4] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x1b + ble _0805A4A0 +_0805A4AE: + movs r1, #0x28 + ldrsh r0, [r5, r1] + adds r2, r0, #0 + ldr r1, _0805A53C @ =0x00001BFF + cmp r0, r1 + bgt _0805A4D0 + movs r3, #0x80 + lsls r3, r3, #3 + adds r4, r3, #0 + adds r3, r1, #0 +_0805A4C2: + adds r1, r2, r4 + adds r2, r1, #0 + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + cmp r0, r3 + ble _0805A4C2 + strh r1, [r5, #0x28] +_0805A4D0: + ldrh r2, [r5, #0x28] + ldr r1, _0805A540 @ =0x000003FF + adds r0, r1, #0 + ands r0, r2 + ldr r2, [sp, #8] + strh r0, [r2, #0x1c] + ldrh r2, [r5, #0x28] + adds r0, r1, #0 + ands r0, r2 + ldr r3, [sp] + strh r0, [r3, #0x1c] + ldrh r2, [r5, #0x28] + adds r0, r1, #0 + ands r0, r2 + mov r2, r8 + strh r0, [r2] + ldrb r0, [r6] + mov r3, ip + strb r0, [r3] + ldrh r0, [r5, #0x28] + ands r1, r0 + ldr r0, [sp, #0xc] + strh r1, [r0, #0x32] + ldr r1, [sp, #0x10] + ldrb r0, [r1] + ldr r2, [sp, #0x14] + strb r0, [r2] + ldr r0, [r5, #0x24] + adds r0, #1 + str r0, [r5, #0x24] + ldr r3, [sp, #4] + str r0, [r3, #0x38] + ldr r1, _0805A544 @ =gGameMode + ldrb r0, [r1] + cmp r0, #1 + bls _0805A52C + ldr r2, _0805A548 @ =gMultiSioSend + movs r0, #0x20 + strh r0, [r2] + ldr r3, [sp, #8] + ldrh r1, [r3, #0x1c] + movs r0, #0xc0 + lsls r0, r0, #2 + ands r0, r1 + lsrs r0, r0, #8 + strb r0, [r2, #2] +_0805A52C: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805A53C: .4byte 0x00001BFF +_0805A540: .4byte 0x000003FF +_0805A544: .4byte gGameMode +_0805A548: .4byte gMultiSioSend + +.syntax divided diff --git a/sa1/asm/non_matching/game/char_select__Task_805A54C.inc b/sa1/asm/non_matching/game/char_select__Task_805A54C.inc new file mode 100644 index 0000000000..7a323f26bf --- /dev/null +++ b/sa1/asm/non_matching/game/char_select__Task_805A54C.inc @@ -0,0 +1,288 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + mov r0, sp + movs r1, #0 + movs r2, #4 + bl memset + ldr r0, _0805A5C8 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r1, r0 + ldr r0, _0805A5CC @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _0805A60C + movs r3, #0 + ldr r0, _0805A5D0 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + mov ip, r0 + cmp r1, #0 + beq _0805A60C + movs r6, #1 + ldr r2, _0805A5D4 @ =gMultiplayerMissingHeartbeats +_0805A58A: + ldr r1, _0805A5D8 @ =gMultiSioStatusFlags + adds r0, r6, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _0805A5F4 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _0805A5F8 + movs r0, #0 + ldr r1, _0805A5DC @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _0805A5E0 @ =gBackgroundsCopyQueueCursor + ldr r0, _0805A5E4 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0805A5E8 @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _0805A5EC @ =gVramGraphicsCopyCursor + ldr r0, _0805A5F0 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _0805A788 + .align 2, 0 +_0805A5C8: .4byte gCurTask +_0805A5CC: .4byte gGameMode +_0805A5D0: .4byte gMultiplayerConnections +_0805A5D4: .4byte gMultiplayerMissingHeartbeats +_0805A5D8: .4byte gMultiSioStatusFlags +_0805A5DC: .4byte 0x0000FFFF +_0805A5E0: .4byte gBackgroundsCopyQueueCursor +_0805A5E4: .4byte gBackgroundsCopyQueueIndex +_0805A5E8: .4byte gBgSpritesCount +_0805A5EC: .4byte gVramGraphicsCopyCursor +_0805A5F0: .4byte gVramGraphicsCopyQueueIndex +_0805A5F4: + movs r0, #0 + strb r0, [r2] +_0805A5F8: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _0805A60C + mov r1, ip + ldrb r0, [r1] + asrs r0, r3 + ands r0, r6 + cmp r0, #0 + bne _0805A58A +_0805A60C: + ldr r0, _0805A62C @ =gPressedKeys + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0805A63C + ldr r2, [r5, #0x1c] + ldrh r1, [r2, #0x12] + ldr r0, _0805A630 @ =0x0000FFFE + ands r0, r1 + strh r0, [r2, #0x12] + ldr r0, _0805A634 @ =gCurTask + ldr r1, [r0] + ldr r0, _0805A638 @ =Task_805A060 + str r0, [r1, #8] + b _0805A788 + .align 2, 0 +_0805A62C: .4byte gPressedKeys +_0805A630: .4byte 0x0000FFFE +_0805A634: .4byte gCurTask +_0805A638: .4byte Task_805A060 +_0805A63C: + ldr r1, _0805A678 @ =gMultiSioRecv + ldrh r0, [r1] + adds r7, r1, #0 + cmp r0, #0x22 + bne _0805A68C + movs r3, #0 + ldr r5, _0805A67C @ =gCurTask + mov ip, r5 + ldr r7, _0805A680 @ =Task_805A798 + ldr r6, _0805A684 @ =gMultiplayerConnections + movs r5, #1 + adds r2, r1, #0 + ldr r4, _0805A688 @ =gMultiplayerCharacters +_0805A656: + ldrb r0, [r6] + asrs r0, r3 + ands r0, r5 + cmp r0, #0 + beq _0805A666 + adds r1, r3, r4 + ldrb r0, [r2, #2] + strb r0, [r1] +_0805A666: + adds r2, #0x14 + adds r3, #1 + cmp r3, #3 + bls _0805A656 + mov r1, ip + ldr r0, [r1] + str r7, [r0, #8] + b _0805A788 + .align 2, 0 +_0805A678: .4byte gMultiSioRecv +_0805A67C: .4byte gCurTask +_0805A680: .4byte Task_805A798 +_0805A684: .4byte gMultiplayerConnections +_0805A688: .4byte gMultiplayerCharacters +_0805A68C: + movs r3, #0 + ldr r0, _0805A750 @ =gMultiplayerConnections + mov ip, r0 + ldr r1, _0805A754 @ =gMultiSioSend + mov sl, r1 + movs r0, #0xc0 + lsls r0, r0, #2 + mov sb, r0 + ldr r1, _0805A758 @ =0x0000FFFE + mov r8, r1 + movs r6, #0 +_0805A6A2: + mov r1, ip + ldrb r0, [r1] + asrs r0, r3 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0805A6EE + ldr r4, _0805A75C @ =0x04000128 + ldr r0, [r4] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r3, r0 + beq _0805A6EE + adds r1, r6, r7 + ldrh r0, [r1] + cmp r0, #0x21 + bne _0805A6EE + ldrb r2, [r1, #2] + ldrh r1, [r5, #0x28] + mov r0, sb + ands r0, r1 + lsrs r0, r0, #8 + cmp r2, r0 + bne _0805A6EE + ldr r0, [r4] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r3, r0 + bhs _0805A6EE + ldr r2, [r5, #0x1c] + ldrh r1, [r2, #0x12] + mov r0, r8 + ands r0, r1 + strh r0, [r2, #0x12] + ldr r0, _0805A760 @ =gCurTask + ldr r1, [r0] + ldr r0, _0805A764 @ =Task_805A060 + str r0, [r1, #8] +_0805A6EE: + adds r6, #0x14 + adds r3, #1 + cmp r3, #3 + bls _0805A6A2 + ldr r1, _0805A768 @ =gMultiSioStatusFlags + ldr r0, [r1] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0805A776 + mov r6, sl + movs r0, #0x22 + strh r0, [r6] + ldrh r1, [r5, #0x28] + movs r0, #0xc0 + lsls r0, r0, #2 + ands r0, r1 + lsrs r0, r0, #8 + strb r0, [r6, #2] + movs r3, #0 + ldr r0, _0805A750 @ =gMultiplayerConnections + ldrb r0, [r0] + mov r8, r0 + movs r4, #0 +_0805A71E: + mov r0, r8 + asrs r0, r3 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0805A746 + adds r1, r4, r7 + ldrh r2, [r1] + cmp r2, #0x21 + bne _0805A76C + ldrb r0, [r1, #2] + mov r5, sp + adds r1, r5, r0 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _0805A772 +_0805A746: + adds r4, #0x14 + adds r3, #1 + cmp r3, #3 + bls _0805A71E + b _0805A788 + .align 2, 0 +_0805A750: .4byte gMultiplayerConnections +_0805A754: .4byte gMultiSioSend +_0805A758: .4byte 0x0000FFFE +_0805A75C: .4byte 0x04000128 +_0805A760: .4byte gCurTask +_0805A764: .4byte Task_805A060 +_0805A768: .4byte gMultiSioStatusFlags +_0805A76C: + movs r0, #0x21 + strh r0, [r6] + b _0805A788 +_0805A772: + strh r2, [r6] + b _0805A788 +_0805A776: + mov r6, sl + movs r0, #0x21 + strh r0, [r6] + ldrh r1, [r5, #0x28] + movs r0, #0xc0 + lsls r0, r0, #2 + ands r0, r1 + lsrs r0, r0, #8 + strb r0, [r6, #2] +_0805A788: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 +.syntax divided diff --git a/sa1/asm/non_matching/game/char_select__Task_805A798.inc b/sa1/asm/non_matching/game/char_select__Task_805A798.inc new file mode 100644 index 0000000000..91cda8f021 --- /dev/null +++ b/sa1/asm/non_matching/game/char_select__Task_805A798.inc @@ -0,0 +1,254 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r2, _0805A808 @ =gCurTask + ldr r0, [r2] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 + ldr r0, _0805A80C @ =gGameMode + ldrb r0, [r0] + mov r8, r2 + cmp r0, #1 + bls _0805A84C + movs r3, #0 + ldr r0, _0805A810 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + mov ip, r0 + cmp r1, #0 + beq _0805A84C + movs r5, #1 + ldr r2, _0805A814 @ =gMultiplayerMissingHeartbeats +_0805A7C8: + ldr r1, _0805A818 @ =gMultiSioStatusFlags + adds r0, r5, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _0805A834 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _0805A838 + movs r0, #0 + ldr r1, _0805A81C @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _0805A820 @ =gBackgroundsCopyQueueCursor + ldr r0, _0805A824 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0805A828 @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _0805A82C @ =gVramGraphicsCopyCursor + ldr r0, _0805A830 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _0805A992 + .align 2, 0 +_0805A808: .4byte gCurTask +_0805A80C: .4byte gGameMode +_0805A810: .4byte gMultiplayerConnections +_0805A814: .4byte gMultiplayerMissingHeartbeats +_0805A818: .4byte gMultiSioStatusFlags +_0805A81C: .4byte 0x0000FFFF +_0805A820: .4byte gBackgroundsCopyQueueCursor +_0805A824: .4byte gBackgroundsCopyQueueIndex +_0805A828: .4byte gBgSpritesCount +_0805A82C: .4byte gVramGraphicsCopyCursor +_0805A830: .4byte gVramGraphicsCopyQueueIndex +_0805A834: + movs r0, #0 + strb r0, [r2] +_0805A838: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _0805A84C + mov r1, ip + ldrb r0, [r1] + asrs r0, r3 + ands r0, r5 + cmp r0, #0 + bne _0805A7C8 +_0805A84C: + ldr r3, _0805A8A4 @ =gMultiSioRecv + ldrh r0, [r3] + adds r7, r3, #0 + cmp r0, #0x23 + bne _0805A8B8 + ldr r1, _0805A8A8 @ =gUnknown_03005140 + movs r0, #0 + strb r0, [r1] + movs r2, #0 + ldr r0, _0805A8AC @ =gMultiplayerConnections + mov ip, r0 + adds r5, r1, #0 + movs r4, #0 +_0805A866: + mov r1, ip + ldrb r0, [r1] + asrs r0, r2 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0805A896 + adds r3, r4, r7 + ldrb r0, [r3, #3] + ldrb r1, [r5] + cmp r0, r1 + bhs _0805A880 + adds r0, r1, #0 +_0805A880: + strb r0, [r5] + ldr r0, _0805A8B0 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0805A896 + ldr r0, _0805A8B4 @ =gMultiplayerCharacters + adds r0, r2, r0 + ldrb r1, [r3, #2] + strb r1, [r0] +_0805A896: + adds r4, #0x14 + adds r2, #1 + cmp r2, #3 + bls _0805A866 + bl sub_805A9A4 + b _0805A992 + .align 2, 0 +_0805A8A4: .4byte gMultiSioRecv +_0805A8A8: .4byte gUnknown_03005140 +_0805A8AC: .4byte gMultiplayerConnections +_0805A8B0: .4byte gMultiSioStatusFlags +_0805A8B4: .4byte gMultiplayerCharacters +_0805A8B8: + cmp r0, #0x21 + bne _0805A8E4 + ldr r5, _0805A8D8 @ =gMultiSioSend + movs r0, #0x20 + strh r0, [r5] + ldr r2, [r6, #0x1c] + ldrh r1, [r2, #0x12] + ldr r0, _0805A8DC @ =0x0000FFFE + ands r0, r1 + strh r0, [r2, #0x12] + mov r0, r8 + ldr r1, [r0] + ldr r0, _0805A8E0 @ =Task_805A060 + str r0, [r1, #8] + b _0805A992 + .align 2, 0 +_0805A8D8: .4byte gMultiSioSend +_0805A8DC: .4byte 0x0000FFFE +_0805A8E0: .4byte Task_805A060 +_0805A8E4: + ldr r0, _0805A950 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0805A972 + ldr r5, _0805A954 @ =gMultiSioSend + movs r0, #0x23 + strh r0, [r5] + ldrh r1, [r6, #0x28] + movs r0, #0xc0 + lsls r0, r0, #2 + ands r0, r1 + lsrs r0, r0, #8 + strb r0, [r5, #2] + ldr r1, _0805A958 @ =gLoadedSaveGame + ldrb r0, [r5, #2] + lsls r0, r0, #1 + adds r1, #8 + adds r0, r0, r1 + ldrh r0, [r0] + strb r0, [r5, #3] + movs r2, #0 + ldr r1, _0805A95C @ =gMultiplayerConnections + mov ip, r1 + movs r4, #0 +_0805A918: + mov r1, ip + ldrb r0, [r1] + asrs r0, r2 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0805A968 + cmp r2, #0 + beq _0805A968 + adds r3, r4, r7 + ldr r0, _0805A960 @ =gMultiplayerCharacters + adds r0, r2, r0 + ldrb r1, [r3, #2] + strb r1, [r0] + ldrh r0, [r3] + cmp r0, #0x22 + beq _0805A968 + movs r0, #0x22 + strh r0, [r5] + ldr r0, _0805A964 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0805A992 + movs r0, #0x21 + strh r0, [r5] + b _0805A992 + .align 2, 0 +_0805A950: .4byte gMultiSioStatusFlags +_0805A954: .4byte gMultiSioSend +_0805A958: .4byte gLoadedSaveGame +_0805A95C: .4byte gMultiplayerConnections +_0805A960: .4byte gMultiplayerCharacters +_0805A964: .4byte gPressedKeys +_0805A968: + adds r4, #0x14 + adds r2, #1 + cmp r2, #3 + bls _0805A918 + b _0805A992 +_0805A972: + ldr r5, _0805A99C @ =gMultiSioSend + movs r0, #0x22 + strh r0, [r5] + ldrh r1, [r6, #0x28] + movs r0, #0xc0 + lsls r0, r0, #2 + ands r0, r1 + lsrs r0, r0, #8 + strb r0, [r5, #2] + ldr r1, _0805A9A0 @ =gLoadedSaveGame + ldrb r0, [r5, #2] + lsls r0, r0, #1 + adds r1, #8 + adds r0, r0, r1 + ldrh r0, [r0] + strb r0, [r5, #3] +_0805A992: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805A99C: .4byte gMultiSioSend +_0805A9A0: .4byte gLoadedSaveGame + +.syntax divided diff --git a/sa1/asm/non_matching/game/char_select__sub_805B324.inc b/sa1/asm/non_matching/game/char_select__sub_805B324.inc new file mode 100644 index 0000000000..0d12e66566 --- /dev/null +++ b/sa1/asm/non_matching/game/char_select__sub_805B324.inc @@ -0,0 +1,262 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r1, _0805B37C @ =gUnknown_08688602 + mov r0, sp + movs r2, #6 + bl memcpy + ldr r0, _0805B380 @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r2, r0 + ldr r1, _0805B384 @ =0x030000C4 + adds r0, r2, r1 + ldrh r1, [r0] + ldrb r0, [r0] + lsrs r4, r0, #4 + movs r0, #0xc0 + lsls r0, r0, #2 + ands r0, r1 + lsrs r0, r0, #8 + mov sl, r0 + ldr r1, _0805B388 @ =0x030000C6 + adds r0, r2, r1 + ldrb r1, [r0] + cmp r1, #0 + bne _0805B398 + ldr r0, _0805B38C @ =0x0000FFF8 + strh r0, [r5, #0x16] + ldr r0, _0805B390 @ =0x03000046 + adds r1, r2, r0 + movs r0, #0x78 + strh r0, [r1] + ldr r0, _0805B394 @ =0x03000076 + adds r1, r2, r0 + movs r0, #0xf8 + strh r0, [r1] + movs r6, #0 + b _0805B434 + .align 2, 0 +_0805B37C: .4byte gUnknown_08688602 +_0805B380: .4byte gCurTask +_0805B384: .4byte 0x030000C4 +_0805B388: .4byte 0x030000C6 +_0805B38C: .4byte 0x0000FFF8 +_0805B390: .4byte 0x03000046 +_0805B394: .4byte 0x03000076 +_0805B398: + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0805B3A6 + movs r3, #1 + movs r2, #0xff + b _0805B3B6 +_0805B3A6: + movs r3, #0 + movs r2, #1 + movs r1, #0x10 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + subs r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r4, r1, #0x10 +_0805B3B6: + lsls r0, r4, #0x10 + asrs r7, r0, #0x10 + lsls r6, r2, #0x18 + cmp r7, #4 + bne _0805B416 + lsls r2, r3, #1 + adds r2, r2, r3 + mov r1, sp + adds r0, r1, r2 + ldrb r0, [r0] + add r0, sl + movs r3, #3 + ands r0, r3 + lsls r0, r0, #1 + adds r1, r5, #0 + adds r1, #0x50 + strb r0, [r1] + mov r0, sp + adds r0, #1 + adds r0, r0, r2 + ldrb r0, [r0] + add r0, sl + ands r0, r3 + lsls r0, r0, #1 + adds r1, #0x30 + strb r0, [r1] + mov r0, sp + adds r0, #2 + adds r0, r0, r2 + ldrb r0, [r0] + add r0, sl + ands r0, r3 + lsls r0, r0, #1 + subs r1, #0x60 + strb r0, [r1] + asrs r1, r6, #0x11 + ldrh r0, [r5, #0x16] + subs r0, r0, r1 + strh r0, [r5, #0x16] + adds r2, r5, #0 + adds r2, #0x46 + ldrh r0, [r2] + subs r0, r0, r1 + strh r0, [r2] + adds r2, #0x30 + ldrh r0, [r2] + subs r0, r0, r1 + strh r0, [r2] +_0805B416: + cmp r7, #8 + bgt _0805B434 + asrs r1, r6, #0x14 + ldrh r0, [r5, #0x16] + adds r0, r0, r1 + strh r0, [r5, #0x16] + adds r2, r5, #0 + adds r2, #0x46 + ldrh r0, [r2] + adds r0, r0, r1 + strh r0, [r2] + adds r2, #0x30 + ldrh r0, [r2] + adds r0, r0, r1 + strh r0, [r2] +_0805B434: + asrs r1, r6, #0x18 + cmp r1, #1 + bne _0805B448 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + movs r2, #0 + cmp r0, #3 + bgt _0805B45C + movs r2, #1 + b _0805B45C +_0805B448: + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0805B45A + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + movs r2, #1 + cmp r0, #3 + bgt _0805B45C +_0805B45A: + movs r2, #0 +_0805B45C: + adds r7, r5, #0 + adds r7, #0xc8 + ldrb r1, [r7] + adds r6, r2, #0 + subs r0, r6, #1 + add r0, sl + movs r2, #3 + mov sb, r2 + ands r0, r2 + asrs r1, r0 + movs r0, #1 + mov r8, r0 + ands r1, r0 + cmp r1, #0 + beq _0805B490 + ldrh r0, [r5, #0x16] + adds r1, r5, #0 + adds r1, #0xa6 + strh r0, [r1] + ldrh r1, [r5, #0x18] + adds r0, r5, #0 + adds r0, #0xa8 + strh r1, [r0] + subs r0, #0x18 + bl DisplaySprite +_0805B490: + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite + ldrb r1, [r7] + mov r2, sl + adds r0, r2, r6 + mov r2, sb + ands r0, r2 + asrs r1, r0 + mov r0, r8 + ands r1, r0 + cmp r1, #0 + beq _0805B4CC + adds r0, r5, #0 + adds r0, #0x46 + ldrh r0, [r0] + adds r1, r5, #0 + adds r1, #0xa6 + strh r0, [r1] + adds r0, r5, #0 + adds r0, #0x48 + ldrh r1, [r0] + adds r0, #0x60 + strh r1, [r0] + subs r0, #0x18 + bl DisplaySprite +_0805B4CC: + adds r4, r5, #0 + adds r4, #0x30 + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + ldrb r1, [r7] + adds r0, r6, #1 + add r0, sl + mov r2, sb + ands r0, r2 + asrs r1, r0 + mov r0, r8 + ands r1, r0 + cmp r1, #0 + beq _0805B50C + adds r0, r5, #0 + adds r0, #0x76 + ldrh r0, [r0] + adds r1, r5, #0 + adds r1, #0xa6 + strh r0, [r1] + adds r0, r5, #0 + adds r0, #0x78 + ldrh r1, [r0] + adds r0, #0x30 + strh r1, [r0] + subs r0, #0x18 + bl DisplaySprite +_0805B50C: + adds r4, r5, #0 + adds r4, #0x60 + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/course_select__Task_CourseSelectInit.inc b/sa1/asm/non_matching/game/course_select__Task_CourseSelectInit.inc new file mode 100644 index 0000000000..a3a3062ab3 --- /dev/null +++ b/sa1/asm/non_matching/game/course_select__Task_CourseSelectInit.inc @@ -0,0 +1,348 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x40 + movs r5, #0 + ldr r0, _08061EE0 @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r2, r1 + mov sl, r0 + ldr r0, [r0, #0x10] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #0x30] + mov r3, sl + ldr r0, [r3, #0x14] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #0x34] + ldr r0, [r3, #0x18] + ldrh r0, [r0, #6] + adds r6, r0, r1 + ldr r7, [r3, #0x4c] + mov r8, r7 + adds r1, #0x58 + adds r0, r2, r1 + ldrb r0, [r0] + movs r3, #1 + add r8, r3 + mov r7, r8 + cmp r7, #0x3f + bne _08061EE4 + cmp r0, #1 + bne _08061EE4 + subs r1, #6 + adds r0, r2, r1 + strh r5, [r0] + adds r3, r1, #0 + adds r3, r3, r2 + mov sb, r3 + b _08061EEE + .align 2, 0 +_08061EE0: .4byte gCurTask +_08061EE4: + mov r1, sl + adds r1, #0x52 + movs r0, #0x14 + strh r0, [r1] + mov sb, r1 +_08061EEE: + mov r4, sl + adds r4, #0x50 + movs r0, #0x14 + strh r0, [r4] + mov r7, r8 + cmp r7, #0xa + bhi _08061F64 + add r1, sp, #0x2c + movs r0, #0x3e + strb r0, [r1] + subs r1, #1 + movs r0, #0 + strb r0, [r1] + ldr r2, _080620FC @ =gUiGraphics + movs r1, #0xd9 + lsls r1, r1, #3 + adds r0, r2, r1 + ldr r0, [r0] + str r0, [sp, #0x14] + ldr r3, _08062100 @ =0x000006CC + adds r0, r2, r3 + ldr r0, [r0] + str r0, [sp, #0x20] + movs r0, #0x20 + str r0, [sp, #0x18] + str r0, [sp, #0x24] + add r1, sp, #0x28 + movs r0, #3 + strb r0, [r1] + ldr r0, _08062104 @ =0x06010020 + str r0, [sp, #0xc] + adds r1, #2 + movs r0, #0xc + strb r0, [r1] + movs r7, #0xda + lsls r7, r7, #3 + adds r0, r2, r7 + ldr r0, [r0] + str r0, [sp, #4] + mov r1, sp + adds r3, #8 + adds r0, r2, r3 + ldr r0, [r0] + strb r0, [r1, #8] + adds r7, #8 + adds r0, r2, r7 + ldr r0, [r0] + strb r0, [r1, #9] + adds r3, #8 + adds r0, r2, r3 + ldr r0, [r0] + strb r0, [r1, #0xa] + adds r7, #8 + adds r2, r2, r7 + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC +_08061F64: + mov r0, r8 + mov r1, sl + str r0, [r1, #0x4c] + movs r0, #0xb4 + lsls r0, r0, #2 + ldr r2, [sp, #0x30] + adds r1, r2, r0 + mov r3, r8 + str r3, [r1] + ldr r7, [sp, #0x34] + adds r0, r7, r0 + str r3, [r0] + str r3, [r6, #0x48] + mov r3, sl + adds r3, #0x55 + ldrb r2, [r3] + ldr r0, _08062108 @ =0x000002D7 + ldr r7, [sp, #0x30] + adds r1, r7, r0 + strb r2, [r1] + ldrb r1, [r3] + ldr r2, [sp, #0x34] + adds r0, r2, r0 + strb r1, [r0] + ldrb r0, [r3] + adds r3, r6, #0 + adds r3, #0x4f + strb r0, [r3] + mov r3, sb + movs r7, #0 + ldrsh r0, [r3, r7] + ldrh r1, [r4] + subs r0, r0, r1 + lsls r0, r0, #1 + movs r1, #0xa + bl Div + ldrh r1, [r4] + adds r1, r1, r0 + strh r1, [r4] + movs r0, #0xb5 + lsls r0, r0, #2 + ldr r3, [sp, #0x30] + adds r2, r3, r0 + strh r1, [r2] + ldrh r1, [r4] + ldr r7, [sp, #0x34] + adds r0, r7, r0 + strh r1, [r0] + ldrh r1, [r4] + adds r0, r6, #0 + adds r0, #0x4c + strh r1, [r0] + mov r0, sl + adds r0, #0x57 + ldrb r1, [r0] + ldr r2, _0806210C @ =0x000002D9 + adds r0, r3, r2 + strb r1, [r0] + mov r0, sl + bl sub_805423C + ldr r1, _08062110 @ =gFlags + ldr r0, [r1] + movs r2, #4 + orrs r0, r2 + str r0, [r1] + ldr r1, _08062114 @ =gHBlankCopyTarget + ldr r0, _08062118 @ =0x04000010 + str r0, [r1] + ldr r0, _0806211C @ =gHBlankCopySize + strb r2, [r0] + ldr r0, _08062120 @ =gBgOffsetsHBlankPrimary + ldr r1, [r0] + movs r2, #0 + movs r4, #0 + movs r3, #0x14 +_08061FFE: + strh r4, [r1] + adds r1, #2 + strh r3, [r1] + adds r1, #2 + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r2, #0xb + bls _08061FFE + movs r2, #0 + cmp r5, #0x9f + bhi _080620A4 + movs r0, #0x40 + mov r3, r8 + subs r3, r0, r3 + str r3, [sp, #0x38] +_08062024: + movs r3, #0 + adds r6, r2, #1 + mov sb, r6 + lsls r7, r2, #1 + str r7, [sp, #0x3c] + ldr r0, [sp, #0x38] + cmp r3, r0 + bhs _08062068 + cmp r5, #0x9f + bhi _08062068 + movs r6, #0 + mov ip, r6 + ldr r0, _08062124 @ =0x000001FF + adds r7, r0, #0 + movs r0, #0x40 + mov r6, r8 + subs r4, r0, r6 +_08062046: + mov r0, ip + strh r0, [r1] + adds r1, #2 + rsbs r0, r5, #0 + ands r0, r7 + strh r0, [r1] + adds r1, #2 + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + adds r0, r3, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + cmp r3, r4 + bhs _08062068 + cmp r5, #0x9f + bls _08062046 +_08062068: + ldr r3, [sp, #0x3c] + adds r0, r3, r2 + lsls r0, r0, #3 + subs r0, r0, r5 + adds r0, #0x20 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + movs r2, #0 + cmp r5, #0x9f + bhi _0806209A + movs r4, #0 +_0806207E: + strh r4, [r1] + adds r1, #2 + strh r3, [r1] + adds r1, #2 + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #0x17 + bhi _0806209A + cmp r5, #0x9f + bls _0806207E +_0806209A: + mov r6, sb + lsls r0, r6, #0x18 + lsrs r2, r0, #0x18 + cmp r5, #0x9f + bls _08062024 +_080620A4: + mov r7, r8 + cmp r7, #0x3f + beq _080620B6 + ldr r0, _08062128 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080620EC +_080620B6: + ldr r1, _0806212C @ =gBgScrollRegs + movs r0, #0x14 + strh r0, [r1, #2] + movs r2, #0x3f + mov r0, sl + str r2, [r0, #0x4c] + movs r0, #0xb4 + lsls r0, r0, #2 + ldr r3, [sp, #0x30] + adds r1, r3, r0 + str r2, [r1] + ldr r6, [sp, #0x34] + adds r0, r6, r0 + str r2, [r0] + ldr r1, _08062130 @ =gBgCntRegs + ldr r0, _08062134 @ =0x00009D83 + strh r0, [r1] + ldr r2, _08062110 @ =gFlags + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + ldr r0, _08062138 @ =gCurTask + ldr r1, [r0] + ldr r0, _0806213C @ =Task_8062140 + str r0, [r1, #8] +_080620EC: + add sp, #0x40 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080620FC: .4byte gUiGraphics +_08062100: .4byte 0x000006CC +_08062104: .4byte 0x06010020 +_08062108: .4byte 0x000002D7 +_0806210C: .4byte 0x000002D9 +_08062110: .4byte gFlags +_08062114: .4byte gHBlankCopyTarget +_08062118: .4byte 0x04000010 +_0806211C: .4byte gHBlankCopySize +_08062120: .4byte gBgOffsetsHBlankPrimary +_08062124: .4byte 0x000001FF +_08062128: .4byte gPressedKeys +_0806212C: .4byte gBgScrollRegs +_08062130: .4byte gBgCntRegs +_08062134: .4byte 0x00009D83 +_08062138: .4byte gCurTask +_0806213C: .4byte Task_8062140 + +.syntax divided diff --git a/sa1/asm/non_matching/game/egg_rocket_trans__Task_8028CE4.inc b/sa1/asm/non_matching/game/egg_rocket_trans__Task_8028CE4.inc new file mode 100644 index 0000000000..5698e04f41 --- /dev/null +++ b/sa1/asm/non_matching/game/egg_rocket_trans__Task_8028CE4.inc @@ -0,0 +1,280 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + ldr r0, _08028EEC @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp, #4] @ sp04 = shake + ldr r3, _08028EF0 @ =gCamera + ldrh r0, [r3, #0xe] + adds r0, #1 + strh r0, [r3, #0xe] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r2, #4 + ldrsh r1, [r1, r2] + movs r4, #2 + ldrsh r2, [r3, r4] + subs r1, r1, r2 + adds r1, #0x50 + cmp r0, r1 + bge _08028D1C + b _08028EDC_return +_08028D1C: + ldrh r1, [r3] + ldrh r0, [r3, #2] + subs r0, #0x20 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] @ sp08 = prevCamY + movs r6, #0 @ r6 = i + ldr r5, _08028EF4 @ =gPseudoRandom + ldr r0, _08028EF8 @ =0x00196225 + mov r8, r0 + ldr r7, _08028EFC @ =0x3C6EF35F + lsls r1, r1, #0x10 + asrs r2, r1, #0x10 + str r2, [sp, #0xc] @ sp0C = prevCamX + ldr r3, _08028F00 @ =gSineTable + mov sl, r3 + str r1, [sp, #0x10] @ sp10 = prevCamX << 16 +_08028D3E_loop: + ldr r0, [r5] + mov r4, r8 + muls r4, r0, r4 + adds r0, r4, #0 + adds r0, r0, r7 + str r0, [r5] + movs r4, #7 + ands r4, r0 + ldr r0, _08028F04 @ =gUnknown_080BB434 + adds r0, r4, r0 + ldrb r0, [r0] + bl VramMalloc + adds r1, r0, #0 @ r1 = tiles + ldr r2, _08028F08 @ =gUnknown_080BB41C + lsls r0, r4, #1 + adds r0, r0, r2 + ldrh r2, [r0] + ldr r0, _08028F0C @ =gUnknown_080BB42C + adds r0, r4, r0 + ldrb r3, [r0] + ldr r0, _08028F10 @ =TaskDestructor_NutsAndBolts + str r0, [sp] + movs r0, #0x80 + lsls r0, r0, #6 + bl CreateNutsAndBoltsTask + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r2, r0 @ r4 = strc + ldr r0, [r5] + mov r1, r8 + muls r1, r0, r1 + adds r1, r1, r7 + str r1, [r5] + movs r0, #0xff + ands r0, r1 + ldr r3, [sp, #0xc] + adds r0, r3, r0 + lsls r0, r0, #8 + str r0, [r4, #0x30] + ldr r0, [sp, #8] + lsls r3, r0, #0x10 + asrs r0, r3, #8 + str r0, [r4, #0x34] + movs r0, #0xc0 + lsls r0, r0, #6 + str r0, [r4, #0x10] + movs r0, #0xf8 + lsls r0, r0, #3 + strh r0, [r4, #0x1a] + movs r0, #0x28 + strh r0, [r4, #0x3e] + ldr r0, _08028F14 @ =0x03000040 + adds r2, r2, r0 + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r2] + mov r0, r8 + muls r0, r1, r0 + adds r0, r0, r7 + str r0, [r5] + ldr r1, _08028F18 @ =0x000001FF + ands r1, r0 + lsls r0, r1, #1 + add r0, sl + movs r2, #0 + ldrsh r0, [r0, r2] + asrs r0, r0, #6 + strh r0, [r4, #0x3a] + movs r2, #0x3a + ldrsh r0, [r4, r2] + mov sb, r3 + cmp r0, #0 + bge _08028DD8 + rsbs r0, r0, #0 +_08028DD8: + strh r0, [r4, #0x3a] + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + add r0, sl + movs r1, #0 + ldrsh r0, [r0, r1] + lsls r0, r0, #8 + rsbs r0, r0, #0 + asrs r0, r0, #0xe + strh r0, [r4, #0x38] + adds r6, #1 + cmp r6, #2 + bls _08028D3E_loop + movs r6, #0 + ldr r5, _08028EF4 @ =gPseudoRandom + ldr r2, _08028EF8 @ =0x00196225 + mov r8, r2 + ldr r7, _08028EFC @ =0x3C6EF35F + ldr r3, _08028F00 @ =gSineTable + mov sl, r3 +_08028E04_loop_2: + ldr r0, [r5] + mov r4, r8 + muls r4, r0, r4 + adds r0, r4, #0 + adds r0, r0, r7 + str r0, [r5] + movs r4, #7 + ands r4, r0 + ldr r0, _08028F04 @ =gUnknown_080BB434 + adds r0, r4, r0 + ldrb r0, [r0] + bl VramMalloc + adds r1, r0, #0 + ldr r2, _08028F08 @ =gUnknown_080BB41C + lsls r0, r4, #1 + adds r0, r0, r2 + ldrh r2, [r0] + ldr r0, _08028F0C @ =gUnknown_080BB42C + adds r0, r4, r0 + ldrb r3, [r0] + ldr r0, _08028F10 @ =TaskDestructor_NutsAndBolts + str r0, [sp] + movs r0, #0x80 + lsls r0, r0, #6 + bl CreateNutsAndBoltsTask + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r3, r0 + ldr r0, [r5] + mov r2, r8 + muls r2, r0, r2 + adds r2, r2, r7 + str r2, [r5] + ldr r0, [sp, #0x10] + asrs r1, r0, #0x10 + movs r0, #0xff + ands r0, r2 + adds r1, r1, r0 + lsls r1, r1, #8 + str r1, [r4, #0x30] + mov r1, sb + asrs r0, r1, #8 + str r0, [r4, #0x34] + movs r0, #0 + str r0, [r4, #0x10] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r4, #0x1a] + movs r0, #0x28 + strh r0, [r4, #0x3e] + ldr r0, _08028F14 @ =0x03000040 + adds r3, r3, r0 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r3] + mov r0, r8 + muls r0, r2, r0 + adds r0, r0, r7 + str r0, [r5] + adds r1, #0xff + ands r1, r0 + lsls r0, r1, #1 + add r0, sl + movs r2, #0 + ldrsh r0, [r0, r2] + asrs r0, r0, #5 + strh r0, [r4, #0x3a] + movs r3, #0x3a + ldrsh r0, [r4, r3] + cmp r0, #0 + bge _08028E9A + rsbs r0, r0, #0 +_08028E9A: + strh r0, [r4, #0x3a] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r1, r2 + lsls r0, r0, #1 + add r0, sl + movs r3, #0 + ldrsh r0, [r0, r3] + lsls r0, r0, #9 + rsbs r0, r0, #0 + asrs r0, r0, #0xe + strh r0, [r4, #0x38] + adds r6, #1 + cmp r6, #2 + bls _08028E04_loop_2 + movs r0, #0x80 + lsls r0, r0, #4 + movs r1, #0x80 + str r1, [sp] + movs r1, #8 + movs r2, #0x10 + movs r3, #0xa + bl CreateScreenShake + ldr r4, [sp, #4] + str r0, [r4] + movs r0, #0xad + bl m4aSongNumStart + ldr r0, _08028EEC @ =gCurTask + ldr r1, [r0] + ldr r0, _08028F1C @ =Task_8028F20 + str r0, [r1, #8] +_08028EDC_return: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08028EEC: .4byte gCurTask +_08028EF0: .4byte gCamera +_08028EF4: .4byte gPseudoRandom +_08028EF8: .4byte 0x00196225 +_08028EFC: .4byte 0x3C6EF35F +_08028F00: .4byte gSineTable +_08028F04: .4byte gUnknown_080BB434 +_08028F08: .4byte gUnknown_080BB41C +_08028F0C: .4byte gUnknown_080BB42C +_08028F10: .4byte TaskDestructor_NutsAndBolts +_08028F14: .4byte 0x03000040 +_08028F18: .4byte 0x000001FF +_08028F1C: .4byte Task_8028F20 + +.syntax divided diff --git a/sa1/asm/non_matching/game/egg_rocket_trans__Task_8029194.inc b/sa1/asm/non_matching/game/egg_rocket_trans__Task_8029194.inc new file mode 100644 index 0000000000..11de59ab24 --- /dev/null +++ b/sa1/asm/non_matching/game/egg_rocket_trans__Task_8029194.inc @@ -0,0 +1,386 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _080293BC @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 + movs r0, #0x80 + lsls r0, r0, #2 + adds r2, r0, #0 + ldrh r1, [r6, #8] + adds r2, r2, r1 + strh r2, [r6, #8] + movs r3, #0x80 + lsls r3, r3, #1 + adds r1, r3, #0 + ldrh r0, [r6, #6] + adds r1, r1, r0 + strh r1, [r6, #6] + ldrh r0, [r6, #0xa] + subs r0, #1 + strh r0, [r6, #0xa] + lsls r1, r1, #0x10 + lsrs r1, r1, #0x18 + ldrh r0, [r6, #4] + adds r1, r0, r1 + ldr r4, _080293C0 @ =gCamera + ldrh r3, [r4, #2] + subs r1, r1, r3 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #4] + lsls r2, r2, #0x10 + lsrs r2, r2, #0x18 + adds r0, r0, r2 + subs r0, r0, r3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + ldrh r1, [r6, #0xc] + adds r0, r1, #1 + strh r0, [r6, #0xc] + movs r0, #0xf + ands r0, r1 + cmp r0, #0 + beq _080291FC + b _080293A2 +_080291FC: + ldrh r1, [r4] + ldrh r0, [r4, #2] + subs r0, #0x20 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0xc] + movs r7, #0 + ldr r5, _080293C4 @ =gPseudoRandom + ldr r2, _080293C8 @ =0x00196225 + mov sb, r2 + ldr r3, _080293CC @ =0x3C6EF35F + mov r8, r3 + lsls r1, r1, #0x10 + asrs r0, r1, #0x10 + str r0, [sp, #0x10] + str r1, [sp, #0x14] +_0802921C: + ldr r0, [r5] + mov r1, sb + muls r1, r0, r1 + adds r0, r1, #0 + add r0, r8 + str r0, [r5] + movs r4, #7 + ands r4, r0 + ldr r0, _080293D0 @ =gUnknown_080BB434 + adds r0, r4, r0 + ldrb r0, [r0] + bl VramMalloc + adds r1, r0, #0 + ldr r2, _080293D4 @ =gUnknown_080BB41C + lsls r0, r4, #1 + adds r0, r0, r2 + ldrh r2, [r0] + ldr r0, _080293D8 @ =gUnknown_080BB42C + adds r0, r4, r0 + ldrb r3, [r0] + ldr r0, _080293DC @ =TaskDestructor_NutsAndBolts + str r0, [sp] + movs r0, #0x80 + lsls r0, r0, #6 + bl CreateNutsAndBoltsTask + ldrh r2, [r0, #6] + movs r3, #0xc0 + lsls r3, r3, #0x12 + adds r4, r2, r3 + ldr r0, [r5] + mov r1, sb + muls r1, r0, r1 + add r1, r8 + str r1, [r5] + movs r0, #0xff + ands r0, r1 + ldr r3, [sp, #0x10] + adds r0, r3, r0 + lsls r0, r0, #8 + str r0, [r4, #0x30] + ldr r0, [sp, #0xc] + lsls r3, r0, #0x10 + asrs r0, r3, #8 + str r0, [r4, #0x34] + movs r0, #0xc0 + lsls r0, r0, #6 + str r0, [r4, #0x10] + movs r0, #0xf8 + lsls r0, r0, #3 + strh r0, [r4, #0x1a] + movs r0, #0x28 + strh r0, [r4, #0x3e] + ldr r0, _080293E0 @ =0x03000040 + adds r2, r2, r0 + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r2] + mov r0, sb + muls r0, r1, r0 + add r0, r8 + str r0, [r5] + ldr r1, _080293E4 @ =0x000001FF + ands r1, r0 + lsls r0, r1, #1 + ldr r2, _080293E8 @ =gSineTable + adds r0, r0, r2 + movs r2, #0 + ldrsh r0, [r0, r2] + asrs r0, r0, #6 + strh r0, [r4, #0x3a] + movs r2, #0x3a + ldrsh r0, [r4, r2] + mov sl, r3 + cmp r0, #0 + bge _080292B8 + rsbs r0, r0, #0 +_080292B8: + strh r0, [r4, #0x3a] + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + ldr r1, _080293E8 @ =gSineTable + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + lsls r0, r0, #8 + rsbs r0, r0, #0 + asrs r0, r0, #0xe + strh r0, [r4, #0x38] + adds r7, #1 + cmp r7, #2 + bls _0802921C + movs r7, #0 + ldr r5, _080293C4 @ =gPseudoRandom + ldr r3, _080293C8 @ =0x00196225 + mov sb, r3 + ldr r0, _080293CC @ =0x3C6EF35F + mov r8, r0 +_080292E4: + ldr r0, [r5] + mov r1, sb + muls r1, r0, r1 + adds r0, r1, #0 + add r0, r8 + str r0, [r5] + movs r4, #7 + ands r4, r0 + ldr r0, _080293D0 @ =gUnknown_080BB434 + adds r0, r4, r0 + ldrb r0, [r0] + bl VramMalloc + adds r1, r0, #0 + ldr r2, _080293D4 @ =gUnknown_080BB41C + lsls r0, r4, #1 + adds r0, r0, r2 + ldrh r2, [r0] + ldr r0, _080293D8 @ =gUnknown_080BB42C + adds r0, r4, r0 + ldrb r3, [r0] + ldr r0, _080293DC @ =TaskDestructor_NutsAndBolts + str r0, [sp] + movs r0, #0x80 + lsls r0, r0, #6 + bl CreateNutsAndBoltsTask + ldrh r3, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r4, r3, r2 + ldr r0, [r5] + mov r2, sb + muls r2, r0, r2 + add r2, r8 + str r2, [r5] + ldr r0, [sp, #0x14] + asrs r1, r0, #0x10 + movs r0, #0xff + ands r0, r2 + adds r1, r1, r0 + lsls r1, r1, #8 + str r1, [r4, #0x30] + mov r1, sl + asrs r0, r1, #8 + str r0, [r4, #0x34] + movs r0, #0 + str r0, [r4, #0x10] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r4, #0x1a] + movs r0, #0x28 + strh r0, [r4, #0x3e] + ldr r0, _080293E0 @ =0x03000040 + adds r3, r3, r0 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r3] + mov r0, sb + muls r0, r2, r0 + add r0, r8 + str r0, [r5] + adds r1, #0xff + ands r1, r0 + lsls r0, r1, #1 + ldr r2, _080293E8 @ =gSineTable + adds r0, r0, r2 + movs r3, #0 + ldrsh r0, [r0, r3] + asrs r0, r0, #5 + strh r0, [r4, #0x3a] + movs r2, #0x3a + ldrsh r0, [r4, r2] + cmp r0, #0 + bge _0802937C + rsbs r0, r0, #0 +_0802937C: + strh r0, [r4, #0x3a] + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + ldr r1, _080293E8 @ =gSineTable + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + lsls r0, r0, #9 + rsbs r0, r0, #0 + asrs r0, r0, #0xe + strh r0, [r4, #0x38] + adds r7, #1 + cmp r7, #2 + bls _080292E4 + movs r0, #0x90 + bl m4aSongNumStart +_080293A2: + ldr r3, [sp, #8] + lsls r0, r3, #0x10 + asrs r1, r0, #0x10 + cmp r1, #0xa0 + ble _080293F0 + ldr r0, _080293BC @ =gCurTask + ldr r1, [r0] + ldr r0, _080293EC @ =Task_80294A8 + str r0, [r1, #8] + bl _call_via_r0 + b _08029494 + .align 2, 0 +_080293BC: .4byte gCurTask +_080293C0: .4byte gCamera +_080293C4: .4byte gPseudoRandom +_080293C8: .4byte 0x00196225 +_080293CC: .4byte 0x3C6EF35F +_080293D0: .4byte gUnknown_080BB434 +_080293D4: .4byte gUnknown_080BB41C +_080293D8: .4byte gUnknown_080BB42C +_080293DC: .4byte TaskDestructor_NutsAndBolts +_080293E0: .4byte 0x03000040 +_080293E4: .4byte 0x000001FF +_080293E8: .4byte gSineTable +_080293EC: .4byte Task_80294A8 +_080293F0: + ldr r2, [sp, #4] + lsls r0, r2, #0x10 + cmp r0, #0 + ble _08029488 + cmp r1, #0x9f + bgt _08029488 + movs r3, #4 + ldrsh r0, [r6, r3] + ldr r5, _08029448 @ =gCamera + movs r2, #2 + ldrsh r1, [r5, r2] + subs r0, r0, r1 + cmp r0, #0 + ble _08029450 + ldrb r2, [r6, #4] + ldrb r0, [r5, #2] + subs r2, r2, r0 + lsls r2, r2, #0x18 + lsrs r2, r2, #0x18 + ldr r4, _0802944C @ =gBgScrollRegs + ldrh r3, [r4, #8] + ldrh r0, [r4, #0xa] + str r0, [sp] + movs r0, #2 + movs r1, #0 + bl sa2__sub_80078D4 + ldrb r1, [r6, #4] + ldrb r0, [r5, #2] + subs r1, r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r3, [sp, #8] + lsls r5, r3, #0x18 + lsrs r2, r5, #0x18 + ldrh r3, [r4, #8] + movs r0, #0xf0 + str r0, [sp] + movs r0, #2 + bl sa2__sub_8007858 + adds r4, r5, #0 + b _08029466 + .align 2, 0 +_08029448: .4byte gCamera +_0802944C: .4byte gBgScrollRegs +_08029450: + ldr r0, [sp, #8] + lsls r4, r0, #0x18 + lsrs r2, r4, #0x18 + ldr r0, _08029484 @ =gBgScrollRegs + ldrh r3, [r0, #8] + movs r0, #0xf0 + str r0, [sp] + movs r0, #2 + movs r1, #0 + bl sa2__sub_8007858 +_08029466: + lsrs r1, r4, #0x18 + ldr r0, _08029484 @ =gBgScrollRegs + ldrh r3, [r0, #8] + ldrh r2, [r6, #8] + lsrs r2, r2, #8 + ldrh r0, [r0, #0xa] + subs r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp] + movs r0, #2 + movs r2, #0xa0 + bl sa2__sub_80078D4 + b _08029494 + .align 2, 0 +_08029484: .4byte gBgScrollRegs +_08029488: + ldr r0, _080294A4 @ =gFlags + ldr r1, [r0] + movs r2, #5 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0] +_08029494: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080294A4: .4byte gFlags + +.syntax divided diff --git a/sa1/asm/non_matching/game/egg_rocket_trans__Task_80294A8.inc b/sa1/asm/non_matching/game/egg_rocket_trans__Task_80294A8.inc new file mode 100644 index 0000000000..37a6ca8409 --- /dev/null +++ b/sa1/asm/non_matching/game/egg_rocket_trans__Task_80294A8.inc @@ -0,0 +1,400 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + ldr r0, _08029724 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp, #4] + ldr r2, _08029728 @ =gCamera + ldrh r0, [r2, #0xe] + subs r0, #1 + strh r0, [r2, #0xe] + ldrh r1, [r1, #0xc] + adds r0, r1, #1 + ldr r3, [sp, #4] + strh r0, [r3, #0xc] + movs r0, #0xf + ands r0, r1 + cmp r0, #0 + beq _080294DC + b _0802967E +_080294DC: + ldrh r1, [r2] + ldrh r0, [r2, #2] + subs r0, #0x20 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + movs r6, #0 + ldr r5, _0802972C @ =gPseudoRandom + ldr r0, _08029730 @ =0x00196225 + mov r8, r0 + ldr r7, _08029734 @ =0x3C6EF35F + lsls r1, r1, #0x10 + asrs r2, r1, #0x10 + str r2, [sp, #0xc] + ldr r3, _08029738 @ =gSineTable + mov sl, r3 + str r1, [sp, #0x10] +_080294FE: + ldr r0, [r5] + mov r1, r8 + muls r1, r0, r1 + adds r0, r1, #0 + adds r0, r0, r7 + str r0, [r5] + movs r4, #7 + ands r4, r0 + ldr r0, _0802973C @ =gUnknown_080BB434 + adds r0, r4, r0 + ldrb r0, [r0] + bl VramMalloc + adds r1, r0, #0 + ldr r2, _08029740 @ =gUnknown_080BB41C + lsls r0, r4, #1 + adds r0, r0, r2 + ldrh r2, [r0] + ldr r0, _08029744 @ =gUnknown_080BB42C + adds r0, r4, r0 + ldrb r3, [r0] + ldr r0, _08029748 @ =TaskDestructor_NutsAndBolts + str r0, [sp] + movs r0, #0x80 + lsls r0, r0, #6 + bl CreateNutsAndBoltsTask + ldrh r2, [r0, #6] + movs r3, #0xc0 + lsls r3, r3, #0x12 + adds r4, r2, r3 + ldr r0, [r5] + mov r1, r8 + muls r1, r0, r1 + adds r1, r1, r7 + str r1, [r5] + movs r0, #0xff + ands r0, r1 + ldr r3, [sp, #0xc] + adds r0, r3, r0 + lsls r0, r0, #8 + str r0, [r4, #0x30] + ldr r0, [sp, #8] + lsls r3, r0, #0x10 + asrs r0, r3, #8 + str r0, [r4, #0x34] + movs r0, #0xc0 + lsls r0, r0, #6 + str r0, [r4, #0x10] + movs r0, #0xf8 + lsls r0, r0, #3 + strh r0, [r4, #0x1a] + movs r0, #0x28 + strh r0, [r4, #0x3e] + ldr r0, _0802974C @ =0x03000040 + adds r2, r2, r0 + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r2] + mov r0, r8 + muls r0, r1, r0 + adds r0, r0, r7 + str r0, [r5] + ldr r1, _08029750 @ =0x000001FF + ands r1, r0 + lsls r0, r1, #1 + add r0, sl + movs r2, #0 + ldrsh r0, [r0, r2] + asrs r0, r0, #6 + strh r0, [r4, #0x3a] + movs r2, #0x3a + ldrsh r0, [r4, r2] + mov sb, r3 + cmp r0, #0 + bge _08029598 + rsbs r0, r0, #0 +_08029598: + strh r0, [r4, #0x3a] + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + add r0, sl + movs r1, #0 + ldrsh r0, [r0, r1] + lsls r0, r0, #8 + rsbs r0, r0, #0 + asrs r0, r0, #0xe + strh r0, [r4, #0x38] + adds r6, #1 + cmp r6, #2 + bls _080294FE + movs r6, #0 + ldr r5, _0802972C @ =gPseudoRandom + ldr r2, _08029730 @ =0x00196225 + mov r8, r2 + ldr r7, _08029734 @ =0x3C6EF35F + ldr r3, _08029738 @ =gSineTable + mov sl, r3 +_080295C4: + ldr r0, [r5] + mov r1, r8 + muls r1, r0, r1 + adds r0, r1, #0 + adds r0, r0, r7 + str r0, [r5] + movs r4, #7 + ands r4, r0 + ldr r0, _0802973C @ =gUnknown_080BB434 + adds r0, r4, r0 + ldrb r0, [r0] + bl VramMalloc + adds r1, r0, #0 + ldr r2, _08029740 @ =gUnknown_080BB41C + lsls r0, r4, #1 + adds r0, r0, r2 + ldrh r2, [r0] + ldr r0, _08029744 @ =gUnknown_080BB42C + adds r0, r4, r0 + ldrb r3, [r0] + ldr r0, _08029748 @ =TaskDestructor_NutsAndBolts + str r0, [sp] + movs r0, #0x80 + lsls r0, r0, #6 + bl CreateNutsAndBoltsTask + ldrh r3, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r4, r3, r2 + ldr r0, [r5] + mov r2, r8 + muls r2, r0, r2 + adds r2, r2, r7 + str r2, [r5] + ldr r0, [sp, #0x10] + asrs r1, r0, #0x10 + movs r0, #0xff + ands r0, r2 + adds r1, r1, r0 + lsls r1, r1, #8 + str r1, [r4, #0x30] + mov r1, sb + asrs r0, r1, #8 + str r0, [r4, #0x34] + movs r0, #0 + str r0, [r4, #0x10] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r4, #0x1a] + movs r0, #0x28 + strh r0, [r4, #0x3e] + ldr r0, _0802974C @ =0x03000040 + adds r3, r3, r0 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r3] + mov r0, r8 + muls r0, r2, r0 + adds r0, r0, r7 + str r0, [r5] + adds r1, #0xff + ands r1, r0 + lsls r0, r1, #1 + add r0, sl + movs r2, #0 + ldrsh r0, [r0, r2] + asrs r0, r0, #5 + strh r0, [r4, #0x3a] + movs r3, #0x3a + ldrsh r0, [r4, r3] + cmp r0, #0 + bge _0802965A + rsbs r0, r0, #0 +_0802965A: + strh r0, [r4, #0x3a] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r1, r2 + lsls r0, r0, #1 + add r0, sl + movs r3, #0 + ldrsh r0, [r0, r3] + lsls r0, r0, #9 + rsbs r0, r0, #0 + asrs r0, r0, #0xe + strh r0, [r4, #0x38] + adds r6, #1 + cmp r6, #2 + bls _080295C4 + movs r0, #0x90 + bl m4aSongNumStart +_0802967E: + ldr r5, _08029728 @ =gCamera + movs r0, #2 + ldrsh r2, [r5, r0] + ldr r3, [sp, #4] + movs r0, #4 + ldrsh r1, [r3, r0] + adds r0, r1, #0 + subs r0, #0xa0 + adds r6, r5, #0 + cmp r2, r0 + bgt _0802977C + movs r0, #0 + strh r0, [r5, #0xe] + ldr r0, _08029754 @ =gBossIndex + ldrb r1, [r0] + adds r4, r0, #0 + cmp r1, #1 + bls _080296C8 + movs r0, #0xae + lsls r0, r0, #5 + strh r0, [r5, #0x16] + ldr r3, _08029758 @ =gStageFlags + ldrh r0, [r3] + ldr r2, _0802975C @ =0x0000FFFE + ands r2, r0 + strh r2, [r3] + ldr r0, _08029760 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _080296C8 + movs r1, #4 + adds r0, r2, #0 + orrs r0, r1 + strh r0, [r3] + ldr r1, _08029764 @ =gCourseTime + ldr r0, _08029768 @ =0x00004650 + str r0, [r1] +_080296C8: + ldrb r0, [r4] + cmp r0, #2 + bls _080296F4 + movs r0, #0xcc + lsls r0, r0, #4 + strh r0, [r6, #0x16] + ldr r3, _08029758 @ =gStageFlags + ldrh r0, [r3] + ldr r2, _0802975C @ =0x0000FFFE + ands r2, r0 + strh r2, [r3] + ldr r0, _08029760 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _080296F4 + movs r1, #4 + adds r0, r2, #0 + orrs r0, r1 + strh r0, [r3] + ldr r1, _08029764 @ =gCourseTime + ldr r0, _08029768 @ =0x00004650 + str r0, [r1] +_080296F4: + ldr r2, _0802976C @ =gPlayer + ldr r0, [r2, #0x10] + ldr r1, _08029770 @ =0xFFDFFFFF + ands r0, r1 + str r0, [r2, #0x10] + movs r0, #0 + strh r0, [r2, #0x38] + ldr r0, _08029724 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + ldr r2, _08029774 @ =gFlags + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + ldr r2, _08029728 @ =gCamera + ldrh r1, [r2, #0x26] + ldr r0, _08029778 @ =0x00007FFF + ands r0, r1 + strh r0, [r2, #0x26] + b _080297D2 + .align 2, 0 +_08029724: .4byte gCurTask +_08029728: .4byte gCamera +_0802972C: .4byte gPseudoRandom +_08029730: .4byte 0x00196225 +_08029734: .4byte 0x3C6EF35F +_08029738: .4byte gSineTable +_0802973C: .4byte gUnknown_080BB434 +_08029740: .4byte gUnknown_080BB41C +_08029744: .4byte gUnknown_080BB42C +_08029748: .4byte TaskDestructor_NutsAndBolts +_0802974C: .4byte 0x03000040 +_08029750: .4byte 0x000001FF +_08029754: .4byte gBossIndex +_08029758: .4byte gStageFlags +_0802975C: .4byte 0x0000FFFE +_08029760: .4byte gGameMode +_08029764: .4byte gCourseTime +_08029768: .4byte 0x00004650 +_0802976C: .4byte gPlayer +_08029770: .4byte 0xFFDFFFFF +_08029774: .4byte gFlags +_08029778: .4byte 0x00007FFF +_0802977C: + subs r0, r1, r2 + cmp r0, #0 + ble _080297C0 + ldr r1, [sp, #4] + ldrb r2, [r1, #4] + ldrb r0, [r5, #2] + subs r2, r2, r0 + lsls r2, r2, #0x18 + lsrs r2, r2, #0x18 + ldr r4, _080297BC @ =gBgScrollRegs + ldrh r3, [r4, #8] + ldrh r0, [r4, #0xa] + str r0, [sp] + movs r0, #2 + movs r1, #0 + bl sa2__sub_80078D4 + ldr r2, [sp, #4] + ldrb r1, [r2, #4] + ldrb r0, [r5, #2] + subs r1, r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldrh r3, [r4, #8] + movs r0, #0xf0 + str r0, [sp] + movs r0, #2 + movs r2, #0xa0 + bl sa2__sub_8007858 + b _080297D2 + .align 2, 0 +_080297BC: .4byte gBgScrollRegs +_080297C0: + ldr r0, _080297E4 @ =gBgScrollRegs + ldrh r3, [r0, #8] + movs r0, #0xf0 + str r0, [sp] + movs r0, #2 + movs r1, #0 + movs r2, #0xa0 + bl sa2__sub_8007858 +_080297D2: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080297E4: .4byte gBgScrollRegs + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/.gitkeep b/sa1/asm/non_matching/game/enemies/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sa1/asm/non_matching/game/enemies/Drisame__Task_DrisameInit.inc b/sa1/asm/non_matching/game/enemies/Drisame__Task_DrisameInit.inc new file mode 100644 index 0000000000..b40bb04dd3 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Drisame__Task_DrisameInit.inc @@ -0,0 +1,315 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r3, _08072C98 @ =gCurTask + ldr r0, [r3] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 @ r7 = drisame + adds r0, #0xc + adds r0, r0, r1 + mov sb, r0 @ sb = s + ldr r5, [r7] + ldrb r2, [r7, #8] + lsls r2, r2, #3 + ldrh r0, [r7, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldrb r1, [r5, #1] + lsls r1, r1, #3 + ldrh r0, [r7, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r4, r2, #0x10 + mov ip, r4 @ ip = r4 = worldX + asrs r2, r2, #0x10 + str r2, [r7, #0x4c] + lsrs r6, r1, #0x10 + mov r8, r6 @ r = worldY + asrs r1, r1, #0x10 + str r1, [r7, #0x50] + ldr r4, _08072C9C @ =gCamera + ldrh r0, [r4] + subs r0, r2, r0 + mov r6, sb + strh r0, [r6, #0x16] + ldrh r0, [r4, #2] + subs r0, r1, r0 + strh r0, [r6, #0x18] + movs r6, #0 + ldrsh r0, [r4, r6] + mov sl, r0 + movs r0, #0xb8 + lsls r0, r0, #1 + add r0, sl + cmp r2, r0 + bgt _08072C66 + mov r0, sl + subs r0, #0x80 + cmp r2, r0 + blt _08072C66 + movs r0, #2 + ldrsh r2, [r4, r0] + movs r4, #0x90 + lsls r4, r4, #1 + adds r0, r2, r4 + cmp r1, r0 + bgt _08072C66 + adds r0, r2, #0 + subs r0, #0x80 + cmp r1, r0 + bge _08072CA0 +_08072C66: + mov r6, sb + ldrh r0, [r6, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08072C8C + movs r1, #0x18 + ldrsh r0, [r6, r1] + adds r0, #0x80 + cmp r0, #0 + blt _08072C8C + movs r2, #0x18 + ldrsh r1, [r6, r2] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08072CA0 +_08072C8C: + ldrb r0, [r7, #8] + strb r0, [r5] + ldr r0, [r3] + bl TaskDestroy + b _08072E58 + .align 2, 0 +_08072C98: .4byte gCurTask +_08072C9C: .4byte gCamera +_08072CA0: + ldr r6, _08072D40 @ =gPlayer + ldr r0, [r6, #4] + asrs r0, r0, #8 + mov r3, r8 + lsls r5, r3, #0x10 + asrs r4, r5, #0x10 + mov sl, r4 + subs r0, r0, r4 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + ldr r1, [r6] + asrs r1, r1, #8 + mov r2, ip + lsls r4, r2, #0x10 + asrs r3, r4, #0x10 + mov r8, r3 + subs r1, r1, r3 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + bl sa2__sub_8004418 + ldr r1, _08072D44 @ =0x000003FF + ands r1, r0 + str r1, [sp] + adds r2, r1, #0 + ldr r3, _08072D48 @ =0xFFFFFE7F + adds r0, r2, r3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r4, [sp, #4] + str r5, [sp, #8] + cmp r0, #0xfe + bhi _08072D8A + ldr r0, [r6, #4] + asrs r0, r0, #8 + mov r4, sl + subs r0, r0, r4 + adds r5, r0, #0 + muls r5, r0, r5 + ldr r0, [r6] + asrs r0, r0, #8 + mov r6, r8 + subs r0, r0, r6 + adds r1, r0, #0 + muls r1, r0, r1 + adds r0, r1, #0 + adds r5, r5, r0 + ldr r0, _08072D4C @ =0x000018FF + cmp r5, r0 + bgt _08072D8A + ldr r0, [r7, #0x54] + ldrh r0, [r0, #6] + ldr r3, _08072D50 @ =0x030000BD + adds r0, r0, r3 + movs r1, #1 + strb r1, [r0] + mov r4, sb + ldr r0, [r4, #0x10] + ldr r1, _08072D54 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r4, #0x10] + ldr r1, _08072D58 @ =gSineTable + movs r6, #0x80 + lsls r6, r6, #1 + adds r0, r2, r6 + lsls r0, r0, #1 + adds r0, r0, r1 + movs r1, #0 + ldrsh r4, [r0, r1] + adds r0, r4, #0 + movs r1, #0x23 + bl Div + cmp r0, #0 + bge _08072D5C + adds r0, r4, #0 + movs r1, #0x23 + bl Div + b _08072D66 + .align 2, 0 +_08072D40: .4byte gPlayer +_08072D44: .4byte 0x000003FF +_08072D48: .4byte 0xFFFFFE7F +_08072D4C: .4byte 0x000018FF +_08072D50: .4byte 0x030000BD +_08072D54: .4byte 0xFFFFFBFF +_08072D58: .4byte gSineTable +_08072D5C: + adds r0, r4, #0 + movs r1, #0x23 + bl Div + rsbs r0, r0, #0 +_08072D66: + str r0, [r7, #0x3c] + ldr r1, _08072E34 @ =gSineTable + ldr r2, [sp] + lsls r0, r2, #1 + adds r0, r0, r1 + movs r3, #0 + ldrsh r0, [r0, r3] + movs r1, #0x23 + bl Div + str r0, [r7, #0x40] + movs r0, #0 + str r0, [r7, #0x44] + str r0, [r7, #0x48] + ldr r0, _08072E38 @ =gCurTask + ldr r1, [r0] + ldr r0, _08072E3C @ =sub_8072E68 + str r0, [r1, #8] +_08072D8A: + ldr r4, [sp] + mov r8, r4 + mov r0, r8 + subs r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xc0 + lsls r1, r1, #0x12 + cmp r0, r1 + bls _08072E18 + ldr r2, _08072E40 @ =gPlayer + ldr r0, [r2, #4] + asrs r0, r0, #8 + ldr r6, [sp, #8] + asrs r1, r6, #0x10 + subs r0, r0, r1 + adds r5, r0, #0 + muls r5, r0, r5 + ldr r0, [r2] + asrs r0, r0, #8 + ldr r2, [sp, #4] + asrs r1, r2, #0x10 + subs r0, r0, r1 + adds r3, r0, #0 + muls r3, r0, r3 + adds r0, r3, #0 + adds r5, r5, r0 + ldr r0, _08072E44 @ =0x000018FF + cmp r5, r0 + bgt _08072E18 + ldr r0, [r7, #0x54] + ldrh r0, [r0, #6] + ldr r4, _08072E48 @ =0x030000BD + adds r0, r0, r4 + movs r6, #0 + movs r1, #1 + strb r1, [r0] + mov r1, sb + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + mov r2, sb + str r0, [r2, #0x10] + ldr r5, _08072E34 @ =gSineTable + movs r0, #0x80 + lsls r0, r0, #1 + add r0, r8 + lsls r0, r0, #1 + adds r0, r0, r5 + movs r3, #0 + ldrsh r0, [r0, r3] + movs r4, #0x23 + adds r1, r4, #0 + bl Div + str r0, [r7, #0x3c] + mov r1, r8 + lsls r0, r1, #1 + adds r0, r0, r5 + movs r2, #0 + ldrsh r0, [r0, r2] + adds r1, r4, #0 + bl Div + str r0, [r7, #0x40] + str r6, [r7, #0x44] + str r6, [r7, #0x48] + ldr r0, _08072E38 @ =gCurTask + ldr r1, [r0] + ldr r0, _08072E3C @ =sub_8072E68 + str r0, [r1, #8] +_08072E18: + ldr r3, [sp, #4] + asrs r1, r3, #0x10 + ldr r4, [sp, #8] + asrs r2, r4, #0x10 + mov r0, sb + bl Coll_Player_Enemy_Attack + cmp r0, #0 + beq _08072E4C + ldr r0, _08072E38 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08072E58 + .align 2, 0 +_08072E34: .4byte gSineTable +_08072E38: .4byte gCurTask +_08072E3C: .4byte sub_8072E68 +_08072E40: .4byte gPlayer +_08072E44: .4byte 0x000018FF +_08072E48: .4byte 0x030000BD +_08072E4C: + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + bl DisplaySprite +_08072E58: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Kuraa__Task_80737A8.inc b/sa1/asm/non_matching/game/enemies/Kuraa__Task_80737A8.inc new file mode 100644 index 0000000000..4cb14c2def --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Kuraa__Task_80737A8.inc @@ -0,0 +1,252 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r3, _08073868 @ =gCurTask + ldr r0, [r3] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r1 + mov r8, r0 @ r8 = kuraa + ldr r0, _0807386C @ =0x0300000C + adds r4, r1, r0 @ r4 = s + mov r1, r8 + ldr r1, [r1] + mov ip, r1 @ ip = r1 = me + mov r5, r8 + ldrb r2, [r5, #8] + lsls r2, r2, #3 + ldrh r0, [r5, #4] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldX + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 @ r1 = worldY + lsls r1, r1, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 @ r2 = worldX + lsrs r7, r1, #0x10 + mov sl, r7 @ sl = r7 = worldY + asrs r6, r1, #0x10 + ldr r0, [r5, #0x3c] + asrs r0, r0, #8 + adds r0, r2, r0 + lsls r0, r0, #0x10 + ldr r5, _08073870 @ =gCamera + ldrh r1, [r5] + lsrs r7, r0, #0x10 + mov sb, r7 + asrs r0, r0, #0x10 + subs r0, r0, r1 + strh r0, [r4, #0x16] + ldrh r0, [r5, #2] + subs r0, r6, r0 + strh r0, [r4, #0x18] + movs r0, #0 + ldrsh r1, [r5, r0] + movs r7, #0xb8 + lsls r7, r7, #1 + adds r0, r1, r7 + cmp r2, r0 + bgt _08073834 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + blt _08073834 + movs r0, #2 + ldrsh r1, [r5, r0] + movs r2, #0x90 + lsls r2, r2, #1 + adds r0, r1, r2 + cmp r6, r0 + bgt _08073834 + adds r0, r1, #0 + subs r0, #0x80 + cmp r6, r0 + bge _08073874 +_08073834: + ldrh r0, [r4, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08073858 + movs r5, #0x18 + ldrsh r0, [r4, r5] + adds r0, #0x80 + cmp r0, #0 + blt _08073858 + movs r7, #0x18 + ldrsh r1, [r4, r7] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08073874 +_08073858: + mov r1, r8 + ldrb r0, [r1, #8] + mov r2, ip + strb r0, [r2] + ldr r0, [r3] + bl TaskDestroy + b _08073974 + .align 2, 0 +_08073868: .4byte gCurTask +_0807386C: .4byte 0x0300000C +_08073870: .4byte gCamera +_08073874: + ldr r1, [r4, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _08073928 + mov r5, sb + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + adds r1, r4, #0 + adds r1, #0x2c + movs r7, #0 + ldrsb r7, [r1, r7] + adds r5, r0, r7 + ldr r2, _08073984 @ =gPlayer + ldr r1, [r2] + asrs r1, r1, #8 + ldr r3, _08073988 @ =gPlayerBodyPSI + adds r0, r3, #0 + adds r0, #0x38 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov ip, r0 + add r1, ip + mov sb, r2 + adds r6, r3, #0 + cmp r5, r1 + bgt _080738C2 + adds r0, r4, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + adds r0, r5, r0 + cmp r0, r1 + bge _080738D6 + cmp r5, r1 + blt _08073928 +_080738C2: + adds r0, r6, #0 + adds r0, #0x3a + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r7, ip + subs r0, r0, r7 + adds r0, r1, r0 + cmp r0, r5 + blt _08073928 +_080738D6: + mov r1, sl + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + adds r3, r4, #0 + adds r3, #0x2d + movs r5, #0 + ldrsb r5, [r3, r5] + adds r1, r0, r5 + mov r2, sb + ldr r0, [r2, #4] + asrs r0, r0, #8 + adds r3, r6, #0 + adds r3, #0x39 + movs r2, #0 + ldrsb r2, [r3, r2] + adds r3, r0, r2 + cmp r1, r3 + bgt _08073910 + adds r0, r4, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r3 + bge _08073922 + cmp r1, r3 + blt _08073928 +_08073910: + adds r0, r6, #0 + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r3, r0 + cmp r0, r1 + blt _08073928 +_08073922: + mov r0, sb + bl Coll_DamagePlayer +_08073928: + mov r1, r8 + adds r1, #0x42 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x77 + ble _08073950 + adds r1, r4, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + subs r1, #1 + movs r0, #0 + strb r0, [r1] + ldr r0, _0807398C @ =gCurTask + ldr r1, [r0] + ldr r0, _08073990 @ =Task_KuraaInit + str r0, [r1, #8] +_08073950: + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r4, #0x10] + adds r0, r4, #0 + bl DisplaySprite + ldr r0, [r4, #0x10] + ldr r1, _08073994 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r4, #0x10] +_08073974: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08073984: .4byte gPlayer +_08073988: .4byte gPlayerBodyPSI +_0807398C: .4byte gCurTask +_08073990: .4byte Task_KuraaInit +_08073994: .4byte 0xFFFFFBFF + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Leon__Task_LeonInit.inc b/sa1/asm/non_matching/game/enemies/Leon__Task_LeonInit.inc new file mode 100644 index 0000000000..a7ce460221 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Leon__Task_LeonInit.inc @@ -0,0 +1,321 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r4, _0806EB90 @ =gCurTask + ldr r0, [r4] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r3, r0 @ r5 = leon + adds r0, #0xc + adds r6, r3, r0 @ r6 = s + ldr r1, [r5] + mov sb, r1 @ sb = me + ldrb r2, [r5, #8] + lsls r2, r2, #3 + ldrh r0, [r5, #4] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldX + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 @ r1 = worldY + lsls r2, r2, #0x10 + asrs r7, r2, #0x10 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov ip, r1 + ldr r2, _0806EB94 @ =0x03000048 + adds r0, r3, r2 + movs r2, #0 + ldrsh r1, [r0, r2] + ldr r0, [r5, #0x44] + adds r0, r0, r1 + str r0, [r5, #0x44] + asrs r0, r0, #8 + adds r0, r7, r0 + lsls r0, r0, #0x10 + ldr r1, _0806EB98 @ =0x0300004C + adds r3, r3, r1 + ldrh r1, [r3] + add r1, ip + lsls r1, r1, #0x10 + ldr r3, _0806EB9C @ =gCamera + ldrh r2, [r3] + mov r8, r2 + lsrs r2, r0, #0x10 + mov sl, r2 + asrs r0, r0, #0x10 + mov r2, r8 + subs r0, r0, r2 + strh r0, [r6, #0x16] + ldrh r0, [r3, #2] + lsrs r2, r1, #0x10 + mov r8, r2 + asrs r1, r1, #0x10 + subs r1, r1, r0 + strh r1, [r6, #0x18] + movs r0, #0 + ldrsh r1, [r3, r0] + movs r2, #0xb8 + lsls r2, r2, #1 + adds r0, r1, r2 + cmp r7, r0 + bgt _0806EB5E + adds r0, r1, #0 + subs r0, #0x80 + cmp r7, r0 + blt _0806EB5E + movs r0, #2 + ldrsh r2, [r3, r0] + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r2, r1 + cmp ip, r0 + bgt _0806EB5E + adds r0, r2, #0 + subs r0, #0x80 + cmp ip, r0 + bge _0806EBA0 +_0806EB5E: + ldrh r0, [r6, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0806EB82 + movs r2, #0x18 + ldrsh r0, [r6, r2] + adds r0, #0x80 + cmp r0, #0 + blt _0806EB82 + movs r3, #0x18 + ldrsh r1, [r6, r3] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0806EBA0 +_0806EB82: + ldrb r0, [r5, #8] + mov r1, sb + strb r0, [r1] + ldr r0, [r4] + bl TaskDestroy + b _0806ED2C + .align 2, 0 +_0806EB90: .4byte gCurTask +_0806EB94: .4byte 0x03000048 +_0806EB98: .4byte 0x0300004C +_0806EB9C: .4byte gCamera +_0806EBA0: + mov r2, sl + lsls r0, r2, #0x10 + asrs r7, r0, #0x10 + mov r3, r8 + lsls r0, r3, #0x10 + asrs r4, r0, #0x10 + adds r0, r6, #0 + adds r1, r7, #0 + adds r2, r4, #0 + bl Coll_Player_Enemy_Attack + mov r8, r0 + cmp r0, #0 + beq _0806EBCC + ldr r0, _0806EBC8 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0806ED2C + .align 2, 0 +_0806EBC8: .4byte gCurTask +_0806EBCC: + adds r0, r4, #3 + add r1, sp, #8 + str r1, [sp] + ldr r1, _0806EC34 @ =sa2__sub_801EE64 + str r1, [sp, #4] + adds r1, r7, #0 + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F07C + adds r2, r5, #0 + adds r2, #0x4c + ldrh r1, [r2] + adds r1, r1, r0 + strh r1, [r2] + ldr r0, [r5, #0x44] + asrs r2, r0, #8 + mov r3, sb + movs r1, #3 + ldrsb r1, [r3, r1] + lsls r0, r1, #3 + cmp r2, r0 + bgt _0806EC40 + ldr r0, [r6, #0x10] + mvns r0, r0 + movs r2, #0x80 + lsls r2, r2, #3 + ands r0, r2 + cmp r0, #0 + bne _0806EC0A + b _0806ED20 +_0806EC0A: + adds r1, r5, #0 + adds r1, #0x48 + movs r0, #0xa0 + strh r0, [r1] + adds r0, r5, #0 + adds r0, #0x4a + mov r1, r8 + strh r1, [r0] + adds r1, r6, #0 + adds r1, #0x20 + movs r0, #2 + strb r0, [r1] + ldr r0, _0806EC38 @ =gCurTask + ldr r1, [r0] + ldr r0, _0806EC3C @ =Task_806ED3C + str r0, [r1, #8] + ldr r0, [r6, #0x10] + orrs r0, r2 + str r0, [r6, #0x10] + b _0806ED20 + .align 2, 0 +_0806EC34: .4byte sa2__sub_801EE64 +_0806EC38: .4byte gCurTask +_0806EC3C: .4byte Task_806ED3C +_0806EC40: + mov r3, sb + ldrb r0, [r3, #5] + adds r0, r1, r0 + lsls r0, r0, #3 + cmp r2, r0 + blt _0806EC94 + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _0806ED20 + adds r1, r5, #0 + adds r1, #0x48 + ldr r0, _0806EC84 @ =0x0000FF60 + strh r0, [r1] + adds r0, r5, #0 + adds r0, #0x4a + mov r1, r8 + strh r1, [r0] + adds r1, r6, #0 + adds r1, #0x20 + movs r0, #2 + strb r0, [r1] + ldr r0, [r6, #0x10] + ldr r1, _0806EC88 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r6, #0x10] + ldr r0, _0806EC8C @ =gCurTask + ldr r1, [r0] + ldr r0, _0806EC90 @ =Task_806ED3C + str r0, [r1, #8] + b _0806ED20 + .align 2, 0 +_0806EC84: .4byte 0x0000FF60 +_0806EC88: .4byte 0xFFFFFBFF +_0806EC8C: .4byte gCurTask +_0806EC90: .4byte Task_806ED3C +_0806EC94: + adds r3, r5, #0 + adds r3, #0x4e + ldrh r0, [r3] + movs r1, #0 + ldrsh r2, [r3, r1] + mov r8, r2 + cmp r2, #0 + bne _0806ED1C + ldr r2, _0806ECE4 @ =gPlayer + ldr r0, [r2, #4] + asrs r1, r0, #8 + adds r0, r4, #0 + adds r0, #8 + cmp r1, r0 + bgt _0806ED20 + subs r0, #0x28 + cmp r0, r1 + bgt _0806ED20 + ldr r1, [r6, #0x10] + movs r0, #0x80 + lsls r0, r0, #3 + ands r1, r0 + cmp r1, #0 + beq _0806ECE8 + ldr r0, [r2] + asrs r1, r0, #8 + cmp r1, r7 + blt _0806ED20 + adds r0, r7, #0 + adds r0, #0x50 + cmp r0, r1 + blt _0806ED20 + movs r0, #0x3c + strh r0, [r3] + adds r0, r5, #0 + adds r0, #0x4a + mov r2, r8 + strh r2, [r0] + b _0806ED02 + .align 2, 0 +_0806ECE4: .4byte gPlayer +_0806ECE8: + ldr r0, [r2] + asrs r2, r0, #8 + cmp r2, r7 + bgt _0806ED20 + adds r0, r7, #0 + subs r0, #0x50 + cmp r0, r2 + bgt _0806ED20 + movs r0, #0x3c + strh r0, [r3] + adds r0, r5, #0 + adds r0, #0x4a + strh r1, [r0] +_0806ED02: + adds r1, r6, #0 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + ldr r0, _0806ED14 @ =gCurTask + ldr r1, [r0] + ldr r0, _0806ED18 @ =Task_806EEA4 + str r0, [r1, #8] + b _0806ED20 + .align 2, 0 +_0806ED14: .4byte gCurTask +_0806ED18: .4byte Task_806EEA4 +_0806ED1C: + subs r0, #1 + strh r0, [r3] +_0806ED20: + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl DisplaySprite +_0806ED2C: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Pen__Task_PenMk1Snowball.inc b/sa1/asm/non_matching/game/enemies/Pen__Task_PenMk1Snowball.inc new file mode 100644 index 0000000000..1ad59bb57e --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Pen__Task_PenMk1Snowball.inc @@ -0,0 +1,314 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + ldr r0, _08074010 @ =gCurTask + ldr r0, [r0] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r3, r0 @ r6 = proj = s + mov r8, r6 @ r8 = proj = s + ldr r1, _08074014 @ =0x0300004B + adds r0, r3, r1 + ldrb r0, [r0] + cmp r0, #0 + beq _08073FAE + ldrh r0, [r6, #0x32] + adds r0, #0x3c + strh r0, [r6, #0x32] +_08073FAE: + movs r2, #0x30 + ldrsh r0, [r6, r2] + ldr r1, [r6, #0x34] + adds r1, r1, r0 + str r1, [r6, #0x34] + movs r7, #0x32 + ldrsh r0, [r6, r7] + ldr r2, [r6, #0x38] + adds r2, r2, r0 + str r2, [r6, #0x38] + ldr r0, [r6, #0x3c] + asrs r1, r1, #8 + adds r0, r0, r1 + strh r0, [r6, #0x16] + ldr r0, [r6, #0x44] + asrs r2, r2, #8 + adds r0, r0, r2 + strh r0, [r6, #0x18] + ldrh r0, [r6, #0x16] + mov sl, r0 @ sl = s->x + ldrh r1, [r6, #0x18] + str r1, [sp, #0xc] @ sp0C = s->y + ldr r5, _08074018 @ =gSineTable + ldr r2, _0807401C @ =0x0300004A + adds r4, r3, r2 + ldrb r0, [r4] @ r0 = proj->unk4A + ldr r7, _08074020 @ =0x000003FF + mov sb, r7 @ sb = 0x3FF + lsls r0, r0, #3 + adds r0, r0, r5 + movs r1, #0 + ldrsh r0, [r0, r1] + subs r7, #0x17 @ r7 = 1000 + adds r1, r7, #0 + bl Div + lsls r0, r0, #0x10 + asrs r1, r0, #0x10 @ r1 = divRes + cmp r1, #0 + bge _0807402C + movs r2, #0x30 + ldrsh r0, [r6, r2] + adds r0, r1, r0 + ldr r1, _08074024 @ =0x0000FFFE + cmp r0, r1 + ble _0807402C + ldr r0, _08074028 @ =0x0000FFFF + strh r0, [r6, #0x30] + b _08074048 + .align 2, 0 +_08074010: .4byte gCurTask +_08074014: .4byte 0x0300004B +_08074018: .4byte gSineTable +_0807401C: .4byte 0x0300004A +_08074020: .4byte 0x000003FF +_08074024: .4byte 0x0000FFFE +_08074028: .4byte 0x0000FFFF +_0807402C: + ldrb r0, [r4] + lsls r0, r0, #2 + mov r1, sb + ands r0, r1 + lsls r0, r0, #1 + adds r0, r0, r5 + movs r2, #0 + ldrsh r0, [r0, r2] + adds r1, r7, #0 + bl Div + ldrh r1, [r6, #0x30] + adds r1, r1, r0 + strh r1, [r6, #0x30] +_08074048: + ldr r1, _080740AC @ =gSineTable + mov r4, r8 @ r4 = r8 = proj + adds r4, #0x4a + ldrb r0, [r4] + lsls r0, r0, #3 + movs r7, #0x80 + lsls r7, r7, #2 + adds r0, r0, r7 + adds r0, r0, r1 + movs r1, #0 + ldrsh r0, [r0, r1] + movs r1, #0xfa + lsls r1, r1, #2 + bl Div + mov r2, r8 @ r2 = r8 = proj + ldr r1, [r2, #0x38] + adds r1, r1, r0 + str r1, [r2, #0x38] + mov r7, r8 @ r7 = r8 = proj + adds r7, #0x48 + ldrh r0, [r7] + str r4, [sp, #0x10] @ sp10 = &proj->unk4A + cmp r0, #0 + beq _0807407E + subs r0, #1 + strh r0, [r7] +_0807407E: + mov r0, sl + lsls r5, r0, #0x10 + asrs r1, r5, #0x10 + mov sb, r1 @ sb = r1 = s->x + ldr r2, [sp, #0xc] + lsls r4, r2, #0x10 + asrs r0, r4, #0x10 + mov sl, r0 @ sl = s->y + adds r0, r6, #0 + mov r2, sl + bl Coll_Player_Projectile + cmp r0, #0 + bne _080740A0 + ldrh r0, [r7] + cmp r0, #0 + bne _080740B0 +_080740A0: + mov r0, sb + mov r1, sl + bl CreatePenMk1SnowballDebris + b _080741BC_destroy_n_return + .align 2, 0 +_080740AC: .4byte gSineTable +_080740B0: + ldr r2, _080740F0 @ =gCamera + ldrh r0, [r6, #0x16] + ldrh r1, [r2] + subs r0, r0, r1 + strh r0, [r6, #0x16] + ldrh r0, [r6, #0x18] + ldrh r1, [r2, #2] + subs r0, r0, r1 + strh r0, [r6, #0x18] + add r1, sp, #8 + str r1, [sp] + ldr r0, _080740F4 @ =sa2__sub_801EE64 + str r0, [sp, #4] + mov r0, sl + mov r1, sb + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F07C + adds r3, r0, #0 + cmp r3, #0 + ble _080740F8 + mov r0, r8 + adds r0, #0x4b + ldrb r1, [r0] + adds r2, r0, #0 + cmp r1, #0 + bne _080740EC + mov r7, r8 + strh r1, [r7, #0x32] +_080740EC: + movs r0, #1 + b _0807411E + .align 2, 0 +_080740F0: .4byte gCamera +_080740F4: .4byte sa2__sub_801EE64 +_080740F8: + mov r0, r8 + adds r0, #0x4b + ldrb r1, [r0] + adds r2, r0, #0 + cmp r1, #0 + beq _08074118 + movs r0, #0 + ldr r1, [sp, #0x10] @ r1 = sp10 = &proj->unk4A + strb r0, [r1] + mov r7, r8 + movs r0, #0x32 + ldrsh r1, [r7, r0] + movs r0, #0x80 + lsls r0, r0, #3 + cmp r1, r0 + bgt _080740A0 +_08074118: + cmp r3, #0 + bge _08074120 + movs r0, #0 +_0807411E: + strb r0, [r2] +_08074120: + ldrb r2, [r2] + cmp r2, #0 + bne _08074174 + cmp r3, #0 + bge _08074138 + lsls r1, r3, #8 + mov r7, r8 + ldr r0, [r7, #0x38] + adds r0, r0, r1 + str r0, [r7, #0x38] + strh r2, [r7, #0x32] + b _08074144 +_08074138: + lsls r0, r3, #6 + mov r1, r8 + ldrh r1, [r1, #0x32] + adds r0, r0, r1 + mov r2, r8 + strh r0, [r2, #0x32] +_08074144: + add r1, sp, #8 + ldr r7, [sp, #0x10] @ r7 = sp10 = &proj->unk4A + ldrb r0, [r7] + ldrb r1, [r1] + subs r0, r0, r1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bge _0807415E + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 +_0807415E: + lsls r0, r2, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x3f + ble _08074170 +_08074166_debr_destroy_ret: + asrs r0, r5, #0x10 @ oldWorldX + asrs r1, r4, #0x10 @ oldWorldY + bl CreatePenMk1SnowballDebris + b _080741BC_destroy_n_return +_08074170: + ldr r0, [sp, #0x10] @ r0 = sp10 = &proj->unk4A + strb r1, [r0] +_08074174: + adds r0, r3, #5 + cmp r0, #5 + bhi _08074198 + add r0, sp, #8 + ldrb r1, [r0] + adds r0, r1, #0 + adds r0, #0x3f + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x1c + bls _08074166_debr_destroy_ret + adds r0, r1, #0 + adds r0, #0x5d + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x1c + bhi _080741CC + b _08074166_debr_destroy_ret +_08074198: + ldrh r0, [r6, #0x16] + adds r0, #0x3c + lsls r0, r0, #0x10 + movs r1, #0xb4 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _080741BC_destroy_n_return + movs r1, #0x18 + ldrsh r0, [r6, r1] + adds r0, #0x3c + cmp r0, #0 + blt _080741BC_destroy_n_return + movs r2, #0x18 + ldrsh r1, [r6, r2] + movs r0, #0x96 + lsls r0, r0, #1 + cmp r1, r0 + ble _080741CC +_080741BC_destroy_n_return: + ldr r0, _080741C8 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _080741D8_return + .align 2, 0 +_080741C8: .4byte gCurTask +_080741CC: + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl DisplaySprite +_080741D8_return: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Senbon__Task_SenbonInit.inc b/sa1/asm/non_matching/game/enemies/Senbon__Task_SenbonInit.inc new file mode 100644 index 0000000000..2c01486160 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Senbon__Task_SenbonInit.inc @@ -0,0 +1,246 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r4, _08070BA0 @ =gCurTask + ldr r0, [r4] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r3, r0 @ r6 = senbon + adds r0, #0xc + adds r5, r3, r0 @ r5 = s + ldr r1, [r6] + mov r8, r1 @ r8 = me + ldrb r2, [r6, #8] + lsls r2, r2, #3 + ldrh r0, [r6, #4] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldX + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r6, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r2, r2, #0x10 + asrs r7, r2, #0x10 @ r7 = worldX + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov ip, r1 @ ip = worldY + ldr r2, _08070BA4 @ =0x03000048 + adds r3, r3, r2 + movs r0, #0 + ldrsh r1, [r3, r0] + ldr r0, [r6, #0x40] + adds r0, r0, r1 + str r0, [r6, #0x40] @ senbon->unk40 += senbon->unk48 + asrs r0, r0, #8 + adds r0, r7, r0 + lsls r0, r0, #0x10 + ldrh r1, [r6, #0x3c] + add r1, ip + lsls r1, r1, #0x10 + ldr r3, _08070BA8 @ =gCamera + ldrh r2, [r3] + mov sb, r2 + lsrs r2, r0, #0x10 + mov sl, r2 @ sl = offsetWorldX = worldX + senbon->unk40; + asrs r0, r0, #0x10 + mov r2, sb + subs r0, r0, r2 + strh r0, [r5, #0x16] + ldrh r0, [r3, #2] + lsrs r2, r1, #0x10 + mov sb, r2 + asrs r1, r1, #0x10 + subs r1, r1, r0 + strh r1, [r5, #0x18] + movs r0, #0 + ldrsh r1, [r3, r0] + movs r2, #0xb8 + lsls r2, r2, #1 + adds r0, r1, r2 + cmp r7, r0 + bgt _08070B6C + adds r0, r1, #0 + subs r0, #0x80 + cmp r7, r0 + blt _08070B6C + movs r0, #2 + ldrsh r2, [r3, r0] + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r2, r1 + cmp ip, r0 + bgt _08070B6C + adds r0, r2, #0 + subs r0, #0x80 + cmp ip, r0 + bge _08070BAC +_08070B6C: + ldrh r0, [r5, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08070B90 + movs r2, #0x18 + ldrsh r0, [r5, r2] + adds r0, #0x80 + cmp r0, #0 + blt _08070B90 + movs r3, #0x18 + ldrsh r1, [r5, r3] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08070BAC +_08070B90: + ldrb r0, [r6, #8] + mov r1, r8 + strb r0, [r1] + ldr r0, [r4] + bl TaskDestroy + b _08070C98 + .align 2, 0 +_08070BA0: .4byte gCurTask +_08070BA4: .4byte 0x03000048 +_08070BA8: .4byte gCamera +_08070BAC: + mov r2, sl @ r2 = sl = offsetWorldX + lsls r0, r2, #0x10 + asrs r4, r0, #0x10 + mov r3, sb + lsls r2, r3, #0x10 + asrs r2, r2, #0x10 + adds r0, r5, #0 + adds r1, r4, #0 + bl Coll_Player_Enemy_Attack + cmp r0, #0 + beq _08070BD4 + ldr r0, _08070BD0 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08070C98 + .align 2, 0 +_08070BD0: .4byte gCurTask +_08070BD4: + ldr r0, [r6, #0x40] + asrs r2, r0, #8 + mov r0, r8 + movs r1, #3 + ldrsb r1, [r0, r1] + adds r0, r1, #1 + lsls r0, r0, #3 + cmp r2, r0 + bgt _08070BFA + adds r1, r6, #0 + adds r1, #0x48 + movs r0, #0xa0 + strh r0, [r1] + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r5, #0x10] + b _08070C8C +_08070BFA: + mov r3, r8 + ldrb r0, [r3, #5] + adds r0, r1, r0 + subs r0, #1 + lsls r0, r0, #3 + cmp r2, r0 + blt _08070C24 + adds r1, r6, #0 + adds r1, #0x48 + ldr r0, _08070C1C @ =0x0000FF60 + strh r0, [r1] + ldr r0, [r5, #0x10] + ldr r1, _08070C20 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r5, #0x10] + b _08070C8C + .align 2, 0 +_08070C1C: .4byte 0x0000FF60 +_08070C20: .4byte 0xFFFFFBFF +_08070C24: + adds r1, r6, #0 + adds r1, #0x46 + ldrh r0, [r1] + movs r3, #0 + ldrsh r2, [r1, r3] + cmp r2, #0 + beq _08070C38 + subs r0, #1 + strh r0, [r1] + b _08070C8C +_08070C38: + ldr r1, [r5, #0x10] + movs r0, #0x80 + lsls r0, r0, #3 + ands r1, r0 + cmp r1, #0 + beq _08070C64 + ldr r0, _08070C60 @ =gPlayer + ldr r0, [r0] + asrs r1, r0, #8 + cmp r1, r4 + blt _08070C8C + adds r0, r4, #0 + adds r0, #0x50 + cmp r0, r1 + blt _08070C8C + adds r0, r6, #0 + adds r0, #0x44 + strh r2, [r0] + b _08070C7C + .align 2, 0 +_08070C60: .4byte gPlayer +_08070C64: + ldr r0, _08070CA8 @ =gPlayer + ldr r0, [r0] + asrs r2, r0, #8 + cmp r2, r4 + bgt _08070C8C + adds r0, r4, #0 + subs r0, #0x50 + cmp r0, r2 + bgt _08070C8C + adds r0, r6, #0 + adds r0, #0x44 + strh r1, [r0] +_08070C7C: + adds r1, r5, #0 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + ldr r0, _08070CAC @ =gCurTask + ldr r1, [r0] + ldr r0, _08070CB0 @ =Task_8070CB4 + str r0, [r1, #8] +_08070C8C: + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite +_08070C98: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08070CA8: .4byte gPlayer +_08070CAC: .4byte gCurTask +_08070CB0: .4byte Task_8070CB4 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Slot__Task_SlotProjectileMain.inc b/sa1/asm/non_matching/game/enemies/Slot__Task_SlotProjectileMain.inc new file mode 100644 index 0000000000..f6f20b7c17 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Slot__Task_SlotProjectileMain.inc @@ -0,0 +1,278 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x3c + ldr r0, _0806E628 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r4, r0 @ r6 = proj + ldr r0, [r6, #0x34] + movs r1, #0x80 + lsls r1, r1, #1 + bl Div + strh r0, [r6, #0x16] + ldr r0, _0806E62C @ =0x0300004C + adds r5, r4, r0 + ldrh r0, [r5] + adds r0, #0x28 + strh r0, [r5] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + ldrh r1, [r6, #0x18] + adds r0, r0, r1 + strh r0, [r6, #0x18] + ldrh r2, [r6, #0x18] + str r2, [sp, #0x10] @ sp10 = s->y + ldrh r0, [r6, #0x16] + str r0, [sp, #0xc] @ sp0C = s->x + movs r2, #0x16 + ldrsh r1, [r6, r2] + mov sb, r1 @ sb = + ldr r0, [sp, #0x10] + lsls r0, r0, #0x10 + mov sl, r0 + asrs r7, r0, #0x10 + adds r0, r6, #0 + adds r2, r7, #0 + bl Coll_Player_Projectile + rsbs r1, r0, #0 + orrs r1, r0 + lsrs r1, r1, #0x1f + mov r8, r1 + ldr r3, _0806E630 @ =gCamera + ldrh r0, [r6, #0x16] + ldrh r1, [r3] + subs r0, r0, r1 + strh r0, [r6, #0x16] + ldrh r2, [r6, #0x18] + ldrh r1, [r3, #2] + subs r2, r2, r1 + strh r2, [r6, #0x18] + adds r0, #0x14 + lsls r0, r0, #0x10 + movs r1, #0x8a + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0806E61E + movs r1, #0x18 + ldrsh r0, [r6, r1] + adds r0, #0x14 + cmp r0, #0 + blt _0806E61E + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xf0 + ble _0806E634 +_0806E61E: + ldr r0, _0806E628 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0806E782_return + .align 2, 0 +_0806E628: .4byte gCurTask +_0806E62C: .4byte 0x0300004C +_0806E630: .4byte gCamera +_0806E634: + add r2, sp, #8 + str r2, [sp] + ldr r0, _0806E794 @ =sa2__sub_801EE64 + str r0, [sp, #4] + adds r0, r7, #0 + mov r1, sb + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F07C + mov sb, r0 + cmp r0, #0 + ble _0806E656 + mov r0, r8 + cmp r0, #0 + bne _0806E656 + b _0806E76A +_0806E656: + mov r1, r8 + cmp r1, #0 + beq _0806E662 + add r1, sp, #8 + movs r0, #0 + strb r0, [r1] +_0806E662: + ldrh r1, [r5] + ldr r2, [r6, #0x34] + str r2, [sp, #0x14] + movs r0, #0x2d + strh r0, [r6, #0x30] + movs r7, #0 + mov r0, sl + str r0, [sp, #0x28] + ldr r2, _0806E798 @ =0x0300004C + adds r2, r4, r2 + str r2, [sp, #0x18] @ sp18 = unk4C + ldr r0, _0806E79C @ =0x03000058 + adds r0, r4, r0 + str r0, [sp, #0x1c] @ sp1C = unk58 + ldr r2, _0806E7A0 @ =0x03000064 + adds r2, r4, r2 + str r2, [sp, #0x20] @ sp20 = unk64 + ldr r0, _0806E7A4 @ =0x03000034 + adds r0, r4, r0 + str r0, [sp, #0x38] @ sp38 = unk34 + ldr r2, _0806E7A8 @ =0x03000070 + adds r2, r4, r2 + str r2, [sp, #0x24] @ sp24 = unk70 + ldr r0, _0806E7AC @ =0x03000088 + adds r0, r4, r0 + str r0, [sp, #0x34] @ sp34 = unk88 + ldr r2, _0806E7B0 @ =0x03000021 + adds r2, r4, r2 + str r2, [sp, #0x30] @ sp30 = unk21 + ldr r0, _0806E7B4 @ =0x03000020 + adds r0, r4, r0 + str r0, [sp, #0x2c] @ sp2C = unk20 + ldr r2, _0806E7B8 @ =gSineTable + mov sl, r2 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov r8, r1 +_0806E6AC: + mov r0, r8 + lsls r4, r0, #2 + add r4, r8 + lsls r4, r4, #1 + ldr r2, _0806E7BC @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _0806E7C0 @ =0x00196225 + muls r0, r1, r0 + ldr r1, _0806E7C4 @ =0x3C6EF35F + adds r0, r0, r1 + str r0, [r2] + movs r1, #4 + bl Mod + adds r1, r0, #0 + adds r1, #0x10 + rsbs r0, r4, #0 + bl Div + lsls r4, r7, #1 + ldr r2, [sp, #0x18] + adds r5, r2, r4 @ r5 = &proj->unk4C + add r1, sp, #8 + ldrb r1, [r1] + lsls r1, r1, #2 + movs r2, #0x7f + ands r1, r2 + adds r2, #0x81 + adds r1, r1, r2 + lsls r1, r1, #1 + add r1, sl + movs r2, #0 + ldrsh r1, [r1, r2] + muls r0, r1, r0 + ldr r1, _0806E7C8 @ =0x00004E20 + bl __divsi3 + strh r0, [r5] + ldr r1, [sp, #0x1c] + adds r0, r1, r4 + mov r2, sp + ldrh r2, [r2, #0xc] + strh r2, [r0] + ldr r0, [sp, #0x20] + adds r4, r0, r4 + ldr r1, [sp, #0x28] + asrs r0, r1, #0x10 + add r0, sb + strh r0, [r4] + lsls r4, r7, #2 + ldr r2, [sp, #0x38] + adds r0, r2, r4 + ldr r1, [sp, #0x14] + str r1, [r0] + add r1, sp, #8 + lsls r0, r7, #3 + subs r0, #0x18 + ldrb r1, [r1] + adds r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _0806E7CC @ =0x000003FF + ands r0, r1 + lsls r0, r0, #1 + add r0, sl + movs r2, #0 + ldrsh r0, [r0, r2] + movs r1, #0x1e + bl Div + ldr r1, [sp, #0x24] + adds r4, r1, r4 + str r0, [r4] + ldr r2, [sp, #0x34] + adds r1, r2, r7 + movs r0, #1 + strb r0, [r1] + adds r0, r7, #1 + lsls r0, r0, #0x18 + lsrs r7, r0, #0x18 + cmp r7, #5 + bls _0806E6AC + movs r0, #0xff + ldr r1, [sp, #0x30] + strb r0, [r1] + ldr r0, _0806E7D0 @ =0x06012680 + str r0, [r6, #4] + movs r1, #0 + ldr r0, _0806E7D4 @ =0x000001A5 + strh r0, [r6, #0xa] + ldr r2, [sp, #0x2c] + strb r1, [r2] + ldr r0, _0806E7D8 @ =gCurTask + ldr r1, [r0] + ldr r0, _0806E7DC @ =sub_806E7E0 + str r0, [r1, #8] +_0806E76A: + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl DisplaySprite + mov r0, sp + ldrh r0, [r0, #0xc] + strh r0, [r6, #0x16] + mov r1, sp + ldrh r1, [r1, #0x10] + strh r1, [r6, #0x18] +_0806E782_return: + add sp, #0x3c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0806E794: .4byte sa2__sub_801EE64 +_0806E798: .4byte 0x0300004C +_0806E79C: .4byte 0x03000058 +_0806E7A0: .4byte 0x03000064 +_0806E7A4: .4byte 0x03000034 +_0806E7A8: .4byte 0x03000070 +_0806E7AC: .4byte 0x03000088 +_0806E7B0: .4byte 0x03000021 +_0806E7B4: .4byte 0x03000020 +_0806E7B8: .4byte gSineTable +_0806E7BC: .4byte gPseudoRandom +_0806E7C0: .4byte 0x00196225 +_0806E7C4: .4byte 0x3C6EF35F +_0806E7C8: .4byte 0x00004E20 +_0806E7CC: .4byte 0x000003FF +_0806E7D0: .4byte 0x06012680 +_0806E7D4: .4byte 0x000001A5 +_0806E7D8: .4byte gCurTask +_0806E7DC: .4byte sub_806E7E0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Task_Pierrot.inc b/sa1/asm/non_matching/game/enemies/Task_Pierrot.inc new file mode 100644 index 0000000000..b58ff89115 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Task_Pierrot.inc @@ -0,0 +1,381 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + ldr r4, _0806DE64 @ =gCurTask + ldr r0, [r4] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r3 + mov r8, r0 @ r8 = pierrot + ldr r0, _0806DE68 @ =0x0300000C + adds r5, r3, r0 @ r5 = s + mov r1, r8 + ldr r1, [r1] + str r1, [sp, #0xc] @ sp0C = me + mov r6, r8 @ r6 = r8 = pierrot + ldrb r2, [r6, #8] + lsls r2, r2, #3 + ldrh r0, [r6, #4] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldX + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r6, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r2, r2, #0x10 + asrs r6, r2, #0x10 @ r6 = worldX + lsls r1, r1, #0x10 + asrs r7, r1, #0x10 @ r7 = worldY + ldr r1, _0806DE6C @ =0x03000048 + adds r0, r3, r1 + movs r2, #0 + ldrsh r1, [r0, r2] + mov r2, r8 @ r2 = r8 = pierrot + ldr r0, [r2, #0x44] + adds r0, r0, r1 + str r0, [r2, #0x44] @ pierrot->unk44 += pierrot->unk48 + asrs r0, r0, #8 + adds r0, r6, r0 + lsls r0, r0, #0x10 @ r0 = newX = worldX + I(pierrot->qUnk44); + ldr r1, _0806DE70 @ =0x0300004A + adds r3, r3, r1 + ldrh r1, [r3] + adds r1, r7, r1 + lsls r1, r1, #0x10 + ldr r2, _0806DE74 @ =0xFFD00000 + adds r1, r1, r2 @ r1 = newY = worldY + pierrot->unk4A - Q(0.1875); + ldr r3, _0806DE78 @ =gCamera + ldrh r2, [r3] + mov sl, r2 + lsrs r2, r0, #0x10 + mov sb, r2 @ sb = newX + asrs r0, r0, #0x10 + mov r2, sl + subs r0, r0, r2 + strh r0, [r5, #0x16] @ s->x = newX - gCamera.x + ldrh r0, [r3, #2] + lsrs r2, r1, #0x10 + mov sl, r2 @ sl = newY + asrs r1, r1, #0x10 + subs r1, r1, r0 + strh r1, [r5, #0x18] @ s->y = + movs r0, #0 + ldrsh r1, [r3, r0] + movs r2, #0xb8 + lsls r2, r2, #1 + adds r0, r1, r2 + cmp r6, r0 + bgt _0806DE30 + adds r0, r1, #0 + subs r0, #0x80 + cmp r6, r0 + blt _0806DE30 + movs r6, #2 + ldrsh r2, [r3, r6] + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r2, r1 + cmp r7, r0 + bgt _0806DE30 + adds r0, r2, #0 + subs r0, #0x80 + cmp r7, r0 + bge _0806DE7C +_0806DE30: + ldrh r0, [r5, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0806DE54 + movs r2, #0x18 + ldrsh r0, [r5, r2] + adds r0, #0x80 + cmp r0, #0 + blt _0806DE54 + movs r3, #0x18 + ldrsh r1, [r5, r3] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0806DE7C +_0806DE54: + mov r6, r8 @ r6 = r8 = pierrot + ldrb r0, [r6, #8] + ldr r1, [sp, #0xc] @ r1 = sp0C = me + strb r0, [r1] + ldr r0, [r4] + bl TaskDestroy + b _0806E04C_return + .align 2, 0 +_0806DE64: .4byte gCurTask +_0806DE68: .4byte 0x0300000C +_0806DE6C: .4byte 0x03000048 +_0806DE70: .4byte 0x0300004A +_0806DE74: .4byte 0xFFD00000 +_0806DE78: .4byte gCamera +_0806DE7C: + ldr r2, _0806DF60 @ =gPlayer + ldr r1, [r2, #0x10] + movs r0, #0x80 + ands r1, r0 + mov r3, sb @ r3 = sb = newX + lsls r3, r3, #0x10 + str r3, [sp, #0x10] @ sp10 = r3 = sb = newX + mov r6, sl + lsls r6, r6, #0x10 + mov sb, r6 @ sb = newY + cmp r1, #0 + beq _0806DE96 + b _0806DFD8 +_0806DE96: + ldr r1, [r5, #0x30] + subs r0, #0x81 + cmp r1, r0 + bne _0806DEA0 + b _0806DFB6 +_0806DEA0: + asrs r1, r3, #0x10 @ r1 = newX + adds r0, r5, #0 + adds r0, #0x34 @ + movs r6, #0 + ldrsb r6, [r0, r6] + adds r4, r1, r6 @ r4 = left = newX + s->hitboxes[1].d.sData[0]; + ldr r1, [r2] + asrs r1, r1, #8 + ldr r3, _0806DF64 @ =gPlayerBodyPSI + adds r0, r3, #0 + adds r0, #0x38 + movs r7, #0 + ldrsb r7, [r0, r7] + adds r1, r1, r7 + mov ip, r3 + cmp r4, r1 @ (left <= playerLeft) + bgt _0806DED8 + adds r0, r5, #0 @ r0 = r5 = s + adds r0, #0x36 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r4, r0 + cmp r0, r1 + bge _0806DEF0 + cmp r4, r1 + blt _0806DFB6 +_0806DED8: + mov r0, ip + adds r0, #0x3a + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + adds r0, r1, r0 + mov r1, sl + lsls r1, r1, #0x10 + mov sb, r1 + cmp r0, r4 + blt _0806DFB6 +_0806DEF0: + mov r3, sl + lsls r1, r3, #0x10 + asrs r0, r1, #0x10 + adds r3, r5, #0 + adds r3, #0x35 + movs r6, #0 + ldrsb r6, [r3, r6] + adds r4, r0, r6 + ldr r0, [r2, #4] + asrs r0, r0, #8 + mov r3, ip + adds r3, #0x39 + movs r7, #0 + ldrsb r7, [r3, r7] + adds r3, r0, r7 + mov sb, r1 @ sb = r1 = + cmp r4, r3 + bgt _0806DF2A + adds r0, r5, #0 + adds r0, #0x37 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r4, r0 + cmp r0, r3 + bge _0806DF3C + cmp r4, r3 + blt _0806DFB6 +_0806DF2A: + mov r0, ip + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + adds r0, r3, r0 + cmp r0, r4 + blt _0806DFB6 +_0806DF3C: + ldr r1, [r2, #0x10] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + beq _0806DFB0 + movs r0, #1 + ands r1, r0 + cmp r1, #0 + beq _0806DF7C + movs r6, #0xc + ldrsh r0, [r2, r6] + cmp r0, #0 + ble _0806DF68 + adds r1, r0, #0 + ldr r0, [r2] + adds r0, r0, r1 + b _0806DF70 + .align 2, 0 +_0806DF60: .4byte gPlayer +_0806DF64: .4byte gPlayerBodyPSI +_0806DF68: + movs r3, #0xc + ldrsh r1, [r2, r3] + ldr r0, [r2] + subs r0, r0, r1 +_0806DF70: + str r0, [r2] + ldr r0, [r2, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + b _0806DF9C +_0806DF7C: + movs r6, #0xc + ldrsh r0, [r2, r6] + cmp r0, #0 + bge _0806DF8C + adds r1, r0, #0 + ldr r0, [r2] + adds r0, r0, r1 + b _0806DF94 +_0806DF8C: + movs r3, #0xc + ldrsh r1, [r2, r3] + ldr r0, [r2] + subs r0, r0, r1 +_0806DF94: + str r0, [r2] + ldr r0, [r2, #0x10] + movs r1, #1 + orrs r0, r1 +_0806DF9C: + str r0, [r2, #0x10] + movs r6, #0xc + ldrsh r0, [r2, r6] + rsbs r0, r0, #0 + strh r0, [r2, #0xc] + movs r1, #8 + ldrsh r0, [r2, r1] + rsbs r0, r0, #0 + strh r0, [r2, #8] + b _0806DFB6 +_0806DFB0: + adds r0, r2, #0 + bl Coll_DamagePlayer +_0806DFB6: + ldr r2, [sp, #0x10] @ r2 = sp10 = newX + asrs r1, r2, #0x10 + mov r3, sb @ r3 = sb = + asrs r2, r3, #0x10 + adds r0, r5, #0 + bl Coll_Player_Enemy_Attack + cmp r0, #0 + beq _0806DFD8 + ldr r0, _0806DFD4 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0806E04C_return + .align 2, 0 +_0806DFD4: .4byte gCurTask +_0806DFD8: + mov r6, sb + asrs r0, r6, #0x10 + ldr r2, [sp, #0x10] @ r2 = sp10 = newX + asrs r1, r2, #0x10 + add r3, sp, #8 + str r3, [sp] + ldr r2, _0806E020 @ =sa2__sub_801EE64 + str r2, [sp, #4] + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F07C + mov r2, r8 @ r2 = r8 = pierrot + adds r2, #0x4a + ldrh r1, [r2] + adds r1, r1, r0 + strh r1, [r2] + mov r6, r8 @ r6 = r8 = pierrot + ldr r0, [r6, #0x44] + asrs r2, r0, #8 + ldr r0, [sp, #0xc] @ r0 = sp0C = me + movs r1, #3 + ldrsb r1, [r0, r1] + lsls r0, r1, #3 + cmp r2, r0 + bgt _0806E024 + mov r1, r8 @ r1 = r8 = pierrot + adds r1, #0x48 + movs r0, #0xa0 + strh r0, [r1] + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + b _0806E03E + .align 2, 0 +_0806E020: .4byte sa2__sub_801EE64 +_0806E024: + ldr r3, [sp, #0xc] @ r3 = sp0C = me + ldrb r0, [r3, #5] + adds r0, r1, r0 + lsls r0, r0, #3 + cmp r2, r0 + blt _0806E040_upd_spr_and_return + mov r1, r8 @ r1 = r8 = pierrot + adds r1, #0x48 + ldr r0, _0806E05C @ =0x0000FF60 + strh r0, [r1] + ldr r0, [r5, #0x10] + ldr r1, _0806E060 @ =0xFFFFFBFF + ands r0, r1 +_0806E03E: + str r0, [r5, #0x10] +_0806E040_upd_spr_and_return: + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite +_0806E04C_return: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0806E05C: .4byte 0x0000FF60 +_0806E060: .4byte 0xFFFFFBFF + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Tentou__Task_TantouMain.inc b/sa1/asm/non_matching/game/enemies/Tentou__Task_TantouMain.inc new file mode 100644 index 0000000000..58810495ed --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Tentou__Task_TantouMain.inc @@ -0,0 +1,273 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + ldr r1, _08074648 @ =gCurTask + ldr r0, [r1] + ldrh r7, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r7 + mov sb, r0 + ldr r2, _0807464C @ =0x0300000C + adds r5, r7, r2 + ldr r3, [r0] + str r3, [sp] + ldrb r1, [r0, #8] + lsls r1, r1, #3 + ldrh r0, [r0, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + mov sl, r1 + ldrb r1, [r3, #1] + lsls r1, r1, #3 + mov r4, sb + ldrh r0, [r4, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + str r1, [sp, #4] + mov r0, sl + str r0, [sp, #8] + str r1, [sp, #0xc] + ldr r6, [r4, #0x50] + ldrb r2, [r3, #5] + lsls r2, r2, #0xb + ldr r1, _08074650 @ =gSineTable + mov r8, r1 + ldr r3, _08074654 @ =0x03000058 + adds r0, r7, r3 + movs r4, #0 + ldrsh r3, [r0, r4] + ldr r0, _08074658 @ =0x0300004E + adds r4, r7, r0 + ldrh r1, [r4] + movs r0, #0x7f + ands r0, r1 + muls r0, r3, r0 + ldr r1, _0807465C @ =0x000003FF + mov ip, r1 + ands r0, r1 + lsls r0, r0, #1 + add r0, r8 + movs r3, #0 + ldrsh r0, [r0, r3] + muls r0, r2, r0 + asrs r0, r0, #0xe + mov r1, sb + str r0, [r1, #0x50] + subs r6, r0, r6 + str r6, [sp, #0x10] + ldr r6, [r1, #0x54] + ldr r3, [sp] + ldrb r2, [r3, #6] + lsls r2, r2, #0xb + ldr r1, _08074660 @ =0x0300005A + adds r0, r7, r1 + movs r1, #0 + ldrsh r3, [r0, r1] + ldrh r1, [r4] + movs r0, #0x3f + ands r0, r1 + muls r0, r3, r0 + mov r3, ip + ands r0, r3 + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + add r0, r8 + movs r3, #0 + ldrsh r0, [r0, r3] + muls r0, r2, r0 + asrs r0, r0, #0xe + mov r1, sb + str r0, [r1, #0x54] + subs r3, r0, r6 + ldrh r0, [r4] + adds r0, #1 + movs r2, #0 + movs r1, #0 + strh r0, [r4] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0x40 + beq _080745D4 + cmp r0, #0x80 + bne _080745E8 +_080745D4: + ldr r4, _08074664 @ =0x03000046 + adds r0, r7, r4 + strh r1, [r0] + ldr r1, _08074668 @ =0x0300002C + adds r0, r7, r1 + strb r2, [r0] + ldr r2, _08074648 @ =gCurTask + ldr r1, [r2] + ldr r0, _0807466C @ =sub_8074928 + str r0, [r1, #8] +_080745E8: + mov r2, sb + adds r2, #0x4e + ldrh r1, [r2] + movs r0, #0x7f + ands r0, r1 + strh r0, [r2] + ldr r7, _08074670 @ =gCamera + ldrh r0, [r7] + ldr r4, [sp, #8] + subs r0, r4, r0 + ldr r1, [sp, #0x10] + asrs r6, r1, #5 + adds r0, r0, r6 + strh r0, [r5, #0x16] + asrs r4, r3, #4 + adds r0, r4, #0 + movs r1, #0x40 + bl Mod + strh r0, [r5, #0x18] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x3f + beq _08074674 + adds r0, r4, #0 + movs r1, #0x40 + bl Mod + ldrh r1, [r7, #2] + ldr r2, [sp, #0xc] + subs r1, r2, r1 + subs r1, r1, r0 + strh r1, [r5, #0x18] + mov r3, sl + adds r1, r3, r6 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r0, [sp, #4] + subs r2, r0, r4 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + adds r0, r5, #0 + bl Coll_Player_Enemy_Attack + cmp r0, #0 + beq _08074694 + b _080746F2 + .align 2, 0 +_08074648: .4byte gCurTask +_0807464C: .4byte 0x0300000C +_08074650: .4byte gSineTable +_08074654: .4byte 0x03000058 +_08074658: .4byte 0x0300004E +_0807465C: .4byte 0x000003FF +_08074660: .4byte 0x0300005A +_08074664: .4byte 0x03000046 +_08074668: .4byte 0x0300002C +_0807466C: .4byte sub_8074928 +_08074670: .4byte gCamera +_08074674: + mov r2, sl + adds r1, r2, r6 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r3, [sp, #4] + lsls r2, r3, #0x10 + asrs r2, r2, #0x10 + adds r0, r5, #0 + bl Coll_Player_Enemy_Attack + cmp r0, #0 + bne _080746F2 + ldrh r0, [r7, #2] + ldr r4, [sp, #0xc] + subs r0, r4, r0 + strh r0, [r5, #0x18] +_08074694: + ldr r2, _080746FC @ =gCamera + movs r0, #0 + ldrsh r1, [r2, r0] + movs r3, #0xb8 + lsls r3, r3, #1 + adds r0, r1, r3 + ldr r4, [sp, #8] + cmp r4, r0 + bgt _080746C6 + adds r0, r1, #0 + subs r0, #0x80 + cmp r4, r0 + blt _080746C6 + movs r0, #2 + ldrsh r1, [r2, r0] + movs r2, #0x90 + lsls r2, r2, #1 + adds r0, r1, r2 + ldr r3, [sp, #0xc] + cmp r3, r0 + bgt _080746C6 + adds r0, r1, #0 + subs r0, #0x80 + cmp r3, r0 + bge _08074704 +_080746C6: + ldrh r0, [r5, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _080746EA + movs r4, #0x18 + ldrsh r0, [r5, r4] + adds r0, #0x80 + cmp r0, #0 + blt _080746EA + movs r0, #0x18 + ldrsh r1, [r5, r0] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08074704 +_080746EA: + mov r1, sb + ldrb r0, [r1, #8] + ldr r2, [sp] + strb r0, [r2] +_080746F2: + ldr r0, _08074700 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08074728 + .align 2, 0 +_080746FC: .4byte gCamera +_08074700: .4byte gCurTask +_08074704: + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r5, #0x10] + adds r0, r5, #0 + bl DisplaySprite + ldr r0, [r5, #0x10] + ldr r1, _08074738 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r5, #0x10] +_08074728: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08074738: .4byte 0xFFFFFBFF + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Tentou__sub_8074928.inc b/sa1/asm/non_matching/game/enemies/Tentou__sub_8074928.inc new file mode 100644 index 0000000000..e3c2e1b643 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Tentou__sub_8074928.inc @@ -0,0 +1,292 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + ldr r1, _08074A64 @ =gCurTask + ldr r0, [r1] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r3 + mov sl, r0 + ldr r2, _08074A68 @ =0x0300000C + adds r7, r3, r2 + ldr r4, [r0] + str r4, [sp] + ldrb r1, [r0, #8] + lsls r1, r1, #3 + ldrh r0, [r0, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + str r1, [sp, #8] + ldrb r1, [r4, #1] + lsls r1, r1, #3 + mov r5, sl + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + str r1, [sp, #4] + ldr r5, [sp, #8] + mov ip, r1 + mov r6, sl + ldr r0, [r6, #0x50] + rsbs r0, r0, #0 + str r0, [sp, #0xc] + ldrb r2, [r4, #5] + lsls r2, r2, #0xb + ldr r1, _08074A6C @ =0x03000058 + adds r0, r3, r1 + movs r6, #0 + ldrsh r4, [r0, r6] + ldr r0, _08074A70 @ =0x0300004E + adds r6, r3, r0 + ldrh r0, [r6] + subs r0, #1 + movs r1, #0x7f + ands r0, r1 + muls r0, r4, r0 + ldr r1, _08074A74 @ =0x000003FF + mov sb, r1 + ands r0, r1 + lsls r0, r0, #1 + ldr r4, _08074A78 @ =gSineTable + adds r0, r0, r4 + movs r1, #0 + ldrsh r0, [r0, r1] + muls r0, r2, r0 + asrs r0, r0, #0xe + mov r2, sl + str r0, [r2, #0x50] + ldr r4, [r2, #0x54] + mov r8, r4 + ldr r0, [sp] + ldrb r2, [r0, #6] + lsls r2, r2, #0xb + ldr r1, _08074A7C @ =0x0300005A + adds r0, r3, r1 + movs r1, #0 + ldrsh r4, [r0, r1] + ldrh r0, [r6] + subs r0, #1 + movs r1, #0x3f + ands r0, r1 + muls r0, r4, r0 + mov r4, sb + ands r0, r4 + movs r6, #0x80 + lsls r6, r6, #1 + adds r0, r0, r6 + lsls r0, r0, #1 + ldr r1, _08074A78 @ =gSineTable + adds r0, r0, r1 + movs r4, #0 + ldrsh r0, [r0, r4] + muls r0, r2, r0 + asrs r0, r0, #0xe + mov r6, sl + str r0, [r6, #0x54] + mov r1, r8 + subs r2, r0, r1 + ldr r4, _08074A80 @ =gCamera + ldrh r0, [r4] + subs r0, r5, r0 + ldr r6, [sp, #0xc] + asrs r1, r6, #5 + adds r0, r0, r1 + strh r0, [r7, #0x16] + ldrh r0, [r4, #2] + mov r1, ip + subs r0, r1, r0 + asrs r1, r2, #4 + subs r0, r0, r1 + strh r0, [r7, #0x18] + ldr r6, _08074A84 @ =0x03000046 + adds r3, r3, r6 + ldrh r0, [r3] + adds r0, #1 + strh r0, [r3] + movs r0, #0 + ldrsh r1, [r4, r0] + movs r3, #0xb8 + lsls r3, r3, #1 + adds r0, r1, r3 + ldr r3, _08074A64 @ =gCurTask + cmp r5, r0 + bgt _08074A30 + adds r0, r1, #0 + subs r0, #0x80 + cmp r5, r0 + blt _08074A30 + movs r5, #2 + ldrsh r1, [r4, r5] + movs r6, #0x90 + lsls r6, r6, #1 + adds r0, r1, r6 + cmp ip, r0 + bgt _08074A30 + adds r0, r1, #0 + subs r0, #0x80 + cmp ip, r0 + bge _08074A88 +_08074A30: + ldrh r0, [r7, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08074A54 + movs r1, #0x18 + ldrsh r0, [r7, r1] + adds r0, #0x80 + cmp r0, #0 + blt _08074A54 + movs r4, #0x18 + ldrsh r1, [r7, r4] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08074A88 +_08074A54: + mov r5, sl + ldrb r0, [r5, #8] + ldr r6, [sp] + strb r0, [r6] + ldr r0, [r3] + bl TaskDestroy + b _08074B62 + .align 2, 0 +_08074A64: .4byte gCurTask +_08074A68: .4byte 0x0300000C +_08074A6C: .4byte 0x03000058 +_08074A70: .4byte 0x0300004E +_08074A74: .4byte 0x000003FF +_08074A78: .4byte gSineTable +_08074A7C: .4byte 0x0300005A +_08074A80: .4byte gCamera +_08074A84: .4byte 0x03000046 +_08074A88: + ldr r0, [sp, #0xc] + asrs r1, r0, #5 + ldr r3, [sp, #8] + adds r1, r3, r1 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + asrs r2, r2, #4 + ldr r4, [sp, #4] + subs r2, r4, r2 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + adds r0, r7, #0 + bl Coll_Player_Enemy_Attack + adds r4, r0, #0 + cmp r4, #0 + beq _08074AB8 + ldr r0, _08074AB4 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08074B62 + .align 2, 0 +_08074AB4: .4byte gCurTask +_08074AB8: + ldr r3, _08074B0C @ =gPlayer + ldr r0, [r3] + asrs r0, r0, #8 + ldr r2, _08074B10 @ =gCamera + movs r5, #0 + ldrsh r1, [r2, r5] + subs r0, r0, r1 + movs r6, #0x16 + ldrsh r1, [r7, r6] + subs r5, r0, r1 + adds r0, r5, #0 + muls r0, r5, r0 + adds r5, r0, #0 + ldr r0, [r3, #4] + asrs r0, r0, #8 + movs r3, #2 + ldrsh r1, [r2, r3] + subs r0, r0, r1 + movs r6, #0x18 + ldrsh r1, [r7, r6] + subs r0, r0, r1 + mov ip, r0 + adds r1, r0, #0 + mov r0, ip + muls r0, r1, r0 + adds r0, r0, r5 + mov ip, r0 + ldr r0, _08074B14 @ =0x000018FF + cmp ip, r0 + bgt _08074B20 + mov r0, sl + adds r0, #0x46 + strh r4, [r0] + adds r1, r7, #0 + adds r1, #0x20 + movs r0, #2 + strb r0, [r1] + ldr r0, _08074B18 @ =gCurTask + ldr r1, [r0] + ldr r0, _08074B1C @ =Task_807473C + b _08074B3C + .align 2, 0 +_08074B0C: .4byte gPlayer +_08074B10: .4byte gCamera +_08074B14: .4byte 0x000018FF +_08074B18: .4byte gCurTask +_08074B1C: .4byte Task_807473C +_08074B20: + mov r3, sl + adds r3, #0x46 + movs r2, #0 + ldrsh r0, [r3, r2] + cmp r0, #0x3b + ble _08074B3E + strh r4, [r3] + adds r1, r7, #0 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + ldr r0, _08074B74 @ =gCurTask + ldr r1, [r0] + ldr r0, _08074B78 @ =Task_TentouMain +_08074B3C: + str r0, [r1, #8] +_08074B3E: + adds r0, r7, #0 + bl UpdateSpriteAnimation + adds r0, r7, #0 + bl DisplaySprite + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r7, #0x10] + adds r0, r7, #0 + bl DisplaySprite + ldr r0, [r7, #0x10] + ldr r1, _08074B7C @ =0xFFFFFBFF + ands r0, r1 + str r0, [r7, #0x10] +_08074B62: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08074B74: .4byte gCurTask +_08074B78: .4byte Task_TentouMain +_08074B7C: .4byte 0xFFFFFBFF + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Wamu__Task_Wamu.inc b/sa1/asm/non_matching/game/enemies/Wamu__Task_Wamu.inc new file mode 100644 index 0000000000..7e09a65ffe --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Wamu__Task_Wamu.inc @@ -0,0 +1,968 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + movs r0, #0 + str r0, [sp, #0xc] + ldr r0, _0806F3F8 @ =gCurTask + ldr r0, [r0] + ldrh r6, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r6 + mov sb, r0 @ sb = wamu + ldr r1, _0806F3FC @ =0x0300000C + adds r1, r1, r6 + mov sl, r1 @ sl = s + ldr r2, _0806F400 @ =0x03000048 + adds r2, r2, r6 + mov r8, r2 @ r8 = s2 + ldr r3, _0806F404 @ =0x03000084 + adds r7, r6, r3 @ r7 = s3 + ldr r4, [r0] + str r4, [sp] @ sp00 = me + ldrb r2, [r0, #8] + lsls r2, r2, #3 + ldrh r0, [r0, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + ldrb r1, [r4, #1] + lsls r1, r1, #3 + mov r5, sb + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + str r2, [sp, #0x10] @ sp10 = worldX + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + str r1, [sp, #0x14] @ sp14 = worldY + ldr r4, _0806F408 @ =gSineTable + ldr r0, _0806F40C @ =0x030000BC + adds r5, r6, r0 + ldrh r1, [r5] + ldr r0, _0806F410 @ =0x000003FF + ands r0, r1 + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + adds r0, r0, r4 + movs r2, #0 + ldrsh r0, [r0, r2] + ldr r3, [sp] + ldrb r2, [r3, #6] + lsls r2, r2, #2 + movs r1, #0x50 + subs r1, r1, r2 + bl Div + ldr r1, _0806F414 @ =0x030000B4 + adds r2, r6, r1 + ldr r1, [r2] + adds r1, r1, r0 + str r1, [r2] + asrs r1, r1, #8 + ldr r2, [sp, #0x10] @ r2 = worldX + adds r1, r2, r1 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #4] @ sp04 = worldX + unkB4 + ldrh r1, [r5] + ldr r0, _0806F410 @ =0x000003FF + ands r0, r1 + lsls r0, r0, #1 + adds r0, r0, r4 + movs r3, #0 + ldrsh r0, [r0, r3] + movs r1, #0x50 + bl Div + ldr r4, _0806F418 @ =0x030000B8 + adds r2, r6, r4 + ldr r1, [r2] + adds r1, r1, r0 + str r1, [r2] + asrs r1, r1, #8 + ldr r0, [sp, #0x14] @ sp14 = worldY + adds r1, r0, r1 + lsls r1, r1, #0x10 + ldr r3, _0806F41C @ =gCamera + ldrh r2, [r3] + ldr r4, [sp, #4] + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + subs r0, r0, r2 + movs r4, #0 + mov r2, sl + strh r0, [r2, #0x16] + ldrh r0, [r3, #2] + lsrs r3, r1, #0x10 + str r3, [sp, #8] + asrs r1, r1, #0x10 + subs r1, r1, r0 + strh r1, [r2, #0x18] + ldr r0, [r2, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _0806F44C + ldr r0, _0806F420 @ =0x030001C0 + adds r2, r6, r0 + ldrb r0, [r2] + cmp r0, #0 + beq _0806F428 + ldrh r0, [r5] + adds r0, #5 + strh r0, [r5] + subs r1, #1 + ands r0, r1 + subs r0, #0x65 + lsls r0, r0, #0x10 + ldr r1, _0806F424 @ =0x03360000 + cmp r0, r1 + bhi _0806F49A + movs r0, #0x64 + strh r0, [r5] + b _0806F46A + .align 2, 0 +_0806F3F8: .4byte gCurTask +_0806F3FC: .4byte 0x0300000C +_0806F400: .4byte 0x03000048 +_0806F404: .4byte 0x03000084 +_0806F408: .4byte gSineTable +_0806F40C: .4byte 0x030000BC +_0806F410: .4byte 0x000003FF +_0806F414: .4byte 0x030000B4 +_0806F418: .4byte 0x030000B8 +_0806F41C: .4byte gCamera +_0806F420: .4byte 0x030001C0 +_0806F424: .4byte 0x03360000 +_0806F428: + ldrh r0, [r5] + subs r0, #5 + strh r0, [r5] + ldr r3, _0806F444 @ =0x000003FF + ands r0, r3 + subs r0, #0x65 + lsls r0, r0, #0x10 + ldr r1, _0806F448 @ =0x03360000 + cmp r0, r1 + bhi _0806F49A + movs r0, #0xe7 + lsls r0, r0, #2 + b _0806F490 + .align 2, 0 +_0806F444: .4byte 0x000003FF +_0806F448: .4byte 0x03360000 +_0806F44C: + ldr r0, _0806F474 @ =0x030001C0 + adds r2, r6, r0 + ldrb r0, [r2] + cmp r0, #0 + beq _0806F47C + ldrh r0, [r5] + adds r0, #5 + strh r0, [r5] + ldr r1, _0806F478 @ =0x000003FF + ands r0, r1 + movs r1, #0x99 + lsls r1, r1, #2 + cmp r0, r1 + bls _0806F49A + strh r1, [r5] +_0806F46A: + strb r4, [r2] + movs r2, #1 + str r2, [sp, #0xc] @ sp0C = 1 + b _0806F49A + .align 2, 0 +_0806F474: .4byte 0x030001C0 +_0806F478: .4byte 0x000003FF +_0806F47C: + ldrh r0, [r5] + subs r0, #8 + strh r0, [r5] + ldr r3, _0806F52C @ =0x000003FF + ands r0, r3 + ldr r1, _0806F530 @ =0x0000019B + cmp r0, r1 + bhi _0806F49A + movs r0, #0xce + lsls r0, r0, #1 +_0806F490: + strh r0, [r5] + movs r0, #1 + strb r0, [r2] + movs r4, #1 + str r4, [sp, #0xc] @ sp0C = 1 +_0806F49A: + ldr r3, _0806F534 @ =0x000001C1 + add r3, sb + ldrb r0, [r3] + adds r0, #1 + strb r0, [r3] + movs r1, #0x3f + ands r0, r1 + lsls r0, r0, #1 + mov r2, sb + adds r2, #0xc0 + adds r0, r2, r0 + mov r5, sp + ldrh r5, [r5, #4] + strh r5, [r0] + ldrb r0, [r3] + ands r1, r0 + lsls r1, r1, #1 + movs r0, #0xa0 + lsls r0, r0, #1 + add r0, sb + adds r0, r0, r1 + mov r1, sp + ldrh r1, [r1, #8] + strh r1, [r0] + ldr r3, _0806F538 @ =gCamera + movs r4, #0 + ldrsh r1, [r3, r4] + movs r5, #0xb8 + lsls r5, r5, #1 + adds r0, r1, r5 + str r2, [sp, #0x18] + ldr r2, [sp, #0x10] @ r2 = worldX + cmp r2, r0 + bgt _0806F4FC + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + blt _0806F4FC + movs r4, #2 + ldrsh r1, [r3, r4] + subs r5, #0x50 + adds r0, r1, r5 + ldr r2, [sp, #0x14] @ r2 = worldY + cmp r2, r0 + bgt _0806F4FC + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + bge _0806F53C +_0806F4FC: + mov r3, sl + ldrh r0, [r3, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0806F522 + movs r4, #0x18 + ldrsh r0, [r3, r4] + adds r0, #0x80 + cmp r0, #0 + blt _0806F522 + movs r5, #0x18 + ldrsh r1, [r3, r5] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0806F53C +_0806F522: + mov r1, sb + ldrb r0, [r1, #8] + ldr r2, [sp] + strb r0, [r2] + b _0806F552 + .align 2, 0 +_0806F52C: .4byte 0x000003FF +_0806F530: .4byte 0x0000019B +_0806F534: .4byte 0x000001C1 +_0806F538: .4byte gCamera +_0806F53C: + ldr r3, [sp, #4] + lsls r1, r3, #0x10 + asrs r1, r1, #0x10 + ldr r4, [sp, #8] + lsls r2, r4, #0x10 + asrs r2, r2, #0x10 + mov r0, sl + bl Coll_Player_Enemy_Attack + cmp r0, #0 + beq _0806F560 +_0806F552: + ldr r0, _0806F55C @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0806FA64 + .align 2, 0 +_0806F55C: .4byte gCurTask +_0806F560: + mov r0, sb + adds r0, #0xb4 + ldr r0, [r0] @ r0 = wamu->qUnkB4 + asrs r2, r0, #8 + ldr r5, [sp] @ r5 = sp00 = me + movs r1, #3 + ldrsb r1, [r5, r1] + lsls r0, r1, #3 + cmp r2, r0 + bgt _0806F5A8 + mov r1, sl @ r1 = sl = s + ldr r0, [r1, #0x10] + mvns r0, r0 + movs r2, #0x80 + lsls r2, r2, #3 + ands r0, r2 + cmp r0, #0 + beq _0806F5F6 + ldr r3, [sp, #0xc] @ r3 = sp0C = sp0C + cmp r3, #0 + beq _0806F5F6 + mov r1, sb + adds r1, #0xbe + movs r0, #0xa0 + strh r0, [r1] + mov r4, sl + ldr r0, [r4, #0x10] + orrs r0, r2 + str r0, [r4, #0x10] + mov r5, r8 @ r5 = r8 = s2 + ldr r0, [r5, #0x10] + orrs r0, r2 + str r0, [r5, #0x10] + ldr r0, [r7, #0x10] @ r7 = s3 + orrs r0, r2 + b _0806F5E4 +_0806F5A8: + ldr r4, [sp] @ r4 = sp00 = me + ldrb r0, [r4, #5] + adds r0, r1, r0 + lsls r0, r0, #3 + cmp r2, r0 + blt _0806F5F6 + mov r5, sl + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _0806F5F6 + ldr r0, [sp, #0xc] @ r0 = sp0C = sp0C + cmp r0, #0 + beq _0806F5F6 + mov r1, sb + adds r1, #0xbe + ldr r0, _0806F934 @ =0x0000FF60 + strh r0, [r1] + ldr r0, [r5, #0x10] + ldr r1, _0806F938 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r5, #0x10] + mov r2, r8 + ldr r0, [r2, #0x10] + ands r0, r1 + str r0, [r2, #0x10] + ldr r0, [r7, #0x10] + ands r0, r1 +_0806F5E4: + str r0, [r7, #0x10] + mov r2, sb + adds r2, #0xbc + ldrh r0, [r2] + movs r3, #0x80 + lsls r3, r3, #1 + adds r1, r3, #0 + eors r0, r1 + strh r0, [r2] +_0806F5F6: + mov r0, sl + bl UpdateSpriteAnimation + mov r0, sl + bl DisplaySprite + ldr r4, _0806F93C @ =0x000001C1 + add r4, sb + ldrb r0, [r4] + subs r0, #0x18 + movs r2, #0x3f + ands r0, r2 + lsls r0, r0, #1 + ldr r5, [sp, #0x18] @ r5 = sp18 = &wamu->worldXs[] + adds r0, r5, r0 + ldr r3, _0806F940 @ =gCamera + ldrh r0, [r0] + ldrh r1, [r3] + subs r0, r0, r1 + mov r5, sl @ r5 = sl = s + ldrh r1, [r5, #0x16] + subs r1, r1, r0 + strh r1, [r7, #0x16] @ r7 = s3 + lsls r1, r1, #0x10 + asrs r1, r1, #0x11 @ r1 = (s->y >> 1) + ldrb r0, [r4] + subs r0, #0x18 + ands r0, r2 + lsls r0, r0, #1 + ldr r5, [sp, #0x18] @ r5 = sp18 = worldXs + adds r0, r5, r0 + ldrh r0, [r0] + subs r0, r0, r1 + ldrh r1, [r3] + lsls r0, r0, #0x10 + asrs r5, r0, #0x10 @ r5 = ??? + subs r1, r5, r1 + strh r1, [r7, #0x16] @ s->x = + ldrb r0, [r4] + subs r0, #0x28 + ands r0, r2 + lsls r0, r0, #1 + movs r1, #0xa0 + lsls r1, r1, #1 + add r1, sb + adds r1, r1, r0 + ldrh r2, [r3, #2] + ldrh r0, [r1] + str r0, [sp, #8] + movs r3, #0 + ldrsh r0, [r1, r3] + subs r0, r0, r2 + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl UpdateSpriteAnimation + adds r0, r7, #0 + bl DisplaySprite + ldr r1, [r7, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _0806F716 + adds r0, r7, #0 + adds r0, #0x2c + movs r6, #0 + ldrsb r6, [r0, r6] + adds r5, r5, r6 + ldr r2, _0806F944 @ =gPlayer + ldr r1, [r2] + asrs r1, r1, #8 + ldr r3, _0806F948 @ =gPlayerBodyPSI + adds r0, r3, #0 + adds r0, #0x38 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov ip, r0 + add r1, ip + adds r4, r3, #0 + cmp r5, r1 + bgt _0806F6B2 + adds r0, r7, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r5, r0 + cmp r0, r1 + bge _0806F6C6 + cmp r5, r1 + blt _0806F716 +_0806F6B2: + adds r0, r4, #0 + adds r0, #0x3a + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r3, ip + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r5 + blt _0806F716 +_0806F6C6: + ldr r5, [sp, #8] + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + adds r3, r7, #0 + adds r3, #0x2d + movs r5, #0 + ldrsb r5, [r3, r5] + adds r1, r0, r5 + ldr r0, [r2, #4] + asrs r0, r0, #8 + adds r3, r4, #0 + adds r3, #0x39 + movs r6, #0 + ldrsb r6, [r3, r6] + adds r3, r0, r6 + cmp r1, r3 + bgt _0806F6FE + adds r0, r7, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r3 + bge _0806F710 + cmp r1, r3 + blt _0806F716 +_0806F6FE: + adds r0, r4, #0 + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r3, r0 + cmp r0, r1 + blt _0806F716 +_0806F710: + adds r0, r2, #0 + bl Coll_DamagePlayer +_0806F716: + ldr r4, _0806F93C @ =0x000001C1 + add r4, sb + ldrb r0, [r4] + subs r0, #0x13 + movs r2, #0x3f + ands r0, r2 + lsls r0, r0, #1 + ldr r1, [sp, #0x18] + adds r0, r1, r0 + ldr r3, _0806F940 @ =gCamera + ldrh r0, [r0] + ldrh r1, [r3] + subs r0, r0, r1 + mov r5, sl + ldrh r1, [r5, #0x16] + subs r1, r1, r0 + strh r1, [r7, #0x16] + lsls r1, r1, #0x10 + asrs r1, r1, #0x11 + ldrb r0, [r4] + subs r0, #0x13 + ands r0, r2 + lsls r0, r0, #1 + ldr r5, [sp, #0x18] + adds r0, r5, r0 + ldrh r0, [r0] + subs r0, r0, r1 + ldrh r1, [r3] + lsls r0, r0, #0x10 + asrs r5, r0, #0x10 + subs r1, r5, r1 + strh r1, [r7, #0x16] + ldrb r0, [r4] + subs r0, #0x1e + ands r0, r2 + lsls r0, r0, #1 + movs r1, #0xa0 + lsls r1, r1, #1 + add r1, sb + adds r1, r1, r0 + ldrh r2, [r3, #2] + ldrh r0, [r1] + str r0, [sp, #8] + movs r3, #0 + ldrsh r0, [r1, r3] + subs r0, r0, r2 + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + ldr r1, [r7, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _0806F824 + adds r0, r7, #0 + adds r0, #0x2c + movs r6, #0 + ldrsb r6, [r0, r6] + adds r5, r5, r6 + ldr r2, _0806F944 @ =gPlayer + ldr r1, [r2] + asrs r1, r1, #8 + ldr r3, _0806F948 @ =gPlayerBodyPSI + adds r0, r3, #0 + adds r0, #0x38 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov ip, r0 + add r1, ip + adds r4, r3, #0 + cmp r5, r1 + bgt _0806F7C0 + adds r0, r7, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r5, r0 + cmp r0, r1 + bge _0806F7D4 + cmp r5, r1 + blt _0806F824 +_0806F7C0: + adds r0, r4, #0 + adds r0, #0x3a + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r3, ip + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r5 + blt _0806F824 +_0806F7D4: + ldr r5, [sp, #8] + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + adds r3, r7, #0 + adds r3, #0x2d + movs r5, #0 + ldrsb r5, [r3, r5] + adds r1, r0, r5 + ldr r0, [r2, #4] + asrs r0, r0, #8 + adds r3, r4, #0 + adds r3, #0x39 + movs r6, #0 + ldrsb r6, [r3, r6] + adds r3, r0, r6 + cmp r1, r3 + bgt _0806F80C + adds r0, r7, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r3 + bge _0806F81E + cmp r1, r3 + blt _0806F824 +_0806F80C: + adds r0, r4, #0 + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r3, r0 + cmp r0, r1 + blt _0806F824 +_0806F81E: + adds r0, r2, #0 + bl Coll_DamagePlayer +_0806F824: + ldr r4, _0806F93C @ =0x000001C1 + add r4, sb + ldrb r0, [r4] + subs r0, #0xe + movs r2, #0x3f + ands r0, r2 + lsls r0, r0, #1 + ldr r1, [sp, #0x18] + adds r0, r1, r0 + ldr r3, _0806F940 @ =gCamera + ldrh r0, [r0] + ldrh r1, [r3] + subs r0, r0, r1 + mov r5, sl + ldrh r1, [r5, #0x16] + subs r1, r1, r0 + mov r0, r8 + strh r1, [r0, #0x16] + lsls r1, r1, #0x10 + asrs r1, r1, #0x11 + ldrb r0, [r4] + subs r0, #0xe + ands r0, r2 + lsls r0, r0, #1 + ldr r5, [sp, #0x18] + adds r0, r5, r0 + ldrh r0, [r0] + subs r0, r0, r1 + ldrh r1, [r3] + lsls r0, r0, #0x10 + asrs r5, r0, #0x10 + subs r1, r5, r1 + mov r0, r8 + strh r1, [r0, #0x16] + ldrb r0, [r4] + subs r0, #0x14 + ands r0, r2 + lsls r0, r0, #1 + movs r1, #0xa0 + lsls r1, r1, #1 + add r1, sb + adds r1, r1, r0 + ldrh r2, [r3, #2] + ldrh r3, [r1] + str r3, [sp, #8] + movs r4, #0 + ldrsh r0, [r1, r4] + subs r0, r0, r2 + mov r1, r8 + strh r0, [r1, #0x18] + mov r0, r8 + bl UpdateSpriteAnimation + mov r0, r8 + bl DisplaySprite + mov r2, r8 + ldr r1, [r2, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _0806F954 + mov r0, r8 + adds r0, #0x2c + movs r6, #0 + ldrsb r6, [r0, r6] + adds r5, r5, r6 + ldr r2, _0806F944 @ =gPlayer + ldr r1, [r2] + asrs r1, r1, #8 + ldr r3, _0806F948 @ =gPlayerBodyPSI + adds r0, r3, #0 + adds r0, #0x38 + movs r7, #0 + ldrsb r7, [r0, r7] + adds r1, r1, r7 + adds r4, r3, #0 + cmp r5, r1 + bgt _0806F8D8 + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r5, r0 + cmp r0, r1 + bge _0806F8EA + cmp r5, r1 + blt _0806F954 +_0806F8D8: + adds r0, r4, #0 + adds r0, #0x3a + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + adds r0, r1, r0 + cmp r0, r5 + blt _0806F954 +_0806F8EA: + ldr r3, [sp, #8] + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + mov r3, r8 + adds r3, #0x2d + movs r5, #0 + ldrsb r5, [r3, r5] + adds r1, r0, r5 + ldr r0, [r2, #4] + asrs r0, r0, #8 + adds r3, r4, #0 + adds r3, #0x39 + movs r6, #0 + ldrsb r6, [r3, r6] + adds r3, r0, r6 + cmp r1, r3 + bgt _0806F922 + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r3 + bge _0806F94E + cmp r1, r3 + blt _0806F954 +_0806F922: + adds r0, r4, #0 + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r3, r0 + cmp r0, r1 + b _0806F94C + .align 2, 0 +_0806F934: .4byte 0x0000FF60 +_0806F938: .4byte 0xFFFFFBFF +_0806F93C: .4byte 0x000001C1 +_0806F940: .4byte gCamera +_0806F944: .4byte gPlayer +_0806F948: .4byte gPlayerBodyPSI +_0806F94C: + blt _0806F954 +_0806F94E: + adds r0, r2, #0 + bl Coll_DamagePlayer +_0806F954: + ldr r4, _0806FA74 @ =0x000001C1 + add r4, sb + ldrb r0, [r4] + subs r0, #7 + movs r2, #0x3f + ands r0, r2 + lsls r0, r0, #1 + ldr r5, [sp, #0x18] + adds r0, r5, r0 + ldr r3, _0806FA78 @ =gCamera + ldrh r0, [r0] + ldrh r1, [r3] + subs r0, r0, r1 + mov r5, sl + ldrh r1, [r5, #0x16] + subs r1, r1, r0 + mov r0, r8 + strh r1, [r0, #0x16] + lsls r1, r1, #0x10 + asrs r1, r1, #0x11 + ldrb r0, [r4] + subs r0, #7 + ands r0, r2 + lsls r0, r0, #1 + ldr r5, [sp, #0x18] + adds r0, r5, r0 + ldrh r0, [r0] + subs r0, r0, r1 + ldrh r1, [r3] + lsls r0, r0, #0x10 + asrs r5, r0, #0x10 + subs r1, r5, r1 + mov r0, r8 + strh r1, [r0, #0x16] + ldrb r0, [r4] + subs r0, #0xa + ands r0, r2 + lsls r0, r0, #1 + movs r1, #0xa0 + lsls r1, r1, #1 + add r1, sb + adds r1, r1, r0 + ldrh r2, [r3, #2] + ldrh r3, [r1] + str r3, [sp, #8] + movs r4, #0 + ldrsh r0, [r1, r4] + subs r0, r0, r2 + mov r1, r8 + strh r0, [r1, #0x18] + mov r0, r8 + bl DisplaySprite + mov r2, r8 + ldr r1, [r2, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _0806FA64 + mov r0, r8 + adds r0, #0x2c + movs r6, #0 + ldrsb r6, [r0, r6] + adds r5, r5, r6 + ldr r2, _0806FA7C @ =gPlayer + ldr r1, [r2] + asrs r1, r1, #8 + ldr r3, _0806FA80 @ =gPlayerBodyPSI + adds r0, r3, #0 + adds r0, #0x38 + movs r7, #0 + ldrsb r7, [r0, r7] + adds r1, r1, r7 + adds r4, r3, #0 + cmp r5, r1 + bgt _0806FA02 + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r5, r0 + cmp r0, r1 + bge _0806FA14 + cmp r5, r1 + blt _0806FA64 +_0806FA02: + adds r0, r4, #0 + adds r0, #0x3a + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + adds r0, r1, r0 + cmp r0, r5 + blt _0806FA64 +_0806FA14: + ldr r3, [sp, #8] + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + mov r3, r8 + adds r3, #0x2d + movs r5, #0 + ldrsb r5, [r3, r5] + adds r1, r0, r5 + ldr r0, [r2, #4] + asrs r0, r0, #8 + adds r3, r4, #0 + adds r3, #0x39 + movs r6, #0 + ldrsb r6, [r3, r6] + adds r3, r0, r6 + cmp r1, r3 + bgt _0806FA4C + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r3 + bge _0806FA5E + cmp r1, r3 + blt _0806FA64 +_0806FA4C: + adds r0, r4, #0 + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r3, r0 + cmp r0, r1 + blt _0806FA64 +_0806FA5E: + adds r0, r2, #0 + bl Coll_DamagePlayer +_0806FA64: + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0806FA74: .4byte 0x000001C1 +_0806FA78: .4byte gCamera +_0806FA7C: .4byte gPlayer +_0806FA80: .4byte gPlayerBodyPSI + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/Yukimaru__YukimaruGroundInit.inc b/sa1/asm/non_matching/game/enemies/Yukimaru__YukimaruGroundInit.inc new file mode 100644 index 0000000000..232f898a6a --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/Yukimaru__YukimaruGroundInit.inc @@ -0,0 +1,284 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + ldr r1, _08071AB0 @ =gCurTask + ldr r0, [r1] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r3, r0 + ldr r2, _08071AB4 @ =0x0300000C + adds r7, r3, r2 + ldr r4, _08071AB8 @ =0x03000048 + adds r4, r4, r3 + mov r8, r4 + ldr r0, [r5] + mov sb, r0 + ldrb r2, [r5, #8] + lsls r2, r2, #3 + ldrh r0, [r5, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + mov r4, sb + ldrb r1, [r4, #1] + lsls r1, r1, #3 + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r2, r2, #0x10 + asrs r6, r2, #0x10 + lsls r1, r1, #0x10 + ldr r0, _08071ABC @ =0x0300007A + adds r2, r3, r0 + ldr r4, _08071AC0 @ =0x03000078 + ldrh r0, [r4, r3] + ldrh r4, [r2] + adds r0, r0, r4 + strh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + adds r0, r6, r0 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + mov ip, r2 + ldr r4, _08071AC4 @ =0x0300007C + adds r3, r3, r4 + ldr r2, _08071AC8 @ =0xFFFA0000 + adds r1, r1, r2 + asrs r1, r1, #0x10 + ldrh r3, [r3] + adds r1, r1, r3 + lsls r1, r1, #0x10 + ldr r3, _08071ACC @ =gCamera + ldrh r4, [r3] + mov sl, r4 + lsrs r2, r0, #0x10 + str r2, [sp, #0xc] + asrs r0, r0, #0x10 + mov r4, sl + subs r2, r0, r4 + strh r2, [r7, #0x16] + lsrs r2, r1, #0x10 + mov sl, r2 + asrs r1, r1, #0x10 + ldrh r4, [r3, #2] + subs r2, r1, r4 + strh r2, [r7, #0x18] + ldrh r2, [r3] + subs r0, r0, r2 + mov r2, r8 + strh r0, [r2, #0x16] + ldrh r0, [r3, #2] + subs r1, r1, r0 + strh r1, [r2, #0x18] + movs r4, #0 + ldrsh r1, [r3, r4] + movs r2, #0xb8 + lsls r2, r2, #1 + adds r0, r1, r2 + ldr r4, _08071AB0 @ =gCurTask + cmp r6, r0 + bgt _08071A7E + adds r0, r1, #0 + subs r0, #0x80 + cmp r6, r0 + blt _08071A7E + movs r0, #2 + ldrsh r2, [r3, r0] + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r2, r1 + cmp ip, r0 + bgt _08071A7E + adds r0, r2, #0 + subs r0, #0x80 + cmp ip, r0 + bge _08071AD0 +_08071A7E: + ldrh r0, [r7, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08071AA2 + movs r2, #0x18 + ldrsh r0, [r7, r2] + adds r0, #0x80 + cmp r0, #0 + blt _08071AA2 + movs r3, #0x18 + ldrsh r1, [r7, r3] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08071AD0 +_08071AA2: + ldrb r0, [r5, #8] + mov r1, sb + strb r0, [r1] + ldr r0, [r4] + bl TaskDestroy + b _08071BDA + .align 2, 0 +_08071AB0: .4byte gCurTask +_08071AB4: .4byte 0x0300000C +_08071AB8: .4byte 0x03000048 +_08071ABC: .4byte 0x0300007A +_08071AC0: .4byte 0x03000078 +_08071AC4: .4byte 0x0300007C +_08071AC8: .4byte 0xFFFA0000 +_08071ACC: .4byte gCamera +_08071AD0: + ldr r2, [sp, #0xc] + lsls r0, r2, #0x10 + asrs r4, r0, #0x10 + mov r3, sl + lsls r0, r3, #0x10 + asrs r6, r0, #0x10 + adds r0, r7, #0 + adds r1, r4, #0 + adds r2, r6, #0 + bl Coll_Player_Enemy_Attack + cmp r0, #0 + beq _08071AF8 + ldr r0, _08071AF4 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08071BDA + .align 2, 0 +_08071AF4: .4byte gCurTask +_08071AF8: + add r0, sp, #8 + str r0, [sp] + ldr r0, _08071B3C @ =sa2__sub_801EE64 + str r0, [sp, #4] + adds r0, r6, #0 + adds r1, r4, #0 + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F07C + adds r2, r5, #0 + adds r2, #0x7c + ldrh r1, [r2] + adds r1, r1, r0 + movs r3, #0 + mov ip, r3 + strh r1, [r2] + adds r0, r5, #0 + adds r0, #0x7a + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r2, r0, #0x18 + mov r0, sb + movs r1, #3 + ldrsb r1, [r0, r1] + lsls r0, r1, #3 + cmp r2, r0 + bgt _08071B40 + adds r1, r5, #0 + adds r1, #0x78 + movs r0, #0xa0 + strh r0, [r1] + b _08071BAC + .align 2, 0 +_08071B3C: .4byte sa2__sub_801EE64 +_08071B40: + mov r3, sb + ldrb r0, [r3, #5] + adds r0, r1, r0 + lsls r0, r0, #3 + cmp r2, r0 + blt _08071B5C + adds r1, r5, #0 + adds r1, #0x78 + ldr r0, _08071B58 @ =0x0000FF60 + strh r0, [r1] + b _08071BAC + .align 2, 0 +_08071B58: .4byte 0x0000FF60 +_08071B5C: + adds r2, r5, #0 + adds r2, #0x80 + ldrh r0, [r2] + movs r1, #0 + ldrsh r3, [r2, r1] + cmp r3, #0 + beq _08071B70 + subs r0, #1 + strh r0, [r2] + b _08071BAC +_08071B70: + ldr r1, _08071BEC @ =gPlayer + ldr r0, [r1, #4] + asrs r0, r0, #8 + cmp r0, r6 + bgt _08071BAC + ldr r0, [r1] + asrs r1, r0, #8 + adds r0, r4, #0 + adds r0, #8 + cmp r1, r0 + bgt _08071BAC + subs r0, #0x10 + cmp r0, r1 + bgt _08071BAC + movs r0, #0x3c + strh r0, [r2] + adds r0, r5, #0 + adds r0, #0x7e + strh r3, [r0] + adds r0, r7, #0 + adds r0, #0x20 + mov r2, ip + strb r2, [r0] + mov r0, r8 + adds r0, #0x20 + strb r2, [r0] + ldr r0, _08071BF0 @ =gCurTask + ldr r1, [r0] + ldr r0, _08071BF4 @ =Task_8071BFC + str r0, [r1, #8] +_08071BAC: + adds r0, r7, #0 + bl UpdateSpriteAnimation + mov r0, r8 + bl UpdateSpriteAnimation + adds r0, r7, #0 + bl DisplaySprite + mov r3, r8 + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r3, #0x10] + mov r0, r8 + bl DisplaySprite + mov r4, r8 + ldr r0, [r4, #0x10] + ldr r1, _08071BF8 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r4, #0x10] +_08071BDA: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08071BEC: .4byte gPlayer +_08071BF0: .4byte gCurTask +_08071BF4: .4byte Task_8071BFC +_08071BF8: .4byte 0xFFFFFBFF + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_1__Task_80264C8.inc b/sa1/asm/non_matching/game/enemies/boss_1__Task_80264C8.inc new file mode 100644 index 0000000000..08856069fd --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_1__Task_80264C8.inc @@ -0,0 +1,913 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + movs r0, #0 + str r0, [sp, #8] + movs r1, #0 + str r1, [sp, #0xc] + ldr r0, _08026518 @ =gCurTask + ldr r0, [r0] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r3 + mov r8, r0 + ldr r2, _0802651C @ =0x0300000C + adds r7, r3, r2 + ldr r4, _08026520 @ =0x03000044 + adds r4, r3, r4 + str r4, [sp, #4] + ldr r5, [r0] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08026528 + ldr r6, _08026524 @ =0x0300009A + adds r0, r3, r6 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + subs r0, #2 + adds r2, #0x8a + adds r1, r3, r2 + strh r0, [r1] + b _08026544 + .align 2, 0 +_08026518: .4byte gCurTask +_0802651C: .4byte 0x0300000C +_08026520: .4byte 0x03000044 +_08026524: .4byte 0x0300009A +_08026528: + ldr r4, _08026588 @ =0x0300009A + adds r0, r3, r4 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, #3 + lsls r0, r0, #1 + movs r6, #4 + rsbs r6, r6, #0 + adds r1, r6, #0 + subs r1, r1, r0 + ldr r2, _0802658C @ =0x03000096 + adds r0, r3, r2 + strh r1, [r0] +_08026544: + mov r1, r8 + adds r1, #0x94 + mov r0, r8 + adds r0, #0x96 + ldrh r0, [r0] + ldrh r3, [r1] + adds r2, r0, r3 + strh r2, [r1] + lsls r0, r2, #0x10 + asrs r3, r0, #0x10 + ldr r0, _08026590 @ =0xFFFFFD00 + str r1, [sp, #0x10] + cmp r3, r0 + bge _08026598 + movs r4, #0x80 + lsls r4, r4, #3 + adds r0, r2, r4 + strh r0, [r1] + mov r2, r8 + adds r2, #0x8c + ldr r0, _08026594 @ =gSineTable + movs r6, #0x9c + lsls r6, r6, #2 + adds r0, r0, r6 + movs r1, #0 + ldrsh r0, [r0, r1] + lsls r1, r0, #1 + adds r1, r1, r0 + ldr r0, [r2] + subs r0, r0, r1 + str r0, [r2] + mov sb, r2 + b _080265C4 + .align 2, 0 +_08026588: .4byte 0x0300009A +_0802658C: .4byte 0x03000096 +_08026590: .4byte 0xFFFFFD00 +_08026594: .4byte gSineTable +_08026598: + movs r0, #0x80 + lsls r0, r0, #1 + movs r4, #0x8c + add r4, r8 + mov sb, r4 + cmp r3, r0 + ble _080265C4 + ldr r6, _08026634 @ =0xFFFFFC00 + adds r0, r2, r6 + ldr r1, [sp, #0x10] + strh r0, [r1] + ldr r0, _08026638 @ =gSineTable + movs r2, #0x9c + lsls r2, r2, #2 + adds r0, r0, r2 + movs r3, #0 + ldrsh r0, [r0, r3] + lsls r1, r0, #1 + adds r1, r1, r0 + ldr r0, [r4] + adds r0, r0, r1 + str r0, [r4] +_080265C4: + ldr r4, [sp, #0x10] + movs r6, #0 + ldrsh r1, [r4, r6] + ldr r0, _0802663C @ =0xFFFFFDC8 + cmp r1, r0 + bgt _08026644 + mov r1, r8 + adds r1, #0x9c + ldrb r0, [r1] + cmp r0, #0 + bne _080265FA + movs r0, #1 + strb r0, [r1] + movs r0, #0x91 + bl m4aSongNumStart + movs r0, #0x80 + lsls r0, r0, #4 + movs r2, #0x80 + lsls r2, r2, #1 + movs r3, #1 + rsbs r3, r3, #0 + movs r1, #0x80 + str r1, [sp] + movs r1, #0x40 + bl CreateScreenShake +_080265FA: + ldr r1, [sp, #0x10] + ldrh r0, [r1] + movs r2, #0x80 + lsls r2, r2, #2 + adds r1, r2, #0 + subs r1, r1, r0 + ldr r3, _08026640 @ =0x000003FF + adds r4, r3, #0 + ldr r3, _08026638 @ =gSineTable + movs r6, #0x9c + lsls r6, r6, #2 + adds r0, r3, r6 + movs r6, #0 + ldrsh r2, [r0, r6] + ands r1, r4 + movs r4, #0x80 + lsls r4, r4, #1 + adds r0, r1, r4 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r6, #0 + ldrsh r0, [r0, r6] + subs r2, r2, r0 + lsls r0, r2, #1 + adds r0, r0, r2 + asrs r0, r0, #9 + rsbs r0, r0, #0 + b _0802669C + .align 2, 0 +_08026634: .4byte 0xFFFFFC00 +_08026638: .4byte gSineTable +_0802663C: .4byte 0xFFFFFDC8 +_08026640: .4byte 0x000003FF +_08026644: + cmp r1, #0x37 + ble _080266C4 + mov r1, r8 + adds r1, #0x9c + ldrb r0, [r1] + cmp r0, #0 + bne _08026672 + movs r0, #1 + strb r0, [r1] + movs r0, #0x91 + bl m4aSongNumStart + movs r0, #0x80 + lsls r0, r0, #4 + movs r2, #0x80 + lsls r2, r2, #1 + movs r3, #1 + rsbs r3, r3, #0 + movs r1, #0x80 + str r1, [sp] + movs r1, #0x40 + bl CreateScreenShake +_08026672: + ldr r3, [sp, #0x10] + ldrh r4, [r3] + ldr r1, _080266BC @ =0x000003FF + ldr r3, _080266C0 @ =gSineTable + movs r6, #0x9c + lsls r6, r6, #2 + adds r0, r3, r6 + movs r6, #0 + ldrsh r2, [r0, r6] + ands r1, r4 + movs r4, #0x80 + lsls r4, r4, #1 + adds r0, r1, r4 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r6, #0 + ldrsh r0, [r0, r6] + subs r2, r2, r0 + lsls r0, r2, #1 + adds r0, r0, r2 + asrs r0, r0, #9 +_0802669C: + str r0, [sp, #8] + lsls r1, r1, #1 + adds r1, r1, r3 + movs r0, #0 + ldrsh r1, [r1, r0] + adds r3, #0x70 + movs r2, #0 + ldrsh r0, [r3, r2] + subs r1, r1, r0 + lsls r0, r1, #1 + adds r0, r0, r1 + asrs r0, r0, #9 + rsbs r0, r0, #0 + str r0, [sp, #0xc] + b _080266F6 + .align 2, 0 +_080266BC: .4byte 0x000003FF +_080266C0: .4byte gSineTable +_080266C4: + mov r1, r8 + adds r1, #0x9c + ldrb r0, [r1] + cmp r0, #1 + bne _080266D2 + movs r0, #0 + strb r0, [r1] +_080266D2: + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _080266EC + mov r3, sb + ldr r0, [r3] + movs r4, #0x80 + lsls r4, r4, #1 + adds r0, r0, r4 + str r0, [r3] + b _080266F6 +_080266EC: + mov r6, sb + ldr r0, [r6] + ldr r1, _08026790 @ =0xFFFFFF00 + adds r0, r0, r1 + str r0, [r6] +_080266F6: + mov r2, r8 + ldrb r1, [r2, #8] + lsls r1, r1, #3 + ldrh r0, [r2, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + mov r3, sb + ldr r0, [r3] + asrs r0, r0, #8 + adds r1, r1, r0 + ldr r4, [sp, #8] + adds r1, r1, r4 + lsls r1, r1, #0x10 + lsrs r6, r1, #0x10 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + ldrh r1, [r2, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + ldr r5, [sp, #0xc] + adds r0, r0, r5 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, [r7, #0x10] + ldr r1, _08026794 @ =0xFFFFFE7F + ands r0, r1 + str r0, [r7, #0x10] + ldr r3, _08026798 @ =gPlayer + ldr r4, [r3, #0x10] + movs r0, #0x80 + ands r4, r0 + cmp r4, #0 + bne _0802674C + ldr r2, _0802679C @ =gDispCnt + ldrh r1, [r2] + ldr r0, _080267A0 @ =0x00007FFF + ands r0, r1 + strh r0, [r2] + ldr r0, _080267A4 @ =gWinRegs + strh r4, [r0, #0xa] + ldr r0, _080267A8 @ =gBldRegs + strh r4, [r0] + strh r4, [r0, #4] +_0802674C: + mov r0, r8 + adds r0, #0x9b + movs r1, #0 + ldrsb r1, [r0, r1] + mov sl, r0 + lsls r6, r6, #0x10 + str r6, [sp, #0x14] + lsls r5, r5, #0x10 + str r5, [sp, #0x18] + cmp r1, #0 + beq _08026764 + b _08026A78 +_08026764: + asrs r4, r6, #0x10 + asrs r5, r5, #0x10 + adds r0, r7, #0 + adds r1, r4, #0 + adds r2, r5, #0 + bl Coll_Player_Boss_1 + adds r6, r0, #0 + ldr r0, _080267AC @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _080267B4 + ldr r3, _080267B0 @ =gPartner + adds r0, r7, #0 + adds r1, r4, #0 + adds r2, r5, #0 + bl Coll_Player_Boss_1 + b _080267B6 + .align 2, 0 +_08026790: .4byte 0xFFFFFF00 +_08026794: .4byte 0xFFFFFE7F +_08026798: .4byte gPlayer +_0802679C: .4byte gDispCnt +_080267A0: .4byte 0x00007FFF +_080267A4: .4byte gWinRegs +_080267A8: .4byte gBldRegs +_080267AC: .4byte gNumSingleplayerCharacters +_080267B0: .4byte gPartner +_080267B4: + movs r0, #0 +_080267B6: + cmp r6, #1 + beq _080267C0 + cmp r0, #1 + beq _080267C0 + b _08026A78 +_080267C0: + mov r1, r8 + adds r1, #0x9a + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + movs r0, #0x20 + mov r6, sl + strb r0, [r6] + ldr r1, [sp, #4] + adds r1, #0x20 + movs r0, #2 + strb r0, [r1] + mov r1, r8 + adds r1, #0x9e + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r1] + ldr r1, _080268BC @ =gLevelScore + ldr r6, [r1] + movs r2, #0xfa + lsls r2, r2, #2 + adds r0, r6, r2 + str r0, [r1] + ldr r4, _080268C0 @ =0x0000C350 + adds r1, r4, #0 + bl Div + adds r5, r0, #0 + adds r0, r6, #0 + adds r1, r4, #0 + bl Div + cmp r5, r0 + beq _08026814 + ldr r0, _080268C4 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08026814 + ldr r1, _080268C8 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] +_08026814: + movs r0, #0x90 + bl m4aSongNumStart + movs r1, #0 + ldr r3, [sp, #8] + lsls r4, r3, #8 + mov r6, r8 + adds r6, #0x90 + ldr r0, [sp, #0xc] + lsls r5, r0, #8 + movs r2, #0x98 + add r2, r8 + mov sl, r2 + movs r3, #0x20 + adds r3, r3, r7 + mov ip, r3 + mov r2, r8 + adds r2, #0x78 + ldr r3, _080268CC @ =Task_80271E4 +_0802683A: + lsls r0, r1, #2 + adds r0, r2, r0 + ldr r0, [r0] + str r3, [r0, #8] + adds r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + cmp r1, #4 + bls _0802683A + mov r0, r8 + ldr r1, [r0, #0x74] + ldr r0, _080268D0 @ =Task_8027600 + str r0, [r1, #8] + mov r1, sb + ldr r0, [r1] + adds r0, r0, r4 + str r0, [r1] + str r5, [r6] + movs r1, #0 + movs r4, #0 + mov r2, sl + strh r4, [r2] + movs r0, #0x99 + lsls r0, r0, #2 + strh r0, [r7, #0xa] + mov r3, ip + strb r1, [r3] + ldr r5, [sp, #0x14] + asrs r0, r5, #0x10 + ldr r6, [sp, #0x18] + asrs r1, r6, #0x10 + ldr r3, _080268D4 @ =0x00000265 + str r4, [sp] + movs r2, #0x10 + bl sub_80168F0 + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r3, r2, r0 + adds r0, #0x46 + adds r1, r2, r0 + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r1] + ldr r1, _080268D8 @ =0x03000048 + adds r0, r2, r1 + strh r4, [r0] + ldr r5, _080268DC @ =0x03000042 + adds r0, r2, r5 + strh r4, [r0] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _080268E4 + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r3, #0x32] + ldr r6, _080268E0 @ =0x03000044 + adds r0, r2, r6 + strh r1, [r0] + b _080268EE + .align 2, 0 +_080268BC: .4byte gLevelScore +_080268C0: .4byte 0x0000C350 +_080268C4: .4byte gGameMode +_080268C8: .4byte gNumLives +_080268CC: .4byte Task_80271E4 +_080268D0: .4byte Task_8027600 +_080268D4: .4byte 0x00000265 +_080268D8: .4byte 0x03000048 +_080268DC: .4byte 0x03000042 +_080268E0: .4byte 0x03000044 +_080268E4: + ldr r0, _08026944 @ =0x03000044 + adds r1, r2, r0 + movs r0, #0xfc + lsls r0, r0, #8 + strh r0, [r1] +_080268EE: + adds r1, r3, #0 + adds r1, #0x40 + movs r4, #0 + movs r0, #0x3c + strh r0, [r1] + ldr r1, [sp, #0x14] + asrs r0, r1, #0x10 + ldr r2, [sp, #0x18] + asrs r1, r2, #0x10 + ldr r3, _08026948 @ =0x00000266 + str r4, [sp] + movs r2, #0x10 + bl sub_80168F0 + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r3, r2, r0 + ldr r5, _0802694C @ =0x03000046 + adds r1, r2, r5 + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r1] + ldr r6, _08026950 @ =0x03000048 + adds r0, r2, r6 + strh r4, [r0] + ldr r1, _08026954 @ =0x03000042 + adds r0, r2, r1 + strh r4, [r0] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08026958 + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r3, #0x32] + ldr r4, _08026944 @ =0x03000044 + adds r0, r2, r4 + strh r1, [r0] + b _08026962 + .align 2, 0 +_08026944: .4byte 0x03000044 +_08026948: .4byte 0x00000266 +_0802694C: .4byte 0x03000046 +_08026950: .4byte 0x03000048 +_08026954: .4byte 0x03000042 +_08026958: + ldr r5, _080269BC @ =0x03000044 + adds r1, r2, r5 + movs r0, #0xfc + lsls r0, r0, #8 + strh r0, [r1] +_08026962: + adds r1, r3, #0 + adds r1, #0x40 + movs r4, #0 + movs r0, #0x3c + strh r0, [r1] + ldr r6, [sp, #0x14] + asrs r0, r6, #0x10 + ldr r2, [sp, #0x18] + asrs r1, r2, #0x10 + ldr r3, _080269C0 @ =0x00000267 + str r4, [sp] + movs r2, #0x10 + bl sub_80168F0 + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r3, r2, r0 + ldr r5, _080269C4 @ =0x03000046 + adds r1, r2, r5 + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r1] + ldr r6, _080269C8 @ =0x03000048 + adds r0, r2, r6 + strh r4, [r0] + ldr r1, _080269CC @ =0x03000042 + adds r0, r2, r1 + strh r4, [r0] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _080269D0 + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r3, #0x32] + ldr r4, _080269BC @ =0x03000044 + adds r1, r2, r4 + movs r0, #0xfc + lsls r0, r0, #8 + strh r0, [r1] + b _080269D6 + .align 2, 0 +_080269BC: .4byte 0x03000044 +_080269C0: .4byte 0x00000267 +_080269C4: .4byte 0x03000046 +_080269C8: .4byte 0x03000048 +_080269CC: .4byte 0x03000042 +_080269D0: + ldr r5, _08026A30 @ =0x03000044 + adds r0, r2, r5 + strh r1, [r0] +_080269D6: + adds r1, r3, #0 + adds r1, #0x40 + movs r4, #0 + movs r0, #0x3c + strh r0, [r1] + ldr r6, [sp, #0x14] + asrs r0, r6, #0x10 + ldr r2, [sp, #0x18] + asrs r1, r2, #0x10 + movs r3, #0x9a + lsls r3, r3, #2 + str r4, [sp] + movs r2, #0x10 + bl sub_80168F0 + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r3, r2, r0 + ldr r5, _08026A34 @ =0x03000046 + adds r1, r2, r5 + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r1] + ldr r6, _08026A38 @ =0x03000048 + adds r0, r2, r6 + strh r4, [r0] + ldr r1, _08026A3C @ =0x03000042 + adds r0, r2, r1 + strh r4, [r0] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08026A40 + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r3, #0x32] + ldr r4, _08026A30 @ =0x03000044 + adds r1, r2, r4 + movs r0, #0xfc + lsls r0, r0, #8 + strh r0, [r1] + b _08026A46 + .align 2, 0 +_08026A30: .4byte 0x03000044 +_08026A34: .4byte 0x03000046 +_08026A38: .4byte 0x03000048 +_08026A3C: .4byte 0x03000042 +_08026A40: + ldr r5, _08026A68 @ =0x03000044 + adds r0, r2, r5 + strh r1, [r0] +_08026A46: + adds r1, r3, #0 + adds r1, #0x40 + movs r0, #0x3c + strh r0, [r1] + ldr r1, _08026A6C @ =gCamera + ldrh r0, [r1] + strh r0, [r1, #0x18] + adds r0, #0xf0 + strh r0, [r1, #0x1a] + ldr r0, _08026A70 @ =gCurTask + ldr r1, [r0] + ldr r0, _08026A74 @ =Task_8026C44 + str r0, [r1, #8] + bl _call_via_r0 + b _08026C12 + .align 2, 0 +_08026A68: .4byte 0x03000044 +_08026A6C: .4byte gCamera +_08026A70: .4byte gCurTask +_08026A74: .4byte Task_8026C44 +_08026A78: + ldr r4, _08026AB8 @ =gCamera + ldrh r1, [r4] + ldr r6, [sp, #0x14] + asrs r3, r6, #0x10 + subs r1, r3, r1 + strh r1, [r7, #0x16] + ldrh r2, [r4, #2] + ldr r5, [sp, #0x18] + asrs r0, r5, #0x10 + subs r0, r0, r2 + strh r0, [r7, #0x18] + ldr r6, [sp, #4] + strh r1, [r6, #0x16] + ldrh r0, [r7, #0x18] + strh r0, [r6, #0x18] + ldr r0, [sp, #0xc] + cmp r0, #0 + bne _08026AD6 + movs r1, #0x18 + ldrsh r0, [r4, r1] + subs r0, #0x40 + cmp r3, r0 + bge _08026ABC + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r7, #0x10] + ldr r0, [r6, #0x10] + orrs r0, r1 + str r0, [r6, #0x10] + b _08026AD6 + .align 2, 0 +_08026AB8: .4byte gCamera +_08026ABC: + movs r2, #0x1a + ldrsh r0, [r4, r2] + adds r0, #0x40 + cmp r3, r0 + ble _08026AD6 + ldr r0, [r7, #0x10] + ldr r1, _08026B48 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r7, #0x10] + ldr r3, [sp, #4] + ldr r0, [r3, #0x10] + ands r0, r1 + str r0, [r3, #0x10] +_08026AD6: + adds r0, r7, #0 + bl UpdateSpriteAnimation + ldr r0, [sp, #4] + bl UpdateSpriteAnimation + adds r0, r7, #0 + adds r0, #0x20 + ldrb r0, [r0] + cmp r0, #2 + bne _08026AF4 + ldr r4, [sp, #4] + ldrh r0, [r4, #0x18] + subs r0, #1 + strh r0, [r4, #0x18] +_08026AF4: + mov r5, sl + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #0 + beq _08026B76 + subs r1, #1 + strb r1, [r5] + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x10 + ble _08026B60 + movs r0, #2 + ands r1, r0 + cmp r1, #0 + bne _08026B68 + ldr r0, _08026B4C @ =gPlayer + ldr r0, [r0, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08026B68 + ldr r0, [r7, #0x10] + adds r1, #0x80 + orrs r0, r1 + str r0, [r7, #0x10] + ldr r2, _08026B50 @ =gDispCnt + ldrh r0, [r2] + movs r6, #0x80 + lsls r6, r6, #8 + adds r1, r6, #0 + orrs r0, r1 + strh r0, [r2] + ldr r1, _08026B54 @ =gWinRegs + ldr r0, _08026B58 @ =0x00003F1F + strh r0, [r1, #0xa] + ldr r1, _08026B5C @ =gBldRegs + movs r0, #0xbf + strh r0, [r1] + movs r0, #0x10 + strh r0, [r1, #4] + b _08026B68 + .align 2, 0 +_08026B48: .4byte 0xFFFFFBFF +_08026B4C: .4byte gPlayer +_08026B50: .4byte gDispCnt +_08026B54: .4byte gWinRegs +_08026B58: .4byte 0x00003F1F +_08026B5C: .4byte gBldRegs +_08026B60: + movs r0, #2 + ands r1, r0 + cmp r1, #0 + beq _08026B82 +_08026B68: + adds r0, r7, #0 + bl DisplaySprite + ldr r0, [sp, #4] + bl DisplaySprite + b _08026B82 +_08026B76: + adds r0, r7, #0 + bl DisplaySprite + ldr r0, [sp, #4] + bl DisplaySprite +_08026B82: + ldr r3, [r7, #0x10] + movs r0, #0x80 + lsls r0, r0, #3 + ands r3, r0 + cmp r3, #0 + beq _08026BE0 + ldr r2, _08026BC0 @ =sa2__gUnknown_03001944 + ldr r0, [sp, #0x10] + ldrh r1, [r0] + ldr r0, _08026BC4 @ =0x000003FF + ands r0, r1 + strh r0, [r2] + ldr r0, _08026BC8 @ =sa2__gUnknown_030017F0 + movs r2, #0x80 + lsls r2, r2, #1 + adds r1, r2, #0 + strh r1, [r0] + ldr r0, _08026BCC @ =sa2__gUnknown_03005394 + strh r1, [r0] + ldr r0, _08026BD0 @ =sa2__gUnknown_03002A8C + movs r1, #0 + strh r1, [r0] + ldr r0, _08026BD4 @ =sa2__gUnknown_03004D58 + strh r1, [r0] + ldr r1, _08026BD8 @ =sa2__gUnknown_0300194C + mov r3, r8 + ldrh r0, [r3, #0x22] + strh r0, [r1] + ldr r1, _08026BDC @ =sa2__gUnknown_03002820 + ldrh r0, [r3, #0x24] + b _08026C0E + .align 2, 0 +_08026BC0: .4byte sa2__gUnknown_03001944 +_08026BC4: .4byte 0x000003FF +_08026BC8: .4byte sa2__gUnknown_030017F0 +_08026BCC: .4byte sa2__gUnknown_03005394 +_08026BD0: .4byte sa2__gUnknown_03002A8C +_08026BD4: .4byte sa2__gUnknown_03004D58 +_08026BD8: .4byte sa2__gUnknown_0300194C +_08026BDC: .4byte sa2__gUnknown_03002820 +_08026BE0: + ldr r2, _08026C24 @ =sa2__gUnknown_03001944 + ldr r4, [sp, #0x10] + ldrh r1, [r4] + ldr r0, _08026C28 @ =0x000003FF + ands r0, r1 + strh r0, [r2] + ldr r0, _08026C2C @ =sa2__gUnknown_030017F0 + movs r5, #0x80 + lsls r5, r5, #1 + adds r1, r5, #0 + strh r1, [r0] + ldr r0, _08026C30 @ =sa2__gUnknown_03005394 + strh r1, [r0] + ldr r0, _08026C34 @ =sa2__gUnknown_03002A8C + strh r3, [r0] + ldr r0, _08026C38 @ =sa2__gUnknown_03004D58 + strh r3, [r0] + ldr r1, _08026C3C @ =sa2__gUnknown_0300194C + mov r6, r8 + ldrh r0, [r6, #0x22] + strh r0, [r1] + ldr r1, _08026C40 @ =sa2__gUnknown_03002820 + ldrh r0, [r6, #0x24] +_08026C0E: + subs r0, #0x24 + strh r0, [r1] +_08026C12: + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08026C24: .4byte sa2__gUnknown_03001944 +_08026C28: .4byte 0x000003FF +_08026C2C: .4byte sa2__gUnknown_030017F0 +_08026C30: .4byte sa2__gUnknown_03005394 +_08026C34: .4byte sa2__gUnknown_03002A8C +_08026C38: .4byte sa2__gUnknown_03004D58 +_08026C3C: .4byte sa2__gUnknown_0300194C +_08026C40: .4byte sa2__gUnknown_03002820 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_1__Task_80271E4.inc b/sa1/asm/non_matching/game/enemies/boss_1__Task_80271E4.inc new file mode 100644 index 0000000000..80cf3efb9b --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_1__Task_80271E4.inc @@ -0,0 +1,116 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r0, _08027268 @ =gCurTask + mov r8, r0 + ldr r0, [r0] + ldrh r7, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r7, r0 + adds r5, r6, #0 + ldr r2, _0802726C @ =0x03000030 + adds r1, r7, r2 + movs r0, #0 + strh r0, [r1] + ldr r3, _08027270 @ =0x03000050 + adds r3, r3, r7 + mov ip, r3 + ldrb r4, [r3] + ldr r2, _08027274 @ =gSineTable + ldr r0, _08027278 @ =sa2__gUnknown_03001944 + ldrh r1, [r0] + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r2 + movs r3, #0 + ldrsh r0, [r0, r3] + lsls r0, r0, #4 + adds r3, r4, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + adds r1, r1, r2 + movs r2, #0 + ldrsh r0, [r1, r2] + lsls r0, r0, #4 + adds r2, r4, #0 + muls r2, r0, r2 + ldr r1, _0802727C @ =sa2__gUnknown_0300194C + ldr r4, _08027280 @ =gCamera + ldrh r0, [r4] + ldrh r1, [r1] + adds r0, r0, r1 + asrs r3, r3, #0xe + adds r3, r3, r0 + ldr r1, _08027284 @ =sa2__gUnknown_03002820 + ldrh r0, [r4, #2] + ldrh r1, [r1] + adds r0, r0, r1 + asrs r2, r2, #0xe + adds r2, r2, r0 + strh r3, [r6, #0x3c] + strh r2, [r6, #0x3e] + mov r3, ip + ldrb r1, [r3] + movs r0, #1 + ands r0, r1 + mov r3, r8 + cmp r0, #0 + beq _0802728C + ldr r0, _08027288 @ =0x0300004C + adds r1, r7, r0 + movs r0, #0x80 + lsls r0, r0, #2 + b _08027294 + .align 2, 0 +_08027268: .4byte gCurTask +_0802726C: .4byte 0x03000030 +_08027270: .4byte 0x03000050 +_08027274: .4byte gSineTable +_08027278: .4byte sa2__gUnknown_03001944 +_0802727C: .4byte sa2__gUnknown_0300194C +_08027280: .4byte gCamera +_08027284: .4byte sa2__gUnknown_03002820 +_08027288: .4byte 0x0300004C +_0802728C: + ldr r2, _080272C8 @ =0x0300004C + adds r1, r7, r2 + movs r0, #0xfe + lsls r0, r0, #8 +_08027294: + strh r0, [r1] + adds r2, r5, #0 + adds r2, #0x4e + movs r1, #0 + movs r0, #0xfa + lsls r0, r0, #8 + strh r0, [r2] + str r1, [r5, #0x44] + str r1, [r5, #0x48] + adds r0, r5, #0 + adds r0, #0x40 + strh r1, [r0] + ldr r0, [r6, #0x10] + subs r1, #0x21 + ands r0, r1 + str r0, [r6, #0x10] + ldr r1, [r3] + ldr r0, _080272CC @ =Task_80272D0 + str r0, [r1, #8] + bl _call_via_r0 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080272C8: .4byte 0x0300004C +_080272CC: .4byte Task_80272D0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_1__Task_8027600.inc b/sa1/asm/non_matching/game/enemies/boss_1__Task_8027600.inc new file mode 100644 index 0000000000..2c374d8fc7 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_1__Task_8027600.inc @@ -0,0 +1,139 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, lr} + ldr r3, _08027640 @ =gCurTask + ldr r2, [r3] + ldrh r0, [r2, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r4, r0, r1 + mov ip, r4 + ldr r5, _08027644 @ =0x03000030 + adds r4, r0, r5 + ldrh r0, [r2] + adds r0, r0, r1 + ldrh r0, [r0, #6] + movs r1, #0 + strh r1, [r4] + ldr r1, _08027648 @ =0x03000094 + adds r0, r0, r1 + ldrh r1, [r0] + movs r2, #0 + ldrsh r0, [r0, r2] + adds r5, r3, #0 + cmp r0, #0 + bge _08027650 + ldr r3, _0802764C @ =0xFFFFFE00 + adds r0, r3, #0 + subs r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + cmp r0, #0 + ble _08027658 + strh r1, [r4] + b _08027658 + .align 2, 0 +_08027640: .4byte gCurTask +_08027644: .4byte 0x03000030 +_08027648: .4byte 0x03000094 +_0802764C: .4byte 0xFFFFFE00 +_08027650: + cmp r0, #0 + ble _08027658 + rsbs r0, r1, #0 + strh r0, [r4] +_08027658: + ldr r1, _080276C0 @ =sa2__gUnknown_03001944 + ldrh r0, [r1] + ldrh r2, [r4] + adds r0, r0, r2 + strh r0, [r4] + ldr r3, _080276C4 @ =gSineTable + ldrh r2, [r1] + movs r4, #0x80 + lsls r4, r4, #1 + adds r0, r2, r4 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r1, #0 + ldrsh r0, [r0, r1] + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r2, r2, #1 + adds r2, r2, r3 + movs r3, #0 + ldrsh r0, [r2, r3] + lsls r2, r0, #1 + adds r2, r2, r0 + ldr r3, _080276C8 @ =sa2__gUnknown_0300194C + ldr r4, _080276CC @ =gCamera + ldrh r0, [r4] + ldrh r3, [r3] + adds r0, r0, r3 + asrs r1, r1, #9 + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + ldr r3, _080276D0 @ =sa2__gUnknown_03002820 + ldrh r0, [r4, #2] + ldrh r3, [r3] + adds r0, r0, r3 + asrs r2, r2, #9 + adds r2, r2, r0 + mov r0, ip + strh r1, [r0, #0x3c] + strh r2, [r0, #0x3e] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + movs r2, #0 + ldrsh r0, [r4, r2] + adds r0, #0x78 + cmp r1, r0 + bge _080276D4 + mov r1, ip + adds r1, #0x4c + movs r0, #0x80 + lsls r0, r0, #2 + b _080276DC + .align 2, 0 +_080276C0: .4byte sa2__gUnknown_03001944 +_080276C4: .4byte gSineTable +_080276C8: .4byte sa2__gUnknown_0300194C +_080276CC: .4byte gCamera +_080276D0: .4byte sa2__gUnknown_03002820 +_080276D4: + mov r1, ip + adds r1, #0x4c + movs r0, #0xfe + lsls r0, r0, #8 +_080276DC: + strh r0, [r1] + mov r2, ip + adds r2, #0x4e + movs r1, #0 + movs r0, #0xfa + lsls r0, r0, #8 + strh r0, [r2] + mov r3, ip + str r1, [r3, #0x44] + str r1, [r3, #0x48] + mov r0, ip + adds r0, #0x40 + strh r1, [r0] + mov r1, ip + adds r1, #0x42 + movs r0, #0x2a + strh r0, [r1] + ldr r1, [r5] + ldr r0, _08027710 @ =Task_8027714 + str r0, [r1, #8] + bl _call_via_r0 + pop {r4, r5} + pop {r0} + bx r0 + .align 2, 0 +_08027710: .4byte Task_8027714 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_1__Task_EHTHammer.inc b/sa1/asm/non_matching/game/enemies/boss_1__Task_EHTHammer.inc new file mode 100644 index 0000000000..c1a2b93f25 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_1__Task_EHTHammer.inc @@ -0,0 +1,163 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r0, _080274F4 @ =gCurTask + ldr r2, [r0] + ldrh r0, [r2, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r7, r0, r1 + ldr r4, _080274F8 @ =0x03000030 + adds r3, r0, r4 + ldrh r0, [r2] + adds r0, r0, r1 + ldrh r0, [r0, #6] + adds r5, r0, r1 + adds r1, #0x44 + adds r1, r1, r0 + mov r8, r1 + movs r1, #0 + strh r1, [r3] + ldr r2, _080274FC @ =0x03000094 + adds r0, r0, r2 + ldrh r1, [r0] + movs r4, #0 + ldrsh r0, [r0, r4] + cmp r0, #0 + bge _08027504 + ldr r2, _08027500 @ =0xFFFFFE00 + adds r0, r2, #0 + subs r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + cmp r0, #0 + ble _0802750C + strh r1, [r3] + b _0802750C + .align 2, 0 +_080274F4: .4byte gCurTask +_080274F8: .4byte 0x03000030 +_080274FC: .4byte 0x03000094 +_08027500: .4byte 0xFFFFFE00 +_08027504: + cmp r0, #0 + ble _0802750C + rsbs r0, r1, #0 + strh r0, [r3] +_0802750C: + adds r0, r7, #0 + adds r1, r3, #0 + bl UnusedTransform + ldr r3, _0802759C @ =gSineTable + ldr r0, _080275A0 @ =sa2__gUnknown_03001944 + ldrh r2, [r0] + movs r4, #0x80 + lsls r4, r4, #1 + adds r0, r2, r4 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r1, #0 + ldrsh r0, [r0, r1] + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r2, r2, #1 + adds r2, r2, r3 + movs r3, #0 + ldrsh r0, [r2, r3] + lsls r2, r0, #1 + adds r2, r2, r0 + ldr r3, _080275A4 @ =sa2__gUnknown_0300194C + ldr r4, _080275A8 @ =gCamera + ldrh r0, [r4] + ldrh r3, [r3] + adds r0, r0, r3 + asrs r1, r1, #9 + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r3, r1, #0x10 + ldr r1, _080275AC @ =sa2__gUnknown_03002820 + ldrh r0, [r4, #2] + ldrh r1, [r1] + adds r0, r0, r1 + asrs r2, r2, #9 + adds r2, r2, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + adds r0, r5, #0 + adds r0, #0x9b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _080275E6 + lsls r0, r3, #0x10 + asrs r5, r0, #0x10 + lsls r0, r2, #0x10 + asrs r4, r0, #0x10 + ldr r3, _080275B0 @ =gPlayer + adds r0, r7, #0 + adds r1, r5, #0 + adds r2, r4, #0 + bl Coll_Player_Entity_Intersection + adds r6, r0, #0 + ldr r0, _080275B4 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _080275BC + ldr r3, _080275B8 @ =gPartner + adds r0, r7, #0 + adds r1, r5, #0 + adds r2, r4, #0 + bl Coll_Player_Entity_Intersection + adds r4, r0, #0 + b _080275BE + .align 2, 0 +_0802759C: .4byte gSineTable +_080275A0: .4byte sa2__gUnknown_03001944 +_080275A4: .4byte sa2__gUnknown_0300194C +_080275A8: .4byte gCamera +_080275AC: .4byte sa2__gUnknown_03002820 +_080275B0: .4byte gPlayer +_080275B4: .4byte gNumSingleplayerCharacters +_080275B8: .4byte gPartner +_080275BC: + movs r4, #0 +_080275BE: + movs r5, #0x80 + lsls r5, r5, #0xc + cmp r6, r5 + bne _080275D4 + ldr r0, _080275F8 @ =gPlayer + bl Coll_DamagePlayer + mov r1, r8 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] +_080275D4: + cmp r4, r5 + bne _080275E6 + ldr r0, _080275FC @ =gPartner + bl Coll_DamagePlayer + mov r1, r8 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] +_080275E6: + adds r0, r7, #0 + bl DisplaySprite + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080275F8: .4byte gPlayer +_080275FC: .4byte gPartner + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_4__CreateIciclePlatform.inc b/sa1/asm/non_matching/game/enemies/boss_4__CreateIciclePlatform.inc new file mode 100644 index 0000000000..bea9748582 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_4__CreateIciclePlatform.inc @@ -0,0 +1,136 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + adds r4, r0, #0 + ldr r5, [r4] + ldr r0, _08031A84 @ =sub_8031AB4 + movs r2, #0x88 + lsls r2, r2, #6 + movs r6, #0 + str r6, [sp] + movs r1, #0x68 + movs r3, #0 + bl TaskCreate + ldrh r3, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r2, r3, r2 + ldrb r1, [r4, #8] + lsls r1, r1, #3 + ldrh r0, [r4, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r7, _08031A88 @ =0x03000044 + adds r0, r3, r7 + movs r7, #0 + mov sl, r7 + strh r1, [r0] + ldrb r1, [r5, #1] + lsls r1, r1, #3 + ldrh r0, [r4, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r4, _08031A8C @ =0x03000046 + adds r0, r3, r4 + strh r1, [r0] + ldr r7, _08031A90 @ =gPseudoRandom + mov r8, r7 + mov r1, r8 + ldr r0, [r1] + ldr r5, _08031A94 @ =0x00196225 + adds r1, r0, #0 + muls r1, r5, r1 + ldr r4, _08031A98 @ =0x3C6EF35F + adds r1, r1, r4 + str r1, [r7] + lsrs r7, r1, #1 + movs r0, #0xf + mov sb, r0 + ands r7, r0 + lsls r0, r7, #2 + adds r0, r0, r7 + lsls r0, r0, #2 + rsbs r0, r0, #0 + subs r0, #0xa + lsls r0, r0, #8 + str r0, [r2, #0x4c] + ldr r0, _08031A9C @ =0xFFFFE000 + str r0, [r2, #0x50] + str r6, [r2, #0x54] + movs r0, #0xa + str r0, [r2, #0x58] + adds r0, r1, #0 + muls r0, r5, r0 + adds r0, r0, r4 + muls r0, r5, r0 + adds r0, r0, r4 + mov r1, r8 + str r0, [r1] + mov r4, sb + ands r0, r4 + adds r0, #0xa + str r0, [r2, #0x58] + strh r6, [r2, #0x16] + strh r6, [r2, #0x18] + ldr r0, _08031AA0 @ =0x06012720 + str r0, [r2, #4] + movs r0, #0xa0 + lsls r0, r0, #3 + strh r0, [r2, #0x1a] + strh r6, [r2, #8] + ldr r0, _08031AA4 @ =0x00000276 + strh r0, [r2, #0xa] + ldr r7, _08031AA8 @ =0x03000020 + adds r0, r3, r7 + mov r1, sl + strb r1, [r0] + strh r6, [r2, #0x14] + strh r6, [r2, #0x1c] + ldr r4, _08031AAC @ =0x03000021 + adds r1, r3, r4 + movs r0, #0xff + strb r0, [r1] + adds r7, #2 + adds r1, r3, r7 + movs r0, #0x10 + strb r0, [r1] + ldr r0, _08031AB0 @ =0x03000025 + adds r3, r3, r0 + mov r1, sl + strb r1, [r3] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r2, #0x28] + movs r0, #0x80 + lsls r0, r0, #6 + str r0, [r2, #0x10] + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08031A84: .4byte sub_8031AB4 +_08031A88: .4byte 0x03000044 +_08031A8C: .4byte 0x03000046 +_08031A90: .4byte gPseudoRandom +_08031A94: .4byte 0x00196225 +_08031A98: .4byte 0x3C6EF35F +_08031A9C: .4byte 0xFFFFE000 +_08031AA0: .4byte 0x06012720 +_08031AA4: .4byte 0x00000276 +_08031AA8: .4byte 0x03000020 +_08031AAC: .4byte 0x03000021 +_08031AB0: .4byte 0x03000025 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesInit.inc b/sa1/asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesInit.inc new file mode 100644 index 0000000000..c8f7882da4 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesInit.inc @@ -0,0 +1,412 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r0, _0804E6EC @ =gPlayer + mov sl, r0 + ldr r0, _0804E6F0 @ =gCurTask + ldr r0, [r0] + ldrh r6, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r6, r0 + ldr r1, _0804E6F4 @ =0x0300000C + adds r1, r1, r6 + mov sb, r1 + ldr r2, _0804E6F8 @ =0x03000044 + adds r2, r6, r2 + str r2, [sp] + mov r3, sl + ldr r0, [r3, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0804E5DE + ldr r2, _0804E6FC @ =gDispCnt + ldrh r1, [r2] + ldr r0, _0804E700 @ =0x00007FFF + ands r0, r1 + strh r0, [r2] + mov r1, sb + ldr r0, [r1, #0x10] + ldr r1, _0804E704 @ =0xFFFFFE7F + ands r0, r1 + mov r2, sb + str r0, [r2, #0x10] +_0804E5DE: + ldr r2, _0804E708 @ =sBoss5ProcData + ldr r3, _0804E70C @ =0x0300009A + adds r0, r6, r3 + movs r1, #0 + ldrsb r1, [r0, r1] + lsls r0, r1, #3 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r2 + ldr r2, [r0] + adds r0, r4, #0 + mov r1, sl + bl _call_via_r2 + str r0, [sp, #4] + adds r0, r4, #0 + bl sub_804EB04 + ldr r0, _0804E710 @ =0x03000088 + adds r5, r6, r0 + ldr r0, [r5] + movs r1, #0x80 + lsls r1, r1, #0x13 + ands r0, r1 + cmp r0, #0 + bne _0804E618 + adds r0, r4, #0 + bl sub_804FDD4 +_0804E618: + ldr r0, [r5] + movs r1, #0x80 + lsls r1, r1, #0x12 + ands r0, r1 + cmp r0, #0 + bne _0804E62A + adds r0, r4, #0 + bl sub_804EB90 +_0804E62A: + ldr r1, _0804E714 @ =0x0300008C + adds r1, r1, r6 + mov r8, r1 + ldr r1, [r1] + ldr r0, [r4, #0x74] + asrs r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r2, _0804E718 @ =0x03000090 + adds r7, r6, r2 + ldr r2, [r7] + ldr r0, [r4, #0x78] + asrs r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r0, sb + mov r3, sl + bl sub_800BFEC + adds r5, r0, #0 + ldr r3, _0804E71C @ =gNumSingleplayerCharacters + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #2 + bne _0804E684 + mov r0, r8 + ldr r1, [r0] + ldr r0, [r4, #0x74] + asrs r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r2, [r7] + ldr r0, [r4, #0x78] + asrs r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + ldr r3, _0804E720 @ =gPartner + mov r0, sb + bl sub_800BFEC + orrs r5, r0 +_0804E684: + cmp r5, #0 + beq _0804E68A + b _0804E7D0 +_0804E68A: + ldr r1, _0804E724 @ =0x03000097 + adds r0, r6, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + ble _0804E69A + b _0804E7DE +_0804E69A: + mov r2, r8 + ldr r1, [r2] + ldr r0, [r4, #0x74] + asrs r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r2, [r7] + ldr r0, [r4, #0x78] + asrs r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r0, sb + mov r3, sl + bl sub_800C0E0 + adds r5, r0, #0 + ldr r3, _0804E71C @ =gNumSingleplayerCharacters + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #2 + bne _0804E728 + mov r0, r8 + ldr r1, [r0] + ldr r0, [r4, #0x74] + asrs r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r2, [r7] + ldr r0, [r4, #0x78] + asrs r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + ldr r3, _0804E720 @ =gPartner + mov r0, sb + bl sub_800C0E0 + b _0804E72A + .align 2, 0 +_0804E6EC: .4byte gPlayer +_0804E6F0: .4byte gCurTask +_0804E6F4: .4byte 0x0300000C +_0804E6F8: .4byte 0x03000044 +_0804E6FC: .4byte gDispCnt +_0804E700: .4byte 0x00007FFF +_0804E704: .4byte 0xFFFFFE7F +_0804E708: .4byte sBoss5ProcData +_0804E70C: .4byte 0x0300009A +_0804E710: .4byte 0x03000088 +_0804E714: .4byte 0x0300008C +_0804E718: .4byte 0x03000090 +_0804E71C: .4byte gNumSingleplayerCharacters +_0804E720: .4byte gPartner +_0804E724: .4byte 0x03000097 +_0804E728: + movs r0, #0 +_0804E72A: + cmp r5, #0 + beq _0804E764 + adds r0, r4, #0 + adds r0, #0x9a + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #5 + beq _0804E73E + cmp r2, #0xa + bne _0804E75E +_0804E73E: + mov r1, sl + ldr r0, [r1, #0x10] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _0804E75E + cmp r2, #0xa + beq _0804E7D0 + movs r2, #0 + str r2, [sp, #4] + adds r1, r4, #0 + adds r1, #0x9b + movs r0, #0xa + strb r0, [r1] + mov r3, sl + b _0804E794 +_0804E75E: + movs r0, #0 + str r0, [sp, #4] + b _0804E7AC +_0804E764: + cmp r0, #0 + beq _0804E7D0 + adds r0, r4, #0 + adds r0, #0x9a + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #5 + beq _0804E778 + cmp r2, #0xa + bne _0804E7A8 +_0804E778: + ldr r3, _0804E7A4 @ =gPartner + ldr r0, [r3, #0x10] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _0804E7A8 + cmp r2, #0xa + beq _0804E7D0 + movs r1, #0 + str r1, [sp, #4] + adds r1, r4, #0 + adds r1, #0x9b + movs r0, #0xa + strb r0, [r1] +_0804E794: + ldrh r0, [r3, #8] + rsbs r0, r0, #0 + strh r0, [r3, #8] + ldrh r0, [r3, #0xc] + rsbs r0, r0, #0 + strh r0, [r3, #0xc] + b _0804E7D0 + .align 2, 0 +_0804E7A4: .4byte gPartner +_0804E7A8: + movs r2, #0 + str r2, [sp, #4] +_0804E7AC: + adds r2, r4, #0 + adds r2, #0x9b + movs r0, #0x11 + strb r0, [r2] + adds r1, r4, #0 + adds r1, #0x95 + ldrb r0, [r1] + subs r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + bgt _0804E7C8 + movs r0, #0x13 + strb r0, [r2] +_0804E7C8: + adds r1, r4, #0 + adds r1, #0x97 + movs r0, #0x20 + strb r0, [r1] +_0804E7D0: + adds r0, r4, #0 + adds r0, #0x97 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0804E82E +_0804E7DE: + ldr r0, _0804E8BC @ =gStageTime + ldr r0, [r0] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _0804E814 + ldr r0, _0804E8C0 @ =gPlayer + ldr r0, [r0, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0804E814 + mov r3, sb + ldr r0, [r3, #0x10] + adds r1, #0x80 + orrs r0, r1 + str r0, [r3, #0x10] + ldr r2, _0804E8C4 @ =gDispCnt + ldrh r0, [r2] + movs r3, #0x80 + lsls r3, r3, #8 + adds r1, r3, #0 + orrs r0, r1 + strh r0, [r2] + ldr r1, _0804E8C8 @ =gWinRegs + ldr r0, _0804E8CC @ =0x00003F3F + strh r0, [r1, #0xa] +_0804E814: + adds r0, r4, #0 + adds r0, #0x9b + ldrb r0, [r0] + subs r0, #0x11 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bls _0804E82E + adds r1, r4, #0 + adds r1, #0x97 + ldrb r0, [r1] + subs r0, #1 + strb r0, [r1] +_0804E82E: + adds r0, r4, #0 + adds r0, #0x8c + ldr r1, [r0] + ldr r0, [r4, #0x74] + asrs r0, r0, #8 + adds r1, r1, r0 + ldr r2, _0804E8D0 @ =gCamera + ldrh r0, [r2] + subs r1, r1, r0 + ldr r3, [sp] + strh r1, [r3, #0x16] + mov r0, sb + strh r1, [r0, #0x16] + adds r0, r4, #0 + adds r0, #0x90 + ldr r1, [r0] + ldr r0, [r4, #0x78] + asrs r0, r0, #8 + adds r1, r1, r0 + ldrh r0, [r2, #2] + subs r1, r1, r0 + strh r1, [r3, #0x18] + mov r2, sb + strh r1, [r2, #0x18] + adds r5, r4, #0 + adds r5, #0x88 + ldr r0, [r5] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + beq _0804E878 + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + bl DisplaySprite +_0804E878: + ldr r0, [r5] + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + beq _0804E88E + ldr r0, [sp] + bl UpdateSpriteAnimation + ldr r0, [sp] + bl DisplaySprite +_0804E88E: + ldr r3, [sp, #4] + cmp r3, #0 + bne _0804E8AC + adds r0, r4, #0 + adds r0, #0x9b + ldrb r0, [r0] + adds r1, r4, #0 + adds r1, #0x9a + strb r0, [r1] + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r4, #0 + bl sub_804E8D4 +_0804E8AC: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0804E8BC: .4byte gStageTime +_0804E8C0: .4byte gPlayer +_0804E8C4: .4byte gDispCnt +_0804E8C8: .4byte gWinRegs +_0804E8CC: .4byte 0x00003F3F +_0804E8D0: .4byte gCamera + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesRocketInit.inc b/sa1/asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesRocketInit.inc new file mode 100644 index 0000000000..08284318e0 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesRocketInit.inc @@ -0,0 +1,367 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + ldr r0, _0804F27C @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r7, r0, r1 + adds r1, #0x14 + adds r1, r0, r1 + str r1, [sp] + ldr r2, _0804F280 @ =0x03000044 + adds r2, r0, r2 + str r2, [sp, #4] + ldr r3, [r7] + str r3, [sp, #8] + ldr r4, [r7, #4] + str r4, [sp, #0xc] + movs r3, #0xff + ldrb r6, [r7, #0x12] + mov r8, r6 + movs r1, #0x10 + ldrsh r0, [r7, r1] + cmp r0, #0x18 + ble _0804F2B6 + ldr r4, _0804F284 @ =gPlayer + ldr r2, [r4] + ldr r0, [r4, #4] + ldr r1, [sp, #0xc] + subs r6, r0, r1 + movs r0, #8 + ldrsh r4, [r7, r0] + movs r0, #0xa + ldrsh r1, [r7, r0] + ldr r5, _0804F288 @ =gSineTable + mov r0, r8 + ands r0, r3 + lsls r3, r0, #2 + mov sb, r3 + lsls r0, r0, #3 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #3 + adds r1, r1, r0 + ldr r3, [sp, #8] + subs r0, r2, r3 + cmp r0, #0 + bge _0804F242 + rsbs r0, r0, #0 +_0804F242: + adds r2, r1, #0 + muls r2, r0, r2 + movs r0, #0x80 + lsls r0, r0, #1 + add r0, sb + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #3 + adds r1, r4, r0 + cmp r1, #0 + bge _0804F260 + rsbs r1, r1, #0 +_0804F260: + adds r0, r2, #0 + bl __divsi3 + adds r1, r0, #0 + ldr r2, _0804F28C @ =0xFFFFF800 + adds r0, r6, r2 + cmp r1, r0 + bge _0804F298 + cmp r4, #0 + ble _0804F290 + movs r3, #3 + add r8, r3 + b _0804F2AC + .align 2, 0 +_0804F27C: .4byte gCurTask +_0804F280: .4byte 0x03000044 +_0804F284: .4byte gPlayer +_0804F288: .4byte gSineTable +_0804F28C: .4byte 0xFFFFF800 +_0804F290: + movs r4, #3 + rsbs r4, r4, #0 + add r8, r4 + b _0804F2AC +_0804F298: + cmp r1, r6 + ble _0804F2AC + cmp r4, #0 + ble _0804F2A8 + movs r6, #3 + rsbs r6, r6, #0 + add r8, r6 + b _0804F2AC +_0804F2A8: + movs r0, #3 + add r8, r0 +_0804F2AC: + movs r0, #0xff + mov r1, r8 + ands r1, r0 + mov r8, r1 + strh r1, [r7, #0x12] +_0804F2B6: + movs r2, #8 + ldrsh r0, [r7, r2] + ldr r3, [sp, #8] + adds r3, r3, r0 + str r3, [sp, #8] + movs r4, #0xa + ldrsh r0, [r7, r4] + ldr r6, [sp, #0xc] + adds r6, r6, r0 + str r6, [sp, #0xc] + movs r1, #0x10 + ldrsh r0, [r7, r1] + cmp r0, #0x10 + ble _0804F310 + movs r3, #0xc + ldrsh r2, [r7, r3] + ldr r3, _0804F350 @ =gSineTable + movs r1, #0xff + mov r4, r8 + ands r1, r4 + lsls r0, r1, #3 + movs r6, #0x80 + lsls r6, r6, #2 + adds r0, r0, r6 + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r2, r0 + asrs r0, r0, #8 + ldrh r2, [r7, #8] + adds r0, r0, r2 + strh r0, [r7, #8] + movs r4, #0xc + ldrsh r2, [r7, r4] + lsls r1, r1, #3 + adds r1, r1, r3 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r2, r0 + asrs r0, r0, #8 + ldrh r6, [r7, #0xa] + adds r0, r0, r6 + strh r0, [r7, #0xa] +_0804F310: + ldr r0, [sp, #8] + str r0, [r7] + ldr r1, [sp, #0xc] + str r1, [r7, #4] + asrs r5, r0, #8 + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + mov sl, r0 + asrs r4, r1, #8 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + mov sb, r0 + ldr r0, [sp] + mov r1, sl + mov r2, sb + ldr r3, _0804F354 @ =gPlayer + bl sub_800BF10 + adds r6, r0, #0 + ldr r0, _0804F358 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _0804F360 + ldr r3, _0804F35C @ =gPartner + ldr r0, [sp] + mov r1, sl + mov r2, sb + bl sub_800BF10 + b _0804F362 + .align 2, 0 +_0804F350: .4byte gSineTable +_0804F354: .4byte gPlayer +_0804F358: .4byte gNumSingleplayerCharacters +_0804F35C: .4byte gPartner +_0804F360: + movs r0, #0 +_0804F362: + orrs r6, r0 + cmp r6, #0 + beq _0804F3A8 + movs r3, #0xa8 + lsls r3, r3, #5 + ldr r2, _0804F3A4 @ =gSineTable + movs r1, #0xff + mov r4, r8 + ands r1, r4 + lsls r0, r1, #3 + movs r6, #0x80 + lsls r6, r6, #2 + adds r0, r0, r6 + adds r0, r0, r2 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r3, r0 + asrs r0, r0, #8 + ldr r4, [sp, #8] + adds r0, r4, r0 + lsls r1, r1, #3 + adds r1, r1, r2 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + muls r1, r3, r1 + asrs r1, r1, #8 + ldr r6, [sp, #0xc] + adds r1, r6, r1 + bl sub_8017540 + b _0804F41E + .align 2, 0 +_0804F3A4: .4byte gSineTable +_0804F3A8: + ldr r1, _0804F428 @ =gCamera + movs r2, #0 + ldrsh r0, [r1, r2] + subs r5, r5, r0 + movs r3, #2 + ldrsh r0, [r1, r3] + subs r4, r4, r0 + ldr r3, _0804F42C @ =gPseudoRandom + ldr r1, [r3] + ldr r0, _0804F430 @ =0x00196225 + adds r2, r1, #0 + muls r2, r0, r2 + ldr r6, _0804F434 @ =0x3C6EF35F + adds r2, r2, r6 + str r2, [r3] + ldr r0, _0804F438 @ =0x000003FF + mov sb, r0 + ands r2, r0 + ldr r1, _0804F43C @ =0xFFFFE600 + adds r2, r2, r1 + ldr r3, _0804F440 @ =gSineTable + movs r1, #0xff + mov r6, r8 + ands r1, r6 + lsls r0, r1, #3 + movs r6, #0x80 + lsls r6, r6, #2 + adds r0, r0, r6 + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r2, r0 + asrs r0, r0, #8 + ldr r6, [sp, #8] + adds r0, r6, r0 + asrs r0, r0, #8 + lsls r1, r1, #3 + adds r1, r1, r3 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + muls r1, r2, r1 + asrs r1, r1, #8 + ldr r2, [sp, #0xc] + adds r1, r2, r1 + asrs r1, r1, #8 + bl CreateBrakingDustEffect + adds r1, r5, #0 + adds r1, #0x20 + ldr r0, _0804F444 @ =0x0000012F + cmp r1, r0 + bhi _0804F41E + adds r1, r4, #0 + adds r1, #0x40 + subs r0, #0x10 + cmp r1, r0 + bls _0804F44C +_0804F41E: + ldr r0, _0804F448 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0804F4A6 + .align 2, 0 +_0804F428: .4byte gCamera +_0804F42C: .4byte gPseudoRandom +_0804F430: .4byte 0x00196225 +_0804F434: .4byte 0x3C6EF35F +_0804F438: .4byte 0x000003FF +_0804F43C: .4byte 0xFFFFE600 +_0804F440: .4byte gSineTable +_0804F444: .4byte 0x0000012F +_0804F448: .4byte gCurTask +_0804F44C: + ldrh r0, [r7, #0x10] + adds r0, #1 + strh r0, [r7, #0x10] + ldr r3, [sp, #4] + strh r5, [r3, #6] + strh r4, [r3, #8] + mov r1, r8 + movs r4, #2 + ldrsh r0, [r3, r4] + cmp r0, #0 + bge _0804F464 + adds r1, #0x80 +_0804F464: + adds r0, r1, #0 + adds r0, #0x80 + lsls r0, r0, #2 + mov r6, sb + ands r0, r6 + ldr r1, [sp, #4] + strh r0, [r1] + movs r0, #0x80 + lsls r0, r0, #6 + ldr r2, [sp] + str r0, [r2, #0x10] + ldr r2, _0804F4B8 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r3, [sp] + ldr r0, [r3, #0x10] + orrs r0, r1 + str r0, [r3, #0x10] + ldr r0, [sp] + bl UpdateSpriteAnimation + ldr r0, [sp] + ldr r1, [sp, #4] + bl TransformSprite + ldr r0, [sp] + bl DisplaySprite +_0804F4A6: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0804F4B8: .4byte sa2__gUnknown_030054B8 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_6__CreateEntity_EggSnake.inc b/sa1/asm/non_matching/game/enemies/boss_6__CreateEntity_EggSnake.inc new file mode 100644 index 0000000000..d56fd5c0d4 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_6__CreateEntity_EggSnake.inc @@ -0,0 +1,248 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + adds r6, r0, #0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + mov r8, r1 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + mov sb, r2 + lsls r3, r3, #0x18 + lsrs r5, r3, #0x18 + ldr r0, _08031FF8 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _08031FFC + movs r1, #2 + rsbs r1, r1, #0 + adds r0, r1, #0 + strb r0, [r6] + b _080321A8 + .align 2, 0 +_08031FF8: .4byte gGameMode +_08031FFC: + ldr r0, _08032090 @ =Task_EggSnakeInit + movs r2, #0x84 + lsls r2, r2, #6 + ldr r1, _08032094 @ =TaskDestructor_8034208 + str r1, [sp] + movs r1, #0xac + movs r3, #0 + bl TaskCreate + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r3 + mov sl, r0 + ldr r0, _08032098 @ =0x0300000C + adds r7, r3, r0 + movs r4, #0 + movs r2, #0 + mov r0, r8 + mov r1, sl + strh r0, [r1, #4] + mov r0, sb + strh r0, [r1, #6] + str r6, [r1] + ldrb r0, [r6] + strb r0, [r1, #8] + strb r5, [r1, #9] + ldr r0, _0803209C @ =0x03000098 + adds r1, r3, r0 + movs r0, #0x78 + strh r0, [r1] + ldr r1, _080320A0 @ =0x0300009C + adds r0, r3, r1 + strb r4, [r0] + adds r1, #0xd + adds r0, r3, r1 + strb r4, [r0] + subs r1, #1 + adds r0, r3, r1 + strb r4, [r0] + movs r0, #0x80 + lsls r0, r0, #5 + mov r1, sl + str r0, [r1, #0x78] + str r2, [r1, #0x7c] + ldr r1, _080320A4 @ =0x03000080 + adds r0, r3, r1 + str r2, [r0] + adds r1, #4 + adds r0, r3, r1 + str r2, [r0] + adds r1, #0x1c + adds r0, r3, r1 + strh r2, [r0] + ldr r0, _080320A8 @ =0x030000A2 + adds r1, r3, r0 + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r1] + ldr r1, _080320AC @ =0x030000A4 + adds r0, r3, r1 + strh r2, [r0] + adds r1, #6 + adds r0, r3, r1 + strb r4, [r0] + ldr r0, _080320B0 @ =gLoadedSaveGame + ldrb r0, [r0, #0x18] + cmp r0, #0 + beq _080320B8 + ldr r0, _080320B4 @ =0x0300009A + adds r1, r3, r0 + movs r0, #2 + strb r0, [r1] + b _080320BE + .align 2, 0 +_08032090: .4byte Task_EggSnakeInit +_08032094: .4byte TaskDestructor_8034208 +_08032098: .4byte 0x0300000C +_0803209C: .4byte 0x03000098 +_080320A0: .4byte 0x0300009C +_080320A4: .4byte 0x03000080 +_080320A8: .4byte 0x030000A2 +_080320AC: .4byte 0x030000A4 +_080320B0: .4byte gLoadedSaveGame +_080320B4: .4byte 0x0300009A +_080320B8: + ldr r1, _080321B8 @ =0x0300009A + adds r0, r3, r1 + strb r4, [r0] +_080320BE: + ldrb r0, [r6] + lsls r0, r0, #3 + mov r1, r8 + lsls r5, r1, #8 + adds r0, r0, r5 + strh r0, [r7, #0x16] + ldrb r0, [r6, #1] + lsls r0, r0, #3 + mov r1, sb + lsls r1, r1, #8 + mov sb, r1 + add r0, sb + strh r0, [r7, #0x18] + movs r0, #0x30 + bl VramMalloc + str r0, [r7, #4] + movs r0, #0xb0 + lsls r0, r0, #3 + strh r0, [r7, #0x1a] + movs r0, #0 + strh r0, [r7, #8] + ldr r0, _080321BC @ =0x00000296 + strh r0, [r7, #0xa] + adds r0, r7, #0 + adds r0, #0x20 + movs r1, #3 + strb r1, [r0] + movs r0, #0 + strh r0, [r7, #0x14] + strh r0, [r7, #0x1c] + adds r1, r7, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r0, r7, #0 + adds r0, #0x22 + movs r1, #0x10 + strb r1, [r0] + adds r0, #3 + movs r1, #0 + strb r1, [r0] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r7, #0x28] + movs r1, #0x80 + lsls r1, r1, #6 + mov r8, r1 + str r1, [r7, #0x10] + mov r4, sl + adds r4, #0x44 + ldrb r0, [r6] + lsls r0, r0, #3 + adds r0, r0, r5 + strh r0, [r4, #0x16] + ldrb r0, [r6, #1] + lsls r0, r0, #3 + add r0, sb + strh r0, [r4, #0x18] + movs r1, #2 + rsbs r1, r1, #0 + adds r0, r1, #0 + strb r0, [r6] + movs r0, #8 + bl VramMalloc + str r0, [r4, #4] + movs r0, #0xa8 + lsls r0, r0, #3 + strh r0, [r4, #0x1a] + movs r0, #0 + strh r0, [r4, #8] + movs r0, #0xa5 + lsls r0, r0, #2 + strh r0, [r4, #0xa] + mov r0, sl + adds r0, #0x64 + movs r1, #3 + strb r1, [r0] + movs r0, #0 + strh r0, [r4, #0x14] + strh r0, [r4, #0x1c] + mov r1, sl + adds r1, #0x65 + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + mov r0, sl + adds r0, #0x66 + movs r1, #0x10 + strb r1, [r0] + adds r0, #3 + movs r1, #0 + strb r1, [r0] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r4, #0x28] + mov r1, r8 + str r1, [r4, #0x10] + ldrh r1, [r7, #0x18] + adds r0, r1, #0 + subs r0, #0x80 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, #0x20 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r3, [r7, #0x16] + adds r2, r3, #0 + subs r2, #0x90 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + adds r3, #0xb0 + lsls r3, r3, #0x10 + asrs r3, r3, #0x10 + bl Bosses_SetCamBounds +_080321A8: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080321B8: .4byte 0x0300009A +_080321BC: .4byte 0x00000296 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_6__Task_8032370.inc b/sa1/asm/non_matching/game/enemies/boss_6__Task_8032370.inc new file mode 100644 index 0000000000..e81dcee124 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_6__Task_8032370.inc @@ -0,0 +1,555 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r1, _0803247C @ =gCurTask + ldr r0, [r1] + ldrh r6, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r5, r6, r1 + ldr r2, _08032480 @ =0x0300000C + adds r2, r2, r6 + mov r8, r2 + ldr r3, _08032484 @ =0x03000044 + adds r3, r3, r6 + mov sl, r3 + ldr r4, [r5] + mov ip, r4 + ldr r0, [r5, #0x74] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp] + ldr r0, _08032488 @ =0x030000A2 + adds r1, r6, r0 + ldr r2, _0803248C @ =0x030000A4 + adds r0, r6, r2 + ldrh r0, [r0] + ldrh r3, [r1] + adds r0, r0, r3 + strh r0, [r1] + ldr r4, _08032490 @ =0x030000A0 + adds r2, r6, r4 + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + ldrh r1, [r2] + subs r1, r1, r0 + ldr r0, _08032494 @ =0x000003FF + ands r1, r0 + strh r1, [r2] + ldr r1, _08032498 @ =gSineTable + movs r3, #0 + ldrsh r0, [r2, r3] + lsls r0, r0, #1 + adds r0, r0, r1 + movs r4, #0 + ldrsh r7, [r0, r4] + lsls r0, r7, #4 + subs r0, r0, r7 + asrs r7, r0, #0xb + ldrb r1, [r5, #8] + lsls r1, r1, #3 + ldrh r0, [r5, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r0, [r5, #0x78] + asrs r0, r0, #8 + adds r1, r1, r0 + adds r1, r1, r7 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + mov sb, r1 + adds r0, r7, #0 + adds r0, #0x80 + lsls r0, r0, #0x10 + asrs r3, r0, #0x10 + adds r1, r3, #0 + cmp r3, #0 + bge _080323FE + adds r1, #0x1f +_080323FE: + asrs r1, r1, #5 + lsls r0, r1, #0x18 + lsrs r4, r0, #0x18 + lsls r1, r1, #5 + subs r1, r3, r1 + ldr r3, _0803249C @ =gUnknown_03005870 + lsls r2, r4, #1 + adds r2, r2, r3 + adds r0, r4, #1 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r3, #0 + ldrsh r0, [r0, r3] + movs r4, #0 + ldrsh r3, [r2, r4] + subs r0, r0, r3 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + muls r0, r1, r0 + cmp r0, #0 + bge _0803242A + adds r0, #0x1f +_0803242A: + asrs r2, r0, #5 + adds r2, r3, r2 + lsls r2, r2, #0x10 + mov r0, ip + ldrb r1, [r0, #1] + lsls r1, r1, #3 + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r0, [r5, #0x7c] + asrs r0, r0, #8 + adds r1, r1, r0 + lsrs r3, r2, #0x10 + asrs r2, r2, #0x10 + adds r2, r2, r1 + ldr r1, _080324A0 @ =0x03000090 + adds r0, r6, r1 + strh r7, [r0] + ldr r4, _080324A4 @ =0x03000092 + adds r0, r6, r4 + strh r3, [r0] + mov r1, sb + lsls r0, r1, #0x10 + asrs r4, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov sb, r2 + adds r0, r4, #0 + mov r1, sb + bl sub_8031D88 + ldr r2, _080324A8 @ =0x0300009A + adds r0, r6, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #7 + ble _080324AC + bl sub_80327C4 + b _080327B0 + .align 2, 0 +_0803247C: .4byte gCurTask +_08032480: .4byte 0x0300000C +_08032484: .4byte 0x03000044 +_08032488: .4byte 0x030000A2 +_0803248C: .4byte 0x030000A4 +_08032490: .4byte 0x030000A0 +_08032494: .4byte 0x000003FF +_08032498: .4byte gSineTable +_0803249C: .4byte gUnknown_03005870 +_080324A0: .4byte 0x03000090 +_080324A4: .4byte 0x03000092 +_080324A8: .4byte 0x0300009A +_080324AC: + ldr r3, _08032510 @ =gCurTask + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r0, _08032514 @ =0x0300000C + adds r1, r1, r0 + ldr r2, _08032518 @ =gCamera + ldrh r0, [r2] + subs r0, r4, r0 + strh r0, [r1, #0x16] + ldrh r0, [r2, #2] + mov r2, sb + subs r0, r2, r0 + strh r0, [r1, #0x18] + bl sub_8031F74 + mov r0, r8 + bl UpdateSpriteAnimation + ldr r3, _0803251C @ =0x030000AA + adds r0, r6, r3 + ldrb r0, [r0] + cmp r0, #0 + bne _080324E0 + mov r0, sl + bl UpdateSpriteAnimation +_080324E0: + ldr r4, _08032510 @ =gCurTask + ldr r0, [r4] + ldrh r0, [r0, #6] + ldr r1, _08032514 @ =0x0300000C + adds r2, r0, r1 + ldr r3, _08032520 @ =0x03000044 + adds r0, r0, r3 + ldrh r1, [r2, #0x16] + strh r1, [r0, #0x16] + ldrh r1, [r2, #0x18] + strh r1, [r0, #0x18] + bl sub_8031ED0 + ldr r4, _08032524 @ =0x030000A9 + adds r0, r6, r4 + ldrb r0, [r0] + cmp r0, #5 + bls _08032506 + b _080327B0 +_08032506: + lsls r0, r0, #2 + ldr r1, _08032528 @ =_0803252C + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08032510: .4byte gCurTask +_08032514: .4byte 0x0300000C +_08032518: .4byte gCamera +_0803251C: .4byte 0x030000AA +_08032520: .4byte 0x03000044 +_08032524: .4byte 0x030000A9 +_08032528: .4byte _0803252C +_0803252C: @ jump table + .4byte _08032544 @ case 0 + .4byte _080325CC @ case 1 + .4byte _08032670 @ case 2 + .4byte _080326CE @ case 3 + .4byte _0803274C @ case 4 + .4byte _08032790 @ case 5 +_08032544: + adds r6, r5, #0 + adds r6, #0xa2 + movs r0, #0 + ldrsh r1, [r6, r0] + ldr r0, _080325C8 @ =0x000001FF + cmp r1, r0 + bgt _08032560 + movs r0, #0 + movs r1, #0x80 + lsls r1, r1, #2 + strh r1, [r6] + adds r1, r5, #0 + adds r1, #0xa4 + strh r0, [r1] +_08032560: + adds r0, r7, #0 + adds r0, #0x90 + cmp r0, #0 + bge _0803256A + adds r0, #0x1f +_0803256A: + asrs r0, r0, #5 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #0 + bne _08032576 + b _080327B0 +_08032576: + cmp r4, #8 + bne _0803257C + b _080327B0 +_0803257C: + ldr r0, [sp] + adds r0, #0x55 + ldrb r2, [r0] + adds r0, r2, #0 + cmp r0, #0 + bne _0803258A + b _080327B0 +_0803258A: + cmp r0, #8 + bne _08032590 + b _080327B0 +_08032590: + subs r0, r2, #2 + lsls r1, r4, #0x18 + lsls r0, r0, #0x18 + asrs r3, r1, #0x18 + cmp r1, r0 + bge _0803259E + b _080327B0 +_0803259E: + adds r0, r2, #2 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r3, r0 + ble _080325AA + b _080327B0 +_080325AA: + ldr r0, [sp] + adds r0, #0x57 + ldrb r0, [r0] + cmp r0, #0 + bne _080325B6 + b _080327B0 +_080325B6: + movs r1, #0 + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r6] + adds r0, r5, #0 + adds r0, #0xa4 + strh r1, [r0] + b _08032740 + .align 2, 0 +_080325C8: .4byte 0x000001FF +_080325CC: + mov r3, r8 + adds r3, #0x20 + ldrb r0, [r3] + cmp r0, #1 + beq _080325FC + ldr r0, [sp] + adds r0, #0x5c + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + blt _080325E4 + b _080327B0 +_080325E4: + movs r0, #1 + strb r0, [r3] + mov r1, r8 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r1, r5, #0 + adds r1, #0xaa + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + b _080327B0 +_080325FC: + mov r2, r8 + ldr r0, [r2, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + bne _0803260C + b _080327B0 +_0803260C: + movs r2, #0 + movs r0, #2 + strb r0, [r3] + mov r0, sl + adds r0, #0x20 + strb r2, [r0] + mov r1, r8 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r0, r5, #0 + adds r0, #0xaa + strb r2, [r0] + ldr r3, _0803265C @ =gUnknown_084ACF08 + ldr r2, _08032660 @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _08032664 @ =0x00196225 + muls r0, r1, r0 + ldr r4, _08032668 @ =0x3C6EF35F + adds r0, r0, r4 + str r0, [r2] + ldr r1, _0803266C @ =gStageTime + ldr r1, [r1] + adds r0, r0, r1 + movs r1, #3 + ands r0, r1 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrh r1, [r0] + adds r0, r5, #0 + adds r0, #0x98 + strh r1, [r0] + adds r0, #2 + ldrb r0, [r0] + adds r1, r5, #0 + adds r1, #0x9b + strb r0, [r1] + adds r1, #0xe + b _08032744 + .align 2, 0 +_0803265C: .4byte gUnknown_084ACF08 +_08032660: .4byte gPseudoRandom +_08032664: .4byte 0x00196225 +_08032668: .4byte 0x3C6EF35F +_0803266C: .4byte gStageTime +_08032670: + adds r0, r5, #0 + adds r0, #0x9c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _080326A0 + cmp r0, #0x10 + ble _08032684 + b _080327B0 +_08032684: + mov r1, r8 + adds r1, #0x20 + movs r0, #0 + strb r0, [r1] + adds r1, #1 + movs r0, #0xff + strb r0, [r1] + adds r1, r5, #0 + adds r1, #0xaa + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + subs r1, #1 + b _08032744 +_080326A0: + adds r1, r5, #0 + adds r1, #0x98 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + beq _080326B2 + b _080327B0 +_080326B2: + mov r1, r8 + adds r1, #0x20 + movs r0, #0 + strb r0, [r1] + adds r1, #1 + movs r0, #0xff + strb r0, [r1] + adds r1, r5, #0 + adds r1, #0xaa + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + subs r1, #1 + b _08032744 +_080326CE: + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + beq _080327B0 + mov r0, r8 + adds r0, #0x20 + movs r2, #0 + movs r1, #3 + strb r1, [r0] + mov r0, sl + adds r0, #0x20 + strb r1, [r0] + mov r1, r8 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r0, r5, #0 + adds r0, #0xaa + strb r2, [r0] + adds r1, r5, #0 + adds r1, #0xa4 + movs r0, #0x40 + strh r0, [r1] + ldr r1, _0803273C @ =gUnknown_084ACEE4 + adds r2, r5, #0 + adds r2, #0x9a + movs r0, #0 + ldrsb r0, [r2, r0] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + adds r1, r5, #0 + adds r1, #0xa6 + strh r0, [r1] + subs r1, #0xe + movs r0, #0x78 + strh r0, [r1] + adds r0, r5, #0 + adds r0, #0x9b + movs r1, #0 + ldrsb r1, [r2, r1] + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r1, r0 + bne _08032740 + adds r1, r5, #0 + adds r1, #0xa9 + ldrb r0, [r1] + adds r0, #2 + strb r0, [r1] + b _080327B0 + .align 2, 0 +_0803273C: .4byte gUnknown_084ACEE4 +_08032740: + adds r1, r5, #0 + adds r1, #0xa9 +_08032744: + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + b _080327B0 +_0803274C: + adds r2, r5, #0 + adds r2, #0xa2 + adds r0, r5, #0 + adds r0, #0xa6 + movs r3, #0 + ldrsh r1, [r2, r3] + ldrh r3, [r0] + movs r4, #0 + ldrsh r0, [r0, r4] + cmp r1, r0 + blt _0803276C + movs r1, #0 + strh r3, [r2] + adds r0, r5, #0 + adds r0, #0xa4 + strh r1, [r0] +_0803276C: + adds r1, r5, #0 + adds r1, #0x98 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _080327B0 + adds r1, #0xc + ldr r0, _0803278C @ =0x0000FFC0 + strh r0, [r1] + adds r1, #5 + movs r0, #0 + strb r0, [r1] + b _080327B0 + .align 2, 0 +_0803278C: .4byte 0x0000FFC0 +_08032790: + adds r3, r5, #0 + adds r3, #0xa2 + movs r0, #0 + ldrsh r1, [r3, r0] + ldr r0, _080327C0 @ =0x000001FF + cmp r1, r0 + ble _080327B0 + movs r2, #0 + movs r1, #0 + adds r0, #1 + strh r0, [r3] + adds r0, r5, #0 + adds r0, #0xa4 + strh r1, [r0] + adds r0, #5 + strb r2, [r0] +_080327B0: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080327C0: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_6__Task_8033AA0.inc b/sa1/asm/non_matching/game/enemies/boss_6__Task_8033AA0.inc new file mode 100644 index 0000000000..54d6fe273c --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_6__Task_8033AA0.inc @@ -0,0 +1,786 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + movs r0, #0 + mov sb, r0 + ldr r0, _08033B48 @ =gCurTask + ldr r3, [r0] + ldrh r2, [r3, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r2 + mov sl, r0 + movs r1, #0 + str r1, [sp] + ldr r1, _08033B4C @ =0x040000D4 + ldr r0, _08033B50 @ =gUnknown_03005870 + str r0, [r1] + ldr r0, _08033B54 @ =gUnknown_03005890 + str r0, [r1, #4] + ldr r0, _08033B58 @ =0x80000009 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldr r4, _08033B5C @ =0x0300005E + adds r1, r2, r4 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r5, _08033B60 @ =0x03000058 + adds r0, r2, r5 + ldrb r0, [r0] + cmp r0, #0 + bne _08033B7C + movs r5, #0 + ldr r7, _08033B64 @ =0x03000030 + adds r6, r2, r7 + ldr r0, _08033B68 @ =0x03000054 + adds r0, r0, r2 + mov r8, r0 + ldr r7, _08033B6C @ =gCamera +_08033AF4: + lsls r0, r5, #2 + adds r0, r6, r0 + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r4, r0, r1 + ldr r1, [r4, #0x38] + asrs r1, r1, #8 + ldrh r2, [r4, #0x30] + adds r1, r1, r2 + ldr r3, [r4, #0x3c] + asrs r3, r3, #8 + ldrh r0, [r4, #0x32] + adds r3, r3, r0 + ldr r2, _08033B50 @ =gUnknown_03005870 + lsls r0, r5, #1 + adds r0, r0, r2 + ldrh r2, [r0] + adds r2, r2, r3 + ldrh r0, [r7] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r0, r1, r0 + strh r0, [r4, #0x16] + ldrh r0, [r7, #2] + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + subs r0, r2, r0 + strh r0, [r4, #0x18] + adds r0, r4, #0 + ldr r3, _08033B70 @ =gPlayer + bl Coll_Player_PlatformCrumbling + cmp r0, #0 + bne _08033B74 + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bls _08033AF4 + b _08033B94 + .align 2, 0 +_08033B48: .4byte gCurTask +_08033B4C: .4byte 0x040000D4 +_08033B50: .4byte gUnknown_03005870 +_08033B54: .4byte gUnknown_03005890 +_08033B58: .4byte 0x80000009 +_08033B5C: .4byte 0x0300005E +_08033B60: .4byte 0x03000058 +_08033B64: .4byte 0x03000030 +_08033B68: .4byte 0x03000054 +_08033B6C: .4byte gCamera +_08033B70: .4byte gPlayer +_08033B74: + movs r1, #0xff + str r1, [sp] + mov sb, r5 + b _08033B94 +_08033B7C: + ldr r0, _08033BB4 @ =gPlayer + ldr r0, [r0, #0x10] + movs r1, #0xa + ands r0, r1 + ldr r4, _08033BB8 @ =0x03000054 + adds r4, r4, r2 + mov r8, r4 + cmp r0, #0 + bne _08033B94 + adds r0, r3, #0 + bl TaskDestroy +_08033B94: + ldr r5, [sp] + cmp r5, #0 + bne _08033B9C + b _08033E30 +_08033B9C: + mov r0, sl + adds r0, #0x56 + mov r6, sb + strb r6, [r0] + mov r7, sb + cmp r7, #0 + beq _08033BAE + cmp r7, #8 + bne _08033BBC +_08033BAE: + movs r6, #8 + b _08033BBE + .align 2, 0 +_08033BB4: .4byte gPlayer +_08033BB8: .4byte 0x03000054 +_08033BBC: + movs r6, #0x10 +_08033BBE: + ldr r1, _08033C38 @ =sPlayerSpeedState + ldr r0, [r1, #0xc] + movs r2, #2 + ands r0, r2 + cmp r0, #0 + beq _08033C58 + adds r0, r1, #0 + movs r3, #0xa + ldrsh r1, [r0, r3] + movs r0, #0x80 + lsls r0, r0, #3 + cmp r1, r0 + ble _08033C58 + mov r4, r8 + strb r2, [r4] + mov r0, sl + adds r0, #0x55 + mov r5, sb + strb r5, [r0] + mov r1, sl + adds r1, #0x57 + movs r0, #0xff + strb r0, [r1] + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + cmp r0, #8 + beq _08033BF8 + lsls r0, r0, #0x11 + lsrs r6, r0, #0x10 +_08033BF8: + mov r0, sl + adds r0, #0x5a + strh r6, [r0] + movs r5, #0 + ldr r7, _08033C3C @ =gUnknown_03005890 + mov r8, r7 + mov r0, sb + lsls r0, r0, #1 + str r0, [sp, #4] + ldr r3, _08033C40 @ =gUnknown_03005870 + lsls r0, r6, #0x10 + asrs r4, r0, #0x10 +_08033C10: + cmp r5, sb + bne _08033C44 + ldr r2, _08033C38 @ =sPlayerSpeedState + ldrh r1, [r2, #0xa] + lsls r1, r1, #0x10 + asrs r1, r1, #0x18 + mov r0, sl + adds r0, #0x5c + strh r1, [r0] + lsls r0, r5, #1 + adds r2, r0, r3 + ldrh r0, [r2] + adds r0, r0, r1 + strh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, r4 + ble _08033C4C + strh r6, [r2] + b _08033C4C + .align 2, 0 +_08033C38: .4byte sPlayerSpeedState +_08033C3C: .4byte gUnknown_03005890 +_08033C40: .4byte gUnknown_03005870 +_08033C44: + lsls r0, r5, #1 + adds r0, r0, r3 + movs r1, #0 + strh r1, [r0] +_08033C4C: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bls _08033C10 + b _08033DFC +_08033C58: + mov r3, r8 + ldrb r0, [r3] + cmp r0, #2 + bne _08033D2C + ldr r2, _08033D24 @ =gUnknown_03005870 + mov r4, sb + lsls r3, r4, #1 + adds r6, r3, r2 + mov r5, sl + adds r5, #0x5c + ldrh r0, [r5] + ldrh r7, [r6] + adds r0, r0, r7 + strh r0, [r6] + mov r4, sl + adds r4, #0x5a + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + ldrh r1, [r4] + mov ip, r1 + movs r7, #0 + ldrsh r1, [r4, r7] + str r3, [sp, #4] + cmp r0, r1 + blt _08033C9E + mov r0, ip + strh r0, [r6] + ldrh r0, [r5] + movs r1, #1 + subs r1, r1, r0 + strh r1, [r5] + mov r1, sl + adds r1, #0x57 + movs r0, #0 + strb r0, [r1] +_08033C9E: + movs r1, #0 + ldrsh r0, [r6, r1] + movs r2, #0 + ldrsh r1, [r4, r2] + lsrs r2, r1, #0x1f + adds r1, r1, r2 + asrs r1, r1, #1 + cmn r0, r1 + bgt _08033CBA + rsbs r0, r1, #0 + strh r0, [r6] + movs r0, #1 + mov r3, r8 + strb r0, [r3] +_08033CBA: + movs r5, #0 + ldr r4, _08033D28 @ =gUnknown_03005890 + mov r8, r4 + ldr r7, _08033D24 @ =gUnknown_03005870 + adds r4, r6, #0 +_08033CC4: + cmp r5, sb + beq _08033CFA + mov r6, sb + subs r0, r6, r5 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bge _08033CDC + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 +_08033CDC: + lsls r0, r1, #0x18 + asrs r1, r0, #0x18 + cmp r1, #2 + bgt _08033CFA + movs r2, #0 + ldrsh r0, [r4, r2] + muls r0, r1, r0 + movs r1, #3 + bl __divsi3 + ldrh r1, [r4] + subs r1, r1, r0 + lsls r0, r5, #1 + adds r0, r0, r7 + strh r1, [r0] +_08033CFA: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bls _08033CC4 + ldr r3, _08033D24 @ =gUnknown_03005870 + movs r4, #0 + ldrsh r0, [r3, r4] + cmp r0, #8 + ble _08033D12 + movs r0, #8 + strh r0, [r3] +_08033D12: + ldr r5, _08033D24 @ =gUnknown_03005870 + movs r6, #0x10 + ldrsh r0, [r5, r6] + cmp r0, #8 + ble _08033DFC + movs r0, #8 + strh r0, [r5, #0x10] + b _08033DFC + .align 2, 0 +_08033D24: .4byte gUnknown_03005870 +_08033D28: .4byte gUnknown_03005890 +_08033D2C: + movs r0, #1 + mov r7, r8 + strb r0, [r7] + ldr r1, _08033D4C @ =gUnknown_03005870 + mov r0, sb + lsls r2, r0, #1 + adds r4, r2, r1 + ldrh r3, [r4] + movs r5, #0 + ldrsh r0, [r4, r5] + str r2, [sp, #4] + cmp r0, #0 + bge _08033D50 + adds r0, r3, #2 + b _08033D52 + .align 2, 0 +_08033D4C: .4byte gUnknown_03005870 +_08033D50: + adds r0, r3, #1 +_08033D52: + strh r0, [r4] + ldr r7, [sp, #4] + ldr r0, _08033E24 @ =gUnknown_03005870 + adds r2, r7, r0 + movs r3, #0 + ldrsh r1, [r2, r3] + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + cmp r1, r0 + ble _08033D68 + strh r6, [r2] +_08033D68: + movs r5, #0 + ldr r4, _08033E28 @ =gUnknown_03005890 + mov r8, r4 + ldr r6, _08033E24 @ =gUnknown_03005870 + adds r4, r2, #0 +_08033D72: + cmp r5, sb + beq _08033DD6 + mov r7, sb + subs r1, r7, r5 + lsls r1, r1, #0x18 + lsls r0, r7, #0x18 + lsrs r2, r0, #0x18 + lsrs r3, r1, #0x18 + asrs r0, r1, #0x18 + cmp r0, #0 + bge _08033D96 + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + movs r0, #8 + subs r0, r0, r7 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 +_08033D96: + lsls r1, r2, #0x18 + movs r0, #0 + ldrsh r2, [r4, r0] + lsls r0, r3, #0x18 + asrs r0, r0, #0x18 + muls r0, r2, r0 + movs r2, #0x80 + lsls r2, r2, #0x11 + adds r1, r1, r2 + asrs r1, r1, #0x18 + bl __divsi3 + ldrh r1, [r4] + subs r1, r1, r0 + lsls r0, r5, #1 + adds r2, r0, r6 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r3, [r2] + movs r7, #0 + ldrsh r0, [r2, r7] + cmp r1, r0 + ble _08033DC8 + adds r0, r3, #1 + strh r0, [r2] +_08033DC8: + ldrh r3, [r2] + movs r7, #0 + ldrsh r0, [r2, r7] + cmp r1, r0 + bge _08033DD6 + subs r0, r3, #1 + strh r0, [r2] +_08033DD6: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bls _08033D72 + ldr r1, _08033E24 @ =gUnknown_03005870 + movs r2, #0 + ldrsh r0, [r1, r2] + cmp r0, #8 + ble _08033DEE + movs r0, #8 + strh r0, [r1] +_08033DEE: + ldr r3, _08033E24 @ =gUnknown_03005870 + movs r4, #0x10 + ldrsh r0, [r3, r4] + cmp r0, #8 + ble _08033DFC + movs r0, #8 + strh r0, [r3, #0x10] +_08033DFC: + ldr r5, _08033E2C @ =gPlayer + ldr r2, [r5, #4] + movs r6, #0x80 + lsls r6, r6, #1 + adds r2, r2, r6 + ldr r7, [sp, #4] + ldr r1, _08033E24 @ =gUnknown_03005870 + adds r0, r7, r1 + movs r3, #0 + ldrsh r0, [r0, r3] + adds r1, r7, #0 + add r1, r8 + movs r4, #0 + ldrsh r1, [r1, r4] + subs r0, r0, r1 + lsls r0, r0, #8 + adds r2, r2, r0 + str r2, [r5, #4] + b _08033FFA + .align 2, 0 +_08033E24: .4byte gUnknown_03005870 +_08033E28: .4byte gUnknown_03005890 +_08033E2C: .4byte gPlayer +_08033E30: + mov r5, r8 + ldrb r0, [r5] + cmp r0, #2 + bne _08033F1C + ldr r2, _08033F18 @ =gUnknown_03005870 + mov r7, sl + adds r7, #0x55 + ldrb r1, [r7] + lsls r1, r1, #1 + adds r1, r1, r2 + mov r5, sl + adds r5, #0x5c + ldrh r0, [r5] + ldrh r6, [r1] + adds r0, r0, r6 + movs r3, #0 + mov sb, r3 + strh r0, [r1] + ldrb r0, [r7] + lsls r0, r0, #1 + adds r4, r0, r2 + mov r3, sl + adds r3, #0x5a + movs r6, #0 + ldrsh r1, [r4, r6] + ldrh r0, [r3] + mov ip, r0 + movs r6, #0 + ldrsh r0, [r3, r6] + adds r2, r7, #0 + cmp r1, r0 + blt _08033E84 + mov r0, ip + strh r0, [r4] + ldrh r1, [r5] + movs r0, #1 + subs r0, r0, r1 + strh r0, [r5] + mov r0, sl + adds r0, #0x57 + mov r1, sb + strb r1, [r0] +_08033E84: + ldrb r0, [r2] + lsls r0, r0, #1 + ldr r2, _08033F18 @ =gUnknown_03005870 + adds r4, r0, r2 + movs r6, #0 + ldrsh r2, [r4, r6] + movs r1, #0 + ldrsh r0, [r3, r1] + lsrs r1, r0, #0x1f + adds r0, r0, r1 + asrs r0, r0, #1 + cmn r2, r0 + bgt _08033EAE + rsbs r0, r0, #0 + strh r0, [r4] + mov r2, sp + ldrh r2, [r2] + strh r2, [r5] + mov r4, sb + mov r3, r8 + strb r4, [r3] +_08033EAE: + movs r5, #0 + adds r6, r7, #0 + ldr r7, _08033F18 @ =gUnknown_03005870 +_08033EB4: + ldrb r0, [r6] + cmp r5, r0 + beq _08033EF0 + subs r0, r0, r5 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bge _08033ECC + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 +_08033ECC: + lsls r0, r1, #0x18 + asrs r1, r0, #0x18 + cmp r1, #2 + bgt _08033EF0 + ldrb r4, [r6] + lsls r4, r4, #1 + adds r4, r4, r7 + movs r2, #0 + ldrsh r0, [r4, r2] + muls r0, r1, r0 + movs r1, #3 + bl __divsi3 + ldrh r1, [r4] + subs r1, r1, r0 + lsls r0, r5, #1 + adds r0, r0, r7 + strh r1, [r0] +_08033EF0: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bls _08033EB4 + ldr r3, _08033F18 @ =gUnknown_03005870 + movs r4, #0 + ldrsh r0, [r3, r4] + cmp r0, #8 + ble _08033F08 + movs r0, #8 + strh r0, [r3] +_08033F08: + ldr r5, _08033F18 @ =gUnknown_03005870 + movs r6, #0x10 + ldrsh r0, [r5, r6] + cmp r0, #8 + ble _08033FFA + movs r0, #8 + strh r0, [r5, #0x10] + b _08033FFA + .align 2, 0 +_08033F18: .4byte gUnknown_03005870 +_08033F1C: + mov r7, sp + ldrb r0, [r7] + mov r7, r8 + strb r0, [r7] + ldr r1, _08034084 @ =gUnknown_03005870 + mov r2, sl + adds r2, #0x56 + ldrb r0, [r2] + lsls r0, r0, #1 + adds r3, r0, r1 + ldrh r4, [r3] + movs r5, #0 + ldrsh r0, [r3, r5] + adds r7, r2, #0 + cmp r0, #0 + ble _08033F40 + subs r0, r4, #1 + strh r0, [r3] +_08033F40: + ldrb r0, [r7] + lsls r0, r0, #1 + ldr r6, _08034084 @ =gUnknown_03005870 + adds r1, r0, r6 + ldrh r2, [r1] + movs r3, #0 + ldrsh r0, [r1, r3] + cmp r0, #0 + bge _08033F6A + adds r0, r2, #2 + strh r0, [r1] + ldrb r0, [r7] + lsls r0, r0, #1 + adds r1, r0, r6 + movs r4, #0 + ldrsh r0, [r1, r4] + cmp r0, #0 + ble _08033F6A + mov r5, sp + ldrh r5, [r5] + strh r5, [r1] +_08033F6A: + movs r5, #0 +_08033F6C: + ldrb r0, [r7] + cmp r5, r0 + beq _08033FF0 + subs r0, r0, r5 + lsls r0, r0, #0x18 + ldrb r1, [r7] + adds r4, r1, #0 + lsrs r3, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bge _08033F90 + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + movs r0, #8 + subs r0, r0, r1 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 +_08033F90: + lsls r1, r1, #0x18 + ldr r6, _08034084 @ =gUnknown_03005870 + lsls r4, r4, #1 + adds r4, r4, r6 + movs r0, #0 + ldrsh r2, [r4, r0] + lsls r0, r3, #0x18 + asrs r0, r0, #0x18 + muls r0, r2, r0 + movs r2, #0x80 + lsls r2, r2, #0x11 + adds r1, r1, r2 + asrs r1, r1, #0x18 + bl __divsi3 + ldrh r1, [r4] + subs r1, r1, r0 + lsls r0, r5, #1 + adds r2, r0, r6 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r3, [r2] + movs r4, #0 + ldrsh r0, [r2, r4] + cmp r1, r0 + ble _08033FC8 + adds r0, r3, #1 + strh r0, [r2] +_08033FC8: + ldrh r3, [r2] + movs r4, #0 + ldrsh r0, [r2, r4] + cmp r1, r0 + bge _08033FD6 + subs r0, r3, #1 + strh r0, [r2] +_08033FD6: + movs r1, #0 + ldrsh r0, [r6, r1] + cmp r0, #8 + ble _08033FE2 + movs r0, #8 + strh r0, [r6] +_08033FE2: + ldr r2, _08034084 @ =gUnknown_03005870 + movs r3, #0x10 + ldrsh r0, [r2, r3] + cmp r0, #8 + ble _08033FF0 + movs r0, #8 + strh r0, [r2, #0x10] +_08033FF0: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bls _08033F6C +_08033FFA: + ldr r4, _08034088 @ =gPlayer + ldr r0, [r4] + ldr r5, _0803408C @ =sPlayerSpeedState + str r0, [r5] + ldr r0, [r4, #4] + str r0, [r5, #4] + ldrh r0, [r4, #8] + strh r0, [r5, #8] + ldrh r0, [r4, #0xa] + strh r0, [r5, #0xa] + ldr r0, [r4, #0x10] + str r0, [r5, #0xc] + ldr r6, _08034090 @ =gNumSingleplayerCharacters + movs r0, #0 + ldrsb r0, [r6, r0] + cmp r0, #2 + bne _08034072 + mov r0, sl + adds r0, #0x58 + ldrb r0, [r0] + cmp r0, #0 + bne _08034072 + movs r5, #0 + mov r6, sl + adds r6, #0x30 +_0803402C: + lsls r0, r5, #2 + adds r0, r6, r0 + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r7, #0xc0 + lsls r7, r7, #0x12 + adds r4, r0, r7 + ldr r1, [r4, #0x38] + asrs r1, r1, #8 + ldrh r0, [r4, #0x30] + adds r1, r1, r0 + ldr r3, [r4, #0x3c] + asrs r3, r3, #8 + ldrh r2, [r4, #0x32] + adds r3, r3, r2 + ldr r2, _08034084 @ =gUnknown_03005870 + lsls r0, r5, #1 + adds r0, r0, r2 + ldrh r2, [r0] + adds r2, r2, r3 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + adds r0, r4, #0 + ldr r3, _08034094 @ =gPartner + bl Coll_Player_PlatformCrumbling + cmp r0, #0 + bne _08034072 + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bls _0803402C +_08034072: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08034084: .4byte gUnknown_03005870 +_08034088: .4byte gPlayer +_0803408C: .4byte sPlayerSpeedState +_08034090: .4byte gNumSingleplayerCharacters +_08034094: .4byte gPartner + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_6__Task_EggSnakeInit.inc b/sa1/asm/non_matching/game/enemies/boss_6__Task_EggSnakeInit.inc new file mode 100644 index 0000000000..c127c20153 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_6__Task_EggSnakeInit.inc @@ -0,0 +1,217 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + ldr r0, _080322B8 @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r2, r0 + adds r0, #0xc + adds r0, r0, r2 + mov r8, r0 + ldr r1, _080322BC @ =0x03000044 + adds r6, r2, r1 + ldr r4, [r5] + ldr r3, _080322C0 @ =0x03000098 + adds r0, r2, r3 + ldrh r0, [r0] + cmp r0, #0x78 + bne _080321FC + adds r1, #0x65 + adds r0, r2, r1 + ldrb r0, [r0] + cmp r0, #0 + bne _080321FC + bl sub_8033878 + bl sub_803330C +_080321FC: + ldr r1, _080322C4 @ =gSineTable + adds r0, r5, #0 + adds r0, #0xa0 + movs r2, #0 + ldrsh r0, [r0, r2] + lsls r0, r0, #1 + adds r0, r0, r1 + movs r3, #0 + ldrsh r2, [r0, r3] + lsls r0, r2, #4 + subs r0, r0, r2 + asrs r2, r0, #0xb + ldrb r1, [r5, #8] + lsls r1, r1, #3 + ldrh r0, [r5, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r0, [r5, #0x78] + asrs r0, r0, #8 + adds r1, r1, r0 + adds r1, r1, r2 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + mov ip, r1 + adds r0, r2, #0 + adds r0, #0x90 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + cmp r2, #0 + bge _0803223A + adds r2, #0x1f +_0803223A: + ldr r0, _080322C8 @ =gUnknown_03005870 + asrs r2, r2, #5 + lsls r2, r2, #1 + adds r2, r2, r0 + ldrb r1, [r4, #1] + lsls r1, r1, #3 + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r0, [r5, #0x7c] + asrs r0, r0, #8 + adds r1, r1, r0 + movs r0, #0 + ldrsh r2, [r2, r0] + adds r2, r2, r1 + ldr r7, _080322B8 @ =gCurTask + ldr r0, [r7] + ldrh r1, [r0, #6] + ldr r3, _080322CC @ =0x0300000C + adds r1, r1, r3 + ldr r4, _080322D0 @ =gCamera + ldrh r0, [r4] + mov sb, r0 + mov r3, ip + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + mov r3, sb + subs r0, r0, r3 + strh r0, [r1, #0x16] + ldrh r0, [r4, #2] + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + subs r2, r2, r0 + strh r2, [r1, #0x18] + mov r0, r8 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl UpdateSpriteAnimation + ldr r0, [r7] + ldrh r0, [r0, #6] + ldr r1, _080322CC @ =0x0300000C + adds r2, r0, r1 + ldr r3, _080322BC @ =0x03000044 + adds r0, r0, r3 + ldrh r1, [r2, #0x16] + strh r1, [r0, #0x16] + ldrh r1, [r2, #0x18] + strh r1, [r0, #0x18] + bl sub_8031ED0 + adds r3, r5, #0 + adds r3, #0xa9 + ldrb r0, [r3] + cmp r0, #1 + beq _08032300 + cmp r0, #1 + bgt _080322D4 + cmp r0, #0 + beq _080322DE + b _0803235E + .align 2, 0 +_080322B8: .4byte gCurTask +_080322BC: .4byte 0x03000044 +_080322C0: .4byte 0x03000098 +_080322C4: .4byte gSineTable +_080322C8: .4byte gUnknown_03005870 +_080322CC: .4byte 0x0300000C +_080322D0: .4byte gCamera +_080322D4: + cmp r0, #2 + beq _0803231A + cmp r0, #3 + beq _0803233E + b _0803235E +_080322DE: + adds r2, r5, #0 + adds r2, #0x98 + ldrh r0, [r2] + subs r0, #1 + strh r0, [r2] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _0803235E + ldr r1, _080322FC @ =gMusicManagerState + movs r0, #0x13 + strb r0, [r1, #1] + movs r0, #0x3c + strh r0, [r2] + b _08032336 + .align 2, 0 +_080322FC: .4byte gMusicManagerState +_08032300: + adds r1, r5, #0 + adds r1, #0x98 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _0803235E + adds r1, r6, #0 + adds r1, #0x20 + movs r0, #4 + strb r0, [r1] + b _08032336 +_0803231A: + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + beq _0803235E + adds r1, r6, #0 + adds r1, #0x20 + movs r0, #3 + strb r0, [r1] + adds r1, r5, #0 + adds r1, #0x98 + movs r0, #0x3c + strh r0, [r1] +_08032336: + ldrb r0, [r3] + adds r0, #1 + strb r0, [r3] + b _0803235E +_0803233E: + adds r1, r5, #0 + adds r1, #0x98 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _0803235E + adds r1, #0x10 + movs r0, #0xff + strb r0, [r1] + movs r0, #0 + strb r0, [r3] + ldr r1, [r7] + ldr r0, _0803236C @ =Task_8032370 + str r0, [r1, #8] +_0803235E: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0803236C: .4byte Task_8032370 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x1__Task_803491C.inc b/sa1/asm/non_matching/game/enemies/boss_x1__Task_803491C.inc new file mode 100644 index 0000000000..1280d00f9e --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x1__Task_803491C.inc @@ -0,0 +1,302 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _08034A1C @ =gCurTask + mov sl, r0 + ldr r0, [r0] + ldrh r5, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r5, r0 + ldr r1, _08034A20 @ =0x0300000C + adds r1, r1, r5 + mov r8, r1 + ldr r2, _08034A24 @ =0x0300003C + adds r2, r2, r5 + mov sb, r2 + ldr r0, [r4, #0x6c] + ldr r1, [r4, #0x74] + adds r0, r0, r1 + str r0, [r4, #0x6c] + ldr r0, [r4, #0x70] + ldr r1, [r4, #0x78] + adds r0, r0, r1 + str r0, [r4, #0x70] + ldr r3, _08034A28 @ =0x03000088 + adds r6, r5, r3 + ldrh r1, [r6] + subs r1, #4 + ldr r2, _08034A2C @ =0x000003FF + ands r1, r2 + strh r1, [r6] + ldr r0, _08034A30 @ =0x000001FF + ands r0, r1 + movs r7, #0x80 + lsls r7, r7, #1 + cmp r0, r7 + bne _08034980 + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + eors r0, r1 + mov r3, r8 + str r0, [r3, #0x10] + mov r3, sb + ldr r0, [r3, #0x10] + eors r0, r1 + str r0, [r3, #0x10] +_08034980: + movs r1, #0 + ldrsh r0, [r6, r1] + adds r0, r0, r7 + lsls r0, r0, #1 + ldr r3, _08034A34 @ =gSineTable + ands r0, r2 + adds r0, r0, r7 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrh r1, [r0] + lsls r1, r1, #0x10 + ldr r0, _08034A38 @ =0x0300007C + adds r2, r5, r0 + ldr r0, [r4, #0x6c] + asrs r0, r0, #8 + ldrh r2, [r2] + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov ip, r0 + ldr r0, _08034A3C @ =0x0300007E + adds r2, r5, r0 + ldr r0, [r4, #0x70] + asrs r0, r0, #8 + ldrh r2, [r2] + adds r0, r0, r2 + asrs r1, r1, #0x1d + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r2, r1, #0x10 + ldr r1, _08034A40 @ =0x03000080 + adds r0, r5, r1 + mov r1, ip + strh r1, [r0] + ldr r1, _08034A44 @ =0x03000082 + adds r0, r5, r1 + strh r2, [r0] + movs r1, #0 + ldrsh r0, [r6, r1] + adds r0, r0, r7 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrh r1, [r0] + lsls r0, r1, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xff + ble _080349E6 + movs r1, #0xff +_080349E6: + lsls r0, r1, #0x10 + movs r3, #0xc0 + lsls r3, r3, #0x12 + adds r0, r0, r3 + lsrs r1, r0, #0x10 + adds r3, #0x8a + adds r0, r5, r3 + strh r1, [r0] + mov r1, ip + lsls r0, r1, #0x10 + asrs r6, r0, #0x10 + lsls r0, r2, #0x10 + asrs r7, r0, #0x10 + adds r0, r6, #0 + adds r1, r7, #0 + bl sub_80342A0 + ldr r2, _08034A48 @ =0x03000086 + adds r0, r5, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + ble _08034A4C + bl sub_8034B7C + b _08034B6C + .align 2, 0 +_08034A1C: .4byte gCurTask +_08034A20: .4byte 0x0300000C +_08034A24: .4byte 0x0300003C +_08034A28: .4byte 0x03000088 +_08034A2C: .4byte 0x000003FF +_08034A30: .4byte 0x000001FF +_08034A34: .4byte gSineTable +_08034A38: .4byte 0x0300007C +_08034A3C: .4byte 0x0300007E +_08034A40: .4byte 0x03000080 +_08034A44: .4byte 0x03000082 +_08034A48: .4byte 0x03000086 +_08034A4C: + mov r0, sl + ldr r3, [r0] + ldrh r1, [r3, #6] + ldr r2, _08034AD4 @ =0x0300000C + adds r1, r1, r2 + ldr r2, _08034AD8 @ =gCamera + ldrh r0, [r2] + subs r0, r6, r0 + strh r0, [r1, #0x16] + ldrh r0, [r2, #2] + subs r0, r7, r0 + strh r0, [r1, #0x18] +@ sub_80358C8 - inlined + ldrh r3, [r3, #6] + ldr r0, _08034ADC @ =0x0300003C + adds r1, r3, r0 + adds r0, #0x20 + adds r2, r3, r0 + ldrb r0, [r2] + cmp r0, #0 + beq _08034A8C + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + beq _08034A8C + movs r0, #0 + strb r0, [r2] + ldr r2, _08034AE0 @ =0x0300005D + adds r1, r3, r2 + movs r0, #0xff + strb r0, [r1] +_08034A8C: + mov r0, r8 + bl UpdateSpriteAnimation + mov r0, sb + bl UpdateSpriteAnimation +@ sub_8035904 inlined + ldr r0, _08034AE4 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r3, _08034AD4 @ =0x0300000C + adds r1, r0, r3 + adds r3, #0x30 + adds r2, r0, r3 + ldrh r0, [r1, #0x16] + movs r5, #0 + strh r0, [r2, #0x16] + ldrh r3, [r1, #0x18] + strh r3, [r2, #0x18] + ldrh r1, [r2, #0xa] + ldr r0, _08034AE8 @ =0x000002B6 + cmp r1, r0 + bne _08034ABC + subs r0, r3, #3 + strh r0, [r2, #0x18] +_08034ABC: + bl sub_80343E0 + adds r2, r4, #0 + adds r2, #0x8d + ldrb r0, [r2] + cmp r0, #1 + beq _08034B1C + cmp r0, #1 + bgt _08034AEC + cmp r0, #0 + beq _08034AF6 + b _08034B6C + .align 2, 0 +_08034AD4: .4byte 0x0300000C +_08034AD8: .4byte gCamera +_08034ADC: .4byte 0x0300003C +_08034AE0: .4byte 0x0300005D +_08034AE4: .4byte gCurTask +_08034AE8: .4byte 0x000002B6 +_08034AEC: + cmp r0, #2 + beq _08034B36 + cmp r0, #3 + beq _08034B4E + b _08034B6C +_08034AF6: + adds r0, r4, #0 + adds r0, #0x88 + ldr r3, _08034B14 @ =0xFFFFFEFF + adds r1, r3, #0 + ldrh r0, [r0] + adds r1, r1, r0 + lsls r1, r1, #0x10 + ldr r0, _08034B18 @ =0x01FF0000 + cmp r1, r0 + bhi _08034B6C + str r5, [r4, #0x74] + ldrb r0, [r2] + adds r0, #1 + b _08034B6A + .align 2, 0 +_08034B14: .4byte 0xFFFFFEFF +_08034B18: .4byte 0x01FF0000 +_08034B1C: + adds r0, r4, #0 + adds r0, #0x88 + movs r3, #0 + ldrsh r1, [r0, r3] + movs r0, #0x80 + lsls r0, r0, #2 + cmp r1, r0 + bgt _08034B6C + movs r0, #0xc0 + str r0, [r4, #0x74] + ldrb r0, [r2] + adds r0, #1 + b _08034B6A +_08034B36: + adds r0, r4, #0 + adds r0, #0x88 + movs r3, #0 + ldrsh r1, [r0, r3] + movs r0, #0x80 + lsls r0, r0, #1 + cmp r1, r0 + bgt _08034B6C + str r5, [r4, #0x74] + ldrb r0, [r2] + adds r0, #1 + b _08034B6A +_08034B4E: + adds r0, r4, #0 + adds r0, #0x88 + movs r3, #0 + ldrsh r1, [r0, r3] + cmp r1, #0 + beq _08034B62 + movs r0, #0x80 + lsls r0, r0, #1 + cmp r1, r0 + ble _08034B6C +_08034B62: + movs r0, #0xc0 + rsbs r0, r0, #0 + str r0, [r4, #0x74] + movs r0, #0 +_08034B6A: + strb r0, [r2] +_08034B6C: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x1__Task_80352C0.inc b/sa1/asm/non_matching/game/enemies/boss_x1__Task_80352C0.inc new file mode 100644 index 0000000000..38958717e8 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x1__Task_80352C0.inc @@ -0,0 +1,77 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + movs r5, #0 + ldr r0, _0803534C @ =gCurTask + ldr r2, [r0] + ldrh r0, [r2, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r3, r0, r1 + ldrh r0, [r2] + adds r0, r0, r1 + ldrh r0, [r0, #6] + adds r7, r0, r1 + adds r4, r3, #0 + ldrh r0, [r4, #0x30] + cmp r0, #0 + beq _080352EA + subs r0, #1 + strh r0, [r4, #0x30] + ldrh r0, [r4, #0x30] + lsls r0, r0, #8 + lsrs r5, r0, #0xb +_080352EA: + lsls r1, r5, #0x10 + rsbs r1, r1, #0 + adds r0, r7, #0 + adds r0, #0x80 + ldrh r0, [r0] + strh r0, [r3, #0x3c] + adds r0, r7, #0 + adds r0, #0x82 + ldrh r0, [r0] + strh r0, [r3, #0x3e] + asrs r1, r1, #0x10 + adds r1, r1, r0 + ldr r2, _08035350 @ =gCamera + ldrh r0, [r2] + movs r5, #0x3c + ldrsh r6, [r3, r5] + subs r0, r6, r0 + strh r0, [r4, #0x16] + ldrh r0, [r2, #2] + lsls r1, r1, #0x10 + asrs r5, r1, #0x10 + subs r0, r5, r0 + strh r0, [r4, #0x18] + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + adds r0, r7, #0 + adds r0, #0x86 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + ble _08035346 + lsls r0, r6, #8 + adds r1, r5, #0 + adds r1, #0x14 + lsls r1, r1, #8 + bl sub_8017540 + ldr r0, _0803534C @ =gCurTask + ldr r0, [r0] + bl TaskDestroy +_08035346: + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0803534C: .4byte gCurTask +_08035350: .4byte gCamera + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x1__Task_8035354.inc b/sa1/asm/non_matching/game/enemies/boss_x1__Task_8035354.inc new file mode 100644 index 0000000000..776e32b79b --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x1__Task_8035354.inc @@ -0,0 +1,94 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, lr} + ldr r0, _080353A0 @ =gCurTask + ldr r3, [r0] + ldrh r2, [r3, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r5, r2, r1 + ldrh r0, [r3] + adds r0, r0, r1 + ldrh r0, [r0, #6] + adds r6, r0, r1 + adds r4, r5, #0 + ldrh r0, [r4, #0x30] + subs r0, #1 + strh r0, [r4, #0x30] + lsls r0, r0, #0x10 + cmp r0, #0 + beq _080353A4 + adds r1, #0x40 + adds r0, r2, r1 + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r2, r0, #1 + adds r1, r2, #0 + adds r1, #0x15 + ldrh r0, [r4, #0x30] + lsls r0, r0, #8 + asrs r0, r0, #6 + muls r0, r1, r0 + lsls r0, r0, #8 + asrs r0, r0, #0x10 + subs r0, #0x23 + subs r0, r2, r0 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + b _080353C0 + .align 2, 0 +_080353A0: .4byte gCurTask +_080353A4: + ldr r1, _08035400 @ =0x03000040 + adds r0, r2, r1 + ldrb r0, [r0] + lsls r1, r0, #3 + subs r0, r1, r0 + lsls r0, r0, #0x11 + movs r2, #0x8c + lsls r2, r2, #0xe + adds r0, r0, r2 + lsrs r2, r0, #0x10 + adds r1, #8 + strh r1, [r4, #0x30] + ldr r0, _08035404 @ =Task_803540C + str r0, [r3, #8] +_080353C0: + adds r0, r6, #0 + adds r0, #0x80 + ldrh r0, [r0] + strh r0, [r5, #0x3c] + adds r0, r6, #0 + adds r0, #0x82 + ldrh r0, [r0] + strh r0, [r5, #0x3e] + lsls r1, r2, #0x10 + asrs r1, r1, #0x10 + adds r1, r1, r0 + ldr r3, _08035408 @ =gCamera + ldrh r2, [r3] + movs r6, #0x3c + ldrsh r0, [r5, r6] + subs r0, r0, r2 + strh r0, [r4, #0x16] + ldrh r0, [r3, #2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r1, r1, r0 + strh r1, [r4, #0x18] + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + pop {r4, r5, r6} + pop {r0} + bx r0 + .align 2, 0 +_08035400: .4byte 0x03000040 +_08035404: .4byte Task_803540C +_08035408: .4byte gCamera + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x1__Task_803540C.inc b/sa1/asm/non_matching/game/enemies/boss_x1__Task_803540C.inc new file mode 100644 index 0000000000..c2802651bd --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x1__Task_803540C.inc @@ -0,0 +1,113 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r0, _080354D8 @ =gCurTask + mov r8, r0 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r6, r1, r2 + ldrh r0, [r0] + adds r0, r0, r2 + ldrh r4, [r0, #6] + adds r2, #0x40 + adds r1, r1, r2 + ldrb r0, [r1] + lsls r1, r0, #3 + subs r1, r1, r0 + lsls r1, r1, #0x11 + movs r3, #0xd0 + lsls r3, r3, #0xc + adds r1, r1, r3 + asrs r1, r1, #0x10 + ldr r5, _080354DC @ =gSineTable + ldr r0, _080354E0 @ =0x0300008A + adds r3, r4, r0 + movs r2, #0 + ldrsh r0, [r3, r2] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + adds r0, r0, r5 + movs r2, #0 + ldrsh r0, [r0, r2] + adds r2, r1, #0 + muls r2, r0, r2 + lsls r2, r2, #2 + ldrh r3, [r3] + ldr r0, _080354E4 @ =0x000001FF + ands r0, r3 + lsls r0, r0, #1 + adds r0, r0, r5 + movs r3, #0 + ldrsh r0, [r0, r3] + muls r0, r1, r0 + lsls r0, r0, #2 + ldr r5, _080354E8 @ =0x03000080 + adds r1, r4, r5 + ldrh r3, [r1] + strh r3, [r6, #0x3c] + adds r5, #2 + adds r1, r4, r5 + ldrh r1, [r1] + strh r1, [r6, #0x3e] + asrs r2, r2, #0x10 + adds r2, r2, r3 + asrs r0, r0, #0x10 + adds r0, #0x16 + adds r1, r1, r0 + ldr r3, _080354EC @ =gCamera + ldrh r0, [r3] + lsls r2, r2, #0x10 + asrs r7, r2, #0x10 + subs r0, r7, r0 + strh r0, [r6, #0x16] + ldrh r0, [r3, #2] + lsls r1, r1, #0x10 + asrs r5, r1, #0x10 + subs r0, r5, r0 + strh r0, [r6, #0x18] + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl DisplaySprite + ldr r0, _080354F0 @ =0x03000086 + adds r4, r4, r0 + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, #3 + ble _080354CE + ldrh r0, [r6, #0x30] + subs r0, #1 + strh r0, [r6, #0x30] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _080354CE + lsls r0, r7, #8 + lsls r1, r5, #8 + bl sub_8017540 + mov r1, r8 + ldr r0, [r1] + bl TaskDestroy +_080354CE: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080354D8: .4byte gCurTask +_080354DC: .4byte gSineTable +_080354E0: .4byte 0x0300008A +_080354E4: .4byte 0x000001FF +_080354E8: .4byte 0x03000080 +_080354EC: .4byte gCamera +_080354F0: .4byte 0x03000086 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x1__Task_80354F4.inc b/sa1/asm/non_matching/game/enemies/boss_x1__Task_80354F4.inc new file mode 100644 index 0000000000..6398a3d72a --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x1__Task_80354F4.inc @@ -0,0 +1,79 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, lr} + ldr r0, _08035534 @ =gCurTask + ldr r2, [r0] + ldrh r0, [r2, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r5, r0, r1 @ r5 = boss_44 + ldrh r0, [r2] + adds r0, r0, r1 + ldrh r0, [r0, #6] + adds r3, r0, r1 @ r3 = boss + adds r4, r5, #0 @ r4 = s + ldrh r0, [r4, #0x30] + subs r0, #1 + strh r0, [r4, #0x30] + lsls r0, r0, #0x10 + cmp r0, #0 + beq _08035538 + ldrh r0, [r4, #0x30] + lsls r0, r0, #8 + asrs r0, r0, #6 + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r0, r1, #5 + subs r0, r0, r1 + lsls r0, r0, #8 + movs r1, #0x63 + asrs r0, r0, #0x10 + subs r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + b _08035542 + .align 2, 0 +_08035534: .4byte gCurTask +_08035538: + movs r1, #0x63 + movs r0, #0x3c + strh r0, [r4, #0x30] + ldr r0, _08035580 @ =Task_8035588 + str r0, [r2, #8] +_08035542: + adds r0, r3, #0 + adds r0, #0x80 + ldrh r0, [r0] + strh r0, [r5, #0x3c] + adds r0, r3, #0 + adds r0, #0x82 + ldrh r0, [r0] + strh r0, [r5, #0x3e] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + adds r1, r1, r0 + ldr r3, _08035584 @ =gCamera + ldrh r2, [r3] + movs r6, #0x3c + ldrsh r0, [r5, r6] + subs r0, r0, r2 + strh r0, [r4, #0x16] + ldrh r0, [r3, #2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r1, r1, r0 + strh r1, [r4, #0x18] + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + pop {r4, r5, r6} + pop {r0} + bx r0 + .align 2, 0 +_08035580: .4byte Task_8035588 +_08035584: .4byte gCamera + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x1__Task_8035588.inc b/sa1/asm/non_matching/game/enemies/boss_x1__Task_8035588.inc new file mode 100644 index 0000000000..5ec31259d0 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x1__Task_8035588.inc @@ -0,0 +1,227 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r0, _08035654 @ =gCurTask + ldr r5, [r0] + ldrh r0, [r5, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + mov r8, r0 + ldrh r0, [r5] + adds r0, r0, r1 + ldrh r3, [r0, #6] + adds r1, r3, r1 + str r1, [sp] + mov sb, r8 + movs r0, #0x4d + mov sl, r0 + ldr r4, _08035658 @ =gSineTable + ldr r1, _0803565C @ =0x0300008A + adds r2, r3, r1 + movs r6, #0 + ldrsh r0, [r2, r6] + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + adds r0, r0, r4 + movs r6, #0 + ldrsh r0, [r0, r6] + mov r1, sl + muls r1, r0, r1 + ldrh r2, [r2] + ldr r0, _08035660 @ =0x000001FF + ands r0, r2 + lsls r0, r0, #1 + adds r0, r0, r4 + movs r2, #0 + ldrsh r0, [r0, r2] + mov r2, sl + muls r2, r0, r2 + ldr r4, _08035664 @ =0x03000080 + adds r0, r3, r4 + ldrh r4, [r0] + mov r6, r8 + strh r4, [r6, #0x3c] + ldr r6, _08035668 @ =0x03000082 + adds r0, r3, r6 + ldrh r0, [r0] + mov r6, r8 + strh r0, [r6, #0x3e] + asrs r1, r1, #0xe + adds r1, r1, r4 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #4] + asrs r2, r2, #0xe + adds r2, #0x16 + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sl, r0 + ldr r0, _0803566C @ =0x03000086 + adds r3, r3, r0 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #3 + bgt _080356B0 + ldrh r0, [r5, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r6, r0, r1 + ldr r2, [sp, #4] + lsls r0, r2, #0x10 + asrs r5, r0, #0x10 + mov r3, sl + lsls r0, r3, #0x10 + asrs r4, r0, #0x10 + ldr r3, _08035670 @ =gPlayer + adds r0, r6, #0 + adds r1, r5, #0 + adds r2, r4, #0 + bl sub_800BF10 + adds r7, r0, #0 + ldr r0, _08035674 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _0803567C + ldr r3, _08035678 @ =gPartner + adds r0, r6, #0 + adds r1, r5, #0 + adds r2, r4, #0 + bl sub_800BF10 + b _0803567E + .align 2, 0 +_08035654: .4byte gCurTask +_08035658: .4byte gSineTable +_0803565C: .4byte 0x0300008A +_08035660: .4byte 0x000001FF +_08035664: .4byte 0x03000080 +_08035668: .4byte 0x03000082 +_0803566C: .4byte 0x03000086 +_08035670: .4byte gPlayer +_08035674: .4byte gNumSingleplayerCharacters +_08035678: .4byte gPartner +_0803567C: + movs r0, #0 +_0803567E: + cmp r7, #2 + beq _08035686 + cmp r0, #2 + bne _080356B0 +_08035686: + ldr r0, _08035744 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0] + movs r4, #0xc0 + lsls r4, r4, #0x12 + adds r0, r0, r4 + ldrh r1, [r0, #6] + ldr r6, _08035748 @ =0x0300003C + adds r3, r1, r6 + ldr r0, _0803574C @ =0x0300005C + adds r2, r1, r0 + movs r0, #1 + strb r0, [r2] + ldr r2, _08035750 @ =0x0300005D + adds r1, r1, r2 + movs r0, #0xff + strb r0, [r1] + ldr r0, [r3, #0x10] + ldr r1, _08035754 @ =0xFFFFBFFF + ands r0, r1 + str r0, [r3, #0x10] +_080356B0: + ldr r2, _08035758 @ =gCamera + ldrh r0, [r2] + ldr r3, [sp, #4] + lsls r1, r3, #0x10 + asrs r4, r1, #0x10 + subs r0, r4, r0 + mov r6, sb + strh r0, [r6, #0x16] + ldrh r0, [r2, #2] + mov r2, sl + lsls r1, r2, #0x10 + asrs r5, r1, #0x10 + subs r0, r5, r0 + strh r0, [r6, #0x18] + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + bl DisplaySprite + ldr r0, [sp] + adds r0, #0x86 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + ble _08035732 + mov r3, r8 + ldrh r1, [r3, #0x30] + movs r0, #7 + ands r0, r1 + cmp r0, #0 + bne _0803571C + ldr r2, _0803575C @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _08035760 @ =0x00196225 + muls r1, r0, r1 + ldr r6, _08035764 @ =0x3C6EF35F + adds r1, r1, r6 + str r1, [r2] + movs r0, #0x1f + ands r0, r1 + adds r0, r4, r0 + subs r0, #0xf + lsls r0, r0, #8 + movs r2, #0xf8 + lsls r2, r2, #0xd + ands r1, r2 + asrs r1, r1, #0x10 + adds r1, r5, r1 + subs r1, #0xf + lsls r1, r1, #8 + bl sub_8017540 +_0803571C: + mov r1, r8 + ldrh r0, [r1, #0x30] + subs r0, #1 + strh r0, [r1, #0x30] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _08035732 + ldr r0, _08035744 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy +_08035732: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08035744: .4byte gCurTask +_08035748: .4byte 0x0300003C +_0803574C: .4byte 0x0300005C +_08035750: .4byte 0x0300005D +_08035754: .4byte 0xFFFFBFFF +_08035758: .4byte gCamera +_0803575C: .4byte gPseudoRandom +_08035760: .4byte 0x00196225 +_08035764: .4byte 0x3C6EF35F + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x3__Task_803775C.inc b/sa1/asm/non_matching/game/enemies/boss_x3__Task_803775C.inc new file mode 100644 index 0000000000..985b9019b4 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x3__Task_803775C.inc @@ -0,0 +1,1090 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x24 + movs r0, #0 + str r0, [sp, #8] + ldr r0, _080377AC @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r6, r2, r1 + ldr r3, _080377B0 @ =0x0300009C + adds r0, r2, r3 + ldr r0, [r0] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sl, r0 + ldr r4, _080377B4 @ =0x0300000C + adds r7, r2, r4 + ldr r0, _080377B8 @ =0x03000044 + adds r0, r2, r0 + str r0, [sp, #4] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _080377C0 + ldr r1, _080377BC @ =0x03000084 + adds r0, r2, r1 + ldr r1, [r6, #0x7c] + ldr r0, [r0] + adds r1, r1, r0 + str r1, [r6, #0x7c] + ldr r0, [r6, #0x74] + subs r0, r0, r1 + b _080377D0 + .align 2, 0 +_080377AC: .4byte gCurTask +_080377B0: .4byte 0x0300009C +_080377B4: .4byte 0x0300000C +_080377B8: .4byte 0x03000044 +_080377BC: .4byte 0x03000084 +_080377C0: + ldr r3, _08037830 @ =0x03000084 + adds r0, r2, r3 + ldr r1, [r6, #0x7c] + ldr r0, [r0] + adds r1, r1, r0 + str r1, [r6, #0x7c] + ldr r0, [r6, #0x74] + adds r0, r0, r1 +_080377D0: + str r0, [r6, #0x74] + adds r3, r6, #0 + adds r3, #0x80 + ldr r1, [r6, #0x78] + ldr r0, [r3] + adds r1, r1, r0 + str r1, [r6, #0x78] + adds r2, r6, #0 + adds r2, #0x88 + ldr r0, [r6, #0x74] + asrs r0, r0, #8 + ldrh r2, [r2] + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + adds r0, r6, #0 + adds r0, #0x8a + asrs r1, r1, #8 + ldrh r0, [r0] + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r4, r1, #0x10 + ldr r0, [r3] + cmp r0, #0 + bne _0803783C + adds r2, r6, #0 + adds r2, #0x90 + ldrh r0, [r2] + adds r0, #8 + ldr r1, _08037834 @ =0x000003FF + ands r0, r1 + strh r0, [r2] + ldr r1, _08037838 @ =gSineTable + ldrh r0, [r2] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r1, [r0] + lsls r1, r1, #0x10 + asrs r1, r1, #0x1c + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + b _08037844 + .align 2, 0 +_08037830: .4byte 0x03000084 +_08037834: .4byte 0x000003FF +_08037838: .4byte gSineTable +_0803783C: + adds r1, r6, #0 + adds r1, #0x90 + movs r0, #0 + strh r0, [r1] +_08037844: + adds r0, r6, #0 + adds r0, #0x8c + strh r5, [r0] + adds r0, #2 + strh r4, [r0] + lsls r5, r5, #0x10 + asrs r3, r5, #0x10 + mov r8, r3 + lsls r4, r4, #0x10 + asrs r0, r4, #0x10 + mov sb, r0 + mov r0, r8 + mov r1, sb + bl sub_8036E20 + adds r0, r6, #0 + adds r0, #0x94 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + str r4, [sp, #0x20] + str r5, [sp, #0x1c] + cmp r0, #7 + ble _0803787A + bl sub_803803C + b _0803802A +_0803787A: + ldr r0, _080378FC @ =gCurTask + ldr r3, [r0] + ldrh r1, [r3, #6] + ldr r2, _08037900 @ =0x0300000C + adds r1, r1, r2 + ldr r2, _08037904 @ =gCamera + ldrh r0, [r2] + mov r4, r8 + subs r0, r4, r0 + strh r0, [r1, #0x16] + ldrh r0, [r2, #2] + mov r2, sb + subs r0, r2, r0 + strh r0, [r1, #0x18] + ldrh r2, [r3, #6] + ldr r3, _08037908 @ =0x03000044 + adds r1, r2, r3 + ldr r4, _0803790C @ =0x03000064 + adds r3, r2, r4 + ldrb r0, [r3] + cmp r0, #0 + beq _080378BE + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + beq _080378BE + movs r0, #0 + strb r0, [r3] + ldr r0, _08037910 @ =0x03000065 + adds r1, r2, r0 + movs r0, #0xff + strb r0, [r1] +_080378BE: + adds r0, r7, #0 + bl UpdateSpriteAnimation + ldr r0, [sp, #4] + bl UpdateSpriteAnimation + ldr r0, _080378FC @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r1, _08037900 @ =0x0300000C + adds r2, r0, r1 + ldr r3, _08037908 @ =0x03000044 + adds r0, r0, r3 + ldrh r1, [r2, #0x16] + strh r1, [r0, #0x16] + ldrh r1, [r2, #0x18] + strh r1, [r0, #0x18] + bl sub_80370B4 + adds r0, r6, #0 + adds r0, #0x99 + ldrb r1, [r0] + adds r5, r0, #0 + cmp r1, #0x42 + bls _080378F2 + b _0803802A +_080378F2: + lsls r0, r1, #2 + ldr r1, _08037914 @ =_08037918 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080378FC: .4byte gCurTask +_08037900: .4byte 0x0300000C +_08037904: .4byte gCamera +_08037908: .4byte 0x03000044 +_0803790C: .4byte 0x03000064 +_08037910: .4byte 0x03000065 +_08037914: .4byte _08037918 +_08037918: @ jump table + .4byte _08037A24 @ case 0 + .4byte _08037A88 @ case 1 + .4byte _08037ACA @ case 2 + .4byte _08037B02 @ case 3 + .4byte _08037B54 @ case 4 + .4byte _08038018 @ case 5 + .4byte _0803802A @ case 6 + .4byte _0803802A @ case 7 + .4byte _0803802A @ case 8 + .4byte _0803802A @ case 9 + .4byte _0803802A @ case 10 + .4byte _0803802A @ case 11 + .4byte _0803802A @ case 12 + .4byte _0803802A @ case 13 + .4byte _0803802A @ case 14 + .4byte _0803802A @ case 15 + .4byte _08037B6A @ case 16 + .4byte _08037B8C @ case 17 + .4byte _0803802A @ case 18 + .4byte _0803802A @ case 19 + .4byte _0803802A @ case 20 + .4byte _0803802A @ case 21 + .4byte _0803802A @ case 22 + .4byte _0803802A @ case 23 + .4byte _0803802A @ case 24 + .4byte _0803802A @ case 25 + .4byte _0803802A @ case 26 + .4byte _0803802A @ case 27 + .4byte _0803802A @ case 28 + .4byte _0803802A @ case 29 + .4byte _0803802A @ case 30 + .4byte _0803802A @ case 31 + .4byte _08037BF2 @ case 32 + .4byte _0803802A @ case 33 + .4byte _0803802A @ case 34 + .4byte _0803802A @ case 35 + .4byte _0803802A @ case 36 + .4byte _0803802A @ case 37 + .4byte _0803802A @ case 38 + .4byte _0803802A @ case 39 + .4byte _0803802A @ case 40 + .4byte _0803802A @ case 41 + .4byte _0803802A @ case 42 + .4byte _0803802A @ case 43 + .4byte _0803802A @ case 44 + .4byte _0803802A @ case 45 + .4byte _0803802A @ case 46 + .4byte _0803802A @ case 47 + .4byte _08037E88 @ case 48 + .4byte _0803802A @ case 49 + .4byte _08037E92 @ case 50 + .4byte _08037E96 @ case 51 + .4byte _08037EAC @ case 52 + .4byte _08037F18 @ case 53 + .4byte _0803802A @ case 54 + .4byte _0803802A @ case 55 + .4byte _0803802A @ case 56 + .4byte _0803802A @ case 57 + .4byte _0803802A @ case 58 + .4byte _0803802A @ case 59 + .4byte _0803802A @ case 60 + .4byte _0803802A @ case 61 + .4byte _0803802A @ case 62 + .4byte _0803802A @ case 63 + .4byte _08037F54 @ case 64 + .4byte _08037F80 @ case 65 + .4byte _08037FE4 @ case 66 +_08037A24: + adds r1, r6, #0 + adds r1, #0x9a + movs r0, #0 + strb r0, [r1] + mov r1, sl + adds r1, #0x79 + movs r0, #8 + strb r0, [r1] + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + ldr r2, _08037A5C @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _08037A60 @ =0x00196225 + muls r0, r1, r0 + ldr r4, _08037A64 @ =0x3C6EF35F + adds r0, r0, r4 + str r0, [r2] + movs r1, #0x30 + ands r0, r1 + lsrs r0, r0, #4 + cmp r0, #1 + beq _08037A78 + cmp r0, #1 + bgt _08037A68 + cmp r0, #0 + beq _08037A70 + b _08037A88 + .align 2, 0 +_08037A5C: .4byte gPseudoRandom +_08037A60: .4byte 0x00196225 +_08037A64: .4byte 0x3C6EF35F +_08037A68: + cmp r0, #2 + beq _08037A80 + cmp r0, #3 + bne _08037A88 +_08037A70: + adds r1, r6, #0 + adds r1, #0x92 + movs r0, #0x5a + b _08037A86 +_08037A78: + adds r1, r6, #0 + adds r1, #0x92 + movs r0, #0xb4 + b _08037A86 +_08037A80: + adds r1, r6, #0 + adds r1, #0x92 + movs r0, #0xf0 +_08037A86: + strh r0, [r1] +_08037A88: + adds r4, r6, #0 + adds r4, #0x92 + ldrh r0, [r4] + subs r0, #1 + strh r0, [r4] + lsls r0, r0, #0x10 + cmp r0, #0 + beq _08037A9A + b _0803802A +_08037A9A: + ldr r7, [sp, #0x1c] + asrs r0, r7, #0x10 + bl sub_803711C + adds r1, r6, #0 + adds r1, #0x9a + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #4 + beq _08037ABA + movs r0, #0xa + strh r0, [r4] + ldrb r0, [r5] + adds r0, #1 + b _08038028 +_08037ABA: + mov r1, sl + adds r1, #0x79 + movs r0, #0xa + strb r0, [r1] + movs r0, #0x14 + strh r0, [r4] + movs r0, #0x40 + b _08038028 +_08037ACA: + mov r2, sl + adds r2, #0x7a + ldrb r1, [r2] + movs r0, #1 + ands r0, r1 + strb r0, [r2] + cmp r0, #0 + bne _08037ADC + b _0803802A +_08037ADC: + adds r2, r6, #0 + adds r2, #0x92 + ldrh r0, [r2] + subs r0, #1 + strh r0, [r2] + lsls r0, r0, #0x10 + cmp r0, #0 + beq _08037AEE + b _0803802A +_08037AEE: + movs r1, #0xa + movs r0, #0xa + strh r0, [r2] + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + mov r0, sl + adds r0, #0x79 + strb r1, [r0] + b _0803802A +_08037B02: + mov r0, sl + adds r0, #0x7a + ldrb r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + bne _08037B12 + b _0803802A +_08037B12: + adds r2, r6, #0 + adds r2, #0x92 + ldrh r0, [r2] + subs r0, #1 + strh r0, [r2] + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + cmp r3, #0 + beq _08037B26 + b _0803802A +_08037B26: + mov r1, sl + adds r1, #0x79 + movs r0, #0xd + strb r0, [r1] + adds r1, r6, #0 + adds r1, #0x9a + ldrb r0, [r1] + lsls r0, r0, #4 + strb r0, [r5] + ldrb r0, [r1] + cmp r0, #2 + bne _08037B4A + movs r0, #0x1e + strh r0, [r2] + movs r0, #0xac + bl m4aSongNumStart + b _0803802A +_08037B4A: + cmp r0, #1 + beq _08037B50 + b _0803802A +_08037B50: + strh r3, [r2] + b _0803802A +_08037B54: + mov r1, sl + adds r1, #0x79 + movs r2, #0 + movs r0, #0xf + strb r0, [r1] + adds r0, r6, #0 + adds r0, #0x9a + strb r2, [r0] + ldrb r0, [r5] + adds r0, #1 + b _08038028 +_08037B6A: + bl sub_803967C + adds r1, r6, #0 + adds r1, #0x92 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + movs r0, #0x80 + lsls r0, r0, #2 + str r0, [r6, #0x7c] + subs r1, #0xe + movs r0, #0x40 + rsbs r0, r0, #0 + str r0, [r1] + ldrb r0, [r5] + adds r0, #1 + b _08038028 +_08037B8C: + movs r2, #0 + ldr r0, [r6, #0x7c] + cmp r0, #0 + bgt _08037BA8 + adds r3, r6, #0 + adds r3, #0x84 + ldr r1, [r3] + adds r0, r1, #0 + cmp r1, #0 + bge _08037BA2 + adds r0, r1, #3 +_08037BA2: + asrs r0, r0, #2 + subs r0, r1, r0 + str r0, [r3] +_08037BA8: + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08037BC4 + ldr r0, [r6, #0x74] + ldr r1, _08037BC0 @ =0xFFFF8C00 + cmp r0, r1 + blt _08037BD2 + str r1, [r6, #0x74] + b _08037BD8 + .align 2, 0 +_08037BC0: .4byte 0xFFFF8C00 +_08037BC4: + ldr r0, [r6, #0x74] + movs r1, #0xe8 + lsls r1, r1, #7 + cmp r0, r1 + bgt _08037BD2 + str r1, [r6, #0x74] + movs r2, #0xff +_08037BD2: + cmp r2, #0 + bne _08037BD8 + b _0803802A +_08037BD8: + movs r1, #0 + str r1, [r6, #0x7c] + adds r0, r6, #0 + adds r0, #0x84 + str r1, [r0] + adds r0, #0xe + ldrh r0, [r0] + cmp r0, #0 + beq _08037BEE + movs r0, #4 + b _08038028 +_08037BEE: + movs r0, #0x10 + b _08038028 +_08037BF2: + adds r1, r6, #0 + adds r1, #0x92 + ldrh r0, [r1] + subs r0, #1 + movs r4, #0 + strh r0, [r1] + lsls r0, r0, #0x10 + adds r3, r1, #0 + cmp r0, #0 + bne _08037C40 + movs r0, #4 + strb r0, [r5] + ldr r0, _08037C30 @ =gPlayer + ldr r0, [r0, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08037C20 + ldr r0, _08037C34 @ =gNumLives + ldrb r0, [r0] + cmp r0, #0 + bne _08037C20 + b _0803802A +_08037C20: + ldr r1, _08037C38 @ =gWinRegs + ldr r0, _08037C3C @ =0x00001F1F + strh r0, [r1, #8] + movs r0, #0xf0 + strh r0, [r1] + movs r0, #0xa0 + strh r0, [r1, #4] + b _0803802A + .align 2, 0 +_08037C30: .4byte gPlayer +_08037C34: .4byte gNumLives +_08037C38: .4byte gWinRegs +_08037C3C: .4byte 0x00001F1F +_08037C40: + ldr r0, _08037D54 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #0x80 + ands r1, r2 + adds r6, r0, #0 + cmp r1, #0 + beq _08037C56 + ldr r0, _08037D58 @ =gNumLives + ldrb r0, [r0] + cmp r0, #0 + beq _08037C5C +_08037C56: + ldr r1, _08037D5C @ =gWinRegs + ldr r0, _08037D60 @ =0x00003F3F + strh r0, [r1, #8] +_08037C5C: + movs r1, #0 + ldrsh r0, [r3, r1] + subs r0, #0xf + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0 + bge _08037C72 + rsbs r0, r0, #0 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 +_08037C72: + movs r0, #0xf + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r0, r1, #0x10 + lsrs r4, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xb + ble _08037C8C + movs r1, #0xc + movs r4, #0xb +_08037C8C: + ldrh r0, [r7, #0x18] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r2, r0, r1 + lsls r2, r2, #0x10 + lsrs r5, r2, #0x10 + adds r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r3, r1, #0x10 + asrs r1, r1, #0x10 + cmp r1, #0xa0 + ble _08037CA6 + movs r3, #0xa0 +_08037CA6: + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08037D80 + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08037CC4 + ldr r0, _08037D58 @ =gNumLives + ldrb r0, [r0] + cmp r0, #0 + beq _08037CDE +_08037CC4: + ldr r2, _08037D5C @ =gWinRegs + ldrh r0, [r7, #0x16] + adds r0, #0x20 + lsls r0, r0, #8 + movs r1, #0xf0 + orrs r0, r1 + strh r0, [r2] + lsls r1, r5, #0x10 + asrs r1, r1, #8 + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + orrs r0, r1 + strh r0, [r2, #4] +_08037CDE: + ldr r0, _08037D64 @ =gCamera + ldrh r5, [r0] + adds r5, #0x78 + ldrh r0, [r7, #0x16] + subs r0, #0x58 + lsls r4, r4, #0x10 + rsbs r3, r4, #0 + asrs r3, r3, #0x10 + movs r2, #0 + str r2, [sp, #0xc] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + ldr r1, _08037D68 @ =0xFFFFFF00 + ldr r7, [sp, #0x10] + ands r1, r7 + orrs r1, r0 + str r1, [sp, #0x10] + movs r0, #0xf0 + lsls r0, r0, #0xf + ldr r2, _08037D6C @ =0xFF00FFFF + ands r2, r1 + orrs r2, r0 + str r2, [sp, #0x10] + lsls r3, r3, #0x18 + lsrs r3, r3, #0x10 + ldr r0, _08037D70 @ =0xFFFF00FF + ands r0, r2 + orrs r0, r3 + str r0, [sp, #0x10] + lsls r4, r4, #8 + ldr r1, _08037D74 @ =0x00FFFFFF + ands r0, r1 + orrs r0, r4 + str r0, [sp, #0x10] + lsls r5, r5, #0x10 + asrs r5, r5, #0x10 + ldr r0, [sp, #0x20] + asrs r4, r0, #0x10 + str r6, [sp] + ldr r0, [sp, #0xc] + ldr r1, [sp, #0x10] + adds r2, r5, #0 + adds r3, r4, #0 + bl sub_800C1E8 + adds r6, r0, #0 + ldr r0, _08037D78 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + beq _08037D48 + b _08037E44 +_08037D48: + ldr r0, _08037D7C @ =gPartner + str r0, [sp] + ldr r0, [sp, #0xc] + ldr r1, [sp, #0x10] + b _08037E14 + .align 2, 0 +_08037D54: .4byte gPlayer +_08037D58: .4byte gNumLives +_08037D5C: .4byte gWinRegs +_08037D60: .4byte 0x00003F3F +_08037D64: .4byte gCamera +_08037D68: .4byte 0xFFFFFF00 +_08037D6C: .4byte 0xFF00FFFF +_08037D70: .4byte 0xFFFF00FF +_08037D74: .4byte 0x00FFFFFF +_08037D78: .4byte gNumSingleplayerCharacters +_08037D7C: .4byte gPartner +_08037D80: + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08037D92 + ldr r0, _08037E20 @ =gNumLives + ldrb r0, [r0] + cmp r0, #0 + beq _08037DA6 +_08037D92: + ldr r2, _08037E24 @ =gWinRegs + ldrh r0, [r7, #0x16] + subs r0, #0x20 + strh r0, [r2] + lsls r1, r5, #0x10 + asrs r1, r1, #8 + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + orrs r0, r1 + strh r0, [r2, #4] +_08037DA6: + ldr r0, _08037E28 @ =gCamera + ldrh r5, [r0] + adds r5, #0x78 + ldrh r2, [r7, #0x16] + subs r2, #0x98 + lsls r4, r4, #0x10 + rsbs r3, r4, #0 + asrs r3, r3, #0x10 + movs r0, #0 + str r0, [sp, #0x14] + movs r1, #0x88 + ldr r0, _08037E2C @ =0xFFFFFF00 + ldr r7, [sp, #0x18] + ands r0, r7 + orrs r0, r1 + str r0, [sp, #0x18] + lsls r2, r2, #0x18 + lsrs r2, r2, #8 + ldr r1, _08037E30 @ =0xFF00FFFF + ands r1, r0 + orrs r1, r2 + str r1, [sp, #0x18] + lsls r3, r3, #0x18 + lsrs r3, r3, #0x10 + ldr r0, _08037E34 @ =0xFFFF00FF + ands r0, r1 + orrs r0, r3 + str r0, [sp, #0x18] + lsls r4, r4, #8 + ldr r1, _08037E38 @ =0x00FFFFFF + ands r0, r1 + orrs r0, r4 + str r0, [sp, #0x18] + lsls r5, r5, #0x10 + asrs r5, r5, #0x10 + ldr r0, [sp, #0x20] + asrs r4, r0, #0x10 + str r6, [sp] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x18] + adds r2, r5, #0 + adds r3, r4, #0 + bl sub_800C1E8 + adds r6, r0, #0 + ldr r0, _08037E3C @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _08037E44 + ldr r0, _08037E40 @ =gPartner + str r0, [sp] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x18] +_08037E14: + adds r2, r5, #0 + adds r3, r4, #0 + bl sub_800C1E8 + b _08037E46 + .align 2, 0 +_08037E20: .4byte gNumLives +_08037E24: .4byte gWinRegs +_08037E28: .4byte gCamera +_08037E2C: .4byte 0xFFFFFF00 +_08037E30: .4byte 0xFF00FFFF +_08037E34: .4byte 0xFFFF00FF +_08037E38: .4byte 0x00FFFFFF +_08037E3C: .4byte gNumSingleplayerCharacters +_08037E40: .4byte gPartner +_08037E44: + movs r0, #0 +_08037E46: + orrs r6, r0 + cmp r6, #2 + beq _08037E4E + b _0803802A +_08037E4E: + ldr r0, _08037E74 @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + ldr r1, _08037E78 @ =0x03000044 + adds r3, r2, r1 + ldr r4, _08037E7C @ =0x03000064 + adds r1, r2, r4 + movs r0, #3 + strb r0, [r1] + ldr r0, [r3, #0x10] + ldr r1, _08037E80 @ =0xFFFFBFFF + ands r0, r1 + str r0, [r3, #0x10] + ldr r7, _08037E84 @ =0x03000065 + adds r2, r2, r7 + movs r0, #0xff + strb r0, [r2] + b _0803802A + .align 2, 0 +_08037E74: .4byte gCurTask +_08037E78: .4byte 0x03000044 +_08037E7C: .4byte 0x03000064 +_08037E80: .4byte 0xFFFFBFFF +_08037E84: .4byte 0x03000065 +_08037E88: + bl sub_8039940 + ldrb r0, [r5] + adds r0, #1 + b _08038028 +_08037E92: + movs r0, #4 + b _08038028 +_08037E96: + ldr r0, _08037EA8 @ =0xFFFFFE00 + str r0, [r6, #0x7c] + adds r1, r6, #0 + adds r1, #0x92 + movs r0, #0 + strh r0, [r1] + ldrb r0, [r5] + adds r0, #1 + b _08038028 + .align 2, 0 +_08037EA8: .4byte 0xFFFFFE00 +_08037EAC: + adds r3, r6, #0 + adds r3, #0x92 + ldrh r0, [r3] + cmp r0, #0 + beq _08037EC2 + mov r0, sl + adds r0, #0x79 + movs r2, #0 + movs r1, #0xf + strb r1, [r0] + strh r2, [r3] +_08037EC2: + movs r2, #0 + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08037EE4 + ldr r1, [r6, #0x74] + ldr r0, _08037EE0 @ =0x0000CFFF + cmp r1, r0 + ble _08037EF0 + adds r0, #1 + str r0, [sp, #8] + b _08037EF6 + .align 2, 0 +_08037EE0: .4byte 0x0000CFFF +_08037EE4: + ldr r0, [r6, #0x74] + ldr r1, _08037F14 @ =0xFFFF3000 + cmp r0, r1 + bgt _08037EF0 + str r1, [sp, #8] + movs r2, #0xff +_08037EF0: + cmp r2, #0 + bne _08037EF6 + b _0803802A +_08037EF6: + ldr r1, [sp, #8] + str r1, [r6, #0x74] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + eors r0, r1 + str r0, [r7, #0x10] + ldr r2, [sp, #4] + ldr r0, [r2, #0x10] + eors r0, r1 + str r0, [r2, #0x10] + ldrb r0, [r5] + adds r0, #1 + b _08038028 + .align 2, 0 +_08037F14: .4byte 0xFFFF3000 +_08037F18: + movs r2, #0 + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08037F38 + ldr r0, [r6, #0x74] + ldr r1, _08037F34 @ =0xFFFF8C00 + cmp r0, r1 + blt _08037F46 + str r1, [sp, #8] + b _08037F4A + .align 2, 0 +_08037F34: .4byte 0xFFFF8C00 +_08037F38: + ldr r0, [r6, #0x74] + movs r1, #0xe8 + lsls r1, r1, #7 + cmp r0, r1 + bgt _08037F46 + str r1, [sp, #8] + movs r2, #0xff +_08037F46: + cmp r2, #0 + beq _0803802A +_08037F4A: + ldr r3, [sp, #8] + str r3, [r6, #0x74] + movs r0, #0 + str r0, [r6, #0x7c] + b _08038028 +_08037F54: + mov r0, sl + adds r0, #0x7a + ldrb r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0803802A + adds r1, r6, #0 + adds r1, #0x92 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _0803802A + ldr r0, _08037F7C @ =0xFFFFFD00 + str r0, [r6, #0x7c] + ldrb r0, [r5] + adds r0, #1 + b _08038028 + .align 2, 0 +_08037F7C: .4byte 0xFFFFFD00 +_08037F80: + movs r2, #0 + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08037FA4 + ldr r1, [r6, #0x74] + ldr r0, _08037FA0 @ =0x0000CFFF + cmp r1, r0 + ble _08037FB0 + movs r4, #0xd0 + lsls r4, r4, #8 + str r4, [sp, #8] + b _08037FB4 + .align 2, 0 +_08037FA0: .4byte 0x0000CFFF +_08037FA4: + ldr r0, [r6, #0x74] + ldr r1, _08037FDC @ =0xFFFF3000 + cmp r0, r1 + bgt _08037FB0 + str r1, [sp, #8] + movs r2, #0xff +_08037FB0: + cmp r2, #0 + beq _0803802A +_08037FB4: + ldr r0, _08037FE0 @ =0xFFFFFE00 + str r0, [r6, #0x7c] + mov r1, sl + adds r1, #0x79 + movs r0, #0x13 + strb r0, [r1] + ldr r0, [sp, #8] + str r0, [r6, #0x74] + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + eors r0, r1 + str r0, [r7, #0x10] + ldr r2, [sp, #4] + ldr r0, [r2, #0x10] + eors r0, r1 + str r0, [r2, #0x10] + ldrb r0, [r5] + adds r0, #1 + b _08038028 + .align 2, 0 +_08037FDC: .4byte 0xFFFF3000 +_08037FE0: .4byte 0xFFFFFE00 +_08037FE4: + movs r2, #0 + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08038004 + ldr r0, [r6, #0x74] + ldr r1, _08038000 @ =0xFFFF8C00 + cmp r0, r1 + blt _08038014 + str r1, [r6, #0x74] + str r2, [r6, #0x7c] + b _08038018 + .align 2, 0 +_08038000: .4byte 0xFFFF8C00 +_08038004: + ldr r0, [r6, #0x74] + movs r1, #0xe8 + lsls r1, r1, #7 + cmp r0, r1 + bgt _08038014 + str r1, [r6, #0x74] + str r2, [r6, #0x7c] + movs r2, #0xff +_08038014: + cmp r2, #0 + beq _0803802A +_08038018: + mov r0, sl + adds r0, #0x7a + ldrb r1, [r0] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + beq _0803802A + movs r0, #0 +_08038028: + strb r0, [r5] +_0803802A: + add sp, #0x24 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x3__Task_8039A64.inc b/sa1/asm/non_matching/game/enemies/boss_x3__Task_8039A64.inc new file mode 100644 index 0000000000..5a20143f95 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x3__Task_8039A64.inc @@ -0,0 +1,913 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + movs r0, #0 + str r0, [sp, #8] + ldr r0, _08039AD0 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r2, r4, r1 + mov r8, r2 + ldrh r0, [r0] + adds r0, r0, r1 + ldrh r3, [r0, #6] + adds r1, r3, r1 + str r1, [sp] + mov sl, r8 + ldr r0, _08039AD4 @ =0x03000030 + adds r0, r4, r0 + str r0, [sp, #4] + ldr r1, _08039AD8 @ =0x03000094 + adds r0, r3, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #7 + bgt _08039AEA + ldr r2, _08039ADC @ =0x0300008C + adds r0, r3, r2 + ldrh r0, [r0] + subs r1, #0x44 + adds r2, r4, r1 + strh r0, [r2] + adds r1, #0x3e + adds r0, r3, r1 + ldrh r1, [r0] + ldr r3, _08039AE0 @ =0x03000052 + adds r0, r4, r3 + strh r1, [r0] + mov r4, sl + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08039AE4 + ldrh r0, [r2] + adds r0, #0x1a + b _08039AE8 + .align 2, 0 +_08039AD0: .4byte gCurTask +_08039AD4: .4byte 0x03000030 +_08039AD8: .4byte 0x03000094 +_08039ADC: .4byte 0x0300008C +_08039AE0: .4byte 0x03000052 +_08039AE4: + ldrh r0, [r2] + subs r0, #0x1a +_08039AE8: + strh r0, [r2] +_08039AEA: + mov r3, r8 + adds r3, #0x48 + movs r0, #0 + ldrsh r1, [r3, r0] + mov r2, r8 + ldr r0, [r2, #0x40] + adds r0, r0, r1 + str r0, [r2, #0x40] + adds r2, #0x4a + ldrh r0, [r2] + mov r1, r8 + adds r1, #0x4e + strh r0, [r1] + ldrh r6, [r2] + mov ip, r6 + mov r4, sl + ldr r1, [r4, #0x10] + movs r0, #0x80 + lsls r0, r0, #3 + ands r1, r0 + str r3, [sp, #0xc] + mov sb, r2 + cmp r1, #0 + beq _08039B38 + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + ldr r2, _08039BD4 @ =0xFFFFFE00 + adds r1, r2, #0 + subs r6, r1, r0 + ldr r1, _08039BD8 @ =0x000003FF + ands r6, r1 + mov r3, ip + lsls r0, r3, #0x10 + rsbs r0, r0, #0 + asrs r0, r0, #0x10 + mov ip, r0 + mov r4, ip + ands r4, r1 + mov ip, r4 +_08039B38: + ldr r2, _08039BDC @ =gSineTable + lsls r1, r6, #0x10 + asrs r1, r1, #0x10 + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r2 + movs r4, #0 + ldrsh r6, [r0, r4] + asrs r6, r6, #6 + mov r3, r8 + ldr r0, [r3, #0x40] + muls r6, r0, r6 + asrs r6, r6, #0x10 + lsls r1, r1, #1 + adds r1, r1, r2 + movs r4, #0 + ldrsh r7, [r1, r4] + asrs r7, r7, #6 + muls r7, r0, r7 + asrs r7, r7, #0x10 + mov r5, r8 + adds r5, #0x50 + movs r1, #0 + ldrsh r0, [r5, r1] + adds r6, r6, r0 + mov r4, r8 + adds r4, #0x52 + movs r2, #0 + ldrsh r0, [r4, r2] + adds r7, r7, r0 + ldr r1, _08039BE0 @ =gCamera + ldrh r0, [r1] + subs r0, r6, r0 + ldr r3, [sp, #4] + strh r0, [r3, #6] + ldrh r0, [r1, #2] + subs r0, r7, r0 + strh r0, [r3, #8] + mov r0, ip + strh r0, [r3] + mov r0, sl + bl UpdateSpriteAnimation + mov r0, sl + ldr r1, [sp, #4] + bl TransformSprite + mov r0, sl + bl DisplaySprite + ldr r0, [sp] + adds r0, #0x94 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #7 + ble _08039BEC + movs r0, #0 + ldr r1, [sp, #0xc] + strh r0, [r1] + lsls r0, r6, #8 + mov r2, r8 + str r0, [r2, #0x54] + lsls r0, r7, #8 + str r0, [r2, #0x58] + movs r0, #0xb8 + lsls r0, r0, #3 + mov r3, sl + strh r0, [r3, #0x1a] + movs r0, #0x50 + strh r0, [r2, #0x3c] + ldr r0, _08039BE4 @ =gCurTask + ldr r1, [r0] + ldr r0, _08039BE8 @ =Task_803A46C + str r0, [r1, #8] + b _0803A14A + .align 2, 0 +_08039BD4: .4byte 0xFFFFFE00 +_08039BD8: .4byte 0x000003FF +_08039BDC: .4byte gSineTable +_08039BE0: .4byte gCamera +_08039BE4: .4byte gCurTask +_08039BE8: .4byte Task_803A46C +_08039BEC: + mov r0, r8 + adds r0, #0x61 + ldrb r1, [r0] + str r0, [sp, #0x10] + cmp r1, #0 + blt _08039C1E + cmp r1, #1 + ble _08039C02 + cmp r1, #2 + beq _08039C0E + b _08039C1E +_08039C02: + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + lsls r1, r7, #0x10 + asrs r1, r1, #0x10 + movs r2, #0 + b _08039C18 +_08039C0E: + lsls r0, r6, #0x10 + asrs r0, r0, #0x10 + lsls r1, r7, #0x10 + asrs r1, r1, #0x10 + movs r2, #1 +_08039C18: + bl sub_8036F9C + str r0, [sp, #8] +_08039C1E: + ldr r1, [sp, #0x10] + ldrb r0, [r1] + cmp r0, #9 + bls _08039C28 + b _0803A14A +_08039C28: + lsls r0, r0, #2 + ldr r1, _08039C34 @ =_08039C38 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08039C34: .4byte _08039C38 +_08039C38: @ jump table + .4byte _08039C60 @ case 0 + .4byte _08039CDE @ case 1 + .4byte _08039E08 @ case 2 + .4byte _08039EE2 @ case 3 + .4byte _08039EFC @ case 4 + .4byte _08039F30 @ case 5 + .4byte _08039F94 @ case 6 + .4byte _08039FD4 @ case 7 + .4byte _0803A026 @ case 8 + .4byte _0803A084 @ case 9 +_08039C60: + mov r2, r8 + ldrh r0, [r2, #0x3c] + subs r0, #1 + strh r0, [r2, #0x3c] + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + cmp r3, #0 + beq _08039C72 + b _0803A14A +_08039C72: + ldr r2, _08039CA8 @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _08039CAC @ =0x00196225 + muls r0, r1, r0 + ldr r4, _08039CB0 @ =0x3C6EF35F + adds r0, r0, r4 + str r0, [r2] + adds r1, r0, #0 + ldr r0, [sp, #0xc] + strh r3, [r0] + ldr r2, [sp, #0x10] + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] + adds r0, r1, #0 + movs r1, #0x64 + bl __modsi3 + adds r1, r0, #0 + subs r1, #0x23 + cmp r1, #0 + bgt _08039CB4 + movs r0, #0xb4 + mov r3, r8 + strh r0, [r3, #0x3c] + b _0803A14A + .align 2, 0 +_08039CA8: .4byte gPseudoRandom +_08039CAC: .4byte 0x00196225 +_08039CB0: .4byte 0x3C6EF35F +_08039CB4: + adds r1, r0, #0 + subs r1, #0x46 + cmp r1, #0 + bgt _08039CC4 + movs r0, #0x3c + mov r4, r8 + strh r0, [r4, #0x3c] + b _0803A14A +_08039CC4: + adds r1, r0, #0 + subs r1, #0x5a + cmp r1, #0 + bgt _08039CD4 + movs r0, #0x12 + mov r1, r8 + strh r0, [r1, #0x3c] + b _0803A14A +_08039CD4: + movs r0, #0x96 + lsls r0, r0, #1 + mov r2, r8 + strh r0, [r2, #0x3c] + b _0803A14A +_08039CDE: + movs r3, #0 + ldrsh r1, [r5, r3] + ldr r2, _08039D48 @ =gPlayer + ldr r0, [r2] + asrs r0, r0, #8 + subs r6, r1, r0 + movs r0, #0 + ldrsh r1, [r4, r0] + ldr r0, [r2, #4] + asrs r0, r0, #8 + subs r7, r1, r0 + cmp r6, #0 + bge _08039CFA + rsbs r6, r6, #0 +_08039CFA: + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + lsls r1, r6, #0x10 + asrs r1, r1, #0x10 + bl sa2__sub_8004418 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + ldr r1, _08039D4C @ =0xFF1F0000 + adds r0, r0, r1 + lsrs r0, r0, #0x10 + movs r1, #0x8f + lsls r1, r1, #1 + cmp r0, r1 + bhi _08039D1A + movs r6, #0xe0 +_08039D1A: + lsls r0, r6, #0x10 + ldr r2, _08039D50 @ =0xFDFF0000 + adds r0, r0, r2 + lsrs r0, r0, #0x10 + cmp r0, r1 + bhi _08039D2A + movs r6, #0xc8 + lsls r6, r6, #2 +_08039D2A: + mov r3, sb + ldrh r2, [r3] + lsls r0, r2, #0x16 + asrs r1, r0, #0x10 + lsls r0, r6, #0x16 + asrs r0, r0, #0x10 + cmp r1, r0 + ble _08039D54 + movs r3, #0xc0 + lsls r3, r3, #1 + adds r0, r0, r3 + cmp r1, r0 + blt _08039D60 + subs r0, r2, #6 + b _08039D6E + .align 2, 0 +_08039D48: .4byte gPlayer +_08039D4C: .4byte 0xFF1F0000 +_08039D50: .4byte 0xFDFF0000 +_08039D54: + cmp r1, r0 + bge _08039D72 + ldr r3, _08039D68 @ =0xFFFFFE80 + adds r0, r0, r3 + cmp r1, r0 + ble _08039D6C +_08039D60: + mov r0, sb + strh r6, [r0] + b _08039D72 + .align 2, 0 +_08039D68: .4byte 0xFFFFFE80 +_08039D6C: + adds r0, r2, #6 +_08039D6E: + mov r1, sb + strh r0, [r1] +_08039D72: + mov r2, sb + ldrh r0, [r2] + ldr r1, _08039DFC @ =0x000003FF + ands r1, r0 + strh r1, [r2] + mov r3, r8 + ldrh r0, [r3, #0x3c] + subs r0, #1 + strh r0, [r3, #0x3c] + lsls r0, r0, #0x10 + cmp r0, #0 + beq _08039D8C + b _0803A14A +_08039D8C: + movs r1, #0 + ldrsh r0, [r5, r1] + ldr r3, _08039E00 @ =gPlayer + ldr r1, [r3] + asrs r1, r1, #8 + subs r0, r0, r1 + movs r1, #0 + ldrsh r2, [r4, r1] + ldr r1, [r3, #4] + asrs r1, r1, #8 + subs r2, r2, r1 + adds r3, r0, #0 + muls r3, r0, r3 + adds r0, r3, #0 + adds r4, r2, #0 + muls r4, r2, r4 + adds r2, r4, #0 + lsls r0, r0, #8 + lsls r2, r2, #8 + adds r0, r0, r2 + bl Sqrt + lsls r0, r0, #0x10 + lsrs r0, r0, #0xc + ldr r1, _08039E04 @ =0xFFFFF000 + subs r1, r1, r0 + mov r0, r8 + str r1, [r0, #0x44] + movs r0, #0xfa + lsls r0, r0, #8 + ldr r1, [sp, #0xc] + strh r0, [r1] + mov r1, r8 + adds r1, #0x60 + movs r0, #0 + strb r0, [r1] + ldr r2, [sp, #0x10] + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] + movs r0, #0xf0 + lsls r0, r0, #2 + mov r3, sl + strh r0, [r3, #0x1a] + mov r1, sl + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + adds r1, #1 + movs r0, #0xff + strb r0, [r1] + movs r0, #0xb3 + bl m4aSongNumStart + b _0803A14A + .align 2, 0 +_08039DFC: .4byte 0x000003FF +_08039E00: .4byte gPlayer +_08039E04: .4byte 0xFFFFF000 +_08039E08: + mov r4, r8 + ldr r0, [r4, #0x40] + rsbs r0, r0, #0 + asrs r0, r0, #8 + subs r0, #0x14 + asrs r0, r0, #4 + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + mov r1, r8 + adds r1, #0x60 + ldrb r0, [r1] + cmp r0, r2 + bhs _08039E2A + strb r2, [r1] + bl sub_803A1D8 +_08039E2A: + ldr r0, [sp, #8] + cmp r0, #2 + bne _08039EB8 + mov r1, r8 + adds r1, #0x62 + movs r0, #0xff + strb r0, [r1] + movs r4, #0 + ldr r1, [sp, #0xc] + strh r4, [r1] + movs r0, #7 + ldr r2, [sp, #0x10] + strb r0, [r2] + mov r0, sl + adds r0, #0x20 + mov r3, sp + ldrb r3, [r3, #8] + strb r3, [r0] + mov r1, sl + adds r1, #0x21 + movs r0, #1 + rsbs r0, r0, #0 + strb r0, [r1] + ldr r5, _08039E90 @ =gPlayer + adds r0, r5, #0 + bl Player_TransitionCancelFlyingAndBoost + lsls r0, r6, #8 + str r0, [r5] + lsls r0, r7, #8 + str r0, [r5, #4] + strh r4, [r5, #8] + strh r4, [r5, #0xa] + strh r4, [r5, #0xc] + ldr r0, [r5, #0x10] + ldr r1, _08039E94 @ =0x00E00100 + orrs r0, r1 + str r0, [r5, #0x10] + mov r4, sl + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08039E98 + mov r1, sb + movs r2, #0 + ldrsh r0, [r1, r2] + rsbs r0, r0, #0 + asrs r0, r0, #2 + b _08039E9E + .align 2, 0 +_08039E90: .4byte gPlayer +_08039E94: .4byte 0x00E00100 +_08039E98: + mov r3, sb + ldrh r0, [r3] + lsrs r0, r0, #2 +_08039E9E: + strb r0, [r5, #0x14] + ldr r1, _08039EB4 @ =gPlayer + adds r3, r1, #0 + adds r3, #0x40 + movs r2, #0 + movs r0, #0x28 + strb r0, [r3] + strh r2, [r1, #0x38] + strh r2, [r1, #0x3a] + b _0803A14A + .align 2, 0 +_08039EB4: .4byte gPlayer +_08039EB8: + mov r4, r8 + ldr r1, [r4, #0x40] + ldr r0, [r4, #0x44] + cmp r1, r0 + ble _08039EC4 + b _0803A14A +_08039EC4: + movs r0, #0 + ldr r1, [sp, #0xc] + strh r0, [r1] + ldr r2, [sp, #0x10] + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] + mov r1, sl + adds r1, #0x20 + movs r0, #2 + strb r0, [r1] + adds r1, #1 + movs r0, #0xff + strb r0, [r1] + b _0803A14A +_08039EE2: + mov r3, sl + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + bne _08039EF2 + b _0803A14A +_08039EF2: + movs r0, #0x80 + lsls r0, r0, #2 + ldr r4, [sp, #0xc] + strh r0, [r4] + b _0803A076 +_08039EFC: + mov r2, r8 + ldr r0, [r2, #0x40] + ldr r1, _08039F2C @ =0xFFFFEC00 + cmp r0, r1 + bge _08039F08 + b _0803A14A +_08039F08: + str r1, [r2, #0x40] + movs r1, #0 + movs r0, #0 + ldr r3, [sp, #0xc] + strh r0, [r3] + movs r0, #0xb8 + lsls r0, r0, #3 + mov r4, sl + strh r0, [r4, #0x1a] + mov r0, sl + adds r0, #0x20 + strb r1, [r0] + mov r1, sl + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + b _0803A076 + .align 2, 0 +_08039F2C: .4byte 0xFFFFEC00 +_08039F30: + mov r2, sb + ldrh r0, [r2] + movs r3, #0 + ldrsh r1, [r2, r3] + cmp r1, #0 + bne _08039F56 + movs r0, #0xb8 + lsls r0, r0, #3 + mov r4, sl + strh r0, [r4, #0x1a] + movs r0, #0x80 + lsls r0, r0, #1 + ldr r1, [sp, #0xc] + strh r0, [r1] + ldr r2, [sp, #0x10] + ldrb r0, [r2] + adds r0, #1 + strb r0, [r2] + b _0803A14A +_08039F56: + movs r2, #0x80 + lsls r2, r2, #2 + cmp r1, r2 + ble _08039F78 + adds r0, #6 + ldr r3, _08039F74 @ =0x000003FF + adds r1, r3, #0 + ands r0, r1 + mov r4, sb + strh r0, [r4] + cmp r0, #6 + ble _08039F70 + b _0803A14A +_08039F70: + b _08039F8A + .align 2, 0 +_08039F74: .4byte 0x000003FF +_08039F78: + subs r0, #6 + ldr r3, _08039F90 @ =0x000003FF + adds r1, r3, #0 + ands r0, r1 + mov r4, sb + strh r0, [r4] + cmp r0, r2 + bgt _08039F8A + b _0803A14A +_08039F8A: + movs r0, #0 + strh r0, [r4] + b _0803A14A + .align 2, 0 +_08039F90: .4byte 0x000003FF +_08039F94: + mov r0, r8 + ldr r1, [r0, #0x40] + ldr r0, _08039FB8 @ =0x00000DFF + cmp r1, r0 + bgt _08039FA0 + b _0803A14A +_08039FA0: + mov r0, r8 + adds r0, #0x62 + ldrb r0, [r0] + cmp r0, #0 + bne _08039FBC + ldr r1, [sp] + adds r1, #0x99 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + b _08039FC4 + .align 2, 0 +_08039FB8: .4byte 0x00000DFF +_08039FBC: + ldr r1, [sp] + adds r1, #0x92 + movs r0, #1 + strh r0, [r1] +_08039FC4: + ldr r0, _08039FD0 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0803A14A + .align 2, 0 +_08039FD0: .4byte gCurTask +_08039FD4: + ldr r2, _08039FF8 @ =gPlayer + lsls r0, r6, #8 + str r0, [r2] + lsls r0, r7, #8 + str r0, [r2, #4] + mov r1, sl + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08039FFC + mov r3, sb + movs r4, #0 + ldrsh r0, [r3, r4] + rsbs r0, r0, #0 + asrs r0, r0, #2 + b _0803A002 + .align 2, 0 +_08039FF8: .4byte gPlayer +_08039FFC: + mov r1, sb + ldrh r0, [r1] + lsrs r0, r0, #2 +_0803A002: + strb r0, [r2, #0x14] + mov r2, sl + ldr r0, [r2, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + bne _0803A014 + b _0803A14A +_0803A014: + movs r0, #0xc0 + lsls r0, r0, #3 + ldr r3, [sp, #0xc] + strh r0, [r3] + ldr r4, [sp, #0x10] + ldrb r0, [r4] + adds r0, #1 + strb r0, [r4] + b _0803A14A +_0803A026: + ldr r2, _0803A04C @ =gPlayer + lsls r0, r6, #8 + str r0, [r2] + lsls r0, r7, #8 + str r0, [r2, #4] + mov r1, sl + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _0803A050 + mov r3, sb + movs r4, #0 + ldrsh r0, [r3, r4] + rsbs r0, r0, #0 + asrs r0, r0, #2 + b _0803A056 + .align 2, 0 +_0803A04C: .4byte gPlayer +_0803A050: + mov r1, sb + ldrh r0, [r1] + lsrs r0, r0, #2 +_0803A056: + strb r0, [r2, #0x14] + mov r2, r8 + ldr r0, [r2, #0x40] + ldr r1, _0803A080 @ =0xFFFFDC00 + cmp r0, r1 + blt _0803A14A + str r1, [r2, #0x40] + movs r2, #0 + ldr r3, [sp, #0xc] + strh r2, [r3] + mov r1, r8 + adds r1, #0x4c + movs r0, #0x10 + strh r0, [r1] + mov r4, r8 + strh r2, [r4, #0x3c] +_0803A076: + ldr r1, [sp, #0x10] + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + b _0803A14A + .align 2, 0 +_0803A080: .4byte 0xFFFFDC00 +_0803A084: + ldr r2, _0803A0AC @ =gPlayer + lsls r0, r6, #8 + str r0, [r2] + lsls r0, r7, #8 + str r0, [r2, #4] + mov r3, sl + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + adds r3, r2, #0 + cmp r0, #0 + beq _0803A0B0 + mov r4, sb + movs r1, #0 + ldrsh r0, [r4, r1] + rsbs r0, r0, #0 + asrs r0, r0, #2 + b _0803A0B6 + .align 2, 0 +_0803A0AC: .4byte gPlayer +_0803A0B0: + mov r2, sb + ldrh r0, [r2] + lsrs r0, r0, #2 +_0803A0B6: + strb r0, [r3, #0x14] + mov r2, r8 + adds r2, #0x4c + ldrh r0, [r2] + mov r4, sb + ldrh r4, [r4] + adds r0, r0, r4 + ldr r1, _0803A15C @ =0x000003FF + ands r0, r1 + mov r1, sb + strh r0, [r1] + ldr r1, _0803A160 @ =0x000001FF + adds r5, r2, #0 + cmp r0, r1 + ble _0803A102 + ldr r6, _0803A164 @ =gRingCount + ldrh r4, [r6] + cmp r4, #0 + beq _0803A0FE + movs r2, #0 + ldrsh r0, [r5, r2] + cmp r0, #0 + bge _0803A0FE + cmp r4, #5 + bls _0803A0EA + movs r4, #5 +_0803A0EA: + ldr r0, [r3] + asrs r0, r0, #8 + ldr r1, [r3, #4] + asrs r1, r1, #8 + adds r2, r4, #0 + bl InitScatteringRings + ldrh r0, [r6] + subs r0, r0, r4 + strh r0, [r6] +_0803A0FE: + movs r0, #0x10 + strh r0, [r5] +_0803A102: + ldr r3, _0803A168 @ =0xFFFFFF00 + adds r0, r3, #0 + mov r4, sb + ldrh r4, [r4] + adds r0, r0, r4 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0xff + bhi _0803A14A + ldr r0, _0803A16C @ =0x0000FFF0 + strh r0, [r5] + mov r1, r8 + ldrh r0, [r1, #0x3c] + adds r0, #1 + strh r0, [r1, #0x3c] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #4 + bne _0803A130 + ldr r1, [sp] + adds r1, #0x99 + movs r0, #0x33 + strb r0, [r1] +_0803A130: + mov r2, r8 + ldrh r4, [r2, #0x3c] + cmp r4, #5 + bne _0803A14A + mov r3, sl + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + bl sub_803A170 + ldr r0, [sp, #0x10] + strb r4, [r0] +_0803A14A: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0803A15C: .4byte 0x000003FF +_0803A160: .4byte 0x000001FF +_0803A164: .4byte gRingCount +_0803A168: .4byte 0xFFFFFF00 +_0803A16C: .4byte 0x0000FFF0 +.align 2, 0 +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x3__sub_803A170.inc b/sa1/asm/non_matching/game/enemies/boss_x3__sub_803A170.inc new file mode 100644 index 0000000000..8d5e7df124 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x3__sub_803A170.inc @@ -0,0 +1,58 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, lr} + ldr r2, _0803A184 @ =gPlayer + movs r1, #0x78 + strh r1, [r2, #0x1c] + adds r5, r2, #0 + cmp r0, #0 + beq _0803A188 + movs r0, #0xfe + lsls r0, r0, #8 + b _0803A18C + .align 2, 0 +_0803A184: .4byte gPlayer +_0803A188: + movs r0, #0x80 + lsls r0, r0, #2 +_0803A18C: + strh r0, [r5, #8] + movs r4, #0 + ldr r0, _0803A1D0 @ =0x0000FA20 + strh r0, [r5, #0xa] + strb r4, [r5, #0x14] + ldr r0, [r5, #0x10] + ldr r1, _0803A1D4 @ =0xFF1FFAC3 + ands r0, r1 + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #0xf + strb r0, [r1] + adds r0, r5, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #0xe + strb r0, [r5, #0xf] + adds r1, r5, #0 + adds r1, #0x3d + movs r0, #0 + strb r0, [r1] + adds r0, r5, #0 + adds r0, #0x3e + strb r4, [r0] + pop {r4, r5} + pop {r0} + bx r0 + .align 2, 0 +_0803A1D0: .4byte 0x0000FA20 +_0803A1D4: .4byte 0xFF1FFAC3 + +.align 2, 0 +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_x3__sub_803A6EC.inc b/sa1/asm/non_matching/game/enemies/boss_x3__sub_803A6EC.inc new file mode 100644 index 0000000000..7cfeee85a8 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_x3__sub_803A6EC.inc @@ -0,0 +1,113 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, lr} + mov r6, r8 + push {r6} + sub sp, #0xc + ldr r6, [sp, #0x20] + ldr r4, [sp, #0x24] + mov r8, r4 + movs r5, #0 + str r5, [sp, #4] + lsls r2, r2, #0x18 + lsrs r2, r2, #0x18 + ldr r4, _0803A76C @ =0xFFFFFF00 + ldr r5, [sp, #8] + ands r4, r5 + orrs r4, r2 + str r4, [sp, #8] + lsls r3, r3, #0x18 + lsrs r3, r3, #8 + ldr r5, _0803A770 @ =0xFF00FFFF + ands r5, r4 + orrs r5, r3 + str r5, [sp, #8] + lsls r6, r6, #0x18 + lsrs r6, r6, #0x10 + ldr r2, _0803A774 @ =0xFFFF00FF + ands r2, r5 + orrs r2, r6 + str r2, [sp, #8] + mov r3, r8 + lsls r3, r3, #0x18 + mov r8, r3 + ldr r3, _0803A778 @ =0x00FFFFFF + ands r2, r3 + mov r4, r8 + orrs r4, r2 + str r4, [sp, #8] + lsls r0, r0, #0x10 + asrs r6, r0, #0x10 + lsls r1, r1, #0x10 + asrs r5, r1, #0x10 + ldr r0, _0803A77C @ =gPlayer + str r0, [sp] + ldr r0, [sp, #4] + ldr r1, [sp, #8] + adds r2, r6, #0 + adds r3, r5, #0 + bl sub_800C1E8 + adds r4, r0, #0 + ldr r0, _0803A780 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _0803A788 + ldr r0, _0803A784 @ =gPartner + str r0, [sp] + ldr r0, [sp, #4] + ldr r1, [sp, #8] + adds r2, r6, #0 + adds r3, r5, #0 + bl sub_800C1E8 + b _0803A78A + .align 2, 0 +_0803A76C: .4byte 0xFFFFFF00 +_0803A770: .4byte 0xFF00FFFF +_0803A774: .4byte 0xFFFF00FF +_0803A778: .4byte 0x00FFFFFF +_0803A77C: .4byte gPlayer +_0803A780: .4byte gNumSingleplayerCharacters +_0803A784: .4byte gPartner +_0803A788: + movs r0, #0 +_0803A78A: + orrs r4, r0 + cmp r4, #2 + bne _0803A7B2 + ldr r0, _0803A7C0 @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + ldr r5, _0803A7C4 @ =0x03000044 + adds r3, r2, r5 + ldr r0, _0803A7C8 @ =0x03000064 + adds r1, r2, r0 + movs r0, #3 + strb r0, [r1] + ldr r0, [r3, #0x10] + ldr r1, _0803A7CC @ =0xFFFFBFFF + ands r0, r1 + str r0, [r3, #0x10] + ldr r3, _0803A7D0 @ =0x03000065 + adds r2, r2, r3 + movs r0, #0xff + strb r0, [r2] +_0803A7B2: + add sp, #0xc + pop {r3} + mov r8, r3 + pop {r4, r5, r6} + pop {r0} + bx r0 + .align 2, 0 +_0803A7C0: .4byte gCurTask +_0803A7C4: .4byte 0x03000044 +_0803A7C8: .4byte 0x03000064 +_0803A7CC: .4byte 0xFFFFBFFF +_0803A7D0: .4byte 0x03000065 + +.align 2, 0 +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050194.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050194.inc new file mode 100644 index 0000000000..fa9da36084 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050194.inc @@ -0,0 +1,419 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + str r0, [sp, #4] + ldr r1, _080504B8 @ =gExtraBossTaskData + ldr r0, [r1, #0x3c] + mov r8, r0 + adds r0, #0x70 + ldrh r5, [r0] + ldr r0, [r1, #0x38] + adds r0, #0x70 + ldrh r0, [r0] + str r0, [sp, #8] + mov r1, r8 + ldr r0, [r1, #0x50] + asrs r7, r0, #8 + ldr r2, _080504BC @ =gStageTime + ldr r0, [r2] + lsls r0, r0, #3 + adds r7, r7, r0 + adds r1, r7, #0 + subs r1, #0x48 + ldr r0, _080504C0 @ =0x00000A7F + cmp r1, r0 + ble _080501DC + adds r7, r1, #0 + movs r1, #0xa8 + lsls r1, r1, #4 + adds r0, r7, #0 + bl Mod + adds r7, r0, #0 + adds r7, #0x48 +_080501DC: + mov r0, r8 + ldr r3, [r0, #0x54] + asrs r3, r3, #8 + ldr r4, _080504C4 @ =gSineTable + lsrs r1, r5, #6 + lsls r0, r1, #1 + adds r0, r0, r4 + ldrh r2, [r0] + lsls r2, r2, #0x10 + asrs r2, r2, #0x16 + lsls r2, r2, #0xc + movs r0, #0x80 + lsls r0, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #1 + adds r1, r1, r4 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + lsls r0, r1, #3 + adds r0, r0, r1 + lsls r0, r0, #8 + subs r0, r0, r2 + asrs r0, r0, #0x10 + adds r0, #6 + adds r6, r3, r0 + adds r1, r7, #0 + adds r1, #0x10 + ldr r2, _080504C8 @ =sa2__sub_801EC3C + mov sl, r2 + str r2, [sp] + adds r0, r6, #0 + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F100 + mov sb, r0 + mov r0, r8 + ldr r3, [r0, #0x54] + asrs r3, r3, #8 + ldr r1, [sp, #8] + lsrs r2, r1, #6 + lsls r0, r2, #1 + adds r0, r0, r4 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + adds r1, r1, r0 + lsls r1, r1, #8 + movs r0, #0x80 + lsls r0, r0, #1 + adds r2, r2, r0 + lsls r2, r2, #1 + adds r2, r2, r4 + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #0xb + adds r1, r1, r0 + asrs r1, r1, #0x10 + adds r1, #6 + adds r4, r3, r1 + adds r1, r7, #0 + adds r1, #0x15 + mov r2, sl + str r2, [sp] + adds r0, r4, #0 + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F100 + mov sl, r0 + cmp sl, sb + ble _08050278 + mov sl, sb +_08050278: + mov r0, sl + cmp r0, #0 + bgt _080502D2 + ldr r0, [sp, #4] + adds r0, #0x6e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _080502D2 + ldr r1, _080504BC @ =gStageTime + ldr r0, [r1] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _080502D2 + ldr r2, _080504CC @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _080504D0 @ =0x00196225 + muls r0, r1, r0 + ldr r1, _080504D4 @ =0x3C6EF35F + adds r0, r0, r1 + str r0, [r2] + movs r1, #0xc0 + lsls r1, r1, #0xa + ands r0, r1 + cmp r0, #0 + bne _080502D2 + mov r2, r8 + ldr r0, [r2, #0x50] + asrs r2, r0, #8 + adds r0, r4, #0 + cmp r0, r6 + bge _080502BE + adds r0, r6, #0 +_080502BE: + subs r1, r0, #2 + adds r0, r2, #0 + bl CreateBrakingDustEffect + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + ldr r1, _080504D8 @ =0x0000FFFC + strh r1, [r0, #4] +_080502D2: + ldr r1, _080504B8 @ =gExtraBossTaskData + ldr r0, [r1, #0x48] + mov r8, r0 + adds r0, #0x70 + ldrh r5, [r0] + ldr r0, [r1, #0x44] + adds r0, #0x70 + ldrh r0, [r0] + str r0, [sp, #0xc] + mov r1, r8 + ldr r0, [r1, #0x50] + asrs r7, r0, #8 + ldr r2, _080504BC @ =gStageTime + ldr r0, [r2] + lsls r0, r0, #3 + adds r7, r7, r0 + adds r1, r7, #0 + subs r1, #0x48 + ldr r0, _080504C0 @ =0x00000A7F + cmp r1, r0 + ble _0805030C + adds r7, r1, #0 + movs r1, #0xa8 + lsls r1, r1, #4 + adds r0, r7, #0 + bl Mod + adds r7, r0, #0 + adds r7, #0x48 +_0805030C: + mov r0, r8 + ldr r3, [r0, #0x54] + asrs r3, r3, #8 + ldr r4, _080504C4 @ =gSineTable + lsrs r1, r5, #6 + lsls r0, r1, #1 + adds r0, r0, r4 + ldrh r2, [r0] + lsls r2, r2, #0x10 + asrs r2, r2, #0x16 + lsls r2, r2, #0xc + movs r0, #0x80 + lsls r0, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #1 + adds r1, r1, r4 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + lsls r0, r1, #3 + adds r0, r0, r1 + lsls r0, r0, #8 + subs r0, r0, r2 + asrs r0, r0, #0x10 + adds r0, #6 + adds r5, r3, r0 + adds r1, r7, #0 + adds r1, #0x10 + ldr r2, _080504C8 @ =sa2__sub_801EC3C + str r2, [sp] + adds r0, r5, #0 + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F100 + mov sb, r0 + mov r0, r8 + ldr r3, [r0, #0x54] + asrs r3, r3, #8 + ldr r1, [sp, #0xc] + lsrs r2, r1, #6 + lsls r0, r2, #1 + adds r0, r0, r4 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + adds r1, r1, r0 + lsls r1, r1, #8 + movs r0, #0x80 + lsls r0, r0, #1 + adds r2, r2, r0 + lsls r2, r2, #1 + adds r2, r2, r4 + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #0xb + adds r1, r1, r0 + asrs r1, r1, #0x10 + adds r1, #6 + adds r4, r3, r1 + adds r1, r7, #0 + adds r1, #0x15 + ldr r2, _080504C8 @ =sa2__sub_801EC3C + str r2, [sp] + adds r0, r4, #0 + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F100 + adds r6, r0, #0 + cmp r6, sb + ble _080503A6 + mov r6, sb +_080503A6: + cmp r6, #0 + bgt _080503FE + ldr r0, [sp, #4] + adds r0, #0x6e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _080503FE + ldr r1, _080504BC @ =gStageTime + ldr r0, [r1] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _080503FE + ldr r2, _080504CC @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _080504D0 @ =0x00196225 + muls r0, r1, r0 + ldr r1, _080504D4 @ =0x3C6EF35F + adds r0, r0, r1 + str r0, [r2] + movs r1, #0xc0 + lsls r1, r1, #0xa + ands r0, r1 + cmp r0, #0 + bne _080503FE + mov r2, r8 + ldr r0, [r2, #0x50] + asrs r2, r0, #8 + adds r0, r4, #0 + cmp r0, r5 + bge _080503EA + adds r0, r5, #0 +_080503EA: + subs r1, r0, #2 + adds r0, r2, #0 + bl CreateBrakingDustEffect + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + ldr r1, _080504D8 @ =0x0000FFFC + strh r1, [r0, #4] +_080503FE: + ldr r0, _080504B8 @ =gExtraBossTaskData + ldr r0, [r0, #4] + str r0, [sp, #0x10] + adds r0, #0x70 + ldrh r1, [r0] + ldr r3, _080504C4 @ =gSineTable + lsrs r1, r1, #6 + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r1, r2 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrh r2, [r0] + lsls r2, r2, #0x10 + asrs r2, r2, #0x16 + lsls r1, r1, #1 + adds r1, r1, r3 + ldrh r3, [r1] + lsls r3, r3, #0x10 + asrs r3, r3, #0x16 + ldr r0, [sp, #0x10] + ldr r4, [r0, #0x54] + asrs r4, r4, #8 + lsls r1, r3, #3 + subs r1, r1, r3 + lsls r1, r1, #2 + subs r1, r1, r3 + lsls r1, r1, #8 + lsls r0, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #2 + subs r0, r0, r2 + lsls r0, r0, #9 + subs r1, r1, r0 + asrs r1, r1, #0x10 + adds r7, r4, r1 + ldr r1, [sp, #0x10] + ldr r4, [r1, #0x50] + asrs r4, r4, #8 + lsls r1, r2, #3 + subs r1, r1, r2 + lsls r1, r1, #2 + subs r1, r1, r2 + lsls r1, r1, #8 + lsls r0, r3, #1 + adds r0, r0, r3 + lsls r0, r0, #2 + subs r0, r0, r3 + lsls r0, r0, #9 + adds r1, r1, r0 + asrs r1, r1, #0x10 + adds r4, r4, r1 + ldr r0, _080504BC @ =gStageTime + ldr r0, [r0] + lsls r0, r0, #3 + adds r4, r4, r0 + adds r1, r4, #0 + subs r1, #0x48 + ldr r0, _080504C0 @ =0x00000A7F + cmp r1, r0 + ble _08050488 + adds r4, r1, #0 + movs r1, #0xa8 + lsls r1, r1, #4 + adds r0, r4, #0 + bl Mod + adds r4, r0, #0 + adds r4, #0x48 +_08050488: + ldr r0, _080504C8 @ =sa2__sub_801EC3C + str r0, [sp] + adds r0, r7, #0 + adds r1, r4, #0 + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F100 + adds r1, r6, #0 + cmp r1, sl + ble _080504A0 + mov r1, sl +_080504A0: + cmp r0, r1 + ble _080504A6 + adds r0, r1, #0 +_080504A6: + adds r1, r0, #0 + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_080504B8: .4byte gExtraBossTaskData +_080504BC: .4byte gStageTime +_080504C0: .4byte 0x00000A7F +_080504C4: .4byte gSineTable +_080504C8: .4byte sa2__sub_801EC3C +_080504CC: .4byte gPseudoRandom +_080504D0: .4byte 0x00196225 +_080504D4: .4byte 0x3C6EF35F +_080504D8: .4byte 0x0000FFFC + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_80504DC.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_80504DC.inc new file mode 100644 index 0000000000..8240fabce1 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_80504DC.inc @@ -0,0 +1,435 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + mov sl, r0 @ sl = r0 = robo + movs r4, #0 + str r4, [r0, #0x60] + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r0, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + mov r0, sl @ r0 = sl = robo + str r1, [r0, #0x64] + ldr r1, _08050848 @ =0xFFFF0000 + str r1, [r0, #0x44] + ldr r0, _0805084C @ =0xFFFFCA00 + mov r2, sl @ r2 = sl = robo + str r0, [r2, #0x48] + mov r0, sl @ r0 = sl = robo + adds r0, #0x4c + strh r4, [r0] + adds r0, #2 + strh r4, [r0] + adds r0, #2 + strh r4, [r0] + adds r0, #2 + strh r4, [r0] + ldr r0, _08050850 @ =0x00400002 + str r0, [r2, #0x58] + str r4, [r2, #0x5c] + mov r0, sl @ r0 = sl = robo + adds r0, #0x54 + strh r4, [r0] + adds r0, #2 + strh r4, [r0] + mov r1, sl @ r1 = sl = robo + adds r1, #0x6c + movs r0, #0xf0 + strh r0, [r1] + subs r1, #4 + ldr r0, _08050854 @ =gLoadedSaveGame + ldrb r0, [r0, #0x18] + lsls r0, r0, #1 + movs r3, #8 + subs r0, r3, r0 + strb r0, [r1] + mov r0, sl @ r0 = sl = robo + adds r0, #0x69 + movs r1, #0 + strb r1, [r0] + mov r1, sl @ r1 = sl = robo + adds r1, #0x6a + movs r0, #0x24 + strb r0, [r1] + adds r1, #1 + movs r0, #0x36 + strb r0, [r1] + mov r0, sl @ r0 = sl = robo + adds r0, #0x6e + movs r2, #0 + strb r2, [r0] + adds r0, #1 + strb r2, [r0] + ldr r6, _08050858 @ =gExtraBossTaskData + mov r0, sl @ r0 = sl = robo + movs r1, #0 + movs r2, #0 + movs r3, #0x15 + bl sub_8052838 + adds r5, r6, #4 + str r0, [r6, #4] + strh r4, [r0] + movs r7, #1 + movs r1, #0x80 + lsls r1, r1, #3 + ldr r2, _0805085C @ =0xFFFFE400 + movs r3, #0x16 + bl sub_8052474 + movs r3, #4 + mov sb, r3 + str r0, [r5, #4] + strh r7, [r0] + movs r7, #2 + ldr r0, [r6, #4] + ldr r2, _08050860 @ =0xFFFFE900 + movs r1, #0xb0 + lsls r1, r1, #4 + movs r3, #0xf + bl sub_80524F0 + str r0, [r6, #0xc] + strh r7, [r0] + ldr r2, [r6, #0xc] + ldr r1, [r2, #0x28] + ldr r3, _08050864 @ =0xFFFFCFFF + mov r8, r3 + ands r1, r3 + movs r5, #0x80 + lsls r5, r5, #5 + orrs r1, r5 + str r1, [r2, #0x28] + movs r7, #3 + movs r1, #0 + movs r2, #0xa0 + lsls r2, r2, #5 + movs r3, #0x10 + bl sub_8052578 + str r0, [r6, #0x10] + strh r7, [r0] + ldr r2, [r6, #0x10] + ldr r1, [r2, #0x28] + mov r3, r8 + ands r1, r3 + orrs r1, r5 + str r1, [r2, #0x28] + movs r4, #0x90 + lsls r4, r4, #5 + movs r1, #0 + adds r2, r4, #0 + movs r3, #0xf + bl sub_80525E0 + str r0, [r6, #0x14] + mov r1, sb + strh r1, [r0] + ldr r2, [r6, #0x14] + ldr r1, [r2, #0x28] + mov r3, r8 + ands r1, r3 + orrs r1, r5 + str r1, [r2, #0x28] + movs r7, #5 + movs r1, #0 + adds r2, r4, #0 + movs r3, #0x10 + bl sub_8052578 + str r0, [r6, #0x18] + strh r7, [r0] + ldr r2, [r6, #0x18] + ldr r1, [r2, #0x28] + mov r3, r8 + ands r1, r3 + orrs r1, r5 + str r1, [r2, #0x28] + movs r7, #6 + movs r1, #0x80 + lsls r1, r1, #4 + mov sb, r1 + movs r1, #0 + mov r2, sb + movs r3, #0xe + bl sub_805265C + str r0, [r6, #0x1c] + strh r7, [r0] + ldr r1, [r6, #0x1c] + ldr r0, [r1, #0x28] + mov r2, r8 + ands r0, r2 + orrs r0, r5 + str r0, [r1, #0x28] + movs r7, #7 + ldr r0, [r6, #4] + ldr r1, _08050868 @ =0xFFFFFB00 + ldr r2, _0805086C @ =0xFFFFE700 + movs r3, #0x1b + bl sub_80524F0 + str r0, [r6, #0x20] + strh r7, [r0] + movs r1, #0 + movs r2, #0xa0 + lsls r2, r2, #5 + movs r3, #0x1c + bl sub_8052578 + str r0, [r6, #0x24] + movs r3, #8 + strh r3, [r0] + movs r7, #9 + movs r1, #0 + adds r2, r4, #0 + movs r3, #0x1b + bl sub_80525E0 + str r0, [r6, #0x28] + strh r7, [r0] + movs r7, #0xa + movs r1, #0 + adds r2, r4, #0 + movs r3, #0x1c + bl sub_8052578 + str r0, [r6, #0x2c] + strh r7, [r0] + movs r7, #0xb + movs r1, #0 + mov r2, sb + movs r3, #0x1a + bl sub_805265C + str r0, [r6, #0x30] + strh r7, [r0] + ldr r0, [sp, #4] + ldr r1, _08050848 @ =0xFFFF0000 + ands r0, r1 + ldr r2, _08050870 @ =0x0000029B + orrs r0, r2 + ldr r3, _08050874 @ =0xFF00FFFF + ands r0, r3 + str r0, [sp, #4] + movs r0, #0x10 + bl VramMalloc + add r1, sp, #4 + mov sb, r1 + str r0, [sp, #8] + ldr r0, [r6, #4] + movs r1, #0x80 + lsls r1, r1, #2 + movs r2, #0x14 + str r2, [sp] + movs r2, #0xa0 + lsls r2, r2, #3 + add r3, sp, #4 + bl sub_80526C4 + adds r4, r0, #0 + str r4, [r6, #0x34] + movs r3, #0xc + strh r3, [r4] + ldr r0, [r6, #0x34] + adds r0, #0x76 + movs r1, #0xe0 + lsls r1, r1, #8 + strh r1, [r0] + ldr r0, [r6, #0x34] + adds r0, #0x72 + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + ldr r1, [r6, #0x34] + ldr r0, [r1, #0x28] + mov r2, r8 + ands r0, r2 + orrs r0, r5 + str r0, [r1, #0x28] + ldr r1, _08050878 @ =0x0000029D + add r0, sp, #4 + strh r1, [r0] + movs r0, #0 + mov r3, sb + strb r0, [r3, #2] + movs r0, #9 + bl VramMalloc + str r0, [sp, #8] + movs r0, #0x13 + str r0, [sp] + adds r0, r4, #0 + movs r1, #0 + movs r2, #0 + add r3, sp, #4 + bl sub_8052724 + ldr r1, [r0, #0x28] + mov r2, r8 + ands r1, r2 + orrs r1, r5 + str r1, [r0, #0x28] + add r0, sp, #4 + movs r3, #0xa7 + lsls r3, r3, #2 + strh r3, [r0] + movs r1, #0 + mov r0, sb + strb r1, [r0, #2] + movs r0, #0x40 + bl VramMalloc + str r0, [sp, #8] + movs r7, #0xd + movs r2, #0xc0 + lsls r2, r2, #4 + movs r0, #0x12 + str r0, [sp] + adds r0, r4, #0 + ldr r1, _0805087C @ =0xFFFFF700 + add r3, sp, #4 + bl sub_8052780 + adds r4, r0, #0 + str r4, [r6, #0x38] + strh r7, [r4] + ldr r1, [r6, #0x38] + ldr r0, [r1, #0x28] + mov r2, r8 + ands r0, r2 + orrs r0, r5 + str r0, [r1, #0x28] + add r0, sp, #4 + ldr r3, _08050870 @ =0x0000029B + strh r3, [r0] + movs r1, #2 + mov r0, sb + strb r1, [r0, #2] + movs r0, #0x10 + bl VramMalloc + str r0, [sp, #8] + movs r7, #0xe + movs r2, #0xc0 + lsls r2, r2, #2 + mov sb, r2 + movs r3, #0x11 + str r3, [sp] + adds r0, r4, #0 + mov r1, sb + movs r2, #0xd8 + lsls r2, r2, #5 + add r3, sp, #4 + bl sub_80527DC + str r0, [r6, #0x3c] + strh r7, [r0] + ldr r1, [r6, #0x3c] + ldr r0, [r1, #0x28] + mov r2, r8 + ands r0, r2 + orrs r0, r5 + str r0, [r1, #0x28] + ldr r0, [sp, #0xc] + ldr r3, _08050848 @ =0xFFFF0000 + ands r0, r3 + ldr r1, _08050870 @ =0x0000029B + orrs r0, r1 + ldr r2, _08050874 @ =0xFF00FFFF + ands r0, r2 + movs r1, #0x80 + lsls r1, r1, #9 + orrs r0, r1 + str r0, [sp, #0xc] + movs r0, #0x10 + bl VramMalloc + add r5, sp, #0xc + str r0, [r5, #4] + movs r7, #0xf + ldr r0, [r6, #4] + ldr r1, _08050880 @ =0xFFFFFA00 + movs r2, #0x17 + str r2, [sp] + movs r2, #0xa0 + lsls r2, r2, #3 + adds r3, r5, #0 + bl sub_80526C4 + adds r4, r0, #0 + str r4, [r6, #0x40] + strh r7, [r4] + ldr r0, [r6, #0x40] + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #6 + strh r1, [r0] + ldr r0, [r6, #0x40] + adds r0, #0x72 + movs r1, #0xff + lsls r1, r1, #8 + strh r1, [r0] + movs r3, #0xa7 + lsls r3, r3, #2 + strh r3, [r5] + movs r0, #1 + strb r0, [r5, #2] + movs r0, #0x40 + bl VramMalloc + str r0, [r5, #4] + movs r7, #0x10 + movs r0, #0x16 + str r0, [sp] + adds r0, r4, #0 + ldr r1, _0805087C @ =0xFFFFF700 + movs r2, #0xb0 + lsls r2, r2, #4 + adds r3, r5, #0 + bl sub_8052780 + adds r4, r0, #0 + str r4, [r6, #0x44] + strh r7, [r4] + ldr r0, _08050870 @ =0x0000029B + strh r0, [r5] + movs r0, #3 + strb r0, [r5, #2] + movs r0, #0x10 + bl VramMalloc + str r0, [r5, #4] + movs r0, #0x18 + str r0, [sp] + adds r0, r4, #0 + mov r1, sb + movs r2, #0xd8 + lsls r2, r2, #5 + adds r3, r5, #0 + bl sub_80527DC + str r0, [r6, #0x48] + movs r1, #0x11 + strh r1, [r0] + ldr r0, _08050884 @ =gInput + ldrh r0, [r0] + cmp r0, #0xfa + bne _08050836 + mov r2, sl @ r2 = sl = robo + ldr r0, [r2, #0x58] + movs r1, #0x80 + lsls r1, r1, #0x18 + orrs r0, r1 + str r0, [r2, #0x58] +_08050836: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08050848: .4byte 0xFFFF0000 +_0805084C: .4byte 0xFFFFCA00 +_08050850: .4byte 0x00400002 +_08050854: .4byte gLoadedSaveGame +_08050858: .4byte gExtraBossTaskData +_0805085C: .4byte 0xFFFFE400 +_08050860: .4byte 0xFFFFE900 +_08050864: .4byte 0xFFFFCFFF +_08050868: .4byte 0xFFFFFB00 +_0805086C: .4byte 0xFFFFE700 +_08050870: .4byte 0x0000029B +_08050874: .4byte 0xFF00FFFF +_08050878: .4byte 0x0000029D +_0805087C: .4byte 0xFFFFF700 +_08050880: .4byte 0xFFFFFA00 +_08050884: .4byte gInput + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050A88.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050A88.inc new file mode 100644 index 0000000000..ad862c635f --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050A88.inc @@ -0,0 +1,632 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + ldr r0, _08050C44 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r0, [r7, #8] + mov ip, r0 + ldr r0, _08050C48 @ =gExtraBossTaskData + ldr r0, [r0] + mov sl, r0 + ldr r1, _08050C4C @ =0x03000018 + adds r1, r1, r4 + mov sb, r1 @ sb = s + ldr r2, _08050C50 @ =0x0300000C + adds r2, r4, r2 + str r2, [sp] + ldr r5, _08050C54 @ =gSineTable + mov r6, ip + adds r6, #0x70 + ldrh r1, [r6] + lsrs r1, r1, #6 + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r2, [r7, #0x68] + adds r3, r2, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + mov r8, r1 + mov r1, r8 + muls r1, r0, r1 + adds r0, r1, #0 + subs r3, r3, r0 + asrs r3, r3, #8 + str r3, [r7, #0x60] + ldrh r1, [r6] + lsrs r1, r1, #6 + lsls r0, r1, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r2, r0, r2 + movs r0, #0x80 + lsls r0, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r1, r8 + muls r1, r0, r1 + adds r0, r1, #0 + adds r2, r2, r0 + asrs r2, r2, #8 + str r2, [r7, #0x64] + mov r1, ip + ldr r0, [r1, #0x50] + adds r3, r3, r0 + str r3, [r7, #0x50] + ldr r0, [r1, #0x54] + adds r2, r2, r0 + str r2, [r7, #0x54] + ldr r2, _08050C58 @ =0x03000076 + adds r1, r4, r2 + ldrh r0, [r6] + ldrh r1, [r1] + adds r0, r0, r1 + ldr r3, _08050C5C @ =0x03000070 + adds r4, r4, r3 + strh r0, [r4] + ldr r0, [r7, #0x50] + asrs r1, r0, #8 + ldr r4, _08050C60 @ =gCamera + movs r2, #0 + ldrsh r0, [r4, r2] + subs r0, r1, r0 + str r0, [sp, #4] + ldr r0, [r7, #0x54] + asrs r2, r0, #8 + movs r3, #2 + ldrsh r0, [r4, r3] + subs r0, r2, r0 + str r0, [sp, #8] + ldr r4, _08050C64 @ =gPlayer + adds r4, #0x3e + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, #0 + bne _08050B62 + b _08050C8C +_08050B62: + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r0, sb + ldr r3, _08050C64 @ =gPlayer + bl sub_800C0E0 + cmp r0, #0 + bne _08050B78 + b _08050C8C +_08050B78: + mov r0, sl + ldr r3, [r0, #0x58] + movs r5, #0x80 + ands r3, r5 + movs r1, #0x69 + add r1, sl + mov r8, r1 + adds r0, #0x6e + str r0, [sp, #0xc] + cmp r3, #0 + beq _08050B90 + b _08050CC2 +_08050B90: + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + ble _08050B9A + b _08050CC2 +_08050B9A: + movs r0, #0x20 + strb r0, [r1] + movs r0, #0 + strb r0, [r4] + movs r0, #8 + ldr r2, _08050C64 @ =gPlayer + strh r0, [r2, #0x1c] + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r2, #8] + strh r0, [r2, #0xc] + mov r1, sl + adds r1, #0x68 + ldrb r0, [r1] + subs r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + ble _08050BC2 + b _08050CC2 +_08050BC2: + ldr r2, _08050C68 @ =gDispCnt + ldrh r1, [r2] + ldr r0, _08050C6C @ =0x0000DFFF + ands r0, r1 + strh r0, [r2] + ldr r0, _08050C70 @ =gBldRegs + strh r3, [r0] + ldr r2, _08050C74 @ =gFlags + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + movs r0, #0xd + ldr r4, [sp, #0xc] + strb r0, [r4] + mov r1, sl + adds r1, #0x6f + strb r0, [r1] + subs r1, #0x23 + movs r0, #0xc0 + lsls r0, r0, #1 + strh r0, [r1] + adds r1, #2 + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r1] + mov r1, sl + ldr r0, [r1, #0x58] + orrs r0, r5 + str r0, [r1, #0x58] + mov r0, sl + adds r0, #0x54 + strh r3, [r0] + ldr r2, _08050C78 @ =gStageFlags + ldrh r0, [r2] + movs r1, #1 + orrs r0, r1 + strh r0, [r2] + ldr r1, _08050C7C @ =gLevelScore + ldr r6, [r1] + movs r2, #0xfa + lsls r2, r2, #2 + adds r0, r6, r2 + str r0, [r1] + ldr r4, _08050C80 @ =0x0000C350 + adds r1, r4, #0 + bl Div + adds r5, r0, #0 + adds r0, r6, #0 + adds r1, r4, #0 + bl Div + cmp r5, r0 + beq _08050CC2 + ldr r0, _08050C84 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08050CC2 + ldr r1, _08050C88 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + b _08050CC2 + .align 2, 0 +_08050C44: .4byte gCurTask +_08050C48: .4byte gExtraBossTaskData +_08050C4C: .4byte 0x03000018 +_08050C50: .4byte 0x0300000C +_08050C54: .4byte gSineTable +_08050C58: .4byte 0x03000076 +_08050C5C: .4byte 0x03000070 +_08050C60: .4byte gCamera +_08050C64: .4byte gPlayer +_08050C68: .4byte gDispCnt +_08050C6C: .4byte 0x0000DFFF +_08050C70: .4byte gBldRegs +_08050C74: .4byte gFlags +_08050C78: .4byte gStageFlags +_08050C7C: .4byte gLevelScore +_08050C80: .4byte 0x0000C350 +_08050C84: .4byte gGameMode +_08050C88: .4byte gNumLives +_08050C8C: + ldr r3, _08050DB0 @ =gPlayer + movs r4, #0x1c + ldrsh r0, [r3, r4] + movs r1, #0x69 + add r1, sl + mov r8, r1 + mov r2, sl + adds r2, #0x6e + str r2, [sp, #0xc] + cmp r0, #0 + bne _08050CC2 + mov r3, sl + ldr r0, [r3, #0x58] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08050CC2 + ldr r1, [r7, #0x50] + lsls r1, r1, #8 + asrs r1, r1, #0x10 + ldr r2, [r7, #0x54] + lsls r2, r2, #8 + asrs r2, r2, #0x10 + mov r0, sb + ldr r3, _08050DB0 @ =gPlayer + bl sub_800BFEC +_08050CC2: + mov r4, sb + ldr r0, [r4, #0x10] + ldr r1, _08050DB4 @ =0xFFFFFE7F + ands r0, r1 + str r0, [r4, #0x10] + mov r1, sl + ldr r0, [r1, #0x58] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08050CE2 + mov r2, r8 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #0 + beq _08050D46 +_08050CE2: + ldr r0, _08050DB0 @ =gPlayer + ldr r3, [r0, #0x10] + ands r3, r1 + cmp r3, #0 + bne _08050D00 + ldr r2, _08050DB8 @ =gDispCnt + ldrh r1, [r2] + ldr r0, _08050DBC @ =0x00007FFF + ands r0, r1 + strh r0, [r2] + ldr r0, _08050DC0 @ =gWinRegs + strh r3, [r0, #0xa] + ldr r0, _08050DC4 @ =gBldRegs + strh r3, [r0] + strh r3, [r0, #4] +_08050D00: + mov r3, r8 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #0 + beq _08050D46 + ldr r0, _08050DC8 @ =gStageTime + ldr r0, [r0] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _08050D3E + mov r4, sb + ldr r0, [r4, #0x10] + adds r1, #0xfe + orrs r0, r1 + str r0, [r4, #0x10] + ldr r2, _08050DB8 @ =gDispCnt + ldrh r0, [r2] + movs r3, #0x80 + lsls r3, r3, #8 + adds r1, r3, #0 + orrs r0, r1 + strh r0, [r2] + ldr r1, _08050DC0 @ =gWinRegs + ldr r0, _08050DCC @ =0x00003F1F + strh r0, [r1, #0xa] + ldr r1, _08050DC4 @ =gBldRegs + movs r0, #0xbf + strh r0, [r1] + movs r0, #0x10 + strh r0, [r1, #4] +_08050D3E: + mov r4, r8 + ldrb r0, [r4] + subs r0, #1 + strb r0, [r4] +_08050D46: + mov r0, sp + ldrh r1, [r0, #4] + ldr r0, [sp] + strh r1, [r0, #6] + mov r2, sp + ldrh r2, [r2, #8] + strh r2, [r0, #8] + adds r0, r7, #0 + adds r0, #0x70 + ldrh r0, [r0] + lsrs r0, r0, #6 + ldr r3, [sp] + strh r0, [r3] + mov r4, sb + ldr r0, [r4, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + ldr r2, _08050DD0 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r4, #0x10] + orrs r0, r1 + str r0, [r4, #0x10] + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + ldr r1, [sp] + bl TransformSprite + mov r0, sb + bl DisplaySprite + ldr r1, [sp, #0xc] + ldrb r0, [r1] + subs r0, #2 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xc + bls _08050DA6 + b _08050F94 +_08050DA6: + lsls r0, r0, #2 + ldr r1, _08050DD4 @ =_08050DD8 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08050DB0: .4byte gPlayer +_08050DB4: .4byte 0xFFFFFE7F +_08050DB8: .4byte gDispCnt +_08050DBC: .4byte 0x00007FFF +_08050DC0: .4byte gWinRegs +_08050DC4: .4byte gBldRegs +_08050DC8: .4byte gStageTime +_08050DCC: .4byte 0x00003F1F +_08050DD0: .4byte sa2__gUnknown_030054B8 +_08050DD4: .4byte _08050DD8 +_08050DD8: @ jump table + .4byte _08050E0C @ case 0 + .4byte _08050E0C @ case 1 + .4byte _08050F94 @ case 2 + .4byte _08050F94 @ case 3 + .4byte _08050F94 @ case 4 + .4byte _08050F94 @ case 5 + .4byte _08050F94 @ case 6 + .4byte _08050F94 @ case 7 + .4byte _08050E1C @ case 8 + .4byte _08050E44 @ case 9 + .4byte _08050F30 @ case 10 + .4byte _08050F78 @ case 11 + .4byte _08050F82 @ case 12 +_08050E0C: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #2 + movs r1, #0 + bl sub_804CFE0 + b _08050FA2 +_08050E1C: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xf0 + lsls r1, r1, #8 + movs r2, #0x80 + lsls r2, r2, #2 + bl sub_804CFE0 + cmp r0, #0 + bne _08050E32 + b _08050FA2 +_08050E32: + movs r2, #0 + ldrsh r0, [r7, r2] + movs r1, #1 + lsls r1, r0 + mov r3, sl + ldr r0, [r3, #0x5c] + orrs r0, r1 + str r0, [r3, #0x5c] + b _08050FA2 +_08050E44: + ldr r2, _08050EBC @ =gDispCnt + ldrh r1, [r2] + ldr r0, _08050EC0 @ =0x0000DFFF + ands r0, r1 + strh r0, [r2] + ldr r0, [r7, #4] + cmp r0, #0 + bne _08050E6E + ldr r0, _08050EC4 @ =0x00000299 + mov r4, sb + strh r0, [r4, #0xa] + mov r1, sb + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + adds r1, #1 + movs r0, #0xff + strb r0, [r1] + movs r0, #0x9b + bl m4aSongNumStart +_08050E6E: + ldr r0, [r7, #4] + cmp r0, #0xa + bne _08050E7A + movs r0, #0x9b + bl m4aSongNumStop +_08050E7A: + ldr r0, [r7, #4] + cmp r0, #0xf + ble _08050ED0 + movs r1, #0 + ldrsh r0, [r7, r1] + movs r1, #1 + lsls r1, r0 + mov r2, sl + ldr r0, [r2, #0x5c] + orrs r0, r1 + str r0, [r2, #0x5c] + ldr r1, _08050EC8 @ =gBldRegs + movs r3, #0 + movs r0, #0 + strh r0, [r1] + ldr r2, _08050ECC @ =gFlags + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + ldr r0, _08050EC4 @ =0x00000299 + mov r4, sb + strh r0, [r4, #0xa] + mov r0, sb + adds r0, #0x20 + strb r3, [r0] + mov r1, sb + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + b _08050FA2 + .align 2, 0 +_08050EBC: .4byte gDispCnt +_08050EC0: .4byte 0x0000DFFF +_08050EC4: .4byte 0x00000299 +_08050EC8: .4byte gBldRegs +_08050ECC: .4byte gFlags +_08050ED0: + ldr r2, _08050F20 @ =gSineTable + lsls r0, r0, #0xa + asrs r0, r0, #6 + ldr r1, _08050F24 @ =0x000003FF + ands r0, r1 + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + adds r0, r0, r2 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + subs r1, r1, r0 + lsls r1, r1, #0x15 + movs r0, #0xb8 + lsls r0, r0, #0x17 + adds r1, r1, r0 + lsrs r2, r1, #0x10 + ldr r0, _08050F28 @ =gPlayer + ldr r0, [r0, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08050F70 + ldr r0, [sp, #4] + ldr r1, [sp, #8] + adds r3, r7, #0 + bl sub_8052150 + cmp r0, #0 + bne _08050F70 + ldr r0, _08050F2C @ =gFlags + ldr r1, [r0] + movs r2, #5 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0] + b _08050F70 + .align 2, 0 +_08050F20: .4byte gSineTable +_08050F24: .4byte 0x000003FF +_08050F28: .4byte gPlayer +_08050F2C: .4byte gFlags +_08050F30: + ldr r1, [r7, #4] + movs r0, #7 + ands r0, r1 + cmp r0, #0 + bne _08050F70 + lsls r0, r1, #0xa + ldr r1, [r7, #0x50] + subs r1, r1, r0 + ldr r3, _08050F5C @ =0xFFFF9C00 + adds r2, r1, r3 + ldr r0, _08050F60 @ =0xFFFFE000 + cmp r2, r0 + bge _08050F64 + movs r4, #0 + ldrsh r0, [r7, r4] + movs r1, #1 + lsls r1, r0 + mov r2, sl + ldr r0, [r2, #0x5c] + orrs r0, r1 + str r0, [r2, #0x5c] + b _08050F70 + .align 2, 0 +_08050F5C: .4byte 0xFFFF9C00 +_08050F60: .4byte 0xFFFFE000 +_08050F64: + mov r3, sl + ldr r1, [r3, #0x64] + lsls r1, r1, #8 + adds r0, r2, #0 + bl sub_804B570 +_08050F70: + ldr r0, [r7, #4] + adds r0, #1 + str r0, [r7, #4] + b _08050FA2 +_08050F78: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xc0 + lsls r1, r1, #5 + b _08050F8A +_08050F82: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #6 +_08050F8A: + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 + b _08050FA2 +_08050F94: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 +_08050FA2: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050FB4.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050FB4.inc new file mode 100644 index 0000000000..560257929a --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8050FB4.inc @@ -0,0 +1,448 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r0, _080510D0 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r0, _080510D4 @ =gExtraBossTaskData + ldr r0, [r0] + mov sb, r0 + ldr r0, _080510D8 @ =0x03000018 + adds r6, r4, r0 + ldr r1, _080510DC @ =0x0300000C + adds r1, r4, r1 + str r1, [sp] + ldr r5, _080510E0 @ =gSineTable + ldr r2, [r7, #8] + adds r2, #0x70 + mov r8, r2 + ldrh r1, [r2] + lsrs r1, r1, #6 + movs r3, #0x80 + lsls r3, r3, #1 + mov ip, r3 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r2, [r7, #0x68] + adds r3, r2, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + mov sl, r1 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + subs r3, r3, r0 + asrs r3, r3, #8 + str r3, [r7, #0x60] + mov r0, r8 + ldrh r1, [r0] + lsrs r1, r1, #6 + lsls r0, r1, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r2, r0, r2 + add r1, ip + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + adds r2, r2, r0 + asrs r2, r2, #8 + str r2, [r7, #0x64] + ldr r1, [r7, #8] + ldr r0, [r1, #0x50] + adds r3, r3, r0 + str r3, [r7, #0x50] + ldr r0, [r1, #0x54] + adds r2, r2, r0 + str r2, [r7, #0x54] + ldr r2, _080510E4 @ =0x03000076 + adds r1, r4, r2 + mov r3, r8 + ldrh r0, [r3] + ldrh r1, [r1] + adds r0, r0, r1 + ldr r1, _080510E8 @ =0x03000070 + adds r4, r4, r1 + strh r0, [r4] + ldr r2, [r7, #0x50] + asrs r2, r2, #8 + ldr r3, _080510EC @ =gCamera + movs r4, #0 + ldrsh r0, [r3, r4] + subs r2, r2, r0 + ldr r0, [r7, #0x54] + asrs r0, r0, #8 + movs r4, #2 + ldrsh r1, [r3, r4] + subs r0, r0, r1 + ldr r1, [sp] + strh r2, [r1, #6] + strh r0, [r1, #8] + ldr r0, [r6, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] + ldr r2, _080510F0 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r6, #0x10] + orrs r0, r1 + str r0, [r6, #0x10] + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + ldr r1, [sp] + bl TransformSprite + adds r0, r6, #0 + bl DisplaySprite + mov r0, sb + adds r0, #0x6e + ldrb r0, [r0] + subs r0, #2 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xc + bls _080510C6 + b _08051324 +_080510C6: + lsls r0, r0, #2 + ldr r1, _080510F4 @ =_080510F8 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080510D0: .4byte gCurTask +_080510D4: .4byte gExtraBossTaskData +_080510D8: .4byte 0x03000018 +_080510DC: .4byte 0x0300000C +_080510E0: .4byte gSineTable +_080510E4: .4byte 0x03000076 +_080510E8: .4byte 0x03000070 +_080510EC: .4byte gCamera +_080510F0: .4byte sa2__gUnknown_030054B8 +_080510F4: .4byte _080510F8 +_080510F8: @ jump table + .4byte _0805112C @ case 0 + .4byte _0805113C @ case 1 + .4byte _0805116E @ case 2 + .4byte _080511BC @ case 3 + .4byte _08051204 @ case 4 + .4byte _08051250 @ case 5 + .4byte _080512C8 @ case 6 + .4byte _080512C8 @ case 7 + .4byte _08051324 @ case 8 + .4byte _08051324 @ case 9 + .4byte _08051324 @ case 10 + .4byte _08051300 @ case 11 + .4byte _08051312 @ case 12 +_0805112C: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 + b _08051332 +_0805113C: + ldr r1, _08051158 @ =gUnknown_084AE560 + movs r2, #0 + ldrsh r0, [r7, r2] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0805115C + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #5 + b _08051164 + .align 2, 0 +_08051158: .4byte gUnknown_084AE560 +_0805115C: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #6 +_08051164: + movs r2, #0x80 + lsls r2, r2, #2 + bl sub_804CFE0 + b _08051332 +_0805116E: + ldr r1, _080511B8 @ =gUnknown_084AE560 + movs r3, #0 + ldrsh r0, [r7, r3] + adds r0, r0, r1 + ldrb r1, [r0] + movs r6, #1 + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + bne _08051184 + b _08051332 +_08051184: + movs r5, #0xc0 + lsls r5, r5, #7 + adds r4, r7, #0 + adds r4, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_804CFE0 + ldrh r0, [r4] + cmp r0, r5 + beq _080511A0 + b _08051332 +_080511A0: + ldr r0, [r7, #4] + adds r1, r0, #0 + adds r0, #1 + str r0, [r7, #4] + cmp r1, #0x1d + bgt _080511AE + b _08051332 +_080511AE: + movs r4, #0 + ldrsh r0, [r7, r4] + adds r1, r6, #0 + b _080512B2 + .align 2, 0 +_080511B8: .4byte gUnknown_084AE560 +_080511BC: + ldr r1, _080511FC @ =gUnknown_084AE560 + movs r3, #0 + ldrsh r0, [r7, r3] + adds r0, r0, r1 + ldrb r1, [r0] + movs r4, #1 + adds r0, r4, #0 + ands r0, r1 + cmp r0, #0 + bne _080511D2 + b _08051332 +_080511D2: + ldr r0, [r7, #4] + cmp r0, #0x10 + ble _080511DA + movs r0, #0x10 +_080511DA: + lsls r0, r0, #0x1a + ldr r1, _08051200 @ =gSineTable + lsrs r0, r0, #0x16 + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + subs r2, r2, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0xa + movs r0, #0xb0 + lsls r0, r0, #7 + b _0805128C + .align 2, 0 +_080511FC: .4byte gUnknown_084AE560 +_08051200: .4byte gSineTable +_08051204: + ldr r1, _0805124C @ =gUnknown_084AE560 + movs r3, #0 + ldrsh r0, [r7, r3] + adds r0, r0, r1 + ldrb r1, [r0] + movs r6, #1 + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + beq _0805121A + b _08051332 +_0805121A: + movs r5, #0xc0 + lsls r5, r5, #7 + adds r4, r7, #0 + adds r4, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_804CFE0 + ldrh r0, [r4] + cmp r0, r5 + beq _08051236 + b _08051332 +_08051236: + ldr r0, [r7, #4] + adds r1, r0, #0 + adds r0, #1 + str r0, [r7, #4] + cmp r1, #0x1d + ble _08051332 + movs r4, #0 + ldrsh r0, [r7, r4] + adds r1, r6, #0 + b _080512B2 + .align 2, 0 +_0805124C: .4byte gUnknown_084AE560 +_08051250: + ldr r1, _080512C0 @ =gUnknown_084AE560 + movs r3, #0 + ldrsh r0, [r7, r3] + adds r0, r0, r1 + ldrb r1, [r0] + movs r4, #1 + adds r0, r4, #0 + ands r0, r1 + cmp r0, #0 + bne _08051332 + ldr r0, [r7, #4] + cmp r0, #0x10 + ble _0805126C + movs r0, #0x10 +_0805126C: + lsls r0, r0, #0x1a + ldr r1, _080512C4 @ =gSineTable + lsrs r0, r0, #0x16 + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + subs r2, r2, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0xa + movs r0, #0xc0 + lsls r0, r0, #7 +_0805128C: + adds r1, r0, #0 + subs r1, r1, r2 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #4 + bl sub_804CFE0 + ldr r0, [r7, #4] + adds r1, r0, #0 + adds r0, #1 + str r0, [r7, #4] + cmp r1, #0x4b + ble _08051332 + movs r1, #0 + ldrsh r0, [r7, r1] + adds r1, r4, #0 +_080512B2: + lsls r1, r0 + mov r2, sb + ldr r0, [r2, #0x5c] + orrs r0, r1 + str r0, [r2, #0x5c] + b _08051332 + .align 2, 0 +_080512C0: .4byte gUnknown_084AE560 +_080512C4: .4byte gSineTable +_080512C8: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xf0 + lsls r1, r1, #8 + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 + cmp r0, #0 + beq _08051332 + mov r0, sb + adds r0, #0x54 + ldrh r1, [r0] + adds r2, r1, #1 + strh r2, [r0] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + cmp r1, #0x3b + ble _08051332 + movs r3, #0 + ldrsh r0, [r7, r3] + movs r1, #1 + lsls r1, r0 + mov r4, sb + ldr r0, [r4, #0x5c] + orrs r0, r1 + str r0, [r4, #0x5c] + b _08051332 +_08051300: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xd0 + lsls r1, r1, #8 + movs r2, #0x80 + lsls r2, r2, #3 + bl sub_804CFE0 + b _08051332 +_08051312: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xf0 + lsls r1, r1, #8 + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 + b _08051332 +_08051324: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 +_08051332: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051344.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051344.inc new file mode 100644 index 0000000000..3ea53db959 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051344.inc @@ -0,0 +1,342 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r0, _08051460 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r0, _08051464 @ =gExtraBossTaskData + ldr r0, [r0] + str r0, [sp] + ldr r0, _08051468 @ =0x03000018 + adds r6, r4, r0 + ldr r1, _0805146C @ =0x0300000C + adds r1, r1, r4 + mov sb, r1 + ldr r5, _08051470 @ =gSineTable + ldr r2, [r7, #8] + adds r2, #0x70 + mov r8, r2 + ldrh r1, [r2] + lsrs r1, r1, #6 + movs r3, #0x80 + lsls r3, r3, #1 + mov ip, r3 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r2, [r7, #0x68] + adds r3, r2, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + mov sl, r1 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + subs r3, r3, r0 + asrs r3, r3, #8 + str r3, [r7, #0x60] + mov r0, r8 + ldrh r1, [r0] + lsrs r1, r1, #6 + lsls r0, r1, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r2, r0, r2 + add r1, ip + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + adds r2, r2, r0 + asrs r2, r2, #8 + str r2, [r7, #0x64] + ldr r1, [r7, #8] + ldr r0, [r1, #0x50] + adds r3, r3, r0 + str r3, [r7, #0x50] + ldr r0, [r1, #0x54] + adds r2, r2, r0 + str r2, [r7, #0x54] + ldr r2, _08051474 @ =0x03000076 + adds r1, r4, r2 + mov r3, r8 + ldrh r0, [r3] + ldrh r1, [r1] + adds r0, r0, r1 + ldr r1, _08051478 @ =0x03000070 + adds r4, r4, r1 + strh r0, [r4] + ldr r2, [r7, #0x50] + asrs r2, r2, #8 + ldr r3, _0805147C @ =gCamera + movs r4, #0 + ldrsh r0, [r3, r4] + subs r2, r2, r0 + ldr r0, [r7, #0x54] + asrs r0, r0, #8 + movs r4, #2 + ldrsh r1, [r3, r4] + subs r0, r0, r1 + mov r1, sb + strh r2, [r1, #6] + strh r0, [r1, #8] + ldr r0, [r6, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] + ldr r2, _08051480 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r6, #0x10] + orrs r0, r1 + str r0, [r6, #0x10] + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + mov r1, sb + bl TransformSprite + adds r0, r6, #0 + bl DisplaySprite + ldr r0, [sp] + adds r0, #0x6e + ldrb r0, [r0] + subs r0, #2 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xc + bls _08051456 + b _080515E4 +_08051456: + lsls r0, r0, #2 + ldr r1, _08051484 @ =_08051488 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08051460: .4byte gCurTask +_08051464: .4byte gExtraBossTaskData +_08051468: .4byte 0x03000018 +_0805146C: .4byte 0x0300000C +_08051470: .4byte gSineTable +_08051474: .4byte 0x03000076 +_08051478: .4byte 0x03000070 +_0805147C: .4byte gCamera +_08051480: .4byte sa2__gUnknown_030054B8 +_08051484: .4byte _08051488 +_08051488: @ jump table + .4byte _080514BC @ case 0 + .4byte _080514CC @ case 1 + .4byte _080514F6 @ case 2 + .4byte _08051518 @ case 3 + .4byte _08051538 @ case 4 + .4byte _08051558 @ case 5 + .4byte _08051578 @ case 6 + .4byte _0805158A @ case 7 + .4byte _080515E4 @ case 8 + .4byte _080515E4 @ case 9 + .4byte _080515E4 @ case 10 + .4byte _080515C0 @ case 11 + .4byte _080515D2 @ case 12 +_080514BC: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 + b _080515F2 +_080514CC: + ldr r1, _080514E8 @ =gUnknown_084AE560 + movs r2, #0 + ldrsh r0, [r7, r2] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080514EC + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xc0 + lsls r1, r1, #7 + b _08051580 + .align 2, 0 +_080514E8: .4byte gUnknown_084AE560 +_080514EC: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xd0 + lsls r1, r1, #7 + b _08051580 +_080514F6: + ldr r1, _08051514 @ =gUnknown_084AE560 + movs r3, #0 + ldrsh r0, [r7, r3] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080515F2 + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xc0 + lsls r1, r1, #7 + b _080515DA + .align 2, 0 +_08051514: .4byte gUnknown_084AE560 +_08051518: + ldr r1, _08051534 @ =gUnknown_084AE560 + movs r4, #0 + ldrsh r0, [r7, r4] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080515F2 + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #5 + b _080515C8 + .align 2, 0 +_08051534: .4byte gUnknown_084AE560 +_08051538: + ldr r1, _08051554 @ =gUnknown_084AE560 + movs r2, #0 + ldrsh r0, [r7, r2] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _080515F2 + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xc0 + lsls r1, r1, #7 + b _080515DA + .align 2, 0 +_08051554: .4byte gUnknown_084AE560 +_08051558: + ldr r1, _08051574 @ =gUnknown_084AE560 + movs r3, #0 + ldrsh r0, [r7, r3] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _080515F2 + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #5 + b _080515C8 + .align 2, 0 +_08051574: .4byte gUnknown_084AE560 +_08051578: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #7 +_08051580: + movs r2, #0x80 + lsls r2, r2, #2 + bl sub_804CFE0 + b _080515F2 +_0805158A: + movs r1, #0x80 + lsls r1, r1, #7 + ldr r3, _080515B4 @ =gPseudoRandom + ldr r2, [r3] + ldr r0, _080515B8 @ =0x00196225 + muls r0, r2, r0 + ldr r4, _080515BC @ =0x3C6EF35F + adds r0, r0, r4 + str r0, [r3] + lsls r0, r0, #0xc + lsrs r0, r0, #0x14 + subs r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #5 + bl sub_804CFE0 + b _080515F2 + .align 2, 0 +_080515B4: .4byte gPseudoRandom +_080515B8: .4byte 0x00196225 +_080515BC: .4byte 0x3C6EF35F +_080515C0: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #6 +_080515C8: + movs r2, #0x80 + lsls r2, r2, #3 + bl sub_804CFE0 + b _080515F2 +_080515D2: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #5 +_080515DA: + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 + b _080515F2 +_080515E4: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 +_080515F2: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051604.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051604.inc new file mode 100644 index 0000000000..f096c67216 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051604.inc @@ -0,0 +1,351 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r0, _080517AC @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r0, [r7, #8] + mov sl, r0 + ldr r0, _080517B0 @ =gExtraBossTaskData + ldr r0, [r0] + str r0, [sp] + ldr r1, _080517B4 @ =0x03000018 + adds r1, r1, r4 + mov sb, r1 + ldr r2, _080517B8 @ =0x0300000C + adds r2, r2, r4 + mov r8, r2 + ldr r5, _080517BC @ =gSineTable + mov ip, r5 + mov r5, sl + adds r5, #0x70 + ldrh r1, [r5] + lsrs r1, r1, #6 + movs r6, #0x80 + lsls r6, r6, #1 + adds r0, r1, r6 + lsls r0, r0, #1 + add r0, ip + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r2, [r7, #0x68] + adds r3, r2, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + add r1, ip + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + muls r0, r1, r0 + subs r3, r3, r0 + asrs r3, r3, #8 + str r3, [r7, #0x60] + ldrh r1, [r5] + ldr r0, _080517C0 @ =0x000003FF + mov r6, sp + strh r0, [r6, #4] + lsrs r1, r1, #6 + lsls r0, r1, #1 + add r0, ip + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r2, r0, r2 + movs r6, #0x80 + lsls r6, r6, #1 + adds r1, r1, r6 + lsls r1, r1, #1 + add r1, ip + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + muls r0, r1, r0 + adds r2, r2, r0 + asrs r2, r2, #8 + str r2, [r7, #0x64] + mov r6, sl + ldr r0, [r6, #0x50] + adds r3, r3, r0 + str r3, [r7, #0x50] + ldr r0, [r6, #0x54] + adds r2, r2, r0 + str r2, [r7, #0x54] + ldr r0, _080517C4 @ =0x03000076 + adds r1, r4, r0 + ldrh r0, [r5] + ldrh r1, [r1] + adds r2, r0, r1 + ldr r1, _080517C8 @ =0x03000070 + adds r4, r4, r1 + strh r2, [r4] + ldr r0, [r7, #0x50] + asrs r3, r0, #8 + ldr r4, _080517CC @ =gCamera + movs r5, #0 + ldrsh r0, [r4, r5] + subs r0, r3, r0 + str r0, [sp, #8] + ldr r0, [r7, #0x54] + asrs r4, r0, #8 + ldr r6, _080517CC @ =gCamera + movs r1, #2 + ldrsh r0, [r6, r1] + subs r5, r4, r0 + ldr r6, _080517D0 @ =gPlayer + movs r1, #0x1c + ldrsh r0, [r6, r1] + cmp r0, #0 + bne _0805173E + ldr r6, [sp] + ldr r0, [r6, #0x58] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0805173E + ldr r0, _080517D4 @ =0xFFFFC000 + adds r2, r2, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x16 + mov r1, sp + ldrh r1, [r1, #4] + ands r2, r1 + movs r6, #0x80 + lsls r6, r6, #1 + adds r0, r2, r6 + lsls r0, r0, #1 + add r0, ip + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #3 + subs r1, r1, r0 + lsls r1, r1, #8 + rsbs r1, r1, #0 + asrs r1, r1, #0x10 + adds r1, r3, r1 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + lsls r2, r2, #1 + add r2, ip + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r2, r0, #1 + adds r2, r2, r0 + lsls r2, r2, #3 + subs r2, r2, r0 + lsls r2, r2, #8 + rsbs r2, r2, #0 + asrs r2, r2, #0x10 + adds r2, r4, r2 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r0, sb + ldr r3, _080517D0 @ =gPlayer + bl sub_800BFEC +_0805173E: + mov r0, sp + ldrh r1, [r0, #8] + mov r0, r8 + strh r1, [r0, #6] + strh r5, [r0, #8] + adds r0, r7, #0 + adds r0, #0x70 + ldrh r0, [r0] + ldr r2, _080517D4 @ =0xFFFFC000 + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x16 + mov r4, r8 + strh r0, [r4] + mov r5, sb + ldr r0, [r5, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + ldr r2, _080517D8 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r5, #0x10] + orrs r0, r1 + str r0, [r5, #0x10] + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + mov r1, r8 + bl TransformSprite + mov r0, sb + bl DisplaySprite + ldr r0, [sp] + adds r0, #0x6e + ldrb r0, [r0] + subs r0, #2 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xc + bls _080517A2 + b _080518CA +_080517A2: + lsls r0, r0, #2 + ldr r1, _080517DC @ =_080517E0 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080517AC: .4byte gCurTask +_080517B0: .4byte gExtraBossTaskData +_080517B4: .4byte 0x03000018 +_080517B8: .4byte 0x0300000C +_080517BC: .4byte gSineTable +_080517C0: .4byte 0x000003FF +_080517C4: .4byte 0x03000076 +_080517C8: .4byte 0x03000070 +_080517CC: .4byte gCamera +_080517D0: .4byte gPlayer +_080517D4: .4byte 0xFFFFC000 +_080517D8: .4byte sa2__gUnknown_030054B8 +_080517DC: .4byte _080517E0 +_080517E0: @ jump table + .4byte _08051814 @ case 0 + .4byte _0805181E @ case 1 + .4byte _080518CA @ case 2 + .4byte _080518CA @ case 3 + .4byte _080518CA @ case 4 + .4byte _080518CA @ case 5 + .4byte _08051828 @ case 6 + .4byte _08051842 @ case 7 + .4byte _080518CA @ case 8 + .4byte _080518CA @ case 9 + .4byte _080518CA @ case 10 + .4byte _080518A8 @ case 11 + .4byte _080518BA @ case 12 +_08051814: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #7 + b _08051838 +_0805181E: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #2 + b _080518C2 +_08051828: + adds r0, r7, #0 + adds r0, #0x76 + mov r1, sl + adds r1, #0x70 + ldrh r1, [r1] + rsbs r1, r1, #0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 +_08051838: + movs r2, #0x80 + lsls r2, r2, #2 + bl sub_804CFE0 + b _080518D8 +_08051842: + adds r0, r7, #0 + adds r0, #0x76 + mov r1, sl + adds r1, #0x70 + ldrh r1, [r1] + rsbs r1, r1, #0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + movs r2, #0x80 + lsls r2, r2, #2 + bl sub_804CFE0 + ldr r0, _08051898 @ =gStageTime + ldr r0, [r0] + movs r1, #0x1f + ands r0, r1 + cmp r0, #0 + bne _080518D8 + ldr r3, [r7, #0x50] + ldr r0, [r7, #0x54] + movs r6, #0xb8 + lsls r6, r6, #5 + adds r4, r0, r6 + ldr r2, _0805189C @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _080518A0 @ =0x00196225 + muls r0, r1, r0 + ldr r1, _080518A4 @ =0x3C6EF35F + adds r0, r0, r1 + str r0, [r2] + movs r2, #0 + movs r1, #0xc0 + lsls r1, r1, #0xa + ands r0, r1 + cmp r0, #0 + bne _0805188C + movs r2, #1 +_0805188C: + adds r0, r3, #0 + adds r1, r4, #0 + bl sub_804A8A8 + b _080518D8 + .align 2, 0 +_08051898: .4byte gStageTime +_0805189C: .4byte gPseudoRandom +_080518A0: .4byte 0x00196225 +_080518A4: .4byte 0x3C6EF35F +_080518A8: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xb0 + lsls r1, r1, #8 + movs r2, #0x80 + lsls r2, r2, #3 + bl sub_804CFE0 + b _080518D8 +_080518BA: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 +_080518C2: + movs r1, #0 + bl sub_804CFE0 + b _080518D8 +_080518CA: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 +_080518D8: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_80519E8.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_80519E8.inc new file mode 100644 index 0000000000..dd9c353ded --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_80519E8.inc @@ -0,0 +1,288 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r0, _08051B0C @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r0, [r7, #8] + str r0, [sp] + ldr r0, _08051B10 @ =gExtraBossTaskData + ldr r0, [r0] + str r0, [sp, #4] + ldr r1, _08051B14 @ =0x03000018 + adds r6, r4, r1 + ldr r2, _08051B18 @ =0x0300000C + adds r2, r2, r4 + mov sl, r2 + ldr r5, _08051B1C @ =gSineTable + ldr r3, [sp] + adds r3, #0x70 + mov r8, r3 + ldrh r1, [r3] + lsrs r1, r1, #6 + movs r0, #0x80 + lsls r0, r0, #1 + mov ip, r0 + adds r0, r1, r0 + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r2, [r7, #0x68] + adds r3, r2, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + mov sb, r1 + mov r1, sb + muls r1, r0, r1 + adds r0, r1, #0 + subs r3, r3, r0 + asrs r3, r3, #8 + str r3, [r7, #0x60] + mov r0, r8 + ldrh r1, [r0] + lsrs r1, r1, #6 + lsls r0, r1, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r2, r0, r2 + add r1, ip + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r1, sb + muls r1, r0, r1 + adds r0, r1, #0 + adds r2, r2, r0 + asrs r2, r2, #8 + str r2, [r7, #0x64] + ldr r5, [sp] + ldr r0, [r5, #0x50] + adds r3, r3, r0 + str r3, [r7, #0x50] + ldr r0, [r5, #0x54] + adds r2, r2, r0 + str r2, [r7, #0x54] + ldr r0, _08051B20 @ =0x03000076 + adds r1, r4, r0 + mov r2, r8 + ldrh r0, [r2] + ldrh r1, [r1] + adds r0, r0, r1 + ldr r3, _08051B24 @ =0x03000070 + adds r4, r4, r3 + strh r0, [r4] + ldr r2, [r7, #0x50] + asrs r2, r2, #8 + ldr r5, _08051B28 @ =gCamera + movs r1, #0 + ldrsh r0, [r5, r1] + subs r2, r2, r0 + ldr r0, [r7, #0x54] + asrs r0, r0, #8 + movs r3, #2 + ldrsh r1, [r5, r3] + subs r0, r0, r1 + mov r5, sl + strh r2, [r5, #6] + strh r0, [r5, #8] + ldrh r0, [r4] + lsrs r0, r0, #6 + strh r0, [r5] + ldr r0, [r6, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] + ldr r2, _08051B2C @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r6, #0x10] + orrs r0, r1 + str r0, [r6, #0x10] + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + mov r1, sl + bl TransformSprite + adds r0, r6, #0 + bl DisplaySprite + ldr r0, [sp, #4] + adds r0, #0x6e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xe + bls _08051B02 + b _08051C28 +_08051B02: + lsls r0, r0, #2 + ldr r1, _08051B30 @ =_08051B34 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08051B0C: .4byte gCurTask +_08051B10: .4byte gExtraBossTaskData +_08051B14: .4byte 0x03000018 +_08051B18: .4byte 0x0300000C +_08051B1C: .4byte gSineTable +_08051B20: .4byte 0x03000076 +_08051B24: .4byte 0x03000070 +_08051B28: .4byte gCamera +_08051B2C: .4byte sa2__gUnknown_030054B8 +_08051B30: .4byte _08051B34 +_08051B34: @ jump table + .4byte _08051BCC @ case 0 + .4byte _08051C28 @ case 1 + .4byte _08051B70 @ case 2 + .4byte _08051B70 @ case 3 + .4byte _08051B80 @ case 4 + .4byte _08051B8C @ case 5 + .4byte _08051C34 @ case 6 + .4byte _08051BA4 @ case 7 + .4byte _08051C28 @ case 8 + .4byte _08051C28 @ case 9 + .4byte _08051C28 @ case 10 + .4byte _08051C28 @ case 11 + .4byte _08051C28 @ case 12 + .4byte _08051BDC @ case 13 + .4byte _08051C16 @ case 14 +_08051B70: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #2 + movs r1, #0 + bl sub_804CFE0 + b _08051C34 +_08051B80: + adds r0, r7, #0 + adds r0, #0x76 + ldr r1, [sp] + adds r1, #0x76 + ldrh r1, [r1] + b _08051C1E +_08051B8C: + ldr r1, _08051BA0 @ =gUnknown_084AE560 + movs r2, #0 + ldrsh r0, [r7, r2] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _08051C34 + b _08051BB6 + .align 2, 0 +_08051BA0: .4byte gUnknown_084AE560 +_08051BA4: + ldr r1, _08051BC8 @ =gUnknown_084AE560 + movs r3, #0 + ldrsh r0, [r7, r3] + adds r0, r0, r1 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08051C34 +_08051BB6: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xe8 + lsls r1, r1, #8 + movs r2, #0x80 + lsls r2, r2, #2 + bl sub_804CFE0 + b _08051C34 + .align 2, 0 +_08051BC8: .4byte gUnknown_084AE560 +_08051BCC: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #5 + movs r2, #0x80 + bl sub_804CFE0 + b _08051C34 +_08051BDC: + adds r4, r7, #0 + adds r4, #0x76 + movs r5, #0x80 + lsls r5, r5, #7 + movs r2, #0x80 + lsls r2, r2, #2 + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_804CFE0 + ldr r0, [sp, #4] + adds r0, #0x69 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _08051C34 + ldrh r0, [r4] + cmp r0, r5 + bne _08051C34 + movs r5, #0 + ldrsh r0, [r7, r5] + movs r1, #1 + lsls r1, r0 + ldr r2, [sp, #4] + ldr r0, [r2, #0x5c] + orrs r0, r1 + str r0, [r2, #0x5c] + b _08051C34 +_08051C16: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xe8 + lsls r1, r1, #8 +_08051C1E: + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 + b _08051C34 +_08051C28: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0 + movs r2, #0x80 + bl sub_804CFE0 +_08051C34: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051C44.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051C44.inc new file mode 100644 index 0000000000..b3988e812e --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051C44.inc @@ -0,0 +1,235 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r0, _08051D64 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r0, _08051D68 @ =gExtraBossTaskData + ldr r0, [r0] + str r0, [sp] + ldr r0, _08051D6C @ =0x03000018 + adds r6, r4, r0 + ldr r1, _08051D70 @ =0x0300000C + adds r1, r1, r4 + mov sb, r1 + ldr r5, _08051D74 @ =gSineTable + ldr r2, [r7, #8] + adds r2, #0x70 + mov r8, r2 + ldrh r1, [r2] + lsrs r1, r1, #6 + movs r3, #0x80 + lsls r3, r3, #1 + mov ip, r3 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r2, [r7, #0x68] + adds r3, r2, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + mov sl, r1 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + subs r3, r3, r0 + asrs r3, r3, #8 + str r3, [r7, #0x60] + mov r0, r8 + ldrh r1, [r0] + lsrs r1, r1, #6 + lsls r0, r1, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r2, r0, r2 + add r1, ip + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + adds r2, r2, r0 + asrs r2, r2, #8 + str r2, [r7, #0x64] + ldr r5, [r7, #8] + ldr r0, [r5, #0x50] + adds r3, r3, r0 + str r3, [r7, #0x50] + ldr r0, [r5, #0x54] + adds r2, r2, r0 + str r2, [r7, #0x54] + ldr r0, _08051D78 @ =0x03000076 + adds r1, r4, r0 + mov r2, r8 + ldrh r0, [r2] + ldrh r1, [r1] + adds r0, r0, r1 + ldr r3, _08051D7C @ =0x03000070 + adds r4, r4, r3 + strh r0, [r4] + ldr r2, [r7, #0x50] + asrs r2, r2, #8 + ldr r5, _08051D80 @ =gCamera + movs r1, #0 + ldrsh r0, [r5, r1] + subs r2, r2, r0 + ldr r0, [r7, #0x54] + asrs r0, r0, #8 + movs r3, #2 + ldrsh r1, [r5, r3] + subs r0, r0, r1 + mov r5, sb + strh r2, [r5, #6] + strh r0, [r5, #8] + ldrh r0, [r4] + lsrs r0, r0, #6 + strh r0, [r5] + ldr r0, [r6, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] + ldr r2, _08051D84 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r6, #0x10] + orrs r0, r1 + str r0, [r6, #0x10] + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + mov r1, sb + bl TransformSprite + adds r0, r6, #0 + bl DisplaySprite + ldr r0, [sp] + adds r0, #0x6e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xe + bhi _08051E18 + lsls r0, r0, #2 + ldr r1, _08051D88 @ =_08051D8C + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08051D64: .4byte gCurTask +_08051D68: .4byte gExtraBossTaskData +_08051D6C: .4byte 0x03000018 +_08051D70: .4byte 0x0300000C +_08051D74: .4byte gSineTable +_08051D78: .4byte 0x03000076 +_08051D7C: .4byte 0x03000070 +_08051D80: .4byte gCamera +_08051D84: .4byte sa2__gUnknown_030054B8 +_08051D88: .4byte _08051D8C +_08051D8C: @ jump table + .4byte _08051DDC @ case 0 + .4byte _08051DE6 @ case 1 + .4byte _08051DC8 @ case 2 + .4byte _08051E18 @ case 3 + .4byte _08051E18 @ case 4 + .4byte _08051E18 @ case 5 + .4byte _08051E18 @ case 6 + .4byte _08051E18 @ case 7 + .4byte _08051DD2 @ case 8 + .4byte _08051DD2 @ case 9 + .4byte _08051E18 @ case 10 + .4byte _08051E18 @ case 11 + .4byte _08051E18 @ case 12 + .4byte _08051DF6 @ case 13 + .4byte _08051E06 @ case 14 +_08051DC8: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #2 + b _08051DFE +_08051DD2: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #2 + b _08051DFE +_08051DDC: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #6 + b _08051DEE +_08051DE6: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xe0 + lsls r1, r1, #8 +_08051DEE: + movs r2, #0x80 + bl sub_804CFE0 + b _08051E28 +_08051DF6: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #3 +_08051DFE: + movs r1, #0 + bl sub_804CFE0 + b _08051E28 +_08051E06: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xc0 + lsls r1, r1, #5 + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 + b _08051E28 +_08051E18: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0x80 + lsls r1, r1, #6 + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 +_08051E28: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051E38.inc b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051E38.inc new file mode 100644 index 0000000000..2a92b89d3e --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/boss_xtra__sub_8051E38.inc @@ -0,0 +1,233 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r0, _08051F58 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r0, _08051F5C @ =gExtraBossTaskData + ldr r0, [r0] + str r0, [sp] + ldr r0, _08051F60 @ =0x03000018 + adds r6, r4, r0 + ldr r1, _08051F64 @ =0x0300000C + adds r1, r1, r4 + mov sb, r1 + ldr r5, _08051F68 @ =gSineTable + ldr r2, [r7, #8] + adds r2, #0x70 + mov r8, r2 + ldrh r1, [r2] + lsrs r1, r1, #6 + movs r3, #0x80 + lsls r3, r3, #1 + mov ip, r3 + adds r0, r1, r3 + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r2, [r7, #0x68] + adds r3, r2, #0 + muls r3, r0, r3 + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r7, #0x6c] + mov sl, r1 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + subs r3, r3, r0 + asrs r3, r3, #8 + str r3, [r7, #0x60] + mov r0, r8 + ldrh r1, [r0] + lsrs r1, r1, #6 + lsls r0, r1, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r2, r0, r2 + add r1, ip + lsls r1, r1, #1 + adds r1, r1, r5 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r1, sl + muls r1, r0, r1 + adds r0, r1, #0 + adds r2, r2, r0 + asrs r2, r2, #8 + str r2, [r7, #0x64] + ldr r5, [r7, #8] + ldr r0, [r5, #0x50] + adds r3, r3, r0 + str r3, [r7, #0x50] + ldr r0, [r5, #0x54] + adds r2, r2, r0 + str r2, [r7, #0x54] + ldr r0, _08051F6C @ =0x03000076 + adds r1, r4, r0 + mov r2, r8 + ldrh r0, [r2] + ldrh r1, [r1] + adds r0, r0, r1 + ldr r3, _08051F70 @ =0x03000070 + adds r4, r4, r3 + strh r0, [r4] + ldr r2, [r7, #0x50] + asrs r2, r2, #8 + ldr r5, _08051F74 @ =gCamera + movs r1, #0 + ldrsh r0, [r5, r1] + subs r2, r2, r0 + ldr r0, [r7, #0x54] + asrs r0, r0, #8 + movs r3, #2 + ldrsh r1, [r5, r3] + subs r0, r0, r1 + mov r5, sb + strh r2, [r5, #6] + strh r0, [r5, #8] + ldrh r0, [r4] + lsrs r0, r0, #6 + strh r0, [r5] + ldr r0, [r6, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] + ldr r2, _08051F78 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r6, #0x10] + orrs r0, r1 + str r0, [r6, #0x10] + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + mov r1, sb + bl TransformSprite + adds r0, r6, #0 + bl DisplaySprite + ldr r0, [sp] + adds r0, #0x6e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xe + bhi _0805200C + lsls r0, r0, #2 + ldr r1, _08051F7C @ =_08051F80 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08051F58: .4byte gCurTask +_08051F5C: .4byte gExtraBossTaskData +_08051F60: .4byte 0x03000018 +_08051F64: .4byte 0x0300000C +_08051F68: .4byte gSineTable +_08051F6C: .4byte 0x03000076 +_08051F70: .4byte 0x03000070 +_08051F74: .4byte gCamera +_08051F78: .4byte sa2__gUnknown_030054B8 +_08051F7C: .4byte _08051F80 +_08051F80: @ jump table + .4byte _08051FD8 @ case 0 + .4byte _0805200C @ case 1 + .4byte _0805201A @ case 2 + .4byte _0805201A @ case 3 + .4byte _08051FBC @ case 4 + .4byte _08051FBC @ case 5 + .4byte _08051FBC @ case 6 + .4byte _08051FBC @ case 7 + .4byte _0805200C @ case 8 + .4byte _0805200C @ case 9 + .4byte _0805200C @ case 10 + .4byte _08051FD8 @ case 11 + .4byte _08051FD8 @ case 12 + .4byte _08051FEA @ case 13 + .4byte _08051FFC @ case 14 +_08051FBC: + adds r0, r7, #0 + adds r0, #0x70 + ldrh r1, [r0] + ldr r0, _08051FD4 @ =0x00000FFF + cmp r1, r0 + bhi _08051FFC + adds r0, r7, #0 + adds r0, #0x76 + rsbs r1, r1, #0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + b _08051FE0 + .align 2, 0 +_08051FD4: .4byte 0x00000FFF +_08051FD8: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xe0 + lsls r1, r1, #8 +_08051FE0: + movs r2, #0x80 + lsls r2, r2, #1 + bl sub_804CFE0 + b _0805201A +_08051FEA: + adds r0, r7, #0 + adds r0, #0x76 + movs r1, #0xf8 + lsls r1, r1, #8 + movs r2, #0x80 + lsls r2, r2, #3 + bl sub_804CFE0 + b _0805201A +_08051FFC: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 + b _0805201A +_0805200C: + adds r0, r7, #0 + adds r0, #0x76 + movs r2, #0x80 + lsls r2, r2, #1 + movs r1, #0 + bl sub_804CFE0 +_0805201A: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/enemies/fireball__CreateFireballSparks.inc b/sa1/asm/non_matching/game/enemies/fireball__CreateFireballSparks.inc new file mode 100644 index 0000000000..a4af645682 --- /dev/null +++ b/sa1/asm/non_matching/game/enemies/fireball__CreateFireballSparks.inc @@ -0,0 +1,99 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #4 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + mov sb, r1 @ sb = screenY + movs r6, #0 @ r6 = i + movs r4, #0 + lsls r0, r0, #0x10 + asrs r7, r0, #0x10 @ r7 = screenX + lsls r5, r7, #2 + movs r0, #8 + adds r0, r0, r7 + mov r8, r0 +_080712A8: + str r4, [sp] + ldr r0, _080712DC @ =Task_FireballSpark + movs r1, #0x38 + movs r2, #0xc0 + lsls r2, r2, #6 + movs r3, #0 + bl TaskCreate + ldrh r0, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r1, r0, r2 @ r1 = spark + strh r5, [r1, #0x30] + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r1, #0x34] + movs r0, #6 + strh r0, [r1, #0x32] + cmp r6, #0 + beq _080712E0 + rsbs r0, r0, #0 + strh r0, [r1, #0x32] + adds r0, r7, #0 + subs r0, #8 + b _080712E4 + .align 2, 0 +_080712DC: .4byte Task_FireballSpark +_080712E0: + strh r5, [r1, #0x30] + mov r0, r8 +_080712E4: + strh r0, [r1, #0x16] + mov r2, sb + strh r2, [r1, #0x18] + ldr r0, _08071340 @ =0x06012580 + str r0, [r1, #4] + movs r0, #0x90 + lsls r0, r0, #2 + strh r0, [r1, #0x1a] + strh r4, [r1, #8] + subs r0, #0xa2 + strh r0, [r1, #0xa] + adds r0, r1, #0 + adds r0, #0x20 + strb r4, [r0] + strh r4, [r1, #0x14] + strh r4, [r1, #0x1c] + adds r2, r1, #0 + adds r2, #0x21 + movs r0, #0xff + strb r0, [r2] + adds r2, #1 + movs r0, #0x10 + strb r0, [r2] + adds r0, r1, #0 + adds r0, #0x25 + strb r4, [r0] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r1, #0x28] + movs r0, #0x80 + lsls r0, r0, #6 + str r0, [r1, #0x10] + adds r0, r1, #0 + bl UpdateSpriteAnimation + adds r6, #1 + cmp r6, #1 + ble _080712A8 + add sp, #4 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08071340: .4byte 0x06012580 + +.syntax divided diff --git a/sa1/asm/non_matching/game/extra_stage_results__Task_8066520.inc b/sa1/asm/non_matching/game/extra_stage_results__Task_8066520.inc new file mode 100644 index 0000000000..cfe9ae04de --- /dev/null +++ b/sa1/asm/non_matching/game/extra_stage_results__Task_8066520.inc @@ -0,0 +1,131 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r0, _080665AC @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r4, r2, r1 + ldr r0, [r4, #0xc] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sl, r0 + ldr r0, [r4, #0x24] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp] + ldr r0, [r4, #0x28] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #4] + ldr r0, [r4, #0x2c] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #8] + ldr r0, [r4, #0x18] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sb, r0 + ldr r0, [r4, #0x14] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov r8, r0 + ldr r0, [r4, #0x1c] + ldrh r0, [r0, #6] + adds r7, r0, r1 + ldr r0, [r4, #0x20] + ldrh r0, [r0, #6] + adds r6, r0, r1 + ldr r0, _080665B0 @ =0x03000040 + adds r2, r2, r0 + movs r1, #0 + ldrsh r0, [r2, r1] + adds r5, r0, #1 + movs r0, #0xaf + lsls r0, r0, #2 + cmp r5, r0 + bls _080665CC + ldr r1, _080665B4 @ =0x0000FFFF + movs r0, #0 + bl TasksDestroyInPriorityRange + ldr r1, _080665B8 @ =gBackgroundsCopyQueueCursor + ldr r0, _080665BC @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r1, _080665C0 @ =gBgSpritesCount + movs r0, #0 + strb r0, [r1] + ldr r1, _080665C4 @ =gVramGraphicsCopyCursor + ldr r0, _080665C8 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl CreateStaffCredits + b _08066614 + .align 2, 0 +_080665AC: .4byte gCurTask +_080665B0: .4byte 0x03000040 +_080665B4: .4byte 0x0000FFFF +_080665B8: .4byte gBackgroundsCopyQueueCursor +_080665BC: .4byte gBackgroundsCopyQueueIndex +_080665C0: .4byte gBgSpritesCount +_080665C4: .4byte gVramGraphicsCopyCursor +_080665C8: .4byte gVramGraphicsCopyQueueIndex +_080665CC: + ldr r0, _08066624 @ =0x0000029D + cmp r5, r0 + bls _080665F2 + adds r0, #1 + cmp r5, r0 + bne _080665EC + movs r1, #0 + strh r1, [r4] + movs r2, #1 + movs r0, #1 + strh r0, [r4, #2] + strh r0, [r4, #4] + strh r1, [r4, #6] + movs r0, #0xc0 + strh r0, [r4, #8] + strb r2, [r4, #0xa] +_080665EC: + adds r0, r4, #0 + bl sub_805423C +_080665F2: + adds r0, r4, #0 + adds r0, #0x40 + strh r5, [r0] + mov r0, sl + strh r5, [r0, #0x3c] + ldr r0, [sp] + strh r5, [r0, #0x3c] + ldr r0, [sp, #4] + strh r5, [r0, #0x3c] + ldr r0, [sp, #8] + strh r5, [r0, #0x3c] + mov r1, sb + strh r5, [r1, #0x3c] + mov r0, r8 + strh r5, [r0, #0x3c] + strh r5, [r7, #0x3c] + strh r5, [r6, #0x3c] +_08066614: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08066624: .4byte 0x0000029D + +.syntax divided diff --git a/sa1/asm/non_matching/game/extra_stage_results__Task_8067C24.inc b/sa1/asm/non_matching/game/extra_stage_results__Task_8067C24.inc new file mode 100644 index 0000000000..b64f9065f6 --- /dev/null +++ b/sa1/asm/non_matching/game/extra_stage_results__Task_8067C24.inc @@ -0,0 +1,290 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _08067CAC @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + mov sb, r0 + ldr r0, [r0, #0xc] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp, #0x14] + mov r1, sb + ldr r0, [r1, #0x38] + adds r2, r0, #1 + str r2, [sp, #0x10] + subs r0, #0xb3 + cmp r0, #0x80 + bhi _08067D28 + lsrs r7, r0, #4 + movs r0, #2 + mov r8, r0 + movs r1, #0x1f + mov ip, r1 + movs r2, #0xf8 + lsls r2, r2, #7 + mov sl, r2 +_08067C64: + mov r0, r8 + lsls r2, r0, #1 + ldr r1, _08067CB0 @ =gUiPaletteSoundTestBox3 + adds r0, r2, r1 + ldrh r1, [r0] + movs r3, #0x1f + ands r3, r1 + movs r0, #0xf8 + lsls r0, r0, #2 + ands r0, r1 + lsrs r5, r0, #5 + mov r0, sl + ands r0, r1 + lsrs r4, r0, #0xa + ldr r0, _08067CB4 @ =gUiPaletteSoundTestBox4 + adds r2, r2, r0 + ldrh r1, [r2] + movs r2, #0x1f + ands r2, r1 + movs r0, #0xf8 + lsls r0, r0, #2 + ands r0, r1 + lsrs r6, r0, #5 + mov r0, sl + ands r0, r1 + lsrs r1, r0, #0xa + cmp r3, r2 + bls _08067CB8 + subs r0, r3, r2 + muls r0, r7, r0 + lsrs r0, r0, #3 + subs r3, r3, r0 + mov r2, ip + ands r3, r2 + b _08067CC4 + .align 2, 0 +_08067CAC: .4byte gCurTask +_08067CB0: .4byte gUiPaletteSoundTestBox3 +_08067CB4: .4byte gUiPaletteSoundTestBox4 +_08067CB8: + subs r0, r2, r3 + muls r0, r7, r0 + lsrs r0, r0, #3 + adds r3, r3, r0 + mov r0, ip + ands r3, r0 +_08067CC4: + cmp r5, r6 + bls _08067CD2 + subs r0, r5, r6 + muls r0, r7, r0 + lsrs r0, r0, #3 + subs r0, r5, r0 + b _08067CDA +_08067CD2: + subs r0, r6, r5 + muls r0, r7, r0 + lsrs r0, r0, #3 + adds r0, r5, r0 +_08067CDA: + mov r2, ip + ands r0, r2 + lsls r5, r0, #5 + cmp r4, r1 + bls _08067CF2 + subs r0, r4, r1 + muls r0, r7, r0 + lsrs r0, r0, #3 + subs r0, r4, r0 + mov r1, ip + ands r0, r1 + b _08067CFE +_08067CF2: + subs r0, r1, r4 + muls r0, r7, r0 + lsrs r0, r0, #3 + adds r0, r4, r0 + mov r2, ip + ands r0, r2 +_08067CFE: + lsls r4, r0, #0xa + orrs r3, r5 + orrs r4, r3 + mov r0, r8 + adds r0, #0xe0 + lsls r0, r0, #1 + ldr r1, _08067D88 @ =gObjPalette + adds r0, r0, r1 + strh r4, [r0] + mov r0, r8 + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + cmp r0, #0xf + bls _08067C64 + ldr r2, _08067D8C @ =gFlags + ldr r0, [r2] + movs r1, #2 + orrs r0, r1 + str r0, [r2] +_08067D28: + movs r0, #0xc8 + lsls r0, r0, #1 + ldr r1, [sp, #0x10] + cmp r1, r0 + bhi _08067D34 + b _08067E32 +_08067D34: + movs r2, #0 + str r2, [sp, #0x10] + mov r8, r2 + mov r7, sb + adds r7, #0x2c + movs r4, #0 + ldr r6, _08067D90 @ =0x00000311 +_08067D42: + str r4, [sp] + ldr r0, _08067D94 @ =Task_8066D64 + movs r1, #0xb2 + lsls r1, r1, #1 + ldr r2, _08067D98 @ =0x00002120 + movs r3, #0 + bl TaskCreate + mov r1, r8 + lsls r2, r1, #2 + mov r1, sp + adds r1, r1, r2 + adds r1, #4 + str r0, [r1] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r3, r1, r0 + strh r4, [r3, #0x3c] + movs r0, #0xf + str r0, [r3, #0x4c] + str r4, [r3, #0x48] + mov r0, r8 + str r0, [r3, #0x44] + str r4, [r3, #0x40] + adds r5, r2, #0 + cmp r0, #0 + bne _08067DA4 + ldr r0, _08067D9C @ =0x06016060 + str r0, [r3, #4] + strh r6, [r3, #0xa] + ldr r2, _08067DA0 @ =0x03000020 + adds r0, r1, r2 + strb r4, [r0] + b _08067DD2 + .align 2, 0 +_08067D88: .4byte gObjPalette +_08067D8C: .4byte gFlags +_08067D90: .4byte 0x00000311 +_08067D94: .4byte Task_8066D64 +_08067D98: .4byte 0x00002120 +_08067D9C: .4byte 0x06016060 +_08067DA0: .4byte 0x03000020 +_08067DA4: + mov r0, r8 + cmp r0, #1 + bne _08067DC4 + ldr r0, _08067DBC @ =0x06016920 + str r0, [r3, #4] + strh r6, [r3, #0xa] + ldr r2, _08067DC0 @ =0x03000020 + adds r0, r1, r2 + mov r1, r8 + strb r1, [r0] + b _08067DD2 + .align 2, 0 +_08067DBC: .4byte 0x06016920 +_08067DC0: .4byte 0x03000020 +_08067DC4: + ldr r0, _08067E54 @ =0x06016E20 + str r0, [r3, #4] + strh r6, [r3, #0xa] + ldr r2, _08067E58 @ =0x03000020 + adds r1, r1, r2 + movs r0, #2 + strb r0, [r1] +_08067DD2: + movs r0, #0xb4 + strh r0, [r3, #0x16] + movs r0, #0x50 + strh r0, [r3, #0x18] + strh r4, [r3, #0x1a] + strh r4, [r3, #8] + strh r4, [r3, #0x14] + strh r4, [r3, #0x1c] + adds r1, r3, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r1, #1 + movs r0, #0x10 + strb r0, [r1] + adds r0, r3, #0 + adds r0, #0x25 + strb r4, [r0] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r3, #0x28] + movs r0, #0x80 + lsls r0, r0, #5 + str r0, [r3, #0x10] + adds r0, r3, #0 + bl UpdateSpriteAnimation + adds r1, r7, r5 + mov r0, sp + adds r0, r0, r5 + adds r0, #4 + ldr r0, [r0] + str r0, [r1] + mov r0, r8 + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + cmp r0, #2 + bls _08067D42 + mov r0, sb + ldr r1, [r0, #0xc] + ldr r0, _08067E5C @ =Task_8068004 + str r0, [r1, #8] + ldr r0, _08067E60 @ =gCurTask + ldr r1, [r0] + ldr r0, _08067E64 @ =Task_8067E68 + str r0, [r1, #8] +_08067E32: + mov r0, sb + bl sub_805423C + ldr r1, [sp, #0x10] + mov r2, sb + str r1, [r2, #0x38] + ldr r0, [sp, #0x14] + str r1, [r0, #0x3c] + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08067E54: .4byte 0x06016E20 +_08067E58: .4byte 0x03000020 +_08067E5C: .4byte Task_8068004 +_08067E60: .4byte gCurTask +_08067E64: .4byte Task_8067E68 +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_8052AA4.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_8052AA4.inc new file mode 100644 index 0000000000..46d753c730 --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_8052AA4.inc @@ -0,0 +1,120 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _08052B74 @ =gUnknown_030063C0 + mov ip, r0 + ldr r0, [r0] + cmp r0, #0 + beq _08052B50 + ldr r1, _08052B78 @ =gTask_03006240 + mov sl, r1 +_08052ABC_loop: + mov r2, ip + ldr r2, [r2] @ r2 = list + mov ip, r2 + mov r1, sl + ldr r0, [r1] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r1, r0 @ r5 = strc0 = TASK_DATA(gTask_03006240); + ldr r1, [r2, #0x1c] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r5, r5, r0 @ r5 = strc0 + ldr r1, [r2, #0x14] + lsls r1, r1, #6 + mov r6, ip + adds r6, #0x20 + ldrb r3, [r6] @ r3 = list->unk20 + ldr r0, [r2, #0x10] + adds r0, r0, r3 + lsls r0, r0, #1 + adds r1, r1, r0 @ r1 = + ldr r0, [r2, #0x18] + lsls r0, r0, #1 + ldr r2, _08052B7C @ =gBgCntRegs + adds r0, r0, r2 + ldrh r2, [r0] + movs r0, #0xf8 + lsls r0, r0, #5 @ r0 = 0x1F00 + ands r0, r2 + lsls r0, r0, #3 + adds r1, r1, r0 + movs r0, #0xc0 + lsls r0, r0, #0x13 @ r0 = VRAM + adds r0, r0, r1 + mov sb, r0 @ sb = vram = BG_CHAR_ADDR_FROM_SCREENBASE(list->unk18) + vramOffset; + movs r4, #0 + movs r1, #0 + cmp r1, r3 + bhs _08052B48 + mov r8, r6 @ r8 = r6 = &list->unk20 +_08052B10: + movs r2, #0 + adds r7, r1, #1 + adds r6, r4, #1 + ldrb r0, [r5, #0xb] + cmp r2, r0 + bhs _08052B3C + ldr r3, [r5, #4] + muls r1, r3, r1 + mov r0, ip + adds r0, #4 + adds r4, r0, r4 + add r1, sb @ r1 = vram + (strc0->unk4 * i) +_08052B28: + ldrb r0, [r4] + subs r0, #0x20 + muls r0, r3, r0 + adds r0, r0, r2 + strh r0, [r1] + adds r1, #0x40 + adds r2, #1 + ldrb r0, [r5, #0xb] + cmp r2, r0 + blo _08052B28 +_08052B3C: + adds r1, r7, #0 + adds r4, r6, #0 + mov r2, r8 + ldrb r2, [r2] + cmp r1, r2 + blo _08052B10 +_08052B48: + mov r1, ip + ldr r0, [r1] + cmp r0, #0 + bne _08052ABC_loop +_08052B50: + ldr r2, _08052B80 @ =gUnknown_030063F0 + ldr r0, [r2] + mov r1, ip + str r0, [r1] + ldr r2, _08052B74 @ =gUnknown_030063C0 + ldr r0, [r2] + ldr r1, _08052B80 @ =gUnknown_030063F0 + str r0, [r1] + movs r0, #0 + str r0, [r2] + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08052B74: .4byte gUnknown_030063C0 +_08052B78: .4byte gTask_03006240 +_08052B7C: .4byte gBgCntRegs +_08052B80: .4byte gUnknown_030063F0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_8052D64.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_8052D64.inc new file mode 100644 index 0000000000..5a23d92540 --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_8052D64.inc @@ -0,0 +1,114 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + mov sb, r0 + adds r4, r1, #0 + ldr r0, _08052DC8 @ =gTask_03006240 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r1, r0 + ldrh r1, [r4, #0x10] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r5, r5, r0 + ldrh r0, [r4, #4] @ r0: angle + movs r2, #0 + ldrsh r1, [r4, r2] @ r1: p1 + movs r3, #2 + ldrsh r2, [r4, r3] @ r2: p2 + ldrh r3, [r4, #6] @ r3: affineIndex + bl sa2__sub_80047A0 + ldrh r7, [r4, #6] + mov r8, r7 + mov r2, sp + movs r1, #0xc0 + lsls r1, r1, #2 + ldrb r0, [r5, #9] + lsls r0, r0, #0xe + orrs r0, r1 + ldrb r1, [r4, #0xc] + orrs r0, r1 + strh r0, [r2] + mov r3, sp + ldrh r1, [r4, #0x12] + lsls r1, r1, #0xc + ldr r0, [r5] + ldr r2, _08052DCC @ =0x000003FF + ands r0, r2 + orrs r1, r0 + strh r1, [r3, #4] + movs r6, #0 + mov sl, sp + b _08052E0A + .align 2, 0 +_08052DC8: .4byte gTask_03006240 +_08052DCC: .4byte 0x000003FF +_08052DD0: + mov r1, sl + ldrh r0, [r1] + strh r0, [r3] + ldrb r2, [r5, #8] + lsls r2, r2, #0xe + mov r7, r8 + lsls r0, r7, #9 + orrs r2, r0 + ldrb r0, [r5, #0xa] + muls r0, r6, r0 + lsls r0, r0, #3 + ldrh r1, [r4, #0xa] + adds r0, r0, r1 + ldr r7, _08052E38 @ =0x000001FF + adds r1, r7, #0 + ands r0, r1 + orrs r2, r0 + strh r2, [r3, #2] + mov r1, sb + adds r0, r1, r6 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r5, #4] + muls r0, r1, r0 + mov r2, sl + ldrh r2, [r2, #4] + adds r0, r0, r2 + strh r0, [r3, #4] + adds r6, #1 +_08052E0A: + movs r3, #0xe + ldrsh r0, [r4, r3] + cmp r6, r0 + bge _08052E28 + ldrh r0, [r4, #8] + lsrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + bl OamMalloc + adds r3, r0, #0 + ldr r0, _08052E3C @ =iwram_end + ldr r0, [r0] + cmp r0, r3 + bne _08052DD0 +_08052E28: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08052E38: .4byte 0x000001FF +_08052E3C: .4byte iwram_end + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_8052EF0.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_8052EF0.inc new file mode 100644 index 0000000000..ca5019c431 --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_8052EF0.inc @@ -0,0 +1,75 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + sub sp, #0xc + adds r6, r0, #0 + adds r4, r1, #0 @ r4 = (sub_8052C84*) + movs r7, #0 + strh r7, [r4, #0xe] @ param1->byteCount = 0; + movs r5, #9 +_08052EFE: + adds r0, r6, #0 + movs r1, #0xa + bl Div + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 @ r0 = divRes + mov r1, sp + adds r3, r1, r5 + lsls r1, r0, #3 + lsls r2, r0, #1 + adds r1, r1, r2 + subs r1, r6, r1 + adds r1, #0x30 + strb r1, [r3] + lsls r0, r0, #0x10 + asrs r6, r0, #0x10 + ldrh r1, [r4, #0xe] + adds r0, r1, #1 + strh r0, [r4, #0xe] + subs r5, #1 + cmp r5, #0 + bge _08052EFE + movs r5, #0 + mov r0, sp + ldrb r0, [r0] + ldrh r2, [r4] + ldrh r3, [r4, #0xa] + cmp r0, #0x30 + bne _08052F56 + adds r7, #1 + strh r1, [r4, #0xe] +_08052F3C: + adds r5, #1 + cmp r5, #9 + bgt _08052F56 + mov r1, sp + adds r0, r1, r5 + ldrb r0, [r0] + cmp r0, #0x30 + bne _08052F56 + adds r7, #1 + ldrh r0, [r4, #0xe] + subs r0, #1 + strh r0, [r4, #0xe] + b _08052F3C +_08052F56: + movs r1, #0xe + ldrsh r0, [r4, r1] + subs r0, #1 + muls r0, r2, r0 + asrs r0, r0, #5 + subs r0, r3, r0 + strh r0, [r4, #0xa] + mov r1, sp + adds r0, r1, r7 + adds r1, r4, #0 + bl sub_8052C84 + add sp, #0xc + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_8052F78.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_8052F78.inc new file mode 100644 index 0000000000..bcb0bb037d --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_8052F78.inc @@ -0,0 +1,179 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + mov sl, r0 + adds r5, r1, #0 + ldr r0, _08052FE8 @ =gTask_03006240 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + ldrh r1, [r5, #0x10] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r7, r7, r0 + ldrb r0, [r7, #0xa] + lsls r0, r0, #3 + mov sb, r0 + ldrb r0, [r7, #0xb] + lsls r0, r0, #3 + str r0, [sp, #8] + mov r2, sp + ldrb r0, [r7, #9] + lsls r0, r0, #0xe + ldrb r1, [r5, #0xc] + adds r0, r0, r1 + movs r1, #0x80 + lsls r1, r1, #3 + adds r0, r0, r1 + strh r0, [r2] + mov r3, sp + ldrb r1, [r7, #8] + lsls r1, r1, #0xe + ldrh r2, [r5, #0xa] + ldr r6, _08052FEC @ =0x000001FF + adds r0, r6, #0 + ands r0, r2 + adds r1, r1, r0 + strh r1, [r3, #2] + ldrh r1, [r5, #0x12] + lsls r1, r1, #0xc + ldr r0, [r7] + ldr r2, _08052FF0 @ =0x000003FF + ands r0, r2 + orrs r1, r0 + strh r1, [r3, #4] + ldrb r0, [r5, #0x16] + cmp r0, #0 + beq _0805303C + movs r6, #0 + mov r4, sp + b _08053016 + .align 2, 0 +_08052FE8: .4byte gTask_03006240 +_08052FEC: .4byte 0x000001FF +_08052FF0: .4byte 0x000003FF +_08052FF4: + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, sb + strh r0, [r4, #2] + mov r1, sl + adds r0, r1, r6 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r7, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + strh r0, [r2, #4] + adds r6, #1 +_08053016: + movs r1, #0xe + ldrsh r0, [r5, r1] + cmp r6, r0 + bge _080530B8 + ldrh r0, [r5, #8] + lsrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + bl OamMalloc + adds r2, r0, #0 + ldr r0, _08053038 @ =iwram_end + ldr r0, [r0] + cmp r0, r2 + bne _08052FF4 + b _080530B8 + .align 2, 0 +_08053038: .4byte iwram_end +_0805303C: + movs r3, #0 + ldrh r0, [r5, #0x14] + cmp r3, r0 + bge _080530B8 + mov r4, sp + mov r8, r6 +_08053048: + ldrb r1, [r7, #8] + lsls r1, r1, #0xe + ldrh r2, [r5, #0xa] + mov r0, r8 + ands r0, r2 + adds r1, r1, r0 + strh r1, [r4, #2] + movs r1, #0xa + ldrsh r0, [r5, r1] + rsbs r0, r0, #0 + mov r1, r8 + ands r0, r1 + asrs r6, r0, #7 + adds r3, #1 + b _08053088 +_08053066: + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, sb + strh r0, [r4, #2] + mov r1, sl + adds r0, r1, r6 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r7, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + strh r0, [r2, #4] + adds r6, #1 +_08053088: + movs r1, #0xe + ldrsh r0, [r5, r1] + cmp r6, r0 + bge _080530AA + ldrh r0, [r5, #8] + lsrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r3, [sp, #0xc] + bl OamMalloc + adds r2, r0, #0 + ldr r0, _080530C8 @ =iwram_end + ldr r0, [r0] + ldr r3, [sp, #0xc] + cmp r0, r2 + bne _08053066 +_080530AA: + ldrh r0, [r4] + ldr r1, [sp, #8] + adds r0, r1, r0 + strh r0, [r4] + ldrh r0, [r5, #0x14] + cmp r3, r0 + blt _08053048 +_080530B8: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080530C8: .4byte iwram_end + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_80530CC.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_80530CC.inc new file mode 100644 index 0000000000..ab55d876cf --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_80530CC.inc @@ -0,0 +1,176 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + mov sl, r0 + adds r5, r1, #0 + ldr r0, _08053138 @ =gTask_03006240 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + ldrh r1, [r5, #0x10] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r7, r7, r0 + ldrb r0, [r7, #0xa] + lsls r0, r0, #3 + mov sb, r0 + ldrb r0, [r7, #0xb] + lsls r0, r0, #3 + str r0, [sp, #8] + mov r2, sp + ldrb r0, [r7, #9] + lsls r0, r0, #0xe + ldrb r1, [r5, #0xc] + adds r0, r0, r1 + strh r0, [r2] + mov r3, sp + ldrb r1, [r7, #8] + lsls r1, r1, #0xe + ldrh r2, [r5, #0xa] + ldr r6, _0805313C @ =0x000001FF + adds r0, r6, #0 + ands r0, r2 + adds r1, r1, r0 + strh r1, [r3, #2] + ldrh r1, [r5, #0x12] + lsls r1, r1, #0xc + ldr r0, [r7] + ldr r2, _08053140 @ =0x000003FF + ands r0, r2 + orrs r1, r0 + strh r1, [r3, #4] + ldrb r0, [r5, #0x16] + cmp r0, #0 + beq _0805318C + movs r6, #0 + mov r4, sp + b _08053166 + .align 2, 0 +_08053138: .4byte gTask_03006240 +_0805313C: .4byte 0x000001FF +_08053140: .4byte 0x000003FF +_08053144: + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, sb + strh r0, [r4, #2] + mov r1, sl + adds r0, r1, r6 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r7, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + strh r0, [r2, #4] + adds r6, #1 +_08053166: + movs r1, #0xe + ldrsh r0, [r5, r1] + cmp r6, r0 + bge _08053208 + ldrh r0, [r5, #8] + lsrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + bl OamMalloc + adds r2, r0, #0 + ldr r0, _08053188 @ =iwram_end + ldr r0, [r0] + cmp r0, r2 + bne _08053144 + b _08053208 + .align 2, 0 +_08053188: .4byte iwram_end +_0805318C: + movs r3, #0 + ldrh r0, [r5, #0x14] + cmp r3, r0 + bge _08053208 + mov r4, sp + mov r8, r6 +_08053198: + ldrb r1, [r7, #8] + lsls r1, r1, #0xe + ldrh r2, [r5, #0xa] + mov r0, r8 + ands r0, r2 + adds r1, r1, r0 + strh r1, [r4, #2] + movs r1, #0xa + ldrsh r0, [r5, r1] + rsbs r0, r0, #0 + mov r1, r8 + ands r0, r1 + asrs r6, r0, #7 + adds r3, #1 + b _080531D8 +_080531B6: + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, sb + strh r0, [r4, #2] + mov r1, sl + adds r0, r1, r6 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r7, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + strh r0, [r2, #4] + adds r6, #1 +_080531D8: + movs r1, #0xe + ldrsh r0, [r5, r1] + cmp r6, r0 + bge _080531FA + ldrh r0, [r5, #8] + lsrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r3, [sp, #0xc] + bl OamMalloc + adds r2, r0, #0 + ldr r0, _08053218 @ =iwram_end + ldr r0, [r0] + ldr r3, [sp, #0xc] + cmp r0, r2 + bne _080531B6 +_080531FA: + ldrh r0, [r4] + ldr r1, [sp, #8] + adds r0, r1, r0 + strh r0, [r4] + ldrh r0, [r5, #0x14] + cmp r3, r0 + blt _08053198 +_08053208: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08053218: .4byte iwram_end + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_805321C.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_805321C.inc new file mode 100644 index 0000000000..2e3feee446 --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_805321C.inc @@ -0,0 +1,178 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + mov sl, r0 + adds r6, r1, #0 + ldr r0, _08053288 @ =gTask_03006240 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + ldrh r1, [r6, #0x10] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r7, r7, r0 + ldrb r0, [r7, #0xa] + lsls r0, r0, #3 + mov sb, r0 + ldrb r0, [r7, #0xb] + lsls r0, r0, #3 + str r0, [sp, #8] + mov r2, sp + ldrb r0, [r7, #9] + lsls r0, r0, #0xe + ldrb r1, [r6, #0xc] + adds r0, r0, r1 + strh r0, [r2] + mov r3, sp + ldrb r1, [r7, #8] + lsls r1, r1, #0xe + ldrh r2, [r6, #0xa] + ldr r5, _0805328C @ =0x000001FF + adds r0, r5, #0 + ands r0, r2 + adds r1, r1, r0 + strh r1, [r3, #2] + ldrh r1, [r6, #0x12] + lsls r1, r1, #0xc + ldr r0, [r7] + ldr r2, _08053290 @ =0x000003FF + ands r0, r2 + orrs r1, r0 + strh r1, [r3, #4] + ldrb r0, [r6, #0x16] + cmp r0, #0 + beq _080532DC + movs r5, #0 + mov r4, sp + b _080532B6 + .align 2, 0 +_08053288: .4byte gTask_03006240 +_0805328C: .4byte 0x000001FF +_08053290: .4byte 0x000003FF +_08053294: + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, sb + strh r0, [r4, #2] + mov r1, sl + adds r0, r1, r5 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r7, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + strh r0, [r2, #4] + adds r5, #1 +_080532B6: + movs r1, #0xe + ldrsh r0, [r6, r1] + cmp r5, r0 + bge _0805335A + ldrh r0, [r6, #8] + adds r0, r0, r5 + asrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + bl OamMalloc + adds r2, r0, #0 + ldr r0, _080532D8 @ =iwram_end + ldr r0, [r0] + cmp r0, r2 + bne _08053294 + b _0805335A + .align 2, 0 +_080532D8: .4byte iwram_end +_080532DC: + movs r3, #0 + ldrh r0, [r6, #0x14] + cmp r3, r0 + bge _0805335A + mov r4, sp + mov r8, r5 +_080532E8: + ldrb r1, [r7, #8] + lsls r1, r1, #0xe + ldrh r2, [r6, #0xa] + mov r0, r8 + ands r0, r2 + adds r1, r1, r0 + strh r1, [r4, #2] + movs r1, #0xa + ldrsh r0, [r6, r1] + rsbs r0, r0, #0 + mov r1, r8 + ands r0, r1 + asrs r5, r0, #7 + adds r3, #1 + b _08053328 +_08053306: + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, sb + strh r0, [r4, #2] + mov r1, sl + adds r0, r1, r5 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r7, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + strh r0, [r2, #4] + adds r5, #1 +_08053328: + movs r1, #0xe + ldrsh r0, [r6, r1] + cmp r5, r0 + bge _0805334C + ldrh r0, [r6, #8] + adds r0, r0, r5 + asrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r3, [sp, #0xc] + bl OamMalloc + adds r2, r0, #0 + ldr r0, _0805336C @ =iwram_end + ldr r0, [r0] + ldr r3, [sp, #0xc] + cmp r0, r2 + bne _08053306 +_0805334C: + ldrh r0, [r4] + ldr r1, [sp, #8] + adds r0, r1, r0 + strh r0, [r4] + ldrh r0, [r6, #0x14] + cmp r3, r0 + blt _080532E8 +_0805335A: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805336C: .4byte iwram_end + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_8053370.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_8053370.inc new file mode 100644 index 0000000000..0fb57b1363 --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_8053370.inc @@ -0,0 +1,126 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #0xc + adds r5, r0, #0 + adds r7, r1, #0 + ldr r0, _080533DC @ =gTask_03006240 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 + ldrh r1, [r7, #0x10] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r6, r6, r0 + ldrb r0, [r6, #0xa] + lsls r0, r0, #3 + mov r8, r0 + mov r2, sp + ldrb r0, [r6, #9] + lsls r0, r0, #0xe + ldrb r1, [r7, #0xc] + adds r0, r0, r1 + strh r0, [r2] + mov r3, sp + ldrb r1, [r6, #8] + lsls r1, r1, #0xe + ldrh r2, [r7, #0xa] + ldr r0, _080533E0 @ =0x000001FF + ands r0, r2 + adds r1, r1, r0 + strh r1, [r3, #2] + ldrh r1, [r7, #0x12] + lsls r1, r1, #0xc + ldr r0, [r6] + ldr r2, _080533E4 @ =0x000003FF + ands r0, r2 + orrs r1, r0 + strh r1, [r3, #4] + movs r3, #0 + movs r1, #0xe + ldrsh r0, [r7, r1] + cmp r3, r0 + bge _0805344A + mov r4, sp +_080533CE: + ldrb r0, [r5] + cmp r0, #0x20 + bne _080533E8 + ldrh r0, [r4, #2] + add r0, r8 + strh r0, [r4, #2] + b _0805343E + .align 2, 0 +_080533DC: .4byte gTask_03006240 +_080533E0: .4byte 0x000001FF +_080533E4: .4byte 0x000003FF +_080533E8: + ldrh r0, [r7, #8] + adds r0, r0, r3 + asrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r3, [sp, #8] + bl OamMalloc + adds r2, r0, #0 + ldr r0, _08053424 @ =iwram_end + ldr r0, [r0] + ldr r3, [sp, #8] + cmp r0, r2 + beq _0805344A + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, r8 + strh r0, [r4, #2] + ldrb r0, [r5] + cmp r0, #0x60 + bls _08053428 + ldrh r0, [r2] + adds r0, #8 + strh r0, [r2] + ldrb r0, [r5] + subs r0, #0x11 + b _0805342C + .align 2, 0 +_08053424: .4byte iwram_end +_08053428: + ldrb r0, [r5] + subs r0, #0x20 +_0805342C: + ldr r1, [r6, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + ldr r1, _08053458 @ =0x0000F3FF + mov ip, r1 + mov r1, ip + ands r0, r1 + strh r0, [r2, #4] +_0805343E: + adds r5, #1 + adds r3, #1 + movs r1, #0xe + ldrsh r0, [r7, r1] + cmp r3, r0 + blt _080533CE +_0805344A: + add sp, #0xc + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08053458: .4byte 0x0000F3FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_805345C.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_805345C.inc new file mode 100644 index 0000000000..abe8cbc55f --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_805345C.inc @@ -0,0 +1,103 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #8 + mov sb, r0 @ sb = param0 + adds r7, r1, #0 @ r7 = param1 + ldr r0, _080534C0 @ =gTask_03006240 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 @ r6 = strc + ldrh r1, [r7, #0x10] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r6, r6, r0 @ r6 = strc0 + ldrb r0, [r6, #0xa] + lsls r0, r0, #3 + mov r8, r0 @ r8 = r8 = strc0->unkA * 8; + mov r2, sp + ldrb r0, [r6, #9] + lsls r0, r0, #0xe + ldrb r1, [r7, #0xc] + adds r0, r0, r1 + strh r0, [r2] + mov r3, sp + ldrb r1, [r6, #8] + lsls r1, r1, #0xe + ldrh r2, [r7, #0xa] + ldr r0, _080534C4 @ =0x000001FF + ands r0, r2 + adds r1, r1, r0 + strh r1, [r3, #2] + ldrh r0, [r7, #0x12] + lsls r0, r0, #0xc + ldr r1, [r6] + ldr r2, _080534C8 @ =0x000003FF + ands r1, r2 + orrs r0, r1 + movs r2, #0x80 + lsls r2, r2, #4 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r3, #4] + movs r5, #0 + mov r4, sp + b _080534EE + .align 2, 0 +_080534C0: .4byte gTask_03006240 +_080534C4: .4byte 0x000001FF +_080534C8: .4byte 0x000003FF +_080534CC: + ldrh r0, [r4] + strh r0, [r2] + ldrh r0, [r4, #2] + strh r0, [r2, #2] + ldrh r0, [r4, #2] + add r0, r8 + strh r0, [r4, #2] + mov r1, sb + adds r0, r1, r5 + ldrb r0, [r0] + subs r0, #0x20 + ldr r1, [r6, #4] + muls r0, r1, r0 + ldrh r1, [r4, #4] + adds r0, r0, r1 + strh r0, [r2, #4] + adds r5, #1 +_080534EE: + movs r2, #0xe + ldrsh r0, [r7, r2] + cmp r5, r0 + bge _0805350E + ldrh r0, [r7, #8] + adds r0, r0, r5 + asrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + bl OamMalloc + adds r2, r0, #0 + ldr r0, _0805351C @ =iwram_end + ldr r0, [r0] + cmp r0, r2 + bne _080534CC +_0805350E: + add sp, #8 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805351C: .4byte iwram_end + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__sub_80535FC.inc b/sa1/asm/non_matching/game/gTask_3006240__sub_80535FC.inc new file mode 100644 index 0000000000..0b85f58e53 --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__sub_80535FC.inc @@ -0,0 +1,60 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + sub sp, #4 + ldr r0, _0805365C @ =gTask_03006240 + ldr r0, [r0] + cmp r0, #0 + bne _08053652 + ldr r2, _08053660 @ =gUnknown_03006250 + ldr r4, _08053664 @ =gUnknown_030063F0 + ldr r5, _08053668 @ =gUnknown_030063C0 + ldr r0, _0805366C @ =Task_80536D4 + mov ip, r0 + ldr r6, _08053670 @ =TaskDestructor_80536D8 + adds r3, r2, #0 @ r3 = gUnknown_03006250 + movs r7, #0xa2 + lsls r7, r7, #1 @ r7 = 0x144 + adds r1, r2, r7 + subs r7, #0x24 + adds r0, r2, r7 @ r0 = 0x120 +_08053620: + str r1, [r0] + subs r1, #0x24 + subs r0, #0x24 + cmp r0, r3 + bge _08053620 + movs r1, #0 + movs r3, #0xa2 + lsls r3, r3, #1 @ r3 = 0x144 + adds r0, r2, r3 + str r1, [r0] + str r2, [r4] + str r1, [r5] + movs r1, #0xd3 + lsls r1, r1, #2 @ r1 = 0x34C + movs r2, #0xc0 + lsls r2, r2, #5 + str r6, [sp] + mov r0, ip + movs r3, #0 + bl TaskCreate + ldr r1, _0805365C @ =gTask_03006240 + str r0, [r1] + bl UiGfxStackInit +_08053652: + add sp, #4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805365C: .4byte gTask_03006240 +_08053660: .4byte gUnknown_03006250 +_08053664: .4byte gUnknown_030063F0 +_08053668: .4byte gUnknown_030063C0 +_0805366C: .4byte Task_80536D4 +_08053670: .4byte TaskDestructor_80536D8 + +.syntax divided diff --git a/sa1/asm/non_matching/game/gTask_3006240__unused_8052B84.inc b/sa1/asm/non_matching/game/gTask_3006240__unused_8052B84.inc new file mode 100644 index 0000000000..15b30451af --- /dev/null +++ b/sa1/asm/non_matching/game/gTask_3006240__unused_8052B84.inc @@ -0,0 +1,142 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + adds r5, r0, #0 + ldr r0, [sp, #0x30] + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #0xc] + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + mov sl, r2 + lsls r3, r3, #0x18 + lsrs r3, r3, #0x18 + mov sb, r3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov r8, r0 + mov r1, sp + movs r0, #0 + strb r0, [r1, #9] + movs r4, #8 +_08052BB4: + adds r0, r5, #0 + movs r1, #0xa + bl Div + mov r1, sp + adds r3, r1, r4 + lsls r1, r0, #3 + lsls r2, r0, #1 + adds r1, r1, r2 + subs r1, r5, r1 + adds r1, #0x30 + strb r1, [r3] + adds r5, r0, #0 + subs r4, #1 + cmp r4, #0 + bge _08052BB4 + movs r1, #0 + movs r4, #0 + mov r0, sp + ldrb r0, [r0] + ldr r2, _08052BFC @ =gUnknown_030063F0 + mov ip, r2 + cmp r0, #0x30 + bne _08052C00 + movs r1, #1 +_08052BE6: + adds r4, #1 + cmp r4, #9 + bgt _08052C00 + mov r2, sp + adds r0, r2, r4 + ldrb r0, [r0] + cmp r0, #0x30 + bne _08052C00 + adds r1, #1 + b _08052BE6 + .align 2, 0 +_08052BFC: .4byte gUnknown_030063F0 +_08052C00: + mov r0, sp + adds r6, r0, r1 + mov r1, ip + ldr r0, [r1] + cmp r0, #0 + beq _08052C74 + adds r3, r0, #0 + movs r1, #0 + ldrb r0, [r6] + cmp r0, #0x20 + beq _08052C24 +_08052C16: + adds r1, #1 + cmp r1, #9 + bgt _08052C24 + adds r0, r6, r1 + ldrb r0, [r0] + cmp r0, #0x20 + bne _08052C16 +_08052C24: + adds r4, r3, #0 + adds r4, #0x20 + strb r1, [r4] + cmp r1, #0 + ble _08052C74 + movs r2, #0 + ldr r7, _08052C5C @ =gUnknown_030063C0 + cmp r2, r1 + bge _08052C48 + adds r5, r3, #4 +_08052C38: + adds r0, r5, r2 + adds r1, r6, r2 + ldrb r1, [r1] + strb r1, [r0] + adds r2, #1 + ldrb r0, [r4] + cmp r2, r0 + blt _08052C38 +_08052C48: + ldr r1, [sp, #0xc] + str r1, [r3, #0x10] + mov r2, sl + str r2, [r3, #0x14] + mov r0, sb + str r0, [r3, #0x18] + mov r1, r8 + str r1, [r3, #0x1c] + adds r1, r7, #0 + b _08052C62 + .align 2, 0 +_08052C5C: .4byte gUnknown_030063C0 +_08052C60: + ldr r1, [r1] +_08052C62: + ldr r0, [r1] + cmp r0, #0 + bne _08052C60 + str r3, [r1] + ldr r0, [r3] + mov r2, ip + str r0, [r2] + movs r0, #0 + str r0, [r3] +_08052C74: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/game2_0__sub_805BC94.inc b/sa1/asm/non_matching/game/game2_0__sub_805BC94.inc new file mode 100644 index 0000000000..99593aa459 --- /dev/null +++ b/sa1/asm/non_matching/game/game2_0__sub_805BC94.inc @@ -0,0 +1,951 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x58 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x30] + movs r1, #100 + bl Div + lsls r0, r0, #0x18 + cmp r0, #0 + beq _0805BCB8 + movs r0, #3 + str r0, [sp, #0x38] + b _0805BCCE +_0805BCB8: + ldr r0, [sp, #0x30] + movs r1, #10 + bl Div + lsls r0, r0, #0x18 + movs r1, #1 + str r1, [sp, #0x38] + cmp r0, #0 + beq _0805BCCE + movs r2, #2 + str r2, [sp, #0x38] +_0805BCCE: + mov r3, sp + adds r3, #0x2c + str r3, [sp, #0x3c] + movs r0, #0x32 + strb r0, [r3] + mov r0, sp + adds r0, #0x2b + str r0, [sp, #0x40] + movs r0, #4 + ldr r1, [sp, #0x40] + strb r0, [r1] + ldr r7, _0805BE00 @ =gUiGraphics + ldrb r1, [r3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r7 + ldr r0, [r0] + str r0, [sp, #0x14] + ldrb r1, [r3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #4 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + movs r0, #0xa0 + lsls r0, r0, #4 + str r0, [sp, #0x18] + movs r2, #0x20 + str r2, [sp, #0x24] + add r3, sp, #0x28 + mov sl, r3 + movs r0, #6 + strb r0, [r3] + ldr r0, _0805BE04 @ =0x06015DA0 + str r0, [sp, #0xc] + mov r5, sp + adds r5, #0x2a + movs r1, #0xd + strb r1, [r5] + ldr r2, [sp, #0x3c] + ldrb r1, [r2] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #4] + mov r2, sp + ldr r3, [sp, #0x3c] + ldrb r1, [r3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0xc + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r3] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + mov r0, sp + bl sub_80528AC + movs r0, #0x10 + ldr r1, [sp, #0x3c] + strb r0, [r1] + movs r0, #8 + ldr r2, [sp, #0x40] + strb r0, [r2] + movs r3, #0xe0 + lsls r3, r3, #1 + adds r0, r7, r3 + ldr r0, [r0] + str r0, [sp, #0x14] + movs r1, #0xe2 + lsls r1, r1, #1 + adds r0, r7, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + movs r0, #0x80 + lsls r0, r0, #2 + str r0, [sp, #0x18] + movs r2, #0x20 + str r2, [sp, #0x24] + movs r0, #6 + mov r3, sl + strb r0, [r3] + ldr r0, _0805BE08 @ =0x060177A0 + str r0, [sp, #0xc] + movs r1, #0xd + strb r1, [r5] + movs r2, #0xe4 + lsls r2, r2, #1 + adds r0, r7, r2 + ldr r0, [r0] + str r0, [sp, #4] + mov r1, sp + movs r3, #0xe6 + lsls r3, r3, #1 + adds r0, r7, r3 + ldr r0, [r0] + strb r0, [r1, #8] + adds r2, #8 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #9] + adds r3, #8 + adds r0, r7, r3 + ldr r0, [r0] + strb r0, [r1, #0xa] + adds r2, #8 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + ldr r3, [sp, #0x38] + cmp r3, #1 + bne _0805BE0C + movs r0, #0x2f + b _0805BE1C + .align 2, 0 +_0805BE00: .4byte gUiGraphics +_0805BE04: .4byte 0x06015DA0 +_0805BE08: .4byte 0x060177A0 +_0805BE0C: + ldr r2, [sp, #0x38] + cmp r2, #2 + bne _0805BE1A + movs r0, #0x30 + add r3, sp, #0x2c + strb r0, [r3] + b _0805BE20 +_0805BE1A: + movs r0, #0x31 +_0805BE1C: + add r1, sp, #0x2c + strb r0, [r1] +_0805BE20: + mov r2, sp + adds r2, #0x2b + str r2, [sp, #0x44] + movs r0, #2 + strb r0, [r2] + ldr r7, _0805C160 @ =gUiGraphics + add r6, sp, #0x2c + ldrb r1, [r6] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r7 + ldr r0, [r0] + str r0, [sp, #0x14] + ldrb r1, [r6] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #4 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + movs r0, #0xe0 + lsls r0, r0, #4 + str r0, [sp, #0x18] + movs r3, #0x20 + str r3, [sp, #0x24] + mov r0, sp + adds r0, #0x28 + str r0, [sp, #0x48] + movs r1, #6 + strb r1, [r0] + ldr r0, _0805C164 @ =0x060167A0 + str r0, [sp, #0xc] + subs r2, #1 + str r2, [sp, #0x4c] + movs r3, #0xd + strb r3, [r2] + ldrb r1, [r6] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #4] + mov r2, sp + ldrb r1, [r6] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0xc + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r6] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r6] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r6] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + mov r0, sp + bl sub_80528AC + ldr r0, [sp, #0x38] + cmp r0, #3 + beq _0805BED6 + b _0805C19C +_0805BED6: + movs r1, #1 + str r1, [sp, #0x34] + ldr r0, [sp, #0x30] + movs r1, #100 + bl Div + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + ldr r0, [sp, #0x30] + movs r1, #100 + bl Mod + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x30] + cmp r5, #0 + beq _0805BFB2 + movs r2, #0 + str r2, [sp, #0x34] + movs r3, #0x20 + strb r3, [r6] + add r0, sp, #0x38 + ldrb r1, [r0] + ldr r0, [sp, #0x44] + strb r1, [r0] + lsls r4, r5, #7 + ldr r1, _0805C168 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r1] + adds r0, r0, r4 + str r0, [sp, #0x14] + ldr r2, _0805C16C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r2] + str r0, [sp, #0x20] + ldr r0, _0805C170 @ =0x060169E0 + str r0, [sp, #0xc] + movs r3, #0x40 + str r3, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r2, #6 + ldr r1, [sp, #0x48] + strb r2, [r1] + movs r0, #0xd + ldr r3, [sp, #0x4c] + strb r0, [r3] + ldr r1, _0805C174 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _0805C178 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r3, _0805C17C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + movs r0, #0xe5 + lsls r0, r0, #2 + adds r5, r7, r0 + ldr r0, [r5] + strb r0, [r1, #0xa] + ldr r2, _0805C180 @ =gUiGraphics + ((32 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r3, #0x20 + strb r3, [r6] + add r0, sp, #0x38 + ldrb r1, [r0] + ldr r0, [sp, #0x44] + strb r1, [r0] + ldr r1, _0805C168 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r1] + adds r0, r0, r4 + adds r0, #0x40 + str r0, [sp, #0x14] + ldr r2, _0805C16C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r2] + str r0, [sp, #0x20] + ldr r0, _0805C184 @ =0x06016A60 + str r0, [sp, #0xc] + movs r3, #0x40 + str r3, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r2, #6 + ldr r1, [sp, #0x48] + strb r2, [r1] + movs r0, #0xd + ldr r3, [sp, #0x4c] + strb r0, [r3] + ldr r1, _0805C174 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _0805C178 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r3, _0805C17C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + ldr r0, [r5] + strb r0, [r1, #0xa] + ldr r2, _0805C180 @ =gUiGraphics + ((32 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC +_0805BFB2: + ldr r0, [sp, #0x30] + movs r1, #10 + bl Div + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + ldr r0, [sp, #0x30] + movs r1, #10 + bl Mod + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x30] + cmp r5, #0 + bne _0805BFD6 + ldr r3, [sp, #0x34] + cmp r3, #0 + bne _0805C094 +_0805BFD6: + movs r0, #0 + str r0, [sp, #0x34] + movs r1, #0x20 + strb r1, [r6] + add r2, sp, #0x38 + ldrb r3, [r2] + ldr r2, [sp, #0x44] + strb r3, [r2] + lsls r5, r5, #7 + mov sb, r5 + ldr r3, _0805C168 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r3] + add r0, sb + str r0, [sp, #0x14] + ldr r1, _0805C16C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r1] + str r0, [sp, #0x20] + ldr r0, _0805C188 @ =0x06016BA0 + str r0, [sp, #0xc] + movs r2, #0x40 + str r2, [sp, #0x18] + movs r3, #0x20 + str r3, [sp, #0x24] + movs r1, #6 + ldr r0, [sp, #0x48] + strb r1, [r0] + movs r3, #0xd + ldr r2, [sp, #0x4c] + strb r3, [r2] + ldr r1, _0805C174 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _0805C178 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r3, _0805C17C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + movs r0, #0xe5 + lsls r0, r0, #2 + adds r5, r7, r0 + ldr r0, [r5] + strb r0, [r1, #0xa] + movs r2, #0xe6 + lsls r2, r2, #2 + adds r7, r7, r2 + ldr r0, [r7] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r3, #0x20 + strb r3, [r6] + add r0, sp, #0x38 + ldrb r1, [r0] + ldr r0, [sp, #0x44] + strb r1, [r0] + ldr r1, _0805C168 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r1] + add r0, sb + adds r0, #0x40 + str r0, [sp, #0x14] + ldr r2, _0805C16C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r2] + str r0, [sp, #0x20] + ldr r0, _0805C18C @ =0x06016C20 + str r0, [sp, #0xc] + movs r3, #0x40 + str r3, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r2, #6 + ldr r1, [sp, #0x48] + strb r2, [r1] + movs r0, #0xd + ldr r3, [sp, #0x4c] + strb r0, [r3] + ldr r1, _0805C174 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _0805C178 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r3, _0805C17C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + ldr r0, [r5] + strb r0, [r1, #0xa] + ldr r0, [r7] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC +_0805C094: + ldr r1, [sp, #0x30] + lsls r0, r1, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #0 + bne _0805C0A6 + ldr r2, [sp, #0x34] + cmp r2, #0 + beq _0805C0A6 + b _0805C416 +_0805C0A6: + movs r3, #0x20 + add r0, sp, #0x2c + strb r3, [r0] + movs r1, #3 + movs r2, #0x2b + add r2, sp + strb r1, [r2] + ldr r2, _0805C160 @ =gUiGraphics + lsls r7, r5, #7 + ldr r3, _0805C168 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r3] + adds r0, r0, r7 + str r0, [sp, #0x14] + ldr r1, _0805C16C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r1] + str r0, [sp, #0x20] + ldr r0, _0805C190 @ =0x06016BE0 + str r0, [sp, #0xc] + movs r3, #0x40 + str r3, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r1, #6 + add r3, sp, #0x28 + strb r1, [r3] + movs r0, #0xd + movs r1, #0x2a + add r1, sp + strb r0, [r1] + ldr r3, _0805C174 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r3] + str r0, [sp, #4] + mov r1, sp + ldr r3, _0805C178 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r3] + strb r0, [r1, #8] + ldr r3, _0805C17C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + ldr r3, _0805C194 @ =gUiGraphics + ((32 * 0x1C) + 0x14) + ldr r0, [r3] + strb r0, [r1, #0xa] + movs r0, #0xe6 + lsls r0, r0, #2 + adds r5, r2, r0 + ldr r0, [r5] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r1, #0x20 + add r2, sp, #0x2c + strb r1, [r2] + movs r3, #3 + movs r0, #0x2b + add r0, sp + strb r3, [r0] + ldr r1, _0805C168 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r1] + adds r0, r0, r7 + adds r0, #0x40 + str r0, [sp, #0x14] + ldr r2, _0805C16C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r2] + str r0, [sp, #0x20] + ldr r0, _0805C198 @ =0x06016C60 + str r0, [sp, #0xc] + movs r3, #0x40 + str r3, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r1, #6 + add r2, sp, #0x28 + strb r1, [r2] + movs r3, #0xd + movs r0, #0x2a + add r0, sp + strb r3, [r0] + ldr r1, _0805C174 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _0805C178 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r3, _0805C17C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + ldr r2, _0805C194 @ =gUiGraphics + ((32 * 0x1C) + 0x14) + ldr r0, [r2] + strb r0, [r1, #0xa] + ldr r0, [r5] + b _0805C318 + .align 2, 0 +_0805C160: .4byte gUiGraphics +_0805C164: .4byte 0x060167A0 +_0805C168: .4byte gUiGraphics + ((32 * 0x1C) + 0) +_0805C16C: .4byte gUiGraphics + ((32 * 0x1C) + 4) +_0805C170: .4byte 0x060169E0 +_0805C174: .4byte gUiGraphics + ((32 * 0x1C) + 8) +_0805C178: .4byte gUiGraphics + ((32 * 0x1C) + 0xC) +_0805C17C: .4byte gUiGraphics + ((32 * 0x1C) + 0x10) +_0805C180: .4byte gUiGraphics + ((32 * 0x1C) + 0x18) +_0805C184: .4byte 0x06016A60 +_0805C188: .4byte 0x06016BA0 +_0805C18C: .4byte 0x06016C20 +_0805C190: .4byte 0x06016BE0 +_0805C194: .4byte gUiGraphics + ((32 * 0x1C) + 0x14) +_0805C198: .4byte 0x06016C60 +_0805C19C: + ldr r3, [sp, #0x38] + cmp r3, #2 + beq _0805C1A4 + b _0805C34C +_0805C1A4: + ldr r0, [sp, #0x30] + movs r1, #10 + bl Div + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + ldr r0, [sp, #0x30] + movs r1, #10 + bl Mod + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x30] + movs r0, #0x20 + strb r0, [r6] + movs r2, #3 + ldr r1, [sp, #0x44] + strb r2, [r1] + lsls r5, r5, #7 + mov r8, r5 + ldr r3, _0805C324 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r3] + add r0, r8 + str r0, [sp, #0x14] + ldr r1, _0805C328 @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r1] + str r0, [sp, #0x20] + ldr r0, _0805C32C @ =0x060169E0 + str r0, [sp, #0xc] + movs r2, #0x40 + str r2, [sp, #0x18] + movs r3, #0x20 + str r3, [sp, #0x24] + movs r1, #6 + ldr r0, [sp, #0x48] + strb r1, [r0] + movs r3, #0xd + ldr r2, [sp, #0x4c] + strb r3, [r2] + ldr r1, _0805C330 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _0805C334 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r3, _0805C338 @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + movs r0, #0xe5 + lsls r0, r0, #2 + adds r5, r7, r0 + ldr r0, [r5] + strb r0, [r1, #0xa] + ldr r2, _0805C33C @ =gUiGraphics + ((32 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r3, #0x20 + strb r3, [r6] + movs r1, #3 + ldr r0, [sp, #0x44] + strb r1, [r0] + ldr r2, _0805C324 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r2] + add r0, r8 + adds r0, #0x40 + str r0, [sp, #0x14] + ldr r3, _0805C328 @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r3] + str r0, [sp, #0x20] + ldr r0, _0805C340 @ =0x06016A60 + str r0, [sp, #0xc] + movs r0, #0x40 + str r0, [sp, #0x18] + movs r1, #0x20 + str r1, [sp, #0x24] + movs r3, #6 + ldr r2, [sp, #0x48] + strb r3, [r2] + movs r1, #0xd + ldr r0, [sp, #0x4c] + strb r1, [r0] + ldr r2, _0805C330 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r2] + str r0, [sp, #4] + mov r1, sp + ldr r3, _0805C334 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r3] + strb r0, [r1, #8] + ldr r2, _0805C338 @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r0, [r5] + strb r0, [r1, #0xa] + ldr r3, _0805C33C @ =gUiGraphics + ((32 * 0x1C) + 0x18) + ldr r0, [r3] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r0, #0x20 + strb r0, [r6] + movs r2, #3 + ldr r1, [sp, #0x44] + strb r2, [r1] + ldr r3, [sp, #0x30] + lsls r7, r3, #7 + ldr r1, _0805C324 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r1] + adds r0, r0, r7 + str r0, [sp, #0x14] + ldr r2, _0805C328 @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r2] + str r0, [sp, #0x20] + ldr r0, _0805C344 @ =0x06016BA0 + str r0, [sp, #0xc] + movs r3, #0x40 + str r3, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r2, #6 + ldr r1, [sp, #0x48] + strb r2, [r1] + movs r0, #0xd + ldr r3, [sp, #0x4c] + strb r0, [r3] + ldr r1, _0805C330 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _0805C334 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r3, _0805C338 @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r3] + strb r0, [r1, #9] + ldr r0, [r5] + strb r0, [r1, #0xa] + ldr r2, _0805C33C @ =gUiGraphics + ((32 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r3, #0x20 + strb r3, [r6] + movs r1, #3 + ldr r0, [sp, #0x44] + strb r1, [r0] + ldr r2, _0805C324 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r2] + adds r0, r0, r7 + adds r0, #0x40 + str r0, [sp, #0x14] + ldr r3, _0805C328 @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r3] + str r0, [sp, #0x20] + ldr r0, _0805C348 @ =0x06016C20 + str r0, [sp, #0xc] + movs r0, #0x40 + str r0, [sp, #0x18] + movs r1, #0x20 + str r1, [sp, #0x24] + movs r3, #6 + ldr r2, [sp, #0x48] + strb r3, [r2] + movs r1, #0xd + ldr r0, [sp, #0x4c] + strb r1, [r0] + ldr r2, _0805C330 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r2] + str r0, [sp, #4] + mov r1, sp + ldr r3, _0805C334 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r3] + strb r0, [r1, #8] + ldr r2, _0805C338 @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r0, [r5] + strb r0, [r1, #0xa] + ldr r3, _0805C33C @ =gUiGraphics + ((32 * 0x1C) + 0x18) + ldr r0, [r3] +_0805C318: + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + b _0805C416 + .align 2, 0 +_0805C324: .4byte gUiGraphics + ((32 * 0x1C) + 0) +_0805C328: .4byte gUiGraphics + ((32 * 0x1C) + 4) +_0805C32C: .4byte 0x060169E0 +_0805C330: .4byte gUiGraphics + ((32 * 0x1C) + 8) +_0805C334: .4byte gUiGraphics + ((32 * 0x1C) + 0xC) +_0805C338: .4byte gUiGraphics + ((32 * 0x1C) + 0x10) +_0805C33C: .4byte gUiGraphics + ((32 * 0x1C) + 0x18) +_0805C340: .4byte 0x06016A60 +_0805C344: .4byte 0x06016BA0 +_0805C348: .4byte 0x06016C20 +_0805C34C: + ldr r0, [sp, #0x30] + lsls r0, r0, #0x18 + str r0, [sp, #0x50] + movs r1, #0x20 + add r2, sp, #0x2c + strb r1, [r2] + movs r3, #3 + movs r0, #0x2b + add r0, sp + strb r3, [r0] + ldr r1, [sp, #0x50] + lsrs r1, r1, #0x11 + str r1, [sp, #0x54] + ldr r2, _0805C428 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r2] + adds r0, r0, r1 + str r0, [sp, #0x14] + ldr r3, _0805C42C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r3] + str r0, [sp, #0x20] + ldr r0, _0805C430 @ =0x060169E0 + str r0, [sp, #0xc] + movs r0, #0x40 + str r0, [sp, #0x18] + movs r1, #0x20 + str r1, [sp, #0x24] + movs r2, #6 + add r3, sp, #0x28 + strb r2, [r3] + movs r0, #0xd + movs r1, #0x2a + add r1, sp + strb r0, [r1] + ldr r2, _0805C434 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r2] + str r0, [sp, #4] + mov r1, sp + ldr r3, _0805C438 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r3] + strb r0, [r1, #8] + ldr r2, _0805C43C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r3, _0805C440 @ =gUiGraphics + ((32 * 0x1C) + 0x14) + ldr r0, [r3] + strb r0, [r1, #0xa] + movs r0, #0xe6 + lsls r0, r0, #2 + adds r5, r7, r0 + ldr r0, [r5] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r1, #0x20 + add r2, sp, #0x2c + strb r1, [r2] + movs r3, #3 + movs r0, #0x2b + add r0, sp + strb r3, [r0] + ldr r1, _0805C428 @ =gUiGraphics + ((32 * 0x1C) + 0) + ldr r0, [r1] + ldr r2, [sp, #0x54] + adds r0, r0, r2 + adds r0, #0x40 + str r0, [sp, #0x14] + ldr r3, _0805C42C @ =gUiGraphics + ((32 * 0x1C) + 4) + ldr r0, [r3] + str r0, [sp, #0x20] + ldr r0, _0805C444 @ =0x06016A60 + str r0, [sp, #0xc] + movs r0, #0x40 + str r0, [sp, #0x18] + movs r1, #0x20 + str r1, [sp, #0x24] + movs r2, #6 + add r3, sp, #0x28 + strb r2, [r3] + movs r0, #0xd + movs r1, #0x2a + add r1, sp + strb r0, [r1] + ldr r2, _0805C434 @ =gUiGraphics + ((32 * 0x1C) + 8) + ldr r0, [r2] + str r0, [sp, #4] + mov r1, sp + ldr r3, _0805C438 @ =gUiGraphics + ((32 * 0x1C) + 0xC) + ldr r0, [r3] + strb r0, [r1, #8] + ldr r2, _0805C43C @ =gUiGraphics + ((32 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r3, _0805C440 @ =gUiGraphics + ((32 * 0x1C) + 0x14) + ldr r0, [r3] + strb r0, [r1, #0xa] + ldr r0, [r5] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC +_0805C416: + add sp, #0x58 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805C428: .4byte gUiGraphics + ((32 * 0x1C) + 0) +_0805C42C: .4byte gUiGraphics + ((32 * 0x1C) + 4) +_0805C430: .4byte 0x060169E0 +_0805C434: .4byte gUiGraphics + ((32 * 0x1C) + 8) +_0805C438: .4byte gUiGraphics + ((32 * 0x1C) + 0xC) +_0805C43C: .4byte gUiGraphics + ((32 * 0x1C) + 0x10) +_0805C440: .4byte gUiGraphics + ((32 * 0x1C) + 0x14) +_0805C444: .4byte 0x06016A60 + +.syntax divided diff --git a/sa1/asm/non_matching/game/game2_1__sub_805D048.inc b/sa1/asm/non_matching/game/game2_1__sub_805D048.inc new file mode 100644 index 0000000000..69d2c33eaf --- /dev/null +++ b/sa1/asm/non_matching/game/game2_1__sub_805D048.inc @@ -0,0 +1,563 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x28 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #4] + bl sub_80535FC + ldr r1, _0805D0B0 @ =gBgScrollRegs + movs r0, #0 + strh r0, [r1] + strh r0, [r1, #2] + strh r0, [r1, #4] + strh r0, [r1, #6] + strh r0, [r1, #8] + strh r0, [r1, #0xa] + strh r0, [r1, #0xc] + strh r0, [r1, #0xe] + ldr r0, _0805D0B4 @ =gSpecialStageCollectedRings + ldr r1, _0805D0B8 @ =gSpecialStageTargetRings + ldrh r0, [r0] + ldrh r1, [r1] + cmp r0, r1 + blo _0805D0DA + movs r0, #0x2f + bl m4aSongNumStart + movs r0, #1 + str r0, [sp, #0x24] + ldr r1, _0805D0BC @ =0x00002710 + str r1, [sp, #0x20] + ldr r3, _0805D0C0 @ =gLoadedSaveGame + ldrb r2, [r3, #0x1d] + ldr r1, _0805D0C4 @ =gUnknown_08487134 + ldr r0, _0805D0C8 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r0, r1 + ldrb r1, [r0] + adds r0, r2, #0 + asrs r0, r1 + ldr r4, [sp, #0x24] + ands r0, r4 + cmp r0, #0 + beq _0805D0CC + movs r0, #1 + mov r8, r0 + b _0805D0EC + .align 2, 0 +_0805D0B0: .4byte gBgScrollRegs +_0805D0B4: .4byte gSpecialStageCollectedRings +_0805D0B8: .4byte gSpecialStageTargetRings +_0805D0BC: .4byte 0x00002710 +_0805D0C0: .4byte gLoadedSaveGame +_0805D0C4: .4byte gUnknown_08487134 +_0805D0C8: .4byte gCurrentLevel +_0805D0CC: + ldr r0, [sp, #0x24] + lsls r0, r1 + orrs r2, r0 + strb r2, [r3, #0x1d] + movs r1, #0 + mov r8, r1 + b _0805D0EC +_0805D0DA: + movs r0, #0x2e + bl m4aSongNumStart + movs r2, #0 + mov r8, r2 + movs r3, #0 + str r3, [sp, #0x24] + movs r4, #0 + str r4, [sp, #0x20] +_0805D0EC: + ldr r0, _0805D164 @ =gLoadedSaveGame + ldrb r0, [r0, #0x1d] + mov sb, r0 + ldr r0, _0805D168 @ =gSpecialStageCollectedRings + ldrh r0, [r0] + mov sl, r0 + ldr r0, _0805D16C @ =gUnknown_0300507C + ldrb r0, [r0] + add r0, r8 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov r8, r0 + ldr r1, _0805D170 @ =sa2__gUnknown_0300543C + ldrb r0, [r1] + add r0, r8 + strb r0, [r1] + ldr r1, _0805D174 @ =gLevelScore + ldr r6, [r1] + movs r0, #0x64 + mov r2, sl + muls r2, r0, r2 + adds r0, r2, #0 + ldr r3, [sp, #0x20] + adds r0, r3, r0 + adds r0, r6, r0 + str r0, [r1] + ldr r4, _0805D178 @ =0x0000C350 + adds r1, r4, #0 + bl Div + adds r5, r0, #0 + adds r0, r6, #0 + adds r1, r4, #0 + bl Div + cmp r5, r0 + beq _0805D146 + ldr r0, _0805D17C @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _0805D146 + ldr r1, _0805D180 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] +_0805D146: + movs r0, #0x64 + mov r4, sl + muls r4, r0, r4 + adds r0, r4, #0 + ldr r1, [sp, #0x20] + cmp r1, r0 + bls _0805D184 + adds r0, r1, #0 + movs r1, #0x64 + bl Div + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 + b _0805D186 + .align 2, 0 +_0805D164: .4byte gLoadedSaveGame +_0805D168: .4byte gSpecialStageCollectedRings +_0805D16C: .4byte gUnknown_0300507C +_0805D170: .4byte sa2__gUnknown_0300543C +_0805D174: .4byte gLevelScore +_0805D178: .4byte 0x0000C350 +_0805D17C: .4byte gGameMode +_0805D180: .4byte gNumLives +_0805D184: + mov r7, sl +_0805D186: + bl UiGfxStackInit + ldr r0, _0805D4B4 @ =Task_805D684 + movs r5, #0 + str r5, [sp] + movs r1, #0x34 + ldr r2, _0805D4B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0xc] + ldrh r1, [r0, #6] + movs r3, #0xc0 + lsls r3, r3, #0x12 + adds r2, r1, r3 + strh r5, [r2, #0x20] + strh r7, [r2, #0x22] + strh r5, [r2, #0x24] + movs r0, #0xf0 + strh r0, [r2, #0xa] + movs r0, #0x7e + strh r0, [r2, #0xc] + movs r4, #8 + strh r4, [r2, #0xe] + strh r4, [r2, #0x10] + movs r0, #0xe + strh r0, [r2, #0x12] + movs r3, #1 + strb r3, [r2, #0x16] + movs r0, #0xa + strh r0, [r2, #8] + ldr r4, _0805D4BC @ =0x03000028 + adds r0, r1, r4 + add r3, sp, #0x24 + ldrb r3, [r3] + strb r3, [r0] + adds r4, #1 + adds r0, r1, r4 + mov r3, sb + strb r3, [r0] + adds r4, #1 + adds r1, r1, r4 + mov r0, r8 + strb r0, [r1] + mov r1, sl + strh r1, [r2, #0x26] + ldr r3, [sp, #0x20] + str r3, [r2, #0x18] + movs r4, #0 + str r4, [r2, #0x1c] + ldr r0, _0805D4C0 @ =Task_805D720 + str r5, [sp] + movs r1, #0x34 + ldr r2, _0805D4B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #8] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r2, r1, r0 + strh r5, [r2, #0x20] + strh r7, [r2, #0x22] + strh r5, [r2, #0x24] + movs r3, #0x80 + lsls r3, r3, #1 + strh r3, [r2, #0xa] + movs r0, #0x80 + strh r0, [r2, #0xc] + movs r0, #9 + strh r0, [r2, #0xe] + movs r4, #2 + strh r4, [r2, #0x10] + movs r0, #0xf + strh r0, [r2, #0x12] + movs r0, #1 + strb r0, [r2, #0x16] + strh r5, [r2, #8] + ldr r3, _0805D4BC @ =0x03000028 + adds r0, r1, r3 + add r4, sp, #0x24 + ldrb r4, [r4] + strb r4, [r0] + adds r3, #1 + adds r0, r1, r3 + mov r4, sb + strb r4, [r0] + ldr r0, _0805D4C4 @ =0x0300002A + adds r1, r1, r0 + mov r3, r8 + strb r3, [r1] + mov r4, sl + strh r4, [r2, #0x26] + ldr r0, [sp, #0x20] + str r0, [r2, #0x18] + movs r1, #0 + str r1, [r2, #0x1c] + ldr r0, _0805D4C8 @ =Task_805D8EC + str r5, [sp] + movs r1, #0x34 + ldr r2, _0805D4B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0x10] + ldrh r1, [r0, #6] + movs r3, #0xc0 + lsls r3, r3, #0x12 + adds r2, r1, r3 + strh r5, [r2, #0x20] + strh r7, [r2, #0x22] + strh r5, [r2, #0x24] + movs r4, #0x80 + lsls r4, r4, #1 + strh r4, [r2] + strh r5, [r2, #2] + strh r5, [r2, #4] + strh r5, [r2, #6] + movs r6, #0x39 + strh r6, [r2, #0xa] + movs r0, #0x49 + strh r0, [r2, #0xc] + movs r4, #3 + strh r4, [r2, #0xe] + strh r4, [r2, #0x10] + movs r0, #0xe + strh r0, [r2, #0x12] + movs r3, #1 + strb r3, [r2, #0x16] + movs r0, #0x18 + strh r0, [r2, #8] + ldr r0, _0805D4BC @ =0x03000028 + add r3, sp, #0x24 + ldrb r3, [r3] + strb r3, [r0, r1] + ldr r3, _0805D4CC @ =0x03000029 + adds r0, r1, r3 + mov r3, sb + strb r3, [r0] + ldr r0, _0805D4C4 @ =0x0300002A + adds r1, r1, r0 + mov r3, r8 + strb r3, [r1] + mov r0, sl + strh r0, [r2, #0x26] + ldr r1, [sp, #0x20] + str r1, [r2, #0x18] + movs r3, #0 + str r3, [r2, #0x1c] + ldr r0, _0805D4D0 @ =Task_805DB04 + str r5, [sp] + movs r1, #0x34 + ldr r2, _0805D4B8 @ =0x00002120 + bl TaskCreate + str r0, [sp, #0x14] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r2, r1, r0 + strh r5, [r2, #0x20] + strh r7, [r2, #0x22] + strh r5, [r2, #0x24] + movs r3, #0x80 + lsls r3, r3, #1 + strh r3, [r2] + strh r5, [r2, #2] + strh r5, [r2, #4] + movs r0, #1 + strh r0, [r2, #6] + strh r6, [r2, #0xa] + strh r6, [r2, #0xc] + strh r4, [r2, #0xe] + strh r4, [r2, #0x10] + movs r3, #0xe + strh r3, [r2, #0x12] + strb r0, [r2, #0x16] + movs r0, #0x10 + strh r0, [r2, #8] + ldr r3, _0805D4BC @ =0x03000028 + add r0, sp, #0x24 + ldrb r0, [r0] + strb r0, [r3, r1] + adds r3, #1 + adds r0, r1, r3 + mov r3, sb + strb r3, [r0] + ldr r0, _0805D4C4 @ =0x0300002A + adds r1, r1, r0 + mov r3, r8 + strb r3, [r1] + mov r0, sl + strh r0, [r2, #0x26] + ldr r1, [sp, #0x20] + str r1, [r2, #0x18] + movs r3, #0 + str r3, [r2, #0x1c] + ldr r0, _0805D4D4 @ =Task_805DD10 + str r5, [sp] + movs r1, #0x34 + ldr r2, _0805D4B8 @ =0x00002120 + bl TaskCreate + str r0, [sp, #0x18] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r2, r1, r0 + strh r5, [r2, #0x20] + strh r7, [r2, #0x22] + strh r5, [r2, #0x24] + movs r3, #0x80 + lsls r3, r3, #1 + strh r3, [r2] + strh r5, [r2, #2] + strh r5, [r2, #4] + movs r0, #2 + strh r0, [r2, #6] + strh r6, [r2, #0xa] + strh r6, [r2, #0xc] + strh r4, [r2, #0xe] + strh r4, [r2, #0x10] + movs r3, #0xe + strh r3, [r2, #0x12] + movs r0, #1 + strb r0, [r2, #0x16] + movs r3, #8 + strh r3, [r2, #8] + ldr r0, _0805D4BC @ =0x03000028 + add r3, sp, #0x24 + ldrb r3, [r3] + strb r3, [r0, r1] + ldr r3, _0805D4CC @ =0x03000029 + adds r0, r1, r3 + mov r3, sb + strb r3, [r0] + ldr r0, _0805D4C4 @ =0x0300002A + adds r1, r1, r0 + mov r3, r8 + strb r3, [r1] + mov r0, sl + strh r0, [r2, #0x26] + ldr r1, [sp, #0x20] + str r1, [r2, #0x18] + movs r3, #0 + str r3, [r2, #0x1c] + ldr r0, _0805D4D8 @ =Task_805DF2C + str r5, [sp] + movs r1, #0x34 + ldr r2, _0805D4B8 @ =0x00002120 + bl TaskCreate + str r0, [sp, #0x1c] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r2, r1, r0 + strh r5, [r2, #0x20] + strh r7, [r2, #0x22] + strh r5, [r2, #0x24] + movs r3, #0x80 + lsls r3, r3, #1 + strh r3, [r2] + strh r5, [r2, #2] + strh r5, [r2, #4] + strh r4, [r2, #6] + strh r6, [r2, #0xa] + strh r6, [r2, #0xc] + strh r4, [r2, #0xe] + strh r4, [r2, #0x10] + movs r4, #0xe + strh r4, [r2, #0x12] + movs r0, #1 + strb r0, [r2, #0x16] + strh r5, [r2, #8] + ldr r3, _0805D4BC @ =0x03000028 + adds r0, r1, r3 + add r4, sp, #0x24 + ldrb r4, [r4] + strb r4, [r0] + adds r3, #1 + adds r0, r1, r3 + mov r4, sb + strb r4, [r0] + ldr r0, _0805D4C4 @ =0x0300002A + adds r1, r1, r0 + mov r3, r8 + strb r3, [r1] + mov r4, sl + strh r4, [r2, #0x26] + ldr r0, [sp, #0x20] + str r0, [r2, #0x18] + movs r1, #0 + str r1, [r2, #0x1c] + ldr r0, _0805D4DC @ =sub_805E018 + str r5, [sp] + movs r1, #0x34 + ldr r2, _0805D4B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + adds r6, r0, #0 + ldrh r1, [r6, #6] + movs r3, #0xc0 + lsls r3, r3, #0x12 + adds r2, r1, r3 + strh r5, [r2, #0x20] + strh r7, [r2, #0x22] + strh r5, [r2, #0x24] + strh r5, [r2, #0xa] + movs r0, #0x29 + strh r0, [r2, #0xc] + movs r4, #1 + strh r4, [r2, #0xe] + movs r0, #4 + strh r0, [r2, #0x10] + movs r0, #0xd + strh r0, [r2, #0x12] + movs r0, #1 + strb r0, [r2, #0x16] + strh r5, [r2, #8] + adds r3, #0x28 + adds r0, r1, r3 + add r4, sp, #0x24 + ldrb r4, [r4] + strb r4, [r0] + adds r3, #1 + adds r0, r1, r3 + mov r4, sb + strb r4, [r0] + ldr r0, _0805D4C4 @ =0x0300002A + adds r1, r1, r0 + mov r3, r8 + strb r3, [r1] + movs r4, #0 + mov r0, sl + strh r0, [r2, #0x26] + ldr r1, [sp, #0x20] + str r1, [r2, #0x18] + movs r3, #0 + str r3, [r2, #0x1c] + ldr r0, _0805D4E0 @ =sub_805D4F0 + movs r2, #0x84 + lsls r2, r2, #6 + ldr r1, _0805D4E4 @ =TaskDestructor_805E1E4 + str r1, [sp] + movs r1, #0x2c + bl TaskCreate + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + strh r5, [r0, #0x28] + strh r7, [r0, #0x2a] + ldr r2, [sp, #0xc] + str r2, [r0, #0x1c] + ldr r3, [sp, #8] + str r3, [r0, #0x18] + ldr r1, [sp, #0x10] + str r1, [r0, #0xc] + ldr r2, [sp, #0x14] + str r2, [r0, #0x24] + ldr r3, [sp, #0x18] + str r3, [r0, #0x10] + ldr r1, [sp, #0x1c] + str r1, [r0, #0x14] + str r6, [r0, #0x20] + ldr r3, _0805D4E8 @ =gBgSprites_Unknown1 + strb r4, [r3] + ldr r0, _0805D4EC @ =gBgSprites_Unknown2 + strb r4, [r0] + strb r4, [r0, #1] + movs r1, #0xff + strb r1, [r0, #2] + movs r2, #0x20 + strb r2, [r0, #3] + strb r4, [r3, #1] + strb r4, [r0, #4] + strb r4, [r0, #5] + movs r1, #1 + rsbs r1, r1, #0 + strb r1, [r0, #6] + strb r2, [r0, #7] + strb r4, [r3, #2] + strb r4, [r0, #8] + strb r4, [r0, #9] + strb r1, [r0, #0xa] + strb r2, [r0, #0xb] + strb r4, [r3, #3] + strb r4, [r0, #0xc] + strb r4, [r0, #0xd] + strb r1, [r0, #0xe] + strb r2, [r0, #0xf] + ldr r0, [sp, #4] + bl sub_805C994 + add sp, #0x28 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805D4B4: .4byte Task_805D684 +_0805D4B8: .4byte 0x00002120 +_0805D4BC: .4byte 0x03000028 +_0805D4C0: .4byte Task_805D720 +_0805D4C4: .4byte 0x0300002A +_0805D4C8: .4byte Task_805D8EC +_0805D4CC: .4byte 0x03000029 +_0805D4D0: .4byte Task_805DB04 +_0805D4D4: .4byte Task_805DD10 +_0805D4D8: .4byte Task_805DF2C +_0805D4DC: .4byte sub_805E018 +_0805D4E0: .4byte sub_805D4F0 +_0805D4E4: .4byte TaskDestructor_805E1E4 +_0805D4E8: .4byte gBgSprites_Unknown1 +_0805D4EC: .4byte gBgSprites_Unknown2 + +.syntax divided diff --git a/sa1/asm/non_matching/game/game2_1__sub_805D4F0.inc b/sa1/asm/non_matching/game/game2_1__sub_805D4F0.inc new file mode 100644 index 0000000000..47cc21348a --- /dev/null +++ b/sa1/asm/non_matching/game/game2_1__sub_805D4F0.inc @@ -0,0 +1,197 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #4 + ldr r0, _0805D5FC @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r5, r0, r1 + ldr r0, [r5, #0x1c] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov r8, r0 + ldr r0, [r5, #0x18] + ldrh r3, [r0, #6] + adds r3, r3, r1 + ldr r0, [r5, #0xc] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sb, r0 + ldr r0, [r5, #0x24] + ldrh r0, [r0, #6] + adds r7, r0, r1 + ldr r0, [r5, #0x10] + ldrh r0, [r0, #6] + adds r4, r0, r1 + ldr r0, [r5, #0x14] + ldrh r0, [r0, #6] + adds r6, r0, r1 + ldr r0, [r5, #0x20] + ldrh r2, [r0, #6] + adds r2, r2, r1 + ldrh r0, [r5, #0x28] + mov r1, r8 + strh r0, [r1, #0x20] + ldrh r0, [r5, #0x28] + strh r0, [r3, #0x20] + ldrh r0, [r5, #0x28] + mov r1, sb + strh r0, [r1, #0x20] + ldrh r0, [r5, #0x28] + strh r0, [r7, #0x20] + ldrh r0, [r5, #0x28] + strh r0, [r4, #0x20] + ldrh r0, [r5, #0x28] + strh r0, [r6, #0x20] + ldrh r0, [r5, #0x28] + strh r0, [r2, #0x20] + movs r1, #0x28 + ldrsh r0, [r5, r1] + cmp r0, #0xa9 + ble _0805D586 + ldrh r0, [r6, #0x26] + cmp r0, #0 + beq _0805D576 + subs r0, #1 + strh r0, [r6, #0x26] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0 + bne _0805D570 + strh r0, [r6, #0x26] +_0805D570: + ldr r0, [r7, #0x1c] + adds r0, #0x64 + str r0, [r7, #0x1c] +_0805D576: + ldr r0, [r4, #0x18] + cmp r0, #0 + beq _0805D586 + subs r0, #0x64 + str r0, [r4, #0x18] + ldr r0, [r7, #0x1c] + adds r0, #0x64 + str r0, [r7, #0x1c] +_0805D586: + ldrh r1, [r5, #0x2a] + ldr r0, _0805D600 @ =0x00000267 + adds r1, r1, r0 + ldrh r0, [r5, #0x28] + adds r0, #1 + strh r0, [r5, #0x28] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + ldrh r2, [r5, #0x2a] + cmp r1, r0 + bge _0805D62C + ldr r7, _0805D604 @ =gPlayer + movs r1, #0x48 + adds r1, r1, r7 + mov sb, r1 + ldrh r0, [r1] + subs r0, #0x10 + strh r0, [r1] + movs r0, #0x4a + adds r0, r0, r7 + mov r8, r0 + ldrh r0, [r0] + subs r0, #0x10 + mov r1, r8 + strh r0, [r1] + ldr r1, _0805D608 @ =0x0000FFFF + movs r0, #0 + bl TasksDestroyInPriorityRange + ldr r1, _0805D60C @ =gBackgroundsCopyQueueCursor + ldr r0, _0805D610 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r1, _0805D614 @ =gBgSpritesCount + movs r0, #0 + strb r0, [r1] + ldr r1, _0805D618 @ =gVramGraphicsCopyCursor + ldr r0, _0805D61C @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r5, _0805D620 @ =gCourseTime + ldr r6, [r5] + bl CreateGameStage + ldr r0, _0805D624 @ =gSpecialStageReturnX + ldrh r0, [r0] + mov r1, sb + strh r0, [r1] + ldr r0, _0805D628 @ =gSpecialStageReturnY + ldrh r0, [r0] + mov r1, r8 + strh r0, [r1] + adds r1, r7, #0 + adds r1, #0x6e + movs r0, #1 + strb r0, [r1] + str r6, [r5] + b _0805D674 + .align 2, 0 +_0805D5FC: .4byte gCurTask +_0805D600: .4byte 0x00000267 +_0805D604: .4byte gPlayer +_0805D608: .4byte 0x0000FFFF +_0805D60C: .4byte gBackgroundsCopyQueueCursor +_0805D610: .4byte gBackgroundsCopyQueueIndex +_0805D614: .4byte gBgSpritesCount +_0805D618: .4byte gVramGraphicsCopyCursor +_0805D61C: .4byte gVramGraphicsCopyQueueIndex +_0805D620: .4byte gCourseTime +_0805D624: .4byte gSpecialStageReturnX +_0805D628: .4byte gSpecialStageReturnY +_0805D62C: + movs r0, #0x28 + ldrsh r1, [r5, r0] + adds r0, r2, #0 + adds r0, #0xaa + cmp r1, r0 + bne _0805D650 + mov r0, sb + adds r0, #0x2a + ldrb r0, [r0] + cmp r0, #0 + beq _0805D64A + movs r0, #0x9a + bl m4aSongNumStart + b _0805D650 +_0805D64A: + movs r0, #0x8d @ SE_STAGE_RESULT_COUNTER_DONE + bl m4aSongNumStart +_0805D650: + movs r1, #0x28 + ldrsh r0, [r5, r1] + cmp r0, #0xaa + ble _0805D674 + adds r1, r0, #0 + ldrh r0, [r5, #0x2a] + adds r0, #0xaa + cmp r1, r0 + bge _0805D674 + adds r0, r1, #0 + movs r1, #4 + bl Mod + cmp r0, #0 + bne _0805D674 + movs r0, #0x8c @ SE_STAGE_RESULT_COUNTER + bl m4aSongNumStart +_0805D674: + add sp, #4 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/game2_3__Task_8063638.inc b/sa1/asm/non_matching/game/game2_3__Task_8063638.inc new file mode 100644 index 0000000000..476aa23de1 --- /dev/null +++ b/sa1/asm/non_matching/game/game2_3__Task_8063638.inc @@ -0,0 +1,243 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + ldr r2, _080636AC @ =gCurTask + ldr r0, [r2] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + mov ip, r1 + ldr r0, _080636B0 @ =gGameMode + ldrb r0, [r0] + mov sb, r2 + ldr r7, _080636B4 @ =gMultiSioStatusFlags + cmp r0, #1 + bls _080636EE + movs r5, #0 + ldr r2, _080636B8 @ =gMultiplayerConnections + ldrb r1, [r2] + movs r0, #1 + ands r1, r0 + adds r6, r2, #0 + cmp r1, #0 + beq _080636EE + movs r2, #1 + ldr r3, _080636BC @ =gMultiplayerMissingHeartbeats +_0806366E: + adds r0, r2, #0 + lsls r0, r5 + ldr r4, [r7] + ands r4, r0 + cmp r4, #0 + bne _080636D8 + ldrb r0, [r3] + adds r1, r0, #1 + strb r1, [r3] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _080636DC + movs r0, #0 + ldr r1, _080636C0 @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _080636C4 @ =gBackgroundsCopyQueueCursor + ldr r0, _080636C8 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _080636CC @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _080636D0 @ =gVramGraphicsCopyCursor + ldr r0, _080636D4 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _08063818 + .align 2, 0 +_080636AC: .4byte gCurTask +_080636B0: .4byte gGameMode +_080636B4: .4byte gMultiSioStatusFlags +_080636B8: .4byte gMultiplayerConnections +_080636BC: .4byte gMultiplayerMissingHeartbeats +_080636C0: .4byte 0x0000FFFF +_080636C4: .4byte gBackgroundsCopyQueueCursor +_080636C8: .4byte gBackgroundsCopyQueueIndex +_080636CC: .4byte gBgSpritesCount +_080636D0: .4byte gVramGraphicsCopyCursor +_080636D4: .4byte gVramGraphicsCopyQueueIndex +_080636D8: + movs r0, #0 + strb r0, [r3] +_080636DC: + adds r3, #1 + adds r5, #1 + cmp r5, #3 + bhi _080636EE + ldrb r0, [r6] + asrs r0, r5 + ands r0, r2 + cmp r0, #0 + bne _0806366E +_080636EE: + ldr r4, _080637BC @ =gMultiSioRecv + ldrh r0, [r4] + adds r5, r4, #0 + ldr r1, _080637C0 @ =gMultiSioSend + mov r8, r1 + movs r1, #0x55 + add ip, r1 + cmp r0, #0x52 + bne _0806371A + mov r0, sb + ldr r1, [r0] + ldr r0, _080637C4 @ =Task_80638B0 + str r0, [r1, #8] + movs r3, #0 + adds r1, r4, #3 + ldr r2, _080637C8 @ =gChaoTasks +_0806370E: + adds r0, r1, r3 + ldrb r0, [r0] + stm r2!, {r0} + adds r3, #1 + cmp r3, #2 + bls _0806370E +_0806371A: + ldr r0, [r7] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0806380C + movs r3, #1 + ldr r1, _080637CC @ =gMultiplayerConnections + ldrb r0, [r1] + asrs r0, r0, #1 + ands r0, r3 + adds r6, r1, #0 + cmp r0, #0 + beq _0806373A + ldrh r0, [r5, #0x14] + cmp r0, #0x51 + bne _0806375A +_0806373A: + adds r3, #1 + cmp r3, #3 + bhi _0806375A + ldrb r0, [r6] + asrs r0, r3 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0806373A + lsls r0, r3, #2 + adds r0, r0, r3 + lsls r0, r0, #2 + adds r4, r0, r5 + ldrh r0, [r4] + cmp r0, #0x51 + beq _0806373A +_0806375A: + cmp r3, #4 + bne _0806380C + mov r4, r8 + movs r0, #0x52 + strh r0, [r4] + mov r1, ip + ldrb r0, [r1] + strb r0, [r4, #2] + ldr r2, _080637D0 @ =gPseudoRandom + ldr r0, [r2] + ldr r1, _080637D4 @ =0x00196225 + mov ip, r1 + mov r1, ip + muls r1, r0, r1 + adds r0, r1, #0 + ldr r7, _080637D8 @ =0x3C6EF35F + adds r0, r0, r7 + str r0, [r2] + adds r3, r0, #0 + movs r1, #7 + ands r0, r1 + strb r0, [r4, #3] + lsrs r3, r3, #8 + ldrb r1, [r4, #3] + movs r0, #7 + ands r0, r3 + adds r6, r2, #0 + cmp r1, r0 + bne _080637AE + adds r5, r6, #0 + movs r2, #7 +_08063798: + ldr r0, [r5] + mov r1, ip + muls r1, r0, r1 + adds r0, r1, #0 + adds r0, r0, r7 + str r0, [r5] + adds r3, r0, #0 + ldrb r1, [r4, #3] + ands r0, r2 + cmp r1, r0 + beq _08063798 +_080637AE: + movs r0, #7 + adds r1, r3, #0 + ands r1, r0 + strb r1, [r4, #4] + lsrs r3, r3, #8 + b _080637EA + .align 2, 0 +_080637BC: .4byte gMultiSioRecv +_080637C0: .4byte gMultiSioSend +_080637C4: .4byte Task_80638B0 +_080637C8: .4byte gChaoTasks +_080637CC: .4byte gMultiplayerConnections +_080637D0: .4byte gPseudoRandom +_080637D4: .4byte 0x00196225 +_080637D8: .4byte 0x3C6EF35F +_080637DC: + ldr r1, [r6] + ldr r0, _08063804 @ =0x00196225 + muls r0, r1, r0 + ldr r1, _08063808 @ =0x3C6EF35F + adds r0, r0, r1 + str r0, [r6] + adds r3, r0, #0 +_080637EA: + ldrb r0, [r4, #3] + movs r1, #7 + ands r1, r3 + cmp r0, r1 + beq _080637DC + ldrb r0, [r4, #4] + cmp r0, r1 + beq _080637DC + movs r0, #7 + ands r3, r0 + strb r3, [r4, #5] + b _08063818 + .align 2, 0 +_08063804: .4byte 0x00196225 +_08063808: .4byte 0x3C6EF35F +_0806380C: + mov r4, r8 + movs r0, #0x51 + strh r0, [r4] + mov r1, ip + ldrb r0, [r1] + strb r0, [r4, #2] +_08063818: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/game_over__Task_8056348.inc b/sa1/asm/non_matching/game/game_over__Task_8056348.inc new file mode 100644 index 0000000000..bb28e1fa38 --- /dev/null +++ b/sa1/asm/non_matching/game/game_over__Task_8056348.inc @@ -0,0 +1,157 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + ldr r1, _08056468 @ =gCurTask + ldr r0, [r1] + ldrh r0, [r0, #6] + mov sl, r0 + movs r0, #0xc0 + lsls r0, r0, #0x12 + mov r3, sl + adds r5, r3, r0 @ r5 = screen + ldr r0, [r5, #0x78] @ r0 = frames + ldr r6, _0805646C @ =0x0300003C + add r6, sl @ r6 = s2 + lsls r0, r0, #0x10 + asrs r1, r0, #0x10 + str r1, [sp, #0xc] @ sp0C = frames + ldr r3, _08056470 @ =0xFF880000 + adds r0, r0, r3 + lsrs r0, r0, #8 + lsls r2, r0, #0xc + ldr r7, _08056474 @ =sa2__gUnknown_030054B8 + ldrb r0, [r7] + adds r1, r0, #1 + strb r1, [r7] + movs r1, #0x20 + orrs r0, r1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + movs r3, #0x80 + orrs r0, r3 + str r0, [r5, #0x10] + mov r0, sp + movs r1, #0 + strh r1, [r0] + mov r1, sp + ldr r0, _08056478 @ =gSineTable + asrs r2, r2, #0x10 + adds r3, #0x80 + mov sb, r3 + add r2, sb + lsls r2, r2, #1 + adds r2, r2, r0 + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r4, r0, #0x16 + strh r4, [r1, #2] + mov r8, r4 + cmp r4, #9 + bgt _080563B6 + movs r0, #0xa + strh r0, [r1, #2] +_080563B6: + mov r0, sp + mov r1, sb + strh r1, [r0, #4] + mov r1, sp + movs r0, #0x7f + strh r0, [r1, #6] + mov r0, sp + movs r3, #0x3c + strh r3, [r0, #8] + adds r0, r5, #0 + bl TransformSprite + ldrb r0, [r7] + adds r1, r0, #1 + strb r1, [r7] + movs r1, #0x20 + orrs r0, r1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + movs r3, #0x80 + orrs r0, r3 + str r0, [r6, #0x10] + mov r0, sp + movs r1, #0 + strh r1, [r0] + strh r4, [r0, #2] + mov r3, r8 + cmp r3, #9 + bgt _080563F6 + mov r1, sp + movs r0, #0xa + strh r0, [r1, #2] +_080563F6: + mov r0, sp + mov r1, sb + strh r1, [r0, #4] + mov r1, sp + ldrh r0, [r0, #6] + strh r0, [r1, #6] + mov r0, sp + movs r3, #0x3c + strh r3, [r0, #8] + adds r0, r6, #0 + bl TransformSprite + ldr r0, [sp, #0xc] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + asrs r0, r0, #0x10 + str r0, [r5, #0x78] + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl DisplaySprite + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x87 + ble _08056458 + ldr r2, _0805647C @ =0x000002CB + strh r2, [r5, #0xa] + ldr r1, _08056480 @ =0x03000020 + add r1, sl + movs r0, #2 + strb r0, [r1] + strh r2, [r6, #0xa] + ldr r1, _08056484 @ =0x0300005C + add r1, sl + movs r0, #3 + strb r0, [r1] + ldr r0, _08056468 @ =gCurTask + ldr r1, [r0] + ldr r0, _08056488 @ =Task_805648C + str r0, [r1, #8] +_08056458: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08056468: .4byte gCurTask +_0805646C: .4byte 0x0300003C +_08056470: .4byte 0xFF880000 +_08056474: .4byte sa2__gUnknown_030054B8 +_08056478: .4byte gSineTable +_0805647C: .4byte 0x000002CB +_08056480: .4byte 0x03000020 +_08056484: .4byte 0x0300005C +_08056488: .4byte Task_805648C + +.syntax divided diff --git a/sa1/asm/non_matching/game/game_over__Task_805648C.inc b/sa1/asm/non_matching/game/game_over__Task_805648C.inc new file mode 100644 index 0000000000..0bd1144657 --- /dev/null +++ b/sa1/asm/non_matching/game/game_over__Task_805648C.inc @@ -0,0 +1,154 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + ldr r1, _080565AC @ =gCurTask + ldr r0, [r1] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 + ldr r0, [r6, #0x78] + ldr r2, _080565B0 @ =0x0300003C + adds r7, r1, r2 + lsls r0, r0, #0x10 + asrs r4, r0, #0x10 + str r4, [sp, #0xc] + ldr r1, _080565B4 @ =0xFF780000 + adds r0, r0, r1 + lsrs r0, r0, #8 + lsls r2, r0, #0xc + ldr r3, _080565B8 @ =sa2__gUnknown_030054B8 + ldrb r0, [r3] + adds r1, r0, #1 + strb r1, [r3] + movs r4, #0x20 + orrs r0, r4 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + movs r1, #0x80 + mov sl, r1 + orrs r0, r1 + str r0, [r6, #0x10] + mov r0, sp + movs r4, #0 + strh r4, [r0] + adds r1, #0x80 + adds r0, r1, #0 + asrs r2, r2, #0x10 + subs r0, r0, r2 + mov r2, sp + ldr r1, _080565BC @ =gSineTable + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r4, #0x80 + lsls r4, r4, #1 + mov sb, r4 + add r0, sb + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r5, r0, #0x16 + strh r5, [r2, #2] + mov r0, sp + adds r4, r5, #1 + strh r4, [r0, #2] + mov r8, r4 + cmp r4, #9 + bgt _0805650C + mov r1, sp + movs r0, #0xa + strh r0, [r1, #2] +_0805650C: + mov r0, sp + mov r1, sb + strh r1, [r0, #4] + mov r1, sp + movs r0, #0x7f + strh r0, [r1, #6] + mov r0, sp + movs r2, #0x3c + strh r2, [r0, #8] + adds r0, r6, #0 + str r3, [sp, #0x10] + bl TransformSprite + ldr r3, [sp, #0x10] + ldrb r0, [r3] + adds r1, r0, #1 + strb r1, [r3] + movs r1, #0x20 + orrs r0, r1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov r2, sl + orrs r0, r2 + str r0, [r7, #0x10] + mov r0, sp + movs r1, #0 + strh r1, [r0] + strh r5, [r0, #2] + strh r4, [r0, #2] + mov r2, r8 + cmp r2, #9 + bgt _08056552 + mov r1, sp + movs r0, #0xa + strh r0, [r1, #2] +_08056552: + mov r0, sp + mov r4, sb + strh r4, [r0, #4] + mov r1, sl + strh r1, [r0, #6] + movs r2, #0x3c + strh r2, [r0, #8] + adds r0, r7, #0 + mov r1, sp + bl TransformSprite + ldr r0, [sp, #0xc] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + asrs r0, r0, #0x10 + str r0, [r6, #0x78] + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl DisplaySprite + adds r0, r7, #0 + bl UpdateSpriteAnimation + adds r0, r7, #0 + bl DisplaySprite + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x97 + ble _0805659C + ldr r4, _080565AC @ =gCurTask + ldr r1, [r4] + ldr r0, _080565C0 @ =Task_80565C4 + str r0, [r1, #8] +_0805659C: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080565AC: .4byte gCurTask +_080565B0: .4byte 0x0300003C +_080565B4: .4byte 0xFF780000 +_080565B8: .4byte sa2__gUnknown_030054B8 +_080565BC: .4byte gSineTable +_080565C0: .4byte Task_80565C4 + +.syntax divided diff --git a/sa1/asm/non_matching/game/game_over__Task_805676C.inc b/sa1/asm/non_matching/game/game_over__Task_805676C.inc new file mode 100644 index 0000000000..7cba84d952 --- /dev/null +++ b/sa1/asm/non_matching/game/game_over__Task_805676C.inc @@ -0,0 +1,253 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #0x1c + ldr r0, _08056814 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 @ r6 = overD + ldrh r7, [r6, #0x24] @ r7 = unk24 + mov r1, sp + movs r0, #0 + mov r8, r0 + movs r0, #0x5b + strh r0, [r1, #0xc] + movs r0, #6 + strh r0, [r1, #0x12] + mov r0, sp + mov r1, r8 + strh r1, [r0, #8] + mov r1, sp + movs r0, #4 + strh r0, [r1, #0x10] + movs r2, #1 + movs r0, #1 + strh r0, [r1, #0xe] + mov r0, sp + strb r2, [r0, #0x16] + lsls r4, r7, #0x10 + asrs r4, r4, #0x10 + adds r0, r4, #0 + movs r1, #0x78 + bl __divsi3 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + movs r0, #0x29 + subs r0, r0, r1 + add r5, sp, #0x18 @ r5 = sp18 = arr + strb r0, [r5] + adds r0, r4, #0 + movs r1, #0x78 + bl __modsi3 + lsls r0, r0, #0x10 + asrs r1, r0, #0x10 + cmp r1, #0x50 + ble _0805681C + adds r0, r1, #0 + subs r0, #0x50 + mov r4, sp + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r1, #0x74 + muls r0, r1, r0 + movs r1, #0x12 + bl __divsi3 + adds r0, #0x74 + strh r0, [r4, #0xa] + ldrb r0, [r5] + cmp r0, #0x1f + bls _0805689E + mov r0, sp + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + strh r1, [r0, #2] + mov r3, r8 + strh r3, [r0, #4] + mov r3, sp + ldr r2, _08056818 @ =sa2__gUnknown_030054B8 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + strh r0, [r3, #6] + adds r0, r5, #0 + mov r1, sp + bl sub_8052C84 + b _0805689E + .align 2, 0 +_08056814: .4byte gCurTask +_08056818: .4byte sa2__gUnknown_030054B8 +_0805681C: + cmp r1, #0x14 + ble _08056864 + subs r1, #0x14 + mov r2, sp + lsls r1, r1, #0x10 + asrs r1, r1, #0xe + ldr r3, _0805685C @ =0x000001F1 + adds r0, r3, #0 + subs r0, r0, r1 + strh r0, [r2] + mov r1, sp + strh r0, [r1, #2] + mov r0, sp + mov r1, r8 + strh r1, [r0, #4] + mov r3, sp + ldr r2, _08056860 @ =sa2__gUnknown_030054B8 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + strh r0, [r3, #6] + mov r1, sp + movs r0, #0x68 + strh r0, [r1, #0xa] + movs r0, #0x53 + strh r0, [r1, #0xc] + adds r0, r5, #0 + bl sub_8052C84 + b _0805689E + .align 2, 0 +_0805685C: .4byte 0x000001F1 +_08056860: .4byte sa2__gUnknown_030054B8 +_08056864: + mov r4, sp + movs r0, #0x74 + muls r0, r1, r0 + movs r1, #0x14 + bl __divsi3 + strh r0, [r4, #0xa] + ldrb r0, [r5] + cmp r0, #0x1f + bls _0805689E + mov r0, sp + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0] + strh r1, [r0, #2] + mov r3, r8 + strh r3, [r0, #4] + mov r3, sp + ldr r2, _08056918 @ =sa2__gUnknown_030054B8 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + strh r0, [r3, #6] + adds r0, r5, #0 + mov r1, sp + bl sub_8052C84 +_0805689E: + lsls r0, r7, #0x10 @ r0 = unk24 << 16 + asrs r2, r0, #0x10 + ldr r0, _0805691C @ =0x000004AF + cmp r2, r0 + ble _080568B0 + ldr r0, _08056920 @ =gCurTask + ldr r1, [r0] + ldr r0, _08056924 @ =Task_DestroyGameOverD + str r0, [r1, #8] +_080568B0: + ldr r5, _08056928 @ =gPressedKeys + ldrh r1, [r5] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _080568F8 + adds r0, r2, #0 + movs r1, #0x78 + bl Div + lsls r0, r0, #0x10 + movs r1, #0x80 + lsls r1, r1, #9 + adds r0, r0, r1 + asrs r2, r0, #0x10 @ r2_s16 = (unk24 / 120) + 1; + lsls r1, r2, #4 + subs r1, r1, r2 + lsls r1, r1, #0x13 + lsrs r7, r1, #0x10 @ r7 = unk24 = r2_s16 * 45; + ldr r4, [r6, #0x1c] @ r4 = overB = overD->unk1C + movs r3, #0x96 + lsls r3, r3, #3 @ r3 = 1200 + adds r0, r2, #0 + movs r1, #0xa + subs r1, r1, r0 + lsls r2, r1, #4 + subs r2, r2, r1 + lsls r2, r2, #3 + subs r3, r3, r2 + str r3, [r4, #0x18] + ldr r1, [r6, #0x20] @ r1 = (GameOverC*)overD->unk20 + ldr r0, _0805692C @ =0x00000566 + subs r0, r0, r2 + str r0, [r1, #0x18] + ldr r1, [r6, #0x18] + str r0, [r1, #0x78] +_080568F8: + ldrh r1, [r5] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08056934 + ldr r0, _08056920 @ =gCurTask + ldr r1, [r0] + ldr r0, _08056930 @ =Task_8056970 + str r0, [r1, #8] + movs r0, #0 + str r0, [r6, #0x24] + ldr r1, [r6, #0x18] + adds r1, #0x80 + movs r0, #1 + strb r0, [r1] + b _08056940 + .align 2, 0 +_08056918: .4byte sa2__gUnknown_030054B8 +_0805691C: .4byte 0x000004AF +_08056920: .4byte gCurTask +_08056924: .4byte Task_DestroyGameOverD +_08056928: .4byte gPressedKeys +_0805692C: .4byte 0x00000566 +_08056930: .4byte Task_8056970 +_08056934: + lsls r0, r7, #0x10 + movs r3, #0x80 + lsls r3, r3, #9 + adds r0, r0, r3 + asrs r0, r0, #0x10 + str r0, [r6, #0x24] +_08056940: + ldr r0, [r6, #0x24] + movs r1, #0x78 + bl Mod + cmp r0, #0x3c + bne _08056960 + ldr r4, _0805696C @ =gUnknown_086883E4 + ldr r0, [r6, #0x24] + movs r1, #0x78 + bl Div + lsls r0, r0, #1 + adds r0, r0, r4 + ldrh r0, [r0] + bl m4aSongNumStart +_08056960: + add sp, #0x1c + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805696C: .4byte gUnknown_086883E4 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/BreakableWall__Task_BreakableWall2.inc b/sa1/asm/non_matching/game/interactables/BreakableWall__Task_BreakableWall2.inc new file mode 100644 index 0000000000..28087e6f86 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/BreakableWall__Task_BreakableWall2.inc @@ -0,0 +1,348 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + ldr r4, _08027E18 @ =gCurTask + ldr r0, [r4] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 @ r6 = wall + adds r0, #0xc + adds r7, r1, r0 @ r7 = s + ldr r1, [r6] + str r1, [sp] + ldrb r2, [r6, #8] + lsls r2, r2, #3 + ldrh r0, [r6, #4] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldX = TO_WORLD_POS(wall->base.meX, wall->base.regionX); + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r6, #6] + lsls r0, r0, #8 + adds r1, r1, r0 @ r1 = worldY = TO_WORLD_POS(me->y, wall->base.regionY); + ldr r3, _08027E1C @ =gCamera + ldrh r0, [r3, #2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r0, r0, r1 + adds r0, #0xa0 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0xc] @ sp0C = + ldrh r0, [r3] + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + subs r0, r2, r0 + strh r0, [r7, #0x16] + ldrh r0, [r3, #2] + subs r1, r1, r0 + strh r1, [r7, #0x18] + ldrh r0, [r6, #0x3c] + adds r0, #1 + strh r0, [r6, #0x3c] + movs r0, #0 + ldrsh r1, [r3, r0] + movs r3, #0xb8 + lsls r3, r3, #1 + adds r0, r1, r3 + cmp r2, r0 + bgt _08027DFA + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + bge _08027E20 +_08027DFA: + ldrh r0, [r7, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bls _08027E20 + ldrb r0, [r6, #8] + ldr r1, [sp] + strb r0, [r1] + ldr r0, [r4] + bl TaskDestroy + b _08028002_return + .align 2, 0 +_08027E18: .4byte gCurTask +_08027E1C: .4byte gCamera +_08027E20: + ldr r0, _08027E68 @ =gRefSpriteTables + ldr r1, [r0] + ldrh r0, [r7, #0xa] + ldr r1, [r1, #8] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r2, [r0] @ r2 = oamData + ldr r0, [r7, #0xc] @ r0 = s->dimensions->oamIndex + ldrb r1, [r0, #1] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + adds r2, r2, r0 + str r2, [sp, #8] @ sp08 = &oamDataEntry + movs r2, #0 + str r2, [sp, #4] @ sp04 = i +_08027E40_outer_loop: + movs r3, #0 + mov sl, r3 @ sl = j + ldr r4, [sp, #4] + lsls r4, r4, #2 + str r4, [sp, #0x10] @ sp10 = i * 4 +_08027E4A_inner_loop: + ldr r1, [r7, #0x10] @ r1 = s->frameFlags + adds r0, r1, #0 + movs r2, #0x80 + lsls r2, r2, #3 + ands r0, r2 + adds r2, r1, #0 @ r2 = r1 = s->frameFlags + cmp r0, #0 + beq _08027E6C + movs r0, #3 + mov r3, sl + subs r0, r0, r3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov sb, r0 + b _08027E6E + .align 2, 0 +_08027E68: .4byte gRefSpriteTables +_08027E6C: + mov sb, sl +_08027E6E: + movs r4, #0x3e + ldrsh r0, [r6, r4] + ldrh r3, [r6, #0x3e] + cmp r0, #0 + blt _08027E7C + mov r1, sl + b _08027E86 +_08027E7C: + movs r0, #3 + mov r1, sl + subs r0, r0, r1 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 +_08027E86: + ldr r0, [sp, #0x10] @ r0 = sp10 = i * 4 + add r0, sb + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov r8, r0 @ r8 = i * 4 + sb; + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #1 + ldrh r1, [r6, #0x3c] + subs r1, r1, r0 @ temp = wall->qUnk3C - r1 * 10; + movs r0, #7 + ldr r4, [sp, #4] + subs r0, r0, r4 + lsls r0, r0, #1 + subs r1, r1, r0 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + cmp r1, #0 + ble _08027F38 + movs r0, #0x2a + muls r0, r1, r0 + ldr r4, _08027EEC @ =0xFFFFFE00 + adds r0, r0, r4 + muls r0, r1, r0 + lsls r0, r0, #8 + lsrs r5, r0, #0x10 @ r5 = I(temp * ((temp * 42) - Q(2))); + lsls r0, r3, #0x10 + movs r4, #0x3e + ldrsh r0, [r6, r4] + muls r0, r1, r0 + lsls r0, r0, #8 + lsrs r4, r0, #0x10 @ r4 = temp2 + lsls r0, r5, #0x10 + mov ip, r0 + ldr r1, [sp, #0xc] + lsls r0, r1, #0x10 + cmp ip, r0 + ble _08027F3C + lsls r0, r3, #0x10 + cmp r0, #0 + blt _08027EF8 + movs r3, #0x80 + lsls r3, r3, #3 + ands r2, r3 + cmp r2, #0 + beq _08027EF0 + mov r4, r8 @ r4 = r8 = + cmp r4, #3 + beq _08027EEA + b _08027FE2 +_08027EEA: + b _08027F08 + .align 2, 0 +_08027EEC: .4byte 0xFFFFFE00 +_08027EF0: + mov r3, r8 + cmp r3, #0 + bne _08027FE2 + b _08027F22 +_08027EF8: + movs r3, #0x80 + lsls r3, r3, #3 + ands r2, r3 + cmp r2, #0 + beq _08027F1C + mov r4, r8 + cmp r4, #0 + bne _08027FE2 +_08027F08: + ldrb r0, [r6, #8] + ldr r1, [sp] + strb r0, [r1] + ldr r2, _08027F18 @ =gCurTask + ldr r0, [r2] + bl TaskDestroy + b _08028002_return + .align 2, 0 +_08027F18: .4byte gCurTask +_08027F1C: + mov r3, r8 + cmp r3, #3 + bne _08027FE2 +_08027F22: + ldrb r0, [r6, #8] + ldr r4, [sp] + strb r0, [r4] + ldr r1, _08027F34 @ =gCurTask + ldr r0, [r1] + bl TaskDestroy + b _08028002_return + .align 2, 0 +_08027F34: .4byte gCurTask +_08027F38: + movs r4, #0 + movs r5, #0 +_08027F3C: + ldrh r0, [r7, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r3, r0, #0 + ldr r0, _08027F98 @ =iwram_end + ldr r0, [r0] + cmp r0, r3 + beq _08028002_return + ldr r0, [sp, #4] @ r0 = i + lsls r1, r0, #3 + ldrh r2, [r7, #0x18] + adds r1, r1, r2 + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + adds r0, r0, r1 + movs r1, #0xff + ands r0, r1 + movs r1, #0 + strh r0, [r3] + ldr r0, [r7, #0x10] + movs r2, #0x80 + lsls r2, r2, #3 + ands r0, r2 + cmp r0, #0 + beq _08027FA0 + mov r1, sb @ r1 = sb = + lsls r0, r1, #3 + ldrh r1, [r7, #0x16] + subs r1, r1, r0 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + subs r0, #8 + adds r1, r1, r0 + ldr r2, _08027F9C @ =0x000001FF + adds r0, r2, #0 + ands r1, r0 + movs r4, #0x80 + lsls r4, r4, #5 + adds r0, r4, #0 + orrs r1, r0 + b _08027FB4 + .align 2, 0 +_08027F98: .4byte iwram_end +_08027F9C: .4byte 0x000001FF +_08027FA0: + mov r1, sb + lsls r0, r1, #3 + ldrh r2, [r7, #0x16] + adds r0, r0, r2 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + adds r1, r1, r0 + ldr r4, _08028014 @ =0x000001FF + adds r0, r4, #0 + ands r1, r0 +_08027FB4: + strh r1, [r3, #2] + adds r0, r7, #0 + adds r0, #0x25 + ldrb r0, [r0] + ldr r1, [sp, #8] + ldrh r2, [r1, #4] + adds r2, r2, r0 + ldr r4, _08028018 @ =0xFFFFF000 + adds r0, r4, #0 + ands r2, r0 + ldr r0, [r7, #0x10] + movs r1, #0xc0 + lsls r1, r1, #6 + ands r0, r1 + lsrs r0, r0, #2 + orrs r2, r0 + ldr r0, [r7, #4] + ldr r1, _0802801C @ =0xF9FF0000 + adds r0, r0, r1 + lsrs r0, r0, #5 + add r0, r8 + orrs r2, r0 + strh r2, [r3, #4] +_08027FE2: + mov r0, sl + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov sl, r0 + cmp r0, #3 + bhi _08027FF2 + b _08027E4A_inner_loop +_08027FF2: + ldr r0, [sp, #4] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #4] + cmp r0, #7 + bhi _08028002_return + b _08027E40_outer_loop +_08028002_return: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08028014: .4byte 0x000001FF +_08028018: .4byte 0xFFFFF000 +_0802801C: .4byte 0xF9FF0000 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/CreateEntity_SecurityGate.inc b/sa1/asm/non_matching/game/interactables/CreateEntity_SecurityGate.inc new file mode 100644 index 0000000000..317a2dc0df --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/CreateEntity_SecurityGate.inc @@ -0,0 +1,112 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #4 + mov r8, r0 @ r8 = me + adds r4, r1, #0 + adds r5, r2, #0 + adds r6, r3, #0 + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 @ r4 = regionX + lsls r5, r5, #0x10 + lsrs r5, r5, #0x10 @ r5 = regionY + lsls r6, r6, #0x18 + lsrs r6, r6, #0x18 @ r6 = id + ldr r0, _080883F4 @ =Task_SecurityGateMain + movs r2, #0x80 + lsls r2, r2, #6 + ldr r1, _080883F8 @ =TaskDestructor_SecurityGateMain + str r1, [sp] + movs r1, #0x40 + movs r3, #0 + bl TaskCreate + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r2, r1, r0 @ r2 = gate + adds r0, #0xc + adds r7, r1, r0 @ r7 = s + movs r3, #0 + strh r4, [r2, #4] + strh r5, [r2, #6] + mov r4, r8 + str r4, [r2] + ldrb r0, [r4] + strb r0, [r2, #8] + strb r6, [r2, #9] + ldr r4, _080883FC @ =0x0300003C + adds r0, r1, r4 + strb r3, [r0] + ldr r0, _08088400 @ =0x0300003D + adds r1, r1, r0 + strb r3, [r1] + mov r1, r8 + movs r0, #3 + ldrsb r0, [r1, r0] + cmp r0, #0 + bne _08088404 + ldrb r0, [r1, #5] + lsls r0, r0, #3 + subs r0, #0xa + b _08088406 + .align 2, 0 +_080883F4: .4byte Task_SecurityGateMain +_080883F8: .4byte TaskDestructor_SecurityGateMain +_080883FC: .4byte 0x0300003C +_08088400: .4byte 0x0300003D +_08088404: + ldr r0, _08088460 @ =0x0000FFF6 +_08088406: + strh r0, [r2, #0x3e] + movs r4, #2 + rsbs r4, r4, #0 + adds r0, r4, #0 + mov r1, r8 + strb r0, [r1] + movs r0, #0xc + bl VramMalloc + str r0, [r7, #4] + movs r2, #0 + movs r1, #0 + ldr r0, _08088464 @ =0x00000216 + strh r0, [r7, #0xa] + adds r0, r7, #0 + adds r0, #0x20 + strb r2, [r0] + movs r0, #0x90 + lsls r0, r0, #3 + strh r0, [r7, #0x1a] + strh r1, [r7, #8] + strh r1, [r7, #0x14] + strh r1, [r7, #0x1c] + adds r1, r7, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r1, #1 + movs r0, #0x10 + strb r0, [r1] + adds r0, r7, #0 + adds r0, #0x25 + strb r2, [r0] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r7, #0x28] + movs r0, #0x80 + lsls r0, r0, #6 + str r0, [r7, #0x10] + add sp, #4 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08088460: .4byte 0x0000FFF6 +_08088464: .4byte 0x00000216 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/CreateEntity_SegaSonicLetter.inc b/sa1/asm/non_matching/game/interactables/CreateEntity_SegaSonicLetter.inc new file mode 100644 index 0000000000..9bcf5ce725 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/CreateEntity_SegaSonicLetter.inc @@ -0,0 +1,161 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + mov r8, r0 @ r8 = me + adds r6, r1, #0 + mov sb, r2 + mov sl, r3 + lsls r6, r6, #0x10 + lsrs r6, r6, #0x10 @ r1 = regionX + mov r0, sb + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 @ sb = regionY + mov r1, sl + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + mov sl, r1 @ sl = id + ldr r1, _0807EBAC @ =gUnknown_086CED90 + add r0, sp, #4 + movs r2, #6 + bl memcpy + ldr r0, _0807EBB0 @ =Task_SegaSonicLetter + ldr r1, _0807EBB4 @ =TaskDestructor_SegaSonicLetter + str r1, [sp] + movs r1, #0x44 + movs r2, #0x80 + lsls r2, r2, #6 + movs r3, #0 + bl TaskCreate + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r4, r0 + ldr r2, _0807EBB8 @ =0x0300000C + adds r5, r4, r2 @ r5 = s + movs r7, #0 + strh r6, [r0, #4] + mov r3, sb + strh r3, [r0, #6] + mov r1, r8 + str r1, [r0] + ldrb r1, [r1] + strb r1, [r0, #8] + mov r2, sl + strb r2, [r0, #9] + mov r3, r8 @ r3 = r8 = me + ldrb r0, [r3, #3] + ldr r1, _0807EBBC @ =0x0300003C + adds r1, r1, r4 + mov sl, r1 @ sl = s->meDat0 + strb r0, [r1] + ldr r2, _0807EBC0 @ =0x0300003D + adds r0, r4, r2 + movs r3, #0 + strb r3, [r0] + mov r0, r8 + ldrb r2, [r0, #4] + movs r0, #3 + adds r1, r0, #0 + ands r1, r2 + ldr r3, _0807EBC4 @ =0x0300003E + adds r2, r4, r3 + strb r1, [r2] @ letter->meDat1 = me->d.uData[1] % 4u; + mov r2, r8 @ r2 = r8 = me + ldrb r1, [r2, #4] + ands r0, r1 + lsls r0, r0, #1 + add r0, sp + adds r0, #4 + ldrh r0, [r0] + subs r0, #0xa1 + asrs r0, r0, #1 + adds r3, #1 + adds r1, r4, r3 + strb r0, [r1] + ldrb r1, [r2, #5] + ldr r2, _0807EBC8 @ =0x03000040 + adds r0, r4, r2 + strb r1, [r0] + mov r3, r8 @ r3 = r8 = me + ldrb r0, [r3] + lsls r0, r0, #3 + lsls r6, r6, #8 + adds r0, r0, r6 + strh r0, [r5, #0x16] + ldrb r0, [r3, #1] + lsls r0, r0, #3 + mov r1, sb + lsls r1, r1, #8 + mov sb, r1 + add r0, sb + strh r0, [r5, #0x18] + movs r0, #0xfe + strb r0, [r3] + movs r0, #0x10 + bl VramMalloc + str r0, [r5, #4] + movs r0, #0x90 + lsls r0, r0, #3 + strh r0, [r5, #0x1a] + strh r7, [r5, #8] + movs r0, #0xf6 + lsls r0, r0, #1 + strh r0, [r5, #0xa] + mov r2, sl + ldrb r0, [r2] + lsls r0, r0, #2 + ldr r3, _0807EBCC @ =0x0300002C + adds r1, r4, r3 + strb r0, [r1] + strh r7, [r5, #0x14] + strh r7, [r5, #0x1c] + ldr r0, _0807EBD0 @ =0x0300002D + adds r1, r4, r0 + movs r0, #0xff + strb r0, [r1] + ldr r2, _0807EBD4 @ =0x0300002E + adds r1, r4, r2 + movs r0, #0x10 + strb r0, [r1] + adds r3, #5 + adds r4, r4, r3 + movs r0, #0 + strb r0, [r4] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r5, #0x28] + movs r1, #0x80 + lsls r1, r1, #6 + str r1, [r5, #0x10] + adds r0, r5, #0 + bl UpdateSpriteAnimation + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0807EBAC: .4byte gUnknown_086CED90 +_0807EBB0: .4byte Task_SegaSonicLetter +_0807EBB4: .4byte TaskDestructor_SegaSonicLetter +_0807EBB8: .4byte 0x0300000C +_0807EBBC: .4byte 0x0300003C +_0807EBC0: .4byte 0x0300003D +_0807EBC4: .4byte 0x0300003E +_0807EBC8: .4byte 0x03000040 +_0807EBCC: .4byte 0x0300002C +_0807EBD0: .4byte 0x0300002D +_0807EBD4: .4byte 0x0300002E + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/Spring__sub_8022640.inc b/sa1/asm/non_matching/game/interactables/Spring__sub_8022640.inc new file mode 100644 index 0000000000..5925c4119d --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/Spring__sub_8022640.inc @@ -0,0 +1,236 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + mov r8, r0 @ r8 = s + adds r7, r1, #0 @ r7 = me + adds r4, r3, #0 @ r4 = p + movs r0, #0 @ r2 = spring + mov sb, r0 @ sb = sb = r0 = 0 + movs r6, #0 + ldrb r3, [r2, #8] + lsls r3, r3, #3 + ldrh r0, [r2, #4] + lsls r0, r0, #8 + adds r3, r3, r0 + lsls r3, r3, #0x10 @ r3 = worldX + ldrb r1, [r7, #1] + lsls r1, r1, #3 + ldrh r0, [r2, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + ldr r2, _08022764 @ =gCamera + ldrh r0, [r2] + lsrs r5, r3, #0x10 + mov sl, r5 @ sl = worldX + asrs r3, r3, #0x10 + subs r3, r3, r0 + mov r0, r8 + strh r3, [r0, #0x16] + ldrh r0, [r2, #2] + lsrs r2, r1, #0x10 + mov ip, r2 @ ip = worldY + asrs r1, r1, #0x10 + subs r1, r1, r0 + mov r5, r8 @ r5 = r8 = s + strh r1, [r5, #0x18] + ldr r0, _08022768 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _0802269A + ldr r3, [r4, #0x10] + cmp r0, #5 + bne _080226E2 +_0802269A: + movs r2, #0 + ldr r1, _0802276C @ =gMultiplayerPlayerTasks + ldr r0, [r1] + ldr r3, [r4, #0x10] + cmp r0, #0 + beq _080226E2 + adds r5, r1, #0 +_080226A8: + ldr r0, _08022770 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r2, r0 + beq _080226CE @ if(i != SIO_MULTI_CNT->id) + lsls r0, r2, #2 + adds r0, r0, r5 + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + ldr r0, [r0, #0x5c] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + beq _080226CE + movs r6, #1 +_080226CE: + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #3 + bhi _080226E2 + lsls r0, r2, #2 + adds r0, r0, r5 + ldr r0, [r0] + cmp r0, #0 + bne _080226A8 +_080226E2: + movs r0, #0x80 + lsls r0, r0, #0xf + ands r3, r0 + cmp r3, #0 + beq _080226F2 + cmp r6, #0 + bne _080226F2 + b _080227F2 +_080226F2: + mov r1, sl + lsls r0, r1, #0x10 + asrs r6, r0, #0x10 + mov r2, ip @ r2 = ip = worldY + lsls r0, r2, #0x10 + asrs r5, r0, #0x10 + mov r0, r8 + adds r1, r6, #0 + adds r2, r5, #0 + adds r3, r4, #0 + bl sub_80096B0 + movs r1, #8 + ands r1, r0 + cmp r1, #0 + bne _08022724 + mov r0, r8 + adds r1, r6, #0 + adds r2, r5, #0 + adds r3, r4, #0 + bl Coll_AmyHammer_Spring + mov sb, r0 + cmp r0, #0 + beq _080227F2 +_08022724: + ldr r0, _08022768 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _08022730 + cmp r0, #5 + bne _08022734 +_08022730: + movs r0, #2 + strh r0, [r4, #0x1c] +_08022734: + adds r0, r4, #0 + bl sa2__sub_8021BE0 + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + movs r1, #2 + orrs r0, r1 + ldr r1, _08022774 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + adds r1, r4, #0 + adds r1, #0x3d + movs r0, #0 + strb r0, [r1] + ldrb r2, [r7, #3] + movs r0, #3 + ldrsb r0, [r7, r0] + cmp r0, #3 + ble _08022778 + ldrb r0, [r7, #4] + lsls r0, r0, #4 + b _08022784 + .align 2, 0 +_08022764: .4byte gCamera +_08022768: .4byte gGameMode +_0802276C: .4byte gMultiplayerPlayerTasks +_08022770: .4byte 0x04000128 +_08022774: .4byte 0xFFFFFEFF +_08022778: + ldr r0, _080227B0 @ =sData0Accel + movs r1, #3 + ands r1, r2 + lsls r1, r1, #1 + adds r1, r1, r0 + ldrh r0, [r1] +_08022784: + rsbs r0, r0, #0 + strh r0, [r4, #0xa] + mov r5, sb + cmp r5, #0 + beq _08022798 + ldrh r1, [r4, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x11 + adds r0, r0, r1 + strh r0, [r4, #0xa] +_08022798: + ldrb r1, [r7, #3] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080227B4 + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0x15 + b _080227C0 + .align 2, 0 +_080227B0: .4byte sData0Accel +_080227B4: + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0x11 +_080227C0: + strb r0, [r1] + ldr r0, [r4, #0x64] + adds r0, #0x2d + movs r1, #0xff + strb r1, [r0] + mov r1, r8 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + adds r1, #1 + movs r0, #0xff + strb r0, [r1] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + movs r0, #0xaa + bl m4aSongNumStart + movs r0, #1 + b _080227F4 +_080227F2: + movs r0, #0 +_080227F4: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/Task_InclineRamp.inc b/sa1/asm/non_matching/game/interactables/Task_InclineRamp.inc new file mode 100644 index 0000000000..bc0cec7cb2 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/Task_InclineRamp.inc @@ -0,0 +1,606 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r0, _08075690 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r1, r0 @ r0 = ramp + ldr r0, [r0] + str r0, [sp] @ sp00 = me + ldr r2, _08075694 @ =0x03000008 + adds r0, r1, r2 + ldrb r0, [r0] + str r0, [sp, #4] @ sp04 = meX + ldr r3, _08075698 @ =0x03000004 + adds r0, r1, r3 + ldrh r2, [r0] @ r2 = regionX + adds r3, #2 + adds r0, r1, r3 + ldrh r3, [r0] @ r3 = regionY + ldr r0, _0807569C @ =0x03000009 + adds r1, r1, r0 + ldrb r1, [r1] + str r1, [sp, #8] @ sp08 = incline + ldr r1, [sp, #4] @ sp04 = meX + lsls r0, r1, #3 + lsls r2, r2, #8 + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sl, r0 @ sl = worldX + ldr r2, [sp] + ldrb r0, [r2, #1] + lsls r0, r0, #3 + lsls r3, r3, #8 + adds r0, r0, r3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 @ r8 = worldY + movs r4, #0 + ldr r5, _080756A0 @ =gPartner + ldr r6, _080756A4 @ =gPlayer +_08075678_loop: + cmp r4, #0 + beq _080756A8 + ldr r1, [r5, #0x10] + movs r0, #0x80 + ands r1, r0 + mov r3, sl + lsls r3, r3, #0x10 + mov sb, r3 @ sb = worldX << 16 + mov r0, r8 + lsls r7, r0, #0x10 @ r7 = worldY << 16 + b _080756B8 + .align 2, 0 +_08075690: .4byte gCurTask +_08075694: .4byte 0x03000008 +_08075698: .4byte 0x03000004 +_0807569C: .4byte 0x03000009 +_080756A0: .4byte gPartner +_080756A4: .4byte gPlayer +_080756A8: + ldr r1, [r6, #0x10] + movs r0, #0x80 + ands r1, r0 + mov r2, sl + lsls r2, r2, #0x10 + mov sb, r2 + mov r3, r8 + lsls r7, r3, #0x10 +_080756B8: + cmp r1, #0 + beq _080756BE + b _08075A08_continue +_080756BE: + mov r1, sl + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 @ r1 = sl = worldX + mov sb, r0 + cmp r4, #0 + beq _080756D8 + ldr r0, [r5] + asrs r0, r0, #8 + cmp r1, r0 + ble _080756E6 + mov r2, r8 @ r2 = r8 = worldY + lsls r7, r2, #0x10 + b _08075A08_continue +_080756D8: + ldr r0, [r6] + asrs r0, r0, #8 + mov r3, r8 + lsls r7, r3, #0x10 + cmp r1, r0 + ble _080756E6 + b _08075A08_continue +_080756E6: + mov r0, sb @ r0 = sb = worldX << 16 + asrs r1, r0, #0x10 + ldr r2, [sp] @ r2 = sp00 = me + ldrb r0, [r2, #5] + lsls r0, r0, #3 + adds r1, r1, r0 + cmp r4, #0 + beq _08075704 + ldr r0, [r5] + asrs r0, r0, #8 + cmp r1, r0 + bge _08075712 + mov r3, r8 + lsls r7, r3, #0x10 + b _08075A08_continue +_08075704: + ldr r0, [r6] + asrs r0, r0, #8 + mov r2, r8 + lsls r7, r2, #0x10 + cmp r1, r0 + bge _08075712 + b _08075A08_continue +_08075712: + mov r3, r8 + lsls r0, r3, #0x10 + asrs r1, r0, #0x10 + adds r7, r0, #0 + cmp r4, #0 + beq _08075728 + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r1, r0 + ble _08075732 + b _08075A08_continue +_08075728: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + ble _08075732 + b _08075A08_continue +_08075732: + asrs r1, r7, #0x10 + ldr r2, [sp] + ldrb r0, [r2, #6] + lsls r0, r0, #3 + adds r1, r1, r0 + cmp r4, #0 + beq _0807574A + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08075754 + b _08075A08_continue +_0807574A: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08075754 + b _08075A08_continue +_08075754: + ldr r3, [sp, #8] @ r3 = sp08 = incline + cmp r3, #0 + bne _0807575C + b _080758AC +_0807575C: + cmp r4, #0 + beq _0807576E + movs r0, #8 + ldrsh r1, [r5, r0] + movs r0, #0x80 + lsls r0, r0, #3 + cmp r1, r0 + bgt _0807577C + b _08075A08_continue +_0807576E: + movs r2, #8 + ldrsh r1, [r6, r2] + movs r0, #0x80 + lsls r0, r0, #3 + cmp r1, r0 + bgt _0807577C + b _08075A08_continue +_0807577C: + cmp r4, #0 + beq _0807578C + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _08075796 +_0807578C: + ldr r0, [r6, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08075796: + cmp r4, #0 + beq _080757A4 + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] + b _080757AC +_080757A4: + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] +_080757AC: + cmp r4, #0 + beq _080757C0 + ldr r0, [r5, #0x10] + ldr r1, _080757BC @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] + b _080757C8 + .align 2, 0 +_080757BC: .4byte 0xFFFFFEFF +_080757C0: + ldr r0, [r6, #0x10] + ldr r1, _080757D8 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r6, #0x10] +_080757C8: + cmp r4, #0 + beq _080757DC + ldr r0, [r5, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _080757E6 + .align 2, 0 +_080757D8: .4byte 0xFFFFFEFF +_080757DC: + ldr r0, [r6, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_080757E6: + ldr r0, _0807581C @ =gPlayer + cmp r4, #0 + beq _080757EE + ldr r0, _08075820 @ =gPartner +_080757EE: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _0807581C @ =gPlayer + cmp r4, #0 + beq _080757FC + ldr r1, _08075820 @ =gPartner +_080757FC: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r2, _0807581C @ =gPlayer + adds r1, r2, #0 + cmp r4, #0 + beq _0807580A + ldr r1, _08075820 @ =gPartner +_0807580A: + movs r0, #0xe + strb r0, [r1, #0xf] + cmp r4, #0 + beq _08075824 + movs r0, #0xf8 + lsls r0, r0, #8 + strh r0, [r5, #0xa] + b _0807582A + .align 2, 0 +_0807581C: .4byte gPlayer +_08075820: .4byte gPartner +_08075824: + movs r0, #0xf8 + lsls r0, r0, #8 + strh r0, [r2, #0xa] +_0807582A: + cmp r4, #0 + beq _0807583C + movs r3, #0x80 + lsls r3, r3, #3 + adds r0, r3, #0 + ldrh r1, [r5, #8] + adds r0, r0, r1 + strh r0, [r5, #8] + b _08075848 +_0807583C: + movs r3, #0x80 + lsls r3, r3, #3 + adds r0, r3, #0 + ldrh r1, [r6, #8] + adds r0, r0, r1 + strh r0, [r6, #8] +_08075848: + cmp r4, #0 + beq _0807585A + movs r3, #8 + ldrsh r1, [r5, r3] + movs r0, #0x88 + lsls r0, r0, #5 + cmp r1, r0 + bgt _08075866 + b _08075878 +_0807585A: + movs r0, #8 + ldrsh r1, [r2, r0] + movs r0, #0x88 + lsls r0, r0, #5 + cmp r1, r0 + ble _08075878 +_08075866: + cmp r4, #0 + beq _08075872 + movs r0, #0x88 + lsls r0, r0, #5 + strh r0, [r5, #8] + b _08075878 +_08075872: + movs r0, #0x88 + lsls r0, r0, #5 + strh r0, [r2, #8] +_08075878: + adds r0, r2, #0 + cmp r4, #0 + beq _08075880 + ldr r0, _08075890 @ =gPartner +_08075880: + bl Player_TransitionCancelFlyingAndBoost + cmp r4, #0 + beq _08075898 + movs r0, #0x11 + ldr r1, _08075894 @ =gPartner + 0x40 + strb r0, [r1] + b _0807589E + .align 2, 0 +_08075890: .4byte gPartner +_08075894: .4byte gPartner + 0x40 +_08075898: + movs r0, #0x11 + ldr r2, _080758A8 @ =gPlayer + 0x40 + strb r0, [r2] +_0807589E: + movs r0, #0xaa + bl m4aSongNumStart + b _08075A08_continue + .align 2, 0 +_080758A8: .4byte gPlayer + 0x40 +_080758AC: + cmp r4, #0 + beq _080758C0 + movs r3, #8 + ldrsh r1, [r5, r3] + ldr r0, _080758BC @ =0xFFFFFC00 + cmp r1, r0 + blt _080758CC + b _08075A08_continue + .align 2, 0 +_080758BC: .4byte 0xFFFFFC00 +_080758C0: + movs r0, #8 + ldrsh r1, [r6, r0] + ldr r0, _080758DC @ =0xFFFFFC00 + cmp r1, r0 + blt _080758CC + b _08075A08_continue +_080758CC: + cmp r4, #0 + beq _080758E0 + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _080758EA + .align 2, 0 +_080758DC: .4byte 0xFFFFFC00 +_080758E0: + ldr r0, [r6, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_080758EA: + cmp r4, #0 + beq _080758F8 + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] + b _08075900 +_080758F8: + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] +_08075900: + cmp r4, #0 + beq _08075914 + ldr r0, [r5, #0x10] + ldr r1, _08075910 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] + b _0807591C + .align 2, 0 +_08075910: .4byte 0xFFFFFEFF +_08075914: + ldr r0, [r6, #0x10] + ldr r1, _0807592C @ =0xFFFFFEFF + ands r0, r1 + str r0, [r6, #0x10] +_0807591C: + cmp r4, #0 + beq _08075930 + ldr r0, [r5, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _0807593A + .align 2, 0 +_0807592C: .4byte 0xFFFFFEFF +_08075930: + ldr r0, [r6, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_0807593A: + ldr r0, _08075970 @ =gPlayer + cmp r4, #0 + beq _08075942 + ldr r0, _08075974 @ =gPartner +_08075942: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _08075970 @ =gPlayer + cmp r4, #0 + beq _08075950 + ldr r1, _08075974 @ =gPartner +_08075950: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r2, _08075970 @ =gPlayer + adds r1, r2, #0 + cmp r4, #0 + beq _0807595E + ldr r1, _08075974 @ =gPartner +_0807595E: + movs r0, #0xe + strb r0, [r1, #0xf] + cmp r4, #0 + beq _08075978 + movs r0, #0xf8 + lsls r0, r0, #8 + strh r0, [r5, #0xa] + b _0807597E + .align 2, 0 +_08075970: .4byte gPlayer +_08075974: .4byte gPartner +_08075978: + movs r0, #0xf8 + lsls r0, r0, #8 + strh r0, [r2, #0xa] +_0807597E: + cmp r4, #0 + beq _08075994 + ldr r1, _08075990 @ =0xFFFFFC00 + adds r0, r1, #0 + ldrh r3, [r5, #8] + adds r0, r0, r3 + strh r0, [r5, #8] + b _0807599E + .align 2, 0 +_08075990: .4byte 0xFFFFFC00 +_08075994: + ldr r1, _080759B0 @ =0xFFFFFC00 + adds r0, r1, #0 + ldrh r3, [r6, #8] + adds r0, r0, r3 + strh r0, [r6, #8] +_0807599E: + cmp r4, #0 + beq _080759B8 + movs r0, #8 + ldrsh r1, [r5, r0] + ldr r0, _080759B4 @ =0xFFFFEF00 + cmp r1, r0 + blt _080759C2 + b _080759DA + .align 2, 0 +_080759B0: .4byte 0xFFFFFC00 +_080759B4: .4byte 0xFFFFEF00 +_080759B8: + movs r3, #8 + ldrsh r1, [r2, r3] + ldr r0, _080759D0 @ =0xFFFFEF00 + cmp r1, r0 + bge _080759DA +_080759C2: + cmp r4, #0 + beq _080759D4 + movs r0, #0xef + lsls r0, r0, #8 + strh r0, [r5, #8] + b _080759DA + .align 2, 0 +_080759D0: .4byte 0xFFFFEF00 +_080759D4: + movs r0, #0xef + lsls r0, r0, #8 + strh r0, [r2, #8] +_080759DA: + adds r0, r2, #0 + cmp r4, #0 + beq _080759E2 + ldr r0, _080759F4 @ =gPartner +_080759E2: + bl Player_TransitionCancelFlyingAndBoost + cmp r4, #0 + beq _080759FC + movs r0, #0x11 + ldr r1, _080759F8 @ =gPartner + 0x40 + strb r0, [r1] + b _08075A02 + .align 2, 0 +_080759F4: .4byte gPartner +_080759F8: .4byte gPartner + 0x40 +_080759FC: + movs r0, #0x11 + ldr r2, _08075A74 @ =gPlayer + 0x40 + strb r0, [r2] +_08075A02: + movs r0, #0xaa + bl m4aSongNumStart +_08075A08_continue: + adds r4, #1 + ldr r0, _08075A78 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + bge _08075A18_postloop + b _08075678_loop +_08075A18_postloop: + ldr r2, _08075A7C @ =gCamera + ldrh r0, [r2] + mov r3, sb @ r3 = sb + asrs r1, r3, #0x10 + subs r1, r1, r0 + ldrh r2, [r2, #2] + asrs r0, r7, #0x10 + subs r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r1, #0x10 + movs r0, #0x80 + lsls r0, r0, #0x10 + adds r1, r1, r0 + movs r0, #0xf8 + lsls r0, r0, #0x11 + cmp r1, r0 + bhi _08075A54 + mov r1, r8 + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08075A54 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08075A64 +_08075A54: + mov r2, sp + ldrb r3, [r2, #4] + ldr r2, [sp] + strb r3, [r2] + ldr r0, _08075A80 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy +_08075A64: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08075A74: .4byte gPlayer + 0x40 +_08075A78: .4byte gNumSingleplayerCharacters +_08075A7C: .4byte gCamera +_08075A80: .4byte gCurTask + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/Task_Interactable034.inc b/sa1/asm/non_matching/game/interactables/Task_Interactable034.inc new file mode 100644 index 0000000000..c0555d7fa2 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/Task_Interactable034.inc @@ -0,0 +1,152 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + ldr r0, _0804D7A4 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 + movs r0, #0 + mov r8, r0 +_0804D746: + ldr r5, _0804D7A8 @ =gPlayer + mov r1, r8 + cmp r1, #0 + beq _0804D750 + ldr r5, _0804D7AC @ =gPartner +_0804D750: + ldr r0, [r5] + asrs r4, r0, #8 + ldr r0, [r5, #4] + asrs r7, r0, #8 + ldr r3, _0804D7B0 @ =gCamera + movs r0, #0 + ldrsh r2, [r3, r0] + movs r1, #0xb8 + lsls r1, r1, #1 + adds r0, r2, r1 + ldr r1, [r6, #4] + cmp r1, r0 + bgt _0804D78A + adds r0, r2, #0 + subs r0, #0x80 + cmp r1, r0 + blt _0804D78A + movs r0, #2 + ldrsh r2, [r3, r0] + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r2, r1 + ldr r1, [r6, #8] + cmp r1, r0 + bgt _0804D78A + adds r0, r2, #0 + subs r0, #0x80 + cmp r1, r0 + bge _0804D7B8 +_0804D78A: + ldr r0, [r5, #0x10] + ldr r1, _0804D7B4 @ =0xFFFF7FFF + ands r0, r1 + str r0, [r5, #0x10] + ldr r1, [r6] + ldrb r0, [r6, #0x1d] + strb r0, [r1] + ldr r0, _0804D7A4 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0804D848 + .align 2, 0 +_0804D7A4: .4byte gCurTask +_0804D7A8: .4byte gPlayer +_0804D7AC: .4byte gPartner +_0804D7B0: .4byte gCamera +_0804D7B4: .4byte 0xFFFF7FFF +_0804D7B8: + ldr r0, [r6, #0xc] + cmp r0, r4 + bgt _0804D836 + ldr r0, [r6, #0x10] + cmp r4, r0 + bge _0804D836 + ldr r0, [r6, #0x14] + cmp r0, r7 + bgt _0804D836 + ldr r0, [r6, #0x18] + cmp r7, r0 + bge _0804D836 + ldr r4, [r5, #0x10] + movs r0, #0x80 + ands r4, r0 + cmp r4, #0 + bne _0804D848 + adds r0, r5, #0 + bl Player_TransitionCancelFlyingAndBoost + ldr r1, [r5, #0x10] + movs r0, #0x81 + lsls r0, r0, #2 + orrs r1, r0 + movs r0, #0x80 + lsls r0, r0, #0xe + orrs r1, r0 + str r1, [r5, #0x10] + strh r4, [r5, #0x38] + strh r4, [r5, #0x3a] + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #5 + strb r0, [r1] + adds r0, r5, #0 + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #9 + strb r0, [r5, #0xf] + adds r2, r5, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2] + ldr r2, _0804D854 @ =gPlayer + ldr r0, [r2, #0x10] + ldr r1, _0804D858 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r2, #0x10] + adds r0, r5, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + beq _0804D836 + movs r0, #0x6d + bl m4aSongNumStartOrChange +_0804D836: + movs r0, #1 + add r8, r0 + ldr r0, _0804D85C @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r8, r0 + bge _0804D848 + b _0804D746 +_0804D848: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0804D854: .4byte gPlayer +_0804D858: .4byte 0xFFBFFFFF +_0804D85C: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/Task_PartyBalloon.inc b/sa1/asm/non_matching/game/interactables/Task_PartyBalloon.inc new file mode 100644 index 0000000000..64a4971a2f --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/Task_PartyBalloon.inc @@ -0,0 +1,384 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r5, _0807EFC4 @ =gCurTask + ldr r0, [r5] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 @ r6 = balloon + adds r0, #0xc + adds r7, r1, r0 @ r7 = s + ldr r1, [r6] + mov sl, r1 @ sl = me + ldrb r1, [r6, #8] + lsls r1, r1, #3 + ldrh r0, [r6, #4] + lsls r0, r0, #8 + adds r1, r1, r0 @ r1 = worldX + mov r0, sl + ldrb r2, [r0, #1] + lsls r2, r2, #3 + ldrh r0, [r6, #6] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldY + ldr r4, _0807EFC8 @ =gCamera + ldrh r3, [r4] + lsls r1, r1, #0x10 + mov r8, r1 + asrs r0, r1, #0x10 + subs r0, r0, r3 + strh r0, [r7, #0x16] + ldrh r3, [r4, #2] + lsls r2, r2, #0x10 + asrs r1, r2, #0x10 + subs r3, r1, r3 + strh r3, [r7, #0x18] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0807EFB6 + movs r1, #0x18 + ldrsh r0, [r7, r1] + adds r0, #0x80 + cmp r0, #0 + blt _0807EFB6 + lsls r1, r3, #0x10 + movs r0, #0x90 + lsls r0, r0, #0x11 + cmp r1, r0 + ble _0807EFCC +_0807EFB6: + ldrb r0, [r6, #8] + mov r1, sl + strb r0, [r1] + ldr r0, [r5] + bl TaskDestroy + b _0807F1F8 + .align 2, 0 +_0807EFC4: .4byte gCurTask +_0807EFC8: .4byte gCamera +_0807EFCC: + movs r4, #0 + mov r0, r8 + str r0, [sp] @ sp00 = worldX << 16 + str r2, [sp, #4] @ sp04 = worldY << 16 + ldr r5, _0807F004 @ =gPartner + ldr r1, _0807F008 @ =gPlayer + mov r8, r1 + movs r0, #1 + mov sb, r0 @ sb = 1 +_0807EFDE_loop: + ldr r0, [sp] + asrs r1, r0, #0x10 @ r1 = worldX + ldr r0, [sp, #4] + asrs r2, r0, #0x10 @ r2 = worldY + ldr r3, _0807F008 @ =gPlayer + cmp r4, #0 + beq _0807EFEE + ldr r3, _0807F004 @ =gPartner +_0807EFEE: + adds r0, r7, #0 + bl Coll_Player_Entity_Intersection + cmp r0, #0 + bne _0807EFFA + b _0807F1A0 +_0807EFFA: + cmp r4, #0 + beq _0807F00C + ldr r0, [r5, #0x10] + b _0807F010 + .align 2, 0 +_0807F004: .4byte gPartner +_0807F008: .4byte gPlayer +_0807F00C: + mov r1, r8 + ldr r0, [r1, #0x10] +_0807F010: + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + beq _0807F01C + b _0807F1A0 +_0807F01C: + ldr r0, _0807F038 @ =gPlayer + cmp r4, #0 + beq _0807F024 + ldr r0, _0807F03C @ =gPartner +_0807F024: + bl Player_TransitionCancelFlyingAndBoost + cmp r4, #0 + beq _0807F040 + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _0807F04E + .align 2, 0 +_0807F038: .4byte gPlayer +_0807F03C: .4byte gPartner +_0807F040: + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + mov r1, r8 + str r0, [r1, #0x10] +_0807F04E: + cmp r4, #0 + beq _0807F05C + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] + b _0807F068 +_0807F05C: + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #2 + orrs r0, r1 + mov r1, r8 + str r0, [r1, #0x10] +_0807F068: + cmp r4, #0 + beq _0807F07C + ldr r0, [r5, #0x10] + ldr r1, _0807F078 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] + b _0807F088 + .align 2, 0 +_0807F078: .4byte 0xFFFFFEFF +_0807F07C: + mov r1, r8 + ldr r0, [r1, #0x10] + ldr r1, _0807F098 @ =0xFFFFFEFF + ands r0, r1 + mov r1, r8 + str r0, [r1, #0x10] +_0807F088: + cmp r4, #0 + beq _0807F09C + ldr r0, [r5, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _0807F0AA + .align 2, 0 +_0807F098: .4byte 0xFFFFFEFF +_0807F09C: + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + mov r1, r8 + str r0, [r1, #0x10] +_0807F0AA: + cmp r4, #0 + beq _0807F0BA + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _0807F0C8 +_0807F0BA: + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + mov r1, r8 + str r0, [r1, #0x10] +_0807F0C8: + ldr r0, _0807F0FC @ =gPlayer + cmp r4, #0 + beq _0807F0D0 + ldr r0, _0807F100 @ =gPartner +_0807F0D0: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _0807F0FC @ =gPlayer + cmp r4, #0 + beq _0807F0DE + ldr r1, _0807F100 @ =gPartner +_0807F0DE: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _0807F0FC @ =gPlayer + adds r2, r1, #0 + cmp r4, #0 + beq _0807F0EC + ldr r2, _0807F100 @ =gPartner +_0807F0EC: + movs r0, #0xe + strb r0, [r2, #0xf] + cmp r4, #0 + beq _0807F104 + movs r0, #0xfa + lsls r0, r0, #8 + strh r0, [r5, #0xa] + b _0807F10A + .align 2, 0 +_0807F0FC: .4byte gPlayer +_0807F100: .4byte gPartner +_0807F104: + movs r0, #0xfa + lsls r0, r0, #8 + strh r0, [r1, #0xa] +_0807F10A: + cmp r4, #0 + beq _0807F118 + movs r0, #0x15 + ldr r1, _0807F114 @ =gPartner + 0x40 + b _0807F11C + .align 2, 0 +_0807F114: .4byte gPartner + 0x40 +_0807F118: + adds r1, #0x40 + movs r0, #0x15 +_0807F11C: + strb r0, [r1] + cmp r4, #0 + beq _0807F12C + ldr r0, _0807F128 @ =gPartnerBodyPSI + b _0807F12E + .align 2, 0 +_0807F128: .4byte gPartnerBodyPSI +_0807F12C: + ldr r0, _0807F208 @ =gPlayerBodyPSI +_0807F12E: + adds r0, #0x2d + movs r1, #0xff + strb r1, [r0] + adds r1, r6, #0 + adds r1, #0x40 + movs r0, #0x21 + strb r0, [r1] + adds r1, r7, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r0, r7, #0 + adds r0, #0x20 + mov r1, sb + strb r1, [r0] + ldr r0, _0807F20C @ =gPlayer + cmp r4, #0 + beq _0807F154 + ldr r0, _0807F210 @ =gPartner +_0807F154: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _0807F20C @ =gPlayer + cmp r4, #0 + beq _0807F162 + ldr r1, _0807F210 @ =gPartner +_0807F162: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _0807F20C @ =gPlayer + cmp r4, #0 + beq _0807F16E + ldr r1, _0807F210 @ =gPartner +_0807F16E: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #0xbd + bl m4aSongNumStart + ldr r0, _0807F214 @ =gCurTask + ldr r1, [r0] + ldr r0, _0807F218 @ =Task_PartyBalloonPopped + str r0, [r1, #8] + ldr r0, _0807F21C @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _0807F1DC + bl CreateRoomEvent + mov r1, sb + strb r1, [r0] + ldrh r1, [r6, #4] + strb r1, [r0, #1] + ldrh r1, [r6, #6] + strb r1, [r0, #2] + ldrb r1, [r6, #9] + strb r1, [r0, #3] + mov r1, sb + strb r1, [r0, #4] +_0807F1A0: + ldr r0, _0807F21C @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _0807F1DC + mov r0, sl + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #3 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0807F1DC + adds r1, r6, #0 + adds r1, #0x40 + movs r0, #0x21 + strb r0, [r1] + adds r1, r7, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + adds r0, r7, #0 + adds r0, #0x20 + mov r1, sb + strb r1, [r0] + movs r0, #0xbd + bl m4aSongNumStart + ldr r0, _0807F214 @ =gCurTask + ldr r1, [r0] + ldr r0, _0807F218 @ =Task_PartyBalloonPopped + str r0, [r1, #8] +_0807F1DC: + adds r4, #1 + ldr r0, _0807F220 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + bge _0807F1EC + b _0807EFDE_loop +_0807F1EC: + adds r0, r7, #0 + bl UpdateSpriteAnimation + adds r0, r7, #0 + bl DisplaySprite +_0807F1F8: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0807F208: .4byte gPlayerBodyPSI +_0807F20C: .4byte gPlayer +_0807F210: .4byte gPartner +_0807F214: .4byte gCurTask +_0807F218: .4byte Task_PartyBalloonPopped +_0807F21C: .4byte gGameMode +_0807F220: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/Task_SegaSonicLetter.inc b/sa1/asm/non_matching/game/interactables/Task_SegaSonicLetter.inc new file mode 100644 index 0000000000..418a3adee1 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/Task_SegaSonicLetter.inc @@ -0,0 +1,287 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + ldr r1, _0807EC68 @ =gUnknown_086CED90 + mov r0, sp + movs r2, #6 + bl memcpy + ldr r0, _0807EC6C @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r4, r0 @ r5 = letter + adds r0, #0xc + adds r7, r4, r0 @ r7 = s + ldr r1, [r5] + mov sl, r1 @ sl = me + ldrb r2, [r5, #8] + lsls r2, r2, #3 + ldrh r0, [r5, #4] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldX + lsls r2, r2, #0x10 + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r1, r1, r0 @ r1 = worldY + lsls r1, r1, #0x10 + ldr r3, _0807EC70 @ =gCamera + ldrh r0, [r3] + lsrs r6, r2, #0x10 + str r6, [sp, #8] @ sp08 = worldX + asrs r2, r2, #0x10 + mov sb, r2 + subs r0, r2, r0 + strh r0, [r7, #0x16] + ldrh r2, [r3, #2] + lsrs r3, r1, #0x10 + str r3, [sp, #0xc] @ sp0C = worldY + asrs r1, r1, #0x10 + mov r8, r1 + subs r2, r1, r2 + strh r2, [r7, #0x18] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0807EC58 + movs r6, #0x18 + ldrsh r0, [r7, r6] + adds r0, #0x80 + cmp r0, #0 + blt _0807EC58 + lsls r1, r2, #0x10 + movs r0, #0x90 + lsls r0, r0, #0x11 + cmp r1, r0 + ble _0807EC74 +_0807EC58: + ldrb r0, [r5, #8] + mov r1, sl + strb r0, [r1] + ldr r0, _0807EC6C @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0807EE02 + .align 2, 0 +_0807EC68: .4byte gUnknown_086CED90 +_0807EC6C: .4byte gCurTask +_0807EC70: .4byte gCamera +_0807EC74: + movs r2, #0 + mov sl, r2 @ sl = r2 = 0 + ldr r2, _0807ECC0 @ =gStageTime + ldr r3, _0807ECC4 @ =0x03000040 + adds r0, r4, r3 + ldrb r1, [r0] + ldr r0, [r2] + subs r0, r0, r1 @ gStageTime - letter->unk40 + ldr r6, _0807ECC8 @ =0x0300003E + adds r5, r4, r6 + ldrb r1, [r5] + lsls r1, r1, #1 + add r1, sp + ldrh r1, [r1] + bl Mod + adds r1, r0, #0 + cmp r1, #0x39 + bhi _0807ECD4 + movs r0, #1 + mov sl, r0 @ sl = 1 + cmp r1, #0 + beq _0807ECA4 + b _0807EDC6_post_elif +_0807ECA4: + movs r1, #0 + mov sl, r1 + ldr r2, _0807ECCC @ =0x0300002D + adds r1, r4, r2 + movs r0, #0xff + strb r0, [r1] + ldr r3, _0807ECD0 @ =0x0300003C + adds r0, r4, r3 + ldrb r0, [r0] + lsls r0, r0, #2 + adds r0, #1 + subs r6, #0x12 + b _0807ED40_set_variant + .align 2, 0 +_0807ECC0: .4byte gStageTime +_0807ECC4: .4byte 0x03000040 +_0807ECC8: .4byte 0x0300003E +_0807ECCC: .4byte 0x0300002D +_0807ECD0: .4byte 0x0300003C +_0807ECD4: + ldr r2, _0807ED04 @ =0x0300003F + adds r0, r4, r2 + ldrb r2, [r0] + adds r3, r2, #0 + adds r3, #0x3a + cmp r1, r3 + bhs _0807ED14 + movs r3, #1 + mov sl, r3 + cmp r1, #0x3a + bne _0807EDC6_post_elif + ldr r6, _0807ED08 @ =0x0300002D + adds r1, r4, r6 + movs r0, #0xff + strb r0, [r1] + ldr r1, _0807ED0C @ =0x0300003C + adds r0, r4, r1 + ldrb r0, [r0] + lsls r0, r0, #2 + adds r0, #3 + ldr r2, _0807ED10 @ =0x0300002C + adds r1, r4, r2 + strb r0, [r1] + b _0807EDC6_post_elif + .align 2, 0 +_0807ED04: .4byte 0x0300003F +_0807ED08: .4byte 0x0300002D +_0807ED0C: .4byte 0x0300003C +_0807ED10: .4byte 0x0300002C +_0807ED14: + ldrb r0, [r5] + lsls r0, r0, #1 + add r0, sp + ldrh r0, [r0] + subs r0, r0, r2 + cmp r1, r0 + bhs _0807ED54 + movs r6, #1 + mov sl, r6 + cmp r1, r3 + bne _0807EDC6_post_elif + movs r0, #0 + mov sl, r0 + ldr r2, _0807ED48 @ =0x0300002D + adds r1, r4, r2 + movs r0, #0xff + strb r0, [r1] + ldr r3, _0807ED4C @ =0x0300003C + adds r0, r4, r3 + ldrb r0, [r0] + lsls r0, r0, #2 + ldr r6, _0807ED50 @ =0x0300002C +_0807ED40_set_variant: + adds r1, r4, r6 + strb r0, [r1] + b _0807EDC6_post_elif + .align 2, 0 +_0807ED48: .4byte 0x0300002D +_0807ED4C: .4byte 0x0300003C +_0807ED50: .4byte 0x0300002C +_0807ED54: + cmp r1, r0 + bne _0807ED70 + ldr r0, _0807ED9C @ =0x0300002D + adds r1, r4, r0 + movs r0, #0xff + strb r0, [r1] + ldr r1, _0807EDA0 @ =0x0300003C + adds r0, r4, r1 + ldrb r0, [r0] + lsls r0, r0, #2 + adds r0, #2 + ldr r2, _0807EDA4 @ =0x0300002C + adds r1, r4, r2 + strb r0, [r1] +_0807ED70: + movs r4, #0 + ldr r6, _0807EDA8 @ =gPartner + movs r5, #9 + rsbs r5, r5, #0 +_0807ED78: + ldr r3, _0807EDAC @ =gPlayer + cmp r4, #0 + beq _0807ED80 + ldr r3, _0807EDA8 @ =gPartner +_0807ED80: + adds r0, r7, #0 + mov r1, sb + mov r2, r8 + bl Coll_Player_Entity_Intersection + cmp r0, #0 + beq _0807EDB8 + cmp r4, #0 + beq _0807EDB0 + ldr r0, [r6, #0x10] + ands r0, r5 + str r0, [r6, #0x10] + b _0807EDB8 + .align 2, 0 +_0807ED9C: .4byte 0x0300002D +_0807EDA0: .4byte 0x0300003C +_0807EDA4: .4byte 0x0300002C +_0807EDA8: .4byte gPartner +_0807EDAC: .4byte gPlayer +_0807EDB0: + ldr r1, _0807EE14 @ =gPlayer + ldr r0, [r1, #0x10] + ands r0, r5 + str r0, [r1, #0x10] +_0807EDB8: + adds r4, #1 + ldr r0, _0807EE18 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + blt _0807ED78 +_0807EDC6_post_elif: + movs r4, #0 +_0807EDC8: + mov r3, sl + cmp r3, #1 + bne _0807EDE8 + ldr r6, [sp, #8] + lsls r0, r6, #0x10 + asrs r1, r0, #0x10 + ldr r2, [sp, #0xc] + lsls r0, r2, #0x10 + asrs r2, r0, #0x10 + ldr r3, _0807EE14 @ =gPlayer + cmp r4, #0 + beq _0807EDE2 + ldr r3, _0807EE1C @ =gPartner +_0807EDE2: + adds r0, r7, #0 + bl sub_80096B0 +_0807EDE8: + adds r4, #1 + ldr r0, _0807EE18 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + blt _0807EDC8 + adds r0, r7, #0 + bl UpdateSpriteAnimation + adds r0, r7, #0 + bl DisplaySprite +_0807EE02: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0807EE14: .4byte gPlayer +_0807EE18: .4byte gNumSingleplayerCharacters +_0807EE1C: .4byte gPartner + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/TeleportOrb__Task_TeleportOrb.inc b/sa1/asm/non_matching/game/interactables/TeleportOrb__Task_TeleportOrb.inc new file mode 100644 index 0000000000..3ceac59f60 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/TeleportOrb__Task_TeleportOrb.inc @@ -0,0 +1,729 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _08084A78 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 @ r7 = orb + ldr r0, [r7] + str r0, [sp, #0x10] @ sp10 = me + ldrb r1, [r7, #8] + lsls r1, r1, #3 + ldrh r0, [r7, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 @ r1 = worldX << 16 + ldr r5, [sp, #0x10] @ r5 = sp10 = me + ldrb r2, [r5, #1] + lsls r2, r2, #3 + ldrh r0, [r7, #6] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldr r3, _08084A7C @ =gCamera + ldrh r0, [r3] + lsrs r5, r1, #0x10 + str r5, [sp] @ sp00 = worldX + asrs r1, r1, #0x10 + subs r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #8] @ sp08 = screenX + ldrh r0, [r3, #2] + lsrs r1, r2, #0x10 + str r1, [sp, #4] @ sp04 = worldY + asrs r2, r2, #0x10 + subs r2, r2, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #0xc] @ sp0C = screenY + movs r5, #0 + mov ip, r3 @ ip = r3 = gCamera + ldr r2, _08084A80 @ =0x03000044 + adds r2, r2, r4 + mov r8, r2 @ r8 = &orb->unk44 + ldr r4, _08084A84 @ =gPartner + ldr r6, _08084A88 @ =gPlayer + movs r0, #0x26 + adds r0, r0, r4 + mov sl, r0 + movs r1, #0x26 + adds r1, r1, r6 + mov sb, r1 @ sb = &gPlayer.itemEffect + movs r3, #0 +_08084A44_loop: + adds r0, r7, #0 + adds r0, #0x44 + movs r2, #0 + ldrsh r0, [r0, r2] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08084A58 + b _08084CCC +_08084A58: + mov r0, ip @ r0 = ip = gCamera + ldr r1, [r0] + ldr r0, [r7, #0x40] + cmp r1, r0 + beq _08084A64 + b _08084B72 +_08084A64: + mov r2, ip @ r2 = ip = gCamera + movs r0, #0 + ldrsh r1, [r2, r0] + cmp r5, #0 + beq _08084A8C + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + ble _08084A94 + b _08084B72 + .align 2, 0 +_08084A78: .4byte gCurTask +_08084A7C: .4byte gCamera +_08084A80: .4byte 0x03000044 +_08084A84: .4byte gPartner +_08084A88: .4byte gPlayer +_08084A8C: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + bgt _08084B72 +_08084A94: + mov r1, ip @ r1 = ip = gCamera + movs r2, #0 + ldrsh r0, [r1, r2] + adds r1, r0, #0 + adds r1, #0xf0 + cmp r5, #0 + beq _08084AAC + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08084AB4 + b _08084B72 +_08084AAC: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + blt _08084B72 +_08084AB4: + mov r0, ip + movs r2, #2 + ldrsh r1, [r0, r2] + cmp r5, #0 + beq _08084AC8 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r1, r0 + ble _08084AD0 + b _08084B72 +_08084AC8: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + bgt _08084B72 +_08084AD0: + mov r1, ip + movs r2, #2 + ldrsh r0, [r1, r2] + adds r1, r0, #0 + adds r1, #0xa0 + cmp r5, #0 + beq _08084AE8 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08084AF0 + b _08084B72 +_08084AE8: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + blt _08084B72 +_08084AF0: + cmp r5, #0 + beq _08084B04 + ldr r0, [r4, #0x10] + ldr r1, _08084B00 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08084B0C + .align 2, 0 +_08084B00: .4byte 0xFFBFFFFF +_08084B04: + ldr r0, [r6, #0x10] + ldr r1, _08084B1C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08084B0C: + cmp r5, #0 + beq _08084B20 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _08084B28 + .align 2, 0 +_08084B1C: .4byte 0xFFBFFFFF +_08084B20: + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] +_08084B28: + movs r0, #1 + lsls r0, r5 + mov r2, r8 @ r2 = r8 = &orb->unk44 + ldrh r1, [r2] + bics r1, r0 + movs r0, #0 + strh r1, [r2] + cmp r5, #0 + beq _08084B3E + strh r0, [r4, #0xa] + b _08084B40 +_08084B3E: + strh r5, [r6, #0xa] +_08084B40: + cmp r5, #0 + beq _08084B48 + strh r3, [r4, #8] + b _08084B4A +_08084B48: + strh r5, [r6, #8] +_08084B4A: + cmp r5, #0 + beq _08084B52 + strh r3, [r4, #0xc] + b _08084B54 +_08084B52: + strh r5, [r6, #0xc] +_08084B54: + cmp r5, #0 + beq _08084B66 + mov r0, sl @ r0 = sl = + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + mov r1, sl + strb r0, [r1] + b _08084C1A +_08084B66: + mov r2, sb + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + b _08084C1A +_08084B72: + ldr r0, _08084B94 @ =gPlayer + cmp r5, #0 + beq _08084B7A + ldr r0, _08084B98 @ =gPartner +_08084B7A: + str r3, [sp, #0x14] + bl Player_TransitionCancelFlyingAndBoost + ldr r3, [sp, #0x14] + cmp r5, #0 + beq _08084B9C + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + b _08084BA6 + .align 2, 0 +_08084B94: .4byte gPlayer +_08084B98: .4byte gPartner +_08084B9C: + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r6, #0x10] +_08084BA6: + ldr r2, _08084BB0 @ =gPlayer + cmp r5, #0 + beq _08084BB4 + strh r3, [r4, #0xa] + b _08084BB6 + .align 2, 0 +_08084BB0: .4byte gPlayer +_08084BB4: + strh r5, [r2, #0xa] +_08084BB6: + cmp r5, #0 + beq _08084BBE + strh r3, [r4, #8] + b _08084BC0 +_08084BBE: + strh r5, [r2, #8] +_08084BC0: + cmp r5, #0 + beq _08084BC8 + strh r3, [r4, #0xc] + b _08084BCA +_08084BC8: + strh r5, [r2, #0xc] +_08084BCA: + cmp r5, #0 + beq _08084BD8 + movs r0, #5 + ldr r1, _08084BD4 @ =gPartner + 0x40 + b _08084BDE + .align 2, 0 +_08084BD4: .4byte gPartner + 0x40 +_08084BD8: + adds r1, r2, #0 + adds r1, #0x40 + movs r0, #5 +_08084BDE: + strb r0, [r1] + ldr r0, _08084C2C @ =gPlayer + cmp r5, #0 + beq _08084BE8 + ldr r0, _08084C30 @ =gPartner +_08084BE8: + movs r1, #0xe + str r3, [sp, #0x14] + bl Player_HandleSpriteYOffsetChange + ldr r1, _08084C2C @ =gPlayer + ldr r3, [sp, #0x14] + cmp r5, #0 + beq _08084BFA + ldr r1, _08084C30 @ =gPartner +_08084BFA: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08084C2C @ =gPlayer + cmp r5, #0 + beq _08084C06 + ldr r1, _08084C30 @ =gPartner +_08084C06: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #1 + lsls r0, r5 + mov r2, r8 @ r2 = r8 = &orb->unk44 + ldrh r1, [r2] + orrs r0, r1 + strh r0, [r2] + ldr r0, _08084C34 @ =gCamera + mov ip, r0 +_08084C1A: @@@@@@@@@@@@@@ + cmp r5, #0 + beq _08084C38 + ldr r0, [r4, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08084C42 + b _08084CB8 + .align 2, 0 +_08084C2C: .4byte gPlayer +_08084C30: .4byte gPartner +_08084C34: .4byte gCamera +_08084C38: + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08084CB8 +_08084C42: + movs r1, #1 + lsls r1, r5 + mov r2, r8 @ r2 = s8 = &orb->unk44 + ldrh r0, [r2] + bics r0, r1 + strh r0, [r2] + cmp r5, #0 + beq _08084C60 + ldr r0, [r4, #0x10] + ldr r1, _08084C5C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08084C68 + .align 2, 0 +_08084C5C: .4byte 0xFFBFFFFF +_08084C60: + ldr r0, [r6, #0x10] + ldr r1, _08084C74 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08084C68: + cmp r5, #0 + beq _08084C7C + ldr r1, _08084C78 @ =gPartner + 0x3C + movs r0, #0 + ldrsb r0, [r1, r0] + b _08084C82 + .align 2, 0 +_08084C74: .4byte 0xFFBFFFFF +_08084C78: .4byte gPartner + 0x3C +_08084C7C: + ldr r2, _08084C98 @ =gPlayer + 0x3C + movs r0, #0 + ldrsb r0, [r2, r0] +_08084C82: + cmp r0, #0 + bne _08084CB8 + mov r1, ip + movs r2, #2 + ldrsh r0, [r1, r2] + adds r0, #0x50 + lsls r0, r0, #8 + cmp r5, #0 + beq _08084C9C + str r0, [r4, #4] + b _08084C9E + .align 2, 0 +_08084C98: .4byte gPlayer + 0x3C +_08084C9C: + str r0, [r6, #4] +_08084C9E: + mov r1, ip + movs r2, #0 + ldrsh r0, [r1, r2] + adds r0, #0x78 + lsls r0, r0, #8 + cmp r5, #0 + beq _08084CB0 + str r0, [r4] + b _08084CB2 +_08084CB0: + str r0, [r6] +_08084CB2: + mov r0, ip + strh r3, [r0, #6] + strh r3, [r0, #4] +_08084CB8: + mov r1, ip + ldrh r0, [r1] + adds r1, r7, #0 + adds r1, #0x40 + strh r0, [r1] + mov r2, ip + ldrh r0, [r2, #2] + adds r1, #2 + strh r0, [r1] + b _08084E8C_continue +_08084CCC: + cmp r5, #0 + beq _08084CD4 + ldr r0, [r4, #0x10] + b _08084CD6 +_08084CD4: + ldr r0, [r6, #0x10] +_08084CD6: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08084CE0 + b _08084E8C_continue +_08084CE0: + ldr r0, [sp] @ r0 = sp00 = worldX + lsls r1, r0, #0x10 + asrs r0, r1, #0x10 + adds r2, r0, #0 + subs r2, #0xc + cmp r5, #0 + beq _08084CF8 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08084D02 + b _08084E8C_continue +_08084CF8: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r2, r0 + ble _08084D02 + b _08084E8C_continue +_08084D02: + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #0xc + cmp r5, #0 + beq _08084D16 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08084D20 + b _08084E8C_continue +_08084D16: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + bge _08084D20 + b _08084E8C_continue +_08084D20: + ldr r2, [sp, #4] + lsls r1, r2, #0x10 + asrs r0, r1, #0x10 + adds r2, r0, #0 + subs r2, #0xc + cmp r5, #0 + beq _08084D38 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08084D42 + b _08084E8C_continue +_08084D38: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08084D42 + b _08084E8C_continue +_08084D42: + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #0xc + cmp r5, #0 + beq _08084D56 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08084D60 + b _08084E8C_continue +_08084D56: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08084D60 + b _08084E8C_continue +_08084D60: + ldr r0, _08084D80 @ =gPlayer + cmp r5, #0 + beq _08084D68 + ldr r0, _08084D84 @ =gPartner +_08084D68: + str r3, [sp, #0x14] + bl Player_TransitionCancelFlyingAndBoost + ldr r3, [sp, #0x14] + cmp r5, #0 + beq _08084D88 + ldr r0, [r4, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r4, #0x10] + b _08084D90 + .align 2, 0 +_08084D80: .4byte gPlayer +_08084D84: .4byte gPartner +_08084D88: + ldr r0, [r6, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r6, #0x10] +_08084D90: + ldr r2, _08084DA4 @ =gPlayer + cmp r5, #0 + beq _08084DA8 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + b _08084DB2 + .align 2, 0 +_08084DA4: .4byte gPlayer +_08084DA8: + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r6, #0x10] +_08084DB2: + ldrh r0, [r7, #0x3c] + adds r1, r7, #0 + adds r1, #0x46 + lsls r0, r0, #8 + ldrh r1, [r1] + adds r0, r0, r1 + cmp r5, #0 + beq _08084DC6 + str r0, [r4] + b _08084DC8 +_08084DC6: + str r0, [r2] +_08084DC8: + ldrh r0, [r7, #0x3e] + adds r1, r7, #0 + adds r1, #0x48 + lsls r0, r0, #8 + ldrh r1, [r1] + adds r0, r0, r1 + cmp r5, #0 + beq _08084DDC + str r0, [r4, #4] + b _08084DDE +_08084DDC: + str r0, [r2, #4] +_08084DDE: + cmp r5, #0 + beq _08084DE6 + strh r3, [r4, #0xa] + b _08084DE8 +_08084DE6: + strh r5, [r2, #0xa] +_08084DE8: + cmp r5, #0 + beq _08084DF0 + strh r3, [r4, #8] + b _08084DF2 +_08084DF0: + strh r5, [r2, #8] +_08084DF2: + cmp r5, #0 + beq _08084DFA + strh r3, [r4, #0xc] + b _08084DFC +_08084DFA: + strh r5, [r2, #0xc] +_08084DFC: + cmp r5, #0 + beq _08084E0C + movs r0, #5 + ldr r1, _08084E08 @ =gPartner + 0x40 + b _08084E12 + .align 2, 0 +_08084E08: .4byte gPartner + 0x40 +_08084E0C: + adds r1, r2, #0 + adds r1, #0x40 + movs r0, #5 +_08084E12: + strb r0, [r1] + ldr r0, _08084E64 @ =gPlayer + cmp r5, #0 + beq _08084E1C + ldr r0, _08084E68 @ =gPartner +_08084E1C: + movs r1, #0xe + str r3, [sp, #0x14] + bl Player_HandleSpriteYOffsetChange + ldr r1, _08084E64 @ =gPlayer + ldr r3, [sp, #0x14] + cmp r5, #0 + beq _08084E2E + ldr r1, _08084E68 @ =gPartner +_08084E2E: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08084E64 @ =gPlayer + cmp r5, #0 + beq _08084E3A + ldr r1, _08084E68 @ =gPartner +_08084E3A: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #0xaa + str r3, [sp, #0x14] + bl m4aSongNumStart + movs r0, #1 + lsls r0, r5 + mov r2, r8 @ r2 = r8 = &orb->unk44 + ldrh r1, [r2] + orrs r0, r1 + strh r0, [r2] + ldr r3, [sp, #0x14] @ r3 = sp14 = + cmp r5, #0 + beq _08084E6C + mov r1, sl + ldrb r0, [r1] + movs r1, #0x80 + orrs r0, r1 + mov r2, sl + b _08084E76 + .align 2, 0 +_08084E64: .4byte gPlayer +_08084E68: .4byte gPartner +_08084E6C: + mov r1, sb + ldrb r0, [r1] + movs r1, #0x80 + orrs r0, r1 + mov r2, sb +_08084E76: + strb r0, [r2] + ldr r2, _08084EF0 @ =gCamera + ldrh r1, [r2] + adds r0, r7, #0 + adds r0, #0x40 + strh r1, [r0] + ldrh r0, [r2, #2] + adds r1, r7, #0 + adds r1, #0x42 + strh r0, [r1] + mov ip, r2 +_08084E8C_continue: + adds r5, #1 + ldr r0, _08084EF4 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r5, r0 + bge _08084E9C + b _08084A44_loop +_08084E9C: + mov r5, r8 @ r5 = r8 = &orb->unk44 + ldrh r1, [r5] + movs r0, #3 + ands r0, r1 + cmp r0, #0 + bne _08084EDE + ldr r1, [sp, #8] + lsls r0, r1, #0x10 + movs r2, #0x80 + lsls r2, r2, #0x10 + adds r0, r0, r2 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08084ED0 + ldr r5, [sp, #0xc] + lsls r0, r5, #0x10 + asrs r2, r0, #0x10 + adds r0, r2, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08084ED0 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r2, r0 + ble _08084EDE +_08084ED0: + ldrb r0, [r7, #8] + ldr r1, [sp, #0x10] @ r1 = sp10 = me + strb r0, [r1] + ldr r0, _08084EF8 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy +_08084EDE: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08084EF0: .4byte gCamera +_08084EF4: .4byte gNumSingleplayerCharacters +_08084EF8: .4byte gCurTask + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/air_bubbles__Task_BubbleContainingAir.inc b/sa1/asm/non_matching/game/interactables/air_bubbles__Task_BubbleContainingAir.inc new file mode 100644 index 0000000000..a3e7c9609e --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/air_bubbles__Task_BubbleContainingAir.inc @@ -0,0 +1,408 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r5, _080911B8 @ =gCurTask + ldr r0, [r5] + ldrh r6, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r6 + mov r8, r0 @ r8 = bubbles + ldr r0, _080911BC @ =0x0300000C + adds r7, r6, r0 @ r7 = s + ldr r1, _080911C0 @ =0x03000040 + adds r0, r6, r1 @ r0 = unk40 + ldr r4, _080911C4 @ =gCamera + ldrh r2, [r0] + ldrh r0, [r4] + subs r2, r2, r0 + ldr r3, _080911C8 @ =gSineTable + mov r0, r8 + ldrh r1, [r0, #0x3e] + lsls r0, r1, #1 + adds r0, r0, r1 + ldr r1, _080911CC @ =0x000003FF + ands r0, r1 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x1b + adds r2, r2, r0 + strh r2, [r7, #0x16] + ldr r1, _080911D0 @ =0x03000042 + adds r3, r6, r1 + ldrh r1, [r3] + ldrh r0, [r4, #2] + subs r1, r1, r0 + mov r4, r8 + ldrh r0, [r4, #0x3e] + lsrs r0, r0, #1 + subs r1, r1, r0 + strh r1, [r7, #0x18] + adds r2, #0x80 + lsls r2, r2, #0x10 + movs r0, #0xf8 + lsls r0, r0, #0x11 + cmp r2, r0 + bhi _080911AE + movs r2, #0x18 + ldrsh r0, [r7, r2] + adds r0, #0x80 + cmp r0, #0 + blt _080911AE + lsls r1, r1, #0x10 + movs r0, #0x90 + lsls r0, r0, #0x11 + cmp r1, r0 + bgt _080911AE + ldr r2, _080911D4 @ =gWater + movs r4, #2 + ldrsh r0, [r2, r4] + cmp r0, #0 + blt _080911AE + movs r1, #0 + ldrsh r0, [r3, r1] + mov r4, r8 + ldrh r3, [r4, #0x3e] + lsrs r1, r3, #1 + subs r0, r0, r1 + movs r4, #2 + ldrsh r1, [r2, r4] + cmp r0, r1 + bge _080911D8 +_080911AE: + ldr r0, [r5] + bl TaskDestroy + b _08091400 + .align 2, 0 +_080911B8: .4byte gCurTask +_080911BC: .4byte 0x0300000C +_080911C0: .4byte 0x03000040 +_080911C4: .4byte gCamera +_080911C8: .4byte gSineTable +_080911CC: .4byte 0x000003FF +_080911D0: .4byte 0x03000042 +_080911D4: .4byte gWater +_080911D8: + ldr r0, _080911F8 @ =0x0300003C + adds r2, r6, r0 + ldrb r1, [r2] + lsls r1, r1, #3 + adds r0, r3, #1 + mov r3, r8 + strh r0, [r3, #0x3e] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r1, r0 + ble _080911FC + adds r0, r7, #0 + bl UpdateSpriteAnimation + b _0809120A + .align 2, 0 +_080911F8: .4byte 0x0300003C +_080911FC: + ldrb r0, [r2] + cmp r0, #4 + beq _08091204 + b _080913FA_DisplaySprite_ret +_08091204: + adds r0, r7, #0 + bl UpdateSpriteAnimation +_0809120A: + mov r0, r8 + adds r0, #0x3c + ldrb r0, [r0] + cmp r0, #4 + beq _08091216 + b _080913FA_DisplaySprite_ret +_08091216: + mov r4, r8 @ r4 = r8 = bubbles + ldrh r0, [r4, #0x3e] + cmp r0, #0x4f + bhi _08091220 + b _080913FA_DisplaySprite_ret +_08091220: + movs r4, #0 + ldr r5, _08091274 @ r5 = gPartner + ldr r6, _08091278 @ r6 = gPlayer + movs r0, #0x5a + adds r0, r0, r6 + mov sl, r0 + movs r1, #0x3c + adds r1, r1, r6 + mov sb, r1 +_08091232_loop: + ldr r0, _0809127C @ =gCamera + ldrh r1, [r0] + ldrh r2, [r7, #0x16] + adds r1, r1, r2 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r0, [r0, #2] + ldrh r3, [r7, #0x18] + adds r0, r0, r3 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + ldr r3, _08091278 @ =gPlayer + cmp r4, #0 + beq _08091250 + ldr r3, _08091274 @ =gPartner +_08091250: + adds r0, r7, #0 + bl Coll_Player_Entity_Intersection + cmp r0, #0 + bne _0809125C + b _080913EA_continue +_0809125C: + ldr r0, _08091278 @ =gPlayer + cmp r4, #0 + beq _08091264 + ldr r0, _08091274 @ =gPartner +_08091264: + bl Player_TransitionCancelFlyingAndBoost + cmp r4, #0 + beq _08091284 + movs r0, #0x1b + ldr r1, _08091280 @ =gPartner + 0x40 + strb r0, [r1] + b _0809128A + .align 2, 0 +_08091274: .4byte gPartner +_08091278: .4byte gPlayer +_0809127C: .4byte gCamera +_08091280: .4byte gPartner + 0x40 +_08091284: + movs r0, #0x1b + ldr r2, _0809129C @ =gPlayer + 0x40 + strb r0, [r2] +_0809128A: + cmp r4, #0 + beq _080912A0 + ldr r0, [r5, #0x10] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + bne _080912AA + b _0809133A + .align 2, 0 +_0809129C: .4byte gPlayer + 0x40 +_080912A0: + ldr r0, [r6, #0x10] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + beq _0809133A +_080912AA: + cmp r4, #0 + beq _080912BA + ldr r0, [r5, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _080912C4 +_080912BA: + ldr r0, [r6, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_080912C4: + ldr r2, _080912D8 @ =gPlayer + cmp r4, #0 + beq _080912DC + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _080912E6 + .align 2, 0 +_080912D8: .4byte gPlayer +_080912DC: + ldr r0, [r6, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_080912E6: + cmp r4, #0 + beq _080912F6 + ldr r0, [r5, #0x10] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _08091300 + b _08091314 +_080912F6: + ldr r0, [r2, #0x10] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + beq _08091314 +_08091300: + adds r1, r2, #0 + cmp r4, #0 + beq _08091308 + ldr r1, _08091310 @ =gPartner +_08091308: + movs r0, #6 + strb r0, [r1, #0xe] + adds r1, r2, #0 + b _08091330 + .align 2, 0 +_08091310: .4byte gPartner +_08091314: + ldr r0, _08091344 @ =gPlayer + cmp r4, #0 + beq _0809131C + ldr r0, _08091348 @ =gPartner +_0809131C: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _08091344 @ =gPlayer + cmp r4, #0 + beq _0809132A + ldr r1, _08091348 @ =gPartner +_0809132A: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08091344 @ =gPlayer +_08091330: + cmp r4, #0 + beq _08091336 + ldr r1, _08091348 @ =gPartner +_08091336: + movs r0, #0xe + strb r0, [r1, #0xf] +_0809133A: + cmp r4, #0 + beq _0809134C + movs r0, #0 + strh r0, [r5, #8] + b _0809134E + .align 2, 0 +_08091344: .4byte gPlayer +_08091348: .4byte gPartner +_0809134C: + strh r4, [r6, #8] +_0809134E: + cmp r4, #0 + beq _08091358 + movs r0, #0 + strh r0, [r5, #0xa] + b _0809135A +_08091358: + strh r4, [r6, #0xa] +_0809135A: + cmp r4, #0 + beq _08091364 + movs r0, #0 + strh r0, [r5, #0xc] + b _08091366 +_08091364: + strh r4, [r6, #0xc] +_08091366: + cmp r4, #0 + beq _08091376 + ldr r0, [r5, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _08091380 +_08091376: + ldr r0, [r6, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08091380: + cmp r4, #0 + beq _08091390 + movs r0, #0x3c + ldr r3, _0809138C @ =gPartner + 0x5B + strb r0, [r3] + b _08091396 + .align 2, 0 +_0809138C: .4byte gPartner + 0x5B +_08091390: + movs r0, #0x3c + ldr r1, _080913A4 @ =gPlayer + 0x5B + strb r0, [r1] +_08091396: + cmp r4, #0 + beq _080913AC + movs r0, #0x1e + ldr r2, _080913A8 @ =gPartner + 0x5A + strb r0, [r2] + b _080913B2 + .align 2, 0 +_080913A4: .4byte gPlayer + 0x5B +_080913A8: .4byte gPartner + 0x5A +_080913AC: + movs r0, #0x1e + mov r3, sl + strb r0, [r3] +_080913B2: + cmp r4, #0 + beq _080913C4 + ldr r1, _080913C0 @ =gPartner + 0x3C + movs r0, #0 + ldrsb r0, [r1, r0] + b _080913CA + .align 2, 0 +_080913C0: .4byte gPartner + 0x3C +_080913C4: + mov r2, sb + movs r0, #0 + ldrsb r0, [r2, r0] +_080913CA: + cmp r0, #0 + bne _080913D4 + movs r0, #0x1b + bl m4aSongNumStop +_080913D4: + movs r0, #0xbf + bl m4aSongNumStart + ldr r0, _08091410 @ =gCurTask + ldr r1, [r0] + ldr r0, _08091414 @ =Task_809141C + str r0, [r1, #8] + mov r1, r8 + adds r1, #0x3d + movs r0, #0x10 + strb r0, [r1] +_080913EA_continue: + adds r4, #1 + ldr r0, _08091418 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + bge _080913FA_DisplaySprite_ret + b _08091232_loop +_080913FA_DisplaySprite_ret: + adds r0, r7, #0 + bl DisplaySprite +_08091400: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08091410: .4byte gCurTask +_08091414: .4byte Task_809141C +_08091418: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/bowl__Task_BowlRotating.inc b/sa1/asm/non_matching/game/interactables/bowl__Task_BowlRotating.inc new file mode 100644 index 0000000000..7b2efbf785 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/bowl__Task_BowlRotating.inc @@ -0,0 +1,961 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + ldr r0, _08080BE4 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + adds r0, #0xc + adds r0, r1, r0 + str r0, [sp] + ldr r1, [r7] + str r1, [sp, #0xc] + ldrb r2, [r7, #8] + lsls r2, r2, #3 + ldrh r0, [r7, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldrb r0, [r1, #1] + lsls r0, r0, #3 + ldrh r1, [r7, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #4] + ldr r1, _08080BE8 @ =gCamera + ldrh r0, [r1] + lsrs r6, r2, #0x10 + asrs r2, r2, #0x10 + subs r2, r2, r0 + ldr r4, [sp] + strh r2, [r4, #0x16] + ldr r4, [r7, #0x48] + ldr r3, [r7, #0x4c] + cmp r4, r3 + bls _08080BEC + ldrh r1, [r1, #2] + ldr r0, [sp, #4] + lsls r2, r0, #0x10 + asrs r0, r2, #0x10 + subs r0, r0, r1 + lsrs r1, r4, #0xd + adds r0, r0, r1 + ldr r1, [sp] + strh r0, [r1, #0x18] + ldr r0, [r7, #0x48] + b _08080C00 + .align 2, 0 +_08080BE4: .4byte gCurTask +_08080BE8: .4byte gCamera +_08080BEC: + ldrh r1, [r1, #2] + ldr r4, [sp, #4] + lsls r2, r4, #0x10 + asrs r0, r2, #0x10 + subs r0, r0, r1 + lsrs r1, r3, #0xd + adds r0, r0, r1 + ldr r1, [sp] + strh r0, [r1, #0x18] + ldr r0, [r7, #0x4c] +_08080C00: + lsrs r0, r0, #0xd + str r0, [sp, #8] + str r2, [sp, #0x10] + movs r5, #0 + lsls r6, r6, #0x10 + mov sl, r6 + adds r2, r7, #0 + adds r2, #0x51 + str r2, [sp, #0x18] + ldr r6, _08080C20 @ =gPartner + ldr r4, _08080C24 @ =gPlayer + mov r8, r4 +_08080C18_loop: + cmp r5, #0 + beq _08080C28 + ldr r0, [r6, #0x10] + b _08080C2C + .align 2, 0 +_08080C20: .4byte gPartner +_08080C24: .4byte gPlayer +_08080C28: + mov r1, r8 + ldr r0, [r1, #0x10] +_08080C2C: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08080C36 + b _08080DF2 +_08080C36: + ldr r2, [sp, #0x18] + ldrb r0, [r2] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08080C46 + b _08080DF2 +_08080C46: + mov r4, sl + asrs r1, r4, #0x10 + cmp r5, #0 + beq _08080C60 + ldr r0, [r6] + asrs r0, r0, #8 + ldr r3, _08080C5C @ =gPlayer + cmp r0, r1 + bgt _08080C6C + b _08080C74 + .align 2, 0 +_08080C5C: .4byte gPlayer +_08080C60: + mov r2, r8 + ldr r0, [r2] + asrs r0, r0, #8 + ldr r3, _08080C70 @ =gPlayer + cmp r0, r1 + ble _08080C74 +_08080C6C: + movs r1, #0xa + b _08080C76 + .align 2, 0 +_08080C70: .4byte gPlayer +_08080C74: + ldr r1, _08080CBC @ =0x0000FFF6 +_08080C76: + mov r4, sl + asrs r0, r4, #0x10 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r0, r0, r1 + lsls r0, r0, #0x10 + asrs r1, r0, #0x10 + ldr r0, [sp, #4] + adds r0, #0xd + ldr r2, [sp, #8] + adds r0, r0, r2 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + cmp r5, #0 + beq _08080C96 + ldr r3, _08080CC0 @ =gPartner +_08080C96: + ldr r0, [sp] + bl Coll_Player_Entity_Intersection + cmp r0, #0 + bne _08080CA2 + b _08080DF2 +_08080CA2: + adds r0, r7, #0 + adds r0, #0x40 + adds r4, r7, #0 + adds r4, #0x42 + ldrh r3, [r0] + ldrh r1, [r4] + adds r2, r0, #0 + cmp r3, r1 + bls _08080CC4 + strh r3, [r4] + ldr r0, [r7, #0x48] + str r0, [r7, #0x4c] + b _08080CCA + .align 2, 0 +_08080CBC: .4byte 0x0000FFF6 +_08080CC0: .4byte gPartner +_08080CC4: + strh r1, [r2] + ldr r0, [r7, #0x4c] + str r0, [r7, #0x48] +_08080CCA: + movs r0, #1 + lsls r0, r5 + ldr r4, [sp, #0x18] + ldrb r1, [r4] + orrs r0, r1 + strb r0, [r4] + lsls r1, r5, #1 + adds r0, r7, #0 + adds r0, #0x3c + adds r0, r0, r1 + mov sb, r0 + ldr r0, [r7, #0x48] + lsrs r4, r0, #8 + mov r0, sl + asrs r1, r0, #0x10 + cmp r5, #0 + beq _08080CF0 + ldr r0, [r6] + b _08080CF4 +_08080CF0: + mov r2, r8 + ldr r0, [r2] +_08080CF4: + asrs r0, r0, #8 + subs r0, r0, r1 + adds r0, #0x30 + lsls r0, r0, #9 + movs r1, #0x60 + bl Div + cmp r0, #0 + bge _08080D34 + mov r0, sl + asrs r1, r0, #0x10 + cmp r5, #0 + beq _08080D12 + ldr r0, [r6] + b _08080D16 +_08080D12: + mov r2, r8 + ldr r0, [r2] +_08080D16: + asrs r0, r0, #8 + subs r0, r0, r1 + adds r0, #0x30 + lsls r0, r0, #9 + movs r1, #0x60 + bl Div + movs r2, #0xc0 + lsls r2, r2, #2 + adds r1, r4, r2 + subs r1, r1, r0 + ldr r0, _08080D30 @ =0x000003FF + b _08080D5C + .align 2, 0 +_08080D30: .4byte 0x000003FF +_08080D34: + mov r0, sl + asrs r1, r0, #0x10 + cmp r5, #0 + beq _08080D40 + ldr r0, [r6] + b _08080D44 +_08080D40: + mov r2, r8 + ldr r0, [r2] +_08080D44: + asrs r0, r0, #8 + subs r0, r0, r1 + adds r0, #0x30 + lsls r0, r0, #9 + movs r1, #0x60 + bl Div + movs r2, #0xc0 + lsls r2, r2, #2 + adds r1, r4, r2 + adds r0, r0, r1 + ldr r1, _08080D6C @ =0x000003FF +_08080D5C: + ands r0, r1 + movs r1, #0 + mov r4, sb + strh r0, [r4] + cmp r5, #0 + beq _08080D70 + strh r1, [r6, #0x38] + b _08080D74 + .align 2, 0 +_08080D6C: .4byte 0x000003FF +_08080D70: + mov r0, r8 + strh r5, [r0, #0x38] +_08080D74: + ldr r3, _08080D80 @ =gPlayer + cmp r5, #0 + beq _08080D84 + movs r0, #0 + strh r0, [r6, #0x3a] + b _08080D86 + .align 2, 0 +_08080D80: .4byte gPlayer +_08080D84: + strh r5, [r3, #0x3a] +_08080D86: + adds r0, r3, #0 + cmp r5, #0 + beq _08080D8E + ldr r0, _08080DA0 @ =gPartner +_08080D8E: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _08080DA8 + movs r0, #5 + ldr r1, _08080DA4 @ =gPartner + 0x40 + strb r0, [r1] + b _08080DAE + .align 2, 0 +_08080DA0: .4byte gPartner +_08080DA4: .4byte gPartner + 0x40 +_08080DA8: + movs r0, #5 + ldr r2, _08080DC0 @ =gPlayer + 0x40 + strb r0, [r2] +_08080DAE: + cmp r5, #0 + beq _08080DC4 + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r6, #0x10] + b _08080DD0 + .align 2, 0 +_08080DC0: .4byte gPlayer + 0x40 +_08080DC4: + mov r4, r8 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] +_08080DD0: + cmp r5, #0 + beq _08080DE8 + ldr r0, _08080DE4 @ =gPartner + 0x26 + ldrb r1, [r0] + movs r0, #0x80 + orrs r0, r1 + ldr r1, _08080DE4 @ =gPartner + 0x26 + strb r0, [r1] + b _08080DF2 + .align 2, 0 +_08080DE4: .4byte gPartner + 0x26 +_08080DE8: + ldr r2, _08080E4C @ =gPlayer + 0x26 + ldrb r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2] +_08080DF2: + adds r5, #1 + ldr r0, _08080E50 @ =gNumSingleplayerCharacters + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r5, r1 + bge _08080E00 + b _08080C18_loop +_08080E00: + movs r5, #0 + mov r8, r5 + ldr r4, _08080E54 @ =gPlayer + mov sb, r4 +_08080E08_loop: + ldr r1, [sp, #0x18] + ldrb r0, [r1] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08080ECC + adds r4, r7, #0 + adds r4, #0x48 + mov r2, r8 + adds r0, r4, r2 + ldr r2, [r0] + lsls r1, r5, #1 + adds r0, r7, #0 + adds r0, #0x3c + adds r0, r0, r1 + lsrs r2, r2, #8 + ldrh r0, [r0] + adds r2, r2, r0 + adds r3, r7, #0 + adds r3, #0x50 + ldrb r1, [r3] + movs r0, #0xf + ands r0, r1 + lsls r0, r0, #6 + adds r2, r2, r0 + ldr r0, _08080E58 @ =0x000003FF + ands r2, r0 + adds r6, r4, #0 + cmp r5, #0 + beq _08080E60 + ldr r4, _08080E5C @ =gPartner + ldr r0, [r4, #0x10] + b _08080E64 + .align 2, 0 +_08080E4C: .4byte gPlayer + 0x26 +_08080E50: .4byte gNumSingleplayerCharacters +_08080E54: .4byte gPlayer +_08080E58: .4byte 0x000003FF +_08080E5C: .4byte gPartner +_08080E60: + mov r1, sb + ldr r0, [r1, #0x10] +_08080E64: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08080ECC + ldr r1, _08080E98 @ =gSineTable + lsls r0, r2, #1 + adds r0, r0, r1 + movs r2, #0 + ldrsh r1, [r0, r2] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, r0, r1 + ldrb r1, [r3] + lsls r1, r1, #2 + adds r1, #0x32 + bl Div + mov r4, sl + asrs r1, r4, #8 + adds r1, r1, r0 + cmp r5, #0 + beq _08080EA0 + ldr r0, _08080E9C @ =gPartner + str r1, [r0] + b _08080EA4 + .align 2, 0 +_08080E98: .4byte gSineTable +_08080E9C: .4byte gPartner +_08080EA0: + mov r2, sb + str r1, [r2] +_08080EA4: + ldr r4, [sp, #0x10] + asrs r1, r4, #8 + ldr r0, _08080EC0 @ =0xFFFFEF00 + adds r1, r1, r0 + mov r2, r8 + adds r0, r6, r2 + ldr r0, [r0] + lsrs r0, r0, #5 + adds r0, r1, r0 + cmp r5, #0 + beq _08080EC8 + ldr r4, _08080EC4 @ =gPartner + str r0, [r4, #4] + b _08080ECC + .align 2, 0 +_08080EC0: .4byte 0xFFFFEF00 +_08080EC4: .4byte gPartner +_08080EC8: + mov r1, sb + str r0, [r1, #4] +_08080ECC: + movs r2, #4 + add r8, r2 + adds r5, #1 + ldr r4, _08080F0C @ =gNumSingleplayerCharacters + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r5, r0 + blt _08080E08_loop + movs r5, #0 + mov r8, r5 + mov sb, r5 +_08080EE2_loop: + ldr r1, [sp, #0x18] + ldrb r0, [r1] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08080FB0 + adds r1, r7, #0 + adds r1, #0x48 + mov r2, sb + adds r0, r1, r2 + ldr r2, [r0] + ldr r0, _08080F10 @ =0x000D8107 + adds r6, r1, #0 + cmp r2, r0 + bls _08080F60 + cmp r5, #0 + beq _08080F18 + ldr r0, _08080F14 @ =gPartner + b _08080F1A + .align 2, 0 +_08080F0C: .4byte gNumSingleplayerCharacters +_08080F10: .4byte 0x000D8107 +_08080F14: .4byte gPartner +_08080F18: + ldr r0, _08080F48 @ =gPlayer +_08080F1A: + ldr r1, [r0, #0x10] + movs r0, #0x80 + ands r1, r0 + adds r2, r7, #0 + adds r2, #0x40 + cmp r1, #0 + bne _08080F6E + adds r1, r7, #0 + adds r1, #0x40 + mov r4, r8 + adds r0, r1, r4 + ldrh r0, [r0] + lsrs r0, r0, #2 + ldr r2, _08080F4C @ =0xFFFFF830 + adds r0, r0, r2 + lsls r3, r0, #1 + adds r2, r1, #0 + cmp r5, #0 + beq _08080F54 + ldr r0, _08080F50 @ =gPartner + strh r3, [r0, #0xa] + b _08080F6E + .align 2, 0 +_08080F48: .4byte gPlayer +_08080F4C: .4byte 0xFFFFF830 +_08080F50: .4byte gPartner +_08080F54: + ldr r0, _08080F5C @ =gPlayer + strh r3, [r0, #0xa] + b _08080F6E + .align 2, 0 +_08080F5C: .4byte gPlayer +_08080F60: + adds r2, r7, #0 + adds r2, #0x40 + mov r4, r8 + adds r1, r2, r4 + ldrh r0, [r1] + adds r0, #0x40 + strh r0, [r1] +_08080F6E: + mov r0, r8 + adds r4, r2, r0 + ldrh r0, [r4] + movs r2, #0x80 + lsls r2, r2, #0x18 + lsrs r1, r2, #0x10 + cmp r0, r1 + bls _08080F80 + strh r1, [r4] +_08080F80: + ldrh r1, [r4] + lsls r0, r1, #3 + adds r0, r0, r1 + lsls r0, r0, #2 + subs r0, r0, r1 + movs r1, #0xa0 + lsls r1, r1, #8 + bl Div + ldr r1, [sp] + adds r1, #0x22 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x10 + bls _08080FA4 + movs r0, #0x10 + strb r0, [r1] +_08080FA4: + mov r0, sb + adds r2, r6, r0 + ldrh r1, [r4] + ldr r0, [r2] + adds r0, r0, r1 + str r0, [r2] +_08080FB0: + movs r1, #2 + add r8, r1 + movs r2, #4 + add sb, r2 + adds r5, #1 + ldr r4, _08081030 @ =gNumSingleplayerCharacters + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r5, r0 + blt _08080EE2_loop + mov r0, sl + asrs r2, r0, #0x10 + ldr r3, _08081034 @ =gCamera + movs r4, #0 + ldrsh r1, [r3, r4] + movs r4, #0xb8 + lsls r4, r4, #1 + adds r0, r1, r4 + cmp r2, r0 + bgt _08080FF8 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + blt _08080FF8 + ldr r0, [sp, #0x10] + asrs r1, r0, #0x10 + movs r2, #2 + ldrsh r3, [r3, r2] + subs r4, #0x50 + adds r0, r3, r4 + cmp r1, r0 + bgt _08080FF8 + adds r0, r3, #0 + subs r0, #0x80 + cmp r1, r0 + bge _0808103C +_08080FF8: + ldr r1, [sp] + ldrh r0, [r1, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08081020 + ldr r2, [sp] + movs r4, #0x18 + ldrsh r0, [r2, r4] + adds r0, #0x80 + cmp r0, #0 + blt _08081020 + movs r0, #0x18 + ldrsh r1, [r2, r0] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0808103C +_08081020: + ldrb r0, [r7, #8] + ldr r1, [sp, #0xc] + strb r0, [r1] + ldr r0, _08081038 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0808126E + .align 2, 0 +_08081030: .4byte gNumSingleplayerCharacters +_08081034: .4byte gCamera +_08081038: .4byte gCurTask +_0808103C: + movs r4, #0 + adds r2, r7, #0 + adds r2, #0x44 + str r2, [sp, #0x14] + ldr r0, [sp, #0x18] + mov r8, r0 + ldr r6, _08081088 @ =gPartner + movs r1, #0x80 + mov sb, r1 + ldr r5, _0808108C @ =gPlayer + movs r2, #0x26 + adds r2, r2, r5 + mov ip, r2 +_08081056: + mov r1, r8 + ldrb r0, [r1] + asrs r0, r4 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08081066 + b _080811CA +_08081066: + lsls r1, r4, #2 + adds r0, r7, #0 + adds r0, #0x48 + adds r2, r0, r1 + ldr r1, [r2] + ldr r0, _08081090 @ =0x000D8107 + cmp r1, r0 + bhi _08081078 + b _080811CA +_08081078: + adds r0, #1 + str r0, [r2] + cmp r4, #0 + beq _08081094 + ldr r0, [r6, #0x10] + mov r2, sb + ands r0, r2 + b _0808109A + .align 2, 0 +_08081088: .4byte gPartner +_0808108C: .4byte gPlayer +_08081090: .4byte 0x000D8107 +_08081094: + ldr r0, [r5, #0x10] + mov r1, sb + ands r0, r1 +_0808109A: + adds r3, r7, #0 + adds r3, #0x50 + cmp r0, #0 + bne _080810DE + adds r0, r7, #0 + adds r0, #0x50 + ldrb r1, [r0] + adds r3, r0, #0 + cmp r1, #0xf + bhi _080810C4 + ldrb r1, [r3] + movs r0, #0xb4 + muls r1, r0, r1 + cmp r4, #0 + beq _080810C0 + ldr r0, [r6, #4] + adds r0, r0, r1 + str r0, [r6, #4] + b _080810DE +_080810C0: + ldr r0, [r5, #4] + b _080810DA +_080810C4: + cmp r4, #0 + beq _080810D4 + ldr r0, [r6, #4] + movs r2, #0xb4 + lsls r2, r2, #4 + adds r0, r0, r2 + str r0, [r6, #4] + b _080810DE +_080810D4: + ldr r0, [r5, #4] + movs r1, #0xb4 + lsls r1, r1, #4 +_080810DA: + adds r0, r0, r1 + str r0, [r5, #4] +_080810DE: + cmp r4, #0 + bne _080810E8 + ldrb r0, [r3] + adds r0, #1 + strb r0, [r3] +_080810E8: + ldrb r0, [r3] + cmp r0, #0x40 + bls _080811CA + cmp r4, #0 + beq _080810FA + ldr r0, [r6, #0x10] + mov r2, sb + ands r0, r2 + b _08081100 +_080810FA: + ldr r0, [r5, #0x10] + mov r1, sb + ands r0, r1 +_08081100: + cmp r0, #0 + bne _0808119A + cmp r4, #0 + beq _08081118 + ldr r0, [r6, #0x10] + ldr r1, _08081114 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] + b _08081120 + .align 2, 0 +_08081114: .4byte 0xFFBFFFFF +_08081118: + ldr r0, [r5, #0x10] + ldr r1, _08081130 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] +_08081120: + cmp r4, #0 + beq _08081134 + ldr r0, [r6, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r6, #0x10] + b _0808113C + .align 2, 0 +_08081130: .4byte 0xFFBFFFFF +_08081134: + ldr r0, [r5, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r5, #0x10] +_0808113C: + cmp r4, #0 + beq _0808114A + ldr r0, [r6, #0x10] + movs r1, #0x10 + orrs r0, r1 + str r0, [r6, #0x10] + b _08081152 +_0808114A: + ldr r0, [r5, #0x10] + movs r1, #0x10 + orrs r0, r1 + str r0, [r5, #0x10] +_08081152: + cmp r4, #0 + beq _08081160 + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] + b _08081168 +_08081160: + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] +_08081168: + cmp r4, #0 + beq _08081172 + movs r0, #0 + strh r0, [r6, #8] + b _08081174 +_08081172: + strh r4, [r5, #8] +_08081174: + cmp r4, #0 + beq _0808117E + movs r0, #0 + strh r0, [r6, #0xc] + b _08081180 +_0808117E: + strh r4, [r5, #0xc] +_08081180: + mov r2, sl + asrs r0, r2, #8 + cmp r4, #0 + beq _0808118C + str r0, [r6] + b _0808118E +_0808118C: + str r0, [r5] +_0808118E: + movs r1, #1 + lsls r1, r4 + mov r2, r8 + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] +_0808119A: + ldr r0, _080811B4 @ =gCurTask + ldr r1, [r0] + ldr r0, _080811B8 @ =Task_Bowl3 + str r0, [r1, #8] + cmp r4, #0 + beq _080811C0 + ldr r0, _080811BC @ =gPartner + 0x26 + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + ldr r1, _080811BC @ =gPartner + 0x26 + strb r0, [r1] + b _080811CA + .align 2, 0 +_080811B4: .4byte gCurTask +_080811B8: .4byte Task_Bowl3 +_080811BC: .4byte gPartner + 0x26 +_080811C0: + mov r2, ip + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] +_080811CA: + adds r4, #1 + ldr r1, _08081200 @ =gNumSingleplayerCharacters + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r4, r0 + bge _080811D8 + b _08081056 +_080811D8: + ldr r1, [sp, #0x14] + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0xf0 + bls _080811EC + movs r0, #0xf0 + strh r0, [r1] +_080811EC: + ldr r2, [sp, #0x14] + ldrh r0, [r2] + cmp r0, #0x38 + bne _08081230 + movs r4, #0 + movs r5, #0x80 +_080811F8: + cmp r4, #0 + beq _08081208 + ldr r0, _08081204 @ =gPartner + b _0808120A + .align 2, 0 +_08081200: .4byte gNumSingleplayerCharacters +_08081204: .4byte gPartner +_08081208: + ldr r0, _08081228 @ =gPlayer +_0808120A: + ldr r0, [r0, #0x10] + ands r0, r5 + cmp r0, #0 + bne _08081218 + movs r0, #0xcf + bl m4aSongNumStart +_08081218: + adds r4, #1 + ldr r0, _0808122C @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + blt _080811F8 + b _08081262 + .align 2, 0 +_08081228: .4byte gPlayer +_0808122C: .4byte gNumSingleplayerCharacters +_08081230: + cmp r0, #0x70 + bne _08081262 + movs r4, #0 + movs r5, #0x80 +_08081238: + cmp r4, #0 + beq _08081244 + ldr r0, _08081240 @ =gPartner + b _08081246 + .align 2, 0 +_08081240: .4byte gPartner +_08081244: + ldr r0, _08081280 @ =gPlayer +_08081246: + ldr r0, [r0, #0x10] + ands r0, r5 + cmp r0, #0 + bne _08081254 + movs r0, #0xd0 + bl m4aSongNumStart +_08081254: + adds r4, #1 + ldr r0, _08081284 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + blt _08081238 +_08081262: + ldr r0, [sp] + bl UpdateSpriteAnimation + ldr r0, [sp] + bl DisplaySprite +_0808126E: + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08081280: .4byte gPlayer +_08081284: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC1.inc b/sa1/asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC1.inc new file mode 100644 index 0000000000..64a12a35be --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC1.inc @@ -0,0 +1,574 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + mov r8, r0 + str r1, [sp] + str r2, [sp, #4] + str r3, [sp, #8] + movs r0, #0 + str r0, [sp, #0xc] + movs r1, #0 + str r1, [sp, #0x10] + movs r6, #0 + ldr r4, _0807ACAC @ =gPartner + ldr r5, _0807ACB0 @ =gPlayer + ldr r2, _0807ACB4 @ =0x0000FA27 + mov sl, r2 +_0807ACA2: + cmp r6, #0 + beq _0807ACB8 + ldr r3, [r4] + mov sb, r3 + b _0807ACBC + .align 2, 0 +_0807ACAC: .4byte gPartner +_0807ACB0: .4byte gPlayer +_0807ACB4: .4byte 0x0000FA27 +_0807ACB8: + ldr r0, [r5] + mov sb, r0 +_0807ACBC: + cmp r6, #0 + beq _0807ACCA + ldr r1, [r4, #0x10] + movs r0, #0x80 + ands r1, r0 + adds r7, r6, #1 + b _0807ACD2 +_0807ACCA: + ldr r1, [r5, #0x10] + movs r0, #0x80 + ands r1, r0 + movs r7, #1 +_0807ACD2: + cmp r1, #0 + beq _0807ACD8 + b _0807B066 +_0807ACD8: + ldr r0, _0807AD44 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _0807ACE6 + adds r7, r6, #1 + cmp r0, #5 + bne _0807AD30 +_0807ACE6: + movs r2, #0 + ldr r1, _0807AD48 @ =gMultiplayerPlayerTasks + ldr r0, [r1] + adds r7, r6, #1 + cmp r0, #0 + beq _0807AD30 + adds r3, r1, #0 +_0807ACF4: + ldr r0, _0807AD4C @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r2, r0 + beq _0807AD1C + lsls r0, r2, #2 + adds r0, r0, r3 + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + ldr r0, [r0, #0x5c] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + beq _0807AD1C + movs r0, #1 + str r0, [sp, #0x10] +_0807AD1C: + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #3 + bhi _0807AD30 + lsls r0, r2, #2 + adds r0, r0, r3 + ldr r0, [r0] + cmp r0, #0 + bne _0807ACF4 +_0807AD30: + cmp r6, #0 + beq _0807AD50 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _0807AD5C + b _0807AD64 + .align 2, 0 +_0807AD44: .4byte gGameMode +_0807AD48: .4byte gMultiplayerPlayerTasks +_0807AD4C: .4byte 0x04000128 +_0807AD50: + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + beq _0807AD64 +_0807AD5C: + ldr r1, [sp, #0x10] + cmp r1, #0 + bne _0807AD64 + b _0807B066 +_0807AD64: + mov r2, r8 + ldr r0, [r2, #0x40] + asrs r0, r0, #8 + ldr r3, [sp, #4] + adds r0, r3, r0 + lsls r0, r0, #0x10 + asrs r1, r0, #0x10 + ldr r0, [r2, #0x44] + asrs r0, r0, #8 + ldr r2, [sp, #8] + adds r0, r2, r0 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + ldr r3, _0807ADA0 @ =gPlayer + cmp r6, #0 + beq _0807AD86 + ldr r3, _0807ADA4 @ =gPartner +_0807AD86: + ldr r0, [sp] + bl Coll_Player_Entity_Intersection + cmp r0, #0 + bne _0807AD92 + b _0807B066 +_0807AD92: + cmp r6, #0 + beq _0807ADAC + ldr r3, _0807ADA8 @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r3, r0] + b _0807ADB2 + .align 2, 0 +_0807ADA0: .4byte gPlayer +_0807ADA4: .4byte gPartner +_0807ADA8: .4byte gPartner + 0x59 +_0807ADAC: + ldr r1, _0807ADC8 @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] +_0807ADB2: + ldr r3, _0807ADCC @ =gPlayer + cmp r0, #1 + beq _0807ADDE + cmp r6, #0 + beq _0807ADD4 + ldr r2, _0807ADD0 @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #2 + beq _0807ADDE + b _0807AE34 + .align 2, 0 +_0807ADC8: .4byte gPlayer + 0x59 +_0807ADCC: .4byte gPlayer +_0807ADD0: .4byte gPartner + 0x59 +_0807ADD4: + ldr r1, _0807ADF0 @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #2 + bne _0807AE34 +_0807ADDE: + cmp r6, #0 + beq _0807ADF8 + ldr r2, _0807ADF4 @ =gPartner + 0x3D + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #0 + bne _0807AE06 + b _0807AE34 + .align 2, 0 +_0807ADF0: .4byte gPlayer + 0x59 +_0807ADF4: .4byte gPartner + 0x3D +_0807ADF8: + adds r0, r3, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0807AE34 +_0807AE06: + ldr r0, _0807AE20 @ =gPlayer + cmp r6, #0 + beq _0807AE0E + ldr r0, _0807AE24 @ =gPartner +_0807AE0E: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _0807AE2C + movs r0, #5 + ldr r3, _0807AE28 @ =gPartner + 0x40 + strb r0, [r3] + b _0807AE32 + .align 2, 0 +_0807AE20: .4byte gPlayer +_0807AE24: .4byte gPartner +_0807AE28: .4byte gPartner + 0x40 +_0807AE2C: + movs r0, #5 + ldr r1, _0807AE4C @ =gPlayer + 0x40 + strb r0, [r1] +_0807AE32: + ldr r3, _0807AE50 @ =gPlayer +_0807AE34: + ldr r0, _0807AE54 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _0807AE40 + cmp r0, #5 + bne _0807AE5C +_0807AE40: + cmp r6, #0 + beq _0807AE58 + movs r0, #0x1e + strh r0, [r4, #0x1c] + b _0807AE5C + .align 2, 0 +_0807AE4C: .4byte gPlayer + 0x40 +_0807AE50: .4byte gPlayer +_0807AE54: .4byte gGameMode +_0807AE58: + movs r0, #0x1e + strh r0, [r3, #0x1c] +_0807AE5C: + cmp r6, #0 + beq _0807AE6C + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807AE76 +_0807AE6C: + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807AE76: + cmp r6, #0 + beq _0807AE84 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _0807AE8C +_0807AE84: + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] +_0807AE8C: + cmp r6, #0 + beq _0807AEA0 + ldr r0, [r4, #0x10] + ldr r1, _0807AE9C @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + b _0807AEA8 + .align 2, 0 +_0807AE9C: .4byte 0xFFFFFEFF +_0807AEA0: + ldr r0, [r5, #0x10] + ldr r1, _0807AEB8 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] +_0807AEA8: + cmp r6, #0 + beq _0807AEBC + ldr r0, [r4, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r4, #0x10] + b _0807AEC4 + .align 2, 0 +_0807AEB8: .4byte 0xFFFFFEFF +_0807AEBC: + ldr r0, [r5, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r5, #0x10] +_0807AEC4: + cmp r6, #0 + beq _0807AED4 + ldr r0, [r4, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807AEDE +_0807AED4: + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807AEDE: + adds r1, r3, #0 + cmp r6, #0 + beq _0807AEE6 + ldr r1, _0807AF04 @ =gPartner +_0807AEE6: + movs r0, #6 + strb r0, [r1, #0xe] + adds r1, r3, #0 + cmp r6, #0 + beq _0807AEF2 + ldr r1, _0807AF04 @ =gPartner +_0807AEF2: + movs r0, #9 + strb r0, [r1, #0xf] + mov r2, r8 + ldr r0, [r2, #0x44] + asrs r1, r0, #8 + cmp r6, #0 + beq _0807AF08 + ldr r0, [r4, #4] + b _0807AF0A + .align 2, 0 +_0807AF04: .4byte gPartner +_0807AF08: + ldr r0, [r3, #4] +_0807AF0A: + asrs r0, r0, #8 + ldr r2, [sp, #8] + subs r0, r0, r2 + subs r0, r0, r1 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + mov r1, r8 + ldr r0, [r1, #0x40] + asrs r1, r0, #8 + cmp r6, #0 + beq _0807AF24 + ldr r0, [r4] + b _0807AF26 +_0807AF24: + ldr r0, [r3] +_0807AF26: + asrs r0, r0, #8 + ldr r3, [sp, #4] + subs r0, r0, r3 + subs r0, r0, r1 + lsls r0, r0, #0x10 + asrs r1, r0, #0x10 + adds r0, r2, #0 + bl sa2__sub_8004418 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + ldr r1, [sp] + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #4 + ands r0, r1 + cmp r0, #0 + beq _0807AFC4 + ldr r0, _0807AF5C @ =0x000001FF + cmp r2, r0 + bls _0807AF6C + cmp r6, #0 + beq _0807AF64 + ldr r0, _0807AF60 @ =0x0000F99A + strh r0, [r4, #0xa] + b _0807B054 + .align 2, 0 +_0807AF5C: .4byte 0x000001FF +_0807AF60: .4byte 0x0000F99A +_0807AF64: + ldr r0, _0807AF68 @ =0x0000F99A + b _0807B052 + .align 2, 0 +_0807AF68: .4byte 0x0000F99A +_0807AF6C: + cmp r2, #0xff + bhi _0807AF94 + cmp r6, #0 + beq _0807AF80 + ldr r2, _0807AF7C @ =0x00000297 + strh r2, [r4, #8] + b _0807AF84 + .align 2, 0 +_0807AF7C: .4byte 0x00000297 +_0807AF80: + ldr r3, _0807AF8C @ =0x00000297 + strh r3, [r5, #8] +_0807AF84: + cmp r6, #0 + bne _0807AFAC + ldr r0, _0807AF90 @ =0x000005D9 + b _0807B052 + .align 2, 0 +_0807AF8C: .4byte 0x00000297 +_0807AF90: .4byte 0x000005D9 +_0807AF94: + cmp r6, #0 + beq _0807AFA4 + ldr r0, _0807AFA0 @ =0x0000FD69 + strh r0, [r4, #8] + b _0807AFA8 + .align 2, 0 +_0807AFA0: .4byte 0x0000FD69 +_0807AFA4: + ldr r0, _0807AFB4 @ =0x0000FD69 + strh r0, [r5, #8] +_0807AFA8: + cmp r6, #0 + beq _0807AFBC +_0807AFAC: + ldr r0, _0807AFB8 @ =0x000005D9 + strh r0, [r4, #0xa] + b _0807B054 + .align 2, 0 +_0807AFB4: .4byte 0x0000FD69 +_0807AFB8: .4byte 0x000005D9 +_0807AFBC: + ldr r0, _0807AFC0 @ =0x000005D9 + b _0807B052 + .align 2, 0 +_0807AFC0: .4byte 0x000005D9 +_0807AFC4: + movs r0, #0xf7 + lsls r0, r0, #1 + cmp r2, r0 + bls _0807B014 + movs r0, #0xc0 + lsls r0, r0, #2 + cmp r2, r0 + bls _0807AFF6 + cmp r6, #0 + beq _0807AFDE + subs r0, #0x69 + strh r0, [r4, #8] + b _0807AFE2 +_0807AFDE: + ldr r1, _0807AFEC @ =0x00000297 + strh r1, [r5, #8] +_0807AFE2: + cmp r6, #0 + beq _0807AFF0 + mov r2, sl + strh r2, [r4, #0xa] + b _0807B054 + .align 2, 0 +_0807AFEC: .4byte 0x00000297 +_0807AFF0: + mov r3, sl + strh r3, [r5, #0xa] + b _0807B054 +_0807AFF6: + cmp r6, #0 + beq _0807B004 + ldr r0, _0807B000 @ =0x0000FD69 + strh r0, [r4, #8] + b _0807B008 + .align 2, 0 +_0807B000: .4byte 0x0000FD69 +_0807B004: + ldr r0, _0807B010 @ =0x0000FD69 + strh r0, [r5, #8] +_0807B008: + cmp r6, #0 + bne _0807B030 + b _0807B03C + .align 2, 0 +_0807B010: .4byte 0x0000FD69 +_0807B014: + cmp r2, #0x14 + bhi _0807B042 + cmp r6, #0 + beq _0807B028 + ldr r2, _0807B024 @ =0x00000297 + strh r2, [r4, #8] + b _0807B02C + .align 2, 0 +_0807B024: .4byte 0x00000297 +_0807B028: + ldr r3, _0807B038 @ =0x00000297 + strh r3, [r5, #8] +_0807B02C: + cmp r6, #0 + beq _0807B03C +_0807B030: + mov r0, sl + strh r0, [r4, #0xa] + b _0807B054 + .align 2, 0 +_0807B038: .4byte 0x00000297 +_0807B03C: + mov r1, sl + strh r1, [r5, #0xa] + b _0807B054 +_0807B042: + cmp r6, #0 + beq _0807B050 + ldr r0, _0807B04C @ =0x00000666 + strh r0, [r4, #0xa] + b _0807B054 + .align 2, 0 +_0807B04C: .4byte 0x00000666 +_0807B050: + ldr r0, _0807B070 @ =0x00000666 +_0807B052: + strh r0, [r5, #0xa] +_0807B054: + movs r0, #0xb8 + bl m4aSongNumStart + mov r1, r8 + adds r1, #0x4c + movs r0, #0 + strb r0, [r1] + movs r2, #1 + str r2, [sp, #0xc] +_0807B066: + cmp r6, #0 + beq _0807B074 + mov r3, sb + str r3, [r4] + b _0807B078 + .align 2, 0 +_0807B070: .4byte 0x00000666 +_0807B074: + mov r0, sb + str r0, [r5] +_0807B078: + adds r6, r7, #0 + ldr r0, _0807B09C @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r6, r0 + bge _0807B088 + b _0807ACA2 +_0807B088: + ldr r0, [sp, #0xc] + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_0807B09C: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC3.inc b/sa1/asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC3.inc new file mode 100644 index 0000000000..0af0925533 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC3.inc @@ -0,0 +1,1160 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + str r0, [sp] + str r1, [sp, #4] + str r2, [sp, #8] + adds r7, r3, #0 + movs r0, #0 + mov sb, r0 + movs r1, #0 + str r1, [sp, #0xc] + movs r6, #0 + ldr r4, _0807B468 @ =gPartner + ldr r5, _0807B46C @ =gPlayer + movs r2, #4 + mov sl, r2 +BumperCheckCollAndPosC3_loop: @ 0x0807B45A + cmp r6, #0 + beq _0807B470 + ldr r0, [r4] + mov r8, r0 + ldr r1, _0807B46C @ =gPlayer + mov ip, r1 + b _0807B478 + .align 2, 0 +_0807B468: .4byte gPartner +_0807B46C: .4byte gPlayer +_0807B470: + ldr r2, [r5] + mov r8, r2 + ldr r0, _0807B50C @ =gPlayer + mov ip, r0 +_0807B478: + ldr r1, [sp, #8] + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + lsls r0, r7, #0x10 + asrs r2, r0, #0x10 + mov r3, ip + cmp r6, #0 + beq _0807B48A + ldr r3, _0807B510 @ =gPartner +_0807B48A: + ldr r0, [sp, #4] + bl Coll_Player_Entity_Intersection + adds r2, r6, #1 + str r2, [sp, #0x10] + cmp r0, #0 + bne _0807B49C + bl _0807BC64 +_0807B49C: + ldr r0, _0807B514 @ =gGameMode + ldrb r1, [r0] + adds r3, r0, #0 + cmp r1, #3 + beq _0807B4AA + cmp r1, #5 + bne _0807B4FA +_0807B4AA: + movs r1, #0 + ldr r2, _0807B518 @ =gMultiplayerPlayerTasks + ldr r0, [r2] + mov ip, r0 + adds r0, r6, #1 + str r0, [sp, #0x10] + mov r0, ip + cmp r0, #0 + beq _0807B4FA + mov ip, r2 +_0807B4BE: + ldr r0, _0807B51C @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r1, r0 + beq _0807B4E6 + lsls r0, r1, #2 + add r0, ip + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r0, r0, r2 + ldr r0, [r0, #0x5c] + mov r2, sl + ands r0, r2 + cmp r0, #0 + beq _0807B4E6 + movs r0, #1 + str r0, [sp, #0xc] +_0807B4E6: + adds r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + cmp r1, #3 + bhi _0807B4FA + lsls r0, r1, #2 + add r0, ip + ldr r0, [r0] + cmp r0, #0 + bne _0807B4BE +_0807B4FA: + cmp r6, #0 + beq _0807B520 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _0807B52C + b _0807B534 + .align 2, 0 +_0807B50C: .4byte gPlayer +_0807B510: .4byte gPartner +_0807B514: .4byte gGameMode +_0807B518: .4byte gMultiplayerPlayerTasks +_0807B51C: .4byte 0x04000128 +_0807B520: + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + beq _0807B534 +_0807B52C: + ldr r1, [sp, #0xc] + cmp r1, #0 + bne _0807B534 + b _0807BC64 +_0807B534: + ldr r2, [sp, #4] + ldr r1, [r2, #0x10] + movs r0, #0x80 + lsls r0, r0, #4 + ands r0, r1 + cmp r0, #0 + bne _0807B544 + b _0807B8C2 +_0807B544: + movs r0, #0x80 + lsls r0, r0, #3 + ands r1, r0 + cmp r1, #0 + bne _0807B550 + b _0807B70A +_0807B550: + mov r1, r8 + asrs r0, r1, #8 + ldr r2, [sp, #8] + subs r0, r2, r0 + movs r1, #0x41 + subs r1, r1, r0 + cmp r6, #0 + beq _0807B56C + ldr r0, [r4, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + blt _0807B578 + b _0807BC64 +_0807B56C: + ldr r0, [r5, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + blt _0807B578 + b _0807BC64 +_0807B578: + cmp r6, #0 + beq _0807B584 + ldr r1, _0807B580 @ =gPartner + 0x59 + b _0807B586 + .align 2, 0 +_0807B580: .4byte gPartner + 0x59 +_0807B584: + ldr r1, _0807B5A4 @ =gPlayer + 0x59 +_0807B586: + movs r0, #0 + ldrsb r0, [r1, r0] + ldr r2, _0807B5A8 @ =gPlayer + mov ip, r2 + cmp r0, #1 + beq _0807B5BA + cmp r6, #0 + beq _0807B5B0 + ldr r1, _0807B5AC @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #2 + beq _0807B5BA + b _0807B618 + .align 2, 0 +_0807B5A4: .4byte gPlayer + 0x59 +_0807B5A8: .4byte gPlayer +_0807B5AC: .4byte gPartner + 0x59 +_0807B5B0: + ldr r2, _0807B5CC @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #2 + bne _0807B618 +_0807B5BA: + cmp r6, #0 + beq _0807B5D4 + ldr r1, _0807B5D0 @ =gPartner + 0x3D + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + bne _0807B5E2 + b _0807B618 + .align 2, 0 +_0807B5CC: .4byte gPlayer + 0x59 +_0807B5D0: .4byte gPartner + 0x3D +_0807B5D4: + mov r0, ip + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0807B618 +_0807B5E2: + ldr r0, _0807B600 @ =gPlayer + cmp r6, #0 + beq _0807B5EA + ldr r0, _0807B604 @ =gPartner +_0807B5EA: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _0807B60C + movs r0, #5 + ldr r2, _0807B608 @ =gPartner + 0x40 + strb r0, [r2] + ldr r0, _0807B600 @ =gPlayer + mov ip, r0 + b _0807B616 + .align 2, 0 +_0807B600: .4byte gPlayer +_0807B604: .4byte gPartner +_0807B608: .4byte gPartner + 0x40 +_0807B60C: + movs r0, #5 + ldr r1, _0807B62C @ =gPlayer + 0x40 + strb r0, [r1] + ldr r2, _0807B630 @ =gPlayer + mov ip, r2 +_0807B616: + ldr r3, _0807B634 @ =gGameMode +_0807B618: + ldrb r0, [r3] + cmp r0, #3 + beq _0807B622 + cmp r0, #5 + bne _0807B63E +_0807B622: + cmp r6, #0 + beq _0807B638 + movs r0, #0x1e + strh r0, [r4, #0x1c] + b _0807B63E + .align 2, 0 +_0807B62C: .4byte gPlayer + 0x40 +_0807B630: .4byte gPlayer +_0807B634: .4byte gGameMode +_0807B638: + movs r0, #0x1e + mov r1, ip + strh r0, [r1, #0x1c] +_0807B63E: + cmp r6, #0 + beq _0807B64E + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807B658 +_0807B64E: + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807B658: + cmp r6, #0 + beq _0807B666 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _0807B66E +_0807B666: + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] +_0807B66E: + cmp r6, #0 + beq _0807B680 + ldr r0, [r4, #0x10] + ldr r1, _0807B67C @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + b _0807B688 + .align 2, 0 +_0807B67C: .4byte 0xFFFFFEFF +_0807B680: + ldr r0, [r5, #0x10] + ldr r1, _0807B698 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] +_0807B688: + cmp r6, #0 + beq _0807B69C + ldr r0, [r4, #0x10] + mov r2, sl + orrs r0, r2 + str r0, [r4, #0x10] + b _0807B6A4 + .align 2, 0 +_0807B698: .4byte 0xFFFFFEFF +_0807B69C: + ldr r0, [r5, #0x10] + mov r1, sl + orrs r0, r1 + str r0, [r5, #0x10] +_0807B6A4: + cmp r6, #0 + beq _0807B6B4 + ldr r0, [r4, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807B6BE +_0807B6B4: + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807B6BE: + mov r1, ip + cmp r6, #0 + beq _0807B6C6 + ldr r1, _0807B6E0 @ =gPartner +_0807B6C6: + movs r0, #6 + strb r0, [r1, #0xe] + mov r1, ip + cmp r6, #0 + beq _0807B6D2 + ldr r1, _0807B6E0 @ =gPartner +_0807B6D2: + movs r0, #9 + strb r0, [r1, #0xf] + cmp r6, #0 + beq _0807B6E8 + ldr r2, _0807B6E4 @ =0xFFFFFB50 + strh r2, [r4, #8] + b _0807B6EE + .align 2, 0 +_0807B6E0: .4byte gPartner +_0807B6E4: .4byte 0xFFFFFB50 +_0807B6E8: + ldr r1, _0807B6FC @ =0xFFFFFB50 + mov r0, ip + strh r1, [r0, #8] +_0807B6EE: + cmp r6, #0 + beq _0807B700 + movs r0, #0x96 + lsls r0, r0, #3 + strh r0, [r4, #0xa] + b _0807BC52 + .align 2, 0 +_0807B6FC: .4byte 0xFFFFFB50 +_0807B700: + movs r0, #0x96 + lsls r0, r0, #3 + mov r2, ip + strh r0, [r2, #0xa] + b _0807BC52 +_0807B70A: + mov r1, r8 + asrs r0, r1, #8 + ldr r2, [sp, #8] + subs r0, r0, r2 + movs r1, #0x41 + subs r1, r1, r0 + cmp r6, #0 + beq _0807B726 + ldr r0, [r4, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + blt _0807B732 + b _0807BC64 +_0807B726: + ldr r0, [r5, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + blt _0807B732 + b _0807BC64 +_0807B732: + cmp r6, #0 + beq _0807B740 + ldr r1, _0807B73C @ =gPartner + 0x59 + b _0807B742 + .align 2, 0 +_0807B73C: .4byte gPartner + 0x59 +_0807B740: + ldr r1, _0807B760 @ =gPlayer + 0x59 +_0807B742: + movs r0, #0 + ldrsb r0, [r1, r0] + ldr r2, _0807B764 @ =gPlayer + mov ip, r2 + cmp r0, #1 + beq _0807B776 + cmp r6, #0 + beq _0807B76C + ldr r1, _0807B768 @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #2 + beq _0807B776 + b _0807B7D4 + .align 2, 0 +_0807B760: .4byte gPlayer + 0x59 +_0807B764: .4byte gPlayer +_0807B768: .4byte gPartner + 0x59 +_0807B76C: + ldr r2, _0807B788 @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #2 + bne _0807B7D4 +_0807B776: + cmp r6, #0 + beq _0807B790 + ldr r1, _0807B78C @ =gPartner + 0x3D + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + bne _0807B79E + b _0807B7D4 + .align 2, 0 +_0807B788: .4byte gPlayer + 0x59 +_0807B78C: .4byte gPartner + 0x3D +_0807B790: + mov r0, ip + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0807B7D4 +_0807B79E: + ldr r0, _0807B7BC @ =gPlayer + cmp r6, #0 + beq _0807B7A6 + ldr r0, _0807B7C0 @ =gPartner +_0807B7A6: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _0807B7C8 + movs r0, #5 + ldr r2, _0807B7C4 @ =gPartner + 0x40 + strb r0, [r2] + ldr r0, _0807B7BC @ =gPlayer + mov ip, r0 + b _0807B7D2 + .align 2, 0 +_0807B7BC: .4byte gPlayer +_0807B7C0: .4byte gPartner +_0807B7C4: .4byte gPartner + 0x40 +_0807B7C8: + movs r0, #5 + ldr r1, _0807B7E8 @ =gPlayer + 0x40 + strb r0, [r1] + ldr r2, _0807B7EC @ =gPlayer + mov ip, r2 +_0807B7D2: + ldr r3, _0807B7F0 @ =gGameMode +_0807B7D4: + ldrb r0, [r3] + cmp r0, #3 + beq _0807B7DE + cmp r0, #5 + bne _0807B7FA +_0807B7DE: + cmp r6, #0 + beq _0807B7F4 + movs r0, #0x1e + strh r0, [r4, #0x1c] + b _0807B7FA + .align 2, 0 +_0807B7E8: .4byte gPlayer + 0x40 +_0807B7EC: .4byte gPlayer +_0807B7F0: .4byte gGameMode +_0807B7F4: + movs r0, #0x1e + mov r1, ip + strh r0, [r1, #0x1c] +_0807B7FA: + cmp r6, #0 + beq _0807B80A + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807B814 +_0807B80A: + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807B814: + cmp r6, #0 + beq _0807B822 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _0807B82A +_0807B822: + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] +_0807B82A: + cmp r6, #0 + beq _0807B83C + ldr r0, [r4, #0x10] + ldr r1, _0807B838 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + b _0807B844 + .align 2, 0 +_0807B838: .4byte 0xFFFFFEFF +_0807B83C: + ldr r0, [r5, #0x10] + ldr r1, _0807B854 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] +_0807B844: + cmp r6, #0 + beq _0807B858 + ldr r0, [r4, #0x10] + mov r2, sl + orrs r0, r2 + str r0, [r4, #0x10] + b _0807B860 + .align 2, 0 +_0807B854: .4byte 0xFFFFFEFF +_0807B858: + ldr r0, [r5, #0x10] + mov r1, sl + orrs r0, r1 + str r0, [r5, #0x10] +_0807B860: + cmp r6, #0 + beq _0807B870 + ldr r0, [r4, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807B87A +_0807B870: + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807B87A: + mov r1, ip + cmp r6, #0 + beq _0807B882 + ldr r1, _0807B8A0 @ =gPartner +_0807B882: + movs r0, #6 + strb r0, [r1, #0xe] + mov r1, ip + cmp r6, #0 + beq _0807B88E + ldr r1, _0807B8A0 @ =gPartner +_0807B88E: + movs r0, #9 + strb r0, [r1, #0xf] + cmp r6, #0 + beq _0807B8A4 + movs r0, #0x96 + lsls r0, r0, #3 + strh r0, [r4, #8] + b _0807B8AC + .align 2, 0 +_0807B8A0: .4byte gPartner +_0807B8A4: + movs r0, #0x96 + lsls r0, r0, #3 + mov r2, ip + strh r0, [r2, #8] +_0807B8AC: + cmp r6, #0 + beq _0807B8B8 + movs r0, #0x96 + lsls r0, r0, #3 + strh r0, [r4, #0xa] + b _0807BA82 +_0807B8B8: + movs r0, #0x96 + lsls r0, r0, #3 + mov r1, ip + strh r0, [r1, #0xa] + b _0807BA82 +_0807B8C2: + movs r0, #0x80 + lsls r0, r0, #3 + ands r1, r0 + cmp r1, #0 + bne _0807B8CE + b _0807BA9C +_0807B8CE: + mov r1, r8 + asrs r0, r1, #8 + ldr r2, [sp, #8] + subs r0, r2, r0 + adds r1, r0, #0 + subs r1, #0x3c + cmp r6, #0 + beq _0807B8EA + ldr r0, [r4, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + bgt _0807B8F6 + b _0807BC64 +_0807B8EA: + ldr r0, [r5, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + bgt _0807B8F6 + b _0807BC64 +_0807B8F6: + cmp r6, #0 + beq _0807B904 + ldr r1, _0807B900 @ =gPartner + 0x59 + b _0807B906 + .align 2, 0 +_0807B900: .4byte gPartner + 0x59 +_0807B904: + ldr r1, _0807B924 @ =gPlayer + 0x59 +_0807B906: + movs r0, #0 + ldrsb r0, [r1, r0] + ldr r2, _0807B928 @ =gPlayer + mov ip, r2 + cmp r0, #1 + beq _0807B93A + cmp r6, #0 + beq _0807B930 + ldr r1, _0807B92C @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #2 + beq _0807B93A + b _0807B998 + .align 2, 0 +_0807B924: .4byte gPlayer + 0x59 +_0807B928: .4byte gPlayer +_0807B92C: .4byte gPartner + 0x59 +_0807B930: + ldr r2, _0807B94C @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #2 + bne _0807B998 +_0807B93A: + cmp r6, #0 + beq _0807B954 + ldr r1, _0807B950 @ =gPartner + 0x3D + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + bne _0807B962 + b _0807B998 + .align 2, 0 +_0807B94C: .4byte gPlayer + 0x59 +_0807B950: .4byte gPartner + 0x3D +_0807B954: + mov r0, ip + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0807B998 +_0807B962: + ldr r0, _0807B980 @ =gPlayer + cmp r6, #0 + beq _0807B96A + ldr r0, _0807B984 @ =gPartner +_0807B96A: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _0807B98C + movs r0, #5 + ldr r2, _0807B988 @ =gPartner + 0x40 + strb r0, [r2] + ldr r0, _0807B980 @ =gPlayer + mov ip, r0 + b _0807B996 + .align 2, 0 +_0807B980: .4byte gPlayer +_0807B984: .4byte gPartner +_0807B988: .4byte gPartner + 0x40 +_0807B98C: + movs r0, #5 + ldr r1, _0807B9AC @ =gPlayer + 0x40 + strb r0, [r1] + ldr r2, _0807B9B0 @ =gPlayer + mov ip, r2 +_0807B996: + ldr r3, _0807B9B4 @ =gGameMode +_0807B998: + ldrb r0, [r3] + cmp r0, #3 + beq _0807B9A2 + cmp r0, #5 + bne _0807B9BE +_0807B9A2: + cmp r6, #0 + beq _0807B9B8 + movs r0, #0x1e + strh r0, [r4, #0x1c] + b _0807B9BE + .align 2, 0 +_0807B9AC: .4byte gPlayer + 0x40 +_0807B9B0: .4byte gPlayer +_0807B9B4: .4byte gGameMode +_0807B9B8: + movs r0, #0x1e + mov r1, ip + strh r0, [r1, #0x1c] +_0807B9BE: + cmp r6, #0 + beq _0807B9CE + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807B9D8 +_0807B9CE: + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807B9D8: + cmp r6, #0 + beq _0807B9E6 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _0807B9EE +_0807B9E6: + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] +_0807B9EE: + cmp r6, #0 + beq _0807BA00 + ldr r0, [r4, #0x10] + ldr r1, _0807B9FC @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + b _0807BA08 + .align 2, 0 +_0807B9FC: .4byte 0xFFFFFEFF +_0807BA00: + ldr r0, [r5, #0x10] + ldr r1, _0807BA18 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] +_0807BA08: + cmp r6, #0 + beq _0807BA1C + ldr r0, [r4, #0x10] + mov r2, sl + orrs r0, r2 + str r0, [r4, #0x10] + b _0807BA24 + .align 2, 0 +_0807BA18: .4byte 0xFFFFFEFF +_0807BA1C: + ldr r0, [r5, #0x10] + mov r1, sl + orrs r0, r1 + str r0, [r5, #0x10] +_0807BA24: + cmp r6, #0 + beq _0807BA34 + ldr r0, [r4, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807BA3E +_0807BA34: + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807BA3E: + mov r1, ip + cmp r6, #0 + beq _0807BA46 + ldr r1, _0807BA60 @ =gPartner +_0807BA46: + movs r0, #6 + strb r0, [r1, #0xe] + mov r1, ip + cmp r6, #0 + beq _0807BA52 + ldr r1, _0807BA60 @ =gPartner +_0807BA52: + movs r0, #9 + strb r0, [r1, #0xf] + cmp r6, #0 + beq _0807BA68 + ldr r2, _0807BA64 @ =0xFFFFFB50 + strh r2, [r4, #8] + b _0807BA6E + .align 2, 0 +_0807BA60: .4byte gPartner +_0807BA64: .4byte 0xFFFFFB50 +_0807BA68: + ldr r1, _0807BA78 @ =0xFFFFFB50 + mov r0, ip + strh r1, [r0, #8] +_0807BA6E: + cmp r6, #0 + beq _0807BA7C + ldr r2, _0807BA78 @ =0xFFFFFB50 + strh r2, [r4, #0xa] + b _0807BA82 + .align 2, 0 +_0807BA78: .4byte 0xFFFFFB50 +_0807BA7C: + ldr r1, _0807BA98 @ =0xFFFFFB50 + mov r0, ip + strh r1, [r0, #0xa] +_0807BA82: + movs r0, #0xb8 + bl m4aSongNumStart + ldr r1, [sp] + adds r1, #0x4c + movs r0, #0 + strb r0, [r1] + movs r2, #1 + mov sb, r2 + b _0807BC64 + .align 2, 0 +_0807BA98: .4byte 0xFFFFFB50 +_0807BA9C: + mov r1, r8 + asrs r0, r1, #8 + ldr r2, [sp, #8] + subs r0, r0, r2 + adds r1, r0, #0 + subs r1, #0x3c + cmp r6, #0 + beq _0807BAB8 + ldr r0, [r4, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + bgt _0807BAC4 + b _0807BC64 +_0807BAB8: + ldr r0, [r5, #4] + asrs r0, r0, #8 + subs r0, r0, r7 + cmp r0, r1 + bgt _0807BAC4 + b _0807BC64 +_0807BAC4: + cmp r6, #0 + beq _0807BAD0 + ldr r1, _0807BACC @ =gPartner + 0x59 + b _0807BAD2 + .align 2, 0 +_0807BACC: .4byte gPartner + 0x59 +_0807BAD0: + ldr r1, _0807BAF0 @ =gPlayer + 0x59 +_0807BAD2: + movs r0, #0 + ldrsb r0, [r1, r0] + ldr r2, _0807BAF4 @ =gPlayer + mov ip, r2 + cmp r0, #1 + beq _0807BB06 + cmp r6, #0 + beq _0807BAFC + ldr r1, _0807BAF8 @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #2 + beq _0807BB06 + b _0807BB64 + .align 2, 0 +_0807BAF0: .4byte gPlayer + 0x59 +_0807BAF4: .4byte gPlayer +_0807BAF8: .4byte gPartner + 0x59 +_0807BAFC: + ldr r2, _0807BB18 @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #2 + bne _0807BB64 +_0807BB06: + cmp r6, #0 + beq _0807BB20 + ldr r1, _0807BB1C @ =gPartner + 0x3D + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + bne _0807BB2E + b _0807BB64 + .align 2, 0 +_0807BB18: .4byte gPlayer + 0x59 +_0807BB1C: .4byte gPartner + 0x3D +_0807BB20: + mov r0, ip + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0807BB64 +_0807BB2E: + ldr r0, _0807BB4C @ =gPlayer + cmp r6, #0 + beq _0807BB36 + ldr r0, _0807BB50 @ =gPartner +_0807BB36: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _0807BB58 + movs r0, #5 + ldr r2, _0807BB54 @ =gPartner + 0x40 + strb r0, [r2] + ldr r0, _0807BB4C @ =gPlayer + mov ip, r0 + b _0807BB62 + .align 2, 0 +_0807BB4C: .4byte gPlayer +_0807BB50: .4byte gPartner +_0807BB54: .4byte gPartner + 0x40 +_0807BB58: + movs r0, #5 + ldr r1, _0807BB78 @ =gPlayer + 0x40 + strb r0, [r1] + ldr r2, _0807BB7C @ =gPlayer + mov ip, r2 +_0807BB62: + ldr r3, _0807BB80 @ =gGameMode +_0807BB64: + ldrb r0, [r3] + cmp r0, #3 + beq _0807BB6E + cmp r0, #5 + bne _0807BB8A +_0807BB6E: + cmp r6, #0 + beq _0807BB84 + movs r0, #0x1e + strh r0, [r4, #0x1c] + b _0807BB8A + .align 2, 0 +_0807BB78: .4byte gPlayer + 0x40 +_0807BB7C: .4byte gPlayer +_0807BB80: .4byte gGameMode +_0807BB84: + movs r0, #0x1e + mov r1, ip + strh r0, [r1, #0x1c] +_0807BB8A: + cmp r6, #0 + beq _0807BB9A + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807BBA4 +_0807BB9A: + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807BBA4: + cmp r6, #0 + beq _0807BBB2 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _0807BBBA +_0807BBB2: + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] +_0807BBBA: + cmp r6, #0 + beq _0807BBCC + ldr r0, [r4, #0x10] + ldr r1, _0807BBC8 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + b _0807BBD4 + .align 2, 0 +_0807BBC8: .4byte 0xFFFFFEFF +_0807BBCC: + ldr r0, [r5, #0x10] + ldr r1, _0807BBE4 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] +_0807BBD4: + cmp r6, #0 + beq _0807BBE8 + ldr r0, [r4, #0x10] + mov r2, sl + orrs r0, r2 + str r0, [r4, #0x10] + b _0807BBF0 + .align 2, 0 +_0807BBE4: .4byte 0xFFFFFEFF +_0807BBE8: + ldr r0, [r5, #0x10] + mov r1, sl + orrs r0, r1 + str r0, [r5, #0x10] +_0807BBF0: + cmp r6, #0 + beq _0807BC00 + ldr r0, [r4, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0807BC0A +_0807BC00: + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0807BC0A: + mov r1, ip + cmp r6, #0 + beq _0807BC12 + ldr r1, _0807BC30 @ =gPartner +_0807BC12: + movs r0, #6 + strb r0, [r1, #0xe] + mov r1, ip + cmp r6, #0 + beq _0807BC1E + ldr r1, _0807BC30 @ =gPartner +_0807BC1E: + movs r0, #9 + strb r0, [r1, #0xf] + cmp r6, #0 + beq _0807BC34 + movs r0, #0x96 + lsls r0, r0, #3 + strh r0, [r4, #8] + b _0807BC3C + .align 2, 0 +_0807BC30: .4byte gPartner +_0807BC34: + movs r0, #0x96 + lsls r0, r0, #3 + mov r2, ip + strh r0, [r2, #8] +_0807BC3C: + cmp r6, #0 + beq _0807BC4C + ldr r0, _0807BC48 @ =0xFFFFFB50 + strh r0, [r4, #0xa] + b _0807BC52 + .align 2, 0 +_0807BC48: .4byte 0xFFFFFB50 +_0807BC4C: + ldr r2, _0807BC70 @ =0xFFFFFB50 + mov r1, ip + strh r2, [r1, #0xa] +_0807BC52: + movs r0, #0xb8 + bl m4aSongNumStart + ldr r1, [sp] + adds r1, #0x4c + movs r0, #0 + strb r0, [r1] + movs r0, #1 + mov sb, r0 +_0807BC64: + cmp r6, #0 + beq _0807BC74 + mov r1, r8 + str r1, [r4] + b _0807BC78 + .align 2, 0 +_0807BC70: .4byte 0xFFFFFB50 +_0807BC74: + mov r2, r8 + str r2, [r5] +_0807BC78: + ldr r6, [sp, #0x10] + ldr r0, _0807BC9C @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r6, r0 + bge _0807BC8A + bl BumperCheckCollAndPosC3_loop +_0807BC8A: + mov r0, sb + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_0807BC9C: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/carousel__Task_CarouselIdle.inc b/sa1/asm/non_matching/game/interactables/carousel__Task_CarouselIdle.inc new file mode 100644 index 0000000000..7f78c07856 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/carousel__Task_CarouselIdle.inc @@ -0,0 +1,640 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r4, _080857CC @ =gCurTask + ldr r0, [r4] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r1, r1, r0 + mov sb, r1 @ sb = carousel + ldr r1, _080857D0 @ =0x0300000C + adds r1, r0, r1 + str r1, [sp] @ sp00 = s1 + ldr r2, _080857D4 @ =0x0300003C + adds r2, r0, r2 + str r2, [sp, #4] @ sp04 = s2 + mov r3, sb + ldr r6, [r3] @ r6 = me + ldrb r2, [r3, #8] + lsls r2, r2, #3 + ldrh r0, [r3, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 @ r2 = worldX << 16 + ldrb r1, [r6, #1] + lsls r1, r1, #3 + ldrh r0, [r3, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 @ r1 = worldY << 16 + ldr r5, _080857D8 @ =gCamera + ldrh r3, [r5] + lsrs r7, r2, #0x10 + mov r8, r7 @ r8 = worldX + asrs r2, r2, #0x10 + subs r3, r2, r3 + ldr r0, [sp] + strh r3, [r0, #0x16] @ s->x = worldX - gCamera.x; + ldrh r0, [r5, #2] + lsrs r7, r1, #0x10 + str r7, [sp, #8] @ sp08 = worldY + asrs r1, r1, #0x10 + subs r0, r1, r0 + ldr r7, [sp] @ r7 = sp00 = s1 + strh r0, [r7, #0x18] @ s->y = worldY - gCamera.y; + ldr r0, [sp, #4] @ r0 = sp04 = s2 + strh r3, [r0, #0x16] + ldrh r0, [r7, #0x18] + ldr r3, [sp, #4] @ r0 = sp04 = s2 + strh r0, [r3, #0x18] + movs r7, #0 + ldrsh r3, [r5, r7] + movs r7, #0xb8 + lsls r7, r7, #1 + adds r0, r3, r7 + cmp r2, r0 + bgt _08085796 + adds r0, r3, #0 + subs r0, #0x80 + cmp r2, r0 + blt _08085796 + movs r0, #2 + ldrsh r3, [r5, r0] + movs r2, #0x90 + lsls r2, r2, #1 + adds r0, r3, r2 + cmp r1, r0 + bgt _08085796 + adds r0, r3, #0 + subs r0, #0x80 + cmp r1, r0 + bge _080857DC +_08085796: + ldr r3, [sp] @ r3 = sp00 = s1 + ldrh r0, [r3, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _080857BC + movs r7, #0x18 + ldrsh r0, [r3, r7] + adds r0, #0x80 + cmp r0, #0 + blt _080857BC + movs r0, #0x18 + ldrsh r1, [r3, r0] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _080857DC +_080857BC: + mov r1, sb + ldrb r0, [r1, #8] + strb r0, [r6] + ldr r0, [r4] + bl TaskDestroy + b _08085B94_return + .align 2, 0 +_080857CC: .4byte gCurTask +_080857D0: .4byte 0x0300000C +_080857D4: .4byte 0x0300003C +_080857D8: .4byte gCamera +_080857DC: + movs r5, #0 + mov r2, r8 + lsls r2, r2, #0x10 + mov sl, r2 @ sl = worldX << 16 + ldr r6, _080857F4 @ =gPartner + ldr r7, _080857F8 @ =gPlayer +_080857E8_loop: + cmp r5, #0 + bne _080857F0 + cmp r5, #0 + beq _080857FC +_080857F0: + ldr r0, [r6, #0x10] + b _080857FE + .align 2, 0 +_080857F4: .4byte gPartner +_080857F8: .4byte gPlayer +_080857FC: + ldr r0, [r7, #0x10] +_080857FE: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08085808 + b _08085B78_continue +_08085808: + cmp r5, #0 + beq _08085824 + ldr r3, _0808581C @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #2 + beq _08085832 + ldr r3, _08085820 @ =gPlayer + b _08085906 + .align 2, 0 +_0808581C: .4byte gPartner + 0x59 +_08085820: .4byte gPlayer +_08085824: + ldr r1, _08085840 @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] + ldr r3, _08085844 @ =gPlayer + cmp r0, #2 + beq _08085832 + b _08085906 +_08085832: + cmp r5, #0 + beq _0808584C + ldr r2, _08085848 @ =gPartner + 0x40 + movs r0, #0 + ldrsb r0, [r2, r0] + b _08085852 + .align 2, 0 +_08085840: .4byte gPlayer + 0x59 +_08085844: .4byte gPlayer +_08085848: .4byte gPartner + 0x40 +_0808584C: + ldr r3, _08085864 @ =gPlayer + 0x40 + movs r0, #0 + ldrsb r0, [r3, r0] +_08085852: + cmp r0, #0x46 + bne _08085858 + b _08085B78_continue +_08085858: + cmp r5, #0 + beq _0808586C + ldr r1, _08085868 @ =gPartner + 0x40 + movs r0, #0 + ldrsb r0, [r1, r0] + b _08085872 + .align 2, 0 +_08085864: .4byte gPlayer + 0x40 +_08085868: .4byte gPartner + 0x40 +_0808586C: + ldr r2, _08085884 @ =gPlayer + 0x40 + movs r0, #0 + ldrsb r0, [r2, r0] +_08085872: + cmp r0, #0x47 + bne _08085878 + b _08085B78_continue +_08085878: + cmp r5, #0 + beq _0808588C + ldr r3, _08085888 @ =gPartner + 0x40 + movs r0, #0 + ldrsb r0, [r3, r0] + b _08085892 + .align 2, 0 +_08085884: .4byte gPlayer + 0x40 +_08085888: .4byte gPartner + 0x40 +_0808588C: + ldr r1, _080858A4 @ =gPlayer + 0x40 + movs r0, #0 + ldrsb r0, [r1, r0] +_08085892: + cmp r0, #0x48 + bne _08085898 + b _08085B78_continue +_08085898: + cmp r5, #0 + beq _080858AC + ldr r2, _080858A8 @ =gPartner + 0x40 + movs r0, #0 + ldrsb r0, [r2, r0] + b _080858B2 + .align 2, 0 +_080858A4: .4byte gPlayer + 0x40 +_080858A8: .4byte gPartner + 0x40 +_080858AC: + ldr r3, _080858C4 @ =gPlayer + 0x40 + movs r0, #0 + ldrsb r0, [r3, r0] +_080858B2: + cmp r0, #0x49 + bne _080858B8 + b _08085B78_continue +_080858B8: + cmp r5, #0 + beq _080858CC + ldr r1, _080858C8 @ =gPartner + 0x40 + movs r0, #0 + ldrsb r0, [r1, r0] + b _080858D2 + .align 2, 0 +_080858C4: .4byte gPlayer + 0x40 +_080858C8: .4byte gPartner + 0x40 +_080858CC: + ldr r2, _080858EC @ =gPlayer + 0x40 + movs r0, #0 + ldrsb r0, [r2, r0] +_080858D2: + cmp r0, #0x4a + bne _080858D8 + b _08085B78_continue +_080858D8: + cmp r5, #0 + beq _080858F8 + ldr r3, _080858F0 @ =gPartner + 0x40 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #0x4b + bne _080858E8 + b _08085B78_continue +_080858E8: + ldr r3, _080858F4 @ =gPlayer + b _08085906 + .align 2, 0 +_080858EC: .4byte gPlayer + 0x40 +_080858F0: .4byte gPartner + 0x40 +_080858F4: .4byte gPlayer +_080858F8: + ldr r1, _08085934 @ =gPlayer + 0x40 + movs r0, #0 + ldrsb r0, [r1, r0] + ldr r3, _08085938 @ =gPlayer + cmp r0, #0x4b + bne _08085906 + b _08085B78_continue +_08085906: + mov r2, sl @ r2 = sl = worldX << 16 + asrs r4, r2, #0x10 @ r4 = worldX + ldr r1, [sp, #8] @ r1 = sp08 = worldY + lsls r0, r1, #0x10 + asrs r2, r0, #0x10 @ r2 = worldY + mov r8, r0 @ r8 = worldY << 16 + cmp r5, #0 + beq _08085918 + ldr r3, _0808593C @ =gPartner +_08085918: + ldr r0, [sp] @ r0 = sp00 = s1 + adds r1, r4, #0 + bl Coll_Player_PlatformCrumbling + adds r1, r4, #0 + subs r1, #8 + cmp r5, #0 + beq _08085940 + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + ble _0808594A + b _08085B78_continue + .align 2, 0 +_08085934: .4byte gPlayer + 0x40 +_08085938: .4byte gPlayer +_0808593C: .4byte gPartner +_08085940: + ldr r0, [r7] + asrs r0, r0, #8 + cmp r1, r0 + ble _0808594A + b _08085B78_continue +_0808594A: + mov r2, sl @ r2 = sl = worldX << 16 + asrs r0, r2, #0x10 + adds r1, r0, #0 + adds r1, #8 + cmp r5, #0 + beq _08085960 + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + bge _0808596A + b _08085B78_continue +_08085960: + ldr r0, [r7] + asrs r0, r0, #8 + cmp r1, r0 + bge _0808596A + b _08085B78_continue +_0808596A: + mov r3, r8 @ r3 = r8 = worldY << 16 + asrs r0, r3, #0x10 + adds r1, r0, #0 + subs r1, #0x30 + cmp r5, #0 + beq _08085980 + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + ble _0808598A + b _08085B78_continue +_08085980: + ldr r0, [r7, #4] + asrs r0, r0, #8 + cmp r1, r0 + ble _0808598A + b _08085B78_continue +_0808598A: + mov r1, r8 @ r1 = r8 = worldY << 16 + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #0xc + cmp r5, #0 + beq _080859A0 + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _080859AA + b _08085B78_continue +_080859A0: + ldr r0, [r7, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _080859AA + b _08085B78_continue +_080859AA: + mov r2, sb @ r2 = sb = carousel + adds r2, #0x79 + movs r0, #1 + lsls r0, r5 + ldrb r1, [r2] + orrs r0, r1 + strb r0, [r2] + cmp r5, #0 + beq _080859C6 + movs r2, #8 + ldrsh r0, [r6, r2] + cmp r0, #0 + blt _080859CE + b _080859DE +_080859C6: + movs r3, #8 + ldrsh r0, [r7, r3] + cmp r0, #0 + bge _080859DE +_080859CE: + cmp r5, #0 + beq _080859D8 + ldrh r0, [r6, #8] + rsbs r0, r0, #0 + b _080859E8 +_080859D8: + ldrh r0, [r7, #8] + rsbs r0, r0, #0 + b _080859E8 +_080859DE: + cmp r5, #0 + beq _080859E6 + ldrh r0, [r6, #8] + b _080859E8 +_080859E6: + ldrh r0, [r7, #8] +_080859E8: + lsls r0, r0, #2 + mov r1, sb @ r1 = sb = carousel + adds r1, #0x6e + strh r0, [r1] + mov r0, sl @ r0 = sl = worldX << 16 + asrs r1, r0, #0x10 + cmp r5, #0 + beq _080859FC + ldr r0, [r6] + b _080859FE +_080859FC: + ldr r0, [r7] +_080859FE: + asrs r0, r0, #8 + subs r0, r0, r1 + adds r0, #0x30 + lsls r0, r0, #9 + movs r1, #0x60 + bl Div + cmp r0, #0 + bge _08085A40 + mov r2, sl @ r2 = sl = worldX << 16 + asrs r1, r2, #0x10 + cmp r5, #0 + beq _08085A1C + ldr r0, [r6] + b _08085A1E +_08085A1C: + ldr r0, [r7] +_08085A1E: + asrs r0, r0, #8 + subs r0, r0, r1 + adds r0, #0x30 + lsls r0, r0, #9 + movs r1, #0x60 + bl Div + movs r3, #0xc0 + lsls r3, r3, #2 + adds r1, r3, #0 + subs r1, r1, r0 + ldr r2, _08085A3C @ =0x000003FF + adds r0, r2, #0 + b _08085A66 + .align 2, 0 +_08085A3C: .4byte 0x000003FF +_08085A40: + mov r3, sl @ r3 = sl = worldX << 16 + asrs r1, r3, #0x10 + cmp r5, #0 + beq _08085A4C + ldr r0, [r6] + b _08085A4E +_08085A4C: + ldr r0, [r7] +_08085A4E: + asrs r0, r0, #8 + subs r0, r0, r1 + adds r0, #0x30 + lsls r0, r0, #9 + movs r1, #0x60 + bl Div + movs r1, #0xc0 + lsls r1, r1, #2 + adds r0, r0, r1 + ldr r2, _08085A84 @ =0x000003FF + adds r1, r2, #0 +_08085A66: + ands r1, r0 + mov r0, sb @ r0 = sb = carousel + adds r0, #0x6c + movs r2, #0 + strh r1, [r0] + mov r3, sb @ r3 = sb = carousel + str r2, [r3, #0x70] + adds r0, #0xa + strh r2, [r0] + subs r0, #2 + strh r2, [r0] + cmp r5, #0 + beq _08085A88 + strh r2, [r6, #8] + b _08085A8A + .align 2, 0 +_08085A84: .4byte 0x000003FF +_08085A88: + strh r5, [r7, #8] +_08085A8A: + ldr r3, _08085A9C @ =gPlayer + cmp r5, #0 + beq _08085AA0 + movs r1, #0xc + ldrsh r0, [r6, r1] + cmp r0, #0 + bgt _08085AA8 + b _08085AC2 + .align 2, 0 +_08085A9C: .4byte gPlayer +_08085AA0: + movs r2, #0xc + ldrsh r0, [r3, r2] + cmp r0, #0 + ble _08085AC2 +_08085AA8: + mov r1, sb @ r1 = sb = carousel + adds r1, #0x78 + movs r0, #1 + strb r0, [r1] + cmp r5, #0 + beq _08085ABC + movs r0, #0xf0 + lsls r0, r0, #3 + strh r0, [r6, #0xc] + b _08085ADC +_08085ABC: + movs r0, #0xf0 + lsls r0, r0, #3 + b _08085ADA +_08085AC2: + mov r0, sb @ r0 = sb = carousel + adds r0, #0x78 + movs r1, #0 + strb r1, [r0] + cmp r5, #0 + beq _08085AD8 + ldr r0, _08085AD4 @ =0x0000F880 + strh r0, [r6, #0xc] + b _08085ADC + .align 2, 0 +_08085AD4: .4byte 0x0000F880 +_08085AD8: + ldr r0, _08085AE8 @ =0x0000F880 +_08085ADA: + strh r0, [r3, #0xc] +_08085ADC: + cmp r5, #0 + beq _08085AEC + movs r2, #0 + strh r2, [r6, #0x38] + b _08085AEE + .align 2, 0 +_08085AE8: .4byte 0x0000F880 +_08085AEC: + strh r5, [r3, #0x38] +_08085AEE: + cmp r5, #0 + beq _08085AF8 + movs r0, #0 + strh r0, [r6, #0x3a] + b _08085AFA +_08085AF8: + strh r5, [r3, #0x3a] +_08085AFA: + adds r0, r3, #0 + cmp r5, #0 + beq _08085B02 + ldr r0, _08085B14 @ =gPartner +_08085B02: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _08085B1C + movs r0, #0x21 + ldr r1, _08085B18 @ =gPartner + 0x40 + strb r0, [r1] + b _08085B22 + .align 2, 0 +_08085B14: .4byte gPartner +_08085B18: .4byte gPartner + 0x40 +_08085B1C: + movs r0, #0x21 + ldr r2, _08085B34 @ =gPlayer + 0x40 + strb r0, [r2] +_08085B22: + cmp r5, #0 + beq _08085B38 + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r6, #0x10] + b _08085B42 + .align 2, 0 +_08085B34: .4byte gPlayer + 0x40 +_08085B38: + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r7, #0x10] +_08085B42: + movs r0, #0xd1 + bl m4aSongNumStart + ldr r0, _08085B60 @ =gCurTask + ldr r1, [r0] + ldr r0, _08085B64 @ =Task_RidingCarousel + str r0, [r1, #8] + cmp r5, #0 + beq _08085B6C + ldr r3, _08085B68 @ =gPartner + 0x26 + ldrb r0, [r3] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r3] + b _08085B78_continue + .align 2, 0 +_08085B60: .4byte gCurTask +_08085B64: .4byte Task_RidingCarousel +_08085B68: .4byte gPartner + 0x26 +_08085B6C: + ldr r1, _08085BA4 @ =gPlayer + 0x26 + ldrb r0, [r1] + movs r1, #0x80 + orrs r0, r1 + ldr r2, _08085BA4 @ =gPlayer + 0x26 + strb r0, [r2] +_08085B78_continue: + adds r5, #1 + ldr r0, _08085BA8 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r5, r0 + bge _08085B88 + b _080857E8_loop +_08085B88: + ldr r0, [sp] @ r0 = sp00 = s1 + bl DisplaySprite + ldr r0, [sp, #4] @ r0 = sp04 = s2 + bl DisplaySprite +_08085B94_return: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08085BA4: .4byte gPlayer + 0x26 +_08085BA8: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/carousel__Task_RidingCarousel.inc b/sa1/asm/non_matching/game/interactables/carousel__Task_RidingCarousel.inc new file mode 100644 index 0000000000..c913381682 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/carousel__Task_RidingCarousel.inc @@ -0,0 +1,1155 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x20 + ldr r0, _08085C44 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r1, r1, r0 + mov sb, r1 @ sb = carousel + ldr r1, _08085C48 @ =0x0300000C + adds r1, r0, r1 + str r1, [sp] @ sp00 = s1 + ldr r2, _08085C4C @ =0x0300003C + adds r2, r0, r2 + str r2, [sp, #4] @ sp04 = s2 + mov r3, sb + ldr r3, [r3] + str r3, [sp, #0x10] @ sp10 = me + mov r4, sb + ldrb r2, [r4, #8] + lsls r2, r2, #3 + ldrh r0, [r4, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldrb r3, [r3, #1] + lsls r3, r3, #3 + ldrh r0, [r4, #6] + lsls r0, r0, #8 + adds r3, r3, r0 + lsls r3, r3, #0x10 + ldr r1, _08085C50 @ =gCamera + ldrh r0, [r1] + lsrs r4, r2, #0x10 + str r4, [sp, #8] @ sp08 = worldX + asrs r2, r2, #0x10 + subs r2, r2, r0 + ldr r0, [sp] @ r0 = sp00 = s1 + strh r2, [r0, #0x16] + ldrh r1, [r1, #2] + lsrs r4, r3, #0x10 + str r4, [sp, #0xc] @ sp0C = worldY + asrs r3, r3, #0x10 + subs r1, r3, r1 + mov r4, sb + ldr r0, [r4, #0x70] + lsrs r0, r0, #0xd + adds r1, r1, r0 + adds r1, #2 + ldr r0, [sp] @ r0 = sp00 = s1 + strh r1, [r0, #0x18] + ldr r1, [sp, #4] @ r1 = sp04 = s2 + strh r2, [r1, #0x16] + ldrh r0, [r0, #0x18] + adds r0, #2 + strh r0, [r1, #0x18] + movs r5, #0 + ldr r4, _08085C54 @ =gPartner + ldr r7, _08085C58 @ =gPlayer + str r3, [sp, #0x14] @ sp14 = worldY +_08085C2C_loop: + cmp r5, #0 + beq _08085C5C + ldr r1, [r4, #0x10] + movs r0, #0x80 + ands r1, r0 + ldr r2, [sp, #8] @ r2 = sp08 = worldX + lsls r2, r2, #0x10 + str r2, [sp, #0x18] @ sp18 = worldX << 16 + mov r3, sb + adds r3, #0x79 + str r3, [sp, #0x1c] @ sp1C = &carousel->unk79 + b _08085C6E + .align 2, 0 +_08085C44: .4byte gCurTask +_08085C48: .4byte 0x0300000C +_08085C4C: .4byte 0x0300003C +_08085C50: .4byte gCamera +_08085C54: .4byte gPartner +_08085C58: .4byte gPlayer +_08085C5C: + ldr r1, [r7, #0x10] + movs r0, #0x80 + ands r1, r0 + ldr r0, [sp, #8] @ r0 = sp08 = worldX + lsls r0, r0, #0x10 + str r0, [sp, #0x18] @ sp18 = worldX << 16 + mov r2, sb + adds r2, #0x79 + str r2, [sp, #0x1c] @ sp1C = &carousel->unk79 +_08085C6E: + cmp r1, #0 + bne _08085CAC + mov r1, sb + adds r1, #0x79 + ldrb r0, [r1] + asrs r0, r5 + movs r3, #1 + ands r0, r3 + ldr r2, [sp, #8] @ r2 = sp08 = worldX + lsls r2, r2, #0x10 + str r2, [sp, #0x18] @ sp18 = worldX << 16 + str r1, [sp, #0x1c] @ sp1C = &carousel->unk79 + cmp r0, #0 + beq _08085CBC + asrs r0, r2, #8 + cmp r5, #0 + beq _08085C94 + str r0, [r4] + b _08085C96 +_08085C94: + str r0, [r7] +_08085C96: + mov r3, sb + ldr r0, [r3, #0x70] + lsrs r0, r0, #0xd + ldr r1, [sp, #0x14] @ r1 = worldY + adds r0, r1, r0 + lsls r0, r0, #8 + cmp r5, #0 + beq _08085CAA + str r0, [r4, #4] + b _08085CAC +_08085CAA: + str r0, [r7, #4] +_08085CAC: + ldr r2, [sp, #0x1c] @ r2 = sp1C = &carousel->unk79 + ldrb r0, [r2] + asrs r0, r5 + movs r3, #1 + ands r0, r3 + cmp r0, #0 + beq _08085CBC + b _08085EE8_continue +_08085CBC: + mov r1, sb + ldr r0, [r1, #0x70] + lsls r0, r0, #3 + ldr r2, [sp, #0x18] @ r2 = sp18 = worldX << 16 + asrs r1, r2, #0x10 @ r1 = worldX + lsrs r3, r0, #0x10 + mov sl, r3 + asrs r0, r0, #0x10 + ldr r2, [sp, #0x14] @ r2 = worldY + adds r6, r2, r0 @ r6 = worldY + + lsls r0, r6, #0x10 + asrs r2, r0, #0x10 + ldr r3, _08085D08 @ =gPlayer + ldr r0, [sp, #0xc] @ r0 = sp0C = worldY + lsls r0, r0, #0x10 + mov r8, r0 @ r8 = worldY << 16 + cmp r5, #0 + beq _08085CE2 + ldr r3, _08085D0C @ =gPartner +_08085CE2: + ldr r0, [sp] @ r0 = sp00 = s1 + bl Coll_Player_PlatformCrumbling + movs r1, #8 + ands r1, r0 + cmp r1, #0 + beq _08085D14 + ldr r1, [sp, #0x1c] @ r1 = sp1C = &carousel->unk79 + ldrb r0, [r1] + asrs r0, r5 + movs r2, #1 + ands r0, r2 + cmp r0, #0 + bne _08085D14 + lsls r0, r6, #8 + cmp r5, #0 + beq _08085D10 + str r0, [r4, #4] + b _08085D6A + .align 2, 0 +_08085D08: .4byte gPlayer +_08085D0C: .4byte gPartner +_08085D10: + str r0, [r7, #4] + b _08085D6A +_08085D14: + ldr r3, [sp, #0x18] @ r3 = sp18 = worldX << 16 + asrs r6, r3, #0x10 + mov r0, r8 + asrs r1, r0, #0x10 + mov r2, sl + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + adds r1, r1, r0 + lsls r1, r1, #0x10 + asrs r2, r1, #0x10 + ldr r3, _08085D58 @ =gPlayer + cmp r5, #0 + beq _08085D30 + ldr r3, _08085D5C @ =gPartner +_08085D30: + ldr r0, [sp] @ r0 = sp00 = s1 + adds r1, r6, #0 + bl Coll_Player_Entity_Intersection + cmp r0, #0 + bne _08085D6A + ldr r3, [sp, #0x1c] @ r3 = sp1C = &carousel->unk79 + ldrb r0, [r3] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08085D6A + cmp r5, #0 + beq _08085D60 + ldr r0, [r4, #0x10] + subs r1, #0xa + ands r0, r1 + str r0, [r4, #0x10] + b _08085D6A + .align 2, 0 +_08085D58: .4byte gPlayer +_08085D5C: .4byte gPartner +_08085D60: + ldr r0, [r7, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r7, #0x10] +_08085D6A: + ldr r2, [sp, #0x18] @ r2 = sp18 = worldX << 16 + asrs r0, r2, #0x10 + adds r1, r0, #0 + subs r1, #8 + cmp r5, #0 + beq _08085D80 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + ble _08085D8A + b _08085EE8_continue +_08085D80: + ldr r0, [r7] + asrs r0, r0, #8 + cmp r1, r0 + ble _08085D8A + b _08085EE8_continue +_08085D8A: + ldr r3, [sp, #0x18] @ r3 = sp18 = worldX << 16 + asrs r0, r3, #0x10 + adds r1, r0, #0 + adds r1, #8 + cmp r5, #0 + beq _08085DA0 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08085DAA + b _08085EE8_continue +_08085DA0: + ldr r0, [r7] + asrs r0, r0, #8 + cmp r1, r0 + bge _08085DAA + b _08085EE8_continue +_08085DAA: + mov r1, r8 + asrs r0, r1, #0x10 + mov r3, sl + lsls r2, r3, #0x10 + asrs r1, r2, #0x10 + adds r0, r0, r1 + adds r3, r0, #0 + subs r3, #0x30 + cmp r5, #0 + beq _08085DC8 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r3, r0 + ble _08085DD2 + b _08085EE8_continue +_08085DC8: + ldr r0, [r7, #4] + asrs r0, r0, #8 + cmp r3, r0 + ble _08085DD2 + b _08085EE8_continue +_08085DD2: + mov r1, r8 + asrs r0, r1, #0x10 + asrs r1, r2, #0x10 + adds r0, r0, r1 + adds r1, r0, #0 + adds r1, #0xc + cmp r5, #0 + beq _08085DEC + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08085DF6 + b _08085EE8_continue +_08085DEC: + ldr r0, [r7, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08085DF6 + b _08085EE8_continue +_08085DF6: + mov r2, sb + ldr r1, [r2, #0x70] + ldr r0, _08085E18 @ =0x003C2A57 + cmp r1, r0 + bhi _08085EE8_continue + movs r1, #1 + lsls r1, r5 + ldr r3, [sp, #0x1c] @ r3 = sp1C = &carousel->unk79 + ldrb r0, [r3] + orrs r1, r0 + movs r0, #0 + strb r1, [r3] + cmp r5, #0 + beq _08085E1C + strh r0, [r4, #8] + b _08085E1E + .align 2, 0 +_08085E18: .4byte 0x003C2A57 +_08085E1C: + strh r5, [r7, #8] +_08085E1E: + ldr r2, _08085E30 @ =gPlayer + cmp r5, #0 + beq _08085E34 + movs r1, #0xc + ldrsh r0, [r4, r1] + cmp r0, #0 + bgt _08085E3C + b _08085E4E + .align 2, 0 +_08085E30: .4byte gPlayer +_08085E34: + movs r3, #0xc + ldrsh r0, [r2, r3] + cmp r0, #0 + ble _08085E4E +_08085E3C: + cmp r5, #0 + beq _08085E48 + movs r0, #0xf0 + lsls r0, r0, #3 + strh r0, [r4, #0xc] + b _08085E60 +_08085E48: + movs r0, #0xf0 + lsls r0, r0, #3 + b _08085E5E +_08085E4E: + cmp r5, #0 + beq _08085E5C + ldr r0, _08085E58 @ =0x0000F880 + strh r0, [r4, #0xc] + b _08085E60 + .align 2, 0 +_08085E58: .4byte 0x0000F880 +_08085E5C: + ldr r0, _08085E6C @ =0x0000F880 +_08085E5E: + strh r0, [r2, #0xc] +_08085E60: + cmp r5, #0 + beq _08085E70 + movs r0, #0 + strh r0, [r4, #0x38] + b _08085E72 + .align 2, 0 +_08085E6C: .4byte 0x0000F880 +_08085E70: + strh r5, [r2, #0x38] +_08085E72: + cmp r5, #0 + beq _08085E7C + movs r0, #0 + strh r0, [r4, #0x3a] + b _08085E7E +_08085E7C: + strh r5, [r2, #0x3a] +_08085E7E: + adds r0, r2, #0 + cmp r5, #0 + beq _08085E86 + ldr r0, _08085E98 @ =gPartner +_08085E86: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _08085EA0 + movs r0, #0x21 + ldr r1, _08085E9C @ =gPartner + 0x40 + strb r0, [r1] + b _08085EA6 + .align 2, 0 +_08085E98: .4byte gPartner +_08085E9C: .4byte gPartner + 0x40 +_08085EA0: + movs r0, #0x21 + ldr r2, _08085EB8 @ =gPlayer + 0x40 + strb r0, [r2] +_08085EA6: + cmp r5, #0 + beq _08085EBC + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + b _08085EC6 + .align 2, 0 +_08085EB8: .4byte gPlayer + 0x40 +_08085EBC: + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r7, #0x10] +_08085EC6: + cmp r5, #0 + beq _08085EDC + ldr r3, _08085ED8 @ =gPartner + 0x26 + ldrb r1, [r3] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r3] + b _08085EE8_continue + .align 2, 0 +_08085ED8: .4byte gPartner + 0x26 +_08085EDC: + ldr r0, _08085F1C @ =gPlayer + 0x26 + ldrb r1, [r0] + movs r0, #0x80 + orrs r0, r1 + ldr r1, _08085F1C @ =gPlayer + 0x26 + strb r0, [r1] +_08085EE8_continue: + adds r5, #1 + ldr r0, _08085F20 @ =gNumSingleplayerCharacters + movs r1, #0 + ldrsb r1, [r0, r1] + adds r2, r0, #0 + cmp r5, r1 + bge _08085EF8 + b _08085C2C_loop +_08085EF8: + mov r3, sb + ldr r1, [r3, #0x70] + ldr r0, _08085F24 @ =0x003C2A57 + cmp r1, r0 + bls _08085F9C + movs r4, #0 + movs r0, #0x6e + add r0, sb + mov r8, r0 @ r8 = carousel->unk6E + ldr r7, [sp] @ r7 = sp00 = s1 + adds r7, #0x22 @ r7 = &s1->animSpeed + ldr r6, _08085F28 @ =gPartner + ldr r5, _08085F2C @ =gPlayer +_08085F12_loop: + cmp r4, #0 + beq _08085F30 + ldr r0, [r6, #0x10] + b _08085F32 + .align 2, 0 +_08085F1C: .4byte gPlayer + 0x26 +_08085F20: .4byte gNumSingleplayerCharacters +_08085F24: .4byte 0x003C2A57 +_08085F28: .4byte gPartner +_08085F2C: .4byte gPlayer +_08085F30: + ldr r0, [r5, #0x10] +_08085F32: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08085F8C + ldr r1, [sp, #0x1c] @ r1 = sp1C = &carousel->unk79 + ldrb r0, [r1] + asrs r0, r4 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08085F8C + mov r2, r8 @ r2 = r8 = carousel->unk6E + ldrh r0, [r2] + lsrs r0, r0, #2 + ldr r3, _08085F64 @ =0xFFFFF830 + adds r0, r0, r3 + lsls r0, r0, #1 + movs r1, #3 + bl Div + cmp r4, #0 + beq _08085F68 + strh r0, [r6, #8] + b _08085F6A + .align 2, 0 +_08085F64: .4byte 0xFFFFF830 +_08085F68: + strh r0, [r5, #8] +_08085F6A: + mov r1, r8 @ r1 = r8 = carousel->unk6E + ldrh r0, [r1] + lsrs r0, r0, #2 + ldr r2, _08085F84 @ =0xFFFFF830 + adds r0, r0, r2 + lsls r0, r0, #1 + movs r1, #3 + bl Div + cmp r4, #0 + beq _08085F88 + strh r0, [r6, #0xc] + b _08085F8A + .align 2, 0 +_08085F84: .4byte 0xFFFFF830 +_08085F88: + strh r0, [r5, #0xc] +_08085F8A: + ldr r2, _08085F98 @ =gNumSingleplayerCharacters +_08085F8C: + adds r4, #1 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r4, r0 + blt _08085F12_loop + b _08085FAC + .align 2, 0 +_08085F98: .4byte gNumSingleplayerCharacters +_08085F9C: + mov r1, sb + adds r1, #0x6e + ldrh r0, [r1] + adds r0, #0x40 + strh r0, [r1] + mov r8, r1 @ r8 = carousel->unk6E + ldr r7, [sp] @ r7 = sp00 = s1 + adds r7, #0x22 @ r7 = &s1->animSpeed +_08085FAC: + mov r3, r8 @ r3 = r8 = carousel->unk6E + ldrh r0, [r3] + movs r1, #0x80 + lsls r1, r1, #8 + cmp r0, r1 + bls _08085FBA + strh r1, [r3] +_08085FBA: + mov r4, r8 @ r4 = r8 = carousel->unk6E + ldrh r1, [r4] + lsls r0, r1, #3 + adds r0, r0, r1 + lsls r0, r0, #2 + subs r0, r0, r1 + movs r1, #0xa0 + lsls r1, r1, #8 + bl Div + strb r0, [r7] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x10 + bls _08085FDC + movs r0, #0x10 + strb r0, [r7] +_08085FDC: + mov r1, r8 @ r1 = r8 = carousel->unk6E + ldrh r0, [r1] + mov r2, sb + ldr r1, [r2, #0x70] + adds r1, r1, r0 + str r1, [r2, #0x70] + ldr r3, [sp, #0x18] @ r3 = sp18 = worldX << 16 + asrs r2, r3, #0x10 + ldr r4, _0808605C @ =gCamera + movs r0, #0 + ldrsh r1, [r4, r0] + movs r3, #0xb8 + lsls r3, r3, #1 + adds r0, r1, r3 + cmp r2, r0 + bgt _08086020 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + blt _08086020 + ldr r1, [sp, #0xc] @ r1 = sp0C = worldY + lsls r0, r1, #0x10 + asrs r3, r0, #0x10 + movs r2, #2 + ldrsh r1, [r4, r2] + movs r4, #0x90 + lsls r4, r4, #1 + adds r0, r1, r4 + cmp r3, r0 + bgt _08086020 + adds r0, r1, #0 + subs r0, #0x80 + cmp r3, r0 + bge _08086064 +_08086020: + ldr r1, [sp] @ r1 = sp00 = s1 + ldrh r0, [r1, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08086048 + ldr r2, [sp] @ r2 = sp00 = s1 + movs r3, #0x18 + ldrsh r0, [r2, r3] + adds r0, #0x80 + cmp r0, #0 + blt _08086048 + movs r4, #0x18 + ldrsh r1, [r2, r4] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08086064 +_08086048: + mov r1, sb + ldrb r0, [r1, #8] + ldr r2, [sp, #0x10] @ r2 = sp10 = me + strb r0, [r2] + ldr r0, _08086060 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0808640E + .align 2, 0 +_0808605C: .4byte gCamera +_08086060: .4byte gCurTask +_08086064: + movs r5, #0 + movs r3, #0x74 + add r3, sb + mov sl, r3 @ sl = &carousel->unk74 + ldr r4, _0808607C @ =gPartner + ldr r6, _08086080 @ =gPlayer + adds r7, r4, #0 + adds r7, #0x26 +_08086074_loop: + cmp r5, #0 + beq _08086084 + ldr r0, [r4, #0x10] + b _08086086 + .align 2, 0 +_0808607C: .4byte gPartner +_08086080: .4byte gPlayer +_08086084: + ldr r0, [r6, #0x10] +_08086086: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08086090 + b _08086314 +_08086090: + ldr r1, [sp, #0x1c] @ r1 = sp1C = &carousel->unk79 + ldrb r0, [r1] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _080860A0 + b _08086314 +_080860A0: + mov r2, sb + ldr r1, [r2, #0x70] + ldr r0, _080860D4 @ =0x003C2A57 + cmp r1, r0 + bhi _080860AC + b _0808637A_continue +_080860AC: + adds r0, #1 + str r0, [r2, #0x70] + adds r2, #0x76 + cmp r5, #0 + bne _080860BC + ldrh r0, [r2] + adds r0, #1 + strh r0, [r2] +_080860BC: + ldrh r1, [r2] + ldr r0, _080860D8 @ =0x0000012B + cmp r1, r0 + bhi _080860E8 + cmp r5, #0 + beq _080860DC + ldrh r0, [r4, #0x38] + movs r1, #0x30 + ands r0, r1 + cmp r0, #0 + bne _080860E8 + b _0808637A_continue + .align 2, 0 +_080860D4: .4byte 0x003C2A57 +_080860D8: .4byte 0x0000012B +_080860DC: + ldrh r0, [r6, #0x38] + movs r1, #0x30 + ands r0, r1 + cmp r0, #0 + bne _080860E8 + b _0808637A_continue +_080860E8: + movs r0, #0x96 + lsls r0, r0, #1 + strh r0, [r2] + cmp r5, #0 + beq _08086104 + ldrh r1, [r4, #0x38] + movs r0, #0x20 + ands r1, r0 + ldr r2, _08086100 @ =gPlayer + cmp r1, #0 + bne _08086110 + b _0808615C + .align 2, 0 +_08086100: .4byte gPlayer +_08086104: + ldrh r1, [r6, #0x38] + movs r0, #0x20 + ands r1, r0 + ldr r2, _08086120 @ =gPlayer + cmp r1, #0 + beq _0808615C +_08086110: + cmp r5, #0 + beq _08086124 + movs r3, #0xc + ldrsh r0, [r4, r3] + cmp r0, #0 + bgt _0808612C + b _08086156 + .align 2, 0 +_08086120: .4byte gPlayer +_08086124: + movs r1, #0xc + ldrsh r0, [r2, r1] + cmp r0, #0 + ble _08086156 +_0808612C: + cmp r5, #0 + beq _0808613A + movs r3, #0xc + ldrsh r0, [r4, r3] + rsbs r0, r0, #0 + strh r0, [r4, #0xc] + b _08086142 +_0808613A: + movs r1, #0xc + ldrsh r0, [r6, r1] + rsbs r0, r0, #0 + strh r0, [r6, #0xc] +_08086142: + cmp r5, #0 + beq _0808614C +_08086146: + movs r3, #0xc + ldrsh r0, [r4, r3] + b _08086150 +_0808614C: + movs r1, #0xc + ldrsh r0, [r2, r1] +_08086150: + cmp r5, #0 + bne _080861C2 + b _080861C6 +_08086156: + cmp r5, #0 + bne _08086146 + b _0808614C +_0808615C: + cmp r5, #0 + beq _0808616C + ldrh r0, [r4, #0x38] + movs r1, #0x10 + ands r0, r1 + cmp r0, #0 + bne _08086176 + b _08086198 +_0808616C: + ldrh r0, [r2, #0x38] + movs r1, #0x10 + ands r0, r1 + cmp r0, #0 + beq _08086198 +_08086176: + cmp r5, #0 + beq _08086184 + movs r3, #0xc + ldrsh r0, [r4, r3] + cmp r0, #0 + blt _080861A2 + b _08086156 +_08086184: + movs r1, #0xc + ldrsh r0, [r2, r1] + cmp r0, #0 + bge _08086156 + b _080861A2 +_0808618E: + movs r3, #0xc + ldrsh r0, [r4, r3] + rsbs r0, r0, #0 + strh r0, [r4, #0xc] + b _08086156 +_08086198: + mov r0, sb + adds r0, #0x78 + ldrb r0, [r0] + cmp r0, #0 + bne _080861B0 +_080861A2: + cmp r5, #0 + bne _0808618E + movs r1, #0xc + ldrsh r0, [r6, r1] + rsbs r0, r0, #0 + strh r0, [r6, #0xc] + b _08086156 +_080861B0: + cmp r5, #0 + beq _080861BA + movs r3, #0xc + ldrsh r0, [r4, r3] + b _080861BE +_080861BA: + movs r1, #0xc + ldrsh r0, [r2, r1] +_080861BE: + cmp r5, #0 + beq _080861C6 +_080861C2: + strh r0, [r4, #8] + b _080861C8 +_080861C6: + strh r0, [r2, #8] +_080861C8: + movs r1, #1 + lsls r1, r5 + ldr r2, [sp, #0x1c] @ r2 = sp1C = &carousel->unk79 + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] + ldr r0, _080861F0 @ =gPlayer + cmp r5, #0 + beq _080861DC + ldr r0, _080861F4 @ =gPartner +_080861DC: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _080861FC + ldr r0, [r4, #0x10] + ldr r1, _080861F8 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08086204 + .align 2, 0 +_080861F0: .4byte gPlayer +_080861F4: .4byte gPartner +_080861F8: .4byte 0xFFBFFFFF +_080861FC: + ldr r0, [r6, #0x10] + ldr r1, _08086218 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08086204: + ldr r2, _0808621C @ =gPlayer + cmp r5, #0 + beq _08086220 + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _0808622A + .align 2, 0 +_08086218: .4byte 0xFFBFFFFF +_0808621C: .4byte gPlayer +_08086220: + ldr r0, [r6, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_0808622A: + cmp r5, #0 + beq _08086238 + ldr r0, [r4, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r4, #0x10] + b _08086240 +_08086238: + ldr r0, [r6, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r6, #0x10] +_08086240: + cmp r5, #0 + beq _0808624E + ldr r0, [r4, #0x10] + movs r1, #0x10 + orrs r0, r1 + str r0, [r4, #0x10] + b _08086256 +_0808624E: + ldr r0, [r6, #0x10] + movs r1, #0x10 + orrs r0, r1 + str r0, [r6, #0x10] +_08086256: + cmp r5, #0 + beq _08086264 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _0808626C +_08086264: + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] +_0808626C: + cmp r5, #0 + beq _0808627C + movs r0, #4 + ldr r3, _08086278 @ =gPartner + 0x40 + strb r0, [r3] + b _08086284 + .align 2, 0 +_08086278: .4byte gPartner + 0x40 +_0808627C: + adds r1, r2, #0 + adds r1, #0x40 + movs r0, #4 + strb r0, [r1] +_08086284: + ldr r0, _080862B8 @ =gPlayer + cmp r5, #0 + beq _0808628C + ldr r0, _080862BC @ =gPartner +_0808628C: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _080862B8 @ =gPlayer + cmp r5, #0 + beq _0808629A + ldr r1, _080862BC @ =gPartner +_0808629A: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r2, _080862B8 @ =gPlayer + adds r1, r2, #0 + cmp r5, #0 + beq _080862A8 + ldr r1, _080862BC @ =gPartner +_080862A8: + movs r0, #0xe + strb r0, [r1, #0xf] + cmp r5, #0 + beq _080862C0 + movs r0, #0 + strh r0, [r4, #0xa] + b _080862C2 + .align 2, 0 +_080862B8: .4byte gPlayer +_080862BC: .4byte gPartner +_080862C0: + strh r5, [r2, #0xa] +_080862C2: + ldr r1, [sp, #0x18] @ r1 = sp18 = worldX << 16 + asrs r0, r1, #8 + cmp r5, #0 + beq _080862CE + str r0, [r4] + b _080862D0 +_080862CE: + str r0, [r2] +_080862D0: + ldr r0, _080862E8 @ =gCurTask + ldr r1, [r0] + ldr r0, _080862EC @ =Task_ExitCarousel + str r0, [r1, #8] + cmp r5, #0 + beq _080862F0 + ldrb r1, [r7] + movs r0, #0x7f + ands r0, r1 + strb r0, [r7] + b _080862FA + .align 2, 0 +_080862E8: .4byte gCurTask +_080862EC: .4byte Task_ExitCarousel +_080862F0: + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] +_080862FA: + ldr r1, _0808630C @ =gPlayer + 0x64 + cmp r5, #0 + beq _08086302 + ldr r1, _08086310 @ =gPartner + 0x64 +_08086302: + ldr r1, [r1] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r1, #0x26] + b _0808637A_continue + .align 2, 0 +_0808630C: .4byte gPlayer + 0x64 +_08086310: .4byte gPartner + 0x64 +_08086314: + cmp r5, #0 + beq _08086324 + ldr r0, [r4, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0808632E + b _0808637A_continue +_08086324: + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0808637A_continue +_0808632E: + mov r2, sb + ldr r0, [r2, #0x70] + ldr r1, _08086348 @ =0x003C2A58 + cmp r0, r1 + bls _0808633A + str r1, [r2, #0x70] +_0808633A: + cmp r5, #0 + beq _08086350 + ldr r0, [r4, #0x10] + ldr r1, _0808634C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08086358 + .align 2, 0 +_08086348: .4byte 0x003C2A58 +_0808634C: .4byte 0xFFBFFFFF +_08086350: + ldr r0, [r6, #0x10] + ldr r1, _080863B4 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08086358: + mov r2, sb + adds r2, #0x76 + cmp r5, #0 + bne _08086366 + ldrh r0, [r2] + adds r0, #1 + strh r0, [r2] +_08086366: + ldrh r1, [r2] + movs r3, #0x96 + lsls r3, r3, #0x11 + lsrs r0, r3, #0x10 + cmp r1, r0 + bls _0808637A_continue + ldr r0, _080863B8 @ =gCurTask + ldr r1, [r0] + ldr r0, _080863BC @ =Task_ExitCarousel + str r0, [r1, #8] +_0808637A_continue: + adds r5, #1 + ldr r0, _080863C0 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r5, r0 + bge _0808638A + b _08086074_loop +_0808638A: + mov r2, sl @ r2 = sl = &carousel->unk74 + ldrh r0, [r2] + adds r0, #1 + strh r0, [r2] + mov r4, r8 @ r4 = r8 = carousel->unk6E + ldrh r1, [r4] + ldr r0, _080863C4 @ =0x000031FF + cmp r1, r0 + bhi _080863C8 + cmp r1, #0 + beq _080863FC + ldrh r0, [r2] + movs r1, #0x19 + bl Mod + cmp r0, #0 + bne _080863FC + movs r0, #0xd1 + bl m4aSongNumStart + b _080863FC + .align 2, 0 +_080863B4: .4byte 0xFFBFFFFF +_080863B8: .4byte gCurTask +_080863BC: .4byte Task_ExitCarousel +_080863C0: .4byte gNumSingleplayerCharacters +_080863C4: .4byte 0x000031FF +_080863C8: + ldr r0, _080863E4 @ =0x00004AFF + cmp r1, r0 + bhi _080863E8 + ldrh r0, [r2] + movs r1, #0x10 + bl Mod + cmp r0, #0 + bne _080863FC + movs r0, #0xd2 + bl m4aSongNumStart + b _080863FC + .align 2, 0 +_080863E4: .4byte 0x00004AFF +_080863E8: + mov r1, sl @ r1 = sl = &carousel->unk74 + ldrh r0, [r1] + movs r1, #8 + bl Mod + cmp r0, #0 + bne _080863FC + movs r0, #0xd3 + bl m4aSongNumStart +_080863FC: + ldr r0, [sp] @ r0 = sp00 = s1 + bl UpdateSpriteAnimation + ldr r0, [sp] @ r0 = sp00 = s1 + bl DisplaySprite + ldr r0, [sp, #4] @ r0 = sp04 = s2 + bl DisplaySprite +_0808640E: + add sp, #0x20 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/grind_rail__Task_GrindRailStart.inc b/sa1/asm/non_matching/game/interactables/grind_rail__Task_GrindRailStart.inc new file mode 100644 index 0000000000..c5adde4077 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/grind_rail__Task_GrindRailStart.inc @@ -0,0 +1,194 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r3, _08023C04 @ =gPlayer + adds r0, r3, #0 + adds r0, #0x59 + ldrb r0, [r0] + mov ip, r0 + mov r0, ip + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _08023B2A + b _08023C70_return +_08023B2A: + ldr r0, _08023C08 @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r2, r0 + ldr r7, [r0] + ldr r1, _08023C0C @ =0x03000008 + adds r0, r2, r1 + ldrb r0, [r0] + mov sl, r0 + ldr r4, _08023C10 @ =0x03000004 + adds r0, r2, r4 + ldrh r1, [r0] + ldr r0, _08023C14 @ =0x03000006 + adds r2, r2, r0 + ldrh r2, [r2] + mov r4, sl + lsls r0, r4, #3 + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + ldrb r0, [r7, #1] + lsls r0, r0, #3 + lsls r2, r2, #8 + adds r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + ldr r6, [r3, #0x10] + movs r0, #0x80 + ands r0, r6 + cmp r0, #0 + beq _08023B70 + b _08023C70_return +_08023B70: + lsls r1, r1, #0x10 + asrs r5, r1, #0x10 + ldr r0, [r3] + asrs r4, r0, #8 + mov sb, r1 + lsls r2, r2, #0x10 + mov r8, r2 + cmp r5, r4 + bgt _08023C2A + ldrb r0, [r7, #5] + lsls r0, r0, #3 + adds r0, r5, r0 + cmp r0, r4 + blt _08023C2A + asrs r2, r2, #0x10 + ldr r0, [r3, #4] + asrs r1, r0, #8 + cmp r2, r1 + bgt _08023C2A + ldrb r0, [r7, #6] + lsls r0, r0, #3 + adds r0, r2, r0 + cmp r0, r1 + blt _08023C2A + movs r2, #0x80 + lsls r2, r2, #0x11 + adds r0, r6, #0 + ands r0, r2 + cmp r0, #0 + bne _08023C2A + movs r1, #0xa + ldrsh r0, [r3, r1] + cmp r0, #0 + blt _08023C2A + ldrh r1, [r3, #8] + movs r4, #8 + ldrsh r0, [r3, r4] + cmp r0, #0 + ble _08023C2A + cmp r0, #0x80 + bge _08023BC4 + movs r1, #0x80 +_08023BC4: + strh r1, [r3, #8] + orrs r6, r2 + str r6, [r3, #0x10] + adds r2, r3, #0 + adds r2, #0x27 + ldrb r0, [r2] + movs r1, #1 + eors r0, r1 + strb r0, [r2] + ldr r2, _08023C18 @ =gPlayerBodyPSI + ldr r0, [r2, #0x1c] + ldr r1, _08023C1C @ =0xFFFFCFFF + ands r0, r1 + movs r1, #0x80 + lsls r1, r1, #5 + orrs r0, r1 + str r0, [r2, #0x1c] + adds r2, r3, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2] + mov r1, ip + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + bne _08023C20 + movs r0, #0x86 + bl m4aSongNumStart + b _08023C26 + .align 2, 0 +_08023C04: .4byte gPlayer +_08023C08: .4byte gCurTask +_08023C0C: .4byte 0x03000008 +_08023C10: .4byte 0x03000004 +_08023C14: .4byte 0x03000006 +_08023C18: .4byte gPlayerBodyPSI +_08023C1C: .4byte 0xFFFFCFFF +_08023C20: + movs r0, #0x72 + bl m4aSongNumStart +_08023C26: + bl CreateGrindEffect +_08023C2A: + ldr r2, _08023C80 @ =gCamera + ldrh r0, [r2] + mov r3, sb + asrs r1, r3, #0x10 + subs r1, r1, r0 + ldrh r2, [r2, #2] + mov r4, r8 + asrs r0, r4, #0x10 + subs r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + lsls r1, r1, #0x10 + movs r0, #0x80 + lsls r0, r0, #0x10 + adds r1, r1, r0 + movs r0, #0xf8 + lsls r0, r0, #0x11 + cmp r1, r0 + bhi _08023C64 + lsls r0, r2, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08023C64 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08023C70_return +_08023C64: + mov r1, sl + strb r1, [r7] + ldr r0, _08023C84 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy +_08023C70_return: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08023C80: .4byte gCamera +_08023C84: .4byte gCurTask + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/half_pipe__sub_804D4A0.inc b/sa1/asm/non_matching/game/interactables/half_pipe__sub_804D4A0.inc new file mode 100644 index 0000000000..d366ce7566 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/half_pipe__sub_804D4A0.inc @@ -0,0 +1,189 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r3, r0, #0 @ r3 = param0 + adds r4, r2, #0 @ r4 = p + ldr r0, _0804D4E8 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 @ r1 = halfpipe + mov r8, r1 @ r8 = r1 = halfpipe + movs r6, #0 + ldr r0, _0804D4EC @ =0x0000029F + cmp r3, r0 + bhi _0804D550 + movs r1, #8 + ldrsh r0, [r4, r1] + cmp r0, #0 + bge _0804D4CA + rsbs r0, r0, #0 +_0804D4CA: + ldr r2, _0804D4F0 @ =0xFFFFFDC0 + adds r0, r0, r2 + lsls r0, r0, #0xe + lsrs r1, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0 + blt _0804D4F4 + movs r2, #0x80 + lsls r2, r2, #1 + cmp r0, r2 + ble _0804D4E2 + adds r1, r2, #0 +_0804D4E2: + adds r0, r1, #0 + b _0804D4F6 + .align 2, 0 +_0804D4E8: .4byte gCurTask +_0804D4EC: .4byte 0x0000029F +_0804D4F0: .4byte 0xFFFFFDC0 +_0804D4F4: + movs r0, #0 +_0804D4F6: + ldr r7, _0804D518 @ =gSineTable + lsls r0, r0, #1 + adds r0, r0, r7 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r6, r0, #0x16 + movs r5, #0x80 + lsls r5, r5, #1 + cmp r6, r5 + ble _0804D50C + adds r6, r5, #0 +_0804D50C: + ldr r0, _0804D51C @ =0x0000014F + cmp r3, r0 + bgt _0804D520 + lsls r0, r3, #0xf + b _0804D526 + .align 2, 0 +_0804D518: .4byte gSineTable +_0804D51C: .4byte 0x0000014F +_0804D520: + ldr r2, _0804D58C @ =0xFFFFFD60 + adds r0, r3, r2 + lsls r0, r0, #0xf +_0804D526: + movs r1, #0xa8 + lsls r1, r1, #1 + bl __divsi3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x16 + adds r0, r0, r5 + lsls r0, r0, #1 + adds r0, r0, r7 + movs r2, #0 + ldrsh r1, [r0, r2] + rsbs r1, r1, #0 @ -COS_24_8(Div(divParam0, 0x150)); + lsls r0, r1, #1 + adds r0, r0, r1 + asrs r0, r0, #2 + movs r1, #0xc0 + lsls r1, r1, #6 + adds r0, r0, r1 + muls r0, r6, r0 + asrs r0, r0, #8 + adds r6, r0, #0 +_0804D550: + ldr r0, [r4, #0x10] + movs r3, #4 + ands r0, r3 + cmp r0, #0 + bne _0804D5B8 +__0804D55A: + adds r0, r4, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0804D5B8 + adds r1, r4, #0 + adds r1, #0x40 + ldrb r2, [r1] + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #4 + beq _0804D582 + adds r0, r2, #0 + subs r0, #0x18 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #2 + bhi _0804D5B8 +_0804D582: + ldr r0, _0804D590 @ =0x000007FF + cmp r6, r0 + bgt _0804D594 + strb r3, [r1] + b _0804D5B8 + .align 2, 0 +_0804D58C: .4byte 0xFFFFFD60 +_0804D590: .4byte 0x000007FF +_0804D594: + ldr r0, _0804D5A0 @ =0x000017FF + cmp r6, r0 + bgt _0804D5A4 + movs r0, #0x18 + b _0804D5B6 + .align 2, 0 +_0804D5A0: .4byte 0x000017FF +_0804D5A4: + ldr r0, _0804D5B0 @ =0x00002FFF + cmp r6, r0 + bgt _0804D5B4 + movs r0, #0x19 + b _0804D5B6 + .align 2, 0 +_0804D5B0: .4byte 0x00002FFF +_0804D5B4: + movs r0, #0x1a +_0804D5B6: + strb r0, [r1] +_0804D5B8: + ldr r0, [r4, #0x10] + movs r1, #3 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + movs r0, #0 + strh r0, [r4, #0xa] + mov r2, r8 + ldr r1, [r2, #0x1c] + subs r1, r1, r6 + movs r0, #0xf + ldrsb r0, [r4, r0] + lsls r0, r0, #8 + subs r1, r1, r0 + ldr r0, [r4, #4] + subs r1, r1, r0 + ldr r2, _0804D5FC @ =0xFFFFFA00 + adds r3, r0, #0 + cmp r1, r2 + blt _0804D5EA + adds r0, r1, #0 + movs r2, #0xc0 + lsls r2, r2, #3 + cmp r0, r2 + ble _0804D5EC +_0804D5EA: + adds r0, r2, #0 +_0804D5EC: + adds r0, r3, r0 + str r0, [r4, #4] + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0804D5FC: .4byte 0xFFFFFA00 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/hook__Task_SwingingHook.inc b/sa1/asm/non_matching/game/interactables/hook__Task_SwingingHook.inc new file mode 100644 index 0000000000..76f01c42c1 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/hook__Task_SwingingHook.inc @@ -0,0 +1,1399 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x34 + ldr r0, _080879D8 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r4, r0 + str r0, [sp, #0x24] @ sp24 = hook + ldr r0, _080879DC @ =0x0300000C + adds r0, r0, r4 + mov sb, r0 @ sb = s1 + ldr r1, _080879E0 @ =0x0300009C + adds r1, r4, r1 + str r1, [sp] @ sp00 = transform + ldr r2, _080879E4 @ =0x0300003C + adds r7, r4, r2 @ r7 = s2 + ldr r3, _080879E8 @ =0x0300006C + adds r3, r3, r4 + mov r8, r3 @ r8 = s3 + ldr r5, [sp, #0x24] @ r5 = sp24 = hook + ldr r5, [r5] @ r5 = me + str r5, [sp, #0x20] @ sp20 = me + movs r0, #0 + str r0, [sp, #0x18] @ sp18 = 0 + movs r1, #0 + str r1, [sp, #0x1c] + ldr r2, [sp, #0x24] @ r2 = sp24 = hook + ldrb r0, [r2, #8] + lsls r0, r0, #3 + ldrh r1, [r2, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #4] @ sp04 = worldX + ldrb r0, [r5, #1] + lsls r0, r0, #3 + ldrh r1, [r2, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0xc] @ sp0C = worldY + ldr r3, [sp, #4] + str r3, [sp, #8] @ sp08 = worldX + str r0, [sp, #0x10] @ sp10 = worldY + ldr r0, _080879EC @ =gStageTime + ldr r0, [r0] + lsls r0, r0, #3 + movs r1, #3 + bl Div + ldr r5, _080879F0 @ =0x030000B2 + adds r4, r4, r5 + ldrh r1, [r4] + adds r0, r0, r1 + movs r1, #0x80 + lsls r1, r1, #2 + bl Mod + adds r5, r0, #0 @ r5 = modRes = Mod(Div(gStageTime * 8, 3) + hook->qUnkB2, Q(2)); + movs r0, #0x80 + lsls r0, r0, #1 + cmp r5, r0 + bls _080879FC + ldr r1, _080879F4 @ =0xFFFFFF00 + adds r5, r5, r1 + subs r5, r0, r5 + ldr r0, _080879F8 @ =gSineTable + lsls r1, r5, #2 + adds r1, r1, r0 + ldrh r1, [r1] + lsrs r2, r1, #8 + adds r3, r0, #0 @ r3 = r0 = gSineTable + b _08087A10 + .align 2, 0 +_080879D8: .4byte gCurTask +_080879DC: .4byte 0x0300000C +_080879E0: .4byte 0x0300009C +_080879E4: .4byte 0x0300003C +_080879E8: .4byte 0x0300006C +_080879EC: .4byte gStageTime +_080879F0: .4byte 0x030000B2 +_080879F4: .4byte 0xFFFFFF00 +_080879F8: .4byte gSineTable +_080879FC: + ldr r1, _08087A2C @ =gSineTable + lsls r0, r5, #2 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + adds r3, r1, #0 @ r3 = r1 = gSineTable +_08087A10: + adds r0, r5, #0 + subs r0, #0x7e + ldr r1, _08087A30 @ =0x000001FF + ands r0, r1 + lsls r0, r0, #2 + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r5, r0, #0x17 + ands r5, r1 + cmp r5, #0xff + bhi _08087A34 + lsrs r5, r5, #1 + b _08087A3E + .align 2, 0 +_08087A2C: .4byte gSineTable +_08087A30: .4byte 0x000001FF +_08087A34: + movs r1, #0x80 + lsls r1, r1, #2 + subs r0, r1, r5 + lsrs r0, r0, #1 + subs r5, r1, r0 +_08087A3E: + lsls r5, r5, #1 + mov ip, r5 @ ip = r5 = modRes + ldr r0, _08087B24 @ =0x000003FF + ands r0, r5 + lsls r1, r0, #1 + adds r1, r1, r3 + movs r5, #0 + ldrsh r4, [r1, r5] + str r4, [sp, #0x14] @ sp14 = sinVal = SIN(modRes & ONE_CYCLE) + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + adds r0, r0, r3 + movs r3, #0 + ldrsh r1, [r0, r3] + lsls r0, r2, #0x18 + asrs r0, r0, #0x18 + adds r1, r1, r0 + mov sl, r1 @ sl = cosVal = SIN(modRes & ONE_CYCLE) + ldr r6, _08087B28 @ =gCamera + ldrh r0, [r6] + ldr r5, [sp, #4] @ r5 = sp04 = worldX + lsls r4, r5, #0x10 + asrs r2, r4, #0x10 + subs r0, r2, r0 + mov r1, sb + strh r0, [r1, #0x16] + ldrh r0, [r6, #2] + ldr r5, [sp, #0xc] @ r5 = sp0C = worldY + lsls r3, r5, #0x10 + asrs r1, r3, #0x10 + subs r0, r1, r0 + mov r5, sb + strh r0, [r5, #0x18] + ldrh r0, [r6] + subs r2, r2, r0 + mov r0, r8 @ r0 = r8 = s3 + strh r2, [r0, #0x16] + ldrh r0, [r6, #2] + subs r1, r1, r0 + subs r1, #8 + mov r2, r8 @ r2 = r8 = s3 + strh r1, [r2, #0x18] + ldr r5, [sp, #8] @ r5 = sp08 = worldX + lsls r0, r5, #0x10 + asrs r2, r0, #0x10 + movs r0, #0 + ldrsh r1, [r6, r0] + movs r5, #0xb8 + lsls r5, r5, #1 + adds r0, r1, r5 + str r4, [sp, #0x2c] @ sp2C = worldX << 16 + str r3, [sp, #0x30] @ sp30 = worldY << 16 + mov r3, ip @ r3 = ip = modRes + str r3, [sp, #0x28] + cmp r2, r0 + bgt _08087AD8 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + blt _08087AD8 + ldr r4, [sp, #0x10] @ r4 = sp10 = worldY + lsls r0, r4, #0x10 + asrs r2, r0, #0x10 + movs r5, #2 + ldrsh r1, [r6, r5] + movs r3, #0x90 + lsls r3, r3, #1 + adds r0, r1, r3 + cmp r2, r0 + bgt _08087AD8 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + blt _08087AD8 + b _08087CE4 +_08087AD8: + mov r4, sb + ldrh r0, [r4, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08087B00 + movs r5, #0x18 + ldrsh r0, [r4, r5] + adds r0, #0x80 + cmp r0, #0 + blt _08087B00 + movs r0, #0x18 + ldrsh r1, [r4, r0] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + bgt _08087B00 + b _08087CE4 +_08087B00: + movs r4, #0 + ldr r5, _08087B2C @ =gPartner + ldr r6, _08087B30 @ =gPlayer + movs r1, #0x59 + adds r1, r1, r5 + mov sl, r1 @ sl = &gPartner->character + movs r2, #0x40 + adds r2, r2, r5 + mov r8, r2 @ r8 = &gPartner->charState + movs r7, #0 @ r7 = 0 +_08087B14_loop: + cmp r4, #0 + beq _08087B34 + ldr r0, [r5, #0x10] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + bne _08087B40 + b _08087CB0 + .align 2, 0 +_08087B24: .4byte 0x000003FF +_08087B28: .4byte gCamera +_08087B2C: .4byte gPartner +_08087B30: .4byte gPlayer +_08087B34: + ldr r0, [r6, #0x10] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + bne _08087B40 + b _08087CB0 +_08087B40: + cmp r4, #0 + beq _08087B4C + ldr r0, [r5, #0x28] + cmp r0, sb + beq _08087B54 + b _08087CB0 +_08087B4C: + ldr r0, [r6, #0x28] + cmp r0, sb + beq _08087B54 + b _08087CB0 +_08087B54: + ldr r0, _08087B70 @ =gPlayer + cmp r4, #0 + beq _08087B5C + ldr r0, _08087B74 @ =gPartner +_08087B5C: + bl Player_TransitionCancelFlyingAndBoost + cmp r4, #0 + beq _08087B7C + ldr r0, [r5, #0x10] + ldr r1, _08087B78 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] + b _08087B84 + .align 2, 0 +_08087B70: .4byte gPlayer +_08087B74: .4byte gPartner +_08087B78: .4byte 0xFFBFFFFF +_08087B7C: + ldr r0, [r6, #0x10] + ldr r1, _08087B94 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08087B84: + ldr r3, _08087B98 @ =gPlayer + cmp r4, #0 + beq _08087B9C + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] + b _08087BA4 + .align 2, 0 +_08087B94: .4byte 0xFFBFFFFF +_08087B98: .4byte gPlayer +_08087B9C: + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] +_08087BA4: + cmp r4, #0 + beq _08087BB4 + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _08087BBE +_08087BB4: + ldr r0, [r6, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08087BBE: + cmp r4, #0 + beq _08087BC6 + str r7, [r5, #0x28] + b _08087BC8 +_08087BC6: + str r4, [r3, #0x28] +_08087BC8: + cmp r4, #0 + beq _08087BD0 + strh r7, [r5, #8] + b _08087BD2 +_08087BD0: + strh r4, [r3, #8] +_08087BD2: + cmp r4, #0 + beq _08087BDA + strh r7, [r5, #0xc] + b _08087BDC +_08087BDA: + strh r4, [r3, #0xc] +_08087BDC: + cmp r4, #0 + beq _08087BE4 + strh r7, [r5, #0xa] + b _08087BE6 +_08087BE4: + strh r4, [r3, #0xa] +_08087BE6: + cmp r4, #0 + beq _08087BF6 + mov r1, sl @ r1 = sl = gPartner->character + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #3 + bne _08087C04 + b _08087C5C +_08087BF6: + adds r0, r3, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + beq _08087C5C +_08087C04: + cmp r4, #0 + beq _08087C12 + ldr r0, [r5, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r5, #0x10] + b _08087C1A +_08087C12: + ldr r0, [r6, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r6, #0x10] +_08087C1A: + cmp r4, #0 + beq _08087C26 + movs r0, #5 + mov r2, r8 + strb r0, [r2] + b _08087C2E +_08087C26: + adds r1, r3, #0 + adds r1, #0x40 + movs r0, #5 + strb r0, [r1] +_08087C2E: + ldr r0, _08087C54 @ =gPlayer + cmp r4, #0 + beq _08087C36 + ldr r0, _08087C58 @ =gPartner +_08087C36: + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + ldr r1, _08087C54 @ =gPlayer + cmp r4, #0 + beq _08087C44 + ldr r1, _08087C58 @ =gPartner +_08087C44: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08087C54 @ =gPlayer + cmp r4, #0 + beq _08087C50 + ldr r1, _08087C58 @ =gPartner +_08087C50: + movs r0, #9 + b _08087CAE + .align 2, 0 +_08087C54: .4byte gPlayer +_08087C58: .4byte gPartner +_08087C5C: + cmp r4, #0 + beq _08087C6C + ldr r0, [r5, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _08087C76 +_08087C6C: + ldr r0, [r6, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08087C76: + cmp r4, #0 + beq _08087C82 + movs r0, #0x55 + mov r3, r8 + strb r0, [r3] + b _08087C8A +_08087C82: + adds r1, r3, #0 + adds r1, #0x40 + movs r0, #0x55 + strb r0, [r1] +_08087C8A: + ldr r0, _08087CD4 @ =gPlayer + cmp r4, #0 + beq _08087C92 + ldr r0, _08087CD8 @ =gPartner +_08087C92: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _08087CD4 @ =gPlayer + cmp r4, #0 + beq _08087CA0 + ldr r1, _08087CD8 @ =gPartner +_08087CA0: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08087CD4 @ =gPlayer + cmp r4, #0 + beq _08087CAC + ldr r1, _08087CD8 @ =gPartner +_08087CAC: + movs r0, #0xe +_08087CAE: + strb r0, [r1, #0xf] +_08087CB0: + adds r4, #1 + ldr r0, _08087CDC @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + bge _08087CC0 + b _08087B14_loop +_08087CC0: + ldr r4, [sp, #0x24] @ r4 = sp24 = hook + ldrb r0, [r4, #8] + ldr r5, [sp, #0x20] @ r5 = sp20 = me + strb r0, [r5] + ldr r0, _08087CE0 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08088350 + .align 2, 0 +_08087CD4: .4byte gPlayer +_08087CD8: .4byte gPartner +_08087CDC: .4byte gNumSingleplayerCharacters +_08087CE0: .4byte gCurTask +_08087CE4: + mov r0, r8 + bl DisplaySprite + movs r4, #0 + ldr r0, [sp, #0x24] @ r0 = sp24 = hook + adds r0, #0xb4 + mov r8, r0 @ r8 = &hook->unkB4 + movs r5, #0x5a @ r5 = 90 + ldr r6, _08087D40 @ =gCamera +_08087CF6_loop: + ldr r1, [sp, #0x14] @ r1 = sp14 = sinVal + adds r0, r1, #0 + muls r0, r5, r0 + movs r1, #0x64 + bl Div + ldr r2, [sp, #0x18] + adds r2, r2, r0 + str r2, [sp, #0x18] @ sp18 += Div(sinVal * 90, 100); + mov r0, sl @ r0 = sl = cosVal + muls r0, r5, r0 + movs r1, #0x64 + bl Div + ldr r3, [sp, #0x1c] + adds r3, r3, r0 + str r3, [sp, #0x1c] @ sp1C += Div(cosVal * 90, 100); + ldrh r1, [r6] + ldr r2, [sp, #0x2c] @ r2 = sp2C = worldX << 16 + asrs r0, r2, #0x10 + subs r0, r0, r1 + ldr r3, [sp, #0x18] + asrs r1, r3, #0xa + adds r0, r0, r1 + strh r0, [r7, #0x16] + ldrh r1, [r6, #2] + ldr r2, [sp, #0x30] @ r2 = sp30 = worldY << 16 + asrs r0, r2, #0x10 + subs r0, r0, r1 + ldr r3, [sp, #0x1c] + asrs r1, r3, #0xa + adds r0, r0, r1 + strh r0, [r7, #0x18] + cmp r4, #4 + bne _08087D44 + movs r0, #0xc0 + b _08087D48 + .align 2, 0 +_08087D40: .4byte gCamera +_08087D44: + movs r0, #0x90 + lsls r0, r0, #3 +_08087D48: + strh r0, [r7, #0x1a] + adds r0, r7, #0 + bl DisplaySprite + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #2 + bls _08087CF6_loop + movs r4, #0x6e + ldr r5, [sp, #0x14] + adds r0, r5, #0 + muls r0, r4, r0 + movs r1, #0x64 + bl Div + ldr r1, [sp, #0x18] + adds r1, r1, r0 + str r1, [sp, #0x18] + mov r0, sl + muls r0, r4, r0 + movs r1, #0x64 + bl Div + ldr r2, [sp, #0x1c] + adds r2, r2, r0 + str r2, [sp, #0x1c] + movs r5, #0 + ldr r4, _08087D90 @ =gPartner + ldr r6, _08087D94 @ =gPlayer + mov sl, r5 @ sl = r5 = 0 + movs r7, #1 +_08087D88_loop: + cmp r5, #0 + beq _08087D98 + ldr r0, [r4, #0x10] + b _08087D9A + .align 2, 0 +_08087D90: .4byte gPartner +_08087D94: .4byte gPlayer +_08087D98: + ldr r0, [r6, #0x10] +_08087D9A: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08087DA4 + b _08088230 +_08087DA4: + mov r3, r8 + ldrb r0, [r3] + asrs r0, r5 + ands r0, r7 + cmp r0, #0 + bne _08087DB2 + b _080880B2 +_08087DB2: + ldr r0, [sp, #0x18] + movs r1, #0xc3 + lsls r1, r1, #2 + bl Div + ldr r2, [sp, #0x2c] @ r2 = sp2C = worldX << 16 + asrs r1, r2, #0x10 + adds r1, r1, r0 + subs r1, #4 + lsls r1, r1, #8 + cmp r5, #0 + beq _08087DCE + str r1, [r4] + b _08087DD0 +_08087DCE: + str r1, [r6] +_08087DD0: + cmp r5, #0 + beq _08087DDE + ldr r0, [r4, #0x10] + ands r0, r7 + cmp r0, #0 + bne _08087DE6 + b _08087E00 +_08087DDE: + ldr r0, [r6, #0x10] + ands r0, r7 + cmp r0, #0 + beq _08087E00 +_08087DE6: + cmp r5, #0 + beq _08087DF6 + ldr r0, [r4] + movs r3, #0xa0 + lsls r3, r3, #4 + adds r0, r0, r3 + str r0, [r4] + b _08087E00 +_08087DF6: + ldr r0, [r6] + movs r1, #0xa0 + lsls r1, r1, #4 + adds r0, r0, r1 + str r0, [r6] +_08087E00: + ldr r0, [sp, #0x1c] + movs r1, #0xaa + lsls r1, r1, #2 + bl Div + ldr r2, [sp, #0x30] @ r2 = sp30 = worldY << 16 + asrs r1, r2, #0x10 + adds r1, r1, r0 + adds r1, #2 + lsls r1, r1, #8 + cmp r5, #0 + beq _08087E1C + str r1, [r4, #4] + b _08087E1E +_08087E1C: + str r1, [r6, #4] +_08087E1E: + cmp r5, #0 + beq _08087E28 + mov r3, sl @ r3 = sl = 0 + strb r3, [r4, #0x14] + b _08087E2A +_08087E28: + strb r5, [r6, #0x14] +_08087E2A: + ldr r0, _08087E3C @ =gPlayerControls + ldrh r1, [r0] + cmp r5, #0 + beq _08087E40 + ldrh r0, [r4, #0x3a] + ands r0, r1 + cmp r0, #0 + bne _08087E4A + b _080880A4 + .align 2, 0 +_08087E3C: .4byte gPlayerControls +_08087E40: + ldrh r0, [r6, #0x3a] + ands r0, r1 + cmp r0, #0 + bne _08087E4A + b _080880A4 +_08087E4A: + ldr r0, _08087E64 @ =gPlayer + cmp r5, #0 + beq _08087E52 + ldr r0, _08087E68 @ =gPartner +_08087E52: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _08087E70 + ldr r0, [r4, #0x10] + ldr r1, _08087E6C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08087E78 + .align 2, 0 +_08087E64: .4byte gPlayer +_08087E68: .4byte gPartner +_08087E6C: .4byte 0xFFBFFFFF +_08087E70: + ldr r0, [r6, #0x10] + ldr r1, _08087E88 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08087E78: + ldr r3, _08087E8C @ =gPlayer + cmp r5, #0 + beq _08087E90 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _08087E98 + .align 2, 0 +_08087E88: .4byte 0xFFBFFFFF +_08087E8C: .4byte gPlayer +_08087E90: + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] +_08087E98: + cmp r5, #0 + beq _08087EA8 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #1 + orrs r0, r1 + str r0, [r4, #0x10] + b _08087EB2 +_08087EA8: + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #1 + orrs r0, r1 + str r0, [r6, #0x10] +_08087EB2: + cmp r5, #0 + beq _08087EBE + movs r0, #0xfb + lsls r0, r0, #8 + strh r0, [r4, #0xa] + b _08087EC4 +_08087EBE: + movs r0, #0xfb + lsls r0, r0, #8 + strh r0, [r3, #0xa] +_08087EC4: + cmp r5, #0 + beq _08087ECE + mov r0, sl @ r0 = sl = 0 + str r0, [r4, #0x28] + b _08087ED0 +_08087ECE: + str r5, [r3, #0x28] +_08087ED0: + cmp r5, #0 + beq _08087EE0 + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _08087EEA +_08087EE0: + ldr r0, [r6, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08087EEA: + cmp r5, #0 + beq _08087EF8 + ldr r2, _08087EF4 @ =gPartner + 0x26 + b _08087EFC + .align 2, 0 +_08087EF4: .4byte gPartner + 0x26 +_08087EF8: + adds r2, r3, #0 + adds r2, #0x26 +_08087EFC: + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + cmp r5, #0 + beq _08087F14 + ldrh r0, [r4, #0x38] + movs r1, #0x30 + ands r0, r1 + cmp r0, #0 + bne _08087F1E + b _08087FB0 +_08087F14: + ldrh r0, [r3, #0x38] + movs r1, #0x30 + ands r0, r1 + cmp r0, #0 + beq _08087FB0 +_08087F1E: + cmp r5, #0 + beq _08087F2E + ldrh r0, [r4, #0x38] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + bne _08087F38 + b _08087F70 +_08087F2E: + ldrh r0, [r3, #0x38] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + beq _08087F70 +_08087F38: + cmp r5, #0 + beq _08087F44 + ldr r0, [r4, #0x10] + orrs r0, r7 + str r0, [r4, #0x10] + b _08087F4A +_08087F44: + ldr r0, [r6, #0x10] + orrs r0, r7 + str r0, [r6, #0x10] +_08087F4A: + cmp r5, #0 + beq _08087F56 + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r4, #8] + b _08087F5C +_08087F56: + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r3, #8] +_08087F5C: + cmp r5, #0 + beq _08087F68 + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r4, #0xc] + b _08087FC8 +_08087F68: + movs r0, #0xfe + lsls r0, r0, #8 + strh r0, [r3, #0xc] + b _08087FC8 +_08087F70: + cmp r5, #0 + beq _08087F80 + ldr r0, [r4, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + b _08087F8A +_08087F80: + ldr r0, [r6, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08087F8A: + cmp r5, #0 + beq _08087F96 + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r4, #8] + b _08087F9C +_08087F96: + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r3, #8] +_08087F9C: + cmp r5, #0 + beq _08087FA8 + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r4, #0xc] + b _08087FC8 +_08087FA8: + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r3, #0xc] + b _08087FC8 +_08087FB0: + cmp r5, #0 + beq _08087FBA + mov r0, sl @ r0 = sl = 0 + strh r0, [r4, #8] + b _08087FBC +_08087FBA: + strh r5, [r3, #8] +_08087FBC: + cmp r5, #0 + beq _08087FC6 + mov r1, sl @ r1 = sl = 0 + strh r1, [r4, #0xc] + b _08087FC8 +_08087FC6: + strh r5, [r3, #0xc] +_08087FC8: + cmp r5, #0 + beq _08087FDC + ldr r2, _08087FD8 @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #3 + bne _08087FEA + b _08088048 + .align 2, 0 +_08087FD8: .4byte gPartner + 0x59 +_08087FDC: + adds r0, r3, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + beq _08088048 +_08087FEA: + cmp r5, #0 + beq _08087FF8 + ldr r0, [r4, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r4, #0x10] + b _08088000 +_08087FF8: + ldr r0, [r6, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r6, #0x10] +_08088000: + cmp r5, #0 + beq _08088010 + movs r0, #5 + ldr r3, _0808800C @ =gPartner + 0x40 + strb r0, [r3] + b _08088018 + .align 2, 0 +_0808800C: .4byte gPartner + 0x40 +_08088010: + adds r1, r3, #0 + adds r1, #0x40 + movs r0, #5 + strb r0, [r1] +_08088018: + ldr r0, _08088040 @ =gPlayer + cmp r5, #0 + beq _08088020 + ldr r0, _08088044 @ =gPartner +_08088020: + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + ldr r1, _08088040 @ =gPlayer + cmp r5, #0 + beq _0808802E + ldr r1, _08088044 @ =gPartner +_0808802E: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08088040 @ =gPlayer + cmp r5, #0 + beq _0808803A + ldr r1, _08088044 @ =gPartner +_0808803A: + movs r0, #9 + b _08088084 + .align 2, 0 +_08088040: .4byte gPlayer +_08088044: .4byte gPartner +_08088048: + cmp r5, #0 + beq _08088058 + movs r0, #0x55 + ldr r1, _08088054 @ =gPartner + 0x40 + b _0808805E + .align 2, 0 +_08088054: .4byte gPartner + 0x40 +_08088058: + adds r1, r3, #0 + adds r1, #0x40 + movs r0, #0x55 +_0808805E: + strb r0, [r1] + ldr r0, _0808809C @ =gPlayer + cmp r5, #0 + beq _08088068 + ldr r0, _080880A0 @ =gPartner +_08088068: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _0808809C @ =gPlayer + cmp r5, #0 + beq _08088076 + ldr r1, _080880A0 @ =gPartner +_08088076: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _0808809C @ =gPlayer + cmp r5, #0 + beq _08088082 + ldr r1, _080880A0 @ =gPartner +_08088082: + movs r0, #0xe +_08088084: + strb r0, [r1, #0xf] + ldr r0, [sp, #0x24] @ r0 = sp24 = hook + adds r0, #0xb0 + adds r0, r0, r5 + movs r1, #0x14 + strb r1, [r0] + adds r1, r7, #0 + lsls r1, r5 + mov r2, r8 + ldrb r0, [r2] + bics r0, r1 + b _08088292 + .align 2, 0 +_0808809C: .4byte gPlayer +_080880A0: .4byte gPartner +_080880A4: + cmp r5, #0 + beq _080880AE + mov r3, sl @ r3 = sl = 0 + strh r3, [r4, #0xa] + b _08088294_continue +_080880AE: + strh r5, [r6, #0xa] + b _08088294_continue +_080880B2: + ldr r0, [sp, #0x24] @ r0 = sp24 = hook + adds r0, #0xb0 + adds r1, r0, r5 + ldrb r0, [r1] + cmp r0, #0 + beq _080880C4 + subs r0, #1 + strb r0, [r1] + b _08088294_continue +_080880C4: + ldr r0, [sp, #0x18] + ldr r1, _080880E4 @ =950 + bl Div + ldr r2, [sp, #0x2c] @ r2 = sp2C = worldX << 16 + asrs r1, r2, #0x10 + adds r1, r1, r0 + subs r1, #0x10 + cmp r5, #0 + beq _080880E8 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + ble _080880F2 + b _08088294_continue + .align 2, 0 +_080880E4: .4byte 0x000003B6 +_080880E8: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + ble _080880F2 + b _08088294_continue +_080880F2: + ldr r0, [sp, #0x18] + ldr r1, _08088110 @ =950 + bl Div + ldr r3, [sp, #0x2c] @ r3 = sp2C = worldX << 16 + asrs r1, r3, #0x10 + adds r1, r1, r0 + adds r1, #0x10 + cmp r5, #0 + beq _08088114 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + bge _0808811E + b _08088294_continue + .align 2, 0 +_08088110: .4byte 0x000003B6 +_08088114: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + bge _0808811E + b _08088294_continue +_0808811E: + ldr r0, [sp, #0x1c] + ldr r1, _0808813C @ =950 + bl Div + ldr r2, [sp, #0x30] @ r2 = sp30 = worldY << 16 + asrs r1, r2, #0x10 + adds r1, r1, r0 + subs r1, #0x10 + cmp r5, #0 + beq _08088140 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r1, r0 + ble _0808814A + b _08088294_continue + .align 2, 0 +_0808813C: .4byte 0x000003B6 +_08088140: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + ble _0808814A + b _08088294_continue +_0808814A: + ldr r0, [sp, #0x1c] + ldr r1, _08088168 @ =950 + bl Div + ldr r3, [sp, #0x30] @ r3 = sp30 = worldY << 16 + asrs r1, r3, #0x10 + adds r1, r1, r0 + adds r1, #0x10 + cmp r5, #0 + beq _0808816C + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08088176 + b _08088294_continue + .align 2, 0 +_08088168: .4byte 0x000003B6 +_0808816C: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08088176 + b _08088294_continue +_08088176: + adds r0, r7, #0 + lsls r0, r5 + mov r2, r8 + ldrb r1, [r2] + orrs r0, r1 + strb r0, [r2] + ldr r0, _08088198 @ =gPlayer + cmp r5, #0 + beq _0808818A + ldr r0, _0808819C @ =gPartner +_0808818A: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _080881A0 + mov r3, sb + str r3, [r4, #0x28] + b _080881A4 + .align 2, 0 +_08088198: .4byte gPlayer +_0808819C: .4byte gPartner +_080881A0: + mov r0, sb + str r0, [r6, #0x28] +_080881A4: + cmp r5, #0 + beq _080881B2 + ldr r0, [r4, #0x10] + movs r1, #8 + orrs r0, r1 + str r0, [r4, #0x10] + b _080881BA +_080881B2: + ldr r0, [r6, #0x10] + movs r1, #8 + orrs r0, r1 + str r0, [r6, #0x10] +_080881BA: + cmp r5, #0 + beq _080881CA + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + b _080881D4 +_080881CA: + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r6, #0x10] +_080881D4: + cmp r5, #0 + beq _080881DE + mov r1, sl @ r1 = sl = 0 + strh r1, [r4, #8] + b _080881E0 +_080881DE: + strh r5, [r6, #8] +_080881E0: + cmp r5, #0 + beq _080881EA + mov r2, sl @ r2 = sl = 0 + strh r2, [r4, #0xc] + b _080881EC +_080881EA: + strh r5, [r6, #0xc] +_080881EC: + cmp r5, #0 + beq _080881F6 + mov r3, sl @ r3 = sl = 0 + strh r3, [r4, #0xa] + b _080881F8 +_080881F6: + strh r5, [r6, #0xa] +_080881F8: + cmp r5, #0 + beq _08088208 + movs r0, #0x26 + ldr r1, _08088204 @ =gPartner + 0x40 + b _0808820E + .align 2, 0 +_08088204: .4byte gPartner + 0x40 +_08088208: + adds r1, r6, #0 + adds r1, #0x40 + movs r0, #0x26 +_0808820E: + strb r0, [r1] + cmp r5, #0 + beq _08088224 + ldr r2, _08088220 @ =gPartner + 0x26 + ldrb r0, [r2] + movs r1, #0x80 + orrs r0, r1 + b _08088292 + .align 2, 0 +_08088220: .4byte gPartner + 0x26 +_08088224: + adds r2, r6, #0 + adds r2, #0x26 + ldrb r0, [r2] + movs r1, #0x80 + orrs r0, r1 + b _08088292 +_08088230: + mov r3, r8 + ldrb r0, [r3] + asrs r0, r5 + ands r0, r7 + cmp r0, #0 + beq _08088294_continue + cmp r5, #0 + beq _08088250 + ldr r0, [r4, #0x10] + ldr r1, _0808824C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08088258 + .align 2, 0 +_0808824C: .4byte 0xFFBFFFFF +_08088250: + ldr r0, [r6, #0x10] + ldr r1, _08088280 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08088258: + ldr r0, [sp, #0x24] @ r0 = sp24 = hook + adds r0, #0xb0 + adds r0, r0, r5 + movs r1, #0x14 + strb r1, [r0] + adds r1, r7, #0 + lsls r1, r5 + mov r2, r8 + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] + cmp r5, #0 + beq _08088288 + ldr r3, _08088284 @ =gPartner + 0x26 + ldrb r1, [r3] + movs r0, #0x7f + ands r0, r1 + strb r0, [r3] + b _08088294_continue + .align 2, 0 +_08088280: .4byte 0xFFBFFFFF +_08088284: .4byte gPartner + 0x26 +_08088288: + adds r2, r6, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 +_08088292: + strb r0, [r2] +_08088294_continue: + adds r5, #1 + ldr r0, _080882FC @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r5, r0 + bge _080882A4 + b _08087D88_loop +_080882A4: + ldr r4, _08088300 @ =0x000003FF + adds r0, r4, #0 + ldr r5, [sp, #0x28] + bics r0, r5 + ldr r1, [sp] + strh r0, [r1] + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r1, #2] + strh r0, [r1, #4] + ldr r2, _08088304 @ =gCamera + ldrh r1, [r2] + ldr r3, [sp, #0x2c] @ r2 = sp2C = worldX << 16 + asrs r0, r3, #0x10 + subs r0, r0, r1 + ldr r4, [sp, #0x18] + asrs r1, r4, #0xa + adds r0, r0, r1 + ldr r5, [sp] + strh r0, [r5, #6] + ldrh r1, [r2, #2] + ldr r2, [sp, #0x30] @ r2 = sp30 = worldY << 16 + asrs r0, r2, #0x10 + subs r0, r0, r1 + ldr r3, [sp, #0x1c] + asrs r1, r3, #0xa + adds r0, r0, r1 + strh r0, [r5, #8] + ldr r4, [sp, #0x20] + movs r0, #3 + ldrsb r0, [r4, r0] + cmp r0, #0 + beq _0808830C + ldr r2, _08088308 @ =sa2__gUnknown_030054B8 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0xc + movs r1, #0x7e + orrs r0, r1 + mov r5, sb + str r0, [r5, #0x10] + b _08088320 + .align 2, 0 +_080882FC: .4byte gNumSingleplayerCharacters +_08088300: .4byte 0x000003FF +_08088304: .4byte gCamera +_08088308: .4byte sa2__gUnknown_030054B8 +_0808830C: + ldr r2, _08088360 @ =sa2__gUnknown_030054B8 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0xc + movs r1, #0x7f + orrs r0, r1 + mov r1, sb + str r0, [r1, #0x10] +_08088320: + mov r0, sb + ldr r1, [sp] + bl TransformSprite + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + bl DisplaySprite + mov r2, sb + ldr r0, [r2, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r2, #0x10] + mov r0, sb + bl DisplaySprite + mov r3, sb + ldr r0, [r3, #0x10] + ldr r1, _08088364 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r3, #0x10] +_08088350: + add sp, #0x34 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08088360: .4byte sa2__gUnknown_030054B8 +_08088364: .4byte 0xFFFFFBFF + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type0_2.inc b/sa1/asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type0_2.inc new file mode 100644 index 0000000000..e9f575e320 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type0_2.inc @@ -0,0 +1,452 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r1, _08086E04 @ =gCurTask + ldr r0, [r1] + ldrh r6, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r6, r0 + ldr r2, _08086E08 @ =0x0300000C + adds r7, r6, r2 + ldr r3, [r4] + str r3, [sp] + ldrb r0, [r4, #8] + lsls r0, r0, #3 + ldrh r1, [r4, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + ldr r1, [sp] + ldrb r0, [r1, #1] + lsls r0, r0, #3 + ldrh r1, [r4, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + mov sb, r2 + ldr r5, _08086E0C @ =gPlayer + ldr r0, [r5, #0x10] + mov r8, r0 + movs r0, #0x80 + mov r1, r8 + ands r1, r0 + mov r8, r1 + cmp r1, #0 + beq _08086D14 + b _08086F10 +_08086D14: + movs r0, #0x40 + adds r0, r0, r5 + mov sb, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x26 + beq _08086D38 + adds r0, r5, #0 + str r2, [sp, #4] + str r3, [sp, #8] + bl Player_TransitionCancelFlyingAndBoost + movs r0, #0x26 + mov r1, sb + strb r0, [r1] + ldr r3, [sp, #8] + ldr r2, [sp, #4] +_08086D38: + mov r0, r8 + strh r0, [r5, #0xa] + ldr r1, _08086E10 @ =0x03000050 + adds r6, r6, r1 + ldrb r0, [r6] + cmp r0, #0 + beq _08086E28 + ldr r0, [r4, #0x40] + adds r0, #0x14 + str r0, [r4, #0x40] + ldr r1, [r4, #0x4c] + adds r1, r1, r0 + str r1, [r4, #0x4c] + lsls r0, r3, #0x10 + asrs r0, r0, #8 + ldr r3, _08086E14 @ =0xFFFFFA00 + adds r0, r0, r3 + adds r0, r0, r1 + str r0, [r5] + lsls r0, r2, #0x10 + asrs r6, r0, #0x10 + movs r0, #0x8a + lsls r0, r0, #1 + adds r1, r6, r0 + lsls r1, r1, #8 + ldr r0, [r4, #0x4c] + asrs r0, r0, #1 + adds r1, r1, r0 + str r1, [r5, #4] + ldr r0, [r4, #0x4c] + asrs r0, r0, #9 + adds r0, r6, r0 + ldr r1, _08086E18 @ =gCamera + mov sl, r1 + ldrh r1, [r1, #2] + subs r0, r0, r1 + adds r0, #0xf0 + strh r0, [r7, #0x18] + ldr r0, [r4, #0x4c] + asrs r0, r0, #8 + cmp r0, #2 + ble _08086E7E + movs r0, #0xb4 + bl m4aSongNumStop + adds r0, r5, #0 + bl Player_TransitionCancelFlyingAndBoost + ldr r0, [r5, #0x10] + ldr r1, _08086E1C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] + movs r0, #4 + mov r2, sb + strb r0, [r2] + adds r0, r5, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #0xe + strb r0, [r5, #0xf] + ldr r3, _08086E04 @ =gCurTask + ldr r1, [r3] + ldr r0, _08086E20 @ =Task_HookRail_Shared1 + str r0, [r1, #8] + ldr r0, [r4, #0x40] + strh r0, [r5, #0xc] + ldr r0, [r5, #4] + ldr r1, _08086E24 @ =0xFFFFF600 + adds r0, r0, r1 + str r0, [r5, #4] + ldr r0, [r4, #0x4c] + asrs r0, r0, #9 + adds r0, r6, r0 + mov r2, sl + ldrh r1, [r2, #2] + subs r0, r0, r1 + adds r0, #0x78 + strh r0, [r7, #0x18] + adds r2, r5, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + ldr r1, [r5, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08086E7E + ldr r0, [r5, #0x28] + cmp r0, r7 + bne _08086E7E + mov r3, r8 + str r3, [r5, #0x28] + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r5, #0x10] + b _08086E7E + .align 2, 0 +_08086E04: .4byte gCurTask +_08086E08: .4byte 0x0300000C +_08086E0C: .4byte gPlayer +_08086E10: .4byte 0x03000050 +_08086E14: .4byte 0xFFFFFA00 +_08086E18: .4byte gCamera +_08086E1C: .4byte 0xFFBFFFFF +_08086E20: .4byte Task_HookRail_Shared1 +_08086E24: .4byte 0xFFFFF600 +_08086E28: + ldr r0, [r4, #0x40] + subs r0, #9 + str r0, [r4, #0x40] + ldr r1, _08086EB4 @ =0xFFFFFA00 + cmp r0, r1 + bge _08086E36 + str r1, [r4, #0x40] +_08086E36: + ldr r1, [r4, #0x4c] + ldr r0, [r4, #0x40] + adds r1, r1, r0 + str r1, [r4, #0x4c] + lsls r0, r3, #0x10 + asrs r0, r0, #8 + ldr r3, _08086EB4 @ =0xFFFFFA00 + adds r0, r0, r3 + adds r0, r0, r1 + str r0, [r5] + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + adds r1, r2, #0 + adds r1, #0x26 + lsls r1, r1, #8 + ldr r0, [r4, #0x4c] + asrs r0, r0, #1 + subs r1, r1, r0 + str r1, [r5, #4] + ldr r0, [r4, #0x4c] + asrs r0, r0, #9 + subs r2, r2, r0 + ldr r0, _08086EB8 @ =gCamera + ldrh r0, [r0, #2] + subs r2, r2, r0 + strh r2, [r7, #0x18] + ldr r0, [r5] + ldr r1, [r4, #0x48] + subs r0, r0, r1 + asrs r0, r0, #8 + movs r1, #0xf4 + rsbs r1, r1, #0 + cmp r0, r1 + bge _08086E7E + movs r0, #1 + strb r0, [r6] +_08086E7E: + ldr r0, _08086EBC @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _08086ECC + ldr r0, _08086EC0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _08086EC4 @ =gMultiSioRecv + adds r1, r1, r0 + ldr r3, _08086EB8 @ =gCamera + ldrh r0, [r1, #2] + ldrh r2, [r3] + subs r0, r0, r2 + adds r0, #5 + strh r0, [r7, #0x16] + ldrh r0, [r1, #4] + ldrh r1, [r3, #2] + subs r0, r0, r1 + subs r0, #0x24 + strh r0, [r7, #0x18] + ldr r6, _08086EC8 @ =gPlayer + adds r2, r3, #0 + b _08086EEA + .align 2, 0 +_08086EB4: .4byte 0xFFFFFA00 +_08086EB8: .4byte gCamera +_08086EBC: .4byte gGameMode +_08086EC0: .4byte 0x04000128 +_08086EC4: .4byte gMultiSioRecv +_08086EC8: .4byte gPlayer +_08086ECC: + ldr r3, _08086F08 @ =gPlayer + ldr r0, [r3] + asrs r0, r0, #8 + ldr r2, _08086F0C @ =gCamera + ldrh r1, [r2] + subs r0, r0, r1 + adds r0, #5 + strh r0, [r7, #0x16] + ldr r0, [r3, #4] + asrs r0, r0, #8 + ldrh r1, [r2, #2] + subs r0, r0, r1 + subs r0, #0x24 + strh r0, [r7, #0x18] + adds r6, r3, #0 +_08086EEA: + ldr r0, [r6] + asrs r0, r0, #8 + ldrh r1, [r2] + subs r0, r0, r1 + adds r0, #5 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + ldrh r1, [r2, #2] + subs r0, r0, r1 + subs r0, #0x24 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + b _08086FDA + .align 2, 0 +_08086F08: .4byte gPlayer +_08086F0C: .4byte gCamera +_08086F10: + ldr r0, _08086F70 @ =0x03000050 + adds r6, r6, r0 + ldrb r0, [r6] + cmp r0, #0 + beq _08086F80 + ldr r0, [r4, #0x40] + adds r0, #0x14 + str r0, [r4, #0x40] + ldr r1, [r4, #0x4c] + adds r1, r1, r0 + str r1, [r4, #0x4c] + asrs r1, r1, #9 + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + adds r0, r0, r1 + ldr r1, _08086F74 @ =gCamera + ldrh r1, [r1, #2] + subs r0, r0, r1 + adds r0, #0xf0 + strh r0, [r7, #0x18] + ldr r0, [r4, #0x4c] + asrs r0, r0, #8 + lsls r3, r3, #0x10 + mov r8, r3 + cmp r0, #2 + ble _08086FC4 + movs r0, #0xb4 + bl m4aSongNumStop + ldr r2, _08086F78 @ =gCurTask + ldr r1, [r2] + ldr r0, _08086F7C @ =Task_HookRail_Shared1 + str r0, [r1, #8] + ldr r1, [r5, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08086FC4 + ldr r0, [r5, #0x28] + cmp r0, r7 + bne _08086FC4 + movs r0, #0 + str r0, [r5, #0x28] + subs r0, #9 + ands r1, r0 + str r1, [r5, #0x10] + b _08086FC4 + .align 2, 0 +_08086F70: .4byte 0x03000050 +_08086F74: .4byte gCamera +_08086F78: .4byte gCurTask +_08086F7C: .4byte Task_HookRail_Shared1 +_08086F80: + ldr r0, [r4, #0x40] + subs r0, #9 + str r0, [r4, #0x40] + ldr r1, _0808702C @ =0xFFFFFA00 + cmp r0, r1 + bge _08086F8E + str r1, [r4, #0x40] +_08086F8E: + ldr r1, [r4, #0x4c] + ldr r0, [r4, #0x40] + adds r1, r1, r0 + str r1, [r4, #0x4c] + lsls r2, r3, #0x10 + asrs r0, r2, #8 + adds r0, r0, r1 + ldr r1, [r4, #0x48] + subs r0, r0, r1 + asrs r0, r0, #8 + movs r1, #0xf4 + rsbs r1, r1, #0 + mov r8, r2 + cmp r0, r1 + bge _08086FB0 + movs r0, #1 + strb r0, [r6] +_08086FB0: + ldr r1, [r4, #0x4c] + asrs r1, r1, #9 + mov r3, sb + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + subs r0, r0, r1 + ldr r1, _08087030 @ =gCamera + ldrh r1, [r1, #2] + subs r0, r0, r1 + strh r0, [r7, #0x18] +_08086FC4: + ldr r0, [r4, #0x4c] + asrs r0, r0, #8 + mov r2, r8 + asrs r1, r2, #0x10 + adds r1, r1, r0 + ldr r0, _08087030 @ =gCamera + ldrh r0, [r0] + subs r1, r1, r0 + strh r1, [r7, #0x16] + ldrh r5, [r7, #0x16] + ldrh r2, [r7, #0x18] +_08086FDA: + lsls r0, r5, #0x10 + movs r3, #0x80 + lsls r3, r3, #0x10 + adds r0, r0, r3 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08086FFE + lsls r0, r2, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08086FFE + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0808703C +_08086FFE: + ldr r2, _08087034 @ =gPlayer + ldr r1, [r2, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0808701A + ldr r0, [r2, #0x28] + cmp r0, r7 + bne _0808701A + movs r0, #0 + str r0, [r2, #0x28] + subs r0, #9 + ands r1, r0 + str r1, [r2, #0x10] +_0808701A: + ldrb r0, [r4, #8] + ldr r1, [sp] + strb r0, [r1] + ldr r0, _08087038 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08087042 + .align 2, 0 +_0808702C: .4byte 0xFFFFFA00 +_08087030: .4byte gCamera +_08087034: .4byte gPlayer +_08087038: .4byte gCurTask +_0808703C: + adds r0, r7, #0 + bl DisplaySprite +_08087042: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type1_2.inc b/sa1/asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type1_2.inc new file mode 100644 index 0000000000..1d93e0b330 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type1_2.inc @@ -0,0 +1,351 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r1, _0808696C @ =gCurTask + ldr r0, [r1] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r1, r0 @ r5 = hookRail + ldr r2, _08086970 @ =0x0300000C + adds r6, r1, r2 @ r6 = s + ldr r3, [r5] + str r3, [sp] @ sp00 = r3 = me + ldrb r0, [r5, #8] + lsls r0, r0, #3 + ldrh r1, [r5, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 @ sb = worldX + ldrb r0, [r3, #1] + lsls r0, r0, #3 + ldrh r1, [r5, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sl, r0 @ sl = worldY + ldr r4, _08086974 @ =gPlayer + ldr r1, [r4, #0x10] + movs r0, #0x80 + mov r8, r0 + mov r2, r8 + ands r2, r1 + mov r8, r2 + cmp r2, #0 + beq _080868D8 + b _08086A50 +_080868D8: + adds r7, r4, #0 + adds r7, #0x40 + movs r0, #0 + ldrsb r0, [r7, r0] + cmp r0, #0x26 + beq _080868EE + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + movs r0, #0x26 + strb r0, [r7] +_080868EE: + mov r3, r8 + strh r3, [r4, #0xa] + ldr r0, [r4] + ldr r1, [r5, #0x48] + subs r0, r0, r1 + asrs r0, r0, #8 + movs r1, #0xf0 + lsls r1, r1, #1 + cmp r0, r1 + ble _08086984 + movs r0, #0xb4 + bl m4aSongNumStop + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + ldr r0, [r4, #0x10] + ldr r1, _08086978 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + movs r0, #4 + strb r0, [r7] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + ldr r0, _0808696C @ =gCurTask + ldr r1, [r0] + ldr r0, _0808697C @ =Task_HookRail_Shared0 + str r0, [r1, #8] + ldr r0, [r5, #0x40] + movs r1, #0 + strh r0, [r4, #0xc] + ldr r0, [r4, #4] + ldr r2, _08086980 @ =0xFFFFF600 + adds r0, r0, r2 + str r0, [r4, #4] + strb r1, [r4, #0x14] + adds r2, r4, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] @ gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + ldr r1, [r4, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _080869BC + ldr r0, [r4, #0x28] + cmp r0, r6 + bne _080869BC + mov r3, r8 + str r3, [r4, #0x28] + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r4, #0x10] + b _080869BC + .align 2, 0 +_0808696C: .4byte gCurTask +_08086970: .4byte 0x0300000C +_08086974: .4byte gPlayer +_08086978: .4byte 0xFFBFFFFF +_0808697C: .4byte Task_HookRail_Shared0 +_08086980: .4byte 0xFFFFF600 +_08086984: + ldr r0, [r5, #0x40] + adds r0, #0x10 + str r0, [r5, #0x40] + ldr r1, [r5, #0x4c] + adds r1, r1, r0 + str r1, [r5, #0x4c] + mov r2, sb + lsls r0, r2, #0x10 + asrs r0, r0, #8 + ldr r3, _080869F4 @ =0xFFFFFA00 + adds r0, r0, r3 + adds r0, r0, r1 + str r0, [r4] + mov r1, sl @ r1 = sl = worldY + lsls r0, r1, #0x10 + asrs r0, r0, #8 + movs r2, #0x90 + lsls r2, r2, #6 + adds r0, r0, r2 + ldr r1, [r5, #0x4c] + asrs r1, r1, #1 + adds r0, r0, r1 + str r0, [r4, #4] + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + movs r0, #0x26 + strb r0, [r7] +_080869BC: + ldr r0, _080869F8 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _08086A0C + ldr r0, _080869FC @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _08086A00 @ =gMultiSioRecv + adds r1, r1, r0 + ldr r3, _08086A04 @ =gCamera + ldrh r0, [r1, #2] + ldrh r2, [r3] + subs r0, r0, r2 + adds r0, #5 + strh r0, [r6, #0x16] + ldrh r0, [r1, #4] + ldrh r1, [r3, #2] + subs r0, r0, r1 + subs r0, #0x24 + strh r0, [r6, #0x18] + ldr r4, _08086A08 @ =gPlayer + adds r2, r3, #0 + b _08086A2A + .align 2, 0 +_080869F4: .4byte 0xFFFFFA00 +_080869F8: .4byte gGameMode +_080869FC: .4byte 0x04000128 +_08086A00: .4byte gMultiSioRecv +_08086A04: .4byte gCamera +_08086A08: .4byte gPlayer +_08086A0C: + ldr r3, _08086A48 @ =gPlayer + ldr r0, [r3] + asrs r0, r0, #8 + ldr r2, _08086A4C @ =gCamera + ldrh r1, [r2] + subs r0, r0, r1 + adds r0, #5 + strh r0, [r6, #0x16] + ldr r0, [r3, #4] + asrs r0, r0, #8 + ldrh r1, [r2, #2] + subs r0, r0, r1 + subs r0, #0x24 + strh r0, [r6, #0x18] + adds r4, r3, #0 +_08086A2A: + ldr r0, [r4] + asrs r0, r0, #8 + ldrh r1, [r2] + subs r0, r0, r1 + adds r0, #5 + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 + ldr r0, [r4, #4] + asrs r0, r0, #8 + ldrh r1, [r2, #2] + subs r0, r0, r1 + subs r0, #0x24 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + b _08086AD2 + .align 2, 0 +_08086A48: .4byte gPlayer +_08086A4C: .4byte gCamera +_08086A50: + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08086A68 + ldr r0, [r4, #0x28] + cmp r0, r6 + bne _08086A68 + movs r0, #0 + str r0, [r4, #0x28] + subs r0, #9 + ands r1, r0 + str r1, [r4, #0x10] +_08086A68: + ldr r0, [r5, #0x40] + adds r0, #0x10 + str r0, [r5, #0x40] + ldr r1, [r5, #0x4c] + adds r1, r1, r0 + str r1, [r5, #0x4c] + asrs r1, r1, #8 + mov r3, sb + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + adds r0, r0, r1 + ldr r2, _08086B24 @ =gCamera + ldrh r1, [r2] + subs r0, r0, r1 + strh r0, [r6, #0x16] + ldr r1, [r5, #0x4c] + asrs r1, r1, #9 + mov r3, sl + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + adds r0, r0, r1 + ldrh r1, [r2, #2] + subs r0, r0, r1 + strh r0, [r6, #0x18] + ldrh r7, [r6, #0x16] @ r7 = screenX = s->x; + ldrh r4, [r6, #0x18] @ r4 = screenY = s->y; + ldr r0, [r5, #0x4c] + asrs r0, r0, #8 + movs r1, #0xf0 + lsls r1, r1, #1 + cmp r0, r1 + ble _08086AD2 + movs r0, #0xb4 + bl m4aSongNumStop + ldr r0, _08086B28 @ =gCurTask + ldr r1, [r0] + ldr r0, _08086B2C @ =Task_HookRail_Shared0 + str r0, [r1, #8] + ldr r2, _08086B30 @ =gPlayer + ldr r1, [r2, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08086AD2 + ldr r0, [r2, #0x28] + cmp r0, r6 + bne _08086AD2 + movs r0, #0 + str r0, [r2, #0x28] + subs r0, #9 + ands r1, r0 + str r1, [r2, #0x10] +_08086AD2: + lsls r0, r7, #0x10 + movs r1, #0x80 + lsls r1, r1, #0x10 + adds r0, r0, r1 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08086AF6 + lsls r0, r4, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08086AF6 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08086B34 +_08086AF6: + ldr r2, _08086B30 @ =gPlayer + ldr r1, [r2, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08086B12 + ldr r0, [r2, #0x28] + cmp r0, r6 + bne _08086B12 + movs r0, #0 + str r0, [r2, #0x28] + subs r0, #9 + ands r1, r0 + str r1, [r2, #0x10] +_08086B12: + ldrb r0, [r5, #8] + ldr r2, [sp] + strb r0, [r2] + ldr r0, _08086B28 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08086B3A + .align 2, 0 +_08086B24: .4byte gCamera +_08086B28: .4byte gCurTask +_08086B2C: .4byte Task_HookRail_Shared0 +_08086B30: .4byte gPlayer +_08086B34: + adds r0, r6, #0 + bl DisplaySprite +_08086B3A: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/ice_block__Task_IceBlock.inc b/sa1/asm/non_matching/game/interactables/ice_block__Task_IceBlock.inc new file mode 100644 index 0000000000..c6315b07a0 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/ice_block__Task_IceBlock.inc @@ -0,0 +1,320 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + movs r0, #0 + str r0, [sp, #8] + ldr r1, _08091894 @ =gCurTask + mov r8, r1 + ldr r0, [r1] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r1, r0 + str r0, [sp, #4] @ r0 = block + ldr r2, _08091898 @ =0x0300000C + adds r7, r1, r2 @ r7 = s + ldr r3, [r0] + str r3, [sp] @ sp00 = me + ldrb r2, [r0, #8] + lsls r2, r2, #3 + ldrh r0, [r0, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 @ r2 = worldX << 16 + ldrb r1, [r3, #1] + lsls r1, r1, #3 + ldr r3, [sp, #4] + ldrh r0, [r3, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 @ r1 = worldY << 16 + ldr r3, _0809189C @ =gCamera + ldrh r0, [r3] + lsrs r6, r2, #0x10 @ r6 = worldX + asrs r5, r2, #0x10 @ r5 = worldX + subs r0, r5, r0 + strh r0, [r7, #0x16] + ldrh r0, [r3, #2] + lsrs r2, r1, #0x10 @ r2 = worldY + asrs r4, r1, #0x10 @ r4 = worldY + subs r0, r4, r0 + strh r0, [r7, #0x18] + ldr r0, _080918A0 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _080918AC + ldr r0, [sp] + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #3 + rsbs r0, r0, #0 + cmp r1, r0 + bne _080918AC + adds r0, r5, #0 + adds r1, r4, #0 + bl CreateDustCloud + movs r0, #0x8a + bl m4aSongNumStart + ldr r1, _080918A4 @ =sa2__gUnknown_0300194C + ldrh r0, [r7, #0x16] + strh r0, [r1] + ldr r2, _080918A8 @ =sa2__gUnknown_03002820 + ldrh r1, [r7, #0x18] + strh r1, [r2] + subs r0, r5, r0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, #0x10 + subs r1, r4, r1 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + bl CreateIceBlockShards + mov r1, r8 + ldr r0, [r1] + bl TaskDestroy + b _08091A66_return + .align 2, 0 +_08091894: .4byte gCurTask +_08091898: .4byte 0x0300000C +_0809189C: .4byte gCamera +_080918A0: .4byte gGameMode +_080918A4: .4byte sa2__gUnknown_0300194C +_080918A8: .4byte sa2__gUnknown_03002820 +_080918AC: + lsls r6, r6, #0x10 + mov sl, r6 @ sl = worldX << 16 + lsls r2, r2, #0x10 + mov sb, r2 @ sb = worldY << 16 + mov r2, sl + asrs r2, r2, #0x10 + str r2, [sp, #0xc] @ sp0C = worldX + mov r3, sb + asrs r3, r3, #0x10 + str r3, [sp, #0x10] @ sp10 = worldY +_080918C0_loop: + ldr r6, _08091914 @ =gPlayer + ldr r0, [sp, #8] + cmp r0, #0 + beq _080918CA + ldr r6, _08091918 @ =gPartner +_080918CA: + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080918D6 + b _080919FC +_080918D6: + adds r0, r6, #0 + adds r0, #0x40 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #5 + bne _0809191C + adds r0, r7, #0 + mov r2, sl + asrs r1, r2, #0x10 + mov r3, sb + asrs r2, r3, #0x10 + adds r3, r6, #0 + bl sub_80096B0 + adds r1, r0, #0 + adds r0, r6, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + movs r2, #0 + mov r8, r2 + cmp r0, #3 + beq _08091920 + movs r0, #8 + ands r0, r1 + rsbs r0, r0, #0 + lsrs r0, r0, #0x1f + mov r8, r0 + b _08091920 + .align 2, 0 +_08091914: .4byte gPlayer +_08091918: .4byte gPartner +_0809191C: + movs r3, #0 + mov r8, r3 +_08091920: + mov r0, sl @ r0 = sl = worldX << 16 + asrs r4, r0, #0x10 + mov r1, sb + asrs r5, r1, #0x10 + adds r0, r7, #0 + adds r1, r4, #0 + adds r2, r5, #0 + adds r3, r6, #0 + bl sub_800C394 + cmp r0, #0 + bne _0809194E + adds r0, r7, #0 + adds r1, r4, #0 + adds r2, r5, #0 + adds r3, r6, #0 + bl sub_8091E88 + cmp r0, #0 + bne _0809194E + mov r2, r8 + cmp r2, #0 + beq _080919FC +_0809194E: + movs r3, #0 + ldr r0, _080919E4 @ =gPlayer + mov sb, r0 + ldr r1, _080919E8 @ =gNumSingleplayerCharacters + mov r8, r1 + movs r6, #8 + movs r5, #9 + rsbs r5, r5, #0 + movs r4, #2 +_08091960_loop: + mov r2, sb + cmp r3, #0 + beq _08091968 + ldr r2, _080919EC @ =gPartner +_08091968: + ldr r1, [r2, #0x10] + adds r0, r1, #0 + ands r0, r6 + cmp r0, #0 + beq _0809197E + ldr r0, [r2, #0x28] + cmp r0, r7 + bne _0809197E + ands r1, r5 + orrs r1, r4 + str r1, [r2, #0x10] +_0809197E: + adds r3, #1 + mov r2, r8 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r3, r0 + blt _08091960_loop + ldr r0, [sp, #0xc] + ldr r1, [sp, #0x10] + bl CreateDustCloud + movs r0, #0x8a + bl m4aSongNumStart + ldr r1, _080919F0 @ =sa2__gUnknown_0300194C + ldrh r0, [r7, #0x16] + strh r0, [r1] + ldr r2, _080919F4 @ =sa2__gUnknown_03002820 + ldrh r1, [r7, #0x18] + strh r1, [r2] + ldr r3, [sp, #0xc] + subs r0, r3, r0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, #0x10 + ldr r2, [sp, #0x10] + subs r1, r2, r1 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + bl CreateIceBlockShards + ldr r0, _080919F8 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _080919DC + bl CreateRoomEvent + movs r2, #0 + movs r1, #1 + strb r1, [r0] + ldr r3, [sp, #4] + ldrh r1, [r3, #4] + strb r1, [r0, #1] + ldrh r1, [r3, #6] + strb r1, [r0, #2] + ldrb r1, [r3, #9] + strb r1, [r0, #3] + strb r2, [r0, #4] +_080919DC: + movs r0, #0xc1 + bl m4aSongNumStart + b _08091A4E + .align 2, 0 +_080919E4: .4byte gPlayer +_080919E8: .4byte gNumSingleplayerCharacters +_080919EC: .4byte gPartner +_080919F0: .4byte sa2__gUnknown_0300194C +_080919F4: .4byte sa2__gUnknown_03002820 +_080919F8: .4byte gGameMode +_080919FC: + adds r0, r7, #0 + mov r2, sl @ r2 = sl = worldX << 16 + asrs r1, r2, #0x10 @ r1 = worldX + mov r3, sb + asrs r2, r3, #0x10 + adds r3, r6, #0 + bl sub_80096B0 + ldr r0, [sp, #8] + adds r0, #1 + str r0, [sp, #8] + ldr r0, _08091A58 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldr r1, [sp, #8] + cmp r1, r0 + bge _08091A22 + b _080918C0_loop +_08091A22: + ldrh r0, [r7, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08091A46 + movs r2, #0x18 + ldrsh r0, [r7, r2] + adds r0, #0x80 + cmp r0, #0 + blt _08091A46 + movs r3, #0x18 + ldrsh r1, [r7, r3] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08091A60 +_08091A46: + ldr r1, [sp, #4] + ldrb r0, [r1, #8] + ldr r2, [sp] + strb r0, [r2] +_08091A4E: + ldr r0, _08091A5C @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08091A66_return + .align 2, 0 +_08091A58: .4byte gNumSingleplayerCharacters +_08091A5C: .4byte gCurTask +_08091A60: + adds r0, r7, #0 + bl DisplaySprite +_08091A66_return: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/lava_platform__Task_80929A0.inc b/sa1/asm/non_matching/game/interactables/lava_platform__Task_80929A0.inc new file mode 100644 index 0000000000..9f783990f7 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/lava_platform__Task_80929A0.inc @@ -0,0 +1,724 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + ldr r0, _08092A84 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r4 + mov sl, r0 @ sl = platform + ldr r1, [r0] @ r1 = platform->base.me + ldr r0, _08092A88 @ =0x0300000C + adds r0, r0, r4 + mov sb, r0 @ sb = s + ldr r2, _08092A8C @ =0x03000044 + adds r2, r4, r2 + str r2, [sp, #8] @ sp08 = s2 + mov r5, sl @ r5 = sl = platform + ldrb r3, [r5, #8] + lsls r3, r3, #3 + ldrh r0, [r5, #4] + lsls r0, r0, #8 + adds r3, r3, r0 + lsls r3, r3, #0x10 @ r3 = worldX << 16 + ldrb r2, [r1, #1] + lsls r2, r2, #3 + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 @ r2 = worldY << 16 + ldr r1, [r5, #0x78] + adds r1, #0x25 + str r1, [r5, #0x78] @ + ldr r0, [r5, #0x7c] + adds r0, r0, r1 + str r0, [r5, #0x7c] @ platform->qUnk7C += platform->qUnk78; + ldr r1, _08092A90 @ =gCamera + ldrh r0, [r1] + lsrs r5, r3, #0x10 + str r5, [sp] @ sp00 = worldX + asrs r3, r3, #0x10 @ r3 = worldX + subs r0, r3, r0 + mov r5, sb + strh r0, [r5, #0x16] + ldrh r0, [r1, #2] + lsrs r5, r2, #0x10 + str r5, [sp, #4] + asrs r2, r2, #0x10 + subs r0, r2, r0 + subs r0, #3 + mov r5, sb + strh r0, [r5, #0x18] + ldrh r0, [r1] + subs r3, r3, r0 + ldr r0, [sp, #8] + strh r3, [r0, #0x16] + ldrh r0, [r1, #2] + subs r2, r2, r0 + mov r1, sl + ldr r0, [r1, #0x7c] + asrs r0, r0, #8 + adds r2, r2, r0 + ldr r3, [sp, #8] + strh r2, [r3, #0x18] + movs r6, #0 + ldr r5, _08092A94 @ =0x03000074 + adds r5, r5, r4 + mov r8, r5 @ r8 = r5 = &platform->unk74 + ldr r0, _08092A94 @ =0x03000074 + adds r0, r4, r0 + str r0, [sp, #0x10] @ sp10 = &platform->unk74 +_08092A34_loop: + mov r1, r8 + ldrb r0, [r1] + asrs r0, r6 + movs r2, #1 + ands r0, r2 + cmp r0, #0 + beq _08092AC8 + ldr r5, [sp] + lsls r3, r5, #0x10 + asrs r7, r3, #0x10 + mov r0, sl + ldr r1, [r0, #0x7c] + asrs r1, r1, #8 + ldr r5, [sp, #4] + lsls r2, r5, #0x10 + asrs r0, r2, #0x10 + adds r0, r0, r1 + lsls r0, r0, #0x10 + asrs r4, r0, #0x10 + ldr r5, _08092A98 @ =gPlayer + str r3, [sp, #0x14] + str r2, [sp, #0x18] + cmp r6, #0 + beq _08092A66 + ldr r5, _08092A9C @ =gPartner +_08092A66: + ldr r0, [sp, #8] + adds r1, r7, #0 + adds r2, r4, #0 + adds r3, r5, #0 + bl Coll_Player_Entity_Intersection + cmp r0, #0 + bne _08092AA0 + movs r1, #1 + lsls r1, r6 + mov r2, r8 + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] + b _08092BE4_continue + .align 2, 0 +_08092A84: .4byte gCurTask +_08092A88: .4byte 0x0300000C +_08092A8C: .4byte 0x03000044 +_08092A90: .4byte gCamera +_08092A94: .4byte 0x03000074 +_08092A98: .4byte gPlayer +_08092A9C: .4byte gPartner +_08092AA0: + mov r3, sl + ldr r1, [r3, #0x78] + cmp r6, #0 + beq _08092AB8 + ldr r5, _08092AB4 @ =gPartner + ldr r0, [r5, #4] + adds r0, r0, r1 + str r0, [r5, #4] + b _08092BE4_continue + .align 2, 0 +_08092AB4: .4byte gPartner +_08092AB8: + ldr r2, _08092AC4 @ =gPlayer + ldr r0, [r2, #4] + adds r0, r0, r1 + str r0, [r2, #4] + b _08092BE4_continue + .align 2, 0 +_08092AC4: .4byte gPlayer +_08092AC8: + ldr r3, [sp] @ r3 = sp00 = worldX + lsls r0, r3, #0x10 + asrs r7, r0, #0x10 @ r7 = worldX + mov r5, sl @ r5 = sl = platform + ldr r1, [r5, #0x7c] + asrs r1, r1, #8 + ldr r3, [sp, #4] @ r3 = worldY + lsls r2, r3, #0x10 + asrs r4, r2, #0x10 @ r4 = worldY + adds r1, r4, r1 + lsls r1, r1, #0x10 + asrs r3, r1, #0x10 + ldr r5, _08092B14 @ =gPlayer + str r0, [sp, #0x14] + str r2, [sp, #0x18] + cmp r6, #0 + beq _08092AEC + ldr r5, _08092B18 @ =gPartner +_08092AEC: + ldr r0, [sp, #8] + adds r1, r7, #0 + adds r2, r3, #0 + adds r3, r5, #0 + bl Coll_Player_PlatformCrumbling + cmp r0, #0 + beq _08092BD8 + mov r5, sl + ldr r0, [r5, #0x7c] + asrs r0, r0, #8 + adds r0, r4, r0 + subs r0, #0x1b + lsls r0, r0, #8 + cmp r6, #0 + beq _08092B1C + ldr r1, _08092B18 @ =gPartner + str r0, [r1, #4] + b _08092B20 + .align 2, 0 +_08092B14: .4byte gPlayer +_08092B18: .4byte gPartner +_08092B1C: + ldr r2, _08092B40 @ =gPlayer + str r0, [r2, #4] +_08092B20: + movs r0, #1 + lsls r0, r6 + ldr r3, [sp, #0x10] @ r3 = &platform->unk74 + ldrb r1, [r3] + orrs r0, r1 + strb r0, [r3] + cmp r6, #0 + beq _08092B48 + ldr r5, _08092B44 @ =gPartner + ldr r0, [r5, #0x10] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _08092B54 + b _08092B60 + .align 2, 0 +_08092B40: .4byte gPlayer +_08092B44: .4byte gPartner +_08092B48: + ldr r1, _08092B6C @ =gPlayer + ldr r0, [r1, #0x10] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + beq _08092B60 +_08092B54: + movs r1, #1 + lsls r1, r6 + ldr r2, [sp, #0x10] @ r2 = &platform->unk74 + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] +_08092B60: + cmp r6, #0 + beq _08092B74 + ldr r3, _08092B70 @ =gPartner + movs r5, #0xa + ldrsh r0, [r3, r5] + b _08092B7A + .align 2, 0 +_08092B6C: .4byte gPlayer +_08092B70: .4byte gPartner +_08092B74: + ldr r1, _08092B90 @ =gPlayer + movs r2, #0xa + ldrsh r0, [r1, r2] +_08092B7A: + cmp r0, #0 + bne _08092BE4_continue + cmp r6, #0 + beq _08092B98 + ldr r3, _08092B94 @ =gPartner + 0x40 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #4 + bne _08092BA2 + b _08092BE4_continue + .align 2, 0 +_08092B90: .4byte gPlayer +_08092B94: .4byte gPartner + 0x40 +_08092B98: + ldr r5, _08092BBC @ =gPlayer + 0x40 + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #4 + beq _08092BE4_continue +_08092BA2: + ldr r0, _08092BC0 @ =gPlayer + cmp r6, #0 + beq _08092BAA + ldr r0, _08092BC4 @ =gPartner +_08092BAA: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _08092BCC + movs r0, #4 + ldr r1, _08092BC8 @ =gPartner + 0x40 + strb r0, [r1] + b _08092BE4_continue + .align 2, 0 +_08092BBC: .4byte gPlayer + 0x40 +_08092BC0: .4byte gPlayer +_08092BC4: .4byte gPartner +_08092BC8: .4byte gPartner + 0x40 +_08092BCC: + movs r0, #4 + ldr r2, _08092BD4 @ =gPlayer + 0x40 + strb r0, [r2] + b _08092BE4_continue + .align 2, 0 +_08092BD4: .4byte gPlayer + 0x40 +_08092BD8: + movs r1, #1 + lsls r1, r6 + mov r3, r8 + ldrb r0, [r3] + bics r0, r1 + strb r0, [r3] +_08092BE4_continue: + adds r6, #1 + ldr r0, _08092C1C @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r6, r0 + bge _08092BF4 + b _08092A34_loop +_08092BF4: + mov r0, sl + adds r0, #0x84 + ldr r2, [r0] + subs r1, r2, #1 + str r1, [r0] + cmp r1, #0x30 + bne _08092C24 + mov r1, sb + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + movs r1, #0 + ldr r0, _08092C20 @ =0x00000231 + mov r5, sb + strh r0, [r5, #0xa] + mov r0, sb + adds r0, #0x20 + strb r1, [r0] + b _08092E54 + .align 2, 0 +_08092C1C: .4byte gNumSingleplayerCharacters +_08092C20: .4byte 0x00000231 +_08092C24: + adds r0, r2, #0 + subs r0, #0x32 + cmp r0, #0x2e + bls _08092C2E + b _08092E68 +_08092C2E: + movs r5, #0 + ldr r6, _08092C80 @ =gPlayerBodyPSI+0xC+0x28 + ldr r0, [sp, #0x14] + asrs r0, r0, #0x10 + str r0, [sp, #0xc] + ldr r4, _08092C84 @ =gPartner + ldr r7, _08092C88 @ =gPlayer + ldr r1, [sp, #0x18] + asrs r1, r1, #0x10 + mov r8, r1 +_08092C42_loop: + ldr r1, _08092C80 @ =gPlayerBodyPSI+0xC+0x28 + cmp r5, #0 + beq _08092C4A + ldr r1, _08092C8C @ =gPartnerBodyPSI+0xC+0x28 +_08092C4A: + ldr r1, [r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08092C56 + b _08092E44_continue +_08092C56: + adds r0, r6, #0 + cmp r5, #0 + beq _08092C5E + ldr r0, _08092C8C @ =gPartnerBodyPSI+0xC+0x28 +_08092C5E: + movs r3, #4 + ldrsb r3, [r0, r3] + mov r1, sb @ r1 = sb = s + adds r1, #0x34 + movs r2, #0 + ldrsb r2, [r1, r2] + ldr r0, [sp, #0xc] + adds r2, r0, r2 + cmp r5, #0 + beq _08092C90 + ldr r0, [r4] + asrs r0, r0, #8 + adds r0, r0, r3 + cmp r2, r0 + ble _08092C9A + b _08092CCA + .align 2, 0 +_08092C80: .4byte gPlayerBodyPSI+0xC+0x28 +_08092C84: .4byte gPartner +_08092C88: .4byte gPlayer +_08092C8C: .4byte gPartnerBodyPSI+0xC+0x28 +_08092C90: + ldr r0, [r7] + asrs r0, r0, #8 + adds r0, r0, r3 + cmp r2, r0 + bgt _08092CCA +_08092C9A: + adds r0, r6, #0 + cmp r5, #0 + beq _08092CA2 + ldr r0, _08092CBC @ =gPartnerBodyPSI+0xC+0x28 +_08092CA2: + movs r3, #4 + ldrsb r3, [r0, r3] + mov r0, sb + adds r0, #0x36 + movs r2, #0 + ldrsb r2, [r0, r2] + ldr r0, [sp, #0xc] + adds r2, r2, r0 + cmp r5, #0 + beq _08092CC0 + ldr r0, [r4] + b _08092CC2 + .align 2, 0 +_08092CBC: .4byte gPartnerBodyPSI+0xC+0x28 +_08092CC0: + ldr r0, [r7] +_08092CC2: + asrs r0, r0, #8 + adds r0, r0, r3 + cmp r2, r0 + bge _08092D56 +_08092CCA: + adds r0, r6, #0 + cmp r5, #0 + beq _08092CD2 + ldr r0, _08092CF0 @ =gPartnerBodyPSI+0xC+0x28 +_08092CD2: + movs r2, #4 + ldrsb r2, [r0, r2] + movs r3, #0 + ldrsb r3, [r1, r3] + ldr r0, [sp, #0xc] + adds r3, r0, r3 + cmp r5, #0 + beq _08092CF4 + ldr r0, [r4] + asrs r0, r0, #8 + adds r0, r0, r2 + cmp r3, r0 + bge _08092D00 + b _08092E44_continue + .align 2, 0 +_08092CF0: .4byte gPartnerBodyPSI+0xC+0x28 +_08092CF4: + ldr r0, [r7] + asrs r0, r0, #8 + adds r0, r0, r2 + cmp r3, r0 + bge _08092D00 + b _08092E44_continue +_08092D00: + adds r0, r6, #0 + cmp r5, #0 + beq _08092D08 + ldr r0, _08092D44 @ =gPartnerBodyPSI+0xC+0x28 +_08092D08: + movs r3, #4 + ldrsb r3, [r0, r3] + adds r0, r6, #0 + cmp r5, #0 + beq _08092D14 + ldr r0, _08092D44 @ =gPartnerBodyPSI+0xC+0x28 +_08092D14: + movs r2, #6 + ldrsb r2, [r0, r2] + adds r0, r6, #0 + cmp r5, #0 + beq _08092D20 + ldr r0, _08092D44 @ =gPartnerBodyPSI+0xC+0x28 +_08092D20: + ldrb r0, [r0, #4] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r2, r2, r0 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + ldr r0, [sp, #0xc] + adds r1, r0, r1 + cmp r5, #0 + beq _08092D48 + ldr r0, [r4] + asrs r0, r0, #8 + adds r0, r0, r3 + adds r0, r0, r2 + cmp r0, r1 + bge _08092D56 + b _08092E44_continue + .align 2, 0 +_08092D44: .4byte gPartnerBodyPSI+0xC+0x28 +_08092D48: + ldr r0, [r7] + asrs r0, r0, #8 + adds r0, r0, r3 + adds r0, r0, r2 + cmp r0, r1 + bge _08092D56 + b _08092E44_continue +_08092D56: + adds r0, r6, #0 + cmp r5, #0 + beq _08092D5E + ldr r0, _08092D7C @ =gPartnerBodyPSI+0xC+0x28 +_08092D5E: + movs r3, #5 + ldrsb r3, [r0, r3] + mov r1, sb + adds r1, #0x35 + movs r2, #0 + ldrsb r2, [r1, r2] + add r2, r8 + cmp r5, #0 + beq _08092D80 + ldr r0, [r4, #4] + asrs r0, r0, #8 + adds r0, r0, r3 + cmp r2, r0 + ble _08092D8A + b _08092DB6 + .align 2, 0 +_08092D7C: .4byte gPartnerBodyPSI+0xC+0x28 +_08092D80: + ldr r0, [r7, #4] + asrs r0, r0, #8 + adds r0, r0, r3 + cmp r2, r0 + bgt _08092DB6 +_08092D8A: + adds r0, r6, #0 + cmp r5, #0 + beq _08092D92 + ldr r0, _08092DA8 @ =gPartnerBodyPSI+0xC+0x28 +_08092D92: + movs r3, #5 + ldrsb r3, [r0, r3] + mov r0, sb + adds r0, #0x37 + movs r2, #0 + ldrsb r2, [r0, r2] + add r2, r8 + cmp r5, #0 + beq _08092DAC + ldr r0, [r4, #4] + b _08092DAE + .align 2, 0 +_08092DA8: .4byte gPartnerBodyPSI+0xC+0x28 +_08092DAC: + ldr r0, [r7, #4] +_08092DAE: + asrs r0, r0, #8 + adds r0, r0, r3 + cmp r2, r0 + bge _08092E38 +_08092DB6: + adds r0, r6, #0 + cmp r5, #0 + beq _08092DBE + ldr r0, _08092DD8 @ =gPartnerBodyPSI+0xC+0x28 +_08092DBE: + movs r2, #5 + ldrsb r2, [r0, r2] + movs r3, #0 + ldrsb r3, [r1, r3] + add r3, r8 + cmp r5, #0 + beq _08092DDC + ldr r0, [r4, #4] + asrs r0, r0, #8 + adds r0, r0, r2 + cmp r3, r0 + bge _08092DE6 + b _08092E44_continue + .align 2, 0 +_08092DD8: .4byte gPartnerBodyPSI+0xC+0x28 +_08092DDC: + ldr r0, [r7, #4] + asrs r0, r0, #8 + adds r0, r0, r2 + cmp r3, r0 + blt _08092E44_continue +_08092DE6: + adds r0, r6, #0 + cmp r5, #0 + beq _08092DEE + ldr r0, _08092E28 @ =gPartnerBodyPSI+0xC+0x28 +_08092DEE: + movs r3, #5 + ldrsb r3, [r0, r3] + adds r0, r6, #0 + cmp r5, #0 + beq _08092DFA + ldr r0, _08092E28 @ =gPartnerBodyPSI+0xC+0x28 +_08092DFA: + movs r2, #7 + ldrsb r2, [r0, r2] + adds r0, r6, #0 + cmp r5, #0 + beq _08092E06 + ldr r0, _08092E28 @ =gPartnerBodyPSI+0xC+0x28 +_08092E06: + ldrb r0, [r0, #5] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r2, r2, r0 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + add r1, r8 + cmp r5, #0 + beq _08092E2C + ldr r0, [r4, #4] + asrs r0, r0, #8 + adds r0, r0, r3 + adds r0, r0, r2 + cmp r0, r1 + bge _08092E38 + b _08092E44_continue + .align 2, 0 +_08092E28: .4byte gPartnerBodyPSI+0xC+0x28 +_08092E2C: + ldr r0, [r7, #4] + asrs r0, r0, #8 + adds r0, r0, r3 + adds r0, r0, r2 + cmp r0, r1 + blt _08092E44_continue +_08092E38: + ldr r0, _08092E5C @ =gPlayer + cmp r5, #0 + beq _08092E40 + ldr r0, _08092E60 @ =gPartner +_08092E40: + bl Coll_DamagePlayer +_08092E44_continue: + adds r5, #1 + ldr r0, _08092E64 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r5, r0 + bge _08092E54 + b _08092C42_loop +_08092E54: + mov r0, sb + bl UpdateSpriteAnimation + b _08092E92 + .align 2, 0 +_08092E5C: .4byte gPlayer +_08092E60: .4byte gPartner +_08092E64: .4byte gNumSingleplayerCharacters +_08092E68: + cmp r1, #0x2f + bgt _08092E92 + mov r0, sb + bl UpdateSpriteAnimation + cmp r0, #0 + bne _08092E8C + mov r1, sb + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + movs r1, #0 + ldr r0, _08092EC4 @ =0x00000231 + mov r2, sb + strh r0, [r2, #0xa] + mov r0, sb + adds r0, #0x20 + strb r1, [r0] +_08092E8C: + mov r0, sb + bl UpdateSpriteAnimation +_08092E92: + mov r3, sl + ldr r0, [r3, #0x7c] + cmp r0, #0 + blt _08092EE6 + mov r1, sl + adds r1, #0x80 + ldr r0, [r1] + subs r0, #1 + str r0, [r1] + cmp r0, #0 + beq _08092EC8 + ldr r0, [r3, #0x78] + lsls r0, r0, #1 + movs r1, #5 + bl Div + rsbs r0, r0, #0 + mov r5, sl + str r0, [r5, #0x78] + movs r0, #0 + ldr r1, [sp, #0x10] @ r1 = &platform->unk74 + strb r0, [r1] + str r0, [r5, #0x7c] + b _08092EE6 + .align 2, 0 +_08092EC4: .4byte 0x00000231 +_08092EC8: + mov r1, sb + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + movs r1, #0 + ldr r0, _08092F08 @ =0x00000231 + mov r2, sb + strh r0, [r2, #0xa] + mov r0, sb + adds r0, #0x20 + strb r1, [r0] + ldr r0, _08092F0C @ =gCurTask + ldr r1, [r0] + ldr r0, _08092F10 @ =Task_UnderwaterLavaPlatform + str r0, [r1, #8] +_08092EE6: + mov r0, sb + bl DisplaySprite + ldr r0, [sp, #8] + bl UpdateSpriteAnimation + ldr r0, [sp, #8] + bl DisplaySprite + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08092F08: .4byte 0x00000231 +_08092F0C: .4byte gCurTask +_08092F10: .4byte Task_UnderwaterLavaPlatform + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Dir.inc b/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Dir.inc new file mode 100644 index 0000000000..7e50f832b8 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Dir.inc @@ -0,0 +1,869 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x24 + ldr r0, _080822D4 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + mov sl, r1 + ldr r0, [r1] + str r0, [sp, #0x10] + ldrb r1, [r1, #8] + lsls r1, r1, #3 + mov r2, sl + ldrh r0, [r2, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + ldr r3, [sp, #0x10] + ldrb r2, [r3, #1] + lsls r2, r2, #3 + mov r4, sl + ldrh r0, [r4, #6] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldr r3, _080822D8 @ =gCamera + ldrh r0, [r3] + lsrs r5, r1, #0x10 + str r5, [sp] + asrs r1, r1, #0x10 + subs r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #8] + ldrh r0, [r3, #2] + lsrs r1, r2, #0x10 + str r1, [sp, #4] + asrs r2, r2, #0x10 + subs r2, r2, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #0xc] + movs r7, #0 + ldr r3, _080822DC @ =gPartner + ldr r2, _080822E0 @ =gPlayer + mov sb, r2 + movs r4, #0 + str r4, [sp, #0x1c] +_080822C2: + cmp r7, #0 + beq _080822E4 + ldr r1, [r3, #0x10] + movs r0, #0x80 + ands r1, r0 + mov r5, sl + adds r5, #0x68 + str r5, [sp, #0x14] + b _080822F2 + .align 2, 0 +_080822D4: .4byte gCurTask +_080822D8: .4byte gCamera +_080822DC: .4byte gPartner +_080822E0: .4byte gPlayer +_080822E4: + mov r0, sb + ldr r1, [r0, #0x10] + movs r0, #0x80 + ands r1, r0 + mov r2, sl + adds r2, #0x68 + str r2, [sp, #0x14] +_080822F2: + cmp r1, #0 + beq _080822F8 + b _0808280A +_080822F8: + mov r1, sl + adds r1, #0x68 + ldrb r2, [r1] + adds r0, r2, #0 + asrs r0, r7 + movs r4, #1 + ands r0, r4 + str r1, [sp, #0x14] + cmp r0, #0 + bne _0808230E + b _080825E0 +_0808230E: + ldr r0, _08082370 @ =gPlayer + 0x6D + cmp r7, #0 + beq _08082316 + ldr r0, _08082374 @ =gPartner + 0x6D +_08082316: + movs r1, #0 + ldrsb r1, [r0, r1] + mov r0, sl + adds r0, #0x3c + str r0, [sp, #0x18] + ldrb r5, [r0] + cmp r1, r5 + beq _08082328 + b _080825D4 +_08082328: + movs r0, #0x3e + add r0, sl + mov r8, r0 + adds r4, r0, r7 + ldrb r1, [r4] + mov r2, sl + ldr r0, [r2, #0x50] + muls r0, r1, r0 + mov r5, sl + adds r5, #0x3d + ldrb r1, [r5] + str r3, [sp, #0x20] + bl Div + adds r6, r0, #0 + ldrb r1, [r4] + mov r4, sl + ldr r0, [r4, #0x54] + muls r0, r1, r0 + ldrb r1, [r5] + bl Div + adds r1, r0, #0 + mov r0, sl + adds r0, #0x40 + ldr r2, [sp, #0x1c] + adds r0, r0, r2 + ldr r0, [r0] + adds r0, r0, r6 + lsls r0, r0, #8 + mov r4, r8 + ldr r3, [sp, #0x20] + cmp r7, #0 + beq _08082378 + str r0, [r3] + b _0808237C + .align 2, 0 +_08082370: .4byte gPlayer + 0x6D +_08082374: .4byte gPartner + 0x6D +_08082378: + mov r2, sb + str r0, [r2] +_0808237C: + mov r0, sl + adds r0, #0x48 + ldr r2, [sp, #0x1c] + adds r0, r0, r2 + ldr r0, [r0] + adds r0, r0, r1 + lsls r0, r0, #8 + cmp r7, #0 + beq _08082392 + str r0, [r3, #4] + b _08082396 +_08082392: + mov r1, sb + str r0, [r1, #4] +_08082396: + mov r1, sl + adds r1, #0x58 + ldr r2, [sp, #0x1c] + adds r0, r1, r2 + ldr r2, [r0] + mov r8, r1 + cmp r7, #0 + beq _080823AA + ldr r0, [r3] + b _080823AE +_080823AA: + mov r1, sb + ldr r0, [r1] +_080823AE: + subs r0, r0, r2 + cmp r7, #0 + beq _080823B8 + strh r0, [r3, #8] + b _080823BC +_080823B8: + mov r2, sb + strh r0, [r2, #8] +_080823BC: + mov r1, sl + adds r1, #0x60 + ldr r2, [sp, #0x1c] + adds r0, r1, r2 + ldr r2, [r0] + adds r6, r1, #0 + cmp r7, #0 + beq _080823D0 + ldr r0, [r3, #4] + b _080823D4 +_080823D0: + mov r1, sb + ldr r0, [r1, #4] +_080823D4: + subs r0, r0, r2 + cmp r7, #0 + beq _080823DE + strh r0, [r3, #0xa] + b _080823E2 +_080823DE: + mov r2, sb + strh r0, [r2, #0xa] +_080823E2: + adds r1, r4, r7 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + ldr r2, _08082430 @ =gPlayer + 0x6D + ldrb r5, [r5] + cmp r0, r5 + bhs _0808240C + adds r0, r2, #0 + cmp r7, #0 + beq _080823FE + ldr r0, _08082434 @ =gPartner + 0x6D +_080823FE: + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldr r4, [sp, #0x18] + ldrb r4, [r4] + cmp r0, r4 + ble _080824EA +_0808240C: + adds r0, r2, #0 + cmp r7, #0 + beq _08082414 + ldr r0, _08082434 @ =gPartner + 0x6D +_08082414: + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldr r5, [sp, #0x18] + ldrb r5, [r5] + cmp r0, r5 + bne _080824DC + cmp r7, #0 + beq _0808243C + ldr r0, [r3, #0x10] + ldr r1, _08082438 @ =0xFFDFFFFF + ands r0, r1 + str r0, [r3, #0x10] + b _08082448 + .align 2, 0 +_08082430: .4byte gPlayer + 0x6D +_08082434: .4byte gPartner + 0x6D +_08082438: .4byte 0xFFDFFFFF +_0808243C: + mov r1, sb + ldr r0, [r1, #0x10] + ldr r1, _0808245C @ =0xFFDFFFFF + ands r0, r1 + mov r2, sb + str r0, [r2, #0x10] +_08082448: + ldr r0, _08082460 @ =gPlayerControls + ldrh r1, [r0] + ldrh r0, [r0, #2] + orrs r1, r0 + cmp r7, #0 + beq _08082464 + ldrh r0, [r3, #0x38] + orrs r1, r0 + strh r1, [r3, #0x38] + b _0808246C + .align 2, 0 +_0808245C: .4byte 0xFFDFFFFF +_08082460: .4byte gPlayerControls +_08082464: + mov r4, sb + ldrh r0, [r4, #0x38] + orrs r1, r0 + strh r1, [r4, #0x38] +_0808246C: + cmp r7, #0 + beq _08082480 + ldr r0, [r3, #0x10] + ldr r1, _0808247C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r3, #0x10] + b _0808248A + .align 2, 0 +_0808247C: .4byte 0xFFBFFFFF +_08082480: + mov r5, sb + ldr r0, [r5, #0x10] + ldr r1, _0808249C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] +_0808248A: + cmp r7, #0 + beq _080824A4 + ldr r0, _080824A0 @ =gPartner + 0x26 + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + ldr r1, _080824A0 @ =gPartner + 0x26 + strb r0, [r1] + b _080824AE + .align 2, 0 +_0808249C: .4byte 0xFFBFFFFF +_080824A0: .4byte gPartner + 0x26 +_080824A4: + ldr r2, _080824B8 @ =gPlayer + 0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] +_080824AE: + cmp r7, #0 + beq _080824BC + movs r4, #0 + strh r4, [r3, #0xa] + b _080824C0 + .align 2, 0 +_080824B8: .4byte gPlayer + 0x26 +_080824BC: + mov r5, sb + strh r7, [r5, #0xa] +_080824C0: + cmp r7, #0 + beq _080824CA + movs r0, #0 + strh r0, [r3, #8] + b _080824CE +_080824CA: + mov r1, sb + strh r7, [r1, #8] +_080824CE: + cmp r7, #0 + beq _080824D8 + movs r2, #0 + strh r2, [r3, #0xc] + b _080824DC +_080824D8: + mov r4, sb + strh r7, [r4, #0xc] +_080824DC: + movs r1, #1 + lsls r1, r7 + ldr r5, [sp, #0x14] + ldrb r0, [r5] + bics r0, r1 + strb r0, [r5] + b _080825A4 +_080824EA: + cmp r7, #0 + beq _080824FA + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r3, #0x10] + b _08082508 +_080824FA: + mov r1, sb + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + mov r4, sb + str r0, [r4, #0x10] +_08082508: + subs r2, #0x6d + ldr r0, _08082520 @ =gPlayerControls + ldrh r1, [r0] + ldrh r0, [r0, #2] + orrs r1, r0 + cmp r7, #0 + beq _08082524 + ldrh r0, [r3, #0x38] + orrs r1, r0 + strh r1, [r3, #0x38] + b _0808252C + .align 2, 0 +_08082520: .4byte gPlayerControls +_08082524: + mov r5, sb + ldrh r0, [r5, #0x38] + orrs r1, r0 + strh r1, [r5, #0x38] +_0808252C: + cmp r7, #0 + beq _0808253C + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r3, #0x10] + b _0808254A +_0808253C: + mov r1, sb + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + mov r4, sb + str r0, [r4, #0x10] +_0808254A: + cmp r7, #0 + beq _08082554 + movs r5, #0 + strh r5, [r3, #0xc] + b _08082556 +_08082554: + strh r7, [r2, #0xc] +_08082556: + cmp r7, #0 + beq _08082560 + movs r0, #0 + strh r0, [r3, #0x38] + b _08082562 +_08082560: + strh r7, [r2, #0x38] +_08082562: + cmp r7, #0 + beq _0808256C + movs r1, #0 + strh r1, [r3, #0x3a] + b _0808256E +_0808256C: + strh r7, [r2, #0x3a] +_0808256E: + ldr r0, _080825B0 @ =gPlayer + cmp r7, #0 + beq _08082576 + ldr r0, _080825B4 @ =gPartner +_08082576: + movs r1, #0xe + str r3, [sp, #0x20] + bl Player_HandleSpriteYOffsetChange + ldr r1, _080825B0 @ =gPlayer + ldr r3, [sp, #0x20] + cmp r7, #0 + beq _08082588 + ldr r1, _080825B4 @ =gPartner +_08082588: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _080825B0 @ =gPlayer + cmp r7, #0 + beq _08082594 + ldr r1, _080825B4 @ =gPartner +_08082594: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #1 + lsls r0, r7 + ldr r2, [sp, #0x14] + ldrb r1, [r2] + orrs r0, r1 + strb r0, [r2] +_080825A4: + ldr r1, [sp, #0x1c] + add r1, r8 + cmp r7, #0 + beq _080825B8 + ldr r0, [r3] + b _080825BC + .align 2, 0 +_080825B0: .4byte gPlayer +_080825B4: .4byte gPartner +_080825B8: + mov r4, sb + ldr r0, [r4] +_080825BC: + str r0, [r1] + ldr r5, [sp, #0x1c] + adds r1, r6, r5 + cmp r7, #0 + beq _080825CC + ldr r0, [r3, #4] + str r0, [r1] + b _0808280A +_080825CC: + mov r2, sb + ldr r0, [r2, #4] + str r0, [r1] + b _0808280A +_080825D4: + adds r0, r4, #0 + lsls r0, r7 + bics r2, r0 + ldr r4, [sp, #0x14] + strb r2, [r4] + b _0808280A +_080825E0: + cmp r7, #0 + beq _080825F8 + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _0808260C + mov r5, sl + adds r5, #0x3c + str r5, [sp, #0x18] + b _08082624 +_080825F8: + mov r0, sb + ldr r1, [r0, #0x10] + movs r0, #0x80 + lsls r0, r0, #0xf + ands r1, r0 + mov r2, sl + adds r2, #0x3c + str r2, [sp, #0x18] + cmp r1, #0 + beq _08082624 +_0808260C: + ldr r0, _08082648 @ =gPlayer + 0x6D + cmp r7, #0 + beq _08082614 + ldr r0, _0808264C @ =gPartner + 0x6D +_08082614: + movs r1, #0 + ldrsb r1, [r0, r1] + mov r0, sl + adds r0, #0x3c + str r0, [sp, #0x18] + ldrb r4, [r0] + cmp r1, r4 + blt _0808262E +_08082624: + ldr r5, [sp, #0x18] + ldrb r0, [r5] + cmp r0, #0 + beq _0808262E + b _0808280A +_0808262E: + ldr r0, [sp] + lsls r1, r0, #0x10 + asrs r0, r1, #0x10 + adds r2, r0, #0 + subs r2, #8 + cmp r7, #0 + beq _08082650 + ldr r0, [r3] + asrs r0, r0, #8 + cmp r2, r0 + ble _0808265C + b _0808280A + .align 2, 0 +_08082648: .4byte gPlayer + 0x6D +_0808264C: .4byte gPartner + 0x6D +_08082650: + mov r4, sb + ldr r0, [r4] + asrs r0, r0, #8 + cmp r2, r0 + ble _0808265C + b _0808280A +_0808265C: + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #8 + cmp r7, #0 + beq _08082670 + ldr r0, [r3] + asrs r0, r0, #8 + cmp r1, r0 + bge _0808267C + b _0808280A +_08082670: + mov r5, sb + ldr r0, [r5] + asrs r0, r0, #8 + cmp r1, r0 + bge _0808267C + b _0808280A +_0808267C: + ldr r0, [sp, #4] + lsls r1, r0, #0x10 + asrs r0, r1, #0x10 + adds r2, r0, #0 + subs r2, #0xa + cmp r7, #0 + beq _08082694 + ldr r0, [r3, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _080826A0 + b _0808280A +_08082694: + mov r4, sb + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _080826A0 + b _0808280A +_080826A0: + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #0xa + cmp r7, #0 + beq _080826B4 + ldr r0, [r3, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _080826C0 + b _0808280A +_080826B4: + mov r5, sb + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _080826C0 + b _0808280A +_080826C0: + mov r0, sl + adds r0, #0x3e + adds r0, r0, r7 + movs r1, #0 + strb r1, [r0] + cmp r7, #0 + beq _080826D8 + ldr r0, [r3, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r3, #0x10] + b _080826E2 +_080826D8: + mov r2, sb + ldr r0, [r2, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r2, #0x10] +_080826E2: + ldr r2, _080826F4 @ =gPlayer + cmp r7, #0 + beq _080826F8 + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r3, #0x10] + b _08082704 + .align 2, 0 +_080826F4: .4byte gPlayer +_080826F8: + mov r4, sb + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r4, #0x10] +_08082704: + cmp r7, #0 + beq _08082714 + ldr r0, [r3, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r3, #0x10] + b _08082720 +_08082714: + mov r5, sb + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r5, #0x10] +_08082720: + mov r0, sl + adds r0, #0x40 + ldr r4, [sp, #0x1c] + adds r1, r0, r4 + cmp r7, #0 + beq _08082730 + ldr r0, [r3] + b _08082732 +_08082730: + ldr r0, [r2] +_08082732: + asrs r0, r0, #8 + str r0, [r1] + mov r0, sl + adds r0, #0x48 + ldr r5, [sp, #0x1c] + adds r1, r0, r5 + cmp r7, #0 + beq _08082746 + ldr r0, [r3, #4] + b _08082748 +_08082746: + ldr r0, [r2, #4] +_08082748: + asrs r0, r0, #8 + str r0, [r1] + cmp r7, #0 + beq _08082756 + movs r0, #0 + strh r0, [r3, #0xa] + b _08082758 +_08082756: + strh r7, [r2, #0xa] +_08082758: + cmp r7, #0 + beq _08082762 + movs r1, #0 + strh r1, [r3, #8] + b _08082764 +_08082762: + strh r7, [r2, #8] +_08082764: + cmp r7, #0 + beq _0808276E + movs r4, #0 + strh r4, [r3, #0xc] + b _08082770 +_0808276E: + strh r7, [r2, #0xc] +_08082770: + cmp r7, #0 + beq _0808277A + movs r5, #0 + strh r5, [r3, #0x38] + b _0808277C +_0808277A: + strh r7, [r2, #0x38] +_0808277C: + cmp r7, #0 + beq _08082786 + movs r0, #0 + strh r0, [r3, #0x3a] + b _08082788 +_08082786: + strh r7, [r2, #0x3a] +_08082788: + ldr r0, _080827EC @ =gPlayer + cmp r7, #0 + beq _08082790 + ldr r0, _080827F0 @ =gPartner +_08082790: + movs r1, #0xe + str r3, [sp, #0x20] + bl Player_HandleSpriteYOffsetChange + ldr r1, _080827EC @ =gPlayer + ldr r3, [sp, #0x20] + cmp r7, #0 + beq _080827A2 + ldr r1, _080827F0 @ =gPartner +_080827A2: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _080827EC @ =gPlayer + cmp r7, #0 + beq _080827AE + ldr r1, _080827F0 @ =gPartner +_080827AE: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #0xaa + str r3, [sp, #0x20] + bl m4aSongNumStart + movs r1, #1 + lsls r1, r7 + ldr r2, [sp, #0x14] + ldrb r0, [r2] + orrs r1, r0 + movs r2, #0 + ldr r4, [sp, #0x14] + strb r1, [r4] + ldr r1, _080827F4 @ =gPlayer + 0x6D + ldr r3, [sp, #0x20] + cmp r7, #0 + beq _080827D4 + ldr r1, _080827F8 @ =gPartner + 0x6D +_080827D4: + ldr r5, [sp, #0x18] + ldrb r0, [r5] + strb r0, [r1] + cmp r7, #0 + beq _08082800 + ldr r1, _080827FC @ =gPartner + 0x26 + ldrb r0, [r1] + movs r1, #0x80 + orrs r0, r1 + ldr r2, _080827FC @ =gPartner + 0x26 + strb r0, [r2] + b _0808280A + .align 2, 0 +_080827EC: .4byte gPlayer +_080827F0: .4byte gPartner +_080827F4: .4byte gPlayer + 0x6D +_080827F8: .4byte gPartner + 0x6D +_080827FC: .4byte gPartner + 0x26 +_08082800: + ldr r4, _08082874 @ =gPlayer + 0x26 + ldrb r0, [r4] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r4] +_0808280A: + ldr r5, [sp, #0x1c] + adds r5, #4 + str r5, [sp, #0x1c] + adds r7, #1 + ldr r0, _08082878 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r7, r0 + bge _08082820 + b _080822C2 +_08082820: + ldr r0, [sp, #0x14] + ldrb r1, [r0] + movs r0, #3 + ands r0, r1 + cmp r0, #0 + bne _08082864 + ldr r1, [sp, #8] + lsls r0, r1, #0x10 + movs r2, #0x80 + lsls r2, r2, #0x10 + adds r0, r0, r2 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08082854 + ldr r3, [sp, #0xc] + lsls r0, r3, #0x10 + asrs r2, r0, #0x10 + adds r0, r2, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08082854 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r2, r0 + ble _08082864 +_08082854: + mov r4, sl + ldrb r0, [r4, #8] + ldr r5, [sp, #0x10] + strb r0, [r5] + ldr r0, _0808287C @ =gCurTask + ldr r0, [r0] + bl TaskDestroy +_08082864: + add sp, #0x24 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08082874: .4byte gPlayer + 0x26 +_08082878: .4byte gNumSingleplayerCharacters +_0808287C: .4byte gCurTask + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Exit.inc b/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Exit.inc new file mode 100644 index 0000000000..44664bcdfe --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Exit.inc @@ -0,0 +1,887 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + ldr r0, _0808387C @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 @ r7 = exit + adds r0, #0xc + adds r0, r4, r0 + str r0, [sp, #0x10] @ sp10 = s + ldr r1, [r7] + str r1, [sp, #0x14] @ sp14 = me + ldrb r2, [r7, #8] + lsls r2, r2, #3 + ldrh r0, [r7, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldrb r1, [r1, #1] + lsls r1, r1, #3 + ldrh r0, [r7, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + ldr r3, _08083880 @ =gCamera + ldrh r0, [r3] + lsrs r5, r2, #0x10 + str r5, [sp] @ sp00 = worldX + asrs r2, r2, #0x10 + subs r2, r2, r0 + lsls r0, r2, #0x10 + lsrs r5, r0, #0x10 @ r5 = screenX + ldrh r0, [r3, #2] + lsrs r6, r1, #0x10 + str r6, [sp, #4] @ sp04 = worldY + asrs r1, r1, #0x10 + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] @ sp08 = screenY + ldr r0, [sp, #0x10] + strh r2, [r0, #0x16] @ s->x = screenX; + ldrh r0, [r3, #2] + subs r1, r1, r0 + ldr r2, [sp, #0x10] + strh r1, [r2, #0x18] @ s->y = screenY; + ldr r3, _08083884 @ =0x03000041 + adds r4, r4, r3 + ldrb r0, [r4] + movs r6, #0 + str r6, [sp, #0xc] + cmp r0, #0 + beq _08083868 + ldr r0, _08083888 @ =0x0000FFE8 + str r0, [sp, #0xc] +_08083868: + movs r6, #0 + lsls r5, r5, #0x10 + str r5, [sp, #0x18] + ldr r4, _0808388C @ =gPartner + ldr r5, _08083890 @ =gPlayer + mov sl, r6 @ sl = i * 4 +_08083874_loop: + cmp r6, #0 + beq _08083894 + ldr r0, [r4, #0x10] + b _08083896 + .align 2, 0 +_0808387C: .4byte gCurTask +_08083880: .4byte gCamera +_08083884: .4byte 0x03000041 +_08083888: .4byte 0x0000FFE8 +_0808388C: .4byte gPartner +_08083890: .4byte gPlayer +_08083894: + ldr r0, [r5, #0x10] +_08083896: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080838A0 + b _08083D6A_continue +_080838A0: + adds r2, r7, #0 + adds r2, #0x40 + ldrb r1, [r2] + asrs r1, r6 + movs r0, #1 + ands r1, r0 + mov r8, r2 @ r8 = r2 = &exit->unk40 + cmp r1, #0 + bne _080838B4 + b _08083ADC +_080838B4: + cmp r6, #0 + beq _080838C0 + ldrh r0, [r4, #0xa] + adds r0, #0x2a + strh r0, [r4, #0xa] + b _080838C6 +_080838C0: + ldrh r0, [r5, #0xa] + adds r0, #0x2a + strh r0, [r5, #0xa] +_080838C6: + adds r0, r7, #0 + adds r0, #0x4c + mov r2, sl @ r2 = sl = i * 4 + adds r1, r0, r2 + ldr r2, [r1] @ r2 = exit->unk4C[i] + mov sb, r0 + cmp r6, #0 + beq _080838DC + movs r3, #0xa + ldrsh r0, [r4, r3] + b _080838E0 +_080838DC: + movs r3, #0xa + ldrsh r0, [r5, r3] +_080838E0: + adds r0, r2, r0 + str r0, [r1] + mov r0, sb + add r0, sl @ r0 = &exit->unk4C[i] + ldr r0, [r0] + cmp r6, #0 + beq _080838F2 + str r0, [r4, #4] + b _080838F4 +_080838F2: + str r0, [r5, #4] +_080838F4: + adds r0, r7, #0 + adds r0, #0x44 + add r0, sl + ldr r0, [r0] + cmp r6, #0 + beq _08083904 + str r0, [r4] + b _08083906 +_08083904: + str r0, [r5] +_08083906: + cmp r6, #0 + beq _08083918 + ldr r1, _08083914 @ =gPartner + 0x54 + ldrh r0, [r1] + subs r0, #4 + strh r0, [r1] + b _08083920 + .align 2, 0 +_08083914: .4byte gPartner + 0x54 +_08083918: + ldr r2, _08083930 @ =gPlayer + 0x54 + ldrh r0, [r2] + subs r0, #4 + strh r0, [r2] +_08083920: + cmp r6, #0 + beq _08083938 + ldr r3, _08083934 @ =gPartner + 0x54 + movs r1, #0 + ldrsh r0, [r3, r1] + cmp r0, #0xaf + ble _08083942 + b _0808395E + .align 2, 0 +_08083930: .4byte gPlayer + 0x54 +_08083934: .4byte gPartner + 0x54 +_08083938: + ldr r2, _08083950 @ =gPlayer + 0x54 + movs r3, #0 + ldrsh r0, [r2, r3] + cmp r0, #0xaf + bgt _0808395E +_08083942: + cmp r6, #0 + beq _08083958 + movs r0, #0xb0 + ldr r1, _08083954 @ =gPartner + 0x54 + strh r0, [r1] + b _0808395E + .align 2, 0 +_08083950: .4byte gPlayer + 0x54 +_08083954: .4byte gPartner + 0x54 +_08083958: + movs r0, #0xb0 + ldr r2, _0808396C @ =gPlayer + 0x54 + strh r0, [r2] +_0808395E: + cmp r6, #0 + beq _08083974 + ldr r3, _08083970 @ =gPartner + 0x54 + movs r1, #0 + ldrsh r0, [r3, r1] + b _0808397A + .align 2, 0 +_0808396C: .4byte gPlayer + 0x54 +_08083970: .4byte gPartner + 0x54 +_08083974: + ldr r2, _08083984 @ =gPlayer + 0x54 + movs r3, #0 + ldrsh r0, [r2, r3] +_0808397A: + cmp r6, #0 + beq _0808398C + ldr r1, _08083988 @ =gPartner + 0x56 + strh r0, [r1] + b _08083990 + .align 2, 0 +_08083984: .4byte gPlayer + 0x54 +_08083988: .4byte gPartner + 0x56 +_0808398C: + ldr r2, _080839A0 @ =gPlayer + 0x56 + strh r0, [r2] +_08083990: + cmp r6, #0 + beq _080839A4 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r4, #0x10] + b _080839AE + .align 2, 0 +_080839A0: .4byte gPlayer + 0x56 +_080839A4: + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r5, #0x10] +_080839AE: + cmp r6, #0 + beq _080839BE + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + b _080839C8 +_080839BE: + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r5, #0x10] +_080839C8: + cmp r6, #0 + beq _080839D6 + movs r3, #0xa + ldrsh r0, [r4, r3] + cmp r0, #0 + bgt _080839E0 + b _08083D6A_continue +_080839D6: + movs r1, #0xa + ldrsh r0, [r5, r1] + cmp r0, #0 + bgt _080839E0 + b _08083D6A_continue +_080839E0: + ldr r0, _080839F8 @ =gPlayer + cmp r6, #0 + beq _080839E8 + ldr r0, _080839FC @ =gPartner +_080839E8: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _08083A04 + movs r0, #5 + ldr r2, _08083A00 @ =gPartner + 0x40 + strb r0, [r2] + b _08083A0A + .align 2, 0 +_080839F8: .4byte gPlayer +_080839FC: .4byte gPartner +_08083A00: .4byte gPartner + 0x40 +_08083A04: + movs r0, #5 + ldr r3, _08083A18 @ =gPlayer + 0x40 + strb r0, [r3] +_08083A0A: + cmp r6, #0 + beq _08083A20 + ldr r0, [r4, #0x10] + ldr r1, _08083A1C @ =0xFFDFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08083A28 + .align 2, 0 +_08083A18: .4byte gPlayer + 0x40 +_08083A1C: .4byte 0xFFDFFFFF +_08083A20: + ldr r0, [r5, #0x10] + ldr r1, _08083A3C @ =0xFFDFFFFF + ands r0, r1 + str r0, [r5, #0x10] +_08083A28: + ldr r0, _08083A40 @ =gPlayerControls + ldrh r1, [r0] + ldrh r0, [r0, #2] + orrs r1, r0 + cmp r6, #0 + beq _08083A44 + ldrh r0, [r4, #0x38] + orrs r1, r0 + strh r1, [r4, #0x38] + b _08083A4A + .align 2, 0 +_08083A3C: .4byte 0xFFDFFFFF +_08083A40: .4byte gPlayerControls +_08083A44: + ldrh r0, [r5, #0x38] + orrs r1, r0 + strh r1, [r5, #0x38] +_08083A4A: + cmp r6, #0 + beq _08083A5C + ldr r0, [r4, #0x10] + ldr r1, _08083A58 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + b _08083A64 + .align 2, 0 +_08083A58: .4byte 0xFFBFFFFF +_08083A5C: + ldr r0, [r5, #0x10] + ldr r1, _08083A80 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] +_08083A64: + movs r1, #1 + lsls r1, r6 + mov r2, r8 @ r2 = r8 = &exit->unk40 + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] + cmp r6, #0 + beq _08083A88 + movs r0, #0x80 + lsls r0, r0, #1 + ldr r3, _08083A84 @ =gPartner + 0x54 + strh r0, [r3] + b _08083A90 + .align 2, 0 +_08083A80: .4byte 0xFFBFFFFF +_08083A84: .4byte gPartner + 0x54 +_08083A88: + movs r0, #0x80 + lsls r0, r0, #1 + ldr r1, _08083AA0 @ =gPlayer + 0x54 + strh r0, [r1] +_08083A90: + cmp r6, #0 + beq _08083AA8 + movs r0, #0x80 + lsls r0, r0, #1 + ldr r2, _08083AA4 @ =gPartner + 0x56 + strh r0, [r2] + b _08083AB0 + .align 2, 0 +_08083AA0: .4byte gPlayer + 0x54 +_08083AA4: .4byte gPartner + 0x56 +_08083AA8: + movs r0, #0x80 + lsls r0, r0, #1 + ldr r3, _08083AC4 @ =gPlayer + 0x56 + strh r0, [r3] +_08083AB0: + cmp r6, #0 + beq _08083ACC + ldr r0, _08083AC8 @ =gPartner + 0x26 + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + ldr r1, _08083AC8 @ =gPartner + 0x26 + strb r0, [r1] + b _08083D6A_continue + .align 2, 0 +_08083AC4: .4byte gPlayer + 0x56 +_08083AC8: .4byte gPartner + 0x26 +_08083ACC: + ldr r2, _08083AD8 @ =gPlayer + 0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + b _08083D6A_continue + .align 2, 0 +_08083AD8: .4byte gPlayer + 0x26 +_08083ADC: + ldr r0, _08083B0C @ =gPlayer + 0x6D + cmp r6, #0 + beq _08083AE4 + ldr r0, _08083B10 @ =gPartner + 0x6D +_08083AE4: + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0x7f + bne _08083AF0 + b _08083D26 +_08083AF0: + ldr r0, [sp] @ r0 = sp00 = worldX + lsls r3, r0, #0x10 + asrs r2, r3, #0x10 @ r2 = sp00 = worldX + ldr r0, [sp, #0xc] @ sp0C = sp0C + lsls r1, r0, #0x10 + asrs r0, r1, #0x10 + adds r2, r2, r0 + cmp r6, #0 + beq _08083B14 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08083B1E + b _08083D26 + .align 2, 0 +_08083B0C: .4byte gPlayer + 0x6D +_08083B10: .4byte gPartner + 0x6D +_08083B14: + ldr r0, [r5] + asrs r0, r0, #8 + cmp r2, r0 + ble _08083B1E + b _08083D26 +_08083B1E: + asrs r0, r3, #0x10 @ r0 = worldX + asrs r1, r1, #0x10 @ r1 = sp0C + adds r0, r0, r1 + adds r1, r0, #0 + adds r1, #0x18 + cmp r6, #0 + beq _08083B36 + ldr r0, [r4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08083B40 + b _08083D26 +_08083B36: + ldr r0, [r5] + asrs r0, r0, #8 + cmp r1, r0 + bge _08083B40 + b _08083D26 +_08083B40: + ldr r2, [sp, #4] + lsls r1, r2, #0x10 + asrs r0, r1, #0x10 + adds r2, r0, #0 + subs r2, #0x18 + cmp r6, #0 + beq _08083B58 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08083B62 + b _08083D26 +_08083B58: + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08083B62 + b _08083D26 +_08083B62: + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #0x18 + cmp r6, #0 + beq _08083B76 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08083B80 + b _08083D26 +_08083B76: + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08083B80 + b _08083D26 +_08083B80: + mov r3, r8 @ r3 = r8 = &exit->unk40 + ldrb r1, [r3] + asrs r1, r6 + movs r0, #1 + ands r1, r0 + ldr r3, _08083BA0 @ =gPlayer + cmp r1, #0 + bne _08083BBC + adds r0, r7, #0 + adds r0, #0x44 + mov r2, sl + adds r1, r0, r2 + cmp r6, #0 + beq _08083BA4 + ldr r0, [r4] + b _08083BA6 + .align 2, 0 +_08083BA0: .4byte gPlayer +_08083BA4: + ldr r0, [r5] +_08083BA6: + str r0, [r1] + adds r0, r7, #0 + adds r0, #0x4c + mov r2, sl + adds r1, r0, r2 + cmp r6, #0 + beq _08083BB8 + ldr r0, [r4, #4] + b _08083BBA +_08083BB8: + ldr r0, [r3, #4] +_08083BBA: + str r0, [r1] +_08083BBC: + ldr r0, _08083BD8 @ =gPlayer + cmp r6, #0 + beq _08083BC4 + ldr r0, _08083BDC @ =gPartner +_08083BC4: + bl Player_TransitionCancelFlyingAndBoost + cmp r6, #0 + beq _08083BE4 + ldr r0, [r4, #0x10] + ldr r1, _08083BE0 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + b _08083BEC + .align 2, 0 +_08083BD8: .4byte gPlayer +_08083BDC: .4byte gPartner +_08083BE0: .4byte 0xFFFFFEFF +_08083BE4: + ldr r0, [r5, #0x10] + ldr r1, _08083BFC @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] +_08083BEC: + ldr r3, _08083C00 @ =gPlayer + cmp r6, #0 + beq _08083C04 + ldr r0, [r4, #0x10] + movs r1, #0x10 + orrs r0, r1 + str r0, [r4, #0x10] + b _08083C0C + .align 2, 0 +_08083BFC: .4byte 0xFFFFFEFF +_08083C00: .4byte gPlayer +_08083C04: + ldr r0, [r5, #0x10] + movs r1, #0x10 + orrs r0, r1 + str r0, [r5, #0x10] +_08083C0C: + cmp r6, #0 + beq _08083C1A + ldr r0, [r4, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r4, #0x10] + b _08083C22 +_08083C1A: + ldr r0, [r5, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r5, #0x10] +_08083C22: + cmp r6, #0 + beq _08083C30 + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r4, #0x10] + b _08083C38 +_08083C30: + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] +_08083C38: + cmp r6, #0 + beq _08083C48 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r4, #0x10] + b _08083C52 +_08083C48: + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r5, #0x10] +_08083C52: + cmp r6, #0 + beq _08083C62 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + b _08083C6C +_08083C62: + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r5, #0x10] +_08083C6C: + cmp r6, #0 + beq _08083C78 + movs r0, #0xfb + lsls r0, r0, #8 + strh r0, [r4, #0xa] + b _08083C7E +_08083C78: + movs r0, #0xfb + lsls r0, r0, #8 + strh r0, [r3, #0xa] +_08083C7E: + cmp r6, #0 + beq _08083C88 + movs r0, #0 + strh r0, [r4, #8] + b _08083C8A +_08083C88: + strh r6, [r3, #8] +_08083C8A: + cmp r6, #0 + beq _08083C94 + movs r0, #0 + strh r0, [r4, #0xc] + b _08083C96 +_08083C94: + strh r6, [r3, #0xc] +_08083C96: + cmp r6, #0 + beq _08083CA0 + movs r0, #0 + strh r0, [r4, #0x38] + b _08083CA2 +_08083CA0: + strh r6, [r3, #0x38] +_08083CA2: + cmp r6, #0 + beq _08083CAC + movs r0, #0 + strh r0, [r4, #0x3a] + b _08083CAE +_08083CAC: + strh r6, [r3, #0x3a] +_08083CAE: + ldr r0, _08083D08 @ =gPlayer + cmp r6, #0 + beq _08083CB6 + ldr r0, _08083D0C @ =gPartner +_08083CB6: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _08083D08 @ =gPlayer + cmp r6, #0 + beq _08083CC4 + ldr r1, _08083D0C @ =gPartner +_08083CC4: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08083D08 @ =gPlayer + cmp r6, #0 + beq _08083CD0 + ldr r1, _08083D0C @ =gPartner +_08083CD0: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #0xaa + bl m4aSongNumStart + ldr r1, _08083D10 @ =gPlayer + 0x6D + cmp r6, #0 + beq _08083CE2 + ldr r1, _08083D14 @ =gPartner + 0x6D +_08083CE2: + movs r0, #0x7f + strb r0, [r1] + movs r1, #1 + lsls r1, r6 + mov r3, r8 + ldrb r0, [r3] + orrs r1, r0 + movs r0, #0 + strb r1, [r3] + cmp r6, #0 + beq _08083D1C + ldr r1, _08083D18 @ =gPartner + 0x26 + ldrb r0, [r1] + movs r1, #0x80 + orrs r0, r1 + ldr r2, _08083D18 @ =gPartner + 0x26 + strb r0, [r2] + b _08083D26 + .align 2, 0 +_08083D08: .4byte gPlayer +_08083D0C: .4byte gPartner +_08083D10: .4byte gPlayer + 0x6D +_08083D14: .4byte gPartner + 0x6D +_08083D18: .4byte gPartner + 0x26 +_08083D1C: + ldr r3, _08083D3C @ =gPlayer + 0x26 + ldrb r0, [r3] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r3] +_08083D26: + cmp r6, #0 + beq _08083D44 + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + ands r0, r1 + cmp r0, #0 + bne _08083D6A_continue + ldr r3, _08083D40 @ =gPlayer + b _08083D52 + .align 2, 0 +_08083D3C: .4byte gPlayer + 0x26 +_08083D40: .4byte gPlayer +_08083D44: + ldr r1, [r5, #0x10] + movs r0, #0x80 + lsls r0, r0, #0xe + ands r1, r0 + ldr r3, _08083DD8 @ =gPlayer + cmp r1, #0 + bne _08083D6A_continue +_08083D52: + ldr r1, [sp] + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + ldr r2, [sp, #4] + lsls r0, r2, #0x10 + asrs r2, r0, #0x10 + cmp r6, #0 + beq _08083D64 + ldr r3, _08083DDC @ =gPartner +_08083D64: + ldr r0, [sp, #0x10] + bl sub_80096B0 +_08083D6A_continue: + movs r3, #4 + add sl, r3 + adds r6, #1 + ldr r0, _08083DE0 @ =gNumSingleplayerCharacters + movs r1, #0 + ldrsb r1, [r0, r1] + mov sb, r0 + cmp r6, r1 + bge _08083D7E + b _08083874_loop +_08083D7E: + ldr r5, [sp, #0x18] + movs r6, #0x80 + lsls r6, r6, #0x10 + adds r1, r5, r6 + movs r0, #0xf8 + lsls r0, r0, #0x11 + cmp r1, r0 + bhi _08083DA4 + ldr r1, [sp, #8] + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08083DA4 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08083E42 +_08083DA4: + movs r2, #0 + ldr r3, _08083DE4 @ =gCurTask + mov sl, r3 + movs r5, #0x40 + adds r5, r5, r7 + mov r8, r5 + ldr r4, _08083DDC @ =gPartner + ldr r6, _08083DE8 @ =0xFFDFFFFF + mov ip, r6 + ldr r3, _08083DD8 @ =gPlayer + ldr r6, _08083DEC @ =0xFFBFFFFF + ldr r5, _08083DF0 @ =gPlayerControls +_08083DBC_loop: + mov r1, r8 + ldrb r0, [r1] + asrs r0, r2 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08083E26_continue + cmp r2, #0 + beq _08083DF4 + ldr r0, [r4, #0x10] + mov r1, ip + ands r0, r1 + str r0, [r4, #0x10] + b _08083DFC + .align 2, 0 +_08083DD8: .4byte gPlayer +_08083DDC: .4byte gPartner +_08083DE0: .4byte gNumSingleplayerCharacters +_08083DE4: .4byte gCurTask +_08083DE8: .4byte 0xFFDFFFFF +_08083DEC: .4byte 0xFFBFFFFF +_08083DF0: .4byte gPlayerControls +_08083DF4: + ldr r0, [r3, #0x10] + mov r1, ip + ands r0, r1 + str r0, [r3, #0x10] +_08083DFC: + ldrh r1, [r5] + ldrh r0, [r5, #2] + orrs r1, r0 + cmp r2, #0 + beq _08083E0E + ldrh r0, [r4, #0x38] + orrs r1, r0 + strh r1, [r4, #0x38] + b _08083E14 +_08083E0E: + ldrh r0, [r3, #0x38] + orrs r1, r0 + strh r1, [r3, #0x38] +_08083E14: + cmp r2, #0 + beq _08083E20 + ldr r0, [r4, #0x10] + ands r0, r6 + str r0, [r4, #0x10] + b _08083E26_continue +_08083E20: + ldr r0, [r3, #0x10] + ands r0, r6 + str r0, [r3, #0x10] +_08083E26_continue: + adds r2, #1 + mov r1, sb + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r2, r0 + blt _08083DBC_loop + ldrb r0, [r7, #8] + ldr r2, [sp, #0x14] + strb r0, [r2] + mov r3, sl + ldr r0, [r3] + bl TaskDestroy + b _08083E4E +_08083E42: + ldr r0, [sp, #0x10] + bl UpdateSpriteAnimation + ldr r0, [sp, #0x10] + bl DisplaySprite +_08083E4E: + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Unk.inc b/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Unk.inc new file mode 100644 index 0000000000..82e4c726cc --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Unk.inc @@ -0,0 +1,776 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _080829BC @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + mov r8, r1 + ldr r0, [r1] + str r0, [sp, #0x10] + ldrb r1, [r1, #8] + lsls r1, r1, #3 + mov r2, r8 + ldrh r0, [r2, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 + ldr r3, [sp, #0x10] + ldrb r2, [r3, #1] + lsls r2, r2, #3 + mov r4, r8 + ldrh r0, [r4, #6] + lsls r0, r0, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldr r3, _080829C0 @ =gCamera + ldrh r0, [r3] + lsrs r4, r1, #0x10 + str r4, [sp] + asrs r1, r1, #0x10 + subs r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #0xc] + ldrh r0, [r3, #2] + lsrs r1, r2, #0x10 + str r1, [sp, #4] + asrs r2, r2, #0x10 + subs r2, r2, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #8] + movs r4, #0 + ldr r5, _080829C4 @ =gPartner + ldr r7, _080829C8 @ =gPlayer + movs r2, #0 + str r2, [sp, #0x14] + mov sl, r2 +_080829B2: + cmp r4, #0 + beq _080829CC + ldr r0, [r5, #0x10] + b _080829CE + .align 2, 0 +_080829BC: .4byte gCurTask +_080829C0: .4byte gCamera +_080829C4: .4byte gPartner +_080829C8: .4byte gPlayer +_080829CC: + ldr r0, [r7, #0x10] +_080829CE: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080829D8 + b _08082DC8 +_080829D8: + mov r2, r8 + adds r2, #0x4c + ldrb r1, [r2] + asrs r1, r4 + movs r0, #1 + ands r1, r0 + mov sb, r2 + cmp r1, #0 + bne _080829EC + b _08082C08 +_080829EC: + cmp r4, #0 + beq _080829F8 + ldrh r0, [r5, #0xa] + adds r0, #0x2a + strh r0, [r5, #0xa] + b _080829FE +_080829F8: + ldrh r0, [r7, #0xa] + adds r0, #0x2a + strh r0, [r7, #0xa] +_080829FE: + cmp r4, #0 + beq _08082A08 + movs r3, #0xa + ldrsh r1, [r5, r3] + b _08082A0C +_08082A08: + movs r0, #0xa + ldrsh r1, [r7, r0] +_08082A0C: + cmp r4, #0 + beq _08082A18 + ldr r0, [r5, #4] + adds r0, r0, r1 + str r0, [r5, #4] + b _08082A1E +_08082A18: + ldr r0, [r7, #4] + adds r0, r0, r1 + str r0, [r7, #4] +_08082A1E: + mov r0, r8 + adds r0, #0x3c + ldr r2, [sp, #0x14] + adds r1, r0, r2 + ldr r2, [r1] + mov ip, r0 + cmp r4, #0 + beq _08082A34 + movs r3, #0xa + ldrsh r0, [r5, r3] + b _08082A38 +_08082A34: + movs r3, #0xa + ldrsh r0, [r7, r3] +_08082A38: + adds r0, r2, r0 + str r0, [r1] + ldr r0, _08082A64 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r1, r0, #0x18 + asrs r0, r0, #0x19 + cmp r0, #1 + beq _08082A4E + cmp r1, #0xf + bne _08082ACE +_08082A4E: + ldr r1, [sp] + lsls r0, r1, #0x10 + asrs r2, r0, #8 + adds r1, r0, #0 + cmp r4, #0 + beq _08082A68 + ldr r0, [r5] + cmp r0, r2 + blt _08082A6E + b _08082A9C + .align 2, 0 +_08082A64: .4byte gCurrentLevel +_08082A68: + ldr r0, [r7] + cmp r0, r2 + bge _08082A9C +_08082A6E: + cmp r4, #0 + beq _08082A7A + ldr r0, [r5] + adds r0, #0x80 + str r0, [r5] + b _08082A80 +_08082A7A: + ldr r0, [r7] + adds r0, #0x80 + str r0, [r7] +_08082A80: + asrs r2, r1, #8 + cmp r4, #0 + beq _08082A8E + ldr r0, [r5] + cmp r0, r2 + bgt _08082A94 + b _08082ACE +_08082A8E: + ldr r0, [r7] + cmp r0, r2 + ble _08082ACE +_08082A94: + asrs r0, r1, #8 + cmp r4, #0 + bne _08082AC8 + b _08082ACC +_08082A9C: + cmp r4, #0 + beq _08082AA8 + ldr r0, [r5] + subs r0, #0x80 + str r0, [r5] + b _08082AAE +_08082AA8: + ldr r0, [r7] + subs r0, #0x80 + str r0, [r7] +_08082AAE: + asrs r2, r1, #8 + cmp r4, #0 + beq _08082ABC + ldr r0, [r5] + cmp r0, r2 + blt _08082AC2 + b _08082ACE +_08082ABC: + ldr r0, [r7] + cmp r0, r2 + bge _08082ACE +_08082AC2: + asrs r0, r1, #8 + cmp r4, #0 + beq _08082ACC +_08082AC8: + str r0, [r5] + b _08082ACE +_08082ACC: + str r0, [r7] +_08082ACE: + ldr r3, _08082B48 @ =gPlayer + 0x6D + adds r0, r3, #0 + cmp r4, #0 + beq _08082AD8 + ldr r0, _08082B4C @ =gPartner + 0x6D +_08082AD8: + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r1, r8 + adds r1, #0x4d + adds r6, r1, #0 + ldrb r2, [r6] + cmp r0, r2 + bgt _08082B18 + lsls r0, r4, #1 + subs r1, #9 + adds r1, r1, r0 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + mov r1, r8 + adds r1, #0x48 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + ldrh r1, [r1] + cmp r0, r1 + bhs _08082B18 + ldr r0, [sp, #0x14] + add r0, ip + ldr r1, [r0] + asrs r1, r1, #8 + mov r0, r8 + adds r0, #0x4a + movs r2, #0 + ldrsh r0, [r0, r2] + cmp r1, r0 + ble _08082B94 +_08082B18: + adds r0, r3, #0 + cmp r4, #0 + beq _08082B20 + ldr r0, _08082B4C @ =gPartner + 0x6D +_08082B20: + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldrb r6, [r6] + cmp r0, r6 + bne _08082B80 + adds r1, r3, #0 + cmp r4, #0 + beq _08082B34 + ldr r1, _08082B4C @ =gPartner + 0x6D +_08082B34: + movs r0, #0x7f + strb r0, [r1] + cmp r4, #0 + beq _08082B54 + ldr r0, [r5, #0x10] + ldr r1, _08082B50 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] + b _08082B5C + .align 2, 0 +_08082B48: .4byte gPlayer + 0x6D +_08082B4C: .4byte gPartner + 0x6D +_08082B50: .4byte 0xFFBFFFFF +_08082B54: + ldr r0, [r7, #0x10] + ldr r1, _08082B6C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r7, #0x10] +_08082B5C: + cmp r4, #0 + beq _08082B74 + ldr r3, _08082B70 @ =gPartner + 0x26 + ldrb r1, [r3] + movs r0, #0x7f + ands r0, r1 + strb r0, [r3] + b _08082B80 + .align 2, 0 +_08082B6C: .4byte 0xFFBFFFFF +_08082B70: .4byte gPartner + 0x26 +_08082B74: + ldr r0, _08082B90 @ =gPlayer + 0x26 + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + ldr r1, _08082B90 @ =gPlayer + 0x26 + strb r0, [r1] +_08082B80: + movs r1, #1 + lsls r1, r4 + mov r2, sb + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] + b _08082E00 + .align 2, 0 +_08082B90: .4byte gPlayer + 0x26 +_08082B94: + cmp r4, #0 + beq _08082BA4 + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r5, #0x10] + b _08082BAE +_08082BA4: + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r7, #0x10] +_08082BAE: + adds r2, r3, #0 + subs r2, #0x6d + cmp r4, #0 + beq _08082BBC + mov r3, sl + strh r3, [r5, #8] + b _08082BBE +_08082BBC: + strh r4, [r2, #8] +_08082BBE: + cmp r4, #0 + beq _08082BC8 + mov r0, sl + strh r0, [r5, #0xc] + b _08082BCA +_08082BC8: + strh r4, [r2, #0xc] +_08082BCA: + ldr r0, _08082C00 @ =gPlayer + cmp r4, #0 + beq _08082BD2 + ldr r0, _08082C04 @ =gPartner +_08082BD2: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _08082C00 @ =gPlayer + cmp r4, #0 + beq _08082BE0 + ldr r1, _08082C04 @ =gPartner +_08082BE0: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08082C00 @ =gPlayer + cmp r4, #0 + beq _08082BEC + ldr r1, _08082C04 @ =gPartner +_08082BEC: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #1 + lsls r0, r4 + mov r2, sb + ldrb r1, [r2] + orrs r0, r1 + strb r0, [r2] + b _08082E00 + .align 2, 0 +_08082C00: .4byte gPlayer +_08082C04: .4byte gPartner +_08082C08: + cmp r4, #0 + beq _08082C1E + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + bne _08082C2E + mov r6, r8 + adds r6, #0x4d + b _08082C48 +_08082C1E: + ldr r1, [r7, #0x10] + movs r0, #0x80 + lsls r0, r0, #0xf + ands r1, r0 + mov r6, r8 + adds r6, #0x4d + cmp r1, #0 + beq _08082C48 +_08082C2E: + ldr r0, _08082C68 @ =gPlayer + 0x6D + cmp r4, #0 + beq _08082C36 + ldr r0, _08082C6C @ =gPartner + 0x6D +_08082C36: + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r1, r8 + adds r1, #0x4d + adds r6, r1, #0 + ldrb r3, [r6] + cmp r0, r3 + blt _08082C50 +_08082C48: + ldrb r0, [r6] + cmp r0, #0 + beq _08082C50 + b _08082E00 +_08082C50: + ldr r0, [sp] + lsls r1, r0, #0x10 + asrs r0, r1, #0x10 + adds r2, r0, #0 + subs r2, #0xc + cmp r4, #0 + beq _08082C70 + ldr r0, [r5] + asrs r0, r0, #8 + cmp r2, r0 + ble _08082C7A + b _08082E00 + .align 2, 0 +_08082C68: .4byte gPlayer + 0x6D +_08082C6C: .4byte gPartner + 0x6D +_08082C70: + ldr r0, [r7] + asrs r0, r0, #8 + cmp r2, r0 + ble _08082C7A + b _08082E00 +_08082C7A: + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #0xc + cmp r4, #0 + beq _08082C8E + ldr r0, [r5] + asrs r0, r0, #8 + cmp r1, r0 + bge _08082C98 + b _08082E00 +_08082C8E: + ldr r0, [r7] + asrs r0, r0, #8 + cmp r1, r0 + bge _08082C98 + b _08082E00 +_08082C98: + ldr r2, [sp, #4] + lsls r1, r2, #0x10 + asrs r0, r1, #0x10 + adds r2, r0, #0 + subs r2, #0xc + cmp r4, #0 + beq _08082CB0 + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08082CBA + b _08082E00 +_08082CB0: + ldr r0, [r7, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08082CBA + b _08082E00 +_08082CBA: + asrs r0, r1, #0x10 + adds r1, r0, #0 + adds r1, #0xc + cmp r4, #0 + beq _08082CCE + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08082CD8 + b _08082E00 +_08082CCE: + ldr r0, [r7, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08082CD8 + b _08082E00 +_08082CD8: + lsls r0, r4, #1 + mov r1, r8 + adds r1, #0x44 + adds r1, r1, r0 + mov r3, sl + strh r3, [r1] + mov r0, r8 + adds r0, #0x3c + ldr r1, [sp, #0x14] + adds r0, r0, r1 + mov r2, sl + str r2, [r0] + cmp r4, #0 + beq _08082CFE + ldr r0, [r5, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r5, #0x10] + b _08082D06 +_08082CFE: + ldr r0, [r7, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r7, #0x10] +_08082D06: + ldr r2, _08082D18 @ =gPlayer + cmp r4, #0 + beq _08082D1C + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r5, #0x10] + b _08082D26 + .align 2, 0 +_08082D18: .4byte gPlayer +_08082D1C: + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r7, #0x10] +_08082D26: + cmp r4, #0 + beq _08082D30 + mov r3, sl + strh r3, [r5, #0xa] + b _08082D32 +_08082D30: + strh r4, [r2, #0xa] +_08082D32: + cmp r4, #0 + beq _08082D3C + mov r0, sl + strh r0, [r5, #8] + b _08082D3E +_08082D3C: + strh r4, [r2, #8] +_08082D3E: + cmp r4, #0 + beq _08082D48 + mov r1, sl + strh r1, [r5, #0xc] + b _08082D4A +_08082D48: + strh r4, [r2, #0xc] +_08082D4A: + ldr r0, _08082DA4 @ =gPlayer + cmp r4, #0 + beq _08082D52 + ldr r0, _08082DA8 @ =gPartner +_08082D52: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _08082DA4 @ =gPlayer + cmp r4, #0 + beq _08082D60 + ldr r1, _08082DA8 @ =gPartner +_08082D60: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08082DA4 @ =gPlayer + cmp r4, #0 + beq _08082D6C + ldr r1, _08082DA8 @ =gPartner +_08082D6C: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #0xaa + bl m4aSongNumStart + movs r1, #1 + lsls r1, r4 + mov r2, sb + ldrb r0, [r2] + orrs r1, r0 + movs r2, #0 + mov r3, sb + strb r1, [r3] + ldr r1, _08082DAC @ =gPlayer + 0x6D + cmp r4, #0 + beq _08082D8E + ldr r1, _08082DB0 @ =gPartner + 0x6D +_08082D8E: + ldrb r0, [r6] + strb r0, [r1] + cmp r4, #0 + beq _08082DB8 + ldr r1, _08082DB4 @ =gPartner + 0x26 + ldrb r0, [r1] + movs r1, #0x80 + orrs r0, r1 + ldr r2, _08082DB4 @ =gPartner + 0x26 + strb r0, [r2] + b _08082E00 + .align 2, 0 +_08082DA4: .4byte gPlayer +_08082DA8: .4byte gPartner +_08082DAC: .4byte gPlayer + 0x6D +_08082DB0: .4byte gPartner + 0x6D +_08082DB4: .4byte gPartner + 0x26 +_08082DB8: + ldr r3, _08082DC4 @ =gPlayer + 0x26 + ldrb r0, [r3] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r3] + b _08082E00 + .align 2, 0 +_08082DC4: .4byte gPlayer + 0x26 +_08082DC8: + mov r1, r8 + adds r1, #0x4c + ldrb r3, [r1] + adds r0, r3, #0 + asrs r0, r4 + movs r2, #1 + ands r0, r2 + mov sb, r1 + cmp r0, #0 + beq _08082E00 + adds r0, r2, #0 + lsls r0, r4 + bics r3, r0 + strb r3, [r1] + cmp r4, #0 + beq _08082DF8 + ldr r0, [r5, #0x10] + ldr r1, _08082DF4 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] + b _08082E00 + .align 2, 0 +_08082DF4: .4byte 0xFFBFFFFF +_08082DF8: + ldr r0, [r7, #0x10] + ldr r1, _08082E8C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r7, #0x10] +_08082E00: + ldr r0, [sp, #0x14] + adds r0, #4 + str r0, [sp, #0x14] + adds r4, #1 + ldr r0, _08082E90 @ =gNumSingleplayerCharacters + movs r1, #0 + ldrsb r1, [r0, r1] + mov ip, r0 + cmp r4, r1 + bge _08082E16 + b _080829B2 +_08082E16: + mov r2, sb + ldrb r1, [r2] + movs r0, #3 + ands r0, r1 + cmp r0, #0 + bne _08082EC6 + ldr r3, [sp, #0xc] + lsls r0, r3, #0x10 + movs r4, #0x80 + lsls r4, r4, #0x10 + adds r0, r0, r4 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08082E4A + ldr r1, [sp, #8] + lsls r0, r1, #0x10 + asrs r2, r0, #0x10 + adds r0, r2, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08082E4A + movs r0, #0x90 + lsls r0, r0, #1 + cmp r2, r0 + ble _08082EC6 +_08082E4A: + movs r2, #0 + ldr r3, _08082E94 @ =gCurTask + mov sl, r3 + ldr r3, _08082E98 @ =gPlayer + 0x6D + mov r6, r8 + adds r6, #0x4d + ldr r7, _08082E9C @ =gPartner + ldr r5, _08082E8C @ =0xFFBFFFFF + adds r4, r3, #0 + subs r4, #0x6d +_08082E5E: + adds r0, r3, #0 + cmp r2, #0 + beq _08082E66 + ldr r0, _08082EA0 @ =gPartner + 0x6D +_08082E66: + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldrb r1, [r6] + cmp r0, r1 + bne _08082EAA + mov r1, sb + ldrb r0, [r1] + asrs r0, r2 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08082EAA + cmp r2, #0 + beq _08082EA4 + ldr r0, [r7, #0x10] + ands r0, r5 + str r0, [r7, #0x10] + b _08082EAA + .align 2, 0 +_08082E8C: .4byte 0xFFBFFFFF +_08082E90: .4byte gNumSingleplayerCharacters +_08082E94: .4byte gCurTask +_08082E98: .4byte gPlayer + 0x6D +_08082E9C: .4byte gPartner +_08082EA0: .4byte gPartner + 0x6D +_08082EA4: + ldr r0, [r4, #0x10] + ands r0, r5 + str r0, [r4, #0x10] +_08082EAA: + adds r2, #1 + mov r1, ip + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r2, r0 + blt _08082E5E + mov r2, r8 + ldrb r0, [r2, #8] + ldr r3, [sp, #0x10] + strb r0, [r3] + mov r4, sl + ldr r0, [r4] + bl TaskDestroy +_08082EC6: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/pipe__Task_8095E90.inc b/sa1/asm/non_matching/game/interactables/pipe__Task_8095E90.inc new file mode 100644 index 0000000000..1fecb2f26a --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/pipe__Task_8095E90.inc @@ -0,0 +1,316 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r1, _08095FD4 @ =gCurTask + ldr r0, [r1] + mov ip, r0 + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r4 + mov r8, r0 + ldr r2, [r0] + mov sl, r2 + ldr r3, _08095FD8 @ =0x0300000C + adds r3, r4, r3 + str r3, [sp] + ldr r2, _08095FDC @ =0x0300003C + adds r0, r4, r2 + ldrb r0, [r0] + ldr r7, _08095FE0 @ =gPlayer + cmp r0, #0 + beq _08095EC4 + ldr r7, _08095FE4 @ =gPartner +_08095EC4: + mov r3, r8 + ldrb r2, [r3, #8] + lsls r2, r2, #3 + ldrh r0, [r3, #4] + lsls r0, r0, #8 + adds r2, r2, r0 + mov r0, sl + ldrb r1, [r0, #1] + lsls r1, r1, #3 + ldrh r0, [r3, #6] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r3, _08095FE8 @ =gCamera + ldrh r0, [r3] + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + subs r2, r2, r0 + lsls r0, r2, #0x10 + lsrs r5, r0, #0x10 + ldrh r0, [r3, #2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + ldr r0, [sp] + strh r2, [r0, #0x16] + ldrh r0, [r3, #2] + subs r1, r1, r0 + ldr r2, [sp] + strh r1, [r2, #0x18] + ldr r3, _08095FEC @ =0x03000058 + adds r3, r3, r4 + mov sb, r3 + ldrb r0, [r3] + cmp r0, #0 + bne _08095F10 + b _08096054 +_08095F10: + ldr r0, [r7, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08095F1C + b _08096040 +_08095F1C: + adds r0, r7, #0 + adds r0, #0x6d + str r0, [sp, #4] + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldr r1, _08095FF0 @ =0x0300003D + adds r1, r1, r4 + mov sl, r1 + ldrb r2, [r1] + cmp r0, r2 + beq _08095F36 + b _08096038 +_08095F36: + ldr r3, _08095FF4 @ =0x0300003F + adds r5, r4, r3 + ldrb r1, [r5] + mov r2, r8 + ldr r0, [r2, #0x48] + muls r0, r1, r0 + subs r3, #1 + adds r4, r4, r3 + ldrb r1, [r4] + bl Div + adds r6, r0, #0 + ldrb r1, [r5] + mov r2, r8 + ldr r0, [r2, #0x4c] + muls r0, r1, r0 + ldrb r1, [r4] + bl Div + mov r3, r8 + ldr r2, [r3, #0x40] + adds r2, r2, r6 + lsls r2, r2, #8 + str r2, [r7] + ldr r1, [r3, #0x44] + adds r1, r1, r0 + lsls r1, r1, #8 + str r1, [r7, #4] + ldr r0, [r3, #0x54] + subs r1, r1, r0 + strh r1, [r7, #0xa] + ldr r0, [r3, #0x50] + subs r2, r2, r0 + strh r2, [r7, #0xc] + strh r2, [r7, #8] + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + ldr r2, [r7] + asrs r2, r2, #8 + ldr r0, [r3, #0x40] + ldr r1, [r3, #0x48] + adds r0, r0, r1 + cmp r2, r0 + bne _08095FFC + ldr r0, [r7, #4] + asrs r0, r0, #8 + ldr r1, [r3, #0x44] + ldr r2, [r3, #0x4c] + adds r1, r1, r2 + cmp r0, r1 + bne _08095FFC + ldr r1, [sp, #4] + movs r0, #0 + ldrsb r0, [r1, r0] + mov r2, sl + ldrb r2, [r2] + cmp r0, r2 + bne _08095FC0 + ldr r0, [r7, #0x10] + ldr r1, _08095FF8 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r7, #0x10] + ldr r2, _08095FE0 @ =gPlayer + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] +_08095FC0: + movs r0, #0 + mov r3, sb + strb r0, [r3] + adds r2, r7, #0 + adds r2, #0x26 + ldrb r0, [r2] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r2] + b _0809602C + .align 2, 0 +_08095FD4: .4byte gCurTask +_08095FD8: .4byte 0x0300000C +_08095FDC: .4byte 0x0300003C +_08095FE0: .4byte gPlayer +_08095FE4: .4byte gPartner +_08095FE8: .4byte gCamera +_08095FEC: .4byte 0x03000058 +_08095FF0: .4byte 0x0300003D +_08095FF4: .4byte 0x0300003F +_08095FF8: .4byte 0xFFBFFFFF +_08095FFC: + adds r0, r7, #0 + bl Player_TransitionCancelFlyingAndBoost + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r7, #0x10] + adds r1, r7, #0 + adds r1, #0x40 + movs r0, #5 + strb r0, [r1] + adds r0, r7, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r7, #0xe] + movs r0, #0xe + strb r0, [r7, #0xf] + mov r1, r8 + adds r1, #0x58 + movs r0, #1 + strb r0, [r1] +_0809602C: + ldr r0, [r7] + mov r1, r8 + str r0, [r1, #0x50] + ldr r0, [r7, #4] + str r0, [r1, #0x54] + b _080960DC +_08096038: + movs r3, #0 + mov r2, sb + strb r3, [r2] + b _080960DC +_08096040: + movs r1, #0 + mov r0, sb + strb r1, [r0] + ldr r0, [r7, #0x10] + ldr r1, _08096050 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r7, #0x10] + b _080960DC + .align 2, 0 +_08096050: .4byte 0xFFBFFFFF +_08096054: + ldr r0, _080960CC @ =Task_PipeEntrance + mov r2, ip + str r0, [r2, #8] + lsls r0, r5, #0x10 + movs r3, #0x80 + lsls r3, r3, #0x10 + adds r0, r0, r3 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0809607E + lsls r0, r6, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _0809607E + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _080960DC +_0809607E: + mov r0, r8 + adds r0, #0x58 + ldrb r0, [r0] + cmp r0, #0 + beq _080960B0 + adds r0, r7, #0 + adds r0, #0x6d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r1, r8 + adds r1, #0x3d + ldrb r1, [r1] + cmp r0, r1 + bne _080960B0 + ldr r0, [r7, #0x10] + ldr r1, _080960D0 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r7, #0x10] + ldr r2, _080960D4 @ =gPlayer + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] +_080960B0: + mov r0, r8 + adds r0, #0x3c + ldrb r0, [r0] + cmp r0, #0 + bne _080960C2 + mov r1, r8 + ldrb r0, [r1, #8] + mov r2, sl + strb r0, [r2] +_080960C2: + ldr r3, _080960D8 @ =gCurTask + ldr r0, [r3] + bl TaskDestroy + b _080960F2 + .align 2, 0 +_080960CC: .4byte Task_PipeEntrance +_080960D0: .4byte 0xFFBFFFFF +_080960D4: .4byte gPlayer +_080960D8: .4byte gCurTask +_080960DC: + ldr r0, [sp] + bl UpdateSpriteAnimation + mov r0, r8 + adds r0, #0x3c + ldrb r0, [r0] + cmp r0, #0 + bne _080960F2 + ldr r0, [sp] + bl DisplaySprite +_080960F2: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/pipe__Task_PipeExit.inc b/sa1/asm/non_matching/game/interactables/pipe__Task_PipeExit.inc new file mode 100644 index 0000000000..cef8fc01e6 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/pipe__Task_PipeExit.inc @@ -0,0 +1,228 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r1, _080964B8 @ =gCurTask + ldr r0, [r1] + ldrh r0, [r0, #6] + mov r8, r0 + movs r0, #0xc0 + lsls r0, r0, #0x12 + add r0, r8 + str r0, [sp] + ldr r2, [r0] + str r2, [sp, #4] + ldr r6, _080964BC @ =0x0300000C + add r6, r8 + ldr r0, _080964C0 @ =0x0300003C + add r0, r8 + ldrb r0, [r0] + ldr r4, _080964C4 @ =gPlayer + cmp r0, #0 + beq _080963D2 + ldr r4, _080964C8 @ =gPartner +_080963D2: + ldr r3, [sp] + ldrb r1, [r3, #8] + lsls r1, r1, #3 + ldrh r0, [r3, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + ldr r0, [sp, #4] + ldrb r2, [r0, #1] + lsls r2, r2, #3 + ldrh r0, [r3, #6] + lsls r0, r0, #8 + adds r2, r2, r0 + ldr r3, _080964CC @ =gCamera + ldrh r0, [r3] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + mov sl, r1 + subs r0, r1, r0 + strh r0, [r6, #0x16] + ldrh r0, [r3, #2] + lsls r2, r2, #0x10 + asrs r7, r2, #0x10 + subs r0, r7, r0 + strh r0, [r6, #0x18] + ldr r0, [r4, #0x10] + movs r1, #0x80 + mov sb, r1 + adds r5, r0, #0 + ands r5, r1 + cmp r5, #0 + bne _080964EA + movs r2, #0x80 + lsls r2, r2, #0xf + ands r0, r2 + cmp r0, #0 + beq _080964DC + movs r3, #0x6d + adds r3, r3, r4 + mov sb, r3 + movs r1, #0 + ldrsb r1, [r3, r1] + ldr r0, _080964D0 @ =0x0300003D + add r0, r8 + ldrb r0, [r0] + cmp r1, r0 + bge _08096500 + adds r0, r6, #0 + mov r1, sl + adds r2, r7, #0 + adds r3, r4, #0 + bl Coll_Player_Entity_Intersection + cmp r0, #0 + beq _08096500 + ldr r1, _080964D4 @ =0x0300003E + add r1, r8 + movs r0, #0 + strb r0, [r1] + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + adds r1, #6 + ands r0, r1 + subs r1, #0xfe + ands r0, r1 + adds r1, #0xf0 + ands r0, r1 + subs r1, #0x10 + ands r0, r1 + movs r1, #4 + orrs r0, r1 + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #5 + strb r0, [r1] + lsls r0, r7, #8 + str r0, [r4, #4] + mov r2, sl + lsls r0, r2, #8 + str r0, [r4] + strh r5, [r4, #0xa] + strh r5, [r4, #8] + strh r5, [r4, #0xc] + strh r5, [r4, #0x38] + strh r5, [r4, #0x3a] + movs r0, #0x7f + mov r3, sb + strb r0, [r3] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + ldr r0, _080964B8 @ =gCurTask + ldr r1, [r0] + ldr r0, _080964D8 @ =Task_809656C + str r0, [r1, #8] + adds r2, r4, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2] + b _08096500 + .align 2, 0 +_080964B8: .4byte gCurTask +_080964BC: .4byte 0x0300000C +_080964C0: .4byte 0x0300003C +_080964C4: .4byte gPlayer +_080964C8: .4byte gPartner +_080964CC: .4byte gCamera +_080964D0: .4byte 0x0300003D +_080964D4: .4byte 0x0300003E +_080964D8: .4byte Task_809656C +_080964DC: + adds r0, r6, #0 + mov r1, sl + adds r2, r7, #0 + adds r3, r4, #0 + bl sub_80096B0 + b _08096500 +_080964EA: + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + ldr r0, [r4, #0x10] + mov r1, sb + orrs r0, r1 + str r0, [r4, #0x10] + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #1 + strb r0, [r1] +_08096500: + ldrh r0, [r6, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08096524 + movs r2, #0x18 + ldrsh r0, [r6, r2] + adds r0, #0x80 + cmp r0, #0 + blt _08096524 + movs r3, #0x18 + ldrsh r1, [r6, r3] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08096544 +_08096524: + ldr r0, [sp] + adds r0, #0x3c + ldrb r0, [r0] + cmp r0, #0 + bne _08096536 + ldr r1, [sp] + ldrb r0, [r1, #8] + ldr r2, [sp, #4] + strb r0, [r2] +_08096536: + ldr r0, _08096540 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0809655A + .align 2, 0 +_08096540: .4byte gCurTask +_08096544: + adds r0, r6, #0 + bl UpdateSpriteAnimation + ldr r0, [sp] + adds r0, #0x3c + ldrb r0, [r0] + cmp r0, #0 + bne _0809655A + adds r0, r6, #0 + bl DisplaySprite +_0809655A: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/platform_spiked__sub_80805C8.inc b/sa1/asm/non_matching/game/interactables/platform_spiked__sub_80805C8.inc new file mode 100644 index 0000000000..af87973bb4 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/platform_spiked__sub_80805C8.inc @@ -0,0 +1,185 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #8 + mov ip, r0 @ ip = s + adds r7, r1, #0 @ r7 = worldX + mov r8, r2 @ r8 = worldY + adds r5, r3, #0 @ r5 = rect + ldr r4, [sp, #0x20] @ r4 = p + adds r0, #0x2c + movs r3, #0 + ldrsb r3, [r0, r3] + adds r2, r7, r3 + ldr r0, [r4] + asrs r0, r0, #8 + movs r6, #0 + ldrsb r6, [r5, r6] + adds r1, r0, r6 + cmp r2, r1 + bgt _08080608 + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _08080616 + cmp r2, r1 + bge _08080608 + b _0808070C +_08080608: + movs r0, #2 + ldrsb r0, [r5, r0] + subs r0, r0, r6 + adds r0, r1, r0 + cmp r0, r2 + bge _08080616 + b _0808070C +_08080616: + mov r0, ip + adds r0, #0x2d + movs r3, #0 + ldrsb r3, [r0, r3] + mov r0, r8 + adds r2, r0, r3 + ldr r0, [r4, #4] + asrs r0, r0, #8 + movs r6, #1 + ldrsb r6, [r5, r6] + adds r1, r0, r6 + cmp r2, r1 + bgt _08080646 + mov r0, ip + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _08080652 + cmp r2, r1 + blt _0808070C +_08080646: + movs r0, #3 + ldrsb r0, [r5, r0] + subs r0, r0, r6 + adds r0, r1, r0 + cmp r0, r2 + blt _0808070C +_08080652: + mov r0, ip + adds r0, #0x2c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r7, r0 + movs r1, #2 + ldrsb r1, [r5, r1] + subs r1, r0, r1 + adds r2, r1, #0 + adds r2, #8 + ldr r0, [r4] + asrs r3, r0, #8 + cmp r3, r2 + bgt _0808067E + lsls r0, r1, #8 + str r0, [r4] + movs r1, #8 + ldrsh r0, [r4, r1] + cmp r0, #0 + ble _080806AA + b _080806A4 +_0808067E: + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r7, r0 + movs r1, #0 + ldrsb r1, [r5, r1] + subs r0, r0, r1 + adds r2, r0, #0 + subs r2, #8 + cmp r3, r2 + blt _0808070C + lsls r0, r0, #8 + str r0, [r4] + movs r1, #8 + ldrsh r0, [r4, r1] + cmp r0, #0 + bge _080806AA +_080806A4: + movs r0, #0 + strh r0, [r4, #0xc] + strh r0, [r4, #8] +_080806AA: + ldr r0, [r4, #4] + asrs r0, r0, #8 + adds r0, #9 + ldr r1, [r4] + asrs r1, r1, #8 + adds r5, r4, #0 + adds r5, #0x27 + ldrb r2, [r5] + movs r7, #0 + str r7, [sp] + ldr r6, _08080708 @ =sa2__sub_801EE64 + str r6, [sp, #4] + movs r3, #8 + bl sa2__sub_801E4E4 + cmp r0, #0 + bge _080806D4 + lsls r1, r0, #8 + ldr r0, [r4, #4] + adds r0, r0, r1 + str r0, [r4, #4] +_080806D4: + ldr r0, [r4, #4] + asrs r0, r0, #8 + ldr r1, [r4] + asrs r1, r1, #8 + ldrb r2, [r5] + movs r3, #8 + rsbs r3, r3, #0 + str r7, [sp] + str r6, [sp, #4] + bl sa2__sub_801E4E4 + cmp r0, #0 + bge _080806F6 + lsls r1, r0, #8 + ldr r0, [r4, #4] + adds r0, r0, r1 + str r0, [r4, #4] +_080806F6: + ldr r0, [r4, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + adds r1, #0x18 + ands r0, r1 + str r0, [r4, #0x10] + movs r0, #1 + b _0808070E + .align 2, 0 +_08080708: .4byte sa2__sub_801EE64 +_0808070C: + movs r0, #0 +_0808070E: + add sp, #8 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/platform_sq__Task_BarrelOfDoomMini.inc b/sa1/asm/non_matching/game/interactables/platform_sq__Task_BarrelOfDoomMini.inc new file mode 100644 index 0000000000..186c9a4f89 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/platform_sq__Task_BarrelOfDoomMini.inc @@ -0,0 +1,620 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _0807E4E0 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r1 + mov r8, r0 @ r8 = platform + ldr r0, _0807E4E4 @ =0x0300000C + adds r0, r0, r1 + mov sl, r0 @ sl = s + mov r1, r8 + ldr r1, [r1] + str r1, [sp, #8] @ sp08 = me + mov r2, r8 + ldrb r0, [r2, #8] + lsls r0, r0, #3 + ldrh r1, [r2, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 @ r3 = worldX + ldr r4, [sp, #8] + ldrb r0, [r4, #1] + lsls r0, r0, #3 + ldrh r1, [r2, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 @ r4 = worldY + ldr r0, [r2, #0x44] + cmp r0, #0 + beq _0807E4F0 + cmp r0, #0 + bge _0807E4E8 + ldr r0, [r2, #0x3c] + adds r0, #0x30 + str r0, [r2, #0x3c] + b _0807E4F0 + .align 2, 0 +_0807E4E0: .4byte gCurTask +_0807E4E4: .4byte 0x0300000C +_0807E4E8: + mov r1, r8 + ldr r0, [r1, #0x3c] + subs r0, #0x30 + str r0, [r1, #0x3c] +_0807E4F0: + ldr r2, _0807E534 @ =gCamera + ldrh r1, [r2] + lsls r3, r3, #0x10 @ r3 = worldX << 16 + asrs r0, r3, #0x10 + subs r0, r0, r1 + mov r1, sl + strh r0, [r1, #0x16] + ldrh r0, [r2, #2] + lsls r2, r4, #0x10 @ r2 = worldY << 16 + asrs r1, r2, #0x10 + subs r1, r1, r0 + mov r4, r8 + ldr r0, [r4, #0x44] + asrs r0, r0, #8 + adds r1, r1, r0 + mov r0, sl + strh r1, [r0, #0x18] + movs r4, #0 + str r3, [sp, #0xc] @ r3 = worldX << 16 + str r2, [sp, #0x10] @ r2 = worldY << 16 + ldr r6, _0807E538 @ =gPartner + ldr r7, _0807E53C @ =gPlayer + movs r1, #0 + str r1, [sp, #0x14] @ r1 = sp14 = i * 4 + movs r2, #9 + rsbs r2, r2, #0 + mov sb, r2 @ sb = ~MOVESTATE_STOOD_ON_OBJ +_0807E526_loop: + ldr r1, [sp, #0x14] @ r1 = sp14 = i * 4 + add r1, sp + cmp r4, #0 + beq _0807E540 + movs r3, #0xa + ldrsh r0, [r6, r3] + b _0807E544 + .align 2, 0 +_0807E534: .4byte gCamera +_0807E538: .4byte gPartner +_0807E53C: .4byte gPlayer +_0807E540: + movs r2, #0xa + ldrsh r0, [r7, r2] +_0807E544: + str r0, [r1] + cmp r4, #0 + beq _0807E55C + ldr r0, [r6, #0x10] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + bne _0807E56A + ldr r3, _0807E558 @ =gPlayer + b _0807E7D4 + .align 2, 0 +_0807E558: .4byte gPlayer +_0807E55C: + ldr r1, [r7, #0x10] + movs r0, #8 + ands r1, r0 + ldr r3, _0807E578 @ =gPlayer + cmp r1, #0 + bne _0807E56A + b _0807E7D4 +_0807E56A: + cmp r4, #0 + beq _0807E57C + ldr r0, [r6, #0x28] + cmp r0, sl + beq _0807E586 + ldr r3, _0807E578 @ =gPlayer + b _0807E7D4 + .align 2, 0 +_0807E578: .4byte gPlayer +_0807E57C: + ldr r0, [r7, #0x28] + ldr r3, _0807E590 @ =gPlayer + cmp r0, sl + beq _0807E586 + b _0807E7D4 +_0807E586: + cmp r4, #0 + beq _0807E594 + movs r0, #0 + strh r0, [r6, #0xa] + b _0807E596 + .align 2, 0 +_0807E590: .4byte gPlayer +_0807E594: + strh r4, [r7, #0xa] +_0807E596: + mov r3, r8 + ldr r1, [r3, #0x3c] + cmp r4, #0 + beq _0807E5A6 + ldr r0, [r6, #4] + adds r0, r0, r1 + str r0, [r6, #4] + b _0807E5AC +_0807E5A6: + ldr r0, [r7, #4] + adds r0, r0, r1 + str r0, [r7, #4] +_0807E5AC: + ldr r0, _0807E5C0 @ =gPlayerControls + ldrh r1, [r0, #2] + adds r2, r0, #0 + cmp r4, #0 + beq _0807E5C4 + ldrh r0, [r6, #0x3a] + ands r0, r1 + cmp r0, #0 + bne _0807E5CC + b _0807E638 + .align 2, 0 +_0807E5C0: .4byte gPlayerControls +_0807E5C4: + ldrh r0, [r7, #0x3a] + ands r0, r1 + cmp r0, #0 + beq _0807E638 +_0807E5CC: + cmp r4, #0 + beq _0807E5DC + ldrh r0, [r6, #0x38] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0807E5E6 + b _0807E638 +_0807E5DC: + ldrh r0, [r7, #0x38] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0807E638 +_0807E5E6: + cmp r4, #0 + beq _0807E5FC + ldr r1, _0807E5F8 @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #3 + beq _0807E608 + b _0807E824_continue + .align 2, 0 +_0807E5F8: .4byte gPartner + 0x59 +_0807E5FC: + ldr r2, _0807E618 @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #3 + beq _0807E608 + b _0807E824_continue +_0807E608: + cmp r4, #0 + beq _0807E61C + ldr r0, [r6, #0x10] + mov r3, sb + ands r0, r3 + str r0, [r6, #0x10] + b _0807E624 + .align 2, 0 +_0807E618: .4byte gPlayer + 0x59 +_0807E61C: + ldr r0, [r7, #0x10] + mov r1, sb + ands r0, r1 + str r0, [r7, #0x10] +_0807E624: + cmp r4, #0 + beq _0807E630 + movs r0, #0xfa + lsls r0, r0, #8 + strh r0, [r6, #0xa] + b _0807E824_continue +_0807E630: + movs r0, #0xfa + lsls r0, r0, #8 + strh r0, [r7, #0xa] + b _0807E824_continue +_0807E638: + ldrh r1, [r2] + cmp r4, #0 + beq _0807E648 + ldrh r0, [r6, #0x3a] + ands r0, r1 + cmp r0, #0 + bne _0807E650 + b _0807E6D8 +_0807E648: + ldrh r0, [r7, #0x3a] + ands r0, r1 + cmp r0, #0 + beq _0807E6D8 +_0807E650: + cmp r4, #0 + beq _0807E660 + ldrh r0, [r6, #0x38] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0807E66A + b _0807E6D8 +_0807E660: + ldrh r0, [r7, #0x38] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0807E6D8 +_0807E66A: + cmp r4, #0 + beq _0807E680 + ldr r2, _0807E67C @ =gPartner + 0x59 + movs r0, #0 + ldrsb r0, [r2, r0] + cmp r0, #3 + bne _0807E68A + b _0807E6C0 + .align 2, 0 +_0807E67C: .4byte gPartner + 0x59 +_0807E680: + ldr r3, _0807E6B4 @ =gPlayer + 0x59 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #3 + beq _0807E6C0 +_0807E68A: + ldr r0, _0807E6B8 @ =gPlayer + cmp r4, #0 + beq _0807E692 + ldr r0, _0807E6BC @ =gPartner +_0807E692: + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + ldr r1, _0807E6B8 @ =gPlayer + cmp r4, #0 + beq _0807E6A0 + ldr r1, _0807E6BC @ =gPartner +_0807E6A0: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _0807E6B8 @ =gPlayer + cmp r4, #0 + beq _0807E6AC + ldr r1, _0807E6BC @ =gPartner +_0807E6AC: + movs r0, #9 + strb r0, [r1, #0xf] + b _0807E824_continue + .align 2, 0 +_0807E6B4: .4byte gPlayer + 0x59 +_0807E6B8: .4byte gPlayer +_0807E6BC: .4byte gPartner +_0807E6C0: + cmp r4, #0 + beq _0807E6CE + ldr r0, [r6, #0x10] + mov r1, sb + ands r0, r1 + str r0, [r6, #0x10] + b _0807E824_continue +_0807E6CE: + ldr r0, [r7, #0x10] + mov r2, sb + ands r0, r2 + str r0, [r7, #0x10] + b _0807E824_continue +_0807E6D8: + ldrh r1, [r2] + cmp r4, #0 + beq _0807E6F0 + ldrh r0, [r6, #0x3a] + ands r0, r1 + cmp r0, #0 + bne _0807E6FA + ldr r3, _0807E6EC @ =gPlayer + b _0807E72E + .align 2, 0 +_0807E6EC: .4byte gPlayer +_0807E6F0: + ldrh r0, [r7, #0x3a] + ands r0, r1 + ldr r3, _0807E70C @ =gPlayer + cmp r0, #0 + beq _0807E72E +_0807E6FA: + mov r3, r8 + ldr r0, [r3, #0x3c] + asrs r0, r0, #1 + ldr r1, _0807E710 @ =0xFFFFFC00 + adds r0, r0, r1 + cmp r4, #0 + beq _0807E714 + strh r0, [r6, #0xa] + b _0807E716 + .align 2, 0 +_0807E70C: .4byte gPlayer +_0807E710: .4byte 0xFFFFFC00 +_0807E714: + strh r0, [r7, #0xa] +_0807E716: + cmp r4, #0 + beq _0807E724 + ldr r0, [r6, #0x10] + mov r2, sb + ands r0, r2 + str r0, [r6, #0x10] + b _0807E824_continue +_0807E724: + ldr r0, [r7, #0x10] + mov r3, sb + ands r0, r3 + str r0, [r7, #0x10] + b _0807E824_continue +_0807E72E: + cmp r4, #0 + beq _0807E73E + ldr r0, [r6, #4] + movs r1, #0x80 + lsls r1, r1, #4 + adds r0, r0, r1 + str r0, [r6, #4] + b _0807E748 +_0807E73E: + ldr r0, [r7, #4] + movs r2, #0x80 + lsls r2, r2, #4 + adds r0, r0, r2 + str r0, [r7, #4] +_0807E748: + cmp r4, #0 + beq _0807E752 + movs r0, #1 + strh r0, [r6, #0xa] + b _0807E756 +_0807E752: + movs r0, #1 + strh r0, [r3, #0xa] +_0807E756: + mov r0, r8 + ldr r1, [r0, #0x40] + asrs r1, r1, #8 + ldr r2, [sp, #0xc] @ r2 = sp0C = worldX << 16 + asrs r0, r2, #0x10 + adds r0, r0, r1 + lsls r0, r0, #0x10 + asrs r5, r0, #0x10 + mov r0, r8 + ldr r1, [r0, #0x44] + asrs r1, r1, #8 + ldr r2, [sp, #0x10] + asrs r0, r2, #0x10 + adds r0, r0, r1 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + cmp r4, #0 + beq _0807E77C + ldr r3, _0807E798 @ =gPartner +_0807E77C: + mov r0, sl + adds r1, r5, #0 + bl Coll_Player_PlatformCrumbling + cmp r0, #0 + bne _0807E7C0 + cmp r4, #0 + beq _0807E79C + ldr r0, [r6, #0x10] + mov r3, sb + ands r0, r3 + str r0, [r6, #0x10] + b _0807E7A4 + .align 2, 0 +_0807E798: .4byte gPartner +_0807E79C: + ldr r0, [r7, #0x10] + mov r1, sb + ands r0, r1 + str r0, [r7, #0x10] +_0807E7A4: + cmp r4, #0 + beq _0807E7B8 + ldr r0, [r6, #4] + ldr r2, _0807E7B4 @ =0xFFFFF800 + adds r0, r0, r2 + str r0, [r6, #4] + b _0807E7C0 + .align 2, 0 +_0807E7B4: .4byte 0xFFFFF800 +_0807E7B8: + ldr r0, [r7, #4] + ldr r3, _0807E7CC @ =0xFFFFF800 + adds r0, r0, r3 + str r0, [r7, #4] +_0807E7C0: + cmp r4, #0 + beq _0807E7D0 + movs r0, #0 + strh r0, [r6, #0xa] + b _0807E824_continue + .align 2, 0 +_0807E7CC: .4byte 0xFFFFF800 +_0807E7D0: + strh r4, [r7, #0xa] + b _0807E824_continue +_0807E7D4: + mov r0, r8 + ldr r1, [r0, #0x40] + asrs r1, r1, #8 + ldr r2, [sp, #0xc] @ r2 = sp0C = worldX << 16 + asrs r0, r2, #0x10 + adds r0, r0, r1 + lsls r0, r0, #0x10 + asrs r5, r0, #0x10 + mov r0, r8 + ldr r1, [r0, #0x44] + asrs r1, r1, #8 + ldr r2, [sp, #0x10] + asrs r0, r2, #0x10 + adds r0, r0, r1 + lsls r0, r0, #0x10 + asrs r2, r0, #0x10 + cmp r4, #0 + beq _0807E7FA + ldr r3, _0807E8DC @ =gPartner +_0807E7FA: + mov r0, sl + adds r1, r5, #0 + bl Coll_Player_PlatformCrumbling + movs r1, #8 + ands r1, r0 + cmp r1, #0 + beq _0807E824_continue + ldr r0, [sp, #0x14] @ r1 = sp14 = i * 4 + add r0, sp + ldr r1, [r0] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + movs r1, #0xa + bl Div + mov r3, r8 + ldr r1, [r3, #0x3c] + adds r1, r1, r0 + str r1, [r3, #0x3c] +_0807E824_continue: + ldr r0, [sp, #0x14] + adds r0, #4 + str r0, [sp, #0x14] @ r1 = sp14 = i * 4 + adds r4, #1 + ldr r0, _0807E8E0 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + bge _0807E83A + b _0807E526_loop +_0807E83A: + mov r2, r8 + ldr r1, [r2, #0x3c] + ldr r0, _0807E8E4 @ =0x000026AC @ 9.900 + muls r0, r1, r0 + ldr r1, _0807E8E8 @ =0x00002710 @ 10.000 + bl Div + mov r3, r8 + str r0, [r3, #0x3c] + adds r0, #0x2f + cmp r0, #0x5e + bhi _0807E864 + ldr r1, [r3, #0x44] + ldr r0, _0807E8EC @ =0xFFFFFD00 + cmp r1, r0 + ble _0807E864 + ldr r0, _0807E8F0 @ =0x000002FF + cmp r1, r0 + bgt _0807E864 + movs r0, #0 + str r0, [r3, #0x3c] +_0807E864: + mov r4, r8 + ldr r0, [r4, #0x44] + ldr r1, [r4, #0x3c] + adds r0, r0, r1 + str r0, [r4, #0x44] + ldr r0, [sp, #0xc] + asrs r3, r0, #0x10 + ldr r4, _0807E8F4 @ =gCamera + movs r2, #0 + ldrsh r1, [r4, r2] + movs r2, #0xb8 + lsls r2, r2, #1 + adds r0, r1, r2 + cmp r3, r0 + bgt _0807E8A4 + adds r0, r1, #0 + subs r0, #0x80 + cmp r3, r0 + blt _0807E8A4 + ldr r3, [sp, #0x10] + asrs r2, r3, #0x10 + movs r0, #2 + ldrsh r1, [r4, r0] + movs r3, #0x90 + lsls r3, r3, #1 + adds r0, r1, r3 + cmp r2, r0 + bgt _0807E8A4 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + bge _0807E8FC +_0807E8A4: + mov r4, sl + ldrh r0, [r4, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0807E8CA + movs r1, #0x18 + ldrsh r0, [r4, r1] + adds r0, #0x80 + cmp r0, #0 + blt _0807E8CA + movs r2, #0x18 + ldrsh r1, [r4, r2] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0807E8FC +_0807E8CA: + mov r3, r8 + ldrb r0, [r3, #8] + ldr r4, [sp, #8] @ r4 = me + strb r0, [r4] + ldr r0, _0807E8F8 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0807E902 + .align 2, 0 +_0807E8DC: .4byte gPartner +_0807E8E0: .4byte gNumSingleplayerCharacters +_0807E8E4: .4byte 0x000026AC +_0807E8E8: .4byte 0x00002710 +_0807E8EC: .4byte 0xFFFFFD00 +_0807E8F0: .4byte 0x000002FF +_0807E8F4: .4byte gCamera +_0807E8F8: .4byte gCurTask +_0807E8FC: + mov r0, sl + bl DisplaySprite +_0807E902: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/platform_sq__sub_807E914.inc b/sa1/asm/non_matching/game/interactables/platform_sq__sub_807E914.inc new file mode 100644 index 0000000000..794546088e --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/platform_sq__sub_807E914.inc @@ -0,0 +1,188 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + mov ip, r0 @ ip = r0 = s + mov sb, r1 @ sb = r1 = worldX + mov sl, r2 @ sl = r2 = worldY + adds r6, r3, #0 @ r6 = r3 = unk08 + ldr r4, [sp, #0x2c] @ r4 = sp2C = p + adds r0, #0x2c + movs r3, #0 + ldrsb r3, [r0, r3] + adds r2, r1, r3 @ r2 = worldX + s->hitboxes[0].left + ldr r0, [r4] + asrs r0, r0, #8 + movs r5, #0 + ldrsb r5, [r6, r5] + adds r1, r0, r5 + cmp r2, r1 + bgt _0807E958 + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0807E966 + cmp r2, r1 + bge _0807E958 + b _0807EA5C_return_0 +_0807E958: + movs r0, #2 + ldrsb r0, [r6, r0] + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r2 + bge _0807E966 + b _0807EA5C_return_0 +_0807E966: + mov r2, ip + adds r2, #0x2d + movs r0, #0 + ldrsb r0, [r2, r0] + str r0, [sp, #8] + adds r5, r0, #0 + add r5, sl + ldr r1, [r4, #4] + asrs r0, r1, #8 + movs r3, #1 + ldrsb r3, [r6, r3] + mov r8, r3 + adds r3, r0, r3 + cmp r5, r3 + bgt _0807E99C + mov r0, ip + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldr r7, [sp, #8] + subs r0, r0, r7 + adds r0, r5, r0 + cmp r0, r3 + bge _0807E9AA + cmp r5, r3 + blt _0807EA5C_return_0 +_0807E99C: + movs r0, #3 + ldrsb r0, [r6, r0] + mov r7, r8 + subs r0, r0, r7 + adds r0, r3, r0 + cmp r0, r5 + blt _0807EA5C_return_0 +_0807E9AA: + asrs r5, r1, #8 @ r5 = I(p->qWorldY) + movs r0, #0 + ldrsb r0, [r2, r0] + add r0, sl + movs r1, #3 + ldrsb r1, [r6, r1] + subs r0, r0, r1 + adds r0, #2 + cmp r5, r0 + ble _0807EA5C_return_0 + mov r0, ip + adds r0, #0x2c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + movs r1, #2 + ldrsb r1, [r6, r1] + subs r2, r0, r1 + adds r1, r2, #0 + adds r1, #8 + ldr r0, [r4] + asrs r3, r0, #8 + cmp r3, r1 + bgt _0807E9E0 + lsls r1, r2, #8 + b _0807E9FC +_0807E9E0: + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + movs r1, #0 + ldrsb r1, [r6, r1] + subs r0, r0, r1 + subs r1, r0, #7 + cmp r3, r1 + blt _0807EA5C_return_0 + adds r1, r0, #1 + lsls r1, r1, #8 +_0807E9FC: + str r1, [r4] + adds r0, r5, #0 + adds r0, #9 + asrs r1, r1, #8 + adds r5, r4, #0 + adds r5, #0x27 + ldrb r2, [r5] + movs r7, #0 + str r7, [sp] + ldr r6, _0807EA58 @ =sa2__sub_801EE64 + str r6, [sp, #4] + movs r3, #8 + bl sa2__sub_801E4E4 + cmp r0, #0 + bge _0807EA24 + lsls r1, r0, #8 + ldr r0, [r4, #4] + adds r0, r0, r1 + str r0, [r4, #4] +_0807EA24: + ldr r0, [r4, #4] + asrs r0, r0, #8 + ldr r1, [r4] + asrs r1, r1, #8 + ldrb r2, [r5] + movs r3, #8 + rsbs r3, r3, #0 + str r7, [sp] + str r6, [sp, #4] + bl sa2__sub_801E4E4 + cmp r0, #0 + bge _0807EA46 + lsls r1, r0, #8 + ldr r0, [r4, #4] + adds r0, r0, r1 + str r0, [r4, #4] +_0807EA46: + ldr r0, [r4, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + adds r1, #0x18 + ands r0, r1 + str r0, [r4, #0x10] + movs r0, #1 + b _0807EA5E + .align 2, 0 +_0807EA58: .4byte sa2__sub_801EE64 +_0807EA5C_return_0: + movs r0, #0 +_0807EA5E: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/red_flag__sub_8077FA4.inc b/sa1/asm/non_matching/game/interactables/red_flag__sub_8077FA4.inc new file mode 100644 index 0000000000..5e81e3e276 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/red_flag__sub_8077FA4.inc @@ -0,0 +1,139 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + adds r7, r0, #0 @ r7 = pole + adds r5, r1, #0 @ r5 = s + str r2, [sp] @ sp00 = r2 = worldX + str r3, [sp, #4] @ sp04 = r3 = worldY + movs r0, #0 + mov sl, r0 @ sl = 0 + mov sb, r0 @ sb = 0 + adds r0, r2, #0 + adds r0, #0xf + lsls r0, r0, #8 + str r0, [sp, #8] @ sp08 = qWorldX = Q(worldX + 15) + ldr r1, _08078014 @ =gPlayer + 0x26 + mov r8, r1 @ r8 =r1 = &gPlayer->itemEffect + adds r0, r5, #0 + adds r0, #0x21 + str r0, [sp, #0xc] @ sp0C = &s->prevVariant +_08077FD0_loop: + ldr r4, _08078018 @ =gPlayer + mov r1, sb + cmp r1, #0 + beq _08077FDA + ldr r4, _0807801C @ =gPartner +_08077FDA: + ldr r0, [sp] + lsls r1, r0, #0x10 + ldr r0, [sp, #4] + lsls r2, r0, #0x10 + adds r0, r5, #0 + asrs r1, r1, #0x10 + asrs r2, r2, #0x10 + adds r3, r4, #0 + bl Coll_Player_Entity_Intersection + movs r1, #0x80 + lsls r1, r1, #0xc + ands r1, r0 + cmp r1, #0 + beq _0807808A_continue + ldr r2, [r4, #0x10] + movs r0, #2 + ands r0, r2 + cmp r0, #0 + bne _0807808A_continue + movs r0, #4 + ands r0, r2 + cmp r0, #0 + bne _08078024 + movs r0, #0xc + ldrsh r1, [r4, r0] + ldr r0, _08078020 @ =0xFFFFFD00 + b _0807802A + .align 2, 0 +_08078014: .4byte gPlayer + 0x26 +_08078018: .4byte gPlayer +_0807801C: .4byte gPartner +_08078020: .4byte 0xFFFFFD00 +_08078024: + movs r0, #0xc + ldrsh r1, [r4, r0] + ldr r0, _080780AC @ =0xFFFFFAC0 +_0807802A: + cmp r1, r0 + bge _0807808A_continue + movs r6, #1 + ands r2, r6 + cmp r2, #0 + beq _0807808A_continue + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + movs r0, #0xaf + bl m4aSongNumStart + ldr r1, [sp, #8] + str r1, [r4] + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + mov r0, r8 + ldrb r1, [r0] + movs r0, #0x80 + orrs r0, r1 + mov r1, r8 + strb r0, [r1] + movs r0, #0xff + ldr r1, [sp, #0xc] + strb r0, [r1] + adds r0, #0xd6 + strh r0, [r5, #0xa] + adds r0, r5, #0 + adds r0, #0x20 + strb r6, [r0] + adds r0, r4, #0 + adds r0, #0x3c + ldrb r0, [r0] + adds r1, r7, #0 + adds r1, #0x3f + strb r0, [r1] + adds r1, r4, #0 + adds r1, #0x40 + ldrb r0, [r1] + adds r2, r7, #0 + adds r2, #0x3e + strb r0, [r2] + movs r0, #0x1e + strb r0, [r1] + mov sl, r6 +_0807808A_continue: + movs r0, #1 + add sb, r0 + ldr r0, _080780B0 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp sb, r0 + blt _08077FD0_loop + mov r0, sl + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_080780AC: .4byte 0xFFFFFAC0 +_080780B0: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/red_flag__sub_80780B4.inc b/sa1/asm/non_matching/game/interactables/red_flag__sub_80780B4.inc new file mode 100644 index 0000000000..f748005538 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/red_flag__sub_80780B4.inc @@ -0,0 +1,155 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + mov r8, r0 + adds r5, r1, #0 + str r2, [sp] + str r3, [sp, #4] + movs r0, #0 + str r0, [sp, #8] + movs r6, #0 + adds r0, r2, #0 + subs r0, #0xf + lsls r0, r0, #8 + str r0, [sp, #0xc] + ldr r1, _080780E4 @ =gPlayer + 0x26 + mov sl, r1 + adds r2, r5, #0 + adds r2, #0x21 + str r2, [sp, #0x10] + b _08078122 + .align 2, 0 +_080780E4: .4byte gPlayer + 0x26 +_080780E8: + movs r3, #0xc + ldrsh r1, [r4, r3] + movs r0, #0xa8 + lsls r0, r0, #3 + cmp r1, r0 + ble _0807810E + movs r7, #1 + ands r2, r7 + cmp r2, #0 + bne _0807810E + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + movs r0, #0xaf + bl m4aSongNumStart + ldr r0, [sp, #0xc] + str r0, [r4] + b _08078180 +_0807810E: + adds r6, #1 + ldr r0, _080781D8 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r6, r0 + bge _080781C4 + ldr r4, _080781DC @ =gPartner + cmp r6, #0 + bne _08078130 +_08078122: + ldr r4, _080781E0 @ =gPlayer + ldr r1, [sp] + lsls r1, r1, #0x10 + str r1, [sp, #0x14] + ldr r2, [sp, #4] + lsls r2, r2, #0x10 + mov sb, r2 +_08078130: + adds r0, r5, #0 + ldr r3, [sp, #0x14] + asrs r1, r3, #0x10 + mov r3, sb + asrs r2, r3, #0x10 + adds r3, r4, #0 + bl Coll_Player_Entity_Intersection + movs r1, #0x80 + lsls r1, r1, #0xc + ands r1, r0 + cmp r1, #0 + beq _0807810E + ldr r2, [r4, #0x10] + movs r0, #2 + ands r0, r2 + cmp r0, #0 + bne _0807810E + movs r0, #4 + ands r0, r2 + cmp r0, #0 + bne _080780E8 + movs r0, #0xc + ldrsh r1, [r4, r0] + movs r0, #0xc0 + lsls r0, r0, #2 + cmp r1, r0 + ble _0807810E + movs r7, #1 + ands r2, r7 + cmp r2, #0 + bne _0807810E + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + movs r0, #0xaf + bl m4aSongNumStart + ldr r1, [sp, #0xc] + str r1, [r4] +_08078180: + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + mov r2, sl + ldrb r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2] + movs r0, #0xff + ldr r3, [sp, #0x10] + strb r0, [r3] + adds r0, #0xd6 + strh r0, [r5, #0xa] + adds r0, r5, #0 + adds r0, #0x20 + strb r7, [r0] + adds r0, r4, #0 + adds r0, #0x3c + ldrb r0, [r0] + mov r1, r8 + adds r1, #0x3f + strb r0, [r1] + adds r2, r4, #0 + adds r2, #0x40 + ldrb r1, [r2] + mov r0, r8 + adds r0, #0x3e + strb r1, [r0] + movs r0, #0x1e + strb r0, [r2] + movs r0, #1 + str r0, [sp, #8] +_080781C4: + ldr r0, [sp, #8] + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_080781D8: .4byte gNumSingleplayerCharacters +_080781DC: .4byte gPartner +_080781E0: .4byte gPlayer + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/red_flag__sub_80781E4.inc b/sa1/asm/non_matching/game/interactables/red_flag__sub_80781E4.inc new file mode 100644 index 0000000000..8f20f11607 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/red_flag__sub_80781E4.inc @@ -0,0 +1,178 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + mov sl, r0 + adds r5, r1, #0 + adds r7, r2, #0 + mov r8, r3 + movs r0, #0 + str r0, [sp] + movs r6, #0 + ldr r0, _08078214 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x19 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #4] + ldr r1, _08078218 @ =gPlayer + 0x26 + mov sb, r1 + b _0807822C + .align 2, 0 +_08078214: .4byte gCurrentLevel +_08078218: .4byte gPlayer + 0x26 +_0807821C: + adds r6, #1 + ldr r0, _080782B8 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r6, r0 + blt _0807822C + b _08078326 +_0807822C: + ldr r4, _080782BC @ =gPlayer + cmp r6, #0 + beq _08078234 + ldr r4, _080782C0 @ =gPartner +_08078234: + lsls r1, r7, #0x10 + mov r0, r8 + lsls r2, r0, #0x10 + adds r0, r5, #0 + asrs r1, r1, #0x10 + asrs r2, r2, #0x10 + adds r3, r4, #0 + bl Coll_Player_Entity_Intersection + movs r1, #0x80 + lsls r1, r1, #0xc + ands r1, r0 + cmp r1, #0 + beq _0807821C + adds r0, r4, #0 + adds r0, #0x59 + ldrb r0, [r0] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _0807826E + adds r0, r4, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0807821C +_0807826E: + adds r0, r4, #0 + bl Player_TransitionCancelFlyingAndBoost + movs r0, #0xaf + bl m4aSongNumStart + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + mov r0, sb + ldrb r1, [r0] + movs r0, #0x80 + orrs r0, r1 + mov r1, sb + strb r0, [r1] + mov r0, r8 + adds r0, #0x10 + lsls r0, r0, #8 + str r0, [r4, #4] + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _080782C4 + adds r0, r7, #0 + subs r0, #8 + lsls r0, r0, #8 + str r0, [r4] + ldr r0, [r4, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + b _080782D2 + .align 2, 0 +_080782B8: .4byte gNumSingleplayerCharacters +_080782BC: .4byte gPlayer +_080782C0: .4byte gPartner +_080782C4: + adds r0, r7, #0 + adds r0, #8 + lsls r0, r0, #8 + str r0, [r4] + ldr r0, [r4, #0x10] + movs r1, #1 + orrs r0, r1 +_080782D2: + str r0, [r4, #0x10] + adds r1, r5, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + ldr r0, [sp, #4] + cmp r0, #0 + beq _080782EE + ldr r0, _080782F4 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xe + bne _080782F8 +_080782EE: + movs r0, #0xea + lsls r0, r0, #1 + b _080782FC + .align 2, 0 +_080782F4: .4byte gCurrentLevel +_080782F8: + movs r0, #0xeb + lsls r0, r0, #1 +_080782FC: + strh r0, [r5, #0xa] + adds r0, r5, #0 + adds r0, #0x20 + movs r1, #1 + strb r1, [r0] + adds r0, r4, #0 + adds r0, #0x3c + ldrb r0, [r0] + mov r1, sl + adds r1, #0x3f + strb r0, [r1] + adds r2, r4, #0 + adds r2, #0x40 + ldrb r1, [r2] + mov r0, sl + adds r0, #0x3e + strb r1, [r0] + movs r0, #0x1f + strb r0, [r2] + movs r0, #1 + str r0, [sp] +_08078326: + ldr r0, [sp] + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/run_wheel__sub_808EC84.inc b/sa1/asm/non_matching/game/interactables/run_wheel__sub_808EC84.inc new file mode 100644 index 0000000000..9e713e1b96 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/run_wheel__sub_808EC84.inc @@ -0,0 +1,553 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + mov sl, r0 + str r1, [sp] + str r2, [sp, #4] + str r3, [sp, #8] + ldr r7, [sp, #0x2c] + adds r0, r7, #0 + adds r0, #0x40 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xf + bne _0808ECAA + b _0808F084 +_0808ECAA: + ldr r0, [r7, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0808ECB6 + b _0808F084 +_0808ECB6: + bl sub_80549FC + adds r3, r0, #0 + cmp r3, #0 + beq _0808ED4C + movs r0, #0x4e + add r0, sl + mov sb, r0 + ldrb r0, [r0] + lsls r0, r0, #7 + ldr r1, _0808ED40 @ =0x000003FF + mov r8, r1 + ands r0, r1 + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + ldr r3, _0808ED44 @ =gSineTable + adds r0, r0, r3 + movs r4, #0 + ldrsh r0, [r0, r4] + ldr r5, _0808ED48 @ =0x00001770 + adds r1, r5, #0 + bl Div + adds r4, r0, #0 + mov r6, sl + ldr r0, [r6, #0x40] + movs r6, #0xc8 + lsls r6, r6, #4 + adds r1, r6, #0 + bl Div + muls r4, r0, r4 + ldr r0, [sp, #4] + adds r4, r0, r4 + lsls r4, r4, #0x10 + asrs r4, r4, #0x10 + mov r1, sb + ldrb r0, [r1] + lsls r0, r0, #7 + mov r2, r8 + ands r0, r2 + lsls r0, r0, #1 + ldr r3, _0808ED44 @ =gSineTable + adds r0, r0, r3 + movs r1, #0 + ldrsh r0, [r0, r1] + adds r1, r5, #0 + bl Div + adds r5, r0, #0 + mov r2, sl + ldr r0, [r2, #0x40] + adds r1, r6, #0 + bl Div + adds r2, r5, #0 + muls r2, r0, r2 + ldr r3, [sp, #8] + adds r2, r3, r2 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + ldr r0, [sp] + adds r1, r4, #0 + adds r3, r7, #0 + bl sub_80096B0 + b _0808F0A0 + .align 2, 0 +_0808ED40: .4byte 0x000003FF +_0808ED44: .4byte gSineTable +_0808ED48: .4byte 0x00001770 +_0808ED4C: + ldr r2, [r7, #0x10] + movs r5, #8 + adds r0, r2, #0 + ands r0, r5 + cmp r0, #0 + bne _0808ED5A + b _0808F0A0 +_0808ED5A: + ldr r0, [r7, #0x28] + ldr r4, [sp] + cmp r0, r4 + beq _0808ED64 + b _0808F0A0 +_0808ED64: + movs r6, #0x18 + ldrsh r0, [r4, r6] + ldr r4, _0808EDE4 @ =gCamera + movs r6, #2 + ldrsh r1, [r4, r6] + adds r0, r0, r1 + ldr r1, [sp] + adds r1, #0x2d + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + movs r1, #0xf + ldrsb r1, [r7, r1] + subs r0, r0, r1 + lsls r0, r0, #8 + str r0, [r7, #4] + movs r1, #2 + ands r1, r2 + cmp r1, #0 + bne _0808ED9C + adds r0, r7, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0808EE5C +_0808ED9C: + mov r0, sl + adds r0, #0x4c + strh r3, [r0] + cmp r1, #0 + beq _0808EDFE + str r3, [r7, #0x28] + movs r1, #9 + rsbs r1, r1, #0 + ands r1, r2 + str r1, [r7, #0x10] + adds r0, r7, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + bne _0808EDC8 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + bne _0808EDEC +_0808EDC8: + ldrh r1, [r7, #8] + movs r0, #8 + ldrsh r2, [r7, r0] + ldr r0, _0808EDE8 @ =0xFFFFFEE0 + cmp r2, r0 + blt _0808EDE0 + adds r0, r1, #0 + movs r1, #0x90 + lsls r1, r1, #1 + cmp r2, r1 + ble _0808EDE0 + adds r0, r1, #0 +_0808EDE0: + strh r0, [r7, #8] + b _0808EDF0 + .align 2, 0 +_0808EDE4: .4byte gCamera +_0808EDE8: .4byte 0xFFFFFEE0 +_0808EDEC: + mov r1, sl + str r3, [r1, #0x44] +_0808EDF0: + adds r2, r7, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + b _0808EE9C +_0808EDFE: + ldrh r1, [r4] + ldr r2, [sp] + ldrh r2, [r2, #0x16] + adds r1, r1, r2 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldrh r2, [r4, #2] + ldr r3, [sp] + ldrh r3, [r3, #0x18] + adds r2, r2, r3 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + ldr r0, [sp] + adds r3, r7, #0 + bl sub_80096B0 + ands r0, r5 + cmp r0, #0 + beq _0808EE9C + ldr r0, [r7, #0x10] + orrs r0, r5 + str r0, [r7, #0x10] + ldr r4, [sp] + str r4, [r7, #0x28] + ldrh r1, [r7, #0xc] + movs r6, #0xc + ldrsh r2, [r7, r6] + ldr r0, _0808EE58 @ =0xFFFFFDC0 + cmp r2, r0 + blt _0808EE46 + adds r0, r1, #0 + movs r1, #0x90 + lsls r1, r1, #2 + cmp r2, r1 + ble _0808EE46 + adds r0, r1, #0 +_0808EE46: + strh r0, [r7, #0xc] + adds r2, r7, #0 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2] + b _0808EE9C + .align 2, 0 +_0808EE58: .4byte 0xFFFFFDC0 +_0808EE5C: + ldr r2, _0808EEC8 @ =gSineTable + mov r0, sl + adds r0, #0x4e + ldrb r0, [r0] + lsls r0, r0, #7 + ldr r1, _0808EECC @ =0x000003FF + ands r0, r1 + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + adds r0, r0, r2 + movs r2, #0 + ldrsh r0, [r0, r2] + ldr r1, _0808EED0 @ =0x00001770 + bl Div + adds r4, r0, #0 + mov r3, sl + ldr r0, [r3, #0x40] + movs r1, #0xc8 + lsls r1, r1, #4 + bl Div + muls r0, r4, r0 + ldr r4, [sp, #4] + adds r0, r4, r0 + lsls r0, r0, #8 + movs r6, #8 + ldrsh r1, [r7, r6] + subs r0, r0, r1 + str r0, [r7] +_0808EE9C: + adds r0, r7, #0 + adds r0, #0x3c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0808EEAC + b _0808F076 +_0808EEAC: + mov r1, sl + ldr r0, [r1, #0x44] + movs r1, #0x1c + bl Div + cmp r0, #0 + bge _0808EED4 + mov r2, sl + ldr r0, [r2, #0x44] + movs r1, #0x1c + bl Div + rsbs r0, r0, #0 + b _0808EEDE + .align 2, 0 +_0808EEC8: .4byte gSineTable +_0808EECC: .4byte 0x000003FF +_0808EED0: .4byte 0x00001770 +_0808EED4: + mov r3, sl + ldr r0, [r3, #0x44] + movs r1, #0x1c + bl Div +_0808EEDE: + ldr r1, [sp] + adds r1, #0x22 + strb r0, [r1] + adds r0, r7, #0 + adds r0, #0x59 + movs r1, #0 + ldrsb r1, [r0, r1] + adds r3, r0, #0 + cmp r1, #3 + bne _0808EEFE + subs r0, #0x19 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + beq _0808EF0A +_0808EEFE: + movs r4, #0xc + ldrsh r0, [r7, r4] + subs r0, #0x10 + mov r6, sl + str r0, [r6, #0x44] + b _0808EF12 +_0808EF0A: + movs r1, #0xc + ldrsh r0, [r7, r1] + mov r2, sl + str r0, [r2, #0x44] +_0808EF12: + mov r4, sl + ldr r0, [r4, #0x44] + cmp r0, #0 + ble _0808EF1E + lsls r0, r0, #1 + str r0, [r4, #0x44] +_0808EF1E: + mov r6, sl + ldr r0, [r6, #0x44] + movs r1, #0xb2 + lsls r1, r1, #4 + cmp r0, r1 + ble _0808EF2C + str r1, [r6, #0x44] +_0808EF2C: + mov r1, sl + ldr r0, [r1, #0x40] + ldr r2, [r1, #0x44] + adds r0, r0, r2 + str r0, [r1, #0x40] + ldr r1, [r1, #0x3c] + cmp r0, r1 + ble _0808EF48 + mov r4, sl + str r1, [r4, #0x40] + cmp r2, #0 + bge _0808EF76 + movs r0, #0 + str r0, [r4, #0x44] +_0808EF48: + mov r6, sl + ldr r0, [r6, #0x44] + cmp r0, #0 + bge _0808EF76 + ldrh r1, [r7, #0xc] + movs r2, #0xc + ldrsh r0, [r7, r2] + cmp r0, #0 + bgt _0808EF76 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #0 + bne _0808EF70 + adds r0, r7, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + beq _0808EF76 +_0808EF70: + adds r0, r1, #0 + subs r0, #0x40 + strh r0, [r7, #0xc] +_0808EF76: + ldrh r1, [r7, #0xc] + movs r3, #0xc + ldrsh r2, [r7, r3] + ldr r0, _0808EFE0 @ =0xFFFFF700 + cmp r2, r0 + blt _0808EF8A + movs r0, #0x90 + lsls r0, r0, #3 + cmp r2, r0 + ble _0808EF8C +_0808EF8A: + adds r1, r0, #0 +_0808EF8C: + movs r2, #0 + strh r1, [r7, #0xc] + mov r4, sl + ldr r0, [r4, #0x40] + cmp r0, #0 + bge _0808EFC0 + str r2, [r4, #0x40] + str r2, [r4, #0x44] + adds r0, r7, #0 + adds r0, #0x3e + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #0 + bne _0808EFB0 + lsls r0, r1, #0x10 + cmp r0, #0 + bge _0808EFB0 + strh r2, [r7, #0xc] +_0808EFB0: + ldr r1, [sp] + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + ldr r1, [sp] + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] +_0808EFC0: + mov r6, sl + ldr r0, [r6, #0x44] + cmp r0, #0 + blt _0808EFE4 + ldr r0, [r6, #0x48] + cmp r0, #0 + bgt _0808EFFC + ldr r1, [sp] + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + ldr r1, [sp] + adds r1, #0x20 + movs r0, #1 + b _0808EFFA + .align 2, 0 +_0808EFE0: .4byte 0xFFFFF700 +_0808EFE4: + mov r1, sl + ldr r0, [r1, #0x48] + cmp r0, #0 + blt _0808EFFC + ldr r1, [sp] + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + ldr r1, [sp] + adds r1, #0x20 + movs r0, #0 +_0808EFFA: + strb r0, [r1] +_0808EFFC: + mov r3, sl + adds r3, #0x4c + ldrh r0, [r3] + adds r0, #1 + strh r0, [r3] + mov r4, sl + ldr r2, [r4, #0x44] + ldr r6, _0808F02C @ =0x000004FF + adds r1, r2, r6 + ldr r0, _0808F030 @ =0x000009FE + cmp r1, r0 + bhi _0808F034 + cmp r2, #0 + beq _0808F06E + ldrh r0, [r3] + movs r1, #0x19 + bl Mod + cmp r0, #0 + bne _0808F06E + movs r0, #0xd4 + bl m4aSongNumStart + b _0808F06E + .align 2, 0 +_0808F02C: .4byte 0x000004FF +_0808F030: .4byte 0x000009FE +_0808F034: + ldr r0, _0808F054 @ =0x0000081F + adds r1, r2, r0 + ldr r0, _0808F058 @ =0x0000103E + cmp r1, r0 + bhi _0808F05C + ldrh r0, [r3] + movs r1, #0x10 + bl Mod + cmp r0, #0 + bne _0808F06E + movs r0, #0xd5 + bl m4aSongNumStart + b _0808F06E + .align 2, 0 +_0808F054: .4byte 0x0000081F +_0808F058: .4byte 0x0000103E +_0808F05C: + ldrh r0, [r3] + movs r1, #8 + bl Mod + cmp r0, #0 + bne _0808F06E + movs r0, #0xd6 + bl m4aSongNumStart +_0808F06E: + mov r1, sl + ldr r0, [r1, #0x44] + str r0, [r1, #0x48] + b _0808F0A0 +_0808F076: + mov r2, sl + ldr r0, [r2, #0x44] + cmp r0, #0 + ble _0808F080 + asrs r0, r0, #1 +_0808F080: + strh r0, [r7, #0xc] + b _0808F0A0 +_0808F084: + ldr r1, [r7, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0808F0A0 + ldr r0, [r7, #0x28] + ldr r3, [sp] + cmp r0, r3 + bne _0808F0A0 + movs r0, #0 + str r0, [r7, #0x28] + subs r0, #9 + ands r1, r0 + str r1, [r7, #0x10] +_0808F0A0: + movs r0, #1 + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/spiked_barrel__Task_SpikedBarrel.inc b/sa1/asm/non_matching/game/interactables/spiked_barrel__Task_SpikedBarrel.inc new file mode 100644 index 0000000000..37e079e94c --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/spiked_barrel__Task_SpikedBarrel.inc @@ -0,0 +1,582 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x24 + movs r0, #0 + str r0, [sp, #0x10] @ sp10 = 0 + ldr r0, _080909D8 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 @ r7 = barrel + ldr r2, _080909DC @ =0x0300000C + adds r2, r2, r1 + mov sb, r2 @ sb = s + ldr r3, [r7] @ r3 = me + str r3, [sp, #8] @ sp08 = r3 = me + ldr r4, _080909E0 @ =0x03000050 + adds r2, r1, r4 @ r2 = unk50 + movs r6, #0 + ldrsh r0, [r2, r6] + cmp r0, #0 + beq _080909F4 + ldr r0, [r7, #0x48] + mov r8, r0 @ r8 = barrel->unk48 + ldrb r3, [r3, #5] + lsls r3, r3, #0xb + ldr r5, _080909E4 @ =gSineTable + movs r6, #0 + ldrsh r4, [r2, r6] @ r4 = barrel->unk50 + ldr r2, _080909E8 @ =gStageTime + ldr r6, _080909EC @ =0x03000044 + adds r0, r1, r6 + ldrh r1, [r0] + ldr r0, [r2] + adds r0, r0, r1 + movs r1, #0xff + ands r0, r1 + muls r0, r4, r0 + ldr r1, _080909F0 @ =0x000003FF + ands r0, r1 @ theta = CLAMP_SIN_PERIOD(barrel->unk50 * ((gStageTime + barrel->unk44) & 0xFF)); + lsls r0, r0, #1 + adds r0, r0, r5 + movs r1, #0 + ldrsh r0, [r0, r1] + muls r0, r3, r0 + asrs r0, r0, #0xe + str r0, [r7, #0x48] + mov r2, r8 + subs r2, r0, r2 + str r2, [sp, #0xc] + b _080909FC + .align 2, 0 +_080909D8: .4byte gCurTask +_080909DC: .4byte 0x0300000C +_080909E0: .4byte 0x03000050 +_080909E4: .4byte gSineTable +_080909E8: .4byte gStageTime +_080909EC: .4byte 0x03000044 +_080909F0: .4byte 0x000003FF +_080909F4: + movs r3, #0 + str r3, [sp, #0xc] + ldr r4, [sp, #0x10] + str r4, [r7, #0x48] +_080909FC: + adds r1, r7, #0 + adds r1, #0x52 + movs r6, #0 + ldrsh r0, [r1, r6] + cmp r0, #0 + beq _08090A4C + ldr r6, [r7, #0x4c] + ldr r0, [sp, #8] + ldrb r3, [r0, #6] + lsls r3, r3, #0xb + ldr r5, _08090A40 @ =gSineTable + movs r2, #0 + ldrsh r4, [r1, r2] + ldr r2, _08090A44 @ =gStageTime + adds r0, r7, #0 + adds r0, #0x44 + ldrh r1, [r0] + ldr r0, [r2] + adds r0, r0, r1 + movs r1, #0xff + ands r0, r1 + muls r0, r4, r0 + ldr r1, _08090A48 @ =0x000003FF + ands r0, r1 + lsls r0, r0, #1 + adds r0, r0, r5 + movs r4, #0 + ldrsh r0, [r0, r4] + muls r0, r3, r0 + asrs r0, r0, #0xe + str r0, [r7, #0x4c] + subs r6, r0, r6 + str r6, [sp, #0x10] + b _08090A52 + .align 2, 0 +_08090A40: .4byte gSineTable +_08090A44: .4byte gStageTime +_08090A48: .4byte 0x000003FF +_08090A4C: + movs r6, #0 + str r6, [sp, #0x10] + str r6, [r7, #0x4c] +_08090A52: + ldrb r0, [r7, #8] + lsls r0, r0, #3 + ldrh r1, [r7, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp] @ sp00 = worldX + ldr r1, [sp, #8] + ldrb r0, [r1, #1] + lsls r0, r0, #3 + ldrh r1, [r7, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #4] @ sp04 = worldY + ldr r0, [r7, #0x48] + movs r5, #0x80 + lsls r5, r5, #1 + adds r1, r5, #0 + bl Div + ldr r4, _08090D08 @ =gCamera + ldrh r2, [r4] + ldr r3, [sp] + lsls r1, r3, #0x10 + asrs r1, r1, #0x10 + subs r1, r1, r2 + adds r1, r1, r0 + mov r6, sb + strh r1, [r6, #0x16] + ldr r0, [r7, #0x4c] + adds r1, r5, #0 + bl Div + ldrh r2, [r4, #2] + ldr r3, [sp, #4] + lsls r1, r3, #0x10 + asrs r1, r1, #0x10 + subs r1, r1, r2 + adds r1, r1, r0 + strh r1, [r6, #0x18] + movs r4, #0 + str r4, [sp, #0x14] @ sp14 = i; + adds r6, r7, #0 + adds r6, #0x56 + str r6, [sp, #0x20] @ sp20 = barrel->unk56 +_08090AB2_loop: + ldr r6, _08090D0C @ =gPlayer + ldr r0, [sp, #0x14] + cmp r0, #0 + beq _08090ABC + ldr r6, _08090D10 @ =gPartner +_08090ABC: + ldr r0, [r6, #0x10] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + beq _08090AE2 + ldr r0, [r6, #0x28] + cmp r0, sb + bne _08090AE2 + ldr r0, [r6] + ldr r1, [sp, #0xc] @ r1 = qSp0C + adds r0, r0, r1 + str r0, [r6] + ldr r0, [r6, #4] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + ldr r3, [sp, #0x10] @ r3 = sp10 + adds r0, r0, r3 + str r0, [r6, #4] +_08090AE2: + ldr r1, [r7, #0x48] + asrs r1, r1, #8 + ldr r4, [sp] @ r4 = sp00 = worldX + lsls r5, r4, #0x10 + asrs r0, r5, #0x10 + mov r8, r0 @ r8 = worldX + add r1, r8 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r0, [r7, #0x4c] + asrs r0, r0, #8 + ldr r2, [sp, #4] + lsls r4, r2, #0x10 + asrs r2, r4, #0x10 + adds r2, r2, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r0, sb + adds r3, r6, #0 + bl Coll_Player_PlatformCrumbling + ldr r3, [sp, #0x20] @ barrel->unk56 + ldrb r0, [r3] + str r5, [sp, #0x18] @ sp18 = worldX << 16 + str r4, [sp, #0x1c] @ sp1C = worldY << 16 + cmp r0, #0 + beq _08090B1E + cmp r0, #2 + beq _08090B1E + b _08090C88 +_08090B1E: + mov r4, sb + ldr r1, [r4, #0x30] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08090B2C + b _08090C88 +_08090B2C: + ldr r0, [r7, #0x48] + movs r1, #0x80 + lsls r1, r1, #1 + mov sl, r1 @ sl = 0x100 + bl Div + add r0, r8 + mov r5, sb + adds r5, #0x34 + movs r1, #0 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + ldr r2, [r6] + asrs r2, r2, #8 + ldr r1, [r6, #0x64] + adds r1, #0x38 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r2, r2, r1 + cmp r0, r2 + bgt _08090B80 + ldr r0, [r7, #0x48] + mov r1, sl + bl Div + add r0, r8 + mov r1, sb + adds r1, #0x36 + movs r2, #0 + ldrsb r2, [r1, r2] + adds r2, r2, r0 + ldr r1, [r6] + asrs r1, r1, #8 + ldr r0, [r6, #0x64] + adds r0, #0x38 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r1, r1, r0 + cmp r2, r1 + bge _08090BC6 +_08090B80: + ldr r0, [r7, #0x48] + mov r1, sl + bl Div + add r0, r8 + movs r1, #0 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + ldr r2, [r6] + asrs r2, r2, #8 + ldr r3, [r6, #0x64] + adds r1, r3, #0 + adds r1, #0x38 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r2, r2, r1 + cmp r0, r2 + blt _08090C88 + adds r0, r3, #0 + adds r0, #0x3a + movs r4, #0 + ldrsb r4, [r0, r4] + subs r4, r4, r1 + adds r4, r2, r4 + ldr r0, [r7, #0x48] + mov r1, sl + bl Div + add r0, r8 + movs r1, #0 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + cmp r4, r0 + blt _08090C88 +_08090BC6: + ldr r0, [r7, #0x4c] + movs r2, #0x80 + lsls r2, r2, #1 + mov sl, r2 + mov r1, sl + bl Div + ldr r3, [sp, #0x1c] + asrs r5, r3, #0x10 + adds r0, r5, r0 + movs r4, #0x35 + add r4, sb + mov r8, r4 + movs r1, #0 + ldrsb r1, [r4, r1] + adds r0, r0, r1 + ldr r2, [r6, #4] + asrs r2, r2, #8 + ldr r1, [r6, #0x64] + adds r1, #0x39 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r2, r2, r1 + cmp r0, r2 + bgt _08090C22 + ldr r0, [r7, #0x4c] + mov r1, sl + bl Div + adds r0, r5, r0 + mov r1, sb + adds r1, #0x37 + movs r2, #0 + ldrsb r2, [r1, r2] + adds r2, r2, r0 + ldr r1, [r6, #4] + asrs r1, r1, #8 + ldr r0, [r6, #0x64] + adds r0, #0x39 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r1, r1, r0 + cmp r2, r1 + bge _08090C6C +_08090C22: + ldr r0, [r7, #0x4c] + mov r1, sl + bl Div + adds r0, r5, r0 + mov r2, r8 + movs r1, #0 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + ldr r1, [r6, #4] + asrs r1, r1, #8 + ldr r3, [r6, #0x64] + adds r2, r3, #0 + adds r2, #0x39 + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 + adds r1, r1, r2 + cmp r0, r1 + blt _08090C88 + adds r0, r3, #0 + adds r0, #0x3b + movs r4, #0 + ldrsb r4, [r0, r4] + subs r4, r4, r2 + adds r4, r1, r4 + ldr r0, [r7, #0x4c] + mov r1, sl + bl Div + adds r0, r5, r0 + mov r3, r8 + movs r1, #0 + ldrsb r1, [r3, r1] + adds r0, r0, r1 + cmp r4, r0 + blt _08090C88 +_08090C6C: + ldr r0, _08090D0C @ =gPlayer + ldr r0, [r0, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08090C88 + adds r0, r6, #0 + bl Coll_DamagePlayer + cmp r0, #0 + beq _08090C88 + movs r0, #0xab + bl m4aSongNumStart +_08090C88: + ldr r4, [sp, #0x14] + adds r4, #1 + str r4, [sp, #0x14] + ldr r0, _08090D14 @ =gNumSingleplayerCharacters + movs r1, #0 + ldrsb r1, [r0, r1] + adds r3, r0, #0 + cmp r4, r1 + bge _08090C9C + b _08090AB2_loop +_08090C9C: + ldr r6, [sp, #0x18] + asrs r5, r6, #0x10 @ r5 = worldX + ldr r2, _08090D08 @ =gCamera + movs r0, #0 + ldrsh r1, [r2, r0] + movs r4, #0xb8 + lsls r4, r4, #1 + adds r0, r1, r4 + cmp r5, r0 + bgt _08090CD2 + adds r0, r1, #0 + subs r0, #0x80 + cmp r5, r0 + blt _08090CD2 + ldr r6, [sp, #0x1c] + asrs r4, r6, #0x10 @r4 = worldY + movs r0, #2 + ldrsh r1, [r2, r0] + movs r2, #0x90 + lsls r2, r2, #1 + adds r0, r1, r2 + cmp r4, r0 + bgt _08090CD2 + adds r0, r1, #0 + subs r0, #0x80 + cmp r4, r0 + bge _08090D1C +_08090CD2: + mov r4, sb + ldrh r0, [r4, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _08090CF8 + movs r6, #0x18 + ldrsh r0, [r4, r6] + adds r0, #0x80 + cmp r0, #0 + blt _08090CF8 + movs r0, #0x18 + ldrsh r1, [r4, r0] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08090D1C +_08090CF8: + ldrb r0, [r7, #8] + ldr r1, [sp, #8] + strb r0, [r1] + ldr r0, _08090D18 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _08090DE0_return + .align 2, 0 +_08090D08: .4byte gCamera +_08090D0C: .4byte gPlayer +_08090D10: .4byte gPartner +_08090D14: .4byte gNumSingleplayerCharacters +_08090D18: .4byte gCurTask +_08090D1C: + ldr r1, _08090D5C @ =gPlayer + ldr r0, [r1, #0x10] + movs r2, #8 + ands r0, r2 + cmp r0, #0 + beq _08090D2E + ldr r0, [r1, #0x28] + cmp r0, sb + beq _08090D46 +_08090D2E: + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #2 + bne _08090D64 + ldr r1, _08090D60 @ =gPartner + ldr r0, [r1, #0x10] + ands r0, r2 + cmp r0, #0 + beq _08090D64 + ldr r0, [r1, #0x28] + cmp r0, sb + bne _08090D64 +_08090D46: + adds r0, r7, #0 + adds r0, #0x54 + ldrh r3, [r0] + movs r1, #0x80 + lsls r1, r1, #1 + adds r2, r0, #0 + cmp r3, r1 + beq _08090D76 + adds r0, r3, #0 + adds r0, #0x10 + b _08090D74 + .align 2, 0 +_08090D5C: .4byte gPlayer +_08090D60: .4byte gPartner +_08090D64: + adds r0, r7, #0 + adds r0, #0x54 + ldrh r1, [r0] + adds r2, r0, #0 + cmp r1, #0 + beq _08090D76 + adds r0, r1, #0 + subs r0, #0x10 +_08090D74: + strh r0, [r2] +_08090D76: + ldr r1, _08090DB0 @ =gSineTable + ldrh r0, [r2] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x1c + mov r2, sb + ldrh r2, [r2, #0x18] + adds r0, r0, r2 + mov r3, sb + strh r0, [r3, #0x18] + adds r1, r7, #0 + adds r1, #0x57 + ldrb r0, [r1] + subs r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _08090DD4 + ldr r4, [sp, #0x20] + ldrb r0, [r4] + cmp r0, #0 + beq _08090DAA + cmp r0, #2 + bne _08090DB4 +_08090DAA: + movs r0, #0x30 + b _08090DB6 + .align 2, 0 +_08090DB0: .4byte gSineTable +_08090DB4: + movs r0, #0x10 +_08090DB6: + strb r0, [r1] + ldr r6, [sp, #0x20] + ldrb r0, [r6] + adds r0, #1 + movs r1, #3 + ands r0, r1 + strb r0, [r6] + mov r1, sb + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + ldrb r1, [r6] + mov r0, sb + adds r0, #0x20 + strb r1, [r0] +_08090DD4: + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + bl DisplaySprite +_08090DE0_return: + add sp, #0x24 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/spring_hiding__sub_8095224.inc b/sa1/asm/non_matching/game/interactables/spring_hiding__sub_8095224.inc new file mode 100644 index 0000000000..c94a151ad1 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/spring_hiding__sub_8095224.inc @@ -0,0 +1,329 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + mov sb, r1 @ sb = s + str r2, [sp] @ sp00 = worldX + str r3, [sp, #4]@ sp04 = worldY + movs r1, #0 + mov sl, r1 @ sl = result = FALSE + ldr r0, [r0] + str r0, [sp, #8]@ sp08 = me + movs r2, #0 + str r2, [sp, #0xc] + movs r5, #0 + ldr r7, _08095254 @ =gPartner + ldr r0, _08095258 @ =gPlayer + mov r8, r0 +_0809524A_loop: + cmp r5, #0 + beq _0809525C + ldr r0, [r7, #0x10] + b _08095260 + .align 2, 0 +_08095254: .4byte gPartner +_08095258: .4byte gPlayer +_0809525C: + mov r1, r8 + ldr r0, [r1, #0x10] +_08095260: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0809526A + b _08095456_continue +_0809526A: + cmp r5, #0 + beq _08095272 + ldr r0, [r7, #0x10] + b _08095276 +_08095272: + mov r2, r8 + ldr r0, [r2, #0x10] +_08095276: + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + beq _08095282 + b _08095456_continue +_08095282: @ (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) + ldr r1, [sp] @ r1 = worldX + lsls r0, r1, #0x10 + asrs r6, r0, #0x10 + ldr r2, [sp, #4] @ r2 = worldY + lsls r0, r2, #0x10 + asrs r4, r0, #0x10 + ldr r3, _080952DC @ =gPlayer + cmp r5, #0 + beq _08095296 + ldr r3, _080952E0 @ =gPartner +_08095296: + mov r0, sb + adds r1, r6, #0 + adds r2, r4, #0 + bl Coll_Player_Entity_Intersection + cmp r0, #0 + bne _080952BE + ldr r3, _080952DC @ =gPlayer + cmp r5, #0 + beq _080952AC + ldr r3, _080952E0 @ =gPartner +_080952AC: + mov r0, sb + adds r1, r6, #0 + adds r2, r4, #0 + bl Coll_AmyHammer_Spring + str r0, [sp, #0xc] @ sp0C = Coll_AmyHammer_Spring() + cmp r0, #0 + bne _080952BE + b _08095456_continue +_080952BE: + ldr r0, _080952DC @ =gPlayer + cmp r5, #0 + beq _080952C6 + ldr r0, _080952E0 @ =gPartner +_080952C6: + bl sa2__sub_8021BE0 + cmp r5, #0 + beq _080952E4 + ldr r0, [r7, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r7, #0x10] + b _080952F2 + .align 2, 0 +_080952DC: .4byte gPlayer +_080952E0: .4byte gPartner +_080952E4: + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + mov r2, r8 + str r0, [r2, #0x10] +_080952F2: + ldr r2, _08095304 @ =gPlayer + cmp r5, #0 + beq _08095308 + ldr r0, [r7, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r7, #0x10] + b _08095314 + .align 2, 0 +_08095304: .4byte gPlayer +_08095308: + mov r1, r8 + ldr r0, [r1, #0x10] + movs r1, #2 + orrs r0, r1 + mov r1, r8 + str r0, [r1, #0x10] +_08095314: + cmp r5, #0 + beq _08095328 + ldr r0, [r7, #0x10] + ldr r1, _08095324 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r7, #0x10] + b _08095334 + .align 2, 0 +_08095324: .4byte 0xFFFFFEFF +_08095328: + mov r1, r8 + ldr r0, [r1, #0x10] + ldr r1, _08095340 @ =0xFFFFFEFF + ands r0, r1 + mov r1, r8 + str r0, [r1, #0x10] +_08095334: + cmp r5, #0 + beq _08095348 + movs r0, #0 + ldr r1, _08095344 @ =gPartner + 0x3D + strb r0, [r1] + b _0809534E + .align 2, 0 +_08095340: .4byte 0xFFFFFEFF +_08095344: .4byte gPartner + 0x3D +_08095348: + adds r0, r2, #0 + adds r0, #0x3d + strb r5, [r0] +_0809534E: + ldr r1, [sp, #8] @ r1 = sp08 = me + ldrb r0, [r1, #4] + lsls r0, r0, #6 + rsbs r0, r0, #0 + cmp r5, #0 + beq _0809535E + strh r0, [r7, #0xa] + b _08095360 +_0809535E: + strh r0, [r2, #0xa] +_08095360: + ldr r0, [sp, #0xc] @ r0 = sp0C = + cmp r0, #0 + beq _08095390 + cmp r5, #0 + beq _08095370 + movs r1, #0xa + ldrsh r0, [r7, r1] + b _08095374 +_08095370: + movs r1, #0xa + ldrsh r0, [r2, r1] +_08095374: + lsls r0, r0, #0xf + lsrs r0, r0, #0x10 + lsls r0, r0, #0x10 + asrs r1, r0, #0x10 + cmp r5, #0 + beq _08095388 + ldrh r0, [r7, #0xa] + adds r0, r0, r1 + strh r0, [r7, #0xa] + b _08095390 +_08095388: + mov r2, r8 + ldrh r0, [r2, #0xa] + adds r0, r0, r1 + strh r0, [r2, #0xa] +_08095390: + ldr r0, [sp, #8] + ldrb r1, [r0, #3] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080953D0 + ldr r0, _080953B4 @ =gPlayer + cmp r5, #0 + beq _080953A4 + ldr r0, _080953B8 @ =gPartner +_080953A4: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _080953C0 + movs r0, #0x15 + ldr r1, _080953BC @ =gPartner + 0x40 + strb r0, [r1] + b _080953C6 + .align 2, 0 +_080953B4: .4byte gPlayer +_080953B8: .4byte gPartner +_080953BC: .4byte gPartner + 0x40 +_080953C0: + movs r0, #0x15 + ldr r2, _080953CC @ =gPlayer + 0x40 + strb r0, [r2] +_080953C6: + cmp r5, #0 + bne _080953FE + b _08095410 + .align 2, 0 +_080953CC: .4byte gPlayer + 0x40 +_080953D0: + ldr r0, _080953E8 @ =gPlayer + cmp r5, #0 + beq _080953D8 + ldr r0, _080953EC @ =gPartner +_080953D8: + bl Player_TransitionCancelFlyingAndBoost + cmp r5, #0 + beq _080953F4 + movs r0, #0x11 + ldr r1, _080953F0 @ =gPartner + 0x40 + strb r0, [r1] + b _080953FA + .align 2, 0 +_080953E8: .4byte gPlayer +_080953EC: .4byte gPartner +_080953F0: .4byte gPartner + 0x40 +_080953F4: + movs r0, #0x11 + ldr r2, _08095408 @ =gPlayer + 0x40 + strb r0, [r2] +_080953FA: + cmp r5, #0 + beq _08095410 +_080953FE: + movs r0, #0xff + ldr r1, _0809540C @ =gPartnerBodyPSI+0xC+0x21 + strb r0, [r1] + b _08095416 + .align 2, 0 +_08095408: .4byte gPlayer + 0x40 +_0809540C: .4byte gPartnerBodyPSI+0xC+0x21 +_08095410: + movs r0, #0xff + ldr r2, _08095478 @ =gPlayerBodyPSI+0xC+0x21 + strb r0, [r2] +_08095416: + mov r0, sb + adds r0, #0x20 + movs r1, #1 + strb r1, [r0] + mov r1, sb + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + ldr r0, _0809547C @ =gPlayer + cmp r5, #0 + beq _0809542E + ldr r0, _08095480 @ =gPartner +_0809542E: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _0809547C @ =gPlayer + cmp r5, #0 + beq _0809543C + ldr r1, _08095480 @ =gPartner +_0809543C: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _0809547C @ =gPlayer + cmp r5, #0 + beq _08095448 + ldr r1, _08095480 @ =gPartner +_08095448: + movs r0, #0xe + strb r0, [r1, #0xf] + movs r0, #0xaa + bl m4aSongNumStart + movs r0, #1 + mov sl, r0 +_08095456_continue: + adds r5, #1 + ldr r0, _08095484 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r5, r0 + bge _08095466 + b _0809524A_loop +_08095466: + mov r0, sl + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_08095478: .4byte gPlayerBodyPSI+0xC+0x21 +_0809547C: .4byte gPlayer +_08095480: .4byte gPartner +_08095484: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/stage_goal__Task_StageGoal.inc b/sa1/asm/non_matching/game/interactables/stage_goal__Task_StageGoal.inc new file mode 100644 index 0000000000..9f249945ca --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/stage_goal__Task_StageGoal.inc @@ -0,0 +1,500 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r0, _0801F360 @ =gGameMode + ldrb r1, [r0] + cmp r1, #1 + bls _0801F2C6 + ldr r1, _0801F364 @ =gMultiplayerPlayerTasks + ldr r0, _0801F368 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + mov sl, r1 @ sl = mpp +_0801F2C6: + ldr r4, _0801F36C @ =gCurTask + ldr r0, [r4] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r1 + mov sb, r0 @ sb = goal + ldr r0, _0801F370 @ =0x0300000C + adds r0, r0, r1 + mov r8, r0 @ r8 = s + mov r1, sb + ldr r1, [r1] + str r1, [sp, #4] @ sp04 = me + mov r2, sb + ldrb r1, [r2, #8] + lsls r1, r1, #3 + ldrh r0, [r2, #4] + lsls r0, r0, #8 + adds r1, r1, r0 + lsls r1, r1, #0x10 @ r1 = worldX << 16 + ldr r3, [sp, #4] + ldrb r2, [r3, #1] + lsls r2, r2, #3 + mov r5, sb + ldrh r0, [r5, #6] + lsls r0, r0, #8 + adds r2, r2, r0 @ r2 = worldY + ldr r3, _0801F374 @ =gCamera + ldrh r0, [r3] + lsrs r5, r1, #0x10 + str r5, [sp] @ sp00 = worldX + asrs r5, r1, #0x10 @ r5 = worldX + subs r0, r5, r0 + mov r1, r8 + strh r0, [r1, #0x16] + ldrh r0, [r3, #2] + lsls r2, r2, #0x10 + asrs r6, r2, #0x10 @ r6 = worldY + subs r0, r6, r0 + strh r0, [r1, #0x18] @ s->y = worldY - gCamera.y; + ldr r2, _0801F360 @ =gGameMode + ldrb r7, [r2] + cmp r7, #3 + beq _0801F324 + cmp r7, #5 + beq _0801F324 + b _0801F4D8 +_0801F324: + movs r3, #1 + str r3, [sp, #8] + ldr r1, _0801F378 @ =gPlayer + ldr r0, [r1] + asrs r3, r0, #8 @ r3 = playerWorldX + adds r4, r1, #0 @ r4 = r1 = gPlayer + cmp r3, r5 + bgt _0801F336 + b _0801F4B8 +_0801F336: + ldr r0, _0801F37C @ =gCurrentLevel + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #7 + bne _0801F34C + ldr r0, [r4, #4] + asrs r0, r0, #8 + adds r1, r6, #0 + subs r1, #0x50 @ r1 = worldY - 80 + cmp r0, r1 + bgt _0801F3D2 +_0801F34C: + cmp r7, #1 + bls _0801F380 + cmp r2, #0xa + bne _0801F3C4 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r0, r6 + blt _0801F3D2 + b _0801F3C4 + .align 2, 0 +_0801F360: .4byte gGameMode +_0801F364: .4byte gMultiplayerPlayerTasks +_0801F368: .4byte 0x04000128 +_0801F36C: .4byte gCurTask +_0801F370: .4byte 0x0300000C +_0801F374: .4byte gCamera +_0801F378: .4byte gPlayer +_0801F37C: .4byte gCurrentLevel +_0801F380: + cmp r2, #0xa + bne _0801F3C4 + ldr r1, [r4, #0x64] + adds r0, r1, #0 + adds r0, #0x38 + movs r2, #0 + ldrsb r2, [r0, r2] + adds r3, r3, r2 + cmp r3, r5 + bgt _0801F3C4 + adds r0, #2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r3, r0 + cmp r0, r5 + blt _0801F3C4 + ldr r0, [r4, #4] + asrs r0, r0, #8 + movs r5, #0x39 + ldrsb r2, [r5, r1] + adds r3, r0, r2 + cmp r3, r6 + bgt _0801F3C4 + adds r0, r1, #0 + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r3, r0 + cmp r0, r6 + bge _0801F3D2 +_0801F3C4: + ldr r1, _0801F494 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #7 + beq _0801F4B8 + cmp r0, #0xa + beq _0801F4B8 +_0801F3D2: + mov r2, sl @ r2 = sl = mpp + ldr r0, [r2, #0x5c] + movs r1, #1 + orrs r0, r1 + str r0, [r2, #0x5c] + ldr r3, [sp] @ r3 = *sp00 = worldX + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + adds r0, #0x78 + ldr r5, _0801F498 @ =gCamera + strh r0, [r5, #0x1a] + movs r4, #0 + ldr r1, _0801F49C @ =gMultiplayerPlayerTasks + ldr r0, [r1] + cmp r0, #0 + beq _0801F460 + ldr r6, _0801F4A0 @ =0x04000128 + adds r7, r1, #0 + movs r0, #0x10 + mov ip, r0 + ldr r1, _0801F4A4 @ =gMultiplayerConnections + mov sl, r1 @ sl = gMultiplayerConnections +_0801F3FE: + ldr r0, [r6] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0801F44C + lsls r0, r4, #2 + adds r0, r0, r7 + ldr r0, [r0] + ldrh r5, [r0, #6] + mov r2, sl @ r2 = sl = gMultiplayerConnections + ldrb r3, [r2] + mov r2, ip + lsls r2, r4 + ands r2, r3 + adds r0, r4, #4 + asrs r2, r0 + ldr r1, [r6] + lsls r1, r1, #0x1a + lsrs r1, r1, #0x1e + mov r0, ip + lsls r0, r1 + ands r3, r0 + ldr r0, [r6] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, #4 + asrs r3, r0 + cmp r2, r3 + bne _0801F44C + ldr r3, _0801F4A8 @ =0x03000054 + adds r0, r5, r3 + ldrh r1, [r0] + movs r0, #0x80 + lsls r0, r0, #1 + ands r0, r1 + cmp r0, #0 + bne _0801F44C + movs r5, #0 + str r5, [sp, #8] +_0801F44C: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #3 + bhi _0801F460 + lsls r0, r4, #2 + adds r0, r0, r7 + ldr r0, [r0] + cmp r0, #0 + bne _0801F3FE +_0801F460: + ldr r0, [sp, #8] + cmp r0, #0 + bne _0801F468 + b _0801F620 +_0801F468: + ldr r1, _0801F4AC @ =gMultiplayerRanks + ldr r0, _0801F4A0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, r0, r1 + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0801F482 + b _0801F5DA +_0801F482: + mov r1, r8 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + ldr r2, _0801F4B0 @ =gCurTask + ldr r1, [r2] + ldr r0, _0801F4B4 @ =Task_StageGoal3 + b _0801F606_callTaskMain + .align 2, 0 +_0801F494: .4byte gCurrentLevel +_0801F498: .4byte gCamera +_0801F49C: .4byte gMultiplayerPlayerTasks +_0801F4A0: .4byte 0x04000128 +_0801F4A4: .4byte gMultiplayerConnections +_0801F4A8: .4byte 0x03000054 +_0801F4AC: .4byte gMultiplayerRanks +_0801F4B0: .4byte gCurTask +_0801F4B4: .4byte Task_StageGoal3 +_0801F4B8: + ldr r0, _0801F4D0 @ =gRefCollision + ldr r0, [r0] + ldrh r0, [r0, #0x1c] + ldr r1, _0801F4D4 @ =gCamera + strh r0, [r1, #0x1a] + mov r2, sl @ r2 = sl = mpp + ldr r0, [r2, #0x5c] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2, #0x5c] + b _0801F620 + .align 2, 0 +_0801F4D0: .4byte gRefCollision +_0801F4D4: .4byte gCamera +_0801F4D8: + ldr r1, _0801F510 @ =gPlayer + ldr r0, [r1] + asrs r2, r0, #8 + adds r4, r1, #0 + cmp r2, r5 + bgt _0801F4E6 + b _0801F620 +_0801F4E6: + ldr r0, _0801F514 @ =gCurrentLevel + movs r3, #0 + ldrsb r3, [r0, r3] + cmp r3, #7 + bne _0801F4FC + ldr r0, [r4, #4] + asrs r0, r0, #8 + adds r1, r6, #0 + subs r1, #0x50 + cmp r0, r1 + bgt _0801F572 +_0801F4FC: + cmp r7, #1 + bls _0801F518 + cmp r3, #0xa + bne _0801F564 + ldr r0, [r4, #4] + asrs r0, r0, #8 + cmp r0, r6 + blt _0801F572 + b _0801F564 + .align 2, 0 +_0801F510: .4byte gPlayer +_0801F514: .4byte gCurrentLevel +_0801F518: + cmp r3, #0xa + bne _0801F564 + ldr r3, [r4, #0x64] + mov ip, r3 + mov r0, ip + adds r0, #0x38 + movs r1, #0 + ldrsb r1, [r0, r1] + adds r3, r2, r1 + cmp r3, r5 + bgt _0801F564 + adds r0, #2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r1 + adds r0, r3, r0 + cmp r0, r5 + blt _0801F564 + ldr r0, [r4, #4] + asrs r0, r0, #8 + mov r3, ip + adds r3, #0x39 + ldrb r3, [r3] + lsls r3, r3, #0x18 + asrs r3, r3, #0x18 + adds r1, r0, r3 + cmp r1, r6 + bgt _0801F564 + mov r0, ip + adds r0, #0x3b + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r6 + bge _0801F572 +_0801F564: + ldr r5, _0801F594 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #7 + beq _0801F620 + cmp r0, #0xa + beq _0801F620 +_0801F572: + ldr r1, _0801F598 @ =gGameMode + ldrb r0, [r1] + cmp r0, #1 + bls _0801F5A4 + ldr r1, _0801F59C @ =gMultiplayerRanks + ldr r0, _0801F5A0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, r0, r1 + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0801F5B2 + b _0801F5DA + .align 2, 0 +_0801F594: .4byte gCurrentLevel +_0801F598: .4byte gGameMode +_0801F59C: .4byte gMultiplayerRanks +_0801F5A0: .4byte 0x04000128 +_0801F5A4: + ldr r0, _0801F5C4 @ =gMultiplayerRanks + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _0801F5D0 +_0801F5B2: + mov r1, r8 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + ldr r2, _0801F5C8 @ =gCurTask + ldr r1, [r2] + ldr r0, _0801F5CC @ =Task_StageGoal3 + b _0801F606_callTaskMain + .align 2, 0 +_0801F5C4: .4byte gMultiplayerRanks +_0801F5C8: .4byte gCurTask +_0801F5CC: .4byte Task_StageGoal3 +_0801F5D0: + ldr r0, _0801F610 @ =gStageFlags + ldrh r1, [r0] + movs r2, #3 + orrs r1, r2 + strh r1, [r0] +_0801F5DA: + ldr r3, _0801F614 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #0xa + beq _0801F5EA + movs r0, #0x87 + bl m4aSongNumStart +_0801F5EA: + movs r1, #0 + movs r0, #0 + mov r5, sb @ r5 = sb = goal + strh r0, [r5, #0x3c] + mov r0, sb + adds r0, #0x3e + strb r1, [r0] + mov r1, r8 + adds r1, #0x20 + movs r0, #1 + strb r0, [r1] + ldr r0, _0801F618 @ =gCurTask + ldr r1, [r0] + ldr r0, _0801F61C @ =Task_StageGoal2 +_0801F606_callTaskMain: + str r0, [r1, #8] + bl _call_via_r0 + b _0801F670 + .align 2, 0 +_0801F610: .4byte gStageFlags +_0801F614: .4byte gCurrentLevel +_0801F618: .4byte gCurTask +_0801F61C: .4byte Task_StageGoal2 +_0801F620: + mov r1, r8 + ldrh r0, [r1, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0801F648 + mov r2, r8 + movs r3, #0x18 + ldrsh r0, [r2, r3] + adds r0, #0x80 + cmp r0, #0 + blt _0801F648 + movs r5, #0x18 + ldrsh r1, [r2, r5] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0801F660 +_0801F648: + mov r1, sb + ldrb r0, [r1, #8] + ldr r2, [sp, #4] + strb r0, [r2] + ldr r3, _0801F65C @ =gCurTask + ldr r0, [r3] + bl TaskDestroy + b _0801F670 + .align 2, 0 +_0801F65C: .4byte gCurTask +_0801F660: + ldr r5, [sp, #4] + movs r0, #3 + ldrsb r0, [r5, r0] + cmp r0, #0 + beq _0801F670 + mov r0, r8 + bl DisplaySprite +_0801F670: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/swing_rope__Task_SwingRope.inc b/sa1/asm/non_matching/game/interactables/swing_rope__Task_SwingRope.inc new file mode 100644 index 0000000000..8d5696a57c --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/swing_rope__Task_SwingRope.inc @@ -0,0 +1,1087 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _08088878 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + mov sb, r1 @ sb = r1 = rope + ldr r0, [r1] @ r0 = me + str r0, [sp, #0xc] @ sp0C = r0 = me + ldrb r0, [r1, #8] + lsls r0, r0, #3 + ldrh r1, [r1, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #4] @ sp04 = worldX + ldr r1, [sp, #0xc] + ldrb r0, [r1, #1] + lsls r0, r0, #3 + mov r2, sb @ r2 = sb = rope + ldrh r1, [r2, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] @ sp08 = worldY + movs r7, #0 + ldr r5, _0808887C @ =gPartner + ldr r6, _08088880 @ =gPlayer + movs r3, #0 + mov sl, r3 +_08088870_loop: + cmp r7, #0 + beq _08088884 + ldr r0, [r5, #0x10] + b _08088886 + .align 2, 0 +_08088878: .4byte gCurTask +_0808887C: .4byte gPartner +_08088880: .4byte gPlayer +_08088884: + ldr r0, [r6, #0x10] +_08088886: + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08088890 + b _08088F1C_p_is_dead +_08088890: + mov r2, sb @ r2 = sb = rope + adds r2, #0x3c + ldrb r1, [r2] + asrs r1, r7 + movs r0, #1 + ands r1, r0 + str r2, [sp, #0x14] @ sp14 = rope->unk3C + cmp r1, #0 + bne _080888A4 + b _08088CF8 +_080888A4: + mov r0, sb @ r0 = sb = rope + adds r0, #0x40 + mov r2, sl @ r2 = sl = i*4 + adds r1, r0, r2 + ldr r2, [r1] + adds r4, r0, #0 @ r4 = &rope->unk40 + cmp r2, #0xe7 + bgt _080888BA + adds r0, r2, #0 + adds r0, #0x10 + str r0, [r1] +_080888BA: + ldr r0, [r1] + movs r2, #0x90 + lsls r2, r2, #4 + cmp r0, r2 + ble _080888C6 + str r2, [r1] +_080888C6: + mov r2, sb @ r2 = sb = rope + adds r2, #0x48 + add r2, sl @ r2 = sl = i*4 + ldr r0, [r2] + ldr r1, [r1] + adds r0, r0, r1 + str r0, [r2] + ldr r3, [sp, #8] @ r3 = sp08 = worldY + lsls r1, r3, #0x10 + asrs r0, r1, #8 + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + str r1, [sp, #0x10] @ sp10 = worldY << 16 + cmp r7, #0 + beq _080888EA + str r0, [r5, #4] + b _080888EC +_080888EA: + str r0, [r6, #4] +_080888EC: + ldr r0, [sp, #4] @ r0 = sp04 = worldX + lsls r3, r0, #0x10 + asrs r2, r3, #0x10 + ldr r0, [sp, #0xc] @ r0 = sp0C = me + movs r1, #3 + ldrsb r1, [r0, r1] + lsls r0, r1, #3 + adds r2, r2, r0 + mov r8, r3 + adds r3, r1, #0 + cmp r7, #0 + beq _0808890E + ldr r0, [r5] + asrs r0, r0, #8 + cmp r2, r0 + ble _08088916 + b _080889FE +_0808890E: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r2, r0 + bgt _080889FE +_08088916: + mov r2, r8 + asrs r1, r2, #0x10 + lsls r0, r3, #3 + adds r1, r1, r0 + ldr r3, [sp, #0xc] @ r3 = sp0C = me + ldrb r0, [r3, #5] + lsls r0, r0, #3 + adds r1, r1, r0 + cmp r7, #0 + beq _08088934 + ldr r0, [r5] + asrs r0, r0, #8 + cmp r1, r0 + bge _0808893C + b _080889FE +_08088934: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + blt _080889FE +_0808893C: + mov r1, sl @ r1 = sl = i*4 + adds r0, r4, r1 @ r0 = &rope->unk40[i] + ldr r1, [r0] + cmp r7, #0 + beq _0808894E + ldr r0, [r5] + adds r0, r0, r1 + str r0, [r5] + b _08088954 +_0808894E: + ldr r0, [r6] + adds r0, r0, r1 + str r0, [r6] +_08088954: + cmp r7, #0 + beq _08088964 + ldrh r0, [r5, #0x38] + movs r1, #0x10 + ands r0, r1 + cmp r0, #0 + bne _0808896E + b _08088978 +_08088964: + ldrh r0, [r6, #0x38] + movs r1, #0x10 + ands r0, r1 + cmp r0, #0 + beq _08088978 +_0808896E: + mov r2, sl @ r2 = sl = i*4 + adds r1, r4, r2 @ r1 = &rope->unk40[i] + ldr r0, [r1] + adds r0, #0x10 + b _0808899E +_08088978: + cmp r7, #0 + beq _08088988 + ldrh r0, [r5, #0x38] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + bne _08088992 + b _080889A0 +_08088988: + ldrh r0, [r6, #0x38] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + beq _080889A0 +_08088992: + mov r3, sl @ r3 = sl = i*4 + adds r1, r4, r3 @ r1 = &rope->unk40[i] + ldr r0, [r1] + cmp r0, #0xe8 + ble _080889A0 + subs r0, #0x10 +_0808899E: + str r0, [r1] +_080889A0: + cmp r7, #0 + beq _080889A8 + ldr r0, [r5] + b _080889AA +_080889A8: + ldr r0, [r6] +_080889AA: + asrs r0, r0, #8 + adds r3, r0, #0 + subs r3, #8 + cmp r7, #0 + beq _080889B8 + ldr r0, [r5, #4] + b _080889BA +_080889B8: + ldr r0, [r6, #4] +_080889BA: + asrs r1, r0, #8 + cmp r7, #0 + beq _080889C8 + ldr r0, _080889C4 @ =gPartner + 0x27 + b _080889CA + .align 2, 0 +_080889C4: .4byte gPartner + 0x27 +_080889C8: + ldr r0, _080889F0 @ =gPlayer + 0x27 +_080889CA: + ldrb r2, [r0] + ldr r0, _080889F4 @ =sa2__sub_801EB44 + str r0, [sp] + adds r0, r3, #0 + movs r3, #8 + rsbs r3, r3, #0 + bl sa2__sub_801F100 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bge _080889FE + lsls r1, r0, #8 + cmp r7, #0 + beq _080889F8 + ldr r0, [r5] + subs r0, r0, r1 + str r0, [r5] + b _080889FE + .align 2, 0 +_080889F0: .4byte gPlayer + 0x27 +_080889F4: .4byte sa2__sub_801EB44 +_080889F8: + ldr r0, [r6] + subs r0, r0, r1 + str r0, [r6] +_080889FE: + cmp r7, #0 + beq _08088A08 + movs r1, #0 + strh r1, [r5, #0xa] + b _08088A0A +_08088A08: + strh r7, [r6, #0xa] +_08088A0A: + ldr r0, _08088A1C @ =gPlayerControls + ldrh r1, [r0] + cmp r7, #0 + beq _08088A20 + ldrh r0, [r5, #0x3a] + ands r0, r1 + cmp r0, #0 + bne _08088A2A + b _08088CD6 + .align 2, 0 +_08088A1C: .4byte gPlayerControls +_08088A20: + ldrh r0, [r6, #0x3a] + ands r0, r1 + cmp r0, #0 + bne _08088A2A + b _08088CD6 +_08088A2A: + mov r2, sl @ r2 = sl = i*4 + adds r0, r4, r2 @ r0 = &rope->unk40[i] + ldr r0, [r0] + cmp r0, #0 + bge _08088A5A + mov r3, r8 + asrs r1, r3, #0x10 + ldr r2, [sp, #0xc] @ r2 = sp0C = me + movs r0, #3 + ldrsb r0, [r2, r0] + lsls r0, r0, #3 + adds r1, r1, r0 + adds r1, #2 + lsls r1, r1, #8 + cmp r7, #0 + beq _08088A4E + str r1, [r5] + b _08088A50 +_08088A4E: + str r1, [r6] +_08088A50: + mov r3, sl @ r3 = sl = i*4 + adds r0, r4, r3 @ r0 = &rope->unk40[i] + movs r1, #0 + str r1, [r0] + b _08088FC6 +_08088A5A: + ldr r0, _08088A74 @ =gPlayer + cmp r7, #0 + beq _08088A62 + ldr r0, _08088A78 @ =gPartner +_08088A62: + bl Player_TransitionCancelFlyingAndBoost + cmp r7, #0 + beq _08088A80 + ldr r0, [r5, #0x10] + ldr r1, _08088A7C @ =0xFFDFFFFF + ands r0, r1 + str r0, [r5, #0x10] + b _08088A88 + .align 2, 0 +_08088A74: .4byte gPlayer +_08088A78: .4byte gPartner +_08088A7C: .4byte 0xFFDFFFFF +_08088A80: + ldr r0, [r6, #0x10] + ldr r1, _08088A9C @ =0xFFDFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08088A88: + ldr r0, _08088AA0 @ =gPlayerControls + ldrh r1, [r0] + ldrh r0, [r0, #2] + orrs r1, r0 + cmp r7, #0 + beq _08088AA4 + ldrh r0, [r5, #0x38] + orrs r1, r0 + strh r1, [r5, #0x38] + b _08088AAA + .align 2, 0 +_08088A9C: .4byte 0xFFDFFFFF +_08088AA0: .4byte gPlayerControls +_08088AA4: + ldrh r0, [r6, #0x38] + orrs r1, r0 + strh r1, [r6, #0x38] +_08088AAA: + cmp r7, #0 + beq _08088ABC + ldr r0, [r5, #0x10] + ldr r1, _08088AB8 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] + b _08088AC4 + .align 2, 0 +_08088AB8: .4byte 0xFFBFFFFF +_08088ABC: + ldr r0, [r6, #0x10] + ldr r1, _08088AD4 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08088AC4: + cmp r7, #0 + beq _08088AD8 + ldr r0, [r5, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r5, #0x10] + b _08088AE0 + .align 2, 0 +_08088AD4: .4byte 0xFFBFFFFF +_08088AD8: + ldr r0, [r6, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r6, #0x10] +_08088AE0: + cmp r7, #0 + beq _08088AEE + ldr r0, [r5, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r5, #0x10] + b _08088AF6 +_08088AEE: + ldr r0, [r6, #0x10] + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] +_08088AF6: + cmp r7, #0 + beq _08088B06 + ldr r0, [r5, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _08088B10 +_08088B06: + ldr r0, [r6, #0x10] + movs r1, #0x11 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08088B10: + cmp r7, #0 + beq _08088B24 + ldr r0, [r5, #0x10] + ldr r1, _08088B20 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] + b _08088B2C + .align 2, 0 +_08088B20: .4byte 0xFFFFFEFF +_08088B24: + ldr r0, [r6, #0x10] + ldr r1, _08088B3C @ =0xFFFFFEFF + ands r0, r1 + str r0, [r6, #0x10] +_08088B2C: + cmp r7, #0 + beq _08088B44 + ldr r2, _08088B40 @ =gPartner + 0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + b _08088B4E + .align 2, 0 +_08088B3C: .4byte 0xFFFFFEFF +_08088B40: .4byte gPartner + 0x26 +_08088B44: + ldr r3, _08088B60 @ =gPlayer + 0x26 + ldrb r1, [r3] + movs r0, #0x7f + ands r0, r1 + strb r0, [r3] +_08088B4E: + cmp r7, #0 + beq _08088B64 + ldrh r0, [r5, #0x38] + movs r1, #0xc0 + ands r0, r1 + cmp r0, #0 + bne _08088B6E + b _08088BC4 + .align 2, 0 +_08088B60: .4byte gPlayer + 0x26 +_08088B64: + ldrh r0, [r6, #0x38] + movs r1, #0xc0 + ands r0, r1 + cmp r0, #0 + beq _08088BC4 +_08088B6E: + cmp r7, #0 + beq _08088B84 + ldrh r1, [r5, #0x38] + movs r0, #0x40 + ands r1, r0 + ldr r3, _08088B80 @ =gPlayer + cmp r1, #0 + bne _08088B90 + b _08088BB0 + .align 2, 0 +_08088B80: .4byte gPlayer +_08088B84: + ldrh r1, [r6, #0x38] + movs r0, #0x40 + ands r1, r0 + ldr r3, _08088B9C @ =gPlayer + cmp r1, #0 + beq _08088BB0 +_08088B90: + cmp r7, #0 + beq _08088BA4 + ldr r0, _08088BA0 @ =0x0000F940 + strh r0, [r5, #0xa] + b _08088BFE + .align 2, 0 +_08088B9C: .4byte gPlayer +_08088BA0: .4byte 0x0000F940 +_08088BA4: + ldr r0, _08088BAC @ =0x0000F940 + strh r0, [r3, #0xa] + b _08088BFE + .align 2, 0 +_08088BAC: .4byte 0x0000F940 +_08088BB0: + cmp r7, #0 + beq _08088BBC + movs r0, #0xd8 + lsls r0, r0, #3 + strh r0, [r5, #0xa] + b _08088BFE +_08088BBC: + movs r0, #0xd8 + lsls r0, r0, #3 + strh r0, [r3, #0xa] + b _08088BFE +_08088BC4: + mov r0, sb @ r0 = sb = rope + adds r0, #0x50 + add r0, sl @ r0 += sl = i*4 + ldr r0, [r0] + movs r1, #0xf + bl Div + cmp r0, #0 + beq _08088BE8 + cmp r7, #0 + beq _08088BE2 + movs r0, #0xd8 + lsls r0, r0, #3 + strh r0, [r5, #0xa] + b _08088BFC +_08088BE2: + movs r0, #0xd8 + lsls r0, r0, #3 + b _08088BFA +_08088BE8: + cmp r7, #0 + beq _08088BF8 + ldr r0, _08088BF4 @ =0x0000F940 + strh r0, [r5, #0xa] + b _08088BFC + .align 2, 0 +_08088BF4: .4byte 0x0000F940 +_08088BF8: + ldr r0, _08088C08 @ =0x0000F940 +_08088BFA: + strh r0, [r6, #0xa] +_08088BFC: + ldr r3, _08088C0C @ =gPlayer +_08088BFE: + cmp r7, #0 + beq _08088C14 + movs r0, #5 + ldr r1, _08088C10 @ =gPartner + 0x40 + b _08088C1A + .align 2, 0 +_08088C08: .4byte 0x0000F940 +_08088C0C: .4byte gPlayer +_08088C10: .4byte gPartner + 0x40 +_08088C14: + adds r1, r3, #0 + adds r1, #0x40 + movs r0, #5 +_08088C1A: + strb r0, [r1] + ldr r0, _08088C58 @ =gPlayer + cmp r7, #0 + beq _08088C24 + ldr r0, _08088C5C @ =gPartner +_08088C24: + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + ldr r1, _08088C58 @ =gPlayer + cmp r7, #0 + beq _08088C32 + ldr r1, _08088C5C @ =gPartner +_08088C32: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r3, _08088C58 @ =gPlayer + adds r1, r3, #0 + cmp r7, #0 + beq _08088C40 + ldr r1, _08088C5C @ =gPartner +_08088C40: + movs r0, #9 + strb r0, [r1, #0xf] + ldr r2, [sp, #0x10] @ r2 = sp10 = worldY << 16 + asrs r0, r2, #8 + movs r1, #0x90 + lsls r1, r1, #4 + adds r0, r0, r1 + cmp r7, #0 + beq _08088C60 + str r0, [r5, #4] + b _08088C62 + .align 2, 0 +_08088C58: .4byte gPlayer +_08088C5C: .4byte gPartner +_08088C60: + str r0, [r3, #4] +_08088C62: + cmp r7, #0 + beq _08088C6C + movs r2, #0 + strh r2, [r5, #0xc] + b _08088C6E +_08088C6C: + strh r7, [r3, #0xc] +_08088C6E: + cmp r7, #0 + beq _08088C78 + movs r3, #0 + strh r3, [r5, #8] + b _08088C7A +_08088C78: + strh r7, [r3, #8] +_08088C7A: + movs r1, #1 + lsls r1, r7 + ldr r2, [sp, #0x14] @ r2 = sp14 = rope->unk3C + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] + mov r0, sb @ r0 = sb = rope + adds r0, #0x50 + add r0, sl @ r0 += sl = i*4 + movs r3, #0 + str r3, [r0] + mov r0, sb @ r0 = sb = rope + adds r0, #0x3d + adds r0, r0, r7 + movs r1, #0x14 + strb r1, [r0] + ldr r3, _08088CEC @ =gPlayer + 0x64 + adds r0, r3, #0 + cmp r7, #0 + beq _08088CA4 + ldr r0, _08088CF0 @ =gPartner + 0x64 +_08088CA4: + ldr r2, [r0] + adds r0, r3, #0 + cmp r7, #0 + beq _08088CAE + ldr r0, _08088CF0 @ =gPartner + 0x64 +_08088CAE: + ldr r0, [r0] + ldr r0, [r0, #0x1c] + ldr r1, _08088CF4 @ =0xFFFFCFFF + ands r0, r1 + str r0, [r2, #0x1c] + adds r0, r3, #0 + cmp r7, #0 + beq _08088CC0 + ldr r0, _08088CF0 @ =gPartner + 0x64 +_08088CC0: + ldr r2, [r0] + adds r0, r3, #0 + cmp r7, #0 + beq _08088CCA + ldr r0, _08088CF0 @ =gPartner + 0x64 +_08088CCA: + ldr r0, [r0] + ldr r0, [r0, #0x1c] + movs r1, #0x80 + lsls r1, r1, #6 + orrs r0, r1 + str r0, [r2, #0x1c] +_08088CD6: + mov r4, sb @ r4 = sb = rope + adds r4, #0x50 + add r4, sl @ r4 += sl = i*4 + ldr r0, [r4] + adds r0, #1 + str r0, [r4] + movs r1, #0x1e + bl Mod + str r0, [r4] + b _08088F54_continue + .align 2, 0 +_08088CEC: .4byte gPlayer + 0x64 +_08088CF0: .4byte gPartner + 0x64 +_08088CF4: .4byte 0xFFFFCFFF +_08088CF8: + mov r0, sb @ r0 = sb = rope + adds r0, #0x3d + adds r1, r0, r7 + ldrb r0, [r1] + cmp r0, #0 + beq _08088D0A + subs r0, #1 + strb r0, [r1] + b _08088F54_continue +_08088D0A: + ldr r0, [sp, #4] @ r0 = sp04 = worldX + lsls r3, r0, #0x10 + asrs r2, r3, #0x10 @ r2 = worldX + ldr r0, [sp, #0xc] @ r0 = sp0C = me + movs r1, #3 + ldrsb r1, [r0, r1] + lsls r0, r1, #3 + adds r2, r2, r0 + mov r8, r3 @ r8 = r3 = worldX << 16 + adds r3, r1, #0 + cmp r7, #0 + beq _08088D2C + ldr r0, [r5] + asrs r0, r0, #8 + cmp r2, r0 + ble _08088D36 + b _08088F54_continue +_08088D2C: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r2, r0 + ble _08088D36 + b _08088F54_continue +_08088D36: + mov r2, r8 @ r2 = r8 = worldX << 16 + asrs r1, r2, #0x10 + lsls r0, r3, #3 + adds r1, r1, r0 + ldr r3, [sp, #0xc] @ r3 = sp0C = me + ldrb r0, [r3, #5] + lsls r0, r0, #3 + adds r1, r1, r0 + cmp r7, #0 + beq _08088D54 + ldr r0, [r5] + asrs r0, r0, #8 + cmp r1, r0 + bge _08088D5E + b _08088F54_continue +_08088D54: + ldr r0, [r6] + asrs r0, r0, #8 + cmp r1, r0 + bge _08088D5E + b _08088F54_continue +_08088D5E: + ldr r0, [sp, #8] @ r0 = sp08 = worldY + lsls r3, r0, #0x10 + asrs r2, r3, #0x10 + ldr r0, [sp, #0xc] @ r0 = sp0C = me + movs r1, #4 + ldrsb r1, [r0, r1] + lsls r0, r1, #3 + adds r2, r2, r0 + str r3, [sp, #0x10] @ sp10 = worldY << 16 + adds r3, r1, #0 + cmp r7, #0 + beq _08088D80 + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08088D8A + b _08088F54_continue +_08088D80: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r2, r0 + ble _08088D8A + b _08088F54_continue +_08088D8A: + ldr r2, [sp, #0x10] @ r2 = sp10 = worldY << 16 + asrs r1, r2, #0x10 + lsls r0, r3, #3 + adds r1, r1, r0 + ldr r3, [sp, #0xc] @ r3 = sp0C = me + ldrb r0, [r3, #6] + lsls r0, r0, #3 + adds r1, r1, r0 + cmp r7, #0 + beq _08088DA8 + ldr r0, [r5, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08088DB2 + b _08088F54_continue +_08088DA8: + ldr r0, [r6, #4] + asrs r0, r0, #8 + cmp r1, r0 + bge _08088DB2 + b _08088F54_continue +_08088DB2: + mov r0, sb @ r0 = sb = rope + adds r0, #0x40 + mov r2, sl @ r2 = sl = i*4 + adds r1, r0, r2 @ r1 = &rope->unk40[i] + adds r4, r0, #0 @ r4 = rope->unk40 + cmp r7, #0 + beq _08088DC6 + movs r3, #0xc + ldrsh r0, [r5, r3] + b _08088DCA +_08088DC6: + movs r2, #0xc + ldrsh r0, [r6, r2] +_08088DCA: + asrs r0, r0, #1 + str r0, [r1] + ldr r3, _08088DF0 @ r3 = gPlayer + mov r0, sl @ r0 = sl = i*4 + adds r1, r4, r0 + ldr r0, [r1] + cmp r0, #0 + bge _08088DDE + movs r2, #0 + str r2, [r1] +_08088DDE: + mov r0, r8 @ r0 = r8 = worldX << 16 + asrs r1, r0, #8 @ r1 = Q(worldX) + cmp r7, #0 + beq _08088DF4 + ldr r0, [r5] + cmp r0, r1 + bgt _08088DFA + b _08088E16 + .align 2, 0 +_08088DF0: .4byte gPlayer +_08088DF4: + ldr r0, [r3] + cmp r0, r1 + ble _08088E16 +_08088DFA: + mov r0, sb @ r0 = sb = rope + adds r0, #0x48 + mov r1, sl @ r1 = sl = i*4 + adds r2, r0, r1 @ r2 = &rope->unk48[i] + mov r0, r8 + asrs r1, r0, #8 + cmp r7, #0 + beq _08088E10 + ldr r0, [r5] + subs r0, r0, r1 + b _08088E2E +_08088E10: + ldr r0, [r3] + subs r0, r0, r1 + b _08088E2E +_08088E16: + mov r0, sb @ r0 = sb = rope + adds r0, #0x48 + mov r1, sl @ r1 = sl = i*4 + adds r2, r0, r1 + mov r0, r8 + asrs r1, r0, #8 + cmp r7, #0 + beq _08088E2A + ldr r0, [r5] + b _08088E2C +_08088E2A: + ldr r0, [r3] +_08088E2C: + subs r0, r1, r0 +_08088E2E: + str r0, [r2] + ldr r0, _08088E4C @ =gPlayer + cmp r7, #0 + beq _08088E38 + ldr r0, _08088E50 @ =gPartner +_08088E38: + bl Player_TransitionCancelFlyingAndBoost + cmp r7, #0 + beq _08088E54 + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r5, #0x10] + b _08088E5E + .align 2, 0 +_08088E4C: .4byte gPlayer +_08088E50: .4byte gPartner +_08088E54: + ldr r0, [r6, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r6, #0x10] +_08088E5E: + ldr r3, _08088E70 @ =gPlayer + cmp r7, #0 + beq _08088E74 + ldr r0, [r5, #0x10] + movs r1, #3 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + b _08088E7E + .align 2, 0 +_08088E70: .4byte gPlayer +_08088E74: + ldr r0, [r6, #0x10] + movs r1, #3 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x10] +_08088E7E: + cmp r7, #0 + beq _08088E90 + ldr r0, [r5, #0x10] + ldr r1, _08088E8C @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] + b _08088E98 + .align 2, 0 +_08088E8C: .4byte 0xFFFFFEFF +_08088E90: + ldr r0, [r6, #0x10] + ldr r1, _08088EB0 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r6, #0x10] +_08088E98: + movs r0, #1 + lsls r0, r7 + ldr r2, [sp, #0x14] @ r2 = sp14 = rope->unk3C + ldrb r1, [r2] + orrs r0, r1 + strb r0, [r2] + cmp r7, #0 + beq _08088EB8 + movs r0, #0x22 + ldr r3, _08088EB4 @ =gPartner + 0x40 + strb r0, [r3] + b _08088EC0 + .align 2, 0 +_08088EB0: .4byte 0xFFFFFEFF +_08088EB4: .4byte gPartner + 0x40 +_08088EB8: + adds r1, r3, #0 + adds r1, #0x40 + movs r0, #0x22 + strb r0, [r1] +_08088EC0: + ldr r0, _08088F00 @ =gPlayer + cmp r7, #0 + beq _08088EC8 + ldr r0, _08088F04 @ =gPartner +_08088EC8: + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + ldr r1, _08088F00 @ =gPlayer + cmp r7, #0 + beq _08088ED6 + ldr r1, _08088F04 @ =gPartner +_08088ED6: + movs r0, #6 + strb r0, [r1, #0xe] + ldr r1, _08088F00 @ =gPlayer + cmp r7, #0 + beq _08088EE2 + ldr r1, _08088F04 @ =gPartner +_08088EE2: + movs r0, #0xe + strb r0, [r1, #0xf] + mov r0, sb @ r0 = sb = rope + adds r0, #0x50 + add r0, sl @ r0 += sl = i*4 + movs r1, #0 + str r1, [r0] + cmp r7, #0 + beq _08088F0C + ldr r2, _08088F08 @ =gPartner + 0x26 + ldrb r0, [r2] + movs r1, #0x80 + orrs r0, r1 + b _08088F52 + .align 2, 0 +_08088F00: .4byte gPlayer +_08088F04: .4byte gPartner +_08088F08: .4byte gPartner + 0x26 +_08088F0C: + ldr r3, _08088F18 @ =gPlayer + 0x26 + ldrb r0, [r3] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r3] + b _08088F54_continue + .align 2, 0 +_08088F18: .4byte gPlayer + 0x26 +_08088F1C_p_is_dead: + mov r2, sb @ r2 = sb = rope + adds r2, #0x3c + ldrb r1, [r2] + asrs r1, r7 + movs r0, #1 + ands r1, r0 + str r2, [sp, #0x14] @ sp14 = rope->unk3C + cmp r1, #0 + beq _08088F54_continue + cmp r7, #0 + beq _08088F40 + ldr r0, [r5, #0x10] + ldr r1, _08088F3C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r5, #0x10] + b _08088F48 + .align 2, 0 +_08088F3C: .4byte 0xFFBFFFFF +_08088F40: + ldr r0, [r6, #0x10] + ldr r1, _08088FD8 @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] +_08088F48: + movs r1, #1 + lsls r1, r7 + ldr r2, [sp, #0x14] @ r2 = sp14 = rope->unk3C + ldrb r0, [r2] + bics r0, r1 +_08088F52: + strb r0, [r2] +_08088F54_continue: + movs r3, #4 + add sl, r3 @ sl += 4 + adds r7, #1 + ldr r0, _08088FDC @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r7, r0 + bge _08088F68 + b _08088870_loop +_08088F68: + ldr r0, [sp, #0x14] @ r0 = sp14 = rope->unk3C + ldrb r1, [r0] + movs r0, #3 + ands r0, r1 + cmp r0, #0 + bne _08088FC6 + ldr r2, _08088FE0 @ =gCamera + ldrh r0, [r2] + ldr r3, [sp, #4] @ r3 = sp04 = worldX + lsls r1, r3, #0x10 + asrs r1, r1, #0x10 + subs r1, r1, r0 + ldrh r2, [r2, #2] + ldr r3, [sp, #8] + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + subs r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + lsls r1, r1, #0x10 + movs r0, #0x80 + lsls r0, r0, #0x10 + adds r1, r1, r0 + movs r0, #0xf8 + lsls r0, r0, #0x11 + cmp r1, r0 + bhi _08088FB6 + ldr r1, [sp, #8] + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08088FB6 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08088FC6 +_08088FB6: + mov r2, sb @ r2 = sb = rope + ldrb r0, [r2, #8] + ldr r3, [sp, #0xc] @ r3 = sp0C = me + strb r0, [r3] + ldr r0, _08088FE4 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy +_08088FC6: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08088FD8: .4byte 0xFFBFFFFF +_08088FDC: .4byte gNumSingleplayerCharacters +_08088FE0: .4byte gCamera +_08088FE4: .4byte gCurTask + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/toggle_gravity__Task_ToggleGravity.inc b/sa1/asm/non_matching/game/interactables/toggle_gravity__Task_ToggleGravity.inc new file mode 100644 index 0000000000..3246cc338c --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/toggle_gravity__Task_ToggleGravity.inc @@ -0,0 +1,254 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + ldr r2, _0809552C @ =gCurTask + ldr r0, [r2] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r3, r0 @ r4 = ia + ldr r7, [r4] @ r7 = me + ldrb r0, [r4, #8] + lsls r0, r0, #3 + ldrh r1, [r4, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 @ r8 = worldX + ldrb r0, [r7, #1] + lsls r0, r0, #3 + ldrh r1, [r4, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov ip, r0 @ ip = worldY + ldr r1, _08095530 @ =gPlayer + ldr r0, [r1, #0x10] + movs r6, #0x80 + ands r0, r6 + mov sb, r2 + adds r5, r1, #0 @ r5 = r1 = gPlayer + cmp r0, #0 + beq _080954E4 + b _08095616 +_080954E4: + ldr r1, _08095534 @ =0x03000041 + adds r0, r3, r1 + ldrb r2, [r0] + cmp r2, #2 @ if(ia->unk41 > 2) + bls _0809558C + mov r3, r8 @ r3 = r8 = worldX + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + movs r1, #3 + ldrsb r1, [r7, r1] @ r1 = me->d.sData[0] + lsls r1, r1, #3 + adds r3, r0, r1 + ldr r0, [r5] + asrs r1, r0, #8 + cmp r3, r1 + bgt _08095582 @ (left <= I(p->qWorldX)) + ldrb r0, [r7, #5] + lsls r0, r0, #3 + adds r0, r3, r0 + cmp r0, r1 @ ((left + me->d.uData[2] * TILE_WIDTH) >= I(p->qWorldX)) + blt _08095582 + mov r1, ip @ r1 = ip = worldY + lsls r0, r1, #0x10 + asrs r1, r0, #8 + ldr r0, [r4, #0x3c] @ r0 = ia->qWorld + cmp r0, r1 + ble _08095538 + ldr r0, [r5, #4] + cmp r0, r1 + bge _08095582 + cmp r2, #3 + beq _08095546_case_3 + cmp r2, #4 + beq _08095564_case_4 + b _08095578 + .align 2, 0 +_0809552C: .4byte gCurTask +_08095530: .4byte gPlayer +_08095534: .4byte 0x03000041 +_08095538: + cmp r0, r1 + bge _08095582 + ldr r0, [r5, #4] + cmp r0, r1 + ble _08095582 + cmp r2, #3 + bne _08095560 +_08095546_case_3: + ldr r2, _0809555C @ =gStageFlags + ldrh r1, [r2] + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + bne _08095568 + movs r0, #0x80 + orrs r0, r1 + strh r0, [r2] + b _08095582 + .align 2, 0 +_0809555C: .4byte gStageFlags +_08095560: + cmp r2, #4 + bne _08095578 +_08095564_case_4: + ldr r2, _08095570 @ =gStageFlags + ldrh r1, [r2] +_08095568: + ldr r0, _08095574 @ =0x0000FF7F + ands r0, r1 + strh r0, [r2] + b _08095582 + .align 2, 0 +_08095570: .4byte gStageFlags +_08095574: .4byte 0x0000FF7F +_08095578: + ldr r0, _08095588 @ =gStageFlags + ldrh r1, [r0] + movs r2, #0x80 + orrs r1, r2 + strh r1, [r0] +_08095582: + ldr r0, [r5, #4] + b _08095614 + .align 2, 0 +_08095588: .4byte gStageFlags +_0809558C: + mov r3, ip @ r3 = ip = worldY + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + movs r1, #4 + ldrsb r1, [r7, r1] + lsls r1, r1, #3 + adds r3, r0, r1 @ top = worldY + me->d.sData[1] * TILE_WIDTH; + ldr r0, [r5, #4] + asrs r1, r0, #8 + cmp r3, r1 + bgt _08095612 + ldrb r0, [r7, #6] + lsls r0, r0, #3 + adds r0, r3, r0 + cmp r0, r1 + blt _08095612 + mov r1, r8 @ r2 = r8 = worldX + lsls r0, r1, #0x10 + asrs r1, r0, #8 + ldr r0, [r4, #0x3c] + cmp r0, r1 + ble _080955C8 + ldr r0, [r5] + cmp r0, r1 + bge _08095612 + cmp r2, #0 + beq _080955D6_case_0 + cmp r2, #1 + beq _080955F4_case_1 + b _08095608 +_080955C8: + cmp r0, r1 + bge _08095612 + ldr r0, [r5] + cmp r0, r1 + ble _08095612 + cmp r2, #0 + bne _080955F0 +_080955D6_case_0: + ldr r2, _080955EC @ =gStageFlags + ldrh r1, [r2] + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + bne _080955F8 + movs r0, #0x80 + orrs r0, r1 + strh r0, [r2] + b _08095612 + .align 2, 0 +_080955EC: .4byte gStageFlags +_080955F0: + cmp r2, #1 + bne _08095608 +_080955F4_case_1: + ldr r2, _08095600 @ =gStageFlags + ldrh r1, [r2] +_080955F8: + ldr r0, _08095604 @ =0x0000FF7F + ands r0, r1 + strh r0, [r2] + b _08095612 + .align 2, 0 +_08095600: .4byte gStageFlags +_08095604: .4byte 0x0000FF7F +_08095608: + ldr r0, _08095670 @ =gStageFlags + ldrh r1, [r0] + movs r2, #0x80 + orrs r1, r2 + strh r1, [r0] +_08095612: + ldr r0, [r5] +_08095614: + str r0, [r4, #0x3c] +_08095616: + ldr r2, _08095674 @ =gCamera + ldrh r0, [r2] + mov r3, r8 @ r3 = r8 = worldX + lsls r1, r3, #0x10 + asrs r1, r1, #0x10 + subs r1, r1, r0 @ r1 = screenX + ldrh r2, [r2, #2] + mov r3, ip @ r3 = ip = worldY + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + subs r0, r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov ip, r0 @ ip = screenY + lsls r1, r1, #0x10 + movs r0, #0x80 + lsls r0, r0, #0x10 + adds r1, r1, r0 + movs r0, #0xf8 + lsls r0, r0, #0x11 + cmp r1, r0 + bhi _08095658 + mov r1, ip + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + adds r0, r1, #0 + adds r0, #0x80 + cmp r0, #0 + blt _08095658 + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _08095664 +_08095658: + ldrb r0, [r4, #8] + strb r0, [r7] + mov r3, sb + ldr r0, [r3] + bl TaskDestroy +_08095664: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08095670: .4byte gStageFlags +_08095674: .4byte gCamera + +.syntax divided diff --git a/sa1/asm/non_matching/game/interactables/water_bridge__Task_WaterBridge.inc b/sa1/asm/non_matching/game/interactables/water_bridge__Task_WaterBridge.inc new file mode 100644 index 0000000000..c470745531 --- /dev/null +++ b/sa1/asm/non_matching/game/interactables/water_bridge__Task_WaterBridge.inc @@ -0,0 +1,305 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _0804DBFC @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 @ r6 = bridge + movs r0, #0 + mov sl, r0 @ sl = i = 0 +_0804DB92_loop: + ldr r5, _0804DC00 @ =gPlayer + mov r1, sl + cmp r1, #0 + beq _0804DB9C + ldr r5, _0804DC04 @ =gPartner +_0804DB9C: + ldr r0, [r5] + asrs r0, r0, #8 + mov sb, r0 @ sb = playerWorldX + ldr r0, [r5, #4] + asrs r0, r0, #8 + movs r1, #0xf + ldrsb r1, [r5, r1] + adds r7, r0, r1 @ r7 = playerWorldY + ldr r3, _0804DC08 @ =gCamera + movs r0, #0 + ldrsh r2, [r3, r0] + movs r1, #0xb8 + lsls r1, r1, #1 + adds r0, r2, r1 + ldr r1, [r6, #4] + cmp r1, r0 + bgt _0804DBDE + adds r0, r2, #0 + subs r0, #0x80 + cmp r1, r0 + blt _0804DBDE + movs r0, #2 + ldrsh r2, [r3, r0] + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r2, r1 + ldr r1, [r6, #8] + cmp r1, r0 + bgt _0804DBDE + adds r0, r2, #0 + subs r0, #0x80 + cmp r1, r0 + bge _0804DC10 +_0804DBDE: + ldr r1, [r6] + adds r0, r6, #0 + adds r0, #0x55 + ldrb r0, [r0] + strb r0, [r1] + ldr r0, [r5, #0x10] + ldr r1, _0804DC0C @ =0xFFFF7FFF + ands r0, r1 + str r0, [r5, #0x10] + ldr r0, _0804DBFC @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0804DDA6_return + .align 2, 0 +_0804DBFC: .4byte gCurTask +_0804DC00: .4byte gPlayer +_0804DC04: .4byte gPartner +_0804DC08: .4byte gCamera +_0804DC0C: .4byte 0xFFFF7FFF +_0804DC10: + ldr r2, [r6, #0xc] + cmp r2, sb + ble _0804DC18 + b _0804DD6C +_0804DC18: + ldr r0, [r6, #0x10] + cmp sb, r0 + blt _0804DC20 + b _0804DD6C +_0804DC20: + ldr r0, [r6, #0x14] + cmp r0, r7 + ble _0804DC28 + b _0804DD6C +_0804DC28: + ldr r4, [r6, #0x18] + cmp r7, r4 + ble _0804DC30 + b _0804DD6C +_0804DC30: + ldr r0, [r5, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0804DC3C + b _0804DDA6_return +_0804DC3C: + mov r1, sb @ r1 = sb = playerWorldX + subs r0, r1, r2 + lsls r0, r0, #9 + ldr r1, [r6, #0x1c] + bl __divsi3 + adds r2, r0, #0 @ r2 = theta + cmp r2, #0 + blt _0804DC5C + ldr r1, _0804DC58 @ =0x000001FF + cmp r0, r1 + ble _0804DC5E + adds r0, r1, #0 + b _0804DC5E + .align 2, 0 +_0804DC58: .4byte 0x000001FF +_0804DC5C: + movs r0, #0 +_0804DC5E: + adds r2, r0, #0 @ r2 = theta + ldr r3, _0804DCBC @ =gSineTable + lsls r0, r2, #1 + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + ldr r1, [r6, #0x20] + muls r1, r0, r1 + lsls r0, r4, #8 + subs r0, r0, r1 + asrs r0, r0, #8 @ r0 = x = (Q(bridge->bottom) - ((SIN_24_8(theta) * bridge->height))) >> 8; + cmp r7, r0 + blt _0804DD6C + adds r0, #0x20 + cmp r7, r0 + bgt _0804DD6C + movs r1, #0x80 + lsls r1, r1, #1 + adds r0, r2, r1 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + mov r8, r0 @ r8 = r8 + ldr r0, [r5, #0x10] + movs r4, #0x80 + lsls r4, r4, #8 + ands r0, r4 + cmp r0, #0 + bne _0804DCAA + movs r0, #0xb1 + bl m4aSongNumStartOrChange + ldr r0, [r5, #0x10] + orrs r0, r4 + str r0, [r5, #0x10] +_0804DCAA: + ldr r0, [r5, #0x10] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + beq _0804DCC0 + movs r2, #8 + ldrsh r1, [r5, r2] + b _0804DCC4 + .align 2, 0 +_0804DCBC: .4byte gSineTable +_0804DCC0: + movs r0, #0xc + ldrsh r1, [r5, r0] +_0804DCC4: + adds r1, #0x40 + ldr r0, _0804DD00 @ =0xFFFFF800 + cmp r1, r0 + blt _0804DCD8 + adds r0, r1, #0 + movs r1, #0x80 + lsls r1, r1, #4 + cmp r0, r1 + ble _0804DCD8 + adds r0, r1, #0 +_0804DCD8: + adds r1, r0, #0 + strh r1, [r5, #0xc] + strh r1, [r5, #8] + ldr r0, [r6, #0x20] + rsbs r0, r0, #0 + mov r2, r8 + muls r2, r0, r2 + adds r0, r2, #0 + muls r0, r1, r0 + asrs r0, r0, #0x10 + subs r0, #0x2a + ldr r1, _0804DD00 @ =0xFFFFF800 + cmp r0, r1 + blt _0804DD04 + movs r1, #0x80 + lsls r1, r1, #4 + cmp r0, r1 + ble _0804DD06 + adds r0, r1, #0 + b _0804DD06 + .align 2, 0 +_0804DD00: .4byte 0xFFFFF800 +_0804DD04: + adds r0, r1, #0 +_0804DD06: + strh r0, [r5, #0xa] + adds r0, r5, #0 + bl Player_TransitionCancelFlyingAndBoost + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #0xf + strb r0, [r1] + ldr r0, [r5, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + adds r0, r5, #0 + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #9 + strb r0, [r5, #0xf] + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r5, #0x10] + movs r0, #0 + strh r0, [r5, #0x3a] + strh r0, [r5, #0x38] + adds r4, r6, #0 @ r4 = r6 = bridge + adds r4, #0x24 + ldr r1, _0804DD68 @ =gCamera + ldrh r0, [r1] + mov r2, sb + subs r0, r2, r0 + strh r0, [r4, #0x16] + movs r0, #0xe + ldrsb r0, [r5, r0] + subs r0, r7, r0 + ldrh r1, [r1, #2] + subs r0, r0, r1 + strh r0, [r4, #0x18] + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + b _0804DD94_continue + .align 2, 0 +_0804DD68: .4byte gCamera +_0804DD6C: + ldr r1, [r5, #0x10] + movs r0, #0x80 + lsls r0, r0, #0xe + ands r0, r1 + cmp r0, #0 + beq _0804DD8C + ldr r0, _0804DDB4 @ =0xFFDFFFFF + ands r1, r0 + str r1, [r5, #0x10] + ldr r0, _0804DDB8 @ =gPlayerControls + ldrh r1, [r0] + ldrh r0, [r0, #2] + orrs r1, r0 + ldrh r0, [r5, #0x38] + orrs r1, r0 + strh r1, [r5, #0x38] +_0804DD8C: + ldr r0, [r5, #0x10] + ldr r1, _0804DDBC @ =0xFFFF7FFF + ands r0, r1 + str r0, [r5, #0x10] +_0804DD94_continue: + movs r0, #1 + add sl, r0 + ldr r0, _0804DDC0 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp sl, r0 + bge _0804DDA6_return + b _0804DB92_loop +_0804DDA6_return: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0804DDB4: .4byte 0xFFDFFFFF +_0804DDB8: .4byte gPlayerControls +_0804DDBC: .4byte 0xFFFF7FFF +_0804DDC0: .4byte gNumSingleplayerCharacters + +.syntax divided diff --git a/sa1/asm/non_matching/game/intro_anim__Task_80640C8.inc b/sa1/asm/non_matching/game/intro_anim__Task_80640C8.inc new file mode 100644 index 0000000000..06ff23bec7 --- /dev/null +++ b/sa1/asm/non_matching/game/intro_anim__Task_80640C8.inc @@ -0,0 +1,188 @@ + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r0, _08064104 @ =gCurTask + ldr r4, [r0] + ldrh r3, [r4, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r3, r1 + str r0, [sp] + ldr r0, [r0, #0xc] + ldrh r0, [r0, #6] + adds r0, r0, r1 + adds r1, #0x4c + adds r2, r3, r1 + ldrh r1, [r2] + strh r1, [r0, #0x30] + ldr r0, _08064108 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #0xb + ands r0, r1 + cmp r0, #0 + beq _08064110 + ldr r0, _0806410C @ =IntroOpenTitlescreenPlayMusic + str r0, [r4, #8] + b _08064232 + .align 2, 0 +_08064104: .4byte gCurTask +_08064108: .4byte gPressedKeys +_0806410C: .4byte IntroOpenTitlescreenPlayMusic +_08064110: + movs r1, #0 + ldrsh r0, [r2, r1] + mov sb, r2 + cmp r0, #0x97 + ble _080641AC + subs r0, #0x98 + lsls r0, r0, #0xf + lsrs r7, r0, #0x10 + cmp r7, #0x28 + bls _08064126 + movs r7, #0x28 +_08064126: + movs r2, #0 + mov sl, r2 + ldr r0, _08064204 @ =0x0300004C + adds r0, r0, r3 + mov sb, r0 +_08064130: + ldr r0, _08064208 @ =gUnknown_086A5D34 + mov r1, sl + lsls r1, r1, #1 + mov r8, r1 + add r0, r8 + ldrh r6, [r0] + movs r1, #0x1f + ands r1, r6 + movs r2, #0xf8 + lsls r2, r2, #2 + adds r0, r2, #0 + adds r4, r6, #0 + ands r4, r0 + lsrs r4, r4, #5 + movs r3, #0xf8 + lsls r3, r3, #7 + adds r0, r3, #0 + ands r6, r0 + lsrs r6, r6, #0xa + adds r0, r1, #0 + muls r0, r7, r0 + movs r1, #0x28 + bl Div + adds r5, r0, #0 + movs r0, #0x1f + ands r5, r0 + adds r0, r4, #0 + muls r0, r7, r0 + movs r1, #0x28 + bl Div + adds r4, r0, #0 + movs r1, #0x1f + ands r4, r1 + adds r0, r6, #0 + muls r0, r7, r0 + movs r1, #0x28 + bl Div + movs r2, #0x1f + ands r0, r2 + ldr r1, _0806420C @ =gBgPalette + add r8, r1 + lsls r4, r4, #5 + orrs r5, r4 + lsls r0, r0, #0xa + orrs r5, r0 + mov r3, r8 + strh r5, [r3] + ldr r2, _08064210 @ =gFlags + ldr r0, [r2] + movs r1, #1 + orrs r0, r1 + str r0, [r2] + mov r0, sl + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sl, r0 + cmp r0, #0x1f + bls _08064130 +_080641AC: + mov r1, sb + movs r2, #0 + ldrsh r0, [r1, r2] + ldr r2, _08064214 @ =gBgScrollRegs + cmp r0, #0xb5 + ble _080641DA + ldrh r0, [r2, #2] + adds r0, #2 + strh r0, [r2, #2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x64 + ble _080641CA + movs r0, #0x64 + strh r0, [r2, #2] +_080641CA: + ldrh r1, [r2, #2] + movs r3, #2 + ldrsh r0, [r2, r3] + cmp r0, #0x50 + ble _080641DA + adds r0, r1, #0 + subs r0, #0x50 + strh r0, [r2, #0xa] +_080641DA: + ldrh r0, [r2, #6] + adds r0, #0xa + strh r0, [r2, #6] + mov r1, sb + ldrh r0, [r1] + bl sub_8063E8C + mov r2, sb + movs r3, #0 + ldrsh r1, [r2, r3] + ldr r0, _08064218 @ =0x0000013F + cmp r1, r0 + ble _08064224 + movs r0, #0 + strh r0, [r2] + ldr r0, _0806421C @ =gCurTask + ldr r1, [r0] + ldr r0, _08064220 @ =sub_8064244 + str r0, [r1, #8] + b _0806422A + .align 2, 0 +_08064204: .4byte 0x0300004C +_08064208: .4byte gUnknown_086A5D34 +_0806420C: .4byte gBgPalette +_08064210: .4byte gFlags +_08064214: .4byte gBgScrollRegs +_08064218: .4byte 0x0000013F +_0806421C: .4byte gCurTask +_08064220: .4byte sub_8064244 +_08064224: + ldr r0, [sp] + bl sub_805423C +_0806422A: + mov r1, sb + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] +_08064232: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/chao_message__sub_803AB60.inc b/sa1/asm/non_matching/game/multiplayer/chao_message__sub_803AB60.inc new file mode 100644 index 0000000000..00411fcd5d --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/chao_message__sub_803AB60.inc @@ -0,0 +1,1303 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + mov ip, r0 + adds r0, #0x54 + ldrb r0, [r0] + cmp r0, #4 + bhi _0803ABA8 + lsls r0, r0, #2 + ldr r1, _0803AB80 @ =_0803AB84 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0803AB80: .4byte _0803AB84 +_0803AB84: @ jump table + .4byte _0803ABA8 @ case 0 + .4byte _0803ABA8 @ case 1 + .4byte _0803AB98 @ case 2 + .4byte _0803ABA0 @ case 3 + .4byte _0803ABA8 @ case 4 +_0803AB98: + mov r1, ip + adds r1, #0x50 + movs r0, #0x28 + b _0803ABAE +_0803ABA0: + mov r1, ip + adds r1, #0x50 + movs r0, #0x14 + b _0803ABAE +_0803ABA8: + mov r1, ip + adds r1, #0x50 + movs r0, #0 +_0803ABAE: + strh r0, [r1] + mov r0, ip + adds r0, #0x55 + ldrb r0, [r0] + cmp r0, #1 + bne _0803ABBC + b _0803AD28 +_0803ABBC: + cmp r0, #1 + bgt _0803ABC8 + cmp r0, #0 + beq _0803ABD4 + bl _0803B55E +_0803ABC8: + cmp r0, #2 + bne _0803ABD0 + bl _803B534 +_0803ABD0: + bl _0803B55E +_0803ABD4: + movs r0, #0 + str r0, [sp] + movs r1, #0 + str r1, [sp, #4] + movs r4, #0 + mov r0, ip + adds r0, #0x54 + mov r8, r0 + movs r2, #0x44 + add r2, ip + mov sb, r2 + mov r3, ip + adds r3, #0x40 + str r3, [sp, #8] + ldrb r0, [r0] + cmp r4, r0 + bhs _0803ACBE + ldr r1, _0803AC44 @ =gUnknown_030058A8 + mov ip, r1 + movs r2, #1 + add r2, ip + mov sl, r2 + movs r7, #0 + mov r6, sb + adds r5, r3, #0 +_0803AC06: + ldr r3, _0803AC48 @ =gUnknown_03005008 + adds r0, r4, r3 + ldrb r1, [r0] + ldr r0, _0803AC4C @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803ACB0 + cmp r1, #9 + bhi _0803AC58 + lsls r3, r4, #1 + mov r0, ip + adds r0, r3, r0 + str r0, [sp, #0x10] + lsls r1, r1, #4 + ldr r2, _0803AC50 @ =gLoadedSaveGame + adds r1, r1, r2 + movs r2, #0xe3 + lsls r2, r2, #2 + adds r0, r1, r2 + ldrb r0, [r0] + ldr r2, [sp, #0x10] + strb r0, [r2] + mov r0, sl + adds r2, r3, r0 + ldr r0, _0803AC54 @ =0x0000038D + adds r1, r1, r0 + ldrb r0, [r1] + strb r0, [r2] + b _0803AC68 + .align 2, 0 +_0803AC44: .4byte gUnknown_030058A8 +_0803AC48: .4byte gUnknown_03005008 +_0803AC4C: .4byte 0x04000128 +_0803AC50: .4byte gLoadedSaveGame +_0803AC54: .4byte 0x0000038D +_0803AC58: + lsls r0, r4, #1 + mov r2, ip + adds r1, r0, r2 + strb r7, [r1] + mov r3, sl + adds r1, r0, r3 + strb r7, [r1] + adds r3, r0, #0 +_0803AC68: + mov r1, ip + adds r0, r3, r1 + mov r2, sl + adds r1, r3, r2 + ldrb r2, [r0] + ldrb r0, [r1] + cmp r2, r0 + bls _0803AC8E + adds r0, r6, r4 + movs r1, #6 + strb r1, [r0] + adds r0, r5, r4 + strb r1, [r0] + ldr r0, [sp] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp] + b _0803ACB0 +_0803AC8E: + cmp r2, r0 + bhs _0803ACA8 + adds r0, r6, r4 + movs r1, #1 + strb r1, [r0] + adds r0, r5, r4 + strb r1, [r0] + ldr r0, [sp, #4] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #4] + b _0803ACB0 +_0803ACA8: + adds r0, r6, r4 + strb r7, [r0] + adds r0, r5, r4 + strb r7, [r0] +_0803ACB0: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + mov r3, r8 + ldrb r3, [r3] + cmp r4, r3 + blo _0803AC06 +_0803ACBE: + ldr r0, [sp] + ldr r1, [sp, #4] + cmp r0, r1 + bls _0803ACD8 + ldr r2, _0803ACD4 @ =0x04000128 + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + add r0, sb + movs r1, #1 + b _0803ACEC + .align 2, 0 +_0803ACD4: .4byte 0x04000128 +_0803ACD8: + ldr r3, [sp] + ldr r0, [sp, #4] + cmp r3, r0 + bhs _0803AD04 + ldr r2, _0803AD00 @ =0x04000128 + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + add r0, sb + movs r1, #6 +_0803ACEC: + strb r1, [r0] + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r2, [sp, #8] + adds r0, r2, r0 + strb r1, [r0] + bl _0803B55E + .align 2, 0 +_0803AD00: .4byte 0x04000128 +_0803AD04: + ldr r2, _0803AD24 @ =0x04000128 + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + add r0, sb + movs r1, #0 + strb r1, [r0] + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r3, [sp, #8] + adds r0, r3, r0 + strb r1, [r0] + bl _0803B55E + .align 2, 0 +_0803AD24: .4byte 0x04000128 +_0803AD28: + ldr r0, _0803AD78 @ =gUnknown_030058B4 + ldrb r0, [r0] + cmp r0, #2 + beq _0803AD3E + ldr r0, _0803AD7C @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _0803AD3E + cmp r0, #5 + beq _0803AD3E + b _0803AF88 +_0803AD3E: + movs r4, #0 + mov r0, ip + adds r0, #0x54 + mov r8, r0 + adds r0, #2 + str r0, [sp, #0xc] + mov r1, r8 + ldrb r1, [r1] + cmp r4, r1 + blo _0803AD54 + b _0803AF08 +_0803AD54: + ldr r6, _0803AD80 @ =gLoadedSaveGame + ldr r2, _0803AD84 @ =gUnknown_03005008 + mov sl, r2 + ldr r7, _0803AD88 @ =0x0000038E + movs r3, #0x63 + mov sb, r3 +_0803AD60: + ldr r1, _0803AD8C @ =gMultiplayerRanks + adds r0, r4, r1 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #1 + beq _0803AE10 + cmp r1, #1 + bgt _0803AD90 + cmp r1, #0 + beq _0803AD96 + b _0803AE10 + .align 2, 0 +_0803AD78: .4byte gUnknown_030058B4 +_0803AD7C: .4byte gGameMode +_0803AD80: .4byte gLoadedSaveGame +_0803AD84: .4byte gUnknown_03005008 +_0803AD88: .4byte 0x0000038E +_0803AD8C: .4byte gMultiplayerRanks +_0803AD90: + cmp r1, #4 + beq _0803AE84 + b _0803AE10 +_0803AD96: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #2 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r1, [r0] + ldr r1, _0803ADE0 @ =0x04000128 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + bne _0803ADB6 + b _0803AEF8 +_0803ADB6: + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r2, _0803ADE4 @ =gMultiplayerRanks + adds r0, r0, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803ADEC + ldr r3, _0803ADE8 @ =gGameMode + ldrb r0, [r3] + cmp r0, #3 + bne _0803ADD4 + b _0803AEF8 +_0803ADD4: + cmp r0, #5 + bne _0803ADDA + b _0803AEF8 +_0803ADDA: + mov r0, sl + adds r2, r4, r0 + b _0803AED8 + .align 2, 0 +_0803ADE0: .4byte 0x04000128 +_0803ADE4: .4byte gMultiplayerRanks +_0803ADE8: .4byte gGameMode +_0803ADEC: + mov r0, sl + adds r3, r4, r0 + ldrb r1, [r3] + lsls r1, r1, #4 + adds r1, r1, r6 + ldr r2, _0803AE0C @ =0x0000038D + adds r1, r1, r2 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldrb r0, [r3] + lsls r0, r0, #4 + adds r0, r0, r6 + adds r1, r0, r2 + b _0803AEEE + .align 2, 0 +_0803AE0C: .4byte 0x0000038D +_0803AE10: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #3 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r1, [r0] + ldr r1, _0803AE64 @ =0x04000128 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803AEF8 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r3, _0803AE68 @ =gMultiplayerRanks + adds r0, r0, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803AE6C + mov r0, sl + adds r3, r4, r0 + ldrb r1, [r3] + lsls r1, r1, #4 + adds r1, r1, r6 + movs r2, #0xe3 + lsls r2, r2, #2 + adds r1, r1, r2 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldrb r0, [r3] + lsls r0, r0, #4 + adds r0, r0, r6 + adds r1, r0, r2 + b _0803AEEE + .align 2, 0 +_0803AE64: .4byte 0x04000128 +_0803AE68: .4byte gMultiplayerRanks +_0803AE6C: + ldr r3, _0803AE80 @ =gGameMode + ldrb r0, [r3] + cmp r0, #3 + beq _0803AEF8 + cmp r0, #5 + beq _0803AEF8 + mov r0, sl + adds r2, r4, r0 + b _0803AED8 + .align 2, 0 +_0803AE80: .4byte gGameMode +_0803AE84: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r1, [r0] + ldr r5, _0803AF28 @ =0x04000128 + ldr r0, [r5] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803AEF8 + ldr r3, _0803AF2C @ =gGameMode + ldrb r0, [r3] + cmp r0, #3 + beq _0803AEAC + cmp r0, #5 + bne _0803AED4 +_0803AEAC: + ldr r0, _0803AF30 @ =gMultiplayerConnections + ldrb r3, [r0] + movs r2, #0x10 + lsls r2, r4 + ands r2, r3 + adds r0, r4, #4 + asrs r2, r0 + ldr r1, [r5] + lsls r1, r1, #0x1a + lsrs r1, r1, #0x1e + movs r0, #0x10 + lsls r0, r1 + ands r3, r0 + ldr r0, [r5] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, #4 + asrs r3, r0 + cmp r2, r3 + beq _0803AEF8 +_0803AED4: + mov r1, sl + adds r2, r4, r1 +_0803AED8: + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r6 + adds r0, r0, r7 + ldrb r1, [r0] + adds r1, #1 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r6 + adds r1, r0, r7 +_0803AEEE: + ldrb r0, [r1] + cmp r0, #0x63 + bls _0803AEF8 + mov r2, sb + strb r2, [r1] +_0803AEF8: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + mov r3, r8 + ldrb r3, [r3] + cmp r4, r3 + bhs _0803AF08 + b _0803AD60 +_0803AF08: + ldr r1, _0803AF28 @ =0x04000128 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r2, _0803AF34 @ =gMultiplayerRanks + adds r0, r0, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803AF40 + ldr r3, [sp, #0xc] + strb r0, [r3] + ldr r0, _0803AF38 @ =gLoadedSaveGame + ldr r2, _0803AF3C @ =0x00000425 + b _0803B516 + .align 2, 0 +_0803AF28: .4byte 0x04000128 +_0803AF2C: .4byte gGameMode +_0803AF30: .4byte gMultiplayerConnections +_0803AF34: .4byte gMultiplayerRanks +_0803AF38: .4byte gLoadedSaveGame +_0803AF3C: .4byte 0x00000425 +_0803AF40: + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r3, _0803AF64 @ =gMultiplayerRanks + adds r0, r0, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #4 + bne _0803AF70 + movs r0, #2 + ldr r1, [sp, #0xc] + strb r0, [r1] + ldr r2, _0803AF68 @ =gLoadedSaveGame + ldr r3, _0803AF6C @ =0x00000427 + adds r1, r2, r3 + b _0803B518 + .align 2, 0 +_0803AF64: .4byte gMultiplayerRanks +_0803AF68: .4byte gLoadedSaveGame +_0803AF6C: .4byte 0x00000427 +_0803AF70: + movs r0, #1 + ldr r1, [sp, #0xc] + strb r0, [r1] + ldr r2, _0803AF80 @ =gLoadedSaveGame + ldr r3, _0803AF84 @ =0x00000426 + adds r1, r2, r3 + b _0803B518 + .align 2, 0 +_0803AF80: .4byte gLoadedSaveGame +_0803AF84: .4byte 0x00000426 +_0803AF88: + cmp r0, #4 + beq _0803AF8E + b _0803B2C8 +_0803AF8E: + movs r4, #0 + movs r2, #0 + mov r0, ip + adds r0, #0x54 + ldrb r1, [r0] + mov r8, r0 + adds r0, #2 + str r0, [sp, #0xc] + cmp r4, r1 + bhs _0803AFC0 + ldr r3, _0803B028 @ =gMultiplayerRanks +_0803AFA4: + adds r0, r4, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803AFB6 + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 +_0803AFB6: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, r1 + blo _0803AFA4 +_0803AFC0: + cmp r2, #1 + beq _0803AFC6 + b _0803B0E4 +_0803AFC6: + movs r4, #0 + mov r1, r8 + ldrb r1, [r1] + cmp r4, r1 + bhs _0803B098 + ldr r2, _0803B028 @ =gMultiplayerRanks + mov sl, r2 + ldr r3, _0803B02C @ =gLoadedSaveGame + ldr r0, _0803B030 @ =0x0000038D + mov sb, r0 + movs r7, #0xe3 + lsls r7, r7, #2 + ldr r6, _0803B034 @ =gUnknown_03005008 + mov r5, ip + adds r5, #0x44 +_0803AFE4: + mov r1, sl + adds r0, r4, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803B03C + adds r0, r5, r4 + movs r1, #2 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r1, [r0] + ldr r0, _0803B038 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803B08A + adds r2, r4, r6 + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + add r0, sb + ldrb r1, [r0] + adds r1, #1 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + mov r2, sb + adds r1, r0, r2 + b _0803B080 + .align 2, 0 +_0803B028: .4byte gMultiplayerRanks +_0803B02C: .4byte gLoadedSaveGame +_0803B030: .4byte 0x0000038D +_0803B034: .4byte gUnknown_03005008 +_0803B038: .4byte 0x04000128 +_0803B03C: + adds r0, r5, r4 + movs r1, #3 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r1, [r0] + ldr r1, _0803B0BC @ =0x04000128 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803B08A + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + add r0, sl + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803B08A + adds r2, r4, r6 + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + adds r0, r0, r7 + ldrb r1, [r0] + adds r1, #1 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + adds r1, r0, r7 +_0803B080: + ldrb r0, [r1] + cmp r0, #0x63 + bls _0803B08A + movs r0, #0x63 + strb r0, [r1] +_0803B08A: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + mov r0, r8 + ldrb r0, [r0] + cmp r4, r0 + blo _0803AFE4 +_0803B098: + ldr r0, _0803B0BC @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r1, _0803B0C0 @ =gMultiplayerRanks + adds r0, r0, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803B0CC + ldr r2, [sp, #0xc] + strb r0, [r2] + ldr r3, _0803B0C4 @ =gLoadedSaveGame + ldr r0, _0803B0C8 @ =0x00000425 + adds r1, r3, r0 + b _0803B518 + .align 2, 0 +_0803B0BC: .4byte 0x04000128 +_0803B0C0: .4byte gMultiplayerRanks +_0803B0C4: .4byte gLoadedSaveGame +_0803B0C8: .4byte 0x00000425 +_0803B0CC: + movs r0, #1 + ldr r1, [sp, #0xc] + strb r0, [r1] + ldr r2, _0803B0DC @ =gLoadedSaveGame + ldr r3, _0803B0E0 @ =0x00000426 + adds r1, r2, r3 + b _0803B518 + .align 2, 0 +_0803B0DC: .4byte gLoadedSaveGame +_0803B0E0: .4byte 0x00000426 +_0803B0E4: + cmp r2, #0 + bne _0803B168 + movs r4, #0 + mov r0, r8 + ldrb r0, [r0] + cmp r4, r0 + bhs _0803B146 + movs r6, #4 + ldr r5, _0803B154 @ =gLoadedSaveGame + ldr r3, _0803B158 @ =0x0000038E + ldr r7, _0803B15C @ =gUnknown_03005008 +_0803B0FA: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + strb r6, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r6, [r0] + ldr r0, _0803B160 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803B138 + adds r2, r4, r7 + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r5 + adds r0, r0, r3 + ldrb r1, [r0] + adds r1, #1 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r5 + adds r1, r0, r3 + ldrb r0, [r1] + cmp r0, #0x63 + bls _0803B138 + movs r0, #0x63 + strb r0, [r1] +_0803B138: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + mov r1, r8 + ldrb r1, [r1] + cmp r4, r1 + blo _0803B0FA +_0803B146: + movs r0, #2 + ldr r2, [sp, #0xc] + strb r0, [r2] + ldr r3, _0803B154 @ =gLoadedSaveGame + ldr r0, _0803B164 @ =0x00000427 + adds r1, r3, r0 + b _0803B518 + .align 2, 0 +_0803B154: .4byte gLoadedSaveGame +_0803B158: .4byte 0x0000038E +_0803B15C: .4byte gUnknown_03005008 +_0803B160: .4byte 0x04000128 +_0803B164: .4byte 0x00000427 +_0803B168: + movs r4, #0 + mov r1, r8 + ldrb r1, [r1] + cmp r4, r1 + blo _0803B174 + b _0803B27A +_0803B174: + ldr r2, _0803B1E4 @ =gMultiplayerRanks + mov sb, r2 + ldr r3, _0803B1E8 @ =gLoadedSaveGame + ldr r7, _0803B1EC @ =gUnknown_03005008 + ldr r6, _0803B1F0 @ =0x0000038E + movs r5, #0x63 + movs r0, #0xe3 + lsls r0, r0, #2 + mov sl, r0 +_0803B186: + mov r1, sb + adds r0, r4, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803B1FC + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #4 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r1, [r0] + ldr r1, _0803B1F4 @ =0x04000128 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803B26C + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + add r0, sb + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0803B24C + adds r2, r4, r7 + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + ldr r1, _0803B1F8 @ =0x0000038D + adds r0, r0, r1 + ldrb r1, [r0] + adds r1, #1 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + ldr r2, _0803B1F8 @ =0x0000038D + adds r1, r0, r2 + b _0803B264 + .align 2, 0 +_0803B1E4: .4byte gMultiplayerRanks +_0803B1E8: .4byte gLoadedSaveGame +_0803B1EC: .4byte gUnknown_03005008 +_0803B1F0: .4byte 0x0000038E +_0803B1F4: .4byte 0x04000128 +_0803B1F8: .4byte 0x0000038D +_0803B1FC: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #3 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + strb r1, [r0] + ldr r1, _0803B248 @ =0x04000128 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803B26C + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + add r0, sb + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803B24C + adds r2, r4, r7 + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + add r0, sl + ldrb r1, [r0] + adds r1, #1 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + mov r2, sl + adds r1, r0, r2 + b _0803B264 + .align 2, 0 +_0803B248: .4byte 0x04000128 +_0803B24C: + adds r2, r4, r7 + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + adds r0, r0, r6 + ldrb r1, [r0] + adds r1, #1 + strb r1, [r0] + ldrb r0, [r2] + lsls r0, r0, #4 + adds r0, r0, r3 + adds r1, r0, r6 +_0803B264: + ldrb r0, [r1] + cmp r0, #0x63 + bls _0803B26C + strb r5, [r1] +_0803B26C: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + mov r0, r8 + ldrb r0, [r0] + cmp r4, r0 + blo _0803B186 +_0803B27A: + ldr r0, _0803B2A0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r1, _0803B2A4 @ =gMultiplayerRanks + adds r0, r0, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803B2B0 + movs r0, #2 + ldr r2, [sp, #0xc] + strb r0, [r2] + ldr r3, _0803B2A8 @ =gLoadedSaveGame + ldr r0, _0803B2AC @ =0x00000427 + adds r1, r3, r0 + b _0803B518 + .align 2, 0 +_0803B2A0: .4byte 0x04000128 +_0803B2A4: .4byte gMultiplayerRanks +_0803B2A8: .4byte gLoadedSaveGame +_0803B2AC: .4byte 0x00000427 +_0803B2B0: + movs r0, #1 + ldr r1, [sp, #0xc] + strb r0, [r1] + ldr r2, _0803B2C0 @ =gLoadedSaveGame + ldr r3, _0803B2C4 @ =0x00000426 + adds r1, r2, r3 + b _0803B518 + .align 2, 0 +_0803B2C0: .4byte gLoadedSaveGame +_0803B2C4: .4byte 0x00000426 +_0803B2C8: + movs r6, #0 + movs r4, #0 + mov r0, ip + adds r0, #0x54 + ldrb r1, [r0] + mov r8, r0 + adds r0, #2 + str r0, [sp, #0xc] + cmp r4, r1 + bhs _0803B2FA + ldr r2, _0803B32C @ =gMultiplayerRanks +_0803B2DE: + adds r0, r4, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #4 + bne _0803B2F0 + adds r0, r6, #1 + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 +_0803B2F0: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, r1 + blo _0803B2DE +_0803B2FA: + mov r5, r8 + ldrb r0, [r5] + cmp r6, r0 + bne _0803B330 + movs r4, #0 + cmp r4, r6 + blo _0803B30A + b _0803B49E +_0803B30A: + mov r3, ip + adds r3, #0x44 + movs r2, #4 + mov r1, ip + adds r1, #0x40 +_0803B314: + adds r0, r3, r4 + strb r2, [r0] + adds r0, r1, r4 + strb r2, [r0] + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + ldrb r0, [r5] + cmp r4, r0 + blo _0803B314 + b _0803B49E + .align 2, 0 +_0803B32C: .4byte gMultiplayerRanks +_0803B330: + movs r4, #0 + cmp r4, r0 + blo _0803B338 + b _0803B49E +_0803B338: + ldr r1, _0803B350 @ =gMultiplayerRanks + adds r0, r4, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #5 + bhi _0803B3E4 + lsls r0, r0, #2 + ldr r1, _0803B354 @ =_0803B358 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0803B350: .4byte gMultiplayerRanks +_0803B354: .4byte _0803B358 +_0803B358: @ jump table + .4byte _0803B370 @ case 0 + .4byte _0803B384 @ case 1 + .4byte _0803B398 @ case 2 + .4byte _0803B3BE @ case 3 + .4byte _0803B3D2 @ case 4 + .4byte _0803B3D2 @ case 5 +_0803B370: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #7 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + movs r1, #2 + b _0803B3E2 +_0803B384: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #8 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + movs r1, #4 + b _0803B3E2 +_0803B398: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #9 + strb r1, [r0] + mov r2, r8 + ldrb r0, [r2] + cmp r0, #3 + bne _0803B3B4 + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + movs r1, #3 + b _0803B3E2 +_0803B3B4: + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + movs r1, #4 + b _0803B3E2 +_0803B3BE: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #0xa + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 + movs r1, #3 + b _0803B3E2 +_0803B3D2: + mov r0, ip + adds r0, #0x44 + adds r0, r0, r4 + movs r1, #3 + strb r1, [r0] + mov r0, ip + adds r0, #0x40 + adds r0, r0, r4 +_0803B3E2: + strb r1, [r0] +_0803B3E4: + ldr r2, _0803B420 @ =0x04000128 + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r4, r0 + beq _0803B48E + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r3, _0803B424 @ =gMultiplayerRanks + adds r0, r0, r3 + adds r1, r4, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + cmp r0, r1 + bge _0803B430 + ldr r2, _0803B428 @ =gUnknown_03005008 + adds r2, r4, r2 + ldrb r1, [r2] + lsls r1, r1, #4 + ldr r0, _0803B42C @ =gLoadedSaveGame + adds r1, r1, r0 + movs r3, #0xe3 + lsls r3, r3, #2 + b _0803B472 + .align 2, 0 +_0803B420: .4byte 0x04000128 +_0803B424: .4byte gMultiplayerRanks +_0803B428: .4byte gUnknown_03005008 +_0803B42C: .4byte gLoadedSaveGame +_0803B430: + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r2, _0803B454 @ =gMultiplayerRanks + adds r0, r0, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, r1 + bne _0803B464 + ldr r2, _0803B458 @ =gUnknown_03005008 + adds r2, r4, r2 + ldrb r1, [r2] + lsls r1, r1, #4 + ldr r3, _0803B45C @ =gLoadedSaveGame + adds r1, r1, r3 + ldr r3, _0803B460 @ =0x0000038E + b _0803B472 + .align 2, 0 +_0803B454: .4byte gMultiplayerRanks +_0803B458: .4byte gUnknown_03005008 +_0803B45C: .4byte gLoadedSaveGame +_0803B460: .4byte 0x0000038E +_0803B464: + ldr r2, _0803B4C0 @ =gUnknown_03005008 + adds r2, r4, r2 + ldrb r1, [r2] + lsls r1, r1, #4 + ldr r3, _0803B4C4 @ =gLoadedSaveGame + adds r1, r1, r3 + ldr r3, _0803B4C8 @ =0x0000038D +_0803B472: + adds r1, r1, r3 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldrb r0, [r2] + lsls r0, r0, #4 + ldr r1, _0803B4C4 @ =gLoadedSaveGame + adds r0, r0, r1 + adds r1, r0, r3 + ldrb r0, [r1] + cmp r0, #0x63 + bls _0803B48E + movs r0, #0x63 + strb r0, [r1] +_0803B48E: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + mov r2, r8 + ldrb r2, [r2] + cmp r4, r2 + bhs _0803B49E + b _0803B338 +_0803B49E: + ldr r1, _0803B4CC @ =0x04000128 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r3, _0803B4D0 @ =gMultiplayerRanks + adds r0, r0, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0803B4D8 + ldr r1, [sp, #0xc] + strb r0, [r1] + ldr r2, _0803B4C4 @ =gLoadedSaveGame + ldr r3, _0803B4D4 @ =0x00000425 + adds r1, r2, r3 + b _0803B518 + .align 2, 0 +_0803B4C0: .4byte gUnknown_03005008 +_0803B4C4: .4byte gLoadedSaveGame +_0803B4C8: .4byte 0x0000038D +_0803B4CC: .4byte 0x04000128 +_0803B4D0: .4byte gMultiplayerRanks +_0803B4D4: .4byte 0x00000425 +_0803B4D8: + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + ldr r1, _0803B500 @ =gMultiplayerRanks + adds r0, r0, r1 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #4 + bne _0803B4F4 + mov r2, r8 + ldrb r2, [r2] + cmp r6, r2 + beq _0803B50C +_0803B4F4: + movs r0, #1 + ldr r3, [sp, #0xc] + strb r0, [r3] + ldr r0, _0803B504 @ =gLoadedSaveGame + ldr r2, _0803B508 @ =0x00000426 + b _0803B516 + .align 2, 0 +_0803B500: .4byte gMultiplayerRanks +_0803B504: .4byte gLoadedSaveGame +_0803B508: .4byte 0x00000426 +_0803B50C: + movs r0, #2 + ldr r3, [sp, #0xc] + strb r0, [r3] + ldr r0, _0803B52C @ =gLoadedSaveGame + ldr r2, _0803B530 @ =0x00000427 +_0803B516: + adds r1, r0, r2 +_0803B518: + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x63 + bls _0803B55E + movs r0, #0x63 + strb r0, [r1] + b _0803B55E + .align 2, 0 +_0803B52C: .4byte gLoadedSaveGame +_0803B530: .4byte 0x00000427 +_803B534: @ 0x0803B534 + movs r4, #0 + mov r2, ip + adds r2, #0x54 + ldrb r3, [r2] + cmp r4, r3 + bhs _0803B55E + mov r5, ip + adds r5, #0x44 + movs r3, #5 + mov r1, ip + adds r1, #0x40 +_0803B54A: + adds r0, r5, r4 + strb r3, [r0] + adds r0, r1, r4 + strb r3, [r0] + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + ldrb r0, [r2] + cmp r4, r0 + blo _0803B54A +_0803B55E: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/evt_mgr__ReceiveRoomEvent_ReachedStageGoal.inc b/sa1/asm/non_matching/game/multiplayer/evt_mgr__ReceiveRoomEvent_ReachedStageGoal.inc new file mode 100644 index 0000000000..3a1f94cbe5 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/evt_mgr__ReceiveRoomEvent_ReachedStageGoal.inc @@ -0,0 +1,375 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + lsls r1, r1, #0x18 + lsrs r7, r1, #0x18 + movs r0, #0 + mov sb, r0 + movs r1, #0 + str r1, [sp, #4] + mov sl, r1 + movs r2, #0 + str r2, [sp, #8] + ldr r2, _08017F80 @ =gMultiplayerPlayerTasks + lsls r0, r7, #2 + adds r0, r0, r2 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp] + movs r6, #0 + ldr r0, [r2] + cmp r0, #0 + beq _08017FD8 + ldr r0, _08017F84 @ =gGameMode + ldrb r5, [r0] + movs r0, #0x10 + mov ip, r0 + adds r4, r2, #0 + ldr r1, _08017F88 @ =0x04000128 + mov r8, r1 +_08017F56: + ldr r2, [sp, #4] + adds r2, #1 + str r2, [sp, #4] + ldr r0, [r4] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + cmp r5, #3 + beq _08017F8C + cmp r5, #5 + beq _08017F8C + ldr r0, [r1, #0x5c] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08017FCA + add sb, r1 + add sl, r1 + b _08017FCA + .align 2, 0 +_08017F80: .4byte gMultiplayerPlayerTasks +_08017F84: .4byte gGameMode +_08017F88: .4byte 0x04000128 +_08017F8C: + ldr r0, _08017FF8 @ =gMultiplayerConnections + ldrb r3, [r0] + mov r2, ip + lsls r2, r6 + ands r2, r3 + adds r0, r6, #4 + asrs r2, r0 + mov r0, r8 + ldr r1, [r0] + lsls r1, r1, #0x1a + lsrs r1, r1, #0x1e + mov r0, ip + lsls r0, r1 + ands r3, r0 + mov r1, r8 + ldr r0, [r1] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, #4 + asrs r3, r0 + cmp r2, r3 + beq _08017FCA + ldr r2, _08017FFC @ =gMultiplayerRanks + adds r0, r6, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _08017FCA + movs r0, #1 + mov sb, r0 +_08017FCA: + adds r4, #4 + adds r6, #1 + cmp r6, #3 + bhi _08017FD8 + ldr r0, [r4] + cmp r0, #0 + bne _08017F56 +_08017FD8: + ldr r1, _08017FFC @ =gMultiplayerRanks + adds r0, r7, r1 + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08018000 + mov r2, sb + lsls r1, r2, #0x18 + lsrs r1, r1, #0x18 + adds r0, r7, #0 + bl CreateMultiplayerFinishResult + b _08018004 + .align 2, 0 +_08017FF8: .4byte gMultiplayerConnections +_08017FFC: .4byte gMultiplayerRanks +_08018000: + movs r0, #1 + str r0, [sp, #8] +_08018004: + ldr r0, _08018180 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _0801801C + mov r1, sl + adds r1, #1 + str r1, [sp, #0x10] + ldr r2, [sp, #4] + subs r2, #1 + str r2, [sp, #0xc] + cmp r0, #5 + bne _08018106 +_0801801C: + movs r6, #0 + ldr r0, _08018184 @ =gMultiplayerPlayerTasks + ldr r0, [r0] + mov r1, sl + adds r1, #1 + str r1, [sp, #0x10] + ldr r2, [sp, #4] + subs r2, #1 + str r2, [sp, #0xc] + cmp r0, #0 + beq _08018106 + movs r0, #0x10 + mov sl, r0 + mov r8, sl + mov r1, r8 + lsls r1, r7 + mov r8, r1 + ldr r5, _08018188 @ =gPlayer +_08018040: + cmp r6, r7 + beq _080180F4 + ldr r0, _0801818C @ =gMultiplayerRanks + adds r0, r6, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + bne _080180F4 + ldr r0, _08018190 @ =gMultiplayerConnections + ldrb r2, [r0] + mov r0, sl + lsls r0, r6 + ands r0, r2 + adds r1, r6, #4 + asrs r0, r1 + mov r1, r8 + ands r2, r1 + adds r1, r7, #4 + asrs r2, r1 + cmp r0, r2 + bne _080180F4 + lsls r0, r6, #0x18 + lsrs r0, r0, #0x18 + mov r2, sb + lsls r1, r2, #0x18 + lsrs r1, r1, #0x18 + bl CreateMultiplayerFinishResult + ldr r0, _08018194 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r6, r0 + bne _080180F4 + adds r0, r5, #0 + bl Player_TransitionCancelFlyingAndBoost + ldr r0, [r5, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + subs r1, #0x18 + ands r0, r1 + adds r1, #0x1c + ands r0, r1 + subs r1, #0xc + ands r0, r1 + movs r1, #2 + orrs r0, r1 + ldr r1, _08018198 @ =0xFFFFFBFF + ands r0, r1 + ldr r1, _0801819C @ =0xFFFFFEFF + ands r0, r1 + str r0, [r5, #0x10] + adds r4, r5, #0 + adds r4, #0x40 + movs r0, #0xf + strb r0, [r4] + adds r0, r5, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #0xe + strb r0, [r5, #0xf] + adds r0, r5, #0 + adds r0, #0x3d + movs r2, #0 + strb r2, [r0] + adds r0, #1 + strb r2, [r0] + strh r2, [r5, #0xc] + strh r2, [r5, #8] + ldr r1, [r5, #0x10] + movs r0, #0x80 + lsls r0, r0, #0xe + orrs r1, r0 + strh r2, [r5, #0x38] + movs r0, #1 + orrs r1, r0 + movs r0, #0x1d + strb r0, [r4] + movs r0, #0x80 + lsls r0, r0, #0x10 + orrs r1, r0 + str r1, [r5, #0x10] +_080180F4: + adds r6, #1 + cmp r6, #3 + bhi _08018106 + ldr r0, _08018184 @ =gMultiplayerPlayerTasks + lsls r1, r6, #2 + adds r1, r1, r0 + ldr r0, [r1] + cmp r0, #0 + bne _08018040 +_08018106: + ldr r1, [sp] + ldr r0, [r1, #0x5c] + movs r2, #1 + orrs r0, r2 + str r0, [r1, #0x5c] + mov r0, sb + cmp r0, #0 + bne _08018130 + ldr r3, _080181A0 @ =gStageFlags + ldrh r1, [r3] + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _08018130 + movs r0, #4 + orrs r0, r1 + strh r0, [r3] + ldr r1, _080181A4 @ =gCourseTime + movs r0, #0xe1 + lsls r0, r0, #4 + str r0, [r1] +_08018130: + ldr r1, [sp, #0x10] + ldr r2, [sp, #0xc] + cmp r1, r2 + bhs _08018144 + ldr r0, _08018180 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _08018144 + cmp r0, #5 + bne _080181E4 +_08018144: + movs r6, #0 + ldr r0, _08018184 @ =gMultiplayerPlayerTasks + ldr r0, [r0] + cmp r0, #0 + beq _080181DA + movs r0, #1 + rsbs r0, r0, #0 + mov r8, r0 + movs r4, #0 + ldr r5, _08018188 @ =gPlayer +_08018158: + cmp r6, r7 + beq _080181C2 + ldr r0, _0801818C @ =gMultiplayerRanks + adds r0, r6, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, r8 + bne _080181C2 + ldr r0, _08018180 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _08018176 + cmp r0, #5 + bne _080181A8 +_08018176: + lsrs r0, r4, #0x18 + movs r1, #1 + bl CreateMultiplayerFinishResult + b _080181C2 + .align 2, 0 +_08018180: .4byte gGameMode +_08018184: .4byte gMultiplayerPlayerTasks +_08018188: .4byte gPlayer +_0801818C: .4byte gMultiplayerRanks +_08018190: .4byte gMultiplayerConnections +_08018194: .4byte 0x04000128 +_08018198: .4byte 0xFFFFFBFF +_0801819C: .4byte 0xFFFFFEFF +_080181A0: .4byte gStageFlags +_080181A4: .4byte gCourseTime +_080181A8: + lsrs r0, r4, #0x18 + ldr r2, [sp, #0xc] + lsls r1, r2, #0x18 + lsrs r1, r1, #0x18 + bl CreateMultiplayerFinishResult + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xe + orrs r0, r1 + str r0, [r5, #0x10] + movs r0, #0 + strh r0, [r5, #0x38] +_080181C2: + movs r0, #0x80 + lsls r0, r0, #0x11 + adds r4, r4, r0 + adds r6, #1 + cmp r6, #3 + bhi _080181DA + ldr r0, _080181F4 @ =gMultiplayerPlayerTasks + lsls r1, r6, #2 + adds r1, r1, r0 + ldr r0, [r1] + cmp r0, #0 + bne _08018158 +_080181DA: + ldr r1, [sp, #8] + cmp r1, #0 + bne _080181E4 + bl CreateMultiplayerFinishHandler +_080181E4: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080181F4: .4byte gMultiplayerPlayerTasks + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/finish__CreateMultiplayerFinishHandler.inc b/sa1/asm/non_matching/game/multiplayer/finish__CreateMultiplayerFinishHandler.inc new file mode 100644 index 0000000000..655b2df195 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/finish__CreateMultiplayerFinishHandler.inc @@ -0,0 +1,451 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #0xc + ldr r1, _08019E90 @ =gUnknown_080BB490 + add r0, sp, #4 + movs r2, #4 + bl memcpy + add r5, sp, #8 + adds r0, r5, #0 + movs r1, #0 + movs r2, #4 + bl memset + ldr r0, _08019E94 @ =sa2__Task_801A04C + movs r2, #0x80 + lsls r2, r2, #6 + movs r4, #0 + str r4, [sp] + movs r1, #4 + movs r3, #0 + bl TaskCreate + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + strh r4, [r0] + ldr r4, _08019E98 @ =gGameMode + ldrb r0, [r4] + mov sb, r5 + cmp r0, #6 + beq _08019E04 + ldr r0, _08019E9C @ =gMusicManagerState + movs r1, #0xff + strb r1, [r0] + movs r0, #0x98 + lsls r0, r0, #1 @ SE_VS_MULTIPAK_ROUND_OVER + bl m4aSongNumStart +_08019E04: + ldrb r3, [r4] + cmp r3, #4 + bne _08019EF4 + ldr r0, _08019EA0 @ =gMultiplayerCharRings + ldr r0, [r0] + str r0, [sp, #8] + movs r6, #0 + movs r0, #3 + mov ip, r0 +_08019E16: + movs r4, #0 + cmp r4, ip + bhs _08019E64 + mov r7, sb + mov r8, ip +_08019E20: + adds r3, r7, r4 + adds r5, r4, #1 + adds r2, r7, r5 + ldrb r0, [r3] + ldrb r1, [r2] + cmp r0, r1 + bhs _08019E5E + eors r1, r0 + strb r1, [r3] + ldrb r0, [r2] + eors r0, r1 + strb r0, [r2] + ldrb r1, [r3] + eors r0, r1 + strb r0, [r3] + mov r3, sp + adds r3, r3, r4 + adds r3, #4 + mov r2, sp + adds r2, r2, r5 + adds r2, #4 + ldrb r1, [r3] + ldrb r0, [r2] + eors r1, r0 + strb r1, [r3] + ldrb r0, [r2] + eors r0, r1 + strb r0, [r2] + ldrb r1, [r3] + eors r0, r1 + strb r0, [r3] +_08019E5E: + adds r4, r5, #0 + cmp r4, r8 + blo _08019E20 +_08019E64: + movs r1, #1 + rsbs r1, r1, #0 + add ip, r1 + adds r6, #1 + cmp r6, #3 + bls _08019E16 + movs r6, #0 + mov r5, sb + ldr r3, _08019EA4 @ =gMultiplayerRanks + add r2, sp, #4 +_08019E78: + cmp r6, #0 + beq _08019EA8 + adds r0, r5, r6 + ldrb r0, [r0] + ldrb r4, [r5] + cmp r0, r4 + beq _08019EB0 + ldrb r0, [r2] + adds r0, r0, r3 + movs r1, #1 + strb r1, [r0] + b _08019EC2 + .align 2, 0 +_08019E90: .4byte gUnknown_080BB490 +_08019E94: .4byte sa2__Task_801A04C +_08019E98: .4byte gGameMode +_08019E9C: .4byte gMusicManagerState +_08019EA0: .4byte gMultiplayerCharRings +_08019EA4: .4byte gMultiplayerRanks +_08019EA8: + ldrb r1, [r5, #1] + ldrb r0, [r5] + cmp r0, r1 + bne _08019EBA +_08019EB0: + ldrb r0, [r2] + adds r0, r0, r3 + movs r1, #4 + strb r1, [r0] + b _08019EC2 +_08019EBA: + add r0, sp, #4 + ldrb r0, [r0] + adds r0, r0, r3 + strb r6, [r0] +_08019EC2: + adds r2, #1 + adds r6, #1 + cmp r6, #3 + bls _08019E78 + movs r6, #0 + ldr r4, _08019EEC @ =gMultiplayerPlayerTasks +_08019ECE: + ldr r0, [r4] + cmp r0, #0 + beq _08019EE2 + lsls r0, r6, #0x18 + lsrs r0, r0, #0x18 + ldr r1, _08019EF0 @ =gMultiplayerRanks + adds r1, r6, r1 + ldrb r1, [r1] + bl CreateMultiplayerFinishResult +_08019EE2: + adds r4, #4 + adds r6, #1 + cmp r6, #3 + bls _08019ECE + b _0801A0F6 + .align 2, 0 +_08019EEC: .4byte gMultiplayerPlayerTasks +_08019EF0: .4byte gMultiplayerRanks +_08019EF4: + cmp r3, #5 + beq _08019EFA + b _0801A00C +_08019EFA: + movs r6, #0 + ldr r0, _08019F90 @ =gMultiplayerPlayerTasks + ldr r1, [r0] + mov r8, r0 + cmp r1, #0 + beq _08019F36 + mov ip, sb + ldr r0, _08019F94 @ =gMultiplayerConnections + ldrb r3, [r0] + mov r2, r8 + movs r5, #0x10 + ldr r4, _08019F98 @ =gMultiplayerCharRings +_08019F12: + adds r1, r5, #0 + lsls r1, r6 + ands r1, r3 + adds r0, r6, #4 + asrs r1, r0 + add r1, ip + adds r0, r6, r4 + ldrb r0, [r0] + ldrb r7, [r1] + adds r0, r0, r7 + strb r0, [r1] + adds r2, #4 + adds r6, #1 + cmp r6, #3 + bhi _08019F36 + ldr r0, [r2] + cmp r0, #0 + bne _08019F12 +_08019F36: + mov r3, sb + ldrb r1, [r3] + ldrb r2, [r3, #1] + cmp r1, r2 + bhs _08019F6A + eors r1, r2 + adds r0, r1, #0 + eors r0, r2 + strb r0, [r3, #1] + eors r1, r0 + strb r1, [r3] + add r3, sp, #4 + adds r0, r3, #0 + adds r2, r0, #0 + ldrb r1, [r0] + ldrb r0, [r2, #1] + eors r1, r0 + strb r1, [r3] + adds r0, r2, #0 + ldrb r0, [r0, #1] + eors r0, r1 + strb r0, [r2, #1] + adds r1, r2, #0 + ldrb r1, [r1] + eors r0, r1 + strb r0, [r2] +_08019F6A: + mov r0, sb + ldrb r1, [r0, #1] + ldrb r0, [r0] + cmp r0, r1 + bne _08019FA0 + movs r6, #0 + ldr r3, _08019F9C @ =gMultiplayerRanks + movs r2, #4 + ldr r1, _08019F90 @ =gMultiplayerPlayerTasks +_08019F7C: + ldr r0, [r1] + cmp r0, #0 + beq _08019F86 + adds r0, r6, r3 + strb r2, [r0] +_08019F86: + adds r1, #4 + adds r6, #1 + cmp r6, #3 + bls _08019F7C + b _08019FE2 + .align 2, 0 +_08019F90: .4byte gMultiplayerPlayerTasks +_08019F94: .4byte gMultiplayerConnections +_08019F98: .4byte gMultiplayerCharRings +_08019F9C: .4byte gMultiplayerRanks +_08019FA0: + movs r6, #0 + ldr r2, _08019FC8 @ =gMultiplayerRanks + ldr r3, _08019FCC @ =gMultiplayerPlayerTasks + ldr r4, _08019FD0 @ =gMultiplayerConnections +_08019FA8: + ldr r0, [r3] + cmp r0, #0 + beq _08019FD8 + ldrb r1, [r4] + movs r0, #0x10 + lsls r0, r6 + ands r1, r0 + adds r0, r6, #4 + asrs r1, r0 + add r0, sp, #4 + ldrb r0, [r0] + cmp r1, r0 + bne _08019FD4 + movs r0, #0 + b _08019FD6 + .align 2, 0 +_08019FC8: .4byte gMultiplayerRanks +_08019FCC: .4byte gMultiplayerPlayerTasks +_08019FD0: .4byte gMultiplayerConnections +_08019FD4: + movs r0, #1 +_08019FD6: + strb r0, [r2] +_08019FD8: + adds r2, #1 + adds r3, #4 + adds r6, #1 + cmp r6, #3 + bls _08019FA8 +_08019FE2: + movs r6, #0 + ldr r4, _0801A004 @ =gMultiplayerPlayerTasks +_08019FE6: + ldr r0, [r4] + cmp r0, #0 + beq _08019FFA + lsls r0, r6, #0x18 + lsrs r0, r0, #0x18 + ldr r1, _0801A008 @ =gMultiplayerRanks + adds r1, r6, r1 + ldrb r1, [r1] + bl CreateMultiplayerFinishResult +_08019FFA: + adds r4, #4 + adds r6, #1 + cmp r6, #3 + bls _08019FE6 + b _0801A0F6 + .align 2, 0 +_0801A004: .4byte gMultiplayerPlayerTasks +_0801A008: .4byte gMultiplayerRanks +_0801A00C: + cmp r3, #6 + beq _0801A0F6 + ldr r1, _0801A080 @ =gLoadedSaveGame + movs r2, #0x85 + lsls r2, r2, #3 + adds r1, r1, r2 + ldr r0, _0801A084 @ =gRingCount + movs r4, #0 + ldrsh r2, [r0, r4] + ldr r0, [r1] + adds r0, r0, r2 + str r0, [r1] + ldr r0, _0801A088 @ =gCourseTime + ldr r2, [r0] + ldr r0, _0801A08C @ =0x00008CA0 + cmp r2, r0 + bhi _0801A03E + ldr r0, _0801A090 @ =gStageFlags + ldrh r1, [r0] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + beq _0801A0F6 + cmp r2, #0 + bne _0801A0F6 +_0801A03E: + movs r2, #0 + cmp r3, #3 + beq _0801A0AC + cmp r3, #5 + beq _0801A0AC + movs r4, #0 + ldr r0, _0801A094 @ =gMultiplayerPlayerTasks + ldr r1, [r0] + mov r8, r0 + cmp r1, #0 + beq _0801A078 + ldr r5, _0801A098 @ =gMultiplayerRanks + movs r3, #1 + rsbs r3, r3, #0 + mov r1, r8 +_0801A05C: + adds r0, r4, r5 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, r3 + beq _0801A06A + adds r2, #1 +_0801A06A: + adds r1, #4 + adds r4, #1 + cmp r4, #3 + bhi _0801A078 + ldr r0, [r1] + cmp r0, #0 + bne _0801A05C +_0801A078: + cmp r2, #0 + bne _0801A09C + movs r5, #4 + b _0801A0B2 + .align 2, 0 +_0801A080: .4byte gLoadedSaveGame +_0801A084: .4byte gRingCount +_0801A088: .4byte gCourseTime +_0801A08C: .4byte 0x00008CA0 +_0801A090: .4byte gStageFlags +_0801A094: .4byte gMultiplayerPlayerTasks +_0801A098: .4byte gMultiplayerRanks +_0801A09C: + subs r0, r4, #1 + cmp r2, r0 + bne _0801A0A8 + lsls r0, r2, #0x18 + lsrs r5, r0, #0x18 + b _0801A0B2 +_0801A0A8: + movs r5, #5 + b _0801A0B2 +_0801A0AC: + movs r5, #4 + ldr r7, _0801A104 @ =gMultiplayerPlayerTasks + mov r8, r7 +_0801A0B2: + movs r4, #0 + mov r1, r8 + ldr r0, [r1] + cmp r0, #0 + beq _0801A0F6 + movs r6, #1 + rsbs r6, r6, #0 +_0801A0C0: + ldr r0, _0801A108 @ =gMultiplayerRanks + adds r0, r4, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, r6 + beq _0801A0DA + ldr r0, _0801A10C @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _0801A0DA + cmp r0, #5 + bne _0801A0E4 +_0801A0DA: + lsls r0, r4, #0x18 + lsrs r0, r0, #0x18 + adds r1, r5, #0 + bl CreateMultiplayerFinishResult +_0801A0E4: + adds r4, #1 + cmp r4, #3 + bhi _0801A0F6 + ldr r0, _0801A104 @ =gMultiplayerPlayerTasks + lsls r1, r4, #2 + adds r1, r1, r0 + ldr r0, [r1] + cmp r0, #0 + bne _0801A0C0 +_0801A0F6: + add sp, #0xc + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0801A104: .4byte gMultiplayerPlayerTasks +_0801A108: .4byte gMultiplayerRanks +_0801A10C: .4byte gGameMode + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/mode_select__Task_800F058.inc b/sa1/asm/non_matching/game/multiplayer/mode_select__Task_800F058.inc new file mode 100644 index 0000000000..32dbd7fd76 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/mode_select__Task_800F058.inc @@ -0,0 +1,337 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + movs r6, #0 + movs r7, #0 + ldr r2, _0800F0B8 @ =gCurTask + ldr r0, [r2] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + mov ip, r1 + ldr r0, _0800F0BC @ =gGameMode + ldrb r1, [r0] + mov sl, r2 + mov sb, r0 + cmp r1, #1 + bls _0800F0E8 + movs r3, #0 + ldr r0, _0800F0C0 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + mov r8, r0 + cmp r1, #0 + beq _0800F0E8 + movs r5, #1 + ldr r2, _0800F0C4 @ =gMultiplayerMissingHeartbeats +_0800F094: + ldr r1, _0800F0C8 @ =gMultiSioStatusFlags + adds r0, r5, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _0800F0D0 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _0800F0D4 + movs r0, #0 + ldr r1, _0800F0CC @ =0x0000FFFF + b _0800F1A2 + .align 2, 0 +_0800F0B8: .4byte gCurTask +_0800F0BC: .4byte gGameMode +_0800F0C0: .4byte gMultiplayerConnections +_0800F0C4: .4byte gMultiplayerMissingHeartbeats +_0800F0C8: .4byte gMultiSioStatusFlags +_0800F0CC: .4byte 0x0000FFFF +_0800F0D0: + movs r0, #0 + strb r0, [r2] +_0800F0D4: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _0800F0E8 + mov r1, r8 + ldrb r0, [r1] + asrs r0, r3 + ands r0, r5 + cmp r0, #0 + bne _0800F094 +_0800F0E8: + ldr r2, _0800F108 @ =gMultiSioRecv + ldrh r0, [r2] + mov r8, r2 + cmp r0, #0x12 + bne _0800F10C + movs r0, #2 + mov r2, sb + strb r0, [r2] + mov r1, sl + ldr r0, [r1] + bl TaskDestroy + movs r0, #0 + bl CreateMultipackOutcomeScreen + b _0800F2FA + .align 2, 0 +_0800F108: .4byte gMultiSioRecv +_0800F10C: + cmp r0, #0x10 + beq _0800F12C + ldr r0, _0800F170 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0800F1DC + ldr r0, _0800F174 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + cmp r4, #0 + beq _0800F18C +_0800F12C: + ldr r1, _0800F178 @ =gMultiSioEnabled + movs r0, #0 + strb r0, [r1] + bl MultiSioStop + movs r0, #0 + bl MultiSioInit + ldr r2, _0800F17C @ =gMultiSioSend + movs r4, #0 + movs r0, #0 + strh r0, [r2] + movs r0, #3 + bl m4aSongNumStop + movs r0, #0x6b + bl m4aSongNumStart + ldr r0, _0800F180 @ =gBgSprites_Unknown1 + strb r4, [r0] + ldr r1, _0800F184 @ =gBgSprites_Unknown2 + strb r4, [r1] + strb r4, [r1, #1] + movs r0, #0xff + strb r0, [r1, #2] + movs r0, #0x20 + strb r0, [r1, #3] + ldr r0, _0800F188 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + bl CreateMultiplayerModeSelectScreen + b _0800F2FA + .align 2, 0 +_0800F170: .4byte gMultiSioStatusFlags +_0800F174: .4byte gPressedKeys +_0800F178: .4byte gMultiSioEnabled +_0800F17C: .4byte gMultiSioSend +_0800F180: .4byte gBgSprites_Unknown1 +_0800F184: .4byte gBgSprites_Unknown2 +_0800F188: .4byte gCurTask +_0800F18C: + ldr r0, _0800F1C0 @ =0x00000219 + add r0, ip + ldrb r1, [r0] + adds r2, r1, #1 + strb r2, [r0] + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + cmp r1, #0x3c + bls _0800F1DC + ldr r1, _0800F1C4 @ =0x0000FFFF + movs r0, #0 +_0800F1A2: + bl TasksDestroyInPriorityRange + ldr r1, _0800F1C8 @ =gBackgroundsCopyQueueCursor + ldr r0, _0800F1CC @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0800F1D0 @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _0800F1D4 @ =gVramGraphicsCopyCursor + ldr r0, _0800F1D8 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _0800F2FA + .align 2, 0 +_0800F1C0: .4byte 0x00000219 +_0800F1C4: .4byte 0x0000FFFF +_0800F1C8: .4byte gBackgroundsCopyQueueCursor +_0800F1CC: .4byte gBackgroundsCopyQueueIndex +_0800F1D0: .4byte gBgSpritesCount +_0800F1D4: .4byte gVramGraphicsCopyCursor +_0800F1D8: .4byte gVramGraphicsCopyQueueIndex +_0800F1DC: + movs r5, #0 + mov r4, ip + adds r4, #0xc0 + ldr r1, _0800F2B0 @ =0x0000020B + add r1, ip + movs r3, #0 +_0800F1E8: + mov r0, r8 + adds r2, r3, r0 + ldrb r0, [r1] + lsls r0, r0, #1 + strb r0, [r1] + ldr r0, _0800F2B4 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r0, r5 + beq _0800F204 + ldrh r0, [r2] + cmp r0, #0x10 + bls _0800F20E +_0800F204: + movs r0, #1 + lsls r0, r5 + orrs r7, r0 + lsls r0, r7, #0x18 + lsrs r7, r0, #0x18 +_0800F20E: + ldrb r0, [r1] + cmp r0, #0 + beq _0800F216 + adds r6, #1 +_0800F216: + adds r1, #1 + adds r3, #0x14 + adds r5, #1 + cmp r5, #3 + ble _0800F1E8 + cmp r6, #0 + bne _0800F226 + movs r6, #1 +_0800F226: + adds r0, r6, #3 + strb r0, [r4] + mov r4, ip + adds r4, #0x40 + movs r5, #2 +_0800F230: + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + adds r4, #0x30 + subs r5, #1 + cmp r5, #0 + bge _0800F230 + ldr r2, _0800F2B8 @ =gMultiSioStatusFlags + ldr r0, [r2] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0800F2DA + ldr r6, _0800F2BC @ =gMultiSioSend + movs r0, #0x12 + strh r0, [r6] + strb r7, [r6, #2] + ldr r0, _0800F2C0 @ =gLoadedSaveGame + ldr r1, [r0, #4] + str r1, [r6, #4] + ldr r1, _0800F2C4 @ =0x040000D4 + adds r0, #0x10 + str r0, [r1] + adds r0, r6, #0 + adds r0, #8 + str r0, [r1, #4] + ldr r0, _0800F2C8 @ =0x84000002 + str r0, [r1, #8] + ldr r0, [r1, #8] + movs r5, #0 + ldr r1, _0800F2CC @ =gMultiplayerConnections + ldrb r7, [r1] + movs r4, #1 + mov ip, r2 + movs r3, #0 + ldr r2, _0800F2D0 @ =gMultiSioRecv + mov r8, r2 +_0800F280: + adds r0, r7, #0 + asrs r0, r5 + ands r0, r4 + cmp r0, #0 + beq _0800F2A6 + cmp r5, #0 + beq _0800F2A6 + adds r1, r4, #0 + lsls r1, r5 + mov r2, ip + ldr r0, [r2] + ands r0, r1 + cmp r0, #0 + beq _0800F2D4 + mov r0, r8 + adds r2, r3, r0 + ldrh r0, [r2] + cmp r0, #0x11 + bne _0800F2D4 +_0800F2A6: + adds r3, #0x14 + adds r5, #1 + cmp r5, #3 + ble _0800F280 + b _0800F2FA + .align 2, 0 +_0800F2B0: .4byte 0x0000020B +_0800F2B4: .4byte 0x04000128 +_0800F2B8: .4byte gMultiSioStatusFlags +_0800F2BC: .4byte gMultiSioSend +_0800F2C0: .4byte gLoadedSaveGame +_0800F2C4: .4byte 0x040000D4 +_0800F2C8: .4byte 0x84000002 +_0800F2CC: .4byte gMultiplayerConnections +_0800F2D0: .4byte gMultiSioRecv +_0800F2D4: + movs r0, #0x11 + strh r0, [r6] + b _0800F2FA +_0800F2DA: + ldr r6, _0800F308 @ =gMultiSioSend + movs r0, #0x11 + strh r0, [r6] + strb r7, [r6, #2] + ldr r0, _0800F30C @ =gLoadedSaveGame + ldr r1, [r0, #4] + str r1, [r6, #4] + ldr r1, _0800F310 @ =0x040000D4 + adds r0, #0x10 + str r0, [r1] + adds r0, r6, #0 + adds r0, #8 + str r0, [r1, #4] + ldr r0, _0800F314 @ =0x84000002 + str r0, [r1, #8] + ldr r0, [r1, #8] +_0800F2FA: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0800F308: .4byte gMultiSioSend +_0800F30C: .4byte gLoadedSaveGame +_0800F310: .4byte 0x040000D4 +_0800F314: .4byte 0x84000002 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/mode_select__Task_SinglePak.inc b/sa1/asm/non_matching/game/multiplayer/mode_select__Task_SinglePak.inc new file mode 100644 index 0000000000..63f725506f --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/mode_select__Task_SinglePak.inc @@ -0,0 +1,443 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #8 + movs r6, #1 + ldr r0, _0800F66C @ =gCurTask + ldr r0, [r0] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r3, r0 + ldr r0, _0800F670 @ =0x03000208 + adds r2, r3, r0 + ldrh r0, [r2] + subs r0, #0x80 + strh r0, [r2] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _0800F61A + movs r0, #0 + strh r0, [r2] +_0800F61A: + ldr r1, _0800F674 @ =gBldRegs + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + strh r0, [r1, #4] + movs r5, #1 + ldr r1, _0800F678 @ =gMultiBootParam + ldrb r0, [r1, #0x1d] + asrs r0, r0, #1 + ands r0, r6 + mov r8, r1 + ldr r1, _0800F67C @ =0x030000C0 + adds r3, r3, r1 + cmp r0, #0 + beq _0800F680 + mov r2, r8 + ldrb r0, [r2, #0x1e] + asrs r0, r0, #1 + ands r0, r6 + cmp r0, #0 + beq _0800F680 + movs r6, #2 +_0800F646: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #3 + bhi _0800F680 + ldrb r0, [r2, #0x1d] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0800F680 + mov r4, r8 + ldrb r0, [r4, #0x1e] + asrs r0, r5 + ands r0, r1 + cmp r0, #0 + beq _0800F680 + adds r6, #1 + b _0800F646 + .align 2, 0 +_0800F66C: .4byte gCurTask +_0800F670: .4byte 0x03000208 +_0800F674: .4byte gBldRegs +_0800F678: .4byte gMultiBootParam +_0800F67C: .4byte 0x030000C0 +_0800F680: + adds r0, r6, #3 + strb r0, [r3] + movs r5, #0 +_0800F686: + lsls r4, r5, #1 + adds r4, r4, r5 + lsls r4, r4, #4 + adds r4, #0x40 + adds r4, r7, r4 + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #2 + bls _0800F686 + ldr r1, _0800F6D0 @ =gMultiBootParam + ldrb r0, [r1, #0x1e] + movs r2, #0xe + ands r2, r0 + mov r8, r1 + cmp r2, #0 + beq _0800F6D4 + ldrb r0, [r1, #0x18] + cmp r0, #0 + bne _0800F6F0 + cmp r6, #1 + ble _0800F6F0 + adds r4, r7, #0 + adds r4, #0xd0 + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + b _0800F6EC + .align 2, 0 +_0800F6D0: .4byte gMultiBootParam +_0800F6D4: + ldr r1, _0800F7BC @ =0x00000207 + adds r0, r7, r1 + strb r2, [r0] + ldr r2, _0800F7C0 @ =gFlags + ldr r0, [r2] + ldr r1, _0800F7C4 @ =0xFFFFBFFF + ands r0, r1 + ldr r1, _0800F7C8 @ =0xFFFF7FFF + ands r0, r1 + str r0, [r2] + bl m4aSoundVSyncOn +_0800F6EC: + ldr r2, _0800F7CC @ =gMultiBootParam + mov r8, r2 +_0800F6F0: + mov r4, r8 + ldrb r0, [r4, #0x18] + cmp r0, #0 + bne _0800F796 + ldrb r0, [r4, #0x1e] + cmp r0, #0 + beq _0800F796 + ldr r0, _0800F7D0 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0800F796 + ldr r1, _0800F7BC @ =0x00000207 + adds r0, r7, r1 + movs r5, #1 + strb r5, [r0] + ldr r4, _0800F7C0 @ =gFlags + ldr r0, [r4] + movs r1, #0x80 + lsls r1, r1, #8 + orrs r0, r1 + movs r1, #0x80 + lsls r1, r1, #7 + orrs r0, r1 + str r0, [r4] + bl m4aMPlayAllStop + ldr r0, [r4] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4] + bl m4aSoundVSyncOff + ldr r1, _0800F7D4 @ =0x040000B0 + ldrh r2, [r1, #0xa] + ldr r4, _0800F7D8 @ =0x0000C5FF + adds r0, r4, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r2, [r1, #0xa] + ldr r3, _0800F7DC @ =0x00007FFF + adds r0, r3, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + adds r1, #0xc + ldrh r2, [r1, #0xa] + adds r0, r4, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r2, [r1, #0xa] + adds r0, r3, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + adds r1, #0xc + ldrh r2, [r1, #0xa] + adds r0, r4, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r2, [r1, #0xa] + adds r0, r3, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldr r0, _0800F7E0 @ =0x040000D4 + ldrh r1, [r0, #0xa] + ands r4, r1 + strh r4, [r0, #0xa] + ldrh r1, [r0, #0xa] + ands r3, r1 + strh r3, [r0, #0xa] + ldrh r0, [r0, #0xa] + ldr r1, _0800F7E4 @ =gMultiboot_087C0258 + 0xC0 + ldr r2, _0800F7E8 @ =gMultiboot_087C22F8 + subs r2, r2, r1 + str r5, [sp] + mov r0, r8 + movs r3, #4 + bl MultiBootStartMaster +_0800F796: + ldr r2, _0800F7BC @ =0x00000207 + adds r0, r7, r2 + ldrb r0, [r0] + cmp r0, #0 + bne _0800F7F0 + ldr r0, _0800F7D0 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0800F7F0 + ldr r0, _0800F7EC @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + bl CreateMultiplayerModeSelectScreen + b _0800F986 + .align 2, 0 +_0800F7BC: .4byte 0x00000207 +_0800F7C0: .4byte gFlags +_0800F7C4: .4byte 0xFFFFBFFF +_0800F7C8: .4byte 0xFFFF7FFF +_0800F7CC: .4byte gMultiBootParam +_0800F7D0: .4byte gPressedKeys +_0800F7D4: .4byte 0x040000B0 +_0800F7D8: .4byte 0x0000C5FF +_0800F7DC: .4byte 0x00007FFF +_0800F7E0: .4byte 0x040000D4 +_0800F7E4: .4byte gMultiboot_087C0258 + 0xC0 +_0800F7E8: .4byte gMultiboot_087C22F8 +_0800F7EC: .4byte gCurTask +_0800F7F0: + ldr r4, _0800F840 @ =gMultiBootParam + adds r0, r4, #0 + bl MultiBootMain + cmp r0, #0x50 + beq _0800F808 + cmp r0, #0x60 + beq _0800F808 + cmp r0, #0x70 + beq _0800F808 + cmp r0, #0x71 + bne _0800F868 +_0800F808: + ldr r1, _0800F844 @ =0x0000FFFF + movs r0, #0 + bl TasksDestroyInPriorityRange + ldr r1, _0800F848 @ =gBackgroundsCopyQueueCursor + ldr r0, _0800F84C @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r1, _0800F850 @ =gBgSpritesCount + movs r0, #0 + strb r0, [r1] + ldr r1, _0800F854 @ =gVramGraphicsCopyCursor + ldr r0, _0800F858 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r2, _0800F85C @ =gFlags + ldr r0, [r2] + ldr r1, _0800F860 @ =0xFFFFBFFF + ands r0, r1 + ldr r1, _0800F864 @ =0xFFFF7FFF + ands r0, r1 + str r0, [r2] + bl m4aSoundVSyncOn + bl LinkCommunicationError + b _0800F986 + .align 2, 0 +_0800F840: .4byte gMultiBootParam +_0800F844: .4byte 0x0000FFFF +_0800F848: .4byte gBackgroundsCopyQueueCursor +_0800F84C: .4byte gBackgroundsCopyQueueIndex +_0800F850: .4byte gBgSpritesCount +_0800F854: .4byte gVramGraphicsCopyCursor +_0800F858: .4byte gVramGraphicsCopyQueueIndex +_0800F85C: .4byte gFlags +_0800F860: .4byte 0xFFFFBFFF +_0800F864: .4byte 0xFFFF7FFF +_0800F868: + adds r0, r4, #0 + bl MultiBootCheckComplete + cmp r0, #0 + bne _0800F874 + b _0800F986 +_0800F874: + ldr r4, _0800F8FC @ =gDispCnt + ldr r1, _0800F900 @ =0x00001341 + adds r0, r1, #0 + strh r0, [r4] + ldr r1, _0800F904 @ =gBgCntRegs + movs r5, #0 + movs r2, #0 + ldr r0, _0800F908 @ =0x00001E02 + strh r0, [r1] + adds r0, #1 + strh r0, [r1, #2] + ldr r0, _0800F90C @ =gBgScrollRegs + strh r2, [r0] + strh r2, [r0, #2] + strh r2, [r0, #4] + movs r1, #0x80 + strh r1, [r0, #6] + ldr r0, _0800F910 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 + movs r0, #0xc0 + lsls r0, r0, #0x13 + str r0, [r6, #4] + strh r2, [r6, #0xa] + ldr r0, _0800F914 @ =0x0600F000 + str r0, [r6, #0xc] + strh r2, [r6, #0x18] + strh r2, [r6, #0x1a] + movs r0, #0x53 + strh r0, [r6, #0x1c] + strh r2, [r6, #0x1e] + strh r2, [r6, #0x20] + strh r2, [r6, #0x22] + strh r2, [r6, #0x24] + movs r0, #0x1e + strh r0, [r6, #0x26] + movs r0, #0x1b + strh r0, [r6, #0x28] + ldr r0, _0800F918 @ =0x0300002A + adds r1, r1, r0 + strb r5, [r1] + strh r2, [r6, #0x2e] + adds r0, r6, #0 + bl DrawBackground + ldr r0, _0800F91C @ =gLoadedSaveGame + ldrb r2, [r0, #0x19] + cmp r2, #0 + beq _0800F928 + ldrh r0, [r4] + movs r2, #0x80 + lsls r2, r2, #6 + adds r1, r2, #0 + orrs r0, r1 + strh r0, [r4] + ldr r1, _0800F920 @ =gWinRegs + movs r0, #2 + strh r0, [r1, #8] + movs r0, #1 + strh r0, [r1, #0xa] + movs r0, #0xf0 + strh r0, [r1] + ldr r0, _0800F924 @ =0x00002058 + strh r0, [r1, #4] + b _0800F936 + .align 2, 0 +_0800F8FC: .4byte gDispCnt +_0800F900: .4byte 0x00001341 +_0800F904: .4byte gBgCntRegs +_0800F908: .4byte 0x00001E02 +_0800F90C: .4byte gBgScrollRegs +_0800F910: .4byte gCurTask +_0800F914: .4byte 0x0600F000 +_0800F918: .4byte 0x0300002A +_0800F91C: .4byte gLoadedSaveGame +_0800F920: .4byte gWinRegs +_0800F924: .4byte 0x00002058 +_0800F928: + ldrh r0, [r4] + ldr r1, _0800F994 @ =0x0000DFFF + ands r1, r0 + strh r1, [r4] + ldr r0, _0800F998 @ =gWinRegs + strh r2, [r0, #8] + strh r2, [r0, #0xa] +_0800F936: + ldr r2, _0800F99C @ =gFlags + ldr r0, [r2] + movs r1, #1 + orrs r0, r1 + str r0, [r2] + add r0, sp, #4 + movs r4, #0 + strh r4, [r0] + ldr r1, _0800F9A0 @ =gBgPalette+0x40 + ldr r2, _0800F9A4 @ =0x01000010 + bl CpuSet + ldr r0, _0800F9A8 @ =gCurTask + ldr r1, [r0] + ldr r0, _0800F9AC @ =sa2__sub_8081C50 + str r0, [r1, #8] + ldr r1, _0800F9B0 @ =gMultiSioSend + strb r4, [r1] + ldr r5, _0800F9B4 @ =gMultiSioRecv + strb r4, [r5] + strb r4, [r5, #0x14] + adds r3, r5, #0 + adds r3, #0x28 + strb r4, [r3] + adds r2, r5, #0 + adds r2, #0x3c + strb r4, [r2] + strb r4, [r1, #2] + ldr r0, _0800F9B8 @ =0x0000F001 + strh r0, [r1] + strb r4, [r5, #2] + adds r0, r5, #0 + adds r0, #0x14 + strb r4, [r0, #2] + strb r4, [r3, #2] + strb r4, [r2, #2] + movs r1, #0x81 + lsls r1, r1, #2 + adds r0, r6, r1 + strb r4, [r0] +_0800F986: + add sp, #8 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0800F994: .4byte 0x0000DFFF +_0800F998: .4byte gWinRegs +_0800F99C: .4byte gFlags +_0800F9A0: .4byte gBgPalette+0x40 +_0800F9A4: .4byte 0x01000010 +_0800F9A8: .4byte gCurTask +_0800F9AC: .4byte sa2__sub_8081C50 +_0800F9B0: .4byte gMultiSioSend +_0800F9B4: .4byte gMultiSioRecv +_0800F9B8: .4byte 0x0000F001 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/results_2__CreateMultiplayerSinglePakResultsScreen.inc b/sa1/asm/non_matching/game/multiplayer/results_2__CreateMultiplayerSinglePakResultsScreen.inc new file mode 100644 index 0000000000..3a8c55a568 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/results_2__CreateMultiplayerSinglePakResultsScreen.inc @@ -0,0 +1,428 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + mov sl, r0 + ldr r0, _0801AA0C @ =gMultiplayerMissingHeartbeats + movs r5, #0 + strb r5, [r0, #3] + strb r5, [r0, #2] + strb r5, [r0, #1] + strb r5, [r0] + ldr r0, _0801AA10 @ =gWinRegs + movs r6, #0 + strh r5, [r0, #8] + strh r5, [r0, #0xa] + strh r5, [r0] + strh r5, [r0, #4] + strh r5, [r0, #2] + strh r5, [r0, #6] + ldr r0, _0801AA14 @ =gStageFlags + strh r5, [r0] + ldr r1, _0801AA18 @ =gMultiSioEnabled + movs r0, #1 + strb r0, [r1] + ldr r4, _0801AA1C @ =gFlags + ldr r0, [r4] + ldr r1, _0801AA20 @ =0xFFFFBFFF + ands r0, r1 + str r0, [r4] + bl m4aSoundVSyncOn + ldr r1, _0801AA24 @ =gGameMode + movs r0, #6 + strb r0, [r1] + ldr r0, [r4] + ldr r1, _0801AA28 @ =0xFFFF7FFF + ands r0, r1 + str r0, [r4] + ldr r0, _0801AA2C @ =gUnknown_087E3610 + movs r1, #0xc0 + lsls r1, r1, #0x13 + movs r2, #0x80 + lsls r2, r2, #6 + mov sb, r2 + bl CpuFastSet + ldr r0, _0801AA30 @ =gUnknown_087D7E80 + ldr r4, _0801AA34 @ =gUnknown_02033000 + movs r2, #0xd0 + lsls r2, r2, #6 + adds r1, r4, #0 + bl CpuFastSet + ldr r1, _0801AA38 @ =gTilemapsRef + ldr r0, [r4] + str r0, [r1] + ldr r0, _0801AA3C @ =gDispCnt + movs r3, #0x40 + strh r3, [r0] + ldr r1, _0801AA40 @ =gBgCntRegs + ldr r0, _0801AA44 @ =0x00005E0B + strh r0, [r1, #6] + ldr r0, _0801AA48 @ =0x00001C0C + strh r0, [r1, #4] + ldr r2, _0801AA4C @ =gBgSprites_Unknown1 + movs r0, #0x7f + strb r0, [r2, #2] + ldr r0, _0801AA50 @ =gBgSprites_Unknown2 + strb r6, [r0, #8] + strb r6, [r0, #9] + movs r1, #0xff + strb r1, [r0, #0xa] + movs r1, #0x20 + strb r1, [r0, #0xb] + subs r1, #0x21 + strb r1, [r2, #3] + strb r6, [r0, #0xc] + strb r6, [r0, #0xd] + strb r1, [r0, #0xe] + strb r3, [r0, #0xf] + str r5, [sp, #4] + ldr r2, _0801AA54 @ =0x040000D4 + add r3, sp, #4 + str r3, [r2] + ldr r0, _0801AA58 @ =0x06009FE0 + str r0, [r2, #4] + ldr r3, _0801AA5C @ =0x85000010 + str r3, [r2, #8] + ldr r0, [r2, #8] + str r5, [sp, #4] + add r4, sp, #4 + str r4, [r2] + movs r0, #3 + mov r8, r0 + lsls r0, r0, #0xe + ldr r1, _0801AA60 @ =0x06000FE0 + adds r0, r0, r1 + str r0, [r2, #4] + str r3, [r2, #8] + ldr r0, [r2, #8] + ldr r0, _0801AA64 @ =sa2__Task_808207C + movs r1, #0x88 + lsls r1, r1, #3 + str r5, [sp] + mov r2, sb + movs r3, #0 + bl TaskCreate + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + ldr r1, _0801AA68 @ =0x03000434 + adds r0, r4, r1 + mov r2, sl + str r2, [r0] + ldr r3, _0801AA6C @ =0x03000430 + adds r0, r4, r3 + strh r5, [r0] + adds r1, #4 + adds r0, r4, r1 + strb r6, [r0] + adds r3, #0xc + adds r2, r4, r3 + ldr r0, _0801AA70 @ =gLoadedSaveGame + ldr r1, _0801AA74 @ =gFrameCount + ldr r0, [r0, #4] + ldr r1, [r1] + adds r0, r0, r1 + str r0, [r2] + ldr r0, _0801AA78 @ =0x06008000 + str r0, [r7, #4] + strh r5, [r7, #0xa] + ldr r0, _0801AA7C @ =0x0600F000 + str r0, [r7, #0xc] + strh r5, [r7, #0x18] + strh r5, [r7, #0x1a] + movs r0, #4 + strh r0, [r7, #0x1c] + strh r5, [r7, #0x1e] + strh r5, [r7, #0x20] + strh r5, [r7, #0x22] + strh r5, [r7, #0x24] + movs r0, #0x1e + strh r0, [r7, #0x26] + movs r0, #0x19 + strh r0, [r7, #0x28] + ldr r5, _0801AA80 @ =0x0300002A + adds r0, r4, r5 + strb r6, [r0] + mov r0, r8 + strh r0, [r7, #0x2e] + adds r0, r7, #0 + bl DrawBackground + movs r6, #0 + movs r1, #0 + mov r8, r1 + movs r3, #0 + ldr r2, _0801AA84 @ =0x03000088 + adds r5, r4, r2 + movs r2, #0x14 + ldr r0, _0801AA88 @ =0x03000080 + adds r4, r4, r0 +_0801A8E0: + movs r0, #0x78 + strh r0, [r5, #0xe] + strh r2, [r5, #0x10] + lsls r0, r6, #0xb + ldr r1, _0801AA8C @ =0x06010000 + adds r0, r0, r1 + str r0, [r4, #4] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r5, #0x12] + strh r3, [r5] + ldr r1, _0801AA90 @ =gPlayerCharacterIdleAnims + lsls r0, r6, #1 + adds r0, r0, r1 + ldrh r0, [r0] + strh r0, [r5, #2] + mov r0, r8 + strb r0, [r5, #0x18] + strh r3, [r5, #0xc] + strh r3, [r5, #0x14] + movs r0, #0xff + strb r0, [r5, #0x19] + movs r0, #0x10 + strb r0, [r5, #0x1a] + mov r1, r8 + strb r1, [r5, #0x1d] + movs r0, #0x80 + lsls r0, r0, #5 + str r0, [r5, #8] + adds r0, r4, #0 + str r2, [sp, #0x10] + str r3, [sp, #0x14] + bl UpdateSpriteAnimation + adds r5, #0x38 + ldr r2, [sp, #0x10] + adds r2, #0x28 + adds r4, #0x38 + adds r6, #1 + ldr r3, [sp, #0x14] + cmp r6, #3 + bls _0801A8E0 + movs r6, #0 + movs r1, #0 + movs r2, #0xb4 + lsls r2, r2, #1 + adds r4, r7, r2 + movs r3, #0xb0 + lsls r3, r3, #1 + adds r5, r7, r3 + ldr r2, _0801AA94 @ =0x06012000 +_0801A946: + strh r1, [r4, #0xe] + strh r1, [r4, #0x10] + str r2, [r5, #4] + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r4, #0x12] + strh r1, [r4] + movs r3, #0xe0 + lsls r3, r3, #2 + mov r8, r3 + mov r0, r8 + strh r0, [r4, #2] + adds r0, r6, #3 + strb r0, [r4, #0x18] + strh r1, [r4, #0xc] + strh r1, [r4, #0x14] + movs r0, #1 + rsbs r0, r0, #0 + mov r3, sp + strb r0, [r3, #8] + movs r0, #0xff + strb r0, [r4, #0x19] + movs r3, #0x10 + mov sb, r3 + mov r0, sb + strb r0, [r4, #0x1a] + movs r3, #0 + strb r3, [r4, #0x1d] + movs r0, #0x80 + lsls r0, r0, #5 + mov sl, r0 + str r0, [r4, #8] + adds r0, r5, #0 + str r1, [sp, #0xc] + str r2, [sp, #0x10] + bl UpdateSpriteAnimation + adds r4, #0x30 + adds r5, #0x30 + ldr r2, [sp, #0x10] + adds r2, #0x80 + adds r6, #1 + ldr r1, [sp, #0xc] + cmp r6, #9 + bls _0801A946 + ldr r1, _0801AA98 @ =0x00000434 + adds r0, r7, r1 + ldr r4, [r0] + cmp r4, #0 + beq _0801AAA0 + movs r6, #0 + movs r2, #0 + mov r8, r2 + movs r1, #0 + movs r3, #0xde + lsls r3, r3, #2 + adds r4, r7, r3 + ldr r2, _0801AA9C @ =0x06012500 + movs r0, #0xdc + lsls r0, r0, #2 + adds r5, r7, r0 +_0801A9C0: + str r2, [r5, #4] + strh r1, [r4, #0xe] + strh r1, [r4, #0x10] + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r4, #0x12] + strh r1, [r4] + movs r0, #0xe0 + lsls r0, r0, #2 + strh r0, [r4, #2] + strb r6, [r4, #0x18] + strh r1, [r4, #0xc] + strh r1, [r4, #0x14] + movs r0, #0xff + strb r0, [r4, #0x19] + movs r0, #0x10 + strb r0, [r4, #0x1a] + mov r3, r8 + strb r3, [r4, #0x1d] + movs r0, #0x80 + lsls r0, r0, #5 + str r0, [r4, #8] + adds r0, r5, #0 + str r1, [sp, #0xc] + str r2, [sp, #0x10] + bl UpdateSpriteAnimation + adds r4, #0x30 + ldr r2, [sp, #0x10] + movs r0, #0xe0 + lsls r0, r0, #1 + adds r2, r2, r0 + adds r5, #0x30 + adds r6, #1 + ldr r1, [sp, #0xc] + cmp r6, #2 + bls _0801A9C0 + b _0801AAEE + .align 2, 0 +_0801AA0C: .4byte gMultiplayerMissingHeartbeats +_0801AA10: .4byte gWinRegs +_0801AA14: .4byte gStageFlags +_0801AA18: .4byte gMultiSioEnabled +_0801AA1C: .4byte gFlags +_0801AA20: .4byte 0xFFFFBFFF +_0801AA24: .4byte gGameMode +_0801AA28: .4byte 0xFFFF7FFF +_0801AA2C: .4byte gUnknown_087E3610 +_0801AA30: .4byte gUnknown_087D7E80 +_0801AA34: .4byte gUnknown_02033000 +_0801AA38: .4byte gTilemapsRef +_0801AA3C: .4byte gDispCnt +_0801AA40: .4byte gBgCntRegs +_0801AA44: .4byte 0x00005E0B +_0801AA48: .4byte 0x00001C0C +_0801AA4C: .4byte gBgSprites_Unknown1 +_0801AA50: .4byte gBgSprites_Unknown2 +_0801AA54: .4byte 0x040000D4 +_0801AA58: .4byte 0x06009FE0 +_0801AA5C: .4byte 0x85000010 +_0801AA60: .4byte 0x06000FE0 +_0801AA64: .4byte sa2__Task_808207C +_0801AA68: .4byte 0x03000434 +_0801AA6C: .4byte 0x03000430 +_0801AA70: .4byte gLoadedSaveGame +_0801AA74: .4byte gFrameCount +_0801AA78: .4byte 0x06008000 +_0801AA7C: .4byte 0x0600F000 +_0801AA80: .4byte 0x0300002A +_0801AA84: .4byte 0x03000088 +_0801AA88: .4byte 0x03000080 +_0801AA8C: .4byte 0x06010000 +_0801AA90: .4byte gPlayerCharacterIdleAnims +_0801AA94: .4byte 0x06012000 +_0801AA98: .4byte 0x00000434 +_0801AA9C: .4byte 0x06012500 +_0801AAA0: + movs r1, #0xd0 + lsls r1, r1, #2 + adds r0, r7, r1 + movs r3, #0 + strh r4, [r0, #0x16] + strh r4, [r0, #0x18] + ldr r1, _0801AB00 @ =0x06012500 + str r1, [r0, #4] + movs r1, #0x80 + lsls r1, r1, #1 + strh r1, [r0, #0x1a] + strh r4, [r0, #8] + mov r2, r8 + strh r2, [r0, #0xa] + movs r5, #0xd8 + lsls r5, r5, #2 + adds r2, r7, r5 + movs r1, #0xd + strb r1, [r2] + strh r4, [r0, #0x14] + strh r4, [r0, #0x1c] + ldr r1, _0801AB04 @ =0x00000361 + adds r2, r7, r1 + ldrb r1, [r2] + mov r4, sp + ldrb r4, [r4, #8] + orrs r1, r4 + strb r1, [r2] + adds r5, #2 + adds r1, r7, r5 + mov r2, sb + strb r2, [r1] + ldr r4, _0801AB08 @ =0x00000365 + adds r1, r7, r4 + strb r3, [r1] + mov r5, sl + str r5, [r0, #0x10] + bl UpdateSpriteAnimation +_0801AAEE: + ldr r1, _0801AB0C @ =0x00000434 + adds r0, r7, r1 + ldr r0, [r0] + cmp r0, #0 + beq _0801AB10 + movs r0, #0x36 @ MUS_VS_RESULT + bl m4aSongNumStart + b _0801AB16 + .align 2, 0 +_0801AB00: .4byte 0x06012500 +_0801AB04: .4byte 0x00000361 +_0801AB08: .4byte 0x00000365 +_0801AB0C: .4byte 0x00000434 +_0801AB10: + movs r0, #0x34 @ MUS_VS_SCORE_OVERVIEW + bl m4aSongNumStart +_0801AB16: + ldr r0, _0801AB30 @ =gBldRegs + movs r1, #0xff + strh r1, [r0] + movs r1, #0x10 + strh r1, [r0, #4] + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0801AB30: .4byte gBldRegs + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/results_2__Task_ChaoHuntHUD.inc b/sa1/asm/non_matching/game/multiplayer/results_2__Task_ChaoHuntHUD.inc new file mode 100644 index 0000000000..b403aa05b4 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/results_2__Task_ChaoHuntHUD.inc @@ -0,0 +1,460 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r0, _0801B8A0 @ =gCurTask + ldr r0, [r0] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r3, r0 + str r0, [sp] + ldr r0, _0801B8A4 @ =gCourseTime + ldr r2, [r0] + ldr r1, _0801B8A8 @ =0x00000E0F + ldr r4, _0801B8AC @ =0x03000030 + adds r4, r4, r3 + mov sl, r4 + adds r4, r0, #0 + cmp r2, r1 + bhi _0801B72E + movs r0, #2 + ands r2, r0 + cmp r2, #0 + beq _0801B72E + ldr r0, _0801B8B0 @ =0x03000240 + adds r0, r0, r3 + mov sl, r0 +_0801B72E: + ldr r0, _0801B8B4 @ =gStageFlags + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _0801B754 + ldr r1, [r4] + ldr r0, _0801B8B8 @ =0x000004AF + cmp r1, r0 + bhi _0801B754 + adds r0, r1, #0 + movs r1, #0x3c + bl Mod + cmp r0, #0 + bne _0801B754 + movs r0, #0x8b @ SE_TIMER + bl m4aSongNumStart +_0801B754: + movs r7, #0xf0 + lsls r7, r7, #1 + add r7, sl + movs r1, #0x20 + mov r8, r1 + mov r4, r8 + strh r4, [r7, #0x18] + movs r0, #0x18 + strh r0, [r7, #0x16] + adds r0, r7, #0 + bl DisplaySprite + movs r0, #0x30 + strh r0, [r7, #0x16] + adds r0, r7, #0 + bl DisplaySprite + ldr r4, _0801B8A4 @ =gCourseTime + ldr r0, [r4] + movs r1, #0x3c + bl Div + adds r5, r0, #0 + ldr r1, [r4] + lsls r0, r5, #4 + subs r0, r0, r5 + lsls r0, r0, #2 + subs r1, r1, r0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + lsls r5, r5, #0x10 + lsrs r5, r5, #0x10 + ldr r0, _0801B8BC @ =sa2__gUnknown_080E0234 + adds r0, r1, r0 + ldrb r4, [r0] + movs r0, #0xf + mov sb, r0 + lsrs r1, r4, #4 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + movs r0, #0x38 + strh r0, [r7, #0x16] + mov r0, r8 + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + movs r6, #0xf + adds r1, r6, #0 + ands r1, r4 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + movs r0, #0x40 + strh r0, [r7, #0x16] + mov r4, r8 + strh r4, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + adds r0, r5, #0 + movs r1, #0x3c + bl Div + adds r4, r0, #0 + lsls r0, r4, #4 + subs r0, r0, r4 + lsls r0, r0, #2 + subs r5, r5, r0 + lsls r5, r5, #0x10 + lsrs r1, r5, #0x10 + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 + adds r0, r1, #0 + bl Base10DigitsToHexNibbles + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + lsrs r0, r0, #0x14 + mov r1, sb + ands r0, r1 + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #4 + mov r0, sl + adds r7, r0, r1 + mov r1, r8 + strh r1, [r7, #0x16] + strh r1, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + adds r1, r6, #0 + ands r1, r5 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + movs r0, #0x28 + strh r0, [r7, #0x16] + mov r0, r8 + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + adds r0, r4, #0 + movs r1, #0x3c + bl Div + lsls r1, r0, #4 + subs r1, r1, r0 + lsls r1, r1, #2 + subs r4, r4, r1 + lsls r4, r4, #0x10 + lsrs r1, r4, #0x10 + adds r0, r1, #0 + bl Base10DigitsToHexNibbles + ands r6, r0 + lsls r0, r6, #1 + adds r0, r0, r6 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + movs r0, #0x10 + strh r0, [r7, #0x16] + mov r4, r8 + strh r4, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + movs r5, #0 + ldr r0, _0801B8C0 @ =gMultiplayerConnections + ldrb r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _0801B876 + b _0801BA86 +_0801B876: + ldr r2, _0801B8C4 @ =gGameMode + ldr r0, [sp] + adds r0, #0x30 + mov sl, r0 +_0801B87E: + ldr r7, [sp] + lsls r0, r5, #2 + adds r0, r0, r5 + lsls r0, r0, #2 + adds r0, #8 + strh r0, [r7, #0x16] + movs r0, #8 + strh r0, [r7, #0x18] + ldrb r0, [r2] + cmp r0, #6 + bne _0801B8C8 + adds r0, r7, #0 + adds r0, #0x25 + strb r5, [r0] + adds r1, r5, #1 + mov sb, r1 + b _0801B920 + .align 2, 0 +_0801B8A0: .4byte gCurTask +_0801B8A4: .4byte gCourseTime +_0801B8A8: .4byte 0x00000E0F +_0801B8AC: .4byte 0x03000030 +_0801B8B0: .4byte 0x03000240 +_0801B8B4: .4byte gStageFlags +_0801B8B8: .4byte 0x000004AF +_0801B8BC: .4byte sa2__gUnknown_080E0234 +_0801B8C0: .4byte gMultiplayerConnections +_0801B8C4: .4byte gGameMode +_0801B8C8: + cmp r0, #4 + bne _0801B8E4 + ldr r0, _0801B8E0 @ =gMultiplayerCharacters + adds r0, r5, r0 + ldrb r0, [r0] + adds r1, r7, #0 + adds r1, #0x25 + strb r0, [r1] + adds r4, r5, #1 + mov sb, r4 + b _0801B920 + .align 2, 0 +_0801B8E0: .4byte gMultiplayerCharacters +_0801B8E4: + movs r2, #0 + ldr r3, _0801B974 @ =gMultiplayerConnections + ldrb r1, [r3] + movs r0, #0x10 + ands r1, r0 + asrs r1, r1, #4 + ldr r0, _0801B978 @ =gMultiplayerCharacters + mov r8, r0 + adds r4, r7, #0 + adds r4, #0x25 + adds r0, r5, #1 + mov sb, r0 + cmp r5, r1 + beq _0801B918 + movs r6, #0x10 +_0801B902: + adds r2, #1 + cmp r2, #3 + bhi _0801B918 + ldrb r0, [r3] + adds r1, r6, #0 + lsls r1, r2 + ands r0, r1 + adds r1, r2, #4 + asrs r0, r1 + cmp r5, r0 + bne _0801B902 +_0801B918: + mov r1, r8 + adds r0, r2, r1 + ldrb r0, [r0] + strb r0, [r4] +_0801B920: + adds r0, r7, #0 + bl DisplaySprite + ldr r0, _0801B97C @ =gGameMode + ldrb r0, [r0] + cmp r0, #5 + bne _0801B988 + movs r4, #0 + movs r2, #0 + ldr r1, _0801B980 @ =gMultiplayerPlayerTasks + ldr r0, [r1] + cmp r0, #0 + beq _0801B970 + ldr r0, _0801B974 @ =gMultiplayerConnections + ldrb r3, [r0] + mov r8, r1 + ldr r7, _0801B984 @ =gMultiplayerCharRings + movs r6, #0x10 +_0801B944: + adds r0, r6, #0 + lsls r0, r2 + ands r0, r3 + adds r1, r2, #4 + asrs r0, r1 + cmp r5, r0 + bne _0801B95C + adds r0, r2, r7 + ldrb r0, [r0] + adds r0, r4, r0 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 +_0801B95C: + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #3 + bhi _0801B970 + lsls r0, r2, #2 + add r0, r8 + ldr r0, [r0] + cmp r0, #0 + bne _0801B944 +_0801B970: + adds r0, r4, #0 + b _0801B98E + .align 2, 0 +_0801B974: .4byte gMultiplayerConnections +_0801B978: .4byte gMultiplayerCharacters +_0801B97C: .4byte gGameMode +_0801B980: .4byte gMultiplayerPlayerTasks +_0801B984: .4byte gMultiplayerCharRings +_0801B988: + ldr r0, _0801B9F4 @ =gMultiplayerCharRings + adds r0, r5, r0 + ldrb r0, [r0] +_0801B98E: + bl Base10DigitsToHexNibbles + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + cmp r4, #0xff + bls _0801B9F8 + lsrs r1, r4, #8 + movs r0, #0xf + ands r1, r0 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + ldr r1, [sp] + ldrh r0, [r1, #0x16] + adds r0, #3 + strh r0, [r7, #0x16] + movs r0, #0xe + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + lsrs r1, r4, #4 + movs r0, #0xf + ands r1, r0 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + ldr r1, [sp] + ldrh r0, [r1, #0x16] + adds r0, #0xb + strh r0, [r7, #0x16] + movs r0, #0xe + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + movs r1, #0xf + ands r1, r4 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + ldr r4, [sp] + ldrh r0, [r4, #0x16] + adds r0, #0x13 + b _0801BA32 + .align 2, 0 +_0801B9F4: .4byte gMultiplayerCharRings +_0801B9F8: + cmp r4, #0xf + bls _0801BA40 + lsrs r1, r4, #4 + movs r0, #0xf + ands r1, r0 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + ldr r1, [sp] + ldrh r0, [r1, #0x16] + adds r0, #7 + strh r0, [r7, #0x16] + movs r0, #0xe + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + movs r1, #0xf + ands r1, r4 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + mov r1, sl + adds r7, r1, r0 + ldr r4, [sp] + ldrh r0, [r4, #0x16] + adds r0, #0xf +_0801BA32: + strh r0, [r7, #0x16] + movs r0, #0xe + strh r0, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite + b _0801BA60 +_0801BA40: + movs r0, #0xf + ands r0, r4 + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #4 + mov r4, sl + adds r7, r4, r1 + ldr r1, [sp] + ldrh r0, [r1, #0x16] + adds r0, #0xb + strh r0, [r7, #0x16] + movs r4, #0xe + strh r4, [r7, #0x18] + adds r0, r7, #0 + bl DisplaySprite +_0801BA60: + mov r5, sb + cmp r5, #3 + bhi _0801BA86 + ldr r0, _0801BA98 @ =gMultiplayerConnections + ldrb r0, [r0] + asrs r0, r5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0801BA86 + ldr r0, _0801BA9C @ =gGameMode + ldrb r1, [r0] + adds r2, r0, #0 + cmp r1, #5 + beq _0801BA80 + b _0801B87E +_0801BA80: + cmp r5, #2 + beq _0801BA86 + b _0801B87E +_0801BA86: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0801BA98: .4byte gMultiplayerConnections +_0801BA9C: .4byte gGameMode + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/results_2__sa2__sub_8082788.inc b/sa1/asm/non_matching/game/multiplayer/results_2__sa2__sub_8082788.inc new file mode 100644 index 0000000000..ce4f7db703 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/results_2__sa2__sub_8082788.inc @@ -0,0 +1,414 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + ldr r0, _0801B218 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _0801B256 + movs r5, #0 + ldr r2, _0801B21C @ =gMultiplayerConnections + ldrb r1, [r2] + movs r0, #1 + ands r1, r0 + ldr r7, _0801B220 @ =gMultiSioStatusFlags + cmp r1, #0 + beq _0801B256 + movs r6, #1 + ldr r3, _0801B224 @ =gMultiplayerMissingHeartbeats +_0801B1DC: + adds r0, r6, #0 + lsls r0, r5 + ldr r4, [r7] + ands r4, r0 + cmp r4, #0 + bne _0801B240 + ldrb r0, [r3] + adds r1, r0, #1 + strb r1, [r3] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _0801B244 + movs r0, #0 + ldr r1, _0801B228 @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _0801B22C @ =gBackgroundsCopyQueueCursor + ldr r0, _0801B230 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0801B234 @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _0801B238 @ =gVramGraphicsCopyCursor + ldr r0, _0801B23C @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _0801B4EE + .align 2, 0 +_0801B218: .4byte gGameMode +_0801B21C: .4byte gMultiplayerConnections +_0801B220: .4byte gMultiSioStatusFlags +_0801B224: .4byte gMultiplayerMissingHeartbeats +_0801B228: .4byte 0x0000FFFF +_0801B22C: .4byte gBackgroundsCopyQueueCursor +_0801B230: .4byte gBackgroundsCopyQueueIndex +_0801B234: .4byte gBgSpritesCount +_0801B238: .4byte gVramGraphicsCopyCursor +_0801B23C: .4byte gVramGraphicsCopyQueueIndex +_0801B240: + movs r0, #0 + strb r0, [r3] +_0801B244: + adds r3, #1 + adds r5, #1 + cmp r5, #3 + bhi _0801B256 + ldrb r0, [r2] + asrs r0, r5 + ands r0, r6 + cmp r0, #0 + bne _0801B1DC +_0801B256: + ldr r0, _0801B2AC @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + mov r8, r1 + movs r6, #0 +_0801B266: + ldr r2, _0801B2B0 @ =gMultiSioStatusFlags + adds r0, r6, #0 + adds r0, #8 + movs r3, #1 + adds r1, r3, #0 + lsls r1, r0 + ldr r0, [r2] + ands r0, r1 + cmp r0, #0 + bne _0801B2B8 + ldr r0, _0801B2B4 @ =gMultiplayerRanks + adds r0, r6, r0 + ldrb r1, [r0] + adds r0, r3, #0 + ands r0, r1 + lsls r1, r6, #2 + adds r1, r1, r6 + lsls r3, r1, #3 + lsls r1, r1, #0x1b + lsrs r1, r1, #0x18 + adds r4, r6, #1 + lsls r2, r4, #2 + adds r2, r2, r4 + lsls r2, r2, #0x1b + lsrs r2, r2, #0x18 + movs r0, #0xa0 + subs r0, r0, r3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp] + movs r0, #3 + movs r3, #0 + bl sa2__sub_80078D4 + b _0801B4E6 + .align 2, 0 +_0801B2AC: .4byte gCurTask +_0801B2B0: .4byte gMultiSioStatusFlags +_0801B2B4: .4byte gMultiplayerRanks +_0801B2B8: + ldr r0, _0801B42C @ =gMultiplayerRanks + adds r0, r0, r6 + mov sb, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r3, r1, #3 + lsls r1, r1, #0x1b + lsrs r1, r1, #0x18 + adds r0, #1 + lsls r2, r0, #2 + adds r2, r2, r0 + lsls r2, r2, #0x1b + lsrs r2, r2, #0x18 + lsls r5, r6, #2 + adds r4, r5, r6 + lsls r7, r4, #3 + subs r3, r7, r3 + lsls r3, r3, #0x10 + lsrs r3, r3, #0x10 + str r3, [sp] + movs r0, #3 + movs r3, #0 + bl sa2__sub_80078D4 + lsls r4, r4, #2 + ldr r0, _0801B430 @ =gMultiSioRecv + adds r4, r4, r0 + ldr r0, _0801B434 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + mov sl, r5 + cmp r6, r0 + beq _0801B30C + ldrh r0, [r4] + adds r4, r6, #1 + cmp r0, #0xf + bhi _0801B30C + b _0801B4E6 +_0801B30C: + ldr r0, _0801B438 @ =0x00000434 + add r0, r8 + ldr r0, [r0] + cmp r0, #0 + bne _0801B318 + b _0801B444 +_0801B318: + lsls r0, r6, #3 + subs r0, r0, r6 + lsls r0, r0, #3 + adds r0, #0x80 + mov r1, r8 + adds r5, r1, r0 + movs r0, #0x78 + strh r0, [r5, #0x16] + mov r0, sb + movs r1, #0 + ldrsb r1, [r0, r1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, #0x14 + strh r0, [r5, #0x18] + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite + ldr r0, _0801B43C @ =gMultiplayerCharacters + adds r0, r6, r0 + movs r1, #0 + ldrsb r1, [r0, r1] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + movs r1, #0xdc + lsls r1, r1, #2 + adds r0, r0, r1 + mov r1, r8 + adds r5, r1, r0 + movs r0, #0x34 + strh r0, [r5, #0x16] + mov r0, sb + movs r1, #0 + ldrsb r1, [r0, r1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, #0x14 + strh r0, [r5, #0x18] + adds r0, r5, #0 + bl DisplaySprite + ldr r0, _0801B440 @ =gMultiplayerCharRings + adds r0, r6, r0 + ldrb r0, [r0] + bl Base10DigitsToHexNibbles + lsls r4, r0, #0x10 + lsrs r1, r4, #0x10 + mov sl, r1 + lsrs r1, r4, #0x18 + movs r3, #0xf + ands r1, r3 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + movs r2, #0xb0 + lsls r2, r2, #1 + adds r0, r0, r2 + mov r1, r8 + adds r5, r1, r0 + adds r7, r1, r2 + cmp r5, r7 + beq _0801B3C4 + movs r0, #0xa0 + strh r0, [r5, #0x16] + mov r0, sb + movs r1, #0 + ldrsb r1, [r0, r1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, #0x14 + strh r0, [r5, #0x18] + adds r0, r5, #0 + str r2, [sp, #4] + str r3, [sp, #8] + bl DisplaySprite + ldr r3, [sp, #8] + ldr r2, [sp, #4] +_0801B3C4: + lsrs r1, r4, #0x14 + ands r1, r3 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + adds r0, r0, r2 + mov r1, r8 + adds r5, r1, r0 + cmp r5, r7 + bne _0801B3DE + mov r0, sl + cmp r0, #0xff + bls _0801B3F8 +_0801B3DE: + movs r0, #0xab + strh r0, [r5, #0x16] + mov r0, sb + movs r1, #0 + ldrsb r1, [r0, r1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, #0x14 + strh r0, [r5, #0x18] + adds r0, r5, #0 + bl DisplaySprite +_0801B3F8: + movs r1, #0xf + mov r0, sl + ands r1, r0 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + movs r1, #0xb0 + lsls r1, r1, #1 + adds r0, r0, r1 + mov r1, r8 + adds r5, r1, r0 + movs r0, #0xb6 + strh r0, [r5, #0x16] + ldr r0, _0801B42C @ =gMultiplayerRanks + adds r0, r6, r0 + movs r1, #0 + ldrsb r1, [r0, r1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, #0x14 + strh r0, [r5, #0x18] + adds r0, r5, #0 + bl DisplaySprite + b _0801B4E4 + .align 2, 0 +_0801B42C: .4byte gMultiplayerRanks +_0801B430: .4byte gMultiSioRecv +_0801B434: .4byte 0x04000128 +_0801B438: .4byte 0x00000434 +_0801B43C: .4byte gMultiplayerCharacters +_0801B440: .4byte gMultiplayerCharRings +_0801B444: + lsls r0, r6, #3 + subs r0, r0, r6 + lsls r0, r0, #3 + adds r0, #0x80 + mov r1, r8 + adds r5, r1, r0 + movs r0, #0x78 + strh r0, [r5, #0x16] + adds r0, r7, #0 + adds r0, #0x14 + strh r0, [r5, #0x18] + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite + ldr r0, _0801B474 @ =gMPRingCollectWins + adds r1, r6, r0 + ldrb r0, [r1] + cmp r0, #0x63 + bls _0801B478 + movs r7, #0x63 + b _0801B482 + .align 2, 0 +_0801B474: .4byte gMPRingCollectWins +_0801B478: + ldrb r0, [r1] + bl Base10DigitsToHexNibbles + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 +_0801B482: + lsrs r0, r7, #4 + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #4 + movs r4, #0xb0 + lsls r4, r4, #1 + adds r1, r1, r4 + mov r0, r8 + adds r5, r0, r1 + adds r0, r0, r4 + cmp r5, r0 + beq _0801B4AE + movs r0, #0xa0 + strh r0, [r5, #0x16] + mov r1, sl + adds r0, r1, r6 + lsls r0, r0, #3 + adds r0, #0x14 + strh r0, [r5, #0x18] + adds r0, r5, #0 + bl DisplaySprite +_0801B4AE: + movs r1, #0xf + ands r1, r7 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #4 + adds r0, r0, r4 + mov r1, r8 + adds r5, r1, r0 + movs r0, #0xab + strh r0, [r5, #0x16] + mov r0, sl + adds r4, r0, r6 + lsls r4, r4, #3 + adds r4, #0x14 + strh r4, [r5, #0x18] + adds r0, r5, #0 + bl DisplaySprite + movs r5, #0xd0 + lsls r5, r5, #2 + add r5, r8 + movs r0, #0xc5 + strh r0, [r5, #0x16] + strh r4, [r5, #0x18] + adds r0, r5, #0 + bl DisplaySprite +_0801B4E4: + adds r4, r6, #1 +_0801B4E6: + adds r6, r4, #0 + cmp r6, #3 + bhi _0801B4EE + b _0801B266 +_0801B4EE: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/results_2__sub_800FD9C.inc b/sa1/asm/non_matching/game/multiplayer/results_2__sub_800FD9C.inc new file mode 100644 index 0000000000..15d87da3cb --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/results_2__sub_800FD9C.inc @@ -0,0 +1,150 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + mov sb, r0 @ sb = data + movs r0, #0 + mov ip, r0 + ldr r1, _0800FDD4 @ =gLoadedSaveGame + 0x380 + mov sl, r1 @ sl = LOADED_SAVE->multiplayerScores + mov r5, sb + adds r5, #4 + str r5, [sp, #0x10] @ sp10 = + mov r7, sl + mov r8, r0 @ r8 = r0 = i +_0800FDBC_loop: + ldr r4, _0800FDD4 @ =gLoadedSaveGame + 0x380 + add r4, r8 @ r4 = score + movs r6, #1 + movs r3, #0 + mov r2, sb @ r2 = sb = data + ldrb r1, [r2, #4] + ldrb r0, [r4] + cmp r1, r0 + beq _0800FDD8 + movs r6, #0 + b _0800FE38_continue + .align 2, 0 +_0800FDD4: .4byte gLoadedSaveGame + 0x380 +_0800FDD8: + adds r3, #1 + cmp r3, #0xb + bhi _0800FDEC + adds r0, r5, r3 + adds r1, r4, r3 + ldrb r2, [r0] + ldrb r0, [r1] + cmp r2, r0 + beq _0800FDD8 + movs r6, #0 +_0800FDEC: + cmp r6, #0 + beq _0800FE38_continue + mov r0, sp + adds r1, r7, #0 + ldm r1!, {r3, r4, r5} + stm r0!, {r3, r4, r5} + ldr r1, [r1] + str r1, [r0] + mov r2, ip + cmp r2, #0 + beq _0800FE22 + ldr r4, _0800FE30 @ =gLoadedSaveGame + movs r3, #0xe0 + lsls r3, r3, #2 @ 0x380 +_0800FE08: + lsls r1, r2, #4 + adds r1, r1, r4 + subs r2, #1 + lsls r0, r2, #4 + adds r0, r0, r4 + adds r1, r1, r3 + adds r0, r0, r3 + ldm r0!, {r5, r6, r7} + stm r1!, {r5, r6, r7} + ldr r0, [r0] + str r0, [r1] @ LOADED_SAVE->multiplayerScores = + cmp r2, #0 + bne _0800FE08 +_0800FE22: + ldr r0, _0800FE34 @ =gLoadedSaveGame + 0x380 + mov r1, sp + ldm r1!, {r2, r6, r7} + stm r0!, {r2, r6, r7} + ldr r1, [r1] + str r1, [r0] + b _0800FE94 + .align 2, 0 +_0800FE30: .4byte gLoadedSaveGame +_0800FE34: .4byte gLoadedSaveGame + 0x380 +_0800FE38_continue: + adds r7, #0x10 + movs r3, #0x10 + add r8, r3 + movs r4, #1 + add ip, r4 + mov r6, ip + cmp r6, #9 + bls _0800FDBC_loop + movs r2, #9 + ldr r4, _0800FEA4 @ =gLoadedSaveGame + movs r3, #0xe0 + lsls r3, r3, #2 +_0800FE50: + lsls r1, r2, #4 + adds r1, r1, r4 + subs r2, #1 + lsls r0, r2, #4 + adds r0, r0, r4 + adds r1, r1, r3 + adds r0, r0, r3 + ldm r0!, {r5, r6, r7} + stm r1!, {r5, r6, r7} + ldr r0, [r0] + str r0, [r1] + cmp r2, #0 + bne _0800FE50 + ldr r5, [sp, #0x10] + mov r4, sl @ r4 = sl = LOADED_SAVE->multiplayerScores +_0800FE6E: + ldrb r0, [r5] + strb r0, [r4] + adds r5, #1 + adds r4, #1 + adds r2, #1 + cmp r2, #0xb + bls _0800FE6E + ldr r7, _0800FEA4 @ =gLoadedSaveGame + movs r1, #0xe3 + lsls r1, r1, #2 + adds r0, r7, r1 + movs r1, #0 + strb r1, [r0] + ldr r2, _0800FEA8 @ =0x0000038D + adds r0, r7, r2 + strb r1, [r0] + ldr r3, _0800FEAC @ =0x0000038E + adds r0, r7, r3 + strb r1, [r0] +_0800FE94: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0800FEA4: .4byte gLoadedSaveGame +_0800FEA8: .4byte 0x0000038D +_0800FEAC: .4byte 0x0000038E + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/results__Task_801874C.inc b/sa1/asm/non_matching/game/multiplayer/results__Task_801874C.inc new file mode 100644 index 0000000000..3ecbb24347 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/results__Task_801874C.inc @@ -0,0 +1,439 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _080187BC @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 + ldr r0, _080187C0 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _080187FE + movs r3, #0 + ldr r0, _080187C4 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + adds r7, r0, #0 + cmp r1, #0 + beq _080187FE + movs r5, #1 + ldr r2, _080187C8 @ =gMultiplayerMissingHeartbeats +_0801877E: + ldr r1, _080187CC @ =gMultiSioStatusFlags + adds r0, r5, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _080187E8 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _080187EC + movs r0, #0 + ldr r1, _080187D0 @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _080187D4 @ =gBackgroundsCopyQueueCursor + ldr r0, _080187D8 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _080187DC @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _080187E0 @ =gVramGraphicsCopyCursor + ldr r0, _080187E4 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _08018AC2 + .align 2, 0 +_080187BC: .4byte gCurTask +_080187C0: .4byte gGameMode +_080187C4: .4byte gMultiplayerConnections +_080187C8: .4byte gMultiplayerMissingHeartbeats +_080187CC: .4byte gMultiSioStatusFlags +_080187D0: .4byte 0x0000FFFF +_080187D4: .4byte gBackgroundsCopyQueueCursor +_080187D8: .4byte gBackgroundsCopyQueueIndex +_080187DC: .4byte gBgSpritesCount +_080187E0: .4byte gVramGraphicsCopyCursor +_080187E4: .4byte gVramGraphicsCopyQueueIndex +_080187E8: + movs r0, #0 + strb r0, [r2] +_080187EC: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _080187FE + ldrb r0, [r7] + asrs r0, r3 + ands r0, r5 + cmp r0, #0 + bne _0801877E +_080187FE: + ldr r5, _0801882C @ =gMultiSioRecv + ldrh r0, [r5] + cmp r0, #0x30 + bne _08018838 + ldr r0, _08018830 @ =0x00000203 + adds r4, r6, r0 + ldrb r0, [r4] + ldrb r1, [r5, #2] + cmp r0, r1 + beq _080188DC + movs r0, #0x6c + bl m4aSongNumStart + ldr r0, _08018834 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _080188EA + ldrb r0, [r5, #2] + strb r0, [r4] + b _080188DC + .align 2, 0 +_0801882C: .4byte gMultiSioRecv +_08018830: .4byte 0x00000203 +_08018834: .4byte gMultiSioStatusFlags +_08018838: + cmp r0, #0x31 + bne _080188DC + ldr r3, _0801887C @ =0x00000203 + adds r4, r6, r3 + ldrb r0, [r4] + ldrb r1, [r5, #2] + cmp r0, r1 + beq _08018852 + movs r0, #0x6c + bl m4aSongNumStart + ldrb r0, [r5, #2] + strb r0, [r4] +_08018852: + movs r0, #0x6a + bl m4aSongNumStart + ldrb r0, [r4] + cmp r0, #0 + bne _08018894 + ldr r1, _08018880 @ =gGameMode + movs r0, #2 + strb r0, [r1] + ldr r0, _08018884 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + ldr r2, _08018888 @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _0801888C @ =0x00196225 + muls r0, r1, r0 + ldr r3, _08018890 @ =0x3C6EF35F + adds r0, r0, r3 + b _080188AE + .align 2, 0 +_0801887C: .4byte 0x00000203 +_08018880: .4byte gGameMode +_08018884: .4byte gCurTask +_08018888: .4byte gPseudoRandom +_0801888C: .4byte 0x00196225 +_08018890: .4byte 0x3C6EF35F +_08018894: + ldr r1, _080188C4 @ =gGameMode + movs r0, #4 + strb r0, [r1] + ldr r0, _080188C8 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + ldr r2, _080188CC @ =gPseudoRandom + ldr r1, [r2] + ldr r0, _080188D0 @ =0x00196225 + muls r0, r1, r0 + ldr r1, _080188D4 @ =0x3C6EF35F + adds r0, r0, r1 +_080188AE: + str r0, [r2] + ldr r1, _080188D8 @ =0x04000128 + ldr r1, [r1] + lsls r1, r1, #0x1a + lsrs r1, r1, #0x1e + adds r0, r0, r1 + movs r1, #3 + ands r0, r1 + bl CreateCharacterSelectionScreen + b _08018AC2 + .align 2, 0 +_080188C4: .4byte gGameMode +_080188C8: .4byte gCurTask +_080188CC: .4byte gPseudoRandom +_080188D0: .4byte 0x00196225 +_080188D4: .4byte 0x3C6EF35F +_080188D8: .4byte 0x04000128 +_080188DC: + ldr r0, _08018934 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _080188EA + b _08018A08 +_080188EA: + movs r3, #1 + mov r8, r3 + movs r0, #0x30 + ldr r1, _08018938 @ =gMultiSioSend + strh r0, [r1] + ldr r3, _0801893C @ =0x00000213 + adds r0, r6, r3 + ldrb r5, [r0] + cmp r5, #0 + bne _08018974 + ldr r0, _08018940 @ =gRepeatedKeys + ldrh r1, [r0] + movs r0, #0x40 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + cmp r4, #0 + beq _08018948 + movs r0, #0x6c + bl m4aSongNumStart + ldr r0, _08018944 @ =0x00000203 + adds r1, r6, r0 + ldrb r0, [r1] + subs r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bls _0801892A + mov r3, r8 + strb r3, [r1] +_0801892A: + movs r1, #0xfe + lsls r1, r1, #1 + adds r0, r6, r1 + str r5, [r0] + b _08018974 + .align 2, 0 +_08018934: .4byte gMultiSioStatusFlags +_08018938: .4byte gMultiSioSend +_0801893C: .4byte 0x00000213 +_08018940: .4byte gRepeatedKeys +_08018944: .4byte 0x00000203 +_08018948: + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08018974 + movs r0, #0x6c + bl m4aSongNumStart + ldr r3, _080189F0 @ =0x00000203 + adds r1, r6, r3 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bls _0801896C + movs r0, #0 + strb r0, [r1] +_0801896C: + movs r1, #0xfe + lsls r1, r1, #1 + adds r0, r6, r1 + str r4, [r0] +_08018974: + ldr r3, _080189F0 @ =0x00000203 + adds r0, r6, r3 + ldrb r0, [r0] + ldr r1, _080189F4 @ =gMultiSioSend + strb r0, [r1, #2] + movs r4, #1 + ldr r1, _080189F8 @ =gMultiplayerConnections + ldrb r0, [r1] + asrs r0, r0, #1 + ands r0, r4 + adds r7, r1, #0 + adds r5, r6, #0 + adds r5, #0x40 + movs r3, #0x60 + adds r3, r3, r6 + mov sb, r3 + movs r1, #0x70 + adds r1, r1, r6 + mov sl, r1 + cmp r0, #0 + beq _080189C4 + ldr r0, _080189FC @ =gMultiSioRecv + adds r1, r7, #0 + adds r2, r0, #0 + adds r2, #0x14 + movs r3, #1 +_080189A8: + ldrh r0, [r2] + cmp r0, #0x30 + beq _080189B2 + movs r0, #0 + mov r8, r0 +_080189B2: + adds r2, #0x14 + adds r4, #1 + cmp r4, #3 + bhi _080189C4 + ldrb r0, [r1] + asrs r0, r4 + ands r0, r3 + cmp r0, #0 + bne _080189A8 +_080189C4: + mov r1, r8 + cmp r1, #0 + beq _080189D6 + ldr r0, _08018A00 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _080189E0 +_080189D6: + ldr r3, _08018A04 @ =0x00000213 + adds r0, r6, r3 + ldrb r0, [r0] + cmp r0, #0 + beq _08018A30 +_080189E0: + ldr r1, _08018A04 @ =0x00000213 + adds r0, r6, r1 + movs r1, #1 + strb r1, [r0] + movs r0, #0x31 + ldr r3, _080189F4 @ =gMultiSioSend + strh r0, [r3] + b _08018A30 + .align 2, 0 +_080189F0: .4byte 0x00000203 +_080189F4: .4byte gMultiSioSend +_080189F8: .4byte gMultiplayerConnections +_080189FC: .4byte gMultiSioRecv +_08018A00: .4byte gPressedKeys +_08018A04: .4byte 0x00000213 +_08018A08: + movs r0, #0x30 + ldr r1, _08018AD0 @ =gMultiSioSend + strh r0, [r1] + movs r3, #0xe0 + lsls r3, r3, #1 + adds r5, r6, r3 + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + bl DisplaySprite + adds r5, r6, #0 + adds r5, #0x40 + movs r0, #0x60 + adds r0, r0, r6 + mov sb, r0 + movs r1, #0x70 + adds r1, r1, r6 + mov sl, r1 +_08018A30: + ldr r1, _08018AD4 @ =gUnknown_080BB48C + ldr r3, _08018AD8 @ =0x00000203 + adds r2, r6, r3 + ldr r0, _08018ADC @ =gLoadedSaveGame + ldrb r0, [r0, #0x19] + lsls r0, r0, #1 + ldrb r3, [r2] + adds r0, r0, r3 + adds r0, r0, r1 + ldrb r7, [r0] + movs r0, #0xfe + lsls r0, r0, #1 + adds r4, r6, r0 + ldr r0, [r4] + adds r0, #0x80 + str r0, [r4] + lsls r1, r7, #8 + cmp r0, r1 + ble _08018A5A + subs r0, r0, r1 + str r0, [r4] +_08018A5A: + ldrb r1, [r2] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, #0x40 + strh r0, [r5, #0x18] + ldrb r0, [r2] + mov r1, sb + strb r0, [r1] + adds r0, r5, #0 + bl UpdateSpriteAnimation + ldr r0, [r4] + asrs r0, r0, #8 + subs r4, r0, r7 + movs r0, #0xe8 + subs r0, r0, r4 + cmp r0, #0 + ble _08018A9E + movs r3, #0xe8 + mov sb, r3 + movs r0, #0xe8 + mov r8, r0 +_08018A88: + mov r1, sb + subs r0, r1, r4 + strh r0, [r5, #0x16] + adds r0, r5, #0 + bl DisplaySprite + adds r4, r4, r7 + mov r3, r8 + subs r0, r3, r4 + cmp r0, #0 + bgt _08018A88 +_08018A9E: + mov r5, sl + ldr r1, _08018AD8 @ =0x00000203 + adds r0, r6, r1 + ldrb r1, [r0] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #3 + adds r0, #0x36 + strh r0, [r5, #0x18] + movs r4, #0 +_08018AB2: + lsls r0, r4, #5 + strh r0, [r5, #0x16] + adds r0, r5, #0 + bl DisplaySprite + adds r4, #1 + cmp r4, #7 + bls _08018AB2 +_08018AC2: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08018AD0: .4byte gMultiSioSend +_08018AD4: .4byte gUnknown_080BB48C +_08018AD8: .4byte 0x00000203 +_08018ADC: .4byte gLoadedSaveGame + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/results_b__Task_8018ECC.inc b/sa1/asm/non_matching/game/multiplayer/results_b__Task_8018ECC.inc new file mode 100644 index 0000000000..33d6e07499 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/results_b__Task_8018ECC.inc @@ -0,0 +1,561 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _08018F3C @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + ldr r0, _08018F40 @ =0x03000234 + adds r1, r1, r0 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r0, _08018F44 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _08018F7C + movs r3, #0 + ldr r0, _08018F48 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + mov ip, r0 + cmp r1, #0 + beq _08018F7C + movs r5, #1 + ldr r2, _08018F4C @ =gMultiplayerMissingHeartbeats +_08018F08: + ldr r1, _08018F50 @ =gMultiSioStatusFlags + adds r0, r5, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _08018F64 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _08018F68 + movs r0, #0 + ldr r1, _08018F54 @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _08018F58 @ =gBackgroundsCopyQueueCursor + ldr r0, _08018F5C @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _08018F60 @ =gBgSpritesCount + strb r4, [r0] + b _080190AC + .align 2, 0 +_08018F3C: .4byte gCurTask +_08018F40: .4byte 0x03000234 +_08018F44: .4byte gGameMode +_08018F48: .4byte gMultiplayerConnections +_08018F4C: .4byte gMultiplayerMissingHeartbeats +_08018F50: .4byte gMultiSioStatusFlags +_08018F54: .4byte 0x0000FFFF +_08018F58: .4byte gBackgroundsCopyQueueCursor +_08018F5C: .4byte gBackgroundsCopyQueueIndex +_08018F60: .4byte gBgSpritesCount +_08018F64: + movs r0, #0 + strb r0, [r2] +_08018F68: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _08018F7C + mov r1, ip + ldrb r0, [r1] + asrs r0, r3 + ands r0, r5 + cmp r0, #0 + bne _08018F08 +_08018F7C: + ldr r6, _08018FAC @ =gMultiSioRecv + ldrh r2, [r6] + cmp r2, #0x34 + bne _08018FB8 + ldr r2, _08018FB0 @ =0x00000246 + adds r4, r7, r2 + ldrb r0, [r4] + ldrb r3, [r6, #2] + cmp r0, r3 + bne _08018F92 + b _080190D4 +_08018F92: + movs r0, #0x6c + bl m4aSongNumStart + ldr r0, _08018FB4 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08018FA6 + b _080190E0 +_08018FA6: + ldrb r0, [r6, #2] + strb r0, [r4] + b _080190D4 + .align 2, 0 +_08018FAC: .4byte gMultiSioRecv +_08018FB0: .4byte 0x00000246 +_08018FB4: .4byte gMultiSioStatusFlags +_08018FB8: + cmp r2, #0x35 + bne _08019092 + movs r3, #1 + ldr r0, _08018FFC @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08019004 + movs r5, #1 + ldr r1, _08019000 @ =gMultiplayerConnections + ldrb r0, [r1] + asrs r0, r0, #1 + ands r0, r5 + cmp r0, #0 + beq _08019008 + adds r2, r6, #0 + adds r2, #0x14 + movs r4, #1 +_08018FDE: + ldrh r0, [r2] + cmp r0, #0x34 + bhi _08018FE6 + movs r3, #0 +_08018FE6: + adds r2, #0x14 + adds r5, #1 + cmp r5, #3 + bgt _08019008 + ldrb r0, [r1] + asrs r0, r5 + ands r0, r4 + cmp r0, #0 + bne _08018FDE + b _08019008 + .align 2, 0 +_08018FFC: .4byte gMultiSioStatusFlags +_08019000: .4byte gMultiplayerConnections +_08019004: + ldr r4, _0801903C @ =gMultiSioSend + strh r2, [r4] +_08019008: + cmp r3, #0 + beq _080190D4 + ldr r0, _08019040 @ =0x00000246 + adds r4, r7, r0 + ldrb r0, [r4] + ldrb r1, [r6, #2] + cmp r0, r1 + beq _08019022 + movs r0, #0x6c + bl m4aSongNumStart + ldrb r0, [r6, #2] + strb r0, [r4] +_08019022: + movs r0, #0x6a + bl m4aSongNumStart + ldrb r0, [r4] + cmp r0, #0 + bne _08019060 + ldr r1, _08019044 @ =gGameMode + ldrb r0, [r1] + cmp r0, #2 + bne _08019048 + movs r0, #3 + b _0801904A + .align 2, 0 +_0801903C: .4byte gMultiSioSend +_08019040: .4byte 0x00000246 +_08019044: .4byte gGameMode +_08019048: + movs r0, #5 +_0801904A: + strb r0, [r1] + ldr r0, _08019058 @ =gCurTask + ldr r1, [r0] + ldr r0, _0801905C @ =Task_8019348 + str r0, [r1, #8] + b _0801933A + .align 2, 0 +_08019058: .4byte gCurTask +_0801905C: .4byte Task_8019348 +_08019060: + ldr r1, _08019084 @ =gGameMode + ldrb r0, [r1] + cmp r0, #2 + beq _0801906A + movs r0, #4 +_0801906A: + strb r0, [r1] + ldr r0, _08019088 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + ldr r0, _08019084 @ =gGameMode + ldrb r0, [r0] + cmp r0, #2 + bne _0801908C + movs r0, #0 + bl CreateCourseSelect + b _0801933A + .align 2, 0 +_08019084: .4byte gGameMode +_08019088: .4byte gCurTask +_0801908C: + bl sub_8062F90 + b _0801933A +_08019092: + cmp r2, #0x35 + bls _080190D4 + ldr r1, _080190BC @ =0x0000FFFF + movs r0, #0 + bl TasksDestroyInPriorityRange + ldr r1, _080190C0 @ =gBackgroundsCopyQueueCursor + ldr r0, _080190C4 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r1, _080190C8 @ =gBgSpritesCount + movs r0, #0 + strb r0, [r1] +_080190AC: + ldr r1, _080190CC @ =gVramGraphicsCopyCursor + ldr r0, _080190D0 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _0801933A + .align 2, 0 +_080190BC: .4byte 0x0000FFFF +_080190C0: .4byte gBackgroundsCopyQueueCursor +_080190C4: .4byte gBackgroundsCopyQueueIndex +_080190C8: .4byte gBgSpritesCount +_080190CC: .4byte gVramGraphicsCopyCursor +_080190D0: .4byte gVramGraphicsCopyQueueIndex +_080190D4: + ldr r0, _08019108 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080191B8 +_080190E0: + movs r4, #1 + ldr r2, _0801910C @ =gMultiSioSend + mov r8, r2 + movs r0, #0x34 + strh r0, [r2] + ldr r3, _08019110 @ =0x00000247 + adds r0, r7, r3 + ldrb r0, [r0] + cmp r0, #0 + bne _0801912C + ldr r0, _08019114 @ =gInput + ldrh r1, [r0] + movs r0, #0x10 + ands r0, r1 + cmp r0, #0 + beq _0801911C + ldr r1, _08019118 @ =0x00000246 + adds r0, r7, r1 + strb r4, [r0] + b _0801912C + .align 2, 0 +_08019108: .4byte gMultiSioStatusFlags +_0801910C: .4byte gMultiSioSend +_08019110: .4byte 0x00000247 +_08019114: .4byte gInput +_08019118: .4byte 0x00000246 +_0801911C: + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + beq _0801912C + ldr r2, _080191A4 @ =0x00000246 + adds r1, r7, r2 + movs r0, #0 + strb r0, [r1] +_0801912C: + ldr r3, _080191A4 @ =0x00000246 + adds r0, r7, r3 + ldrb r0, [r0] + mov r1, r8 + strb r0, [r1, #2] + movs r5, #1 + ldr r1, _080191A8 @ =gMultiplayerConnections + ldrb r0, [r1] + asrs r0, r0, #1 + ands r0, r5 + movs r2, #0x80 + adds r2, r2, r7 + mov sb, r2 + movs r3, #0xb0 + adds r3, r3, r7 + mov sl, r3 + cmp r0, #0 + beq _08019172 + ldr r0, _080191AC @ =gMultiSioRecv + adds r2, r0, #0 + adds r2, #0x14 + movs r3, #1 +_08019158: + ldrh r0, [r2] + cmp r0, #0x33 + bhi _08019160 + movs r4, #0 +_08019160: + adds r2, #0x14 + adds r5, #1 + cmp r5, #3 + bgt _08019172 + ldrb r0, [r1] + asrs r0, r5 + ands r0, r3 + cmp r0, #0 + bne _08019158 +_08019172: + cmp r4, #0 + beq _08019182 + ldr r0, _080191B0 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _0801918C +_08019182: + ldr r4, _080191B4 @ =0x00000247 + adds r0, r7, r4 + ldrb r0, [r0] + cmp r0, #0 + beq _080191DC +_0801918C: + movs r0, #0x35 + mov r1, r8 + strh r0, [r1] + ldr r2, _080191A4 @ =0x00000246 + adds r0, r7, r2 + ldrb r0, [r0] + strb r0, [r1, #2] + ldr r3, _080191B4 @ =0x00000247 + adds r1, r7, r3 + movs r0, #1 + strb r0, [r1] + b _080191DC + .align 2, 0 +_080191A4: .4byte 0x00000246 +_080191A8: .4byte gMultiplayerConnections +_080191AC: .4byte gMultiSioRecv +_080191B0: .4byte gPressedKeys +_080191B4: .4byte 0x00000247 +_080191B8: + ldr r4, _08019220 @ =gMultiSioSend + movs r0, #0x34 + strh r0, [r4] + movs r0, #0x80 + lsls r0, r0, #2 + adds r6, r7, r0 + adds r0, r6, #0 + bl UpdateSpriteAnimation + adds r0, r6, #0 + bl DisplaySprite + movs r1, #0x80 + adds r1, r1, r7 + mov sb, r1 + movs r2, #0xb0 + adds r2, r2, r7 + mov sl, r2 +_080191DC: + movs r3, #0xa0 + lsls r3, r3, #1 + adds r6, r7, r3 + ldr r4, _08019224 @ =0x00000246 + adds r3, r7, r4 + ldrb r0, [r3] + lsls r1, r0, #5 + adds r1, r1, r0 + lsls r1, r1, #2 + subs r1, r1, r0 + adds r1, #0x19 + strh r1, [r6, #0x16] + ldr r0, _08019228 @ =0x00000236 + adds r1, r7, r0 + ldrh r0, [r1] + adds r0, #0x10 + strh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + movs r2, #0x80 + lsls r2, r2, #3 + cmp r0, r2 + ble _0801920C + strh r2, [r1] +_0801920C: + ldrb r0, [r3] + cmp r0, #0 + bne _0801922C + movs r1, #0x8e + lsls r1, r1, #2 + adds r0, r7, r1 + ldrh r1, [r0] + adds r1, #1 + b _08019236 + .align 2, 0 +_08019220: .4byte gMultiSioSend +_08019224: .4byte 0x00000246 +_08019228: .4byte 0x00000236 +_0801922C: + movs r4, #0x8e + lsls r4, r4, #2 + adds r0, r7, r4 + ldrh r1, [r0] + subs r1, #1 +_08019236: + ldr r3, _080192D8 @ =0x000003FF + adds r2, r3, #0 + ands r1, r2 + strh r1, [r0] + ldr r4, _080192DC @ =0x00000236 + adds r1, r7, r4 + movs r0, #0 + ldrsh r3, [r1, r0] + ldr r5, _080192E0 @ =gSineTable + adds r4, #2 + adds r2, r7, r4 + ldrh r0, [r2] + movs r4, #0x80 + lsls r4, r4, #1 + adds r0, r0, r4 + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r3, r0 + asrs r0, r0, #8 + ldr r3, _080192E4 @ =0x0000023A + adds r4, r7, r3 + strh r0, [r4] + movs r0, #0 + ldrsh r1, [r1, r0] + ldrh r0, [r2] + lsls r0, r0, #1 + adds r0, r0, r5 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r1, r0 + asrs r0, r0, #8 + movs r1, #0x8f + lsls r1, r1, #2 + adds r3, r7, r1 + strh r0, [r3] + ldr r2, _080192E8 @ =0x0000023E + adds r1, r7, r2 + ldrh r0, [r4] + ldrh r4, [r1] + adds r0, r0, r4 + strh r0, [r1] + movs r0, #0x90 + lsls r0, r0, #2 + adds r2, r7, r0 + ldrh r0, [r3] + ldrh r3, [r2] + adds r0, r0, r3 + strh r0, [r2] + ldr r3, _080192EC @ =gBgScrollRegs + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + strh r0, [r3, #4] + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + strh r0, [r3, #6] + movs r4, #0x8c + lsls r4, r4, #2 + adds r2, r7, r4 + ldr r3, [r2] + adds r1, r3, #0 + adds r1, #0x80 + str r1, [r2] + movs r0, #0x88 + lsls r0, r0, #8 + cmp r1, r0 + ble _080192CC + ldr r1, _080192F0 @ =0xFFFF7880 + adds r0, r3, r1 + str r0, [r2] +_080192CC: + mov r6, sb + ldr r0, [r2] + rsbs r0, r0, #0 + lsls r0, r0, #8 + lsrs r4, r0, #0x10 + b _08019304 + .align 2, 0 +_080192D8: .4byte 0x000003FF +_080192DC: .4byte 0x00000236 +_080192E0: .4byte gSineTable +_080192E4: .4byte 0x0000023A +_080192E8: .4byte 0x0000023E +_080192EC: .4byte gBgScrollRegs +_080192F0: .4byte 0xFFFF7880 +_080192F4: + strh r4, [r6, #0x16] + movs r2, #0x88 + lsls r2, r2, #0x10 + adds r0, r1, r2 + lsrs r4, r0, #0x10 + adds r0, r6, #0 + bl DisplaySprite +_08019304: + lsls r1, r4, #0x10 + asrs r0, r1, #0x10 + cmp r0, #0xef + ble _080192F4 + adds r4, r7, #0 + adds r4, #0xe0 + movs r5, #2 +_08019312: + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + adds r4, #0x30 + subs r5, #1 + cmp r5, #0 + bge _08019312 + mov r6, sl + movs r5, #0 +_0801932A: + lsls r0, r5, #5 + strh r0, [r6, #0x16] + adds r0, r6, #0 + bl DisplaySprite + adds r5, #1 + cmp r5, #7 + ble _0801932A +_0801933A: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/results_b__Task_80196FC.inc b/sa1/asm/non_matching/game/multiplayer/results_b__Task_80196FC.inc new file mode 100644 index 0000000000..2a22538448 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/results_b__Task_80196FC.inc @@ -0,0 +1,636 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + movs r0, #1 + str r0, [sp, #0xc] + add r0, sp, #8 + movs r1, #0 + movs r2, #2 + bl memset + ldr r0, _08019758 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r1 + mov r8, r0 + ldr r2, _0801975C @ =0x03000247 + adds r0, r1, r2 + ldrb r0, [r0] + cmp r0, #0 + bne _08019782 + ldr r0, _08019760 @ =gRepeatedKeys + ldrh r2, [r0] + movs r0, #0x10 + ands r0, r2 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + cmp r5, #0 + beq _08019768 + ldr r3, _08019764 @ =0x03000246 + adds r4, r1, r3 + ldrb r0, [r4] + cmp r0, #0 + bne _0801974E + movs r0, #0x6c + bl m4aSongNumStart +_0801974E: + mov r0, sp + ldrb r0, [r0, #0xc] + strb r0, [r4] + b _08019782 + .align 2, 0 +_08019758: .4byte gCurTask +_0801975C: .4byte 0x03000247 +_08019760: .4byte gRepeatedKeys +_08019764: .4byte 0x03000246 +_08019768: + movs r0, #0x20 + ands r0, r2 + cmp r0, #0 + beq _08019782 + ldr r2, _080197D0 @ =0x03000246 + adds r4, r1, r2 + ldrb r0, [r4] + cmp r0, #1 + bne _08019780 + movs r0, #0x6c + bl m4aSongNumStart +_08019780: + strb r5, [r4] +_08019782: + ldr r0, _080197D4 @ =gGameMode + ldrb r0, [r0] + ldr r7, _080197D8 @ =gMultiplayerConnections + cmp r0, #1 + bls _0801980A + movs r3, #0 + ldrb r0, [r7] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0801980A + movs r5, #1 + ldr r2, _080197DC @ =gMultiplayerMissingHeartbeats +_0801979C: + ldr r1, _080197E0 @ =gMultiSioStatusFlags + adds r0, r5, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _080197F4 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _080197F8 + movs r0, #0 + ldr r1, _080197E4 @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _080197E8 @ =gBackgroundsCopyQueueCursor + ldr r0, _080197EC @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _080197F0 @ =gBgSpritesCount + strb r4, [r0] + b _08019B0E + .align 2, 0 +_080197D0: .4byte 0x03000246 +_080197D4: .4byte gGameMode +_080197D8: .4byte gMultiplayerConnections +_080197DC: .4byte gMultiplayerMissingHeartbeats +_080197E0: .4byte gMultiSioStatusFlags +_080197E4: .4byte 0x0000FFFF +_080197E8: .4byte gBackgroundsCopyQueueCursor +_080197EC: .4byte gBackgroundsCopyQueueIndex +_080197F0: .4byte gBgSpritesCount +_080197F4: + movs r0, #0 + strb r0, [r2] +_080197F8: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _0801980A + ldrb r0, [r7] + asrs r0, r3 + ands r0, r5 + cmp r0, #0 + bne _0801979C +_0801980A: + movs r6, #0 + ldrb r0, [r7] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _080198F2 + mov sb, r7 + add r7, sp, #8 + movs r3, #0xe0 + mov sl, r3 + movs r0, #0 + str r0, [sp, #0x10] +_08019822: + ldr r0, _08019880 @ =gMultiSioRecv + ldr r1, [sp, #0x10] + adds r5, r1, r0 + ldrh r1, [r5] + adds r0, r1, #0 + subs r0, #0x40 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #1 + bhi _080198D0 + cmp r1, #0x41 + beq _080198AE + mov r4, r8 + add r4, sl + ldrb r0, [r5, #2] + lsls r0, r0, #7 + adds r0, #0x2b + strh r0, [r4, #0x16] + adds r0, r4, #0 + bl DisplaySprite + movs r4, #0xd0 + lsls r4, r4, #1 + add r4, r8 + ldr r0, _08019884 @ =gUnknown_080BB484 + adds r0, r6, r0 + ldrb r0, [r0] + strh r0, [r4, #0x18] + ldrb r1, [r5, #2] + movs r0, #0x5e + muls r0, r1, r0 + adds r0, #0x4b + strh r0, [r4, #0x16] + ldrb r0, [r5, #2] + cmp r0, #0 + bne _0801988C + ldr r0, [r4, #0x10] + ldr r1, _08019888 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r4, #0x10] + movs r1, #0x10 + lsls r1, r6 + mov r2, sb + ldrb r0, [r2] + bics r0, r1 + strb r0, [r2] + b _080198A2 + .align 2, 0 +_08019880: .4byte gMultiSioRecv +_08019884: .4byte gUnknown_080BB484 +_08019888: .4byte 0xFFFFFBFF +_0801988C: + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + str r0, [r4, #0x10] + movs r0, #0x10 + lsls r0, r6 + mov r3, sb + ldrb r1, [r3] + orrs r0, r1 + strb r0, [r3] +_080198A2: + adds r0, r4, #0 + bl DisplaySprite + movs r0, #0 + str r0, [sp, #0xc] + b _080198D4 +_080198AE: + mov r4, r8 + add r4, sl + adds r0, r4, #0 + bl DisplaySprite + movs r1, #0x16 + ldrsh r0, [r4, r1] + cmp r0, #0x2b + bne _080198C8 + ldrb r0, [r7] + adds r0, #1 + strb r0, [r7] + b _080198D4 +_080198C8: + ldrb r0, [r7, #1] + adds r0, #1 + strb r0, [r7, #1] + b _080198D4 +_080198D0: + movs r2, #0 + str r2, [sp, #0xc] +_080198D4: + movs r3, #0x30 + add sl, r3 + ldr r0, [sp, #0x10] + adds r0, #0x14 + str r0, [sp, #0x10] + adds r6, #1 + cmp r6, #3 + bgt _080198F2 + mov r1, sb + ldrb r0, [r1] + asrs r0, r6 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08019822 +_080198F2: + lsls r0, r6, #0x18 + lsrs r0, r0, #0x18 + mov sb, r0 + ldr r2, [sp, #0xc] + cmp r2, #0 + beq _08019952 + add r0, sp, #8 + ldrb r0, [r0] + cmp r0, #0 + beq _0801990E + add r0, sp, #8 + ldrb r0, [r0, #1] + cmp r0, #0 + bne _0801991C +_0801990E: + ldr r1, _08019918 @ =0x00000247 + add r1, r8 + movs r0, #0 + strb r0, [r1] + b _08019952 + .align 2, 0 +_08019918: .4byte 0x00000247 +_0801991C: + ldr r0, _08019940 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + ldr r2, _08019944 @ =gFlags + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + ldr r0, _08019948 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + bne _0801994C + movs r0, #0 + bl CreateCourseSelect + b _08019BEA + .align 2, 0 +_08019940: .4byte gCurTask +_08019944: .4byte gFlags +_08019948: .4byte gGameMode +_0801994C: + bl sub_8062F90 + b _08019BEA +_08019952: + movs r0, #8 + str r0, [sp] + movs r4, #0xf0 + str r4, [sp, #4] + movs r0, #0 + movs r1, #0x74 + movs r2, #0 + movs r3, #0x7c + bl sa2__sub_80064A8 + movs r0, #0x10 + str r0, [sp] + str r4, [sp, #4] + movs r0, #0 + movs r1, #0x7c + movs r2, #8 + movs r3, #0x74 + bl sa2__sub_80064A8 + ldr r2, _08019AC0 @ =0x040000D4 + ldr r0, _08019AC4 @ =gBgOffsetsHBlankPrimary + ldr r4, [r0] + ldr r0, _08019AC8 @ =gHBlankCopySize + ldrb r3, [r0] + lsls r0, r3, #4 + adds r1, r0, r4 + movs r7, #0x84 + lsls r7, r7, #0x18 + adds r5, r0, #0 + movs r6, #0x80 +_0801998E: + str r4, [r2] + str r1, [r2, #4] + lsls r0, r3, #4 + asrs r0, r0, #2 + orrs r0, r7 + str r0, [r2, #8] + ldr r0, [r2, #8] + adds r1, r1, r5 + subs r6, #0x10 + cmp r6, #0 + bge _0801998E + movs r2, #0x8e + lsls r2, r2, #2 + add r2, r8 + ldrh r0, [r2] + adds r0, #1 + ldr r3, _08019ACC @ =0x000003FF + adds r1, r3, #0 + ands r0, r1 + strh r0, [r2] + ldr r0, _08019AD0 @ =0x00000236 + add r0, r8 + movs r1, #0 + ldrsh r4, [r0, r1] + ldr r3, _08019AD4 @ =gSineTable + ldrh r1, [r2] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r1, r2 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + adds r2, r4, #0 + muls r2, r0, r2 + lsls r2, r2, #8 + asrs r2, r2, #0x10 + lsls r1, r1, #1 + adds r1, r1, r3 + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + adds r1, r4, #0 + muls r1, r0, r1 + lsls r1, r1, #8 + asrs r1, r1, #0x10 + ldr r3, _08019AD8 @ =0x0000023E + add r3, r8 + ldrh r0, [r3] + adds r0, r0, r2 + strh r0, [r3] + movs r4, #0x90 + lsls r4, r4, #2 + add r4, r8 + ldrh r0, [r4] + adds r0, r0, r1 + strh r0, [r4] + ldr r5, _08019ADC @ =0x00000242 + add r5, r8 + ldrh r0, [r5] + subs r0, r0, r2 + strh r0, [r5] + movs r2, #0x91 + lsls r2, r2, #2 + add r2, r8 + ldrh r0, [r2] + subs r0, r0, r1 + strh r0, [r2] + ldr r1, _08019AE0 @ =gBgScrollRegs + ldrh r0, [r3] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + strh r0, [r1, #4] + ldrh r0, [r4] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + strh r0, [r1, #6] + ldrh r0, [r5] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + strh r0, [r1, #8] + ldrh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + strh r0, [r1, #0xa] + ldr r4, _08019AE4 @ =gPressedKeys + ldrh r1, [r4] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08019A54 + movs r0, #0x6b + bl m4aSongNumStart + ldr r1, _08019AE8 @ =0x00000247 + add r1, r8 + movs r0, #0 + strb r0, [r1] +_08019A54: + ldr r0, _08019AEC @ =gInput + ldrh r1, [r0] + movs r0, #0x30 + ands r0, r1 + cmp r0, #0 + bne _08019A90 + ldrh r1, [r4] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08019A90 + ldr r0, _08019AF0 @ =0x00000246 + add r0, r8 + ldrb r2, [r0] + cmp r2, #0 + bne _08019A80 + mov r1, sb + subs r1, #1 + add r0, sp, #8 + ldrb r0, [r0] + cmp r1, r0 + bne _08019A9A +_08019A80: + cmp r2, #1 + bne _08019A90 + mov r0, sb + subs r0, #1 + add r1, sp, #8 + ldrb r1, [r1, #1] + cmp r0, r1 + bne _08019A9A +_08019A90: + ldr r0, _08019AE8 @ =0x00000247 + add r0, r8 + ldrb r0, [r0] + cmp r0, #0 + beq _08019B34 +_08019A9A: + ldr r4, _08019AE8 @ =0x00000247 + add r4, r8 + ldrb r0, [r4] + cmp r0, #0 + bne _08019AAA + movs r0, #0x6a + bl m4aSongNumStart +_08019AAA: + ldr r5, _08019AF4 @ =gMultiSioSend + movs r0, #0x41 + strh r0, [r5] + ldr r0, _08019AF0 @ =0x00000246 + add r0, r8 + ldrb r0, [r0] + strb r0, [r5, #2] + movs r0, #1 + strb r0, [r4] + b _08019B42 + .align 2, 0 +_08019AC0: .4byte 0x040000D4 +_08019AC4: .4byte gBgOffsetsHBlankPrimary +_08019AC8: .4byte gHBlankCopySize +_08019ACC: .4byte 0x000003FF +_08019AD0: .4byte 0x00000236 +_08019AD4: .4byte gSineTable +_08019AD8: .4byte 0x0000023E +_08019ADC: .4byte 0x00000242 +_08019AE0: .4byte gBgScrollRegs +_08019AE4: .4byte gPressedKeys +_08019AE8: .4byte 0x00000247 +_08019AEC: .4byte gInput +_08019AF0: .4byte 0x00000246 +_08019AF4: .4byte gMultiSioSend +_08019AF8: + ldr r1, _08019B1C @ =0x0000FFFF + movs r0, #0 + bl TasksDestroyInPriorityRange + ldr r1, _08019B20 @ =gBackgroundsCopyQueueCursor + ldr r0, _08019B24 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r1, _08019B28 @ =gBgSpritesCount + movs r0, #0 + strb r0, [r1] +_08019B0E: + ldr r1, _08019B2C @ =gVramGraphicsCopyCursor + ldr r0, _08019B30 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _08019BEA + .align 2, 0 +_08019B1C: .4byte 0x0000FFFF +_08019B20: .4byte gBackgroundsCopyQueueCursor +_08019B24: .4byte gBackgroundsCopyQueueIndex +_08019B28: .4byte gBgSpritesCount +_08019B2C: .4byte gVramGraphicsCopyCursor +_08019B30: .4byte gVramGraphicsCopyQueueIndex +_08019B34: + ldr r5, _08019BFC @ =gMultiSioSend + movs r0, #0x40 + strh r0, [r5] + ldr r0, _08019C00 @ =0x00000246 + add r0, r8 + ldrb r0, [r0] + strb r0, [r5, #2] +_08019B42: + movs r6, #0 + ldr r0, _08019C04 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + adds r7, r0, #0 + cmp r1, #0 + beq _08019B7E + movs r2, #0 +_08019B54: + ldr r0, _08019C08 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r0, r6 + beq _08019B6A + ldr r0, _08019C0C @ =gMultiSioRecv + adds r5, r2, r0 + ldrh r0, [r5] + cmp r0, #0x41 + bhi _08019AF8 +_08019B6A: + adds r2, #0x14 + adds r6, #1 + cmp r6, #3 + bgt _08019B7E + ldrb r0, [r7] + asrs r0, r6 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08019B54 +_08019B7E: + mov r4, r8 + adds r4, #0x80 + movs r2, #0x8c + lsls r2, r2, #2 + add r2, r8 + ldr r3, [r2] + adds r1, r3, #0 + adds r1, #0x80 + str r1, [r2] + movs r0, #0xa4 + lsls r0, r0, #8 + cmp r1, r0 + ble _08019B9E + ldr r1, _08019C10 @ =0xFFFF5C80 + adds r0, r3, r1 + str r0, [r2] +_08019B9E: + ldr r0, [r2] + rsbs r0, r0, #0 + lsls r0, r0, #8 + lsrs r5, r0, #0x10 + lsls r1, r5, #0x10 + asrs r0, r1, #0x10 + mov r6, r8 + adds r6, #0xb0 + cmp r0, #0xef + bgt _08019BCA +_08019BB2: + strh r5, [r4, #0x16] + movs r2, #0xa4 + lsls r2, r2, #0x10 + adds r0, r1, r2 + lsrs r5, r0, #0x10 + adds r0, r4, #0 + bl DisplaySprite + lsls r1, r5, #0x10 + asrs r0, r1, #0x10 + cmp r0, #0xef + ble _08019BB2 +_08019BCA: + movs r4, #0xe8 + lsls r4, r4, #1 + add r4, r8 + adds r0, r4, #0 + bl DisplaySprite + adds r4, r6, #0 + movs r6, #0 +_08019BDA: + lsls r0, r6, #5 + strh r0, [r4, #0x16] + adds r0, r4, #0 + bl DisplaySprite + adds r6, #1 + cmp r6, #7 + ble _08019BDA +_08019BEA: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08019BFC: .4byte gMultiSioSend +_08019C00: .4byte 0x00000246 +_08019C04: .4byte gMultiplayerConnections +_08019C08: .4byte 0x04000128 +_08019C0C: .4byte gMultiSioRecv +_08019C10: .4byte 0xFFFF5C80 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/sa1_mp_player__Task_CreateMultiplayerPlayer.inc b/sa1/asm/non_matching/game/multiplayer/sa1_mp_player__Task_CreateMultiplayerPlayer.inc new file mode 100644 index 0000000000..66bb72db51 --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/sa1_mp_player__Task_CreateMultiplayerPlayer.inc @@ -0,0 +1,1275 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _080134CC @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r4, r0 + adds r6, r7, #0 + adds r0, #0x38 + adds r0, r4, r0 + str r0, [sp] + ldr r1, _080134D0 @ =0x03000056 + adds r3, r4, r1 + ldrb r2, [r3] + lsls r0, r2, #2 + adds r0, r0, r2 + lsls r0, r0, #2 + ldr r1, _080134D4 @ =gMultiSioRecv + adds r0, r0, r1 + mov r8, r0 + ldr r5, _080134D8 @ =gMultiSioStatusFlags + mov sb, r5 + movs r5, #1 + adds r1, r5, #0 + lsls r1, r2 + mov r2, sb + ldr r0, [r2] + ands r0, r1 + cmp r0, #0 + bne _08013448 + b _08013810 +_08013448: + ldr r0, _080134DC @ =0x03000061 + adds r2, r4, r0 + movs r1, #0 + mov sl, r1 + mov r0, sl + strb r0, [r2] + adds r1, r5, #0 + ldrb r3, [r3] + lsls r1, r3 + mov r3, sb + ldr r0, [r3] + ands r0, r1 + cmp r0, #0 + bne _08013466 + b _08013810 +_08013466: + mov r5, r8 + ldrh r1, [r5] + movs r0, #0x80 + lsls r0, r0, #5 + cmp r1, r0 + beq _08013474 + b _08013810 +_08013474: + mov r0, sl + strb r0, [r2] + movs r1, #2 + ldrsh r0, [r5, r1] + ldr r2, _080134E0 @ =0x03000050 + adds r3, r4, r2 + movs r5, #0 + ldrsh r1, [r3, r5] + subs r0, r0, r1 + str r0, [r7, #0x44] + mov r1, r8 + movs r2, #4 + ldrsh r0, [r1, r2] + ldr r5, _080134E4 @ =0x03000052 + adds r2, r4, r5 + movs r5, #0 + ldrsh r1, [r2, r5] + subs r0, r0, r1 + str r0, [r7, #0x48] + mov r1, r8 + ldrh r0, [r1, #2] + strh r0, [r3] + ldrh r0, [r1, #4] + strh r0, [r2] + ldr r0, [r7, #0x44] + cmp r0, #0 + bge _080134AC + rsbs r0, r0, #0 +_080134AC: + cmp r0, #0x40 + bgt _080134BC + ldr r0, [r7, #0x48] + cmp r0, #0 + bge _080134B8 + rsbs r0, r0, #0 +_080134B8: + cmp r0, #0x40 + ble _080134E8 +_080134BC: + adds r0, r6, #0 + adds r0, #0x66 + movs r1, #0 + strh r1, [r0] + adds r0, #2 + strh r1, [r0] + b _080134FC + .align 2, 0 +_080134CC: .4byte gCurTask +_080134D0: .4byte 0x03000056 +_080134D4: .4byte gMultiSioRecv +_080134D8: .4byte gMultiSioStatusFlags +_080134DC: .4byte 0x03000061 +_080134E0: .4byte 0x03000050 +_080134E4: .4byte 0x03000052 +_080134E8: + ldr r0, [r7, #0x44] + lsls r0, r0, #8 + ldr r2, _0801358C @ =0x03000066 + adds r1, r4, r2 + strh r0, [r1] + ldr r0, [r7, #0x48] + lsls r0, r0, #8 + ldr r3, _08013590 @ =0x03000068 + adds r1, r4, r3 + strh r0, [r1] +_080134FC: + adds r2, r6, #0 + adds r2, #0x57 + ldrb r1, [r2] + mov r4, r8 + ldrb r0, [r4, #0xa] + adds r4, r0, #0 + bics r4, r1 + adds r5, r4, #0 + adds r0, r4, #0 + movs r1, #2 + ands r0, r1 + mov sl, r2 + movs r2, #0x56 + adds r2, r2, r6 + mov sb, r2 + cmp r0, #0 + beq _08013526 + movs r0, #0 + ldrsb r0, [r2, r0] + bl CreateItemTask_Invincibility +_08013526: + movs r0, #1 + ands r0, r4 + cmp r0, #0 + beq _08013538 + mov r3, sb + movs r0, #0 + ldrsb r0, [r3, r0] + bl CreateItemTask_Shield_Normal +_08013538: + movs r0, #8 + ands r4, r0 + cmp r4, #0 + beq _0801354A + mov r4, sb + movs r0, #0 + ldrsb r0, [r4, r0] + bl CreateItemTask_Shield_Magnetic +_0801354A: + movs r0, #0x50 + ands r5, r0 + cmp r5, #0 + beq _0801355C + mov r5, sb + movs r0, #0 + ldrsb r0, [r5, r0] + bl CreateItemTask_Confusion +_0801355C: + mov r1, r8 + ldrb r0, [r1, #0xa] + mov r2, sl + strb r0, [r2] + ldrh r1, [r1, #8] + adds r0, r6, #0 + adds r0, #0x54 + strh r1, [r0] + ldr r3, _08013594 @ =0x04000128 + ldr r0, [r3] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + mov r4, sb + ldrb r4, [r4] + cmp r0, r4 + beq _08013598 + movs r0, #0xc0 + lsls r0, r0, #3 + ands r0, r1 + lsrs r0, r0, #9 + adds r1, r6, #0 + adds r1, #0x64 + strb r0, [r1] + b _08013644 + .align 2, 0 +_0801358C: .4byte 0x03000066 +_08013590: .4byte 0x03000068 +_08013594: .4byte 0x04000128 +_08013598: + ldr r0, [r3] + lsls r0, r0, #0x1a + adds r4, r6, #0 + adds r4, #0x64 + ldrb r2, [r4] + lsrs r0, r0, #0x1e + cmp r0, r2 + beq _08013644 + ldr r1, _08013674 @ =gMultiplayerPlayerTasks + lsls r0, r2, #2 + adds r0, r0, r1 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r1, r0 + ldr r0, [r3] + lsls r0, r0, #0x1a + ldr r2, _08013678 @ =0x03000064 + adds r1, r1, r2 + lsrs r0, r0, #0x1e + ldrb r1, [r1] + cmp r0, r1 + bne _08013644 + ldr r0, [r3] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + strb r0, [r4] + ldr r4, _0801367C @ =gPlayer + ldr r0, [r4, #0x10] + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + subs r1, #0x18 + ands r0, r1 + movs r3, #5 + rsbs r3, r3, #0 + mov sl, r3 + ands r0, r3 + adds r1, #0x10 + ands r0, r1 + movs r1, #2 + orrs r0, r1 + ldr r1, _08013680 @ =0xFFFFFBFF + ands r0, r1 + ldr r1, _08013684 @ =0xFFFFFEFF + ands r0, r1 + str r0, [r4, #0x10] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + adds r1, r4, #0 + adds r1, #0x3d + movs r0, #0 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x40 + movs r1, #4 + strb r1, [r0] + movs r0, #0x3c + strh r0, [r4, #0x1c] + ldr r0, [r4, #0x10] + ldr r2, _08013688 @ =0xFFBFFFFF + ands r0, r2 + str r0, [r4, #0x10] + ldr r0, [r6, #0x5c] + mov r3, sl + ands r0, r3 + str r0, [r6, #0x5c] + ldr r0, [r5, #0x5c] + ands r0, r1 + cmp r0, #0 + beq _08013644 + ldr r0, [r4, #0x10] + ands r0, r2 + str r0, [r4, #0x10] + ldr r0, [r5, #0x5c] + ands r0, r3 + str r0, [r5, #0x5c] +_08013644: + ldr r0, _0801368C @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _080136D4 + mov r4, r8 + ldrh r1, [r4, #6] + ldrb r3, [r4, #6] + ldr r2, _08013690 @ =gMultiplayerCharRings + mov r5, sb + ldrb r0, [r5] + adds r0, r0, r2 + lsrs r1, r1, #8 + strb r1, [r0] + adds r0, r6, #0 + adds r0, #0x6a + strh r3, [r0] + ldrb r0, [r5] + cmp r0, #3 + bne _080136A0 + cmp r3, #8 + bne _08013694 + movs r3, #0xc4 + lsls r3, r3, #1 + b _080136B2 + .align 2, 0 +_08013674: .4byte gMultiplayerPlayerTasks +_08013678: .4byte 0x03000064 +_0801367C: .4byte gPlayer +_08013680: .4byte 0xFFFFFBFF +_08013684: .4byte 0xFFFFFEFF +_08013688: .4byte 0xFFBFFFFF +_0801368C: .4byte gGameMode +_08013690: .4byte gMultiplayerCharRings +_08013694: + cmp r3, #0x12 + bne _080136A0 + ldr r3, _0801369C @ =0x00000189 + b _080136B2 + .align 2, 0 +_0801369C: .4byte 0x00000189 +_080136A0: + ldr r0, _080136D0 @ =gPlayerCharacterIdleAnims + mov r5, sb + ldrb r1, [r5] + lsls r1, r1, #1 + adds r1, r1, r0 + ldrh r0, [r1] + adds r0, r3, r0 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 +_080136B2: + adds r5, r7, #0 + adds r5, #0x20 + adds r0, r6, #0 + adds r0, #0x58 + str r0, [sp, #0x10] + movs r1, #0x22 + adds r1, r1, r7 + mov sl, r1 + adds r2, r6, #0 + adds r2, #0x50 + movs r4, #0x52 + adds r4, r4, r6 + mov ip, r4 + b _0801377A + .align 2, 0 +_080136D0: .4byte gPlayerCharacterIdleAnims +_080136D4: + subs r0, #4 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _0801375C + movs r5, #0 + str r5, [sp, #8] + mov r0, r8 + ldrh r1, [r0, #6] + ldr r3, _08013750 @ =0x000003FF + ands r3, r1 + ldr r0, _08013754 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + mov r2, sb + ldrb r2, [r2] + cmp r0, r2 + beq _08013704 + lsrs r1, r1, #0xc + lsls r1, r1, #0x10 + ldr r0, [r6, #0x5c] + orrs r0, r1 + str r0, [r6, #0x5c] +_08013704: + movs r1, #0 + adds r5, r7, #0 + adds r5, #0x20 + adds r4, r6, #0 + adds r4, #0x58 + str r4, [sp, #0x10] + movs r0, #0x22 + adds r0, r0, r7 + mov sl, r0 + adds r2, r6, #0 + adds r2, #0x50 + movs r4, #0x52 + adds r4, r4, r6 + mov ip, r4 + ldr r4, [r6, #0x5c] +_08013722: + movs r0, #0x80 + lsls r0, r0, #9 + lsls r0, r1 + ands r0, r4 + cmp r0, #0 + beq _08013738 + ldr r0, [sp, #8] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #8] +_08013738: + adds r1, #1 + cmp r1, #2 + bls _08013722 + mov r1, sb + ldrb r0, [r1] + ldr r4, _08013758 @ =gMultiplayerCharRings + adds r0, r0, r4 + mov r1, sp + ldrb r1, [r1, #8] + strb r1, [r0] + b _0801377A + .align 2, 0 +_08013750: .4byte 0x000003FF +_08013754: .4byte 0x04000128 +_08013758: .4byte gMultiplayerCharRings +_0801375C: + mov r2, r8 + ldrh r3, [r2, #6] + adds r5, r7, #0 + adds r5, #0x20 + adds r4, r6, #0 + adds r4, #0x58 + str r4, [sp, #0x10] + movs r0, #0x22 + adds r0, r0, r7 + mov sl, r0 + adds r2, r6, #0 + adds r2, #0x50 + movs r1, #0x52 + adds r1, r1, r6 + mov ip, r1 +_0801377A: + mov r4, r8 + ldrb r0, [r4, #0xb] + movs r1, #7 + mov sb, r1 + mov r4, sb + ands r4, r0 + mov sb, r4 + ldrh r0, [r7, #0xa] + cmp r0, r3 + bne _08013794 + ldrb r0, [r5] + cmp r0, sb + beq _0801379C +_08013794: + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r7, #0x28] + str r0, [r7, #0x30] +_0801379C: + adds r0, r6, #0 + adds r0, #0x54 + ldrh r1, [r0] + movs r4, #4 + adds r0, r4, #0 + ands r0, r1 + cmp r0, #0 + beq _080137E4 + ldr r0, [r6, #0x5c] + ands r0, r4 + ldr r4, _08013808 @ =gPlayer + cmp r0, #0 + beq _080137C8 + ldr r0, [r4, #0x10] + ldr r1, _0801380C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r4, #0x10] + ldr r0, [r6, #0x5c] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r6, #0x5c] +_080137C8: + ldr r1, [r4, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _080137E4 + ldr r0, [r4, #0x28] + cmp r0, r7 + bne _080137E4 + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r4, #0x10] +_080137E4: + strh r3, [r7, #0xa] + mov r0, sb + strb r0, [r5] + mov r1, r8 + ldrb r0, [r1, #0xb] + lsls r0, r0, #0x18 + asrs r0, r0, #0x1b + ldr r3, [sp, #0x10] + strb r0, [r3] + ldrb r0, [r1, #0xc] + mov r4, sl + strb r0, [r4] + ldrb r0, [r1, #0xd] + lsls r0, r0, #2 + ldr r5, [sp] + strh r0, [r5] + b _08013890 + .align 2, 0 +_08013808: .4byte gPlayer +_0801380C: .4byte 0xFFBFFFFF +_08013810: + adds r2, r6, #0 + adds r2, #0x50 + adds r0, r6, #0 + adds r0, #0x66 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + ldrh r1, [r2] + adds r0, r0, r1 + strh r0, [r2] + adds r4, r6, #0 + adds r4, #0x52 + adds r0, r6, #0 + adds r0, #0x68 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + ldrh r3, [r4] + adds r0, r0, r3 + strh r0, [r4] + adds r3, r6, #0 + adds r3, #0x61 + ldrb r0, [r3] + adds r1, r0, #1 + strb r1, [r3] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + mov ip, r4 + cmp r0, #0x1e + bls _08013890 + ldr r1, _08013874 @ =0x0000FFFF + movs r0, #0 + bl TasksDestroyInPriorityRange + ldr r1, _08013878 @ =gBackgroundsCopyQueueCursor + ldr r0, _0801387C @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r1, _08013880 @ =gBgSpritesCount + movs r0, #0 + strb r0, [r1] + ldr r1, _08013884 @ =gVramGraphicsCopyCursor + ldr r0, _08013888 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0801388C @ =gGameMode + ldrb r0, [r0] + bl LinkCommunicationError + b _08013DB4 + .align 2, 0 +_08013874: .4byte 0x0000FFFF +_08013878: .4byte gBackgroundsCopyQueueCursor +_0801387C: .4byte gBackgroundsCopyQueueIndex +_08013880: .4byte gBgSpritesCount +_08013884: .4byte gVramGraphicsCopyCursor +_08013888: .4byte gVramGraphicsCopyQueueIndex +_0801388C: .4byte gGameMode +_08013890: + movs r3, #3 + ldr r4, _08013A60 @ =gPlayerCharacterIdleAnims + movs r5, #6 + ldrsh r0, [r4, r5] + ldrh r1, [r7, #0xa] + adds r5, r6, #0 + adds r5, #0x54 + str r5, [sp, #0xc] + ldr r5, _08013A64 @ =gCamera + cmp r0, r1 + ble _080138C4 + mov r8, r4 +_080138A8: + lsls r0, r3, #0x18 + movs r3, #0xff + lsls r3, r3, #0x18 + adds r0, r0, r3 + lsrs r3, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + blt _080138C4 + lsls r0, r0, #1 + add r0, r8 + movs r4, #0 + ldrsh r0, [r0, r4] + cmp r0, r1 + bgt _080138A8 +_080138C4: + ldrh r0, [r2] + ldrh r1, [r5] + subs r0, r0, r1 + strh r0, [r7, #0x16] + mov r1, ip + ldrh r0, [r1] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r7, #0x18] + ldrh r0, [r2] + ldrh r1, [r5] + subs r0, r0, r1 + ldr r2, [sp] + strh r0, [r2, #6] + mov r3, ip + ldrh r0, [r3] + ldrh r1, [r5, #2] + subs r0, r0, r1 + strh r0, [r2, #8] + ldr r4, [sp, #0xc] + ldrh r1, [r4] + movs r0, #0x80 + lsls r0, r0, #4 + ands r0, r1 + cmp r0, #0 + beq _08013908 + adds r1, r7, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r7, #0x28] + str r0, [r7, #0x30] +_08013908: + adds r0, r7, #0 + bl UpdateSpriteAnimation + ldr r3, _08013A68 @ =gMultiplayerPlayerTasks + ldr r2, _08013A6C @ =0x04000128 + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r0, r0, #2 + adds r0, r0, r3 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp, #4] + ldr r0, _08013A70 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _08013934 + cmp r0, #5 + bne _080139C6 +_08013934: + ldr r1, _08013A74 @ =gMultiplayerRanks + ldr r0, [r2] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, r0, r1 + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _080139C6 + movs r5, #1 + mov sl, r5 + movs r4, #0 + ldr r0, [r3] + cmp r0, #0 + beq _080139B8 + ldr r0, _08013A78 @ =gMultiplayerConnections + ldrb r0, [r0] + mov ip, r0 + movs r0, #0x10 + mov sb, r0 + mov r8, r2 + adds r5, r3, #0 +_08013964: + ldr r0, [r5] + ldrh r0, [r0, #6] + str r0, [sp, #0x14] + mov r2, sb + lsls r2, r4 + mov r1, ip + ands r2, r1 + adds r0, r4, #4 + asrs r2, r0 + mov r3, r8 + ldr r0, [r3] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + mov r1, sb + lsls r1, r0 + mov r0, ip + ands r1, r0 + ldr r0, [r3] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, #4 + asrs r1, r0 + cmp r2, r1 + bne _080139AA + ldr r1, [sp, #0x14] + ldr r2, _08013A7C @ =0x03000054 + adds r0, r1, r2 + ldrh r1, [r0] + movs r0, #0x80 + lsls r0, r0, #1 + ands r0, r1 + cmp r0, #0 + bne _080139AA + movs r3, #0 + mov sl, r3 +_080139AA: + adds r5, #4 + adds r4, #1 + cmp r4, #3 + bhi _080139B8 + ldr r0, [r5] + cmp r0, #0 + bne _08013964 +_080139B8: + mov r4, sl + cmp r4, #0 + beq _080139C6 + bl CreateRoomEvent + movs r1, #7 + strb r1, [r0] +_080139C6: + ldr r0, _08013A80 @ =gStageFlags + ldrh r1, [r0] + movs r3, #1 + adds r0, r3, #0 + ands r0, r1 + ldr r4, _08013A84 @ =gPlayer + cmp r0, #0 + bne _08013ACC + ldr r5, [sp, #0xc] + ldrh r1, [r5] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + bne _08013ACC + ldr r0, [sp, #4] + adds r0, #0x57 + ldrb r1, [r0] + movs r2, #0x80 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _08013ACC + adds r0, r4, #0 + adds r0, #0x26 + ldrb r1, [r0] + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + beq _08013A02 + b _08013B10 +_08013A02: + adds r0, r6, #0 + adds r0, #0x57 + ldrb r1, [r0] + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _08013ACC + ldr r1, [sp, #4] + ldr r0, [r1, #0x5c] + ands r0, r3 + cmp r0, #0 + bne _08013ACC + movs r3, #0x1c + ldrsh r0, [r4, r3] + cmp r0, #0 + bne _08013ACC + ldr r0, [r4, #0x10] + ands r0, r2 + cmp r0, #0 + bne _08013ACC + ldr r0, _08013A70 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + beq _08013AAE + adds r0, r6, #0 + adds r0, #0x56 + ldrb r1, [r0] + ldr r0, _08013A6C @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r1, r0 + bne _08013A46 + b _08013BD4 +_08013A46: + ldr r0, _08013A88 @ =gMultiplayerCharacters + adds r0, r1, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _08013A9C + cmp r0, #1 + bgt _08013A8C + cmp r0, #0 + beq _08013A96 + b _08013BD4 + .align 2, 0 +_08013A60: .4byte gPlayerCharacterIdleAnims +_08013A64: .4byte gCamera +_08013A68: .4byte gMultiplayerPlayerTasks +_08013A6C: .4byte 0x04000128 +_08013A70: .4byte gGameMode +_08013A74: .4byte gMultiplayerRanks +_08013A78: .4byte gMultiplayerConnections +_08013A7C: .4byte 0x03000054 +_08013A80: .4byte gStageFlags +_08013A84: .4byte gPlayer +_08013A88: .4byte gMultiplayerCharacters +_08013A8C: + cmp r0, #2 + beq _08013AA2 + cmp r0, #3 + beq _08013AA8 + b _08013BD4 +_08013A96: + bl sa2__sub_8016D20 + b _08013BD4 +_08013A9C: + bl sa2__sub_801707C + b _08013BD4 +_08013AA2: + bl sa2__sub_8017670 + b _08013BD4 +_08013AA8: + bl sa2__sub_8017C28 + b _08013BD4 +_08013AAE: + adds r1, r6, #0 + adds r1, #0x56 + ldr r0, _08013AC8 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + ldrb r1, [r1] + lsrs r0, r0, #0x1e + cmp r1, r0 + bne _08013AC2 + b _08013BD4 +_08013AC2: + bl sa2__sub_8018120 + b _08013BD4 + .align 2, 0 +_08013AC8: .4byte 0x04000128 +_08013ACC: + adds r0, r4, #0 + adds r0, #0x26 + ldrb r1, [r0] + movs r2, #0x80 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _08013B10 + adds r0, r6, #0 + adds r0, #0x57 + ldrb r1, [r0] + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _08013B10 + movs r5, #0x1c + ldrsh r0, [r4, r5] + cmp r0, #0 + bne _08013B10 + ldr r0, [r4, #0x10] + ands r0, r2 + cmp r0, #0 + bne _08013B10 + ldr r1, _08013B98 @ =gMultiplayerRanks + adds r0, r6, #0 + adds r0, #0x56 + ldrb r0, [r0] + adds r0, r0, r1 + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _08013BD4 +_08013B10: + ldr r0, _08013B9C @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + beq _08013BB0 + adds r4, r6, #0 + adds r4, #0x56 + ldrb r1, [r4] + ldr r0, _08013BA0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r1, r0 + beq _08013B76 + ldr r0, _08013BA4 @ =gMultiplayerCharacters + adds r0, r1, r0 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bgt _08013B76 + cmp r0, #1 + blt _08013B76 + ldr r1, [r6, #0x5c] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + beq _08013B76 + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r6, #0x5c] + ldr r2, _08013BA8 @ =gPlayer + adds r0, r2, #0 + adds r0, #0x26 + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08013B66 + ldr r0, [r2, #0x10] + ldr r1, _08013BAC @ =0xFFBFFFFF + ands r0, r1 + str r0, [r2, #0x10] +_08013B66: + bl CreateRoomEvent + movs r2, #0 + movs r1, #8 + strb r1, [r0] + ldrb r1, [r4] + strb r1, [r0, #1] + strb r2, [r0, #2] +_08013B76: + ldr r2, _08013BA8 @ =gPlayer + ldr r1, [r2, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08013BD4 + ldr r0, [r2, #0x28] + cmp r0, r7 + bne _08013BD4 + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r2, #0x10] + b _08013BCC + .align 2, 0 +_08013B98: .4byte gMultiplayerRanks +_08013B9C: .4byte gGameMode +_08013BA0: .4byte 0x04000128 +_08013BA4: .4byte gMultiplayerCharacters +_08013BA8: .4byte gPlayer +_08013BAC: .4byte 0xFFBFFFFF +_08013BB0: + ldr r1, [r4, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08013BD4 + ldr r0, [r4, #0x28] + cmp r0, r7 + bne _08013BD4 + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r4, #0x10] +_08013BCC: + adds r1, r6, #0 + adds r1, #0x60 + movs r0, #0x1e + strb r0, [r1] +_08013BD4: + ldr r0, [sp, #0xc] + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08013C42 + ldr r0, [r7, #0x10] + movs r1, #0x20 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r7, #0x10] + ldr r2, _08013C18 @ =sa2__gUnknown_030054B8 + ldrb r1, [r2] + adds r0, r1, #1 + strb r0, [r2] + movs r0, #0x20 + orrs r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + ldr r0, [r7, #0x10] + orrs r0, r1 + str r0, [r7, #0x10] + ldr r2, [sp, #0xc] + ldrh r1, [r2] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08013C1C + movs r0, #0xff + lsls r0, r0, #8 + ldr r3, [sp] + strh r0, [r3, #2] + b _08013C24 + .align 2, 0 +_08013C18: .4byte sa2__gUnknown_030054B8 +_08013C1C: + movs r0, #0x80 + lsls r0, r0, #1 + ldr r4, [sp] + strh r0, [r4, #2] +_08013C24: + ldr r5, [sp, #0xc] + ldrh r1, [r5] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08013C38 + ldr r1, [sp] + ldrh r0, [r1, #2] + rsbs r0, r0, #0 + strh r0, [r1, #2] +_08013C38: + adds r0, r7, #0 + ldr r1, [sp] + bl TransformSprite + b _08013C88 +_08013C42: + ldr r2, [r7, #0x10] + movs r0, #0x21 + rsbs r0, r0, #0 + ands r2, r0 + str r2, [r7, #0x10] + ldr r3, [sp, #0xc] + ldrh r1, [r3] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08013C60 + movs r0, #0x80 + lsls r0, r0, #3 + orrs r2, r0 + b _08013C64 +_08013C60: + ldr r0, _08013C7C @ =0xFFFFFBFF + ands r2, r0 +_08013C64: + str r2, [r7, #0x10] + ldr r4, [sp, #0xc] + ldrh r1, [r4] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _08013C80 + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #4 + orrs r0, r1 + b _08013C86 + .align 2, 0 +_08013C7C: .4byte 0xFFFFFBFF +_08013C80: + ldr r0, [r7, #0x10] + ldr r1, _08013DC4 @ =0xFFFFF7FF + ands r0, r1 +_08013C86: + str r0, [r7, #0x10] +_08013C88: + ldr r1, [r7, #0x10] + ldr r0, _08013DC8 @ =0xFFFFCFFF + ands r1, r0 + str r1, [r7, #0x10] + ldr r5, [sp, #0xc] + ldrh r2, [r5] + movs r0, #0x30 + ands r0, r2 + lsls r0, r0, #8 + orrs r1, r0 + str r1, [r7, #0x10] + ldrh r3, [r5] + movs r0, #0x40 + ands r0, r3 + cmp r0, #0 + beq _08013CAA + b _08013DB4 +_08013CAA: + ldr r0, _08013DCC @ =gStageTime + ldr r0, [r0] + movs r4, #2 + ands r0, r4 + movs r1, #0x57 + adds r1, r1, r6 + mov sl, r1 + cmp r0, #0 + bne _08013CFE + ldrb r1, [r1] + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + bne _08013CFE + ldr r2, [r6, #0x5c] + movs r0, #1 + ands r0, r2 + cmp r0, #0 + bne _08013CFE + ldr r1, _08013DD0 @ =gMultiplayerRanks + adds r0, r6, #0 + adds r0, #0x56 + ldrb r0, [r0] + adds r0, r0, r1 + movs r1, #0 + ldrsb r1, [r0, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _08013CFE + adds r0, r6, #0 + adds r0, #0x60 + ldrb r0, [r0] + cmp r0, #0 + bne _08013DB4 + movs r0, #4 + ands r0, r3 + cmp r0, #0 + bne _08013DB4 + ands r2, r4 + cmp r2, #0 + bne _08013DB4 +_08013CFE: + ldr r2, [sp, #0xc] + ldrh r1, [r2] + movs r0, #0x80 + ands r0, r1 + movs r3, #0x80 + lsls r3, r3, #3 + adds r1, r3, #0 + cmp r0, #0 + beq _08013D16 + movs r4, #0x88 + lsls r4, r4, #3 + adds r1, r4, #0 +_08013D16: + strh r1, [r7, #0x1a] + ldr r0, [r7, #0x10] + ldr r1, _08013DD4 @ =0xFFFFFE7F + ands r0, r1 + str r0, [r7, #0x10] + mov r5, sl + ldrb r1, [r5] + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + beq _08013DAE + ldr r0, _08013DD8 @ =gGameMode + ldrb r1, [r0] + adds r5, r0, #0 + cmp r1, #3 + beq _08013D3A + cmp r1, #5 + bne _08013D6A +_08013D3A: + ldr r0, _08013DDC @ =gMultiplayerConnections + ldrb r3, [r0] + adds r0, r6, #0 + adds r0, #0x56 + ldrb r0, [r0] + movs r2, #0x10 + adds r1, r2, #0 + lsls r1, r0 + ands r1, r3 + adds r0, #4 + asrs r1, r0 + ldr r4, _08013DE0 @ =0x04000128 + ldr r0, [r4] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r2, r0 + ands r3, r2 + ldr r0, [r4] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, #4 + asrs r3, r0 + cmp r1, r3 + bne _08013D74 +_08013D6A: + ldrb r0, [r5] + cmp r0, #3 + beq _08013DAE + cmp r0, #5 + beq _08013DAE +_08013D74: + adds r0, r6, #0 + adds r0, #0x60 + ldrb r0, [r0] + cmp r0, #0 + bne _08013DAE + adds r1, r6, #0 + adds r1, #0x56 + ldr r0, _08013DE0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + ldrb r1, [r1] + lsrs r0, r0, #0x1e + cmp r1, r0 + beq _08013DAE + ldr r0, [r7, #0x10] + movs r1, #0x80 + lsls r1, r1, #1 + orrs r0, r1 + str r0, [r7, #0x10] + ldr r2, _08013DE4 @ =gDispCnt + ldrh r0, [r2] + movs r3, #0x80 + lsls r3, r3, #8 + adds r1, r3, #0 + orrs r0, r1 + strh r0, [r2] + ldr r1, _08013DE8 @ =gWinRegs + ldr r0, _08013DEC @ =0x0000083F + strh r0, [r1, #0xa] +_08013DAE: + adds r0, r7, #0 + bl DisplaySprite +_08013DB4: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08013DC4: .4byte 0xFFFFF7FF +_08013DC8: .4byte 0xFFFFCFFF +_08013DCC: .4byte gStageTime +_08013DD0: .4byte gMultiplayerRanks +_08013DD4: .4byte 0xFFFFFE7F +_08013DD8: .4byte gGameMode +_08013DDC: .4byte gMultiplayerConnections +_08013DE0: .4byte 0x04000128 +_08013DE4: .4byte gDispCnt +_08013DE8: .4byte gWinRegs +_08013DEC: .4byte 0x0000083F + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/sa1_mp_player__sa2__sub_8017670.inc b/sa1/asm/non_matching/game/multiplayer/sa1_mp_player__sa2__sub_8017670.inc new file mode 100644 index 0000000000..66a530319b --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/sa1_mp_player__sa2__sub_8017670.inc @@ -0,0 +1,757 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x24 + ldr r2, _080147EC @ =gPlayer + ldr r0, [r2, #0x64] + adds r0, #0xc + mov r8, r0 + ldr r0, _080147F0 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + mov sb, r7 + ldr r1, [r2, #0x10] + lsrs r0, r1, #5 + str r0, [sp, #0x14] + movs r0, #1 + ldr r3, [sp, #0x14] + ands r3, r0 + str r3, [sp, #0x14] + movs r0, #8 + ands r1, r0 + cmp r1, #0 + beq _0801477E + ldr r0, [r2, #0x28] + cmp r0, r7 + bne _0801477E + bl sa2__sub_8017F34 +_0801477E: + ldr r0, _080147F4 @ =gGameMode + ldrb r1, [r0] + adds r5, r0, #0 + cmp r1, #3 + beq _0801478C + cmp r1, #5 + bne _080147BC +_0801478C: + ldr r0, _080147F8 @ =gMultiplayerConnections + ldrb r3, [r0] + adds r0, r7, #0 + adds r0, #0x56 + ldrb r0, [r0] + movs r2, #0x10 + adds r1, r2, #0 + lsls r1, r0 + ands r1, r3 + adds r0, #4 + asrs r1, r0 + ldr r4, _080147FC @ =0x04000128 + ldr r0, [r4] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r2, r0 + ands r3, r2 + ldr r0, [r4] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r0, #4 + asrs r3, r0 + cmp r1, r3 + bne _080147C6 +_080147BC: + ldrb r0, [r5] + cmp r0, #3 + beq _08014800 + cmp r0, #5 + beq _08014800 +_080147C6: + bl sa2__sub_8018300 + cmp r0, #0 + bne _080147D0 + b _08014CFC +_080147D0: + ldr r0, [r7, #0x4c] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + bne _080147DC + b _08014CFC +_080147DC: + ldr r2, _080147EC @ =gPlayer + ldr r0, [r2, #0x10] + subs r1, #0x41 + ands r0, r1 + str r0, [r2, #0x10] + movs r0, #0 + str r0, [r7, #0x4c] + b _08014CFC + .align 2, 0 +_080147EC: .4byte gPlayer +_080147F0: .4byte gCurTask +_080147F4: .4byte gGameMode +_080147F8: .4byte gMultiplayerConnections +_080147FC: .4byte 0x04000128 +_08014800: + ldr r6, _08014870 @ =gPlayer + adds r0, r6, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _08014820 + adds r0, r6, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + bne _08014820 + b _08014CFC +_08014820: + adds r1, r7, #0 + adds r1, #0x60 + ldrb r2, [r1] + str r1, [sp, #0x20] + cmp r2, #0 + beq _08014838 + ldr r5, [r7, #0x5c] + movs r0, #4 + ands r5, r0 + cmp r5, #0 + bne _08014838 + b _08014C98 +_08014838: + movs r5, #0 + strb r5, [r1] + ldr r0, _08014874 @ =0xFFFFFEFC + adds r4, r0, #0 + mov r1, sb + ldrh r1, [r1, #0xa] + adds r0, r4, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #2 + bls _0801489C + bl sa2__sub_80181E0 + cmp r0, #0 + beq _08014878 + ldr r0, [r7, #0x4c] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + bne _08014862 + b _08014CFC +_08014862: + ldr r0, [r6, #0x10] + subs r1, #0x41 + ands r0, r1 + str r0, [r6, #0x10] + str r5, [r7, #0x4c] + b _08014CFC + .align 2, 0 +_08014870: .4byte gPlayer +_08014874: .4byte 0xFFFFFEFC +_08014878: + mov r2, sb + ldrh r2, [r2, #0xa] + adds r0, r4, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #2 + bls _0801489C + mov r3, r8 + ldr r0, [r3, #0x30] + movs r1, #1 + rsbs r1, r1, #0 + cmp r0, r1 + beq _0801489C + mov r4, sb + ldr r0, [r4, #0x30] + cmp r0, r1 + beq _0801489C + b _08014CFC +_0801489C: + ldr r0, _080149A8 @ =gPlayer + mov sl, r0 + ldrb r4, [r0, #0xe] + rsbs r0, r4, #0 + add r1, sp, #0x10 + strb r0, [r1] + mov r2, sl + ldrb r3, [r2, #0xf] + rsbs r2, r3, #0 + mov r0, sp + adds r0, #0x11 + strb r2, [r0] + adds r0, #1 + strb r4, [r0] + adds r0, #1 + strb r3, [r0] + add r0, sp, #0xc + movs r2, #4 + bl memcpy + movs r3, #0x50 + adds r3, r3, r7 + mov r8, r3 + movs r4, #0 + ldrsh r1, [r3, r4] + adds r6, r7, #0 + adds r6, #0x52 + movs r0, #0 + ldrsh r2, [r6, r0] + adds r0, r7, #0 + adds r0, #0x66 + movs r4, #0 + ldrsh r3, [r0, r4] + adds r0, #2 + movs r4, #0 + ldrsh r0, [r0, r4] + str r0, [sp] + adds r5, r7, #0 + adds r5, #0x54 + ldrh r0, [r5] + lsrs r0, r0, #7 + movs r4, #1 + ands r0, r4 + str r0, [sp, #4] + str r4, [sp, #8] + mov r0, sb + bl sa2__sub_800D0A0 + adds r2, r0, #0 + ldr r0, [r7, #0x4c] + movs r1, #0x20 + ands r0, r1 + mov r3, r8 + str r3, [sp, #0x18] + str r6, [sp, #0x1c] + mov r8, r5 + cmp r0, #0 + beq _08014922 + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _08014922 + mov r4, sl + ldr r0, [r4, #0x10] + subs r1, #0x41 + ands r0, r1 + str r0, [r4, #0x10] +_08014922: + str r2, [r7, #0x4c] + movs r0, #0x80 + lsls r0, r0, #0xe + ands r0, r2 + cmp r0, #0 + beq _08014934 + movs r0, #0x1e + ldr r1, [sp, #0x20] + strb r0, [r1] +_08014934: + ldr r2, [sp, #0x18] + movs r3, #0 + ldrsh r1, [r2, r3] + ldr r4, [sp, #0x1c] + movs r0, #0 + ldrsh r2, [r4, r0] + ldr r5, _080149A8 @ =gPlayer + add r3, sp, #0xc + str r3, [sp] + mov r0, sb + adds r3, r5, #0 + bl Coll_Player_Entity_RectIntersection + cmp r0, #0 + bne _08014954 + b _08014A6A +_08014954: + mov r4, r8 + ldrh r0, [r4] + lsls r2, r0, #0x10 + lsrs r0, r2, #0x17 + movs r4, #1 + ands r0, r4 + adds r1, r5, #0 + adds r1, #0x27 + ldrb r1, [r1] + cmp r0, r1 + beq _0801496C + b _08014A6A +_0801496C: + ldr r1, _080149AC @ =0xFFFFFEFC + adds r0, r1, #0 + mov r3, sb + ldrh r3, [r3, #0xa] + adds r0, r0, r3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #2 + bhi _08014A6A + ldr r0, _080149B0 @ =gStageFlags + ldrh r3, [r0] + lsrs r1, r3, #7 + ands r1, r4 + lsrs r2, r2, #0x13 + adds r0, r4, #0 + bics r0, r2 + cmp r1, r0 + beq _08014A6A + movs r0, #0x80 + ands r0, r3 + cmp r0, #0 + bne _080149B4 + ldr r0, [r5, #4] + asrs r0, r0, #8 + ldr r4, [sp, #0x1c] + movs r2, #0 + ldrsh r1, [r4, r2] + cmp r0, r1 + bgt _080149C2 + b _08014A6A + .align 2, 0 +_080149A8: .4byte gPlayer +_080149AC: .4byte 0xFFFFFEFC +_080149B0: .4byte gStageFlags +_080149B4: + ldr r0, [r5, #4] + asrs r0, r0, #8 + ldr r3, [sp, #0x1c] + movs r4, #0 + ldrsh r1, [r3, r4] + cmp r0, r1 + bge _08014A6A +_080149C2: + ldr r4, _08014A10 @ =gPlayer + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + orrs r0, r1 + str r0, [r4, #0x10] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + adds r2, r4, #0 + movs r1, #0 + movs r0, #0 + strh r0, [r2, #0xc] + strh r0, [r2, #8] + adds r0, r2, #0 + adds r0, #0x40 + strb r1, [r0] + subs r0, #3 + strb r1, [r0] + adds r0, #1 + strb r1, [r0] + mov r1, sb + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08014A14 + ldr r0, [r2, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2, #0x10] + b _08014A1C + .align 2, 0 +_08014A10: .4byte gPlayer +_08014A14: + ldr r0, [r4, #0x10] + movs r1, #1 + orrs r0, r1 + str r0, [r4, #0x10] +_08014A1C: + ldr r0, [r7, #0x5c] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + bne _08014A62 + bl CreateRoomEvent + movs r1, #8 + strb r1, [r0] + adds r1, r7, #0 + adds r1, #0x56 + ldrb r1, [r1] + strb r1, [r0, #1] + movs r1, #1 + strb r1, [r0, #2] + ldr r0, _08014A50 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08014A58 + ldr r0, [r7, #0x5c] + ldr r1, _08014A54 @ =0xFFFFFEFF + ands r0, r1 + b _08014A60 + .align 2, 0 +_08014A50: .4byte gStageFlags +_08014A54: .4byte 0xFFFFFEFF +_08014A58: + ldr r0, [r7, #0x5c] + movs r1, #0x80 + lsls r1, r1, #1 + orrs r0, r1 +_08014A60: + str r0, [r7, #0x5c] +_08014A62: + ldr r0, [r7, #0x5c] + movs r1, #4 + orrs r0, r1 + str r0, [r7, #0x5c] +_08014A6A: + ldr r0, [r7, #0x5c] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + bne _08014A76 + b _08014CFC +_08014A76: + ldr r6, _08014A98 @ =gPlayer + adds r0, r6, #0 + bl Player_TryJump + cmp r0, #0 + beq _08014AA0 + movs r0, #0x1e + ldr r2, [sp, #0x20] + strb r0, [r2] + ldr r0, [r6, #0x10] + ldr r1, _08014A9C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r6, #0x10] + ldr r0, [r7, #0x5c] + movs r1, #5 + rsbs r1, r1, #0 + b _08014C7C + .align 2, 0 +_08014A98: .4byte gPlayer +_08014A9C: .4byte 0xFFBFFFFF +_08014AA0: + ldr r3, _08014B3C @ =0xFFFFFEFC + adds r0, r3, #0 + mov r4, sb + ldrh r4, [r4, #0xa] + adds r0, r0, r4 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + ldr r5, _08014B40 @ =gStageFlags + cmp r0, #2 + bhi _08014AF4 + ldr r0, [r6] + asrs r1, r0, #8 + ldr r2, _08014B44 @ =gCamera + movs r3, #0x18 + ldrsh r0, [r2, r3] + cmp r1, r0 + ble _08014AF4 + movs r4, #0x1a + ldrsh r0, [r2, r4] + cmp r1, r0 + bge _08014AF4 + ldrh r4, [r5] + lsrs r0, r4, #7 + movs r3, #1 + adds r2, r3, #0 + bics r2, r0 + mov r1, r8 + ldrh r0, [r1] + lsrs r0, r0, #3 + adds r1, r3, #0 + bics r1, r0 + cmp r2, r1 + bne _08014AF4 + ldr r1, [r7, #0x5c] + lsrs r1, r1, #8 + adds r0, r3, #0 + bics r0, r1 + cmp r0, r2 + bne _08014AF4 + ldr r2, [sp, #0x14] + cmp r2, #0 + beq _08014B50 +_08014AF4: + ldr r2, _08014B48 @ =gPlayer + ldr r0, [r2, #0x10] + ldr r1, _08014B4C @ =0xFFBFFFFF + ands r0, r1 + str r0, [r2, #0x10] + ldr r0, [r7, #0x5c] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r7, #0x5c] + adds r2, #0x40 + movs r0, #0 + strb r0, [r2] + ldrh r0, [r5] + lsrs r0, r0, #7 + movs r3, #1 + adds r2, r3, #0 + bics r2, r0 + mov r4, r8 + ldrh r1, [r4] + lsrs r1, r1, #3 + adds r0, r3, #0 + bics r0, r1 + cmp r2, r0 + bne _08014B34 + ldr r1, [r7, #0x5c] + lsrs r1, r1, #8 + adds r0, r3, #0 + bics r0, r1 + cmp r0, r2 + bne _08014B34 + b _08014CFC +_08014B34: + movs r0, #0x1e + ldr r1, [sp, #0x20] + strb r0, [r1] + b _08014CFC + .align 2, 0 +_08014B3C: .4byte 0xFFFFFEFC +_08014B40: .4byte gStageFlags +_08014B44: .4byte gCamera +_08014B48: .4byte gPlayer +_08014B4C: .4byte 0xFFBFFFFF +_08014B50: + movs r2, #0xf + ldrsb r2, [r6, r2] + movs r0, #0x80 + ands r0, r4 + ldr r3, [sp, #0x18] + movs r4, #0 + ldrsh r1, [r3, r4] + lsls r1, r1, #8 + mov r8, r1 + cmp r0, #0 + bne _08014BAC + ldr r1, [sp, #0x1c] + movs r3, #0 + ldrsh r0, [r1, r3] + mov r1, sb + adds r1, #0x2d + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + add r1, sp, #0xc + ldrb r1, [r1, #3] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + lsls r5, r0, #8 + subs r0, r0, r2 + mov r4, r8 + asrs r1, r4, #8 + adds r2, r6, #0 + adds r2, #0x27 + ldrb r2, [r2] + movs r3, #8 + rsbs r3, r3, #0 + ldr r4, _08014BA8 @ =sa2__sub_801EC3C + str r4, [sp] + bl sa2__sub_801F100 + cmp r0, #0 + bge _08014BFC + lsls r0, r0, #8 + subs r5, r5, r0 + b _08014BE8 + .align 2, 0 +_08014BA8: .4byte sa2__sub_801EC3C +_08014BAC: + ldr r1, [sp, #0x1c] + movs r3, #0 + ldrsh r0, [r1, r3] + mov r1, sb + adds r1, #0x2f + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + add r1, sp, #0xc + ldrb r1, [r1, #3] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + lsls r5, r0, #8 + adds r0, r0, r2 + mov r4, r8 + asrs r1, r4, #8 + adds r2, r6, #0 + adds r2, #0x27 + ldrb r2, [r2] + ldr r3, _08014C3C @ =sa2__sub_801EC3C + str r3, [sp] + movs r3, #8 + bl sa2__sub_801F100 + cmp r0, #0 + bge _08014BFC + lsls r0, r0, #8 + adds r5, r5, r0 +_08014BE8: + ldr r0, [r6, #0x10] + ldr r1, _08014C40 @ =0xFFBFFFFF + ands r0, r1 + movs r1, #2 + orrs r0, r1 + str r0, [r6, #0x10] + ldr r0, [r7, #0x5c] + subs r1, #7 + ands r0, r1 + str r0, [r7, #0x5c] +_08014BFC: + ldr r3, _08014C44 @ =gPlayer + mov r0, r8 + str r0, [r3] + str r5, [r3, #4] + ldr r0, [r7, #0x5c] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + beq _08014C58 + ldr r2, [r3, #0x10] + movs r0, #8 + orrs r2, r0 + subs r0, #0xd + ands r2, r0 + adds r0, #2 + ands r2, r0 + str r2, [r3, #0x10] + mov r1, sb + str r1, [r3, #0x28] + movs r0, #0 + strh r0, [r3, #0xa] + ldr r0, [r1, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + ands r0, r1 + cmp r0, #0 + beq _08014C48 + movs r0, #2 + rsbs r0, r0, #0 + ands r2, r0 + b _08014C4C + .align 2, 0 +_08014C3C: .4byte sa2__sub_801EC3C +_08014C40: .4byte 0xFFBFFFFF +_08014C44: .4byte gPlayer +_08014C48: + movs r0, #1 + orrs r2, r0 +_08014C4C: + str r2, [r3, #0x10] + ldr r0, [r7, #0x5c] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + bne _08014C6C +_08014C58: + bl CreateRoomEvent + movs r2, #0 + movs r1, #8 + strb r1, [r0] + adds r1, r7, #0 + adds r1, #0x56 + ldrb r1, [r1] + strb r1, [r0, #1] + strb r2, [r0, #2] +_08014C6C: + ldr r0, _08014C84 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08014C8C + ldr r0, [r7, #0x5c] + ldr r1, _08014C88 @ =0xFFFFFEFF +_08014C7C: + ands r0, r1 + str r0, [r7, #0x5c] + b _08014CFC + .align 2, 0 +_08014C84: .4byte gStageFlags +_08014C88: .4byte 0xFFFFFEFF +_08014C8C: + ldr r0, [r7, #0x5c] + movs r1, #0x80 + lsls r1, r1, #1 + orrs r0, r1 + str r0, [r7, #0x5c] + b _08014CFC +_08014C98: + subs r0, r2, #1 + strb r0, [r1] + ldr r0, [r6, #0x10] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + beq _08014CFC + ldr r0, [r6, #0x28] + cmp r0, sb + bne _08014CFC + adds r0, r7, #0 + adds r0, #0x50 + movs r2, #0 + ldrsh r1, [r0, r2] + adds r0, #2 + movs r3, #0 + ldrsh r2, [r0, r3] + adds r0, #0x14 + movs r4, #0 + ldrsh r3, [r0, r4] + adds r0, #2 + movs r4, #0 + ldrsh r0, [r0, r4] + str r0, [sp] + adds r0, r7, #0 + adds r0, #0x54 + ldrh r0, [r0] + lsrs r0, r0, #7 + movs r4, #1 + ands r0, r4 + str r0, [sp, #4] + str r5, [sp, #8] + mov r0, sb + bl sa2__sub_800D0A0 + adds r2, r0, #0 + ldr r0, [r7, #0x4c] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + beq _08014CFA + adds r0, r2, #0 + ands r0, r1 + cmp r0, #0 + bne _08014CFA + ldr r0, [r6, #0x10] + subs r1, #0x41 + ands r0, r1 + str r0, [r6, #0x10] +_08014CFA: + str r2, [r7, #0x4c] +_08014CFC: + add sp, #0x24 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/multiplayer/unk_1__Task_801D200.inc b/sa1/asm/non_matching/game/multiplayer/unk_1__Task_801D200.inc new file mode 100644 index 0000000000..6b1939c74a --- /dev/null +++ b/sa1/asm/non_matching/game/multiplayer/unk_1__Task_801D200.inc @@ -0,0 +1,177 @@ +.include "constants/constants.inc" + +.syntax unified + +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + ldr r0, _0801D228 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp] + movs r0, #0 + str r0, [sp, #0x18] + ldr r2, _0801D22C @ =gMultiplayerConnections + ldrb r0, [r2] + movs r1, #1 + b _0801D244 + .align 2, 0 +_0801D228: .4byte gCurTask +_0801D22C: .4byte gMultiplayerConnections +_0801D230: + ldr r0, [sp, #0x18] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #0x18] + cmp r0, #3 + bhi _0801D24A + ldrb r0, [r2] + ldr r3, [sp, #0x18] + asrs r0, r3 +_0801D244: + ands r0, r1 + cmp r0, #0 + bne _0801D230 +_0801D24A: + movs r0, #0x14 + ldr r4, [sp, #0x18] + cmp r4, #3 + beq _0801D25A + movs r0, #0 + cmp r4, #2 + bne _0801D25A + movs r0, #0x28 +_0801D25A: + movs r6, #0 + ldr r7, [sp, #0x18] + cmp r6, r7 + bhs _0801D336 + ldr r1, [sp] + adds r1, #0x60 + str r1, [sp, #0x10] + ldr r3, [sp] + adds r3, #0x62 + str r3, [sp, #0x14] + ldr r4, _0801D2DC @ =gLoadedSaveGame + str r4, [sp, #8] + str r0, [sp, #4] +_0801D274: + movs r5, #0 + lsls r7, r6, #1 + mov sl, r7 + lsls r0, r6, #2 + lsls r1, r6, #0x10 + mov sb, r1 + adds r3, r6, #1 + str r3, [sp, #0xc] + adds r0, r0, r6 + lsls r0, r0, #3 + ldr r4, [sp, #4] + adds r4, r4, r0 + mov r8, r4 +_0801D28E: + mov r7, sl + adds r0, r7, r6 + lsls r0, r0, #3 + ldr r1, [sp] + adds r2, r1, r0 + lsls r0, r5, #3 + ldr r3, [sp, #0x10] + ldrh r3, [r3] + adds r0, r0, r3 + strh r0, [r2, #0xa] + ldr r4, [sp, #0x14] + ldrh r0, [r4] + mov r7, r8 + adds r3, r0, r7 + strh r3, [r2, #0xc] + ldr r0, _0801D2E0 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + mov r4, sb + lsrs r1, r4, #0x10 + cmp r0, r1 + bne _0801D2E8 + ldr r7, _0801D2E4 @ =gLoadedSaveGame + 0x10 + adds r1, r5, r7 + ldrb r0, [r1] + subs r0, #0x70 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x19 + bhi _0801D2D2 + adds r0, r3, #0 + adds r0, #8 + strh r0, [r2, #0xc] +_0801D2D2: + adds r0, r1, #0 + adds r1, r2, #0 + bl sub_8052F78 + b _0801D320 + .align 2, 0 +_0801D2DC: .4byte gLoadedSaveGame +_0801D2E0: .4byte 0x04000128 +_0801D2E4: .4byte gLoadedSaveGame + 0x10 +_0801D2E8: + ldr r0, _0801D348 @ =gUnknown_03005008 + adds r1, r6, r0 + ldrb r0, [r1] + lsls r0, r0, #4 + adds r0, r0, r5 + mov ip, r0 + ldr r0, [sp, #8] + movs r7, #0xe1 + lsls r7, r7, #2 + adds r4, r0, r7 + mov r7, ip + adds r0, r7, r4 + ldrb r0, [r0] + subs r0, #0x70 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x19 + bhi _0801D312 + adds r0, r3, #0 + adds r0, #8 + strh r0, [r2, #0xc] +_0801D312: + ldrb r0, [r1] + lsls r0, r0, #4 + adds r0, r0, r4 + adds r0, r0, r5 + adds r1, r2, #0 + bl sub_8052F78 +_0801D320: + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #5 + bls _0801D28E + ldr r1, [sp, #0xc] + lsls r0, r1, #0x18 + lsrs r6, r0, #0x18 + ldr r3, [sp, #0x18] + cmp r6, r3 + blo _0801D274 +_0801D336: + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0801D348: .4byte gUnknown_03005008 + +.syntax divided diff --git a/sa1/asm/non_matching/game/player_name_input_menu__CreatePlayerNameInputMenu.inc b/sa1/asm/non_matching/game/player_name_input_menu__CreatePlayerNameInputMenu.inc new file mode 100644 index 0000000000..c0541ce204 --- /dev/null +++ b/sa1/asm/non_matching/game/player_name_input_menu__CreatePlayerNameInputMenu.inc @@ -0,0 +1,585 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x44 + movs r6, #0 + ldr r2, _0805847C @ =gDispCnt + ldr r1, _08058480 @ =gBgCntRegs + movs r4, #0 + ldr r0, _08058484 @ =0x00001C06 + strh r0, [r1, #2] + ldr r0, _08058488 @ =0x00001A09 + strh r0, [r1, #4] + ldr r0, _0805848C @ =gBgScrollRegs + strh r6, [r0, #4] + strh r6, [r0, #6] + strh r6, [r0, #8] + strh r6, [r0, #0xa] + movs r0, #0xd9 + lsls r0, r0, #6 + strh r0, [r2] + ldr r1, _08058490 @ =gBldRegs + movs r0, #0x1f + strh r0, [r1] + ldr r0, _08058494 @ =gWinRegs + movs r1, #1 + mov r8, r1 + movs r5, #1 + strh r5, [r0] + strh r5, [r0, #4] + bl sub_80535FC + ldr r0, _08058498 @ =sub_8058830 + movs r7, #0x80 + lsls r7, r7, #1 + movs r2, #0x80 + lsls r2, r2, #6 + str r6, [sp] + adds r1, r7, #0 + movs r3, #0 + bl TaskCreate + adds r6, r0, #0 + ldrh r0, [r6, #6] + ldr r2, _0805849C @ =0x03000024 + adds r0, r0, r2 + strh r4, [r0] + ldrh r0, [r6, #6] + ldr r3, _080584A0 @ =0x03000028 + adds r0, r0, r3 + strh r4, [r0] + ldrh r0, [r6, #6] + ldr r1, _080584A4 @ =0x0300002C + adds r0, r0, r1 + strh r4, [r0] + ldrh r0, [r6, #6] + adds r2, #0xc + adds r0, r0, r2 + strh r4, [r0] + ldrh r0, [r6, #6] + adds r3, #0x2c + adds r0, r0, r3 + strh r4, [r0] + ldrh r0, [r6, #6] + adds r1, #0xd0 + adds r0, r0, r1 + strh r4, [r0] + ldrh r0, [r6, #6] + subs r1, #0xfc + adds r0, r0, r1 + movs r1, #0x1e + strh r1, [r0, #0xa] + strh r1, [r0, #0xc] + strh r5, [r0, #0xe] + strh r4, [r0, #8] + movs r1, #3 + strh r1, [r0, #0x10] + mov r2, r8 + strb r2, [r0, #0x16] + strh r4, [r0, #0x12] + ldrh r0, [r6, #6] + subs r3, #0x3c + adds r3, r3, r0 + mov sb, r3 + strh r4, [r3] + strh r5, [r3, #2] + movs r0, #2 + strh r0, [r3, #4] + strh r4, [r3, #6] + strh r7, [r3, #8] + strb r2, [r3, #0xa] + movs r0, #0 + mov r8, r0 + add r7, sp, #0x30 + mov r1, sp + adds r1, #0x2f + str r1, [sp, #0x40] + mov r2, sp + adds r2, #0x2c + str r2, [sp, #0x34] + mov r3, sp + adds r3, #0x2d + str r3, [sp, #0x38] + mov r0, sp + adds r0, #0x2e + str r0, [sp, #0x3c] + ldr r1, _080584A8 @ =gLoadedSaveGame + mov sl, r1 + ldr r5, _080584AC @ =gUnknown_08688492 +_0805843C: + ldr r0, _080584A8 @ =gLoadedSaveGame + adds r0, #0x10 + mov r2, r8 + adds r3, r2, r0 + ldrb r0, [r3] + subs r0, #0x20 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x69 + bhi _080584BC + ldrh r2, [r6, #6] + adds r2, r4, r2 + ldr r0, _080584B0 @ =0x030000C8 + adds r0, r0, r2 + mov ip, r0 + ldrb r0, [r3] + subs r0, #0x20 + lsls r0, r0, #1 + adds r0, r0, r5 + ldr r2, _080584B4 @ =0x00001001 + adds r1, r2, #0 + ldrh r0, [r0] + adds r1, r1, r0 + mov r0, ip + strh r1, [r0] + ldrh r2, [r6, #6] + adds r2, r4, r2 + ldr r1, _080584B8 @ =0x030000CA + adds r1, r1, r2 + mov ip, r1 + b _080584DC + .align 2, 0 +_0805847C: .4byte gDispCnt +_08058480: .4byte gBgCntRegs +_08058484: .4byte 0x00001C06 +_08058488: .4byte 0x00001A09 +_0805848C: .4byte gBgScrollRegs +_08058490: .4byte gBldRegs +_08058494: .4byte gWinRegs +_08058498: .4byte sub_8058830 +_0805849C: .4byte 0x03000024 +_080584A0: .4byte 0x03000028 +_080584A4: .4byte 0x0300002C +_080584A8: .4byte gLoadedSaveGame +_080584AC: .4byte gUnknown_08688492 +_080584B0: .4byte 0x030000C8 +_080584B4: .4byte 0x00001001 +_080584B8: .4byte 0x030000CA +_080584BC: + movs r0, #0x20 + strb r0, [r3] + ldrh r1, [r6, #6] + adds r1, r4, r1 + ldr r0, _080587EC @ =0x030000C8 + adds r1, r1, r0 + ldr r2, _080587F0 @ =0x00001001 + adds r0, r2, #0 + ldrh r2, [r5] + adds r0, r0, r2 + strh r0, [r1] + ldrh r2, [r6, #6] + adds r2, r4, r2 + ldr r0, _080587F4 @ =0x030000CA + adds r0, r0, r2 + mov ip, r0 +_080584DC: + ldrb r0, [r3] + subs r0, #0x20 + lsls r0, r0, #1 + adds r0, r0, r5 + ldr r2, _080587F8 @ =0x00001002 + adds r1, r2, #0 + ldrh r0, [r0] + adds r1, r1, r0 + mov r0, ip + strh r1, [r0] + ldrh r2, [r6, #6] + adds r2, r4, r2 + ldr r1, _080587FC @ =0x030000E0 + adds r1, r1, r2 + mov ip, r1 + ldrb r0, [r3] + subs r0, #0x20 + lsls r0, r0, #1 + adds r0, r0, r5 + ldr r2, _08058800 @ =0x00001015 + adds r1, r2, #0 + ldrh r0, [r0] + adds r1, r1, r0 + mov r0, ip + strh r1, [r0] + ldrh r2, [r6, #6] + adds r2, r4, r2 + ldr r1, _08058804 @ =0x030000E2 + adds r2, r2, r1 + ldrb r0, [r3] + subs r0, #0x20 + lsls r0, r0, #1 + adds r0, r0, r5 + ldr r3, _08058808 @ =0x00001016 + adds r1, r3, #0 + ldrh r0, [r0] + adds r1, r1, r0 + strh r1, [r2] + adds r4, #4 + movs r0, #1 + add r8, r0 + mov r1, r8 + cmp r1, #5 + ble _0805843C + movs r2, #5 + mov r8, r2 + mov r3, sl + ldrb r0, [r3, #0x15] + ldrh r1, [r6, #6] + cmp r0, #0x20 + bne _0805855A + mov r2, sl + adds r2, #0x10 +_08058546: + movs r0, #1 + rsbs r0, r0, #0 + add r8, r0 + mov r3, r8 + cmp r3, #0 + blt _0805855A + adds r0, r3, r2 + ldrb r0, [r0] + cmp r0, #0x20 + beq _08058546 +_0805855A: + ldr r0, _0805880C @ =0x030000F8 + adds r1, r1, r0 + mov r0, r8 + adds r0, #1 + strh r0, [r1] + bl UiGfxStackInit + movs r0, #0x23 + strb r0, [r7] + movs r2, #0 + ldr r1, [sp, #0x40] + strb r2, [r1] + ldr r3, _08058810 @ =gUiGraphics + mov sl, r3 + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + add r0, sl + ldr r0, [r0] + str r0, [sp, #0x18] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08058814 @ =gUiGraphics + 0x4 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x24] + movs r0, #0xa0 + lsls r0, r0, #7 + str r0, [sp, #0x1c] + movs r2, #0x20 + str r2, [sp, #0x28] + movs r0, #0 + ldr r3, [sp, #0x34] + strb r0, [r3] + movs r2, #2 + ldr r1, [sp, #0x38] + strb r2, [r1] + ldr r0, _08058818 @ =gUnknown_08684D3C + str r0, [sp, #0x14] + movs r0, #0xa0 + lsls r0, r0, #3 + str r0, [sp, #0x20] + movs r0, #0x15 + ldr r3, [sp, #0x3c] + strb r0, [r3] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _0805881C @ =gUiGraphics + 0x8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08058820 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + movs r1, #0x10 + add r1, sl + mov r8, r1 + add r0, r8 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08058824 @ =gUiGraphics + 0x14 + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + mov r5, sl + adds r5, #0x18 + adds r0, r0, r5 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + movs r0, #0x24 + strb r0, [r7] + movs r4, #1 + ldr r0, [sp, #0x40] + strb r4, [r0] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + add r0, sl + ldr r0, [r0] + str r0, [sp, #0x18] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08058814 @ =gUiGraphics + 0x4 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x24] + movs r0, #0xa0 + lsls r0, r0, #6 + str r0, [sp, #0x1c] + movs r2, #0x20 + str r2, [sp, #0x28] + movs r0, #0 + ldr r3, [sp, #0x34] + strb r0, [r3] + ldr r1, [sp, #0x38] + strb r4, [r1] + ldr r0, _08058828 @ =gUnknown_08685D3C + str r0, [sp, #0x14] + movs r0, #0x80 + lsls r0, r0, #4 + str r0, [sp, #0x20] + movs r3, #0x15 + ldr r2, [sp, #0x3c] + strb r3, [r2] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _0805881C @ =gUiGraphics + 0x8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08058820 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + add r0, r8 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08058824 @ =gUiGraphics + 0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r5 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + movs r0, #0x25 + strb r0, [r7] + ldr r2, [sp, #0x40] + strb r4, [r2] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08058814 @ =gUiGraphics + 0x4 + adds r0, r0, r3 + ldr r0, [r0] + str r0, [sp, #0x24] + movs r0, #0x20 + str r0, [sp, #0x28] + movs r2, #2 + ldr r1, [sp, #0x34] + strb r2, [r1] + ldr r3, [sp, #0x38] + strb r4, [r3] + movs r0, #4 + ldr r1, [sp, #0x3c] + strb r0, [r1] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r2, _0805881C @ =gUiGraphics + 0x8 + adds r0, r0, r2 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08058820 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + add r0, r8 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08058824 @ =gUiGraphics + 0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r5 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + movs r0, #0x26 + strb r0, [r7] + movs r0, #3 + ldr r2, [sp, #0x40] + strb r0, [r2] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + add r0, sl + ldr r0, [r0] + str r0, [sp, #0x18] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08058814 @ =gUiGraphics + 0x4 + adds r0, r0, r3 + ldr r0, [r0] + str r0, [sp, #0x24] + movs r0, #0x80 + lsls r0, r0, #1 + str r0, [sp, #0x1c] + movs r0, #0x20 + str r0, [sp, #0x28] + movs r2, #0 + ldr r1, [sp, #0x34] + strb r2, [r1] + ldr r0, _0805882C @ =0x06012000 + str r0, [sp, #0x10] + movs r0, #0xd + ldr r3, [sp, #0x3c] + strb r0, [r3] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _0805881C @ =gUiGraphics + 0x8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #8] + add r2, sp, #4 + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r3, _08058820 @ =gUiGraphics + 0xC + adds r0, r0, r3 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + add r0, r8 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08058824 @ =gUiGraphics + 0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r5 + ldr r0, [r0] + strb r0, [r2, #0xb] + adds r0, r2, #0 + bl sub_80528AC + mov r0, sb + bl sub_805423C + movs r0, #0x30 @ MUS_PLAYER_DATA + bl m4aSongNumStartOrChange + add sp, #0x44 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080587EC: .4byte 0x030000C8 +_080587F0: .4byte 0x00001001 +_080587F4: .4byte 0x030000CA +_080587F8: .4byte 0x00001002 +_080587FC: .4byte 0x030000E0 +_08058800: .4byte 0x00001015 +_08058804: .4byte 0x030000E2 +_08058808: .4byte 0x00001016 +_0805880C: .4byte 0x030000F8 +_08058810: .4byte gUiGraphics +_08058814: .4byte gUiGraphics + 0x4 +_08058818: .4byte gUnknown_08684D3C +_0805881C: .4byte gUiGraphics + 0x8 +_08058820: .4byte gUiGraphics + 0xC +_08058824: .4byte gUiGraphics + 0x14 +_08058828: .4byte gUnknown_08685D3C +_0805882C: .4byte 0x06012000 + +.syntax divided diff --git a/sa1/asm/non_matching/game/player_name_input_menu__Task_80595DC.inc b/sa1/asm/non_matching/game/player_name_input_menu__Task_80595DC.inc new file mode 100644 index 0000000000..3402aab862 --- /dev/null +++ b/sa1/asm/non_matching/game/player_name_input_menu__Task_80595DC.inc @@ -0,0 +1,239 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + movs r7, #0 + ldr r4, _08059778 @ =gCurTask + ldr r0, [r4] + ldrh r0, [r0, #6] + ldr r1, _0805977C @ =0x03000018 + adds r0, r0, r1 + bl sub_805423C + ldr r0, [r4] + ldrh r1, [r0, #6] + ldr r2, _08059780 @ =0x030000FC + adds r1, r1, r2 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r0, [r4] + ldrh r0, [r0, #6] + adds r0, r0, r2 + movs r2, #0 + ldrsh r0, [r0, r2] + mov sb, r4 + cmp r0, #0x3c + bgt _08059618 + b _080597CC +_08059618: + movs r6, #0 + ldr r3, _08059784 @ =gLoadedSaveGame + mov r8, r3 + ldr r0, _08059788 @ =gUnknown_08688444 + mov sl, r0 +_08059622: + mov r2, sb + ldr r1, [r2] + lsls r0, r6, #2 + ldrh r1, [r1, #6] + adds r0, r0, r1 + ldr r3, _0805978C @ =0x030000C8 + adds r0, r0, r3 + movs r1, #0 + ldrsh r5, [r0, r1] + ldr r2, _08059790 @ =0xFFFFDFFF + adds r5, r5, r2 + adds r0, r5, #0 + movs r1, #0x28 + bl __udivsi3 + lsls r4, r0, #2 + adds r4, r4, r0 + lsls r4, r4, #1 + adds r0, r5, #0 + movs r1, #0x28 + bl __umodsi3 + lsrs r0, r0, #1 + adds r4, r4, r0 + mov r0, r8 + adds r0, #0x10 + adds r1, r6, r0 + add r4, sl + ldrb r4, [r4] + ldrb r0, [r1] + cmp r0, r4 + beq _08059666 + movs r7, #1 + strb r4, [r1] +_08059666: + adds r6, #1 + cmp r6, #5 + bls _08059622 + cmp r7, #0 + beq _08059740 + ldr r0, _08059794 @ =gFrameCount + ldr r0, [r0] + mov r3, r8 + str r0, [r3, #4] + bl m4aMPlayAllStop + bl m4aSoundVSyncOff + ldr r0, _08059798 @ =gFlags + mov sl, r0 + ldr r1, [r0] + movs r0, #0x80 + lsls r0, r0, #8 + orrs r1, r0 + ldr r2, _0805979C @ =0x04000200 + mov r8, r2 + ldrh r0, [r2] + str r0, [sp] + ldr r6, _080597A0 @ =0x04000208 + ldrh r0, [r6] + adds r7, r0, #0 + ldr r5, _080597A4 @ =0x04000004 + ldrh r3, [r5] + mov sb, r3 + movs r0, #0 + strh r0, [r2] + ldrh r2, [r2] + strh r0, [r6] + ldrh r2, [r6] + strh r0, [r5] + ldrh r0, [r5] + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + mov r0, sl + str r1, [r0] + ldr r1, _080597A8 @ =0x040000B0 + ldrh r2, [r1, #0xa] + ldr r4, _080597AC @ =0x0000C5FF + adds r0, r4, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldrh r2, [r1, #0xa] + ldr r3, _080597B0 @ =0x00007FFF + adds r0, r3, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + adds r1, #0xc + ldrh r2, [r1, #0xa] + adds r0, r4, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldrh r2, [r1, #0xa] + adds r0, r3, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + adds r1, #0xc + ldrh r2, [r1, #0xa] + adds r0, r4, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldrh r2, [r1, #0xa] + adds r0, r3, #0 + ands r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldrh r0, [r1, #0xa] + ldr r0, _080597B4 @ =0x040000D4 + ldrh r1, [r0, #0xa] + ands r4, r1 + strh r4, [r0, #0xa] + ldrh r1, [r0, #0xa] + ldrh r1, [r0, #0xa] + ands r3, r1 + strh r3, [r0, #0xa] + ldrh r1, [r0, #0xa] + ldrh r0, [r0, #0xa] + bl WriteSaveGame + mov r1, sp + ldrh r2, [r1] + mov r1, r8 + strh r2, [r1] + ldrh r0, [r1] + strh r7, [r6] + ldrh r0, [r6] + mov r3, sb + strh r3, [r5] + ldrh r0, [r5] + bl m4aSoundVSyncOn + mov r1, sl + ldr r0, [r1] + ldr r1, _080597B8 @ =0xFFFF7FFF + ands r0, r1 + mov r2, sl + str r0, [r2] +_08059740: + ldr r0, _08059778 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + ldr r4, _080597BC @ =gBgSprites_Unknown1 + movs r2, #0 + strb r2, [r4, #1] + ldr r0, _080597C0 @ =gBgSprites_Unknown2 + strb r2, [r0, #4] + strb r2, [r0, #5] + movs r1, #0xff + strb r1, [r0, #6] + movs r3, #0x20 + strb r3, [r0, #7] + strb r2, [r4, #2] + strb r2, [r0, #8] + strb r2, [r0, #9] + movs r1, #1 + rsbs r1, r1, #0 + strb r1, [r0, #0xa] + strb r3, [r0, #0xb] + ldr r0, _080597C4 @ =gGameMode + ldrb r0, [r0] + cmp r0, #2 + bne _080597C8 + bl CreateMultiplayerModeSelectScreen + b _080597CC + .align 2, 0 +_08059778: .4byte gCurTask +_0805977C: .4byte 0x03000018 +_08059780: .4byte 0x030000FC +_08059784: .4byte gLoadedSaveGame +_08059788: .4byte gUnknown_08688444 +_0805978C: .4byte 0x030000C8 +_08059790: .4byte 0xFFFFDFFF +_08059794: .4byte gFrameCount +_08059798: .4byte gFlags +_0805979C: .4byte 0x04000200 +_080597A0: .4byte 0x04000208 +_080597A4: .4byte 0x04000004 +_080597A8: .4byte 0x040000B0 +_080597AC: .4byte 0x0000C5FF +_080597B0: .4byte 0x00007FFF +_080597B4: .4byte 0x040000D4 +_080597B8: .4byte 0xFFFF7FFF +_080597BC: .4byte gBgSprites_Unknown1 +_080597C0: .4byte gBgSprites_Unknown2 +_080597C4: .4byte gGameMode +_080597C8: + bl CreatePlayerDataMenu +_080597CC: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/player_name_input_menu__sub_8058830.inc b/sa1/asm/non_matching/game/player_name_input_menu__sub_8058830.inc new file mode 100644 index 0000000000..d604908bcb --- /dev/null +++ b/sa1/asm/non_matching/game/player_name_input_menu__sub_8058830.inc @@ -0,0 +1,1687 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x64 + ldr r0, _080588A8 @ =gPressedKeys + ldrh r7, [r0] + ldr r3, _080588AC @ =gCurTask + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r0, _080588B0 @ =0x03000018 + adds r0, r1, r0 + str r0, [sp, #0x30] + ldr r2, _080588B4 @ =0x0300002C + adds r1, r1, r2 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r1, r0, r2 + movs r2, #0 + ldrsh r0, [r1, r2] + cmp r0, #0x20 + ble _08058868 + movs r0, #0 + strh r0, [r1] +_08058868: + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r2, _080588B8 @ =0x03000030 + adds r1, r1, r2 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r1, r0, r2 + movs r4, #0 + ldrsh r0, [r1, r4] + cmp r0, #0x2e + ble _08058888 + movs r0, #0 + strh r0, [r1] +_08058888: + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r5, _080588BC @ =0x030000FC + adds r1, r1, r5 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x3b + bgt _080588C0 + ldr r0, [sp, #0x30] + bl sub_805423C + b _080588CC + .align 2, 0 +_080588A8: .4byte gPressedKeys +_080588AC: .4byte gCurTask +_080588B0: .4byte 0x03000018 +_080588B4: .4byte 0x0300002C +_080588B8: .4byte 0x03000030 +_080588BC: .4byte 0x030000FC +_080588C0: + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r1, _080588F0 @ =0x030000FC + adds r0, r0, r1 + movs r1, #0x3c + strh r1, [r0] +_080588CC: + ldr r2, _080588F4 @ =gInput + ldrh r1, [r2] + movs r0, #0x10 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + adds r4, r2, #0 + cmp r3, #0 + beq _08058900 + ldr r2, _080588F8 @ =gCurTask + ldr r0, [r2] + ldrh r1, [r0, #6] + ldr r3, _080588FC @ =0x03000058 + adds r1, r1, r3 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + b _0805890C + .align 2, 0 +_080588F0: .4byte 0x030000FC +_080588F4: .4byte gInput +_080588F8: .4byte gCurTask +_080588FC: .4byte 0x03000058 +_08058900: + ldr r1, _0805892C @ =gCurTask + ldr r0, [r1] + ldrh r0, [r0, #6] + ldr r5, _08058930 @ =0x03000058 + adds r0, r0, r5 + strh r3, [r0] +_0805890C: + ldrh r1, [r4] + movs r0, #0x20 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + cmp r1, #0 + beq _08058938 + ldr r1, _0805892C @ =gCurTask + ldr r0, [r1] + ldrh r1, [r0, #6] + ldr r2, _08058934 @ =0x0300005C + adds r1, r1, r2 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + b _08058944 + .align 2, 0 +_0805892C: .4byte gCurTask +_08058930: .4byte 0x03000058 +_08058934: .4byte 0x0300005C +_08058938: + ldr r3, _08058964 @ =gCurTask + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r5, _08058968 @ =0x0300005C + adds r0, r0, r5 + strh r1, [r0] +_08058944: + ldrh r1, [r4] + movs r0, #0x40 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + cmp r1, #0 + beq _08058970 + ldr r1, _08058964 @ =gCurTask + ldr r0, [r1] + ldrh r1, [r0, #6] + ldr r2, _0805896C @ =0x03000064 + adds r1, r1, r2 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + b _0805897C + .align 2, 0 +_08058964: .4byte gCurTask +_08058968: .4byte 0x0300005C +_0805896C: .4byte 0x03000064 +_08058970: + ldr r3, _0805899C @ =gCurTask + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r5, _080589A0 @ =0x03000064 + adds r0, r0, r5 + strh r1, [r0] +_0805897C: + ldrh r1, [r4] + movs r0, #0x80 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + cmp r1, #0 + beq _080589A8 + ldr r1, _0805899C @ =gCurTask + ldr r0, [r1] + ldrh r1, [r0, #6] + ldr r2, _080589A4 @ =0x03000060 + adds r1, r1, r2 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + b _080589B4 + .align 2, 0 +_0805899C: .4byte gCurTask +_080589A0: .4byte 0x03000064 +_080589A4: .4byte 0x03000060 +_080589A8: + ldr r3, _08058A20 @ =gCurTask + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r4, _08058A24 @ =0x03000060 + adds r0, r0, r4 + strh r1, [r0] +_080589B4: + ldr r4, _08058A20 @ =gCurTask + ldr r0, [r4] + ldrh r1, [r0, #6] + ldr r6, _08058A28 @ =0x03000024 + adds r0, r1, r6 + ldrh r0, [r0] + mov sb, r0 + ldr r5, _08058A2C @ =0x03000028 + adds r0, r1, r5 + ldrh r0, [r0] + mov sl, r0 + ldr r2, _08058A30 @ =0x03000054 + adds r0, r1, r2 + ldrh r0, [r0] + mov r8, r0 + ldr r0, _08058A34 @ =gPressedKeys + ldrh r2, [r0] + movs r5, #0x10 + adds r0, r5, #0 + ands r0, r2 + cmp r0, #0 + bne _080589EC + ldr r3, _08058A38 @ =0x03000058 + adds r0, r1, r3 + movs r3, #0 + ldrsh r0, [r0, r3] + cmp r0, #0xf + ble _08058A3C +_080589EC: + movs r0, #0x6c + bl m4aSongNumStart + ldr r0, [r4] + ldrh r1, [r0, #6] + ldr r0, _08058A38 @ =0x03000058 + adds r1, r1, r0 + ldrh r0, [r1] + subs r0, #5 + strh r0, [r1] + ldr r0, [r4] + ldrh r1, [r0, #6] + adds r1, r1, r6 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r0, [r4] + ldrh r0, [r0, #6] + adds r1, r0, r6 + movs r2, #0 + ldrsh r0, [r1, r2] + cmp r0, #9 + ble _08058A84 + movs r0, #0 + b _08058A82 + .align 2, 0 +_08058A20: .4byte gCurTask +_08058A24: .4byte 0x03000060 +_08058A28: .4byte 0x03000024 +_08058A2C: .4byte 0x03000028 +_08058A30: .4byte 0x03000054 +_08058A34: .4byte gPressedKeys +_08058A38: .4byte 0x03000058 +_08058A3C: + movs r5, #0x20 + adds r0, r5, #0 + ands r0, r2 + cmp r0, #0 + bne _08058A52 + ldr r3, _08058B10 @ =0x0300005C + adds r0, r1, r3 + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0xf + ble _08058A86 +_08058A52: + movs r0, #0x6c + bl m4aSongNumStart + ldr r0, [r4] + ldrh r1, [r0, #6] + ldr r2, _08058B10 @ =0x0300005C + adds r1, r1, r2 + ldrh r0, [r1] + subs r0, #5 + strh r0, [r1] + ldr r0, [r4] + ldrh r1, [r0, #6] + adds r1, r1, r6 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + ldr r0, [r4] + ldrh r0, [r0, #6] + adds r1, r0, r6 + movs r3, #0 + ldrsh r0, [r1, r3] + cmp r0, #0 + bge _08058A84 + movs r0, #9 +_08058A82: + strh r0, [r1] +_08058A84: + orrs r7, r5 +_08058A86: + ldr r0, _08058B14 @ =gPressedKeys + ldrh r2, [r0] + movs r0, #0x80 + ands r0, r2 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + cmp r4, #0 + bne _08058AA8 + ldr r1, _08058B18 @ =gCurTask + ldr r0, [r1] + ldrh r3, [r0, #6] + ldr r5, _08058B1C @ =0x03000060 + adds r0, r3, r5 + movs r5, #0 + ldrsh r0, [r0, r5] + cmp r0, #0xf + ble _08058B28 +_08058AA8: + movs r0, #0x6c + bl m4aSongNumStart + ldr r3, _08058B18 @ =gCurTask + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r0, _08058B1C @ =0x03000060 + adds r1, r1, r0 + ldrh r0, [r1] + subs r0, #5 + strh r0, [r1] + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r4, _08058B20 @ =0x03000028 + adds r1, r1, r4 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r1, r0, r4 + movs r2, #0 + ldrsh r0, [r1, r2] + cmp r0, #5 + ble _08058B0A + movs r0, #5 + strh r0, [r1] + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r2, _08058B24 @ =0x03000054 + adds r1, r1, r2 + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + ldr r0, [r3] + ldrh r1, [r0, #6] + adds r2, r1, r2 + movs r5, #0 + ldrsh r0, [r2, r5] + cmp r0, #2 + ble _08058B0A + adds r0, r1, r4 + movs r1, #0 + strh r1, [r0] + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r2, _08058B24 @ =0x03000054 + adds r0, r0, r2 + strh r1, [r0] +_08058B0A: + movs r0, #0x80 + b _08058BA4 + .align 2, 0 +_08058B10: .4byte 0x0300005C +_08058B14: .4byte gPressedKeys +_08058B18: .4byte gCurTask +_08058B1C: .4byte 0x03000060 +_08058B20: .4byte 0x03000028 +_08058B24: .4byte 0x03000054 +_08058B28: + movs r0, #0x40 + ands r0, r2 + cmp r0, #0 + bne _08058B3C + ldr r5, _08058BEC @ =0x03000064 + adds r0, r3, r5 + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0xf + ble _08058BA6 +_08058B3C: + movs r0, #0x6c + bl m4aSongNumStart + ldr r2, _08058BF0 @ =gCurTask + ldr r0, [r2] + ldrh r1, [r0, #6] + ldr r3, _08058BEC @ =0x03000064 + adds r1, r1, r3 + ldrh r0, [r1] + subs r0, #5 + strh r0, [r1] + ldr r0, [r2] + ldrh r1, [r0, #6] + subs r3, #0x3c + adds r1, r1, r3 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + ldr r0, [r2] + ldrh r0, [r0, #6] + adds r1, r0, r3 + movs r5, #0 + ldrsh r0, [r1, r5] + cmp r0, #0 + bge _08058BA2 + strh r4, [r1] + ldr r0, [r2] + ldrh r1, [r0, #6] + ldr r2, _08058BF4 @ =0x03000054 + adds r1, r1, r2 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + ldr r1, _08058BF0 @ =gCurTask + ldr r0, [r1] + ldrh r1, [r0, #6] + adds r2, r1, r2 + movs r4, #0 + ldrsh r0, [r2, r4] + cmp r0, #0 + bge _08058BA2 + adds r1, r1, r3 + movs r0, #5 + strh r0, [r1] + ldr r5, _08058BF0 @ =gCurTask + ldr r0, [r5] + ldrh r0, [r0, #6] + ldr r1, _08058BF4 @ =0x03000054 + adds r0, r0, r1 + movs r1, #2 + strh r1, [r0] +_08058BA2: + movs r0, #0x40 +_08058BA4: + orrs r7, r0 +_08058BA6: + ldr r2, _08058BF0 @ =gCurTask + ldr r3, [r2] + ldrh r0, [r3, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r4, r0, r1 + ldr r5, _08058BF8 @ =0x0300002C + adds r1, r0, r5 + movs r2, #0 + ldrsh r0, [r1, r2] + cmp r0, #0xf + bgt _08058BFC + adds r1, r0, #0 + movs r2, #0x10 + subs r1, r2, r1 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + movs r5, #0x80 + lsls r5, r5, #1 + adds r1, r5, #0 + adds r0, r0, r1 + strh r0, [r4] + ldrh r0, [r3, #6] + ldr r3, _08058BF8 @ =0x0300002C + adds r0, r0, r3 + movs r5, #0 + ldrsh r0, [r0, r5] + subs r2, r2, r0 + lsls r0, r2, #1 + adds r0, r0, r2 + lsls r0, r0, #1 + adds r0, r0, r1 + b _08058C26 + .align 2, 0 +_08058BEC: .4byte 0x03000064 +_08058BF0: .4byte gCurTask +_08058BF4: .4byte 0x03000054 +_08058BF8: .4byte 0x0300002C +_08058BFC: + movs r0, #0 + ldrsh r1, [r1, r0] + subs r1, #0xf + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + movs r1, #0x80 + lsls r1, r1, #1 + adds r2, r1, #0 + adds r0, r0, r2 + strh r0, [r4] + ldrh r0, [r3, #6] + ldr r3, _08058E94 @ =0x0300002C + adds r0, r0, r3 + movs r5, #0 + ldrsh r1, [r0, r5] + subs r1, #0xf + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #1 + adds r0, r0, r2 +_08058C26: + strh r0, [r4, #2] + ldr r0, _08058E98 @ =gCurTask + ldr r1, [r0] + ldrh r0, [r1, #6] + ldr r2, _08058E9C @ =0x03000024 + adds r0, r0, r2 + ldrh r2, [r0] + lsls r2, r2, #4 + adds r2, #0x20 + movs r3, #0 + strh r2, [r4, #0xa] + ldrh r0, [r1, #6] + ldr r5, _08058EA0 @ =0x03000028 + adds r0, r0, r5 + ldrh r1, [r0] + lsls r1, r1, #4 + adds r1, #0x28 + ldrh r0, [r4] + subs r0, #0xf0 + asrs r0, r0, #7 + subs r2, r2, r0 + strh r2, [r4, #0xa] + ldrh r0, [r4, #2] + subs r0, #0xf0 + asrs r0, r0, #7 + subs r1, r1, r0 + strh r1, [r4, #0xc] + strh r3, [r4, #4] + movs r0, #2 + strh r0, [r4, #6] + ldr r0, _08058EA4 @ =gUnknown_08688568 + adds r1, r4, #0 + bl sub_8052D64 + ldr r0, _08058EA8 @ =gPrevInput + ldrh r0, [r0] + orrs r0, r7 + movs r1, #0xf9 + ands r0, r1 + mov r7, r8 + lsls r7, r7, #0x10 + str r7, [sp, #0x60] + cmp r0, #0 + beq _08058D32 + ldr r0, _08058E98 @ =gCurTask + ldr r0, [r0] + str r0, [sp, #0x34] + ldrh r0, [r0, #6] + ldr r1, _08058EAC @ =0x03000080 + adds r7, r0, r1 + mov r3, sb + lsls r2, r3, #0x10 + asrs r2, r2, #0xe + adds r1, r2, #0 + adds r1, #0xa + mov r4, sl + lsls r4, r4, #0x10 + asrs r5, r4, #0x10 + ldr r3, [sp, #0x60] + asrs r0, r3, #0x10 + adds r0, r5, r0 + lsls r4, r0, #7 + str r4, [sp, #0x44] + adds r1, r1, r4 + ldr r5, _08058EB0 @ =0x000007FF + ands r1, r5 + str r1, [r7, #4] + adds r0, r1, #0 + ldr r3, _08058EB4 @ =0x000003FF + ands r0, r3 + ldr r4, _08058EB8 @ =gUnknown_08685D3C + adds r0, r0, r4 + str r0, [r7] + movs r5, #0xc0 + lsls r5, r5, #0x13 + mov sl, r5 + add r1, sl + ldr r0, _08058EBC @ =gBgCntRegs + mov sb, r0 + ldrh r4, [r0, #2] + movs r3, #0xf8 + lsls r3, r3, #5 + adds r0, r3, #0 + ands r0, r4 + lsls r0, r0, #3 + adds r1, r1, r0 + str r1, [r7, #4] + movs r1, #4 + strh r1, [r7, #8] + ldr r4, _08058EC0 @ =gVramGraphicsCopyQueue + mov r8, r4 + ldr r1, _08058EC4 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r1] + lsls r0, r0, #2 + add r0, r8 + str r7, [r0] + ldrb r0, [r1] + adds r0, #1 + movs r4, #0x1f + ands r0, r4 + strb r0, [r1] + ldr r5, [sp, #0x34] + ldrh r0, [r5, #6] + ldr r5, _08058EC8 @ =0x0300008C + adds r7, r0, r5 + adds r2, #0x4a + ldr r0, [sp, #0x44] + adds r2, r2, r0 + ldr r5, _08058EB0 @ =0x000007FF + ands r2, r5 + str r2, [r7, #4] + adds r0, r2, #0 + ldr r5, _08058EB4 @ =0x000003FF + ands r0, r5 + ldr r5, _08058EB8 @ =gUnknown_08685D3C + adds r0, r0, r5 + str r0, [r7] + add r2, sl + mov r5, sb + ldrh r0, [r5, #2] + ands r3, r0 + lsls r3, r3, #3 + adds r2, r2, r3 + str r2, [r7, #4] + movs r0, #4 + strh r0, [r7, #8] + ldrb r0, [r1] + lsls r0, r0, #2 + add r0, r8 + str r7, [r0] + ldrb r0, [r1] + adds r0, #1 + ands r0, r4 + strb r0, [r1] +_08058D32: + ldr r1, _08058E98 @ =gCurTask + ldr r1, [r1] + mov ip, r1 + ldrh r3, [r1, #6] + ldr r4, _08058EA0 @ =0x03000028 + adds r2, r3, r4 + ldr r5, _08058ECC @ =0x03000054 + adds r0, r3, r5 + ldrh r1, [r0] + ldrh r2, [r2] + adds r1, r1, r2 + lsls r1, r1, #0x10 + movs r0, #0xe0 + lsls r0, r0, #0xb + ands r0, r1 + lsrs r6, r0, #0x10 + lsls r0, r6, #2 + adds r0, r0, r6 + lsls r0, r0, #0x12 + ldr r7, _08058E9C @ =0x03000024 + adds r1, r3, r7 + lsrs r0, r0, #0x10 + ldrh r1, [r1] + adds r0, r0, r1 + lsls r0, r0, #0x11 + lsrs r6, r0, #0x10 + ldr r0, _08058ED0 @ =gPressedKeys + ldrh r1, [r0] + cmp r1, #0 + bne _08058E62 + ldr r1, _08058ED4 @ =0x030000F8 + adds r0, r3, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + cmp r0, #5 + bgt _08058E62 + adds r4, #0x40 + adds r7, r3, r4 + movs r0, #0xa + str r0, [r7, #4] + mov r5, ip + ldrh r0, [r5, #6] + subs r1, #0xd4 + adds r0, r0, r1 + movs r3, #0 + ldrsh r2, [r0, r3] + lsls r2, r2, #2 + adds r2, #0xa + str r2, [r7, #4] + ldrh r0, [r5, #6] + subs r4, #0x40 + adds r1, r0, r4 + movs r5, #0 + ldrsh r1, [r1, r5] + ldr r3, _08058ECC @ =0x03000054 + adds r0, r0, r3 + movs r4, #0 + ldrsh r0, [r0, r4] + adds r1, r1, r0 + lsls r1, r1, #7 + adds r2, r2, r1 + ldr r5, _08058EB0 @ =0x000007FF + ands r2, r5 + str r2, [r7, #4] + adds r0, r2, #0 + ldr r1, _08058EB4 @ =0x000003FF + ands r0, r1 + ldr r3, _08058ED8 @ =gUnknown_0868653C + adds r0, r0, r3 + str r0, [r7] + movs r4, #0xc0 + lsls r4, r4, #0x13 + mov sl, r4 + add r2, sl + ldr r5, _08058EBC @ =gBgCntRegs + mov sb, r5 + ldrh r1, [r5, #2] + movs r3, #0xf8 + lsls r3, r3, #5 + adds r0, r3, #0 + ands r0, r1 + lsls r0, r0, #3 + adds r2, r2, r0 + str r2, [r7, #4] + movs r0, #4 + strh r0, [r7, #8] + ldr r1, _08058EC0 @ =gVramGraphicsCopyQueue + mov r8, r1 + ldr r4, _08058EC4 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r4] + lsls r0, r0, #2 + add r0, r8 + str r7, [r0] + ldrb r0, [r4] + adds r0, #1 + movs r2, #0x1f + ands r0, r2 + strb r0, [r4] + mov r5, ip + ldrh r0, [r5, #6] + ldr r1, _08058EDC @ =0x03000074 + adds r7, r0, r1 + movs r0, #0x4a + str r0, [r7, #4] + ldrh r0, [r5, #6] + ldr r2, _08058E9C @ =0x03000024 + adds r0, r0, r2 + movs r5, #0 + ldrsh r1, [r0, r5] + lsls r1, r1, #2 + adds r1, #0x4a + str r1, [r7, #4] + mov r2, ip + ldrh r0, [r2, #6] + ldr r5, _08058EA0 @ =0x03000028 + adds r2, r0, r5 + movs r5, #0 + ldrsh r2, [r2, r5] + ldr r5, _08058ECC @ =0x03000054 + adds r0, r0, r5 + movs r5, #0 + ldrsh r0, [r0, r5] + adds r2, r2, r0 + lsls r2, r2, #7 + adds r1, r1, r2 + ldr r0, _08058EB0 @ =0x000007FF + ands r1, r0 + str r1, [r7, #4] + adds r0, r1, #0 + ldr r2, _08058EB4 @ =0x000003FF + ands r0, r2 + ldr r5, _08058ED8 @ =gUnknown_0868653C + adds r0, r0, r5 + str r0, [r7] + add r1, sl + mov r2, sb + ldrh r0, [r2, #2] + ands r3, r0 + lsls r3, r3, #3 + adds r1, r1, r3 + str r1, [r7, #4] + movs r3, #4 + strh r3, [r7, #8] + ldrb r0, [r4] + lsls r0, r0, #2 + add r0, r8 + str r7, [r0] + ldrb r0, [r4] + adds r0, #1 + movs r5, #0x1f + ands r0, r5 + strb r0, [r4] +_08058E62: + ldr r7, _08058ED0 @ =gPressedKeys + ldrh r1, [r7] + movs r0, #0xc0 + lsls r0, r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08058EF8 + movs r0, #0x80 + lsls r0, r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08058EE0 + ldr r0, _08058E98 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r2, _08058ED4 @ =0x030000F8 + adds r1, r0, r2 + ldrh r2, [r1] + movs r3, #0 + ldrsh r0, [r1, r3] + cmp r0, #0 + beq _08058EF8 + subs r0, r2, #1 + b _08058EF6 + .align 2, 0 +_08058E94: .4byte 0x0300002C +_08058E98: .4byte gCurTask +_08058E9C: .4byte 0x03000024 +_08058EA0: .4byte 0x03000028 +_08058EA4: .4byte gUnknown_08688568 +_08058EA8: .4byte gPrevInput +_08058EAC: .4byte 0x03000080 +_08058EB0: .4byte 0x000007FF +_08058EB4: .4byte 0x000003FF +_08058EB8: .4byte gUnknown_08685D3C +_08058EBC: .4byte gBgCntRegs +_08058EC0: .4byte gVramGraphicsCopyQueue +_08058EC4: .4byte gVramGraphicsCopyQueueIndex +_08058EC8: .4byte 0x0300008C +_08058ECC: .4byte 0x03000054 +_08058ED0: .4byte gPressedKeys +_08058ED4: .4byte 0x030000F8 +_08058ED8: .4byte gUnknown_0868653C +_08058EDC: .4byte 0x03000074 +_08058EE0: + ldr r0, _08058F50 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r4, _08058F54 @ =0x030000F8 + adds r1, r0, r4 + ldrh r2, [r1] + movs r5, #0 + ldrsh r0, [r1, r5] + cmp r0, #4 + bgt _08058EF8 + adds r0, r2, #1 +_08058EF6: + strh r0, [r1] +_08058EF8: + ldr r7, _08058F58 @ =gPressedKeys + ldrh r1, [r7] + movs r0, #1 + ands r0, r1 + add r2, sp, #0x2c + mov r8, r2 + movs r3, #0x2b + add r3, sp + mov sb, r3 + add r4, sp, #0x28 + mov sl, r4 + mov r5, sp + adds r5, #0x29 + str r5, [sp, #0x58] + mov r7, sp + adds r7, #0x2a + str r7, [sp, #0x5c] + cmp r0, #0 + bne _08058F20 + b _0805905C +_08058F20: + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08058F2A + b _0805905C +_08058F2A: + movs r0, #0x93 + lsls r0, r0, #1 + cmp r6, r0 + bne _08058F5C + ldr r0, _08058F50 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r2, _08058F54 @ =0x030000F8 + adds r1, r0, r2 + ldrh r2, [r1] + movs r3, #0 + ldrsh r0, [r1, r3] + cmp r0, #0 + bne _08058F48 + b _08059056 +_08058F48: + subs r0, r2, #1 + strh r0, [r1] + b _08059056 + .align 2, 0 +_08058F50: .4byte gCurTask +_08058F54: .4byte 0x030000F8 +_08058F58: .4byte gPressedKeys +_08058F5C: + movs r0, #0x94 + lsls r0, r0, #1 + cmp r6, r0 + bne _08058F88 + ldr r0, _08058F80 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r4, _08058F84 @ =0x030000F8 + adds r1, r0, r4 + ldrh r2, [r1] + movs r5, #0 + ldrsh r0, [r1, r5] + cmp r0, #5 + bgt _08059056 + adds r0, r2, #1 + strh r0, [r1] + b _08059056 + .align 2, 0 +_08058F80: .4byte gCurTask +_08058F84: .4byte 0x030000F8 +_08058F88: + movs r0, #0x95 + lsls r0, r0, #1 + cmp r6, r0 + bne _08058FFC + movs r1, #0 + movs r6, #0 + ldr r7, _08058FE4 @ =gCurTask + ldr r0, [r7] + ldrh r2, [r0, #6] + ldr r5, _08058FE8 @ =0x030000C8 + ldr r4, _08058FEC @ =0xFFFFF000 + ldr r3, _08058FF0 @ =0x000010DB +_08058FA0: + lsls r0, r6, #2 + adds r0, r0, r2 + adds r0, r0, r5 + movs r7, #0 + ldrsh r0, [r0, r7] + adds r0, r0, r4 + cmp r0, r3 + beq _08058FB4 + movs r0, #1 + orrs r1, r0 +_08058FB4: + adds r0, r6, #1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + cmp r6, #5 + bls _08058FA0 + cmp r1, #0 + beq _08059056 + movs r1, #0 + ldr r0, [sp, #0x30] + strh r1, [r0, #6] + movs r0, #1 + ldr r2, [sp, #0x30] + strh r0, [r2, #4] + ldr r3, _08058FE4 @ =gCurTask + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r4, _08058FF4 @ =0x030000FC + adds r0, r0, r4 + strh r1, [r0] + ldr r1, [r3] + ldr r0, _08058FF8 @ =Task_80595DC + str r0, [r1, #8] + b _08059056 + .align 2, 0 +_08058FE4: .4byte gCurTask +_08058FE8: .4byte 0x030000C8 +_08058FEC: .4byte 0xFFFFF000 +_08058FF0: .4byte 0x000010DB +_08058FF4: .4byte 0x030000FC +_08058FF8: .4byte Task_80595DC +_08058FFC: + ldr r3, _080590B4 @ =gCurTask + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r5, _080590B8 @ =0x030000F8 + adds r1, r0, r5 + movs r7, #0 + ldrsh r0, [r1, r7] + cmp r0, #5 + bgt _08059056 + ldrh r2, [r1] + adds r0, r2, #1 + strh r0, [r1] + ldr r0, [r3] + ldrh r0, [r0, #6] + lsls r2, r2, #2 + adds r0, r2, r0 + ldr r1, _080590BC @ =0x030000C8 + adds r0, r0, r1 + ldr r4, _080590C0 @ =0x00002001 + adds r1, r6, r4 + strh r1, [r0] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r0, r2, r0 + subs r5, #0x2e + adds r0, r0, r5 + ldr r7, _080590C4 @ =0x00002002 + adds r1, r6, r7 + strh r1, [r0] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r0, r2, r0 + ldr r1, _080590C8 @ =0x030000E0 + adds r0, r0, r1 + adds r4, #0x14 + adds r1, r6, r4 + strh r1, [r0] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r2, r2, r0 + adds r5, #0x18 + adds r2, r2, r5 + adds r7, #0x14 + adds r0, r6, r7 + strh r0, [r2] +_08059056: + movs r0, #0x6a + bl m4aSongNumStart +_0805905C: + ldr r1, _080590CC @ =gPressedKeys + ldrh r2, [r1] + movs r0, #8 + ands r0, r2 + cmp r0, #0 + bne _08059082 + movs r0, #1 + ands r0, r2 + cmp r0, #0 + beq _080590F2 + ldr r0, _080590B4 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r1, _080590B8 @ =0x030000F8 + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + cmp r0, #6 + bne _080590F2 +_08059082: + ldr r3, _080590B4 @ =gCurTask + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r4, _080590D0 @ =0x03000054 + adds r2, r1, r4 + ldrh r0, [r2] + movs r6, #7 + ands r6, r0 + cmp r6, #1 + bhi _080590DC + movs r0, #2 + strh r0, [r2] + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r5, _080590D4 @ =0x03000024 + adds r0, r0, r5 + movs r1, #9 + strh r1, [r0] + ldr r0, [r3] + ldrh r0, [r0, #6] + ldr r7, _080590D8 @ =0x03000028 + adds r0, r0, r7 + movs r1, #5 + strh r1, [r0] + b _080590F2 + .align 2, 0 +_080590B4: .4byte gCurTask +_080590B8: .4byte 0x030000F8 +_080590BC: .4byte 0x030000C8 +_080590C0: .4byte 0x00002001 +_080590C4: .4byte 0x00002002 +_080590C8: .4byte 0x030000E0 +_080590CC: .4byte gPressedKeys +_080590D0: .4byte 0x03000054 +_080590D4: .4byte 0x03000024 +_080590D8: .4byte 0x03000028 +_080590DC: + ldr r0, _080591E8 @ =0x03000024 + adds r1, r1, r0 + movs r0, #9 + strh r0, [r1] + ldr r0, [r3] + ldrh r1, [r0, #6] + ldr r2, _080591EC @ =0x03000028 + adds r1, r1, r2 + movs r0, #7 + subs r0, r0, r6 + strh r0, [r1] +_080590F2: + ldr r3, _080591F0 @ =gPressedKeys + ldrh r1, [r3] + movs r0, #3 + ands r0, r1 + cmp r0, #2 + bne _080591C8 + ldr r1, _080591F4 @ =gCurTask + ldr r0, [r1] + ldrh r0, [r0, #6] + ldr r4, _080591F8 @ =0x030000F8 + adds r3, r0, r4 + ldrh r4, [r3] + movs r5, #0 + ldrsh r0, [r3, r5] + cmp r0, #0 + ble _080591C8 + subs r0, r4, #1 + strh r0, [r3] + adds r7, r1, #0 + ldr r0, [r7] + ldrh r0, [r0, #6] + ldr r1, _080591F8 @ =0x030000F8 + adds r0, r0, r1 + ldrh r6, [r0] + cmp r6, #4 + bhi _0805917C + adds r3, r7, #0 +_08059128: + ldr r0, [r3] + ldrh r0, [r0, #6] + lsls r1, r6, #2 + adds r0, r1, r0 + ldr r4, _080591FC @ =0x030000C8 + adds r2, r0, r4 + ldr r5, _08059200 @ =0x030000CC + adds r0, r0, r5 + ldrh r0, [r0] + strh r0, [r2] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r0, r1, r0 + ldr r7, _08059204 @ =0x030000CA + adds r2, r0, r7 + adds r4, #6 + adds r0, r0, r4 + ldrh r0, [r0] + strh r0, [r2] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r0, r1, r0 + adds r5, #0x14 + adds r2, r0, r5 + adds r7, #0x1a + adds r0, r0, r7 + ldrh r0, [r0] + strh r0, [r2] + ldr r0, [r3] + ldrh r0, [r0, #6] + adds r1, r1, r0 + ldr r0, _08059208 @ =0x030000E2 + adds r2, r1, r0 + adds r4, #0x18 + adds r1, r1, r4 + ldrh r0, [r1] + strh r0, [r2] + adds r0, r6, #1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + cmp r6, #4 + bls _08059128 +_0805917C: + ldr r5, _080591F4 @ =gCurTask + ldr r0, [r5] + ldrh r0, [r0, #6] + lsls r2, r6, #2 + adds r0, r2, r0 + ldr r7, _080591FC @ =0x030000C8 + adds r0, r0, r7 + ldr r3, _0805920C @ =0x000020DB + adds r1, r3, #0 + strh r1, [r0] + ldr r0, [r5] + ldrh r0, [r0, #6] + adds r0, r2, r0 + ldr r4, _08059204 @ =0x030000CA + adds r0, r0, r4 + ldr r5, _08059210 @ =0x000020DC + adds r1, r5, #0 + strh r1, [r0] + ldr r7, _080591F4 @ =gCurTask + ldr r0, [r7] + ldrh r0, [r0, #6] + adds r0, r2, r0 + ldr r1, _08059214 @ =0x030000E0 + adds r0, r0, r1 + adds r3, #0x14 + adds r1, r3, #0 + strh r1, [r0] + ldr r0, [r7] + ldrh r0, [r0, #6] + adds r2, r2, r0 + adds r4, #0x18 + adds r2, r2, r4 + adds r5, #0x14 + adds r0, r5, #0 + strh r0, [r2] + movs r0, #0x6b + bl m4aSongNumStart +_080591C8: + bl UiGfxStackInit + ldr r0, _080591F4 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r7, _08059218 @ =0x03000030 + adds r1, r0, r7 + movs r2, #0 + ldrsh r0, [r1, r2] + cmp r0, #0x16 + bgt _0805921C + adds r1, r0, #0 + movs r0, #0x17 + subs r0, r0, r1 + b _08059222 + .align 2, 0 +_080591E8: .4byte 0x03000024 +_080591EC: .4byte 0x03000028 +_080591F0: .4byte gPressedKeys +_080591F4: .4byte gCurTask +_080591F8: .4byte 0x030000F8 +_080591FC: .4byte 0x030000C8 +_08059200: .4byte 0x030000CC +_08059204: .4byte 0x030000CA +_08059208: .4byte 0x030000E2 +_0805920C: .4byte 0x000020DB +_08059210: .4byte 0x000020DC +_08059214: .4byte 0x030000E0 +_08059218: .4byte 0x03000030 +_0805921C: + movs r4, #0 + ldrsh r0, [r1, r4] + subs r0, #0x17 +_08059222: + lsls r0, r0, #5 + movs r1, #0x17 + bl __divsi3 + adds r7, r0, #0 + ldr r4, _080593B8 @ =gSineTable + lsls r0, r7, #5 + movs r1, #0x3c + bl __udivsi3 + lsls r0, r0, #1 + adds r0, r0, r4 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x17 + movs r1, #0x1f + subs r7, r1, r0 + cmp r7, #0x1f + bls _0805924A + movs r7, #0x1f +_0805924A: + movs r6, #0 +_0805924C: + lsls r5, r6, #1 + str r5, [sp, #0x48] + ldr r1, _080593BC @ =gUiGraphics + ((37 * 0x1C) + 0x4) + ldr r0, [r1] + adds r0, r0, r5 + ldrh r0, [r0] + movs r2, #0xf8 + lsls r2, r2, #7 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #0xa + muls r0, r7, r0 + movs r1, #0x20 + bl Div + adds r4, r0, #0 + ldr r3, _080593BC @ =gUiGraphics + ((37 * 0x1C) + 0x4) + ldr r0, [r3] + adds r0, r0, r5 + ldrh r0, [r0] + movs r5, #0xf8 + lsls r5, r5, #2 + adds r1, r5, #0 + ands r0, r1 + lsrs r0, r0, #5 + muls r0, r7, r0 + movs r1, #0x20 + bl Div + adds r5, r0, #0 + ldr r1, _080593BC @ =gUiGraphics + ((37 * 0x1C) + 0x4) + ldr r0, [r1] + ldr r2, [sp, #0x48] + adds r0, r0, r2 + ldrh r1, [r0] + movs r0, #0x1f + ands r0, r1 + muls r0, r7, r0 + movs r1, #0x20 + bl Div + ldr r3, _080593C0 @ =gCurTask + ldr r1, [r3] + ldrh r1, [r1, #6] + ldr r2, [sp, #0x48] + adds r1, r2, r1 + ldr r3, _080593C4 @ =0x03000034 + adds r3, r1, r3 + lsls r4, r4, #0xa + lsls r5, r5, #5 + adds r4, r4, r5 + adds r4, r4, r0 + strh r4, [r3] + adds r0, r6, #1 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + cmp r6, #0xf + bls _0805924C + movs r0, #0x25 + mov r4, r8 + strb r0, [r4] + movs r1, #1 + mov r5, sb + strb r1, [r5] + ldr r7, _080593C0 @ =gCurTask + ldr r0, [r7] + ldrh r0, [r0, #6] + ldr r2, _080593C4 @ =0x03000034 + adds r0, r0, r2 + str r0, [sp, #0x20] + movs r0, #0x20 + str r0, [sp, #0x24] + mov r3, sl + strb r1, [r3] + ldr r4, [sp, #0x58] + strb r1, [r4] + movs r0, #4 + ldr r5, [sp, #0x5c] + strb r0, [r5] + ldr r3, _080593C8 @ =gUiGraphics + mov r7, r8 + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r3, #0 + adds r1, #8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #4] + mov r2, sp + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r3, #0 + adds r1, #0xc + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r3, #0 + adds r1, #0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r3, #0 + adds r1, #0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r7] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r3, #0 + adds r1, #0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + mov r0, sp + bl sub_80528AC + ldr r0, _080593C0 @ =gCurTask + ldr r5, [r0] + ldrh r3, [r5, #6] + ldr r1, _080593CC @ =0x030000F8 + adds r0, r3, r1 + ldrh r7, [r0] + movs r2, #0 + ldrsh r0, [r0, r2] + cmp r0, #5 + bgt _080593F2 + ldr r4, _080593D0 @ =0x03000028 + adds r2, r3, r4 + subs r1, #0xa4 + adds r0, r3, r1 + ldrh r1, [r0] + ldrh r2, [r2] + adds r1, r1, r2 + lsls r1, r1, #0x10 + movs r0, #0xe0 + lsls r0, r0, #0xb + ands r0, r1 + lsrs r6, r0, #0x10 + lsls r0, r6, #2 + adds r0, r0, r6 + lsls r0, r0, #0x12 + ldr r2, _080593D4 @ =0x03000024 + adds r1, r3, r2 + lsrs r0, r0, #0x10 + ldrh r1, [r1] + adds r0, r0, r1 + lsls r0, r0, #0x11 + movs r1, #0x95 + lsls r1, r1, #0x11 + cmp r0, r1 + beq _080593F2 + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r3, r0 + lsls r0, r7, #4 + adds r0, #0x78 + strh r0, [r4, #0xa] + ldrh r0, [r5, #6] + ldr r3, _080593D8 @ =0x0300002C + adds r1, r0, r3 + movs r5, #0 + ldrsh r0, [r1, r5] + cmp r0, #0x10 + ble _080593DC + movs r1, #0x10 + subs r1, r1, r0 + b _080593E2 + .align 2, 0 +_080593B8: .4byte gSineTable +_080593BC: .4byte gUiGraphics + ((37 * 0x1C) + 0x4) +_080593C0: .4byte gCurTask +_080593C4: .4byte 0x03000034 +_080593C8: .4byte gUiGraphics +_080593CC: .4byte 0x030000F8 +_080593D0: .4byte 0x03000028 +_080593D4: .4byte 0x03000024 +_080593D8: .4byte 0x0300002C +_080593DC: + movs r0, #0 + ldrsh r1, [r1, r0] + subs r1, #0x10 +_080593E2: + asrs r1, r1, #2 + movs r0, #0xd + subs r0, r0, r1 + strh r0, [r4, #0xc] + ldr r0, _08059520 @ =gUnknown_0868856C + adds r1, r4, #0 + bl sub_805321C +_080593F2: + ldr r1, _08059524 @ =gCurTask + ldr r2, [r1] + mov sl, r2 + ldrh r0, [r2, #6] + ldr r3, _08059528 @ =0x03000098 + adds r7, r0, r3 + ldr r4, _0805952C @ =0x030000C8 + adds r0, r0, r4 + str r0, [r7] + movs r0, #0x1e + str r0, [r7, #4] + ldrh r0, [r2, #6] + subs r4, #0x74 + adds r0, r0, r4 + movs r5, #0 + ldrsh r1, [r0, r5] + subs r1, #2 + lsls r1, r1, #7 + adds r1, #0x1e + ldr r0, _08059530 @ =0x000007FF + ands r1, r0 + str r1, [r7, #4] + movs r2, #0xc0 + lsls r2, r2, #0x13 + mov r8, r2 + add r1, r8 + ldr r3, _08059534 @ =gBgCntRegs + ldrh r2, [r3, #2] + movs r0, #0xf8 + lsls r0, r0, #5 + ands r0, r2 + lsls r0, r0, #3 + adds r1, r1, r0 + str r1, [r7, #4] + movs r5, #0x18 + strh r5, [r7, #8] + ldr r0, _08059538 @ =gVramGraphicsCopyQueue + mov ip, r0 + ldr r3, _0805953C @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r3] + lsls r0, r0, #2 + add r0, ip + str r7, [r0] + ldrb r0, [r3] + adds r0, #1 + movs r1, #0x1f + ands r0, r1 + strb r0, [r3] + mov r2, sl + ldrh r0, [r2, #6] + ldr r5, _08059540 @ =0x030000A4 + adds r7, r0, r5 + ldr r1, _08059544 @ =0x030000E0 + adds r0, r0, r1 + str r0, [r7] + movs r0, #0x5e + str r0, [r7, #4] + ldrh r0, [r2, #6] + adds r0, r0, r4 + movs r2, #0 + ldrsh r1, [r0, r2] + subs r1, #2 + lsls r1, r1, #7 + adds r1, #0x5e + ldr r5, _08059530 @ =0x000007FF + ands r1, r5 + str r1, [r7, #4] + add r1, r8 + ldr r0, _08059534 @ =gBgCntRegs + ldrh r2, [r0, #2] + movs r0, #0xf8 + lsls r0, r0, #5 + ands r0, r2 + lsls r0, r0, #3 + adds r1, r1, r0 + str r1, [r7, #4] + movs r1, #0x18 + strh r1, [r7, #8] + ldrb r0, [r3] + lsls r0, r0, #2 + add r0, ip + str r7, [r0] + ldrb r0, [r3] + adds r0, #1 + movs r2, #0x1f + ands r0, r2 + strb r0, [r3] + mov r5, sl + ldrh r2, [r5, #6] + adds r4, r2, r4 + ldr r7, [sp, #0x60] + asrs r1, r7, #0x10 + movs r5, #0 + ldrsh r0, [r4, r5] + ldr r7, _08059534 @ =gBgCntRegs + mov r8, r7 + mov sb, ip + adds r5, r3, #0 + cmp r1, r0 + beq _0805959E + ldr r0, _08059548 @ =0x030000B0 + adds r7, r2, r0 + adds r0, r1, #6 + lsls r6, r0, #7 + adds r0, r6, #0 + ldr r2, _08059530 @ =0x000007FF + ands r0, r2 + ldr r3, _0805954C @ =gUnknown_08685D3C + 0x1E + adds r0, r0, r3 + str r0, [r7] + subs r0, r1, #2 + lsls r4, r0, #7 + adds r1, r4, #0 + adds r1, #0x1e + ands r1, r2 + str r1, [r7, #4] + movs r0, #0xc0 + lsls r0, r0, #0x13 + adds r1, r1, r0 + mov r0, r8 + ldrh r2, [r0, #2] + movs r0, #0xf8 + lsls r0, r0, #5 + ands r0, r2 + lsls r0, r0, #3 + adds r1, r1, r0 + str r1, [r7, #4] + movs r1, #0x18 + strh r1, [r7, #8] + ldrb r0, [r5] + lsls r0, r0, #2 + add r0, sb + str r7, [r0] + ldrb r0, [r5] + adds r0, #1 + movs r2, #0x1f + ands r0, r2 + strb r0, [r5] + mov r7, sl + ldrh r0, [r7, #6] + ldr r1, _08059550 @ =0x030000BC + adds r7, r0, r1 + ldr r2, _08059554 @ =0x03000028 + adds r0, r0, r2 + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + bne _08059558 + adds r0, r4, #0 + b _0805955A + .align 2, 0 +_08059520: .4byte gUnknown_0868856C +_08059524: .4byte gCurTask +_08059528: .4byte 0x03000098 +_0805952C: .4byte 0x030000C8 +_08059530: .4byte 0x000007FF +_08059534: .4byte gBgCntRegs +_08059538: .4byte gVramGraphicsCopyQueue +_0805953C: .4byte gVramGraphicsCopyQueueIndex +_08059540: .4byte 0x030000A4 +_08059544: .4byte 0x030000E0 +_08059548: .4byte 0x030000B0 +_0805954C: .4byte gUnknown_08685D3C + 0x1E +_08059550: .4byte 0x030000BC +_08059554: .4byte 0x03000028 +_08059558: + adds r0, r6, #0 +_0805955A: + adds r0, #0x40 + str r0, [r7] + ldr r0, [r7] + ldr r2, _080595C8 @ =0x000007FF + ands r0, r2 + adds r0, r0, r3 + str r0, [r7] + ldr r3, [sp, #0x60] + asrs r1, r3, #9 + subs r1, #0xa2 + ands r1, r2 + str r1, [r7, #4] + movs r0, #0xc0 + lsls r0, r0, #0x13 + adds r1, r1, r0 + mov r4, r8 + ldrh r2, [r4, #2] + movs r0, #0xf8 + lsls r0, r0, #5 + ands r0, r2 + lsls r0, r0, #3 + adds r1, r1, r0 + str r1, [r7, #4] + movs r0, #0x18 + strh r0, [r7, #8] + ldrb r0, [r5] + lsls r0, r0, #2 + add r0, sb + str r7, [r0] + ldrb r0, [r5] + adds r0, #1 + movs r1, #0x1f + ands r0, r1 + strb r0, [r5] +_0805959E: + ldr r2, _080595CC @ =gBgScrollRegs + ldr r5, _080595D0 @ =gCurTask + ldr r0, [r5] + ldrh r0, [r0, #6] + ldr r7, _080595D4 @ =0x03000054 + adds r0, r0, r7 + ldrh r0, [r0] + lsls r0, r0, #4 + subs r0, #0x30 + ldr r3, _080595D8 @ =0x000001FF + adds r1, r3, #0 + ands r0, r1 + strh r0, [r2, #6] + add sp, #0x64 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080595C8: .4byte 0x000007FF +_080595CC: .4byte gBgScrollRegs +_080595D0: .4byte gCurTask +_080595D4: .4byte 0x03000054 +_080595D8: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/Task_SpotlightBeam.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/Task_SpotlightBeam.inc new file mode 100644 index 0000000000..d5cc807780 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/Task_SpotlightBeam.inc @@ -0,0 +1,582 @@ + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + ldr r0, _08011E7C @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r1, r0 + ldrh r1, [r4] + ldr r0, _08011E80 @ =0x000001FF + cmp r1, r0 + bhi _08011E84 + ldrh r0, [r4, #4] + ldrh r1, [r4, #2] + subs r0, r0, r1 + b _08011E8A + .align 2, 0 +_08011E7C: .4byte gCurTask +_08011E80: .4byte 0x000001FF +_08011E84: + ldrh r0, [r4, #2] + ldrh r1, [r4, #4] + adds r0, r0, r1 +_08011E8A: + strh r0, [r4, #4] + ldrh r0, [r4, #4] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + ldrh r2, [r4] + adds r0, r0, r2 + movs r3, #0 + mov r8, r3 + ldr r3, _08011F28 @ =0x000003FF + ands r0, r3 + strh r0, [r4] + ldrb r1, [r4, #0xb] + adds r5, r0, r1 + ands r5, r3 + ldr r6, _08011F2C @ =gSineTable + movs r7, #0x80 + lsls r7, r7, #1 + adds r0, r5, r7 + lsls r0, r0, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r1, r0, #0x10 + cmp r1, #0 + bne _08011EBC + b _080122BA +_08011EBC: + lsls r0, r5, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + asrs r1, r1, #0x16 + str r3, [sp, #0x18] + bl Div + mov sl, r0 + add r2, sp, #0x10 + movs r1, #8 + ldrsh r0, [r4, r1] + mov sb, r0 + mov r1, sl + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + mov r1, sb + muls r1, r0, r1 + asrs r1, r1, #8 + ldrh r0, [r4, #6] + subs r0, r0, r1 + strh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + mov sl, r2 + ldr r3, [sp, #0x18] + cmp r0, #0 + bgt _08011F6A + mov r0, r8 + strh r0, [r2] + cmp r5, #0xff + bls _08011F34 + ldr r2, _08011F30 @ =0xFFFFFD00 + adds r1, r5, r2 + ands r1, r3 + lsls r0, r1, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + adds r1, r1, r7 + lsls r1, r1, #1 + adds r1, r1, r6 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + movs r3, #6 + ldrsh r1, [r4, r3] + b _08011FB0 + .align 2, 0 +_08011F28: .4byte 0x000003FF +_08011F2C: .4byte gSineTable +_08011F30: .4byte 0xFFFFFD00 +_08011F34: + subs r1, r7, r5 + ands r1, r3 + lsls r0, r1, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + adds r1, r1, r7 + lsls r1, r1, #1 + adds r1, r1, r6 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + movs r2, #6 + ldrsh r1, [r4, r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r1, r0, r1 + asrs r1, r1, #8 + ldrh r0, [r4, #8] + subs r0, r0, r1 + mov r3, sl + strh r0, [r3, #2] + b _08011FC8 +_08011F6A: + cmp r0, #0xef + ble _08011FC2 + movs r0, #0xf0 + mov r8, r0 + mov r2, r8 + mov r1, sl + strh r2, [r1] + cmp r5, #0xff + bls _08011F88 + ldr r0, _08011F84 @ =0xFFFFFD00 + adds r1, r5, r0 + b _08011F8A + .align 2, 0 +_08011F84: .4byte 0xFFFFFD00 +_08011F88: + subs r1, r7, r5 +_08011F8A: + ands r1, r3 + lsls r0, r1, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + adds r1, r1, r7 + lsls r1, r1, #1 + adds r1, r1, r6 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + movs r2, #6 + ldrsh r1, [r4, r2] + mov r3, r8 + subs r1, r3, r1 +_08011FB0: + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r1, r0, r1 + asrs r1, r1, #8 + ldrh r0, [r4, #8] + subs r0, r0, r1 + mov r1, sl + strh r0, [r1, #2] + b _08011FC8 +_08011FC2: + mov r3, r8 + mov r2, sl + strh r3, [r2, #2] +_08011FC8: + add r1, sp, #8 + mov r2, sl + ldrh r0, [r2] + movs r3, #0 + mov sb, r3 + strb r0, [r1] + ldrh r0, [r2, #2] + strb r0, [r1, #1] + ldr r6, _08012074 @ =gSineTable + lsls r0, r5, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + movs r7, #0x80 + lsls r7, r7, #1 + adds r1, r5, r7 + lsls r1, r1, #1 + adds r1, r1, r6 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + add r3, sp, #8 + ldrb r2, [r4, #6] + movs r5, #8 + ldrsh r1, [r4, r5] + subs r1, #0xa0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + subs r2, r2, r0 + strb r2, [r3, #2] + adds r1, r3, #0 + movs r0, #0xa0 + strb r0, [r1, #3] + ldrb r1, [r4, #0xb] + ldrh r0, [r4] + subs r0, r0, r1 + movs r2, #0x80 + lsls r2, r2, #3 + adds r1, r2, #0 + subs r5, r1, r0 + ldr r3, _08012078 @ =0x000003FF + adds r0, r3, #0 + ands r5, r0 + lsls r0, r5, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + adds r1, r5, r7 + lsls r1, r1, #1 + adds r1, r1, r6 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + add r2, sp, #0x14 + movs r3, #8 + ldrsh r1, [r4, r3] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + ldrh r1, [r4, #6] + adds r0, r0, r1 + strh r0, [r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + mov r8, r2 + cmp r0, #0 + bgt _080120BC + mov r3, sb + strh r3, [r2] + cmp r5, #0xff + bls _08012080 + ldr r0, _0801207C @ =0xFFFFFD00 + adds r1, r5, r0 + b _08012082 + .align 2, 0 +_08012074: .4byte gSineTable +_08012078: .4byte 0x000003FF +_0801207C: .4byte 0xFFFFFD00 +_08012080: + subs r1, r7, r5 +_08012082: + ldr r0, _080120B8 @ =0x000003FF + ands r1, r0 + lsls r0, r1, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + adds r1, r1, r7 + lsls r1, r1, #1 + adds r1, r1, r6 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + movs r2, #6 + ldrsh r1, [r4, r2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r1, r0, r1 + asrs r1, r1, #8 + ldrh r0, [r4, #8] + subs r0, r0, r1 + mov r3, r8 + strh r0, [r3, #2] + b _0801211E + .align 2, 0 +_080120B8: .4byte 0x000003FF +_080120BC: + cmp r0, #0xef + ble _08012118 + movs r0, #0xf0 + mov sb, r0 + mov r2, sb + mov r1, r8 + strh r2, [r1] + cmp r5, #0xff + bls _080120D8 + ldr r3, _080120D4 @ =0xFFFFFD00 + adds r1, r5, r3 + b _080120DA + .align 2, 0 +_080120D4: .4byte 0xFFFFFD00 +_080120D8: + subs r1, r7, r5 +_080120DA: + ldr r0, _08012114 @ =0x000003FF + ands r1, r0 + lsls r0, r1, #1 + adds r0, r0, r6 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + adds r1, r1, r7 + lsls r1, r1, #1 + adds r1, r1, r6 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + movs r2, #6 + ldrsh r1, [r4, r2] + mov r3, sb + subs r1, r3, r1 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r1, r0, r1 + asrs r1, r1, #8 + ldrh r0, [r4, #8] + subs r0, r0, r1 + mov r1, r8 + strh r0, [r1, #2] + b _0801211E + .align 2, 0 +_08012114: .4byte 0x000003FF +_08012118: + mov r3, sb + mov r2, r8 + strh r3, [r2, #2] +_0801211E: + add r1, sp, #8 + mov r6, r8 + ldrh r0, [r6] + strb r0, [r1, #4] + ldrh r0, [r6, #2] + strb r0, [r1, #5] + ldr r2, _080121A4 @ =gSineTable + lsls r0, r5, #1 + adds r0, r0, r2 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + lsls r0, r0, #8 + movs r3, #0x80 + lsls r3, r3, #1 + adds r1, r5, r3 + lsls r1, r1, #1 + adds r1, r1, r2 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + bl Div + add r2, sp, #8 + movs r5, #8 + ldrsh r1, [r4, r5] + subs r1, #0xa0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + muls r0, r1, r0 + asrs r0, r0, #8 + ldrb r1, [r4, #6] + adds r0, r0, r1 + strb r0, [r2, #6] + adds r1, r2, #0 + movs r0, #0xa0 + strb r0, [r1, #7] + ldrh r1, [r4] + ldr r0, _080121A8 @ =0x000001FF + cmp r1, r0 + bhi _0801221C + ldrh r0, [r6, #2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x9f + ble _0801217C + b _080122BA +_0801217C: + mov r2, sl + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x9f + ble _080121E0 + ldrb r1, [r4, #0xa] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080121B0 + ldr r2, _080121AC @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #5] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #6] + b _080121BE + .align 2, 0 +_080121A4: .4byte gSineTable +_080121A8: .4byte 0x000001FF +_080121AC: .4byte gWinRegs +_080121B0: + ldr r2, _080121DC @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #5] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #4] +_080121BE: + ldrb r0, [r4, #0xa] + add r1, sp, #8 + ldrb r1, [r1, #4] + add r2, sp, #8 + ldrb r2, [r2, #5] + add r3, sp, #8 + ldrb r3, [r3, #6] + add r4, sp, #8 + ldrb r4, [r4, #7] + str r4, [sp] + movs r4, #0 + str r4, [sp, #4] + bl sa2__sub_8006228 + b _080122BA + .align 2, 0 +_080121DC: .4byte gWinRegs +_080121E0: + ldrb r1, [r4, #0xa] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08012200 + ldr r2, _080121FC @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #5] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #6] + b _0801220E + .align 2, 0 +_080121FC: .4byte gWinRegs +_08012200: + ldr r2, _08012218 @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #5] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #4] +_0801220E: + ldrb r0, [r4, #0xa] + add r1, sp, #8 + bl sa2__sub_800724C + b _080122BA + .align 2, 0 +_08012218: .4byte gWinRegs +_0801221C: + mov r3, sl + ldrh r0, [r3, #2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x9f + bgt _080122BA + mov r5, r8 + ldrh r0, [r5, #2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x9f + ble _08012284 + ldrb r1, [r4, #0xa] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08012254 + ldr r2, _08012250 @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #1] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #6] + b _08012262 + .align 2, 0 +_08012250: .4byte gWinRegs +_08012254: + ldr r2, _08012280 @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #1] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #4] +_08012262: + ldrb r0, [r4, #0xa] + add r1, sp, #8 + ldrb r1, [r1] + add r2, sp, #8 + ldrb r2, [r2, #1] + add r3, sp, #8 + ldrb r3, [r3, #2] + add r4, sp, #8 + ldrb r4, [r4, #3] + str r4, [sp] + movs r4, #0 + str r4, [sp, #4] + bl sa2__sub_80064A8 + b _080122BA + .align 2, 0 +_08012280: .4byte gWinRegs +_08012284: + ldrb r1, [r4, #0xa] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080122A4 + ldr r2, _080122A0 @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #1] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #6] + b _080122B2 + .align 2, 0 +_080122A0: .4byte gWinRegs +_080122A4: + ldr r2, _080122CC @ =gWinRegs + add r0, sp, #8 + ldrb r0, [r0, #1] + lsls r0, r0, #8 + movs r1, #0xa0 + orrs r0, r1 + strh r0, [r2, #4] +_080122B2: + ldrb r0, [r4, #0xa] + add r1, sp, #8 + bl sa2__sub_800724C +_080122BA: + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080122CC: .4byte gWinRegs + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Itembox.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Itembox.inc new file mode 100644 index 0000000000..275e5bd5c0 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Itembox.inc @@ -0,0 +1,538 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x40 + str r0, [sp, #0xc] + adds r7, r3, #0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + mov r8, r1 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #0x10] + ldrb r3, [r7, #0xe] + adds r3, #5 + rsbs r0, r3, #0 + add r5, sp, #4 + strb r0, [r5] + ldrb r2, [r7, #0xf] + movs r0, #1 + subs r0, r0, r2 + mov r1, sp + adds r1, #5 + strb r0, [r1] + mov r0, sp + adds r0, #6 + strb r3, [r0] + subs r2, #1 + adds r0, #1 + strb r2, [r0] + mov r0, sp + adds r1, r5, #0 + movs r2, #4 + bl memcpy + ldrb r4, [r7, #0xe] + rsbs r0, r4, #0 + add r1, sp, #8 + strb r0, [r1] + ldrb r3, [r7, #0xf] + rsbs r2, r3, #0 + mov r0, sp + adds r0, #9 + strb r2, [r0] + adds r0, #1 + strb r4, [r0] + adds r0, #1 + strb r3, [r0] + adds r0, r5, #0 + movs r2, #4 + bl memcpy + movs r0, #0 + str r0, [sp, #0x14] + ldr r1, [sp, #0xc] + ldr r0, [r1, #0x28] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + bne _0800AC68 + b _0800AE68 +_0800AC68: + ldr r1, [r7, #0x10] + movs r0, #0x80 + ands r0, r1 + adds r6, r1, #0 + cmp r0, #0 + beq _0800AC76 + b _0800AE68 +_0800AC76: + ldr r1, [r7, #0x64] + ldr r0, [r1, #0x3c] + adds r5, r1, #0 + cmp r0, r2 + beq _0800AD36 + mov r2, r8 + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + ldr r1, [sp, #0xc] + adds r1, #0x2c + movs r3, #0 + ldrsb r3, [r1, r3] + adds r2, r0, r3 + ldr r0, [r7] + asrs r0, r0, #8 + adds r1, r5, #0 + adds r1, #0x40 + movs r4, #0 + ldrsb r4, [r1, r4] + adds r1, r0, r4 + cmp r2, r1 + bgt _0800ACB8 + ldr r0, [sp, #0xc] + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0800ACCA + cmp r2, r1 + blt _0800AD36 +_0800ACB8: + adds r0, r5, #0 + adds r0, #0x42 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r2 + blt _0800AD36 +_0800ACCA: + ldr r3, [sp, #0x10] + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + ldr r1, [sp, #0xc] + adds r1, #0x2d + movs r4, #0 + ldrsb r4, [r1, r4] + adds r3, r0, r4 + ldr r0, [r7, #4] + asrs r0, r0, #8 + adds r1, r5, #0 + adds r1, #0x41 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r2, r0, r1 + cmp r3, r2 + bgt _0800AD04 + ldr r0, [sp, #0xc] + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r3, r0 + cmp r0, r2 + bge _0800AD16 + cmp r3, r2 + blt _0800AD36 +_0800AD04: + adds r0, r5, #0 + adds r0, #0x43 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r1 + adds r0, r2, r0 + cmp r0, r3 + blt _0800AD36 +_0800AD16: + movs r0, #0x20 + ldr r5, [sp, #0x14] + orrs r5, r0 + str r5, [sp, #0x14] + movs r0, #2 + ands r0, r6 + cmp r0, #0 + bne _0800AD28 + b _0800AFCA +_0800AD28: + ldrh r1, [r7, #0xa] + movs r2, #0xa + ldrsh r0, [r7, r2] + cmp r0, #0 + ble _0800AD36 + rsbs r0, r1, #0 + strh r0, [r7, #0xa] +_0800AD36: + movs r0, #2 + ands r0, r6 + cmp r0, #0 + bne _0800AD40 + b _0800AFCA +_0800AD40: + mov r3, r8 + lsls r3, r3, #0x10 + str r3, [sp, #0x1c] + asrs r4, r3, #0x10 + ldr r5, [sp, #0xc] + adds r5, #0x2c + mov r8, r5 + movs r6, #0 + ldrsb r6, [r5, r6] + mov ip, r6 + ldr r0, [sp, #0xc] + adds r0, #0x2e + mov sb, r0 + movs r1, #0 + ldrsb r1, [r0, r1] + str r1, [sp, #0x20] + adds r0, r1, #0 + add r0, ip + asrs r0, r0, #1 + adds r0, r4, r0 + str r0, [sp, #0x18] + ldr r2, [sp, #0x10] + lsls r2, r2, #0x10 + str r2, [sp, #0x3c] + asrs r2, r2, #0x10 + ldr r5, [sp, #0xc] + adds r5, #0x2d + movs r0, #0 + ldrsb r0, [r5, r0] + ldr r3, [sp, #0xc] + adds r3, #0x2f + movs r1, #0 + ldrsb r1, [r3, r1] + adds r0, r0, r1 + asrs r0, r0, #1 + adds r2, r2, r0 + str r2, [sp, #0x24] + add r4, ip + ldr r1, [r7] + asrs r0, r1, #8 + mov r6, sp + ldrb r6, [r6, #4] + lsls r6, r6, #0x18 + asrs r6, r6, #0x18 + mov sl, r6 + adds r2, r0, r6 + ldr r0, [sp, #0x1c] + str r0, [sp, #0x28] + mov r6, r8 + str r6, [sp, #0x2c] + str r1, [sp, #0x38] + mov r0, sb + str r0, [sp, #0x34] + ldr r1, [sp, #0x3c] + mov r8, r1 + str r5, [sp, #0x30] + mov sb, r3 + cmp r4, r2 + bgt _0800ADC8 + ldr r3, [sp, #0x20] + mov r5, ip + subs r0, r3, r5 + adds r0, r4, r0 + cmp r0, r2 + bge _0800ADDA + cmp r4, r2 + bge _0800ADC8 + b _0800AEF8 +_0800ADC8: + mov r6, sp + movs r0, #6 + ldrsb r0, [r6, r0] + mov r1, sl + subs r0, r0, r1 + adds r0, r2, r0 + cmp r0, r4 + bge _0800ADDA + b _0800AEF8 +_0800ADDA: + mov r2, r8 + asrs r0, r2, #0x10 + ldr r3, [sp, #0x30] + movs r5, #0 + ldrsb r5, [r3, r5] + adds r4, r0, r5 + ldr r1, [r7, #4] + asrs r0, r1, #8 + mov r2, sp + movs r6, #5 + ldrsb r6, [r2, r6] + adds r2, r0, r6 + adds r3, r1, #0 + cmp r4, r2 + bgt _0800AE0C + mov r1, sb + movs r0, #0 + ldrsb r0, [r1, r0] + subs r0, r0, r5 + adds r0, r4, r0 + cmp r0, r2 + bge _0800AE1A + cmp r4, r2 + bge _0800AE0C + b _0800AEF8 +_0800AE0C: + mov r5, sp + movs r0, #7 + ldrsb r0, [r5, r0] + subs r0, r0, r6 + adds r0, r2, r0 + cmp r0, r4 + blt _0800AEF8 +_0800AE1A: + ldr r2, _0800AE30 @ =gStageFlags + ldrh r1, [r2] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0800AE34 + asrs r0, r3, #8 + ldr r6, [sp, #0x24] + cmp r0, r6 + ble _0800AE3C + b _0800AE8C + .align 2, 0 +_0800AE30: .4byte gStageFlags +_0800AE34: + asrs r0, r3, #8 + ldr r1, [sp, #0x24] + cmp r0, r1 + blt _0800AE8C +_0800AE3C: + adds r0, r7, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + bne _0800AE6C + adds r0, r7, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _0800AE6C + ldr r2, [sp, #0x28] + asrs r1, r2, #0x10 + mov r3, r8 + asrs r2, r3, #0x10 + ldr r0, [sp, #0xc] + adds r3, r7, #0 + bl sub_80096B0 +_0800AE68: + movs r0, #0 + b _0800AFCC +_0800AE6C: + ldrh r2, [r7, #0xa] + movs r5, #0xa + ldrsh r1, [r7, r5] + cmp r1, #0 + bge _0800AE78 + b _0800AFCA +_0800AE78: + movs r0, #8 + ldr r6, [sp, #0x14] + orrs r6, r0 + str r6, [sp, #0x14] + cmp r1, #0 + bgt _0800AE86 + b _0800AFCA +_0800AE86: + rsbs r0, r2, #0 + strh r0, [r7, #0xa] + b _0800AFCA +_0800AE8C: + movs r1, #0xa + ldrsh r0, [r7, r1] + cmp r0, #0 + blt _0800AE96 + b _0800AFCA +_0800AE96: + movs r0, #0 + strh r0, [r7, #0xa] + ldrh r1, [r2] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0800AEC8 + mov r2, r8 + asrs r0, r2, #0x10 + mov r5, sb + movs r1, #0 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + mov r6, sp + movs r1, #5 + ldrsb r1, [r6, r1] + subs r0, r0, r1 + lsls r0, r0, #8 + ldr r1, _0800AEC4 @ =0xFFFFFF00 + bics r3, r1 + adds r0, r3, r0 + str r0, [r7, #4] + b _0800AEE8 + .align 2, 0 +_0800AEC4: .4byte 0xFFFFFF00 +_0800AEC8: + mov r0, r8 + asrs r1, r0, #0x10 + mov r2, sb + movs r0, #0 + ldrsb r0, [r2, r0] + adds r1, r1, r0 + mov r5, sp + movs r0, #5 + ldrsb r0, [r5, r0] + subs r1, r1, r0 + lsls r1, r1, #8 + ldr r0, _0800AEF4 @ =0xFFFFFF00 + ands r0, r3 + subs r1, r1, r0 + subs r1, r3, r1 + str r1, [r7, #4] +_0800AEE8: + movs r0, #0x80 + lsls r0, r0, #9 + ldr r6, [sp, #0x14] + orrs r6, r0 + str r6, [sp, #0x14] + b _0800AFCA + .align 2, 0 +_0800AEF4: .4byte 0xFFFFFF00 +_0800AEF8: + ldr r1, [sp, #0x28] + asrs r0, r1, #0x10 + ldr r2, [sp, #0x2c] + movs r4, #0 + ldrsb r4, [r2, r4] + adds r2, r0, r4 + ldr r3, [sp, #0x38] + asrs r1, r3, #8 + mov r0, sp + movs r3, #0 + ldrsb r3, [r0, r3] + adds r1, r1, r3 + cmp r2, r1 + bgt _0800AF26 + ldr r5, [sp, #0x34] + movs r0, #0 + ldrsb r0, [r5, r0] + subs r0, r0, r4 + adds r0, r2, r0 + cmp r0, r1 + bge _0800AF36 + cmp r2, r1 + blt _0800AFCA +_0800AF26: + mov r0, sp + ldrb r0, [r0, #2] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _0800AFCA +_0800AF36: + mov r6, r8 + asrs r0, r6, #0x10 + ldr r1, [sp, #0x30] + movs r3, #0 + ldrsb r3, [r1, r3] + adds r2, r0, r3 + ldr r0, [r7, #4] + asrs r0, r0, #8 + mov r1, sp + movs r4, #1 + ldrsb r4, [r1, r4] + adds r1, r0, r4 + cmp r2, r1 + bgt _0800AF64 + mov r5, sb + movs r0, #0 + ldrsb r0, [r5, r0] + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0800AF74 + cmp r2, r1 + blt _0800AFCA +_0800AF64: + mov r0, sp + ldrb r0, [r0, #3] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r2 + blt _0800AFCA +_0800AF74: + ldr r6, [sp, #0x38] + asrs r0, r6, #8 + ldr r1, [sp, #0x18] + cmp r0, r1 + bgt _0800AFA2 + movs r2, #8 + ldrsh r0, [r7, r2] + cmp r0, #0 + ble _0800AFCA + movs r0, #0 + strh r0, [r7, #8] + ldr r3, [sp, #0x28] + asrs r0, r3, #0x10 + ldr r5, [sp, #0x2c] + movs r1, #0 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + mov r1, sp + ldrb r1, [r1, #2] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + b _0800AFC6 +_0800AFA2: + movs r6, #8 + ldrsh r0, [r7, r6] + cmp r0, #0 + bge _0800AFCA + movs r0, #0 + strh r0, [r7, #8] + ldr r1, [sp, #0x28] + asrs r0, r1, #0x10 + ldr r2, [sp, #0x34] + movs r1, #0 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + mov r1, sp + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + adds r0, #1 +_0800AFC6: + lsls r0, r0, #8 + str r0, [r7] +_0800AFCA: + ldr r0, [sp, #0x14] +_0800AFCC: + add sp, #0x40 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Spring_Sideways.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Spring_Sideways.inc new file mode 100644 index 0000000000..f7b195fa8d --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Spring_Sideways.inc @@ -0,0 +1,490 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x24 + mov r8, r0 + adds r7, r3, #0 + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + mov sb, r1 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #0x1c] + ldrb r3, [r7, #0xe] + adds r3, #5 + rsbs r0, r3, #0 + add r5, sp, #0x10 + movs r6, #0 + strb r0, [r5] + ldrb r2, [r7, #0xf] + movs r0, #1 + subs r0, r0, r2 + mov r1, sp + adds r1, #0x11 + strb r0, [r1] + mov r0, sp + adds r0, #0x12 + strb r3, [r0] + subs r2, #1 + adds r0, #1 + strb r2, [r0] + add r0, sp, #0xc + adds r1, r5, #0 + movs r2, #4 + bl memcpy + ldrb r4, [r7, #0xe] + rsbs r0, r4, #0 + add r1, sp, #0x14 + strb r0, [r1] + ldrb r3, [r7, #0xf] + rsbs r2, r3, #0 + mov r0, sp + adds r0, #0x15 + strb r2, [r0] + adds r0, #1 + strb r4, [r0] + adds r0, #1 + strb r3, [r0] + adds r0, r5, #0 + movs r2, #4 + bl memcpy + str r6, [sp, #0x18] + movs r0, #0 + str r0, [sp, #0x20] + mov r2, r8 + ldr r1, [r2, #0x28] + subs r0, #1 + cmp r1, r0 + beq _0800A8D6 + ldr r2, [r7, #0x10] + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + beq _0800A8DA +_0800A8D6: + movs r0, #0 + b _0800ABDA +_0800A8DA: + movs r4, #2 + adds r1, r2, #0 + ands r1, r4 + str r1, [sp, #0x18] + movs r0, #8 + ands r0, r2 + cmp r0, #0 + beq _0800A900 + ldr r0, [r7, #0x28] + cmp r0, r8 + bne _0800A900 + movs r0, #9 + rsbs r0, r0, #0 + ands r2, r0 + str r2, [r7, #0x10] + orrs r1, r4 + str r1, [sp, #0x18] + movs r3, #1 + str r3, [sp, #0x20] +_0800A900: + movs r1, #2 + ldr r0, [sp, #0x18] + ands r0, r1 + mov r4, sb + lsls r4, r4, #0x10 + mov sb, r4 + movs r1, #0x2c + add r1, r8 + mov sl, r1 + cmp r0, #0 + bne _0800A918 + b _0800AAAA +_0800A918: + asrs r0, r4, #0x10 + movs r2, #0 + ldrsb r2, [r1, r2] + adds r6, r0, r2 + ldr r1, [r7] + asrs r0, r1, #8 + mov r4, sp + movs r3, #0x10 + ldrsb r3, [r4, r3] + adds r4, r0, r3 + mov ip, r1 + cmp r6, r4 + bgt _0800A948 + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r6, r0 + cmp r0, r4 + bge _0800A956 + cmp r6, r4 + blt _0800A9BA +_0800A948: + mov r1, sp + movs r0, #0x12 + ldrsb r0, [r1, r0] + subs r0, r0, r3 + adds r0, r4, r0 + cmp r0, r6 + blt _0800A9BA +_0800A956: + ldr r2, [sp, #0x1c] + lsls r1, r2, #0x10 + asrs r0, r1, #0x10 + mov r4, r8 + adds r4, #0x2d + movs r2, #0 + ldrsb r2, [r4, r2] + adds r6, r0, r2 + ldr r0, [r7, #4] + asrs r0, r0, #8 + mov r4, sp + movs r3, #0x11 + ldrsb r3, [r4, r3] + adds r4, r0, r3 + adds r5, r1, #0 + cmp r6, r4 + bgt _0800A98E + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r6, r0 + cmp r0, r4 + bge _0800A99C + cmp r6, r4 + blt _0800A9BA +_0800A98E: + mov r1, sp + movs r0, #0x13 + ldrsb r0, [r1, r0] + subs r0, r0, r3 + adds r0, r4, r0 + cmp r0, r6 + blt _0800A9BA +_0800A99C: + mov r2, sb + asrs r1, r2, #0x10 + asrs r2, r5, #0x10 + ldr r3, [sp, #0x20] + str r3, [sp] + str r7, [sp, #4] + add r0, sp, #0x18 + str r0, [sp, #8] + mov r0, r8 + add r3, sp, #0x10 + bl sub_800C934 + cmp r0, #0 + beq _0800AAAA + b _0800ABD8 +_0800A9BA: + mov r4, sb + asrs r0, r4, #0x10 + mov r1, sl + movs r4, #0 + ldrsb r4, [r1, r4] + adds r2, r0, r4 + mov r3, ip + asrs r1, r3, #8 + add r0, sp, #0xc + movs r5, #0 + ldrsb r5, [r0, r5] + adds r1, r1, r5 + cmp r2, r1 + bgt _0800A9EC + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r2, r0 + cmp r0, r1 + bge _0800A9FC + cmp r2, r1 + blt _0800AACA +_0800A9EC: + add r0, sp, #0xc + ldrb r0, [r0, #2] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r2 + blt _0800AAAA +_0800A9FC: + ldr r4, [sp, #0x1c] + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + mov r1, r8 + adds r1, #0x2d + movs r3, #0 + ldrsb r3, [r1, r3] + adds r2, r0, r3 + ldr r0, [r7, #4] + asrs r0, r0, #8 + add r1, sp, #0xc + movs r4, #1 + ldrsb r4, [r1, r4] + adds r1, r0, r4 + cmp r2, r1 + bgt _0800AA32 + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0800AA42 + cmp r2, r1 + blt _0800AAAA +_0800AA32: + add r0, sp, #0xc + ldrb r0, [r0, #3] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r2 + blt _0800AAAA +_0800AA42: + ldr r0, [r7] + asrs r0, r0, #8 + mov r2, sb + asrs r1, r2, #0x10 + cmp r0, r1 + bgt _0800AA78 + movs r3, #8 + ldrsh r0, [r7, r3] + cmp r0, #0 + blt _0800AAAA + movs r0, #0 + strh r0, [r7, #8] + mov r4, sl + movs r0, #0 + ldrsb r0, [r4, r0] + adds r0, r1, r0 + add r1, sp, #0xc + ldrb r1, [r1, #2] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + lsls r0, r0, #8 + str r0, [r7] + ldr r0, [sp, #0x18] + movs r1, #0x80 + lsls r1, r1, #0xa + b _0800AAA6 +_0800AA78: + movs r2, #8 + ldrsh r0, [r7, r2] + cmp r0, #0 + bgt _0800AAAA + movs r0, #0 + strh r0, [r7, #8] + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r1, r0 + add r1, sp, #0xc + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + adds r0, #1 + lsls r0, r0, #8 + str r0, [r7] + ldr r0, [sp, #0x18] + movs r1, #0x80 + lsls r1, r1, #0xb +_0800AAA6: + orrs r0, r1 + str r0, [sp, #0x18] +_0800AAAA: + mov r3, sb + asrs r2, r3, #0x10 + mov r4, sl + movs r0, #0 + ldrsb r0, [r4, r0] + adds r2, r2, r0 + ldr r3, [r7] + asrs r1, r3, #8 + add r0, sp, #0xc + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r1, r1, r0 + mov ip, r3 + cmp r2, r1 + bgt _0800AAF8 +_0800AACA: + mov r0, sb + asrs r2, r0, #0x10 + mov r1, sl + movs r0, #0 + ldrsb r0, [r1, r0] + mov r1, r8 + adds r1, #0x2e + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r4, r2, r0 + adds r1, r1, r2 + mov r3, ip + asrs r2, r3, #8 + add r0, sp, #0xc + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r2, r2, r0 + cmp r1, r2 + bge _0800AB14 + cmp r4, r2 + blt _0800ABD8 +_0800AAF8: + mov r4, ip + asrs r1, r4, #8 + add r0, sp, #0xc + movs r2, #2 + ldrsb r2, [r0, r2] + adds r2, r2, r1 + mov r1, sb + asrs r0, r1, #0x10 + mov r3, sl + movs r1, #0 + ldrsb r1, [r3, r1] + adds r0, r0, r1 + cmp r2, r0 + blt _0800ABD8 +_0800AB14: + ldr r4, [sp, #0x1c] + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + mov r4, r8 + adds r4, #0x2d + ldrb r4, [r4] + lsls r4, r4, #0x18 + asrs r4, r4, #0x18 + adds r2, r0, r4 + ldr r0, [r7, #4] + asrs r0, r0, #8 + add r1, sp, #0xc + movs r5, #1 + ldrsb r5, [r1, r5] + adds r1, r0, r5 + cmp r2, r1 + bgt _0800AB4C + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r2, r0 + cmp r0, r1 + bge _0800AB5C + cmp r2, r1 + blt _0800ABD8 +_0800AB4C: + add r0, sp, #0xc + ldrb r0, [r0, #3] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r2 + blt _0800ABD8 +_0800AB5C: + mov r1, ip + asrs r0, r1, #8 + mov r2, sb + asrs r1, r2, #0x10 + cmp r0, r1 + bgt _0800AB9C + movs r3, #8 + ldrsh r4, [r7, r3] + cmp r4, #0 + blt _0800ABD8 + ldr r3, [sp, #0x18] + movs r0, #0x80 + lsls r0, r0, #0xa + orrs r3, r0 + str r3, [sp, #0x18] + cmp r4, #0 + ble _0800ABD8 + movs r0, #0x20 + orrs r3, r0 + subs r0, #0x22 + ands r3, r0 + str r3, [sp, #0x18] + mov r4, sl + movs r0, #0 + ldrsb r0, [r4, r0] + adds r0, r1, r0 + add r1, sp, #0xc + ldrb r1, [r1, #2] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + b _0800ABD4 +_0800AB9C: + movs r0, #8 + ldrsh r4, [r7, r0] + cmp r4, #0 + bgt _0800ABD8 + ldr r3, [sp, #0x18] + movs r0, #0x80 + lsls r0, r0, #0xb + orrs r3, r0 + str r3, [sp, #0x18] + cmp r4, #0 + bge _0800ABD8 + movs r0, #0x20 + orrs r3, r0 + movs r0, #1 + orrs r3, r0 + str r3, [sp, #0x18] + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r1, r0 + add r1, sp, #0xc + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + adds r0, #1 +_0800ABD4: + lsls r0, r0, #8 + str r0, [r7] +_0800ABD8: + ldr r0, [sp, #0x18] +_0800ABDA: + add sp, #0x24 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__800C060.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__800C060.inc new file mode 100644 index 0000000000..fe5745fc39 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__800C060.inc @@ -0,0 +1,306 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + mov r8, r0 + adds r5, r3, #0 + lsls r1, r1, #0x10 + lsrs r6, r1, #0x10 + lsls r2, r2, #0x10 + lsrs r7, r2, #0x10 + ldrb r4, [r5, #0xe] + rsbs r0, r4, #0 + add r1, sp, #4 + strb r0, [r1] + ldrb r3, [r5, #0xf] + rsbs r2, r3, #0 + mov r0, sp + adds r0, #5 + strb r2, [r0] + adds r0, #1 + strb r4, [r0] + adds r0, #1 + strb r3, [r0] + mov r0, sp + movs r2, #4 + bl memcpy + movs r0, #0 + str r0, [sp, #8] + mov sb, r0 + mov r2, r8 + ldr r1, [r2, #0x28] + subs r0, #1 + cmp r1, r0 + beq _0800B310 + ldr r1, [r5, #0x10] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0800B314 +_0800B310: + movs r0, #0 + b _0800B4E6 +_0800B314: + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0800B32E + ldr r0, [r5, #0x28] + cmp r0, r8 + bne _0800B32E + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r5, #0x10] + movs r0, #1 + mov sb, r0 +_0800B32E: + lsls r1, r6, #0x10 + asrs r1, r1, #8 + mov r0, r8 + adds r0, #0x2c + movs r3, #0 + ldrsb r3, [r0, r3] + lsls r0, r3, #8 + adds r2, r1, r0 + mov r0, sp + movs r4, #0 + ldrsb r4, [r0, r4] + lsls r1, r4, #8 + ldr r0, [r5] + adds r1, r0, r1 + cmp r2, r1 + bgt _0800B368 + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + lsls r0, r0, #8 + adds r0, r2, r0 + cmp r0, r1 + bge _0800B37C + cmp r2, r1 + bge _0800B368 + b _0800B4C8 +_0800B368: + mov r0, sp + ldrb r0, [r0, #2] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + lsls r0, r0, #8 + adds r0, r1, r0 + cmp r0, r2 + bge _0800B37C + b _0800B4C8 +_0800B37C: + lsls r3, r7, #0x10 + asrs r1, r3, #8 + mov r2, r8 + adds r2, #0x2d + movs r7, #0 + ldrsb r7, [r2, r7] + lsls r0, r7, #8 + adds r6, r1, r0 + mov r0, sp + ldrb r0, [r0, #1] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov ip, r0 + lsls r0, r0, #8 + ldr r1, [r5, #4] + adds r4, r1, r0 + mov sl, r3 + str r2, [sp, #0xc] + adds r3, r1, #0 + cmp r6, r4 + bgt _0800B3C0 + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + lsls r0, r0, #8 + adds r0, r6, r0 + cmp r0, r4 + bge _0800B3D4 + cmp r6, r4 + bge _0800B3C0 + b _0800B4C8 +_0800B3C0: + mov r0, sp + ldrb r0, [r0, #3] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r1, ip + subs r0, r0, r1 + lsls r0, r0, #8 + adds r0, r4, r0 + cmp r0, r6 + blt _0800B4C8 +_0800B3D4: + movs r2, #0xa + ldrsh r0, [r5, r2] + cmp r0, #0 + blt _0800B4C8 + mov r2, sp + ldrb r1, [r5, #0xf] + rsbs r0, r1, #0 + strb r0, [r2, #1] + mov r0, sp + strb r1, [r0, #3] + ldr r1, [r5, #0x10] + movs r0, #8 + orrs r1, r0 + str r1, [r5, #0x10] + ldr r2, [sp, #8] + orrs r2, r0 + str r2, [sp, #8] + adds r0, r5, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + adds r4, r0, #0 + cmp r2, #2 + bne _0800B414 + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _0800B43A + cmp r0, #3 + beq _0800B43A +_0800B414: + cmp r2, #3 + bne _0800B430 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _0800B430 + adds r0, r5, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0800B43A +_0800B430: + ldr r0, [r5, #0x10] + movs r1, #3 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] +_0800B43A: + mov r0, sb + cmp r0, #0 + bne _0800B46A + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, #2 + bne _0800B45A + adds r0, r5, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _0800B464 + cmp r0, #3 + beq _0800B464 +_0800B45A: + adds r0, r5, #0 + bl sa2__sub_8021BE0 + ldrh r0, [r5, #8] + strh r0, [r5, #0xc] +_0800B464: + movs r0, #0 + strb r0, [r5, #0x14] + ldr r3, [r5, #4] +_0800B46A: + mov r1, r8 + str r1, [r5, #0x28] + movs r0, #0 + strh r0, [r5, #0xa] + ldr r0, _0800B498 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0800B49C + mov r2, sl + asrs r0, r2, #0x10 + ldr r2, [sp, #0xc] + movs r1, #0 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + mov r1, sp + ldrb r1, [r1, #3] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + b _0800B4B6 + .align 2, 0 +_0800B498: .4byte gStageFlags +_0800B49C: + mov r1, sl + asrs r0, r1, #0x10 + mov r1, r8 + adds r1, #0x2f + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 + mov r1, sp + ldrb r1, [r1, #3] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r0, r0, r1 +_0800B4B6: + lsls r0, r0, #8 + ldr r1, _0800B4C4 @ =0xFFFFFF00 + bics r3, r1 + adds r0, r3, r0 + str r0, [r5, #4] + b _0800B4E4 + .align 2, 0 +_0800B4C4: .4byte 0xFFFFFF00 +_0800B4C8: + mov r2, sb + cmp r2, #0 + beq _0800B4E4 + ldr r1, [r5, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + bne _0800B4E4 + movs r0, #0x21 + rsbs r0, r0, #0 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r5, #0x10] +_0800B4E4: + ldr r0, [sp, #8] +_0800B4E6: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800D0A0.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800D0A0.inc new file mode 100644 index 0000000000..f33694157d --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800D0A0.inc @@ -0,0 +1,1561 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x48 + str r0, [sp, #0x18] + ldr r0, [sp, #0x68] + ldr r4, [sp, #0x6c] + ldr r5, [sp, #0x70] + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp, #0x1c] + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #0x20] + lsls r3, r3, #0x10 + lsrs r3, r3, #0x10 + mov sl, r3 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x24] + lsls r4, r4, #0x18 + lsrs r4, r4, #0x18 + str r4, [sp, #0x28] + lsls r5, r5, #0x18 + lsrs r5, r5, #0x18 + str r5, [sp, #0x2c] + ldr r7, _08009920 @ =gPlayer + ldrb r3, [r7, #0xe] + adds r3, #5 + rsbs r0, r3, #0 + add r1, sp, #8 + mov sb, r1 + strb r0, [r1] + ldrb r1, [r7, #0xf] + movs r6, #1 + subs r2, r6, r1 + mov r0, sp + adds r0, #9 + strb r2, [r0] + adds r0, #1 + strb r3, [r0] + subs r1, #1 + adds r0, #1 + strb r1, [r0] + add r0, sp, #4 + mov r1, sb + movs r2, #4 + bl memcpy + ldrb r3, [r7, #0xe] + rsbs r0, r3, #0 + add r2, sp, #0xc + mov r8, r2 + strb r0, [r2] + ldrb r2, [r7, #0xf] + rsbs r1, r2, #0 + mov r0, sp + adds r0, #0xd + strb r1, [r0] + adds r0, #1 + strb r3, [r0] + adds r0, #1 + strb r2, [r0] + mov r0, sb + mov r1, r8 + movs r2, #4 + bl memcpy + movs r3, #0 + str r3, [sp, #0x30] + movs r5, #0 + str r5, [sp, #0x34] + ldr r0, _08009924 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x40] + ldr r0, _08009928 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + ldrb r1, [r7, #0xe] + adds r1, #5 + rsbs r0, r1, #0 + add r5, sp, #0x10 + strb r0, [r5] + ldr r0, _0800992C @ =0x03000058 + adds r4, r4, r0 + ldrb r0, [r4] + subs r6, r6, r0 + mov r0, sp + adds r0, #0x11 + strb r6, [r0] + adds r0, #1 + strb r1, [r0] + ldrb r0, [r4] + subs r0, #1 + mov r1, sp + adds r1, #0x13 + strb r0, [r1] + mov r0, r8 + adds r1, r5, #0 + movs r2, #4 + bl memcpy + ldrb r3, [r7, #0xe] + rsbs r0, r3, #0 + add r1, sp, #0x14 + strb r0, [r1] + ldrb r0, [r4] + rsbs r0, r0, #0 + mov r2, sp + adds r2, #0x15 + strb r0, [r2] + mov r0, sp + adds r0, #0x16 + strb r3, [r0] + ldrb r2, [r4] + adds r0, #1 + strb r2, [r0] + adds r0, r5, #0 + movs r2, #4 + bl memcpy + ldr r2, [sp, #0x18] + ldr r1, [r2, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + mov ip, sb + cmp r1, r0 + beq _08009918 + ldr r0, [r7, #0x10] + movs r3, #0x80 + ands r0, r3 + cmp r0, #0 + bne _08009918 + ldr r6, [sp, #0x1c] + lsls r0, r6, #0x10 + asrs r2, r0, #0x10 + ldr r1, [r7] + asrs r1, r1, #8 + str r0, [sp, #0x44] + cmp r2, r1 + bne _08009930 + ldr r0, [sp, #0x20] + lsls r1, r0, #0x10 + asrs r1, r1, #0x10 + ldr r0, [r7, #4] + asrs r0, r0, #8 + cmp r1, r0 + bne _08009930 +_08009918: + movs r0, #0 + bl _0800A392 + .align 2, 0 +_08009920: .4byte gPlayer +_08009924: .4byte gStageFlags +_08009928: .4byte gCurTask +_0800992C: .4byte 0x03000058 +_08009930: + ldr r0, _08009A18 @ =gPlayer + ldr r1, [r0] + str r1, [sp, #0x38] + ldr r2, [r0, #4] + str r2, [sp, #0x3c] + adds r1, r0, #0 + adds r1, #0x27 + adds r4, r0, #0 + ldr r3, [sp, #0x28] + ldrb r1, [r1] + cmp r3, r1 + beq _0800994C + bl _0800A390 +_0800994C: + ldr r1, [r4, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0800996A + ldr r0, [r4, #0x28] + ldr r6, [sp, #0x18] + cmp r0, r6 + bne _0800996A + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r4, #0x10] + movs r0, #1 + str r0, [sp, #0x34] +_0800996A: + ldr r1, [sp, #0x20] + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + mov sb, r0 + ldr r2, [sp, #0x3c] + asrs r2, r2, #8 + mov r8, r2 + cmp r1, r8 + bne _0800997E + b _08009E70 +_0800997E: + ldr r3, [sp, #0x44] + asrs r0, r3, #0x10 + movs r3, #0 + ldrsb r3, [r5, r3] + adds r2, r0, r3 + ldr r6, [sp, #0x38] + asrs r0, r6, #8 + mov r1, ip + movs r6, #0 + ldrsb r6, [r1, r6] + adds r1, r0, r6 + adds r7, r0, #0 + cmp r2, r1 + bgt _080099AC + movs r0, #2 + ldrsb r0, [r5, r0] + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _080099BC + cmp r2, r1 + bge _080099AC + b _08009E70 +_080099AC: + mov r3, ip + movs r0, #2 + ldrsb r0, [r3, r0] + subs r0, r0, r6 + adds r0, r1, r0 + cmp r0, r2 + bge _080099BC + b _08009E70 +_080099BC: + mov r6, sb + asrs r0, r6, #0x10 + movs r3, #1 + ldrsb r3, [r5, r3] + adds r2, r0, r3 + mov r0, ip + movs r6, #1 + ldrsb r6, [r0, r6] + mov r0, r8 + adds r1, r0, r6 + cmp r2, r1 + bgt _080099E6 + movs r0, #3 + ldrsb r0, [r5, r0] + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _080099F6 + cmp r2, r1 + bge _080099E6 + b _08009E70 +_080099E6: + mov r3, ip + movs r0, #3 + ldrsb r0, [r3, r0] + subs r0, r0, r6 + adds r0, r1, r0 + cmp r0, r2 + bge _080099F6 + b _08009E70 +_080099F6: + ldr r6, [sp, #0x40] + cmp r6, #0 + bne _08009A1C + mov r1, sb + asrs r0, r1, #0x10 + cmp r8, r0 + ble _08009A06 + b _08009CBE +_08009A06: + movs r2, #0xa + ldrsh r1, [r4, r2] + ldr r3, [sp, #0x24] + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + subs r1, r1, r0 + cmp r1, #0 + bge _08009A38 + b _08009CBE + .align 2, 0 +_08009A18: .4byte gPlayer +_08009A1C: + mov r6, sb + asrs r0, r6, #0x10 + cmp r8, r0 + bgt _08009A26 + b _08009CB8 +_08009A26: + movs r0, #0xa + ldrsh r1, [r4, r0] + ldr r2, [sp, #0x24] + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + adds r1, r1, r0 + cmp r1, #0 + bge _08009A38 + b _08009CB8 +_08009A38: + ldr r3, [sp, #0x40] + cmp r3, #0 + beq _08009A40 + b _08009B78 +_08009A40: + mov r6, sb + asrs r0, r6, #0x10 + movs r1, #1 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + mov r2, ip + movs r1, #3 + ldrsb r1, [r2, r1] + subs r0, r0, r1 + lsls r0, r0, #8 + ldr r6, _08009AF8 @ =gPlayer + ldr r1, [r6, #4] + ldr r2, _08009AFC @ =0xFFFFFF00 + ands r1, r2 + subs r0, r0, r1 + ldr r3, [sp, #0x3c] + adds r3, r3, r0 + str r3, [sp, #0x3c] + asrs r0, r3, #8 + movs r1, #0xf + ldrsb r1, [r6, r1] + subs r0, r0, r1 + movs r3, #8 + rsbs r3, r3, #0 + ldr r1, _08009B00 @ =sa2__sub_801EC3C + str r1, [sp] + adds r1, r7, #0 + ldr r2, [sp, #0x28] + bl sa2__sub_801F100 + adds r7, r0, #0 + cmp r7, #0 + bge _08009B04 + ldr r1, [r6, #0x10] + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r6, #0x10] + adds r0, r6, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _08009AAA + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #1 + beq _08009AD6 + cmp r0, #3 + beq _08009AD6 +_08009AAA: + cmp r2, #3 + bne _08009AC8 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _08009AC8 + adds r0, r6, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #0 + bne _08009AD6 +_08009AC8: + ldr r0, _08009AF8 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] + adds r4, r0, #0 +_08009AD6: + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + movs r0, #0 + strh r0, [r4, #0xa] + lsls r1, r7, #8 + ldr r0, [r4, #4] + subs r0, r0, r1 + str r0, [r4, #4] + bl _0800A372 + .align 2, 0 +_08009AF8: .4byte gPlayer +_08009AFC: .4byte 0xFFFFFF00 +_08009B00: .4byte sa2__sub_801EC3C +_08009B04: + movs r0, #8 + ldr r5, [sp, #0x30] + orrs r5, r0 + str r5, [sp, #0x30] + ldr r1, [r6, #0x10] + orrs r1, r0 + str r1, [r6, #0x10] + adds r0, r6, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _08009B30 + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #1 + beq _08009B5C + cmp r0, #3 + beq _08009B5C +_08009B30: + cmp r2, #3 + bne _08009B4E + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _08009B4E + adds r0, r6, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #0 + bne _08009B5C +_08009B4E: + ldr r0, _08009B74 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] + adds r4, r0, #0 +_08009B5C: + ldr r6, [sp, #0x18] + str r6, [r4, #0x28] + movs r0, #0 + strh r0, [r4, #0xa] + ldr r0, [sp, #0x3c] + str r0, [r4, #4] + ldr r1, [sp, #0x34] + cmp r1, #0 + beq _08009B72 + bl _0800A378 +_08009B72: + b _08009CA4 + .align 2, 0 +_08009B74: .4byte gPlayer +_08009B78: + mov r2, sb + asrs r0, r2, #0x10 + movs r1, #3 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + mov r3, ip + movs r1, #3 + ldrsb r1, [r3, r1] + adds r0, r0, r1 + lsls r0, r0, #8 + ldr r6, _08009C2C @ =gPlayer + ldr r1, [r6, #4] + ldr r2, _08009C30 @ =0xFFFFFF00 + ands r1, r2 + subs r0, r0, r1 + ldr r5, [sp, #0x3c] + adds r5, r5, r0 + str r5, [sp, #0x3c] + asrs r0, r5, #8 + movs r1, #0xf + ldrsb r1, [r6, r1] + adds r0, r0, r1 + ldr r1, _08009C34 @ =sa2__sub_801EC3C + str r1, [sp] + adds r1, r7, #0 + ldr r2, [sp, #0x28] + movs r3, #8 + bl sa2__sub_801F100 + adds r7, r0, #0 + cmp r7, #0 + bge _08009C38 + ldr r1, [r6, #0x10] + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r6, #0x10] + adds r0, r6, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _08009BE0 + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #1 + beq _08009C0C + cmp r0, #3 + beq _08009C0C +_08009BE0: + cmp r2, #3 + bne _08009BFE + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _08009BFE + adds r0, r6, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #0 + bne _08009C0C +_08009BFE: + ldr r0, _08009C2C @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] + adds r4, r0, #0 +_08009C0C: + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + movs r0, #0 + strh r0, [r4, #0xa] + lsls r1, r7, #8 + ldr r0, [r4, #4] + adds r0, r0, r1 + str r0, [r4, #4] + b _0800A372 + .align 2, 0 +_08009C2C: .4byte gPlayer +_08009C30: .4byte 0xFFFFFF00 +_08009C34: .4byte sa2__sub_801EC3C +_08009C38: + movs r0, #8 + ldr r1, [sp, #0x30] + orrs r1, r0 + str r1, [sp, #0x30] + ldr r1, [r6, #0x10] + orrs r1, r0 + str r1, [r6, #0x10] + adds r0, r6, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _08009C64 + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #1 + beq _08009C90 + cmp r0, #3 + beq _08009C90 +_08009C64: + cmp r2, #3 + bne _08009C82 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _08009C82 + adds r0, r6, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r6, #0 + cmp r0, #0 + bne _08009C90 +_08009C82: + ldr r0, _08009CB4 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] + adds r4, r0, #0 +_08009C90: + ldr r2, [sp, #0x18] + str r2, [r4, #0x28] + movs r0, #0 + strh r0, [r4, #0xa] + ldr r3, [sp, #0x3c] + str r3, [r4, #4] + ldr r5, [sp, #0x34] + cmp r5, #0 + beq _08009CA4 + b _0800A378 +_08009CA4: + adds r0, r4, #0 + bl sa2__sub_8021BE0 + ldrh r0, [r4, #8] + strh r0, [r4, #0xc] + movs r0, #0 + strb r0, [r4, #0x14] + b _0800A372 + .align 2, 0 +_08009CB4: .4byte gPlayer +_08009CB8: + ldr r6, [sp, #0x40] + cmp r6, #0 + bne _08009CE0 +_08009CBE: + mov r1, sb + asrs r0, r1, #0x10 + cmp r8, r0 + ble _08009CD8 + movs r2, #0xa + ldrsh r0, [r4, r2] + ldr r3, [sp, #0x24] + lsls r2, r3, #0x10 + asrs r1, r2, #0x10 + subs r0, r0, r1 + adds r5, r2, #0 + cmp r0, #0 + blt _08009CFE +_08009CD8: + ldr r5, [sp, #0x40] + cmp r5, #0 + bne _08009CE0 + b _08009E70 +_08009CE0: + mov r6, sb + asrs r0, r6, #0x10 + cmp r8, r0 + ble _08009CEA + b _08009E70 +_08009CEA: + movs r1, #0xa + ldrsh r0, [r4, r1] + ldr r3, [sp, #0x24] + lsls r2, r3, #0x10 + asrs r1, r2, #0x10 + adds r0, r0, r1 + adds r5, r2, #0 + cmp r0, #0 + blt _08009CFE + b _08009E70 +_08009CFE: + ldr r6, [sp, #0x40] + cmp r6, #0 + bne _08009DB0 + ldr r4, _08009D90 @ =gPlayer + movs r0, #0xf + ldrsb r0, [r4, r0] + add r0, r8 + ldr r1, _08009D94 @ =sa2__sub_801EC3C + str r1, [sp] + adds r1, r7, #0 + ldr r2, [sp, #0x28] + movs r3, #8 + bl sa2__sub_801F100 + adds r7, r0, #0 + cmp r7, #0 + bge _08009D98 + ldr r1, [r4, #0x10] + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r4, #0x10] + adds r0, r4, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _08009D46 + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _08009D6E + cmp r0, #3 + beq _08009D6E +_08009D46: + cmp r2, #3 + bne _08009D62 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _08009D62 + adds r0, r4, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _08009D6E +_08009D62: + ldr r0, _08009D90 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] +_08009D6E: + ldr r4, _08009D90 @ =gPlayer + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + movs r0, #0 + strh r0, [r4, #0xa] + lsls r1, r7, #8 + ldr r0, [r4, #4] + adds r0, r0, r1 + str r0, [r4, #4] + b _08009DA0 + .align 2, 0 +_08009D90: .4byte gPlayer +_08009D94: .4byte sa2__sub_801EC3C +_08009D98: + ldr r0, [sp, #0x38] + str r0, [r4] + ldr r1, [sp, #0x3c] + str r1, [r4, #4] +_08009DA0: + ldr r0, _08009DAC @ =gPlayer + movs r2, #0xa + ldrsh r1, [r0, r2] + asrs r2, r5, #0x10 + subs r1, r1, r2 + b _08009E5A + .align 2, 0 +_08009DAC: .4byte gPlayer +_08009DB0: + ldr r4, _08009E40 @ =gPlayer + movs r0, #0xf + ldrsb r0, [r4, r0] + mov r6, r8 + subs r0, r6, r0 + movs r3, #8 + rsbs r3, r3, #0 + ldr r1, _08009E44 @ =sa2__sub_801EC3C + str r1, [sp] + adds r1, r7, #0 + ldr r2, [sp, #0x28] + bl sa2__sub_801F100 + adds r7, r0, #0 + cmp r7, #0 + bge _08009E48 + ldr r1, [r4, #0x10] + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r4, #0x10] + adds r0, r4, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _08009DF6 + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _08009E1E + cmp r0, #3 + beq _08009E1E +_08009DF6: + cmp r2, #3 + bne _08009E12 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _08009E12 + adds r0, r4, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _08009E1E +_08009E12: + ldr r0, _08009E40 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] +_08009E1E: + ldr r4, _08009E40 @ =gPlayer + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + movs r0, #0 + strh r0, [r4, #0xa] + lsls r1, r7, #8 + ldr r0, [r4, #4] + subs r0, r0, r1 + str r0, [r4, #4] + b _08009E50 + .align 2, 0 +_08009E40: .4byte gPlayer +_08009E44: .4byte sa2__sub_801EC3C +_08009E48: + ldr r0, [sp, #0x38] + str r0, [r4] + ldr r1, [sp, #0x3c] + str r1, [r4, #4] +_08009E50: + ldr r0, _08009E6C @ =gPlayer + movs r2, #0xa + ldrsh r1, [r0, r2] + asrs r2, r5, #0x10 + adds r1, r1, r2 +_08009E5A: + adds r4, r0, #0 + cmp r1, #0 + bgt _08009E70 + movs r0, #0x80 + lsls r0, r0, #9 + ldr r3, [sp, #0x30] + orrs r3, r0 + str r3, [sp, #0x30] + b _0800A372 + .align 2, 0 +_08009E6C: .4byte gPlayer +_08009E70: + ldrb r0, [r4, #0x14] + adds r0, #0x20 + movs r1, #0xc0 + ands r0, r1 + asrs r0, r0, #6 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08009E84 + b _0800A372 +_08009E84: + ldr r5, [sp, #0x44] + asrs r0, r5, #0x10 + mov r6, sp + movs r5, #0xc + ldrsb r5, [r6, r5] + adds r3, r0, r5 + ldr r0, [sp, #0x38] + asrs r1, r0, #8 + add r0, sp, #4 + movs r6, #0 + ldrsb r6, [r0, r6] + adds r2, r1, r6 + adds r7, r1, #0 + cmp r3, r2 + bgt _08009EB6 + mov r1, sp + movs r0, #0xe + ldrsb r0, [r1, r0] + subs r0, r0, r5 + adds r0, r3, r0 + cmp r0, r2 + bge _08009EC8 + cmp r3, r2 + bge _08009EB6 + b _0800A372 +_08009EB6: + add r0, sp, #4 + ldrb r0, [r0, #2] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r2, r0 + cmp r0, r3 + bge _08009EC8 + b _0800A372 +_08009EC8: + mov r2, sb + asrs r0, r2, #0x10 + mov r3, sp + movs r2, #0xd + ldrsb r2, [r3, r2] + adds r1, r0, r2 + add r0, sp, #4 + movs r5, #1 + ldrsb r5, [r0, r5] + mov r6, r8 + adds r3, r6, r5 + cmp r1, r3 + bgt _08009EF6 + mov r6, sp + movs r0, #0xf + ldrsb r0, [r6, r0] + subs r0, r0, r2 + adds r0, r1, r0 + cmp r0, r3 + bge _08009F08 + cmp r1, r3 + bge _08009EF6 + b _0800A372 +_08009EF6: + add r0, sp, #4 + ldrb r0, [r0, #3] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r3, r0 + cmp r0, r1 + bge _08009F08 + b _0800A372 +_08009F08: + ldr r0, [sp, #0x44] + asrs r1, r0, #0x10 + cmp r7, r1 + ble _08009F12 + b _0800A132 +_08009F12: + mov sb, r4 + ldr r3, [r4, #0x10] + movs r2, #1 + ands r2, r3 + cmp r2, #0 + beq _08009F20 + b _0800A0B8 +_08009F20: + movs r0, #0x80 + lsls r0, r0, #0xb + ldr r5, [sp, #0x30] + orrs r5, r0 + str r5, [sp, #0x30] + adds r6, r4, #0 + adds r6, #0x3e + movs r5, #0 + ldrsb r5, [r6, r5] + cmp r5, #0 + beq _08009F3A + strh r2, [r4, #8] + b _0800A372 +_08009F3A: + mov r2, sp + movs r0, #0xc + ldrsb r0, [r2, r0] + adds r0, r1, r0 + add r1, sp, #4 + ldrb r1, [r1, #2] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + lsls r0, r0, #8 + str r0, [sp, #0x38] + movs r0, #8 + ldrsh r1, [r4, r0] + cmp r1, #0 + bge _08009F5A + rsbs r1, r1, #0 +_08009F5A: + movs r0, #0x90 + lsls r0, r0, #3 + cmp r1, r0 + ble _08009FCC + movs r0, #0x80 + lsls r0, r0, #0xe + ldr r1, [sp, #0x30] + orrs r1, r0 + str r1, [sp, #0x30] + mov r2, sl + lsls r0, r2, #0x10 + cmp r0, #0 + ble _08009FB4 + ldr r3, [sp, #0x2c] + cmp r3, #0 + beq _08009FA2 + strh r2, [r4, #0xc] + mov r0, sl + strh r0, [r4, #8] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #4 + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x3d + strb r5, [r0] + strb r5, [r6] + b _0800A358 +_08009FA2: + mov r1, sl + strh r1, [r4, #0xc] + strh r1, [r4, #8] + ldr r0, [r4] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r0, r2 + str r0, [r4] + b _0800A366 +_08009FB4: + movs r0, #2 + orrs r3, r0 + str r3, [r4, #0x10] + ldr r0, _08009FC8 @ =0x0000FE80 + strh r0, [r4, #8] + movs r0, #0xfd + lsls r0, r0, #8 + strh r0, [r4, #0xa] + b _0800A372 + .align 2, 0 +_08009FC8: .4byte 0x0000FE80 +_08009FCC: + movs r3, #8 + ldrsh r0, [r4, r3] + cmp r0, #0 + bne _08009FD6 + b _0800A372 +_08009FD6: + ldr r1, [sp, #0x38] + asrs r0, r1, #8 + movs r1, #0xe + ldrsb r1, [r4, r1] + mov r2, r8 + subs r1, r2, r1 + movs r3, #8 + rsbs r3, r3, #0 + ldr r2, _0800A060 @ =sa2__sub_801EB44 + str r2, [sp] + ldr r2, [sp, #0x28] + bl sa2__sub_801F100 + adds r7, r0, #0 + cmp r7, #0 + bge _0800A068 + ldr r1, [r4, #0x10] + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r4, #0x10] + adds r0, r4, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _0800A01C + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _0800A042 + cmp r0, #3 + beq _0800A042 +_0800A01C: + cmp r2, #3 + bne _0800A034 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _0800A034 + movs r0, #0 + ldrsb r0, [r6, r0] + mov r4, sb + cmp r0, #0 + bne _0800A042 +_0800A034: + ldr r0, _0800A064 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] + adds r4, r0, #0 +_0800A042: + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + movs r0, #0 + strh r0, [r4, #8] + lsls r1, r7, #8 + ldr r0, [r4] + subs r0, r0, r1 + str r0, [r4] + b _0800A372 + .align 2, 0 +_0800A060: .4byte sa2__sub_801EB44 +_0800A064: .4byte gPlayer +_0800A068: + ldr r1, [r4, #0x10] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + bne _0800A09A + movs r0, #0x20 + orrs r1, r0 + ldr r3, [sp, #0x30] + orrs r3, r0 + subs r0, #0x25 + ands r1, r0 + str r1, [r4, #0x10] + ands r3, r0 + str r3, [sp, #0x30] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + adds r1, r4, #0 + adds r1, #0x40 + strb r0, [r1] +_0800A09A: + ldr r0, [r4, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + ldr r6, [sp, #0x30] + ands r6, r1 + str r6, [sp, #0x30] + strh r5, [r4, #0xc] + strh r5, [r4, #8] + ldr r0, [sp, #0x38] + str r0, [r4] + ldr r1, [sp, #0x3c] + str r1, [r4, #4] + b _0800A372 +_0800A0B8: + movs r0, #0x80 + lsls r0, r0, #0xb + ldr r2, [sp, #0x30] + orrs r2, r0 + str r2, [sp, #0x30] + adds r6, r4, #0 + adds r6, #0x3e + movs r5, #0 + ldrsb r5, [r6, r5] + cmp r5, #0 + beq _0800A0D4 + movs r0, #0 + strh r0, [r4, #8] + b _0800A372 +_0800A0D4: + mov r3, sl + lsls r0, r3, #0x10 + asrs r1, r0, #0x10 + adds r2, r1, #0 + cmp r1, #0 + bge _0800A0E2 + rsbs r2, r1, #0 +_0800A0E2: + movs r0, #0x90 + lsls r0, r0, #3 + cmp r2, r0 + bgt _0800A0EC + b _0800A372 +_0800A0EC: + movs r0, #0x80 + lsls r0, r0, #0xe + ldr r2, [sp, #0x30] + orrs r2, r0 + str r2, [sp, #0x30] + cmp r1, #0 + bge _0800A12C + ldr r3, [sp, #0x2c] + cmp r3, #0 + beq _0800A128 + mov r0, sl + strh r0, [r4, #0xc] + strh r0, [r4, #8] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #4 + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x3d + strb r5, [r0] + strb r5, [r6] + b _0800A358 +_0800A128: + adds r0, r4, #0 + b _0800A362 +_0800A12C: + strh r5, [r4, #0xc] + strh r5, [r4, #8] + b _0800A372 +_0800A132: + adds r5, r4, #0 + ldr r3, [r5, #0x10] + movs r2, #1 + mov sb, r2 + adds r2, r3, #0 + mov r6, sb + ands r2, r6 + cmp r2, #0 + bne _0800A146 + b _0800A2F0 +_0800A146: + movs r0, #0x80 + lsls r0, r0, #0xa + ldr r2, [sp, #0x30] + orrs r2, r0 + str r2, [sp, #0x30] + ldr r0, _0800A160 @ =gPlayer + 0x3E + movs r6, #0 + ldrsb r6, [r0, r6] + cmp r6, #0 + beq _0800A164 + movs r0, #0 + strh r0, [r5, #8] + b _0800A372 + .align 2, 0 +_0800A160: .4byte gPlayer + 0x3E +_0800A164: + mov r2, sp + movs r0, #0xe + ldrsb r0, [r2, r0] + adds r0, r1, r0 + add r1, sp, #4 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + subs r0, r0, r1 + lsls r0, r0, #8 + str r0, [sp, #0x38] + movs r0, #8 + ldrsh r1, [r5, r0] + cmp r1, #0 + bge _0800A184 + rsbs r1, r1, #0 +_0800A184: + movs r0, #0x90 + lsls r0, r0, #3 + cmp r1, r0 + ble _0800A1FC + movs r0, #0x80 + lsls r0, r0, #0xe + ldr r1, [sp, #0x30] + orrs r1, r0 + str r1, [sp, #0x30] + mov r2, sl + lsls r0, r2, #0x10 + cmp r0, #0 + bge _0800A1E8 + ldr r3, [sp, #0x2c] + cmp r3, #0 + beq _0800A1D4 + strh r2, [r5, #0xc] + mov r0, sl + strh r0, [r5, #8] + adds r0, r5, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #0xe + strb r0, [r5, #0xf] + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #4 + strb r0, [r1] + adds r0, r5, #0 + adds r0, #0x3d + strb r6, [r0] + ldr r1, _0800A1D0 @ =gPlayer + 0x3E + strb r6, [r1] + b _0800A358 + .align 2, 0 +_0800A1D0: .4byte gPlayer + 0x3E +_0800A1D4: + mov r2, sl + strh r2, [r5, #0xc] + strh r2, [r5, #8] + ldr r0, [r5] + ldr r3, _0800A1E4 @ =0xFFFFFF00 + adds r0, r0, r3 + str r0, [r5] + b _0800A366 + .align 2, 0 +_0800A1E4: .4byte 0xFFFFFF00 +_0800A1E8: + movs r0, #2 + orrs r3, r0 + str r3, [r5, #0x10] + movs r0, #0xc0 + lsls r0, r0, #1 + strh r0, [r5, #8] + movs r0, #0xfd + lsls r0, r0, #8 + strh r0, [r5, #0xa] + b _0800A372 +_0800A1FC: + movs r1, #8 + ldrsh r0, [r5, r1] + cmp r0, #0 + bne _0800A206 + b _0800A372 +_0800A206: + ldr r2, [sp, #0x38] + asrs r0, r2, #8 + movs r1, #0xe + ldrsb r1, [r5, r1] + add r1, r8 + ldr r2, _0800A290 @ =sa2__sub_801EB44 + str r2, [sp] + ldr r2, [sp, #0x28] + movs r3, #8 + bl sa2__sub_801F100 + adds r7, r0, #0 + cmp r7, #0 + bge _0800A29C + ldr r1, [r5, #0x10] + movs r0, #5 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r5, #0x10] + adds r0, r5, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + cmp r2, #2 + bne _0800A24A + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r4, r5, #0 + cmp r0, #1 + beq _0800A272 + cmp r0, #3 + beq _0800A272 +_0800A24A: + cmp r2, #3 + bne _0800A264 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r1, r0 + cmp r1, #0 + beq _0800A264 + ldr r3, _0800A294 @ =gPlayer + 0x3E + movs r0, #0 + ldrsb r0, [r3, r0] + adds r4, r5, #0 + cmp r0, #0 + bne _0800A272 +_0800A264: + ldr r0, _0800A298 @ =gPlayer + ldr r1, [r0, #0x10] + movs r2, #3 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0, #0x10] + adds r4, r0, #0 +_0800A272: + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + movs r0, #0 + strh r0, [r4, #8] + lsls r1, r7, #8 + ldr r0, [r4] + adds r0, r0, r1 + str r0, [r4] + b _0800A372 + .align 2, 0 +_0800A290: .4byte sa2__sub_801EB44 +_0800A294: .4byte gPlayer + 0x3E +_0800A298: .4byte gPlayer +_0800A29C: + ldr r1, [r5, #0x10] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + bne _0800A2CE + movs r0, #0x20 + orrs r1, r0 + ldr r2, [sp, #0x30] + orrs r2, r0 + subs r0, #0x25 + ands r1, r0 + str r1, [r5, #0x10] + ands r2, r0 + str r2, [sp, #0x30] + adds r0, r5, #0 + adds r0, #0x40 + movs r4, #0xe + strb r4, [r0] + adds r0, r5, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + strb r4, [r5, #0xf] +_0800A2CE: + ldr r0, [r5, #0x10] + mov r3, sb + orrs r0, r3 + str r0, [r5, #0x10] + ldr r0, [sp, #0x30] + orrs r0, r3 + str r0, [sp, #0x30] + strh r6, [r5, #0xc] + strh r6, [r5, #8] + ldr r1, [sp, #0x38] + movs r2, #0x80 + lsls r2, r2, #1 + adds r0, r1, r2 + str r0, [r5] + ldr r3, [sp, #0x3c] + str r3, [r5, #4] + b _0800A372 +_0800A2F0: + movs r0, #0x80 + lsls r0, r0, #0xa + orrs r3, r0 + str r3, [r5, #0x10] + adds r7, r5, #0 + adds r7, #0x3e + movs r6, #0 + ldrsb r6, [r7, r6] + cmp r6, #0 + beq _0800A308 + strh r2, [r5, #8] + b _0800A372 +_0800A308: + mov r1, sl + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + adds r2, r1, #0 + cmp r1, #0 + bge _0800A316 + rsbs r2, r1, #0 +_0800A316: + movs r0, #0x90 + lsls r0, r0, #3 + cmp r2, r0 + ble _0800A372 + movs r0, #0x80 + lsls r0, r0, #0xe + ldr r2, [sp, #0x30] + orrs r2, r0 + str r2, [sp, #0x30] + cmp r1, #0 + ble _0800A36E + ldr r3, [sp, #0x2c] + cmp r3, #0 + beq _0800A360 + mov r0, sl + strh r0, [r5, #0xc] + strh r0, [r5, #8] + adds r0, r5, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #0xe + strb r0, [r5, #0xf] + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #4 + strb r0, [r1] + adds r0, r5, #0 + adds r0, #0x3d + strb r6, [r0] + strb r6, [r7] +_0800A358: + movs r0, #0xa1 + bl m4aSongNumStart + b _0800A372 +_0800A360: + adds r0, r5, #0 +_0800A362: + bl sa2__sub_800DE44 +_0800A366: + movs r0, #0xa2 + bl m4aSongNumStart + b _0800A372 +_0800A36E: + strh r6, [r4, #0xc] + strh r6, [r4, #8] +_0800A372: + ldr r1, [sp, #0x34] + cmp r1, #0 + beq _0800A390 +_0800A378: + ldr r2, _0800A3A4 @ =gPlayer + ldr r1, [r2, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + bne _0800A390 + movs r0, #0x21 + rsbs r0, r0, #0 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r2, #0x10] +_0800A390: + ldr r0, [sp, #0x30] +_0800A392: + add sp, #0x48 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_0800A3A4: .4byte gPlayer + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800DA4C.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800DA4C.inc new file mode 100644 index 0000000000..39d7beaf94 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800DA4C.inc @@ -0,0 +1,408 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + adds r5, r0, #0 + ldr r0, [sp, #0x38] + lsls r1, r1, #0x10 + lsrs r1, r1, #0x10 + str r1, [sp] @ sp00 = worldX + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + str r2, [sp, #4] @ sp04 = worldY + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + movs r0, #0 + mov r8, r0 + ldr r2, _0800A400 @ =gPlayer + ldr r0, [r2, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0800A3FC + ldr r1, _0800A404 @ =gMultiplayerPlayerTasks + ldr r0, _0800A408 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r3, r0 + mov sb, r6 + adds r0, r2, #0 + adds r0, #0x27 + ldrb r0, [r0] + cmp r4, r0 + beq _0800A40C +_0800A3FC: + movs r0, #0 + b _0800A694 + .align 2, 0 +_0800A400: .4byte gPlayer +_0800A404: .4byte gMultiplayerPlayerTasks +_0800A408: .4byte 0x04000128 +_0800A40C: + ldr r0, [r2, #8] + cmp r0, #0 + bne _0800A4C0 + ldr r1, [r5, #0x30] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _0800A4C0 + ldr r1, [sp] + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + adds r1, r5, #0 + adds r1, #0x34 + movs r4, #0 + ldrsb r4, [r1, r4] + adds r2, r0, r4 + ldr r7, _0800A5A0 @ =0x03000050 + adds r0, r3, r7 + movs r7, #0 + ldrsh r1, [r0, r7] + ldr r7, _0800A5A4 @ =0x0300002C + adds r0, r3, r7 + movs r7, #0 + ldrsb r7, [r0, r7] + adds r1, r1, r7 + cmp r2, r1 + bgt _0800A458 + adds r0, r5, #0 + adds r0, #0x36 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r2, r0 + cmp r0, r1 + bge _0800A46A + cmp r2, r1 + blt _0800A4C0 +_0800A458: + ldr r4, _0800A5A8 @ =0x0300002E + adds r0, r3, r4 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + adds r0, r1, r0 + cmp r0, r2 + blt _0800A4C0 +_0800A46A: + ldr r7, [sp, #4] + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + adds r1, r5, #0 + adds r1, #0x35 + movs r3, #0 + ldrsb r3, [r1, r3] + adds r2, r0, r3 + mov r0, sb + adds r0, #0x52 + movs r1, #0 + ldrsh r0, [r0, r1] + adds r1, r6, #0 + adds r1, #0x2d + movs r4, #0 + ldrsb r4, [r1, r4] + adds r1, r0, r4 + cmp r2, r1 + bgt _0800A4A6 + adds r0, r5, #0 + adds r0, #0x37 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0800A4B8 + cmp r2, r1 + blt _0800A4C0 +_0800A4A6: + adds r0, r6, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r2 + blt _0800A4C0 +_0800A4B8: + movs r0, #2 + mov r2, r8 + orrs r2, r0 + mov r8, r2 +_0800A4C0: + ldr r0, [r6, #0x30] + movs r1, #1 + rsbs r1, r1, #0 + cmp r0, r1 + bne _0800A4CC + b _0800A5DC +_0800A4CC: + ldr r0, [r5, #0x28] + cmp r0, r1 + bne _0800A4D4 + b _0800A5DC +_0800A4D4: + ldr r4, [sp] + lsls r3, r4, #0x10 + asrs r1, r3, #0x10 + adds r0, r5, #0 + adds r0, #0x2c + movs r7, #0 + ldrsb r7, [r0, r7] + adds r4, r1, r7 + mov r2, sb + adds r2, #0x50 + movs r0, #0 + ldrsh r1, [r2, r0] + adds r0, r6, #0 + adds r0, #0x34 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov ip, r0 + add r1, ip + str r3, [sp, #8] + str r2, [sp, #0xc] + cmp r4, r1 + bgt _0800A518 + adds r0, r5, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r7 + adds r0, r4, r0 + cmp r0, r1 + bge _0800A52C + cmp r4, r1 + blt _0800A5DC +_0800A518: + adds r0, r6, #0 + adds r0, #0x36 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r2, ip + subs r0, r0, r2 + adds r0, r1, r0 + cmp r0, r4 + blt _0800A5DC +_0800A52C: + ldr r3, [sp, #4] + lsls r2, r3, #0x10 + asrs r0, r2, #0x10 + adds r1, r5, #0 + adds r1, #0x2d + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + str r1, [sp, #0x10] + adds r4, r0, r1 + mov r1, sb + adds r1, #0x52 + movs r7, #0 + ldrsh r0, [r1, r7] + movs r3, #0x35 + ldrsb r7, [r3, r6] + mov ip, r7 + adds r3, r0, r7 + mov sl, r2 + adds r2, r1, #0 + cmp r4, r3 + bgt _0800A570 + adds r0, r5, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldr r1, [sp, #0x10] + subs r0, r0, r1 + adds r0, r4, r0 + cmp r0, r3 + bge _0800A584 + cmp r4, r3 + blt _0800A5DC +_0800A570: + adds r0, r6, #0 + adds r0, #0x37 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r7, ip + subs r0, r0, r7 + adds r0, r3, r0 + cmp r0, r4 + blt _0800A5DC +_0800A584: + ldr r0, [sp, #0xc] + movs r3, #0 + ldrsh r1, [r0, r3] + ldr r4, [sp, #8] + asrs r0, r4, #0x10 + cmp r1, r0 + ble _0800A5AC + movs r0, #0x80 + lsls r0, r0, #0xb + mov r7, r8 + orrs r7, r0 + mov r8, r7 + b _0800A5B6 + .align 2, 0 +_0800A5A0: .4byte 0x03000050 +_0800A5A4: .4byte 0x0300002C +_0800A5A8: .4byte 0x0300002E +_0800A5AC: + movs r0, #0x80 + lsls r0, r0, #0xa + mov r1, r8 + orrs r1, r0 + mov r8, r1 +_0800A5B6: + movs r3, #0 + ldrsh r1, [r2, r3] + mov r4, sl + asrs r0, r4, #0x10 + cmp r1, r0 + ble _0800A5CE + movs r0, #0x80 + lsls r0, r0, #9 + mov r7, r8 + orrs r7, r0 + mov r8, r7 + b _0800A5D8 +_0800A5CE: + movs r0, #0x80 + lsls r0, r0, #0xd + mov r1, r8 + orrs r1, r0 + mov r8, r1 +_0800A5D8: + movs r0, #1 + b _0800A68C +_0800A5DC: + ldr r0, [r6, #0x28] + movs r1, #1 + rsbs r1, r1, #0 + cmp r0, r1 + beq _0800A692 + ldr r0, [r5, #0x30] + cmp r0, r1 + beq _0800A692 + ldr r3, [sp] + lsls r0, r3, #0x10 + asrs r0, r0, #0x10 + adds r1, r5, #0 + adds r1, #0x34 + movs r2, #0 + ldrsb r2, [r1, r2] + adds r3, r0, r2 + mov r0, sb + adds r0, #0x50 + movs r4, #0 + ldrsh r1, [r0, r4] + adds r0, r6, #0 + adds r0, #0x2c + movs r4, #0 + ldrsb r4, [r0, r4] + adds r1, r1, r4 + cmp r3, r1 + bgt _0800A628 + adds r0, r5, #0 + adds r0, #0x36 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r3, r0 + cmp r0, r1 + bge _0800A63A + cmp r3, r1 + blt _0800A692 +_0800A628: + adds r0, r6, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r3 + blt _0800A692 +_0800A63A: + ldr r7, [sp, #4] + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + adds r1, r5, #0 + adds r1, #0x35 + movs r4, #0 + ldrsb r4, [r1, r4] + adds r2, r0, r4 + mov r0, sb + adds r0, #0x52 + movs r1, #0 + ldrsh r0, [r0, r1] + adds r3, r6, #0 + adds r3, #0x2d + ldrb r3, [r3] + lsls r3, r3, #0x18 + asrs r3, r3, #0x18 + adds r1, r0, r3 + cmp r2, r1 + bgt _0800A678 + adds r0, r5, #0 + adds r0, #0x37 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r2, r0 + cmp r0, r1 + bge _0800A68A + cmp r2, r1 + blt _0800A692 +_0800A678: + adds r0, r6, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _0800A692 +_0800A68A: + movs r0, #2 +_0800A68C: + mov r2, r8 + orrs r2, r0 + mov r8, r2 +_0800A692: + mov r0, r8 +_0800A694: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800C1E8.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800C1E8.inc new file mode 100644 index 0000000000..e47fb4bbcf --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800C1E8.inc @@ -0,0 +1,115 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r5, r1, #0 + adds r4, r0, #0 + ldr r0, [sp, #0x1c] + mov r8, r0 + lsls r2, r2, #0x10 + lsrs r2, r2, #0x10 + lsls r3, r3, #0x10 + lsrs r3, r3, #0x10 + mov sb, r3 + ldr r1, [r0, #0x64] + mov ip, r1 + mov r7, ip + adds r7, #0xc + ldr r0, [r0, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0800C2AA + ldr r1, [r7, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _0800C2AA + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + lsls r1, r5, #0x18 + asrs r3, r1, #0x18 + adds r2, r0, r3 + mov r1, r8 + ldr r0, [r1] + asrs r0, r0, #8 + mov r1, ip + adds r1, #0x38 + movs r6, #0 + ldrsb r6, [r1, r6] + adds r1, r0, r6 + cmp r2, r1 + bgt _0800C24C + lsls r0, r5, #8 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0800C25E + cmp r2, r1 + blt _0800C2AA +_0800C24C: + mov r0, ip + adds r0, #0x3a + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r6 + adds r0, r1, r0 + cmp r0, r2 + blt _0800C2AA +_0800C25E: + mov r2, sb + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + adds r4, r5, #0 + lsls r1, r4, #0x10 + asrs r1, r1, #0x18 + adds r3, r0, r1 + mov r2, r8 + ldr r0, [r2, #4] + asrs r0, r0, #8 + adds r2, r7, #0 + adds r2, #0x2d + movs r5, #0 + ldrsb r5, [r2, r5] + adds r2, r0, r5 + cmp r3, r2 + bgt _0800C28E + asrs r0, r4, #0x18 + subs r0, r0, r1 + adds r0, r3, r0 + cmp r0, r2 + bge _0800C2A0 + cmp r3, r2 + blt _0800C2AA +_0800C28E: + adds r0, r7, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r5 + adds r0, r2, r0 + cmp r0, r3 + blt _0800C2AA +_0800C2A0: + mov r0, r8 + bl Coll_DamagePlayer + movs r0, #2 + b _0800C2AC +_0800C2AA: + movs r0, #0 +_0800C2AC: + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800C934.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800C934.inc new file mode 100644 index 0000000000..bd2205bae9 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800C934.inc @@ -0,0 +1,349 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + mov r8, r0 @ r8 = s + mov sb, r2 @ r2 = y + adds r7, r3, #0 @ r7 = rectPlayer + ldr r4, [sp, #0x2c] @ r4 = p + ldr r0, _0800CA1C @ =gStageFlags + ldrh r2, [r0] + movs r0, #0x80 + ands r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp] + mov r0, r8 + adds r0, #0x2d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 @ r0 = hbTop = HB_TOP(s->hitboxes[0]) + mov r2, r8 + adds r2, #0x2f + ldrb r2, [r2] + lsls r2, r2, #0x18 + asrs r2, r2, #0x18 @ r2 hbBottom = HB_BOTTOM(s->hitboxes[0]) + adds r0, r0, r2 + asrs r0, r0, #1 + add r0, sb @ r0 = y + (hbBottom - hbTop) / 2 + mov sl, r0 @ sl = middleY + mov r0, r8 + adds r0, #0x2c + movs r3, #0 + ldrsb r3, [r0, r3] @ r3 = HB_LEFT(s->hitboxes[0].b) + adds r1, r1, r3 @ r1 = x += HB_LEFT(s->hitboxes[0].b) + ldr r0, [r4] + asrs r0, r0, #8 @ r0 = I(p->qWorldX) + movs r5, #0 + ldrsb r5, [r7, r5] @ r5 = rectPlayer + adds r2, r0, r5 @ r2 = I(p->qWorldX) + HB_LEFT(rectPlayer) + cmp r1, r2 + bgt _0800C9A2 + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 @ r0 = HB_RIGHT(s->hitboxes[0].b.right) + subs r0, r0, r3 @ r0 = HB_WIDTH(s->hitboxes[0].b.right) + adds r0, r1, r0 + cmp r0, r2 + bge _0800C9B0 + cmp r1, r2 + bge _0800C9A2 + b _0800CBA8_return_0 +_0800C9A2: + movs r0, #2 + ldrsb r0, [r7, r0] @ r0 = r7+2 = rectPlayer + subs r0, r0, r5 + adds r0, r2, r0 + cmp r0, r1 + bge _0800C9B0 + b _0800CBA8_return_0 +_0800C9B0: + mov r3, r8 + adds r3, #0x2d + movs r0, #0 + ldrsb r0, [r3, r0] + mov ip, r0 + mov r6, sb + add r6, ip + ldr r2, [r4, #4] + asrs r0, r2, #8 @ r0 = I(p->qWorldY) + movs r1, #1 + ldrsb r1, [r7, r1] + adds r5, r0, r1 + str r3, [sp, #4] + cmp r6, r5 + bgt _0800C9E8 + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov r3, ip + subs r0, r0, r3 + adds r0, r6, r0 + cmp r0, r5 + bge _0800C9F6 + cmp r6, r5 + bge _0800C9E8 + b _0800CBA8_return_0 +_0800C9E8: + movs r0, #3 + ldrsb r0, [r7, r0] + subs r0, r0, r1 + adds r0, r5, r0 + cmp r0, r6 + bge _0800C9F6 + b _0800CBA8_return_0 +_0800C9F6: + ldr r0, [sp] + cmp r0, #0 + bne _0800CA20 + asrs r0, r2, #8 + cmp r0, sl + ble _0800CA28 + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + subs r0, r0, r1 + lsls r0, r0, #8 + ldrb r1, [r4, #4] + adds r1, r1, r0 + str r1, [r4, #4] + b _0800CB4C + .align 2, 0 +_0800CA1C: .4byte gStageFlags +_0800CA20: + asrs r0, r2, #8 + cmp r0, sl + bge _0800CA28 + b _0800CB38 +_0800CA28: + ldr r1, [sp] + cmp r1, #0 + bne _0800CA3E + ldr r2, [sp, #4] + movs r0, #0 + ldrsb r0, [r2, r0] + add r0, sb + movs r1, #3 + ldrsb r1, [r7, r1] + subs r0, r0, r1 + b _0800CA50 +_0800CA3E: + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + movs r1, #3 + ldrsb r1, [r7, r1] + adds r0, r0, r1 +_0800CA50: + lsls r0, r0, #8 + ldrb r1, [r4, #4] + adds r1, r1, r0 + str r1, [r4, #4] + ldr r3, _0800CA6C @ =gCamera + movs r1, #0x14 + ldrsh r0, [r3, r1] + lsls r0, r0, #8 + ldr r1, [r4, #4] + cmp r1, r0 + bge _0800CA70 +_0800CA66: + str r0, [r4, #4] + b _0800CBA8_return_0 + .align 2, 0 +_0800CA6C: .4byte gCamera +_0800CA70: + ldr r2, _0800CB34 @ =gCamera + movs r3, #0x16 + ldrsh r0, [r2, r3] + lsls r0, r0, #8 + cmp r1, r0 + bge _0800CA66 + movs r1, #0xa + ldrsh r0, [r4, r1] + cmp r0, #0 + bge _0800CA86 + b _0800CBA8_return_0 +_0800CA86: + ldrb r0, [r4, #0xf] + rsbs r0, r0, #0 + strb r0, [r7, #1] + ldrb r0, [r4, #0xf] + strb r0, [r7, #3] + movs r0, #0 + strh r0, [r4, #0xa] + ldr r2, [r4, #0x10] + movs r0, #2 + ands r2, r0 + cmp r2, #0 + bne _0800CAAC + ldrb r0, [r4, #0x14] + adds r0, #0x20 + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + beq _0800CAAC + strh r2, [r4, #0xc] +_0800CAAC: + ldr r0, [r4, #0x10] + movs r1, #8 + orrs r0, r1 + str r0, [r4, #0x10] + ldr r2, [sp, #0x30] + ldr r0, [r2] + orrs r0, r1 + str r0, [r2] + adds r0, r4, #0 + adds r0, #0x59 + movs r2, #0 + ldrsb r2, [r0, r2] + ldr r1, [r4, #0x10] + adds r3, r0, #0 + cmp r2, #2 + bne _0800CADC + subs r0, #0x1c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _0800CB00 + cmp r0, #3 + beq _0800CB00 +_0800CADC: + cmp r2, #3 + bne _0800CAF8 + movs r0, #0x80 + lsls r0, r0, #0x13 + ands r0, r1 + cmp r0, #0 + beq _0800CAF8 + adds r0, r4, #0 + adds r0, #0x3e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0800CB00 +_0800CAF8: + movs r0, #3 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r4, #0x10] +_0800CB00: + mov r0, r8 + str r0, [r4, #0x28] + ldr r0, [sp, #0x28] + cmp r0, #0 + bne _0800CB9A_return_1 + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r0, #2 + bne _0800CB24 + adds r0, r4, #0 + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + beq _0800CB2E + cmp r0, #3 + beq _0800CB2E +_0800CB24: + adds r0, r4, #0 + bl sa2__sub_8021BE0 + ldrh r0, [r4, #8] + strh r0, [r4, #0xc] +_0800CB2E: + movs r0, #0 + strb r0, [r4, #0x14] + b _0800CB9A_return_1 + .align 2, 0 +_0800CB34: .4byte gCamera +_0800CB38: + ldr r3, [sp, #4] + movs r0, #0 + ldrsb r0, [r3, r0] + add r0, sb + adds r0, r0, r1 + lsls r0, r0, #8 + ldr r1, _0800CBA0 @ =0xFFFFFF00 + bics r2, r1 + adds r0, r2, r0 + str r0, [r4, #4] +_0800CB4C: + ldr r1, _0800CBA4 @ =gCamera + movs r2, #0x14 + ldrsh r0, [r1, r2] + lsls r0, r0, #8 + ldr r1, [r4, #4] + cmp r1, r0 + bge _0800CB5C + b _0800CA66 +_0800CB5C: + ldr r3, _0800CBA4 @ =gCamera + movs r2, #0x16 + ldrsh r0, [r3, r2] + lsls r0, r0, #8 + cmp r1, r0 + blt _0800CB6A + b _0800CA66 +_0800CB6A: + ldr r3, [sp, #0x30] + ldr r0, [r3] + movs r1, #0x80 + lsls r1, r1, #9 + orrs r0, r1 + str r0, [r3] + movs r1, #0xa + ldrsh r0, [r4, r1] + cmp r0, #0 + bgt _0800CBA8_return_0 + movs r0, #0 + strh r0, [r4, #0xa] + ldr r2, [r4, #0x10] + movs r0, #2 + ands r2, r0 + cmp r2, #0 + bne _0800CB9A_return_1 + ldrb r0, [r4, #0x14] + adds r0, #0x20 + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + beq _0800CB9A_return_1 + strh r2, [r4, #0xc] +_0800CB9A_return_1: + movs r0, #1 + b _0800CBAA + .align 2, 0 +_0800CBA0: .4byte 0xFFFFFF00 +_0800CBA4: .4byte gCamera +_0800CBA8_return_0: + movs r0, #0 +_0800CBAA: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800CBBC.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800CBBC.inc new file mode 100644 index 0000000000..4d82e7327c --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/collision__sub_800CBBC.inc @@ -0,0 +1,333 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + adds r6, r0, #0 @ r6 = s + mov sb, r1 @ sb = x + mov sl, r2 @ sl = y + adds r7, r3, #0 @ r7 = rectPlayer + ldr r4, [sp, #0x3c] @ r4 = p + ldr r0, [sp, #0x40] + mov r8, r0 @ r8 = param6 + adds r0, r6, #0 + adds r0, #0x2c + movs r5, #0 + ldrsb r5, [r0, r5] @ r5 = shbLeft = s->hitboxes[0].b.left + adds r0, #2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov ip, r0 @ ip = shbRight = s->hitboxes[0].b.right + adds r0, r5, r0 + asrs r0, r0, #1 + add r0, sb + str r0, [sp, #8] @ sp08 = shbMiddleH + ldrb r0, [r4, #0x14] + adds r0, #0x20 + movs r1, #0xc0 + ands r0, r1 + asrs r0, r0, #6 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0800CC04 + b _0800CE20_return_FALSE +_0800CC04: + mov r1, sb @ r1 = x + adds r3, r1, r5 @ r3 = x + shbLeft + ldr r0, [r4] + asrs r1, r0, #8 + movs r2, #0 + ldrsb r2, [r7, r2] + adds r1, r1, r2 + str r0, [sp, #0x10] @ sp10 = p->x + str r2, [sp, #0xc] @ sp0C = rectPlayer.left + cmp r3, r1 + bgt _0800CC2A @ (x + shbLeft) > (I(p->x) + rectPlayer->left)) + mov r2, ip @ r2 = ip = shbRight + subs r0, r2, r5 + adds r0, r3, r0 + cmp r0, r1 + bge _0800CC3A + cmp r3, r1 + bge _0800CC2A + b _0800CE20_return_FALSE +_0800CC2A: + movs r0, #2 + ldrsb r0, [r7, r0] + ldr r5, [sp, #0xc] + subs r0, r0, r5 + adds r0, r1, r0 + cmp r0, r3 + bge _0800CC3A + b _0800CE20_return_FALSE +_0800CC3A: + adds r0, r6, #0 + adds r0, #0x2d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + str r0, [sp, #0x14] + adds r2, r0, #0 + add r2, sl + ldr r1, [r4, #4] + asrs r0, r1, #8 + movs r3, #1 + ldrsb r3, [r7, r3] + mov ip, r3 + adds r3, r0, r3 + mov sl, r1 + cmp r2, r3 + bgt _0800CC76 + adds r0, r6, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + ldr r5, [sp, #0x14] + subs r0, r0, r5 + adds r0, r2, r0 + cmp r0, r3 + bge _0800CC86 + cmp r2, r3 + bge _0800CC76 + b _0800CE20_return_FALSE +_0800CC76: + movs r0, #3 + ldrsb r0, [r7, r0] + mov r1, ip + subs r0, r0, r1 + adds r0, r3, r0 + cmp r0, r2 + bge _0800CC86 + b _0800CE20_return_FALSE +_0800CC86: + ldr r2, [sp, #0x10] + asrs r0, r2, #8 + ldr r3, [sp, #8] + cmp r0, r3 + bgt _0800CD58 + adds r0, r6, #0 + adds r0, #0x2c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + movs r1, #2 + ldrsb r1, [r7, r1] + subs r5, r0, r1 + mov r0, sl + asrs r1, r0, #8 + adds r0, r4, #0 + adds r0, #0x27 + ldrb r2, [r0] + movs r3, #8 + rsbs r3, r3, #0 + movs r0, #0 + str r0, [sp] + ldr r0, _0800CCC8 @ =sa2__sub_801ED24 + str r0, [sp, #4] + adds r0, r5, #0 + bl sa2__sub_801E4E4 + cmp r0, #0 + blt _0800CCCC + lsls r0, r5, #8 + b _0800CCE2 + .align 2, 0 +_0800CCC8: .4byte sa2__sub_801ED24 +_0800CCCC: + adds r0, r6, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + movs r1, #0 + ldrsb r1, [r7, r1] + subs r0, r0, r1 + adds r0, #1 + lsls r0, r0, #8 +_0800CCE2: + str r0, [r4] + movs r1, #8 + ldrsh r0, [r4, r1] + cmp r0, #0 + bge _0800CCEE + b _0800CE20_return_FALSE +_0800CCEE: + mov r2, r8 + ldr r0, [r2] + movs r1, #0x80 + lsls r1, r1, #0xa + orrs r0, r1 + str r0, [r2] + ldr r2, [r4, #0x10] + movs r0, #2 + ands r0, r2 + cmp r0, #0 + bne _0800CDD0 + adds r0, r4, #0 + adds r0, #0x3e + movs r3, #0 + ldrsb r3, [r0, r3] + cmp r3, #0 + bne _0800CDD0 + movs r5, #8 + ldrsh r0, [r4, r5] + cmp r0, #0 + ble _0800CDD4 + movs r1, #0x20 + orrs r2, r1 + str r2, [r4, #0x10] + mov r2, r8 + ldr r0, [r2] + orrs r0, r1 + str r0, [r2] + ldr r0, [r4, #0x10] + subs r1, #0x25 + ands r0, r1 + str r0, [r4, #0x10] + ldr r0, [r2] + ands r0, r1 + str r0, [r2] + ldr r0, [r4, #0x10] + adds r1, #3 + ands r0, r1 + str r0, [r4, #0x10] + ldr r0, [r2] + ands r0, r1 + str r0, [r2] + strh r3, [r4, #0xc] + strh r3, [r4, #8] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + b _0800CDD4 +_0800CD58: + adds r0, r6, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + ldr r3, [sp, #0xc] + subs r0, r0, r3 + adds r5, r0, #1 + mov r0, sl + asrs r1, r0, #8 + adds r0, r4, #0 + adds r0, #0x27 + ldrb r2, [r0] + movs r0, #0 + str r0, [sp] + ldr r0, _0800CD8C @ =sa2__sub_801ED24 + str r0, [sp, #4] + adds r0, r5, #0 + movs r3, #8 + bl sa2__sub_801E4E4 + cmp r0, #0 + blt _0800CD90 + lsls r0, r5, #8 + b _0800CDA4 + .align 2, 0 +_0800CD8C: .4byte sa2__sub_801ED24 +_0800CD90: + adds r0, r6, #0 + adds r0, #0x2c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + add r0, sb + movs r1, #2 + ldrsb r1, [r7, r1] + subs r0, r0, r1 + lsls r0, r0, #8 +_0800CDA4: + str r0, [r4] + movs r1, #8 + ldrsh r0, [r4, r1] + cmp r0, #0 + bgt _0800CE20_return_FALSE + mov r2, r8 + ldr r0, [r2] + movs r1, #0x80 + lsls r1, r1, #0xb + orrs r0, r1 + str r0, [r2] + ldr r2, [r4, #0x10] + movs r0, #2 + ands r0, r2 + cmp r0, #0 + bne _0800CDD0 + adds r0, r4, #0 + adds r0, #0x3e + movs r3, #0 + ldrsb r3, [r0, r3] + cmp r3, #0 + beq _0800CDD8 +_0800CDD0: + movs r0, #0 + strh r0, [r4, #8] +_0800CDD4: + movs r0, #1 + b _0800CE22 +_0800CDD8: + movs r5, #8 + ldrsh r0, [r4, r5] + cmp r0, #0 + bge _0800CDD4 + movs r1, #0x20 + orrs r2, r1 + str r2, [r4, #0x10] + mov r2, r8 + ldr r0, [r2] + orrs r0, r1 + str r0, [r2] + ldr r0, [r4, #0x10] + subs r1, #0x25 + ands r0, r1 + str r0, [r4, #0x10] + ldr r0, [r2] + ands r0, r1 + str r0, [r2] + ldr r0, [r4, #0x10] + movs r1, #1 + orrs r0, r1 + str r0, [r4, #0x10] + ldr r0, [r2] + orrs r0, r1 + str r0, [r2] + strh r3, [r4, #0xc] + strh r3, [r4, #8] + adds r0, r4, #0 + movs r1, #0xe + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #0xe + strb r0, [r4, #0xf] + b _0800CDD4 +_0800CE20_return_FALSE: + movs r0, #0 +_0800CE22: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/ent_manager__SpawnMapEntities.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/ent_manager__SpawnMapEntities.inc new file mode 100644 index 0000000000..b63ae3e494 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/ent_manager__SpawnMapEntities.inc @@ -0,0 +1,573 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x30 + ldr r0, _08008A30 @ =gStageFlags + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r4, r0, #0x10 + cmp r4, #0 + beq _080088C6 + b _08008CCA +_080088C6: + ldr r0, _08008A34 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp, #0x10] + ldr r0, [r1] + str r0, [sp, #0x14] + ldr r0, _08008A38 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + beq _080088EC + ldr r0, [r1, #8] + adds r0, #0xc + str r0, [sp, #0x1c] + ldr r0, [r1, #4] + adds r0, #0xc + str r0, [sp, #0x18] +_080088EC: + ldr r1, [sp, #0x14] + adds r1, #4 + ldm r1!, {r0} + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + ldm r1!, {r0} + str r1, [sp, #0x14] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0xc] + mov r1, sp + ldr r2, _08008A3C @ =gCamera + ldrh r3, [r2] + adds r0, r3, #0 + subs r0, #0x80 + strh r0, [r1] + movs r5, #0xb8 + lsls r5, r5, #1 + adds r0, r3, r5 + strh r0, [r1, #4] + ldrh r2, [r2, #2] + adds r0, r2, #0 + subs r0, #0x80 + strh r0, [r1, #2] + movs r3, #0x90 + lsls r3, r3, #1 + adds r0, r2, r3 + strh r0, [r1, #6] + mov r0, sp + movs r5, #0 + ldrsh r0, [r0, r5] + cmp r0, #0 + bge _08008934 + mov r0, sp + strh r4, [r0] +_08008934: + mov r0, sp + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _08008942 + mov r0, sp + strh r4, [r0, #2] +_08008942: + mov r0, sp + movs r1, #4 + ldrsh r0, [r0, r1] + cmp r0, #0 + bge _08008950 + mov r0, sp + strh r4, [r0, #4] +_08008950: + mov r0, sp + movs r2, #6 + ldrsh r0, [r0, r2] + cmp r0, #0 + bge _0800895E + mov r0, sp + strh r4, [r0, #6] +_0800895E: + mov r0, sp + movs r3, #0 + ldrsh r0, [r0, r3] + ldr r5, [sp, #8] + lsls r3, r5, #8 + cmp r0, r3 + blo _08008972 + mov r1, sp + subs r0, r3, #1 + strh r0, [r1] +_08008972: + mov r0, sp + movs r1, #2 + ldrsh r0, [r0, r1] + ldr r5, [sp, #0xc] + lsls r2, r5, #8 + cmp r0, r2 + blo _08008986 + mov r1, sp + subs r0, r2, #1 + strh r0, [r1, #2] +_08008986: + mov r0, sp + movs r1, #4 + ldrsh r0, [r0, r1] + cmp r0, r3 + blo _08008996 + mov r1, sp + subs r0, r3, #1 + strh r0, [r1, #4] +_08008996: + mov r0, sp + movs r3, #6 + ldrsh r0, [r0, r3] + cmp r0, r2 + blo _080089A6 + mov r1, sp + subs r0, r2, #1 + strh r0, [r1, #6] +_080089A6: + mov r0, sp + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + lsls r1, r0, #8 + mov r0, sp + movs r5, #6 + ldrsh r0, [r0, r5] + cmp r1, r0 + blt _080089C2 + b _08008CB2 +_080089C2: + ldr r0, [sp, #0xc] + cmp sb, r0 + blo _080089CA + b _08008CB2 +_080089CA: + mov r0, sp + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + mov r0, sp + movs r2, #4 + ldrsh r0, [r0, r2] + mov r3, sb + adds r3, #1 + str r3, [sp, #0x24] + cmp r1, r0 + blt _080089EC + b _08008C96 +_080089EC: + ldr r5, [sp, #8] + cmp r8, r5 + blo _080089F4 + b _08008C96 +_080089F4: + movs r0, #1 + rsbs r0, r0, #0 + mov sl, r0 + mov r7, sp +_080089FC: + ldr r0, _08008A38 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08008A06 + b _08008BE4 +_08008A06: + ldr r1, [sp, #8] + mov r0, sb + muls r0, r1, r0 + mov r3, r8 + lsls r2, r3, #2 + lsls r1, r0, #2 + ldr r5, [sp, #0x14] + adds r1, r1, r5 + adds r1, r2, r1 + ldr r6, [r1] + str r0, [sp, #0x2c] + str r2, [sp, #0x28] + adds r3, #1 + str r3, [sp, #0x20] + cmp r6, #0 + beq _08008AB2 + adds r0, r6, #0 + subs r0, #8 + adds r5, r5, r0 + movs r6, #0 + b _08008AA8 + .align 2, 0 +_08008A30: .4byte gStageFlags +_08008A34: .4byte gCurTask +_08008A38: .4byte gGameMode +_08008A3C: .4byte gCamera +_08008A40: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + movs r1, #2 + rsbs r1, r1, #0 + cmp r0, r1 + blt _08008AA4 + ldrb r2, [r5] + lsls r2, r2, #3 + mov r3, r8 + lsls r0, r3, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r3, #0 + ldrsh r0, [r7, r3] + cmp r2, r0 + blt _08008AA4 + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _08008AA4 + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08008AA4 + movs r1, #6 + ldrsh r0, [r7, r1] + cmp r2, r0 + bgt _08008AA4 + ldr r1, _08008BDC @ =gSpriteInits_Interactables + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_08008AA4: + adds r5, #7 + adds r6, #1 +_08008AA8: + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, sl + bne _08008A40 +_08008AB2: + ldr r2, [sp, #0x2c] + lsls r0, r2, #2 + ldr r3, [sp, #0x18] + adds r0, r0, r3 + ldr r5, [sp, #0x28] + adds r0, r5, r0 + ldr r6, [r0] + cmp r6, #0 + beq _08008B3E + adds r0, r6, #0 + subs r0, #8 + adds r4, r3, r0 + movs r6, #0 + ldrb r1, [r4] + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, sl + beq _08008B3E + movs r5, #2 + rsbs r5, r5, #0 +_08008ADA: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, r5 + blt _08008B30 + ldrb r2, [r4] + lsls r2, r2, #3 + mov r1, r8 + lsls r0, r1, #8 + adds r2, r2, r0 + ldrb r0, [r4, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r3, #0 + ldrsh r0, [r7, r3] + cmp r2, r0 + blt _08008B30 + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _08008B30 + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08008B30 + movs r1, #6 + ldrsh r0, [r7, r1] + cmp r2, r0 + bgt _08008B30 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + adds r0, r4, #0 + mov r1, r8 + mov r2, sb + bl CreateEntity_ItemBox +_08008B30: + adds r4, #3 + adds r6, #1 + ldrb r1, [r4] + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, sl + bne _08008ADA +_08008B3E: + ldr r2, [sp, #0x2c] + lsls r0, r2, #2 + ldr r3, [sp, #0x1c] + adds r0, r0, r3 + ldr r5, [sp, #0x28] + adds r0, r5, r0 + ldr r6, [r0] + cmp r6, #0 + bne _08008B52 + b _08008C7C +_08008B52: + adds r0, r6, #0 + subs r0, #8 + adds r5, r3, r0 + movs r6, #0 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, sl + bne _08008B66 + b _08008C7C +_08008B66: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + movs r1, #2 + rsbs r1, r1, #0 + cmp r0, r1 + blt _08008BCA + ldrb r2, [r5] + lsls r2, r2, #3 + mov r3, r8 + lsls r0, r3, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r3, #0 + ldrsh r0, [r7, r3] + cmp r2, r0 + blt _08008BCA + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _08008BCA + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08008BCA + movs r1, #6 + ldrsh r0, [r7, r1] + cmp r2, r0 + bgt _08008BCA + ldr r1, _08008BE0 @ =gSpriteInits_Enemies + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_08008BCA: + adds r5, #7 + adds r6, #1 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, sl + bne _08008B66 + b _08008C7C + .align 2, 0 +_08008BDC: .4byte gSpriteInits_Interactables +_08008BE0: .4byte gSpriteInits_Enemies +_08008BE4: + ldr r2, [sp, #8] + mov r0, sb + muls r0, r2, r0 + mov r3, r8 + lsls r1, r3, #2 + lsls r0, r0, #2 + ldr r5, [sp, #0x14] + adds r0, r0, r5 + adds r1, r1, r0 + ldr r6, [r1] + adds r3, #1 + str r3, [sp, #0x20] + cmp r6, #0 + beq _08008C7C + adds r0, r6, #0 + subs r0, #8 + adds r5, r5, r0 + movs r6, #0 + b _08008C72 +_08008C0A: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + movs r1, #2 + rsbs r1, r1, #0 + cmp r0, r1 + blt _08008C6E + ldrb r2, [r5] + lsls r2, r2, #3 + mov r3, r8 + lsls r0, r3, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r3, #0 + ldrsh r0, [r7, r3] + cmp r2, r0 + blt _08008C6E + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _08008C6E + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08008C6E + movs r1, #6 + ldrsh r0, [r7, r1] + cmp r2, r0 + bgt _08008C6E + ldr r1, _08008CDC @ =gSpriteInits_InteractablesMultiplayer + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_08008C6E: + adds r5, #7 + adds r6, #1 +_08008C72: + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, sl + bne _08008C0A +_08008C7C: + ldr r2, [sp, #0x20] + lsls r0, r2, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r1, r0 + bge _08008C96 + ldr r5, [sp, #8] + cmp r8, r5 + bhs _08008C96 + b _080089FC +_08008C96: + ldr r1, [sp, #0x24] + lsls r0, r1, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + lsls r1, r0, #8 + mov r0, sp + movs r2, #6 + ldrsh r0, [r0, r2] + cmp r1, r0 + bge _08008CB2 + ldr r3, [sp, #0xc] + cmp sb, r3 + bhs _08008CB2 + b _080089CA +_08008CB2: + ldr r1, _08008CE0 @ =gCamera + ldrh r0, [r1] + movs r2, #0 + ldr r5, [sp, #0x10] + strh r0, [r5, #0xc] + ldrh r0, [r1, #2] + strh r0, [r5, #0xe] + strb r2, [r5, #0x10] + ldr r0, _08008CE4 @ =gCurTask + ldr r1, [r0] + ldr r0, _08008CE8 @ =sa2__Task_8008DCC + str r0, [r1, #8] +_08008CCA: + add sp, #0x30 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08008CDC: .4byte gSpriteInits_InteractablesMultiplayer +_08008CE0: .4byte gCamera +_08008CE4: .4byte gCurTask +_08008CE8: .4byte sa2__Task_8008DCC + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/ent_manager__Task_8008DCC.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/ent_manager__Task_8008DCC.inc new file mode 100644 index 0000000000..0616b03658 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/ent_manager__Task_8008DCC.inc @@ -0,0 +1,1205 @@ +.include "constants/constants.inc" + +.syntax unified +.text + + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x34 + ldr r0, _08008D38 @ =gStageFlags + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08008D08 + bl _080095B4 +_08008D08: + ldr r0, _08008D3C @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp, #0x18] + ldrb r0, [r1, #0x10] + cmp r0, #0 + bne _08008DDC + ldr r0, _08008D40 @ =gCamera + movs r1, #0 + ldrsh r3, [r0, r1] + ldr r4, [sp, #0x18] + movs r5, #0xc + ldrsh r2, [r4, r5] + subs r1, r3, r2 + adds r6, r0, #0 + cmp r1, #0 + blt _08008D44 + cmp r1, #0xf8 + bgt _08008DDC + b _08008D4A + .align 2, 0 +_08008D38: .4byte gStageFlags +_08008D3C: .4byte gCurTask +_08008D40: .4byte gCamera +_08008D44: + subs r0, r2, r3 + cmp r0, #0xf8 + bgt _08008DDC +_08008D4A: + movs r7, #2 + ldrsh r2, [r6, r7] + ldr r1, [sp, #0x18] + movs r3, #0xe + ldrsh r0, [r1, r3] + subs r1, r2, r0 + cmp r1, #0 + blt _08008D60 + cmp r1, #0xd0 + bgt _08008DDC + b _08008D66 +_08008D60: + subs r0, r0, r2 + cmp r0, #0xd0 + bgt _08008DDC +_08008D66: + ldr r4, [sp, #0x18] + ldr r4, [r4] + str r4, [sp, #0x1c] + ldr r0, _08008DC0 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + beq _08008D82 + ldr r5, [sp, #0x18] + ldr r0, [r5, #8] + adds r0, #0xc + str r0, [sp, #0x24] + ldr r0, [r5, #4] + adds r0, #0xc + str r0, [sp, #0x20] +_08008D82: + ldr r7, [sp, #0x1c] + adds r7, #4 + adds r1, r7, #0 + ldm r1!, {r0} + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x10] + ldm r1!, {r0} + str r1, [sp, #0x1c] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x14] + ldrh r4, [r6] + movs r2, #0 + ldrsh r1, [r6, r2] + ldr r5, [sp, #0x18] + ldrh r3, [r5, #0xc] + movs r7, #0xc + ldrsh r0, [r5, r7] + cmp r1, r0 + ble _08008DC4 + mov r2, sp + movs r1, #0xb8 + lsls r1, r1, #1 + adds r0, r1, #0 + adds r1, r3, r0 + strh r1, [r2] + mov r1, sp + adds r0, r4, r0 + b _08008DD2 + .align 2, 0 +_08008DC0: .4byte gGameMode +_08008DC4: + mov r1, sp + adds r0, r4, #0 + subs r0, #0x80 + strh r0, [r1] + ldr r2, [sp, #0x18] + ldrh r0, [r2, #0xc] + subs r0, #0x80 +_08008DD2: + strh r0, [r1, #4] + ldr r3, [sp, #0x18] + ldrb r0, [r3, #0x10] + cmp r0, #0 + beq _08008DE2 +_08008DDC: + bl SpawnMapEntities + b _080095B4 +_08008DE2: + mov r1, sp + ldrh r0, [r6, #2] + adds r4, r0, #0 + subs r4, #0x80 + strh r4, [r1, #2] + movs r7, #0x90 + lsls r7, r7, #1 + adds r5, r7, #0 + adds r2, r0, r5 + strh r2, [r1, #6] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + ldr r1, [sp, #0x18] + ldrh r1, [r1, #0xe] + mov r8, r1 + ldr r3, [sp, #0x18] + movs r7, #0xe + ldrsh r1, [r3, r7] + cmp r0, r1 + ble _08008E16 + add r0, sp, #8 + mov r3, r8 + adds r1, r3, r5 + strh r1, [r0, #2] + strh r2, [r0, #6] + b _08008E22 +_08008E16: + add r1, sp, #8 + strh r4, [r1, #2] + ldr r4, [sp, #0x18] + ldrh r0, [r4, #0xe] + subs r0, #0x80 + strh r0, [r1, #6] +_08008E22: + add r4, sp, #8 + ldrh r1, [r6] + adds r0, r1, #0 + subs r0, #0x80 + movs r5, #0 + mov r7, sp + strh r0, [r7, #8] + movs r2, #0xb8 + lsls r2, r2, #1 + adds r0, r1, r2 + strh r0, [r7, #0xc] + mov r0, sp + movs r3, #0 + ldrsh r0, [r0, r3] + cmp r0, #0 + bge _08008E46 + mov r0, sp + strh r5, [r0] +_08008E46: + mov r0, sp + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _08008E54 + mov r0, sp + strh r5, [r0, #2] +_08008E54: + mov r0, sp + movs r7, #4 + ldrsh r0, [r0, r7] + cmp r0, #0 + bge _08008E62 + mov r0, sp + strh r5, [r0, #4] +_08008E62: + mov r0, sp + movs r1, #6 + ldrsh r0, [r0, r1] + cmp r0, #0 + bge _08008E70 + mov r0, sp + strh r5, [r0, #6] +_08008E70: + mov r0, sp + movs r2, #0 + ldrsh r0, [r0, r2] + ldr r7, [sp, #0x10] + lsls r3, r7, #8 + cmp r0, r3 + blo _08008E84 + mov r1, sp + subs r0, r3, #1 + strh r0, [r1] +_08008E84: + mov r0, sp + movs r1, #2 + ldrsh r0, [r0, r1] + ldr r7, [sp, #0x14] + lsls r2, r7, #8 + cmp r0, r2 + blo _08008E98 + mov r1, sp + subs r0, r2, #1 + strh r0, [r1, #2] +_08008E98: + mov r0, sp + movs r1, #4 + ldrsh r0, [r0, r1] + cmp r0, r3 + blo _08008EA8 + mov r1, sp + subs r0, r3, #1 + strh r0, [r1, #4] +_08008EA8: + mov r0, sp + movs r7, #6 + ldrsh r0, [r0, r7] + cmp r0, r2 + blo _08008EB8 + mov r1, sp + subs r0, r2, #1 + strh r0, [r1, #6] +_08008EB8: + mov r1, sp + movs r7, #8 + ldrsh r0, [r1, r7] + cmp r0, #0 + bge _08008EC4 + strh r5, [r1, #8] +_08008EC4: + mov r1, sp + ldrh r0, [r1, #0xa] + lsls r0, r0, #0x10 + cmp r0, #0 + bge _08008ED0 + strh r5, [r1, #0xa] +_08008ED0: + movs r5, #4 + ldrsh r0, [r4, r5] + cmp r0, #0 + bge _08008EDC + movs r0, #0 + strh r0, [r4, #4] +_08008EDC: + movs r7, #6 + ldrsh r0, [r4, r7] + cmp r0, #0 + bge _08008EE8 + movs r0, #0 + strh r0, [r4, #6] +_08008EE8: + movs r1, #0 + ldrsh r0, [r4, r1] + cmp r0, r3 + blo _08008EF4 + subs r0, r3, #1 + strh r0, [r4] +_08008EF4: + movs r5, #2 + ldrsh r0, [r4, r5] + cmp r0, r2 + blo _08008F00 + subs r0, r2, #1 + strh r0, [r4, #2] +_08008F00: + movs r7, #4 + ldrsh r0, [r4, r7] + cmp r0, r3 + blo _08008F0C + subs r0, r3, #1 + strh r0, [r4, #4] +_08008F0C: + movs r1, #6 + ldrsh r0, [r4, r1] + cmp r0, r2 + blo _08008F18 + subs r0, r2, #1 + strh r0, [r4, #6] +_08008F18: + movs r2, #0 + ldrsh r1, [r6, r2] + ldr r3, [sp, #0x18] + movs r4, #0xc + ldrsh r0, [r3, r4] + cmp r1, r0 + bne _08008F28 + b _0800926C +_08008F28: + mov r0, sp + mov r1, sp + movs r5, #0 + ldrsh r2, [r0, r5] + movs r7, #4 + ldrsh r0, [r1, r7] + cmp r2, r0 + bne _08008F3A + b _0800926C +_08008F3A: + mov r0, sp + mov r2, sp + ldrh r0, [r0, #2] + lsls r3, r0, #0x10 + asrs r1, r3, #0x10 + movs r4, #6 + ldrsh r0, [r2, r4] + cmp r1, r0 + bne _08008F4E + b _0800926C +_08008F4E: + asrs r0, r3, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + lsls r1, r0, #8 + mov r0, sp + movs r5, #6 + ldrsh r0, [r0, r5] + cmp r1, r0 + blt _08008F64 + b _0800926C +_08008F64: + ldr r7, [sp, #0x14] + cmp sb, r7 + blo _08008F6C + b _0800926C +_08008F6C: + mov r0, sp + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + mov r0, sp + movs r2, #4 + ldrsh r0, [r0, r2] + mov r3, sb + adds r3, #1 + str r3, [sp, #0x2c] + cmp r1, r0 + blt _08008F8E + b _08009250 +_08008F8E: + ldr r4, [sp, #0x10] + cmp r8, r4 + blo _08008F96 + b _08009250 +_08008F96: + mov r7, sp +_08008F98: + ldr r0, _08008FD0 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08008FA2 + b _0800918C +_08008FA2: + ldr r5, [sp, #0x10] + mov r0, sb + muls r0, r5, r0 + mov r1, r8 + lsls r2, r1, #2 + lsls r1, r0, #2 + ldr r3, [sp, #0x1c] + adds r1, r1, r3 + adds r1, r2, r1 + ldr r6, [r1] + mov sl, r0 + str r2, [sp, #0x30] + mov r4, r8 + adds r4, #1 + str r4, [sp, #0x28] + cmp r6, #0 + beq _0800904A + adds r0, r6, #0 + subs r0, #8 + adds r5, r3, r0 + movs r6, #0 + b _0800903C + .align 2, 0 +_08008FD0: .4byte gGameMode +_08008FD4: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + movs r3, #2 + rsbs r3, r3, #0 + cmp r0, r3 + blt _08009038 + ldrb r2, [r5] + lsls r2, r2, #3 + mov r4, r8 + lsls r0, r4, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r4, #0 + ldrsh r0, [r7, r4] + cmp r2, r0 + blt _08009038 + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _08009038 + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08009038 + movs r4, #6 + ldrsh r0, [r7, r4] + cmp r2, r0 + bgt _08009038 + ldr r1, _08009184 @ =gSpriteInits_Interactables + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_08009038: + adds r5, #7 + adds r6, #1 +_0800903C: + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + bne _08008FD4 +_0800904A: + mov r3, sl + lsls r0, r3, #2 + ldr r4, [sp, #0x20] + adds r0, r0, r4 + ldr r5, [sp, #0x30] + adds r0, r5, r0 + ldr r6, [r0] + cmp r6, #0 + beq _080090DE + adds r0, r6, #0 + subs r0, #8 + adds r4, r4, r0 + movs r6, #0 + ldrb r1, [r4] + movs r0, #0 + ldrsb r0, [r4, r0] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + beq _080090DE + movs r5, #2 + rsbs r5, r5, #0 +_08009076: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, r5 + blt _080090CC + ldrb r2, [r4] + lsls r2, r2, #3 + mov r3, r8 + lsls r0, r3, #8 + adds r2, r2, r0 + ldrb r0, [r4, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r3, #0 + ldrsh r0, [r7, r3] + cmp r2, r0 + blt _080090CC + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _080090CC + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _080090CC + movs r1, #6 + ldrsh r0, [r7, r1] + cmp r2, r0 + bgt _080090CC + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + adds r0, r4, #0 + mov r1, r8 + mov r2, sb + bl CreateEntity_ItemBox +_080090CC: + adds r4, #3 + adds r6, #1 + ldrb r1, [r4] + movs r0, #0 + ldrsb r0, [r4, r0] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + bne _08009076 +_080090DE: + mov r3, sl + lsls r0, r3, #2 + ldr r4, [sp, #0x24] + adds r0, r0, r4 + ldr r5, [sp, #0x30] + adds r0, r5, r0 + ldr r6, [r0] + cmp r6, #0 + bne _080090F2 + b _08009236 +_080090F2: + adds r0, r6, #0 + subs r0, #8 + adds r5, r4, r0 + movs r6, #0 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + bne _0800910A + b _08009236 +_0800910A: + movs r3, #2 + rsbs r3, r3, #0 + mov sl, r3 +_08009110: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, sl + blt _08009170 + ldrb r2, [r5] + lsls r2, r2, #3 + mov r4, r8 + lsls r0, r4, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r4, #0 + ldrsh r0, [r7, r4] + cmp r2, r0 + blt _08009170 + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _08009170 + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08009170 + movs r4, #6 + ldrsh r0, [r7, r4] + cmp r2, r0 + bgt _08009170 + ldr r1, _08009188 @ =gSpriteInits_Enemies + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_08009170: + adds r5, #7 + adds r6, #1 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + bne _08009110 + b _08009236 + .align 2, 0 +_08009184: .4byte gSpriteInits_Interactables +_08009188: .4byte gSpriteInits_Enemies +_0800918C: + ldr r3, [sp, #0x10] + mov r0, sb + muls r0, r3, r0 + mov r4, r8 + lsls r1, r4, #2 + lsls r0, r0, #2 + ldr r5, [sp, #0x1c] + adds r0, r0, r5 + adds r1, r1, r0 + ldr r6, [r1] + adds r4, #1 + str r4, [sp, #0x28] + cmp r6, #0 + beq _08009236 + adds r0, r6, #0 + subs r0, #8 + adds r5, r5, r0 + movs r6, #0 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + beq _08009236 + movs r3, #2 + rsbs r3, r3, #0 + mov sl, r3 +_080091C4: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, sl + blt _08009224 + ldrb r2, [r5] + lsls r2, r2, #3 + mov r4, r8 + lsls r0, r4, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + movs r4, #0 + ldrsh r0, [r7, r4] + cmp r2, r0 + blt _08009224 + movs r3, #4 + ldrsh r0, [r7, r3] + cmp r2, r0 + bgt _08009224 + ldrh r0, [r7, #2] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08009224 + movs r4, #6 + ldrsh r0, [r7, r4] + cmp r2, r0 + bgt _08009224 + ldr r1, _0800931C @ =gSpriteInits_InteractablesMultiplayer + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_08009224: + adds r5, #7 + adds r6, #1 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + movs r2, #1 + rsbs r2, r2, #0 + cmp r0, r2 + bne _080091C4 +_08009236: + ldr r3, [sp, #0x28] + lsls r0, r3, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + movs r4, #4 + ldrsh r0, [r7, r4] + cmp r1, r0 + bge _08009250 + ldr r5, [sp, #0x10] + cmp r8, r5 + bhs _08009250 + b _08008F98 +_08009250: + ldr r7, [sp, #0x2c] + lsls r0, r7, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + lsls r1, r0, #8 + mov r0, sp + movs r2, #6 + ldrsh r0, [r0, r2] + cmp r1, r0 + bge _0800926C + ldr r3, [sp, #0x14] + cmp sb, r3 + bhs _0800926C + b _08008F6C +_0800926C: + ldr r0, _08009320 @ =gCamera + movs r4, #2 + ldrsh r1, [r0, r4] + ldr r5, [sp, #0x18] + movs r7, #0xe + ldrsh r0, [r5, r7] + cmp r1, r0 + bne _0800927E + b _080095A8 +_0800927E: + mov r1, sp + ldrh r0, [r1, #0xa] + lsls r2, r0, #0x10 + asrs r1, r2, #0x10 + mov r3, sp + movs r4, #0xe + ldrsh r0, [r3, r4] + cmp r1, r0 + bne _08009292 + b _080095A8 +_08009292: + movs r5, #8 + ldrsh r1, [r3, r5] + movs r7, #0xc + ldrsh r0, [r3, r7] + cmp r1, r0 + bne _080092A0 + b _080095A8 +_080092A0: + asrs r0, r2, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + lsls r1, r0, #8 + movs r2, #0xe + ldrsh r0, [r3, r2] + cmp r1, r0 + blt _080092B4 + b _080095A8 +_080092B4: + ldr r3, [sp, #0x14] + cmp sb, r3 + blo _080092BC + b _080095A8 +_080092BC: + mov r4, sp + ldrh r0, [r4, #8] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + movs r5, #0xc + ldrsh r0, [r4, r5] + mov r7, sb + adds r7, #1 + str r7, [sp, #0x2c] + cmp r1, r0 + blt _080092DC + b _0800958C +_080092DC: + ldr r0, [sp, #0x10] + cmp r8, r0 + blo _080092E4 + b _0800958C +_080092E4: + movs r7, #1 + rsbs r7, r7, #0 +_080092E8: + ldr r0, _08009324 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _080092F2 + b _080094CC +_080092F2: + ldr r1, [sp, #0x10] + mov r0, sb + muls r0, r1, r0 + mov r3, r8 + lsls r2, r3, #2 + lsls r1, r0, #2 + ldr r4, [sp, #0x1c] + adds r1, r1, r4 + adds r1, r2, r1 + ldr r6, [r1] + mov sl, r0 + str r2, [sp, #0x30] + adds r3, #1 + str r3, [sp, #0x28] + cmp r6, #0 + beq _0800939C + adds r0, r6, #0 + subs r0, #8 + adds r5, r4, r0 + movs r6, #0 + b _08009392 + .align 2, 0 +_0800931C: .4byte gSpriteInits_InteractablesMultiplayer +_08009320: .4byte gCamera +_08009324: .4byte gGameMode +_08009328: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + movs r1, #2 + rsbs r1, r1, #0 + cmp r0, r1 + blt _0800938E + ldrb r2, [r5] + lsls r2, r2, #3 + mov r3, r8 + lsls r0, r3, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r4, sb + lsls r1, r4, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r3, sp + movs r4, #8 + ldrsh r0, [r3, r4] + cmp r2, r0 + blt _0800938E + movs r4, #0xc + ldrsh r0, [r3, r4] + cmp r2, r0 + bgt _0800938E + ldrh r0, [r3, #0xa] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _0800938E + movs r1, #0xe + ldrsh r0, [r3, r1] + cmp r2, r0 + bgt _0800938E + ldr r1, _080093B8 @ =gSpriteInits_Interactables + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_0800938E: + adds r5, #7 + adds r6, #1 +_08009392: + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, r7 + bne _08009328 +_0800939C: + mov r2, sl + lsls r0, r2, #2 + ldr r3, [sp, #0x20] + adds r0, r0, r3 + ldr r4, [sp, #0x30] + adds r0, r4, r0 + ldr r6, [r0] + cmp r6, #0 + beq _08009426 + adds r0, r6, #0 + subs r0, #8 + adds r4, r3, r0 + movs r6, #0 + b _0800941C + .align 2, 0 +_080093B8: .4byte gSpriteInits_Interactables +_080093BC: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + movs r5, #2 + rsbs r5, r5, #0 + cmp r0, r5 + blt _08009418 + ldrb r2, [r4] + lsls r2, r2, #3 + mov r1, r8 + lsls r0, r1, #8 + adds r2, r2, r0 + ldrb r0, [r4, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r5, sp + movs r3, #8 + ldrsh r0, [r5, r3] + cmp r2, r0 + blt _08009418 + movs r3, #0xc + ldrsh r0, [r5, r3] + cmp r2, r0 + bgt _08009418 + ldrh r0, [r5, #0xa] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08009418 + movs r1, #0xe + ldrsh r0, [r5, r1] + cmp r2, r0 + bgt _08009418 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + adds r0, r4, #0 + mov r1, r8 + mov r2, sb + bl CreateEntity_ItemBox +_08009418: + adds r4, #3 + adds r6, #1 +_0800941C: + ldrb r1, [r4] + movs r0, #0 + ldrsb r0, [r4, r0] + cmp r0, r7 + bne _080093BC +_08009426: + mov r2, sl + lsls r0, r2, #2 + ldr r3, [sp, #0x24] + adds r0, r0, r3 + ldr r4, [sp, #0x30] + adds r0, r4, r0 + ldr r6, [r0] + cmp r6, #0 + bne _0800943A + b _08009570 +_0800943A: + adds r0, r6, #0 + subs r0, #8 + adds r5, r3, r0 + movs r6, #0 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, r7 + bne _0800944E + b _08009570 +_0800944E: + movs r0, #2 + rsbs r0, r0, #0 + mov sl, r0 +_08009454: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, sl + blt _080094B6 + ldrb r2, [r5] + lsls r2, r2, #3 + mov r1, r8 + lsls r0, r1, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r4, sp + movs r3, #8 + ldrsh r0, [r4, r3] + cmp r2, r0 + blt _080094B6 + movs r3, #0xc + ldrsh r0, [r4, r3] + cmp r2, r0 + bgt _080094B6 + ldrh r0, [r4, #0xa] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _080094B6 + movs r1, #0xe + ldrsh r0, [r4, r1] + cmp r2, r0 + bgt _080094B6 + ldr r1, _080094C8 @ =gSpriteInits_Enemies + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_080094B6: + adds r5, #7 + adds r6, #1 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, r7 + bne _08009454 + b _08009570 + .align 2, 0 +_080094C8: .4byte gSpriteInits_Enemies +_080094CC: + ldr r2, [sp, #0x10] + mov r0, sb + muls r0, r2, r0 + mov r3, r8 + lsls r1, r3, #2 + lsls r0, r0, #2 + ldr r4, [sp, #0x1c] + adds r0, r0, r4 + adds r1, r1, r0 + ldr r6, [r1] + adds r3, #1 + str r3, [sp, #0x28] + cmp r6, #0 + beq _08009570 + adds r0, r6, #0 + subs r0, #8 + adds r5, r4, r0 + movs r6, #0 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, r7 + beq _08009570 + movs r0, #2 + rsbs r0, r0, #0 + mov sl, r0 +_08009500: + lsls r0, r1, #0x18 + asrs r0, r0, #0x18 + cmp r0, sl + blt _08009562 + ldrb r2, [r5] + lsls r2, r2, #3 + mov r1, r8 + lsls r0, r1, #8 + adds r2, r2, r0 + ldrb r0, [r5, #1] + lsls r0, r0, #3 + mov r3, sb + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov r4, sp + movs r3, #8 + ldrsh r0, [r4, r3] + cmp r2, r0 + blt _08009562 + movs r3, #0xc + ldrsh r0, [r4, r3] + cmp r2, r0 + bgt _08009562 + ldrh r0, [r4, #0xa] + lsls r1, r1, #0x10 + lsls r0, r0, #0x10 + asrs r2, r1, #0x10 + cmp r1, r0 + blt _08009562 + movs r1, #0xe + ldrsh r0, [r4, r1] + cmp r2, r0 + bgt _08009562 + ldr r1, _080095C4 @ =gSpriteInits_InteractablesMultiplayer + ldrb r0, [r5, #2] + lsls r0, r0, #2 + adds r0, r0, r1 + lsls r3, r6, #0x18 + lsrs r3, r3, #0x18 + ldr r4, [r0] + adds r0, r5, #0 + mov r1, r8 + mov r2, sb + bl _call_via_r4 +_08009562: + adds r5, #7 + adds r6, #1 + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, r7 + bne _08009500 +_08009570: + ldr r2, [sp, #0x28] + lsls r0, r2, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + mov r3, sp + movs r4, #0xc + ldrsh r0, [r3, r4] + cmp r1, r0 + bge _0800958C + ldr r5, [sp, #0x10] + cmp r8, r5 + bhs _0800958C + b _080092E8 +_0800958C: + ldr r7, [sp, #0x2c] + lsls r0, r7, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + lsls r1, r0, #8 + mov r2, sp + movs r3, #0xe + ldrsh r0, [r2, r3] + cmp r1, r0 + bge _080095A8 + ldr r4, [sp, #0x14] + cmp sb, r4 + bhs _080095A8 + b _080092BC +_080095A8: + ldr r0, _080095C8 @ =gCamera + ldrh r1, [r0] + ldr r5, [sp, #0x18] + strh r1, [r5, #0xc] + ldrh r0, [r0, #2] + strh r0, [r5, #0xe] +_080095B4: + add sp, #0x34 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080095C4: .4byte gSpriteInits_InteractablesMultiplayer +_080095C8: .4byte gCamera + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/item_box__Task_ItemBoxMain.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/item_box__Task_ItemBoxMain.inc new file mode 100644 index 0000000000..f664b61a04 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/item_box__Task_ItemBoxMain.inc @@ -0,0 +1,553 @@ + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + movs r0, #0 + mov sl, r0 + ldr r1, _0801E874 @ =gCurTask + mov sb, r1 + ldr r0, [r1] + ldrh r5, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r5, r0 @ r6 = itembox + ldr r2, _0801E878 @ =0x0300000C + adds r4, r5, r2 @ r4 = s + ldr r3, [r6] + str r3, [sp, #8] @ sp08 = me + ldrb r0, [r6, #8] + lsls r0, r0, #3 + ldrh r1, [r6, #4] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 @ r8 = worldX + ldrb r0, [r3, #1] + lsls r0, r0, #3 + ldrh r1, [r6, #6] + lsls r1, r1, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 @ r7 = worldY + ldr r0, _0801E87C @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _0801E890 + movs r1, #0 + ldrsb r1, [r3, r1] + movs r0, #3 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0801E890 + movs r0, #0xa7 + bl m4aSongNumStart + mov r1, r8 + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + ldr r3, _0801E880 @ =0x0300006C + adds r2, r5, r3 + lsls r1, r7, #0x10 + asrs r1, r1, #0x10 + ldrh r2, [r2] + adds r1, r1, r2 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + bl CreateDustCloud + mov r0, sb @ r0 = sb = gCurTask + ldr r1, [r0] + ldr r0, _0801E884 @ =Task_Itembox3 + str r0, [r1, #8] + ldr r1, _0801E888 @ =0x03000070 + adds r0, r5, r1 + mov r2, sl + strb r2, [r0] + ldr r2, _0801E88C @ =gPlayer + ldr r1, [r2, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + bne _0801E85E + b _0801EC0A_return +_0801E85E: + ldr r0, [r2, #0x28] + cmp r0, r4 + beq _0801E866 + b _0801EC0A_return +_0801E866: + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r2, #0x10] + b _0801EC0A_return + .align 2, 0 +_0801E874: .4byte gCurTask +_0801E878: .4byte 0x0300000C +_0801E87C: .4byte gGameMode +_0801E880: .4byte 0x0300006C +_0801E884: .4byte Task_Itembox3 +_0801E888: .4byte 0x03000070 +_0801E88C: .4byte gPlayer +_0801E890: + adds r0, r6, #0 @ r0 = r6 = itembox + adds r0, #0x70 + ldrb r1, [r0] + mov r3, r8 @ r3 = r8 = worldX + lsls r3, r3, #0x10 + mov r8, r3 @ r8 = worldX << 16 + lsls r7, r7, #0x10 + mov sb, r7 @ sb = r7 = worldY << 16 + str r0, [sp, #0xc] @ sp0C = &itembox->unk70 + adds r7, r6, #0 + adds r7, #0x6c @ r7 = &itembox->iconOffset + cmp r1, #0 + beq _0801E8F0 + adds r1, r6, #0 + adds r1, #0x6e + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + ldrh r5, [r7] + adds r0, r0, r5 + movs r2, #0 + strh r0, [r7] + ldrh r0, [r1] + adds r0, #0x28 + strh r0, [r1] + mov r1, sb @ r1 = worldY + asrs r0, r1, #0x10 + movs r3, #0 + ldrsh r1, [r7, r3] + adds r0, r0, r1 @ r0 = worldY + iconOffset + mov r5, r8 + asrs r1, r5, #0x10 @ r1 = worldX + str r2, [sp] + ldr r2, _0801E9DC @ =sa2__sub_801EE64 + str r2, [sp, #4] + movs r2, #1 + movs r3, #8 + bl sa2__sub_801F07C + adds r1, r0, #0 + cmp r1, #0 + bge _0801E8F0 + ldrh r0, [r7] + adds r0, r0, r1 + strh r0, [r7] + movs r0, #0 + ldr r1, [sp, #0xc] + strb r0, [r1] +_0801E8F0: + ldr r2, _0801E9E0 @ =gCamera + ldrh r1, [r2] + mov r3, r8 @ r3 = r8 = worldX << 16 + asrs r0, r3, #0x10 + subs r0, r0, r1 + strh r0, [r4, #0x16] + ldrh r1, [r2, #2] + mov r5, sb @ r5 = sb = worldY << 16 + asrs r0, r5, #0x10 + subs r0, r0, r1 + ldrh r1, [r7] + adds r0, r0, r1 + strh r0, [r4, #0x18] + ldr r0, _0801E9E4 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + beq _0801E916 + cmp r0, #5 + bne _0801E95E +_0801E916: + movs r2, #0 + ldr r1, _0801E9E8 @ =gMultiplayerPlayerTasks + ldr r0, [r1] + cmp r0, #0 + beq _0801E95E + adds r3, r1, #0 +_0801E922: + ldr r0, _0801E9EC @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r2, r0 + beq _0801E94A + lsls r0, r2, #2 + adds r0, r0, r3 + ldr r0, [r0] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r0, r0, r1 + ldr r0, [r0, #0x5c] + movs r1, #4 + ands r0, r1 + cmp r0, #0 + beq _0801E94A + movs r5, #1 + mov sl, r5 +_0801E94A: + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #3 + bhi _0801E95E + lsls r0, r2, #2 + adds r0, r0, r3 + ldr r0, [r0] + cmp r0, #0 + bne _0801E922 +_0801E95E: + ldr r5, _0801E9F0 @ =gPlayer + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #0xf + ands r0, r1 + cmp r0, #0 + beq _0801E974 + mov r0, sl + cmp r0, #0 + bne _0801E974 + b _0801EADC +_0801E974: + ldr r0, _0801E9F4 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #1 + ble _0801E998 + mov r2, r8 @ r2 = r8 = worldX << 16 + asrs r1, r2, #0x10 + mov r3, sb @ r3 = sb = worldY << 16 + asrs r2, r3, #0x10 + ldrh r0, [r7] + adds r2, r2, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + ldr r3, _0801E9F8 @ =gPartner + adds r0, r4, #0 + bl sub_80096B0 +_0801E998: + ldr r0, [r5, #0x10] + movs r1, #8 + mov sl, r1 + ands r0, r1 + cmp r0, #0 + beq _0801E9AA + ldr r0, [r5, #0x28] + cmp r0, r4 + beq _0801E9B6 +_0801E9AA: + ldr r0, [r5, #0x64] + ldr r1, [r0, #0x3c] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0801E9FC +_0801E9B6: + mov r2, r8 @ r2 = r8 = worldX << 16 + asrs r1, r2, #0x10 + mov r3, sb @ r3 = sb = worldY << 16 + asrs r2, r3, #0x10 + ldrh r5, [r7] + adds r2, r2, r5 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + ldr r3, _0801E9F0 @ =gPlayer + adds r0, r4, #0 + bl sub_80096B0 + movs r1, #0x80 + lsls r1, r1, #9 + ands r1, r0 + cmp r1, #0 + bne _0801E9DA + b _0801EADC +_0801E9DA: + b _0801EA20 + .align 2, 0 +_0801E9DC: .4byte sa2__sub_801EE64 +_0801E9E0: .4byte gCamera +_0801E9E4: .4byte gGameMode +_0801E9E8: .4byte gMultiplayerPlayerTasks +_0801E9EC: .4byte 0x04000128 +_0801E9F0: .4byte gPlayer +_0801E9F4: .4byte gNumSingleplayerCharacters +_0801E9F8: .4byte gPartner +_0801E9FC: + mov r2, r8 @ r2 = r8 = worldX << 16 + asrs r1, r2, #0x10 + mov r3, sb @ r3 = sb = worldY << 16 + asrs r2, r3, #0x10 + ldrh r0, [r7] + adds r2, r2, r0 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + adds r0, r4, #0 + adds r3, r5, #0 + bl Coll_Player_Itembox + adds r1, r0, #0 + movs r0, #0x80 + lsls r0, r0, #9 + ands r0, r1 + cmp r0, #0 + beq _0801EA32 +_0801EA20: + adds r1, r6, #0 + adds r1, #0x6e + movs r0, #0xff + lsls r0, r0, #8 + strh r0, [r1] + movs r0, #0xff + ldr r1, [sp, #0xc] @ r1 = sp0C = &itembox->unk70 + strb r0, [r1] + b _0801EADC +_0801EA32: + movs r0, #0x28 + ands r0, r1 + cmp r0, #0 + beq _0801EADC + ldr r2, _0801EAC8 @ =gPlayer + ldr r1, [r2, #0x10] + adds r0, r1, #0 + mov r3, sl + ands r0, r3 + cmp r0, #0 + beq _0801EA5E + ldr r0, [r2, #0x28] + cmp r0, r4 + bne _0801EA5E + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + subs r0, #0x18 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r2, #0x10] +_0801EA5E: + ldr r2, _0801EACC @ =gPartner + ldr r1, [r2, #0x10] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + beq _0801EA80 + ldr r0, [r2, #0x28] + cmp r0, r4 + bne _0801EA80 + movs r0, #9 + rsbs r0, r0, #0 + ands r1, r0 + subs r0, #0x18 + ands r1, r0 + movs r0, #2 + orrs r1, r0 + str r1, [r2, #0x10] +_0801EA80: @ BreakItemBox() in SA2! + movs r0, #0xa7 + bl m4aSongNumStart + mov r5, r8 @ r5 = r8 = worldX << 16 + asrs r0, r5, #0x10 + mov r2, sb @ r2 = sb = worldY << 16 + asrs r1, r2, #0x10 + ldrh r7, [r7] + adds r1, r1, r7 + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + bl CreateDustCloud + ldr r0, _0801EAD0 @ =gCurTask + ldr r1, [r0] + ldr r0, _0801EAD4 @ =Task_Itembox2 + str r0, [r1, #8] + movs r0, #0 + ldr r3, [sp, #0xc] @ r3 = sp0C = &itembox->unk70 + strb r0, [r3] + ldr r0, _0801EAD8 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bhi _0801EAB2 + b _0801EC0A_return +_0801EAB2: + bl CreateRoomEvent + movs r1, #2 + strb r1, [r0] + ldrh r1, [r6, #4] + strb r1, [r0, #1] + ldrh r1, [r6, #6] + strb r1, [r0, #2] + ldrb r1, [r6, #9] + strb r1, [r0, #3] + b _0801EC0A_return + .align 2, 0 +_0801EAC8: .4byte gPlayer +_0801EACC: .4byte gPartner +_0801EAD0: .4byte gCurTask +_0801EAD4: .4byte Task_Itembox2 +_0801EAD8: .4byte gGameMode +_0801EADC: + mov r5, r8 @ r5 = r8 = worldX << 16 + asrs r2, r5, #0x10 + ldr r3, _0801EB4C @ =gCamera + movs r0, #0 + ldrsh r1, [r3, r0] + movs r5, #0xb8 + lsls r5, r5, #1 + adds r0, r1, r5 + cmp r2, r0 + bgt _0801EB12 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + blt _0801EB12 + mov r0, sb @ r0 = sb = worldY << 16 + asrs r2, r0, #0x10 + movs r5, #2 + ldrsh r1, [r3, r5] + movs r3, #0x90 + lsls r3, r3, #1 + adds r0, r1, r3 + cmp r2, r0 + bgt _0801EB12 + adds r0, r1, #0 + subs r0, #0x80 + cmp r2, r0 + bge _0801EB54 +_0801EB12: + ldrh r0, [r4, #0x16] + adds r0, #0x80 + lsls r0, r0, #0x10 + movs r1, #0xf8 + lsls r1, r1, #0x11 + cmp r0, r1 + bhi _0801EB3C + movs r5, #0x18 + ldrsh r1, [r4, r5] + movs r2, #0 + ldrsh r0, [r7, r2] + adds r0, #0x80 + adds r1, r1, r0 + cmp r1, #0 + blt _0801EB3C + movs r3, #0x18 + ldrsh r1, [r4, r3] + movs r0, #0x90 + lsls r0, r0, #1 + cmp r1, r0 + ble _0801EB54 +_0801EB3C: + ldrb r0, [r6, #8] + ldr r5, [sp, #8] + strb r0, [r5] + ldr r0, _0801EB50 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + b _0801EC0A_return + .align 2, 0 +_0801EB4C: .4byte gCamera +_0801EB50: .4byte gCurTask +_0801EB54: + adds r0, r4, #0 + bl DisplaySprite + adds r4, r6, #0 @ r4 = r6 = itembox + adds r4, #0x3c @ r4 = s + ldr r0, _0801EBA8 @ =gGameMode + ldrb r0, [r0] + subs r0, #2 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _0801EBEA + ldr r0, _0801EBAC @ =gStageTime + ldr r3, [r0] + lsrs r0, r3, #5 + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0801EBBC + ldr r2, _0801EBB0 @ =gUnknown_080BB4F0 + ldr r0, _0801EBB4 @ =gMultiplayerPseudoRandom + ldr r0, [r0] + movs r1, #3 + ands r0, r1 + adds r0, r0, r2 + ldrb r3, [r0] + adds r1, r6, #0 + adds r1, #0x71 + strb r3, [r1] + ldr r0, _0801EBB8 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x19 + adds r2, r1, #0 + cmp r0, #5 + bne _0801EBD6 + cmp r3, #8 + bne _0801EBD6 + movs r0, #0xa + strb r0, [r2] + b _0801EBD6 + .align 2, 0 +_0801EBA8: .4byte gGameMode +_0801EBAC: .4byte gStageTime +_0801EBB0: .4byte gUnknown_080BB4F0 +_0801EBB4: .4byte gMultiplayerPseudoRandom +_0801EBB8: .4byte gCurrentLevel +_0801EBBC: + ldr r2, _0801EC1C @ =gUnknown_080BB4E8 + lsrs r0, r3, #6 + ldr r1, [sp, #8] @ r1 = sp08 = me + ldrb r1, [r1, #2] + adds r0, r0, r1 + movs r1, #7 + ands r0, r1 + adds r0, r0, r2 + ldrb r1, [r0] + adds r0, r6, #0 + adds r0, #0x71 + strb r1, [r0] @ itembox->kind = + adds r2, r0, #0 +_0801EBD6: + ldr r1, _0801EC20 @ =gUnknown_080BB4D8 + ldrb r0, [r2] + adds r0, r0, r1 + ldrb r1, [r0] + adds r0, r4, #0 + adds r0, #0x20 + strb r1, [r0] @ s->variant = gUnknown_080BB4D8[itembox->kind]; + adds r0, r4, #0 + bl UpdateSpriteAnimation +_0801EBEA: + ldr r2, _0801EC24 @ =gCamera + ldrh r1, [r2] + mov r3, r8 @ r3 = r8 = worldX << 16 + asrs r0, r3, #0x10 + subs r0, r0, r1 + strh r0, [r4, #0x16] + ldrh r1, [r2, #2] + mov r5, sb @ r5 = sb = worldY << 16 + asrs r0, r5, #0x10 + subs r0, r0, r1 + ldrh r7, [r7] + adds r0, r0, r7 + strh r0, [r4, #0x18] + adds r0, r4, #0 + bl DisplaySprite +_0801EC0A_return: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0801EC1C: .4byte gUnknown_080BB4E8 +_0801EC20: .4byte gUnknown_080BB4D8 +_0801EC24: .4byte gCamera + +.syntax divided diff --git a/sa1/asm/non_matching/game/sa1_sa2_shared/unused_lvl_select__Task_CreateMultiplayer.inc b/sa1/asm/non_matching/game/sa1_sa2_shared/unused_lvl_select__Task_CreateMultiplayer.inc new file mode 100644 index 0000000000..ecad912bc8 --- /dev/null +++ b/sa1/asm/non_matching/game/sa1_sa2_shared/unused_lvl_select__Task_CreateMultiplayer.inc @@ -0,0 +1,145 @@ + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + ldr r2, _0800E28C @ =gCurTask + ldr r0, [r2] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 @ r7 = levelSelect + ldr r0, _0800E290 @ =gGameMode + ldrb r0, [r0] + mov ip, r2 + cmp r0, #1 + bls _0800E2CE + movs r3, #0 + ldr r0, _0800E294 @ =gMultiplayerConnections + ldrb r1, [r0] + movs r2, #1 + ands r1, r2 + adds r6, r0, #0 @ r6 = gMultiplayerConnections + cmp r1, #0 + beq _0800E2CE + movs r5, #1 + ldr r2, _0800E298 @ =gMultiplayerMissingHeartbeats +_0800E24C: + ldr r1, _0800E29C @ =gMultiSioStatusFlags + adds r0, r5, #0 + lsls r0, r3 + ldr r4, [r1] + ands r4, r0 + cmp r4, #0 + bne _0800E2B8 + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xb4 + bls _0800E2BC + movs r0, #0 + ldr r1, _0800E2A0 @ =0x0000FFFF + bl TasksDestroyInPriorityRange + ldr r1, _0800E2A4 @ =gBackgroundsCopyQueueCursor + ldr r0, _0800E2A8 @ =gBackgroundsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + ldr r0, _0800E2AC @ =gBgSpritesCount + strb r4, [r0] + ldr r1, _0800E2B0 @ =gVramGraphicsCopyCursor + ldr r0, _0800E2B4 @ =gVramGraphicsCopyQueueIndex + ldrb r0, [r0] + strb r0, [r1] + bl LinkCommunicationError + b _0800E334_return + .align 2, 0 +_0800E28C: .4byte gCurTask +_0800E290: .4byte gGameMode +_0800E294: .4byte gMultiplayerConnections +_0800E298: .4byte gMultiplayerMissingHeartbeats +_0800E29C: .4byte gMultiSioStatusFlags +_0800E2A0: .4byte 0x0000FFFF +_0800E2A4: .4byte gBackgroundsCopyQueueCursor +_0800E2A8: .4byte gBackgroundsCopyQueueIndex +_0800E2AC: .4byte gBgSpritesCount +_0800E2B0: .4byte gVramGraphicsCopyCursor +_0800E2B4: .4byte gVramGraphicsCopyQueueIndex +_0800E2B8: + movs r0, #0 + strb r0, [r2] +_0800E2BC: + adds r2, #1 + adds r3, #1 + cmp r3, #3 + bhi _0800E2CE + ldrb r0, [r6] + asrs r0, r3 + ands r0, r5 + cmp r0, #0 + bne _0800E24C +_0800E2CE: + ldr r2, _0800E2E4 @ =gMultiSioRecv + ldrh r0, [r2] + cmp r0, #0x52 + bne _0800E2EC + ldrb r0, [r2, #2] + strb r0, [r7, #6] + mov r0, ip + ldr r1, [r0] + ldr r0, _0800E2E8 @ =Task_CreateSelectedTask + str r0, [r1, #8] + b _0800E334_return + .align 2, 0 +_0800E2E4: .4byte gMultiSioRecv +_0800E2E8: .4byte Task_CreateSelectedTask +_0800E2EC: + ldr r2, _0800E33C @ =gMultiSioSend + movs r0, #0x51 + strh r0, [r2] + ldrb r0, [r7, #6] + strb r0, [r2, #2] + ldr r0, _0800E340 @ =gMultiSioStatusFlags + ldr r0, [r0] + movs r1, #0x80 + ands r0, r1 + adds r7, r2, #0 + cmp r0, #0 + beq _0800E334_return + movs r1, #0 + ldr r6, _0800E344 @ =gMultiplayerConnections + ldrb r3, [r6] + movs r5, #1 + ldr r4, _0800E348 @ =gMultiSioRecv +_0800E30E: + adds r0, r3, #0 + asrs r0, r1 + ands r0, r5 + cmp r0, #0 + beq _0800E326 + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r2, r0, r4 + ldrh r0, [r2] + cmp r0, #0x51 + bne _0800E334_return +_0800E326: + adds r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + cmp r1, #3 + bls _0800E30E + movs r0, #0x52 + strh r0, [r7] +_0800E334_return: + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0800E33C: .4byte gMultiSioSend +_0800E340: .4byte gMultiSioStatusFlags +_0800E344: .4byte gMultiplayerConnections +_0800E348: .4byte gMultiSioRecv + +.syntax divided diff --git a/sa1/asm/non_matching/game/save__WriteSaveGame.inc b/sa1/asm/non_matching/game/save__WriteSaveGame.inc new file mode 100644 index 0000000000..5157c59628 --- /dev/null +++ b/sa1/asm/non_matching/game/save__WriteSaveGame.inc @@ -0,0 +1,133 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, lr} + ldr r0, _08012DE0 @ =gFlags + ldr r0, [r0] + movs r1, #0x80 + lsls r1, r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08012E0E_return_0 + ldr r6, _08012DE4 @ =gUsedSaveSectorID + movs r1, #0 + ldrsb r1, [r6, r1] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + beq _08012E1C + movs r4, #0x86 + lsls r4, r4, #3 + adds r0, r4, #0 + bl EwramMalloc + adds r5, r0, #0 @ r5 = sectorBuffer + movs r0, #0 + ldrsb r0, [r6, r0] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + movs r1, #0 + adds r2, r5, #0 + adds r3, r4, #0 + bl ReadFlash + movs r4, #1 + movs r2, #0 + ldr r0, _08012DE8 @ =gLoadedSaveGame + ldrb r1, [r5] + b _08012DFC + .align 2, 0 +_08012DE0: .4byte gFlags +_08012DE4: .4byte gUsedSaveSectorID +_08012DE8: .4byte gLoadedSaveGame +_08012DEC_loop: + adds r2, #1 + ldr r0, _08012E14 @ =0x0000042F + cmp r2, r0 + bhi _08012E04 + adds r1, r5, r2 + ldr r0, _08012E18 @ =gLoadedSaveGame + adds r0, r2, r0 + ldrb r1, [r1] +_08012DFC: + ldrb r0, [r0] + cmp r1, r0 + beq _08012DEC_loop + movs r4, #0 +_08012E04: + adds r0, r5, #0 + bl EwramFree + cmp r4, #0 + beq _08012E1C +_08012E0E_return_0: + movs r0, #0 + b _08012E8A_return + .align 2, 0 +_08012E14: .4byte 0x0000042F +_08012E18: .4byte gLoadedSaveGame +_08012E1C: + ldr r0, _08012E34 @ =gUsedSaveSectorID + ldrb r0, [r0] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #9 + bne _08012E3C + ldr r0, _08012E38 @ =EraseFlashSector + ldr r1, [r0] + movs r0, #0 + b _08012E52 + .align 2, 0 +_08012E34: .4byte gUsedSaveSectorID +_08012E38: .4byte EraseFlashSector +_08012E3C: + cmp r0, #9 + ble _08012E42 + movs r5, #0 +_08012E42: + ldr r1, _08012E90 @ =EraseFlashSector + lsls r0, r5, #0x18 + asrs r0, r0, #8 + movs r2, #0x80 + lsls r2, r2, #9 + adds r0, r0, r2 + lsrs r0, r0, #0x10 + ldr r1, [r1] +_08012E52: + bl _call_via_r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0 + bne _08012E8A_return + ldr r4, _08012E94 @ =gLoadedSaveGame + ldr r0, _08012E98 @ =0x4F524950 + str r0, [r4] + adds r0, r4, #0 + bl CalculateChecksum + ldr r2, _08012E9C @ =0x0000042C + adds r1, r4, r2 + str r0, [r1] + ldr r0, _08012EA0 @ =gUsedSaveSectorID + strb r5, [r0] + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + adds r2, #4 + adds r1, r4, #0 + bl ProgramFlashSectorAndVerifyNBytes + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 +_08012E8A_return: + pop {r4, r5, r6} + pop {r1} + bx r1 + .align 2, 0 +_08012E90: .4byte EraseFlashSector +_08012E94: .4byte gLoadedSaveGame +_08012E98: .4byte 0x4F524950 +_08012E9C: .4byte 0x0000042C +_08012EA0: .4byte gUsedSaveSectorID + +.syntax divided diff --git a/sa1/asm/non_matching/game/some_task_manager__sub_804D060.inc b/sa1/asm/non_matching/game/some_task_manager__sub_804D060.inc new file mode 100644 index 0000000000..5eb2127084 --- /dev/null +++ b/sa1/asm/non_matching/game/some_task_manager__sub_804D060.inc @@ -0,0 +1,93 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + adds r6, r0, #0 + ldr r1, _0804D0AC @ =gUnknown_03006170 = data0 + ldr r4, _0804D0B0 @ =gUnknown_030060F0 = data1 + ldrh r0, [r1] + movs r2, #0x30 + ands r2, r0 + adds r1, #2 + cmp r2, #0x20 + bne _0804D0BE + movs r3, #0 + cmp r3, r6 + bge _0804D0F6 + movs r0, #0xd0 + mov ip, r0 @ ip = 0xD0 + movs r7, #0x20 + adds r5, r1, #0 @ r5 = r1 = data0 +_0804D082_loop: + ldrh r0, [r4] + mov r1, ip + ands r1, r0 + cmp r1, #0 + bne _0804D0F6 + ldrh r1, [r5] + adds r0, r7, #0 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + cmp r3, #3 + ble _0804D09E + cmp r2, #0 + bne _0804D0B4_return_neg1 +_0804D09E: + adds r5, #2 + adds r4, #2 + adds r3, #1 + cmp r3, r6 + blt _0804D082_loop + b _0804D0F6 + .align 2, 0 +_0804D0AC: .4byte gUnknown_03006170 +_0804D0B0: .4byte gUnknown_030060F0 +_0804D0B4_return_neg1: + movs r0, #1 + rsbs r0, r0, #0 + b _0804D0F8 +_0804D0BA_return_1: + movs r0, #1 + b _0804D0F8 +_0804D0BE: + cmp r2, #0x10 + bne _0804D0F6 + movs r3, #0 + cmp r3, r6 + bge _0804D0F6 + movs r0, #0xe0 + mov ip, r0 + movs r7, #0x10 + adds r5, r1, #0 +_0804D0D0_loop: + ldrh r0, [r4] + mov r1, ip + ands r1, r0 + cmp r1, #0 + bne _0804D0F6 + ldrh r1, [r5] + adds r0, r7, #0 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + cmp r3, #3 + ble _0804D0EC + cmp r2, #0 + bne _0804D0BA_return_1 +_0804D0EC: + adds r5, #2 + adds r4, #2 + adds r3, #1 + cmp r3, r6 + blt _0804D0D0_loop +_0804D0F6: + movs r0, #0 +_0804D0F8: + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/sound_test__sub_805F950.inc b/sa1/asm/non_matching/game/sound_test__sub_805F950.inc new file mode 100644 index 0000000000..f5a8d0e179 --- /dev/null +++ b/sa1/asm/non_matching/game/sound_test__sub_805F950.inc @@ -0,0 +1,189 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + ldr r0, _0805F9A0 @ =gCurTask + ldr r0, [r0] + ldrh r5, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r5, r0 + ldr r1, _0805F9A4 @ =0x03000108 + adds r0, r5, r1 + ldr r6, [r0] + ldr r2, _0805F9A8 @ =0x0300010D + adds r3, r5, r2 + ldrb r0, [r3] + cmp r0, #0 + beq _0805F972 + cmp r6, #0x77 + bhi _0805F9B8 +_0805F972: + movs r7, #0 + movs r0, #0xb4 + strh r0, [r4, #0x16] + movs r0, #0x78 + strh r0, [r4, #0x18] + ldr r0, _0805F9AC @ =0x00000355 + strh r0, [r4, #0xa] + ldr r0, _0805F9B0 @ =0x03000020 + adds r2, r5, r0 + strb r7, [r2] + cmp r6, #0x77 + beq _0805F98C + b _0805FAA8 +_0805F98C: + adds r0, #1 + adds r1, r5, r0 + movs r0, #0xff + strb r0, [r1] + movs r0, #1 + strb r0, [r3] + ldr r0, _0805F9B4 @ =0x00000356 + strh r0, [r4, #0xa] + strb r7, [r2] + b _0805FAA8 + .align 2, 0 +_0805F9A0: .4byte gCurTask +_0805F9A4: .4byte 0x03000108 +_0805F9A8: .4byte 0x0300010D +_0805F9AC: .4byte 0x00000355 +_0805F9B0: .4byte 0x03000020 +_0805F9B4: .4byte 0x00000356 +_0805F9B8: + cmp r0, #1 + bne _0805F9DC + movs r1, #0 + movs r0, #0xb4 + strh r0, [r4, #0x16] + movs r0, #0x78 + strh r0, [r4, #0x18] + ldr r0, _0805F9D4 @ =0x00000356 +_0805F9C8: + strh r0, [r4, #0xa] + ldr r2, _0805F9D8 @ =0x03000020 + adds r0, r5, r2 + strb r1, [r0] + b _0805FAA8 + .align 2, 0 +_0805F9D4: .4byte 0x00000356 +_0805F9D8: .4byte 0x03000020 +_0805F9DC: + cmp r0, #2 + bne _0805FA6C + adds r0, r6, #0 + movs r1, #0xfa + bl Mod + cmp r0, #0x77 + bgt _0805FA00 + movs r1, #0 + movs r0, #0xa4 + strh r0, [r4, #0x16] + movs r0, #0x78 + strh r0, [r4, #0x18] + ldr r0, _0805F9FC @ =0x00000357 + b _0805F9C8 + .align 2, 0 +_0805F9FC: .4byte 0x00000357 +_0805FA00: + adds r0, r6, #0 + movs r1, #0xfa + bl Mod + cmp r0, #0x7c + ble _0805FA40 + adds r0, r6, #0 + movs r1, #0xfa + bl Mod + cmp r0, #0xf4 + bgt _0805FA40 + movs r1, #0 + movs r0, #0xc4 + strh r0, [r4, #0x16] + movs r0, #0x78 + strh r0, [r4, #0x18] + ldr r0, _0805FA38 @ =0x00000357 + strh r0, [r4, #0xa] + ldr r2, _0805FA3C @ =0x03000020 + adds r0, r5, r2 + strb r1, [r0] + ldr r0, [r4, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + b _0805FAAE + .align 2, 0 +_0805FA38: .4byte 0x00000357 +_0805FA3C: .4byte 0x03000020 +_0805FA40: + movs r0, #0xb4 + strh r0, [r4, #0x16] + movs r0, #0x78 + strh r0, [r4, #0x18] + ldr r0, _0805FA60 @ =0x00000357 + strh r0, [r4, #0xa] + ldr r0, _0805FA64 @ =0x03000020 + adds r1, r5, r0 + movs r0, #1 + strb r0, [r1] + ldr r2, _0805FA68 @ =0x0300010E + adds r1, r5, r2 + movs r0, #5 + strh r0, [r1] + b _0805FAB0 + .align 2, 0 +_0805FA60: .4byte 0x00000357 +_0805FA64: .4byte 0x03000020 +_0805FA68: .4byte 0x0300010E +_0805FA6C: + cmp r0, #3 + bne _0805FAB0 + movs r6, #0 + movs r0, #0xb4 + strh r0, [r4, #0x16] + movs r0, #0x78 + strh r0, [r4, #0x18] + movs r0, #0xd6 + lsls r0, r0, #2 + strh r0, [r4, #0xa] + ldr r0, _0805FAC4 @ =0x03000020 + adds r2, r5, r0 + strb r6, [r2] + adds r0, #0xee + adds r1, r5, r0 + ldrh r0, [r1] + subs r0, #1 + strh r0, [r1] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _0805FAA8 + ldr r0, _0805FAC8 @ =0x03000021 + adds r1, r5, r0 + movs r0, #0xff + strb r0, [r1] + movs r0, #1 + strb r0, [r3] + ldr r0, _0805FACC @ =0x00000356 + strh r0, [r4, #0xa] + strb r6, [r2] +_0805FAA8: + ldr r0, [r4, #0x10] + ldr r1, _0805FAD0 @ =0xFFFFFBFF + ands r0, r1 +_0805FAAE: + str r0, [r4, #0x10] +_0805FAB0: + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805FAC4: .4byte 0x03000020 +_0805FAC8: .4byte 0x03000021 +_0805FACC: .4byte 0x00000356 +_0805FAD0: .4byte 0xFFFFFBFF + +.syntax divided diff --git a/sa1/asm/non_matching/game/special_stage/UpdateObjectsAndRender.inc b/sa1/asm/non_matching/game/special_stage/UpdateObjectsAndRender.inc new file mode 100644 index 0000000000..2058d2ee60 --- /dev/null +++ b/sa1/asm/non_matching/game/special_stage/UpdateObjectsAndRender.inc @@ -0,0 +1,851 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x44 + ldr r0, _0802CB88 @ =gCurTask + ldr r0, [r0] + ldrh r3, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + str r0, [sp, #0x14] + ldr r2, _0802CB8C @ =gUnknown_087BF8DC + ldr r1, _0802CB90 @ =gUnknown_08487134 + ldr r0, _0802CB94 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r0, r1 + ldrb r0, [r0] + lsls r0, r0, #2 + adds r0, r0, r2 + ldr r0, [r0] + str r0, [sp, #8] + ldr r1, _0802CB98 @ =gUnknown_03005690 + str r1, [sp, #0xc] + ldr r2, _0802CB9C @ =gUnknown_030055F0+0xC + str r2, [sp, #0x10] + ldr r4, _0802CBA0 @ =0x0300000C + adds r4, r4, r3 + mov r8, r4 + ldr r5, [sp, #0x14] + orrs r5, r3 + str r5, [sp, #0x14] + movs r6, #0 + str r6, [sp, #0x20] + mov r2, sp + adds r2, #6 + ldr r7, _0802CBA4 @ =0x00007FFF + adds r0, r7, #0 + strh r0, [r2] + ldr r0, _0802CBA8 @ =0x040000D4 + str r2, [r0] + ldr r1, _0802CBAC @ =gUnknown_03005670 + str r1, [r0, #4] + ldr r1, _0802CBB0 @ =0x81000010 + str r1, [r0, #8] + ldr r1, [r0, #8] + strh r6, [r2] + str r2, [r0] + ldr r1, _0802CBB4 @ =gUnknown_030057E0 + str r1, [r0, #4] + ldr r1, _0802CBB8 @ =0x81000008 + str r1, [r0, #8] + ldr r0, [r0, #8] + ldr r2, [r5, #0x3c] + str r2, [sp, #0x1c] + mov r0, r8 + bl UpdateSpriteAnimation + ldr r3, [r4, #0xc] + str r3, [sp, #0x18] + ldr r4, [sp, #0xc] + ldr r1, [r4, #8] + asrs r1, r1, #8 + movs r5, #0xc0 + lsls r5, r5, #2 + adds r3, r1, r5 + asrs r0, r3, #0xc + lsls r0, r0, #0x18 + ldr r2, _0802CBBC @ =gUnknown_03005840 + lsrs r0, r0, #0x17 + adds r0, r0, r2 + ldrh r0, [r0] + mov sb, r0 + subs r1, #0xc0 + str r1, [sp, #0x34] + str r3, [sp, #0x38] + lsls r0, r0, #1 + add r0, sb + lsls r0, r0, #2 + ldr r6, [sp, #8] + adds r0, r0, r6 + ldr r0, [r0, #4] + cmp r0, r3 + blt _0802CB3E + b _0802D12A +_0802CB3E: + mov r7, sp + adds r7, #4 + str r7, [sp, #0x3c] +_0802CB44: + mov r1, sb + lsls r0, r1, #1 + add r0, sb + lsls r0, r0, #2 + ldr r2, [sp, #8] + adds r3, r0, r2 + ldrh r1, [r3, #8] + ldr r0, _0802CBC0 @ =0x0000FFFF + cmp r1, r0 + bne _0802CB5A + b _0802D12A +_0802CB5A: + cmp r1, #0 + bne _0802CB80 + ldr r4, [r3, #4] + ldr r5, [sp, #0x34] + cmp r4, r5 + blt _0802CB80 + mov r6, sb + lsrs r2, r6, #3 + ldr r7, [sp, #0x1c] + adds r0, r7, r2 + ldrb r1, [r0] + movs r0, #7 + ands r0, r6 + asrs r1, r0 + movs r0, #1 + ands r1, r0 + str r2, [sp, #0x40] + cmp r1, #0 + beq _0802CBC4 +_0802CB80: + mov r0, sb + adds r0, #1 + lsls r0, r0, #0x10 + b _0802CE5C + .align 2, 0 +_0802CB88: .4byte gCurTask +_0802CB8C: .4byte gUnknown_087BF8DC +_0802CB90: .4byte gUnknown_08487134 +_0802CB94: .4byte gCurrentLevel +_0802CB98: .4byte gUnknown_03005690 +_0802CB9C: .4byte gUnknown_030055F0+0xC +_0802CBA0: .4byte 0x0300000C +_0802CBA4: .4byte 0x00007FFF +_0802CBA8: .4byte 0x040000D4 +_0802CBAC: .4byte gUnknown_03005670 +_0802CBB0: .4byte 0x81000010 +_0802CBB4: .4byte gUnknown_030057E0 +_0802CBB8: .4byte 0x81000008 +_0802CBBC: .4byte gUnknown_03005840 +_0802CBC0: .4byte 0x0000FFFF +_0802CBC4: + movs r1, #0 + ldrsh r0, [r3, r1] + lsls r0, r0, #8 + str r0, [sp, #0x24] + movs r2, #2 + ldrsh r0, [r3, r2] + lsls r0, r0, #8 + str r0, [sp, #0x28] + lsls r3, r4, #8 + str r3, [sp, #0x2c] + ldr r5, [sp, #0xc] + ldr r0, [r5, #8] + asrs r7, r0, #8 + subs r0, r7, r4 + lsls r0, r0, #0x10 + lsrs r6, r0, #0x10 + str r6, [sp, #0x30] + asrs r0, r0, #0x10 + movs r1, #0xc0 + lsls r1, r1, #2 + adds r6, r0, r1 + asrs r6, r6, #3 + cmp r6, #0 + bne _0802CBF6 + movs r6, #1 +_0802CBF6: + adds r0, r6, #0 + muls r0, r6, r0 + muls r0, r6, r0 + muls r6, r0, r6 + adds r0, r6, #0 + movs r1, #0xcc + lsls r1, r1, #1 + bl __divsi3 + adds r6, r0, #0 + adds r4, r6, #0 + cmp r6, #0 + bge _0802CC14 + ldr r2, _0802CE64 @ =0x000001FF + adds r4, r6, r2 +_0802CC14: + asrs r4, r4, #9 + adds r4, #0x38 + ldr r3, [sp, #0x24] + adds r0, r3, #0 + muls r0, r4, r0 + movs r5, #0xa0 + lsls r5, r5, #2 + adds r1, r5, #0 + bl __divsi3 + lsls r0, r0, #8 + lsrs r0, r0, #0x10 + mov sl, r0 + ldr r1, [sp, #0x28] + adds r0, r1, #0 + muls r0, r4, r0 + adds r1, r5, #0 + bl __divsi3 + lsls r0, r0, #8 + lsrs r0, r0, #0x10 + mov ip, r0 + ldr r0, [sp, #0xc] + adds r0, #0x29 + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0802CC50 + b _0802CEA0 +_0802CC50: + ldr r0, [sp, #0xc] + adds r0, #0x28 + ldrb r0, [r0] + cmp r0, #2 + bne _0802CC5C + b _0802CEA0 +_0802CC5C: + ldr r2, [sp, #0x2c] + asrs r1, r2, #8 + adds r0, r1, #0 + subs r0, #0x20 + cmp r7, r0 + bge _0802CC6A + b _0802CEA0 +_0802CC6A: + cmp r7, r1 + ble _0802CC70 + b _0802CEA0 +_0802CC70: + mov r3, sl + lsls r1, r3, #0x10 + asrs r1, r1, #0x10 + mov r0, r8 + adds r0, #0x2c + movs r3, #0 + ldrsb r3, [r0, r3] + adds r2, r1, r3 + ldr r4, [sp, #0xc] + ldr r1, [r4] + asrs r1, r1, #8 + ldr r0, [sp, #0x10] + adds r0, #0x2c + movs r4, #0 + ldrsb r4, [r0, r4] + adds r1, r1, r4 + cmp r2, r1 + bgt _0802CCAC + mov r0, r8 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0802CCC0 + cmp r2, r1 + bge _0802CCAC + b _0802CEA0 +_0802CCAC: + ldr r0, [sp, #0x10] + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r2 + bge _0802CCC0 + b _0802CEA0 +_0802CCC0: + mov r5, ip + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + mov r1, r8 + adds r1, #0x2d + movs r3, #0 + ldrsb r3, [r1, r3] + adds r2, r0, r3 + ldr r7, [sp, #0xc] + ldr r0, [r7, #4] + asrs r0, r0, #8 + ldr r1, [sp, #0x10] + adds r1, #0x2d + movs r4, #0 + ldrsb r4, [r1, r4] + adds r1, r0, r4 + cmp r2, r1 + bgt _0802CCFC + mov r0, r8 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0802CD10 + cmp r2, r1 + bge _0802CCFC + b _0802CEA0 +_0802CCFC: + ldr r0, [sp, #0x10] + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r2 + bge _0802CD10 + b _0802CEA0 +_0802CD10: + movs r0, #0 + str r0, [sp] + ldr r0, _0802CE68 @ =sub_802D3E4 + movs r1, #0x74 + movs r2, #0xa8 + lsls r2, r2, #5 + movs r3, #0 + bl TaskCreate + ldrh r2, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r5, r2, r1 + ldr r3, _0802CE6C @ =0x03000060 + adds r4, r2, r3 + movs r6, #1 + strh r6, [r4] + ldr r7, [sp, #0x24] + str r7, [r5, #0x3c] + ldr r0, [sp, #0x28] + str r0, [r5, #0x40] + ldr r1, [sp, #0x2c] + str r1, [r5, #0x44] + subs r3, #0x10 + adds r0, r2, r3 + movs r6, #0 + strh r6, [r0] + ldr r7, _0802CE70 @ =0x03000052 + adds r0, r2, r7 + strh r6, [r0] + ldr r1, _0802CE74 @ =0x03000054 + adds r0, r2, r1 + strh r6, [r0] + adds r3, #6 + adds r0, r2, r3 + strh r6, [r0] + ldr r6, _0802CE78 @ =0x03000058 + adds r0, r2, r6 + movs r7, #0 + strh r7, [r0] + adds r1, #6 + adds r0, r2, r1 + movs r3, #0 + strh r3, [r0] + adds r6, #4 + adds r0, r2, r6 + strh r3, [r0] + ldr r3, _0802CE7C @ =gUnknown_0848728C + ldrh r0, [r4] + lsls r0, r0, #2 + adds r0, r0, r3 + ldrh r1, [r0] + ldr r7, _0802CE80 @ =0x03000062 + adds r0, r2, r7 + strh r1, [r0] + ldrh r0, [r4] + lsls r0, r0, #2 + adds r3, #2 + adds r0, r0, r3 + ldrh r0, [r0] + ldr r1, _0802CE84 @ =0x03000064 + adds r2, r2, r1 + strh r0, [r2] + ldr r2, [sp, #0x30] + lsls r0, r2, #0x10 + asrs r3, r0, #0x10 + movs r2, #0 + ldr r1, _0802CE88 @ =gUnknown_03005670 + movs r4, #0 + ldrsh r0, [r1, r4] + mov r4, sb + adds r4, #1 + ldr r6, _0802CE8C @ =0x00007FFF + cmp r0, r6 + beq _0802CDCC +_0802CDA6: + ldr r1, _0802CE88 @ =gUnknown_03005670 + lsls r0, r2, #1 + adds r0, r0, r1 + movs r7, #0 + ldrsh r0, [r0, r7] + cmp r0, r3 + beq _0802CDCE + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #0xf + bhi _0802CDCE + lsls r0, r2, #1 + adds r1, r0, r1 + movs r6, #0 + ldrsh r0, [r1, r6] + ldr r7, _0802CE8C @ =0x00007FFF + cmp r0, r7 + bne _0802CDA6 +_0802CDCC: + strh r3, [r1] +_0802CDCE: + adds r0, r2, #1 + adds r3, r5, #0 + adds r3, #0x66 + strb r0, [r3] + adds r0, r5, #0 + adds r0, #0x67 + movs r1, #1 + strb r1, [r0] + adds r2, r5, #0 + adds r2, #0xc + @ inline of sub_802D6FC + ldr r1, _0802CE90 @ =gUnknown_084872C4 + subs r0, #7 + ldrh r0, [r0] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #5 + ldr r6, _0802CE94 @ =0x06010000 + adds r0, r0, r6 + str r0, [r2, #4] + movs r7, #0 + strh r7, [r2, #8] + adds r0, r5, #0 + adds r0, #0x62 + ldrh r0, [r0] + strh r0, [r2, #0xa] + adds r0, r5, #0 + adds r0, #0x64 + ldrh r1, [r0] + subs r0, #0x38 + strb r1, [r0] + adds r1, r5, #0 + adds r1, #0x2d + movs r0, #0xff + strb r0, [r1] + movs r0, #0 + strh r0, [r2, #0x1c] + adds r1, #1 + movs r0, #0x10 + strb r0, [r1] + movs r6, #0 + strh r6, [r2, #0x1c] + strb r0, [r1] + adds r0, r5, #0 + adds r0, #0x31 + strb r7, [r0] + ldrb r0, [r3] + ldr r1, _0802CE98 @ =0x00002020 + orrs r0, r1 + str r0, [r2, #0x10] + movs r0, #0xf8 + lsls r0, r0, #3 + strh r0, [r2, #0x1a] + ldr r1, _0802CE9C @ =gSpecialStageCollectedRings + ldrh r0, [r1] + adds r0, #1 + strh r0, [r1] + bl SpStage_PlayRingSoundeffect + ldr r0, [sp, #0x1c] + ldr r1, [sp, #0x40] + adds r2, r0, r1 + movs r0, #7 + mov r3, sb + ands r3, r0 + movs r0, #1 + lsls r0, r3 + ldrb r1, [r2] + orrs r0, r1 + strb r0, [r2] + lsls r0, r4, #0x10 +_0802CE5C: + lsrs r0, r0, #0x10 + mov sb, r0 + b _0802D114 + .align 2, 0 +_0802CE64: .4byte 0x000001FF +_0802CE68: .4byte sub_802D3E4 +_0802CE6C: .4byte 0x03000060 +_0802CE70: .4byte 0x03000052 +_0802CE74: .4byte 0x03000054 +_0802CE78: .4byte 0x03000058 +_0802CE7C: .4byte gUnknown_0848728C +_0802CE80: .4byte 0x03000062 +_0802CE84: .4byte 0x03000064 +_0802CE88: .4byte gUnknown_03005670 +_0802CE8C: .4byte 0x00007FFF +_0802CE90: .4byte gUnknown_084872C4 +_0802CE94: .4byte 0x06010000 +_0802CE98: .4byte 0x00002020 +_0802CE9C: .4byte gSpecialStageCollectedRings +_0802CEA0: + ldr r4, [sp, #0x30] + lsls r0, r4, #0x10 + asrs r3, r0, #0x10 + movs r2, #0 + ldr r0, _0802CECC @ =gUnknown_03005670 + movs r5, #0 + ldrsh r1, [r0, r5] + adds r4, r0, #0 + mov r7, sl + lsls r5, r7, #0x10 + mov r0, ip + lsls r0, r0, #0x10 + mov ip, r0 + movs r7, #0x23 + add r7, r8 + mov sl, r7 + ldr r0, _0802CED0 @ =0x00007FFF + cmp r1, r0 + bne _0802CED4 + strh r3, [r4] + b _0802CEFA + .align 2, 0 +_0802CECC: .4byte gUnknown_03005670 +_0802CED0: .4byte 0x00007FFF +_0802CED4: + lsls r0, r2, #1 + adds r0, r0, r4 + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, r3 + beq _0802CEFA + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #0xf + bhi _0802CEFA + lsls r0, r2, #1 + adds r1, r0, r4 + movs r7, #0 + ldrsh r0, [r1, r7] + ldr r7, _0802D008 @ =0x00007FFF + cmp r0, r7 + bne _0802CED4 + strh r3, [r1] +_0802CEFA: + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + asrs r0, r5, #0x10 + ldr r1, _0802D00C @ =gUnknown_03005780 + ldrh r1, [r1, #4] + adds r0, r0, r1 + adds r0, #0x78 + ldr r2, [sp, #0x14] + strh r0, [r2, #6] + ldr r4, _0802D00C @ =gUnknown_03005780 + ldrh r1, [r4, #6] + movs r0, #0x50 + subs r0, r0, r1 + mov r5, ip + asrs r1, r5, #0x10 + subs r0, r0, r1 + strh r0, [r2, #8] + adds r0, r6, #0 + cmp r0, #0 + bge _0802CF28 + ldr r6, _0802D010 @ =0x000003FF + adds r0, r0, r6 +_0802CF28: + asrs r0, r0, #0xa + adds r0, #0x40 + ldr r7, [sp, #0x14] + strh r0, [r7, #2] + strh r0, [r7, #4] + ldr r2, _0802D014 @ =0x00002020 + orrs r2, r3 + mov r0, r8 + str r2, [r0, #0x10] + movs r3, #2 + ldrsh r1, [r7, r3] + movs r0, #0x80 + lsls r0, r0, #1 + cmp r1, r0 + ble _0802CF4E + movs r0, #0x40 + orrs r2, r0 + mov r4, r8 + str r2, [r4, #0x10] +_0802CF4E: + ldr r5, [sp, #0x14] + movs r6, #2 + ldrsh r2, [r5, r6] + ldr r7, [sp, #0x18] + movs r0, #8 + ldrsh r1, [r7, r0] + ldrh r0, [r7, #4] + lsrs r0, r0, #1 + subs r1, r1, r0 + muls r1, r2, r1 + lsls r0, r0, #8 + adds r1, r1, r0 + asrs r1, r1, #8 + ldrh r0, [r5, #6] + subs r3, r0, r1 + mov r1, r8 + strh r3, [r1, #0x16] + movs r4, #4 + ldrsh r2, [r5, r4] + movs r5, #0xa + ldrsh r1, [r7, r5] + ldrh r0, [r7, #6] + lsrs r0, r0, #1 + subs r1, r1, r0 + muls r1, r2, r1 + lsls r0, r0, #8 + adds r1, r1, r0 + asrs r1, r1, #8 + ldr r6, [sp, #0x14] + ldrh r0, [r6, #8] + subs r2, r0, r1 + mov r7, r8 + strh r2, [r7, #0x18] + ldr r0, [sp, #0x20] + cmp r0, #0 + beq _0802CF9E + mov r1, sl + ldrb r0, [r1] + cmp r0, #0xff + bne _0802D020 +_0802CF9E: + movs r3, #1 + rsbs r3, r3, #0 + adds r2, r3, #0 + movs r0, #0xff + mov r4, sl + strb r0, [r4] + mov r5, r8 + ldr r0, [r5, #0x10] + movs r1, #0x1f + ands r0, r1 + ldr r6, [sp, #0x3c] + strh r0, [r6] + ldrh r0, [r6] + ldr r7, _0802D018 @ =gUnknown_030057E0 + adds r0, r0, r7 + movs r6, #0 + ldrsb r6, [r0, r6] + cmp r6, #0 + bne _0802CFFE + ldr r0, [sp, #0x3c] + ldrh r1, [r0] + adds r1, r1, r7 + ldrb r0, [r1] + orrs r0, r2 + strb r0, [r1] + ldr r1, [sp, #0x3c] + ldrh r0, [r1] + lsls r0, r0, #5 + ldr r1, _0802D01C @ =gOamBuffer+0x6 + adds r5, r0, r1 + movs r4, #0x80 + lsls r4, r4, #9 + ldr r2, [sp, #0x14] + movs r3, #2 + ldrsh r1, [r2, r3] + adds r0, r4, #0 + bl Div + strh r0, [r5] + strh r6, [r5, #8] + strh r6, [r5, #0x10] + ldr r6, [sp, #0x14] + movs r7, #4 + ldrsh r1, [r6, r7] + adds r0, r4, #0 + bl Div + strh r0, [r5, #0x18] +_0802CFFE: + mov r0, r8 + bl DisplaySprite + b _0802D100 + .align 2, 0 +_0802D008: .4byte 0x00007FFF +_0802D00C: .4byte gUnknown_03005780 +_0802D010: .4byte 0x000003FF +_0802D014: .4byte 0x00002020 +_0802D018: .4byte gUnknown_030057E0 +_0802D01C: .4byte gOamBuffer+0x6 +_0802D020: + mov r0, r8 + ldr r1, [r0, #0x10] + adds r0, r1, #0 + movs r4, #0x40 + ands r0, r4 + cmp r0, #0 + beq _0802D042 + ldr r5, [sp, #0x18] + ldrh r0, [r5, #4] + lsrs r0, r0, #1 + subs r0, r3, r0 + mov r6, r8 + strh r0, [r6, #0x16] + ldrh r0, [r5, #6] + lsrs r0, r0, #1 + subs r0, r2, r0 + strh r0, [r6, #0x18] +_0802D042: + movs r7, #0x1f + ands r1, r7 + ldr r0, [sp, #0x3c] + strh r1, [r0] + ldrh r0, [r0] + ldr r1, _0802D13C @ =gUnknown_030057E0 + adds r0, r0, r1 + movs r6, #0 + ldrsb r6, [r0, r6] + cmp r6, #0 + bne _0802D08E + ldr r2, [sp, #0x3c] + ldrh r0, [r2] + adds r0, r0, r1 + movs r1, #0xff + strb r1, [r0] + ldrh r0, [r2] + lsls r0, r0, #5 + ldr r1, _0802D140 @ =gOamBuffer+0x6 + adds r5, r0, r1 + movs r4, #0x80 + lsls r4, r4, #9 + ldr r3, [sp, #0x14] + movs r0, #2 + ldrsh r1, [r3, r0] + adds r0, r4, #0 + bl Div + strh r0, [r5] + strh r6, [r5, #8] + strh r6, [r5, #0x10] + ldr r2, [sp, #0x14] + movs r3, #4 + ldrsh r1, [r2, r3] + adds r0, r4, #0 + bl Div + strh r0, [r5, #0x18] +_0802D08E: + mov r4, sl + ldrb r0, [r4] + lsls r0, r0, #3 + ldr r1, _0802D144 @ =gOamMallocBuffer + adds r5, r0, r1 + mov r6, r8 + ldrh r0, [r6, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r4, r0, #0 + ldr r0, _0802D148 @ =iwram_end + ldr r0, [r0] + cmp r0, r4 + beq _0802D12A + ldr r1, _0802D14C @ =0x040000D4 + str r5, [r1] + str r4, [r1, #4] + ldr r0, _0802D150 @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldrh r2, [r4] + movs r3, #0xfd + lsls r3, r3, #8 + adds r0, r3, #0 + ands r2, r0 + strh r2, [r4] + ldrh r3, [r4, #2] + movs r5, #0xc0 + lsls r5, r5, #8 + adds r0, r5, #0 + ands r3, r0 + strh r3, [r4, #2] + ldrb r1, [r6, #0x18] + ldr r0, [r6, #0x10] + movs r6, #0x40 + ands r0, r6 + lsls r0, r0, #3 + orrs r1, r0 + orrs r1, r2 + strh r1, [r4] + mov r0, r8 + ldrh r1, [r0, #0x16] + ldr r2, _0802D154 @ =0x000001FF + adds r0, r2, #0 + ands r1, r0 + mov r5, r8 + ldr r0, [r5, #0x10] + ands r0, r7 + lsls r0, r0, #9 + orrs r1, r0 + orrs r1, r3 + strh r1, [r4, #2] +_0802D100: + mov r0, sb + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sb, r0 + ldr r0, [sp, #0x20] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #0x20] +_0802D114: + mov r6, sb + lsls r0, r6, #1 + add r0, sb + lsls r0, r0, #2 + ldr r7, [sp, #8] + adds r0, r0, r7 + ldr r0, [r0, #4] + ldr r1, [sp, #0x38] + cmp r0, r1 + bge _0802D12A + b _0802CB44 +_0802D12A: + add sp, #0x44 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0802D13C: .4byte gUnknown_030057E0 +_0802D140: .4byte gOamBuffer+0x6 +_0802D144: .4byte gOamMallocBuffer +_0802D148: .4byte iwram_end +_0802D14C: .4byte 0x040000D4 +_0802D150: .4byte 0x80000003 +_0802D154: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/special_stage/sub_802A4C4.inc b/sa1/asm/non_matching/game/special_stage/sub_802A4C4.inc new file mode 100644 index 0000000000..c275491394 --- /dev/null +++ b/sa1/asm/non_matching/game/special_stage/sub_802A4C4.inc @@ -0,0 +1,80 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + adds r6, r0, #0 + ldr r0, _0802A554 @ =gUnknown_030055F0+0xC + mov sl, r0 + mov r7, sl + subs r7, #0xc + movs r3, #0x10 + ldrsh r1, [r6, r3] + mov r8, r1 + movs r5, #0x90 + lsls r5, r5, #2 + adds r1, r1, r5 + mov sb, r1 + ldr r0, [r6] + mov r1, sb + muls r1, r0, r1 + adds r0, r1, #0 + adds r1, r5, #0 + bl __divsi3 + adds r4, r0, #0 + lsls r4, r4, #8 + lsrs r4, r4, #0x10 + ldr r0, [r6, #4] + mov r3, sb + muls r3, r0, r3 + adds r0, r3, #0 + adds r1, r5, #0 + bl __divsi3 + lsls r0, r0, #8 + lsls r4, r4, #0x10 + asrs r4, r4, #0x10 + movs r2, #0 + movs r1, #0x50 + asrs r0, r0, #0x10 + subs r1, r1, r0 + adds r4, #0x78 + ldr r0, _0802A558 @ =gUnknown_03005780 + ldrh r0, [r0, #4] + adds r4, r4, r0 + strh r4, [r6, #0xc] + ldr r3, _0802A558 @ =gUnknown_03005780 + ldrh r0, [r3, #6] + subs r1, r1, r0 + strh r1, [r6, #0xe] + mov r0, sl + strh r4, [r0, #0x16] + strh r1, [r0, #0x18] + strh r4, [r7, #6] + strh r1, [r7, #8] + strh r2, [r7] + movs r1, #0x80 + lsls r1, r1, #1 + add r8, r1 + mov r3, r8 + strh r3, [r7, #2] + strh r3, [r7, #4] + ldr r0, _0802A55C @ =0x00002020 + mov r1, sl + str r0, [r1, #0x10] + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0802A554: .4byte gUnknown_030055F0+0xC +_0802A558: .4byte gUnknown_03005780 +_0802A55C: .4byte 0x00002020 + +.syntax divided diff --git a/sa1/asm/non_matching/game/special_stage/sub_802B07C.inc b/sa1/asm/non_matching/game/special_stage/sub_802B07C.inc new file mode 100644 index 0000000000..53f2181841 --- /dev/null +++ b/sa1/asm/non_matching/game/special_stage/sub_802B07C.inc @@ -0,0 +1,129 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + ldr r4, _0802B168 @ =gUnknown_03005690 + ldr r5, _0802B16C @ =gUnknown_030055F0+0xC + adds r7, r5, #0 + subs r7, #0xc + adds r0, r4, #0 + adds r0, #0x42 + movs r1, #0 + strh r1, [r0] + adds r0, #2 + strh r1, [r0] + ldrh r0, [r4, #0x12] + adds r0, #0x10 + ldr r2, _0802B170 @ =0x000003FF + adds r1, r2, #0 + ands r0, r1 + strh r0, [r4, #0x12] + ldr r1, _0802B174 @ =gSineTable + movs r2, #0x12 + ldrsh r0, [r4, r2] + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x1a + strh r0, [r4, #0x10] + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #2 + ands r0, r1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + adds r6, r2, #0 + cmp r0, #0 + beq _0802B0C8 + movs r0, #0xff + lsls r0, r0, #8 +_0802B0C8: + strh r0, [r4, #0x20] + adds r0, r4, #0 + bl sub_802A068 + adds r0, r4, #0 + bl sub_802A248 + adds r0, r4, #0 + bl sub_802A4C4 + adds r0, r5, #0 + bl UpdateSpriteAnimation + adds r0, r5, #0 + adds r1, r7, #0 + bl sub_802BE0C + adds r0, r5, #0 + bl DisplaySprite + movs r1, #0x32 + ldrsh r0, [r4, r1] + cmp r0, #0xb4 + bne _0802B110 + ldr r1, _0802B178 @ =gSpecialStageTargetRings + ldr r0, _0802B17C @ =gUnknown_03005070 + ldrh r0, [r0] + strh r0, [r1] + movs r0, #0x8c + lsls r0, r0, #5 + ldr r1, _0802B180 @ =0x00001181 + bl TasksDestroyInPriorityRange + movs r0, #0 + bl sub_805C448 +_0802B110: + ldrh r1, [r4, #0x32] + movs r2, #0x32 + ldrsh r0, [r4, r2] + cmp r0, #0 + beq _0802B13C + subs r0, r1, #1 + strh r0, [r4, #0x32] + lsls r0, r0, #0x10 + cmp r0, #0 + bne _0802B13C + adds r2, r4, #0 + adds r2, #0x4a + movs r1, #1 + movs r0, #1 + strh r0, [r2] + adds r0, r5, #0 + adds r0, #0x20 + strb r1, [r0] + adds r1, r5, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] +_0802B13C: + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #7 + ands r0, r1 + cmp r0, #0 + beq _0802B160 + ldr r0, _0802B184 @ =gCurTask + ldr r1, [r0] + ldr r0, _0802B188 @ =Task_802A560 + str r0, [r1, #8] + movs r0, #0 + strb r0, [r6] + adds r1, r4, #0 + adds r1, #0x2a + strb r0, [r1] + adds r1, #0x14 + movs r0, #0xc + strb r0, [r1] +_0802B160: + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0802B168: .4byte gUnknown_03005690 +_0802B16C: .4byte gUnknown_030055F0+0xC +_0802B170: .4byte 0x000003FF +_0802B174: .4byte gSineTable +_0802B178: .4byte gSpecialStageTargetRings +_0802B17C: .4byte gUnknown_03005070 +_0802B180: .4byte 0x00001181 +_0802B184: .4byte gCurTask +_0802B188: .4byte Task_802A560 + +.syntax divided diff --git a/sa1/asm/non_matching/game/special_stage/sub_802B66C.inc b/sa1/asm/non_matching/game/special_stage/sub_802B66C.inc new file mode 100644 index 0000000000..b34b766377 --- /dev/null +++ b/sa1/asm/non_matching/game/special_stage/sub_802B66C.inc @@ -0,0 +1,291 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r6, r0, #0 + mov ip, r1 + lsls r2, r2, #0x10 + lsrs r4, r2, #0x10 + lsls r3, r3, #0x10 + lsrs r3, r3, #0x10 + mov r8, r3 + ldr r5, _0802B750 @ =gUnknown_030055F0+0xC + ldr r1, [r1, #0x28] + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0802B68E + b _0802B878 +_0802B68E: + ldr r0, _0802B754 @ =gUnknown_03005690 + ldr r3, [r6, #0x44] + ldr r2, _0802B758 @ =0xFFFFC000 + adds r1, r3, r2 + ldr r2, [r0, #8] + adds r7, r0, #0 + cmp r2, r1 + bge _0802B6A0 + b _0802B878 +_0802B6A0: + cmp r2, r3 + ble _0802B6A6 + b _0802B878 +_0802B6A6: + adds r0, r6, #0 + adds r0, #0x60 + ldrh r0, [r0] + cmp r0, #4 + bge _0802B6B2 + b _0802B7E0 +_0802B6B2: + cmp r0, #9 + ble _0802B6BC + cmp r0, #0xb + beq _0802B6BC + b _0802B7E0 +_0802B6BC: + adds r0, r7, #0 + adds r0, #0x29 + ldrb r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0802B760 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + mov r1, ip + adds r1, #0x2c + movs r4, #0 + ldrsb r4, [r1, r4] + adds r3, r0, r4 + ldr r0, [r7] + asrs r0, r0, #8 + ldr r1, _0802B75C @ =gUnknown_0848720C + movs r2, #0 + ldrsh r5, [r1, r2] + adds r2, r0, r5 + adds r6, r1, #0 + cmp r3, r2 + bgt _0802B702 + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r3, r0 + cmp r0, r2 + bge _0802B710 + cmp r3, r2 + bge _0802B702 + b _0802B878 +_0802B702: + movs r1, #4 + ldrsh r0, [r6, r1] + subs r0, r0, r5 + adds r0, r2, r0 + cmp r0, r3 + bge _0802B710 + b _0802B878 +_0802B710: + mov r2, r8 + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + mov r2, ip + adds r2, #0x2d + movs r1, #0 + ldrsb r1, [r2, r1] + adds r3, r0, r1 + ldr r0, [r7, #4] + asrs r0, r0, #8 + movs r2, #2 + ldrsh r4, [r6, r2] + adds r2, r0, r4 + cmp r3, r2 + bgt _0802B748 + mov r0, ip + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r1 + adds r0, r3, r0 + cmp r0, r2 + blt _0802B742 + b _0802B874 +_0802B742: + cmp r3, r2 + bge _0802B748 + b _0802B878 +_0802B748: + movs r1, #6 + ldrsh r0, [r6, r1] + b _0802B86C + .align 2, 0 +_0802B750: .4byte gUnknown_030055F0+0xC +_0802B754: .4byte gUnknown_03005690 +_0802B758: .4byte 0xFFFFC000 +_0802B75C: .4byte gUnknown_0848720C +_0802B760: + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + mov r1, ip + adds r1, #0x2c + movs r4, #0 + ldrsb r4, [r1, r4] + adds r3, r0, r4 + ldr r0, [r7] + asrs r0, r0, #8 + ldr r1, _0802B7DC @ =gUnknown_08487204 + movs r2, #0 + ldrsh r5, [r1, r2] + adds r2, r0, r5 + adds r6, r1, #0 + cmp r3, r2 + bgt _0802B796 + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r3, r0 + cmp r0, r2 + bge _0802B7A2 + cmp r3, r2 + blt _0802B878 +_0802B796: + movs r1, #4 + ldrsh r0, [r6, r1] + subs r0, r0, r5 + adds r0, r2, r0 + cmp r0, r3 + blt _0802B878 +_0802B7A2: + mov r2, r8 + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + mov r2, ip + adds r2, #0x2d + movs r1, #0 + ldrsb r1, [r2, r1] + adds r3, r0, r1 + ldr r0, [r7, #4] + asrs r0, r0, #8 + movs r2, #2 + ldrsh r4, [r6, r2] + adds r2, r0, r4 + cmp r3, r2 + bgt _0802B7D6 + mov r0, ip + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r1 + adds r0, r3, r0 + cmp r0, r2 + bge _0802B874 + cmp r3, r2 + blt _0802B878 +_0802B7D6: + movs r1, #6 + ldrsh r0, [r6, r1] + b _0802B86C + .align 2, 0 +_0802B7DC: .4byte gUnknown_08487204 +_0802B7E0: + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + mov r1, ip + adds r1, #0x2c + movs r3, #0 + ldrsb r3, [r1, r3] + adds r2, r0, r3 + ldr r0, [r7] + asrs r0, r0, #8 + adds r1, r5, #0 + adds r1, #0x2c + movs r4, #0 + ldrsb r4, [r1, r4] + adds r1, r0, r4 + cmp r2, r1 + bgt _0802B816 + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r3 + adds r0, r2, r0 + cmp r0, r1 + bge _0802B828 + cmp r2, r1 + blt _0802B878 +_0802B816: + adds r0, r5, #0 + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r2 + blt _0802B878 +_0802B828: + mov r2, r8 + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + mov r1, ip + adds r1, #0x2d + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + adds r3, r0, r1 + ldr r0, [r7, #4] + asrs r0, r0, #8 + adds r2, r5, #0 + adds r2, #0x2d + movs r4, #0 + ldrsb r4, [r2, r4] + adds r2, r0, r4 + cmp r3, r2 + bgt _0802B862 + mov r0, ip + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r1 + adds r0, r3, r0 + cmp r0, r2 + bge _0802B874 + cmp r3, r2 + blt _0802B878 +_0802B862: + adds r0, r5, #0 + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 +_0802B86C: + subs r0, r0, r4 + adds r0, r2, r0 + cmp r0, r3 + blt _0802B878 +_0802B874: + movs r0, #1 + b _0802B87A +_0802B878: + movs r0, #0 +_0802B87A: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + +.syntax divided diff --git a/sa1/asm/non_matching/game/special_stage/sub_802BC6C.inc b/sa1/asm/non_matching/game/special_stage/sub_802BC6C.inc new file mode 100644 index 0000000000..19c7bcc3ae --- /dev/null +++ b/sa1/asm/non_matching/game/special_stage/sub_802BC6C.inc @@ -0,0 +1,208 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + ldr r1, _0802BCC0 @ =gUnknown_03005690 + ldr r0, _0802BCC4 @ =gCurTask + ldr r3, [r0] + ldrh r2, [r3, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r2 + mov r8, r0 + ldr r0, _0802BCC8 @ =0x0300000C + adds r0, r0, r2 + mov sl, r0 + mov sb, r8 + ldr r0, [r1, #8] + mov r4, sb + ldr r1, [r4, #0x44] + subs r0, r0, r1 + asrs r1, r0, #8 + ldr r4, _0802BCCC @ =0x03000050 + adds r0, r2, r4 + strh r1, [r0] + ldr r0, _0802BCD0 @ =0x03000060 + adds r2, r2, r0 + ldrh r0, [r2] + cmp r0, #3 + beq _0802BCD4 + lsls r1, r1, #0x10 + movs r0, #0x90 + lsls r0, r0, #0x12 + cmp r1, r0 + ble _0802BCD4 + adds r0, r3, #0 + bl TaskDestroy +_0802BCBA: + movs r0, #0 + b _0802BDE8 + .align 2, 0 +_0802BCC0: .4byte gUnknown_03005690 +_0802BCC4: .4byte gCurTask +_0802BCC8: .4byte 0x0300000C +_0802BCCC: .4byte 0x03000050 +_0802BCD0: .4byte 0x03000060 +_0802BCD4: + mov r1, r8 + adds r1, #0x50 + str r1, [sp] + movs r2, #0 + ldrsh r1, [r1, r2] + cmp r1, #0xc0 + bgt _0802BCBA + ldr r0, _0802BDF8 @ =0xFFFFFD00 + cmp r1, r0 + blt _0802BCBA + ldr r3, [sp] + movs r4, #0 + ldrsh r0, [r3, r4] + bl sub_802D58C + mov r1, r8 + adds r1, #0x66 + str r1, [sp, #4] + strb r0, [r1] + ldr r2, [sp] + movs r3, #0 + ldrsh r0, [r2, r3] + movs r4, #0xc0 + lsls r4, r4, #2 + adds r7, r0, r4 + asrs r7, r7, #3 + cmp r7, #0 + bne _0802BD0E + movs r7, #1 +_0802BD0E: + adds r0, r7, #0 + muls r0, r7, r0 + muls r0, r7, r0 + muls r7, r0, r7 + movs r1, #0xcc + lsls r1, r1, #1 + adds r0, r7, #0 + bl __divsi3 + adds r7, r0, #0 + adds r4, r7, #0 + cmp r7, #0 + bge _0802BD2C + ldr r0, _0802BDFC @ =0x000001FF + adds r4, r7, r0 +_0802BD2C: + asrs r4, r4, #9 + adds r4, #0x38 + mov r1, r8 + ldr r0, [r1, #0x3c] + muls r0, r4, r0 + movs r5, #0xa0 + lsls r5, r5, #2 + adds r1, r5, #0 + bl __divsi3 + asrs r0, r0, #8 + mov r6, r8 + adds r6, #0x48 + strh r0, [r6] + mov r2, r8 + ldr r0, [r2, #0x40] + muls r0, r4, r0 + adds r1, r5, #0 + bl __divsi3 + asrs r0, r0, #8 + mov r1, r8 + adds r1, #0x4a + strh r0, [r1] + ldrh r0, [r6] + adds r0, #0x78 + mov r3, r8 + adds r3, #0x4c + strh r0, [r3] + ldrh r1, [r1] + movs r0, #0x50 + subs r0, r0, r1 + mov r2, r8 + adds r2, #0x4e + strh r0, [r2] + ldr r4, _0802BE00 @ =gUnknown_03005780 + ldrh r0, [r4, #4] + ldrh r1, [r3] + adds r0, r0, r1 + strh r0, [r3] + ldrh r0, [r2] + ldrh r1, [r4, #6] + subs r0, r0, r1 + strh r0, [r2] + ldrh r1, [r3] + mov r3, sl + strh r1, [r3, #0x16] + ldrh r0, [r2] + strh r0, [r3, #0x18] + mov r4, sb + strh r1, [r4, #6] + ldrh r0, [r3, #0x18] + strh r0, [r4, #8] + adds r0, r7, #0 + cmp r7, #0 + bge _0802BDA0 + ldr r1, _0802BE04 @ =0x000003FF + adds r0, r7, r1 +_0802BDA0: + asrs r0, r0, #0xa + adds r0, #0x40 + mov r2, sb + strh r0, [r2, #2] + mov r3, sb + strh r0, [r3, #4] + ldr r4, [sp, #4] + ldrb r2, [r4] + ldr r0, _0802BE08 @ =0x00002020 + orrs r2, r0 + mov r0, sl + str r2, [r0, #0x10] + movs r4, #2 + ldrsh r1, [r3, r4] + movs r0, #0x80 + lsls r0, r0, #1 + cmp r1, r0 + ble _0802BDCC + movs r0, #0x40 + orrs r2, r0 + mov r0, sl + str r2, [r0, #0x10] +_0802BDCC: + ldr r2, [sp] + movs r3, #0 + ldrsh r1, [r2, r3] + adds r0, r1, #0 + subs r0, #0xc0 + cmp r0, #0 + bge _0802BDDC + adds r0, #0x1f +_0802BDDC: + asrs r0, r0, #5 + rsbs r0, r0, #0 + lsls r0, r0, #6 + mov r4, sl + strh r0, [r4, #0x1a] + movs r0, #1 +_0802BDE8: + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_0802BDF8: .4byte 0xFFFFFD00 +_0802BDFC: .4byte 0x000001FF +_0802BE00: .4byte gUnknown_03005780 +_0802BE04: .4byte 0x000003FF +_0802BE08: .4byte 0x00002020 + +.syntax divided diff --git a/sa1/asm/non_matching/game/special_stage/sub_802BE0C.inc b/sa1/asm/non_matching/game/special_stage/sub_802BE0C.inc new file mode 100644 index 0000000000..fd933b9686 --- /dev/null +++ b/sa1/asm/non_matching/game/special_stage/sub_802BE0C.inc @@ -0,0 +1,109 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #0x10 + mov sb, r0 + adds r6, r1, #0 + ldr r0, [r0, #0xc] + mov r8, r0 + movs r0, #1 + rsbs r0, r0, #0 + cmp r8, r0 + beq _0802BEC6 + mov r1, sp + ldrh r0, [r6, #2] + strh r0, [r1] + adds r1, #2 + ldrh r0, [r6, #4] + strh r0, [r1] + add r4, sp, #0xc + mov r1, sb + ldr r0, [r1, #0x10] + movs r1, #0x1f + ands r0, r1 + strh r0, [r4] + ldr r1, _0802BED4 @ =gUnknown_030057E0 + ldrh r0, [r4] + adds r0, r0, r1 + movs r7, #0 + ldrsb r7, [r0, r7] + cmp r7, #0 + bne _0802BE7C + ldrh r0, [r4] + adds r0, r0, r1 + movs r1, #0xff + strb r1, [r0] + ldrh r4, [r4] + lsls r4, r4, #5 + ldr r0, _0802BED8 @ =gOamBuffer+0x6 + adds r4, r4, r0 + movs r5, #0x80 + lsls r5, r5, #9 + movs r0, #2 + ldrsh r1, [r6, r0] + adds r0, r5, #0 + bl Div + strh r0, [r4] + strh r7, [r4, #8] + strh r7, [r4, #0x10] + movs r0, #4 + ldrsh r1, [r6, r0] + adds r0, r5, #0 + bl Div + strh r0, [r4, #0x18] +_0802BE7C: + movs r1, #6 + ldrsh r2, [r6, r1] + movs r4, #2 + ldrsh r3, [r6, r4] + mov r1, r8 + movs r4, #8 + ldrsh r0, [r1, r4] + ldrh r1, [r1, #4] + lsrs r1, r1, #1 + subs r0, r0, r1 + muls r0, r3, r0 + lsls r1, r1, #8 + adds r0, r0, r1 + asrs r0, r0, #8 + subs r2, r2, r0 + str r2, [sp, #4] + movs r0, #8 + ldrsh r2, [r6, r0] + movs r1, #4 + ldrsh r3, [r6, r1] + mov r4, r8 + movs r1, #0xa + ldrsh r0, [r4, r1] + ldrh r1, [r4, #6] + lsrs r1, r1, #1 + subs r0, r0, r1 + muls r0, r3, r0 + lsls r1, r1, #8 + adds r0, r0, r1 + asrs r0, r0, #8 + subs r2, r2, r0 + str r2, [sp, #8] + ldr r0, [sp, #4] + mov r4, sb + strh r0, [r4, #0x16] + ldr r0, [sp, #8] + strh r0, [r4, #0x18] +_0802BEC6: + add sp, #0x10 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0802BED4: .4byte gUnknown_030057E0 +_0802BED8: .4byte gOamBuffer+0x6 + +.syntax divided diff --git a/sa1/asm/non_matching/game/staff_credits__Task_805E888.inc b/sa1/asm/non_matching/game/staff_credits__Task_805E888.inc new file mode 100644 index 0000000000..f81f91ef6a --- /dev/null +++ b/sa1/asm/non_matching/game/staff_credits__Task_805E888.inc @@ -0,0 +1,155 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _0805E954 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r1, r0 + adds r0, #0x30 + adds r0, r0, r1 + mov sb, r0 + ldr r5, [r4, #0x78] + movs r0, #1 + ands r0, r5 + cmp r0, #0 + bne _0805E8BC + ldr r0, _0805E958 @ =0x00143000 + ldr r1, _0805E95C @ =0x0000201C + bl Div + adds r0, #1 + muls r0, r5, r0 + str r0, [r4, #0x7c] +_0805E8BC: + ldr r0, [r4, #0x7c] + lsrs r2, r0, #8 + adds r0, r2, #0 + subs r0, #0xc + cmp r0, #0x9a + bls _0805E9A2 + subs r0, #0x8a + lsrs r6, r0, #4 + subs r0, #0x10 + movs r1, #0x10 + bl Mod + adds r0, #4 + mov sl, r0 + movs r5, #0xff + movs r3, #0 + ldr r1, _0805E960 @ =gUnknown_086886A0 + mov ip, r1 + mov r7, ip +_0805E8E2: + movs r2, #0 +_0805E8E4: + lsls r0, r2, #2 + adds r0, r0, r7 + adds r1, r6, r3 + ldr r0, [r0] + cmp r0, r1 + bne _0805E8F8 + adds r5, r2, #0 + mov r8, r3 + movs r3, #0xa + movs r2, #5 +_0805E8F8: + adds r0, r2, #1 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #3 + bls _0805E8E4 + adds r0, r3, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + cmp r3, #9 + bls _0805E8E2 + mov r2, ip + ldr r0, [r2, #0xc] + subs r0, #3 + cmp r6, r0 + blo _0805E91C + movs r5, #3 + movs r0, #0 + mov r8, r0 +_0805E91C: + cmp r5, #0xff + beq _0805E9A2 + movs r0, #0x18 + mov r1, sl + subs r0, r0, r1 + mov r2, r8 + lsls r1, r2, #4 + adds r0, r0, r1 + strh r0, [r4, #0x18] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0x9a + bgt _0805E9A2 + movs r2, #0x78 + strh r2, [r4, #0x16] + cmp r5, #0 + beq _0805E996 + cmp r5, #1 + beq _0805E946 + cmp r5, #2 + bne _0805E964 +_0805E946: + movs r0, #0xb9 + lsls r0, r0, #2 + strh r0, [r4, #0xa] + adds r0, r4, #0 + adds r0, #0x20 + strb r5, [r0] + b _0805E996 + .align 2, 0 +_0805E954: .4byte gCurTask +_0805E958: .4byte 0x00143000 +_0805E95C: .4byte 0x0000201C +_0805E960: .4byte gUnknown_086886A0 +_0805E964: + movs r0, #0xb9 + lsls r0, r0, #2 + strh r0, [r4, #0xa] + adds r1, r4, #0 + adds r1, #0x20 + movs r0, #3 + strb r0, [r1] + movs r1, #0x18 + ldrsh r0, [r4, r1] + cmp r0, #0x4f + bgt _0805E97E + movs r0, #0x50 + strh r0, [r4, #0x18] +_0805E97E: + mov r0, sb + strh r2, [r0, #0x16] + ldrh r0, [r4, #0x18] + adds r0, #0x28 + mov r1, sb + strh r0, [r1, #0x18] + mov r0, sb + bl UpdateSpriteAnimation + mov r0, sb + bl DisplaySprite +_0805E996: + adds r0, r4, #0 + bl UpdateSpriteAnimation + adds r0, r4, #0 + bl DisplaySprite +_0805E9A2: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Item_Tasks__Task_Item_Invincibility.inc b/sa1/asm/non_matching/game/stage/Item_Tasks__Task_Item_Invincibility.inc new file mode 100644 index 0000000000..3433671979 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Item_Tasks__Task_Item_Invincibility.inc @@ -0,0 +1,228 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #8 + ldr r0, _0804BBF4 @ =gCurTask + ldr r3, [r0] + ldrh r1, [r3, #6] + movs r6, #0xc0 + lsls r6, r6, #0x12 + ldr r2, _0804BBF8 @ =0x03000030 + adds r0, r1, r2 + ldrb r0, [r0] + mov r8, r0 + orrs r6, r1 + ldr r5, _0804BBFC @ =gCamera + ldr r0, _0804BC00 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _0804BC10 + ldr r1, _0804BC04 @ =gMultiplayerPlayerTasks + mov r2, r8 + lsls r0, r2, #0x18 + asrs r0, r0, #0x16 + adds r0, r0, r1 + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r2, r0 + ldr r1, _0804BC08 @ =0x03000057 + adds r0, r2, r1 + ldrb r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0804BC28 + ldr r3, _0804BC0C @ =0x03000050 + adds r0, r2, r3 + ldrh r1, [r0] + adds r3, #2 + adds r0, r2, r3 + ldrh r3, [r0] + ldr r2, [r4, #0x10] + b _0804BC52 + .align 2, 0 +_0804BBF4: .4byte gCurTask +_0804BBF8: .4byte 0x03000030 +_0804BBFC: .4byte gCamera +_0804BC00: .4byte gGameMode +_0804BC04: .4byte gMultiplayerPlayerTasks +_0804BC08: .4byte 0x03000057 +_0804BC0C: .4byte 0x03000050 +_0804BC10: + ldr r2, _0804BC30 @ =gPlayer + mov r0, r8 + cmp r0, #0 + beq _0804BC1A + ldr r2, _0804BC34 @ =gPartner +_0804BC1A: + adds r0, r2, #0 + adds r0, #0x26 + ldrb r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + bne _0804BC38 +_0804BC28: + adds r0, r3, #0 + bl TaskDestroy + b _0804BD62 + .align 2, 0 +_0804BC30: .4byte gPlayer +_0804BC34: .4byte gPartner +_0804BC38: + ldr r0, [r2] + adds r1, r2, #0 + adds r1, #0x50 + asrs r0, r0, #8 + ldrh r1, [r1] + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + ldr r0, [r2, #4] + lsls r0, r0, #8 + lsrs r3, r0, #0x10 + ldr r0, [r2, #0x64] + ldr r2, [r0, #0x1c] +_0804BC52: + movs r0, #0xc0 + lsls r0, r0, #6 + ands r2, r0 + ldrh r0, [r5] + lsls r1, r1, #0x10 + asrs r7, r1, #0x10 + subs r0, r7, r0 + strh r0, [r6, #0x16] + ldrh r0, [r5, #2] + lsls r1, r3, #0x10 + asrs r1, r1, #0x10 + mov ip, r1 + subs r0, r1, r0 + strh r0, [r6, #0x18] + ldr r0, [r6, #0x10] + ldr r1, _0804BD30 @ =0xFFFFCFFF + ands r0, r1 + orrs r0, r2 + str r0, [r6, #0x10] + ldr r1, _0804BD34 @ =gStageTime + mov sb, r1 + ldr r0, [r1] + movs r1, #7 + ands r0, r1 + cmp r0, #0 + bne _0804BD0E + ldr r5, _0804BD38 @ =gPseudoRandom + ldr r0, [r5] + ldr r3, _0804BD3C @ =0x00196225 + adds r1, r0, #0 + muls r1, r3, r1 + ldr r2, _0804BD40 @ =0x3C6EF35F + adds r1, r1, r2 + lsrs r4, r1, #8 + movs r0, #0xf + ands r4, r0 + muls r1, r3, r1 + adds r1, r1, r2 + str r1, [r5] + lsrs r1, r1, #8 + movs r0, #0xff + ldr r2, _0804BD44 @ =gSineTable + ands r1, r0 + lsls r0, r1, #3 + movs r3, #0x80 + lsls r3, r3, #2 + adds r0, r0, r3 + adds r0, r0, r2 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r4, r0 + asrs r0, r0, #8 + adds r0, r7, r0 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + lsls r1, r1, #3 + adds r1, r1, r2 + ldrh r1, [r1] + lsls r1, r1, #0x10 + asrs r1, r1, #0x16 + muls r1, r4, r1 + asrs r1, r1, #8 + add r1, ip + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + ldr r2, _0804BD48 @ =Task_UpdateMpSpriteTaskSprite + str r2, [sp] + ldr r2, _0804BD4C @ =TaskDestructor_MultiplayerSpriteTask + str r2, [sp, #4] + movs r2, #0 + movs r3, #0 + bl CreateMultiplayerSpriteTask + ldrh r4, [r0, #6] + ldr r0, _0804BD50 @ =0x03000018 + adds r5, r4, r0 + movs r0, #9 + bl VramMalloc + str r0, [r5, #4] + movs r0, #0xbc + lsls r0, r0, #2 + strh r0, [r5, #0xa] + ldr r1, _0804BD54 @ =0x03000038 + adds r4, r4, r1 + movs r0, #1 + strb r0, [r4] + movs r0, #0x80 + lsls r0, r0, #2 + strh r0, [r5, #0x1a] + movs r0, #0x80 + lsls r0, r0, #6 + str r0, [r5, #0x10] +_0804BD0E: + adds r0, r6, #0 + bl UpdateSpriteAnimation + movs r3, #1 + adds r2, r3, #0 + mov r0, r8 + bics r2, r0 + mov r1, sb + ldr r0, [r1] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + beq _0804BD58 + cmp r2, r3 + bne _0804BD5C + b _0804BD62 + .align 2, 0 +_0804BD30: .4byte 0xFFFFCFFF +_0804BD34: .4byte gStageTime +_0804BD38: .4byte gPseudoRandom +_0804BD3C: .4byte 0x00196225 +_0804BD40: .4byte 0x3C6EF35F +_0804BD44: .4byte gSineTable +_0804BD48: .4byte Task_UpdateMpSpriteTaskSprite +_0804BD4C: .4byte TaskDestructor_MultiplayerSpriteTask +_0804BD50: .4byte 0x03000018 +_0804BD54: .4byte 0x03000038 +_0804BD58: + cmp r2, #0 + beq _0804BD62 +_0804BD5C: + adds r0, r6, #0 + bl DisplaySprite +_0804BD62: + add sp, #8 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__Player_8043EC0.inc b/sa1/asm/non_matching/game/stage/Player__Player_8043EC0.inc new file mode 100644 index 0000000000..086102d6c0 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__Player_8043EC0.inc @@ -0,0 +1,256 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + adds r4, r0, #0 @ r4 = p + ldr r5, _08043FD0 @ =gCamera + ldr r7, [r4] @ r7 = qWorldX + ldr r6, [r4, #4] @ r6 = qWorldY + adds r0, #0x3c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + mov sb, r5 @ sb = r5 = cam + cmp r0, #0 + bne _08043F9C + ldr r1, _08043FD4 @ =gUnknown_084ADF78 + ldr r2, _08043FD8 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r2, r0] + lsls r0, r0, #2 + mov sl, r0 @ sl = gCurrentLevel * 4 + adds r0, r0, r1 + movs r3, #0 + ldrsh r0, [r0, r3] + mov ip, r1 + mov r8, r2 + cmp r0, #0 + blt _08043F3E + lsls r0, r0, #8 + cmp r7, r0 + blt _08043F3E + movs r1, #4 + ldrsh r0, [r5, r1] + cmp r0, #0 + beq _08043F3E + ldrh r1, [r5, #0x26] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _08043F3E + ldr r0, _08043FDC @ =gUnknown_084ADFC0 + add r0, sl + movs r2, #0 + ldrsh r3, [r0, r2] + lsls r2, r3, #8 + adds r7, r7, r2 + ldr r0, _08043FE0 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _08043F32 + ldr r1, _08043FE4 @ =gPartner + ldr r0, [r1] + adds r0, r0, r2 + str r0, [r1] +_08043F32: + ldrh r0, [r5] + adds r0, r0, r3 + strh r0, [r5] + ldrh r0, [r5, #0x10] + adds r0, r0, r3 + strh r0, [r5, #0x10] +_08043F3E: + mov r3, r8 + movs r0, #0 + ldrsb r0, [r3, r0] + lsls r2, r0, #2 + mov r0, ip + adds r0, #2 + adds r0, r2, r0 + movs r1, #0 + ldrsh r0, [r0, r1] + cmp r0, #0 + blt _08043F9C + lsls r0, r0, #8 + cmp r6, r0 + blt _08043F9C + movs r3, #6 + ldrsh r0, [r5, r3] + cmp r0, #0 + beq _08043F9C + ldrh r1, [r5, #0x26] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + bne _08043F9C + ldr r0, _08043FDC @ =gUnknown_084ADFC0 + adds r0, #2 + adds r0, r2, r0 + movs r1, #0 + ldrsh r0, [r0, r1] + lsls r3, r0, #8 + lsls r2, r0, #0x10 + adds r6, r6, r2 + ldr r0, _08043FE0 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + bne _08043F90 + ldr r1, _08043FE4 @ =gPartner + ldr r0, [r1, #4] + adds r0, r0, r2 + str r0, [r1, #4] +_08043F90: + ldrh r0, [r5, #2] + adds r0, r0, r3 + strh r0, [r5, #2] + ldrh r0, [r5, #0x12] + adds r0, r0, r3 + strh r0, [r5, #0x12] +_08043F9C: + ldr r1, [r4, #0x10] + ldr r0, _08043FE8 @ =0x80000080 + ands r0, r1 + mov ip, r1 + cmp r0, #0x80 + beq _08044096_return + mov r8, sb @ r8 = sb = cam + ldr r3, [r4, #4] @ r3 = p->qWorldY + cmp r1, #0 + blt _08044042 + ldr r2, _08043FEC @ =gStageFlags + ldrh r1, [r2] + movs r0, #0x80 + ands r0, r1 + mov sl, r2 @ sl = r2 = gStageFlags + cmp r0, #0 + bne _08043FF0 + mov r2, r8 + movs r1, #0x16 + ldrsh r0, [r2, r1] + lsls r0, r0, #8 + subs r0, #1 + cmp r3, r0 + blt _08043FFE + b _08044004 + .align 2, 0 +_08043FD0: .4byte gCamera +_08043FD4: .4byte gUnknown_084ADF78 +_08043FD8: .4byte gCurrentLevel +_08043FDC: .4byte gUnknown_084ADFC0 +_08043FE0: .4byte gNumSingleplayerCharacters +_08043FE4: .4byte gPartner +_08043FE8: .4byte 0x80000080 +_08043FEC: .4byte gStageFlags +_08043FF0: + mov r2, sb + movs r1, #0x14 + ldrsh r0, [r2, r1] + lsls r0, r0, #8 + movs r1, #1 + cmp r3, r0 + ble _08044000 +_08043FFE: + movs r1, #0 +_08044000: + cmp r1, #0 + beq _08044042 +_08044004: + movs r0, #0x80 + mov r2, ip @ r2 = ip = &p->moveState + orrs r0, r2 + str r0, [r4, #0x10] + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + beq _0804401C + ldr r0, _08044018 @ =0x0000FD60 + b _0804401E + .align 2, 0 +_08044018: .4byte 0x0000FD60 +_0804401C: + ldr r0, _08044038 @ =0x0000FB20 +_0804401E: + strh r0, [r4, #0xa] + mov r3, sl @ r3 = sl = gStageFlags + ldrh r1, [r3] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0804403C + movs r1, #0x16 + ldrsh r0, [r5, r1] + lsls r0, r0, #8 + subs r6, r0, #1 + b _08044042 + .align 2, 0 +_08044038: .4byte 0x0000FB20 +_0804403C: + movs r2, #0x14 + ldrsh r0, [r5, r2] + lsls r6, r0, #8 +_08044042: + adds r2, r7, #0 @ r2 = r7 = qWorldX + adds r3, r6, #0 @ r3 = r6 = qWorldY + movs r1, #0x18 + ldrsh r0, [r5, r1] @ r0 = cam->minX + lsls r0, r0, #8 + cmp r7, r0 + blt _08044060 + movs r1, #0x1a + ldrsh r0, [r5, r1] + lsls r0, r0, #8 + subs r1, r0, #1 + adds r0, r7, #0 + cmp r0, r1 + ble _08044060 + adds r0, r1, #0 +_08044060: + adds r7, r0, #0 + movs r1, #0x14 + ldrsh r0, [r5, r1] + lsls r0, r0, #8 + cmp r6, r0 + blt _0804407C + movs r1, #0x16 + ldrsh r0, [r5, r1] + lsls r0, r0, #8 + subs r1, r0, #1 + adds r0, r6, #0 + cmp r0, r1 + ble _0804407C + adds r0, r1, #0 +_0804407C: + adds r6, r0, #0 + cmp r7, r2 + beq _08044088 + movs r0, #0 + strh r0, [r4, #8] + strh r0, [r4, #0xc] +_08044088: + cmp r6, r3 + beq _08044092 + movs r0, #0 + strh r0, [r4, #0xa] + strh r0, [r4, #0xc] +_08044092: + str r7, [r4] + str r6, [r4, #4] +_08044096_return: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__Player_80447D8.inc b/sa1/asm/non_matching/game/stage/Player__Player_80447D8.inc new file mode 100644 index 0000000000..ba3e7352e0 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__Player_80447D8.inc @@ -0,0 +1,134 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldr r5, _0804482C @ =gCamera + adds r6, r4, #0 + adds r6, #0x40 + movs r0, #2 + strb r0, [r6] + movs r1, #0xc + ldrsh r0, [r4, r1] + cmp r0, #0 + bne _08044868 + ldrb r0, [r4, #0x15] + cmp r0, #0 + beq _080447FE + subs r0, #1 + strb r0, [r4, #0x15] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0804484C +_080447FE: + adds r0, r4, #0 + adds r0, #0x3c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _080448CA + ldr r0, _08044830 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08044834 + movs r2, #0x22 + ldrsh r0, [r5, r2] + movs r3, #0xe + ldrsh r1, [r5, r3] + adds r0, r0, r1 + cmp r0, #0x3b + bgt _080448CA + ldrh r0, [r5, #0x22] + b _080448C6 + .align 2, 0 +_0804482C: .4byte gCamera +_08044830: .4byte gStageFlags +_08044834: + movs r1, #0x22 + ldrsh r0, [r5, r1] + movs r2, #0xe + ldrsh r1, [r5, r2] + adds r0, r0, r1 + movs r1, #0x3c + rsbs r1, r1, #0 + cmp r0, r1 + ble _080448CA + ldrh r0, [r5, #0x22] + subs r0, #2 + b _080448C8 +_0804484C: + adds r0, r4, #0 + adds r0, #0x3c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _080448CA + ldrh r0, [r5, #0x22] + movs r3, #0x22 + ldrsh r1, [r5, r3] + cmp r1, #0 + ble _080448C2 + subs r0, #2 + b _080448C8 +_08044868: + adds r0, r4, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + beq _080448CA + movs r0, #0x6d + bl m4aSongNumStart + ldr r0, [r4, #0x10] + movs r1, #4 + orrs r0, r1 + str r0, [r4, #0x10] + adds r0, r4, #0 + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #9 + strb r0, [r4, #0xf] + movs r0, #5 + strb r0, [r6] + adds r1, r4, #0 + adds r1, #0x3c + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + bne _080448CA + movs r0, #0x78 + strb r0, [r4, #0x15] + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + bne _080448CA + adds r2, r5, #0 + ldrh r0, [r2, #0x22] + movs r3, #0x22 + ldrsh r1, [r2, r3] + cmp r1, #0 + ble _080448C2 + subs r0, #2 + strh r0, [r2, #0x22] + b _080448CA +_080448C2: + cmp r1, #0 + bge _080448CA +_080448C6: + adds r0, #2 +_080448C8: + strh r0, [r5, #0x22] +_080448CA: + pop {r4, r5, r6} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__Player_AirInputControls.inc b/sa1/asm/non_matching/game/stage/Player__Player_AirInputControls.inc new file mode 100644 index 0000000000..e268bb89a3 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__Player_AirInputControls.inc @@ -0,0 +1,119 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 @ r4 = p + ldr r0, [r4, #0x30] + lsls r6, r0, #1 @ r6 = qPlayerAccel + ldr r7, [r4, #0x2c] @ r7 = qPlayerMaxSpeed + adds r0, r4, #0 + adds r0, #0x40 + movs r5, #0 + ldrsb r5, [r0, r5] + cmp r5, #0xf @ if (p->charState == CHARSTATE_HIT_AIR) + beq _0804466A_return + ldr r1, [r4, #0x10] + movs r0, #0x10 + mov ip, r0 + adds r0, r1, #0 + mov r2, ip + ands r0, r2 + cmp r0, #0 @ if (p->moveState & MOVESTATE_FLIP_WITH_MOVE_DIR) + bne _08044634 + ldrh r2, [r4, #8] @ r2 = p->qSpeedAirX + ldrh r3, [r4, #0x38] + movs r0, #0x20 + ands r0, r3 + cmp r0, #0 + beq _080445FE + cmp r5, #0x17 + beq _080445DC + movs r0, #1 + orrs r1, r0 + str r1, [r4, #0x10] +_080445DC: + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + subs r0, r0, r6 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + asrs r0, r0, #0x10 + rsbs r1, r7, #0 + cmp r0, r1 + bge _08044632 + adds r0, r0, r6 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, r1 + ble _08044632 + lsls r0, r1, #0x10 + b _08044630 +_080445FE: + mov r0, ip + ands r0, r3 + cmp r0, #0 + beq _08044632 + cmp r5, #0x17 + beq _08044612 + movs r0, #2 + rsbs r0, r0, #0 + ands r1, r0 + str r1, [r4, #0x10] +_08044612: + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + adds r0, r0, r6 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, r7 + ble _08044632 + subs r0, r0, r6 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, r7 + bge _08044632 + lsls r0, r7, #0x10 +_08044630: + lsrs r2, r0, #0x10 +_08044632: + strh r2, [r4, #8] +_08044634: + ldrh r1, [r4, #0xa] + ldr r0, _08044654 @ =0x0000BCFF + cmp r1, r0 + bls _0804466A_return + ldrh r1, [r4, #8] + lsls r0, r1, #0x10 + asrs r1, r0, #0x10 + asrs r0, r0, #0x15 + cmp r0, #0 + bge _08044658 + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + cmp r0, #0 + ble _08044668 + b _08044666 + .align 2, 0 +_08044654: .4byte 0x0000BCFF +_08044658: + cmp r0, #0 + ble _0804466A_return + subs r0, r1, r0 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + cmp r0, #0 + bge _08044668 +_08044666: + movs r1, #0 +_08044668: + strh r1, [r4, #8] +_0804466A_return: + pop {r4, r5, r6, r7} + pop {r0} + bx r0 +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__Player_Tails_804571C.inc b/sa1/asm/non_matching/game/stage/Player__Player_Tails_804571C.inc new file mode 100644 index 0000000000..49f1a4020a --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__Player_Tails_804571C.inc @@ -0,0 +1,315 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r4, r0, #0 @ r4 = p + ldr r0, _08045768 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 @ r8 = flag80 + ldr r2, _0804576C @ =gPlayer + adds r0, r2, #0 + adds r0, #0x27 + ldrb r3, [r0] + adds r5, r4, #0 + adds r5, #0x27 + strb r3, [r5] + ldr r0, [r2, #0x10] + movs r1, #0x80 + lsls r1, r1, #0x11 + ands r0, r1 + adds r6, r2, #0 @ r6 = r2 = gPlayer + cmp r0, #0 + beq _08045754 + movs r0, #1 + eors r0, r3 + strb r0, [r5] +_08045754: + ldr r0, [r4, #0x10] + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + beq _08045770 + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0x39 + b _08045776 + .align 2, 0 +_08045768: .4byte gStageFlags +_0804576C: .4byte gPlayer +_08045770: + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0x35 +_08045776: + strb r0, [r1] + adds r7, r1, #0 + ldr r0, [r4] + asrs r0, r0, #8 + ldr r3, _08045810 @ =gCamera + movs r2, #0 + ldrsh r1, [r3, r2] + ldr r5, _08045814 @ =0xFFFFFF00 + adds r1, r1, r5 + cmp r0, r1 + bge _08045790 + lsls r0, r1, #8 + str r0, [r4] +_08045790: + ldr r0, [r4] + asrs r0, r0, #8 + movs r2, #0 + ldrsh r1, [r3, r2] + movs r2, #0xf8 + lsls r2, r2, #1 + adds r1, r1, r2 + cmp r0, r1 + ble _080457A6 + lsls r0, r1, #8 + str r0, [r4] +_080457A6: + ldr r0, [r4, #4] + asrs r0, r0, #8 + movs r2, #2 + ldrsh r1, [r3, r2] + adds r1, r1, r5 + cmp r0, r1 + bge _080457B8 + lsls r0, r1, #8 + str r0, [r4, #4] +_080457B8: + ldr r0, [r4, #4] + asrs r0, r0, #8 + movs r2, #2 + ldrsh r1, [r3, r2] + movs r2, #0xd0 + lsls r2, r2, #1 + adds r1, r1, r2 + cmp r0, r1 + ble _080457CE + lsls r0, r1, #8 + str r0, [r4, #4] +_080457CE: + ldr r0, [r4] + asrs r5, r0, #8 + adds r1, r5, #0 + subs r1, #0x20 + ldr r0, [r6] @ r0 = *r6 = I(gPlayer.qWorldX) + asrs r3, r0, #8 + cmp r1, r3 + blt _080457E0 + b _080458F8 +_080457E0: + adds r0, r5, #0 + adds r0, #0x20 + cmp r0, r3 + bgt _080457EA + b _080458F8 +_080457EA: + mov r0, r8 + cmp r0, #0 + bne _08045818 + ldr r0, [r4, #4] + asrs r3, r0, #8 + adds r1, r3, #0 + subs r1, #0x20 + ldr r0, [r6, #4] + asrs r0, r0, #8 + adds r2, r0, #0 + subs r2, #0x30 + cmp r1, r2 + bge _080458F8 + adds r0, r3, #0 + adds r0, #0x20 + cmp r0, r2 + bgt _08045834 + b _080458F8 + .align 2, 0 +_08045810: .4byte gCamera +_08045814: .4byte 0xFFFFFF00 +_08045818: + ldr r0, [r4, #4] + asrs r3, r0, #8 + adds r1, r3, #0 + subs r1, #0x20 + ldr r0, [r6, #4] + asrs r0, r0, #8 + adds r2, r0, #0 + adds r2, #0x30 + cmp r1, r2 + bge _080458F8 + adds r0, r3, #0 + adds r0, #0x20 + cmp r0, r2 + ble _080458F8 +_08045834: + movs r0, #0 + adds r1, r4, #0 + bl sa2__sub_8022F58 + cmp r0, #0 + blt _080458F8 + ldr r0, [r4, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + subs r1, #0xe0 + ands r0, r1 + ldr r1, _080458D0 @ =0xFFFFFBFF + ands r0, r1 + str r0, [r4, #0x10] + adds r0, r4, #0 + adds r0, #0x3d + movs r6, #0 @ r6 = 0 + strb r6, [r0] + adds r0, #1 + strb r6, [r0] + adds r0, #1 + strb r6, [r0] + ldr r0, [r4, #0x10] + ldr r1, _080458D4 @ =0xFFFF7FFF + ands r0, r1 + str r0, [r4, #0x10] + adds r5, r4, #0 + adds r5, #0x59 + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #1 + bne _0804587C + movs r0, #0x78 + bl m4aSongNumStop +_0804587C: + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #3 + bne _0804588C + ldr r0, [r4, #0x10] + ldr r1, _080458D8 @ =0xF9FFFFFF + ands r0, r1 + str r0, [r4, #0x10] +_0804588C: + strh r6, [r4, #0xc] + strh r6, [r4, #8] + strh r6, [r4, #0xa] + movs r0, #0x38 + strb r0, [r7] + ldr r0, [r4, #0x10] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + subs r1, #0xc + ands r0, r1 + ldr r1, _080458DC @ =0xFFFFFDFF + ands r0, r1 + ldr r1, _080458E0 @ =0xFFEFFFFF + ands r0, r1 + ldr r1, _080458E4 @ =0xFF7FFFFF + ands r0, r1 + movs r1, #0x81 + rsbs r1, r1, #0 + ands r0, r1 + ldr r1, _080458E8 @ =0xFFDFFFFF + ands r0, r1 + ldr r1, _080458EC @ =0xFFBFFFFF + ands r0, r1 + movs r1, #9 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] + str r6, [r4, #0x28] + ldr r0, _080458F0 @ =gCurTask + ldr r1, [r0] + ldr r0, _080458F4 @ =Task_8045B38 + str r0, [r1, #8] + b _0804596C + .align 2, 0 +_080458D0: .4byte 0xFFFFFBFF +_080458D4: .4byte 0xFFFF7FFF +_080458D8: .4byte 0xF9FFFFFF +_080458DC: .4byte 0xFFFFFDFF +_080458E0: .4byte 0xFFEFFFFF +_080458E4: .4byte 0xFF7FFFFF +_080458E8: .4byte 0xFFDFFFFF +_080458EC: .4byte 0xFFBFFFFF +_080458F0: .4byte gCurTask +_080458F4: .4byte Task_8045B38 +_080458F8: + ldr r5, [r4] + asrs r3, r5, #8 + ldr r0, _0804591C @ =gPlayer + ldr r1, [r0] + asrs r2, r1, #8 + adds r1, r3, #1 + adds r6, r0, #0 + cmp r1, r2 + bge _08045920 + movs r1, #0x80 + lsls r1, r1, #2 + adds r0, r5, r1 + str r0, [r4] + ldr r0, [r4, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + b _08045932 + .align 2, 0 +_0804591C: .4byte gPlayer +_08045920: + subs r0, r3, #1 + cmp r2, r0 + bge _08045934 + ldr r2, _0804594C @ =0xFFFFFE00 + adds r0, r5, r2 + str r0, [r4] + ldr r0, [r4, #0x10] + movs r1, #1 + orrs r0, r1 +_08045932: + str r0, [r4, #0x10] +_08045934: + ldr r0, [r4, #4] + asrs r3, r0, #8 + adds r1, r0, #0 + mov r0, r8 + cmp r0, #0 + bne _08045950 + ldr r0, [r6, #4] + asrs r0, r0, #8 + adds r2, r0, #0 + subs r2, #0x30 + b _08045958 + .align 2, 0 +_0804594C: .4byte 0xFFFFFE00 +_08045950: + ldr r0, [r6, #4] + asrs r0, r0, #8 + adds r2, r0, #0 + adds r2, #0x30 +_08045958: + cmp r3, r2 + bge _08045962 + movs r2, #0x80 + lsls r2, r2, #1 + b _08045968 +_08045962: + cmp r2, r3 + bge _0804596C + ldr r2, _08045978 @ =0xFFFFFF00 +_08045968: + adds r0, r1, r2 + str r0, [r4, #4] +_0804596C: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +_08045978: .4byte 0xFFFFFF00 +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__Task_804597C.inc b/sa1/asm/non_matching/game/stage/Player__Task_804597C.inc new file mode 100644 index 0000000000..0f00f841f5 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__Task_804597C.inc @@ -0,0 +1,185 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + ldr r4, _08045994 @ r4 = gPartner + ldr r6, [r4, #0x64] @ r6 = gPartner.spriteInfoBody + ldr r7, [r4, #0x68] @ r7 = gPartner.spriteInfoLimbs + ldr r5, [r4, #4] @ r5 = gPartner.qWorldY + ldr r0, [r4, #0x10] @ r0 = gPartner.moveState + ldr r3, _08045998 @ r3 = gCamera + cmp r0, #0 + bge _080459A0 + ldr r2, _0804599C @ =gStageFlags + b _08045A60 + .align 2, 0 +_08045994: .4byte gPartner +_08045998: .4byte gCamera +_0804599C: .4byte gStageFlags +_080459A0: + ldr r2, _080459BC @ =gStageFlags + ldrh r1, [r2] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _080459C4 + movs r1, #2 + ldrsh r0, [r3, r1] + lsls r0, r0, #8 + ldr r1, _080459C0 @ =0x0000EFFF + adds r0, r0, r1 + cmp r5, r0 + blt _080459D2 + b _080459D8 + .align 2, 0 +_080459BC: .4byte gStageFlags +_080459C0: .4byte 0x0000EFFF +_080459C4: + movs r1, #2 + ldrsh r0, [r3, r1] + subs r0, #0x50 + lsls r0, r0, #8 + movs r1, #1 + cmp r5, r0 + ble _080459D4 +_080459D2: + movs r1, #0 +_080459D4: + cmp r1, #0 + beq _08045A60 +_080459D8: + movs r2, #0 + ldrsh r0, [r3, r2] + ldr r1, _08045A1C @ =0xFFFFFF00 + adds r0, r0, r1 + lsls r0, r0, #8 + str r0, [r4] + movs r2, #2 + ldrsh r0, [r3, r2] + adds r0, r0, r1 + lsls r0, r0, #8 + str r0, [r4, #4] + ldr r2, [r4, #0x64] + ldr r0, [r2, #0x1c] + ldr r1, _08045A20 @ =0xFFFFCFFF + ands r0, r1 + movs r1, #0x80 + lsls r1, r1, #6 + orrs r0, r1 + str r0, [r2, #0x1c] + ldr r0, [r4, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + subs r1, #0x60 + ands r0, r1 + str r0, [r4, #0x10] + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + beq _08045A24 + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0x39 + b _08045A2A + .align 2, 0 +_08045A1C: .4byte 0xFFFFFF00 +_08045A20: .4byte 0xFFFFCFFF +_08045A24: + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0x35 +_08045A2A: + strb r0, [r1] + adds r1, r4, #0 + adds r1, #0x5b + movs r0, #0x3c + strb r0, [r1] + subs r1, #1 + movs r0, #0x1e + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x3c + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _08045A4E + movs r0, #0x1b + bl m4aSongNumStop +_08045A4E: + ldr r0, _08045A58 @ =gCurTask + ldr r1, [r0] + ldr r0, _08045A5C @ =Task_8045AD8 + str r0, [r1, #8] + b _08045AD0 + .align 2, 0 +_08045A58: .4byte gCurTask +_08045A5C: .4byte Task_8045AD8 +_08045A60: + movs r0, #8 + ldrsh r1, [r4, r0] + ldr r0, [r4] + adds r0, r0, r1 + str r0, [r4] + ldr r1, _08045A94 @ =sa2__gUnknown_0300544C + ldrh r0, [r2] + ldrh r1, [r1] + eors r0, r1 + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08045A80 + ldrh r0, [r4, #0xa] + rsbs r0, r0, #0 + strh r0, [r4, #0xa] +_08045A80: + ldrh r1, [r2] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08045A98 + movs r2, #0xa + ldrsh r1, [r4, r2] + ldr r0, [r4, #4] + subs r0, r0, r1 + b _08045AA0 + .align 2, 0 +_08045A94: .4byte sa2__gUnknown_0300544C +_08045A98: + movs r0, #0xa + ldrsh r1, [r4, r0] + ldr r0, [r4, #4] + adds r0, r0, r1 +_08045AA0: + str r0, [r4, #4] + ldr r0, [r4, #0x10] + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + bne _08045AB2 + ldrh r0, [r4, #0xa] + adds r0, #0x2a + b _08045AB6 +_08045AB2: + ldrh r0, [r4, #0xa] + adds r0, #0xc +_08045AB6: + strh r0, [r4, #0xa] + adds r0, r4, #0 + adds r1, r6, #0 + bl sa2__sub_802486C + adds r0, r4, #0 + adds r1, r6, #0 + bl sa2__sub_8024B10 + adds r0, r4, #0 + adds r1, r7, #0 + bl sa2__sub_8024F74 +_08045AD0: + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__sa2__sub_802486C.inc b/sa1/asm/non_matching/game/stage/Player__sa2__sub_802486C.inc new file mode 100644 index 0000000000..abb2b9c491 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__sa2__sub_802486C.inc @@ -0,0 +1,402 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + adds r4, r0, #0 @ r4 = p + adds r6, r1, #0 @ r6 = p2 + adds r5, r6, #0 + adds r5, #0xc @ r5 = s + ldr r0, [r4, #0x10] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 @ p->moveState & MOVESTATE_20 + beq _08046034 + adds r1, r4, #0 + adds r1, #0x3e + movs r0, #0 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + movs r0, #0xe + strb r0, [r1] +_08046034: + ldr r7, _080460C4 @ =sCharStateAnimInfo + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0 + ldrsb r0, [r1, r0] + lsls r0, r0, #2 + adds r0, r0, r7 + ldrh r3, [r0] + adds r0, r4, #0 + adds r0, #0x42 + strh r3, [r0] + movs r2, #0 + ldrsb r2, [r1, r2] + mov sb, r1 + mov r8, r0 + cmp r2, #0x2a + bgt _0804606C + ldr r0, _080460C8 @ =gPlayerCharacterIdleAnims + adds r1, #0x19 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + lsls r1, r1, #1 + adds r1, r1, r0 + ldrh r0, [r1] + adds r0, r3, r0 + mov r1, r8 + strh r0, [r1] +_0804606C: + mov r2, sb + movs r0, #0 + ldrsb r0, [r2, r0] + lsls r0, r0, #2 + adds r1, r7, #2 + adds r0, r0, r1 + ldrh r0, [r0] + adds r2, r4, #0 + adds r2, #0x44 + strh r0, [r2] + adds r1, r6, #0 + adds r1, #0x2e + movs r0, #0x10 + strb r0, [r1] + movs r3, #0xc + ldrsh r0, [r4, r3] + adds r6, r2, #0 + cmp r0, #0 + bne _0804609C + ldrh r1, [r4, #0x38] + movs r0, #0xf3 + ands r0, r1 + cmp r0, #0 + beq _080460A6 +_0804609C: + adds r1, r4, #0 + adds r1, #0x46 + movs r0, #0xb4 + lsls r0, r0, #1 + strh r0, [r1] +_080460A6: + mov r7, sb + movs r0, #0 + ldrsb r0, [r7, r0] + cmp r0, #0x10 + bne _080460B2 + b _08046204_case_16 +_080460B2: + cmp r0, #0x10 + bgt _080460D2 + cmp r0, #4 + beq _0804611C_case_4 + cmp r0, #4 + bgt _080460CC + cmp r0, #0 + beq _080460E6_case_0 + b _08046236_post_switch + .align 2, 0 +_080460C4: .4byte sCharStateAnimInfo +_080460C8: .4byte gPlayerCharacterIdleAnims +_080460CC: + cmp r0, #9 + beq _08046198_case_9 + b _08046236_post_switch +_080460D2: + cmp r0, #0x1a + bgt _080460E0 + cmp r0, #0x18 + bge _0804615C + cmp r0, #0x15 + beq _08046180_cases_21_85 + b _08046236_post_switch +_080460E0: + cmp r0, #0x55 + beq _08046180_cases_21_85 + b _08046236_post_switch +_080460E6_case_0: + adds r1, r4, #0 + adds r1, #0x46 + ldrh r0, [r1] + movs r3, #0 + ldrsh r2, [r1, r3] + cmp r2, #0 + beq _080460FA + subs r0, #1 + strh r0, [r1] + b _08046236_post_switch +_080460FA: + ldr r0, _08046118 @ =gPlayerCharacterIdleAnims + adds r1, r4, #0 + adds r1, #0x59 + ldrb r1, [r1] + lsls r1, r1, #0x18 + asrs r1, r1, #0x18 + lsls r1, r1, #1 + adds r1, r1, r0 + ldrh r0, [r1] + adds r0, #1 + mov r7, r8 + strh r0, [r7] + strh r2, [r6] + b _08046236_post_switch + .align 2, 0 +_08046118: .4byte gPlayerCharacterIdleAnims +_0804611C_case_4: + movs r1, #0xc + ldrsh r0, [r4, r1] + adds r1, r0, #0 + cmp r0, #0 + bge _08046128 + rsbs r1, r0, #0 +_08046128: + ldr r0, _08046154 @ =0x0000047F + cmp r1, r0 + ble _0804615C + ldr r1, _08046158 @ =gPlayerCharacterIdleAnims + adds r0, r4, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + adds r0, #5 + movs r1, #0 + mov r2, r8 + strh r0, [r2] + strh r1, [r6] + adds r1, r5, #0 + adds r1, #0x22 + movs r0, #0x10 + strb r0, [r1] + b _08046236_post_switch + .align 2, 0 +_08046154: .4byte 0x0000047F +_08046158: .4byte gPlayerCharacterIdleAnims +_0804615C: + movs r3, #0xc + ldrsh r0, [r4, r3] + adds r1, r0, #0 + cmp r0, #0 + bge _08046168 + rsbs r1, r0, #0 +_08046168: + asrs r0, r1, #4 + cmp r0, #7 + ble _08046176 + cmp r0, #0x10 + ble _08046178 + movs r0, #0x10 + b _08046178 +_08046176: + movs r0, #8 +_08046178: + adds r1, r5, #0 + adds r1, #0x22 + strb r0, [r1] + b _08046236_post_switch +_08046180_cases_21_85: + movs r7, #0xa + ldrsh r1, [r4, r7] + ldr r0, _08046194 @ =0xFFFFFE80 + cmp r1, r0 + blt _08046236_post_switch + movs r0, #0x12 + mov r1, sb + strb r0, [r1] + b _08046236_post_switch + .align 2, 0 +_08046194: .4byte 0xFFFFFE80 +_08046198_case_9: + movs r2, #0xc + ldrsh r1, [r4, r2] + cmp r1, #0 + bge _080461A2 + rsbs r1, r1, #0 +_080461A2: + ldr r0, _080461F4 @ =0x0000017F + cmp r1, r0 + bgt _080461C4 + ldr r1, _080461F8 @ =gPlayerCharacterIdleAnims + adds r0, r4, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + adds r0, #7 + movs r1, #0 + mov r3, r8 + strh r0, [r3] + strh r1, [r6] +_080461C4: + ldr r0, _080461FC @ =gStageTime + ldr r0, [r0] + movs r1, #3 + ands r0, r1 + cmp r0, #0 + bne _08046236_post_switch + movs r2, #0xf + ldrsb r2, [r4, r2] + ldr r0, _08046200 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080461E2 + rsbs r2, r2, #0 +_080461E2: + ldr r0, [r4] + asrs r0, r0, #8 + ldr r1, [r4, #4] + asrs r1, r1, #8 + adds r1, r1, r2 + bl CreateBrakingDustEffect + b _08046236_post_switch + .align 2, 0 +_080461F4: .4byte 0x0000017F +_080461F8: .4byte gPlayerCharacterIdleAnims +_080461FC: .4byte gStageTime +_08046200: .4byte gStageFlags +_08046204_case_16: + ldrb r0, [r4, #0x14] + adds r0, #0x20 + movs r1, #0xc0 + ands r0, r1 + cmp r0, #0 + beq _08046236_post_switch + ldr r1, _08046260 @ =gPlayerCharacterIdleAnims + adds r0, r4, #0 + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + adds r0, #0x2c + mov r7, r8 + strh r0, [r7] + movs r0, #1 + strh r0, [r6] + ldr r0, [r4, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r4, #0x10] +_08046236_post_switch: + ldr r2, [r4, #0x10] + movs r0, #0x40 + ands r0, r2 + cmp r0, #0 + beq _0804624C + adds r3, r5, #0 + adds r3, #0x22 + ldrb r0, [r3] + lsrs r1, r0, #1 + subs r0, r0, r1 + strb r0, [r3] +_0804624C: + movs r0, #1 + ands r2, r0 + cmp r2, #0 + bne _08046264 + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #3 + orrs r0, r1 + b _0804626A + .align 2, 0 +_08046260: .4byte gPlayerCharacterIdleAnims +_08046264: + ldr r0, [r5, #0x10] + ldr r1, _08046284 @ =0xFFFFFBFF + ands r0, r1 +_0804626A: + str r0, [r5, #0x10] + ldr r0, _08046288 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0804628C + ldr r0, [r5, #0x10] + movs r1, #0x80 + lsls r1, r1, #4 + orrs r0, r1 + b _08046292 + .align 2, 0 +_08046284: .4byte 0xFFFFFBFF +_08046288: .4byte gStageFlags +_0804628C: + ldr r0, [r5, #0x10] + ldr r1, _080462F4 @ =0xFFFFF7FF + ands r0, r1 +_08046292: + str r0, [r5, #0x10] + ldr r3, _080462F8 @ =gGameMode + ldrb r0, [r3] + cmp r0, #1 + bls _080462A4 + adds r1, r4, #0 + adds r1, #0x6c + movs r0, #0 + strb r0, [r1] +_080462A4: + mov r0, r8 + ldrh r2, [r0] + ldrh r0, [r5, #0xa] + adds r1, r5, #0 + adds r1, #0x20 + cmp r0, r2 + bne _080462BA + ldrb r0, [r1] + ldrh r7, [r6] + cmp r0, r7 + beq _080462DE +_080462BA: + strh r2, [r5, #0xa] + ldrh r0, [r6] + strb r0, [r1] + adds r1, r5, #0 + adds r1, #0x21 + movs r0, #0xff + strb r0, [r1] + movs r0, #1 + rsbs r0, r0, #0 + str r0, [r5, #0x28] + str r0, [r5, #0x30] + ldrb r0, [r3] + cmp r0, #1 + bls _080462DE + adds r1, r4, #0 + adds r1, #0x6c + movs r0, #1 + strb r0, [r1] +_080462DE: + mov r0, sb + ldrb r1, [r0] + adds r0, r4, #0 + adds r0, #0x41 + strb r1, [r0] + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080462F4: .4byte 0xFFFFF7FF +_080462F8: .4byte gGameMode + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__sa2__sub_8024B10.inc b/sa1/asm/non_matching/game/stage/Player__sa2__sub_8024B10.inc new file mode 100644 index 0000000000..d4103864bf --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__sa2__sub_8024B10.inc @@ -0,0 +1,1072 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x10 + adds r4, r0, #0 @ r4 = p + mov sl, r1 @ sl = inPsi + movs r0, #0xc + add r0, sl + mov r8, r0 @ r8 = s + mov sb, sl @ sb = psi + ldr r0, _080463BC @ =gCamera + ldrh r2, [r0] @ r2 = camX = cam->x + ldrh r1, [r0, #2] @ r1 = camY = cam->y + movs r3, #0 + mov r0, sb + adds r0, #0x2d + ldrb r0, [r0] + cmp r0, #0xff + beq _0804632E + mov r5, r8 + ldrh r0, [r5, #0x1e] + cmp r0, #0xff + bne _08046330 +_0804632E: + movs r3, #1 +_08046330: + str r3, [sp] @ sp00 = r3 = cond + lsls r2, r2, #0x10 + str r2, [sp, #8] + lsls r1, r1, #0x10 + str r1, [sp, #0xc] + adds r5, r4, #0 + adds r5, #0x40 +_0804633E: + ldr r2, [r4] + asrs r2, r2, #8 + ldr r1, [sp, #8] + asrs r0, r1, #0x10 + subs r2, r2, r0 + mov r3, r8 + strh r2, [r3, #0x16] @ s->x = I(p->qWorldX) - camX; + ldr r0, [r4, #4] + asrs r0, r0, #8 + ldr r3, [sp, #0xc] + asrs r1, r3, #0x10 + subs r0, r0, r1 + mov r1, r8 + strh r0, [r1, #0x18] @ s->y = I(p->qWorldY) - camY; + mov r3, sb + strh r2, [r3, #6] + strh r0, [r3, #8] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #4 + beq _08046376 + cmp r0, #0x17 + beq _08046376 + cmp r0, #0x20 + beq _08046386 + cmp r0, #0x28 + beq _08046376 + b _08046474 +_08046376: + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #0x20 + beq _08046386 + ldrb r0, [r4, #0x14] + lsls r0, r0, #2 + mov r5, sb + strh r0, [r5] +_08046386: + mov r0, r8 + ldr r1, [r0, #0x10] + ldr r0, _080463C0 @ =0xFFFFF3FF + ands r1, r0 + movs r0, #0x20 + rsbs r0, r0, #0 + ands r1, r0 + adds r0, r4, #0 + adds r0, #0x3c + ldrb r0, [r0] + movs r2, #0x20 + orrs r0, r2 + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + orrs r1, r0 + mov r2, r8 + str r1, [r2, #0x10] + ldr r0, [r4, #0x10] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _080463C4 + movs r0, #0xff + lsls r0, r0, #8 + mov r3, sb + strh r0, [r3, #2] + b _080463CC + .align 2, 0 +_080463BC: .4byte gCamera +_080463C0: .4byte 0xFFFFF3FF +_080463C4: + movs r0, #0x80 + lsls r0, r0, #1 + mov r5, sb + strh r0, [r5, #2] +_080463CC: + ldr r2, _08046418 @ =gStageFlags + ldrh r1, [r2] + movs r3, #0x80 + adds r0, r3, #0 + ands r0, r1 + cmp r0, #0 + beq _080463E2 + mov r1, sb + ldrh r0, [r1, #2] + rsbs r0, r0, #0 + strh r0, [r1, #2] +_080463E2: + mov r5, sb + movs r1, #2 + ldrsh r0, [r5, r1] + cmp r0, #0 + bge _080463F2 + ldrh r0, [r5, #6] + subs r0, #1 + strh r0, [r5, #6] +_080463F2: + ldrh r1, [r2] + adds r0, r3, #0 + ands r0, r1 + cmp r0, #0 + beq _08046424 + movs r0, #0x80 + lsls r0, r0, #1 + mov r2, sb + strh r0, [r2, #4] + ldrh r1, [r2] + adds r1, r1, r0 + ldr r3, _0804641C @ =0xFFFFFF00 + adds r0, r3, #0 + subs r0, r0, r1 + ldr r1, _08046420 @ =0x000003FF + ands r0, r1 + strh r0, [r2] + b _0804642C + .align 2, 0 +_08046418: .4byte gStageFlags +_0804641C: .4byte 0xFFFFFF00 +_08046420: .4byte 0x000003FF +_08046424: + movs r0, #0x80 + lsls r0, r0, #1 + mov r5, sb + strh r0, [r5, #4] +_0804642C: + mov r0, sb + movs r2, #2 + ldrsh r1, [r0, r2] + adds r0, r4, #0 + adds r0, #0x54 + movs r3, #0 + ldrsh r0, [r0, r3] + muls r1, r0, r1 + asrs r1, r1, #8 + mov r5, sb + movs r0, #4 + ldrsh r2, [r5, r0] + adds r0, r4, #0 + adds r0, #0x56 + movs r3, #0 + ldrsh r0, [r0, r3] + muls r0, r2, r0 + asrs r0, r0, #8 + strh r1, [r5, #2] + strh r0, [r5, #4] + mov r0, r8 + bl UpdateSpriteAnimation + ldr r0, _08046470 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bls _08046464 + b _0804688E +_08046464: + mov r0, r8 + mov r1, sb + bl TransformSprite + b _0804684E + .align 2, 0 +_08046470: .4byte gGameMode +_08046474: + movs r0, #0 + mov r1, sb + strh r0, [r1] + mov r3, r8 + ldr r2, [r3, #0x10] + subs r0, #0x40 + ands r2, r0 + str r2, [r3, #0x10] + ldr r0, [r4, #0x10] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08046498 + movs r0, #0x80 + lsls r0, r0, #3 + orrs r2, r0 + str r2, [r3, #0x10] + b _080464A8 +_08046498: + ldr r0, _080464C4 @ =0xFFFFFBFF + ands r2, r0 + mov r0, r8 + str r2, [r0, #0x10] + ldrh r0, [r0, #0x16] + adds r0, #1 + mov r1, r8 + strh r0, [r1, #0x16] +_080464A8: + ldr r0, _080464C8 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _080464CC + mov r2, r8 + ldr r0, [r2, #0x10] + movs r1, #0x80 + lsls r1, r1, #4 + orrs r0, r1 + str r0, [r2, #0x10] + b _080464D6 + .align 2, 0 +_080464C4: .4byte 0xFFFFFBFF +_080464C8: .4byte gStageFlags +_080464CC: + mov r3, r8 + ldr r0, [r3, #0x10] + ldr r1, _080464F8 @ =0xFFFFF7FF + ands r0, r1 + str r0, [r3, #0x10] +_080464D6: + mov r0, r8 + bl UpdateSpriteAnimation + adds r1, r0, #0 @ r1 = acmdRes + cmp r1, #0 + beq _080464E4 + b _0804684E +_080464E4: + ldrb r0, [r5] + str r0, [sp, #4] @ sp04 = oldCharState + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #7 + bne _080464FC + movs r0, #6 +_080464F2_set_charState: + strb r0, [r5] + b _08046836_post_ifelse + .align 2, 0 +_080464F8: .4byte 0xFFFFF7FF +_080464FC: + cmp r0, #3 + bne _0804650C + movs r2, #0xc + ldrsh r0, [r4, r2] + cmp r0, #0 + beq _0804650A + b _0804681C_set_charState_to_WALK +_0804650A: + b _08046510 +_0804650C: + cmp r0, #0xb + bne _08046514 +_08046510: + strb r1, [r5] + b _08046836_post_ifelse +_08046514: + cmp r0, #0x16 + bne _0804651A + b _0804681C_set_charState_to_WALK +_0804651A: + cmp r0, #0x11 + beq _08046522 + cmp r0, #0x12 + bne _08046526 +_08046522: + movs r0, #0x13 + b _080464F2_set_charState +_08046526: + cmp r0, #0x1b + bne _0804652C + b _0804681C_set_charState_to_WALK +_0804652C: + cmp r0, #0x4a + bne _08046594 + ldr r0, [r4, #0x10] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _08046548 + movs r1, #0xe + ldrsb r1, [r4, r1] + adds r1, #3 + lsls r1, r1, #8 + ldr r0, [r4] + subs r0, r0, r1 + b _08046554 +_08046548: + movs r1, #0xe + ldrsb r1, [r4, r1] + adds r1, #3 + lsls r1, r1, #8 + ldr r0, [r4] + adds r0, r0, r1 +_08046554: + str r0, [r4] + movs r0, #6 + strb r0, [r4, #0xe] + movs r2, #0xe + strb r2, [r4, #0xf] + ldr r0, _08046574 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _08046578 + lsls r1, r2, #8 + ldr r0, [r4, #4] + adds r0, r0, r1 + b _0804657E + .align 2, 0 +_08046574: .4byte gStageFlags +_08046578: + ldr r0, [r4, #4] + ldr r3, _08046590 @ =0xFFFFF200 + adds r0, r0, r3 +_0804657E: + str r0, [r4, #4] + movs r0, #0x4b + strb r0, [r5] + adds r1, r4, #0 + adds r1, #0x3e + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + b _08046836_post_ifelse + .align 2, 0 +_08046590: .4byte 0xFFFFF200 +_08046594: + cmp r0, #0x4b + bne _0804659C + strb r1, [r4, #0x14] + b _0804673E +_0804659C: + cmp r0, #0x2d + beq _080465A4 + cmp r0, #0x30 + bne _08046608 +_080465A4: + ldr r0, [r4, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + subs r1, #0xe0 + ands r0, r1 + ldr r1, _080465FC @ =0xFFFFFBFF + ands r0, r1 + str r0, [r4, #0x10] @ p->moveState &= ~MOVESTATE_SPINDASH; + adds r1, r4, #0 + adds r1, #0x3d + movs r0, #0 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + ldr r0, [r4, #0x10] + ldr r1, _08046600 @ =0xFFFF7FFF + ands r0, r1 + str r0, [r4, #0x10] + adds r6, r4, #0 + adds r6, #0x59 + movs r0, #0 + ldrsb r0, [r6, r0] + cmp r0, #1 + bne _080465E0 + movs r0, #0x78 + bl m4aSongNumStop +_080465E0: + movs r0, #0 + ldrsb r0, [r6, r0] + cmp r0, #3 + bne _080465F0 + ldr r0, [r4, #0x10] + ldr r1, _08046604 @ =0xF9FFFFFF + ands r0, r1 + str r0, [r4, #0x10] +_080465F0: + movs r1, #0xc + ldrsh r0, [r4, r1] + cmp r0, #0 + beq _080465FA + b _0804681C_set_charState_to_WALK +_080465FA: + b _080464F2_set_charState + .align 2, 0 +_080465FC: .4byte 0xFFFFFBFF +_08046600: .4byte 0xFFFF7FFF +_08046604: .4byte 0xF9FFFFFF +_08046608: + ldrb r0, [r5] + movs r1, #0 + ldrsb r1, [r5, r1] + cmp r1, #0x2e + bne _08046704 + adds r2, r4, #0 + adds r2, #0x3f + movs r7, #0 + ldrsb r7, [r2, r7] + adds r3, r2, #0 + cmp r7, #1 + bne _0804664E + ldr r0, [r4, #0x10] + ands r0, r7 + cmp r0, #0 + beq _0804662E + movs r0, #0xfc + lsls r0, r0, #8 + b _08046632 +_0804662E: + movs r0, #0x80 + lsls r0, r0, #3 +_08046632: + strh r0, [r4, #0xc] + adds r2, r4, #0 + adds r2, #0x3e + ldrb r0, [r2] + adds r0, #1 + movs r1, #0 + strb r0, [r2] + strb r1, [r3] + movs r0, #0x2f + strb r0, [r5] + movs r0, #0x6f + bl m4aSongNumStart + b _08046836_post_ifelse +_0804664E: + cmp r7, #2 + bne _080466F0 + ldr r0, [r4, #0x10] + movs r1, #0x21 + rsbs r1, r1, #0 + ands r0, r1 + subs r1, #0xe0 + ands r0, r1 + ldr r1, _080466DC @ =0xFFFFFBFF + ands r0, r1 + str r0, [r4, #0x10] + adds r1, r4, #0 + adds r1, #0x3d + movs r0, #0 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + strb r0, [r2] + ldr r0, [r4, #0x10] + ldr r1, _080466E0 @ =0xFFFF7FFF + ands r0, r1 + str r0, [r4, #0x10] + adds r6, r4, #0 + adds r6, #0x59 + movs r0, #0 + ldrsb r0, [r6, r0] + cmp r0, #1 + bne _0804668C + movs r0, #0x78 + bl m4aSongNumStop +_0804668C: + movs r0, #0 + ldrsb r0, [r6, r0] + cmp r0, #3 + bne _0804669C + ldr r0, [r4, #0x10] + ldr r1, _080466E4 @ =0xF9FFFFFF + ands r0, r1 + str r0, [r4, #0x10] +_0804669C: + ldrh r0, [r4, #8] + rsbs r0, r0, #0 + strh r0, [r4, #8] + ldr r0, _080466E8 @ =0x0000FB20 + strh r0, [r4, #0xa] + ldr r0, [r4, #0x10] + movs r1, #0x40 + ands r0, r1 + cmp r0, #0 + beq _080466B4 + ldr r0, _080466EC @ =0x0000FD60 + strh r0, [r4, #0xa] +_080466B4: + ldr r0, [r4, #0x10] + orrs r0, r7 + movs r1, #4 + orrs r0, r1 + str r0, [r4, #0x10] + adds r0, r4, #0 + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #9 + strb r0, [r4, #0xf] + movs r0, #0x31 + strb r0, [r5] + movs r0, #0x74 + bl m4aSongNumStart + b _08046836_post_ifelse + .align 2, 0 +_080466DC: .4byte 0xFFFFFBFF +_080466E0: .4byte 0xFFFF7FFF +_080466E4: .4byte 0xF9FFFFFF +_080466E8: .4byte 0x0000FB20 +_080466EC: .4byte 0x0000FD60 +_080466F0: + adds r1, r4, #0 + adds r1, #0x3e + movs r0, #0 + strb r0, [r1] + strb r0, [r2] + strb r0, [r5] + adds r1, #0x1a + strb r0, [r1] + strh r0, [r4, #0xc] + b _08046836_post_ifelse +_08046704: + cmp r1, #0x36 + bne _0804670C + movs r0, #0x35 + b _080464F2_set_charState +_0804670C: + cmp r1, #0x3a + bne _08046714 + movs r0, #0x39 + b _080464F2_set_charState +_08046714: + cmp r1, #0x3c + bne _0804673A + adds r1, r4, #0 + adds r1, #0x3e + movs r0, #0 + strb r0, [r1] + adds r1, #1 + strb r0, [r1] + movs r2, #0xc + ldrsh r0, [r4, r2] + cmp r0, #0 + beq _0804672E + movs r0, #4 +_0804672E: + strb r0, [r5] + adds r1, r4, #0 + adds r1, #0x58 + movs r0, #0 + strb r0, [r1] + b _08046836_post_ifelse +_0804673A: + cmp r1, #0x40 + bne _08046746 +_0804673E: + adds r0, r4, #0 + bl sa2__sub_8021BE0 + b _08046836_post_ifelse +_08046746: + cmp r1, #0x46 + bne _0804674E + movs r0, #0x47 + b _080464F2_set_charState +_0804674E: + subs r0, #0x4c + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _080467B8 + adds r3, r4, #0 + adds r3, #0x3f + movs r1, #0 + ldrsb r1, [r3, r1] + cmp r1, #0 + beq _080467A6 + adds r2, r4, #0 + adds r2, #0x3e + ldrb r0, [r2] + adds r0, #1 + movs r1, #0 + strb r0, [r2] + strb r1, [r3] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #0x4d + bne _08046782 + movs r0, #0x7f + bl m4aSongNumStart + b _08046788 +_08046782: + movs r0, #0x7e + bl m4aSongNumStart +_08046788: + ldrb r0, [r5] + adds r0, #1 + strb r0, [r5] + movs r2, #0xc0 + lsls r2, r2, #2 + ldr r0, [r4, #0x10] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0804679E + rsbs r2, r2, #0 +_0804679E: + ldrh r0, [r4, #0xc] + adds r0, r0, r2 + strh r0, [r4, #0xc] + b _08046836_post_ifelse +_080467A6: + adds r0, r4, #0 + adds r0, #0x3e + strb r1, [r0] + strb r1, [r3] + strb r1, [r5] + adds r0, #0x1a + strb r1, [r0] + strh r1, [r4, #0xc] + b _08046836_post_ifelse +_080467B8: + cmp r1, #0x57 + bne _08046806 + adds r2, r4, #0 + adds r2, #0x3f + movs r1, #0 + ldrsb r1, [r2, r1] + cmp r1, #0 + bne _080467D8 + adds r0, r4, #0 + adds r0, #0x3e + strb r1, [r0] + movs r3, #0xc + ldrsh r0, [r4, r3] + cmp r0, #0 + bne _0804681C_set_charState_to_WALK + b _080464F2_set_charState +_080467D8: + movs r0, #0 + strb r0, [r2] + adds r1, r4, #0 + adds r1, #0x3e + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + movs r0, #0x58 + strb r0, [r5] + movs r2, #0xc0 + lsls r2, r2, #2 + ldr r0, [r4, #0x10] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _080467FA + rsbs r2, r2, #0 +_080467FA: + ldrh r0, [r4, #0xc] + adds r0, r0, r2 + strh r0, [r4, #0xc] + bl CreateAmyAttackHeartEffect + b _08046836_post_ifelse +_08046806: + cmp r1, #0x58 + bne _08046820 + adds r1, r4, #0 + adds r1, #0x3e + movs r0, #0 + strb r0, [r1] + movs r1, #0xc + ldrsh r0, [r4, r1] + cmp r0, #0 + bne _0804681C_set_charState_to_WALK + b _080464F2_set_charState +_0804681C_set_charState_to_WALK: + movs r0, #4 + b _080464F2_set_charState +_08046820: + cmp r1, #0x5d + bne _08046836_post_ifelse + adds r0, r4, #0 + adds r0, #0x3e + movs r1, #0 + strb r1, [r0] + adds r0, #1 + strb r1, [r0] + strb r1, [r5] + adds r0, #0x19 + strb r1, [r0] +_08046836_post_ifelse: + movs r1, #0 + ldrsb r1, [r5, r1] + ldr r2, [sp, #4] @ r2 = sp04 = oldCharState + lsls r0, r2, #0x18 + asrs r0, r0, #0x18 + cmp r1, r0 + beq _0804684E + adds r0, r4, #0 + mov r1, sl @ r1 = sl = inPsi + bl sa2__sub_802486C + b _0804633E +_0804684E: + ldr r0, _080468E4 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bhi _0804688E + ldr r1, [r4, #0x10] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0804687E + movs r0, #0x80 + lsls r0, r0, #0xd + ands r1, r0 + cmp r1, #0 + bne _08046884 + movs r3, #0x1c + ldrsh r0, [r4, r3] + cmp r0, #0 + beq _0804687E + ldr r0, _080468E8 @ =gStageTime + ldr r0, [r0] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _08046884 +_0804687E: + mov r0, r8 + bl DisplaySprite +_08046884: + ldr r0, _080468E4 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bhi _0804688E + b _08046AD6 +_0804688E: + ldr r5, _080468EC @ =gMultiSioSend + ldr r2, _080468F0 @ =gMultiplayerPlayerTasks + ldr r0, _080468F4 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + lsls r0, r0, #2 + adds r0, r0, r2 + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + movs r0, #0x80 + lsls r0, r0, #5 + strh r0, [r5] + ldr r0, [r4] + adds r1, r4, #0 + adds r1, #0x50 + asrs r0, r0, #8 + ldrh r1, [r1] + adds r0, r0, r1 + strh r0, [r5, #2] + ldr r0, [r4, #4] + asrs r0, r0, #8 + strh r0, [r5, #4] + mov r0, r8 + ldrh r3, [r0, #0xa] + strh r3, [r5, #6] + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + strb r0, [r5, #0xa] + ldr r0, _080468E4 @ =gGameMode + ldrb r0, [r0] + mov ip, r2 + cmp r0, #6 + bne _080468FC + ldr r0, _080468F8 @ =gRingCount + ldrh r0, [r0] + lsls r0, r0, #8 + b _08046910 + .align 2, 0 +_080468E4: .4byte gGameMode +_080468E8: .4byte gStageTime +_080468EC: .4byte gMultiSioSend +_080468F0: .4byte gMultiplayerPlayerTasks +_080468F4: .4byte 0x04000128 +_080468F8: .4byte gRingCount +_080468FC: + subs r0, #4 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _08046914 + ldr r0, [r7, #0x5c] + movs r1, #0xe0 + lsls r1, r1, #0xb + ands r0, r1 + lsrs r0, r0, #4 +_08046910: + orrs r0, r3 + strh r0, [r5, #6] +_08046914: + mov r1, r8 + adds r1, #0x20 + ldrb r0, [r4, #0xf] + lsls r0, r0, #3 + ldrb r1, [r1] + orrs r0, r1 + strb r0, [r5, #0xb] + mov r0, r8 + adds r0, #0x22 + ldrb r0, [r0] + strb r0, [r5, #0xc] + mov r1, sb + ldrh r0, [r1] + lsrs r0, r0, #2 + strb r0, [r5, #0xd] + mov r2, r8 + ldr r0, [r2, #0x10] + movs r1, #0x20 + ands r0, r1 + cmp r0, #0 + beq _08046946 + ldrh r1, [r5, #8] + movs r0, #1 + orrs r0, r1 + b _0804694C +_08046946: + ldrh r1, [r5, #8] + ldr r0, _08046964 @ =0x0000FFFE + ands r0, r1 +_0804694C: + strh r0, [r5, #8] + ldr r1, [r4, #0x10] + movs r0, #1 + ands r0, r1 + adds r2, r1, #0 + cmp r0, #0 + bne _08046968 + ldrh r1, [r5, #8] + movs r0, #2 + orrs r0, r1 + b _0804696E + .align 2, 0 +_08046964: .4byte 0x0000FFFE +_08046968: + ldrh r1, [r5, #8] + ldr r0, _08046984 @ =0x0000FFFD + ands r0, r1 +_0804696E: + strh r0, [r5, #8] + ldr r0, _08046988 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0804698C + ldrh r1, [r5, #8] + movs r0, #8 + orrs r0, r1 + b _08046992 + .align 2, 0 +_08046984: .4byte 0x0000FFFD +_08046988: .4byte gStageFlags +_0804698C: + ldrh r1, [r5, #8] + ldr r0, _080469B8 @ =0x0000FFF7 + ands r0, r1 +_08046992: + strh r0, [r5, #8] + movs r0, #0x80 + ands r0, r2 + cmp r0, #0 + bne _080469AE + ldr r0, [r7, #0x5c] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _080469AE + movs r3, #0x1c + ldrsh r0, [r4, r3] + cmp r0, #0 + beq _080469BC +_080469AE: + ldrh r1, [r5, #8] + movs r0, #4 + orrs r0, r1 + b _080469C2 + .align 2, 0 +_080469B8: .4byte 0x0000FFF7 +_080469BC: + ldrh r1, [r5, #8] + ldr r0, _080469DC @ =0x0000FFFB + ands r0, r1 +_080469C2: + strh r0, [r5, #8] + ldr r0, [r7, #0x5c] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _080469E0 + ldrh r1, [r5, #8] + movs r3, #0x80 + lsls r3, r3, #1 + adds r0, r3, #0 + orrs r0, r1 + b _080469E6 + .align 2, 0 +_080469DC: .4byte 0x0000FFFB +_080469E0: + ldrh r1, [r5, #8] + ldr r0, _080469FC @ =0x0000FEFF + ands r0, r1 +_080469E6: + strh r0, [r5, #8] + movs r0, #0x80 + lsls r0, r0, #0xd + ands r0, r2 + cmp r0, #0 + beq _08046A00 + ldrh r1, [r5, #8] + movs r0, #0x40 + orrs r0, r1 + b _08046A06 + .align 2, 0 +_080469FC: .4byte 0x0000FEFF +_08046A00: + ldrh r1, [r5, #8] + ldr r0, _08046A34 @ =0x0000FFBF + ands r0, r1 +_08046A06: + strh r0, [r5, #8] + ldrh r0, [r5, #8] + ldr r2, _08046A38 @ =0x0000FFCF + ands r2, r0 + strh r2, [r5, #8] + ldr r3, _08046A3C @ =gPlayer + ldr r0, [r3, #0x64] + ldr r0, [r0, #0x1c] + movs r1, #0xc0 + lsls r1, r1, #6 + ands r0, r1 + lsrs r1, r0, #8 + orrs r1, r2 + strh r1, [r5, #8] + adds r0, r4, #0 + adds r0, #0x27 + ldrb r0, [r0] + cmp r0, #0 + beq _08046A40 + movs r0, #0x80 + orrs r1, r0 + b _08046A44 + .align 2, 0 +_08046A34: .4byte 0x0000FFBF +_08046A38: .4byte 0x0000FFCF +_08046A3C: .4byte gPlayer +_08046A40: + ldr r0, _08046A58 @ =0x0000FF7F + ands r1, r0 +_08046A44: + strh r1, [r5, #8] + ldr r0, [sp] + cmp r0, #0 + beq _08046A5C + ldrh r1, [r5, #8] + movs r2, #0x80 + lsls r2, r2, #4 + adds r0, r2, #0 + orrs r0, r1 + b _08046A62 + .align 2, 0 +_08046A58: .4byte 0x0000FF7F +_08046A5C: + ldrh r1, [r5, #8] + ldr r0, _08046AE8 @ =0x0000F7FF + ands r0, r1 +_08046A62: + strh r0, [r5, #8] + ldr r6, _08046AEC @ =0x04000128 + ldr r0, [r6] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r2, r7, #0 + adds r2, #0x64 + strb r0, [r2] + ldr r0, [r3, #0x10] + movs r1, #8 + ands r0, r1 + cmp r0, #0 + beq _08046AC6 + movs r4, #0 + ldr r0, [r6] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r0, #0 + beq _08046AA6 + mov r1, ip + ldr r0, [r1] + cmp r0, #0 + beq _08046AC6 +_08046A90: + lsls r0, r4, #2 + add r0, ip + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + ldr r0, [r3, #0x28] + cmp r0, r1 + bne _08046AA6 + strb r4, [r2] +_08046AA6: + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #3 + bhi _08046AC6 + ldr r0, _08046AEC @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r0, r4 + beq _08046AA6 + lsls r0, r4, #2 + add r0, ip + ldr r0, [r0] + cmp r0, #0 + bne _08046A90 +_08046AC6: + ldrh r0, [r5, #8] + ldr r1, _08046AF0 @ =0x0000F9FF + ands r1, r0 + strh r1, [r5, #8] + ldrb r0, [r2] + lsls r0, r0, #9 + orrs r0, r1 + strh r0, [r5, #8] +_08046AD6: + add sp, #0x10 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08046AE8: .4byte 0x0000F7FF +_08046AEC: .4byte 0x04000128 +_08046AF0: .4byte 0x0000F9FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__sub_8044434.inc b/sa1/asm/non_matching/game/stage/Player__sub_8044434.inc new file mode 100644 index 0000000000..4e06b4c1ab --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__sub_8044434.inc @@ -0,0 +1,190 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, lr} + adds r4, r0, #0 + ldrb r2, [r4, #0x14] + ldr r0, _0804444C @ =gPlayerControls + ldrh r1, [r4, #0x3a] + ldrh r0, [r0] + ands r0, r1 + cmp r0, #0 + bne _08044450 + movs r0, #0 + b _08044598 + .align 2, 0 +_0804444C: .4byte gPlayerControls +_08044450: + ldr r0, _08044498 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0804446E + adds r0, r2, #0 + adds r0, #0x40 + lsls r0, r0, #0x18 + rsbs r0, r0, #0 + lsrs r2, r0, #0x18 + adds r0, r2, #0 + subs r0, #0x40 + lsls r0, r0, #0x18 + lsrs r2, r0, #0x18 +_0804446E: + adds r5, r4, #0 + adds r5, #0x27 + ldrb r0, [r5] + movs r6, #1 + eors r0, r6 + strb r0, [r5] + adds r0, r2, #0 + adds r0, #0x80 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + adds r1, r4, #0 + bl sa2__sub_8022F58 + cmp r0, #3 + bgt _0804449C + ldrb r0, [r5] + eors r0, r6 + strb r0, [r5] + movs r0, #0 + b _08044598 + .align 2, 0 +_08044498: .4byte gStageFlags +_0804449C: + ldr r0, _080444B4 @ =gPlayer + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #3 + bne _080444B8 + movs r0, #0x86 + bl m4aSongNumStop + b _080444BE + .align 2, 0 +_080444B4: .4byte gPlayer +_080444B8: + movs r0, #0x72 + bl m4aSongNumStop +_080444BE: + ldr r0, [r4, #0x10] + movs r1, #2 + orrs r0, r1 + ldr r1, _080444F8 @ =0xFEFFFFDF + ands r0, r1 + movs r1, #0x80 + lsls r1, r1, #1 + orrs r0, r1 + ldr r1, _080444FC @ =0xFFFFF7FF + ands r0, r1 + str r0, [r4, #0x10] + ldr r1, _08044500 @ =gPlayer + adds r1, #0x26 + ldrb r2, [r1] + movs r0, #0x7f + ands r0, r2 + strb r0, [r1] + adds r0, r4, #0 + adds r0, #0x59 + movs r1, #0 + ldrsb r1, [r0, r1] + adds r5, r0, #0 + cmp r1, #0 + blt _08044514 + cmp r1, #2 + ble _08044504 + cmp r1, #3 + beq _0804450C + b _08044514 + .align 2, 0 +_080444F8: .4byte 0xFEFFFFDF +_080444FC: .4byte 0xFFFFF7FF +_08044500: .4byte gPlayer +_08044504: + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #5 + b _08044512 +_0804450C: + adds r1, r4, #0 + adds r1, #0x40 + movs r0, #0x55 +_08044512: + strb r0, [r1] +_08044514: + ldr r0, [r4, #0x10] + movs r1, #0x40 + ands r0, r1 + movs r2, #0x9c + lsls r2, r2, #3 + cmp r0, #0 + beq _08044526 + movs r2, #0xa8 + lsls r2, r2, #2 +_08044526: + ldrb r0, [r4, #0x14] + subs r0, #0x40 + lsls r0, r0, #0x18 + ldr r1, _08044588 @ =gSineTable + lsrs r0, r0, #0x15 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r2, r0 + asrs r0, r0, #8 + strh r0, [r4, #0xa] + movs r0, #0x74 + bl m4aSongNumStart + ldr r1, [r4, #0x64] + ldr r0, [r1, #0x1c] + ldr r3, _0804458C @ =0xFFFFCFFF + ands r0, r3 + movs r2, #0x80 + lsls r2, r2, #6 + orrs r0, r2 + str r0, [r1, #0x1c] + ldr r1, [r4, #0x68] + ldr r0, [r1, #0x1c] + ands r0, r3 + orrs r0, r2 + str r0, [r1, #0x1c] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #3 + beq _08044596 + ldr r1, [r4, #0x10] + movs r2, #4 + adds r0, r1, #0 + ands r0, r2 + cmp r0, #0 + bne _08044590 + orrs r1, r2 + str r1, [r4, #0x10] + adds r0, r4, #0 + movs r1, #9 + bl Player_HandleSpriteYOffsetChange + movs r0, #6 + strb r0, [r4, #0xe] + movs r0, #9 + strb r0, [r4, #0xf] + b _08044596 + .align 2, 0 +_08044588: .4byte gSineTable +_0804458C: .4byte 0xFFFFCFFF +_08044590: + movs r0, #0x10 + orrs r1, r0 + str r1, [r4, #0x10] +_08044596: + movs r0, #1 +_08044598: + pop {r4, r5, r6} + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__sub_8048230.inc b/sa1/asm/non_matching/game/stage/Player__sub_8048230.inc new file mode 100644 index 0000000000..c47a47bcb9 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__sub_8048230.inc @@ -0,0 +1,353 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #0xc + adds r5, r0, #0 @ r5 = p + bl sa2__sub_8022838 + adds r7, r5, #0 + adds r7, #0x80 + ldrb r1, [r7] + movs r0, #2 + mov r8, r0 + ands r0, r1 + cmp r0, #0 + bne _080482D8 + movs r1, #8 + ldrsh r0, [r5, r1] + cmp r0, #0 + bgt _08048260 + ldr r0, [r5, #0x10] + movs r1, #1 + orrs r0, r1 + b _08048268 +_08048260: + ldr r0, [r5, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 +_08048268: + str r0, [r5, #0x10] + ldrb r0, [r5, #0x14] + adds r0, #0x20 + movs r2, #0x40 + rsbs r2, r2, #0 + adds r1, r2, #0 + ands r0, r1 + lsls r0, r0, #0x18 + cmp r0, #0 + beq _080482C2 + adds r0, r5, #0 + adds r0, #0x81 + ldrb r0, [r0] + adds r0, #0x40 + lsls r0, r0, #0x18 + cmp r0, #0 + bgt _08048292 + ldr r0, [r5, #0x10] + movs r1, #1 + orrs r0, r1 + b _0804829A +_08048292: + ldr r0, [r5, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 +_0804829A: + str r0, [r5, #0x10] + movs r0, #0 + strh r0, [r5, #0xa] + adds r0, r5, #0 + bl sa2__sub_8022318 + movs r1, #0xc + ldrsh r0, [r5, r1] + cmp r0, #0 + beq _080482B8 + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #4 + strb r0, [r1] + b _080484BE_return +_080482B8: + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #0 + strb r0, [r1] + b _080484BE_return +_080482C2: + adds r1, r5, #0 + adds r1, #0x3d + movs r0, #3 + strb r0, [r1] + adds r1, #3 + movs r0, #0x41 + strb r0, [r1] + movs r0, #0x6f + bl m4aSongNumStart + b _080484BE_return +_080482D8: + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + bne _080482E2 + b _0804846E +_080482E2: + adds r0, r5, #0 + adds r0, #0x82 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bge _080482F2 + b _0804844C +_080482F2: + adds r1, r5, #0 + adds r1, #0x81 + ldrb r0, [r1] + adds r0, #0x40 + lsls r0, r0, #0x18 + mov sb, r1 + cmp r0, #0 + bgt _080483B4 + ldr r0, [r5, #0x10] + movs r1, #1 + orrs r0, r1 + str r0, [r5, #0x10] + adds r0, r5, #0 + movs r1, #0 + add r2, sp, #8 + bl sa2__sub_8029A28 + adds r6, r0, #0 + ldr r0, [sp, #8] + cmp r6, r0 + beq _0804831E + b _0804844C +_0804831E: + cmp r6, #0 + bne _08048324 + b _08048424 +_08048324: + ldr r0, _08048370 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + cmp r3, #0 + beq _08048378 + ldr r0, [r5, #4] + asrs r0, r0, #8 + subs r0, #1 + movs r1, #0xf + ldrsb r1, [r5, r1] + subs r0, r0, r1 + ldr r1, [r5] + asrs r1, r1, #8 + subs r1, #1 + movs r2, #0xe + ldrsb r2, [r5, r2] + subs r1, r1, r2 + adds r2, r5, #0 + adds r2, #0x27 + ldrb r2, [r2] + movs r3, #8 + rsbs r3, r3, #0 + movs r4, #0 + str r4, [sp] + ldr r4, _08048374 @ =sa2__sub_801EE64 + str r4, [sp, #4] + bl sa2__sub_801E4E4 + cmp r0, #0 + bge _080483A6 + adds r0, r5, #0 + adds r0, #0x3d + mov r1, r8 + strb r1, [r0] + b _08048454 + .align 2, 0 +_08048370: .4byte gStageFlags +_08048374: .4byte sa2__sub_801EE64 +_08048378: + ldr r0, [r5, #4] + asrs r0, r0, #8 + adds r0, #1 + movs r1, #0xf + ldrsb r1, [r5, r1] + adds r0, r0, r1 + ldr r1, [r5] + asrs r1, r1, #8 + subs r1, #1 + movs r2, #0xe + ldrsb r2, [r5, r2] + subs r1, r1, r2 + adds r2, r5, #0 + adds r2, #0x27 + ldrb r2, [r2] + str r3, [sp] + ldr r3, _080483B0 @ =sa2__sub_801EE64 + str r3, [sp, #4] + movs r3, #8 + bl sa2__sub_801E4E4 + cmp r0, #0 + blt _0804844C +_080483A6: + lsls r1, r6, #8 + ldr r0, [r5] + subs r0, r0, r1 + b _08048422 + .align 2, 0 +_080483B0: .4byte sa2__sub_801EE64 +_080483B4: + ldr r0, [r5, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r5, #0x10] + adds r0, r5, #0 + movs r1, #0 + add r2, sp, #8 + bl sa2__sub_8029A74 + adds r6, r0, #0 + ldr r0, [sp, #8] + cmp r6, r0 + beq _080483DA + adds r0, r5, #0 + adds r0, #0x3d + mov r1, r8 + strb r1, [r0] + b _08048454 +_080483DA: + cmp r6, #0 + beq _08048424 + ldr r0, _08048444 @ =gStageFlags + ldrh r1, [r0] + movs r0, #0x80 + ands r0, r1 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + cmp r3, #0 + bne _0804841C + ldr r0, [r5, #4] + asrs r0, r0, #8 + adds r0, #1 + movs r1, #0xf + ldrsb r1, [r5, r1] + adds r0, r0, r1 + ldr r1, [r5] + asrs r1, r1, #8 + adds r1, #1 + movs r2, #0xe + ldrsb r2, [r5, r2] + adds r1, r1, r2 + adds r2, r5, #0 + adds r2, #0x27 + ldrb r2, [r2] + str r3, [sp] + ldr r3, _08048448 @ =sa2__sub_801EE64 + str r3, [sp, #4] + movs r3, #8 + bl sa2__sub_801E4E4 + cmp r0, #0 + blt _0804844C +_0804841C: + lsls r1, r6, #8 + ldr r0, [r5] + adds r0, r0, r1 +_08048422: + str r0, [r5] +_08048424: + movs r0, #0 + strh r0, [r5, #0xc] + strh r0, [r5, #8] + strh r0, [r5, #0xa] + adds r1, r5, #0 + adds r1, #0x3d + movs r0, #4 + strb r0, [r1] + movs r0, #3 + mov r1, sb + strb r0, [r1] + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #0x46 + strb r0, [r1] + b _080484BE_return + .align 2, 0 +_08048444: .4byte gStageFlags +_08048448: .4byte sa2__sub_801EE64 +_0804844C: + adds r0, r5, #0 + adds r0, #0x3d + mov r2, r8 + strb r2, [r0] +_08048454: + adds r1, r5, #0 + adds r1, #0x40 + movs r0, #0x3f + strb r0, [r1] + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #0xe + strb r0, [r5, #0xf] + ldrb r1, [r7] + movs r0, #2 + orrs r0, r1 + strb r0, [r7] + b _080484BE_return +_0804846E: + ldr r0, _08048498 @ =gPlayerControls + ldrh r1, [r5, #0x38] + ldrh r0, [r0] + ands r0, r1 + cmp r0, #0 + bne _080484B8 + adds r0, r5, #0 + adds r0, #0x3d + mov r1, r8 + strb r1, [r0] + adds r0, #3 + movs r1, #0x3f + strb r1, [r0] + movs r2, #8 + ldrsh r0, [r5, r2] + cmp r0, #0 + bgt _0804849C + ldr r0, [r5, #0x10] + movs r1, #1 + orrs r0, r1 + b _080484A4 + .align 2, 0 +_08048498: .4byte gPlayerControls +_0804849C: + ldr r0, [r5, #0x10] + movs r1, #2 + rsbs r1, r1, #0 + ands r0, r1 +_080484A4: + str r0, [r5, #0x10] + ldrh r0, [r5, #8] + lsls r0, r0, #0x10 + asrs r0, r0, #0x12 + strh r0, [r5, #8] + movs r0, #6 + strb r0, [r5, #0xe] + movs r0, #0xe + strb r0, [r5, #0xf] + b _080484BE_return +_080484B8: + adds r0, r5, #0 + bl Player_Knuckles_GlideUpdateAnim +_080484BE_return: + add sp, #0xc + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__sub_8048980.inc b/sa1/asm/non_matching/game/stage/Player__sub_8048980.inc new file mode 100644 index 0000000000..cd84b6b22a --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__sub_8048980.inc @@ -0,0 +1,197 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, lr} + mov ip, r0 @ ip = r0 = p + movs r1, #0xc + ldrsh r2, [r0, r1] + cmp r2, #0 + bge _0804898E + rsbs r2, r2, #0 @ r2 = qSpeedGround = ABS(p->qSpeedGround); +_0804898E: + mov r1, ip + adds r1, #0x81 + ldrb r3, [r1] @ r3 = p->w.kf.shift + mov r0, ip + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r5, r1, #0 @ r5 = r1 = &p->w.kf.shift + cmp r0, #1 + beq _080489A6 + b _08048AB8 +_080489A6: + ldr r0, _080489B4 @ =0x000002FF + cmp r2, r0 + bgt _080489B8 + adds r2, #6 + mov r4, ip + ldr r1, [r4, #0x10] + b _080489D8 + .align 2, 0 +_080489B4: .4byte 0x000002FF +_080489B8: + ldr r0, _08048A10 @ =0x000011FF + mov r4, ip + ldr r1, [r4, #0x10] + cmp r2, r0 + bgt _080489D8 + movs r0, #0x7f + ands r0, r3 + cmp r0, #0 + bne _080489D8 + adds r2, #3 + movs r0, #0x80 + lsls r0, r0, #6 + ands r0, r1 + cmp r0, #0 + beq _080489D8 + adds r2, #6 +_080489D8: + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + beq _080489FC + movs r4, #0xc0 + lsls r4, r4, #2 + cmp r2, r4 + ble _080489FC + subs r2, #9 + movs r0, #0x80 + lsls r0, r0, #6 + ands r1, r0 + cmp r1, #0 + beq _080489F6 + subs r2, #3 +_080489F6: + cmp r2, r4 + bge _080489FC + adds r2, r4, #0 +_080489FC: + ldrb r0, [r5] + adds r0, #0x40 + lsls r0, r0, #0x18 + cmp r0, #0 + bgt _08048A14 + rsbs r0, r2, #0 + mov r1, ip + strh r0, [r1, #0xc] + b _08048A18 + .align 2, 0 +_08048A10: .4byte 0x000011FF +_08048A14: + mov r4, ip + strh r2, [r4, #0xc] +_08048A18: + mov r0, ip @ r0 = ip = p + ldrh r4, [r0, #0x38] + movs r0, #0x20 + ands r0, r4 + cmp r0, #0 + beq _08048A42 + lsls r1, r3, #0x18 + lsrs r0, r1, #0x18 + cmp r0, #0x80 + beq _08048A78 + asrs r0, r1, #0x18 + cmp r0, #0 + bge _08048A38 + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 +_08048A38: + lsls r0, r3, #0x18 + movs r1, #0x80 + lsls r1, r1, #0x12 + adds r0, r0, r1 + b _08048A76 +_08048A42: + movs r0, #0x10 + ands r0, r4 + cmp r0, #0 + beq _08048A66 + lsls r0, r3, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + beq _08048A78 + cmp r0, #0 + ble _08048A5C + rsbs r0, r0, #0 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 +_08048A5C: + lsls r0, r3, #0x18 + movs r3, #0x80 + lsls r3, r3, #0x12 + adds r0, r0, r3 + b _08048A76 +_08048A66: + lsls r0, r3, #0x18 + asrs r1, r0, #0x18 + movs r0, #0x7f + ands r0, r1 + cmp r0, #0 + beq _08048A78 + adds r0, r1, #2 + lsls r0, r0, #0x18 +_08048A76: + lsrs r3, r0, #0x18 +_08048A78: + strb r3, [r5] + ldr r1, _08048AAC @ =gSineTable + lsls r0, r3, #0x18 + lsrs r0, r0, #0x15 + movs r4, #0x80 + lsls r4, r4, #2 + adds r0, r0, r4 + adds r0, r0, r1 + ldrh r0, [r0] + lsls r0, r0, #0x10 + asrs r0, r0, #0x16 + muls r0, r2, r0 + asrs r0, r0, #8 + mov r1, ip @ r1 = ip = p + strh r0, [r1, #8] + ldrh r1, [r1, #0xa] + mov r2, ip @ r2 = ip = p + movs r3, #0xa + ldrsh r0, [r2, r3] + cmp r0, #0x7f + bgt _08048AB0 + adds r0, r1, #0 + adds r0, #0x18 + strh r0, [r2, #0xa] + b _08048AB8 + .align 2, 0 +_08048AAC: .4byte gSineTable +_08048AB0: + adds r0, r1, #0 + subs r0, #0x18 + mov r4, ip @ r4 = ip = p + strh r0, [r4, #0xa] +_08048AB8: + ldr r2, _08048AC8 @ =gCamera + ldrh r0, [r2, #0x22] + movs r3, #0x22 + ldrsh r1, [r2, r3] + cmp r1, #0 + ble _08048ACC + subs r0, #2 + b _08048AD2 + .align 2, 0 +_08048AC8: .4byte gCamera +_08048ACC: + cmp r1, #0 + bge _08048AD4 + adds r0, #4 +_08048AD2: + strh r0, [r2, #0x22] +_08048AD4: + pop {r4, r5} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Player__sub_8049BAC.inc b/sa1/asm/non_matching/game/stage/Player__sub_8049BAC.inc new file mode 100644 index 0000000000..e86e0ec10f --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Player__sub_8049BAC.inc @@ -0,0 +1,54 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {lr} + adds r2, r0, #0 + adds r1, r2, #0 + adds r1, #0x3d + ldrb r3, [r1] + movs r0, #0 + ldrsb r0, [r1, r0] + cmp r0, #0 + beq _08049BC8 + subs r0, r3, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _08049C04 +_08049BC8: + ldr r0, _08049C00 @ =gPlayerControls + ldrh r1, [r2, #0x3a] + ldrh r0, [r0, #2] + ands r0, r1 + cmp r0, #0 + beq _08049C04 + adds r3, r2, #0 + adds r3, #0x3d + movs r1, #0 + movs r0, #8 + strb r0, [r3] + adds r3, #1 + movs r0, #1 + strb r0, [r3] + movs r0, #0x80 + lsls r0, r0, #3 + strh r0, [r2, #0xc] + strh r1, [r2, #8] + strh r1, [r2, #0xa] + adds r0, r2, #0 + bl sub_804A854 + movs r0, #0x70 + bl m4aSongNumStart + movs r0, #1 + b _08049C06 + .align 2, 0 +_08049C00: .4byte gPlayerControls +_08049C04: + movs r0, #0 +_08049C06: + pop {r1} + bx r1 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/Task_RingsMgrMain.inc b/sa1/asm/non_matching/game/stage/Task_RingsMgrMain.inc new file mode 100644 index 0000000000..065ad0f200 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/Task_RingsMgrMain.inc @@ -0,0 +1,1219 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x54 + movs r0, #0 + str r0, [sp, #0x1c] + ldr r2, _080081B0 @ =gPlayer + ldrb r4, [r2, #0xe] + rsbs r0, r4, #0 + add r1, sp, #4 + strb r0, [r1] + ldrb r3, [r2, #0xf] + rsbs r2, r3, #0 + mov r0, sp + adds r0, #5 + strb r2, [r0] + adds r0, #1 + strb r4, [r0] + adds r0, #1 + strb r3, [r0] + mov r0, sp + movs r2, #4 + bl memcpy + movs r4, #0 + ldr r0, _080081B4 @ =gStageFlags + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _08007E82 + bl Task_RingsMgrMain__return +_08007E82: + ldr r0, _080081B8 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + ldr r2, _080081BC @ =0x03000030 + adds r0, r1, r2 + ldr r0, [r0] + str r0, [sp, #0x14] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r1, r1, r0 + str r1, [sp, #0x18] + adds r0, r1, #0 + bl UpdateSpriteAnimation + ldr r3, [sp, #0x18] + ldr r3, [r3, #0xc] + str r3, [sp, #0x20] + ldr r5, [sp, #0x14] + adds r5, #4 + ldm r5!, {r0} + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0xc] + ldm r5!, {r0} + str r5, [sp, #0x14] + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #0x10] + mov r0, sp + str r0, [sp, #0x24] +_08007EBE: + ldr r1, _080081B0 @ =gPlayer + mov sb, r1 + cmp r4, #0 + beq _08007ECA + ldr r2, _080081C0 @ =gPartner + mov sb, r2 +_08007ECA: + mov r3, sb + ldr r2, [r3, #4] + asrs r1, r2, #8 + ldr r5, [sp, #0x24] + movs r0, #1 + ldrsb r0, [r5, r0] + adds r0, r1, r0 + lsls r0, r0, #8 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + movs r0, #3 + ldrsb r0, [r5, r0] + adds r1, r1, r0 + subs r1, #0x10 + asrs r1, r1, #8 + adds r3, r2, #0 + adds r4, #1 + str r4, [sp, #0x38] + ldr r0, [sp, #8] + cmp r0, r1 + ble _08007EF6 + b _080080CE +_08007EF6: + ldr r1, [sp, #0x10] + cmp r0, r1 + blo _08007EFE + b _080080CE +_08007EFE: + mov r4, sb + ldr r2, [r4] + asrs r1, r2, #8 + ldr r5, [sp, #0x24] + movs r0, #0 + ldrsb r0, [r5, r0] + adds r0, r1, r0 + subs r0, #8 + lsls r0, r0, #8 + lsrs r0, r0, #0x10 + mov r8, r0 + movs r0, #2 + ldrsb r0, [r5, r0] + adds r1, r1, r0 + subs r1, #8 + asrs r1, r1, #8 + ldr r0, [sp, #8] + adds r0, #1 + str r0, [sp, #0x50] + cmp r8, r1 + ble _08007F2A + b _080080AA +_08007F2A: + ldr r1, [sp, #0xc] + cmp r8, r1 + blo _08007F32 + b _080080AA +_08007F32: + ldr r4, [sp, #0xc] + ldr r5, [sp, #8] + adds r0, r4, #0 + muls r0, r5, r0 + mov r4, r8 + lsls r1, r4, #2 + lsls r0, r0, #2 + ldr r5, [sp, #0x14] + adds r0, r0, r5 + adds r1, r1, r0 + ldr r0, [r1] + adds r4, #1 + str r4, [sp, #0x4c] + cmp r0, #0 + bne _08007F52 + b _08008088 +_08007F52: + subs r0, #8 + adds r6, r5, r0 + ldrb r1, [r6] + adds r0, r1, #0 + cmp r0, #0xff + bne _08007F60 + b _08008088 +_08007F60: + mov r0, sp + str r0, [sp, #0x28] +_08007F64: + cmp r1, #0xfe + bne _08007F6A + b _08008076 +_08007F6A: + ldrb r0, [r6] + lsls r0, r0, #3 + mov r2, r8 + lsls r1, r2, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov sl, r0 + ldrb r0, [r6, #1] + lsls r0, r0, #3 + ldr r3, [sp, #8] + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 + mov r4, sb + ldr r1, [r4, #0x10] + movs r0, #0x80 + ands r1, r0 + cmp r1, #0 + bne _08008076 + mov r0, sb + adds r0, #0x40 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xf + bne _08007FAA + movs r5, #0x1c + ldrsh r0, [r4, r5] + cmp r0, #0 + bne _08008076 +_08007FAA: + mov r0, sl + lsls r1, r0, #0x10 + asrs r4, r1, #0x10 + adds r2, r4, #0 + subs r2, #8 + mov r3, sb + ldr r0, [r3] + asrs r0, r0, #8 + ldr r3, [sp, #0x28] + movs r5, #0 + ldrsb r5, [r3, r5] + adds r3, r0, r5 + mov sl, r1 + cmp r2, r3 + bgt _08007FD4 + adds r0, r4, #0 + adds r0, #8 + cmp r0, r3 + bge _08007FE2 + cmp r2, r3 + blt _08008076 +_08007FD4: + ldr r4, [sp, #0x28] + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r5 + adds r0, r3, r0 + cmp r0, r2 + blt _08008076 +_08007FE2: + lsls r1, r7, #0x10 + asrs r4, r1, #0x10 + adds r3, r4, #0 + subs r3, #0x10 + mov r5, sb + ldr r0, [r5, #4] + asrs r0, r0, #8 + ldr r2, [sp, #0x28] + movs r5, #1 + ldrsb r5, [r2, r5] + adds r2, r0, r5 + adds r7, r1, #0 + cmp r3, r2 + bgt _08008006 + cmp r4, r2 + bge _08008014 + cmp r3, r2 + blt _08008076 +_08008006: + ldr r4, [sp, #0x28] + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r5 + adds r0, r2, r0 + cmp r0, r3 + blt _08008076 +_08008014: + ldr r1, _080081C4 @ =gRingCount + ldrh r5, [r1] + adds r0, r5, #1 + strh r0, [r1] + ldr r0, _080081C8 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + beq _08008054 + ldrh r0, [r1] + movs r1, #0x64 + bl Div + adds r4, r0, #0 + adds r0, r5, #0 + movs r1, #0x64 + bl Div + cmp r4, r0 + beq _08008054 + ldr r0, _080081CC @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08008054 + ldr r1, _080081D0 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldr r1, _080081D4 @ =gMusicManagerState + movs r0, #0x10 + strb r0, [r1, #3] +_08008054: + ldr r0, _080081CC @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08008068 + ldr r1, _080081C4 @ =gRingCount + ldrh r0, [r1] + cmp r0, #0xff + bls _08008068 + movs r0, #0xff + strh r0, [r1] +_08008068: + mov r5, sl + asrs r0, r5, #0x10 + asrs r1, r7, #0x10 + bl CreateCollectRingEffect + movs r0, #0xfe + strb r0, [r6] +_08008076: + adds r6, #2 + ldrb r1, [r6] + adds r0, r1, #0 + mov r2, sb + ldr r3, [r2, #4] + ldr r2, [r2] + cmp r0, #0xff + beq _08008088 + b _08007F64 +_08008088: + ldr r4, [sp, #0x4c] + lsls r0, r4, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + asrs r0, r2, #8 + ldr r5, [sp, #0x24] + movs r1, #2 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + subs r0, #8 + asrs r0, r0, #8 + cmp r8, r0 + bgt _080080AA + ldr r0, [sp, #0xc] + cmp r8, r0 + bhs _080080AA + b _08007F32 +_080080AA: + ldr r1, [sp, #0x50] + lsls r0, r1, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + asrs r0, r3, #8 + ldr r2, [sp, #0x24] + movs r1, #3 + ldrsb r1, [r2, r1] + adds r0, r0, r1 + subs r0, #0x10 + asrs r0, r0, #8 + ldr r4, [sp, #8] + cmp r4, r0 + bgt _080080CE + ldr r5, [sp, #0x10] + cmp r4, r5 + bhs _080080CE + b _08007EFE +_080080CE: + ldr r4, [sp, #0x38] + ldr r0, _080081D8 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r4, r0 + bge _080080DE + b _08007EBE +_080080DE: + ldr r0, _080081CC @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bhi _080080E8 + b _0800833E +_080080E8: + movs r2, #0 +_080080EA: + ldr r0, _080081DC @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + adds r1, r2, #1 + str r1, [sp, #0x40] + cmp r2, r0 + bne _080080FC + b _08008332 +_080080FC: + ldr r1, _080081E0 @ =gMultiplayerPlayerTasks + lsls r0, r2, #2 + adds r0, r0, r1 + ldr r0, [r0] + cmp r0, #0 + bne _0800810A + b _08008332 +_0800810A: + ldrh r2, [r0, #6] + movs r3, #0xc0 + lsls r3, r3, #0x12 + adds r3, r3, r2 + mov sb, r3 + ldr r4, _080081E4 @ =0x03000052 + adds r0, r2, r4 + movs r5, #0 + ldrsh r1, [r0, r5] + ldr r3, _080081E8 @ =0x0300002D + adds r0, r2, r3 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r1, r0 + lsls r0, r0, #8 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + subs r4, #0x23 + adds r0, r2, r4 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r1, r1, r0 + subs r1, #0x10 + asrs r1, r1, #8 + ldr r5, [sp, #8] + cmp r5, r1 + ble _08008146 + b _08008332 +_08008146: + ldr r0, [sp, #0x10] + cmp r5, r0 + blo _0800814E + b _08008332 +_0800814E: + ldr r1, _080081EC @ =0x03000050 + adds r1, r2, r1 + str r1, [sp, #0x2c] + subs r3, #1 + adds r3, r2, r3 + str r3, [sp, #0x30] + subs r4, #1 + adds r4, r2, r4 + str r4, [sp, #0x34] +_08008160: + ldr r5, [sp, #0x2c] + movs r1, #0 + ldrsh r0, [r5, r1] + ldr r2, [sp, #0x30] + movs r1, #0 + ldrsb r1, [r2, r1] + adds r1, r0, r1 + subs r1, #8 + lsls r1, r1, #8 + lsrs r1, r1, #0x10 + mov r8, r1 + ldr r3, [sp, #0x34] + movs r1, #0 + ldrsb r1, [r3, r1] + adds r0, r0, r1 + subs r0, #8 + asrs r0, r0, #8 + ldr r4, [sp, #8] + adds r4, #1 + str r4, [sp, #0x50] + mov r5, sb + adds r5, #0x52 + str r5, [sp, #0x48] + mov r1, sb + adds r1, #0x2f + str r1, [sp, #0x44] + cmp r8, r0 + ble _0800819A + b _0800830A +_0800819A: + ldr r2, [sp, #0xc] + cmp r8, r2 + blo _080081A2 + b _0800830A +_080081A2: + ldr r3, [sp, #0xc] + ldr r4, [sp, #8] + adds r0, r3, #0 + muls r0, r4, r0 + mov r5, r8 + b _080081F0 + .align 2, 0 +_080081B0: .4byte gPlayer +_080081B4: .4byte gStageFlags +_080081B8: .4byte gCurTask +_080081BC: .4byte 0x03000030 +_080081C0: .4byte gPartner +_080081C4: .4byte gRingCount +_080081C8: .4byte gCurrentLevel +_080081CC: .4byte gGameMode +_080081D0: .4byte gNumLives +_080081D4: .4byte gMusicManagerState +_080081D8: .4byte gNumSingleplayerCharacters +_080081DC: .4byte 0x04000128 +_080081E0: .4byte gMultiplayerPlayerTasks +_080081E4: .4byte 0x03000052 +_080081E8: .4byte 0x0300002D +_080081EC: .4byte 0x03000050 +_080081F0: + lsls r1, r5, #2 + lsls r0, r0, #2 + ldr r2, [sp, #0x14] + adds r0, r0, r2 + adds r1, r1, r0 + ldr r0, [r1] + adds r5, #1 + str r5, [sp, #0x4c] + cmp r0, #0 + beq _080082E4 + subs r0, #8 + adds r6, r2, r0 + b _080082DC +_0800820A: + cmp r1, #0xfe + beq _080082DA + ldrb r2, [r6] + lsls r2, r2, #3 + mov r3, r8 + lsls r0, r3, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldrb r0, [r6, #1] + lsls r0, r0, #3 + ldr r4, [sp, #8] + lsls r1, r4, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 + lsrs r5, r2, #0x10 + mov sl, r5 + asrs r2, r2, #0x10 + adds r3, r2, #0 + subs r3, #8 + ldr r1, [sp, #0x2c] + movs r4, #0 + ldrsh r0, [r1, r4] + ldr r5, [sp, #0x30] + movs r4, #0 + ldrsb r4, [r5, r4] + adds r1, r0, r4 + cmp r3, r1 + bgt _08008250 + adds r0, r2, #0 + adds r0, #8 + cmp r0, r1 + bge _0800825E + cmp r3, r1 + blt _080082DA +_08008250: + ldr r2, [sp, #0x34] + movs r0, #0 + ldrsb r0, [r2, r0] + subs r0, r0, r4 + adds r0, r1, r0 + cmp r0, r3 + blt _080082DA +_0800825E: + lsls r1, r7, #0x10 + asrs r4, r1, #0x10 + adds r3, r4, #0 + subs r3, #0x10 + ldr r5, [sp, #0x48] + movs r2, #0 + ldrsh r0, [r5, r2] + mov r2, sb + adds r2, #0x2d + movs r5, #0 + ldrsb r5, [r2, r5] + adds r2, r0, r5 + adds r7, r1, #0 + cmp r3, r2 + bgt _08008284 + cmp r4, r2 + bge _08008292 + cmp r3, r2 + blt _080082DA +_08008284: + ldr r4, [sp, #0x44] + movs r0, #0 + ldrsb r0, [r4, r0] + subs r0, r0, r5 + adds r0, r2, r0 + cmp r0, r3 + blt _080082DA +_08008292: + mov r5, sb + ldrb r1, [r5, #0xa] + ldr r3, _0800845C @ =gPlayerCharacterIdleAnims + ldr r2, _08008460 @ =gMultiplayerCharacters + mov r0, sb + adds r0, #0x56 + ldrb r0, [r0] + adds r0, r0, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + adds r0, r0, r3 + ldrb r0, [r0] + subs r1, r1, r0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + cmp r1, #0x13 + beq _080082BC + cmp r1, #0x15 + bne _080082CA +_080082BC: + mov r0, sb + adds r0, #0x54 + ldrh r1, [r0] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + bne _080082DA +_080082CA: + mov r1, sl + lsls r0, r1, #0x10 + asrs r0, r0, #0x10 + asrs r1, r7, #0x10 + bl CreateCollectRingEffect + movs r0, #0xfe + strb r0, [r6] +_080082DA: + adds r6, #2 +_080082DC: + ldrb r1, [r6] + adds r0, r1, #0 + cmp r0, #0xff + bne _0800820A +_080082E4: + ldr r2, [sp, #0x4c] + lsls r0, r2, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + ldr r3, [sp, #0x2c] + movs r4, #0 + ldrsh r0, [r3, r4] + ldr r5, [sp, #0x34] + movs r1, #0 + ldrsb r1, [r5, r1] + adds r0, r0, r1 + subs r0, #8 + asrs r0, r0, #8 + cmp r8, r0 + bgt _0800830A + ldr r0, [sp, #0xc] + cmp r8, r0 + bhs _0800830A + b _080081A2 +_0800830A: + ldr r1, [sp, #0x50] + lsls r0, r1, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + ldr r2, [sp, #0x48] + movs r3, #0 + ldrsh r0, [r2, r3] + ldr r4, [sp, #0x44] + movs r1, #0 + ldrsb r1, [r4, r1] + adds r0, r0, r1 + subs r0, #0x10 + asrs r0, r0, #8 + ldr r5, [sp, #8] + cmp r5, r0 + bgt _08008332 + ldr r0, [sp, #0x10] + cmp r5, r0 + bhs _08008332 + b _08008160 +_08008332: + ldr r1, [sp, #0x40] + lsls r0, r1, #0x18 + lsrs r2, r0, #0x18 + cmp r2, #3 + bhi _0800833E + b _080080EA +_0800833E: + ldr r2, _08008464 @ =gCamera + ldrh r0, [r2, #2] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + ldr r0, _08008468 @ =gPlayer + adds r0, #0x26 + ldrb r1, [r0] + movs r0, #8 + ands r0, r1 + cmp r0, #0 + bne _0800835C + b _080085A4 +_0800835C: + ldr r0, _0800846C @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08008366 + b _080085A4 +_08008366: + ldr r2, [sp, #8] + lsls r1, r2, #8 + ldr r3, _08008464 @ =gCamera + movs r4, #2 + ldrsh r0, [r3, r4] + adds r0, #0xa0 + cmp r1, r0 + blt _08008378 + b Task_RingsMgrMain__return +_08008378: + ldr r5, [sp, #0x10] + cmp r2, r5 + blo _08008380 + b Task_RingsMgrMain__return +_08008380: + ldr r1, _08008464 @ =gCamera + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + ldr r2, _08008464 @ =gCamera + movs r3, #0 + ldrsh r0, [r2, r3] + adds r0, #0xf0 + cmp r1, r0 + blt _0800839E + b _08008564 +_0800839E: + ldr r4, [sp, #0xc] + ldr r5, [sp, #8] + adds r2, r4, #0 + muls r2, r5, r2 + mov r0, r8 + lsls r1, r0, #2 + lsls r0, r2, #2 + ldr r3, [sp, #0x14] + adds r0, r0, r3 + adds r1, r1, r0 + ldr r0, [r1] + str r2, [sp, #0x3c] + cmp r8, r4 + blo _080083BC + b _08008564 +_080083BC: + cmp r0, #0 + bne _080083C2 + b _08008534 +_080083C2: + subs r0, #8 + ldr r4, [sp, #0x14] + adds r6, r4, r0 + ldrb r1, [r6] + adds r0, r1, #0 + cmp r0, #0xff + bne _080083D2 + b _08008534 +_080083D2: + ldr r5, _08008464 @ =gCamera + mov sb, r5 +_080083D6: + cmp r1, #0xfe + beq _08008458 + ldrb r2, [r6] + lsls r2, r2, #3 + mov r1, r8 + lsls r0, r1, #8 + adds r2, r2, r0 + lsls r2, r2, #0x10 + ldrb r0, [r6, #1] + lsls r0, r0, #3 + ldr r3, [sp, #8] + lsls r1, r3, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 + lsrs r4, r2, #0x10 + mov sl, r4 + asrs r2, r2, #0x10 + ldr r5, _08008464 @ =gCamera + movs r1, #0 + ldrsh r0, [r5, r1] + subs r0, r2, r0 + adds r0, #8 + movs r1, #0x80 + lsls r1, r1, #1 + cmp r0, r1 + bhi _08008458 + lsls r1, r7, #0x10 + asrs r4, r1, #0x10 + movs r3, #2 + ldrsh r0, [r5, r3] + subs r0, r4, r0 + adds r7, r1, #0 + cmp r0, #0 + blt _08008458 + subs r0, #0x10 + cmp r0, #0xa0 + bgt _08008458 + adds r1, r2, #0 + subs r1, #0x40 + ldr r5, _08008468 @ =gPlayer + ldr r0, [r5] + asrs r3, r0, #8 + cmp r1, r3 + bgt _08008470 + adds r0, r2, #0 + adds r0, #0x40 + cmp r0, r3 + blt _08008470 + adds r1, r4, #0 + subs r1, #0x48 + ldr r0, [r5, #4] + asrs r3, r0, #8 + cmp r1, r3 + bgt _08008470 + adds r0, r4, #0 + adds r0, #0x38 + cmp r0, r3 + blt _08008470 + adds r0, r2, #0 + adds r1, r4, #0 + bl CreateMagneticRing + movs r0, #0xfe + strb r0, [r6] +_08008458: + adds r6, #2 + b _0800852A + .align 2, 0 +_0800845C: .4byte gPlayerCharacterIdleAnims +_08008460: .4byte gMultiplayerCharacters +_08008464: .4byte gCamera +_08008468: .4byte gPlayer +_0800846C: .4byte gGameMode +_08008470: + adds r6, #2 + ldr r2, [sp, #0x18] + adds r2, #0x23 + ldr r4, [sp, #0x1c] + cmp r4, #0 + beq _08008482 + ldrb r0, [r2] + cmp r0, #0xff + bne _080084A6 +_08008482: + movs r0, #0xff + strb r0, [r2] + mov r5, sb + ldrh r1, [r5] + mov r2, sl + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + subs r0, r0, r1 + ldr r3, [sp, #0x18] + strh r0, [r3, #0x16] + ldrh r1, [r5, #2] + asrs r0, r7, #0x10 + subs r0, r0, r1 + strh r0, [r3, #0x18] + ldr r0, [sp, #0x18] + bl DisplaySprite + b _08008520 +_080084A6: + ldrb r1, [r2] + lsls r1, r1, #3 + ldr r0, _0800858C @ =gOamMallocBuffer + adds r5, r1, r0 + ldr r4, [sp, #0x18] + ldrh r0, [r4, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r4, r0, #0 + ldr r0, _08008590 @ =iwram_end + ldr r0, [r0] + cmp r0, r4 + bne _080084CC + b Task_RingsMgrMain__return +_080084CC: + ldr r1, _08008594 @ =0x040000D4 + str r5, [r1] + str r4, [r1, #4] + ldr r0, _08008598 @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldrh r3, [r4, #2] + movs r5, #0xfe + lsls r5, r5, #8 + adds r0, r5, #0 + ands r3, r0 + strh r3, [r4, #2] + ldrh r2, [r4] + movs r1, #0xff + lsls r1, r1, #8 + adds r0, r1, #0 + ands r2, r0 + strh r2, [r4] + mov r5, sb + ldrh r1, [r5, #2] + asrs r0, r7, #0x10 + subs r0, r0, r1 + ldr r5, [sp, #0x20] + ldrh r1, [r5, #0xa] + subs r0, r0, r1 + movs r1, #0xff + ands r0, r1 + adds r2, r2, r0 + strh r2, [r4] + mov r0, sb + ldrh r1, [r0] + mov r2, sl + lsls r0, r2, #0x10 + asrs r0, r0, #0x10 + subs r0, r0, r1 + ldrh r1, [r5, #8] + subs r0, r0, r1 + ldr r5, _0800859C @ =0x000001FF + adds r1, r5, #0 + ands r0, r1 + adds r3, r3, r0 + strh r3, [r4, #2] +_08008520: + ldr r0, [sp, #0x1c] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #0x1c] +_0800852A: + ldrb r1, [r6] + adds r0, r1, #0 + cmp r0, #0xff + beq _08008534 + b _080083D6 +_08008534: + mov r0, r8 + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + ldr r2, _080085A0 @ =gCamera + movs r3, #0 + ldrsh r0, [r2, r3] + adds r0, #0xf0 + cmp r1, r0 + bge _08008564 + mov r4, r8 + lsls r1, r4, #2 + ldr r5, [sp, #0x3c] + lsls r0, r5, #2 + ldr r2, [sp, #0x14] + adds r0, r0, r2 + adds r1, r1, r0 + ldr r0, [r1] + ldr r3, [sp, #0xc] + cmp r8, r3 + bhs _08008564 + b _080083BC +_08008564: + ldr r0, [sp, #8] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + lsls r1, r0, #8 + ldr r4, _080085A0 @ =gCamera + movs r5, #2 + ldrsh r0, [r4, r5] + adds r0, #0xa0 + cmp r1, r0 + blt _0800857E + b Task_RingsMgrMain__return +_0800857E: + ldr r0, [sp, #8] + ldr r1, [sp, #0x10] + cmp r0, r1 + bhs _08008588 + b _08008380 +_08008588: + b Task_RingsMgrMain__return + .align 2, 0 +_0800858C: .4byte gOamMallocBuffer +_08008590: .4byte iwram_end +_08008594: .4byte 0x040000D4 +_08008598: .4byte 0x80000003 +_0800859C: .4byte 0x000001FF +_080085A0: .4byte gCamera +_080085A4: + ldr r2, [sp, #8] + lsls r1, r2, #8 + ldr r3, _080085C8 @ =gCamera + movs r4, #2 + ldrsh r0, [r3, r4] + adds r0, #0xa0 + cmp r1, r0 + blt _080085B6 + b Task_RingsMgrMain__return +_080085B6: + ldr r5, [sp, #0x10] + cmp r2, r5 + blo _080085BE + b Task_RingsMgrMain__return +_080085BE: + ldr r1, _080085C8 @ =gCamera + ldrh r0, [r1] + lsls r0, r0, #0x10 + asrs r0, r0, #0x18 + b _08008706 + .align 2, 0 +_080085C8: .4byte gCamera +_080085CC: + ldr r5, [sp, #0xc] + ldr r1, [sp, #8] + adds r0, r5, #0 + muls r0, r1, r0 + mov r2, r8 + lsls r1, r2, #2 + lsls r0, r0, #2 + ldr r3, [sp, #0x14] + adds r0, r0, r3 + adds r1, r1, r0 + ldr r0, [r1] + cmp r0, #0 + bne _080085E8 + b _08008702 +_080085E8: + subs r0, #8 + adds r6, r3, r0 + b _080086F8 +_080085EE: + cmp r1, #0xfe + beq _0800863A + ldrb r2, [r6] + lsls r2, r2, #3 + mov r4, r8 + lsls r0, r4, #8 + adds r2, r2, r0 + ldrb r0, [r6, #1] + lsls r0, r0, #3 + ldr r5, [sp, #8] + lsls r1, r5, #8 + adds r0, r0, r1 + lsls r0, r0, #0x10 + lsrs r7, r0, #0x10 + lsls r2, r2, #0x10 + asrs r2, r2, #0x10 + mov sb, r2 + ldr r1, _08008640 @ =gCamera + movs r2, #0 + ldrsh r0, [r1, r2] + mov r3, sb + subs r0, r3, r0 + adds r0, #8 + movs r1, #0x80 + lsls r1, r1, #1 + cmp r0, r1 + bhi _0800863A + lsls r0, r7, #0x10 + asrs r7, r0, #0x10 + ldr r4, _08008640 @ =gCamera + movs r5, #2 + ldrsh r0, [r4, r5] + subs r0, r7, r0 + cmp r0, #0 + blt _0800863A + subs r0, #0x10 + cmp r0, #0xa0 + ble _08008644 +_0800863A: + adds r6, #2 + b _080086F8 + .align 2, 0 +_08008640: .4byte gCamera +_08008644: + adds r6, #2 + ldr r2, [sp, #0x18] + adds r2, #0x23 + ldr r0, [sp, #0x1c] + cmp r0, #0 + beq _08008658 + adds r1, r2, #0 + ldrb r0, [r1] + cmp r0, #0xff + bne _0800867C +_08008658: + movs r0, #0xff + strb r0, [r2] + ldr r1, _08008678 @ =gCamera + ldrh r0, [r1] + mov r2, sb + subs r0, r2, r0 + ldr r3, [sp, #0x18] + strh r0, [r3, #0x16] + ldrh r0, [r1, #2] + subs r0, r7, r0 + strh r0, [r3, #0x18] + ldr r0, [sp, #0x18] + bl DisplaySprite + b _080086EE + .align 2, 0 +_08008678: .4byte gCamera +_0800867C: + ldrb r1, [r1] + lsls r1, r1, #3 + ldr r0, _08008754 @ =gOamMallocBuffer + adds r5, r1, r0 + ldr r4, [sp, #0x18] + ldrh r0, [r4, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r4, r0, #0 + ldr r0, _08008758 @ =iwram_end + ldr r0, [r0] + cmp r0, r4 + beq Task_RingsMgrMain__return + ldr r1, _0800875C @ =0x040000D4 + str r5, [r1] + str r4, [r1, #4] + ldr r0, _08008760 @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldrh r3, [r4, #2] + movs r5, #0xfe + lsls r5, r5, #8 + adds r0, r5, #0 + ands r3, r0 + strh r3, [r4, #2] + ldrh r2, [r4] + movs r1, #0xff + lsls r1, r1, #8 + adds r0, r1, #0 + ands r2, r0 + strh r2, [r4] + ldr r5, _08008764 @ =gCamera + ldrh r0, [r5, #2] + subs r0, r7, r0 + ldr r5, [sp, #0x20] + ldrh r1, [r5, #0xa] + subs r0, r0, r1 + movs r1, #0xff + ands r0, r1 + adds r2, r2, r0 + strh r2, [r4] + ldr r1, _08008764 @ =gCamera + ldrh r0, [r1] + mov r2, sb + subs r0, r2, r0 + ldrh r1, [r5, #8] + subs r0, r0, r1 + ldr r5, _08008768 @ =0x000001FF + adds r1, r5, #0 + ands r0, r1 + adds r3, r3, r0 + strh r3, [r4, #2] +_080086EE: + ldr r0, [sp, #0x1c] + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + str r0, [sp, #0x1c] +_080086F8: + ldrb r1, [r6] + adds r0, r1, #0 + cmp r0, #0xff + beq _08008702 + b _080085EE +_08008702: + mov r0, r8 + adds r0, #1 +_08008706: + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + lsls r1, r0, #8 + ldr r2, _08008764 @ =gCamera + movs r3, #0 + ldrsh r0, [r2, r3] + adds r0, #0xf0 + cmp r1, r0 + bge _08008722 + ldr r4, [sp, #0xc] + cmp r8, r4 + bhs _08008722 + b _080085CC +_08008722: + ldr r0, [sp, #8] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #8] + lsls r1, r0, #8 + ldr r5, _08008764 @ =gCamera + movs r2, #2 + ldrsh r0, [r5, r2] + adds r0, #0xa0 + cmp r1, r0 + bge Task_RingsMgrMain__return + ldr r3, [sp, #8] + ldr r4, [sp, #0x10] + cmp r3, r4 + bhs Task_RingsMgrMain__return + b _080085BE +Task_RingsMgrMain__return: + add sp, #0x54 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08008754: .4byte gOamMallocBuffer +_08008758: .4byte iwram_end +_0800875C: .4byte 0x040000D4 +_08008760: .4byte 0x80000003 +_08008764: .4byte gCamera +_08008768: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/backgrounds/StageBgUpdate_Zone2_Interior.inc b/sa1/asm/non_matching/game/stage/backgrounds/StageBgUpdate_Zone2_Interior.inc new file mode 100644 index 0000000000..86178f1b60 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/backgrounds/StageBgUpdate_Zone2_Interior.inc @@ -0,0 +1,229 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + mov ip, r0 @ ip = x + mov r8, r1 @ r8 = y + ldr r1, _0803EA08 @ =gCamera + ldr r2, _0803EA0C @ =gBgScrollRegs + asrs r7, r0, #2 + movs r0, #0xff + ands r7, r0 + strh r7, [r1, #0x28] + strh r7, [r2, #0xc] @ r7 = xSub + mov r4, r8 + asrs r3, r4, #2 + ands r3, r0 + strh r3, [r1, #0x2a] + strh r3, [r2, #0xe] @ r3 = ySub + ldr r1, _0803EA10 @ =gFlags + ldr r0, [r1] + movs r2, #4 + orrs r0, r2 + str r0, [r1] + ldr r1, _0803EA14 @ =gHBlankCopyTarget + ldr r0, _0803EA18 @ =0x0400001C + str r0, [r1] + ldr r0, _0803EA1C @ =gHBlankCopySize + strb r2, [r0] + ldr r0, _0803EA20 @ =gBgOffsetsHBlankPrimary + ldr r5, [r0] + movs r6, #0x3f + ands r6, r3 @ r6 = ySub & 0x3F + movs r4, #0 + lsls r3, r6, #0x10 + orrs r3, r7 + rsbs r2, r6, #0 @ r2 = -r6 + adds r1, r2, #0 + adds r1, #0x40 @ r1 = -r6 + 64 + cmp r2, r1 + bge _0803E8DA + adds r0, r1, #0 +_0803E8CE: + cmp r2, #0 + blt _0803E8D4 + stm r5!, {r3} +_0803E8D4: + adds r2, #1 + cmp r2, r0 + blt _0803E8CE +_0803E8DA: + adds r4, #0x40 + subs r0, r6, r4 + lsls r3, r0, #0x10 + orrs r3, r7 @ r3 = ((r6 - r4) << 16) | xSub); + rsbs r1, r6, #0 + adds r0, r4, #0 + adds r0, #0x40 + adds r0, r1, r0 @ r0 = -r6 + 64 + mov sb, r1 @ sb = -r6 + mov r1, ip + asrs r1, r1, #1 + mov sl, r1 @ sl = x >> 1 + mov r1, r8 + asrs r1, r1, #1 + str r1, [sp, #8] @ sp08 = y >> 1 + mov r1, ip + lsls r1, r1, #1 + str r1, [sp] @ sp00 = x << 1 + mov r1, r8 + lsls r1, r1, #1 + str r1, [sp, #4] @ sp04 = y << 1 + cmp r2, r0 + bge _0803E916 + adds r1, r0, #0 + subs r2, r1, r2 +_0803E90C: + stm r5!, {r3} + subs r2, #1 + cmp r2, #0 + bne _0803E90C + adds r2, r1, #0 +_0803E916: + adds r4, #0x40 + subs r0, r6, r4 + lsls r3, r0, #0x10 + orrs r3, r7 + adds r0, r4, #0 + adds r0, #0x40 + add r0, sb + cmp r2, r0 + bge _0803E934 +_0803E928: + cmp r2, #0x9f + bgt _0803E92E + stm r5!, {r3} +_0803E92E: + adds r2, #1 + cmp r2, r0 + blt _0803E928 +_0803E934: + adds r4, #0x40 + subs r0, r6, r4 + lsls r3, r0, #0x10 + orrs r3, r7 + adds r0, r4, #0 + adds r0, #0x40 + add r0, sb + cmp r2, r0 + bge _0803E952 +_0803E946: + cmp r2, #0x9f + bgt _0803E94C + stm r5!, {r3} +_0803E94C: + adds r2, #1 + cmp r2, r0 + blt _0803E946 +_0803E952: + movs r3, #0 + mov sb, sl @ sb = sl == x >> 1 + movs r4, #0xff + mov ip, r4 + ldr r0, [sp, #8] + mov r8, r0 @ r8 = (y >> 1) + ldr r0, _0803EA20 @ =gBgOffsetsHBlankPrimary + ldr r5, [r0] +_0803E962: + lsls r0, r3, #5 + mov r1, sb + adds r7, r1, r0 + mov r4, ip + ands r7, r4 @ r7 = ((i << 5) + (x >> 1)) & 0xFF + lsls r0, r3, #6 + add r0, r8 + ands r0, r4 @ r0 = ((i << 6) + (y >> 1)) & 0xFF + rsbs r1, r0, #0 @ r1 = -r0 + ands r1, r4 + adds r2, r1, #0 + subs r2, #0x10 + adds r6, r3, #1 + cmp r2, r1 + bge _0803E9A0 + movs r0, #0x50 + subs r0, r0, r1 + lsls r4, r0, #0x10 + lsls r0, r2, #2 + adds r0, r0, r5 +_0803E98A: + cmp r2, #0 + blt _0803E998 + cmp r2, #0x9f + bgt _0803E998 + adds r3, r4, #0 + orrs r3, r7 + str r3, [r0] +_0803E998: + adds r0, #4 + adds r2, #1 + cmp r2, r1 + blt _0803E98A +_0803E9A0: + adds r3, r6, #0 + cmp r6, #2 + ble _0803E962 + ldr r0, [sp] + movs r1, #3 + bl __divsi3 + lsls r5, r6, #5 + adds r7, r0, r5 + movs r4, #0xff + ands r7, r4 @ r7 = ((i << 5) + Div((x << 1), 3)) & 0xFF; + ldr r0, [sp, #4] + movs r1, #3 + bl __divsi3 + lsls r1, r6, #6 + adds r0, r0, r1 + adds r0, r0, r5 + ands r0, r4 + rsbs r1, r0, #0 + ands r1, r4 + ldr r0, _0803EA20 @ =gBgOffsetsHBlankPrimary + ldr r5, [r0] + adds r2, r1, #0 + subs r2, #0x18 + cmp r2, r1 + bge _0803E9F6 + movs r0, #0x68 + subs r0, r0, r1 + lsls r4, r0, #0x10 + lsls r0, r2, #2 + adds r0, r0, r5 +_0803E9E0: + cmp r2, #0 + blt _0803E9EE + cmp r2, #0x9f + bgt _0803E9EE + adds r3, r4, #0 + orrs r3, r7 + str r3, [r0] +_0803E9EE: + adds r0, #4 + adds r2, #1 + cmp r2, r1 + blt _0803E9E0 +_0803E9F6: + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0803EA08: .4byte gCamera +_0803EA0C: .4byte gBgScrollRegs +_0803EA10: .4byte gFlags +_0803EA14: .4byte gHBlankCopyTarget +_0803EA18: .4byte 0x0400001C +_0803EA1C: .4byte gHBlankCopySize +_0803EA20: .4byte gBgOffsetsHBlankPrimary + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/intro__LoadStageIntroGraphics.inc b/sa1/asm/non_matching/game/stage/intro__LoadStageIntroGraphics.inc new file mode 100644 index 0000000000..d46957c1f5 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/intro__LoadStageIntroGraphics.inc @@ -0,0 +1,793 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x44 + str r0, [sp, #0x30] @ sp30 = param0 + ldr r1, _08054E10 @ =gCurrentLevel + ldrb r0, [r1] + movs r2, #1 + ands r2, r0 + str r2, [sp, #0x34] @ sp34 = act = (gCurrentLevel % 2u) + ldr r1, _08054E14 @ =gSelectedCharacter + ldrb r0, [r1] + adds r0, #6 + add r4, sp, #0x2c + strb r0, [r4] + mov r2, sp + adds r2, #0x2b + str r2, [sp, #0x38] @ sp38 = &sp00.unk2B + movs r0, #6 + strb r0, [r2] @ sp00.unk2B = 6; + ldr r7, _08054E18 @ =gUiGraphics + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r7 + ldr r0, [r0] + str r0, [sp, #0x14] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08054E1C @ =gUiGraphics + 0x4 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + movs r0, #0x80 + lsls r0, r0, #3 + str r0, [sp, #0x18] + movs r2, #0x20 + str r2, [sp, #0x24] + mov r0, sp + adds r0, #0x28 + str r0, [sp, #0x3c] @ sp3C = &sp00.unk28 + movs r1, #0xf + strb r1, [r0] + ldr r2, [sp, #0x30] @ r2 = sp30 = param0 + ldr r0, [r2, #4] + str r0, [sp, #0xc] + mov r0, sp + adds r0, #0x2a + str r0, [sp, #0x40] @ sp40 = &sp00.unk2A + movs r1, #0xd + strb r1, [r0] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r2, _08054E20 @ =gUiGraphics + 0x8 + adds r0, r0, r2 + ldr r0, [r0] + str r0, [sp, #4] + mov r2, sp + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08054E24 @ =gUiGraphics + 0xC + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #8] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08054E28 @ =gUiGraphics + 0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08054E2C @ =gUiGraphics + 0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + ldrb r1, [r4] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _08054E30 @ =gUiGraphics + 0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + mov r0, sp + bl sub_80528AC + movs r0, #0xa + strb r0, [r4] + movs r0, #7 + ldr r2, [sp, #0x38] @ r2 = sp38 = &sp00.unk2B + strb r0, [r2] + movs r1, #0x8c + lsls r1, r1, #1 + adds r0, r7, r1 + ldr r2, _08054E14 @ =gSelectedCharacter + movs r1, #0 + ldrsb r1, [r2, r1] + lsls r1, r1, #0xb + ldr r0, [r0] + adds r0, r0, r1 + str r0, [sp, #0x14] + movs r1, #0x8e + lsls r1, r1, #1 + adds r0, r7, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + movs r0, #0x80 + lsls r0, r0, #4 + str r0, [sp, #0x18] + movs r2, #0x20 + str r2, [sp, #0x24] + movs r1, #0xf + ldr r0, [sp, #0x3c] + strb r1, [r0] + ldr r0, _08054E34 @ =0x06010800 + str r0, [sp, #0xc] + movs r0, #0xd + ldr r2, [sp, #0x40] + strb r0, [r2] + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r7, r1 + ldr r0, [r0] + str r0, [sp, #4] + mov r1, sp + movs r2, #0x92 + lsls r2, r2, #1 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #8] + adds r2, #4 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #9] + adds r2, #4 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #0xa] + adds r2, #4 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r0, #0x10 + strb r0, [r4] + movs r0, #8 + ldr r1, [sp, #0x38] @ r1 = sp38 = &sp00.unk2B + strb r0, [r1] + movs r2, #0xe0 + lsls r2, r2, #1 + adds r0, r7, r2 + ldr r0, [r0] + str r0, [sp, #0x14] + movs r1, #0xe2 + lsls r1, r1, #1 + adds r0, r7, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + adds r2, #0x40 + mov sb, r2 + str r2, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r2, #6 + ldr r1, [sp, #0x3c] + strb r2, [r1] + ldr r1, [sp, #0x30] @ r1 = sp30 = param0 + ldr r0, [r1] + str r0, [sp, #0xc] + movs r0, #0xd + ldr r2, [sp, #0x40] + strb r0, [r2] + movs r1, #0xe4 + lsls r1, r1, #1 + adds r0, r7, r1 + ldr r0, [r0] + str r0, [sp, #4] + mov r1, sp + movs r2, #0xe6 + lsls r2, r2, #1 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #8] + adds r2, #4 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #9] + adds r2, #4 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #0xa] + adds r2, #4 + adds r0, r7, r2 + ldr r0, [r0] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + ldr r1, _08054E10 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r1, r0] + mov sl, r4 + cmp r0, #0xd + ble _08054C3A + b _08054E5C +_08054C3A: + movs r2, #0x11 + strb r2, [r4] + movs r0, #9 + movs r1, #0x2b + add r1, sp + strb r0, [r1] + ldr r2, _08054E38 @ =gUiGraphics + ((17 * 0x1C) + 0) + ldr r0, [r2] + movs r1, #0x92 + lsls r1, r1, #4 + adds r0, r0, r1 + str r0, [sp, #0x14] + ldr r2, _08054E3C @ =gUiGraphics + ((17 * 0x1C) + 0x4) + ldr r0, [r2] + str r0, [sp, #0x20] + ldr r1, _08054E10 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r1, r0] + ldr r2, _08054E40 @ =gUnknown_08688378 + adds r0, r0, r2 + ldrb r0, [r0] + movs r4, #0xc + subs r0, r4, r0 + lsls r0, r0, #5 + str r0, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r1, #6 + add r2, sp, #0x28 + strb r1, [r2] + ldr r1, [sp, #0x30] @ r1 = sp30 = param0 + ldr r0, [r1, #8] + str r0, [sp, #0xc] + movs r2, #0xd + movs r0, #0x2a + add r0, sp + strb r2, [r0] + ldr r1, _08054E44 @ =gUiGraphics + ((17 * 0x1C) + 0x8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _08054E48 @ =gUiGraphics + ((17 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r2, _08054E4C @ =gUiGraphics + ((17 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r2, _08054E50 @ =gUiGraphics + ((17 * 0x1C) + 0x14) + ldr r0, [r2] + strb r0, [r1, #0xa] + ldr r2, _08054E54 @ =gUiGraphics + ((17 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r1, #0x11 + mov r0, sl + strb r1, [r0] + movs r2, #9 + movs r0, #0x2b + add r0, sp + strb r2, [r0] + ldr r1, _08054E38 @ =gUiGraphics + ((17 * 0x1C) + 0) + ldr r0, [r1] + movs r7, #0x80 + lsls r7, r7, #1 + adds r0, r0, r7 + str r0, [sp, #0x14] + ldr r2, _08054E3C @ =gUiGraphics + ((17 * 0x1C) + 0x4) + ldr r0, [r2] + str r0, [sp, #0x20] + movs r0, #0x80 + str r0, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r1, #6 + add r2, sp, #0x28 + strb r1, [r2] + ldr r1, [sp, #0x30] @ r1 = sp30 = param0 + ldr r0, [r1, #8] + movs r2, #0xc0 + lsls r2, r2, #1 + adds r0, r0, r2 + str r0, [sp, #0xc] + movs r0, #0xd + movs r1, #0x2a + add r1, sp + strb r0, [r1] + ldr r2, _08054E44 @ =gUiGraphics + ((17 * 0x1C) + 0x8) + ldr r0, [r2] + str r0, [sp, #4] + mov r1, sp + ldr r2, _08054E48 @ =gUiGraphics + ((17 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r2, _08054E4C @ =gUiGraphics + ((17 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r2, _08054E50 @ =gUiGraphics + ((17 * 0x1C) + 0x14) + ldr r0, [r2] + strb r0, [r1, #0xa] + ldr r2, _08054E54 @ =gUiGraphics + ((17 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r1, #0x11 + mov r0, sl + strb r1, [r0] + movs r2, #9 + movs r0, #0x2b + add r0, sp + strb r2, [r0] + ldr r1, _08054E58 @ =gUnknown_08688386 + ldr r2, _08054E10 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r2, r0] + adds r0, r0, r1 + ldrb r1, [r0] + lsls r1, r1, #5 + ldr r2, _08054E38 @ =gUiGraphics + ((17 * 0x1C) + 0) + ldr r0, [r2] + adds r0, r0, r1 + str r0, [sp, #0x14] + ldr r1, _08054E3C @ =gUiGraphics + ((17 * 0x1C) + 0x4) + ldr r0, [r1] + str r0, [sp, #0x20] + ldr r2, _08054E10 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r2, r0] + ldr r1, _08054E40 @ =gUnknown_08688378 + adds r0, r0, r1 + ldrb r0, [r0] + lsls r0, r0, #5 + str r0, [sp, #0x18] + movs r2, #0x20 + str r2, [sp, #0x24] + movs r0, #6 + add r1, sp, #0x28 + strb r0, [r1] + ldr r2, _08054E10 @ =gCurrentLevel + movs r0, #0 + ldrsb r0, [r2, r0] + ldr r1, _08054E40 @ =gUnknown_08688378 + adds r0, r0, r1 + ldrb r0, [r0] + subs r4, r4, r0 + lsls r4, r4, #5 + ldr r2, [sp, #0x30] @ r2 = sp30 = param0 + ldr r0, [r2, #8] + adds r0, r0, r4 + str r0, [sp, #0xc] + movs r0, #0xd + movs r1, #0x2a + add r1, sp + strb r0, [r1] + ldr r2, _08054E44 @ =gUiGraphics + ((17 * 0x1C) + 0x8) + ldr r0, [r2] + str r0, [sp, #4] + mov r1, sp + ldr r2, _08054E48 @ =gUiGraphics + ((17 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r2, _08054E4C @ =gUiGraphics + ((17 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r2, _08054E50 @ =gUiGraphics + ((17 * 0x1C) + 0x14) + ldr r0, [r2] + strb r0, [r1, #0xa] + ldr r2, _08054E54 @ =gUiGraphics + ((17 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r1, #0x11 + mov r0, sl + strb r1, [r0] + movs r2, #9 + movs r0, #0x2b + add r0, sp + strb r2, [r0] + ldr r1, _08054E38 @ =gUiGraphics + ((17 * 0x1C) + 0) + ldr r0, [r1] + adds r0, r0, r7 + str r0, [sp, #0x14] + ldr r2, _08054E3C @ =gUiGraphics + ((17 * 0x1C) + 0x4) + ldr r0, [r2] + str r0, [sp, #0x20] + movs r0, #0x20 + str r0, [sp, #0x18] + str r0, [sp, #0x24] + movs r1, #6 + add r2, sp, #0x28 + strb r1, [r2] + ldr r1, [sp, #0x30] @ r1 = sp30 = param0 + ldr r0, [r1, #8] + str r0, [sp, #0xc] + movs r2, #0xd + movs r0, #0x2a + add r0, sp + strb r2, [r0] + ldr r1, _08054E44 @ =gUiGraphics + ((17 * 0x1C) + 0x8) + ldr r0, [r1] + str r0, [sp, #4] + mov r1, sp + ldr r2, _08054E48 @ =gUiGraphics + ((17 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r2, _08054E4C @ =gUiGraphics + ((17 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r2, _08054E50 @ =gUiGraphics + ((17 * 0x1C) + 0x14) + ldr r0, [r2] + strb r0, [r1, #0xa] + ldr r2, _08054E54 @ =gUiGraphics + ((17 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r1, #4 + str r1, [sp, #4] + mov r0, sp + movs r2, #1 + strb r2, [r0, #8] + strb r2, [r0, #9] + strb r1, [r0, #0xa] + strb r2, [r0, #0xb] + movs r1, #9 + bl sub_80535C8 + b _08054F14 + .align 2, 0 +_08054E10: .4byte gCurrentLevel +_08054E14: .4byte gSelectedCharacter +_08054E18: .4byte gUiGraphics +_08054E1C: .4byte gUiGraphics + 0x4 +_08054E20: .4byte gUiGraphics + 0x8 +_08054E24: .4byte gUiGraphics + 0xC +_08054E28: .4byte gUiGraphics + 0x10 +_08054E2C: .4byte gUiGraphics + 0x14 +_08054E30: .4byte gUiGraphics + 0x18 +_08054E34: .4byte 0x06010800 +_08054E38: .4byte gUiGraphics + ((17 * 0x1C) + 0) +_08054E3C: .4byte gUiGraphics + ((17 * 0x1C) + 0x4) +_08054E40: .4byte gUnknown_08688378 +_08054E44: .4byte gUiGraphics + ((17 * 0x1C) + 0x8) +_08054E48: .4byte gUiGraphics + ((17 * 0x1C) + 0xC) +_08054E4C: .4byte gUiGraphics + ((17 * 0x1C) + 0x10) +_08054E50: .4byte gUiGraphics + ((17 * 0x1C) + 0x14) +_08054E54: .4byte gUiGraphics + ((17 * 0x1C) + 0x18) +_08054E58: .4byte gUnknown_08688386 +_08054E5C: + movs r0, #0x12 + mov r1, sl + strb r0, [r1] + movs r0, #9 + movs r2, #0x2b + add r2, sp + strb r0, [r2] + ldrb r1, [r1] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r7 + ldr r2, _080550C4 @ =gCurrentLevel + movs r1, #0 + ldrsb r1, [r2, r1] + subs r1, #0xe + lsls r1, r1, #9 + ldr r0, [r0] + adds r0, r0, r1 + str r0, [sp, #0x14] + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080550C8 @ =gUiGraphics + 0x4 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + mov r2, sb + str r2, [sp, #0x18] + movs r0, #0x20 + str r0, [sp, #0x24] + movs r1, #6 + add r2, sp, #0x28 + strb r1, [r2] + ldr r1, [sp, #0x30] @ r1 = sp30 = param0 + ldr r0, [r1, #8] + str r0, [sp, #0xc] + movs r2, #0xd + movs r0, #0x2a + add r0, sp + strb r2, [r0] + mov r2, sl + ldrb r1, [r2] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080550CC @ =gUiGraphics + 0x8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #4] + mov r2, sp + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080550D0 @ =gUiGraphics + 0xC + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #8] + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080550D4 @ =gUiGraphics + 0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080550D8 @ =gUiGraphics + 0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080550DC @ =gUiGraphics + 0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + mov r0, sp + bl sub_80528AC +_08054F14: + movs r0, #0xf + mov r2, sl + strb r0, [r2] + movs r1, #0xa + movs r2, #0x2b + add r2, sp + strb r1, [r2] + ldr r7, _080550E0 @ =gUiGraphics + movs r0, #0xd2 + lsls r0, r0, #1 + adds r6, r7, r0 + ldr r0, [r6] + movs r4, #0x80 + lsls r4, r4, #1 + adds r0, r0, r4 + ldr r2, [sp, #0x34] + lsls r1, r2, #7 + adds r0, r0, r1 + str r0, [sp, #0x14] + movs r0, #0x80 + str r0, [sp, #0x18] + ldr r1, [sp, #0x30] @ r1 = sp30 = param0 + ldr r0, [r1, #0x10] + adds r0, r0, r4 + str r0, [sp, #0xc] + movs r0, #9 + movs r2, #0x2a + add r2, sp + strb r0, [r2] + movs r0, #0xd6 + lsls r0, r0, #1 + adds r5, r7, r0 + ldr r0, [r5] + str r0, [sp, #4] + mov r1, sp + ldr r2, _080550E4 @ =gUiGraphics + ((15 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r2, _080550E8 @ =gUiGraphics + ((15 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r2, _080550EC @ =gUiGraphics + ((15 * 0x1C) + 0x14) + ldr r0, [r2] + strb r0, [r1, #0xa] + ldr r2, _080550F0 @ =gUiGraphics + ((15 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + movs r1, #0xf + mov r0, sl + strb r1, [r0] + movs r2, #0xa + movs r0, #0x2b + add r0, sp + strb r2, [r0] + ldr r0, [r6] + str r0, [sp, #0x14] + movs r1, #0xd4 + lsls r1, r1, #1 + adds r0, r7, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + str r4, [sp, #0x18] + ldr r2, [sp, #0x30] @ r2 = sp30 = param0 + ldr r0, [r2, #0x10] + str r0, [sp, #0xc] + movs r0, #0x20 + mov r8, r0 + str r0, [sp, #0x24] + movs r1, #6 + mov sb, r1 + mov r2, sb + add r0, sp, #0x28 + strb r2, [r0] + movs r1, #0xd + movs r2, #0x2a + add r2, sp + strb r1, [r2] + ldr r0, [r5] + str r0, [sp, #4] + mov r1, sp + ldr r2, _080550E4 @ =gUiGraphics + ((15 * 0x1C) + 0xC) + ldr r0, [r2] + strb r0, [r1, #8] + ldr r2, _080550E8 @ =gUiGraphics + ((15 * 0x1C) + 0x10) + ldr r0, [r2] + strb r0, [r1, #9] + ldr r2, _080550EC @ =gUiGraphics + ((15 * 0x1C) + 0x14) + ldr r0, [r2] + strb r0, [r1, #0xa] + ldr r2, _080550F0 @ =gUiGraphics + ((15 * 0x1C) + 0x18) + ldr r0, [r2] + strb r0, [r1, #0xb] + mov r0, sp + bl sub_80528AC + ldr r1, _080550F4 @ =gUnknown_08688398 + ldr r0, _080550C4 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + adds r0, r0, r1 + ldrb r0, [r0] + adds r0, #0x13 + mov r1, sl + strb r0, [r1] + movs r4, #2 + movs r2, #0x2b + add r2, sp + strb r4, [r2] + ldrb r1, [r1] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r7 + ldr r0, [r0] + str r0, [sp, #0x14] + movs r1, #0x86 + lsls r1, r1, #2 + adds r0, r7, r1 + ldr r0, [r0] + str r0, [sp, #0x20] + movs r0, #0xe0 + lsls r0, r0, #3 + str r0, [sp, #0x18] + mov r2, r8 + str r2, [sp, #0x24] + mov r0, sb + add r1, sp, #0x28 + strb r0, [r1] + ldr r2, [sp, #0x30] @ r2 = sp30 = param0 + ldr r0, [r2, #0xc] + str r0, [sp, #0xc] + movs r0, #0xd + movs r1, #0x2a + add r1, sp + strb r0, [r1] + mov r2, sl + ldrb r1, [r2] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #8 + adds r0, r0, r1 + ldr r0, [r0] + str r0, [sp, #4] + mov r2, sp + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0xc + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #8] + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x10 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #9] + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x14 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xa] + mov r0, sl + ldrb r1, [r0] + lsls r0, r1, #3 + subs r0, r0, r1 + lsls r0, r0, #2 + adds r1, r7, #0 + adds r1, #0x18 + adds r0, r0, r1 + ldr r0, [r0] + strb r0, [r2, #0xb] + mov r0, sp + bl sub_80528AC + movs r0, #8 + str r0, [sp, #4] + mov r0, sp + strb r4, [r0, #8] + mov r1, sp + movs r0, #1 + strb r0, [r1, #9] + movs r0, #4 + strb r0, [r1, #0xa] + mov r0, sp + strb r4, [r0, #0xb] + movs r1, #2 + bl sub_80535C8 + add sp, #0x44 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080550C4: .4byte gCurrentLevel +_080550C8: .4byte gUiGraphics + 0x4 +_080550CC: .4byte gUiGraphics + 0x8 +_080550D0: .4byte gUiGraphics + 0xC +_080550D4: .4byte gUiGraphics + 0x10 +_080550D8: .4byte gUiGraphics + 0x14 +_080550DC: .4byte gUiGraphics + 0x18 +_080550E0: .4byte gUiGraphics +_080550E4: .4byte gUiGraphics + ((15 * 0x1C) + 0xC) +_080550E8: .4byte gUiGraphics + ((15 * 0x1C) + 0x10) +_080550EC: .4byte gUiGraphics + ((15 * 0x1C) + 0x14) +_080550F0: .4byte gUiGraphics + ((15 * 0x1C) + 0x18) +_080550F4: .4byte gUnknown_08688398 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/results__CreateStageResults.inc b/sa1/asm/non_matching/game/stage/results__CreateStageResults.inc new file mode 100644 index 0000000000..84a40fc777 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/results__CreateStageResults.inc @@ -0,0 +1,589 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x20 + adds r4, r1, #0 + movs r1, #0x64 + adds r2, r0, #0 + muls r2, r1, r2 + mov sl, r2 + ldr r3, _08057434 @ =gLoadedSaveGame + movs r6, #0x85 + lsls r6, r6, #3 + adds r2, r3, r6 + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + ldr r1, [r2] + adds r1, r1, r0 + str r1, [r2] + ldr r2, _08057438 @ =gStageFlags + ldrh r0, [r2] + movs r1, #0x20 + orrs r0, r1 + strh r0, [r2] + ldr r0, _0805743C @ =gCurrentLevel + movs r1, #0 + ldrsb r1, [r0, r1] + adds r5, r0, #0 + cmp r1, #0xa + bne _08057420 + ldr r2, _08057440 @ =gCamera + ldrh r1, [r2, #0x26] + movs r6, #0x80 + lsls r6, r6, #6 + adds r0, r6, #0 + orrs r0, r1 + strh r0, [r2, #0x26] +_08057420: + ldr r0, _08057444 @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bne _08057448 + adds r0, r4, #0 + bl CreateTimeAttackResult + movs r0, #0 + b _08057844 + .align 2, 0 +_08057434: .4byte gLoadedSaveGame +_08057438: .4byte gStageFlags +_0805743C: .4byte gCurrentLevel +_08057440: .4byte gCamera +_08057444: .4byte gGameMode +_08057448: + movs r2, #0 + ldr r0, _080574E0 @ =gSelectedCharacter + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0805748E + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #0xb + ble _0805748E + ldrb r0, [r3, #0x1d] + cmp r0, #0x7f + bne _0805748E + ldrh r1, [r3, #8] + cmp r1, #0xc + bls _0805748E + ldrh r0, [r3, #0xa] + cmp r0, #0xc + bls _0805748E + ldrh r0, [r3, #0xc] + cmp r0, #0xc + bls _0805748E + ldrh r0, [r3, #0xe] + cmp r0, #0xc + bls _0805748E + cmp r1, #0xf + bne _0805748C + ldr r0, _080574E4 @ =gMultiplayerCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xc + beq _0805748E +_0805748C: + movs r2, #1 +_0805748E: + str r2, [sp, #0x1c] + cmp r2, #0 + bne _080574B6 + ldr r0, _080574E8 @ =gPlayer + adds r0, #0x59 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + adds r1, r3, #0 + adds r1, #8 + adds r1, r0, r1 + ldrh r2, [r1] + movs r0, #0 + ldrsb r0, [r5, r0] + adds r0, #1 + cmp r0, r2 + bge _080574B4 + adds r0, r2, #0 +_080574B4: + strh r0, [r1] +_080574B6: + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #0xa + bne _080574CE + ldr r0, _080574EC @ =gCheckpointTime + ldr r0, [r0] + ldr r1, _080574F0 @ =0x00002A30 + ldr r2, _080574F4 @ =0xFFFFD5D0 + adds r4, r0, r2 + cmp r0, r1 + bhi _080574CE + movs r4, #1 +_080574CE: + ldrb r1, [r5] + movs r0, #0 + ldrsb r0, [r5, r0] + cmp r0, #0xd + bne _080574F8 + movs r0, #0x24 @ MUS_EXTRA_CLEAR + bl m4aSongNumStart + b _0805751A + .align 2, 0 +_080574E0: .4byte gSelectedCharacter +_080574E4: .4byte gMultiplayerCurrentLevel +_080574E8: .4byte gPlayer +_080574EC: .4byte gCheckpointTime +_080574F0: .4byte 0x00002A30 +_080574F4: .4byte 0xFFFFD5D0 +_080574F8: + cmp r0, #0xc + bne _08057504 + movs r0, #0x23 @ MUS_FINAL_CLEAR + bl m4aSongNumStart + b _0805751A +_08057504: + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08057514 + movs r0, #0x22 @ MUS_BOSS_CLEAR + bl m4aSongNumStart + b _0805751A +_08057514: + movs r0, #0x21 @ MUS_ACT_CLEAR + bl m4aSongNumStart +_0805751A: + ldr r0, _0805752C @ =gMusicManagerState + movs r1, #0xff + strb r1, [r0] + ldr r0, _08057530 @ =0x0000545F + cmp r4, r0 + bls _08057534 + movs r6, #0 + b _080575BA + .align 2, 0 +_0805752C: .4byte gMusicManagerState +_08057530: .4byte 0x0000545F +_08057534: + ldr r0, _08057540 @ =0x0000464F + cmp r4, r0 + bls _08057544 + movs r6, #0xfa + lsls r6, r6, #1 + b _080575BA + .align 2, 0 +_08057540: .4byte 0x0000464F +_08057544: + ldr r0, _08057550 @ =0x0000383F + cmp r4, r0 + bls _08057554 + movs r6, #0xfa + lsls r6, r6, #2 + b _080575BA + .align 2, 0 +_08057550: .4byte 0x0000383F +_08057554: + ldr r0, _08057560 @ =0x00002A2F + cmp r4, r0 + bls _08057564 + movs r6, #0xfa + lsls r6, r6, #3 + b _080575BA + .align 2, 0 +_08057560: .4byte 0x00002A2F +_08057564: + ldr r0, _08057570 @ =0x00001C1F + cmp r4, r0 + bls _08057578 + ldr r6, _08057574 @ =0x00000BB8 + b _080575BA + .align 2, 0 +_08057570: .4byte 0x00001C1F +_08057574: .4byte 0x00000BB8 +_08057578: + ldr r0, _08057584 @ =0x00001517 + cmp r4, r0 + bls _08057588 + movs r6, #0xfa + lsls r6, r6, #4 + b _080575BA + .align 2, 0 +_08057584: .4byte 0x00001517 +_08057588: + ldr r0, _08057594 @ =0x00000E0F + cmp r4, r0 + bls _0805759C + ldr r6, _08057598 @ =0x00001388 + b _080575BA + .align 2, 0 +_08057594: .4byte 0x00000E0F +_08057598: .4byte 0x00001388 +_0805759C: + ldr r0, _080575A8 @ =0x00000BB7 + cmp r4, r0 + bls _080575B0 + ldr r6, _080575AC @ =0x00002710 + b _080575BA + .align 2, 0 +_080575A8: .4byte 0x00000BB7 +_080575AC: .4byte 0x00002710 +_080575B0: + ldr r0, _080575C4 @ =0x00000707 + ldr r6, _080575C8 @ =0x00013880 + cmp r4, r0 + bls _080575BA + ldr r6, _080575CC @ =0x0000C350 +_080575BA: + cmp sl, r6 + bls _080575D0 + mov r0, sl + b _080575D2 + .align 2, 0 +_080575C4: .4byte 0x00000707 +_080575C8: .4byte 0x00013880 +_080575CC: .4byte 0x0000C350 +_080575D0: + adds r0, r6, #0 +_080575D2: + movs r1, #0x64 + bl Div + adds r0, #0x4b + str r0, [sp, #0x10] + mov r0, sl + str r0, [sp, #0x18] + str r6, [sp, #0x14] + bl UiGfxStackInit + ldr r0, _08057854 @ =Task_8057B74 + ldr r1, _08057858 @ =0x00002120 + mov r8, r1 + movs r4, #0 + str r4, [sp] + movs r1, #0x34 + mov r2, r8 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0xc] + ldrh r0, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r7, r0, r2 + strh r4, [r7, #0x1c] + ldr r0, [sp, #0x10] + str r0, [r7, #0x30] + strh r4, [r7, #0x1e] + movs r0, #0xf0 + strh r0, [r7, #0xa] + movs r0, #0x7e + strh r0, [r7, #0xc] + movs r0, #8 + strh r0, [r7, #0xe] + strh r0, [r7, #0x10] + movs r1, #6 + strh r1, [r7, #0x12] + movs r5, #1 + strb r5, [r7, #0x16] + movs r0, #0xa + strh r0, [r7, #8] + ldr r0, _0805785C @ =Task_8057C3C + str r4, [sp] + movs r1, #0x34 + mov r2, r8 + movs r3, #0 + bl TaskCreate + str r0, [sp, #4] + ldrh r0, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r7, r0, r2 + strh r4, [r7, #0x1c] + ldr r0, [sp, #0x10] + str r0, [r7, #0x30] + strh r4, [r7, #0x1e] + movs r1, #0x80 + lsls r1, r1, #1 + mov sb, r1 + mov r2, sb + strh r2, [r7, #0xa] + movs r0, #0x80 + strh r0, [r7, #0xc] + movs r0, #9 + strh r0, [r7, #0xe] + movs r0, #2 + strh r0, [r7, #0x10] + movs r0, #0xc + strh r0, [r7, #0x12] + strb r5, [r7, #0x16] + strh r4, [r7, #8] + ldr r0, _08057860 @ =Task_8057D30 + str r4, [sp] + movs r1, #0x34 + mov r2, r8 + movs r3, #0 + bl TaskCreate + str r0, [sp, #8] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + ldr r2, [sp, #0x18] + str r2, [r7, #0x18] + strh r4, [r7, #0x1c] + ldr r0, [sp, #0x10] + str r0, [r7, #0x30] + strh r4, [r7, #0x1e] + mov r2, sb + strh r2, [r7, #0xa] + movs r0, #0x66 + strh r0, [r7, #0xc] + movs r0, #0x10 + strh r0, [r7, #0xe] + movs r0, #4 + strh r0, [r7, #0x10] + movs r0, #6 + strh r0, [r7, #0x12] + strb r5, [r7, #0x16] + strh r4, [r7, #8] + movs r5, #0xf + ldr r2, _08057864 @ =0x03000020 + adds r2, r2, r1 + mov r8, r2 +_080576A8: + mov r0, sl + movs r1, #0xa + bl Div + adds r4, r0, #0 + lsls r2, r5, #0x10 + asrs r2, r2, #0x10 + adds r3, r7, #0 + adds r3, #0x20 + adds r3, r3, r2 + lsls r0, r4, #3 + lsls r1, r4, #1 + adds r0, r0, r1 + mov r1, sl + subs r0, r1, r0 + adds r0, #0x20 + strb r0, [r3] + mov sl, r4 + subs r2, #1 + lsls r2, r2, #0x10 + lsrs r5, r2, #0x10 + cmp r2, #0 + bge _080576A8 + movs r5, #0xb + ldr r7, _08057868 @ =Task_805803C + mov r3, r8 + movs r4, #0x2b +_080576DE: + lsls r0, r5, #0x10 + asrs r2, r0, #0x10 + adds r1, r3, r2 + ldrb r0, [r1] + cmp r0, #0x20 + bne _080576F8 + strb r4, [r1] + adds r0, r2, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xe + ble _080576DE +_080576F8: + movs r5, #0 + mov r3, r8 + ldr r4, _0805786C @ =gUnknown_08688404 +_080576FE: + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + adds r2, r3, r0 + adds r1, r0, r4 + ldrb r1, [r1] + strb r1, [r2] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xa + ble _080576FE + ldr r2, _08057858 @ =0x00002120 + movs r4, #0 + str r4, [sp] + adds r0, r7, #0 + movs r1, #0x34 + movs r3, #0 + bl TaskCreate + mov sb, r0 + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + str r6, [r7, #0x18] + strh r4, [r7, #0x1c] + ldr r2, [sp, #0x10] + str r2, [r7, #0x30] + strh r4, [r7, #0x1e] + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r7, #0xa] + movs r0, #0x50 + strh r0, [r7, #0xc] + movs r0, #0x10 + strh r0, [r7, #0xe] + movs r0, #4 + strh r0, [r7, #0x10] + movs r0, #6 + strh r0, [r7, #0x12] + movs r0, #1 + strb r0, [r7, #0x16] + strh r4, [r7, #8] + movs r5, #0xf + ldr r0, _08057864 @ =0x03000020 + adds r0, r0, r1 + mov r8, r0 +_0805775E: + adds r0, r6, #0 + movs r1, #0xa + bl Div + adds r4, r0, #0 + lsls r2, r5, #0x10 + asrs r2, r2, #0x10 + adds r3, r7, #0 + adds r3, #0x20 + adds r3, r3, r2 + lsls r0, r4, #3 + lsls r1, r4, #1 + adds r0, r0, r1 + subs r0, r6, r0 + adds r0, #0x20 + strb r0, [r3] + adds r6, r4, #0 + subs r2, #1 + lsls r2, r2, #0x10 + lsrs r5, r2, #0x10 + cmp r2, #0 + bge _0805775E + movs r5, #0xb + ldr r7, _08057870 @ =Task_8057888 + ldr r6, _08057874 @ =TaskDestructor_8058344 + mov r3, r8 + movs r4, #0x2b +_08057794: + lsls r0, r5, #0x10 + asrs r2, r0, #0x10 + adds r1, r3, r2 + ldrb r0, [r1] + cmp r0, #0x20 + bne _080577AE + strb r4, [r1] + adds r0, r2, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xe + ble _08057794 +_080577AE: + movs r5, #0 + mov r3, r8 + ldr r4, _08057878 @ =gUnknown_0868840F +_080577B4: + lsls r0, r5, #0x10 + asrs r0, r0, #0x10 + adds r2, r3, r0 + adds r1, r0, r4 + ldrb r1, [r1] + strb r1, [r2] + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r5, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xa + ble _080577B4 + movs r2, #0x84 + lsls r2, r2, #6 + str r6, [sp] + adds r0, r7, #0 + movs r1, #0x38 + movs r3, #0 + bl TaskCreate + ldrh r5, [r0, #6] + movs r4, #0xc0 + lsls r4, r4, #0x12 + adds r4, r5, r4 + movs r1, #0 + strh r1, [r4, #0x24] + ldr r2, [sp, #0x18] + str r2, [r4, #0x2c] + ldr r6, [sp, #0x14] + str r6, [r4, #0x30] + movs r0, #0x2d + strh r0, [r4, #0x34] + ldr r0, [sp, #0x10] + str r0, [r4, #0x28] + ldr r2, [sp, #0xc] + str r2, [r4, #0x14] + mov r6, sb + str r6, [r4, #0x18] + ldr r0, [sp, #4] + str r0, [r4, #0x10] + ldr r2, [sp, #8] + str r2, [r4, #0xc] + strh r1, [r4] + strh r1, [r4, #2] + movs r2, #1 + movs r0, #1 + strh r0, [r4, #4] + strh r1, [r4, #6] + adds r0, #0xff + strh r0, [r4, #8] + strb r2, [r4, #0xa] + ldr r6, _0805787C @ =0x03000036 + adds r0, r5, r6 + mov r1, sp + ldrb r1, [r1, #0x1c] + strb r1, [r0] + movs r0, #0x80 + bl VramMalloc + str r0, [r4, #0x1c] + movs r0, #0x1e + bl VramMalloc + str r0, [r4, #0x20] + ldr r2, _08057880 @ =0x0300001C + adds r5, r5, r2 + adds r0, r5, #0 + bl sub_8056FE4 + ldr r6, [sp, #0x10] + ldr r1, _08057884 @ =0x0000011D + adds r0, r6, r1 +_08057844: + add sp, #0x20 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_08057854: .4byte Task_8057B74 +_08057858: .4byte 0x00002120 +_0805785C: .4byte Task_8057C3C +_08057860: .4byte Task_8057D30 +_08057864: .4byte 0x03000020 +_08057868: .4byte Task_805803C +_0805786C: .4byte gUnknown_08688404 +_08057870: .4byte Task_8057888 +_08057874: .4byte TaskDestructor_8058344 +_08057878: .4byte gUnknown_0868840F +_0805787C: .4byte 0x03000036 +_08057880: .4byte 0x0300001C +_08057884: .4byte 0x0000011D + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_FlippedGravity.inc b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_FlippedGravity.inc new file mode 100644 index 0000000000..95096aa10b --- /dev/null +++ b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_FlippedGravity.inc @@ -0,0 +1,641 @@ +.include "constants/gba_constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x24 + ldr r0, _08041644 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r1, r0 + str r0, [sp, #4] + ldr r0, _08041648 @ =0x03000030 + adds r5, r1, r0 + ldr r2, [sp, #4] + mov sl, r2 + ldr r3, _0804164C @ =0x03000330 + adds r0, r1, r3 + ldr r0, [r0] + str r0, [sp, #8] + ldr r4, _08041650 @ =0x03000334 + adds r1, r1, r4 + ldrh r1, [r1] + str r1, [sp, #0xc] + movs r0, #0 + str r0, [sp, #0x10] + mov r0, sl + bl UpdateSpriteAnimation + movs r1, #0 + str r1, [sp, #0x14] +_08041634: + ldrh r0, [r5, #0xc] + cmp r0, #0 + bne _08041654 + adds r5, #0x10 + ldr r2, [sp, #0x14] + adds r2, #1 + mov sb, r2 + b _08041AAE + .align 2, 0 +_08041644: .4byte gCurTask +_08041648: .4byte 0x03000030 +_0804164C: .4byte 0x03000330 +_08041650: .4byte 0x03000334 +_08041654: + movs r3, #8 + ldrsh r0, [r5, r3] + ldr r1, [r5] + adds r1, r1, r0 + str r1, [r5] + movs r4, #0xa + ldrsh r2, [r5, r4] + ldr r0, [r5, #4] + adds r0, r0, r2 + str r0, [r5, #4] + asrs r7, r1, #8 + asrs r0, r0, #8 + mov r8, r0 + ldr r1, _08041814 @ =gCamera + movs r2, #0 + ldrsh r0, [r1, r2] + subs r0, r7, r0 + str r0, [sp, #0x18] + movs r3, #2 + ldrsh r0, [r1, r3] + mov r4, r8 + subs r4, r4, r0 + str r4, [sp, #0x1c] + ldr r6, _08041818 @ =gPlayer + ldr r2, [r6, #0x64] + ldrh r0, [r5, #0xc] + mov ip, r0 + ldr r1, [sp, #0xc] + cmp ip, r1 + bgt _08041706 + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _080416A4 + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + bne _08041706 +_080416A4: + cmp r1, #0x28 + beq _08041706 + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08041706 + adds r4, r2, #0 + adds r4, #0x38 + adds r2, r7, #0 + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _080416D4 + adds r0, r7, #0 + adds r0, #8 + cmp r0, r1 + bge _080416E0 + cmp r2, r1 + blt _08041706 +_080416D4: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041706 +_080416E0: + mov r2, r8 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _080416FA + cmp r8, r1 + bge _080417A4 + cmp r2, r1 + blt _08041706 +_080416FA: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + bge _080417A4 +_08041706: + ldr r0, _0804181C @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + beq _08041714 + b _08041838 +_08041714: + ldr r6, _08041820 @ =gPartner + ldr r2, [r6, #0x64] + adds r1, r5, #0 + adds r1, #0x10 + str r1, [sp, #0x20] + ldr r3, [sp, #0x14] + adds r3, #1 + mov sb, r3 + ldr r4, [sp, #0xc] + cmp ip, r4 + ble _0804172C + b _08041958 +_0804172C: + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _08041742 + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + beq _08041742 + b _08041838 +_08041742: + cmp r1, #0x28 + beq _08041838 + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08041838 + adds r4, r2, #0 + adds r4, #0x38 + adds r2, r7, #0 + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08041772 + adds r0, r7, #0 + adds r0, #8 + cmp r0, r1 + bge _0804177E + cmp r2, r1 + blt _08041838 +_08041772: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041838 +_0804177E: + mov r2, r8 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08041798 + cmp r8, r1 + bge _080417A4 + cmp r2, r1 + blt _08041838 +_08041798: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041838 +_080417A4: + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + mov r4, r8 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + ldr r1, _08041824 @ =gRingCount + ldrh r6, [r1] + adds r0, r6, #1 + strh r0, [r1] + ldr r0, _08041828 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + beq _080417F2 + ldrh r0, [r1] + movs r1, #0x64 + bl Div + adds r4, r0, #0 + adds r0, r6, #0 + movs r1, #0x64 + bl Div + cmp r4, r0 + beq _080417F2 + ldr r0, _0804182C @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _080417F2 + ldr r1, _08041830 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldr r1, _08041834 @ =gMusicManagerState + movs r0, #0x10 + strb r0, [r1, #3] +_080417F2: + ldr r0, _0804182C @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08041806 + ldr r1, _08041824 @ =gRingCount + ldrh r0, [r1] + cmp r0, #0xff + bls _08041806 + movs r0, #0xff + strh r0, [r1] +_08041806: + movs r0, #0 + strh r0, [r5, #0xc] + adds r5, #0x10 + ldr r0, [sp, #0x14] + adds r0, #1 + mov sb, r0 + b _08041AAE + .align 2, 0 +_08041814: .4byte gCamera +_08041818: .4byte gPlayer +_0804181C: .4byte gNumSingleplayerCharacters +_08041820: .4byte gPartner +_08041824: .4byte gRingCount +_08041828: .4byte gCurrentLevel +_0804182C: .4byte gGameMode +_08041830: .4byte gNumLives +_08041834: .4byte gMusicManagerState +_08041838: + adds r1, r5, #0 + adds r1, #0x10 + str r1, [sp, #0x20] + ldr r2, [sp, #0x14] + adds r2, #1 + mov sb, r2 + ldr r3, [sp, #0xc] + cmp ip, r3 + ble _0804184C + b _08041958 +_0804184C: + movs r6, #0 +_0804184E: + ldr r0, _08041880 @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r6, r0 + beq _0804194C + ldr r1, _08041884 @ =gMultiplayerPlayerTasks + lsls r0, r6, #2 + adds r0, r0, r1 + ldr r0, [r0] + cmp r0, #0 + beq _0804194C + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r4 + mov ip, r0 + ldr r0, _08041888 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _0804188C + mov r1, ip + ldrb r0, [r1, #0xa] + b _080418AE + .align 2, 0 +_08041880: .4byte 0x04000128 +_08041884: .4byte gMultiplayerPlayerTasks +_08041888: .4byte gGameMode +_0804188C: + mov r2, ip + ldrb r1, [r2, #0xa] + ldr r2, _08041940 @ =gMultiplayerCharacters + ldr r3, _08041944 @ =0x03000056 + adds r0, r4, r3 + ldrb r0, [r0] + adds r0, r0, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + ldr r4, _08041948 @ =gPlayerCharacterIdleAnims + adds r0, r0, r4 + ldrb r0, [r0] + subs r1, r1, r0 + lsls r1, r1, #0x18 + lsrs r0, r1, #0x18 +_080418AE: + cmp r0, #0x13 + beq _080418B6 + cmp r0, #0x15 + bne _080418C4 +_080418B6: + mov r0, ip + adds r0, #0x54 + ldrh r1, [r0] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + bne _0804194C +_080418C4: + adds r3, r7, #0 + subs r3, #8 + mov r0, ip + adds r0, #0x50 + movs r2, #0 + ldrsh r1, [r0, r2] + subs r0, #0x24 + movs r2, #0 + ldrsb r2, [r0, r2] + adds r1, r1, r2 + cmp r3, r1 + bgt _080418E8 + adds r0, r7, #0 + adds r0, #8 + cmp r0, r1 + bge _080418FA + cmp r3, r1 + blt _0804194C +_080418E8: + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r1, r0 + cmp r0, r3 + blt _0804194C +_080418FA: + mov r3, r8 + subs r3, #0x10 + mov r0, ip + adds r0, #0x52 + movs r4, #0 + ldrsh r0, [r0, r4] + mov r1, ip + adds r1, #0x2d + movs r2, #0 + ldrsb r2, [r1, r2] + adds r1, r0, r2 + cmp r3, r1 + bgt _0804191C + cmp r8, r1 + bge _0804192E + cmp r3, r1 + blt _0804194C +_0804191C: + mov r0, ip + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r1, r0 + cmp r0, r3 + blt _0804194C +_0804192E: + lsls r0, r7, #0x10 + mov r2, r8 + lsls r1, r2, #0x10 + asrs r0, r0, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + movs r0, #0 + b _08041AAA + .align 2, 0 +_08041940: .4byte gMultiplayerCharacters +_08041944: .4byte 0x03000056 +_08041948: .4byte gPlayerCharacterIdleAnims +_0804194C: + adds r0, r6, #1 + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 + cmp r6, #3 + bhi _08041958 + b _0804184E +_08041958: + movs r3, #0xa + ldrsh r0, [r5, r3] + cmp r0, #0 + bge _0804198C + mov r0, r8 + subs r0, #0x10 + movs r4, #0xe + ldrsh r2, [r5, r4] + ldr r1, _08041A2C @ =sa2__sub_801EC3C + str r1, [sp] + adds r1, r7, #0 + movs r3, #8 + rsbs r3, r3, #0 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _0804198C + lsls r1, r0, #8 + ldr r0, [r5, #4] + subs r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_0804198C: + ldr r1, [sp, #4] + ldr r2, _08041A30 @ =0x00000336 + adds r0, r1, r2 + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080419CC + movs r3, #0xa + ldrsh r0, [r5, r3] + cmp r0, #0 + ble _080419CC + movs r4, #0xe + ldrsh r2, [r5, r4] + ldr r0, _08041A2C @ =sa2__sub_801EC3C + str r0, [sp] + mov r0, r8 + adds r1, r7, #0 + movs r3, #8 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _080419CC + lsls r1, r0, #8 + ldr r0, [r5, #4] + adds r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_080419CC: + ldrh r0, [r5, #0xa] + ldr r1, [sp, #8] + subs r0, r0, r1 + strh r0, [r5, #0xa] + ldr r0, [sp, #0x18] + adds r0, #7 + cmp r0, #0xfe + bhi _08041AA6 + movs r0, #8 + rsbs r0, r0, #0 + ldr r2, [sp, #0x1c] + cmp r2, r0 + ble _08041AA6 + cmp r2, #0xa7 + bgt _08041AA6 + ldrh r0, [r5, #0xc] + cmp r0, #0x1f + bhi _080419FC + ldr r0, _08041A34 @ =gStageTime + ldr r0, [r0] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _08041AA6 +_080419FC: + mov r2, sl + adds r2, #0x23 + ldr r3, [sp, #0x10] + cmp r3, #0 + beq _08041A0E + adds r1, r2, #0 + ldrb r0, [r1] + cmp r0, #0xff + bne _08041A38 +_08041A0E: + movs r0, #0xff + strb r0, [r2] + mov r4, sp + ldrh r0, [r4, #0x18] + mov r4, sl + strh r0, [r4, #0x16] + mov r1, sp + ldrh r1, [r1, #0x1c] + strh r1, [r4, #0x18] + mov r0, sl + bl DisplaySprite + movs r2, #1 + str r2, [sp, #0x10] + b _08041AA6 + .align 2, 0 +_08041A2C: .4byte sa2__sub_801EC3C +_08041A30: .4byte 0x00000336 +_08041A34: .4byte gStageTime +_08041A38: + ldrb r0, [r1] + lsls r0, r0, #3 + ldr r1, _08041AC8 @ =gOamMallocBuffer + adds r4, r0, r1 + mov r3, sl + ldrh r0, [r3, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r3, r0, #0 + ldr r0, _08041ACC @ =iwram_end + ldr r0, [r0] + cmp r0, r3 + beq _08041AA6 + ldr r1, _08041AD0 @ =0x040000D4 + str r4, [r1] + str r3, [r1, #4] + ldr r0, _08041AD4 @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldrh r2, [r3] + movs r4, #0xff + lsls r4, r4, #8 + adds r0, r4, #0 + ands r2, r0 + strh r2, [r3] + mov r1, sl + ldr r0, [r1, #0xc] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0x1c] + subs r0, r4, r0 + movs r1, #0xff + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3] + ldrh r2, [r3, #2] + movs r1, #0xfe + lsls r1, r1, #8 + adds r0, r1, #0 + ands r2, r0 + strh r2, [r3, #2] + mov r4, sl + ldr r0, [r4, #0xc] + ldrh r0, [r0, #8] + ldr r1, [sp, #0x18] + subs r0, r1, r0 + ldr r4, _08041AD8 @ =0x000001FF + adds r1, r4, #0 + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3, #2] +_08041AA6: + ldrh r0, [r5, #0xc] + subs r0, #1 +_08041AAA: + strh r0, [r5, #0xc] + ldr r5, [sp, #0x20] +_08041AAE: + mov r0, sb + str r0, [sp, #0x14] + cmp r0, #0x2f + bgt _08041AB8 + b _08041634 +_08041AB8: + add sp, #0x24 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08041AC8: .4byte gOamMallocBuffer +_08041ACC: .4byte iwram_end +_08041AD0: .4byte 0x040000D4 +_08041AD4: .4byte 0x80000003 +_08041AD8: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_NormalGravity.inc b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_NormalGravity.inc new file mode 100644 index 0000000000..89d15e24b7 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_NormalGravity.inc @@ -0,0 +1,642 @@ +.include "constants/gba_constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x28 + ldr r0, _08041B2C @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r1, r0 + str r0, [sp, #4] + ldr r0, _08041B30 @ =0x03000030 + adds r5, r1, r0 + ldr r2, [sp, #4] + str r2, [sp, #8] + ldr r3, _08041B34 @ =0x03000330 + adds r0, r1, r3 + ldr r0, [r0] + str r0, [sp, #0xc] + ldr r4, _08041B38 @ =0x03000334 + adds r1, r1, r4 + ldrh r1, [r1] + str r1, [sp, #0x10] + movs r0, #0 + str r0, [sp, #0x14] + adds r0, r2, #0 + bl UpdateSpriteAnimation + movs r1, #0 + str r1, [sp, #0x18] +_08041B1C: + ldrh r0, [r5, #0xc] + cmp r0, #0 + bne _08041B3C + adds r5, #0x10 + ldr r2, [sp, #0x18] + adds r2, #1 + mov sl, r2 + b _08041F9A + .align 2, 0 +_08041B2C: .4byte gCurTask +_08041B30: .4byte 0x03000030 +_08041B34: .4byte 0x03000330 +_08041B38: .4byte 0x03000334 +_08041B3C: + movs r3, #8 + ldrsh r0, [r5, r3] + ldr r1, [r5] + adds r1, r1, r0 + str r1, [r5] + movs r4, #0xa + ldrsh r2, [r5, r4] + ldr r0, [r5, #4] + adds r0, r0, r2 + str r0, [r5, #4] + asrs r1, r1, #8 + mov sb, r1 + mov r8, sb + asrs r7, r0, #8 + ldr r1, _08041D00 @ =gCamera + movs r2, #0 + ldrsh r0, [r1, r2] + mov r3, sb + subs r3, r3, r0 + str r3, [sp, #0x1c] + movs r4, #2 + ldrsh r0, [r1, r4] + subs r0, r7, r0 + str r0, [sp, #0x20] + ldr r6, _08041D04 @ =gPlayer + ldr r2, [r6, #0x64] + ldrh r0, [r5, #0xc] + mov ip, r0 + ldr r1, [sp, #0x10] + cmp ip, r1 + bgt _08041BF0 + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _08041B8E + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + bne _08041BF0 +_08041B8E: + cmp r1, #0x28 + beq _08041BF0 + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08041BF0 + adds r4, r2, #0 + adds r4, #0x38 + mov r2, sb + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08041BBE + mov r0, sb + adds r0, #8 + cmp r0, r1 + bge _08041BCA + cmp r2, r1 + blt _08041BF0 +_08041BBE: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041BF0 +_08041BCA: + adds r2, r7, #0 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08041BE4 + cmp r7, r1 + bge _08041C8E + cmp r2, r1 + blt _08041BF0 +_08041BE4: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + bge _08041C8E +_08041BF0: + ldr r0, _08041D08 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + beq _08041BFE + b _08041D24 +_08041BFE: + ldr r6, _08041D0C @ =gPartner + ldr r2, [r6, #0x64] + adds r1, r5, #0 + adds r1, #0x10 + str r1, [sp, #0x24] + ldr r3, [sp, #0x18] + adds r3, #1 + mov sl, r3 + ldr r4, [sp, #0x10] + cmp ip, r4 + ble _08041C16 + b _08041E44 +_08041C16: + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _08041C2C + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + beq _08041C2C + b _08041D24 +_08041C2C: + cmp r1, #0x28 + beq _08041D24 + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08041D24 + adds r4, r2, #0 + adds r4, #0x38 + mov r2, r8 + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08041C5C + mov r0, r8 + adds r0, #8 + cmp r0, r1 + bge _08041C68 + cmp r2, r1 + blt _08041D24 +_08041C5C: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041D24 +_08041C68: + adds r2, r7, #0 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08041C82 + cmp r7, r1 + bge _08041C8E + cmp r2, r1 + blt _08041D24 +_08041C82: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041D24 +_08041C8E: + mov r4, r8 + lsls r0, r4, #0x10 + asrs r0, r0, #0x10 + lsls r1, r7, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + ldr r1, _08041D10 @ =gRingCount + ldrh r6, [r1] + adds r0, r6, #1 + strh r0, [r1] + ldr r0, _08041D14 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + beq _08041CDC + ldrh r0, [r1] + movs r1, #0x64 + bl Div + adds r4, r0, #0 + adds r0, r6, #0 + movs r1, #0x64 + bl Div + cmp r4, r0 + beq _08041CDC + ldr r0, _08041D18 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08041CDC + ldr r1, _08041D1C @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldr r1, _08041D20 @ =gMusicManagerState + movs r0, #0x10 + strb r0, [r1, #3] +_08041CDC: + ldr r0, _08041D18 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08041CF0 + ldr r1, _08041D10 @ =gRingCount + ldrh r0, [r1] + cmp r0, #0xff + bls _08041CF0 + movs r0, #0xff + strh r0, [r1] +_08041CF0: + movs r0, #0 + strh r0, [r5, #0xc] + adds r5, #0x10 + ldr r0, [sp, #0x18] + adds r0, #1 + mov sl, r0 + b _08041F9A + .align 2, 0 +_08041D00: .4byte gCamera +_08041D04: .4byte gPlayer +_08041D08: .4byte gNumSingleplayerCharacters +_08041D0C: .4byte gPartner +_08041D10: .4byte gRingCount +_08041D14: .4byte gCurrentLevel +_08041D18: .4byte gGameMode +_08041D1C: .4byte gNumLives +_08041D20: .4byte gMusicManagerState +_08041D24: + adds r1, r5, #0 + adds r1, #0x10 + str r1, [sp, #0x24] + ldr r2, [sp, #0x18] + adds r2, #1 + mov sl, r2 + ldr r3, [sp, #0x10] + cmp ip, r3 + ble _08041D38 + b _08041E44 +_08041D38: + movs r6, #0 +_08041D3A: + ldr r0, _08041D6C @ =0x04000128 + ldr r0, [r0] + lsls r0, r0, #0x1a + lsrs r0, r0, #0x1e + cmp r6, r0 + beq _08041E38 + ldr r1, _08041D70 @ =gMultiplayerPlayerTasks + lsls r0, r6, #2 + adds r0, r0, r1 + ldr r0, [r0] + cmp r0, #0 + beq _08041E38 + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r0, r4 + mov ip, r0 + ldr r0, _08041D74 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08041D78 + mov r1, ip + ldrb r0, [r1, #0xa] + b _08041D9A + .align 2, 0 +_08041D6C: .4byte 0x04000128 +_08041D70: .4byte gMultiplayerPlayerTasks +_08041D74: .4byte gGameMode +_08041D78: + mov r2, ip + ldrb r1, [r2, #0xa] + ldr r2, _08041E2C @ =gMultiplayerCharacters + ldr r3, _08041E30 @ =0x03000056 + adds r0, r4, r3 + ldrb r0, [r0] + adds r0, r0, r2 + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + lsls r0, r0, #1 + ldr r4, _08041E34 @ =gPlayerCharacterIdleAnims + adds r0, r0, r4 + ldrb r0, [r0] + subs r1, r1, r0 + lsls r1, r1, #0x18 + lsrs r0, r1, #0x18 +_08041D9A: + cmp r0, #0x13 + beq _08041DA2 + cmp r0, #0x15 + bne _08041DB0 +_08041DA2: + mov r0, ip + adds r0, #0x54 + ldrh r1, [r0] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + bne _08041E38 +_08041DB0: + mov r3, r8 + subs r3, #8 + mov r0, ip + adds r0, #0x50 + movs r2, #0 + ldrsh r1, [r0, r2] + subs r0, #0x24 + movs r2, #0 + ldrsb r2, [r0, r2] + adds r1, r1, r2 + cmp r3, r1 + bgt _08041DD4 + mov r0, r8 + adds r0, #8 + cmp r0, r1 + bge _08041DE6 + cmp r3, r1 + blt _08041E38 +_08041DD4: + mov r0, ip + adds r0, #0x2e + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r1, r0 + cmp r0, r3 + blt _08041E38 +_08041DE6: + adds r3, r7, #0 + subs r3, #0x10 + mov r0, ip + adds r0, #0x52 + movs r4, #0 + ldrsh r0, [r0, r4] + mov r1, ip + adds r1, #0x2d + movs r2, #0 + ldrsb r2, [r1, r2] + adds r1, r0, r2 + cmp r3, r1 + bgt _08041E08 + cmp r7, r1 + bge _08041E1A + cmp r3, r1 + blt _08041E38 +_08041E08: + mov r0, ip + adds r0, #0x2f + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + subs r0, r0, r2 + adds r0, r1, r0 + cmp r0, r3 + blt _08041E38 +_08041E1A: + mov r1, r8 + lsls r0, r1, #0x10 + lsls r1, r7, #0x10 + asrs r0, r0, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + movs r0, #0 + b _08041F96 + .align 2, 0 +_08041E2C: .4byte gMultiplayerCharacters +_08041E30: .4byte 0x03000056 +_08041E34: .4byte gPlayerCharacterIdleAnims +_08041E38: + adds r0, r6, #1 + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 + cmp r6, #3 + bhi _08041E44 + b _08041D3A +_08041E44: + movs r2, #0xa + ldrsh r0, [r5, r2] + cmp r0, #0 + ble _08041E74 + movs r3, #0xe + ldrsh r2, [r5, r3] + ldr r0, _08041F18 @ =sa2__sub_801EC3C + str r0, [sp] + adds r0, r7, #0 + mov r1, sb + movs r3, #8 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _08041E74 + lsls r1, r0, #8 + ldr r0, [r5, #4] + adds r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_08041E74: + ldr r4, [sp, #4] + ldr r1, _08041F1C @ =0x00000336 + adds r0, r4, r1 + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08041EB8 + movs r2, #0xa + ldrsh r0, [r5, r2] + cmp r0, #0 + bge _08041EB8 + adds r0, r7, #0 + subs r0, #0x10 + movs r3, #0xe + ldrsh r2, [r5, r3] + ldr r1, _08041F18 @ =sa2__sub_801EC3C + str r1, [sp] + mov r1, sb + movs r3, #8 + rsbs r3, r3, #0 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _08041EB8 + lsls r1, r0, #8 + ldr r0, [r5, #4] + subs r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_08041EB8: + ldrh r0, [r5, #0xa] + ldr r4, [sp, #0xc] + adds r0, r0, r4 + strh r0, [r5, #0xa] + ldr r0, [sp, #0x1c] + adds r0, #7 + cmp r0, #0xfe + bhi _08041F92 + movs r0, #8 + rsbs r0, r0, #0 + ldr r1, [sp, #0x20] + cmp r1, r0 + ble _08041F92 + cmp r1, #0xa7 + bgt _08041F92 + ldrh r0, [r5, #0xc] + cmp r0, #0x1f + bhi _08041EE8 + ldr r0, _08041F20 @ =gStageTime + ldr r0, [r0] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _08041F92 +_08041EE8: + ldr r2, [sp, #8] + adds r2, #0x23 + ldr r3, [sp, #0x14] + cmp r3, #0 + beq _08041EFA + adds r1, r2, #0 + ldrb r0, [r1] + cmp r0, #0xff + bne _08041F24 +_08041EFA: + movs r0, #0xff + strb r0, [r2] + mov r4, sp + ldrh r0, [r4, #0x1c] + ldr r4, [sp, #8] + strh r0, [r4, #0x16] + mov r1, sp + ldrh r1, [r1, #0x20] + strh r1, [r4, #0x18] + ldr r0, [sp, #8] + bl DisplaySprite + movs r2, #1 + str r2, [sp, #0x14] + b _08041F92 + .align 2, 0 +_08041F18: .4byte sa2__sub_801EC3C +_08041F1C: .4byte 0x00000336 +_08041F20: .4byte gStageTime +_08041F24: + ldrb r0, [r1] + lsls r0, r0, #3 + ldr r1, _08041FB4 @ =gOamMallocBuffer + adds r4, r0, r1 + ldr r3, [sp, #8] + ldrh r0, [r3, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r3, r0, #0 + ldr r0, _08041FB8 @ =iwram_end + ldr r0, [r0] + cmp r0, r3 + beq _08041F92 + ldr r1, _08041FBC @ =0x040000D4 + str r4, [r1] + str r3, [r1, #4] + ldr r0, _08041FC0 @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldrh r2, [r3] + movs r4, #0xff + lsls r4, r4, #8 + adds r0, r4, #0 + ands r2, r0 + strh r2, [r3] + ldr r1, [sp, #8] + ldr r0, [r1, #0xc] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0x20] + subs r0, r4, r0 + movs r1, #0xff + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3] + ldrh r2, [r3, #2] + movs r1, #0xfe + lsls r1, r1, #8 + adds r0, r1, #0 + ands r2, r0 + strh r2, [r3, #2] + ldr r4, [sp, #8] + ldr r0, [r4, #0xc] + ldrh r0, [r0, #8] + ldr r1, [sp, #0x1c] + subs r0, r1, r0 + ldr r4, _08041FC4 @ =0x000001FF + adds r1, r4, #0 + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3, #2] +_08041F92: + ldrh r0, [r5, #0xc] + subs r0, #1 +_08041F96: + strh r0, [r5, #0xc] + ldr r5, [sp, #0x24] +_08041F9A: + mov r0, sl + str r0, [sp, #0x18] + cmp r0, #0x2f + bgt _08041FA4 + b _08041B1C +_08041FA4: + add sp, #0x28 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08041FB4: .4byte gOamMallocBuffer +_08041FB8: .4byte iwram_end +_08041FBC: .4byte 0x040000D4 +_08041FC0: .4byte 0x80000003 +_08041FC4: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_FlippedGravity.inc b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_FlippedGravity.inc new file mode 100644 index 0000000000..298263658a --- /dev/null +++ b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_FlippedGravity.inc @@ -0,0 +1,533 @@ + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x1c + ldr r0, _08040EC0 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r1, r0 + str r0, [sp, #4] + ldr r0, _08040EC4 @ =0x03000030 + adds r5, r1, r0 + ldr r2, [sp, #4] + mov sb, r2 + ldr r3, _08040EC8 @ =0x03000330 + adds r0, r1, r3 + ldr r0, [r0] + str r0, [sp, #8] + ldr r4, _08040ECC @ =0x03000334 + adds r1, r1, r4 + ldrh r1, [r1] + str r1, [sp, #0xc] + movs r0, #0 + str r0, [sp, #0x10] + mov r0, sb + bl UpdateSpriteAnimation + movs r1, #0x2f + str r1, [sp, #0x14] +_08040D9C: + ldrh r0, [r5, #0xc] + cmp r0, #0 + bne _08040DA4 + b _08041154 +_08040DA4: + movs r2, #8 + ldrsh r0, [r5, r2] + ldr r1, [r5] + adds r1, r1, r0 + str r1, [r5] + movs r3, #0xa + ldrsh r2, [r5, r3] + ldr r0, [r5, #4] + adds r0, r0, r2 + str r0, [r5, #4] + asrs r7, r1, #8 + asrs r0, r0, #8 + mov r8, r0 + ldr r4, _08040ED0 @ =gCamera + movs r1, #0 + ldrsh r0, [r4, r1] + subs r0, r7, r0 + str r0, [sp, #0x18] + movs r2, #2 + ldrsh r0, [r4, r2] + mov r3, r8 + subs r3, r3, r0 + mov sl, r3 + ldr r6, _08040ED4 @ =gPlayer + ldr r2, [r6, #0x64] + ldrh r4, [r5, #0xc] + mov ip, r4 + ldr r0, [sp, #0xc] + cmp ip, r0 + ble _08040DE2 + b _08040EEC +_08040DE2: + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _08040DF8 + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + beq _08040DF8 + b _08040EEC +_08040DF8: + cmp r1, #0x28 + beq _08040EEC + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08040EEC + adds r4, r2, #0 + adds r4, #0x38 + adds r2, r7, #0 + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08040E28 + adds r0, r7, #0 + adds r0, #8 + cmp r0, r1 + bge _08040E34 + cmp r2, r1 + blt _08040EEC +_08040E28: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08040EEC +_08040E34: + mov r2, r8 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08040E4E + cmp r8, r1 + bge _08040E5A + cmp r2, r1 + blt _08040EEC +_08040E4E: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08040EEC +_08040E5A: + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + mov r4, r8 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + ldr r1, _08040ED8 @ =gRingCount + ldrh r6, [r1] + adds r0, r6, #1 + strh r0, [r1] + ldr r0, _08040EDC @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + beq _08040EA8 + ldrh r0, [r1] + movs r1, #0x64 + bl Div + adds r4, r0, #0 + adds r0, r6, #0 + movs r1, #0x64 + bl Div + cmp r4, r0 + beq _08040EA8 + ldr r0, _08040EE0 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08040EA8 + ldr r1, _08040EE4 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldr r1, _08040EE8 @ =gMusicManagerState + movs r0, #0x10 + strb r0, [r1, #3] +_08040EA8: + ldr r0, _08040EE0 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08040EBC + ldr r1, _08040ED8 @ =gRingCount + ldrh r0, [r1] + cmp r0, #0xff + bls _08040EBC + movs r0, #0xff + strh r0, [r1] +_08040EBC: + movs r0, #0 + b _08041152 + .align 2, 0 +_08040EC0: .4byte gCurTask +_08040EC4: .4byte 0x03000030 +_08040EC8: .4byte 0x03000330 +_08040ECC: .4byte 0x03000334 +_08040ED0: .4byte gCamera +_08040ED4: .4byte gPlayer +_08040ED8: .4byte gRingCount +_08040EDC: .4byte gCurrentLevel +_08040EE0: .4byte gGameMode +_08040EE4: .4byte gNumLives +_08040EE8: .4byte gMusicManagerState +_08040EEC: + ldr r0, _08040FE4 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + beq _08040EFA + b _08041000 +_08040EFA: + ldr r6, _08040FE8 @ =gPartner + ldr r2, [r6, #0x64] + ldr r0, [sp, #0xc] + cmp ip, r0 + ble _08040F06 + b _08041000 +_08040F06: + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _08040F1A + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + bne _08041000 +_08040F1A: + cmp r1, #0x28 + beq _08041000 + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08041000 + adds r4, r2, #0 + adds r4, #0x38 + adds r2, r7, #0 + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08040F4A + adds r0, r7, #0 + adds r0, #8 + cmp r0, r1 + bge _08040F56 + cmp r2, r1 + blt _08041000 +_08040F4A: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041000 +_08040F56: + mov r2, r8 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _08040F70 + cmp r8, r1 + bge _08040F7C + cmp r2, r1 + blt _08041000 +_08040F70: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041000 +_08040F7C: + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + mov r4, r8 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + ldr r1, _08040FEC @ =gRingCount + ldrh r6, [r1] + adds r0, r6, #1 + strh r0, [r1] + ldr r0, _08040FF0 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + beq _08040FCA + ldrh r0, [r1] + movs r1, #0x64 + bl Div + adds r4, r0, #0 + adds r0, r6, #0 + movs r1, #0x64 + bl Div + cmp r4, r0 + beq _08040FCA + ldr r0, _08040FF4 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08040FCA + ldr r1, _08040FF8 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldr r1, _08040FFC @ =gMusicManagerState + movs r0, #0x10 + strb r0, [r1, #3] +_08040FCA: + ldr r0, _08040FF4 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08040FDE + ldr r1, _08040FEC @ =gRingCount + ldrh r0, [r1] + cmp r0, #0xff + bls _08040FDE + movs r0, #0xff + strh r0, [r1] +_08040FDE: + movs r0, #0 + b _08041152 + .align 2, 0 +_08040FE4: .4byte gNumSingleplayerCharacters +_08040FE8: .4byte gPartner +_08040FEC: .4byte gRingCount +_08040FF0: .4byte gCurrentLevel +_08040FF4: .4byte gGameMode +_08040FF8: .4byte gNumLives +_08040FFC: .4byte gMusicManagerState +_08041000: + movs r1, #0xa + ldrsh r0, [r5, r1] + cmp r0, #0 + bge _08041034 + mov r0, r8 + subs r0, #0x10 + movs r3, #0xe + ldrsh r2, [r5, r3] + ldr r1, _080410D4 @ =sa2__sub_801EC3C + str r1, [sp] + adds r1, r7, #0 + movs r3, #8 + rsbs r3, r3, #0 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _08041034 + lsls r1, r0, #8 + ldr r0, [r5, #4] + subs r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_08041034: + ldr r4, [sp, #4] + ldr r1, _080410D8 @ =0x00000336 + adds r0, r4, r1 + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08041074 + movs r2, #0xa + ldrsh r0, [r5, r2] + cmp r0, #0 + ble _08041074 + movs r3, #0xe + ldrsh r2, [r5, r3] + ldr r0, _080410D4 @ =sa2__sub_801EC3C + str r0, [sp] + mov r0, r8 + adds r1, r7, #0 + movs r3, #8 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _08041074 + lsls r1, r0, #8 + ldr r0, [r5, #4] + adds r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_08041074: + ldrh r0, [r5, #0xa] + ldr r4, [sp, #8] + subs r0, r0, r4 + strh r0, [r5, #0xa] + ldr r0, [sp, #0x18] + adds r0, #7 + cmp r0, #0xfe + bhi _0804114E + movs r0, #8 + rsbs r0, r0, #0 + cmp sl, r0 + ble _0804114E + mov r0, sl + cmp r0, #0xa7 + bgt _0804114E + ldrh r0, [r5, #0xc] + cmp r0, #0x1f + bhi _080410A4 + ldr r0, _080410DC @ =gStageTime + ldr r0, [r0] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _0804114E +_080410A4: + mov r2, sb + adds r2, #0x23 + ldr r1, [sp, #0x10] + cmp r1, #0 + beq _080410B6 + adds r1, r2, #0 + ldrb r0, [r1] + cmp r0, #0xff + bne _080410E0 +_080410B6: + movs r0, #0xff + strb r0, [r2] + mov r2, sp + ldrh r3, [r2, #0x18] + mov r2, sb + strh r3, [r2, #0x16] + mov r4, sl + strh r4, [r2, #0x18] + mov r0, sb + bl DisplaySprite + movs r0, #1 + str r0, [sp, #0x10] + b _0804114E + .align 2, 0 +_080410D4: .4byte sa2__sub_801EC3C +_080410D8: .4byte 0x00000336 +_080410DC: .4byte gStageTime +_080410E0: + ldrb r0, [r1] + lsls r0, r0, #3 + ldr r1, _08041174 @ =gOamMallocBuffer + adds r4, r0, r1 + mov r1, sb + ldrh r0, [r1, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r3, r0, #0 + ldr r0, _08041178 @ =iwram_end + ldr r0, [r0] + cmp r0, r3 + beq _0804114E + ldr r1, _0804117C @ =0x040000D4 + str r4, [r1] + str r3, [r1, #4] + ldr r0, _08041180 @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldrh r2, [r3] + movs r4, #0xff + lsls r4, r4, #8 + adds r0, r4, #0 + ands r2, r0 + strh r2, [r3] + mov r1, sb + ldr r0, [r1, #0xc] + ldrh r0, [r0, #0xa] + mov r4, sl + subs r0, r4, r0 + movs r1, #0xff + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3] + ldrh r2, [r3, #2] + movs r1, #0xfe + lsls r1, r1, #8 + adds r0, r1, #0 + ands r2, r0 + strh r2, [r3, #2] + mov r4, sb + ldr r0, [r4, #0xc] + ldrh r0, [r0, #8] + ldr r1, [sp, #0x18] + subs r0, r1, r0 + ldr r4, _08041184 @ =0x000001FF + adds r1, r4, #0 + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3, #2] +_0804114E: + ldrh r0, [r5, #0xc] + subs r0, #1 +_08041152: + strh r0, [r5, #0xc] +_08041154: + adds r5, #0x10 + ldr r0, [sp, #0x14] + subs r0, #1 + str r0, [sp, #0x14] + cmp r0, #0 + blt _08041162 + b _08040D9C +_08041162: + add sp, #0x1c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08041174: .4byte gOamMallocBuffer +_08041178: .4byte iwram_end +_0804117C: .4byte 0x040000D4 +_08041180: .4byte 0x80000003 +_08041184: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_NormalGravity.inc b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_NormalGravity.inc new file mode 100644 index 0000000000..cf883fc906 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_NormalGravity.inc @@ -0,0 +1,566 @@ + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x20 + ldr r0, _08041324 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r1, r0 + str r0, [sp, #4] + ldr r0, _08041328 @ =0x03000030 + adds r5, r1, r0 + ldr r2, [sp, #4] + mov sl, r2 + ldr r3, _0804132C @ =0x03000330 + adds r0, r1, r3 + ldr r0, [r0] + str r0, [sp, #8] + ldr r4, _08041330 @ =0x03000334 + adds r1, r1, r4 + ldrh r1, [r1] + str r1, [sp, #0xc] + movs r0, #0 + str r0, [sp, #0x10] + mov r0, sl + bl UpdateSpriteAnimation + movs r1, #0x2f + str r1, [sp, #0x14] +_080411C8: + ldrh r0, [r5, #0xc] + cmp r0, #0 + bne _080411D0 + b _080415C0 +_080411D0: + movs r2, #8 + ldrsh r0, [r5, r2] + ldr r1, [r5] + adds r1, r1, r0 + str r1, [r5] + movs r3, #0xa + ldrsh r2, [r5, r3] + ldr r0, [r5, #4] + adds r0, r0, r2 + str r0, [r5, #4] + asrs r1, r1, #8 + mov sb, r1 + mov r7, sb + asrs r0, r0, #8 + mov r8, r0 + ldr r0, _08041334 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + bne _08041220 + ldr r0, _08041338 @ =gStageTime + ldr r0, [r0] + lsls r0, r0, #3 + mov r4, sb + adds r1, r4, r0 + adds r2, r1, #0 + subs r2, #0x48 + ldr r0, _0804133C @ =0x00000A7F + cmp r2, r0 + ble _0804121E + adds r1, r2, #0 + adds r0, r1, #0 + movs r1, #0xa8 + lsls r1, r1, #4 + bl Mod + adds r1, r0, #0 + adds r1, #0x48 +_0804121E: + mov sb, r1 +_08041220: + ldr r1, _08041340 @ =gCamera + movs r2, #0 + ldrsh r0, [r1, r2] + subs r0, r7, r0 + str r0, [sp, #0x18] + movs r3, #2 + ldrsh r0, [r1, r3] + mov r4, r8 + subs r4, r4, r0 + str r4, [sp, #0x1c] + ldr r6, _08041344 @ =gPlayer + ldr r2, [r6, #0x64] + ldrh r0, [r5, #0xc] + mov ip, r0 + ldr r1, [sp, #0xc] + cmp ip, r1 + ble _08041244 + b _08041358 +_08041244: + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _0804125A + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + beq _0804125A + b _08041358 +_0804125A: + cmp r1, #0x28 + bne _08041260 + b _08041358 +_08041260: + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _08041358 + adds r4, r2, #0 + adds r4, #0x38 + adds r2, r7, #0 + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _0804128C + adds r0, r7, #0 + adds r0, #8 + cmp r0, r1 + bge _08041298 + cmp r2, r1 + blt _08041358 +_0804128C: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041358 +_08041298: + mov r2, r8 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _080412B2 + cmp r8, r1 + bge _080412BE + cmp r2, r1 + blt _08041358 +_080412B2: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _08041358 +_080412BE: + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + mov r4, r8 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + ldr r1, _08041348 @ =gRingCount + ldrh r6, [r1] + adds r0, r6, #1 + strh r0, [r1] + ldr r0, _08041334 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + beq _0804130C + ldrh r0, [r1] + movs r1, #0x64 + bl Div + adds r4, r0, #0 + adds r0, r6, #0 + movs r1, #0x64 + bl Div + cmp r4, r0 + beq _0804130C + ldr r0, _0804134C @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _0804130C + ldr r1, _08041350 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldr r1, _08041354 @ =gMusicManagerState + movs r0, #0x10 + strb r0, [r1, #3] +_0804130C: + ldr r0, _0804134C @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _08041320 + ldr r1, _08041348 @ =gRingCount + ldrh r0, [r1] + cmp r0, #0xff + bls _08041320 + movs r0, #0xff + strh r0, [r1] +_08041320: + movs r0, #0 + b _080415BE + .align 2, 0 +_08041324: .4byte gCurTask +_08041328: .4byte 0x03000030 +_0804132C: .4byte 0x03000330 +_08041330: .4byte 0x03000334 +_08041334: .4byte gCurrentLevel +_08041338: .4byte gStageTime +_0804133C: .4byte 0x00000A7F +_08041340: .4byte gCamera +_08041344: .4byte gPlayer +_08041348: .4byte gRingCount +_0804134C: .4byte gGameMode +_08041350: .4byte gNumLives +_08041354: .4byte gMusicManagerState +_08041358: + ldr r0, _08041450 @ =gNumSingleplayerCharacters + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #2 + beq _08041366 + b _0804146C +_08041366: + ldr r6, _08041454 @ =gPartner + ldr r2, [r6, #0x64] + ldr r0, [sp, #0xc] + cmp ip, r0 + ble _08041372 + b _0804146C +_08041372: + adds r0, r6, #0 + adds r0, #0x40 + movs r1, #0 + ldrsb r1, [r0, r1] + cmp r1, #0xf + bne _08041386 + movs r3, #0x1c + ldrsh r0, [r6, r3] + cmp r0, #0 + bne _0804146C +_08041386: + cmp r1, #0x28 + beq _0804146C + ldr r0, [r6, #0x10] + movs r1, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0804146C + adds r4, r2, #0 + adds r4, #0x38 + adds r2, r7, #0 + subs r2, #8 + ldr r0, [r6] + asrs r0, r0, #8 + movs r3, #0 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _080413B6 + adds r0, r7, #0 + adds r0, #8 + cmp r0, r1 + bge _080413C2 + cmp r2, r1 + blt _0804146C +_080413B6: + movs r0, #2 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _0804146C +_080413C2: + mov r2, r8 + subs r2, #0x10 + ldr r0, [r6, #4] + asrs r0, r0, #8 + movs r3, #1 + ldrsb r3, [r4, r3] + adds r1, r0, r3 + cmp r2, r1 + bgt _080413DC + cmp r8, r1 + bge _080413E8 + cmp r2, r1 + blt _0804146C +_080413DC: + movs r0, #3 + ldrsb r0, [r4, r0] + subs r0, r0, r3 + adds r0, r1, r0 + cmp r0, r2 + blt _0804146C +_080413E8: + lsls r0, r7, #0x10 + asrs r0, r0, #0x10 + mov r4, r8 + lsls r1, r4, #0x10 + asrs r1, r1, #0x10 + bl CreateCollectRingEffect + ldr r1, _08041458 @ =gRingCount + ldrh r6, [r1] + adds r0, r6, #1 + strh r0, [r1] + ldr r0, _0804145C @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + beq _08041436 + ldrh r0, [r1] + movs r1, #0x64 + bl Div + adds r4, r0, #0 + adds r0, r6, #0 + movs r1, #0x64 + bl Div + cmp r4, r0 + beq _08041436 + ldr r0, _08041460 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08041436 + ldr r1, _08041464 @ =gNumLives + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + ldr r1, _08041468 @ =gMusicManagerState + movs r0, #0x10 + strb r0, [r1, #3] +_08041436: + ldr r0, _08041460 @ =gGameMode + ldrb r0, [r0] + cmp r0, #6 + bne _0804144A + ldr r1, _08041458 @ =gRingCount + ldrh r0, [r1] + cmp r0, #0xff + bls _0804144A + movs r0, #0xff + strh r0, [r1] +_0804144A: + movs r0, #0 + b _080415BE + .align 2, 0 +_08041450: .4byte gNumSingleplayerCharacters +_08041454: .4byte gPartner +_08041458: .4byte gRingCount +_0804145C: .4byte gCurrentLevel +_08041460: .4byte gGameMode +_08041464: .4byte gNumLives +_08041468: .4byte gMusicManagerState +_0804146C: + movs r1, #0xa + ldrsh r0, [r5, r1] + cmp r0, #0 + ble _0804149C + movs r3, #0xe + ldrsh r2, [r5, r3] + ldr r0, _08041540 @ =sa2__sub_801EC3C + str r0, [sp] + mov r0, r8 + mov r1, sb + movs r3, #8 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _0804149C + lsls r1, r0, #8 + ldr r0, [r5, #4] + adds r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_0804149C: + ldr r4, [sp, #4] + ldr r1, _08041544 @ =0x00000336 + adds r0, r4, r1 + ldrh r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _080414E0 + movs r2, #0xa + ldrsh r0, [r5, r2] + cmp r0, #0 + bge _080414E0 + mov r0, r8 + subs r0, #0x10 + movs r3, #0xe + ldrsh r2, [r5, r3] + ldr r1, _08041540 @ =sa2__sub_801EC3C + str r1, [sp] + mov r1, sb + movs r3, #8 + rsbs r3, r3, #0 + bl sa2__sub_801F100 + cmp r0, #0 + bgt _080414E0 + lsls r1, r0, #8 + ldr r0, [r5, #4] + subs r0, r0, r1 + str r0, [r5, #4] + ldrh r1, [r5, #0xa] + lsls r0, r1, #0x10 + asrs r0, r0, #0x12 + subs r0, r0, r1 + strh r0, [r5, #0xa] +_080414E0: + ldrh r0, [r5, #0xa] + ldr r4, [sp, #8] + adds r0, r0, r4 + strh r0, [r5, #0xa] + ldr r0, [sp, #0x18] + adds r0, #7 + cmp r0, #0xfe + bhi _080415BA + movs r0, #8 + rsbs r0, r0, #0 + ldr r1, [sp, #0x1c] + cmp r1, r0 + ble _080415BA + cmp r1, #0xa7 + bgt _080415BA + ldrh r0, [r5, #0xc] + cmp r0, #0x1f + bhi _08041510 + ldr r0, _08041548 @ =gStageTime + ldr r0, [r0] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + bne _080415BA +_08041510: + mov r2, sl + adds r2, #0x23 + ldr r3, [sp, #0x10] + cmp r3, #0 + beq _08041522 + adds r1, r2, #0 + ldrb r0, [r1] + cmp r0, #0xff + bne _0804154C +_08041522: + movs r0, #0xff + strb r0, [r2] + mov r4, sp + ldrh r0, [r4, #0x18] + mov r4, sl + strh r0, [r4, #0x16] + mov r1, sp + ldrh r1, [r1, #0x1c] + strh r1, [r4, #0x18] + mov r0, sl + bl DisplaySprite + movs r2, #1 + str r2, [sp, #0x10] + b _080415BA + .align 2, 0 +_08041540: .4byte sa2__sub_801EC3C +_08041544: .4byte 0x00000336 +_08041548: .4byte gStageTime +_0804154C: + ldrb r0, [r1] + lsls r0, r0, #3 + ldr r1, _080415E0 @ =gOamMallocBuffer + adds r4, r0, r1 + mov r3, sl + ldrh r0, [r3, #0x1a] + movs r2, #0xf8 + lsls r2, r2, #3 + adds r1, r2, #0 + ands r0, r1 + lsrs r0, r0, #6 + bl OamMalloc + adds r3, r0, #0 + ldr r0, _080415E4 @ =iwram_end + ldr r0, [r0] + cmp r0, r3 + beq _080415BA + ldr r1, _080415E8 @ =0x040000D4 + str r4, [r1] + str r3, [r1, #4] + ldr r0, _080415EC @ =0x80000003 + str r0, [r1, #8] + ldr r0, [r1, #8] + ldrh r2, [r3] + movs r4, #0xff + lsls r4, r4, #8 + adds r0, r4, #0 + ands r2, r0 + strh r2, [r3] + mov r1, sl + ldr r0, [r1, #0xc] + ldrh r0, [r0, #0xa] + ldr r4, [sp, #0x1c] + subs r0, r4, r0 + movs r1, #0xff + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3] + ldrh r2, [r3, #2] + movs r1, #0xfe + lsls r1, r1, #8 + adds r0, r1, #0 + ands r2, r0 + strh r2, [r3, #2] + mov r4, sl + ldr r0, [r4, #0xc] + ldrh r0, [r0, #8] + ldr r1, [sp, #0x18] + subs r0, r1, r0 + ldr r4, _080415F0 @ =0x000001FF + adds r1, r4, #0 + ands r0, r1 + adds r2, r2, r0 + strh r2, [r3, #2] +_080415BA: + ldrh r0, [r5, #0xc] + subs r0, #1 +_080415BE: + strh r0, [r5, #0xc] +_080415C0: + adds r5, #0x10 + ldr r0, [sp, #0x14] + subs r0, #1 + str r0, [sp, #0x14] + cmp r0, #0 + blt _080415CE + b _080411C8 +_080415CE: + add sp, #0x20 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080415E0: .4byte gOamMallocBuffer +_080415E4: .4byte iwram_end +_080415E8: .4byte 0x040000D4 +_080415EC: .4byte 0x80000003 +_080415F0: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/ui__CreateSpecialStageUI.inc b/sa1/asm/non_matching/game/stage/ui__CreateSpecialStageUI.inc new file mode 100644 index 0000000000..df3b48e210 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/ui__CreateSpecialStageUI.inc @@ -0,0 +1,36 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, lr} + sub sp, #4 + movs r1, #0 + ldr r0, _0805422C @ =Task_SpecialStageUIMain + movs r2, #0x8c + lsls r2, r2, #5 + movs r4, #0 + str r1, [sp] + movs r1, #0x50 + movs r3, #0 + bl TaskCreate + adds r1, r0, #0 + ldrh r0, [r1, #6] + ldr r2, _08054230 @ =0x03000040 + adds r0, r0, r2 + strh r4, [r0] + ldrh r0, [r1, #6] + ldr r1, _08054234 @ =0x0300004C + adds r0, r0, r1 + strh r4, [r0] + bl UiGfxStackInit + bl sub_8054068 + add sp, #4 + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0805422C: .4byte Task_SpecialStageUIMain +_08054230: .4byte 0x03000040 +_08054234: .4byte 0x0300004C + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/ui__Task_8055458.inc b/sa1/asm/non_matching/game/stage/ui__Task_8055458.inc new file mode 100644 index 0000000000..fb7d0e8a36 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/ui__Task_8055458.inc @@ -0,0 +1,348 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + ldr r0, _08055594 @ =gCurTask + ldr r0, [r0] + ldrh r5, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r4, r5, r1 @ r4 = strcMain + ldr r0, [r4, #0xc] + ldrh r0, [r0, #6] + adds r6, r0, r1 @ r6 = strc1 + ldr r0, [r4, #0x10] + ldrh r0, [r0, #6] + adds r7, r0, r1 @ r7 = strc2 + ldr r0, [r4, #0x14] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov r8, r0 @ r8 = strc3 + ldr r0, [r4, #0x18] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sb, r0 @ sb = strc4 + ldr r0, [r4, #0x1c] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sl, r0 @ sl = strc5 + ldr r0, [r4, #0x20] + ldrh r0, [r0, #6] + adds r0, r0, r1 + str r0, [sp] @ sp00 = strc6 + ldr r0, _08055598 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #0xf3 + ands r0, r1 + cmp r0, #0 + beq _080554E8 + ldr r0, _0805559C @ =gGameMode + ldrb r0, [r0] + cmp r0, #1 + bhi _080554E8 + ldrh r0, [r4, #0x24] + subs r0, #0x24 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0xb2 + bhi _080554E8 + movs r0, #0xd7 + strh r0, [r4, #0x24] + movs r0, #6 + ldrsh r1, [r4, r0] + movs r0, #0x80 + lsls r0, r0, #6 + subs r0, r0, r1 + movs r1, #0xa + bl Div + strh r0, [r4, #8] + ldr r1, _080555A0 @ =0x03000027 + adds r0, r5, r1 + ldrb r0, [r0] + cmp r0, #0 + bne _080554E8 + adds r0, r4, #0 + bl sub_805423C + ldr r2, _080555A4 @ =0x03000026 + adds r1, r5, r2 + strb r0, [r1] +_080554E8: + ldrh r0, [r4, #0x24] + strh r0, [r6, #0x18] + ldrh r0, [r4, #0x24] + strh r0, [r7, #0x18] + ldrh r0, [r4, #0x24] + mov r1, r8 + strh r0, [r1, #0x18] + ldrh r0, [r4, #0x24] + mov r2, sb + strh r0, [r2, #0x18] + ldrh r0, [r4, #0x24] + mov r1, sl + strh r0, [r1, #0x18] + ldrh r0, [r4, #0x24] + ldr r2, [sp] + strh r0, [r2, #0x18] + adds r5, r4, #0 + adds r5, #0x26 + ldrb r1, [r5] + adds r0, r6, #0 + adds r0, #0x20 + strb r1, [r0] @ strc1->unk20 = strcMain->unk26; + ldrb r1, [r5] + adds r0, r7, #0 + adds r0, #0x20 + strb r1, [r0] + ldrb r1, [r5] + mov r0, r8 + adds r0, #0x20 + strb r1, [r0] + ldrb r1, [r5] + mov r0, sb + adds r0, #0x20 + strb r1, [r0] + ldrb r1, [r5] + mov r0, sl + adds r0, #0x20 + strb r1, [r0] + ldrb r1, [r5] + adds r0, r2, #0 + adds r0, #0x20 + strb r1, [r0] + adds r1, r4, #0 + adds r1, #0x27 + ldrb r2, [r1] + adds r0, r6, #0 + adds r0, #0x21 + strb r2, [r0] + ldrb r2, [r1] + adds r0, r7, #0 + adds r0, #0x21 + strb r2, [r0] + ldrb r2, [r1] + mov r0, r8 + adds r0, #0x21 + strb r2, [r0] + ldrb r2, [r1] + mov r0, sb + adds r0, #0x21 + strb r2, [r0] + ldrb r2, [r1] + mov r0, sl + adds r0, #0x21 + strb r2, [r0] + ldrb r2, [r1] + ldr r0, [sp] + adds r0, #0x21 + strb r2, [r0] + ldrb r0, [r1] + adds r6, r1, #0 + cmp r0, #0 + bne _080555AE + movs r0, #0x24 + ldrsh r1, [r4, r0] + cmp r1, #0x69 + ble _08055586 + ldrb r0, [r5] + cmp r0, #0 + bne _080555AE +_08055586: + cmp r1, #0x14 + ble _080555A8 + adds r0, r4, #0 + bl sub_805423C + strb r0, [r5] + b _080555AE + .align 2, 0 +_08055594: .4byte gCurTask +_08055598: .4byte gPressedKeys +_0805559C: .4byte gGameMode +_080555A0: .4byte 0x03000027 +_080555A4: .4byte 0x03000026 +_080555A8: + adds r0, r4, #0 + bl sub_80543A4 +_080555AE: + ldrh r0, [r4, #0x24] + adds r0, #1 + strh r0, [r4, #0x24] + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + cmp r0, #0xe1 + bgt _080555BE + b _08055708 +_080555BE: + ldrb r3, [r6] + cmp r3, #0 + bne _080555D4 + ldr r2, _080556AC @ =gDispCnt + ldrh r1, [r2] + ldr r0, _080556B0 @ =0x00001FFF + ands r0, r1 + strh r0, [r2] + ldr r0, _080556B4 @ =gBldRegs + strh r3, [r0] + strh r3, [r0, #4] +_080555D4: + ldr r0, _080556B8 @ =gGameMode + ldrb r0, [r0] + ldr r1, _080556BC @ =gPlayer + mov r8, r1 + ldr r2, _080556C0 @ =gStageFlags + mov sb, r2 + ldr r1, _080556C4 @ =gPartner + mov sl, r1 + ldr r2, _080556C8 @ =sa2__gUnknown_030054B0 + mov ip, r2 + cmp r0, #1 @ IS_MULTI_PLAYER + bls _08055622 + ldr r1, _080556CC @ =gMultiplayerPlayerTasks + ldr r0, [r1] + cmp r0, #0 + beq _0805561C + movs r7, #0xc0 + lsls r7, r7, #0x12 + movs r6, #3 + rsbs r6, r6, #0 + adds r3, r1, #0 + adds r5, r3, #0 + adds r2, r3, #0 + adds r2, #0xc +_08055604_loop: + ldm r5!, {r0} + ldrh r1, [r0, #6] + adds r1, r1, r7 + ldr r0, [r1, #0x5c] + ands r0, r6 + str r0, [r1, #0x5c] + adds r3, #4 + cmp r5, r2 + bhi _0805561C + ldr r0, [r3] + cmp r0, #0 + bne _08055604_loop +_0805561C: + movs r0, #0x78 + mov r1, r8 + strh r0, [r1, #0x1c] +_08055622: + mov r2, sb @ r2 = sb = gStageFlags + ldrh r1, [r2] + ldr r0, _080556D0 @ =0x0000FFFE + ands r0, r1 + strh r0, [r2] + mov r1, r8 + ldr r0, [r1, #0x10] + ldr r1, _080556D4 @ =0xFFDFFFFF + ands r0, r1 + mov r2, r8 + str r0, [r2, #0x10] + mov r2, sl + ldr r0, [r2, #0x10] + ands r0, r1 + str r0, [r2, #0x10] + ldr r3, _080556D8 @ =gCurrentLevel + ldrb r0, [r3] + mov r1, ip + strb r0, [r1] + mov r2, r8 + adds r2, #0x26 + ldrb r1, [r2] + movs r0, #0x7f + ands r0, r1 + strb r0, [r2] + mov r2, sb + ldrh r1, [r2] + ldr r0, _080556DC @ =0x0000FFDF + ands r0, r1 + strh r0, [r2] + ldrb r0, [r3] + subs r0, #6 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _08055672 + bl LoadPalette423Anim + bl sub_804C40C +_08055672: + ldr r0, [r4, #0x20] + bl TaskDestroy + ldr r0, [r4, #0x1c] + bl TaskDestroy + ldr r0, [r4, #0x18] + bl TaskDestroy + ldr r0, [r4, #0x14] + bl TaskDestroy + ldr r0, [r4, #0x10] + bl TaskDestroy + ldr r0, [r4, #0xc] + bl TaskDestroy + ldr r0, _080556E0 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + ldr r0, _080556B8 @ =gGameMode + ldrb r0, [r0] + cmp r0, #3 + bhi _080556E4 + bl CreateStageUI + b _080556E8 + .align 2, 0 +_080556AC: .4byte gDispCnt +_080556B0: .4byte 0x00001FFF +_080556B4: .4byte gBldRegs +_080556B8: .4byte gGameMode +_080556BC: .4byte gPlayer +_080556C0: .4byte gStageFlags +_080556C4: .4byte gPartner +_080556C8: .4byte sa2__gUnknown_030054B0 +_080556CC: .4byte gMultiplayerPlayerTasks +_080556D0: .4byte 0x0000FFFE +_080556D4: .4byte 0xFFDFFFFF +_080556D8: .4byte gCurrentLevel +_080556DC: .4byte 0x0000FFDF +_080556E0: .4byte gCurTask +_080556E4: + bl CreateChaoHuntHUD +_080556E8: + ldr r0, _08055704 @ =gCurrentLevel + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0xd + bne _0805571A + movs r0, #0xf0 + lsls r0, r0, #7 + movs r1, #0xa0 + lsls r1, r1, #7 + bl sub_804A5D8 + b _0805571A + .align 2, 0 +_08055704: .4byte gCurrentLevel +_08055708: + ldr r0, _0805572C @ =gCurrentLevel + ldrb r0, [r0] + subs r0, #6 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #1 + bhi _0805571A + bl sub_804C40C +_0805571A: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0805572C: .4byte gCurrentLevel + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/ui__Task_8055798.inc b/sa1/asm/non_matching/game/stage/ui__Task_8055798.inc new file mode 100644 index 0000000000..2b74e154dc --- /dev/null +++ b/sa1/asm/non_matching/game/stage/ui__Task_8055798.inc @@ -0,0 +1,190 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r0, _08055804 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r4, r1, r0 @ r4 = strc + ldrh r0, [r4, #0x18] + movs r2, #0x18 + ldrsh r1, [r4, r2] + cmp r1, #0xd7 + ble _08055826 + subs r0, #0xd7 + lsls r0, r0, #7 + movs r1, #0xa + bl Div + movs r5, #0 + lsls r0, r0, #0x10 + movs r1, #0x20 + rsbs r1, r1, #0 + mov sb, r1 + asrs r1, r0, #0x10 + rsbs r0, r0, #0 + mov r8, r0 + rsbs r6, r1, #0 + ldr r7, _08055808 @ =gUnknown_08688394 +_080557D6_loop: + strh r6, [r4, #0xc] + mov r2, r8 + asrs r0, r2, #0x10 + cmp r0, sb + blt _08055814 + ldrh r0, [r4, #0x18] + cmp r0, #0x69 + bls _080557FA + adds r0, r4, #0 + adds r0, #0x20 + ldrb r0, [r0] + cmp r0, #0 + beq _080557FA + adds r0, r4, #0 + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + beq _0805580C +_080557FA: + adds r0, r7, #0 + adds r1, r4, #0 + bl sub_8052F78 + b _08055814 + .align 2, 0 +_08055804: .4byte gCurTask +_08055808: .4byte gUnknown_08688394 +_0805580C: + adds r0, r7, #0 + adds r1, r4, #0 + bl sub_80530CC +_08055814: + movs r0, #0x80 + lsls r0, r0, #0xe + add r8, r0 + adds r6, #0x20 + adds r7, #1 + adds r5, #1 + cmp r5, #3 + ble _080557D6_loop + b _080558F0_return +_08055826: + cmp r1, #0x1f + ble _0805586E + movs r5, #0 + ldr r6, _08055858 @ =gUnknown_08688394 +_0805582E_loop: + lsls r0, r5, #5 + strh r0, [r4, #0xc] + ldrh r0, [r4, #0x18] + cmp r0, #0x69 + bls _0805584C + adds r0, r4, #0 + adds r0, #0x20 + ldrb r0, [r0] + cmp r0, #0 + beq _0805584C + adds r0, r4, #0 + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + beq _0805585C +_0805584C: + adds r0, r6, #0 + adds r1, r4, #0 + bl sub_8052F78 + b _08055864 + .align 2, 0 +_08055858: .4byte gUnknown_08688394 +_0805585C: + adds r0, r6, #0 + adds r1, r4, #0 + bl sub_80530CC +_08055864: + adds r6, #1 + adds r5, #1 + cmp r5, #3 + ble _0805582E_loop + b _080558F0_return +_0805586E: + cmp r1, #0x19 + ble _080558F0_return + subs r0, #0xd7 + lsls r0, r0, #7 + movs r1, #6 + bl Div + subs r0, #0xb0 + mov r8, r0 @ r8 = Div((strc->unk18 - 215) << 7, 6) - 176; + ldr r1, _080558CC @ =0x000001FF + adds r0, r1, #0 + movs r5, #0 + mov r2, r8 + ands r2, r0 + mov r8, r2 + ldr r0, _080558D0 @ =0x000001A5 + mov sl, r0 + lsls r7, r2, #0x10 + mov r6, r8 + movs r1, #0x20 + rsbs r1, r1, #0 + mov sb, r1 +_0805589A_loop: + cmp r8, sl + ble _080558E2 + strh r6, [r4, #0xc] + asrs r0, r7, #0x10 + cmp r0, sb + blt _080558E2 + ldrh r0, [r4, #0x18] + cmp r0, #0x69 + bls _080558C0 + adds r0, r4, #0 + adds r0, #0x20 + ldrb r0, [r0] + cmp r0, #0 + beq _080558C0 + adds r0, r4, #0 + adds r0, #0x21 + ldrb r0, [r0] + cmp r0, #0 + beq _080558D8 +_080558C0: + ldr r0, _080558D4 @ =gUnknown_08688394 + adds r0, r5, r0 + adds r1, r4, #0 + bl sub_8052F78 + b _080558E2 + .align 2, 0 +_080558CC: .4byte 0x000001FF +_080558D0: .4byte 0x000001A5 +_080558D4: .4byte gUnknown_08688394 +_080558D8: + ldr r0, _08055900 @ =gUnknown_08688394 + adds r0, r5, r0 + adds r1, r4, #0 + bl sub_80530CC +_080558E2: + movs r2, #0x80 + lsls r2, r2, #0xe + adds r7, r7, r2 + adds r6, #0x20 + adds r5, #1 + cmp r5, #3 + ble _0805589A_loop +_080558F0_return: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08055900: .4byte gUnknown_08688394 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/ui__Task_SpecialStageUIMain.inc b/sa1/asm/non_matching/game/stage/ui__Task_SpecialStageUIMain.inc new file mode 100644 index 0000000000..1065f14c26 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/ui__Task_SpecialStageUIMain.inc @@ -0,0 +1,411 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x18 + ldr r0, _08053D64 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + ldr r2, _08053D68 @ =0x03000048 + adds r0, r1, r2 + ldrb r7, [r0] + ldr r4, _08053D6C @ =0x0300004C + adds r1, r1, r4 + movs r2, #0 + ldrsh r0, [r1, r2] + adds r0, #1 + lsls r2, r0, #0x10 + strh r0, [r1] + movs r4, #0x72 + mov sl, r4 @ sl = r4 = 0x72 + lsrs r0, r2, #0x10 + mov sb, r0 @ sb = ui->unk4C++; + asrs r2, r2, #0x10 + adds r1, r2, #0 + subs r1, #0xa + lsls r0, r1, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0x13 + bhi _08053D70 + lsls r0, r1, #6 + movs r1, #0x14 @ 20 + bl Div + mov r1, sp + subs r0, #0x46 + b _08053D84 + .align 2, 0 +_08053D64: .4byte gCurTask +_08053D68: .4byte 0x03000048 +_08053D6C: .4byte 0x0300004C +_08053D70: + cmp r2, #0x1d + ble _08053D80 + mov r1, sp + ldr r0, _08053D7C @ =0x0000FFFA + b _08053D84 + .align 2, 0 +_08053D7C: .4byte 0x0000FFFA +_08053D80: + mov r1, sp + ldr r0, _08053DDC @ =0x0000FFBA +_08053D84: + strh r0, [r1, #0xc] + mov r1, sp @ r1 = overB + movs r4, #0x5a + lsls r4, r4, #0x10 + asrs r0, r4, #0x10 + adds r0, #4 + strh r0, [r1, #0xa] + movs r2, #1 + movs r0, #1 + strh r0, [r1, #0xe] + movs r0, #0x18 + strh r0, [r1, #8] + movs r0, #3 + strh r0, [r1, #0x10] + movs r0, #0xa + strh r0, [r1, #0x12] + mov r0, sp + strb r2, [r0, #0x16] + ldr r0, _08053DE0 @ =gUnknown_0865F178 + bl sub_80530CC + ldr r0, _08053DE4 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 @ r6 = ui + ldr r2, _08053DE8 @ =gSpecialStageCollectedRings + ldrh r1, [r2] + ldr r0, _08053DEC @ =0x000003E7 + mov r8, r4 @ r8 = r4 = 90 + cmp r1, r0 + bls _08053DF0 + movs r0, #0x29 + strb r0, [r6] + strb r0, [r6, #1] + strb r0, [r6, #2] + mov r1, sb + lsls r1, r1, #0x10 + mov sb, r1 + mov r2, sl + lsls r2, r2, #0x10 + mov sl, r2 + b _08053E24 + .align 2, 0 +_08053DDC: .4byte 0x0000FFBA +_08053DE0: .4byte gUnknown_0865F178 +_08053DE4: .4byte gCurTask +_08053DE8: .4byte gSpecialStageCollectedRings +_08053DEC: .4byte 0x000003E7 +_08053DF0: + ldrh r4, [r2] + movs r5, #0 + mov r0, sb + lsls r0, r0, #0x10 + mov sb, r0 + mov r1, sl + lsls r1, r1, #0x10 + mov sl, r1 +_08053E00: + adds r0, r4, #0 + movs r1, #0xa + bl Div + adds r3, r0, #0 + movs r0, #2 + subs r0, r0, r5 + adds r0, r6, r0 + lsls r1, r3, #3 + lsls r2, r3, #1 + adds r1, r1, r2 + subs r1, r4, r1 + adds r1, #0x20 + strb r1, [r0] + adds r4, r3, #0 + adds r5, #1 + cmp r5, #2 + ble _08053E00 +_08053E24: + ldr r0, _08053E54 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r2, _08053E58 @ =0x03000044 + adds r0, r0, r2 + ldr r1, _08053E5C @ =gSpecialStageCollectedRings + ldrh r1, [r1] + strh r1, [r0] + mov r4, sb + asrs r2, r4, #0x10 + adds r1, r2, #0 + subs r1, #0x14 + lsls r0, r1, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0x13 + bhi _08053E60 + lsls r0, r1, #6 + movs r1, #0x14 + bl Div + mov r1, sp + subs r0, #0x40 + b _08053E6E + .align 2, 0 +_08053E54: .4byte gCurTask +_08053E58: .4byte 0x03000044 +_08053E5C: .4byte gSpecialStageCollectedRings +_08053E60: + cmp r2, #0x27 + ble _08053E6A + mov r1, sp + movs r0, #0 + b _08053E6E +_08053E6A: + mov r1, sp + ldr r0, _08053EC4 @ =0x0000FFC0 +_08053E6E: + strh r0, [r1, #0xc] + mov r1, sp + movs r2, #0 + movs r0, #6 + strh r0, [r1, #0x12] + movs r0, #0x10 + strh r0, [r1, #8] + mov r0, sp + strh r2, [r0, #0x10] + movs r3, #1 + strb r3, [r0, #0x16] + ldr r0, _08053EC8 @ =gSpecialStageCollectedRings + ldrh r2, [r0] + cmp r2, #9 + bhi _08053EE2 + mov r0, sp + mov r4, r8 + asrs r1, r4, #0x10 + adds r1, #0xc + strh r1, [r0, #0xa] + strh r3, [r0, #0xe] + cmp r2, #0 + bne _08053ED8 + adds r0, r7, #0 @ r0 = r7 = r7 + adds r1, r0, #1 + lsls r1, r1, #0x18 + lsrs r7, r1, #0x18 + lsrs r0, r0, #3 + ldr r1, _08053ECC @ =gUnknown_0865F174 + adds r0, r0, r1 + mov r1, sp + bl sub_80530CC + movs r0, #0x1f + ands r7, r0 + ldr r0, _08053ED0 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r1, _08053ED4 @ =0x03000048 + adds r0, r0, r1 + strh r7, [r0] + b _08053F10 + .align 2, 0 +_08053EC4: .4byte 0x0000FFC0 +_08053EC8: .4byte gSpecialStageCollectedRings +_08053ECC: .4byte gUnknown_0865F174 +_08053ED0: .4byte gCurTask +_08053ED4: .4byte 0x03000048 +_08053ED8: + adds r0, r6, #2 + mov r1, sp + bl sub_80530CC + b _08053F10 +_08053EE2: + cmp r2, #0x63 + bhi _08053EFC + mov r1, sp + mov r2, r8 + asrs r0, r2, #0x10 + adds r0, #8 + strh r0, [r1, #0xa] + movs r0, #2 + strh r0, [r1, #0xe] + adds r0, r6, #1 + bl sub_80530CC + b _08053F10 +_08053EFC: + mov r1, sp + mov r4, r8 + asrs r0, r4, #0x10 + adds r0, #4 + strh r0, [r1, #0xa] + movs r0, #3 + strh r0, [r1, #0xe] + adds r0, r6, #0 + bl sub_80530CC +_08053F10: + ldr r0, _08053F30 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r1, _08053F34 @ =0x03000010 + adds r6, r0, r1 + ldr r2, _08053F38 @ =gSpecialStageTargetRings + ldrh r1, [r2] + ldr r0, _08053F3C @ =0x000003E7 + cmp r1, r0 + bls _08053F40 + movs r0, #0x29 + strb r0, [r6] + strb r0, [r6, #1] + strb r0, [r6, #2] + b _08053F68 + .align 2, 0 +_08053F30: .4byte gCurTask +_08053F34: .4byte 0x03000010 +_08053F38: .4byte gSpecialStageTargetRings +_08053F3C: .4byte 0x000003E7 +_08053F40: + ldrh r4, [r2] + movs r5, #0 +_08053F44: + adds r0, r4, #0 + movs r1, #0xa + bl Div + adds r3, r0, #0 + movs r0, #2 + subs r0, r0, r5 + adds r0, r6, r0 + lsls r1, r3, #3 + lsls r2, r3, #1 + adds r1, r1, r2 + subs r1, r4, r1 + adds r1, #0x20 + strb r1, [r0] + adds r4, r3, #0 + adds r5, #1 + cmp r5, #2 + ble _08053F44 +_08053F68: + ldr r0, _08053F98 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r2, _08053F9C @ =0x03000044 + adds r0, r0, r2 + ldr r1, _08053FA0 @ =gSpecialStageTargetRings + ldrh r1, [r1] + strh r1, [r0] + mov r4, sb + asrs r2, r4, #0x10 + adds r1, r2, #0 + subs r1, #0xf + lsls r0, r1, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0x13 + bhi _08053FA4 + lsls r0, r1, #6 + movs r1, #0x14 + bl Div + mov r1, sp + subs r0, #0x34 + b _08053FB2 + .align 2, 0 +_08053F98: .4byte gCurTask +_08053F9C: .4byte 0x03000044 +_08053FA0: .4byte gSpecialStageTargetRings +_08053FA4: + cmp r2, #0x22 + ble _08053FAE + mov r1, sp + movs r0, #0xc + b _08053FB2 +_08053FAE: + mov r1, sp + ldr r0, _0805400C @ =0x0000FFCC +_08053FB2: + strh r0, [r1, #0xc] + mov r1, sp + movs r2, #0 + movs r0, #6 + strh r0, [r1, #0x12] + movs r0, #0x10 + strh r0, [r1, #8] + mov r0, sp + strh r2, [r0, #0x10] + movs r3, #1 + strb r3, [r0, #0x16] + ldr r0, _08054010 @ =gSpecialStageTargetRings + ldrh r2, [r0] + cmp r2, #9 + bhi _0805402A + mov r0, sp + mov r4, sl + asrs r1, r4, #0x10 + adds r1, #0xc + strh r1, [r0, #0xa] + strh r3, [r0, #0xe] + cmp r2, #0 + bne _08054020 + adds r0, r7, #0 + adds r1, r0, #1 + lsls r1, r1, #0x18 + lsrs r7, r1, #0x18 + lsrs r0, r0, #3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + ldr r1, _08054014 @ =gUnknown_0865F174 + adds r0, r0, r1 + mov r1, sp + bl sub_80530CC + movs r0, #0x1f + ands r7, r0 + ldr r0, _08054018 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r1, _0805401C @ =0x03000048 + adds r0, r0, r1 + strh r7, [r0] + b _08054058 + .align 2, 0 +_0805400C: .4byte 0x0000FFCC +_08054010: .4byte gSpecialStageTargetRings +_08054014: .4byte gUnknown_0865F174 +_08054018: .4byte gCurTask +_0805401C: .4byte 0x03000048 +_08054020: + adds r0, r6, #2 + mov r1, sp + bl sub_80530CC + b _08054058 +_0805402A: + cmp r2, #0x63 + bhi _08054044 + mov r1, sp + mov r2, sl + asrs r0, r2, #0x10 + adds r0, #8 + strh r0, [r1, #0xa] + movs r0, #2 + strh r0, [r1, #0xe] + adds r0, r6, #1 + bl sub_80530CC + b _08054058 +_08054044: + mov r1, sp + mov r4, sl + asrs r0, r4, #0x10 + adds r0, #4 + strh r0, [r1, #0xa] + movs r0, #3 + strh r0, [r1, #0xe] + adds r0, r6, #0 + bl sub_80530CC +_08054058: + add sp, #0x18 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/ui__Task_StageUIMain.inc b/sa1/asm/non_matching/game/stage/ui__Task_StageUIMain.inc new file mode 100644 index 0000000000..39aeb2a8f8 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/ui__Task_StageUIMain.inc @@ -0,0 +1,223 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, lr} + sub sp, #0x18 + mov r1, sp + ldr r0, _08053758 @ =0x0000FFFE + strh r0, [r1, #0xa] + adds r0, #1 + strh r0, [r1, #0xc] + mov r0, sp + movs r2, #1 + movs r5, #1 + strh r5, [r0, #0xe] + movs r0, #0x18 + strh r0, [r1, #8] + movs r0, #3 + strh r0, [r1, #0x10] + movs r0, #6 + strh r0, [r1, #0x12] + mov r0, sp + strb r2, [r0, #0x16] + ldr r4, _0805375C @ =gUnknown_0865F178 + adds r0, r4, #0 + bl sub_80530CC + ldr r0, _08053760 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08053738 + mov r1, sp + movs r0, #0x90 + strh r0, [r1, #0xc] + movs r0, #2 + strh r0, [r1, #0xa] + mov r0, sp + strh r5, [r0, #0x10] + ldr r0, _08053764 @ =gSelectedCharacter + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + strh r0, [r1, #0x12] + adds r0, r4, #0 + bl sub_80530CC +_08053738: + ldr r0, _08053768 @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r6, r1, r0 @ r6 = ui + ldr r2, _0805376C @ =gRingCount + ldrh r1, [r2] + ldr r0, _08053770 @ =0x000003E7 + cmp r1, r0 + bls _08053774 + movs r0, #0x29 + strb r0, [r6] + strb r0, [r6, #1] + strb r0, [r6, #2] + b _0805379C + .align 2, 0 +_08053758: .4byte 0x0000FFFE +_0805375C: .4byte gUnknown_0865F178 +_08053760: .4byte gGameMode +_08053764: .4byte gSelectedCharacter +_08053768: .4byte gCurTask +_0805376C: .4byte gRingCount +_08053770: .4byte 0x000003E7 +_08053774: + ldrh r4, [r2] + movs r5, #0 +_08053778: + adds r0, r4, #0 + movs r1, #0xa + bl Div + adds r3, r0, #0 + movs r0, #2 + subs r0, r0, r5 + adds r0, r6, r0 + lsls r1, r3, #3 + lsls r2, r3, #1 + adds r1, r1, r2 + subs r1, r4, r1 + adds r1, #0x20 + strb r1, [r0] + adds r4, r3, #0 + adds r5, #1 + cmp r5, #2 + ble _08053778 +_0805379C: + ldr r2, _08053800 @ =gCurTask + ldr r0, [r2] + ldrh r0, [r0, #6] + ldr r1, _08053804 @ =0x03000044 + adds r0, r0, r1 + ldr r1, _08053808 @ =gRingCount + ldrh r1, [r1] + strh r1, [r0] @ ui->ringCount = gRingCount; + ldr r0, [r2] + ldrh r0, [r0, #6] + ldr r1, _0805380C @ =0x03000010 + adds r6, r0, r1 + movs r0, #0 + strb r0, [r6, #9] @ ui->unk10[ARRAY_COUNT(ui->unk10) - 1] = 0; + ldr r0, _08053810 @ =gLevelScore + ldr r4, [r0] + movs r5, #8 +_080537BE: + adds r0, r4, #0 + movs r1, #0xa + bl Div + adds r3, r0, #0 + adds r0, r6, r5 + lsls r1, r3, #3 + lsls r2, r3, #1 + adds r1, r1, r2 + subs r1, r4, r1 + adds r1, #0x20 + strb r1, [r0] + adds r4, r3, #0 + subs r5, #1 + cmp r5, #0 + bge _080537BE + ldr r0, _08053814 @ =gCourseTime + ldr r0, [r0] + bl StageUI_DrawTimer + ldr r0, _08053800 @ =gCurTask + ldr r0, [r0] + ldrh r0, [r0, #6] + ldr r1, _08053818 @ =0x03000030 + adds r6, r0, r1 @ r6 = + ldr r0, _0805381C @ =gNumLives + ldrb r0, [r0] + adds r1, r0, #0 + cmp r1, #9 + bls _08053820 + movs r0, #0x29 + b _0805382A + .align 2, 0 +_08053800: .4byte gCurTask +_08053804: .4byte 0x03000044 +_08053808: .4byte gRingCount +_0805380C: .4byte 0x03000010 +_08053810: .4byte gLevelScore +_08053814: .4byte gCourseTime +_08053818: .4byte 0x03000030 +_0805381C: .4byte gNumLives +_08053820: + cmp r1, #0 + beq _08053828 + adds r0, #0x1f + b _0805382A +_08053828: + movs r0, #0x20 +_0805382A: + strb r0, [r6] + bl sub_8053BAC + ldr r0, _08053870 @ =gLoadedSaveGame + ldrb r0, [r0, #0x1b] + cmp r0, #1 + bne _08053840 + ldr r0, _08053874 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + beq _080538A8 +_08053840: + ldr r0, _08053878 @ =gStageFlags + ldrh r1, [r0] + movs r0, #4 + ands r0, r1 + cmp r0, #0 + beq _08053884 + ldr r4, _0805387C @ =gCourseTime + ldr r1, [r4] + ldr r0, _08053880 @ =0x000004AF + cmp r1, r0 + bhi _080538A8 + adds r0, r1, #0 + movs r1, #0x3c + bl Mod + cmp r0, #0 + bne _080538A8 + ldr r0, [r4] + cmp r0, #0 + beq _080538A8 + movs r0, #0x8b + bl m4aSongNumStart + b _080538A8 + .align 2, 0 +_08053870: .4byte gLoadedSaveGame +_08053874: .4byte gGameMode +_08053878: .4byte gStageFlags +_0805387C: .4byte gCourseTime +_08053880: .4byte 0x000004AF +_08053884: + ldr r4, _080538B0 @ =gCourseTime + ldr r1, [r4] + ldr r0, _080538B4 @ =0x000087F0 + cmp r1, r0 + bls _080538A8 + adds r0, r1, #0 + movs r1, #0x3c + bl Mod + cmp r0, #0 + bne _080538A8 + ldr r1, [r4] + ldr r0, _080538B8 @ =0x00008C9F + cmp r1, r0 + bhi _080538A8 + movs r0, #0x8b + bl m4aSongNumStart +_080538A8: + add sp, #0x18 + pop {r4, r5, r6} + pop {r0} + bx r0 + .align 2, 0 +_080538B0: .4byte gCourseTime +_080538B4: .4byte 0x000087F0 +_080538B8: .4byte 0x00008C9F + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/ui__sub_8053BAC.inc b/sa1/asm/non_matching/game/stage/ui__sub_8053BAC.inc new file mode 100644 index 0000000000..712d8e8186 --- /dev/null +++ b/sa1/asm/non_matching/game/stage/ui__sub_8053BAC.inc @@ -0,0 +1,184 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #0x18 + ldr r0, _08053C24 @ =gCurTask + mov sb, r0 + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r5, r4, r0 @ r5 = ui + ldr r1, _08053C28 @ =0x03000048 + mov r8, r1 @ r8 = 0x03000048 + adds r0, r4, r1 + ldrb r0, [r0] + lsls r6, r0, #0x18 @ r6 = ui->unk48 << 24 + lsrs r7, r6, #0x18 @ r7 = r7 = ui->unk48 + mov r0, sp + movs r2, #0 + movs r1, #5 @ r1 = 5 + mov ip, r1 @ ip = r1 = 5 + mov r1, ip @ r1 = 5 + strh r1, [r0, #0xc] + mov r1, sp + movs r0, #6 + strh r0, [r1, #0x12] + movs r0, #0x10 + strh r0, [r1, #8] + mov r0, sp + strh r2, [r0, #0x10] + movs r3, #1 + strb r3, [r0, #0x16] + ldr r0, _08053C2C @ =gRingCount + ldrh r2, [r0] + cmp r2, #9 + bhi _08053C3C + mov r0, sp + movs r1, #9 + strh r1, [r0, #0xa] + strh r3, [r0, #0xe] + cmp r2, #0 + bne _08053C34 + adds r4, r7, #1 + lsls r4, r4, #0x18 + lsrs r4, r4, #0x18 + lsrs r0, r6, #0x1b + ldr r1, _08053C30 @ =gUnknown_0865F174 + adds r0, r0, r1 + mov r1, sp + bl sub_80530CC + movs r0, #0x1f + ands r4, r0 + mov r1, sb + ldr r0, [r1] + ldrh r0, [r0, #6] + add r0, r8 + strh r4, [r0] + b _08053C6C + .align 2, 0 +_08053C24: .4byte gCurTask +_08053C28: .4byte 0x03000048 +_08053C2C: .4byte gRingCount +_08053C30: .4byte gUnknown_0865F174 +_08053C34: + ldr r1, _08053C38 @ =0x03000002 + b _08053C4E + .align 2, 0 +_08053C38: .4byte 0x03000002 +_08053C3C: + cmp r2, #0x63 + bhi _08053C5C + mov r0, sp + mov r1, ip @ r1 = ip = 5 + strh r1, [r0, #0xa] + mov r1, sp + movs r0, #2 + strh r0, [r1, #0xe] + ldr r1, _08053C58 @ =0x03000001 +_08053C4E: + adds r0, r4, r1 + mov r1, sp + bl sub_80530CC + b _08053C6C + .align 2, 0 +_08053C58: .4byte 0x03000001 +_08053C5C: + mov r0, sp + strh r3, [r0, #0xa] + mov r1, sp + movs r0, #3 + strh r0, [r1, #0xe] + adds r0, r5, #0 + bl sub_80530CC +_08053C6C: + adds r5, #0x10 + mov r0, sp + ldr r1, _08053CB4 @ =0x0000FFFE + strh r1, [r0, #0xc] + movs r3, #0 + ldrb r0, [r5] + ldr r1, _08053CB8 @ =gLevelScore + cmp r0, #0x20 + bne _08053C90 +_08053C7E: + adds r0, r3, #1 + lsls r0, r0, #0x18 + lsrs r3, r0, #0x18 + cmp r3, #9 + bhi _08053C90 + adds r0, r5, r3 + ldrb r0, [r0] + cmp r0, #0x20 + beq _08053C7E +_08053C90: + ldr r0, [r1] + cmp r0, #0 + beq _08053CBC + mov r0, sp + movs r1, #9 + subs r1, r1, r3 + strh r1, [r0, #0xe] + mov r2, sp + lsls r1, r1, #3 + movs r0, #0x51 + subs r0, r0, r1 + strh r0, [r2, #0xa] + adds r0, r5, r3 + mov r1, sp + bl sub_80530CC + b _08053CCC + .align 2, 0 +_08053CB4: .4byte 0x0000FFFE +_08053CB8: .4byte gLevelScore +_08053CBC: + mov r1, sp + movs r0, #1 + strh r0, [r1, #0xe] + movs r0, #0x49 + strh r0, [r1, #0xa] + ldr r0, _08053D10 @ =gUnknown_0865F178 + bl sub_80530CC +_08053CCC: + adds r5, #0x10 + mov r1, sp + movs r0, #0x19 + strh r0, [r1, #0xa] + movs r0, #0xc + strh r0, [r1, #0xc] + movs r0, #7 + strh r0, [r1, #0xe] + adds r0, r5, #0 + bl sub_80530CC + ldr r0, _08053D14 @ =gGameMode + ldrb r0, [r0] + cmp r0, #0 + bne _08053D00 + adds r5, #0x10 + mov r1, sp + movs r0, #0x16 + strh r0, [r1, #0xa] + movs r0, #0x8f + strh r0, [r1, #0xc] + movs r0, #1 + strh r0, [r1, #0xe] + adds r0, r5, #0 + bl sub_80530CC +_08053D00: + add sp, #0x18 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08053D10: .4byte gUnknown_0865F178 +_08053D14: .4byte gGameMode + +.syntax divided diff --git a/sa1/asm/non_matching/game/stage/ui__sub_80550F8.inc b/sa1/asm/non_matching/game/stage/ui__sub_80550F8.inc new file mode 100644 index 0000000000..6fb4ce6e1a --- /dev/null +++ b/sa1/asm/non_matching/game/stage/ui__sub_80550F8.inc @@ -0,0 +1,401 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x30 + ldr r2, _0805512C @ =gCurrentLevel + ldrb r1, [r2] + movs r3, #0 + ldrsb r3, [r2, r3] + cmp r3, #0xc + bgt _08055164 + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08055164 + ldr r0, _08055130 @ =sa2__gUnknown_030054B0 + ldrb r1, [r0] + adds r0, r3, #0 + cmp r1, r0 + beq _08055164 + cmp r3, #0xd + beq _08055164 + movs r4, #0 + ldr r5, _08055134 @ =0x0000042A + b _08055150 + .align 2, 0 +_0805512C: .4byte gCurrentLevel +_08055130: .4byte sa2__gUnknown_030054B0 +_08055134: .4byte 0x0000042A +_08055138: + strh r5, [r2] + lsls r0, r4, #5 + ldr r3, _080552A8 @ =0xFFFF8000 + adds r1, r3, #0 + adds r0, r0, r1 + strh r0, [r2, #2] + movs r0, #0xc1 + lsls r0, r0, #7 + strh r0, [r2, #4] + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 +_08055150: + cmp r4, #7 + bhi _08055164 + movs r0, #1 + bl OamMalloc + adds r2, r0, #0 + ldr r0, _080552AC @ =iwram_end + ldr r0, [r0] + cmp r0, r2 + bne _08055138 +_08055164: + bl sub_80535FC + bl UiGfxStackInit + ldr r0, _080552B0 @ =Task_8055730 + ldr r1, _080552B4 @ =TaskDestructor_8055C38 + str r1, [sp] + movs r1, #0x24 + ldr r2, _080552B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0x20] @ sp20 = t0 + ldrh r4, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r7, r4, r2 @ r7 = Strc_Ui_24* + movs r5, #0 + strh r5, [r7, #0x18] + ldr r3, _080552BC @ =0x03000020 + adds r0, r4, r3 + movs r1, #1 + strb r1, [r0] + strh r5, [r7, #0x1a] + ldr r0, _080552C0 @ =0x0000FFB0 + strh r0, [r7, #0xa] + strh r5, [r7, #0xc] + movs r0, #3 + strh r0, [r7, #0xe] + movs r0, #0x18 + strh r0, [r7, #8] + movs r2, #6 + strh r2, [r7, #0x10] + movs r3, #0 + strb r3, [r7, #0x16] + movs r0, #0xf + mov sl, r0 + mov r1, sl + strh r1, [r7, #0x12] + movs r0, #5 + strh r0, [r7, #0x14] + movs r0, #0x20 + bl VramMalloc + str r0, [r7, #0x1c] + str r0, [sp, #8] @ sp08 = vram0 + ldr r2, _080552C4 @ =0x03000021 + adds r4, r4, r2 + movs r3, #0 + strb r3, [r4] @ --- 0 + ldr r0, _080552C8 @ =Task_8055798 + str r5, [sp] + movs r1, #0x24 + ldr r2, _080552B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0x24] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r7, r1, r0 + strh r5, [r7, #0x18] + ldr r2, _080552BC @ =0x03000020 + adds r0, r1, r2 + movs r3, #0 + strb r3, [r0] + movs r0, #1 + strh r0, [r7, #0x1a] + movs r0, #0x14 + strh r0, [r7, #0xa] + movs r2, #1 + strh r2, [r7, #0xe] + movs r0, #7 + strh r0, [r7, #0x10] + mov r3, sl + strh r3, [r7, #0x12] + movs r0, #1 + strb r0, [r7, #0x16] + movs r0, #0x10 + strh r0, [r7, #8] + ldr r2, _080552C4 @ =0x03000021 + adds r1, r1, r2 + movs r3, #0 + strb r3, [r1] + ldr r0, _080552CC @ =Task_8055904 + ldr r1, _080552B4 @ =TaskDestructor_8055C38 + str r1, [sp] + movs r1, #0x24 + ldr r2, _080552B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0x18] + ldrh r4, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r7, r4, r2 + strh r5, [r7, #0x18] + ldr r3, _080552BC @ =0x03000020 + adds r0, r4, r3 + movs r1, #1 + strb r1, [r0] + strh r5, [r7, #0x1a] + movs r0, #0xb4 + strh r0, [r7, #0xa] + movs r0, #0xa0 + strh r0, [r7, #0xc] + movs r2, #6 + strh r2, [r7, #0xe] + movs r0, #0xa + strh r0, [r7, #0x10] + strh r2, [r7, #0x12] + strb r1, [r7, #0x16] + strh r5, [r7, #8] + movs r0, #0xc + bl VramMalloc + str r0, [r7, #0x1c] + str r0, [sp, #0x14] + ldr r3, _080552C4 @ =0x03000021 + adds r4, r4, r3 + movs r0, #0 + strb r0, [r4] + ldr r0, _080552D0 @ =Task_8055998 + ldr r1, _080552B4 @ =TaskDestructor_8055C38 + str r1, [sp] + movs r1, #0x24 + ldr r2, _080552B8 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0x1c] + ldrh r0, [r0, #6] + movs r2, #0xc0 + lsls r2, r2, #0x12 + adds r7, r0, r2 + strh r5, [r7, #0x18] + ldr r3, _080552BC @ =0x03000020 + adds r0, r0, r3 + movs r1, #1 + strb r1, [r0] + strh r5, [r7, #0x1a] + ldr r3, _080552D4 @ =gCurrentLevel + ldrb r2, [r3] + movs r0, #1 + ands r0, r2 + cmp r0, #0 + beq _080552E0 + ldr r0, _080552D8 @ =sa2__gUnknown_030054B0 + ldrb r1, [r0] + movs r0, #0 + ldrsb r0, [r3, r0] + cmp r1, r0 + beq _080552E0 + cmp r2, #0xd + beq _080552E0 + ldr r0, _080552DC @ =0x0000FFF0 + strh r0, [r7, #0xa] + movs r0, #0x2a + b _080552E6 + .align 2, 0 +_080552A8: .4byte 0xFFFF8000 +_080552AC: .4byte iwram_end +_080552B0: .4byte Task_8055730 +_080552B4: .4byte TaskDestructor_8055C38 +_080552B8: .4byte 0x00002120 +_080552BC: .4byte 0x03000020 +_080552C0: .4byte 0x0000FFB0 +_080552C4: .4byte 0x03000021 +_080552C8: .4byte Task_8055798 +_080552CC: .4byte Task_8055904 +_080552D0: .4byte Task_8055998 +_080552D4: .4byte gCurrentLevel +_080552D8: .4byte sa2__gUnknown_030054B0 +_080552DC: .4byte 0x0000FFF0 +_080552E0: + movs r0, #0xf0 + strh r0, [r7, #0xa] + movs r0, #0x7e +_080552E6: + strh r0, [r7, #0xc] + movs r0, #8 + strh r0, [r7, #0xe] + strh r0, [r7, #0x10] + movs r1, #6 + strh r1, [r7, #0x12] + movs r2, #1 + strb r2, [r7, #0x16] + strh r0, [r7, #8] + movs r0, #0x10 + bl VramMalloc + str r0, [r7, #0x1c] + str r0, [sp, #4] + adds r0, r7, #0 + adds r0, #0x21 + movs r3, #0 + strb r3, [r0] + ldr r0, _08055430 @ =Task_8055AA0 + ldr r1, _08055434 @ =TaskDestructor_8055C38 + mov sb, r1 + str r1, [sp] + movs r1, #0x24 + ldr r2, _08055438 @ =0x00002120 + movs r3, #0 + bl TaskCreate + str r0, [sp, #0x28] + ldrh r5, [r0, #6] + movs r4, #0xc0 + lsls r4, r4, #0x12 + adds r7, r5, r4 + movs r2, #0 + strh r2, [r7, #0x18] + ldr r3, _0805543C @ =0x03000020 + adds r0, r5, r3 + movs r1, #1 + strb r1, [r0] + strh r2, [r7, #0x1a] + movs r0, #0xb4 + lsls r0, r0, #1 + strh r0, [r7, #0xa] + movs r0, #0x72 + strh r0, [r7, #0xc] + movs r0, #4 + strh r0, [r7, #0xe] + movs r2, #9 + strh r2, [r7, #0x10] + movs r3, #6 + strh r3, [r7, #0x12] + strb r1, [r7, #0x16] + movs r0, #0 + strh r0, [r7, #8] + movs r0, #0x10 + bl VramMalloc + str r0, [r7, #0x1c] + str r0, [sp, #0xc] + ldr r1, _08055440 @ =0x03000021 + adds r5, r5, r1 + movs r2, #0 + strb r2, [r5] + ldr r0, _08055444 @ =Task_8055B18 + mov r3, sb + str r3, [sp] + movs r1, #0x24 + ldr r2, _08055438 @ =0x00002120 + movs r3, #0 + bl TaskCreate + adds r6, r0, #0 + ldrh r5, [r6, #6] + adds r7, r5, r4 + movs r0, #0 + strh r0, [r7, #0x18] + ldr r1, _0805543C @ =0x03000020 + adds r0, r5, r1 + movs r2, #1 + strb r2, [r0] + movs r3, #0 + strh r3, [r7, #0x1a] + movs r0, #0x80 + lsls r0, r0, #1 + strh r0, [r7, #0xa] + movs r0, #0x80 + strh r0, [r7, #0xc] + movs r0, #9 + strh r0, [r7, #0xe] + movs r1, #2 + mov r8, r1 + mov r2, r8 + strh r2, [r7, #0x10] + movs r3, #6 + strh r3, [r7, #0x12] + movs r0, #1 + strb r0, [r7, #0x16] + movs r1, #0 + strh r1, [r7, #8] + movs r0, #0x38 + bl VramMalloc + str r0, [r7, #0x1c] + str r0, [sp, #0x10] + ldr r2, _08055440 @ =0x03000021 + adds r5, r5, r2 + movs r3, #0 + strb r3, [r5] + ldr r0, _08055448 @ =Task_8055458 + movs r2, #0x84 + lsls r2, r2, #6 + ldr r1, _0805544C @ =TaskDestructor_StrcUI28_8055C4C + str r1, [sp] + movs r1, #0x28 @ sizeof(Struct_sub_80550F8) + movs r3, #0 + bl TaskCreate + adds r5, r0, #0 + ldrh r1, [r5, #6] + adds r4, r1, r4 + movs r0, #0 + strh r0, [r4, #0x24] + ldr r2, _08055450 @ =0x03000026 + adds r0, r1, r2 + movs r3, #1 + strb r3, [r0] + ldr r0, [sp, #0x20] @ r0 = t0 + str r0, [r4, #0xc] + ldr r2, [sp, #0x24] + str r2, [r4, #0x10] + ldr r3, [sp, #0x1c] + str r3, [r4, #0x14] + ldr r0, [sp, #0x28] + str r0, [r4, #0x18] + ldr r2, [sp, #0x18] + str r2, [r4, #0x1c] + str r6, [r4, #0x20] + movs r3, #0 + strh r3, [r4] + strh r3, [r4, #2] + mov r0, r8 + strh r0, [r4, #4] + strh r3, [r4, #6] + movs r0, #0x60 + strh r0, [r4, #8] + movs r2, #1 + strb r2, [r4, #0xa] + ldr r3, _08055454 @ =0x03000027 + adds r1, r1, r3 + movs r0, #0 + strb r0, [r1] + add r0, sp, #4 + bl LoadStageIntroGraphics + adds r0, r4, #0 + bl sub_805423C + adds r0, r5, #0 + add sp, #0x30 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + .align 2, 0 +_08055430: .4byte Task_8055AA0 +_08055434: .4byte TaskDestructor_8055C38 +_08055438: .4byte 0x00002120 +_0805543C: .4byte 0x03000020 +_08055440: .4byte 0x03000021 +_08055444: .4byte Task_8055B18 +_08055448: .4byte Task_8055458 +_0805544C: .4byte TaskDestructor_StrcUI28_8055C4C +_08055450: .4byte 0x03000026 +_08055454: .4byte 0x03000027 + +.syntax divided diff --git a/sa1/asm/non_matching/game/time_attack_record__sub_8061144.inc b/sa1/asm/non_matching/game/time_attack_record__sub_8061144.inc new file mode 100644 index 0000000000..e65cfb11e5 --- /dev/null +++ b/sa1/asm/non_matching/game/time_attack_record__sub_8061144.inc @@ -0,0 +1,308 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + movs r7, #0 + movs r0, #0 + str r0, [sp] + ldr r0, _080611E0 @ =gCurTask + ldr r0, [r0] + ldrh r4, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r6, r4, r1 + ldr r2, _080611E4 @ =0x030000CC + adds r0, r4, r2 + ldr r0, [r0] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov r8, r0 + ldr r3, _080611E8 @ =0x030000D0 + adds r0, r4, r3 + ldr r0, [r0] + ldrh r0, [r0, #6] + adds r0, r0, r1 + mov sl, r0 + ldr r0, _080611EC @ =0x030000D8 + adds r2, r4, r0 + ldr r1, [r2] + adds r3, #4 + adds r0, r4, r3 + ldr r3, [r0] + mov sb, r3 + movs r3, #1 + add sb, r3 + mov r3, sb + str r3, [r0] + mov r0, r8 + str r3, [r0, #0x48] + mov r0, sl + str r3, [r0, #0x48] + str r1, [r2] + mov r2, r8 + str r1, [r2, #0x4c] + str r1, [r0, #0x4c] + ldr r3, _080611F0 @ =0x030000DE + adds r5, r4, r3 + ldrh r0, [r5] + cmp r0, #0 + bne _0806126C + ldr r0, _080611F4 @ =gRepeatedKeys + ldrh r1, [r0] + movs r0, #0x10 + ands r0, r1 + cmp r0, #0 + beq _08061200 + movs r0, #0x6c + bl m4aSongNumStart + movs r0, #2 + strb r0, [r5] + ldr r0, _080611F8 @ =0x030000DC + adds r2, r4, r0 + ldrb r1, [r2] + ldr r3, _080611FC @ =0x030000DD + adds r0, r4, r3 + strb r1, [r0] + ldrb r0, [r2] + adds r0, #1 + movs r1, #3 + ands r0, r1 + strb r0, [r2] + movs r0, #0x6c + bl m4aSongNumStart + b _0806122E + .align 2, 0 +_080611E0: .4byte gCurTask +_080611E4: .4byte 0x030000CC +_080611E8: .4byte 0x030000D0 +_080611EC: .4byte 0x030000D8 +_080611F0: .4byte 0x030000DE +_080611F4: .4byte gRepeatedKeys +_080611F8: .4byte 0x030000DC +_080611FC: .4byte 0x030000DD +_08061200: + movs r0, #0x20 + ands r0, r1 + cmp r0, #0 + beq _0806122E + movs r0, #0x6c + bl m4aSongNumStart + movs r0, #2 + strb r0, [r5] + ldr r0, _08061260 @ =0x030000DC + adds r2, r4, r0 + ldrb r1, [r2] + ldr r3, _08061264 @ =0x030000DD + adds r0, r4, r3 + strb r1, [r0] + ldrb r0, [r2] + subs r0, #1 + movs r1, #3 + ands r0, r1 + strb r0, [r2] + movs r0, #0x6c + bl m4aSongNumStart +_0806122E: + ldr r0, _08061268 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #2 + ands r0, r1 + adds r4, r6, #0 + adds r4, #0xdf + cmp r0, #0 + beq _0806127A + movs r0, #0x6b + bl m4aSongNumStart + movs r0, #1 + strb r0, [r4] + strh r0, [r6, #4] + ldrh r1, [r6, #6] + movs r2, #0x80 + lsls r2, r2, #6 + adds r0, r2, #0 + subs r0, r0, r1 + strh r0, [r6, #6] + movs r0, #0x6b + bl m4aSongNumStart + b _0806127A + .align 2, 0 +_08061260: .4byte 0x030000DC +_08061264: .4byte 0x030000DD +_08061268: .4byte gPressedKeys +_0806126C: + ldrb r0, [r5] + ldr r3, _0806131C @ =0x030000DF + adds r4, r4, r3 + cmp r0, #0 + beq _0806127A + subs r0, #1 + strb r0, [r5] +_0806127A: + adds r0, r6, #0 + bl sub_805423C + adds r2, r6, #0 + adds r2, #0xde + ldrb r0, [r2] + mov r1, r8 + adds r1, #0x52 + movs r5, #0 + strb r0, [r1] + ldrb r0, [r2] + mov r1, sl + adds r1, #0x52 + strb r0, [r1] + adds r3, r6, #0 + adds r3, #0xdd + ldrb r0, [r3] + mov r1, r8 + adds r1, #0x51 + strb r0, [r1] + subs r2, #2 + ldrb r1, [r2] + mov r0, r8 + adds r0, #0x50 + strb r1, [r0] + ldrb r0, [r3] + mov r1, sl + adds r1, #0x51 + strb r0, [r1] + ldrb r1, [r2] + mov r0, sl + adds r0, #0x50 + strb r1, [r0] + ldrb r0, [r4] + cmp r0, #0 + beq _08061334 + movs r0, #6 + ldrsh r1, [r6, r0] + movs r0, #0xc0 + lsls r0, r0, #5 + cmp r1, r0 + ble _08061334 + movs r1, #4 + ldrsh r0, [r6, r1] + cmp r0, #1 + bne _08061334 + ldr r2, _08061320 @ =gFlags + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + movs r0, #0xa + bl m4aSongNumStop + ldr r2, _08061324 @ =gDispCnt + ldrh r1, [r2] + ldr r0, _08061328 @ =0x00001FFF + ands r0, r1 + strh r0, [r2] + ldr r0, _0806132C @ =gBldRegs + strh r5, [r0] + strh r5, [r0, #4] + adds r0, r6, #0 + adds r0, #0xcc + ldr r0, [r0] + bl TaskDestroy + adds r0, r6, #0 + adds r0, #0xd0 + ldr r0, [r0] + bl TaskDestroy + ldr r0, _08061330 @ =gCurTask + ldr r0, [r0] + bl TaskDestroy + movs r0, #1 + bl CreateCourseSelect + b _080613A8 + .align 2, 0 +_0806131C: .4byte 0x030000DF +_08061320: .4byte gFlags +_08061324: .4byte gDispCnt +_08061328: .4byte 0x00001FFF +_0806132C: .4byte gBldRegs +_08061330: .4byte gCurTask +_08061334: + movs r0, #0xff + mov r3, sb + ands r3, r0 + ldr r1, _080613B8 @ =gFlags + ldr r0, [r1] + movs r2, #4 + orrs r0, r2 + str r0, [r1] + ldr r1, _080613BC @ =gHBlankCopyTarget + ldr r0, _080613C0 @ =0x04000010 + str r0, [r1] + ldr r0, _080613C4 @ =gHBlankCopySize + strb r2, [r0] + ldr r0, _080613C8 @ =gBgOffsetsHBlankPrimary + lsls r1, r7, #2 + ldr r0, [r0] + adds r2, r0, r1 + cmp r7, #0xa0 + bhs _080613A4 +_0806135A: + movs r1, #0 + ldr r6, [sp] + lsls r5, r6, #0x18 + lsls r4, r3, #0x10 + cmp r7, #0xa0 + bhs _0806138C + adds r3, #0 + ldr r6, _080613CC @ =0x000001FF + adds r0, r6, #0 + ands r3, r0 +_0806136E: + strh r3, [r2] + adds r2, #2 + movs r0, #0 + strh r0, [r2] + adds r2, #2 + adds r0, r7, #1 + lsls r0, r0, #0x18 + lsrs r7, r0, #0x18 + adds r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + cmp r1, #0x17 + bhi _0806138C + cmp r7, #0xa0 + blo _0806136E +_0806138C: + asrs r1, r5, #0x18 + asrs r0, r4, #0x10 + adds r0, r0, r1 + rsbs r0, r0, #0 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + rsbs r1, r1, #0 + lsls r1, r1, #0x18 + lsrs r1, r1, #0x18 + str r1, [sp] + cmp r7, #0xa0 + blo _0806135A +_080613A4: + bl sub_80613D0 +_080613A8: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_080613B8: .4byte gFlags +_080613BC: .4byte gHBlankCopyTarget +_080613C0: .4byte 0x04000010 +_080613C4: .4byte gHBlankCopySize +_080613C8: .4byte gBgOffsetsHBlankPrimary +_080613CC: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/time_attack_record__sub_8061480.inc b/sa1/asm/non_matching/game/time_attack_record__sub_8061480.inc new file mode 100644 index 0000000000..7df512a112 --- /dev/null +++ b/sa1/asm/non_matching/game/time_attack_record__sub_8061480.inc @@ -0,0 +1,449 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x4c + ldr r0, _080614AC @ =gCurTask + ldr r0, [r0] + ldrh r1, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r1, r0 + str r0, [sp, #0x38] + ldr r2, _080614B0 @ =0x03000052 + adds r0, r1, r2 + ldrb r0, [r0] + cmp r0, #1 + bhi _080614B8 + ldr r3, _080614B4 @ =0x03000050 + adds r0, r1, r3 + b _080614BC + .align 2, 0 +_080614AC: .4byte gCurTask +_080614B0: .4byte 0x03000052 +_080614B4: .4byte 0x03000050 +_080614B8: + ldr r2, _08061554 @ =0x03000051 + adds r0, r1, r2 +_080614BC: + ldrb r0, [r0] + str r0, [sp, #0x3c] + ldr r0, [sp, #0x38] + adds r0, #0x52 + ldrb r1, [r0] + cmp r1, #1 + beq _080614CC + b _08061706 +_080614CC: + str r1, [sp, #0x48] + bl UiGfxStackInit + ldr r0, [sp, #0x38] + adds r0, #0x50 + ldrb r7, [r0] + ldr r1, [sp, #0x48] + cmp r7, #0 + bne _0806156C + add r6, sp, #0x2c + movs r5, #0x80 + strb r5, [r6] + mov r4, sp + adds r4, #0x2b + strb r1, [r4] + ldr r0, _08061558 @ =gUnknown_086972F4 + str r0, [sp, #0x14] + movs r0, #0xc8 + lsls r0, r0, #5 + str r0, [sp, #0x18] + ldr r0, _0806155C @ =gUnknown_08698BF4 + str r0, [sp, #0x10] + movs r3, #0xa0 + lsls r3, r3, #3 + mov r8, r3 + str r3, [sp, #0x1c] + movs r0, #0x29 + add r0, sp + mov sb, r0 + strb r1, [r0] + movs r1, #0x2a + add r1, sp + mov sl, r1 + movs r0, #0x11 + strb r0, [r1] + str r7, [sp, #4] + mov r0, sp + strb r7, [r0, #8] + strb r7, [r0, #9] + strb r7, [r0, #0xa] + strb r7, [r0, #0xb] + bl sub_80528AC + strb r5, [r6] + strb r7, [r4] + ldr r0, _08061560 @ =gCharacterCards_Sonic_Tiles + str r0, [sp, #0x14] + movs r0, #0x9c + lsls r0, r0, #4 + str r0, [sp, #0x18] + ldr r0, _08061564 @ =gCharacterCards_Sonic_Palette + str r0, [sp, #0x20] + movs r0, #0x80 + lsls r0, r0, #2 + str r0, [sp, #0x24] + ldr r0, _08061568 @ =gCharacterCards_Sonic_Layout + str r0, [sp, #0x10] + mov r2, r8 + str r2, [sp, #0x1c] + add r0, sp, #0x28 + strb r7, [r0] + mov r3, sb + strb r7, [r3] + movs r0, #0x15 + mov r1, sl + strb r0, [r1] + b _08061670 + .align 2, 0 +_08061554: .4byte 0x03000051 +_08061558: .4byte gUnknown_086972F4 +_0806155C: .4byte gUnknown_08698BF4 +_08061560: .4byte gCharacterCards_Sonic_Tiles +_08061564: .4byte gCharacterCards_Sonic_Palette +_08061568: .4byte gCharacterCards_Sonic_Layout +_0806156C: + cmp r7, #1 + bne _080615F8 + add r2, sp, #0x2c + mov r8, r2 + movs r4, #0 + movs r6, #0x80 + strb r6, [r2] + mov r5, sp + adds r5, #0x2b + strb r1, [r5] + ldr r0, _080615E4 @ =gUnknown_0869A9B4 + str r0, [sp, #0x14] + movs r0, #0xe2 + lsls r0, r0, #5 + str r0, [sp, #0x18] + ldr r0, _080615E8 @ =gUnknown_0869C5F4 + str r0, [sp, #0x10] + movs r3, #0xa0 + lsls r3, r3, #3 + mov sb, r3 + str r3, [sp, #0x1c] + movs r0, #0x29 + add r0, sp + mov sl, r0 + strb r1, [r0] + mov r7, sp + adds r7, #0x2a + movs r0, #0x11 + strb r0, [r7] + str r4, [sp, #4] + mov r0, sp + strb r4, [r0, #8] + strb r4, [r0, #9] + strb r4, [r0, #0xa] + strb r4, [r0, #0xb] + bl sub_80528AC + mov r1, r8 + strb r6, [r1] + strb r4, [r5] + ldr r0, _080615EC @ =gCharacterCards_Tails_Tiles + str r0, [sp, #0x14] + movs r0, #0xd0 + lsls r0, r0, #3 + str r0, [sp, #0x18] + ldr r0, _080615F0 @ =gCharacterCards_Tails_Palette + str r0, [sp, #0x20] + movs r0, #0x80 + lsls r0, r0, #2 + str r0, [sp, #0x24] + ldr r0, _080615F4 @ =gCharacterCards_Tails_Layout + str r0, [sp, #0x10] + mov r2, sb + str r2, [sp, #0x1c] + add r0, sp, #0x28 + strb r4, [r0] + mov r3, sl + strb r4, [r3] + b _0806166C + .align 2, 0 +_080615E4: .4byte gUnknown_0869A9B4 +_080615E8: .4byte gUnknown_0869C5F4 +_080615EC: .4byte gCharacterCards_Tails_Tiles +_080615F0: .4byte gCharacterCards_Tails_Palette +_080615F4: .4byte gCharacterCards_Tails_Layout +_080615F8: + cmp r7, #2 + bne _0806168C + add r0, sp, #0x2c + mov r8, r0 + movs r4, #0 + movs r6, #0x80 + strb r6, [r0] + mov r5, sp + adds r5, #0x2b + strb r1, [r5] + ldr r0, _08061678 @ =gUnknown_08690574 + str r0, [sp, #0x14] + movs r0, #0xc0 + lsls r0, r0, #5 + str r0, [sp, #0x18] + ldr r0, _0806167C @ =gUnknown_08691D74 + str r0, [sp, #0x10] + movs r2, #0xa0 + lsls r2, r2, #3 + mov sb, r2 + str r2, [sp, #0x1c] + movs r3, #0x29 + add r3, sp + mov sl, r3 + strb r1, [r3] + mov r7, sp + adds r7, #0x2a + movs r0, #0x11 + strb r0, [r7] + str r4, [sp, #4] + mov r0, sp + strb r4, [r0, #8] + strb r4, [r0, #9] + strb r4, [r0, #0xa] + strb r4, [r0, #0xb] + bl sub_80528AC + mov r0, r8 + strb r6, [r0] + strb r4, [r5] + ldr r0, _08061680 @ =gCharacterCards_Knuckles_Tiles + str r0, [sp, #0x14] + movs r0, #0xf8 + lsls r0, r0, #3 + str r0, [sp, #0x18] + ldr r0, _08061684 @ =gCharacterCards_Knuckles_Palette + str r0, [sp, #0x20] + movs r0, #0x80 + lsls r0, r0, #2 + str r0, [sp, #0x24] + ldr r0, _08061688 @ =gCharacterCards_Knuckles_Layout + str r0, [sp, #0x10] + mov r1, sb + str r1, [sp, #0x1c] + add r0, sp, #0x28 + strb r4, [r0] + mov r2, sl + strb r4, [r2] +_0806166C: + movs r0, #0x15 + strb r0, [r7] +_08061670: + mov r0, sp + bl sub_80528AC + b _08061706 + .align 2, 0 +_08061678: .4byte gUnknown_08690574 +_0806167C: .4byte gUnknown_08691D74 +_08061680: .4byte gCharacterCards_Knuckles_Tiles +_08061684: .4byte gCharacterCards_Knuckles_Palette +_08061688: .4byte gCharacterCards_Knuckles_Layout +_0806168C: + add r3, sp, #0x2c + mov r8, r3 + movs r4, #0 + movs r6, #0x80 + strb r6, [r3] + mov r5, sp + adds r5, #0x2b + strb r1, [r5] + ldr r0, _08061780 @ =gUnknown_08693974 + str r0, [sp, #0x14] + movs r0, #0xc4 + lsls r0, r0, #5 + str r0, [sp, #0x18] + ldr r0, _08061784 @ =gUnknown_086951F4 + str r0, [sp, #0x10] + movs r0, #0xa0 + lsls r0, r0, #3 + mov sb, r0 + str r0, [sp, #0x1c] + movs r2, #0x29 + add r2, sp + mov sl, r2 + strb r1, [r2] + mov r7, sp + adds r7, #0x2a + movs r0, #0x11 + strb r0, [r7] + str r4, [sp, #4] + mov r0, sp + strb r4, [r0, #8] + strb r4, [r0, #9] + strb r4, [r0, #0xa] + strb r4, [r0, #0xb] + bl sub_80528AC + mov r3, r8 + strb r6, [r3] + strb r4, [r5] + ldr r0, _08061788 @ =gCharacterCards_Amy_Tiles + str r0, [sp, #0x14] + movs r0, #0x98 + lsls r0, r0, #3 + str r0, [sp, #0x18] + ldr r0, _0806178C @ =gCharacterCards_Amy_Palette + str r0, [sp, #0x20] + movs r0, #0x80 + lsls r0, r0, #2 + str r0, [sp, #0x24] + ldr r0, _08061790 @ =gCharacterCards_Amy_Layout + str r0, [sp, #0x10] + mov r0, sb + str r0, [sp, #0x1c] + add r0, sp, #0x28 + strb r4, [r0] + mov r1, sl + strb r4, [r1] + movs r0, #0x15 + strb r0, [r7] + mov r0, sp + bl sub_80528AC +_08061706: + movs r7, #0 + add r6, sp, #0x30 + ldr r2, [sp, #0x38] + adds r2, #0x30 + mov sb, r2 + ldr r3, [sp, #0x38] + adds r3, #0x54 + str r3, [sp, #0x40] + ldr r0, _08061794 @ =gLoadedSaveGame + adds r0, #0x20 + str r0, [sp, #0x44] + mov r8, r6 + ldr r1, _08061798 @ =gSecondsTable + mov sl, r1 +_08061722: + movs r0, #1 + ldr r2, [sp, #0x38] + strh r0, [r2, #0x3e] + adds r0, r7, #0 + adds r0, #0x21 + mov r3, r8 + strb r0, [r3] + movs r0, #0x2c + strh r0, [r2, #0x3a] + lsls r4, r7, #4 + adds r4, #0x5c + strh r4, [r2, #0x3c] + mov r0, r8 + mov r1, sb + bl sub_805321C + movs r0, #7 + ldr r1, [sp, #0x38] + strh r0, [r1, #0x3e] + movs r0, #0x54 + strh r0, [r1, #0x3a] + strh r4, [r1, #0x3c] + ldr r2, [sp, #0x40] + ldrb r1, [r2] + lsls r0, r1, #1 + adds r0, r0, r1 + adds r0, r0, r7 + lsls r0, r0, #2 + movs r1, #0xd8 + ldr r3, [sp, #0x3c] + muls r1, r3, r1 + adds r0, r0, r1 + ldr r1, [sp, #0x44] + adds r0, r1, r0 + ldr r5, [r0] + ldr r0, _0806179C @ =0x00008C9F + cmp r5, r0 + bls _080617A0 + movs r1, #0x29 + strb r1, [r6, #6] + strb r1, [r6, #5] + strb r1, [r6, #3] + movs r0, #0x25 + strb r0, [r6, #2] + strb r1, [r6] + b _080617F6 + .align 2, 0 +_08061780: .4byte gUnknown_08693974 +_08061784: .4byte gUnknown_086951F4 +_08061788: .4byte gCharacterCards_Amy_Tiles +_0806178C: .4byte gCharacterCards_Amy_Palette +_08061790: .4byte gCharacterCards_Amy_Layout +_08061794: .4byte gLoadedSaveGame +_08061798: .4byte gSecondsTable +_0806179C: .4byte 0x00008C9F +_080617A0: + adds r0, r5, #0 + movs r1, #0x3c + bl Div + adds r4, r0, #0 + movs r1, #0x3c + bl Div + ldr r2, _08061820 @ =sZoneTimeSecondsTable + lsls r0, r0, #1 + adds r1, r0, r2 + movs r3, #0 + ldrsh r1, [r1, r3] + subs r4, r4, r1 + lsls r4, r4, #1 + adds r2, r4, r2 + movs r1, #0 + ldrsh r2, [r2, r1] + subs r2, r5, r2 + ldr r1, _08061824 @ =sZoneTimeMinutesTable + adds r1, r0, r1 + ldrh r1, [r1] + subs r2, r2, r1 + lsls r2, r2, #1 + ldr r3, _08061828 @ =gMillisUnpackTable + adds r1, r2, #1 + adds r1, r1, r3 + ldrb r1, [r1] + strb r1, [r6, #6] + adds r2, r2, r3 + ldrb r1, [r2] + strb r1, [r6, #5] + adds r1, r4, #1 + add r1, sl + ldrb r1, [r1] + strb r1, [r6, #3] + add r4, sl + ldrb r1, [r4] + strb r1, [r6, #2] + adds r0, #1 + add r0, sl + ldrb r0, [r0] + strb r0, [r6] +_080617F6: + movs r0, #0x2a + mov r2, r8 + strb r0, [r2, #1] + strb r0, [r2, #4] + mov r0, r8 + mov r1, sb + bl sub_805321C + adds r0, r7, #1 + lsls r0, r0, #0x18 + lsrs r7, r0, #0x18 + cmp r7, #2 + bls _08061722 + add sp, #0x4c + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_08061820: .4byte sZoneTimeSecondsTable +_08061824: .4byte sZoneTimeMinutesTable +_08061828: .4byte gMillisUnpackTable + +.syntax divided diff --git a/sa1/asm/non_matching/game/time_attack_records__Task_806BBC0.inc b/sa1/asm/non_matching/game/time_attack_records__Task_806BBC0.inc new file mode 100644 index 0000000000..a95a0322f4 --- /dev/null +++ b/sa1/asm/non_matching/game/time_attack_records__Task_806BBC0.inc @@ -0,0 +1,171 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + movs r6, #0 + movs r0, #0xa0 + mov ip, r0 + movs r4, #0 + mov sb, r4 + ldr r5, _0806BC30 @ =gCurTask + ldr r0, [r5] + ldrh r0, [r0, #6] + movs r1, #0xc0 + lsls r1, r1, #0x12 + adds r1, r1, r0 + mov sl, r1 + ldr r1, _0806BC34 @ =0x030000D8 + adds r1, r1, r0 + mov r8, r1 + ldr r2, _0806BC38 @ =0x03000104 + adds r1, r0, r2 + ldr r7, [r1] + adds r7, #1 + ldr r1, _0806BC3C @ =0x03000108 + adds r0, r0, r1 + ldr r2, [r0] + adds r2, #1 + str r2, [r0] + cmp r7, #0xf0 + bls _0806BC50 + ldr r2, _0806BC40 @ =gFlags + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + movs r0, #4 @ MUS_COURSE_SELECTION + bl m4aSongNumStop + ldr r2, _0806BC44 @ =gDispCnt + ldrh r1, [r2] + ldr r0, _0806BC48 @ =0x00001FFF + ands r0, r1 + strh r0, [r2] + ldr r0, _0806BC4C @ =gBldRegs + strh r6, [r0] + strh r6, [r0, #4] + ldr r0, [r5] + bl TaskDestroy + bl ApplyGameStageSettings + b _0806BCF6 + .align 2, 0 +_0806BC30: .4byte gCurTask +_0806BC34: .4byte 0x030000D8 +_0806BC38: .4byte 0x03000104 +_0806BC3C: .4byte 0x03000108 +_0806BC40: .4byte gFlags +_0806BC44: .4byte gDispCnt +_0806BC48: .4byte 0x00001FFF +_0806BC4C: .4byte gBldRegs +_0806BC50: + cmp r7, #0xd0 + bne _0806BC5E + movs r0, #1 + mov r5, r8 + strh r0, [r5, #4] + strh r6, [r5, #6] + b _0806BC74 +_0806BC5E: + ldr r0, _0806BD08 @ =gPressedKeys + ldrh r1, [r0] + movs r0, #3 + ands r0, r1 + cmp r0, #0 + beq _0806BC74 + cmp r7, #0x20 + bls _0806BC74 + cmp r7, #0xcf + bhi _0806BC74 + movs r7, #0xcf +_0806BC74: + movs r0, #0xff + adds r3, r0, #0 + ands r3, r2 + ldr r1, _0806BD0C @ =gFlags + ldr r0, [r1] + movs r2, #4 + orrs r0, r2 + str r0, [r1] + ldr r1, _0806BD10 @ =gHBlankCopyTarget + ldr r0, _0806BD14 @ =0x04000010 + str r0, [r1] + ldr r0, _0806BD18 @ =gHBlankCopySize + strb r2, [r0] + ldr r0, _0806BD1C @ =gBgOffsetsHBlankPrimary + lsls r1, r6, #2 + ldr r0, [r0] + adds r2, r0, r1 + cmp r6, ip + bhs _0806BCE0 +_0806BC9A: + movs r1, #0 + lsls r4, r4, #0x18 + str r4, [sp] + lsls r4, r3, #0x10 + cmp r6, ip + bhs _0806BCC8 + adds r3, #0 + ldr r5, _0806BD20 @ =0x000001FF + adds r0, r5, #0 + ands r3, r0 +_0806BCAE: + strh r3, [r2] + adds r2, #2 + mov r0, sb + strh r0, [r2] + adds r2, #2 + adds r0, r6, #1 + lsls r0, r0, #0x18 + lsrs r6, r0, #0x18 + adds r1, #1 + cmp r1, #0x17 + bhi _0806BCC8 + cmp r6, ip + blo _0806BCAE +_0806BCC8: + ldr r5, [sp] + asrs r1, r5, #0x18 + asrs r0, r4, #0x10 + adds r0, r0, r1 + rsbs r0, r0, #0 + lsls r0, r0, #0x10 + lsrs r3, r0, #0x10 + rsbs r1, r1, #0 + lsls r1, r1, #0x18 + lsrs r4, r1, #0x18 + cmp r6, ip + blo _0806BC9A +_0806BCE0: + movs r0, #0x82 + lsls r0, r0, #1 + add r0, sl + str r7, [r0] + mov r0, r8 + bl sub_805423C + bl sub_806BF04 + bl sub_806BD24 +_0806BCF6: + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0806BD08: .4byte gPressedKeys +_0806BD0C: .4byte gFlags +_0806BD10: .4byte gHBlankCopyTarget +_0806BD14: .4byte 0x04000010 +_0806BD18: .4byte gHBlankCopySize +_0806BD1C: .4byte gBgOffsetsHBlankPrimary +_0806BD20: .4byte 0x000001FF + +.syntax divided diff --git a/sa1/asm/non_matching/game/vs_record__Task_8060874.inc b/sa1/asm/non_matching/game/vs_record__Task_8060874.inc new file mode 100644 index 0000000000..222d8bd59f --- /dev/null +++ b/sa1/asm/non_matching/game/vs_record__Task_8060874.inc @@ -0,0 +1,523 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x34 + ldr r7, _08060938 @ =gLoadedSaveGame + ldr r0, _0806093C @ =gCurTask + ldr r0, [r0] + ldrh r2, [r0, #6] + movs r0, #0xc0 + lsls r0, r0, #0x12 + adds r0, r2, r0 + str r0, [sp, #8] + ldr r1, _08060940 @ =0x030000EC + adds r0, r2, r1 + ldr r0, [r0] + str r0, [sp, #0xc] + ldr r3, _08060944 @ =gBgScrollRegs + lsrs r0, r0, #8 + subs r0, #0x30 + ldr r4, _08060948 @ =0x000001FF + adds r1, r4, #0 + ands r0, r1 + strh r0, [r3, #6] + ldr r0, _0806094C @ =0x030000AE + adds r1, r2, r0 + movs r0, #1 + strh r0, [r1] + movs r5, #0 + ldr r1, _08060950 @ =0x030000AC + adds r4, r2, r1 + movs r0, #0x10 + adds r0, r0, r7 + mov r8, r0 + subs r1, #2 + adds r1, r2, r1 + str r1, [sp, #0x18] + ldr r0, _08060950 @ =0x030000AC + adds r0, r2, r0 + str r0, [sp, #0x1c] + ldr r1, _08060954 @ =0x030000A0 + adds r1, r2, r1 + str r1, [sp, #0x14] +_080608CC: + lsls r0, r5, #3 + adds r0, #0x1b + ldr r1, [sp, #8] + adds r1, #0xaa + strh r0, [r1] + movs r6, #0x20 + strh r6, [r4] + mov r2, r8 + adds r1, r5, r2 + ldrb r0, [r1] + subs r0, #0x70 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x19 + bhi _080608EE + movs r0, #0x28 + strh r0, [r4] +_080608EE: + adds r0, r1, #0 + ldr r1, [sp, #8] + adds r1, #0xa0 + bl sub_805321C + adds r0, r5, #1 + lsls r0, r0, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #5 + bls _080608CC + ldr r4, [sp, #0x1c] + strh r6, [r4] + ldr r0, _08060958 @ =0x00000425 + adds r5, r7, r0 + ldrb r0, [r5] + cmp r0, #9 + bls _08060976 + movs r1, #0xa + bl Div + mov r1, sp + adds r0, #0x30 + strb r0, [r1] + ldrb r0, [r5] + movs r1, #0xa + bl Mod + mov r1, sp + adds r0, #0x30 + strb r0, [r1, #1] + ldrb r0, [r7, #0x19] + cmp r0, #0 + beq _0806095C + movs r0, #0x5b + ldr r1, [sp, #0x18] + strh r0, [r1] + b _08060962 + .align 2, 0 +_08060938: .4byte gLoadedSaveGame +_0806093C: .4byte gCurTask +_08060940: .4byte 0x030000EC +_08060944: .4byte gBgScrollRegs +_08060948: .4byte 0x000001FF +_0806094C: .4byte 0x030000AE +_08060950: .4byte 0x030000AC +_08060954: .4byte 0x030000A0 +_08060958: .4byte 0x00000425 +_0806095C: + movs r0, #0x59 + ldr r2, [sp, #0x18] + strh r0, [r2] +_08060962: + ldr r4, [sp, #8] + adds r4, #0xae + movs r0, #2 + strh r0, [r4] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805321C + str r4, [sp, #0x20] + b _080609DA +_08060976: + ldr r2, [sp, #8] + adds r2, #0xae + movs r0, #1 + strh r0, [r2] + mov r1, sp + ldrb r0, [r5] + adds r0, #0x30 + strb r0, [r1] + ldrb r0, [r7, #0x19] + str r2, [sp, #0x20] + cmp r0, #0 + beq _08060996 + movs r0, #0x63 + ldr r4, [sp, #0x18] + strh r0, [r4] + b _0806099C +_08060996: + movs r0, #0x61 + ldr r1, [sp, #0x18] + strh r0, [r1] +_0806099C: + ldr r2, _080609C8 @ =0x00000425 + adds r0, r7, r2 + ldrb r0, [r0] + cmp r0, #1 + bhi _080609CC + mov r1, sp + movs r0, #0x8a + strb r0, [r1, #1] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805321C + movs r0, #0x7e + ldr r4, [sp, #0x18] + strh r0, [r4] + mov r0, sp + adds r0, #1 + ldr r1, [sp, #0x14] + bl sub_805321C + b _080609DA + .align 2, 0 +_080609C8: .4byte 0x00000425 +_080609CC: + mov r1, sp + adds r0, #0x30 + strb r0, [r1] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805321C +_080609DA: + ldr r0, _08060A14 @ =0x00000426 + adds r5, r7, r0 + ldrb r0, [r5] + cmp r0, #9 + bls _08060A22 + movs r0, #2 + ldr r1, [sp, #0x20] + strh r0, [r1] + ldrb r0, [r5] + movs r1, #0xa + bl Div + mov r1, sp + adds r0, #0x30 + strb r0, [r1] + ldrb r0, [r5] + movs r1, #0xa + bl Mod + mov r1, sp + adds r0, #0x30 + strb r0, [r1, #1] + ldrb r0, [r7, #0x19] + cmp r0, #0 + beq _08060A18 + movs r0, #0x88 + ldr r2, [sp, #0x18] + strh r0, [r2] + b _08060A1E + .align 2, 0 +_08060A14: .4byte 0x00000426 +_08060A18: + movs r0, #0x89 + ldr r4, [sp, #0x18] + strh r0, [r4] +_08060A1E: + mov r0, sp + b _08060A84 +_08060A22: + movs r0, #1 + ldr r1, [sp, #0x20] + strh r0, [r1] + ldrb r0, [r7, #0x19] + cmp r0, #0 + beq _08060A36 + movs r0, #0x90 + ldr r2, [sp, #0x18] + strh r0, [r2] + b _08060A3C +_08060A36: + movs r0, #0x91 + ldr r4, [sp, #0x18] + strh r0, [r4] +_08060A3C: + mov r2, sp + ldr r0, _08060A8C @ =0x00000426 + adds r1, r7, r0 + ldrb r0, [r1] + adds r0, #0x30 + strb r0, [r2] + ldrb r0, [r1] + cmp r0, #1 + bhi _08060A94 + ldrb r0, [r7, #0x19] + cmp r0, #0 + beq _08060A94 + ldr r0, [sp, #8] + adds r0, #0xb8 + movs r1, #0x98 + strh r1, [r0, #0x16] + movs r1, #0x20 + strh r1, [r0, #0x18] + ldr r1, [r0, #0x10] + ldr r2, _08060A90 @ =0xFFFFF7FF + ands r1, r2 + str r1, [r0, #0x10] + bl DisplaySprite + mov r1, sp + movs r0, #0x8a + strb r0, [r1, #1] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805321C + movs r0, #0xb1 + ldr r1, [sp, #0x18] + strh r0, [r1] + mov r0, sp + adds r0, #1 +_08060A84: + ldr r1, [sp, #0x14] + bl sub_805321C + b _08060A9C + .align 2, 0 +_08060A8C: .4byte 0x00000426 +_08060A90: .4byte 0xFFFFF7FF +_08060A94: + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805321C +_08060A9C: + ldr r2, _08060AD4 @ =0x00000427 + adds r5, r7, r2 + ldrb r0, [r5] + cmp r0, #9 + bls _08060AD8 + movs r0, #2 + ldr r4, [sp, #0x20] + strh r0, [r4] + ldrb r0, [r5] + movs r1, #0xa + bl Div + mov r1, sp + adds r0, #0x30 + strb r0, [r1] + ldrb r0, [r5] + movs r1, #0xa + bl Mod + mov r1, sp + adds r0, #0x30 + strb r0, [r1, #1] + movs r0, #0xb9 + ldr r1, [sp, #0x18] + strh r0, [r1] + mov r0, sp + b _08060B06 + .align 2, 0 +_08060AD4: .4byte 0x00000427 +_08060AD8: + movs r0, #1 + ldr r2, [sp, #0x20] + strh r0, [r2] + movs r0, #0xc1 + ldr r4, [sp, #0x18] + strh r0, [r4] + mov r1, sp + ldrb r0, [r5] + adds r0, #0x30 + strb r0, [r1] + ldrb r0, [r5] + cmp r0, #1 + bhi _08060B0E + movs r0, #0x8a + strb r0, [r1, #1] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805321C + movs r0, #0xe2 + strh r0, [r4] + mov r0, sp + adds r0, #1 +_08060B06: + ldr r1, [sp, #0x14] + bl sub_805321C + b _08060B16 +_08060B0E: + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805321C +_08060B16: + movs r5, #0 + ldr r0, [sp, #0xc] + lsrs r0, r0, #0xc + str r0, [sp, #0x10] + mov r7, sp +_08060B20: + ldr r1, [sp, #0x10] + adds r0, r5, r1 + lsls r0, r0, #0x18 + lsrs r1, r0, #0x18 + adds r2, r5, #1 + str r2, [sp, #0x28] + cmp r1, #9 + bls _08060B32 + b _08060C68 +_08060B32: + movs r0, #1 + ldr r4, [sp, #0x20] + strh r0, [r4] + movs r4, #0 + ldr r0, [sp, #0xc] + lsrs r6, r0, #8 + lsls r5, r5, #4 + mov sl, r5 + lsls r1, r1, #4 + mov sb, r1 + ldr r1, [sp, #8] + adds r1, #4 + str r1, [sp, #0x24] + movs r1, #0xf + adds r0, r6, #0 + ands r0, r1 + subs r0, #0x38 + subs r5, r5, r0 + movs r2, #8 + adds r2, r2, r5 + mov r8, r2 + mov r3, sb + ldr r2, [sp, #8] + add r2, sb +_08060B62: + lsls r0, r4, #3 + adds r0, #0x3c + ldr r1, [sp, #0x18] + strh r0, [r1] + ldr r0, [sp, #0x1c] + strh r5, [r0] + adds r0, r4, r3 + ldr r1, [sp, #0x24] + adds r0, r1, r0 + ldrb r0, [r0] + subs r0, #0x70 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x19 + bhi _08060B86 + mov r1, r8 + ldr r0, [sp, #0x1c] + strh r1, [r0] +_08060B86: + adds r0, r4, #4 + adds r0, r2, r0 + ldr r1, [sp, #0x14] + str r2, [sp, #0x2c] + str r3, [sp, #0x30] + bl sub_805345C + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + cmp r4, #5 + bls _08060B62 + movs r0, #0xf + ands r6, r0 + adds r0, r6, #0 + subs r0, #0x38 + mov r2, sl + subs r0, r2, r0 + ldr r4, [sp, #0x1c] + strh r0, [r4] + ldr r4, [sp, #8] + add r4, sb + ldrb r0, [r4, #0xc] + cmp r0, #0xff + bne _08060BC4 + movs r0, #0x20 + strb r0, [r7] + movs r0, #0x30 + b _08060BE6 +_08060BC4: + cmp r0, #9 + bls _08060BDE + ldrb r0, [r4, #0xc] + movs r1, #0xa + bl Div + adds r0, #0x30 + strb r0, [r7] + ldrb r0, [r4, #0xc] + movs r1, #0xa + bl Mod + b _08060BE4 +_08060BDE: + movs r1, #0x20 + strb r1, [r7] + ldrb r0, [r4, #0xc] +_08060BE4: + adds r0, #0x30 +_08060BE6: + strb r0, [r7, #1] + movs r0, #0x80 + ldr r2, [sp, #0x18] + strh r0, [r2] + movs r0, #2 + ldr r4, [sp, #0x20] + strh r0, [r4] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805345C + ldr r4, [sp, #8] + add r4, sb + ldrb r0, [r4, #0xd] + cmp r0, #9 + bls _08060C1A + movs r1, #0xa + bl Div + adds r0, #0x30 + strb r0, [r7] + ldrb r0, [r4, #0xd] + movs r1, #0xa + bl Mod + b _08060C20 +_08060C1A: + movs r0, #0x20 + strb r0, [r7] + ldrb r0, [r4, #0xd] +_08060C20: + adds r0, #0x30 + strb r0, [r7, #1] + movs r0, #0xa0 + ldr r1, [sp, #0x18] + strh r0, [r1] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805345C + ldr r4, [sp, #8] + add r4, sb + ldrb r0, [r4, #0xe] + cmp r0, #9 + bls _08060C50 + movs r1, #0xa + bl Div + adds r0, #0x30 + strb r0, [r7] + ldrb r0, [r4, #0xe] + movs r1, #0xa + bl Mod + b _08060C56 +_08060C50: + movs r2, #0x20 + strb r2, [r7] + ldrb r0, [r4, #0xe] +_08060C56: + adds r0, #0x30 + strb r0, [r7, #1] + movs r0, #0xc0 + ldr r4, [sp, #0x18] + strh r0, [r4] + mov r0, sp + ldr r1, [sp, #0x14] + bl sub_805345C +_08060C68: + ldr r1, [sp, #0x28] + lsls r0, r1, #0x18 + lsrs r5, r0, #0x18 + cmp r5, #8 + bhi _08060C74 + b _08060B20 +_08060C74: + add sp, #0x34 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 + +.syntax divided diff --git a/sa1/asm/non_matching/game/water_effects__Task_StageWaterTask.inc b/sa1/asm/non_matching/game/water_effects__Task_StageWaterTask.inc new file mode 100644 index 0000000000..dd597a938c --- /dev/null +++ b/sa1/asm/non_matching/game/water_effects__Task_StageWaterTask.inc @@ -0,0 +1,277 @@ +.include "constants/constants.inc" + +.syntax unified +.text + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #0x1c + ldr r7, _0804C698 @ =gWater + ldr r5, _0804C69C @ =gCamera + ldr r0, _0804C6A0 @ =gStageTime + ldr r1, [r0] + movs r2, #1 + ands r1, r2 + adds r6, r0, #0 + cmp r1, #0 + beq _0804C6AC + ldrh r0, [r7, #2] + movs r1, #2 + ldrsh r2, [r7, r1] + movs r3, #4 + ldrsh r1, [r7, r3] + cmp r2, r1 + beq _0804C6AC + cmp r2, r1 + bge _0804C6A4 + adds r0, #1 + b _0804C6AA + .align 2, 0 +_0804C698: .4byte gWater +_0804C69C: .4byte gCamera +_0804C6A0: .4byte gStageTime +_0804C6A4: + cmp r2, r1 + ble _0804C6AC + subs r0, #1 +_0804C6AA: + strh r0, [r7, #2] +_0804C6AC: + ldrh r2, [r7, #2] + movs r4, #2 + ldrsh r1, [r7, r4] + ldrh r3, [r5, #2] + movs r4, #2 + ldrsh r0, [r5, r4] + cmp r1, r0 + bgt _0804C6C0 + movs r0, #0 + b _0804C6D4 +_0804C6C0: + movs r0, #2 + ldrsh r1, [r7, r0] + movs r4, #2 + ldrsh r0, [r5, r4] + adds r0, #0xa0 + cmp r1, r0 + bge _0804C6D2 + subs r0, r2, r3 + b _0804C6D4 +_0804C6D2: + movs r0, #0xff +_0804C6D4: + strb r0, [r7, #1] + ldr r3, _0804C77C @ =gVBlankCallbacks + ldr r2, _0804C780 @ =gNumVBlankCallbacks + ldrb r0, [r2] + adds r1, r0, #1 + strb r1, [r2] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x16 + adds r0, r0, r3 + ldr r1, _0804C784 @ =sa2__sub_8011A4C + str r1, [r0] + ldr r2, _0804C788 @ =gFlags + ldr r0, [r2] + movs r1, #0x10 + orrs r0, r1 + str r0, [r2] + ldrb r0, [r7] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x9e + bhi _0804C756 + adds r4, r7, #0 + adds r4, #0x14 + ldr r0, [r6] + adds r0, #1 + lsrs r0, r0, #2 + ldrh r5, [r5] + adds r0, r0, r5 + movs r1, #0xf + ands r0, r1 + rsbs r0, r0, #0 + strh r0, [r4, #0x16] + ldrb r0, [r7, #1] + adds r0, #1 + strh r0, [r4, #0x18] + ldr r0, [r4, #0x10] + movs r1, #0xc0 + lsls r1, r1, #0xc + orrs r0, r1 + str r0, [r4, #0x10] + adds r0, r4, #0 + bl UpdateSpriteAnimation + ldr r0, [r6] + movs r1, #2 + ands r0, r1 + cmp r0, #0 + beq _0804C756 + ldrh r0, [r4, #0x18] + subs r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0xee + bhi _0804C756 + movs r5, #0x10 +_0804C744: + adds r0, r4, #0 + bl DisplaySprite + ldrh r0, [r4, #0x16] + adds r0, #0x10 + strh r0, [r4, #0x16] + subs r5, #1 + cmp r5, #0 + bge _0804C744 +_0804C756: + ldrb r1, [r7, #1] + subs r0, r1, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + adds r3, r1, #0 + cmp r0, #0x9e + bhi _0804C798 + ldr r1, _0804C78C @ =gIntrTable + ldr r0, _0804C790 @ =sa2__VCountIntr_8011ACC + str r0, [r1, #0xc] + ldr r1, _0804C794 @ =gVCountSetting + subs r0, r3, #1 + strb r0, [r1] + ldr r2, _0804C788 @ =gFlags + ldr r0, [r2] + movs r1, #0x40 + orrs r0, r1 + b _0804C7AA + .align 2, 0 +_0804C77C: .4byte gVBlankCallbacks +_0804C780: .4byte gNumVBlankCallbacks +_0804C784: .4byte sa2__sub_8011A4C +_0804C788: .4byte gFlags +_0804C78C: .4byte gIntrTable +_0804C790: .4byte sa2__VCountIntr_8011ACC +_0804C794: .4byte gVCountSetting +_0804C798: + ldr r1, _0804C7C0 @ =gIntrTable + ldr r0, _0804C7C4 @ =gIntrTableTemplate + ldr r0, [r0, #0xc] + str r0, [r1, #0xc] + ldr r2, _0804C7C8 @ =gFlags + ldr r0, [r2] + movs r1, #0x41 + rsbs r1, r1, #0 + ands r0, r1 +_0804C7AA: + str r0, [r2] + lsls r0, r3, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x9f + bls _0804C7CC + ldr r0, [r2] + movs r1, #5 + rsbs r1, r1, #0 + ands r0, r1 + str r0, [r2] + b _0804C86C + .align 2, 0 +_0804C7C0: .4byte gIntrTable +_0804C7C4: .4byte gIntrTableTemplate +_0804C7C8: .4byte gFlags +_0804C7CC: + ldr r0, _0804C878 @ =gStageTime + ldr r1, [r0] + lsls r3, r1, #2 + ldr r2, _0804C87C @ =gBgScrollRegs + movs r6, #0xe + ldrsh r0, [r2, r6] + ldrb r4, [r7, #1] + adds r0, r0, r4 + movs r4, #0x1f + ands r0, r4 + lsls r0, r0, #6 + adds r3, r3, r0 + ldr r6, _0804C880 @ =0x000003FF + adds r5, r6, #0 + ands r3, r5 + movs r0, #2 + str r0, [sp] + movs r0, #0x40 + str r0, [sp, #4] + lsls r1, r1, #1 + movs r6, #0xe + ldrsh r0, [r2, r6] + ldrb r6, [r7, #1] + adds r0, r0, r6 + ands r0, r4 + lsls r0, r0, #5 + adds r1, r1, r0 + movs r0, #0x80 + lsls r0, r0, #1 + adds r1, r1, r0 + ands r1, r5 + str r1, [sp, #8] + movs r0, #0xa + str r0, [sp, #0xc] + movs r0, #0x20 + str r0, [sp, #0x10] + movs r1, #0xc + ldrsh r0, [r2, r1] + str r0, [sp, #0x14] + movs r4, #0xe + ldrsh r0, [r2, r4] + str r0, [sp, #0x18] + movs r0, #3 + movs r1, #0 + movs r2, #0x20 + bl sa2__sub_8007738 + movs r5, #0x20 + ldr r2, _0804C884 @ =0x040000D4 + ldr r0, _0804C888 @ =gBgOffsetsHBlankPrimary + ldr r4, [r0] + ldr r0, _0804C88C @ =gHBlankCopySize + ldrb r3, [r0] + lsls r0, r3, #5 + adds r1, r0, r4 + movs r6, #0x84 + lsls r6, r6, #0x18 + mov ip, r6 + mov r8, r0 +_0804C842: + str r4, [r2] + str r1, [r2, #4] + lsls r0, r3, #5 + asrs r0, r0, #2 + mov r6, ip + orrs r0, r6 + str r0, [r2, #8] + ldr r0, [r2, #8] + add r1, r8 + adds r5, #0x20 + cmp r5, #0x9f + bls _0804C842 + ldrb r0, [r7, #1] + cmp r0, #0 + beq _0804C86C + ldr r0, _0804C890 @ =gFlags + ldr r1, [r0] + movs r2, #5 + rsbs r2, r2, #0 + ands r1, r2 + str r1, [r0] +_0804C86C: + add sp, #0x1c + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .align 2, 0 +_0804C878: .4byte gStageTime +_0804C87C: .4byte gBgScrollRegs +_0804C880: .4byte 0x000003FF +_0804C884: .4byte 0x040000D4 +_0804C888: .4byte gBgOffsetsHBlankPrimary +_0804C88C: .4byte gHBlankCopySize +_0804C890: .4byte gFlags + +.syntax divided diff --git a/sa1/chao_garden/include/program_params.h b/sa1/chao_garden/include/program_params.h new file mode 100644 index 0000000000..f58f057bf0 --- /dev/null +++ b/sa1/chao_garden/include/program_params.h @@ -0,0 +1,6 @@ +#ifndef GUARD_TCG_PROGRAM_PARAMS_H +#define GUARD_TCG_PROGRAM_PARAMS_H + +#define TinyChaoGardenConfig ((u32 *)(EWRAM_START + 0x8)) + +#endif // GUARD_TCG_PROGRAM_PARAMS_H \ No newline at end of file diff --git a/sa1/config.mk b/sa1/config.mk new file mode 100644 index 0000000000..e6b270cb66 --- /dev/null +++ b/sa1/config.mk @@ -0,0 +1,98 @@ +### Build Configuration ### + +# Default platform variables +PLATFORM ?= gba +CPU_ARCH ?= arm +MIDI_COMMENTS := "arm" +THUMB_SUPPORT ?= 1 # Supports ARM's Thumb instruction set +COMPARE ?= 1 + + +ifeq ($(CPU_ARCH),arm) + ifneq ($(PLATFORM),gba) + THUMB_SUPPORT ?= 0 + endif + + MIDI_COMMENTS := "arm" +# This is 'i386' because that's the arch's name in GNU Linker scripts +else ifeq ($(CPU_ARCH),i386) + THUMB_SUPPORT ?= 0 + MIDI_COMMENTS := "x86" +else + $(error unknown arch: $(CPU_ARCH)) +endif + +LDSCRIPT := ldscript + +NON_MATCHING ?= 0 +ifeq ($(PLATFORM),gba) +ifeq ($(DEBUG),1) + # Debug + PORTABLE := 0 + NON_MATCHING := 1 + ENABLE_DECOMP_CREDITS := 1 + COMPARE ?= 0 + LDSCRIPT := $(LDSCRIPT).txt +else + # Original + PORTABLE := 0 + NON_MATCHING := 0 + ENABLE_DECOMP_CREDITS := 0 + COMPARE ?= 1 + LDSCRIPT := $(LDSCRIPT).txt +endif +else + # Other + PORTABLE := 1 + NON_MATCHING := 1 + ENABLE_DECOMP_CREDITS := 1 + COMPARE ?= 0 + LDSCRIPT := $(LDSCRIPT).txt +endif + +# Default game variables +GAME_REVISION ?= 0 +GAME_REGION ?= EUROPE +GAME_VARIANT ?= DEFAULT +DEBUG ?= 0 + +# For gbafix +MAKER_CODE := 6W + +# Version +BUILD_NAME := sa1 +TITLE := SONIC ADVANC +GAME_CODE := ASO + + +# Revision +ifeq ($(GAME_REVISION), 0) + BUILD_NAME := $(BUILD_NAME) +else + $(error unknown revision $(GAME_REVISION)) +endif + +# Region +ifeq ($(GAME_REGION), USA) + BUILD_NAME := $(BUILD_NAME)_usa + GAME_CODE := $(GAME_CODE)E +else +ifeq ($(GAME_REGION), EUROPE) + BUILD_NAME := $(BUILD_NAME) + GAME_CODE := $(GAME_CODE)P +else + $(error unknown region $(GAME_REGION)) +endif +endif + +ifeq ($(CREATE_PDB),1) + # If the user wants a PDB, the output needs to include debug info + # TODO: Is there a way to ECHO here? + DEBUG := 1 +endif + +# Debug +ifeq ($(DEBUG), 1) + COMPARE := 0 + BUILD_NAME := $(BUILD_NAME)_debug +endif diff --git a/sa1/constants/constants.inc b/sa1/constants/constants.inc new file mode 100644 index 0000000000..d8d22946bf --- /dev/null +++ b/sa1/constants/constants.inc @@ -0,0 +1,3 @@ + .include "constants/gba_constants.inc" + .include "constants/misc_constants.inc" + .include "constants/multi_sio_constants.inc" diff --git a/sa1/constants/gba_constants.inc b/sa1/constants/gba_constants.inc new file mode 100644 index 0000000000..2dd7c816b5 --- /dev/null +++ b/sa1/constants/gba_constants.inc @@ -0,0 +1,495 @@ + .set PSR_USR_MODE, 0x00000010 + .set PSR_FIQ_MODE, 0x00000011 + .set PSR_IRQ_MODE, 0x00000012 + .set PSR_SVC_MODE, 0x00000013 + .set PSR_ABT_MODE, 0x00000017 + .set PSR_UND_MODE, 0x0000001b + .set PSR_SYS_MODE, 0x0000001f + .set PSR_MODE_MASK, 0x0000001f + .set PSR_T_BIT, 0x00000020 + .set PSR_F_BIT, 0x00000040 + .set PSR_I_BIT, 0x00000080 + + .set EWRAM_START, 0x2000000 + .set EWRAM_END, EWRAM_START + 0x40000 + .set IWRAM_START, 0x3000000 + .set IWRAM_END, IWRAM_START + 0x8000 + + .set PLTT, 0x5000000 + .set BG_PLTT, PLTT + .set OBJ_PLTT, PLTT + 0x200 + + .set VRAM, 0x6000000 + .set BG_VRAM, VRAM + .set OBJ_VRAM0, VRAM + 0x10000 @ text-mode BG + .set OBJ_VRAM1, VRAM + 0x14000 @ bitmap-mode BG + + .set OAM, 0x7000000 + + .set SOUND_INFO_PTR, 0x3007FF0 + .set INTR_CHECK, 0x3007FF8 + .set INTR_VECTOR, 0x3007FFC + + .set INTR_FLAG_VBLANK, 1 << 0 + .set INTR_FLAG_HBLANK, 1 << 1 + .set INTR_FLAG_VCOUNT, 1 << 2 + .set INTR_FLAG_TIMER0, 1 << 3 + .set INTR_FLAG_TIMER1, 1 << 4 + .set INTR_FLAG_TIMER2, 1 << 5 + .set INTR_FLAG_TIMER3, 1 << 6 + .set INTR_FLAG_SERIAL, 1 << 7 + .set INTR_FLAG_DMA0, 1 << 8 + .set INTR_FLAG_DMA1, 1 << 9 + .set INTR_FLAG_DMA2, 1 << 10 + .set INTR_FLAG_DMA3, 1 << 11 + .set INTR_FLAG_KEYPAD, 1 << 12 + .set INTR_FLAG_GAMEPAK, 1 << 13 + + .set VCOUNT_VBLANK, 160 + .set TOTAL_SCANLINES, 228 + + .set REG_BASE, 0x4000000 @ I/O register base address + +@ I/O register offsets + .set OFFSET_REG_DISPCNT, 0x0 + .set OFFSET_REG_DISPSTAT, 0x4 + .set OFFSET_REG_VCOUNT, 0x6 + .set OFFSET_REG_BG0CNT, 0x8 + .set OFFSET_REG_BG1CNT, 0xa + .set OFFSET_REG_BG2CNT, 0xc + .set OFFSET_REG_BG3CNT, 0xe + .set OFFSET_REG_BG0HOFS, 0x10 + .set OFFSET_REG_BG0VOFS, 0x12 + .set OFFSET_REG_BG1HOFS, 0x14 + .set OFFSET_REG_BG1VOFS, 0x16 + .set OFFSET_REG_BG2HOFS, 0x18 + .set OFFSET_REG_BG2VOFS, 0x1a + .set OFFSET_REG_BG3HOFS, 0x1c + .set OFFSET_REG_BG3VOFS, 0x1e + .set OFFSET_REG_BG2PA, 0x20 + .set OFFSET_REG_BG2PB, 0x22 + .set OFFSET_REG_BG2PC, 0x24 + .set OFFSET_REG_BG2PD, 0x26 + .set OFFSET_REG_BG2X_L, 0x28 + .set OFFSET_REG_BG2X_H, 0x2a + .set OFFSET_REG_BG2Y_L, 0x2c + .set OFFSET_REG_BG2Y_H, 0x2e + .set OFFSET_REG_BG3PA, 0x30 + .set OFFSET_REG_BG3PB, 0x32 + .set OFFSET_REG_BG3PC, 0x34 + .set OFFSET_REG_BG3PD, 0x36 + .set OFFSET_REG_BG3X_L, 0x38 + .set OFFSET_REG_BG3X_H, 0x3a + .set OFFSET_REG_BG3Y_L, 0x3c + .set OFFSET_REG_BG3Y_H, 0x3e + .set OFFSET_REG_WIN0H, 0x40 + .set OFFSET_REG_WIN1H, 0x42 + .set OFFSET_REG_WIN0V, 0x44 + .set OFFSET_REG_WIN1V, 0x46 + .set OFFSET_REG_WININ, 0x48 + .set OFFSET_REG_WINOUT, 0x4a + .set OFFSET_REG_MOSAIC, 0x4c + .set OFFSET_REG_BLDCNT, 0x50 + .set OFFSET_REG_BLDALPHA, 0x52 + .set OFFSET_REG_BLDY, 0x54 + + .set OFFSET_REG_SOUND1CNT, 0x60 + .set OFFSET_REG_SOUND1CNT_L, 0x60 + .set OFFSET_REG_NR10, 0x60 + .set OFFSET_REG_SOUND1CNT_H, 0x62 + .set OFFSET_REG_NR11, 0x62 + .set OFFSET_REG_NR12, 0x63 + .set OFFSET_REG_SOUND1CNT_X, 0x64 + .set OFFSET_REG_NR13, 0x64 + .set OFFSET_REG_NR14, 0x65 + .set OFFSET_REG_SOUND2CNT, 0x68 + .set OFFSET_REG_SOUND2CNT_L, 0x68 + .set OFFSET_REG_NR21, 0x68 + .set OFFSET_REG_NR22, 0x69 + .set OFFSET_REG_SOUND2CNT_H, 0x6c + .set OFFSET_REG_NR23, 0x6c + .set OFFSET_REG_NR24, 0x6d + .set OFFSET_REG_SOUND3CNT, 0x70 + .set OFFSET_REG_SOUND3CNT_L, 0x70 + .set OFFSET_REG_NR30, 0x70 + .set OFFSET_REG_SOUND3CNT_H, 0x72 + .set OFFSET_REG_NR31, 0x72 + .set OFFSET_REG_NR32, 0x73 + .set OFFSET_REG_SOUND3CNT_X, 0x74 + .set OFFSET_REG_NR33, 0x74 + .set OFFSET_REG_NR34, 0x75 + .set OFFSET_REG_SOUND4CNT, 0x78 + .set OFFSET_REG_SOUND4CNT_L, 0x78 + .set OFFSET_REG_NR41, 0x78 + .set OFFSET_REG_NR42, 0x79 + .set OFFSET_REG_SOUND4CNT_H, 0x7c + .set OFFSET_REG_NR43, 0x7c + .set OFFSET_REG_NR44, 0x7d + .set OFFSET_REG_SOUNDCNT, 0x80 + .set OFFSET_REG_SOUNDCNT_L, 0x80 + .set OFFSET_REG_NR50, 0x80 + .set OFFSET_REG_NR51, 0x81 + .set OFFSET_REG_SOUNDCNT_H, 0x82 + .set OFFSET_REG_SOUNDCNT_X, 0x84 + .set OFFSET_REG_NR52, 0x84 + .set OFFSET_REG_SOUNDBIAS, 0x88 + .set OFFSET_REG_WAVE_RAM, 0x90 + .set OFFSET_REG_WAVE_RAM0, 0x90 + .set OFFSET_REG_WAVE_RAM0_L, 0x90 + .set OFFSET_REG_WAVE_RAM0_H, 0x92 + .set OFFSET_REG_WAVE_RAM1, 0x94 + .set OFFSET_REG_WAVE_RAM1_L, 0x94 + .set OFFSET_REG_WAVE_RAM1_H, 0x96 + .set OFFSET_REG_WAVE_RAM2, 0x98 + .set OFFSET_REG_WAVE_RAM2_L, 0x98 + .set OFFSET_REG_WAVE_RAM2_H, 0x9a + .set OFFSET_REG_WAVE_RAM3, 0x9c + .set OFFSET_REG_WAVE_RAM3_L, 0x9c + .set OFFSET_REG_WAVE_RAM3_H, 0x9e + .set OFFSET_REG_FIFO, 0xa0 + .set OFFSET_REG_FIFO_A, 0xa0 + .set OFFSET_REG_FIFO_A_L, 0xa0 + .set OFFSET_REG_FIFO_A_H, 0xa2 + .set OFFSET_REG_FIFO_B, 0xa4 + .set OFFSET_REG_FIFO_B_L, 0xa4 + .set OFFSET_REG_FIFO_B_H, 0xa6 + + .set OFFSET_REG_DMA0, 0xb0 + .set OFFSET_REG_DMA0SAD, 0xb0 + .set OFFSET_REG_DMA0SAD_L, 0xb0 + .set OFFSET_REG_DMA0SAD_H, 0xb2 + .set OFFSET_REG_DMA0DAD, 0xb4 + .set OFFSET_REG_DMA0DAD_L, 0xb4 + .set OFFSET_REG_DMA0DAD_H, 0xb6 + .set OFFSET_REG_DMA0CNT, 0xb8 + .set OFFSET_REG_DMA0CNT_L, 0xb8 + .set OFFSET_REG_DMA0CNT_H, 0xba + .set OFFSET_REG_DMA1, 0xbc + .set OFFSET_REG_DMA1SAD, 0xbc + .set OFFSET_REG_DMA1SAD_L, 0xbc + .set OFFSET_REG_DMA1SAD_H, 0xbe + .set OFFSET_REG_DMA1DAD, 0xc0 + .set OFFSET_REG_DMA1DAD_L, 0xc0 + .set OFFSET_REG_DMA1DAD_H, 0xc2 + .set OFFSET_REG_DMA1CNT, 0xc4 + .set OFFSET_REG_DMA1CNT_L, 0xc4 + .set OFFSET_REG_DMA1CNT_H, 0xc6 + .set OFFSET_REG_DMA2, 0xc8 + .set OFFSET_REG_DMA2SAD, 0xc8 + .set OFFSET_REG_DMA2SAD_L, 0xc8 + .set OFFSET_REG_DMA2SAD_H, 0xca + .set OFFSET_REG_DMA2DAD, 0xcc + .set OFFSET_REG_DMA2DAD_L, 0xcc + .set OFFSET_REG_DMA2DAD_H, 0xce + .set OFFSET_REG_DMA2CNT, 0xd0 + .set OFFSET_REG_DMA2CNT_L, 0xd0 + .set OFFSET_REG_DMA2CNT_H, 0xd2 + .set OFFSET_REG_DMA3, 0xd4 + .set OFFSET_REG_DMA3SAD, 0xd4 + .set OFFSET_REG_DMA3SAD_L, 0xd4 + .set OFFSET_REG_DMA3SAD_H, 0xd6 + .set OFFSET_REG_DMA3DAD, 0xd8 + .set OFFSET_REG_DMA3DAD_L, 0xd8 + .set OFFSET_REG_DMA3DAD_H, 0xda + .set OFFSET_REG_DMA3CNT, 0xdc + .set OFFSET_REG_DMA3CNT_L, 0xdc + .set OFFSET_REG_DMA3CNT_H, 0xde + + .set OFFSET_REG_TM0CNT, 0x100 + .set OFFSET_REG_TM0CNT_L, 0x100 + .set OFFSET_REG_TM0CNT_H, 0x102 + .set OFFSET_REG_TM1CNT, 0x104 + .set OFFSET_REG_TM1CNT_L, 0x104 + .set OFFSET_REG_TM1CNT_H, 0x106 + .set OFFSET_REG_TM2CNT, 0x108 + .set OFFSET_REG_TM2CNT_L, 0x108 + .set OFFSET_REG_TM2CNT_H, 0x10a + .set OFFSET_REG_TM3CNT, 0x10c + .set OFFSET_REG_TM3CNT_L, 0x10c + .set OFFSET_REG_TM3CNT_H, 0x10e + + .set OFFSET_REG_SIOCNT, 0x128 + .set OFFSET_REG_SIODATA8, 0x12a + .set OFFSET_REG_SIODATA32, 0x120 + .set OFFSET_REG_SIOMLT_SEND, 0x12a + .set OFFSET_REG_SIOMLT_RECV, 0x120 + .set OFFSET_REG_SIOMULTI0, 0x120 + .set OFFSET_REG_SIOMULTI1, 0x122 + .set OFFSET_REG_SIOMULTI2, 0x124 + .set OFFSET_REG_SIOMULTI3, 0x126 + + .set OFFSET_REG_KEYINPUT, 0x130 + .set OFFSET_REG_KEYCNT, 0x132 + + .set OFFSET_REG_RCNT, 0x134 + + .set OFFSET_REG_JOYCNT, 0x140 + .set OFFSET_REG_JOYSTAT, 0x158 + .set OFFSET_REG_JOY_RECV, 0x150 + .set OFFSET_REG_JOY_RECV_L, 0x150 + .set OFFSET_REG_JOY_RECV_H, 0x152 + .set OFFSET_REG_JOY_TRANS, 0x154 + .set OFFSET_REG_JOY_TRANS_L, 0x154 + .set OFFSET_REG_JOY_TRANS_H, 0x156 + + .set OFFSET_REG_IME, 0x208 + .set OFFSET_REG_IE, 0x200 + .set OFFSET_REG_IF, 0x202 + + .set OFFSET_REG_WAITCNT, 0x204 + +@ I/O register addresses + .set REG_DISPCNT, REG_BASE + OFFSET_REG_DISPCNT + .set REG_DISPSTAT, REG_BASE + OFFSET_REG_DISPSTAT + .set REG_VCOUNT, REG_BASE + OFFSET_REG_VCOUNT + .set REG_BG0CNT, REG_BASE + OFFSET_REG_BG0CNT + .set REG_BG1CNT, REG_BASE + OFFSET_REG_BG1CNT + .set REG_BG2CNT, REG_BASE + OFFSET_REG_BG2CNT + .set REG_BG3CNT, REG_BASE + OFFSET_REG_BG3CNT + .set REG_BG0HOFS, REG_BASE + OFFSET_REG_BG0HOFS + .set REG_BG0VOFS, REG_BASE + OFFSET_REG_BG0VOFS + .set REG_BG1HOFS, REG_BASE + OFFSET_REG_BG1HOFS + .set REG_BG1VOFS, REG_BASE + OFFSET_REG_BG1VOFS + .set REG_BG2HOFS, REG_BASE + OFFSET_REG_BG2HOFS + .set REG_BG2VOFS, REG_BASE + OFFSET_REG_BG2VOFS + .set REG_BG3HOFS, REG_BASE + OFFSET_REG_BG3HOFS + .set REG_BG3VOFS, REG_BASE + OFFSET_REG_BG3VOFS + .set REG_BG2PA, REG_BASE + OFFSET_REG_BG2PA + .set REG_BG2PB, REG_BASE + OFFSET_REG_BG2PB + .set REG_BG2PC, REG_BASE + OFFSET_REG_BG2PC + .set REG_BG2PD, REG_BASE + OFFSET_REG_BG2PD + .set REG_BG2X_L, REG_BASE + OFFSET_REG_BG2X_L + .set REG_BG2X_H, REG_BASE + OFFSET_REG_BG2X_H + .set REG_BG2Y_L, REG_BASE + OFFSET_REG_BG2Y_L + .set REG_BG2Y_H, REG_BASE + OFFSET_REG_BG2Y_H + .set REG_BG3PA, REG_BASE + OFFSET_REG_BG3PA + .set REG_BG3PB, REG_BASE + OFFSET_REG_BG3PB + .set REG_BG3PC, REG_BASE + OFFSET_REG_BG3PC + .set REG_BG3PD, REG_BASE + OFFSET_REG_BG3PD + .set REG_BG3X_L, REG_BASE + OFFSET_REG_BG3X_L + .set REG_BG3X_H, REG_BASE + OFFSET_REG_BG3X_H + .set REG_BG3Y_L, REG_BASE + OFFSET_REG_BG3Y_L + .set REG_BG3Y_H, REG_BASE + OFFSET_REG_BG3Y_H + .set REG_WIN0H, REG_BASE + OFFSET_REG_WIN0H + .set REG_WIN1H, REG_BASE + OFFSET_REG_WIN1H + .set REG_WIN0V, REG_BASE + OFFSET_REG_WIN0V + .set REG_WIN1V, REG_BASE + OFFSET_REG_WIN1V + .set REG_WININ, REG_BASE + OFFSET_REG_WININ + .set REG_WINOUT, REG_BASE + OFFSET_REG_WINOUT + .set REG_MOSAIC, REG_BASE + OFFSET_REG_MOSAIC + .set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT + .set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA + .set REG_BLDY, REG_BASE + OFFSET_REG_BLDY + + .set REG_SOUND1CNT, REG_BASE + OFFSET_REG_SOUND1CNT + .set REG_SOUND1CNT_L, REG_BASE + OFFSET_REG_SOUND1CNT_L + .set REG_NR10, REG_BASE + OFFSET_REG_NR10 + .set REG_SOUND1CNT_H, REG_BASE + OFFSET_REG_SOUND1CNT_H + .set REG_NR11, REG_BASE + OFFSET_REG_NR11 + .set REG_NR12, REG_BASE + OFFSET_REG_NR12 + .set REG_SOUND1CNT_X, REG_BASE + OFFSET_REG_SOUND1CNT_X + .set REG_NR13, REG_BASE + OFFSET_REG_NR13 + .set REG_NR14, REG_BASE + OFFSET_REG_NR14 + .set REG_SOUND2CNT, REG_BASE + OFFSET_REG_SOUND2CNT + .set REG_SOUND2CNT_L, REG_BASE + OFFSET_REG_SOUND2CNT_L + .set REG_NR21, REG_BASE + OFFSET_REG_NR21 + .set REG_NR22, REG_BASE + OFFSET_REG_NR22 + .set REG_SOUND2CNT_H, REG_BASE + OFFSET_REG_SOUND2CNT_H + .set REG_NR23, REG_BASE + OFFSET_REG_NR23 + .set REG_NR24, REG_BASE + OFFSET_REG_NR24 + .set REG_SOUND3CNT, REG_BASE + OFFSET_REG_SOUND3CNT + .set REG_SOUND3CNT_L, REG_BASE + OFFSET_REG_SOUND3CNT_L + .set REG_NR30, REG_BASE + OFFSET_REG_NR30 + .set REG_SOUND3CNT_H, REG_BASE + OFFSET_REG_SOUND3CNT_H + .set REG_NR31, REG_BASE + OFFSET_REG_NR31 + .set REG_NR32, REG_BASE + OFFSET_REG_NR32 + .set REG_SOUND3CNT_X, REG_BASE + OFFSET_REG_SOUND3CNT_X + .set REG_NR33, REG_BASE + OFFSET_REG_NR33 + .set REG_NR34, REG_BASE + OFFSET_REG_NR34 + .set REG_SOUND4CNT, REG_BASE + OFFSET_REG_SOUND4CNT + .set REG_SOUND4CNT_L, REG_BASE + OFFSET_REG_SOUND4CNT_L + .set REG_NR41, REG_BASE + OFFSET_REG_NR41 + .set REG_NR42, REG_BASE + OFFSET_REG_NR42 + .set REG_SOUND4CNT_H, REG_BASE + OFFSET_REG_SOUND4CNT_H + .set REG_NR43, REG_BASE + OFFSET_REG_NR43 + .set REG_NR44, REG_BASE + OFFSET_REG_NR44 + .set REG_SOUNDCNT, REG_BASE + OFFSET_REG_SOUNDCNT + .set REG_SOUNDCNT_L, REG_BASE + OFFSET_REG_SOUNDCNT_L + .set REG_NR50, REG_BASE + OFFSET_REG_NR50 + .set REG_NR51, REG_BASE + OFFSET_REG_NR51 + .set REG_SOUNDCNT_H, REG_BASE + OFFSET_REG_SOUNDCNT_H + .set REG_SOUNDCNT_X, REG_BASE + OFFSET_REG_SOUNDCNT_X + .set REG_NR52, REG_BASE + OFFSET_REG_NR52 + .set REG_SOUNDBIAS, REG_BASE + OFFSET_REG_SOUNDBIAS + .set REG_WAVE_RAM, REG_BASE + OFFSET_REG_WAVE_RAM + .set REG_WAVE_RAM0, REG_BASE + OFFSET_REG_WAVE_RAM0 + .set REG_WAVE_RAM0_L, REG_BASE + OFFSET_REG_WAVE_RAM0_L + .set REG_WAVE_RAM0_H, REG_BASE + OFFSET_REG_WAVE_RAM0_H + .set REG_WAVE_RAM1, REG_BASE + OFFSET_REG_WAVE_RAM1 + .set REG_WAVE_RAM1_L, REG_BASE + OFFSET_REG_WAVE_RAM1_L + .set REG_WAVE_RAM1_H, REG_BASE + OFFSET_REG_WAVE_RAM1_H + .set REG_WAVE_RAM2, REG_BASE + OFFSET_REG_WAVE_RAM2 + .set REG_WAVE_RAM2_L, REG_BASE + OFFSET_REG_WAVE_RAM2_L + .set REG_WAVE_RAM2_H, REG_BASE + OFFSET_REG_WAVE_RAM2_H + .set REG_WAVE_RAM3, REG_BASE + OFFSET_REG_WAVE_RAM3 + .set REG_WAVE_RAM3_L, REG_BASE + OFFSET_REG_WAVE_RAM3_L + .set REG_WAVE_RAM3_H, REG_BASE + OFFSET_REG_WAVE_RAM3_H + .set REG_FIFO, REG_BASE + OFFSET_REG_FIFO + .set REG_FIFO_A, REG_BASE + OFFSET_REG_FIFO_A + .set REG_FIFO_A_L, REG_BASE + OFFSET_REG_FIFO_A_L + .set REG_FIFO_A_H, REG_BASE + OFFSET_REG_FIFO_A_H + .set REG_FIFO_B, REG_BASE + OFFSET_REG_FIFO_B + .set REG_FIFO_B_L, REG_BASE + OFFSET_REG_FIFO_B_L + .set REG_FIFO_B_H, REG_BASE + OFFSET_REG_FIFO_B_H + + .set REG_DMA0, REG_BASE + OFFSET_REG_DMA0 + .set REG_DMA0SAD, REG_BASE + OFFSET_REG_DMA0SAD + .set REG_DMA0SAD_L, REG_BASE + OFFSET_REG_DMA0SAD_L + .set REG_DMA0SAD_H, REG_BASE + OFFSET_REG_DMA0SAD_H + .set REG_DMA0DAD, REG_BASE + OFFSET_REG_DMA0DAD + .set REG_DMA0DAD_L, REG_BASE + OFFSET_REG_DMA0DAD_L + .set REG_DMA0DAD_H, REG_BASE + OFFSET_REG_DMA0DAD_H + .set REG_DMA0CNT, REG_BASE + OFFSET_REG_DMA0CNT + .set REG_DMA0CNT_L, REG_BASE + OFFSET_REG_DMA0CNT_L + .set REG_DMA0CNT_H, REG_BASE + OFFSET_REG_DMA0CNT_H + .set REG_DMA1, REG_BASE + OFFSET_REG_DMA1 + .set REG_DMA1SAD, REG_BASE + OFFSET_REG_DMA1SAD + .set REG_DMA1SAD_L, REG_BASE + OFFSET_REG_DMA1SAD_L + .set REG_DMA1SAD_H, REG_BASE + OFFSET_REG_DMA1SAD_H + .set REG_DMA1DAD, REG_BASE + OFFSET_REG_DMA1DAD + .set REG_DMA1DAD_L, REG_BASE + OFFSET_REG_DMA1DAD_L + .set REG_DMA1DAD_H, REG_BASE + OFFSET_REG_DMA1DAD_H + .set REG_DMA1CNT, REG_BASE + OFFSET_REG_DMA1CNT + .set REG_DMA1CNT_L, REG_BASE + OFFSET_REG_DMA1CNT_L + .set REG_DMA1CNT_H, REG_BASE + OFFSET_REG_DMA1CNT_H + .set REG_DMA2, REG_BASE + OFFSET_REG_DMA2 + .set REG_DMA2SAD, REG_BASE + OFFSET_REG_DMA2SAD + .set REG_DMA2SAD_L, REG_BASE + OFFSET_REG_DMA2SAD_L + .set REG_DMA2SAD_H, REG_BASE + OFFSET_REG_DMA2SAD_H + .set REG_DMA2DAD, REG_BASE + OFFSET_REG_DMA2DAD + .set REG_DMA2DAD_L, REG_BASE + OFFSET_REG_DMA2DAD_L + .set REG_DMA2DAD_H, REG_BASE + OFFSET_REG_DMA2DAD_H + .set REG_DMA2CNT, REG_BASE + OFFSET_REG_DMA2CNT + .set REG_DMA2CNT_L, REG_BASE + OFFSET_REG_DMA2CNT_L + .set REG_DMA2CNT_H, REG_BASE + OFFSET_REG_DMA2CNT_H + .set REG_DMA3, REG_BASE + OFFSET_REG_DMA3 + .set REG_DMA3SAD, REG_BASE + OFFSET_REG_DMA3SAD + .set REG_DMA3SAD_L, REG_BASE + OFFSET_REG_DMA3SAD_L + .set REG_DMA3SAD_H, REG_BASE + OFFSET_REG_DMA3SAD_H + .set REG_DMA3DAD, REG_BASE + OFFSET_REG_DMA3DAD + .set REG_DMA3DAD_L, REG_BASE + OFFSET_REG_DMA3DAD_L + .set REG_DMA3DAD_H, REG_BASE + OFFSET_REG_DMA3DAD_H + .set REG_DMA3CNT, REG_BASE + OFFSET_REG_DMA3CNT + .set REG_DMA3CNT_L, REG_BASE + OFFSET_REG_DMA3CNT_L + .set REG_DMA3CNT_H, REG_BASE + OFFSET_REG_DMA3CNT_H + + .set REG_TM0CNT, REG_BASE + OFFSET_REG_TM0CNT + .set REG_TM0CNT_L, REG_BASE + OFFSET_REG_TM0CNT_L + .set REG_TM0CNT_H, REG_BASE + OFFSET_REG_TM0CNT_H + .set REG_TM1CNT, REG_BASE + OFFSET_REG_TM1CNT + .set REG_TM1CNT_L, REG_BASE + OFFSET_REG_TM1CNT_L + .set REG_TM1CNT_H, REG_BASE + OFFSET_REG_TM1CNT_H + .set REG_TM2CNT, REG_BASE + OFFSET_REG_TM2CNT + .set REG_TM2CNT_L, REG_BASE + OFFSET_REG_TM2CNT_L + .set REG_TM2CNT_H, REG_BASE + OFFSET_REG_TM2CNT_H + .set REG_TM3CNT, REG_BASE + OFFSET_REG_TM3CNT + .set REG_TM3CNT_L, REG_BASE + OFFSET_REG_TM3CNT_L + .set REG_TM3CNT_H, REG_BASE + OFFSET_REG_TM3CNT_H + + .set REG_SIOCNT, REG_BASE + OFFSET_REG_SIOCNT + .set REG_SIODATA8, REG_BASE + OFFSET_REG_SIODATA8 + .set REG_SIODATA32, REG_BASE + OFFSET_REG_SIODATA32 + .set REG_SIOMLT_SEND, REG_BASE + OFFSET_REG_SIOMLT_SEND + .set REG_SIOMLT_RECV, REG_BASE + OFFSET_REG_SIOMLT_RECV + .set REG_SIOMULTI0, REG_BASE + OFFSET_REG_SIOMULTI0 + .set REG_SIOMULTI1, REG_BASE + OFFSET_REG_SIOMULTI1 + .set REG_SIOMULTI2, REG_BASE + OFFSET_REG_SIOMULTI2 + .set REG_SIOMULTI3, REG_BASE + OFFSET_REG_SIOMULTI3 + + .set REG_KEYINPUT, REG_BASE + OFFSET_REG_KEYINPUT + .set REG_KEYCNT, REG_BASE + OFFSET_REG_KEYCNT + + .set REG_RCNT, REG_BASE + OFFSET_REG_RCNT + + .set REG_JOYCNT, REG_BASE + OFFSET_REG_JOYCNT + .set REG_JOYSTAT, REG_BASE + OFFSET_REG_JOYSTAT + .set REG_JOY_RECV, REG_BASE + OFFSET_REG_JOY_RECV + .set REG_JOY_RECV_L, REG_BASE + OFFSET_REG_JOY_RECV_L + .set REG_JOY_RECV_H, REG_BASE + OFFSET_REG_JOY_RECV_H + .set REG_JOY_TRANS, REG_BASE + OFFSET_REG_JOY_TRANS + .set REG_JOY_TRANS_L, REG_BASE + OFFSET_REG_JOY_TRANS_L + .set REG_JOY_TRANS_H, REG_BASE + OFFSET_REG_JOY_TRANS_H + + .set REG_IME, REG_BASE + OFFSET_REG_IME + .set REG_IE, REG_BASE + OFFSET_REG_IE + .set REG_IF, REG_BASE + OFFSET_REG_IF + + .set REG_WAITCNT, REG_BASE + OFFSET_REG_WAITCNT + +@ DMA register constants + + .set DMA_DEST_INC, 0x0000 + .set DMA_DEST_DEC, 0x0020 + .set DMA_DEST_FIXED, 0x0040 + .set DMA_DEST_RELOAD, 0x0060 + .set DMA_SRC_INC, 0x0000 + .set DMA_SRC_DEC, 0x0080 + .set DMA_SRC_FIXED, 0x0100 + .set DMA_REPEAT, 0x0200 + .set DMA_16BIT, 0x0000 + .set DMA_32BIT, 0x0400 + .set DMA_DREQ_ON, 0x0800 + .set DMA_START_NOW, 0x0000 + .set DMA_START_VBLANK, 0x1000 + .set DMA_START_HBLANK, 0x2000 + .set DMA_START_SPECIAL, 0x3000 + .set DMA_INTR_ENABLE, 0x4000 + .set DMA_ENABLE, 0x8000 + +@ OAM attribute constants + + .set OAM_OBJ_NORMAL, 0x00000000 + .set OAM_OBJ_BLEND, 0x00000400 + .set OAM_OBJ_WINDOW, 0x00000800 + + .set OAM_AFFINE_NONE, 0x00000000 + .set OAM_AFFINE_NORMAL_SIZE, 0x00000100 + .set OAM_OBJ_DISABLED, 0x00000200 + .set OAM_AFFINE_DOUBLE_SIZE, 0x00000300 + + .set OAM_MOSAIC_OFF, 0x00000000 + .set OAM_MOSAIC_ON, 0x00001000 + + .set OAM_4BPP, 0x00000000 + .set OAM_8BPP, 0x00002000 + + .set OAM_H_FLIP, 0x10000000 + .set OAM_V_FLIP, 0x20000000 + + .set OAM_SQUARE, 0x00000000 + .set OAM_H_RECTANGLE, 0x00004000 + .set OAM_V_RECTANGLE, 0x00008000 + .set OAM_SIZE_0, 0x00000000 + .set OAM_SIZE_1, 0x40000000 + .set OAM_SIZE_2, 0x80000000 + .set OAM_SIZE_3, 0xc0000000 + + .set OAM_SIZE_8x8, OAM_SIZE_0 | OAM_SQUARE + .set OAM_SIZE_16x16, OAM_SIZE_1 | OAM_SQUARE + .set OAM_SIZE_32x32, OAM_SIZE_2 | OAM_SQUARE + .set OAM_SIZE_64x64, OAM_SIZE_3 | OAM_SQUARE + + .set OAM_SIZE_16x8, OAM_SIZE_0 | OAM_H_RECTANGLE + .set OAM_SIZE_32x8, OAM_SIZE_1 | OAM_H_RECTANGLE + .set OAM_SIZE_32x16, OAM_SIZE_2 | OAM_H_RECTANGLE + .set OAM_SIZE_64x32, OAM_SIZE_3 | OAM_H_RECTANGLE + + .set OAM_SIZE_8x16, OAM_SIZE_0 | OAM_V_RECTANGLE + .set OAM_SIZE_8x32, OAM_SIZE_1 | OAM_V_RECTANGLE + .set OAM_SIZE_16x32, OAM_SIZE_2 | OAM_V_RECTANGLE + .set OAM_SIZE_32x64, OAM_SIZE_3 | OAM_V_RECTANGLE + +@ SIO constants + + .set SIO_ENABLE, 0x80 + .set SIO_ERROR, 0x40 diff --git a/sa1/constants/m4a_constants.inc b/sa1/constants/m4a_constants.inc new file mode 100644 index 0000000000..8072c69229 --- /dev/null +++ b/sa1/constants/m4a_constants.inc @@ -0,0 +1,257 @@ +#ifndef GUARD_CONSTANTS_M4A_CONSTANTS_INC +#define GUARD_CONSTANTS_M4A_CONSTANTS_INC + + .equiv ID_NUMBER, 0x68736d53 + + .equiv PCM_DMA_BUF_SIZE, 1584 + .equiv MAX_DIRECTSOUND_CHANNELS, 12 + + .equiv C_V, 0x40 + + .equiv TONEDATA_TYPE_CGB, 0x07 + .equiv TONEDATA_TYPE_FIX, 0x08 + .equiv TONEDATA_TYPE_REV, 0x10 + .equiv TONEDATA_TYPE_CMP, 0x20 + .equiv TONEDATA_TYPE_SPL, 0x40 /* key split*/ + .equiv TONEDATA_TYPE_RHY, 0x80 /* rhythm*/ + + .equiv TONEDATA_P_S_PAN, 0xc0 + + .equiv SOUND_CHANNEL_SF_START, 0x80 + .equiv SOUND_CHANNEL_SF_STOP, 0x40 + .equiv SOUND_CHANNEL_SF_SPECIAL, 0x20 + .equiv SOUND_CHANNEL_SF_LOOP, 0x10 + .equiv SOUND_CHANNEL_SF_IEC, 0x04 + .equiv SOUND_CHANNEL_SF_ENV, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_ATTACK, 0x03 + .equiv SOUND_CHANNEL_SF_ENV_DECAY, 0x02 + .equiv SOUND_CHANNEL_SF_ENV_SUSTAIN, 0x01 + .equiv SOUND_CHANNEL_SF_ENV_RELEASE, 0x00 + .equiv SOUND_CHANNEL_SF_ON, (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + + .equiv CGB_CHANNEL_MO_PIT, 0x02 + .equiv CGB_CHANNEL_MO_VOL, 0x01 + + .equiv WAVE_DATA_FLAG_LOOP, 0xC0 + + .equiv MPT_FLG_VOLSET, 0x01 + .equiv MPT_FLG_VOLCHG, 0x03 + .equiv MPT_FLG_PITSET, 0x04 + .equiv MPT_FLG_PITCHG, 0x0C + .equiv MPT_FLG_START, 0x40 + .equiv MPT_FLG_EXIST, 0x80 + + .macro struct_begin + .struct 0 + .endm + + .macro struct_field name, size +\name: + .struct \name + \size + .endm + + struct_begin + struct_field o_WaveData_type, 2 + struct_field o_WaveData_d1, 1 + struct_field o_WaveData_flags, 1 + struct_field o_WaveData_freq, 4 + struct_field o_WaveData_loopStart, 4 + struct_field o_WaveData_size, 4 + struct_field o_WaveData_data, 0 + struct_field WaveData_size, 0 + + struct_begin + struct_field o_ToneData_type, 1 + struct_field o_ToneData_key, 1 + struct_field o_ToneData_length, 1 + struct_field o_ToneData_pan_sweep, 1 + struct_field o_ToneData_wav, 4 + struct_field o_ToneData_attack, 1 + struct_field o_ToneData_decay, 1 + struct_field o_ToneData_sustain, 1 + struct_field o_ToneData_release, 1 + struct_field ToneData_size, 0 + + struct_begin + struct_field o_SoundInfo_ident, 4 + struct_field o_SoundInfo_pcmDmaCounter, 1 + struct_field o_SoundInfo_reverb, 1 + struct_field o_SoundInfo_maxChans, 1 + struct_field o_SoundInfo_masterVolume, 1 + struct_field o_SoundInfo_freq, 1 + struct_field o_SoundInfo_mode, 1 + struct_field o_SoundInfo_c15, 1 + struct_field o_SoundInfo_pcmDmaPeriod, 1 + struct_field o_SoundInfo_maxLines, 1 + struct_field o_SoundInfo_gap, 3 + struct_field o_SoundInfo_pcmSamplesPerVBlank, 4 + struct_field o_SoundInfo_pcmFreq, 4 + struct_field o_SoundInfo_divFreq, 4 + struct_field o_SoundInfo_cgbChans, 4 + struct_field o_SoundInfo_MPlayMainHead, 4 + struct_field o_SoundInfo_musicPlayerHead, 4 + struct_field o_SoundInfo_CgbSound, 4 + struct_field o_SoundInfo_CgbOscOff, 4 + struct_field o_SoundInfo_MidiKeyToCgbFreq, 4 + struct_field o_SoundInfo_MPlayJumpTable, 4 + struct_field o_SoundInfo_plynote, 4 + struct_field o_SoundInfo_ExtVolPit, 4 + struct_field o_SoundInfo_gap2, 16 + struct_field o_SoundInfo_chans, MAX_DIRECTSOUND_CHANNELS * 64 + struct_field o_SoundInfo_pcmBuffer, PCM_DMA_BUF_SIZE * 2 + struct_field SoundInfo_size, 0 + + struct_begin + struct_field o_SoundChannel_statusFlags, 1 + struct_field o_SoundChannel_type, 1 + struct_field o_SoundChannel_rightVolume, 1 + struct_field o_SoundChannel_leftVolume, 1 + struct_field o_SoundChannel_attack, 1 + struct_field o_SoundChannel_decay, 1 + struct_field o_SoundChannel_sustain, 1 + struct_field o_SoundChannel_release, 1 + struct_field o_SoundChannel_key, 1 + struct_field o_SoundChannel_envelopeVolume, 1 + struct_field o_SoundChannel_envelopeVolumeRight, 1 + struct_field o_SoundChannel_envelopeVolumeLeft, 1 + struct_field o_SoundChannel_pseudoEchoVolume, 1 + struct_field o_SoundChannel_pseudoEchoLength, 1 + struct_field o_SoundChannel_dummy1, 1 + struct_field o_SoundChannel_dummy2, 1 + struct_field o_SoundChannel_gateTime, 1 + struct_field o_SoundChannel_midiKey, 1 + struct_field o_SoundChannel_velocity, 1 + struct_field o_SoundChannel_priority, 1 + struct_field o_SoundChannel_rhythmPan, 1 + struct_field o_SoundChannel_dummy3, 3 + struct_field o_SoundChannel_count, 4 + struct_field o_SoundChannel_fw, 4 + struct_field o_SoundChannel_frequency, 4 + struct_field o_SoundChannel_wav, 4 + struct_field o_SoundChannel_currentPointer, 4 + struct_field o_SoundChannel_track, 4 + struct_field o_SoundChannel_prevChannelPointer, 4 + struct_field o_SoundChannel_nextChannelPointer, 4 + struct_field o_SoundChannel_dummy4, 4 + struct_field o_SoundChannel_xpi, 2 + struct_field o_SoundChannel_xpc, 2 + struct_field SoundChannel_size, 0 + + struct_begin + struct_field o_MusicPlayerTrack_flags, 1 + struct_field o_MusicPlayerTrack_wait, 1 + struct_field o_MusicPlayerTrack_patternLevel, 1 + struct_field o_MusicPlayerTrack_repN, 1 + struct_field o_MusicPlayerTrack_gateTime, 1 + struct_field o_MusicPlayerTrack_key, 1 + struct_field o_MusicPlayerTrack_velocity, 1 + struct_field o_MusicPlayerTrack_runningStatus, 1 + struct_field o_MusicPlayerTrack_keyM, 1 + struct_field o_MusicPlayerTrack_pitM, 1 + struct_field o_MusicPlayerTrack_keyShift, 1 + struct_field o_MusicPlayerTrack_keyShiftX, 1 + struct_field o_MusicPlayerTrack_tune, 1 + struct_field o_MusicPlayerTrack_pitX, 1 + struct_field o_MusicPlayerTrack_bend, 1 + struct_field o_MusicPlayerTrack_bendRange, 1 + struct_field o_MusicPlayerTrack_volMR, 1 + struct_field o_MusicPlayerTrack_volML, 1 + struct_field o_MusicPlayerTrack_vol, 1 + struct_field o_MusicPlayerTrack_volX, 1 + struct_field o_MusicPlayerTrack_pan, 1 + struct_field o_MusicPlayerTrack_panX, 1 + struct_field o_MusicPlayerTrack_modM, 1 + struct_field o_MusicPlayerTrack_mod, 1 + struct_field o_MusicPlayerTrack_modT, 1 + struct_field o_MusicPlayerTrack_lfoSpeed, 1 + struct_field o_MusicPlayerTrack_lfoSpeedC, 1 + struct_field o_MusicPlayerTrack_lfoDelay, 1 + struct_field o_MusicPlayerTrack_lfoDelayC, 1 + struct_field o_MusicPlayerTrack_priority, 1 + struct_field o_MusicPlayerTrack_pseudoEchoVolume, 1 + struct_field o_MusicPlayerTrack_pseudoEchoLength, 1 + struct_field o_MusicPlayerTrack_chan, 4 + struct_field o_MusicPlayerTrack_ToneData_type, 1 + struct_field o_MusicPlayerTrack_ToneData_key, 1 + struct_field o_MusicPlayerTrack_ToneData_length, 1 + struct_field o_MusicPlayerTrack_ToneData_pan_sweep, 1 + struct_field o_MusicPlayerTrack_ToneData_wav, 4 + struct_field o_MusicPlayerTrack_ToneData_attack, 1 + struct_field o_MusicPlayerTrack_ToneData_decay, 1 + struct_field o_MusicPlayerTrack_ToneData_sustain, 1 + struct_field o_MusicPlayerTrack_ToneData_release, 1 + struct_field o_MusicPlayerTrack_gap, 10 + struct_field o_MusicPlayerTrack_unk_3A, 2 + struct_field o_MusicPlayerTrack_unk_3C, 4 + struct_field o_MusicPlayerTrack_cmdPtr, 4 + struct_field o_MusicPlayerTrack_patternStack, 12 + struct_field MusicPlayerTrack_size, 0 + + .equiv o_MusicPlayerTrack_ToneData_keySplitTable, o_MusicPlayerTrack_ToneData_attack + + struct_begin + struct_field o_MusicPlayerInfo_songHeader, 4 + struct_field o_MusicPlayerInfo_status, 4 + struct_field o_MusicPlayerInfo_trackCount, 1 + struct_field o_MusicPlayerInfo_priority, 1 + struct_field o_MusicPlayerInfo_cmd, 1 + struct_field o_MusicPlayerInfo_unk_B, 1 + struct_field o_MusicPlayerInfo_clock, 4 + struct_field o_MusicPlayerInfo_gap, 8 + struct_field o_MusicPlayerInfo_memAccArea, 4 + struct_field o_MusicPlayerInfo_tempoD, 2 + struct_field o_MusicPlayerInfo_tempoU, 2 + struct_field o_MusicPlayerInfo_tempoI, 2 + struct_field o_MusicPlayerInfo_tempoC, 2 + struct_field o_MusicPlayerInfo_fadeOI, 2 + struct_field o_MusicPlayerInfo_fadeOC, 2 + struct_field o_MusicPlayerInfo_fadeOV, 2 + struct_field o_MusicPlayerInfo_padding, 2 + struct_field o_MusicPlayerInfo_tracks, 4 + struct_field o_MusicPlayerInfo_tone, 4 + struct_field o_MusicPlayerInfo_ident, 4 + struct_field o_MusicPlayerInfo_func, 4 + struct_field o_MusicPlayerInfo_intp, 4 + struct_field MusicPlayerInfo_size, 0 + + struct_begin + struct_field o_CgbChannel_statusFlags, 1 + struct_field o_CgbChannel_type, 1 + struct_field o_CgbChannel_rightVolume, 1 + struct_field o_CgbChannel_leftVolume, 1 + struct_field o_CgbChannel_attack, 1 + struct_field o_CgbChannel_decay, 1 + struct_field o_CgbChannel_sustain, 1 + struct_field o_CgbChannel_release, 1 + struct_field o_CgbChannel_key, 1 + struct_field o_CgbChannel_envelopeVolume, 1 + struct_field o_CgbChannel_envelopeGoal, 1 + struct_field o_CgbChannel_envelopeCounter, 1 + struct_field o_CgbChannel_pseudoEchoVolume, 1 + struct_field o_CgbChannel_pseudoEchoLength, 1 + struct_field o_CgbChannel_dummy1, 1 + struct_field o_CgbChannel_dummy2, 1 + struct_field o_CgbChannel_gateTime, 1 + struct_field o_CgbChannel_midiKey, 1 + struct_field o_CgbChannel_velocity, 1 + struct_field o_CgbChannel_priority, 1 + struct_field o_CgbChannel_rhythmPan, 1 + struct_field o_CgbChannel_dummy3, 3 + struct_field o_CgbChannel_dummy5, 1 + struct_field o_CgbChannel_sustainGoal, 1 + struct_field o_CgbChannel_n4, 1 + struct_field o_CgbChannel_pan, 1 + struct_field o_CgbChannel_panMask, 1 + struct_field o_CgbChannel_modify, 1 + struct_field o_CgbChannel_length, 1 + struct_field o_CgbChannel_sweep, 1 + struct_field o_CgbChannel_frequency, 4 + struct_field o_CgbChannel_wavePointer, 4 + struct_field o_CgbChannel_currentPointer, 4 + struct_field o_CgbChannel_track, 4 + struct_field o_CgbChannel_prevChannelPointer, 4 + struct_field o_CgbChannel_nextChannelPointer, 4 + struct_field o_CgbChannel_dummy4, 8 + struct_field CgbChannel_size, 0 + +#endif @ GUARD_CONSTANTS_M4A_CONSTANTS_INC diff --git a/sa1/constants/misc_constants.inc b/sa1/constants/misc_constants.inc new file mode 100644 index 0000000000..19b47bbceb --- /dev/null +++ b/sa1/constants/misc_constants.inc @@ -0,0 +1,28 @@ + .set TRUE, 1 + .set FALSE, 0 + + .set NULL, 0 + + .set DISPLAY_WIDTH, 240 + .set DISPLAY_HEIGHT, 160 + + .set SPRITE_SIZE_8x8, (OAM_SIZE_0 >> 28) | (OAM_SQUARE >> 14) + .set SPRITE_SIZE_16x16, (OAM_SIZE_1 >> 28) | (OAM_SQUARE >> 14) + .set SPRITE_SIZE_32x32, (OAM_SIZE_2 >> 28) | (OAM_SQUARE >> 14) + .set SPRITE_SIZE_64x64, (OAM_SIZE_3 >> 28) | (OAM_SQUARE >> 14) + + .set SPRITE_SIZE_16x8, (OAM_SIZE_0 >> 28) | (OAM_H_RECTANGLE >> 14) + .set SPRITE_SIZE_32x8, (OAM_SIZE_1 >> 28) | (OAM_H_RECTANGLE >> 14) + .set SPRITE_SIZE_32x16, (OAM_SIZE_2 >> 28) | (OAM_H_RECTANGLE >> 14) + .set SPRITE_SIZE_64x32, (OAM_SIZE_3 >> 28) | (OAM_H_RECTANGLE >> 14) + + .set SPRITE_SIZE_8x16, (OAM_SIZE_0 >> 28) | (OAM_V_RECTANGLE >> 14) + .set SPRITE_SIZE_8x32, (OAM_SIZE_1 >> 28) | (OAM_V_RECTANGLE >> 14) + .set SPRITE_SIZE_16x32, (OAM_SIZE_2 >> 28) | (OAM_V_RECTANGLE >> 14) + .set SPRITE_SIZE_32x64, (OAM_SIZE_3 >> 28) | (OAM_V_RECTANGLE >> 14) + + .set TILE_SIZE_4BPP, (8*8 / 2) @ <= 32 (0x20) + .set TILE_SIZE_8BPP, (8*8) @ <= 64 (0x40) + + .set METATILE_WIDTH, 12 + .set METATILE_HEIGHT, 12 diff --git a/sa1/constants/multi_sio_constants.inc b/sa1/constants/multi_sio_constants.inc new file mode 100644 index 0000000000..b3a19770e0 --- /dev/null +++ b/sa1/constants/multi_sio_constants.inc @@ -0,0 +1,66 @@ +@ Optimize the following settings based on the software specifications + +MULTI_SIO_BLOCK_SIZE = 20 @ Communication Data Block Size (Max. 24 Bytes) + +MULTI_SIO_PLAYERS_MAX = 4 @ Maximum Number of Players + +MULTI_SIO_SYNC_DATA = 0xfefe @ Synchronized Data (0x0000/0xfffa~0xffff prohibited) + +@ Comment out if no space in CPU internal Work RAM +MULTI_SIO_DI_FUNC_FAST = 1 @ SIO Interrupt Prohibit Function High Speed Flag (CPU Internal RAM Execution) + + +MULTI_SIO_TIMER_NO = 3 @ Timer No. +MULTI_SIO_TIMER_INTR_FLAG = (INTR_FLAG_TIMER0 << MULTI_SIO_TIMER_NO) + @ Timer Interrupt Flag +REG_MULTI_SIO_TIMER = (REG_TM0CNT + MULTI_SIO_TIMER_NO * 4) +REG_MULTI_SIO_TIMER_L = REG_MULTI_SIO_TIMER +REG_MULTI_SIO_TIMER_H = (REG_MULTI_SIO_TIMER + 2) + @ Timer Register + + +@ Multi-play Communication Packet Structure Offset + +OFS_MSP_FRAME_COUNTER = 0 @ Frame Counter +OFS_MSP_RECV_ERROR_FLAGS = 1 @ Receive Error Flag +OFS_MSP_CHECK_SUM = 2 @ Checksum +OFS_MSP_DATA = 4 @ Communication Data +OFS_MSP_OVERRUN_CATCH = (OFS_MSP_DATA + MULTI_SIO_BLOCK_SIZE) + @ Overrun Protect Area + +MULTI_SIO_PACKET_SIZE = (OFS_MSP_OVERRUN_CATCH + 4) + @ Structure Size + + +@ Multi-play Communication Work Area Structure Offset + +OFS_MS_TYPE = 0 @ Connection (Master/Slave) +OFS_MS_STATE = 1 @ Communication Function State +OFS_MS_CONNECTED_FLAG = 2 @ Connection History Flag +OFS_MS_RECV_SUCCESS_FLAGS = 3 @ Receive Success Flag + +OFS_MS_SYNC_RECV_FLAG = 4 @ Synchronized Data Receive Confirmation Flag +OFS_MS_SYNC_RECV_ADJUST_COUNTER = 8 @ Synchronization Adjustment Counter + +OFS_MS_SEND_BUF_COUNTER_INIT = 10 @ Send Buffer Counter Initialization + +OFS_MS_SYNC_SEND_FRAME_COUNTER = 11 @ Send Frame Counter +OFS_MS_SYNC_RECV_FRAME_COUNTER = 12 @ Receive Frame Counter + +OFS_MS_SEND_BUF_COUNTER = 20 @ Send Buffer Counter +OFS_MS_RECV_BUF_COUNTER = 24 @ Receive Buffer Counter + +OFS_MS_NEXT_SEND_BUF_P = 40 @ Send Buffer Pointer +OFS_MS_CURRENT_SEND_BUF_P = 44 +OFS_MS_CURRENT_RECV_BUF_P = 48 @ Receive Buffer Pointer +OFS_MS_LAST_RECV_BUF_P = 64 +OFS_MS_RECV_CHECK_BUF_P = 80 + +OFS_MS_SEND_BUF = 96 @ Send Buffer (Double Buffer) +OFS_MS_RECV_BUF = (OFS_MS_SEND_BUF + MULTI_SIO_PACKET_SIZE * 2) + @ Receive Buffer (Triple Buffer) + +MULTI_SIO_AREA_SIZE = (OFS_MS_RECV_BUF + MULTI_SIO_PACKET_SIZE * 3 * MULTI_SIO_PLAYERS_MAX) + @ Structure Size + +OFS_MS_HARD_ERROR = 9 diff --git a/sa1/data/build_info.s b/sa1/data/build_info.s new file mode 100644 index 0000000000..4b796cf019 --- /dev/null +++ b/sa1/data/build_info.s @@ -0,0 +1,7 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + +mSectionRodata + +RomBuildInfo: + .ascii "0.71Wed Nov 21 13:22:30 2001\r\n" diff --git a/sa1/data/chao_garden.s b/sa1/data/chao_garden.s new file mode 100644 index 0000000000..e5aeecccc1 --- /dev/null +++ b/sa1/data/chao_garden.s @@ -0,0 +1,9 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .align 2 , 0 + .global C_DECL(gMultiBootProgram_TinyChaoGarden) +C_DECL(gMultiBootProgram_TinyChaoGarden): + .incbin "baserom_sa1.gba", 0x0009C170, 0x1EDD4 diff --git a/sa1/data/data1.s b/sa1/data/data1.s new file mode 100644 index 0000000000..cefb785949 --- /dev/null +++ b/sa1/data/data1.s @@ -0,0 +1,51 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .space 0x100 + + .global C_DECL(gDemoRecordings) +C_DECL(gDemoRecordings): + mPtr demo1 + mPtr demo2 + mPtr demo3 + mPtr demo4 + + .global C_DECL(gUnknown_087BF8DC) +C_DECL(gUnknown_087BF8DC): + mPtr C_DECL(gUnknown_08487358) + mPtr C_DECL(gUnknown_08487BBC) + mPtr C_DECL(gUnknown_0848872C) + mPtr C_DECL(gUnknown_08489308) + mPtr C_DECL(gUnknown_08489F5C) + mPtr C_DECL(gUnknown_0848ADB4) + mPtr C_DECL(gUnknown_0848BA80) + .ascii "CODRED\0\0" + .ascii "NIMDA \0\0" + .ascii "CIRCAM\0\0" + .ascii "HAPTIM\0\0" + +@@@ +@@@ Compressed Input-recordings for Demo playback +@@@ + @ src/data/recordings.c:static const u8 demo1[] + .global demo1 +demo1: + .incbin "baserom_sa1.gba", 0x007BF918, 0x1F8 + + @ src/data/recordings.c:static const u8 demo2[] + .global demo2 +demo2: + .incbin "baserom_sa1.gba", 0x007BFB10, 0x200 + + @ src/data/recordings.c:static const u8 demo4[] + @ NOTE: Ice Mountain data comes before Casino Paradise! + .global demo4 +demo4: + .incbin "baserom_sa1.gba", 0x007BFD10, 0x208 + + @ src/data/recordings.c:static const u8 demo3[] + .global demo3 +demo3: + .incbin "baserom_sa1.gba", 0x007BFF18, 0x200 diff --git a/sa1/data/data1_1.s b/sa1/data/data1_1.s new file mode 100644 index 0000000000..2ae113fa15 --- /dev/null +++ b/sa1/data/data1_1.s @@ -0,0 +1,44 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(gMultiboot_087C0258) +C_DECL(gMultiboot_087C0258): + .incbin "baserom_sa1.gba", 0x007C0258, 0x20A0 + + .global C_DECL(gMultiboot_087C22F8) +C_DECL(gMultiboot_087C22F8): + .incbin "baserom_sa1.gba", 0x007C22F8, 0x8000 + + .global C_DECL(gUnknown_087CA2F8) +C_DECL(gUnknown_087CA2F8): + .incbin "baserom_sa1.gba", 0x007CA2F8, 0x8000 + + .global C_DECL(gUnknown_087D22F8) +C_DECL(gUnknown_087D22F8): + .incbin "baserom_sa1.gba", 0x007D22F8, 0x5B88 + + .global C_DECL(gUnknown_087D7E80) +C_DECL(gUnknown_087D7E80): + .incbin "baserom_sa1.gba", 0x007D7E80, 0x8000 + + .global C_DECL(gUnknown_087DFE80) +C_DECL(gUnknown_087DFE80): + .incbin "baserom_sa1.gba", 0x007DFE80, 0x3790 + + .global C_DECL(gUnknown_087E3610) +C_DECL(gUnknown_087E3610): + .incbin "baserom_sa1.gba", 0x007E3610, 0x8000 + + .global C_DECL(gUnknown_087EB610) +C_DECL(gUnknown_087EB610): + .incbin "baserom_sa1.gba", 0x007EB610, 0x6B18 + + .global C_DECL(gUnknown_087F2128) +C_DECL(gUnknown_087F2128): + .incbin "baserom_sa1.gba", 0x007F2128, 0x67C8 + + .global C_DECL(gUnknown_087F88F0) +C_DECL(gUnknown_087F88F0): + .incbin "baserom_sa1.gba", 0x007F88F0, 0x673C diff --git a/sa1/data/data_0_1_2.s b/sa1/data/data_0_1_2.s new file mode 100644 index 0000000000..0ab1df7a4b --- /dev/null +++ b/sa1/data/data_0_1_2.s @@ -0,0 +1,34 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + .align 2 , 0 + + .global C_DECL(gUnknown_080BB3F8) +C_DECL(gUnknown_080BB3F8): + mPtr C_DECL(gMultiboot_087C22F8) + mPtr C_DECL(gUnknown_087CA2F8) + mPtr C_DECL(gUnknown_087D22F8) + mPtr C_DECL(gUnknown_087E3610) + mPtr C_DECL(gUnknown_087EB610) + mPtr C_DECL(gUnknown_087F2128) + mPtr C_DECL(gUnknown_087F88F0) + mPtr C_DECL(gUnknown_087DFE80) + mPtr C_DECL(gUnknown_087D7E80) + + .global C_DECL(gUnknown_080BB41C) +C_DECL(gUnknown_080BB41C): + .short 697, 697, 695, 695, 696, 696, 697, 695 + + .global C_DECL(gUnknown_080BB42C) +C_DECL(gUnknown_080BB42C): + .byte 0, 1, 0, 1, 0, 1, 0, 0 + + .global C_DECL(gUnknown_080BB434) +C_DECL(gUnknown_080BB434): + .byte 1, 1, 4, 4, 16, 12, 1, 4 + + .global C_DECL(gUnknown_080BB43C) +C_DECL(gUnknown_080BB43C): + .short 438, 449, 448, 438, 447, 448, 439, 446 + .short 442, 443, 444, 448, 447, 449, 442, 0 diff --git a/sa1/data/data_0_1_4.s b/sa1/data/data_0_1_4.s new file mode 100644 index 0000000000..afd6dd3e78 --- /dev/null +++ b/sa1/data/data_0_1_4.s @@ -0,0 +1,17 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + .align 2 , 0 + + .global C_DECL(gUnknown_080BB544) +C_DECL(gUnknown_080BB544): + .short 0x022F, 0x022F + .short 0x022F, 0x022F + .short 0x022F, 0x022F + .short 0x0252, 0x0252 + .short 0x0253, 0x0253 + .short 0x0254, 0x0254 + .short 0x0254, 0x0254 + .short 0x022F, 0x022F + .short 0x022F, 0x0254 diff --git a/sa1/data/data_0_2.s b/sa1/data/data_0_2.s new file mode 100644 index 0000000000..93c61d851a --- /dev/null +++ b/sa1/data/data_0_2.s @@ -0,0 +1,88 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(gUnknown_08487134) +C_DECL(gUnknown_08487134): + .incbin "baserom_sa1.gba", 0x00487134, 0xC + + .global C_DECL(gUnknown_08487140) +C_DECL(gUnknown_08487140): + .incbin "baserom_sa1.gba", 0x00487140, 0x1C + + .global C_DECL(gUnknown_0848715C) +C_DECL(gUnknown_0848715C): + .incbin "baserom_sa1.gba", 0x0048715C, 0x28 + + .global C_DECL(gUnknown_08487184) +C_DECL(gUnknown_08487184): + .incbin "baserom_sa1.gba", 0x00487184, 0x40 + + .global C_DECL(gUnknown_084871C4) +C_DECL(gUnknown_084871C4): + .incbin "baserom_sa1.gba", 0x004871C4, 0x40 + + .global C_DECL(gUnknown_08487204) +C_DECL(gUnknown_08487204): + .incbin "baserom_sa1.gba", 0x00487204, 0x8 + + .global C_DECL(gUnknown_0848720C) +C_DECL(gUnknown_0848720C): + .incbin "baserom_sa1.gba", 0x0048720C, 0x8 + + .global C_DECL(gUnknown_08487214) +C_DECL(gUnknown_08487214): + .incbin "baserom_sa1.gba", 0x00487214, 0x18 + + .global C_DECL(gUnknown_0848722C) +C_DECL(gUnknown_0848722C): + .incbin "baserom_sa1.gba", 0x0048722C, 0x60 + + .global C_DECL(gUnknown_0848728C) +C_DECL(gUnknown_0848728C): + .incbin "baserom_sa1.gba", 0x0048728C, 0x38 + + .global C_DECL(gUnknown_084872C4) +C_DECL(gUnknown_084872C4): + .incbin "baserom_sa1.gba", 0x004872C4, 0x1C + + .global C_DECL(gUnknown_084872E0) +C_DECL(gUnknown_084872E0): + .incbin "baserom_sa1.gba", 0x004872E0, 0x30 + + .global C_DECL(gUnknown_08487310) +C_DECL(gUnknown_08487310): + .incbin "baserom_sa1.gba", 0x00487310, 0x20 + + .global C_DECL(gUnknown_08487330) +C_DECL(gUnknown_08487330): + .incbin "baserom_sa1.gba", 0x00487330, 0x28 + + .global C_DECL(gUnknown_08487358) +C_DECL(gUnknown_08487358): + .incbin "baserom_sa1.gba", 0x00487358, 0x864 + + .global C_DECL(gUnknown_08487BBC) +C_DECL(gUnknown_08487BBC): + .incbin "baserom_sa1.gba", 0x00487BBC, 0xB70 + + .global C_DECL(gUnknown_0848872C) +C_DECL(gUnknown_0848872C): + .incbin "baserom_sa1.gba", 0x0048872C, 0xBDC + + .global C_DECL(gUnknown_08489308) +C_DECL(gUnknown_08489308): + .incbin "baserom_sa1.gba", 0x00489308, 0xC54 + + .global C_DECL(gUnknown_08489F5C) +C_DECL(gUnknown_08489F5C): + .incbin "baserom_sa1.gba", 0x00489F5C, 0xE58 + + .global C_DECL(gUnknown_0848ADB4) +C_DECL(gUnknown_0848ADB4): + .incbin "baserom_sa1.gba", 0x0048ADB4, 0xCCC + + .global C_DECL(gUnknown_0848BA80) +C_DECL(gUnknown_0848BA80): + .incbin "baserom_sa1.gba", 0x0048BA80, 0xF24 diff --git a/sa1/data/data_0_3.s b/sa1/data/data_0_3.s new file mode 100644 index 0000000000..eb5758c2ca --- /dev/null +++ b/sa1/data/data_0_3.s @@ -0,0 +1,81 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + + .global C_DECL(gUnknown_084ACDA0) +C_DECL(gUnknown_084ACDA0): + .incbin "baserom_sa1.gba", 0x004ACDA0, 0xC + + .global C_DECL(gUnknown_084ACDAC) +C_DECL(gUnknown_084ACDAC): + .incbin "baserom_sa1.gba", 0x004ACDAC, 0x14 + + .global C_DECL(gUnknown_084ACDC0) +C_DECL(gUnknown_084ACDC0): + .incbin "baserom_sa1.gba", 0x004ACDC0, 0x12 + + .global C_DECL(gUnknown_084ACDD2) +C_DECL(gUnknown_084ACDD2): + .incbin "baserom_sa1.gba", 0x004ACDD2, 0x2 + + .global C_DECL(gUnknown_084ACDD4) +C_DECL(gUnknown_084ACDD4): + .incbin "baserom_sa1.gba", 0x004ACDD4, 0x4 + + .global C_DECL(gUnknown_084ACDD8) +C_DECL(gUnknown_084ACDD8): + .incbin "baserom_sa1.gba", 0x004ACDD8, 0x3A + + .global C_DECL(gUnknown_084ACE12) +C_DECL(gUnknown_084ACE12): + .incbin "baserom_sa1.gba", 0x004ACE12, 0x12 + + .global C_DECL(gUnknown_084ACE24) +C_DECL(gUnknown_084ACE24): + .incbin "baserom_sa1.gba", 0x004ACE24, 0x80 + + .global C_DECL(gUnknown_084ACEA4) +C_DECL(gUnknown_084ACEA4): + .incbin "baserom_sa1.gba", 0x004ACEA4, 0x10 + + .global C_DECL(gUnknown_084ACEB4) +C_DECL(gUnknown_084ACEB4): + .incbin "baserom_sa1.gba", 0x004ACEB4, 0x12 + + .global C_DECL(gUnknown_084ACEC6) +C_DECL(gUnknown_084ACEC6): + .incbin "baserom_sa1.gba", 0x004ACEC6, 0x12 + + .global C_DECL(gUnknown_084ACED8) +C_DECL(gUnknown_084ACED8): + .incbin "baserom_sa1.gba", 0x004ACED8, 0xC + + .global C_DECL(gUnknown_084ACEE4) +C_DECL(gUnknown_084ACEE4): + .incbin "baserom_sa1.gba", 0x004ACEE4, 0x12 + + .global C_DECL(gUnknown_084ACEF6) +C_DECL(gUnknown_084ACEF6): + .incbin "baserom_sa1.gba", 0x004ACEF6, 0x12 + + .global C_DECL(gUnknown_084ACF08) +C_DECL(gUnknown_084ACF08): + .incbin "baserom_sa1.gba", 0x004ACF08, 0x14 + + .global C_DECL(gUnknown_084ACF1C) +C_DECL(gUnknown_084ACF1C): + .incbin "baserom_sa1.gba", 0x004ACF1C, 0x8 + + .global C_DECL(gUnknown_084ACF24) +C_DECL(gUnknown_084ACF24): + .incbin "baserom_sa1.gba", 0x004ACF24, 0x8 + + .global C_DECL(gUnknown_084ACF2C) +C_DECL(gUnknown_084ACF2C): + .incbin "baserom_sa1.gba", 0x004ACF2C, 0x8 + + .global C_DECL(gUnknown_084ACF34) +C_DECL(gUnknown_084ACF34): + .incbin "baserom_sa1.gba", 0x004ACF34, 0x8 diff --git a/sa1/data/data_0_3_2.s b/sa1/data/data_0_3_2.s new file mode 100644 index 0000000000..cacd2db864 --- /dev/null +++ b/sa1/data/data_0_3_2.s @@ -0,0 +1,22 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + @ "graphics/tilemaps/mp_multipak_player_overview/header.c" + + .global C_DECL(gUnknown_084ADA08) +C_DECL(gUnknown_084ADA08): + .incbin "baserom_sa1.gba", 0x004ADA08, 0x2 + + .global C_DECL(gUnknown_084ADA0A) +C_DECL(gUnknown_084ADA0A): + .incbin "baserom_sa1.gba", 0x004ADA0A, 0x4 + + .global C_DECL(gUnknown_084ADA0E) +C_DECL(gUnknown_084ADA0E): + .incbin "baserom_sa1.gba", 0x004ADA0E, 0x2 + + .global C_DECL(gUnknown_084ADA10) +C_DECL(gUnknown_084ADA10): + .incbin "baserom_sa1.gba", 0x004ADA10, 0xA diff --git a/sa1/data/data_0_4.s b/sa1/data/data_0_4.s new file mode 100644 index 0000000000..e110321b1c --- /dev/null +++ b/sa1/data/data_0_4.s @@ -0,0 +1,45 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(gSpawnPositions) +C_DECL(gSpawnPositions): + .incbin "baserom_sa1.gba", 0x004ADEF0, 0x48 + + .global C_DECL(gSpawnPositions_Modes_4_and_5) +C_DECL(gSpawnPositions_Modes_4_and_5): + .incbin "baserom_sa1.gba", 0x004ADF38, 0x40 + + .global C_DECL(gUnknown_084ADF78) +C_DECL(gUnknown_084ADF78): + .incbin "baserom_sa1.gba", 0x004ADF78, 0x48 + + .global C_DECL(gUnknown_084ADFC0) +C_DECL(gUnknown_084ADFC0): + .incbin "baserom_sa1.gba", 0x004ADFC0, 0x48 + + .global C_DECL(gPlayerCharacterIdleAnims) +C_DECL(gPlayerCharacterIdleAnims): + .short 0, 99, 199, 298 + + .global C_DECL(sCharStateAnimInfo) +C_DECL(sCharStateAnimInfo): + .incbin "baserom_sa1.gba", 0x004AE010, 0x178 + + .global C_DECL(gUnknown_084AE188) +C_DECL(gUnknown_084AE188): + .incbin "baserom_sa1.gba", 0x004AE188, 0x12 + + .global C_DECL(gUnknown_084AE19A) +C_DECL(gUnknown_084AE19A): + .incbin "baserom_sa1.gba", 0x004AE19A, 0x12 + + .global C_DECL(gCharStatesKnucklesGlideTurn) +C_DECL(gCharStatesKnucklesGlideTurn): + .byte 0x42, 0x43, 0x44, 0x45 + + .global C_DECL(gUnknown_084AE1B0) +C_DECL(gUnknown_084AE1B0): + .byte 0x8E, 0x01, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x8F, 0x01, 0x00, 0x00, 0x8F, 0x01, 0x01, 0x00, 0x8F, 0x01, 0x02, 0x00 + diff --git a/sa1/data/data_0_5.s b/sa1/data/data_0_5.s new file mode 100644 index 0000000000..a65c4fadce --- /dev/null +++ b/sa1/data/data_0_5.s @@ -0,0 +1,24 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(gUnknown_0868403C) +C_DECL(gUnknown_0868403C): + .incbin "baserom_sa1.gba", 0x0068403C, 0x800 + + .global C_DECL(gUnknown_0868483C) +C_DECL(gUnknown_0868483C): + .incbin "baserom_sa1.gba", 0x0068483C, 0x500 + + .global C_DECL(gUnknown_08684D3C) +C_DECL(gUnknown_08684D3C): + .incbin "baserom_sa1.gba", 0x00684D3C, 0x1000 + + .global C_DECL(gUnknown_08685D3C) +C_DECL(gUnknown_08685D3C): + .incbin "baserom_sa1.gba", 0x00685D3C, 0x800 + + .global C_DECL(gUnknown_0868653C) +C_DECL(gUnknown_0868653C): + .incbin "baserom_sa1.gba", 0x0068653C, 0x1600 diff --git a/sa1/data/data_0_5_0.s b/sa1/data/data_0_5_0.s new file mode 100644 index 0000000000..fbfe6a7d20 --- /dev/null +++ b/sa1/data/data_0_5_0.s @@ -0,0 +1,28 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(gMillisUnpackTable) +C_DECL(gMillisUnpackTable): + .incbin "baserom_sa1.gba", 0x0065EFF4, 0x78 + + .global C_DECL(gSecondsTable) +C_DECL(gSecondsTable): + .incbin "baserom_sa1.gba", 0x0065F06C, 0x78 + + .global C_DECL(sZoneTimeSecondsTable) +C_DECL(sZoneTimeSecondsTable): + .incbin "baserom_sa1.gba", 0x0065F0E4, 0x7A + + .global C_DECL(sZoneTimeMinutesTable) +C_DECL(sZoneTimeMinutesTable): + .incbin "baserom_sa1.gba", 0x0065F15E, 0x16 + + .global C_DECL(gUnknown_0865F174) +C_DECL(gUnknown_0865F174): + .incbin "baserom_sa1.gba", 0x0065F174, 0x4 + + .global C_DECL(gUnknown_0865F178) +C_DECL(gUnknown_0865F178): + .incbin "baserom_sa1.gba", 0x0065F178, 0x4 diff --git a/sa1/data/data_0_5_2.s b/sa1/data/data_0_5_2.s new file mode 100644 index 0000000000..255c68f99c --- /dev/null +++ b/sa1/data/data_0_5_2.s @@ -0,0 +1,80 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(gUnknown_08688378) +C_DECL(gUnknown_08688378): + .incbin "baserom_sa1.gba", 0x00688378, 0xE + + .global C_DECL(gUnknown_08688386) +C_DECL(gUnknown_08688386): + .incbin "baserom_sa1.gba", 0x00688386, 0xE + + .global C_DECL(gUnknown_08688394) +C_DECL(gUnknown_08688394): + .incbin "baserom_sa1.gba", 0x00688394, 0x4 + + .global C_DECL(gUnknown_08688398) +C_DECL(gUnknown_08688398): + .incbin "baserom_sa1.gba", 0x00688398, 0x14 + + .global C_DECL(gUnknown_086883AC) +C_DECL(gUnknown_086883AC): + .incbin "baserom_sa1.gba", 0x006883AC, 0x4 + + .global C_DECL(gUnknown_086883B0) +C_DECL(gUnknown_086883B0): + .incbin "baserom_sa1.gba", 0x006883B0, 0x8 + + .global C_DECL(gUnknown_086883B8) +C_DECL(gUnknown_086883B8): + .incbin "baserom_sa1.gba", 0x006883B8, 0xC + + .global C_DECL(gUnknown_086883C4) +C_DECL(gUnknown_086883C4): + .incbin "baserom_sa1.gba", 0x006883C4, 0x8 + + .global C_DECL(gUnknown_086883CC) +C_DECL(gUnknown_086883CC): + .incbin "baserom_sa1.gba", 0x006883CC, 0x18 + + .global C_DECL(gUnknown_086883E4) +C_DECL(gUnknown_086883E4): + .incbin "baserom_sa1.gba", 0x006883E4, 0x14 + + .global C_DECL(gUnknown_086883F8) +C_DECL(gUnknown_086883F8): + .incbin "baserom_sa1.gba", 0x006883F8, 0xC + + .global C_DECL(gUnknown_08688404) +C_DECL(gUnknown_08688404): + .incbin "baserom_sa1.gba", 0x00688404, 0xB + + .global C_DECL(gUnknown_0868840F) +C_DECL(gUnknown_0868840F): + .incbin "baserom_sa1.gba", 0x0068840F, 0xD + + .global C_DECL(gUnknown_0868841C) +C_DECL(gUnknown_0868841C): + .incbin "baserom_sa1.gba", 0x0068841C, 0xC + + .global C_DECL(gUnknown_08688428) +C_DECL(gUnknown_08688428): + .incbin "baserom_sa1.gba", 0x00688428, 0x1C + + .global C_DECL(gUnknown_08688444) +C_DECL(gUnknown_08688444): + .ascii "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,j-pqrstuvwxyz{|}~\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89?!& 0123456789abcdef@\0" + + .global C_DECL(gUnknown_08688492) +C_DECL(gUnknown_08688492): + .incbin "baserom_sa1.gba", 0x00688492, 0xD6 + + .global C_DECL(gUnknown_08688568) +C_DECL(gUnknown_08688568): + .incbin "baserom_sa1.gba", 0x00688568, 0x4 + + .global C_DECL(gUnknown_0868856C) +C_DECL(gUnknown_0868856C): + .incbin "baserom_sa1.gba", 0x0068856C, 0x4 diff --git a/sa1/data/data_0_6.s b/sa1/data/data_0_6.s new file mode 100644 index 0000000000..a34a74f591 --- /dev/null +++ b/sa1/data/data_0_6.s @@ -0,0 +1,20 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" @; for mPtr / mAlignWord + + mSectionRodata + + .global C_DECL(gUnknown_0868B0D4) +C_DECL(gUnknown_0868B0D4): + .incbin "baserom_sa1.gba", 0x0068B0D4, 0x18 + + .global C_DECL(gUnknown_0868B0EC) +C_DECL(gUnknown_0868B0EC): + .incbin "baserom_sa1.gba", 0x0068B0EC, 0x8 + + .global C_DECL(gUnknown_0868B0F4) +C_DECL(gUnknown_0868B0F4): + .incbin "baserom_sa1.gba", 0x0068B0F4, 0x8 + + .global C_DECL(gUnknown_0868B0FC) +C_DECL(gUnknown_0868B0FC): + .incbin "baserom_sa1.gba", 0x0068B0FC, 0x10 diff --git a/sa1/data/data_0_6_0.s b/sa1/data/data_0_6_0.s new file mode 100644 index 0000000000..8227e6344b --- /dev/null +++ b/sa1/data/data_0_6_0.s @@ -0,0 +1,104 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" @; for mPtr / mAlignWord + + mSectionRodata + + .global C_DECL(gUnknown_0868B3D8) +C_DECL(gUnknown_0868B3D8): + .incbin "baserom_sa1.gba", 0x0068B3D8, 0x10 + + .global C_DECL(gUnknown_0868B3E8) +C_DECL(gUnknown_0868B3E8): + .incbin "baserom_sa1.gba", 0x0068B3E8, 0x10 + + .global C_DECL(gUnknown_0868B3F8) +C_DECL(gUnknown_0868B3F8): + .incbin "baserom_sa1.gba", 0x0068B3F8, 0x10 + + .global C_DECL(gUnknown_0868B408) +C_DECL(gUnknown_0868B408): + .incbin "baserom_sa1.gba", 0x0068B408, 0x10 + + .global C_DECL(gUnknown_0868B418) +C_DECL(gUnknown_0868B418): + .incbin "baserom_sa1.gba", 0x0068B418, 0x10 + + .global C_DECL(gUnknown_0868B428) +C_DECL(gUnknown_0868B428): + .incbin "baserom_sa1.gba", 0x0068B428, 0x10 + + .global C_DECL(gUnknown_0868B438) +C_DECL(gUnknown_0868B438): + .incbin "baserom_sa1.gba", 0x0068B438, 0x10 + + .global C_DECL(gUnknown_0868B448) +C_DECL(gUnknown_0868B448): + .incbin "baserom_sa1.gba", 0x0068B448, 0x10 + + .global C_DECL(gUnknown_0868B458) +C_DECL(gUnknown_0868B458): + .incbin "baserom_sa1.gba", 0x0068B458, 0x10 + + .global C_DECL(gUnknown_0868B468) +C_DECL(gUnknown_0868B468): + .incbin "baserom_sa1.gba", 0x0068B468, 0x10 + + .global C_DECL(gUnknown_0868B478) +C_DECL(gUnknown_0868B478): + .incbin "baserom_sa1.gba", 0x0068B478, 0x10 + + .global C_DECL(gUnknown_0868B488) +C_DECL(gUnknown_0868B488): + .incbin "baserom_sa1.gba", 0x0068B488, 0x10 + + .global C_DECL(gUnknown_0868B498) +C_DECL(gUnknown_0868B498): + .incbin "baserom_sa1.gba", 0x0068B498, 0x10 + + .global C_DECL(gUnknown_0868B4A8) +C_DECL(gUnknown_0868B4A8): + .incbin "baserom_sa1.gba", 0x0068B4A8, 0x10 + + .global C_DECL(gUnknown_0868B4B8) +C_DECL(gUnknown_0868B4B8): + .incbin "baserom_sa1.gba", 0x0068B4B8, 0x6 + + .global C_DECL(gUnknown_0868B4BE) +C_DECL(gUnknown_0868B4BE): + .incbin "baserom_sa1.gba", 0x0068B4BE, 0xC6 + + .global C_DECL(gUnknown_0868B584) +C_DECL(gUnknown_0868B584): + .incbin "baserom_sa1.gba", 0x0068B584, 0x10 + + .global C_DECL(gUnknown_0868B594) +C_DECL(gUnknown_0868B594): + .incbin "baserom_sa1.gba", 0x0068B594, 0x10 + + .global C_DECL(gUnknown_0868B5A4) +C_DECL(gUnknown_0868B5A4): + .incbin "baserom_sa1.gba", 0x0068B5A4, 0x10 + + .global C_DECL(gUnknown_0868B5B4) +C_DECL(gUnknown_0868B5B4): + .incbin "baserom_sa1.gba", 0x0068B5B4, 0x10 + + .global C_DECL(gUnknown_0868B5C4) +C_DECL(gUnknown_0868B5C4): + .incbin "baserom_sa1.gba", 0x0068B5C4, 0x70 + + .global C_DECL(gUnknown_0868B634) +C_DECL(gUnknown_0868B634): + .incbin "baserom_sa1.gba", 0x0068B634, 0x10 + + .global C_DECL(gUnknown_0868B644) +C_DECL(gUnknown_0868B644): + .incbin "baserom_sa1.gba", 0x0068B644, 0x10 + + .global C_DECL(gUnknown_0868B654) +C_DECL(gUnknown_0868B654): + .incbin "baserom_sa1.gba", 0x0068B654, 0x4 + + .global C_DECL(gUnknown_0868B658) +C_DECL(gUnknown_0868B658): + .incbin "baserom_sa1.gba", 0x0068B658, 0x4 diff --git a/sa1/data/data_0_6_1.s b/sa1/data/data_0_6_1.s new file mode 100644 index 0000000000..af3e036555 --- /dev/null +++ b/sa1/data/data_0_6_1.s @@ -0,0 +1,113 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" @; for mPtr / mAlignWord + + mSectionRodata + + .align 2, 0 + .global C_DECL(gUnknown_0868B684) +C_DECL(gUnknown_0868B684): + .incbin "baserom_sa1.gba", 0x0068B684, 0x10 + + .global C_DECL(gUnknown_0868B694) +C_DECL(gUnknown_0868B694): + .incbin "baserom_sa1.gba", 0x0068B694, 0x8 + + .global C_DECL(gUnknown_0868B69C) +C_DECL(gUnknown_0868B69C): + .incbin "baserom_sa1.gba", 0x0068B69C, 0x4 + + .global C_DECL(gUnknown_0868B6A0) +C_DECL(gUnknown_0868B6A0): + .incbin "baserom_sa1.gba", 0x0068B6A0, 0x18 + + .global C_DECL(gUnknown_0868B6B8) +C_DECL(gUnknown_0868B6B8): + .incbin "baserom_sa1.gba", 0x0068B6B8, 0xC + + .global C_DECL(gUnknown_0868B6C4) +C_DECL(gUnknown_0868B6C4): + mPtr C_DECL(ApplyGameStageSettings) + mPtr C_DECL(sub_806A66C) + mPtr C_DECL(sub_806A680) + mPtr C_DECL(sub_806A68C) + +@ Edit Language Screen - Data Start + .global C_DECL(gUnknown_0868B6D4) +C_DECL(gUnknown_0868B6D4): + .incbin "baserom_sa1.gba", 0x0068B6D4, 0x18 + + .global C_DECL(gUnknown_0868B6EC) +C_DECL(gUnknown_0868B6EC): + .incbin "baserom_sa1.gba", 0x0068B6EC, 0x18 + + .global C_DECL(gUnknown_0868B704) +C_DECL(gUnknown_0868B704): + .incbin "baserom_sa1.gba", 0x0068B704, 0xC + + .global C_DECL(gUnknown_0868B710) +C_DECL(gUnknown_0868B710): + .incbin "baserom_sa1.gba", 0x0068B710, 0xC + + .global C_DECL(gUnknown_0868B71C) +C_DECL(gUnknown_0868B71C): + .incbin "baserom_sa1.gba", 0x0068B71C, 0x6 + + .global C_DECL(gUnknown_0868B722) +C_DECL(gUnknown_0868B722): + .incbin "baserom_sa1.gba", 0x0068B722, 0x6 + + .global C_DECL(gUnknown_0868B728) +C_DECL(gUnknown_0868B728): + .incbin "baserom_sa1.gba", 0x0068B728, 0x1 + + .global C_DECL(gUnknown_0868B729) +C_DECL(gUnknown_0868B729): + .incbin "baserom_sa1.gba", 0x0068B729, 0xB + + .global C_DECL(gUnknown_0868B734) +C_DECL(gUnknown_0868B734): + .incbin "baserom_sa1.gba", 0x0068B734, 0x24 + + mAlignWord + .global C_DECL(sLangScreenReturnProcs) +C_DECL(sLangScreenReturnProcs): + mPtr C_DECL(CreateOptionsMenu) + mPtr C_DECL(CreateSegaLogo) + + .global C_DECL(gUnknown_0868B760) +C_DECL(gUnknown_0868B760): + .incbin "baserom_sa1.gba", 0x0068B760, 0xC + +@ Edit Language Screen - Data End + + .global C_DECL(gUnknown_0868B76C) +C_DECL(gUnknown_0868B76C): + .incbin "baserom_sa1.gba", 0x0068B76C, 0xC + + .global C_DECL(gUnknown_0868B778) +C_DECL(gUnknown_0868B778): + .incbin "baserom_sa1.gba", 0x0068B778, 0x6 + + .global C_DECL(gUnknown_0868B77E) +C_DECL(gUnknown_0868B77E): + .incbin "baserom_sa1.gba", 0x0068B77E, 0x4 + + .global C_DECL(gUnknown_0868B782) +C_DECL(gUnknown_0868B782): + .incbin "baserom_sa1.gba", 0x0068B782, 0x4 + + .global C_DECL(gUnknown_0868B786) +C_DECL(gUnknown_0868B786): + .incbin "baserom_sa1.gba", 0x0068B786, 0x4 + + .global C_DECL(gUnknown_0868B78A) +C_DECL(gUnknown_0868B78A): + .incbin "baserom_sa1.gba", 0x0068B78A, 0x1 + + .global C_DECL(gUnknown_0868B78B) +C_DECL(gUnknown_0868B78B): + .incbin "baserom_sa1.gba", 0x0068B78B, 0x5 + + .global C_DECL(gUnknown_0868B790) +C_DECL(gUnknown_0868B790): + .incbin "baserom_sa1.gba", 0x0068B790, 0x4 diff --git a/sa1/data/data_0_6_2.s b/sa1/data/data_0_6_2.s new file mode 100644 index 0000000000..2931b5d734 --- /dev/null +++ b/sa1/data/data_0_6_2.s @@ -0,0 +1,444 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" @; for mPtr / mAlignWord + + mSectionRodata + + .global C_DECL(gUnknown_0868B814) +C_DECL(gUnknown_0868B814): + .incbin "baserom_sa1.gba", 0x0068B814, 0x24 + + .global C_DECL(gUnknown_0868B838) +C_DECL(gUnknown_0868B838): + .incbin "baserom_sa1.gba", 0x0068B838, 0xC + + .global C_DECL(gUnknown_0868B844) +C_DECL(gUnknown_0868B844): + .incbin "baserom_sa1.gba", 0x0068B844, 0x90 + + .global C_DECL(gUnknown_0868B8D4) +C_DECL(gUnknown_0868B8D4): + .incbin "baserom_sa1.gba", 0x0068B8D4, 0x20 + + .global C_DECL(gUnknown_0868B8F4) +C_DECL(gUnknown_0868B8F4): + .incbin "baserom_sa1.gba", 0x0068B8F4, 0x7C0 + + .global C_DECL(gUnknown_0868C0B4) +C_DECL(gUnknown_0868C0B4): + .incbin "baserom_sa1.gba", 0x0068C0B4, 0x500 + + .global C_DECL(gUnknown_0868C5B4) +C_DECL(gUnknown_0868C5B4): + .incbin "baserom_sa1.gba", 0x0068C5B4, 0x20 + + .global C_DECL(gUnknown_0868C5D4) +C_DECL(gUnknown_0868C5D4): + .incbin "baserom_sa1.gba", 0x0068C5D4, 0x940 + + .global C_DECL(gUnknown_0868CF14) +C_DECL(gUnknown_0868CF14): + .incbin "baserom_sa1.gba", 0x0068CF14, 0x500 + + .global C_DECL(gUnknown_0868D414) +C_DECL(gUnknown_0868D414): + .incbin "baserom_sa1.gba", 0x0068D414, 0x20 + + .global C_DECL(gUnknown_0868D434) +C_DECL(gUnknown_0868D434): + .incbin "baserom_sa1.gba", 0x0068D434, 0x620 + + .global C_DECL(gUnknown_0868DA54) +C_DECL(gUnknown_0868DA54): + .incbin "baserom_sa1.gba", 0x0068DA54, 0x580 + + .global C_DECL(gUnknown_0868DFD4) +C_DECL(gUnknown_0868DFD4): + .incbin "baserom_sa1.gba", 0x0068DFD4, 0x20 + + .global C_DECL(gUnknown_0868DFF4) +C_DECL(gUnknown_0868DFF4): + .incbin "baserom_sa1.gba", 0x0068DFF4, 0x600 + + .global C_DECL(gUnknown_0868E5F4) +C_DECL(gUnknown_0868E5F4): + .incbin "baserom_sa1.gba", 0x0068E5F4, 0x580 + + .global C_DECL(gCharacterCards_Knuckles_Palette) +C_DECL(gCharacterCards_Knuckles_Palette): + .incbin "baserom_sa1.gba", 0x0068EB74, 0x200 + + .global C_DECL(gCharacterCards_Knuckles_Tiles) +C_DECL(gCharacterCards_Knuckles_Tiles): + .incbin "baserom_sa1.gba", 0x0068ED74, 0x7C0 + + .global C_DECL(gCharacterCards_Knuckles_Layout) +C_DECL(gCharacterCards_Knuckles_Layout): + .incbin "baserom_sa1.gba", 0x0068F534, 0x500 + + .global C_DECL(gUnknown_0868FA34) +C_DECL(gUnknown_0868FA34): + .incbin "baserom_sa1.gba", 0x0068FA34, 0x200 + + .global C_DECL(gUnknown_0868FC34) +C_DECL(gUnknown_0868FC34): + .incbin "baserom_sa1.gba", 0x0068FC34, 0x240 + + .global C_DECL(gUnknown_0868FE74) +C_DECL(gUnknown_0868FE74): + .incbin "baserom_sa1.gba", 0x0068FE74, 0x700 + + .global C_DECL(gUnknown_08690574) +C_DECL(gUnknown_08690574): + .incbin "baserom_sa1.gba", 0x00690574, 0x1800 + + .global C_DECL(gUnknown_08691D74) +C_DECL(gUnknown_08691D74): + .incbin "baserom_sa1.gba", 0x00691D74, 0x500 + + .global C_DECL(gCharacterCards_Amy_Palette) +C_DECL(gCharacterCards_Amy_Palette): + .incbin "baserom_sa1.gba", 0x00692274, 0x200 + + .global C_DECL(gCharacterCards_Amy_Tiles) +C_DECL(gCharacterCards_Amy_Tiles): + .incbin "baserom_sa1.gba", 0x00692474, 0x4C0 + + .global C_DECL(gCharacterCards_Amy_Layout) +C_DECL(gCharacterCards_Amy_Layout): + .incbin "baserom_sa1.gba", 0x00692934, 0x500 + + .global C_DECL(gUnknown_08692E34) +C_DECL(gUnknown_08692E34): + .incbin "baserom_sa1.gba", 0x00692E34, 0x200 + + .global C_DECL(gUnknown_08693034) +C_DECL(gUnknown_08693034): + .incbin "baserom_sa1.gba", 0x00693034, 0x240 + + .global C_DECL(gUnknown_08693274) +C_DECL(gUnknown_08693274): + .incbin "baserom_sa1.gba", 0x00693274, 0x700 + + .global C_DECL(gUnknown_08693974) +C_DECL(gUnknown_08693974): + .incbin "baserom_sa1.gba", 0x00693974, 0x1880 + + .global C_DECL(gUnknown_086951F4) +C_DECL(gUnknown_086951F4): + .incbin "baserom_sa1.gba", 0x006951F4, 0x500 + + .global C_DECL(gCharacterCards_Sonic_Palette) +C_DECL(gCharacterCards_Sonic_Palette): + .incbin "baserom_sa1.gba", 0x006956F4, 0x200 + + .global C_DECL(gCharacterCards_Sonic_Tiles) +C_DECL(gCharacterCards_Sonic_Tiles): + .incbin "baserom_sa1.gba", 0x006958F4, 0x9C0 + + .global C_DECL(gCharacterCards_Sonic_Layout) +C_DECL(gCharacterCards_Sonic_Layout): + .incbin "baserom_sa1.gba", 0x006962B4, 0x500 + + .global C_DECL(gUnknown_086967B4) +C_DECL(gUnknown_086967B4): + .incbin "baserom_sa1.gba", 0x006967B4, 0x200 + + .global C_DECL(gUnknown_086969B4) +C_DECL(gUnknown_086969B4): + .incbin "baserom_sa1.gba", 0x006969B4, 0x240 + + .global C_DECL(gUnknown_08696BF4) +C_DECL(gUnknown_08696BF4): + .incbin "baserom_sa1.gba", 0x00696BF4, 0x700 + + .global C_DECL(gUnknown_086972F4) +C_DECL(gUnknown_086972F4): + .incbin "baserom_sa1.gba", 0x006972F4, 0x1900 + + .global C_DECL(gUnknown_08698BF4) +C_DECL(gUnknown_08698BF4): + .incbin "baserom_sa1.gba", 0x00698BF4, 0x500 + + .global C_DECL(gCharacterCards_Tails_Palette) +C_DECL(gCharacterCards_Tails_Palette): + .incbin "baserom_sa1.gba", 0x006990F4, 0x200 + + .global C_DECL(gCharacterCards_Tails_Tiles) +C_DECL(gCharacterCards_Tails_Tiles): + .incbin "baserom_sa1.gba", 0x006992F4, 0x680 + + .global C_DECL(gCharacterCards_Tails_Layout) +C_DECL(gCharacterCards_Tails_Layout): + .incbin "baserom_sa1.gba", 0x00699974, 0x500 + + .global C_DECL(gUnknown_08699E74) +C_DECL(gUnknown_08699E74): + .incbin "baserom_sa1.gba", 0x00699E74, 0x200 + + .global C_DECL(gUnknown_0869A074) +C_DECL(gUnknown_0869A074): + .incbin "baserom_sa1.gba", 0x0069A074, 0x240 + + .global C_DECL(gUnknown_0869A2B4) +C_DECL(gUnknown_0869A2B4): + .incbin "baserom_sa1.gba", 0x0069A2B4, 0x700 + + .global C_DECL(gUnknown_0869A9B4) +C_DECL(gUnknown_0869A9B4): + .incbin "baserom_sa1.gba", 0x0069A9B4, 0x1C40 + + .global C_DECL(gUnknown_0869C5F4) +C_DECL(gUnknown_0869C5F4): + .incbin "baserom_sa1.gba", 0x0069C5F4, 0x500 + + .global C_DECL(gUnknown_0869CAF4) +C_DECL(gUnknown_0869CAF4): + .incbin "baserom_sa1.gba", 0x0069CAF4, 0x200 + + .global C_DECL(gUnknown_0869CCF4) +C_DECL(gUnknown_0869CCF4): + .incbin "baserom_sa1.gba", 0x0069CCF4, 0x1C40 + + .global C_DECL(gUnknown_0869E934) +C_DECL(gUnknown_0869E934): + .incbin "baserom_sa1.gba", 0x0069E934, 0x500 + + .global C_DECL(gUnknown_0869EE34) +C_DECL(gUnknown_0869EE34): + .incbin "baserom_sa1.gba", 0x0069EE34, 0x200 + + .global C_DECL(gUnknown_0869F034) +C_DECL(gUnknown_0869F034): + .incbin "baserom_sa1.gba", 0x0069F034, 0x20C0 + + .global C_DECL(gUnknown_086A10F4) +C_DECL(gUnknown_086A10F4): + .incbin "baserom_sa1.gba", 0x006A10F4, 0x700 + + .global C_DECL(gUnknown_086A17F4) +C_DECL(gUnknown_086A17F4): + .incbin "baserom_sa1.gba", 0x006A17F4, 0xD40 + + .global C_DECL(gUnknown_086A2534) +C_DECL(gUnknown_086A2534): + .incbin "baserom_sa1.gba", 0x006A2534, 0x500 + + .global C_DECL(gUnknown_086A2A34) +C_DECL(gUnknown_086A2A34): + .incbin "baserom_sa1.gba", 0x006A2A34, 0x200 + + .global C_DECL(gUnknown_086A2C34) +C_DECL(gUnknown_086A2C34): + .incbin "baserom_sa1.gba", 0x006A2C34, 0x1180 + + .global C_DECL(gUnknown_086A3DB4) +C_DECL(gUnknown_086A3DB4): + .incbin "baserom_sa1.gba", 0x006A3DB4, 0x1000 + + .global C_DECL(gUnknown_086A4DB4) +C_DECL(gUnknown_086A4DB4): + .incbin "baserom_sa1.gba", 0x006A4DB4, 0x200 + + .global C_DECL(gUnknown_086A4FB4) +C_DECL(gUnknown_086A4FB4): + .incbin "baserom_sa1.gba", 0x006A4FB4, 0x880 + + .global C_DECL(gUnknown_086A5834) +C_DECL(gUnknown_086A5834): + .incbin "baserom_sa1.gba", 0x006A5834, 0x500 + + .global C_DECL(gUnknown_086A5D34) +C_DECL(gUnknown_086A5D34): + .incbin "baserom_sa1.gba", 0x006A5D34, 0x200 + + .global C_DECL(gUnknown_086A5F34) +C_DECL(gUnknown_086A5F34): + .incbin "baserom_sa1.gba", 0x006A5F34, 0x2F00 + + .global C_DECL(gUnknown_086A8E34) +C_DECL(gUnknown_086A8E34): + .incbin "baserom_sa1.gba", 0x006A8E34, 0xA00 + + .global C_DECL(gUnknown_086A9834) +C_DECL(gUnknown_086A9834): + .incbin "baserom_sa1.gba", 0x006A9834, 0x2840 + + .global C_DECL(gUnknown_086AC074) +C_DECL(gUnknown_086AC074): + .incbin "baserom_sa1.gba", 0x006AC074, 0xAC0 + + .global C_DECL(gUnknown_086ACB34) +C_DECL(gUnknown_086ACB34): + .incbin "baserom_sa1.gba", 0x006ACB34, 0x29C0 + + .global C_DECL(gUnknown_086AF4F4) +C_DECL(gUnknown_086AF4F4): + .incbin "baserom_sa1.gba", 0x006AF4F4, 0xAC0 + + .global C_DECL(gUnknown_086AFFB4) +C_DECL(gUnknown_086AFFB4): + .incbin "baserom_sa1.gba", 0x006AFFB4, 0x1440 + + .global C_DECL(gUnknown_086B13F4) +C_DECL(gUnknown_086B13F4): + .incbin "baserom_sa1.gba", 0x006B13F4, 0x6C0 + + .global C_DECL(gUnknown_086B1AB4) +C_DECL(gUnknown_086B1AB4): + .incbin "baserom_sa1.gba", 0x006B1AB4, 0x20 + + .global C_DECL(gUnknown_086B1AD4) +C_DECL(gUnknown_086B1AD4): + .incbin "baserom_sa1.gba", 0x006B1AD4, 0x20 + + .global C_DECL(gUnknown_086B1AF4) +C_DECL(gUnknown_086B1AF4): + .incbin "baserom_sa1.gba", 0x006B1AF4, 0x20 + + .global C_DECL(gUnknown_086B1B14) +C_DECL(gUnknown_086B1B14): + .incbin "baserom_sa1.gba", 0x006B1B14, 0x1A0 + + .global C_DECL(gUnknown_086B1CB4) +C_DECL(gUnknown_086B1CB4): + .incbin "baserom_sa1.gba", 0x006B1CB4, 0x540 + + .global C_DECL(gUnknown_086B21F4) +C_DECL(gUnknown_086B21F4): + .incbin "baserom_sa1.gba", 0x006B21F4, 0x800 + + .global C_DECL(gUnknown_086B29F4) +C_DECL(gUnknown_086B29F4): + .incbin "baserom_sa1.gba", 0x006B29F4, 0x200 + + .global C_DECL(gUnknown_086B2BF4) +C_DECL(gUnknown_086B2BF4): + .incbin "baserom_sa1.gba", 0x006B2BF4, 0x1E00 + + .global C_DECL(gUnknown_086B49F4) +C_DECL(gUnknown_086B49F4): + .incbin "baserom_sa1.gba", 0x006B49F4, 0x800 + + .global C_DECL(gUnknown_086B51F4) +C_DECL(gUnknown_086B51F4): + .incbin "baserom_sa1.gba", 0x006B51F4, 0x200 + + .global C_DECL(gUnknown_086B53F4) +C_DECL(gUnknown_086B53F4): + .incbin "baserom_sa1.gba", 0x006B53F4, 0x1B80 + + .global C_DECL(gUnknown_086B6F74) +C_DECL(gUnknown_086B6F74): + .incbin "baserom_sa1.gba", 0x006B6F74, 0x800 + + .global C_DECL(gUnknown_086B7774) +C_DECL(gUnknown_086B7774): + .incbin "baserom_sa1.gba", 0x006B7774, 0x200 + + .global C_DECL(gUnknown_086B7974) +C_DECL(gUnknown_086B7974): + .incbin "baserom_sa1.gba", 0x006B7974, 0x1880 + + .global C_DECL(gUnknown_086B91F4) +C_DECL(gUnknown_086B91F4): + .incbin "baserom_sa1.gba", 0x006B91F4, 0x800 + + .global C_DECL(gUnknown_086B99F4) +C_DECL(gUnknown_086B99F4): + .incbin "baserom_sa1.gba", 0x006B99F4, 0x200 + + .global C_DECL(gUnknown_086B9BF4) +C_DECL(gUnknown_086B9BF4): + .incbin "baserom_sa1.gba", 0x006B9BF4, 0x1840 + + .global C_DECL(gUnknown_086BB434) +C_DECL(gUnknown_086BB434): + .incbin "baserom_sa1.gba", 0x006BB434, 0x800 + + .global C_DECL(gUnknown_086BBC34) +C_DECL(gUnknown_086BBC34): + .incbin "baserom_sa1.gba", 0x006BBC34, 0x200 + + .global C_DECL(gUnknown_086BBE34) +C_DECL(gUnknown_086BBE34): + .incbin "baserom_sa1.gba", 0x006BBE34, 0x2980 + + .global C_DECL(gUnknown_086BE7B4) +C_DECL(gUnknown_086BE7B4): + .incbin "baserom_sa1.gba", 0x006BE7B4, 0x1000 + + .global C_DECL(gUnknown_086BF7B4) +C_DECL(gUnknown_086BF7B4): + .incbin "baserom_sa1.gba", 0x006BF7B4, 0x200 + + .global C_DECL(gUnknown_086BF9B4) +C_DECL(gUnknown_086BF9B4): + .incbin "baserom_sa1.gba", 0x006BF9B4, 0x57C0 + + .global C_DECL(gUnknown_086C5174) +C_DECL(gUnknown_086C5174): + .incbin "baserom_sa1.gba", 0x006C5174, 0xA00 + + .global C_DECL(gUnknown_086C5B74) +C_DECL(gUnknown_086C5B74): + .incbin "baserom_sa1.gba", 0x006C5B74, 0x200 + + .global C_DECL(gUnknown_086C5D74) +C_DECL(gUnknown_086C5D74): + .incbin "baserom_sa1.gba", 0x006C5D74, 0x1EC0 + + .global C_DECL(gUnknown_086C7C34) +C_DECL(gUnknown_086C7C34): + .incbin "baserom_sa1.gba", 0x006C7C34, 0xA00 + + .global C_DECL(gUnknown_086C8634) +C_DECL(gUnknown_086C8634): + .incbin "baserom_sa1.gba", 0x006C8634, 0x200 + + .global C_DECL(gUnknown_086C8834) +C_DECL(gUnknown_086C8834): + .incbin "baserom_sa1.gba", 0x006C8834, 0x3540 + + .global C_DECL(gUnknown_086CBD74) +C_DECL(gUnknown_086CBD74): + .incbin "baserom_sa1.gba", 0x006CBD74, 0xA00 + + .global C_DECL(gUnknown_086CC774) +C_DECL(gUnknown_086CC774): + .incbin "baserom_sa1.gba", 0x006CC774, 0x20 + + .global C_DECL(gUnknown_086CC794) +C_DECL(gUnknown_086CC794): + .incbin "baserom_sa1.gba", 0x006CC794, 0xA0 + + .global C_DECL(gUnknown_086CC834) +C_DECL(gUnknown_086CC834): + .incbin "baserom_sa1.gba", 0x006CC834, 0x500 + + .global C_DECL(gPalette_086CCD34) +C_DECL(gPalette_086CCD34): + .incbin "baserom_sa1.gba", 0x006CCD34, 0x20 + + .global C_DECL(gTiles_086CCD54) +C_DECL(gTiles_086CCD54): + .incbin "baserom_sa1.gba", 0x006CCD54, 0xBA0 + + .global C_DECL(gLayout_086CD8F4) +C_DECL(gLayout_086CD8F4): + .incbin "baserom_sa1.gba", 0x006CD8F4, 0x500 + + .global C_DECL(gLayout_086CDDF4) +C_DECL(gLayout_086CDDF4): + .incbin "baserom_sa1.gba", 0x006CDDF4, 0x500 + + .global C_DECL(gUnknown_086CE2F4) +C_DECL(gUnknown_086CE2F4): + .incbin "baserom_sa1.gba", 0x006CE2F4, 0x200 + + .global C_DECL(gUnknown_086CE4F4) +C_DECL(gUnknown_086CE4F4): + .incbin "baserom_sa1.gba", 0x006CE4F4, 0x300 + + .global C_DECL(gUnknown_086CE7F4) +C_DECL(gUnknown_086CE7F4): + .incbin "baserom_sa1.gba", 0x006CE7F4, 0x500 diff --git a/sa1/data/data_0_7.s b/sa1/data/data_0_7.s new file mode 100644 index 0000000000..177765353f --- /dev/null +++ b/sa1/data/data_0_7.s @@ -0,0 +1,46 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(sBounceBlockAnims) +C_DECL(sBounceBlockAnims): + .short 0x01CE @ SA1_ANIM_BOUNCE_BLOCK_1 @ Neo Green Hill 1 + .short 0x01CE @ SA1_ANIM_BOUNCE_BLOCK_1 @ Neo Green Hill 2 + .short 0x01F3 @ SA1_ANIM_BOUNCE_BLOCK_2 @ Secret Base 1 + .short 0x01F3 @ SA1_ANIM_BOUNCE_BLOCK_2 @ Secret Base 2 + .short 0x021F @ SA1_ANIM_BOUNCE_BLOCK_5 @ Casino Paradise 1 + .short 0x021F @ SA1_ANIM_BOUNCE_BLOCK_5 @ Casino Paradise 2 + .short 0x021F @ SA1_ANIM_BOUNCE_BLOCK_5 @ Ice Mountain 1 + .short 0x021F @ SA1_ANIM_BOUNCE_BLOCK_5 @ Ice Mountain 2 + .short 0x021F @ SA1_ANIM_BOUNCE_BLOCK_5 @ Angel Island 1 + .short 0x021F @ SA1_ANIM_BOUNCE_BLOCK_5 @ Angel Island 2 + .short 0x01FB @ SA1_ANIM_BOUNCE_BLOCK_6_1 @ Egg Rocket + .short 0x0259 @ SA1_ANIM_BOUNCE_BLOCK_6_2 @ Cosmic Angel + .short 0x01FB @ SA1_ANIM_BOUNCE_BLOCK_6_1 @ X-Zone + .short 0x01FB @ SA1_ANIM_BOUNCE_BLOCK_6_1 @ Moon Zone + .short 0x01CE @ SA1_ANIM_BOUNCE_BLOCK_1 @ 2-Player Neo Green Hill + .short 0x01F3 @ SA1_ANIM_BOUNCE_BLOCK_2 @ 2-Player Secret Base + .short 0x021F @ SA1_ANIM_BOUNCE_BLOCK_5 @ 2-Player Casino Paradise + .short 0x0259 @ SA1_ANIM_BOUNCE_BLOCK_6_2 @ 2-Player Cosmic Angel + + .global C_DECL(gUnknown_086CED28) +C_DECL(gUnknown_086CED28): + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Neo Green Hill 1 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Neo Green Hill 2 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Secret Base 1 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Secret Base 2 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Casino Paradise 1 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Casino Paradise 2 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Ice Mountain 1 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Ice Mountain 2 + .short 0x0228 @ SA1_ANIM_WATER_SPLASH_5 @ Angel Island 1 + .short 0x0228 @ SA1_ANIM_WATER_SPLASH_5 @ Angel Island 2 + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Egg Rocket + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Cosmic Angel + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ X-Zone + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ Moon Zone + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ 2-Player Neo Green Hill + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ 2-Player Secret Base + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ 2-Player Casino Paradise + .short 0x01D0 @ SA1_ANIM_WATER_SPLASH_1 @ 2-Player Cosmic Angel diff --git a/sa1/data/data_sound_test.s b/sa1/data/data_sound_test.s new file mode 100644 index 0000000000..8a5ae130ce --- /dev/null +++ b/sa1/data/data_sound_test.s @@ -0,0 +1,8 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(sSoundTestSongIds) +C_DECL(sSoundTestSongIds): @ 0x0868B078 + .incbin "baserom_sa1.gba", 0x0068B078, 0x54 diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/entities/enemies.csv b/sa1/data/maps/chao_hunt/vs_zone_a/entities/enemies.csv new file mode 100644 index 0000000000..459e57585d --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/entities/enemies.csv @@ -0,0 +1 @@ +Adv2,ENEMIES,8,5,,,,, diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/entities/interactables.csv b/sa1/data/maps/chao_hunt/vs_zone_a/entities/interactables.csv new file mode 100644 index 0000000000..3aa83ad9ed --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/entities/interactables.csv @@ -0,0 +1,55 @@ +Adv2,INTERACTABLES,8,5,,,,, +1,0,1,11,PLATFORM_THIN,0,0,2,5 +2,0,17,25,WATER_BRIDGE,-29,0,60,19 +4,0,6,14,PLATFORM_THIN,0,0,2,6 +5,0,20,20,PLATFORM_THIN,0,0,7,2 +6,0,18,11,PLATFORM_THIN,0,0,6,2 +7,0,1,29,SPRING__SMALL_UPLEFT,0,-29,0,0 +0,1,24,13,PLATFORM_CRUMBLING,1,-45,0,0 +0,1,24,24,WALL_POLE__RIGHT,-24,-56,0,0 +1,1,15,4,ITEMBOX_CHAOHUNT,0,0,0,0 +2,1,24,19,PLATFORM_THIN,0,0,2,5 +3,1,9,5,IA043,-105,-37,0,0 +3,1,27,5,SPRING__UP,1,-37,0,0 +3,1,8,9,SPIKES__NORMAL_LEFT,-104,-41,0,0 +3,1,1,26,PLATFORM_THIN,0,0,6,2 +4,1,10,3,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +4,1,19,3,SPRING__SMALL_UPRIGHT,0,-35,0,0 +4,1,10,6,TOGGLE_PLAYER_LAYER__BACK,0,0,3,22 +4,1,13,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +4,1,25,6,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +4,1,28,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,4 +5,1,5,1,ITEMBOX_CHAOHUNT,6,0,0,0 +5,1,20,2,PLATFORM_THIN__FALLING,76,-34,0,0 +5,1,20,25,BOOSTER,0,-57,0,0 +6,1,14,17,SPRING__UP,2,-49,0,0 +7,1,4,22,SPRING__BIG_UPLEFT,0,-54,0,0 +1,2,21,5,BOOSTER,0,-69,0,0 +2,2,23,11,ITEMBOX_CHAOHUNT,1,0,0,0 +3,2,30,2,WALL_POLE__RIGHT,-126,-66,0,0 +3,2,15,6,PLATFORM_THIN,0,0,2,7 +3,2,0,11,PLATFORM_CRUMBLING,0,-75,0,0 +3,2,21,18,PLATFORM_THIN__FALLING,-117,-82,0,0 +4,2,28,27,SPRING__BIG_UPLEFT,1,-91,0,0 +5,2,27,23,ITEMBOX_CHAOHUNT,4,0,0,0 +6,2,18,0,SPRING__BIG_UPRIGHT,0,-64,0,0 +6,2,25,20,ITEMBOX_CHAOHUNT,7,0,0,0 +6,2,12,28,WALL_POLE__LEFT,52,-92,0,0 +7,2,4,12,SPRING__BIG_UPLEFT,0,-76,0,0 +0,3,16,9,BOOSTER,-16,0,0,0 +1,3,26,3,PLATFORM_THIN,-4,0,6,2 +1,3,13,9,ITEMBOX_CHAOHUNT,2,0,0,0 +1,3,16,16,WALL_POLE__LEFT,-48,-112,0,0 +2,3,7,1,PLATFORM_THIN__FALLING,-71,-97,0,0 +2,3,8,19,SPRING__BIG_UPLEFT,0,-115,0,0 +3,3,26,9,ITEMBOX_CHAOHUNT,5,0,0,0 +3,3,18,11,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +3,3,18,14,TOGGLE_PLAYER_LAYER__BACK,0,0,3,22 +3,3,21,14,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +3,3,8,15,TRAMPOLINE,-104,-111,0,0 +4,3,13,10,SPRING__UP,0,-106,0,0 +4,3,1,14,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +4,3,4,14,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,4 +5,3,23,21,BOOSTER,73,0,0,0 +2,4,23,7,ITEMBOX_CHAOHUNT,3,0,0,0 +2,4,8,8,SPRING__RIGHT,1,120,0,0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/entities/itemboxes.csv b/sa1/data/maps/chao_hunt/vs_zone_a/entities/itemboxes.csv new file mode 100644 index 0000000000..1b9ac4b65e --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/entities/itemboxes.csv @@ -0,0 +1 @@ +Adv2,ITEMS,8,5, diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/entities/rings.csv b/sa1/data/maps/chao_hunt/vs_zone_a/entities/rings.csv new file mode 100644 index 0000000000..3eb0657673 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/entities/rings.csv @@ -0,0 +1 @@ +Adv2,RINGS,8,5 diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/header.c b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/header.c new file mode 100644 index 0000000000..169491683b --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_chao_hunt_act_vs_zone_a_fg[]; +const u8 Tiles_zone_chao_hunt_act_vs_zone_a_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_chao_hunt_act_vs_zone_a_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_chao_hunt_act_vs_zone_a_bg = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_chao_hunt_act_vs_zone_a_bg, + .tilesSize = sizeof(Tiles_zone_chao_hunt_act_vs_zone_a_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_a_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_chao_hunt_act_vs_zone_a_bg, +}; diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..bae040a640 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +8 205 255 +255 246 172 +246 213 131 +230 164 98 +213 106 82 +255 32 16 +255 32 16 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +24 57 41 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +49 82 49 +16 32 24 +255 238 82 +246 189 82 +255 139 189 +255 57 139 +180 24 98 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +0 205 255 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +197 139 32 +189 115 24 +172 82 0 +148 57 0 +213 148 82 +197 115 49 +164 82 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +0 205 255 +255 213 123 +246 189 90 +230 164 82 +205 131 65 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +230 180 106 +189 123 65 +172 90 41 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +74 131 74 +49 82 49 +49 82 49 +8 32 16 +197 139 32 +189 115 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +255 32 16 +8 205 255 +255 255 255 +255 172 139 +255 115 82 +230 32 0 +156 24 0 +197 222 238 +180 156 164 +180 164 148 +156 139 123 +131 115 98 +255 230 164 +246 123 65 +213 57 0 +164 32 0 +82 16 0 +0 205 255 +255 246 180 +246 213 164 +222 164 98 +180 123 65 +123 82 57 +74 41 49 +255 255 106 +189 255 49 +139 238 24 +98 197 24 +65 156 16 +32 115 16 +16 74 8 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +255 230 213 +255 197 172 +255 156 148 +230 90 123 +197 16 90 +255 197 106 +246 148 57 +238 98 16 +255 255 0 +213 246 123 +115 222 65 +57 189 49 +0 156 41 +0 123 41 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +8 205 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 205 +0 0 156 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +8 205 255 +57 131 156 +90 148 172 +115 164 189 +139 180 205 +172 205 213 +197 222 230 +222 238 246 +255 255 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +0 0 0 +255 255 255 +213 246 255 +172 230 255 +131 222 255 +74 205 255 +16 197 255 +8 189 255 +0 172 255 +0 156 255 +139 213 172 +115 180 131 +74 148 106 +255 255 189 +172 172 148 +115 131 123 +0 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +82 238 246 +74 222 246 +65 213 246 +49 205 238 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..20d6371758 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tiles.png b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..2cbe45ac2b Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/flags.coll b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..1e3f4d51be Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/header.c b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/header.c new file mode 100644 index 0000000000..ae89638020 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/header.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_chao_hunt_act_vs_zone_a_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_chao_hunt_act_vs_zone_a_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_chao_hunt_act_vs_zone_a_fg[] = INCBIN_S8("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_chao_hunt_act_vs_zone_a_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_chao_hunt_act_vs_zone_a_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_a_fg0[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_a_fg1[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_chao_hunt_act_vs_zone_a_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_a/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_a_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x1C0, + .animFrameCount = 4, + .animDelay = 10, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_a_fg, + .tilesSize = (u32)sizeof(Tileset_zone_chao_hunt_act_vs_zone_a_fg) - (4 * 0x1C0), + .palette = Palette_zone_chao_hunt_act_vs_zone_a_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_a_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_a_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_a_fg0, + .mapWidth = 20, + .mapHeight = 12, +}; + +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_a_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_a_fg, + .tilesSize = (u32)sizeof(Tileset_zone_chao_hunt_act_vs_zone_a_fg) - (4 * 0x1C0), + .palette = Palette_zone_chao_hunt_act_vs_zone_a_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_a_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_a_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_a_fg1, + .mapWidth = 20, + .mapHeight = 12, +}; + +const Collision CollHeader_zone_chao_hunt_act_vs_zone_a_fg + = { CollHeightMap_zone_chao_hunt_act_vs_zone_a_fg, + CollTileRot_zone_chao_hunt_act_vs_zone_a_fg, + Metatiles_zone_chao_hunt_act_vs_zone_a_fg, + { Map_zone_chao_hunt_act_vs_zone_a_fg0, Map_zone_chao_hunt_act_vs_zone_a_fg1 }, + CollFlags_zone_chao_hunt_act_vs_zone_a_fg, + 20, + 12, + 0x0780, + 0x0480 }; diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/height_map.coll b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..53c08b74e8 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_back.bin b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..96c8dca877 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_front.bin b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..85d9de0b89 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..fdba81ab09 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..bae040a640 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +8 205 255 +255 246 172 +246 213 131 +230 164 98 +213 106 82 +255 32 16 +255 32 16 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +24 57 41 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +49 82 49 +16 32 24 +255 238 82 +246 189 82 +255 139 189 +255 57 139 +180 24 98 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +0 205 255 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +197 139 32 +189 115 24 +172 82 0 +148 57 0 +213 148 82 +197 115 49 +164 82 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +0 205 255 +255 213 123 +246 189 90 +230 164 82 +205 131 65 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +230 180 106 +189 123 65 +172 90 41 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +74 131 74 +49 82 49 +49 82 49 +8 32 16 +197 139 32 +189 115 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +255 32 16 +8 205 255 +255 255 255 +255 172 139 +255 115 82 +230 32 0 +156 24 0 +197 222 238 +180 156 164 +180 164 148 +156 139 123 +131 115 98 +255 230 164 +246 123 65 +213 57 0 +164 32 0 +82 16 0 +0 205 255 +255 246 180 +246 213 164 +222 164 98 +180 123 65 +123 82 57 +74 41 49 +255 255 106 +189 255 49 +139 238 24 +98 197 24 +65 156 16 +32 115 16 +16 74 8 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +255 230 213 +255 197 172 +255 156 148 +230 90 123 +197 16 90 +255 197 106 +246 148 57 +238 98 16 +255 255 0 +213 246 123 +115 222 65 +57 189 49 +0 156 41 +0 123 41 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +8 205 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 205 +0 0 156 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +8 205 255 +57 131 156 +90 148 172 +115 164 189 +139 180 205 +172 205 213 +197 222 230 +222 238 246 +255 255 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +0 0 0 +255 255 255 +213 246 255 +172 230 255 +131 222 255 +74 205 255 +16 197 255 +8 189 255 +0 172 255 +0 156 255 +139 213 172 +115 180 131 +74 148 106 +255 255 189 +172 172 148 +115 131 123 +0 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +82 238 246 +74 222 246 +65 213 246 +49 205 238 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tile_rot.coll b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..67a7127c67 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tileset.png b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..5e39c859b7 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_a/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/entities/enemies.csv b/sa1/data/maps/chao_hunt/vs_zone_b/entities/enemies.csv new file mode 100644 index 0000000000..459e57585d --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/entities/enemies.csv @@ -0,0 +1 @@ +Adv2,ENEMIES,8,5,,,,, diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/entities/interactables.csv b/sa1/data/maps/chao_hunt/vs_zone_b/entities/interactables.csv new file mode 100644 index 0000000000..9641b9ef18 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/entities/interactables.csv @@ -0,0 +1,34 @@ +Adv2,INTERACTABLES,8,5,,,,, +0,1,14,26,TRACK,10,0,20,3 +0,1,20,26,PIPE_EXIT,-20,20,2,4 +1,1,30,21,PLATFORM_THIN,0,0,5,2 +1,1,26,28,ITEMBOX_CHAOHUNT,3,0,0,0 +2,1,13,13,PLATFORM_THIN,0,0,7,2 +2,1,28,21,PLATFORM_THIN,-3,0,5,2 +3,1,15,28,ITEMBOX_CHAOHUNT,2,0,0,0 +4,1,4,12,SPRING__BIG_UPRIGHT,0,-44,0,0 +4,1,10,18,CONVEYOR_BELT,1,0,12,5 +4,1,16,30,CONVEYOR_BELT,0,0,18,5 +5,1,29,4,ITEMBOX_CHAOHUNT,0,0,0,0 +5,1,5,13,PLATFORM_THIN__FALLING,91,-45,0,0 +5,1,5,23,PLATFORM_THIN__FALLING,91,-55,0,0 +2,2,6,3,BOUNCE_BLOCK,-70,-67,0,0 +2,2,30,7,BOUNCE_BLOCK,-94,-71,0,0 +5,2,20,2,HOOK_RAIL,2,-66,0,0 +6,2,28,0,PIPE_EXIT,36,20,3,4 +6,2,3,8,ITEMBOX_CHAOHUNT,6,0,0,0 +7,2,2,0,TRACK,-8,0,20,3 +0,3,27,22,PIPE_ENTRANCE,0,16,1,0 +1,3,31,0,TRAMPOLINE,-63,-96,0,0 +1,3,28,24,ITEMBOX_CHAOHUNT,4,0,0,0 +1,3,6,25,SPRING__UP,0,-121,0,0 +3,3,18,6,ITEMBOX_CHAOHUNT,5,0,0,0 +4,3,7,12,TRAMPOLINE,121,-108,0,0 +4,3,11,12,ITEMBOX_CHAOHUNT,1,0,0,0 +6,3,21,28,PIPE_ENTRANCE,0,9,1,0 +6,3,1,30,ITEMBOX_CHAOHUNT,7,0,0,0 +6,3,12,31,SPRING__LEFT,3,-127,0,0 +0,4,14,2,TRACK,0,-75,60,2 +0,4,27,2,TRACK,-16,0,20,1 +6,4,21,2,TRACK,17,0,20,1 +7,4,2,2,TRACK,0,-69,60,2 diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/entities/itemboxes.csv b/sa1/data/maps/chao_hunt/vs_zone_b/entities/itemboxes.csv new file mode 100644 index 0000000000..1b9ac4b65e --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/entities/itemboxes.csv @@ -0,0 +1 @@ +Adv2,ITEMS,8,5, diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/entities/rings.csv b/sa1/data/maps/chao_hunt/vs_zone_b/entities/rings.csv new file mode 100644 index 0000000000..3eb0657673 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/entities/rings.csv @@ -0,0 +1 @@ +Adv2,RINGS,8,5 diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/header.c b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/header.c new file mode 100644 index 0000000000..041848029e --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_chao_hunt_act_vs_zone_b_fg[]; +const u8 Tiles_zone_chao_hunt_act_vs_zone_b_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_chao_hunt_act_vs_zone_b_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_chao_hunt_act_vs_zone_b_bg = { + .xTiles = 32, + .yTiles = 64, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_chao_hunt_act_vs_zone_b_bg, + .tilesSize = sizeof(Tiles_zone_chao_hunt_act_vs_zone_b_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_b_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_chao_hunt_act_vs_zone_b_bg, +}; diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..c35f1696c4 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +41 123 41 +222 255 123 +180 222 90 +139 180 82 +106 148 65 +90 106 57 +238 238 222 +205 205 180 +189 180 131 +156 148 82 +123 106 49 +255 222 0 +255 156 0 +255 106 0 +189 82 0 +57 32 0 +41 123 41 +255 230 156 +180 164 98 +139 123 65 +90 82 32 +255 222 0 +255 156 0 +255 106 0 +197 82 0 +139 57 0 +49 16 0 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +255 255 65 +255 222 0 +222 180 0 +180 172 0 +98 57 0 +0 0 0 +222 230 164 +180 189 156 +123 123 82 +90 82 41 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +230 255 115 +189 213 106 +123 164 98 +82 131 98 +32 90 65 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 189 +205 197 123 +164 148 98 +123 98 74 +90 74 41 +41 123 41 +255 238 180 +230 197 148 +205 164 115 +172 131 106 +139 106 98 +115 90 90 +82 57 65 +0 0 0 +0 255 0 +0 255 0 +255 230 74 +255 180 0 +197 123 0 +98 57 0 +0 0 0 +41 123 41 +255 255 0 +255 172 0 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +41 123 41 +255 255 205 +213 205 205 +148 139 148 +82 74 82 +32 41 0 +255 230 115 +255 156 0 +197 82 0 +255 205 0 +238 148 0 +213 82 0 +156 57 0 +106 41 0 +49 16 0 +0 0 0 +41 123 41 +0 255 0 +0 255 0 +0 255 0 +255 255 222 +189 189 156 +148 148 115 +98 115 82 +49 65 41 +0 16 0 +255 238 156 +255 189 98 +205 148 16 +148 106 0 +90 57 0 +0 0 0 +0 0 0 +255 255 222 +213 213 172 +172 172 131 +139 131 90 +115 98 49 +74 65 32 +255 230 74 +255 180 0 +255 106 0 +197 82 0 +131 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +197 82 0 +148 82 0 +106 32 0 +65 32 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +238 139 24 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +172 82 41 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 255 +255 255 0 +139 148 16 +82 90 24 +255 0 0 +123 0 0 +0 255 255 +0 148 156 +0 255 0 +106 148 172 +74 106 123 +57 82 98 +41 57 74 +32 49 57 +16 24 32 +255 0 0 +255 0 0 +172 41 32 +255 255 0 +156 156 57 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 +230 0 0 +148 180 98 +98 139 82 +74 106 65 +32 65 49 +8 24 41 +197 123 32 +164 90 16 +148 82 24 +115 74 32 +98 57 32 +49 49 41 +172 172 123 +139 131 115 +115 106 82 +16 16 16 +230 0 0 +123 156 131 +106 139 123 +65 106 106 +32 65 65 +148 115 74 +123 90 57 +106 74 41 +82 49 24 +65 32 0 +148 139 115 +115 106 82 +98 90 65 +74 65 49 +57 49 41 +0 0 0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..f9aa82cf78 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tiles.png b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..a24ff2c22b Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/flags.coll b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..6e18df8a8f Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/header.c b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/header.c new file mode 100644 index 0000000000..a835ce0d3b --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/header.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_chao_hunt_act_vs_zone_b_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_chao_hunt_act_vs_zone_b_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_chao_hunt_act_vs_zone_b_fg[] = INCBIN_S8("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_chao_hunt_act_vs_zone_b_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_chao_hunt_act_vs_zone_b_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_b_fg0[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_b_fg1[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_chao_hunt_act_vs_zone_b_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_b/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_b_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x340, + .animFrameCount = 8, + .animDelay = 8, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_b_fg, + .tilesSize = (u32)sizeof(Tileset_zone_chao_hunt_act_vs_zone_b_fg) - (8 * 0x340), + .palette = Palette_zone_chao_hunt_act_vs_zone_b_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_b_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_b_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_b_fg0, + .mapWidth = 20, + .mapHeight = 12, +}; + +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_b_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_b_fg, + .tilesSize = (u32)sizeof(Tileset_zone_chao_hunt_act_vs_zone_b_fg) - (8 * 0x340), + .palette = Palette_zone_chao_hunt_act_vs_zone_b_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_b_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_b_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_b_fg1, + .mapWidth = 20, + .mapHeight = 12, +}; + +const Collision CollHeader_zone_chao_hunt_act_vs_zone_b_fg + = { CollHeightMap_zone_chao_hunt_act_vs_zone_b_fg, + CollTileRot_zone_chao_hunt_act_vs_zone_b_fg, + Metatiles_zone_chao_hunt_act_vs_zone_b_fg, + { Map_zone_chao_hunt_act_vs_zone_b_fg0, Map_zone_chao_hunt_act_vs_zone_b_fg1 }, + CollFlags_zone_chao_hunt_act_vs_zone_b_fg, + 20, + 12, + 0x0780, + 0x0480 }; diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/height_map.coll b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..a4de14a6e6 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_back.bin b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..469ace8a59 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_front.bin b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..dd045d379d Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..4366101aea Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..c35f1696c4 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +41 123 41 +222 255 123 +180 222 90 +139 180 82 +106 148 65 +90 106 57 +238 238 222 +205 205 180 +189 180 131 +156 148 82 +123 106 49 +255 222 0 +255 156 0 +255 106 0 +189 82 0 +57 32 0 +41 123 41 +255 230 156 +180 164 98 +139 123 65 +90 82 32 +255 222 0 +255 156 0 +255 106 0 +197 82 0 +139 57 0 +49 16 0 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +255 255 65 +255 222 0 +222 180 0 +180 172 0 +98 57 0 +0 0 0 +222 230 164 +180 189 156 +123 123 82 +90 82 41 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +230 255 115 +189 213 106 +123 164 98 +82 131 98 +32 90 65 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 189 +205 197 123 +164 148 98 +123 98 74 +90 74 41 +41 123 41 +255 238 180 +230 197 148 +205 164 115 +172 131 106 +139 106 98 +115 90 90 +82 57 65 +0 0 0 +0 255 0 +0 255 0 +255 230 74 +255 180 0 +197 123 0 +98 57 0 +0 0 0 +41 123 41 +255 255 0 +255 172 0 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +41 123 41 +255 255 205 +213 205 205 +148 139 148 +82 74 82 +32 41 0 +255 230 115 +255 156 0 +197 82 0 +255 205 0 +238 148 0 +213 82 0 +156 57 0 +106 41 0 +49 16 0 +0 0 0 +41 123 41 +0 255 0 +0 255 0 +0 255 0 +255 255 222 +189 189 156 +148 148 115 +98 115 82 +49 65 41 +0 16 0 +255 238 156 +255 189 98 +205 148 16 +148 106 0 +90 57 0 +0 0 0 +0 0 0 +255 255 222 +213 213 172 +172 172 131 +139 131 90 +115 98 49 +74 65 32 +255 230 74 +255 180 0 +255 106 0 +197 82 0 +131 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +197 82 0 +148 82 0 +106 32 0 +65 32 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +238 139 24 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +172 82 41 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 255 +255 255 0 +139 148 16 +82 90 24 +255 0 0 +123 0 0 +0 255 255 +0 148 156 +0 255 0 +106 148 172 +74 106 123 +57 82 98 +41 57 74 +32 49 57 +16 24 32 +255 0 0 +255 0 0 +172 41 32 +255 255 0 +156 156 57 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 +230 0 0 +148 180 98 +98 139 82 +74 106 65 +32 65 49 +8 24 41 +197 123 32 +164 90 16 +148 82 24 +115 74 32 +98 57 32 +49 49 41 +172 172 123 +139 131 115 +115 106 82 +16 16 16 +230 0 0 +123 156 131 +106 139 123 +65 106 106 +32 65 65 +148 115 74 +123 90 57 +106 74 41 +82 49 24 +65 32 0 +148 139 115 +115 106 82 +98 90 65 +74 65 49 +57 49 41 +0 0 0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tile_rot.coll b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..d8d35f3521 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tileset.png b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..295cb55ccd Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_b/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/entities/enemies.csv b/sa1/data/maps/chao_hunt/vs_zone_c/entities/enemies.csv new file mode 100644 index 0000000000..74fc71986d --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/entities/enemies.csv @@ -0,0 +1 @@ +Adv2,ENEMIES,6,8,,,,, diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/entities/interactables.csv b/sa1/data/maps/chao_hunt/vs_zone_c/entities/interactables.csv new file mode 100644 index 0000000000..44cf04413e --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/entities/interactables.csv @@ -0,0 +1,71 @@ +Adv2,INTERACTABLES,6,8,,,,, +1,0,8,28,PLATFORM_THIN,0,0,8,2 +1,0,22,31,WALL_POLE__RIGHT,-54,-31,0,0 +2,0,1,24,RED_FLAG,0,-24,0,0 +3,0,23,31,FLIPPER,0,-31,0,0 +4,0,12,23,WALL_BUMPER,2,0,4,18 +4,0,4,24,WALL_BUMPER,1,0,4,13 +1,1,4,16,BUMPER_ROUND__CIRCULAR,6,5,8,2 +1,1,4,16,BUMPER_ROUND__CIRCULAR,2,5,8,2 +1,1,4,16,BUMPER_ROUND__CIRCULAR,4,5,8,2 +1,1,4,16,BUMPER_ROUND__LINEAR,-36,-48,0,0 +1,1,4,16,BUMPER_ROUND__CIRCULAR,0,5,8,2 +2,1,2,4,BUMPER_TRI__BIG,0,0,0,0 +2,1,25,4,ITEMBOX_CHAOHUNT,0,0,0,0 +3,1,0,10,WALL_POLE__LEFT,-96,-42,0,0 +4,1,4,5,WALL_BUMPER,1,0,4,13 +4,1,12,9,WALL_BUMPER,2,0,4,14 +4,1,4,18,WALL_BUMPER,1,0,4,13 +4,1,12,23,WALL_BUMPER,2,0,4,15 +4,1,4,31,WALL_BUMPER,1,0,4,16 +0,2,25,28,FLIPPER,1,-92,0,0 +1,2,0,4,PLATFORM_THIN,0,0,7,2 +1,2,16,14,WALL_POLE__RIGHT,-48,-78,0,0 +1,2,28,16,MARBLE_TRACK__UNK,45,32,30,0 +2,2,31,0,MARBLE_TRACK__DIR,-51,25,90,31 +2,2,17,8,ITEMBOX_CHAOHUNT,1,0,0,0 +2,2,2,9,SPRING__UP,1,-73,0,0 +2,2,20,14,WALL_POLE__LEFT,-84,-78,0,0 +3,2,3,0,MARBLE_TRACK__ENTRANCE,60,0,56,0 +3,2,3,1,MARBLE_TRACK__DIR,-6,0,30,30 +3,2,5,21,FLIPPER,0,-85,0,0 +4,2,12,6,WALL_BUMPER,2,0,4,14 +4,2,4,15,WALL_BUMPER,1,0,4,17 +0,3,12,12,BUMPER_TRI__BIG,-12,0,0,0 +1,3,15,19,FLIPPER,0,-115,0,0 +1,3,30,23,MARBLE_TRACK__DIR,-66,33,60,33 +2,3,6,12,ITEMBOX_CHAOHUNT,2,0,0,0 +2,3,21,19,FLIPPER,1,-115,0,0 +3,3,24,12,BUMPER_TRI__BIG,0,0,0,0 +4,3,16,6,WALL_POLE__RIGHT,112,-102,0,0 +4,3,16,18,WALL_POLE__RIGHT,112,-114,0,0 +4,3,16,31,WALL_POLE__RIGHT,112,-127,0,0 +0,4,24,6,SPRING__SMALL_UPRIGHT,0,122,0,0 +0,4,21,8,MARBLE_TRACK__EXIT,-21,40,1,0 +0,4,22,8,MARBLE_TRACK__DIR,-6,0,30,39 +0,4,30,28,BUMPER_TRI__BIG,-30,100,0,0 +0,4,15,29,SPRING__UP,1,99,0,0 +1,4,7,10,PLATFORM_THIN,0,0,6,2 +2,4,27,10,PLATFORM_THIN,0,0,5,2 +2,4,0,20,PLATFORM_THIN,-12,0,14,2 +2,4,27,28,ITEMBOX_CHAOHUNT,3,0,0,0 +3,4,12,6,SPRING__SMALL_UPLEFT,0,122,0,0 +3,4,18,17,WALL_POLE__LEFT,-114,111,0,0 +3,4,6,28,BUMPER_TRI__BIG,0,100,0,0 +3,4,22,28,ITEMBOX_CHAOHUNT,4,0,0,0 +1,5,11,18,FLIPPER,1,78,0,0 +2,5,25,18,FLIPPER,0,78,0,0 +4,5,6,15,SPRING__UP,0,81,0,0 +4,5,10,15,SPRING__UP,0,81,0,0 +4,5,14,15,SPRING__UP,2,81,0,0 +0,6,27,6,RED_FLAG,0,58,0,0 +0,6,25,24,ITEMBOX_CHAOHUNT,7,0,0,0 +1,6,17,0,ITEMBOX_CHAOHUNT,5,0,0,0 +1,6,30,1,SPRING__UP,2,63,0,0 +1,6,4,19,FLIPPER__VERTICAL,-36,45,0,0 +2,6,19,0,ITEMBOX_CHAOHUNT,6,0,0,0 +2,6,2,1,SPRING__UP,2,63,0,0 +2,6,6,1,SPRING__UP,2,63,0,0 +2,6,2,22,TELEPORT_ORB,5,2,0,-16 +3,6,7,6,RED_FLAG,-103,0,0,0 +3,6,0,19,FLIPPER__VERTICAL,-96,45,0,0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/entities/itemboxes.csv b/sa1/data/maps/chao_hunt/vs_zone_c/entities/itemboxes.csv new file mode 100644 index 0000000000..1d6cface27 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/entities/itemboxes.csv @@ -0,0 +1 @@ +Adv2,ITEMS,6,8, diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/entities/rings.csv b/sa1/data/maps/chao_hunt/vs_zone_c/entities/rings.csv new file mode 100644 index 0000000000..8168374531 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/entities/rings.csv @@ -0,0 +1 @@ +Adv2,RINGS,6,8 diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/header.c b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/header.c new file mode 100644 index 0000000000..52b9dc3b31 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_chao_hunt_act_vs_zone_c_fg[]; +const u8 Tiles_zone_chao_hunt_act_vs_zone_c_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_chao_hunt_act_vs_zone_c_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_chao_hunt_act_vs_zone_c_bg = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_chao_hunt_act_vs_zone_c_bg, + .tilesSize = sizeof(Tiles_zone_chao_hunt_act_vs_zone_c_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_c_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_chao_hunt_act_vs_zone_c_bg, +}; diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..43fea17a70 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +49 115 139 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +255 255 115 +246 205 82 +230 156 65 +189 123 74 +148 90 90 +90 0 90 +255 230 156 +180 164 131 +106 98 106 +82 57 57 +255 255 255 +139 123 255 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 255 255 +189 180 164 +0 0 0 +74 49 180 +255 8 255 +164 0 164 +74 0 74 +0 255 0 +0 172 0 +0 82 0 +255 255 0 +255 115 0 +148 32 0 +238 65 32 +255 255 255 +189 189 180 +139 139 139 +98 98 98 +49 41 57 +41 0 106 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 255 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +255 180 139 +255 98 90 +172 32 16 +98 0 0 +255 230 0 +230 139 0 +156 57 0 +49 32 0 +0 0 0 +0 0 0 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 189 16 +230 139 0 +156 74 0 +123 197 74 +49 148 49 +0 74 0 +0 255 0 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 238 0 +255 156 0 +156 74 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +255 255 255 +0 255 255 +0 189 189 +0 123 123 +0 164 172 +0 123 123 +0 90 90 +0 57 57 +255 255 255 +164 180 164 +0 0 0 +255 0 0 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +0 0 0 +255 255 0 +246 197 0 +255 156 0 +255 106 0 +255 0 0 +123 74 123 +123 0 123 +139 0 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 255 0 +0 156 0 +255 164 115 +123 123 0 +123 74 0 +41 49 49 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +139 213 255 +65 164 255 +0 115 255 +255 156 255 +255 0 255 +255 0 131 +0 255 131 +0 222 115 +0 115 74 +0 8 0 +0 0 0 +255 255 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +255 255 255 +205 197 115 +115 98 65 +139 106 189 +115 82 164 +98 65 139 +74 41 115 +156 255 238 +115 197 172 +0 123 148 +24 115 41 +255 0 0 +189 123 0 +164 57 0 +24 0 57 +255 0 0 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +82 180 180 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +255 0 0 +255 255 255 +255 255 0 +255 189 0 +255 255 139 +197 197 115 +131 131 90 +74 74 57 +139 205 16 +90 148 57 +65 98 65 +41 16 65 +255 0 0 +98 123 74 +139 57 0 +0 0 0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..a193e8f0a9 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tiles.png b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..c6d665ac93 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/flags.coll b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..fcffde1c49 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/header.c b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/header.c new file mode 100644 index 0000000000..2ffac971cb --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/header.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_chao_hunt_act_vs_zone_c_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_chao_hunt_act_vs_zone_c_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_chao_hunt_act_vs_zone_c_fg[] = INCBIN_S8("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_chao_hunt_act_vs_zone_c_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_chao_hunt_act_vs_zone_c_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_c_fg0[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_c_fg1[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_chao_hunt_act_vs_zone_c_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_c/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_c_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_c_fg, + .tilesSize = sizeof(Tileset_zone_chao_hunt_act_vs_zone_c_fg) - (0 * 0x00), + .palette = Palette_zone_chao_hunt_act_vs_zone_c_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_c_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_c_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_c_fg0, + .mapWidth = 14, + .mapHeight = 20, +}; + +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_c_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_c_fg, + .tilesSize = sizeof(Tileset_zone_chao_hunt_act_vs_zone_c_fg) - (0 * 0x00), + .palette = Palette_zone_chao_hunt_act_vs_zone_c_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_c_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_c_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_c_fg1, + .mapWidth = 14, + .mapHeight = 20, +}; + +const Collision CollHeader_zone_chao_hunt_act_vs_zone_c_fg + = { CollHeightMap_zone_chao_hunt_act_vs_zone_c_fg, + CollTileRot_zone_chao_hunt_act_vs_zone_c_fg, + Metatiles_zone_chao_hunt_act_vs_zone_c_fg, + { Map_zone_chao_hunt_act_vs_zone_c_fg0, Map_zone_chao_hunt_act_vs_zone_c_fg1 }, + CollFlags_zone_chao_hunt_act_vs_zone_c_fg, + 14, + 20, + 0x0540, + 0x0780 }; diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/height_map.coll b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..144f15f2b6 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_back.bin b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..dbde38a9ee Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_front.bin b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..df9ac03fc1 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..1840c8b80b Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..43fea17a70 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +49 115 139 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +255 255 115 +246 205 82 +230 156 65 +189 123 74 +148 90 90 +90 0 90 +255 230 156 +180 164 131 +106 98 106 +82 57 57 +255 255 255 +139 123 255 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 255 255 +189 180 164 +0 0 0 +74 49 180 +255 8 255 +164 0 164 +74 0 74 +0 255 0 +0 172 0 +0 82 0 +255 255 0 +255 115 0 +148 32 0 +238 65 32 +255 255 255 +189 189 180 +139 139 139 +98 98 98 +49 41 57 +41 0 106 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 255 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +255 180 139 +255 98 90 +172 32 16 +98 0 0 +255 230 0 +230 139 0 +156 57 0 +49 32 0 +0 0 0 +0 0 0 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 189 16 +230 139 0 +156 74 0 +123 197 74 +49 148 49 +0 74 0 +0 255 0 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 238 0 +255 156 0 +156 74 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +255 255 255 +0 255 255 +0 189 189 +0 123 123 +0 164 172 +0 123 123 +0 90 90 +0 57 57 +255 255 255 +164 180 164 +0 0 0 +255 0 0 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +0 0 0 +255 255 0 +246 197 0 +255 156 0 +255 106 0 +255 0 0 +123 74 123 +123 0 123 +139 0 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 255 0 +0 156 0 +255 164 115 +123 123 0 +123 74 0 +41 49 49 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +139 213 255 +65 164 255 +0 115 255 +255 156 255 +255 0 255 +255 0 131 +0 255 131 +0 222 115 +0 115 74 +0 8 0 +0 0 0 +255 255 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +255 255 255 +205 197 115 +115 98 65 +139 106 189 +115 82 164 +98 65 139 +74 41 115 +156 255 238 +115 197 172 +0 123 148 +24 115 41 +255 0 0 +189 123 0 +164 57 0 +24 0 57 +255 0 0 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +82 180 180 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +255 0 0 +255 255 255 +255 255 0 +255 189 0 +255 255 139 +197 197 115 +131 131 90 +74 74 57 +139 205 16 +90 148 57 +65 98 65 +41 16 65 +255 0 0 +98 123 74 +139 57 0 +0 0 0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tile_rot.coll b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..5cf5d8516f Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tileset.png b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..4205c01027 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_c/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/entities/enemies.csv b/sa1/data/maps/chao_hunt/vs_zone_d/entities/enemies.csv new file mode 100644 index 0000000000..3cba160386 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/entities/enemies.csv @@ -0,0 +1 @@ +Adv2,ENEMIES,8,6,,,,, diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/entities/interactables.csv b/sa1/data/maps/chao_hunt/vs_zone_d/entities/interactables.csv new file mode 100644 index 0000000000..73fbdf57ec --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/entities/interactables.csv @@ -0,0 +1,44 @@ +Adv2,INTERACTABLES,8,6,,,,, +3,0,24,24,BOOSTER,0,-24,0,0 +1,1,30,27,FERRIS_WHEEL,11,5,10,2 +1,1,30,27,FERRIS_WHEEL,5,5,10,2 +1,1,30,27,FERRIS_WHEEL,0,5,10,2 +1,1,13,30,SPRING__SMALL_UPRIGHT,2,-62,0,0 +3,1,24,4,BOOSTER,-120,0,0,0 +3,1,0,10,ITEMBOX_CHAOHUNT,0,0,0,0 +4,1,1,4,ITEMBOX_CHAOHUNT,1,0,0,0 +5,1,19,27,FERRIS_WHEEL,5,5,10,2 +5,1,19,27,FERRIS_WHEEL,11,5,10,2 +5,1,19,27,FERRIS_WHEEL,0,5,10,2 +6,1,3,30,SPRING__SMALL_UPLEFT,2,-62,0,0 +1,2,14,19,SPRING__DOWN,0,-83,0,0 +2,2,13,8,ITEMBOX_CHAOHUNT,3,0,0,0 +3,2,12,2,TOGGLE__PLAYER_FLOAT,0,0,18,19 +3,2,21,9,SPIKED_BARREL__CHAOHUNT,-117,-73,0,0 +5,2,5,8,ITEMBOX_CHAOHUNT,2,0,0,0 +6,2,2,19,SPRING__DOWN,0,-83,0,0 +0,3,12,6,BOOSTER__WALL,0,-102,0,0 +1,3,0,10,TOGGLE_GRAVITY,1,0,2,17 +1,3,5,10,TOGGLE_GRAVITY,2,0,2,17 +1,3,28,30,PLATFORM_THIN,0,-5,2,7 +2,3,6,1,SPRING__UP,2,-97,0,0 +2,3,20,16,TOGGLE_GRAVITY,2,0,2,17 +2,3,25,16,TOGGLE_GRAVITY,1,0,2,17 +2,3,11,20,ITEMBOX_CHAOHUNT,7,0,0,0 +2,3,6,30,PLATFORM_THIN,0,0,2,8 +3,3,21,1,MOVING_SPRING,0,0,5,2 +3,3,22,17,MOVING_SPRING,-2,0,4,2 +3,3,30,24,ITEMBOX_CHAOHUNT,4,0,0,0 +3,3,15,29,SPRING__DOWN,1,-125,0,0 +3,3,24,29,SPRING__DOWN,1,-125,0,0 +4,3,21,16,TOGGLE_GRAVITY,1,0,2,17 +4,3,26,16,TOGGLE_GRAVITY,2,0,2,17 +4,3,2,29,SPRING__DOWN,1,-125,0,0 +5,3,10,1,SPRING__UP,2,-97,0,0 +5,3,8,30,PLATFORM_THIN,0,0,2,7 +5,3,18,30,PLATFORM_THIN,0,-5,2,7 +6,3,21,0,ITEMBOX_CHAOHUNT,5,0,0,0 +6,3,9,10,TOGGLE_GRAVITY,2,0,2,17 +6,3,14,10,TOGGLE_GRAVITY,1,0,2,17 +7,3,4,6,BOOSTER__WALL,28,0,0,0 +4,4,31,6,ITEMBOX_CHAOHUNT,6,0,0,0 diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/entities/itemboxes.csv b/sa1/data/maps/chao_hunt/vs_zone_d/entities/itemboxes.csv new file mode 100644 index 0000000000..7d6325784c --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/entities/itemboxes.csv @@ -0,0 +1 @@ +Adv2,ITEMS,8,6, diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/entities/rings.csv b/sa1/data/maps/chao_hunt/vs_zone_d/entities/rings.csv new file mode 100644 index 0000000000..268596738b --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/entities/rings.csv @@ -0,0 +1 @@ +Adv2,RINGS,8,6 diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/header.c b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/header.c new file mode 100644 index 0000000000..dd693f82b6 --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_chao_hunt_act_vs_zone_d_fg[]; +const u8 Tiles_zone_chao_hunt_act_vs_zone_d_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_chao_hunt_act_vs_zone_d_bg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_chao_hunt_act_vs_zone_d_bg = { + .xTiles = 64, + .yTiles = 29, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_chao_hunt_act_vs_zone_d_bg, + .tilesSize = sizeof(Tiles_zone_chao_hunt_act_vs_zone_d_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_d_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_chao_hunt_act_vs_zone_d_bg, +}; diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..333181eaca --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 0 0 +213 189 98 +139 131 98 +65 74 65 +197 205 180 +230 230 164 +255 255 156 +8 8 16 +0 148 0 +255 255 255 +213 205 180 +164 156 131 +139 131 98 +98 90 57 +8 8 16 +255 230 148 +222 189 98 +189 156 82 +156 131 65 +255 255 255 +123 255 255 +57 189 255 +0 123 255 +0 0 197 +0 148 0 +32 74 49 +8 148 98 +0 255 123 +255 255 255 +0 0 0 +0 90 41 +0 180 41 +180 180 180 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 +0 148 0 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 74 65 +65 82 74 +98 156 148 +74 131 123 +57 115 115 +41 82 82 +24 57 57 +0 0 0 +255 0 0 +0 164 255 +0 148 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 222 222 +255 156 189 +255 90 115 +255 32 49 +189 0 0 +255 0 0 +255 0 0 +8 8 16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 205 0 +255 222 49 +255 238 106 +255 255 156 +0 255 123 +82 255 131 +172 255 148 +255 255 156 +0 148 0 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +90 82 98 +65 57 74 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +8 8 16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +49 16 0 +98 57 8 +148 90 8 +205 123 8 +255 197 57 +255 255 189 +8 41 32 +74 115 106 +106 172 148 +139 213 172 +172 238 189 +255 0 0 +255 131 0 +0 213 213 +106 255 255 +0 0 0 +255 255 255 +255 255 180 +238 238 123 +197 197 115 +148 148 98 +123 123 74 +90 90 65 +65 65 57 +255 0 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 115 255 +230 0 189 +148 0 148 +0 255 255 +0 180 197 +0 115 115 +0 255 0 +0 189 0 +0 115 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 106 222 +222 8 180 +180 24 148 +148 41 123 +106 57 98 +74 65 74 +255 255 255 +164 164 164 +0 255 255 +49 156 180 +0 139 255 +49 98 180 +0 0 0 +0 0 0 +49 41 49 diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..e0873438b7 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tiles.png b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..7a9f9961e1 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/flags.coll b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..a52aacb0ea Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/header.c b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/header.c new file mode 100644 index 0000000000..bf313d773f --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/header.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_chao_hunt_act_vs_zone_d_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_chao_hunt_act_vs_zone_d_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_chao_hunt_act_vs_zone_d_fg[] = INCBIN_S8("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_chao_hunt_act_vs_zone_d_fg[] = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_chao_hunt_act_vs_zone_d_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_d_fg0[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_chao_hunt_act_vs_zone_d_fg1[] = INCBIN_MAP("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_chao_hunt_act_vs_zone_d_fg[] = INCBIN_U16("data/maps/chao_hunt/vs_zone_d/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_d_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_d_fg, + .tilesSize = sizeof(Tileset_zone_chao_hunt_act_vs_zone_d_fg) - (0 * 0x00), + .palette = Palette_zone_chao_hunt_act_vs_zone_d_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_d_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_d_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_d_fg0, + .mapWidth = 20, + .mapHeight = 14, +}; + +ALIGNED(4) const struct MapHeader zone_chao_hunt_act_vs_zone_d_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_chao_hunt_act_vs_zone_d_fg, + .tilesSize = sizeof(Tileset_zone_chao_hunt_act_vs_zone_d_fg) - (0 * 0x00), + .palette = Palette_zone_chao_hunt_act_vs_zone_d_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_chao_hunt_act_vs_zone_d_fg) / sizeof(u16), + .map = Metatiles_zone_chao_hunt_act_vs_zone_d_fg, + }, + .metatileMap = Map_zone_chao_hunt_act_vs_zone_d_fg1, + .mapWidth = 20, + .mapHeight = 14, +}; + +const Collision CollHeader_zone_chao_hunt_act_vs_zone_d_fg + = { CollHeightMap_zone_chao_hunt_act_vs_zone_d_fg, + CollTileRot_zone_chao_hunt_act_vs_zone_d_fg, + Metatiles_zone_chao_hunt_act_vs_zone_d_fg, + { Map_zone_chao_hunt_act_vs_zone_d_fg0, Map_zone_chao_hunt_act_vs_zone_d_fg1 }, + CollFlags_zone_chao_hunt_act_vs_zone_d_fg, + 20, + 14, + 0x0780, + 0x0540 }; diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/height_map.coll b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..01e1d5f085 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_back.bin b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..4c3e9a598a Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_front.bin b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..e080c37f41 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..0842638b1b Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/palette.pal b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..333181eaca --- /dev/null +++ b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 0 0 +213 189 98 +139 131 98 +65 74 65 +197 205 180 +230 230 164 +255 255 156 +8 8 16 +0 148 0 +255 255 255 +213 205 180 +164 156 131 +139 131 98 +98 90 57 +8 8 16 +255 230 148 +222 189 98 +189 156 82 +156 131 65 +255 255 255 +123 255 255 +57 189 255 +0 123 255 +0 0 197 +0 148 0 +32 74 49 +8 148 98 +0 255 123 +255 255 255 +0 0 0 +0 90 41 +0 180 41 +180 180 180 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 +0 148 0 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 74 65 +65 82 74 +98 156 148 +74 131 123 +57 115 115 +41 82 82 +24 57 57 +0 0 0 +255 0 0 +0 164 255 +0 148 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 222 222 +255 156 189 +255 90 115 +255 32 49 +189 0 0 +255 0 0 +255 0 0 +8 8 16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 205 0 +255 222 49 +255 238 106 +255 255 156 +0 255 123 +82 255 131 +172 255 148 +255 255 156 +0 148 0 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +90 82 98 +65 57 74 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +8 8 16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +49 16 0 +98 57 8 +148 90 8 +205 123 8 +255 197 57 +255 255 189 +8 41 32 +74 115 106 +106 172 148 +139 213 172 +172 238 189 +255 0 0 +255 131 0 +0 213 213 +106 255 255 +0 0 0 +255 255 255 +255 255 180 +238 238 123 +197 197 115 +148 148 98 +123 123 74 +90 90 65 +65 65 57 +255 0 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 115 255 +230 0 189 +148 0 148 +0 255 255 +0 180 197 +0 115 115 +0 255 0 +0 189 0 +0 115 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 106 222 +222 8 180 +180 24 148 +148 41 123 +106 57 98 +74 65 74 +255 255 255 +164 164 164 +0 255 255 +49 156 180 +0 139 255 +49 98 180 +0 0 0 +0 0 0 +49 41 49 diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tile_rot.coll b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..8207604c73 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tileset.png b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..851a1d9db1 Binary files /dev/null and b/sa1/data/maps/chao_hunt/vs_zone_d/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_1/act_1/entities/enemies.csv b/sa1/data/maps/zone_1/act_1/entities/enemies.csv new file mode 100644 index 0000000000..d5801adb39 --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/entities/enemies.csv @@ -0,0 +1,28 @@ +Adv2,ENEMIES,51,6,,,,, +9,0,30,31,BUZZER,-7,0,17,2 +18,0,20,1,BUZZER,-7,0,16,2 +19,0,17,4,BUZZER,-6,0,14,2 +19,0,29,16,BUZZER,-7,0,16,2 +20,0,6,26,BUZZER,-6,0,15,2 +28,0,6,26,BUZZER,-5,0,11,2 +5,1,21,5,GAMIGAMI,-7,0,15,2 +7,1,1,7,BUZZER,-6,0,14,2 +8,1,23,20,GAMIGAMI,-6,0,17,2 +13,1,5,11,BUZZER,-3,0,11,2 +27,1,0,24,RHINOTANK,-10,0,17,2 +35,2,17,27,BUZZER,-5,0,14,2 +38,2,6,17,RHINOTANK,-12,0,23,2 +40,2,15,29,BUZZER,-5,0,13,2 +26,3,29,13,KIKI,0,0,2,5 +30,3,9,0,KIKI,0,0,2,4 +38,3,7,30,KEROKERO,-11,0,22,2 +19,4,1,17,KIKI,0,0,2,7 +21,4,9,17,KIKI,0,0,2,7 +27,4,11,25,RHINOTANK,-8,0,20,2 +29,4,24,2,KEROKERO,-9,0,19,2 +30,4,26,29,KEROKERO,-9,0,18,2 +34,4,10,28,KEROKERO,-9,0,19,2 +39,4,29,13,GAMIGAMI,-14,0,25,2 +34,5,29,2,KEROKERO,-8,0,18,2 +35,5,19,5,KEROKERO,-10,0,20,2 +38,5,17,2,KEROKERO,-9,0,18,2 diff --git a/sa1/data/maps/zone_1/act_1/entities/interactables.csv b/sa1/data/maps/zone_1/act_1/entities/interactables.csv new file mode 100644 index 0000000000..aa4fd94a2d --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/entities/interactables.csv @@ -0,0 +1,116 @@ +Adv2,INTERACTABLES,51,6,,,,, +27,0,22,31,GRIND_RAIL__START,0,0,4,2 +47,0,19,0,STAGE_GOAL,0,1,0,0 +47,0,19,13,STAGE_GOAL,0,1,0,0 +5,1,31,25,SPIKES__NORMAL_UP,65,-57,0,0 +8,1,13,23,DECORATION,-13,-55,0,0 +9,1,12,7,SPRING__SMALL_UPLEFT,0,-39,0,0 +9,1,31,9,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +9,1,22,10,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +9,1,22,13,TOGGLE_PLAYER_LAYER__BACK,0,0,3,15 +9,1,25,15,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +10,1,2,9,TOGGLE_PLAYER_LAYER__BACK,0,0,16,3 +10,1,17,9,TOGGLE_PLAYER_LAYER__BACK,0,0,3,5 +10,1,18,14,SPRING__UP,0,115,1,1 +11,1,24,1,SPIKES__NORMAL_UP,-120,-33,0,0 +11,1,3,4,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +11,1,3,6,TOGGLE_PLAYER_LAYER__BACK,0,0,2,17 +11,1,5,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,19 +11,1,17,6,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +11,1,20,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +12,1,12,10,PLATFORM_THIN__FALLING,116,-42,0,0 +12,1,19,28,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +12,1,19,30,TOGGLE_PLAYER_LAYER__BACK,0,0,2,18 +12,1,21,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,19 +13,1,16,29,SPRING__BIG_UPRIGHT,0,-61,0,0 +13,1,1,30,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +13,1,4,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +20,1,28,30,SPRING__SMALL_UPRIGHT,2,-62,0,0 +27,1,12,16,WALL_POLE__RIGHT,-108,-48,0,0 +27,1,27,16,PLATFORM_THIN__FALLING,-123,-48,0,0 +28,1,23,30,GRIND_RAIL__END,0,0,8,4 +42,1,20,29,SPECIAL_SPRING,-84,-61,0,0 +47,1,19,0,STAGE_GOAL,0,1,0,0 +47,1,19,15,STAGE_GOAL,0,1,0,0 +14,2,18,27,GRIND_RAIL__START,0,0,3,2 +19,2,16,11,SPIKES__NORMAL_LEFT,-112,-75,0,0 +19,2,16,15,SPIKES__NORMAL_LEFT,-112,-79,0,0 +19,2,16,19,SPIKES__NORMAL_LEFT,-112,-83,0,0 +19,2,16,23,SPIKES__NORMAL_LEFT,-112,-87,0,0 +26,2,30,19,PLATFORM_THIN,0,-6,2,8 +26,2,1,20,TRAMPOLINE,-65,-84,0,0 +26,2,14,21,PLATFORM_THIN__FALLING,-78,-85,0,0 +27,2,21,27,DECORATION,-117,-91,0,0 +28,2,10,8,TOGGLE_PLAYER_LAYER__BACK,0,0,6,2 +28,2,1,9,PLATFORM_THIN,0,0,2,11 +28,2,10,10,TOGGLE_PLAYER_LAYER__BACK,0,0,3,23 +28,2,13,10,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,23 +28,2,25,10,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +28,2,28,10,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +33,2,14,29,SPIKES__NORMAL_UP,-46,-93,0,0 +33,2,18,29,SPIKES__NORMAL_UP,-50,-93,0,0 +33,2,6,31,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +34,2,12,31,BOUNCE_BLOCK,-76,-95,0,0 +36,2,19,31,BOUNCE_BLOCK,109,-95,0,0 +37,2,4,20,PLATFORM_CRUMBLING,1,-84,0,0 +38,2,30,15,GRIND_RAIL__START,0,0,4,2 +38,2,22,20,CHECKPOINT,5,-84,0,0 +41,2,15,20,PLATFORM_THIN,0,-10,2,12 +42,2,0,8,WALL_POLE__RIGHT,-64,-72,0,0 +47,2,19,0,STAGE_GOAL,0,1,0,0 +47,2,19,15,STAGE_GOAL,0,1,0,0 +14,3,7,0,CHECKPOINT,1,-96,0,0 +26,3,8,16,SPRING__BIG_UPRIGHT,0,-112,0,0 +27,3,12,26,PLATFORM_CRUMBLING,0,-122,0,0 +27,3,25,29,BOUNCE_BLOCK,-121,-125,0,0 +28,3,20,20,WATERFALL,0,-16,4,30 +28,3,9,25,BOUNCE_BLOCK,119,-121,0,0 +28,3,18,31,BOUNCE_BLOCK,110,-127,0,0 +29,3,12,16,WATERFALL,0,0,4,17 +30,3,28,28,WATERFALL,0,0,4,11 +32,3,1,0,INCLINE_RAMP,1,0,3,4 +33,3,6,2,TOGGLE_PLAYER_LAYER__BACK,0,0,3,22 +33,3,9,2,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,22 +33,3,21,2,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +33,3,24,2,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +33,3,1,21,BOOSTER,-33,0,0,0 +34,3,22,11,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +34,3,22,14,TOGGLE_PLAYER_LAYER__BACK,0,0,3,24 +34,3,25,14,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,23 +35,3,15,11,SPRING__SMALL_UPLEFT,0,-107,0,0 +35,3,5,14,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +35,3,8,14,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +36,3,0,11,WALL_POLE__RIGHT,-128,-107,0,0 +37,3,13,24,CHECKPOINT,3,-120,0,0 +37,3,10,30,WALL_POLE__RIGHT,86,-126,0,0 +38,3,30,25,HALFPIPE__START,0,-1,2,4 +38,3,23,27,BOOSTER,41,0,0,0 +40,3,19,10,SPRING__UP,1,-106,0,0 +40,3,16,31,GRIND_RAIL__END,0,0,14,3 +41,3,20,25,HALFPIPE__END,0,-1,2,4 +47,3,19,0,STAGE_GOAL,0,1,0,0 +47,3,19,15,STAGE_GOAL,0,1,0,0 +16,4,19,26,GRIND_RAIL__END,0,0,10,3 +17,4,4,31,BOOSTER,-36,0,0,0 +23,4,5,31,BOOSTER,27,0,0,0 +24,4,29,4,CHECKPOINT,2,124,0,0 +25,4,4,20,SPRING__RIGHT,1,108,0,0 +26,4,14,7,WALL_POLE__RIGHT,-78,121,0,0 +27,4,23,28,BOOSTER__SLIGHT_RIGHT,-119,0,0,0 +28,4,1,0,BOUNCE_BLOCK,0,-128,0,0 +28,4,20,16,WATERFALL,0,-12,4,36 +28,4,19,20,DECORATION,0,0,1,1 +29,4,12,7,WATERFALL,0,0,4,23 +30,4,28,7,FORCED_ICE_SLIDE,0,0,13,7 +31,4,16,9,WALL_POLE__RIGHT,16,119,0,0 +31,4,4,23,WATERFALL,0,-11,4,26 +35,4,0,21,WATERFALL,0,-13,4,29 +36,4,10,14,SPRING__UP,0,114,0,0 +36,4,31,24,BOUNCE_BLOCK,97,104,0,0 +37,4,10,11,WALL_POLE__RIGHT,86,117,0,0 +37,4,16,28,CHECKPOINT,4,100,0,0 +39,4,12,22,SPIKES__NORMAL_LEFT,20,106,0,0 +40,4,28,11,SPRING__RIGHT,1,117,0,0 +47,4,19,1,STAGE_GOAL,1,1,2,49 +31,5,14,3,SPRING__UP,0,93,0,0 +32,5,20,3,SPRING__RIGHT,1,93,0,0 diff --git a/sa1/data/maps/zone_1/act_1/entities/itemboxes.csv b/sa1/data/maps/zone_1/act_1/entities/itemboxes.csv new file mode 100644 index 0000000000..7120dac409 --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/entities/itemboxes.csv @@ -0,0 +1,14 @@ +Adv2,ITEMS,51,6, +6,1,5,13,SHIELD +9,1,29,13,RINGS_5 +13,1,12,25,SHIELD_MAGNETIC +19,1,23,4,RINGS_RANDOM +19,2,30,5,RINGS_RANDOM +28,2,20,5,SPEED_UP +37,2,8,20,SHIELD +29,3,0,30,ONE_UP +35,3,0,9,SPEED_UP +30,4,8,4,RINGS_5 +31,4,26,7,SHIELD +32,4,10,28,INVINCIBILITY +40,4,13,13,RINGS_RANDOM diff --git a/sa1/data/maps/zone_1/act_1/entities/rings.csv b/sa1/data/maps/zone_1/act_1/entities/rings.csv new file mode 100644 index 0000000000..69141b4335 --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/entities/rings.csv @@ -0,0 +1,292 @@ +Adv2,RINGS,51,6 +8,0,13,16 +8,0,16,16 +8,0,19,16 +8,0,12,19 +8,0,15,19 +8,0,18,19 +8,0,21,19 +21,0,29,23 +21,0,32,23 +21,0,27,26 +21,0,30,26 +22,0,3,23 +22,0,1,26 +22,0,4,26 +1,1,26,18 +1,1,31,18 +1,1,22,19 +3,1,13,14 +3,1,16,14 +3,1,19,14 +4,1,14,21 +4,1,18,21 +4,1,22,21 +4,1,10,23 +4,1,6,24 +5,1,4,11 +5,1,7,11 +5,1,10,11 +5,1,11,21 +5,1,15,21 +5,1,19,21 +5,1,24,22 +6,1,31,20 +7,1,2,20 +7,1,5,20 +8,1,26,11 +8,1,29,11 +8,1,32,11 +8,1,29,23 +9,1,1,24 +9,1,5,26 +9,1,9,27 +9,1,13,27 +10,1,27,15 +10,1,31,17 +10,1,14,19 +10,1,13,22 +10,1,7,24 +10,1,10,24 +11,1,20,9 +11,1,14,11 +11,1,26,11 +11,1,12,17 +11,1,28,17 +11,1,3,19 +13,1,4,33 +14,1,24,27 +14,1,27,27 +14,1,30,27 +14,1,21,30 +14,1,24,30 +14,1,27,30 +14,1,30,30 +15,1,1,30 +27,1,29,5 +27,1,10,6 +27,1,32,8 +27,1,10,10 +27,1,10,14 +28,1,4,12 +28,1,7,15 +28,1,10,18 +28,1,14,22 +28,1,17,25 +28,1,20,28 +29,1,18,19 +29,1,21,19 +29,1,24,19 +29,1,17,22 +29,1,20,22 +29,1,23,22 +29,1,26,22 +12,2,30,3 +12,2,13,8 +12,2,28,9 +12,2,17,10 +12,2,21,12 +13,2,10,3 +13,2,12,9 +14,2,27,33 +28,2,28,13 +28,2,22,15 +28,2,20,21 +29,2,2,15 +29,2,4,21 +31,2,2,25 +31,2,2,28 +31,2,2,31 +33,2,7,8 +33,2,10,8 +33,2,13,8 +33,2,14,14 +33,2,17,14 +33,2,20,14 +33,2,20,19 +33,2,23,19 +33,2,26,19 +34,2,17,19 +34,2,20,19 +34,2,16,22 +34,2,19,22 +34,2,22,22 +35,2,30,20 +35,2,30,23 +35,2,30,26 +35,2,30,29 +39,2,3,18 +39,2,6,21 +39,2,9,24 +39,2,12,27 +39,2,18,33 +14,3,22,3 +14,3,30,4 +14,3,25,6 +14,3,28,9 +15,3,1,7 +15,3,7,13 +15,3,2,15 +15,3,10,16 +15,3,5,18 +15,3,13,19 +15,3,8,21 +15,3,19,25 +15,3,14,27 +15,3,22,28 +15,3,17,30 +15,3,25,31 +15,3,20,33 +24,3,22,15 +24,3,20,17 +24,3,24,17 +24,3,22,18 +24,3,22,21 +25,3,10,27 +25,3,13,27 +25,3,16,27 +26,3,6,24 +26,3,9,24 +26,3,12,24 +27,3,31,18 +27,3,25,22 +27,3,31,22 +28,3,10,14 +28,3,13,14 +28,3,7,17 +28,3,10,17 +28,3,13,17 +28,3,16,17 +28,3,5,22 +29,3,13,6 +29,3,18,8 +29,3,23,9 +32,3,18,26 +32,3,17,30 +32,3,14,32 +33,3,24,5 +33,3,18,7 +33,3,30,7 +33,3,16,13 +33,3,32,13 +34,3,32,25 +34,3,13,31 +34,3,18,32 +34,3,23,32 +35,3,8,17 +35,3,2,19 +35,3,14,19 +35,3,16,25 +37,3,8,8 +37,3,8,11 +37,3,8,14 +37,3,19,20 +37,3,23,20 +37,3,27,20 +38,3,26,26 +38,3,29,26 +39,3,21,4 +39,3,24,7 +39,3,27,10 +39,3,28,18 +39,3,21,20 +39,3,15,23 +39,3,10,25 +39,3,2,26 +40,3,8,16 +40,3,12,16 +40,3,3,17 +40,3,17,17 +40,3,24,18 +40,3,4,20 +40,3,31,20 +40,3,7,23 +40,3,10,26 +40,3,13,29 +41,3,19,6 +41,3,17,8 +41,3,21,8 +41,3,19,9 +41,3,19,12 +41,3,19,15 +41,3,5,23 +41,3,10,25 +41,3,18,26 +41,3,22,26 +41,3,26,26 +43,3,15,19 +43,3,18,19 +43,3,21,19 +44,3,28,27 +44,3,32,29 +45,3,4,29 +15,4,31,5 +15,4,26,7 +15,4,29,10 +15,4,32,13 +16,4,2,8 +16,4,5,11 +16,4,10,16 +16,4,6,19 +16,4,13,19 +16,4,9,22 +16,4,16,22 +16,4,12,25 +17,4,28,11 +17,4,31,11 +17,4,26,13 +17,4,30,13 +17,4,14,18 +17,4,17,18 +17,4,20,18 +18,4,2,11 +18,4,1,13 +18,4,4,13 +18,4,18,30 +18,4,21,30 +18,4,24,30 +20,4,1,30 +20,4,4,30 +20,4,7,30 +21,4,18,30 +21,4,21,30 +21,4,24,30 +22,4,8,20 +22,4,11,20 +22,4,14,20 +24,4,22,4 +24,4,22,8 +24,4,22,12 +24,4,22,20 +24,4,20,23 +24,4,17,24 +25,4,25,13 +25,4,28,13 +25,4,31,13 +28,4,2,30 +28,4,7,31 +28,4,12,32 +29,4,6,33 +30,4,8,25 +30,4,11,25 +30,4,14,25 +31,4,14,6 +31,4,14,10 +31,4,14,14 +33,4,22,27 +33,4,18,28 +33,4,14,29 +35,4,12,32 +35,4,15,32 +35,4,18,32 +37,4,20,27 +37,4,23,27 +37,4,26,27 +38,4,30,22 +38,4,30,26 +38,4,29,30 +39,4,18,6 +39,4,21,6 +39,4,24,6 +29,5,4,4 +29,5,1,5 diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/bg/header.c b/sa1/data/maps/zone_1/act_1/tilemaps/bg/header.c new file mode 100644 index 0000000000..9c64b0fd9f --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_1_act_1_fg[]; +const u8 Tiles_zone_1_act_1_bg[] = INCBIN_U8("data/maps/zone_1/act_1/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_1_act_1_bg[] = INCBIN_U8("data/maps/zone_1/act_1/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_1_act_1_bg = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_1_act_1_bg, + .tilesSize = sizeof(Tiles_zone_1_act_1_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_1_act_1_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_1_act_1_bg, +}; diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/bg/palette.pal b/sa1/data/maps/zone_1/act_1/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..c69a4f53ee --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 205 255 +255 246 172 +246 213 131 +230 164 98 +213 106 82 +131 74 65 +90 32 24 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +172 82 16 +131 41 0 +205 90 255 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +16 74 8 +255 32 16 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +0 205 255 +255 255 255 +238 238 189 +205 205 156 +180 172 115 +148 148 98 +115 115 90 +180 180 197 +156 156 197 +123 131 164 +98 106 139 +74 82 123 +65 65 98 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +255 255 255 +255 230 213 +255 197 172 +255 156 148 +246 106 131 +230 65 106 +197 16 90 +255 172 139 +255 115 82 +230 32 0 +156 24 0 +213 246 123 +115 222 65 +57 172 57 +0 123 41 +0 205 255 +255 246 180 +246 213 164 +222 164 98 +180 123 65 +123 82 57 +74 41 49 +255 255 106 +189 255 49 +139 238 24 +98 197 24 +65 156 16 +32 115 16 +24 82 16 +246 106 131 +197 16 90 +0 205 255 +255 255 255 +230 230 222 +189 197 180 +148 164 139 +255 246 131 +238 205 106 +222 164 65 +189 123 49 +164 82 24 +115 49 16 +65 32 8 +0 0 0 +0 205 255 +172 164 115 +115 115 90 +0 205 255 +213 246 123 +148 246 49 +115 222 65 +0 189 32 +0 156 41 +0 123 41 +255 197 106 +246 148 57 +238 98 16 +255 255 0 +246 222 16 +238 180 32 +156 82 0 +0 205 255 +0 205 255 +0 205 255 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +197 139 32 +189 115 24 +172 82 0 +148 57 0 +213 148 82 +197 115 49 +164 82 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +0 205 255 +255 213 123 +246 189 90 +230 164 82 +205 131 65 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +230 180 106 +189 123 65 +172 90 41 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +0 205 255 +255 246 156 +246 197 98 +213 139 49 +180 98 0 +131 65 0 +74 32 0 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 205 +0 0 156 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +0 0 0 +255 255 255 +213 246 255 +172 230 255 +131 222 255 +74 205 255 +16 197 255 +8 189 255 +0 172 255 +0 156 255 +139 213 172 +115 180 131 +82 148 131 +255 246 189 +213 197 164 +148 156 123 +0 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +82 238 246 +74 222 246 +65 213 246 +49 205 238 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_1/act_1/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..6052c10e4b Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/bg/tiles.png b/sa1/data/maps/zone_1/act_1/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..68a4a33a3c Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/flags.coll b/sa1/data/maps/zone_1/act_1/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..8e8fbaa648 Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/header.c b/sa1/data/maps/zone_1/act_1/tilemaps/fg/header.c new file mode 100644 index 0000000000..3e79f110ec --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_1_act_1_fg[] = INCBIN_U16("data/maps/zone_1/act_1/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_1_act_1_fg[] = INCBIN_U8("data/maps/zone_1/act_1/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_1_act_1_fg[] = INCBIN_S8("data/maps/zone_1/act_1/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_1_act_1_fg[] = INCBIN_U8("data/maps/zone_1/act_1/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_1_act_1_fg[] = INCBIN_U16("data/maps/zone_1/act_1/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_1_act_1_fg0[] = INCBIN_MAP("data/maps/zone_1/act_1/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_1_act_1_fg1[] = INCBIN_MAP("data/maps/zone_1/act_1/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_1_act_1_fg[] = INCBIN_U16("data/maps/zone_1/act_1/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_1_act_1_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x1C0, + .animFrameCount = 4, + .animDelay = 10, + .tiles = Tileset_zone_1_act_1_fg, + .tilesSize = (u32)sizeof(Tileset_zone_1_act_1_fg) - (4 * 0x1C0), + .palette = Palette_zone_1_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_1_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_1_act_1_fg, + }, + .metatileMap = Map_zone_1_act_1_fg0, + .mapWidth = 136, + .mapHeight = 14, +}; + +ALIGNED(4) const struct MapHeader zone_1_act_1_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_1_act_1_fg, + .tilesSize = (u32)sizeof(Tileset_zone_1_act_1_fg) - (4 * 0x1C0), + .palette = Palette_zone_1_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_1_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_1_act_1_fg, + }, + .metatileMap = Map_zone_1_act_1_fg1, + .mapWidth = 136, + .mapHeight = 14, +}; + +const Collision CollHeader_zone_1_act_1_fg = { CollHeightMap_zone_1_act_1_fg, + CollTileRot_zone_1_act_1_fg, + Metatiles_zone_1_act_1_fg, + { Map_zone_1_act_1_fg0, Map_zone_1_act_1_fg1 }, + CollFlags_zone_1_act_1_fg, + 136, + 14, + 0x3300, + 0x0540 }; diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_1/act_1/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..d65394ac4d Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_1/act_1/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..6fb1f668ac Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_1/act_1/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..77d313b94f Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_1/act_1/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..93ba82ac8b --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {136,14} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_1/act_1/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..601a53d648 Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/palette.pal b/sa1/data/maps/zone_1/act_1/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..c69a4f53ee --- /dev/null +++ b/sa1/data/maps/zone_1/act_1/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 205 255 +255 246 172 +246 213 131 +230 164 98 +213 106 82 +131 74 65 +90 32 24 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +172 82 16 +131 41 0 +205 90 255 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +16 74 8 +255 32 16 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +0 205 255 +255 255 255 +238 238 189 +205 205 156 +180 172 115 +148 148 98 +115 115 90 +180 180 197 +156 156 197 +123 131 164 +98 106 139 +74 82 123 +65 65 98 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +255 255 255 +255 230 213 +255 197 172 +255 156 148 +246 106 131 +230 65 106 +197 16 90 +255 172 139 +255 115 82 +230 32 0 +156 24 0 +213 246 123 +115 222 65 +57 172 57 +0 123 41 +0 205 255 +255 246 180 +246 213 164 +222 164 98 +180 123 65 +123 82 57 +74 41 49 +255 255 106 +189 255 49 +139 238 24 +98 197 24 +65 156 16 +32 115 16 +24 82 16 +246 106 131 +197 16 90 +0 205 255 +255 255 255 +230 230 222 +189 197 180 +148 164 139 +255 246 131 +238 205 106 +222 164 65 +189 123 49 +164 82 24 +115 49 16 +65 32 8 +0 0 0 +0 205 255 +172 164 115 +115 115 90 +0 205 255 +213 246 123 +148 246 49 +115 222 65 +0 189 32 +0 156 41 +0 123 41 +255 197 106 +246 148 57 +238 98 16 +255 255 0 +246 222 16 +238 180 32 +156 82 0 +0 205 255 +0 205 255 +0 205 255 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +197 139 32 +189 115 24 +172 82 0 +148 57 0 +213 148 82 +197 115 49 +164 82 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +0 205 255 +255 213 123 +246 189 90 +230 164 82 +205 131 65 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +230 180 106 +189 123 65 +172 90 41 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +0 205 255 +255 246 156 +246 197 98 +213 139 49 +180 98 0 +131 65 0 +74 32 0 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +0 205 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 205 +0 0 156 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +0 0 0 +255 255 255 +213 246 255 +172 230 255 +131 222 255 +74 205 255 +16 197 255 +8 189 255 +0 172 255 +0 156 255 +139 213 172 +115 180 131 +82 148 131 +255 246 189 +213 197 164 +148 156 123 +0 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +82 238 246 +74 222 246 +65 213 246 +49 205 238 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_1/act_1/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..f90e84a4fa Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_1/act_1/tilemaps/fg/tileset.png b/sa1/data/maps/zone_1/act_1/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..dc69555911 Binary files /dev/null and b/sa1/data/maps/zone_1/act_1/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_1/act_2/entities/enemies.csv b/sa1/data/maps/zone_1/act_2/entities/enemies.csv new file mode 100644 index 0000000000..7dda4cabfc --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/entities/enemies.csv @@ -0,0 +1,26 @@ +Adv2,ENEMIES,45,6,,,,, +19,0,23,21,KIKI,0,0,2,8 +28,0,17,19,BUZZER,-6,0,13,2 +15,1,3,1,BUZZER,-5,0,11,2 +25,1,27,1,BUZZER,-5,0,15,2 +32,1,20,22,BUZZER,-4,0,16,2 +32,1,29,29,BUZZER,-7,0,10,2 +2,2,3,7,KIKI,0,0,2,5 +4,2,1,6,BUZZER,-9,0,18,2 +10,2,23,24,BUZZER,-4,0,16,2 +11,2,12,16,BUZZER,-7,0,19,2 +13,2,7,16,BUZZER,-9,0,24,2 +26,2,12,30,BUZZER,-7,0,13,2 +27,2,25,30,KEROKERO,-12,0,22,0 +30,2,7,1,KIKI,0,-4,2,7 +32,2,14,27,BUZZER,-9,0,16,2 +41,2,6,17,BOSS_1_INTRO,-38,-81,0,0 +42,2,27,30,EGG_HAMMER_TANK,-91,-94,0,0 +12,3,12,1,KEROKERO,-12,0,25,2 +14,3,27,23,KIKI,0,-2,2,8 +20,3,31,13,GAMIGAMI,-9,0,18,2 +23,3,18,4,BUZZER,-2,0,15,2 +24,3,29,23,GAMIGAMI,-11,0,22,0 +9,4,7,7,KIKI,0,-3,2,8 +11,4,12,7,RHINOTANK,-13,0,25,2 +16,4,31,13,BUZZER,-8,0,20,2 diff --git a/sa1/data/maps/zone_1/act_2/entities/interactables.csv b/sa1/data/maps/zone_1/act_2/entities/interactables.csv new file mode 100644 index 0000000000..150667b7c5 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/entities/interactables.csv @@ -0,0 +1,173 @@ +Adv2,INTERACTABLES,45,6,,,,, +15,0,31,24,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +15,0,31,26,TOGGLE_PLAYER_LAYER__BACK,0,0,2,26 +15,0,25,29,PLATFORM_THIN,1,0,2,10 +16,0,21,23,SPRING__SMALL_UPLEFT,0,-23,0,0 +16,0,1,26,TOGGLE_PLAYER_LAYER__FRONT,1,0,3,24 +16,0,13,26,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +16,0,16,26,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +29,0,24,25,PLATFORM_THIN__FALLING,72,-25,0,0 +29,0,12,28,GRIND_RAIL__START,0,0,6,2 +42,0,14,2,STAGE_GOAL,0,0,0,0 +42,0,14,17,STAGE_GOAL,0,0,0,0 +42,0,14,31,STAGE_GOAL,0,0,0,0 +5,1,3,28,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +5,1,3,30,TOGGLE_PLAYER_LAYER__BACK,0,0,2,25 +5,1,5,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,25 +5,1,17,30,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +5,1,20,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +6,1,0,29,SPRING__BIG_UPRIGHT,0,-61,0,0 +6,1,8,31,PLATFORM_THIN,0,0,2,16 +14,1,20,27,WALL_POLE__LEFT,44,-59,0,0 +15,1,29,15,BOOSTER__SLIGHT_LEFT,3,0,0,0 +15,1,21,16,CHECKPOINT,1,-48,0,0 +17,1,3,4,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +17,1,3,6,TOGGLE_PLAYER_LAYER__BACK,0,0,2,19 +17,1,5,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +17,1,17,6,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +17,1,20,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +18,1,0,5,SPRING__BIG_UPRIGHT,0,-37,0,0 +19,1,5,10,PLATFORM_THIN,0,0,2,8 +20,1,4,6,PLATFORM_THIN__FALLING,0,-38,0,0 +20,1,5,22,BOOSTER,123,0,0,0 +20,1,6,27,SPRING__DOWN,0,-59,0,0 +21,1,4,5,DECORATION,0,-37,0,0 +22,1,9,16,INCLINE_RAMP,1,0,4,4 +23,1,31,11,PLATFORM_THIN,0,-8,2,10 +23,1,5,27,PLATFORM_THIN,0,0,2,12 +24,1,13,12,BOUNCE_BLOCK,-13,-44,0,0 +24,1,19,16,TOGGLE_PLAYER_LAYER__BACK,1,0,5,2 +24,1,19,18,TOGGLE_PLAYER_LAYER__BACK,1,0,2,23 +24,1,21,18,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,24 +25,1,14,14,SPRING__UP,0,-46,0,0 +25,1,1,18,TOGGLE_PLAYER_LAYER__BACK,1,0,3,3 +25,1,4,18,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +25,1,23,28,TOGGLE_PLAYER_LAYER__BACK,1,0,5,2 +25,1,23,30,TOGGLE_PLAYER_LAYER__BACK,1,0,2,18 +25,1,25,30,TOGGLE_PLAYER_LAYER__FRONT,1,0,3,21 +26,1,20,29,SPRING__BIG_UPRIGHT,1,-61,0,0 +26,1,5,30,TOGGLE_PLAYER_LAYER__BACK,1,0,3,3 +26,1,8,30,TOGGLE_PLAYER_LAYER__FRONT,1,0,3,3 +27,1,20,16,BOOSTER,-116,0,0,0 +28,1,13,1,CHECKPOINT,6,-33,0,0 +29,1,2,12,WALL_POLE__RIGHT,94,-44,0,0 +30,1,12,24,GRIND_RAIL__END,0,0,13,3 +42,1,14,15,STAGE_GOAL,0,0,0,0 +42,1,14,31,STAGE_GOAL,0,0,0,0 +3,2,24,27,SPRING__RIGHT,1,-91,0,0 +13,2,10,30,PLATFORM_THIN,0,0,2,10 +14,2,2,0,SPRING__BIG_UPLEFT,0,-64,0,0 +14,2,26,22,PLATFORM_THIN,0,-7,2,7 +15,2,7,14,SPIKES__NORMAL_UP,25,-78,0,0 +15,2,10,15,SPRING__UP,1,-79,0,0 +19,2,16,18,WATERFALL,0,0,6,12 +22,2,13,19,TOGGLE_PLAYER_LAYER__BACK,0,0,3,16 +22,2,16,19,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,15 +23,2,18,2,BOOSTER,14,0,0,0 +26,2,25,17,CHECKPOINT,4,-81,0,0 +27,2,30,9,SHRUBBERY,0,-1,2,6 +27,2,24,10,SHRUBBERY,0,-1,2,6 +27,2,18,11,SHRUBBERY,0,-1,2,6 +27,2,6,12,SHRUBBERY,0,-1,2,5 +27,2,12,12,SHRUBBERY,0,-2,2,6 +27,2,0,13,SHRUBBERY,0,-1,2,6 +28,2,5,8,SHRUBBERY,0,0,2,6 +28,2,11,9,SHRUBBERY,0,0,2,6 +28,2,17,9,SHRUBBERY,0,0,2,8 +28,2,23,9,SHRUBBERY,0,0,2,9 +28,2,29,9,SHRUBBERY,0,0,2,9 +28,2,28,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,6,5 +29,2,3,9,SHRUBBERY,0,0,2,9 +29,2,9,9,SHRUBBERY,0,0,2,8 +29,2,15,9,SHRUBBERY,0,0,2,7 +29,2,27,9,SHRUBBERY,0,0,2,8 +29,2,21,10,SHRUBBERY,0,0,2,8 +30,2,7,9,SHRUBBERY,0,0,2,8 +30,2,13,9,SHRUBBERY,0,0,2,8 +30,2,19,9,SHRUBBERY,0,0,2,7 +30,2,31,9,SHRUBBERY,0,0,2,7 +30,2,1,10,SHRUBBERY,0,0,2,8 +30,2,25,10,SHRUBBERY,0,0,2,7 +30,2,4,16,SPRING__SMALL_UPLEFT,0,-80,0,0 +31,2,11,9,SHRUBBERY,0,0,2,7 +31,2,5,10,SHRUBBERY,0,0,2,7 +31,2,17,10,SHRUBBERY,0,0,2,7 +31,2,23,10,SHRUBBERY,0,0,2,8 +31,2,29,10,SHRUBBERY,0,0,2,7 +32,2,3,9,SHRUBBERY,0,0,2,9 +32,2,15,9,SHRUBBERY,0,0,2,8 +32,2,27,9,SHRUBBERY,0,0,2,9 +32,2,9,10,SHRUBBERY,0,0,2,7 +32,2,21,11,SHRUBBERY,0,0,2,7 +33,2,12,2,TOGGLE_PLAYER_LAYER__BACK,0,0,3,18 +33,2,1,11,SHRUBBERY,0,0,2,6 +33,2,7,11,SHRUBBERY,0,0,2,7 +33,2,9,20,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,19 +33,2,12,20,TOGGLE_PLAYER_LAYER__BACK,0,0,3,15 +34,2,21,29,CHECKPOINT,7,-93,0,0 +42,2,14,13,STAGE_GOAL,0,0,0,0 +42,2,14,29,STAGE_GOAL,1,0,0,0 +7,3,28,20,SPIKES__NORMAL_RIGHT,4,-116,0,0 +8,3,18,5,WATER_BRIDGE,-27,-3,52,13 +9,3,7,11,IA043,-39,-107,0,0 +9,3,6,16,SPIKES__NORMAL_LEFT,-38,-112,0,0 +9,3,6,20,SPIKES__NORMAL_LEFT,-38,-116,0,0 +10,3,22,7,DECORATION,0,-103,0,0 +10,3,1,10,SPRING__UP,1,-106,0,0 +10,3,9,10,PLATFORM_THIN__FALLING,-73,-106,0,0 +12,3,31,7,DECORATION,97,-103,0,0 +13,3,12,21,BOOSTER,84,0,0,0 +15,3,1,9,PLATFORM_CRUMBLING,1,-105,0,0 +15,3,0,24,WALL_POLE__RIGHT,32,-120,0,0 +16,3,14,13,MINILOOP_BASE,0,0,3,7 +16,3,17,13,MINILOOP_BASE,0,0,6,2 +16,3,17,15,MINILOOP_START_BOOST,0,0,2,6 +16,3,17,15,IA034,0,0,2,6 +16,3,22,16,MINILOOP_ENTRANCE,0,0,3,3 +16,3,0,18,SPIKES__NORMAL_UP,0,-114,0,0 +16,3,12,18,BOOSTER,-12,0,0,0 +16,3,22,23,MINILOOP_EXIT,-3,-4,11,7 +17,3,12,4,GRIND_RAIL__START,0,0,5,2 +17,3,31,6,CHECKPOINT,2,-102,0,0 +17,3,26,24,WALL_POLE__RIGHT,-58,-120,0,0 +19,3,16,2,WATERFALL,0,0,6,23 +20,3,0,0,SPIKES__HIDING_UP,-128,-96,0,0 +20,3,8,0,PLATFORM_CRUMBLING,0,-96,0,0 +20,3,18,18,SPIKES__HIDING_UP,110,-114,0,0 +21,3,12,16,SPRING__LEFT,0,-112,0,0 +22,3,2,10,SPRING__UP,0,-106,0,0 +22,3,13,11,TOGGLE_PLAYER_LAYER__BACK,0,0,3,15 +22,3,16,11,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +22,3,16,21,PLATFORM_CRUMBLING,1,-117,0,0 +22,3,20,21,BOOSTER,44,0,0,0 +28,3,30,0,CHECKPOINT,5,-96,0,0 +29,3,8,7,SPRING__RIGHT,1,-103,0,0 +30,3,0,7,SPRING__LEFT,1,-103,0,0 +9,4,27,22,SPIKES__HIDING_UP,-59,106,0,0 +10,4,14,17,MINILOOP_BASE,0,0,3,7 +10,4,17,17,MINILOOP_BASE,0,0,7,2 +10,4,17,19,IA034,0,0,2,5 +10,4,17,19,MINILOOP_START_BOOST,0,0,2,6 +10,4,22,20,MINILOOP_ENTRANCE,0,0,3,3 +10,4,12,22,BOOSTER,-76,0,0,0 +10,4,22,27,MINILOOP_EXIT,-3,-4,10,7 +11,4,27,10,SPIKES__HIDING_UP,-123,118,0,0 +13,4,16,15,WALL_POLE__RIGHT,80,113,0,0 +15,4,27,11,BOUNCE_BLOCK,5,117,0,0 +15,4,6,23,SPRING__RIGHT,0,105,0,0 +17,4,17,22,SPIKES__NORMAL_UP,-49,106,0,0 +17,4,23,22,TRAMPOLINE,-55,106,0,0 +17,4,14,26,WALL_POLE__RIGHT,-46,102,0,0 +18,4,29,17,GRIND_RAIL__END,0,0,11,3 +18,4,12,23,SPRING__RIGHT,2,105,0,0 +19,4,16,19,WATERFALL,0,-7,6,40 +20,4,3,16,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +20,4,3,18,TOGGLE_PLAYER_LAYER__BACK,0,0,2,20 +20,4,5,18,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +20,4,17,18,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +20,4,20,18,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +22,4,8,11,SPRING__UP,0,117,0,0 +22,4,10,25,BOOSTER,54,0,0,0 +24,4,4,2,SPRING__UP,0,126,0,0 +21,5,24,17,CHECKPOINT,3,79,0,0 +22,5,4,1,WALL_POLE__RIGHT,60,95,0,0 diff --git a/sa1/data/maps/zone_1/act_2/entities/itemboxes.csv b/sa1/data/maps/zone_1/act_2/entities/itemboxes.csv new file mode 100644 index 0000000000..1694ea80f4 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/entities/itemboxes.csv @@ -0,0 +1,16 @@ +Adv2,ITEMS,45,6, +31,0,0,27,ONE_UP +5,1,14,25,SHIELD_MAGNETIC +14,1,11,16,INVINCIBILITY +19,1,19,4,SHIELD_MAGNETIC +26,1,8,25,RINGS_RANDOM +3,2,20,20,RINGS_RANDOM +12,2,27,2,ONE_UP +21,2,3,26,SHIELD +11,3,29,0,RINGS_5 +15,3,7,9,RINGS_10 +22,3,10,0,RINGS_RANDOM +8,4,5,13,ONE_UP +14,4,20,4,RINGS_5 +15,4,3,16,INVINCIBILITY +20,4,11,13,SHIELD_MAGNETIC diff --git a/sa1/data/maps/zone_1/act_2/entities/rings.csv b/sa1/data/maps/zone_1/act_2/entities/rings.csv new file mode 100644 index 0000000000..d1973a28ea --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/entities/rings.csv @@ -0,0 +1,306 @@ +Adv2,RINGS,45,6 +15,0,18,5 +15,0,21,5 +15,0,16,8 +15,0,19,8 +15,0,22,8 +16,0,16,29 +16,0,10,31 +16,0,22,31 +17,0,18,29 +17,0,21,29 +17,0,24,29 +17,0,16,32 +17,0,19,32 +17,0,22,32 +17,0,25,32 +18,0,30,22 +18,0,28,25 +18,0,32,25 +19,0,1,22 +19,0,3,25 +23,0,26,32 +23,0,29,32 +23,0,32,32 +25,0,14,24 +25,0,12,26 +25,0,16,26 +25,0,14,28 +25,0,14,32 +28,0,32,20 +28,0,32,23 +28,0,32,26 +29,0,20,32 +30,0,3,20 +30,0,6,20 +30,0,9,20 +5,1,20,33 +7,1,14,27 +7,1,17,27 +7,1,20,27 +7,1,23,27 +7,1,12,30 +7,1,15,30 +7,1,18,30 +7,1,21,30 +7,1,24,30 +15,1,10,20 +15,1,10,24 +15,1,10,28 +16,1,8,5 +16,1,24,5 +17,1,20,9 +17,1,14,11 +17,1,26,11 +17,1,12,17 +17,1,28,17 +18,1,10,32 +20,1,30,4 +20,1,30,8 +20,1,30,12 +20,1,13,18 +20,1,16,18 +20,1,19,18 +21,1,24,6 +21,1,28,10 +21,1,31,16 +23,1,25,3 +23,1,28,3 +23,1,31,3 +24,1,2,3 +24,1,30,23 +24,1,28,29 +25,1,4,21 +25,1,10,23 +25,1,12,29 +26,1,8,33 +27,1,32,13 +27,1,28,14 +28,1,4,12 +29,1,23,3 +29,1,26,6 +29,1,29,9 +29,1,32,12 +29,1,8,24 +29,1,11,24 +29,1,14,24 +29,1,6,26 +29,1,9,26 +29,1,12,26 +30,1,3,15 +30,1,6,18 +31,1,11,7 +31,1,14,7 +31,1,17,7 +31,1,9,10 +31,1,12,10 +31,1,15,10 +31,1,18,10 +31,1,17,22 +31,1,20,22 +31,1,23,22 +1,2,32,19 +1,2,10,22 +1,2,13,22 +1,2,16,22 +2,2,23,15 +2,2,26,15 +2,2,29,15 +2,2,3,19 +2,2,6,19 +4,2,30,18 +4,2,26,19 +4,2,22,20 +5,2,14,3 +5,2,26,3 +5,2,12,9 +5,2,28,9 +6,2,10,24 +6,2,16,27 +6,2,22,30 +6,2,28,33 +9,2,32,13 +9,2,32,16 +9,2,30,18 +9,2,32,19 +9,2,32,22 +10,2,2,18 +11,2,14,33 +13,2,28,25 +13,2,24,26 +13,2,20,27 +15,2,2,29 +15,2,5,29 +15,2,8,29 +18,2,16,3 +18,2,22,6 +21,2,29,16 +21,2,30,27 +22,2,30,8 +22,2,2,9 +22,2,1,14 +22,2,31,15 +22,2,1,27 +22,2,4,27 +23,2,31,4 +23,2,12,7 +23,2,11,15 +23,2,5,17 +24,2,3,5 +24,2,7,6 +25,2,32,9 +26,2,2,3 +26,2,14,3 +26,2,16,9 +27,2,7,32 +28,2,4,11 +28,2,8,12 +28,2,12,13 +28,2,12,28 +28,2,15,28 +28,2,18,28 +29,2,11,13 +29,2,7,14 +29,2,3,15 +29,2,17,29 +29,2,20,29 +29,2,23,29 +30,2,18,12 +30,2,15,13 +30,2,12,14 +30,2,32,29 +31,2,19,11 +31,2,22,11 +31,2,25,11 +31,2,3,29 +31,2,6,29 +31,2,29,31 +31,2,25,32 +32,2,18,10 +32,2,22,11 +32,2,27,12 +32,2,31,13 +32,2,1,32 +33,2,1,25 +33,2,4,25 +33,2,7,25 +34,2,4,23 +34,2,7,23 +34,2,10,23 +35,2,6,25 +35,2,10,25 +35,2,2,26 +35,2,14,26 +8,3,13,5 +8,3,20,5 +8,3,26,6 +8,3,7,7 +8,3,32,8 +8,3,2,9 +11,3,10,2 +11,3,6,3 +13,3,6,10 +13,3,6,15 +13,3,8,19 +13,3,12,20 +13,3,16,20 +13,3,26,31 +13,3,29,31 +13,3,32,31 +13,3,14,33 +14,3,30,15 +14,3,30,18 +14,3,30,21 +16,3,20,4 +16,3,20,7 +16,3,20,10 +17,3,24,17 +17,3,24,21 +17,3,24,25 +18,3,24,2 +18,3,28,2 +18,3,32,2 +18,3,10,30 +18,3,13,33 +19,3,28,14 +19,3,31,14 +20,3,2,14 +21,3,12,4 +21,3,15,4 +21,3,18,4 +22,3,8,21 +22,3,11,21 +22,3,14,21 +23,3,10,2 +23,3,13,2 +23,3,16,2 +24,3,4,14 +24,3,26,17 +24,3,29,17 +24,3,32,17 +24,3,4,18 +24,3,4,22 +25,3,32,15 +25,3,29,19 +25,3,25,20 +26,3,31,2 +26,3,7,10 +26,3,3,11 +27,3,3,2 +8,4,21,15 +8,4,25,16 +8,4,29,17 +10,4,20,8 +10,4,20,11 +10,4,20,14 +11,4,25,4 +11,4,28,4 +11,4,31,4 +12,4,14,12 +12,4,17,12 +12,4,20,12 +12,4,19,15 +12,4,22,15 +13,4,14,5 +13,4,14,9 +16,4,7,9 +16,4,10,9 +16,4,13,9 +16,4,12,29 +16,4,17,30 +16,4,22,31 +17,4,24,3 +17,4,24,7 +17,4,24,11 +17,4,12,17 +17,4,12,20 +17,4,12,23 +18,4,16,4 +18,4,19,7 +18,4,22,10 +18,4,25,13 +18,4,28,16 +20,4,17,9 +20,4,20,9 +20,4,23,9 +20,4,26,9 +20,4,15,12 +20,4,18,12 +20,4,21,12 +20,4,24,12 +20,4,27,12 +20,4,20,21 +20,4,14,23 +20,4,26,23 +20,4,12,29 +20,4,28,29 +22,4,20,10 +22,4,23,13 +22,4,24,17 +22,4,2,25 +22,4,2,28 +22,4,2,31 +21,5,28,16 +21,5,32,16 +22,5,2,11 +22,5,2,14 diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/bg/header.c b/sa1/data/maps/zone_1/act_2/tilemaps/bg/header.c new file mode 100644 index 0000000000..306133cbb5 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_1_act_2_fg[]; +const u8 Tiles_zone_1_act_2_bg[] = INCBIN_U8("data/maps/zone_1/act_2/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_1_act_2_bg[] = INCBIN_U8("data/maps/zone_1/act_2/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_1_act_2_bg = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_1_act_2_bg, + .tilesSize = sizeof(Tiles_zone_1_act_2_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_1_act_2_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_1_act_2_bg, +}; diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/bg/palette.pal b/sa1/data/maps/zone_1/act_2/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..5bbf52a1d6 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +8 205 255 +255 246 172 +246 213 131 +230 164 98 +213 106 82 +255 32 16 +255 32 16 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +24 57 41 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +49 82 49 +16 32 24 +255 238 82 +246 189 82 +255 139 189 +255 57 139 +180 24 98 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +0 205 255 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +197 139 32 +189 115 24 +172 82 0 +148 57 0 +213 148 82 +197 115 49 +164 82 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +0 205 255 +255 213 123 +246 189 90 +230 164 82 +205 131 65 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +230 180 106 +189 123 65 +172 90 41 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +74 131 74 +49 82 49 +49 82 49 +8 32 16 +197 139 32 +189 115 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +255 32 16 +8 205 255 +255 255 255 +255 172 139 +255 115 82 +230 32 0 +156 24 0 +197 222 238 +180 156 164 +180 164 148 +156 139 123 +131 115 98 +255 230 164 +246 123 65 +213 57 0 +164 32 0 +82 16 0 +0 205 255 +255 246 180 +246 213 164 +222 164 98 +180 123 65 +123 82 57 +74 41 49 +255 255 106 +189 255 49 +139 238 24 +98 197 24 +65 156 16 +32 115 16 +16 74 8 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +255 230 213 +255 197 172 +255 156 148 +230 90 123 +197 16 90 +255 197 106 +246 148 57 +238 98 16 +255 255 0 +213 246 123 +115 222 65 +57 189 49 +0 156 41 +0 123 41 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +8 205 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 205 +0 0 156 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +8 205 255 +57 131 156 +90 148 172 +115 164 189 +139 180 205 +172 205 213 +197 222 230 +222 238 246 +255 255 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +0 0 0 +255 255 255 +213 246 255 +172 230 255 +131 222 255 +74 205 255 +16 197 255 +8 189 255 +0 172 255 +0 156 255 +139 213 172 +115 180 131 +82 148 131 +255 246 189 +213 197 164 +148 156 123 +0 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +82 238 246 +74 222 246 +65 213 246 +49 205 238 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_1/act_2/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..6052c10e4b Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/bg/tiles.png b/sa1/data/maps/zone_1/act_2/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..68a4a33a3c Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/flags.coll b/sa1/data/maps/zone_1/act_2/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..16edf10cd8 Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/header.c b/sa1/data/maps/zone_1/act_2/tilemaps/fg/header.c new file mode 100644 index 0000000000..c27754a133 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_1_act_2_fg[] = INCBIN_U16("data/maps/zone_1/act_2/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_1_act_2_fg[] = INCBIN_U8("data/maps/zone_1/act_2/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_1_act_2_fg[] = INCBIN_S8("data/maps/zone_1/act_2/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_1_act_2_fg[] = INCBIN_U8("data/maps/zone_1/act_2/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_1_act_2_fg[] = INCBIN_U16("data/maps/zone_1/act_2/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_1_act_2_fg0[] = INCBIN_MAP("data/maps/zone_1/act_2/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_1_act_2_fg1[] = INCBIN_MAP("data/maps/zone_1/act_2/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_1_act_2_fg[] = INCBIN_U16("data/maps/zone_1/act_2/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_1_act_2_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x1C0, + .animFrameCount = 4, + .animDelay = 10, + .tiles = Tileset_zone_1_act_2_fg, + .tilesSize = (u32)sizeof(Tileset_zone_1_act_2_fg) - (4 * 0x1C0), + .palette = Palette_zone_1_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_1_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_1_act_2_fg, + }, + .metatileMap = Map_zone_1_act_2_fg0, + .mapWidth = 120, + .mapHeight = 15, +}; + +ALIGNED(4) const struct MapHeader zone_1_act_2_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_1_act_2_fg, + .tilesSize = (u32)sizeof(Tileset_zone_1_act_2_fg) - (4 * 0x1C0), + .palette = Palette_zone_1_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_1_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_1_act_2_fg, + }, + .metatileMap = Map_zone_1_act_2_fg1, + .mapWidth = 120, + .mapHeight = 15, +}; + +const Collision CollHeader_zone_1_act_2_fg = { CollHeightMap_zone_1_act_2_fg, + CollTileRot_zone_1_act_2_fg, + Metatiles_zone_1_act_2_fg, + { Map_zone_1_act_2_fg0, Map_zone_1_act_2_fg1 }, + CollFlags_zone_1_act_2_fg, + 120, + 15, + 0x2D00, + 0x05A0 }; diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_1/act_2/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..82a532e590 Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_1/act_2/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..c53e322e26 Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_1/act_2/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..48b44fc9a9 Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_1/act_2/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..cd7cb4c616 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {120,15} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_1/act_2/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..50ce092b59 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/tilemaps/fg/metatiles.tilemap2 @@ -0,0 +1,12 @@ +ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ]b^b_bÈÈÈÈÈÈÈÈÈ}b~bbÈÈÈÈÈÈÈÈÈbžb_bÈÈÈÈÈÈÈÈȽb¾bbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈ]b^b_bÈÈÈÈÈÈÈÈÈ}b~bbÈÈÈÈÈÈÈÈÈbžb_bÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈȲà²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à³à´àµàÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈË3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0TUV|Ë3#0Ë3#0Ë3#0Í3Î3ÈÈÈwx|#0Ë3#0Ë3%0&0ÈÈÈÈÈ™š#0Ë3#0Í3Î3ÈÈÈÈÈȺ»#0Ë3%0&0ÈÈÈÈÈÈÈz|#0Í3Î3ÈÈÈÈÈÈÈÈ{Ë3%0&0ÈÈÈÈÈÈÈÈ›|Í3Î3ÈÈÈÈÈÈÈÈÈœ%0&0ÈÈÈÈÈÈÈÈȼÍ3Î3ÈÈÈÈÈÈÈÈÈ Ü%0&0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ'`(`(`(`(`(`ÏcÐcÈÈÈÈ-`ÈÈÈÈÈÈ.`ÐcÈÈÈ`ÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.`ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ`ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈLáMáÈÈÈÈÈ5á6áµèlámá²à²àÈÈLáMá7áWá²à²à²à²à²à²àÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ@ A B @ A B @ A B @ A B ` a b ` a b ` a b ` a b € ‚ € ‚ € ‚ € ‚ È È È È È È È È ÈÜ Í3Î3È È È È È È È È È ¼ %0&0È È È È È È È È È œ Í3Î3È È È È È È È È › | %0&0È È È È È È È È { #0Í3Î3È È È È È È È z | Ë3%0&0È È È È È È º » Ë3#0Í3Î3È È È È È ™ š Ë3#0Ë3%0=4È È È w x | Ë3#0Ë3#0=44T U V | #0Ë3#0Ë3#0Ë3?4ÈË3#0Ë3#0Ë3#0Ë3#0Í3%0>4È#0Ë3#0Ë3#0Ë3#0Í3%0=44ÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.`ÈÈÈÈÈÈÈÈÈÈÈÈÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3%0=44ÈÈ#0Ë3#0Ë3#0Ë3#0Í3?4ÈÈÈË3#0Ë3#0Ë3#0Ë3%0>4ÈÈÈ#0Ë3#0Ë3#0Ë3%0=44ÈÈÈË3#0Ë3#0Ë3#0Í3?4ÈÈÈÈ#0Ë3#0Ë3#0Í3=44ÈÈÈÈË3#0Ë3#0Ë3%0>4ÈÈÈÈÈ#0Ë3#0Ë3%0Í3?4ÈÈÈÈÈË3#0Ë3#0Í3%0>4ÈÈÈÈÈ#0Ë3#0Ë3%0Í3>4ÈÈÈÈÈË3#0Ë3#0Í3=44ÈÈÈÈÈ#0Ë3#0Ë3%0>4ÈÈÈÈÈÈXåÈÈÈÈÈÈÈÈÈÈȲàYåXåÈÈÈÈÈÈÈÈȲà²à²àYåXåÈÈÈÈÈÈȲà²à²à²à²àYåXåÈÈÈÈȲà²à²à²à²à²à²àYåXåÈÈȲà²à²à²à²à²à²à²à²àYåXåȲà²à²à²à²à²à²à²à²à²à²àYå²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²à²àÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈD$C$ÈÈÈÈÈÈÈÈÈÈd$c$D$C$ÈÈÈÈÈÈÈÈ„$ƒ$d$c$G$F$E$ÈÈÈÈȤ$£$„$ƒ$g$f$e$A B @ A B Ë3#0¤$£$‡$†$…$a b ` a b #0Ë3#0Ë3§$¦$¥$ ‚ € ‚ ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈd`ÈÈÈÈÈÈÈÈÈd.dÈÓcÔcÈcÈÈÈÈgÔgÓg.dÈÈ+`,`(`(`(`(`(`,d+dÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈ€££‚£ƒ£„£…£ÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ»$S'ÈÈÈÈÈÈÈÈÈÈ$‘'ÈÈÈÈÈÈÈÈÈ»$Z$| ÈÈÈÈÈÈÈÈÈZ$œ | ÈÈÈÈÈÈÈÈÈ$› › ÈÈÈÈÈÈÈÈÈ~$}${ ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈt'Èt'“'S'ÈÈÈÈt'“'S'”'S'”'‘''ÈÈt'“'”'‘''#‘#{ '›$“'S'”'‘''#‘#œ$#œ$›$|$‘''›$'{ '{$œ$›$|$œ$›$'|$'›$œ$| |${$|${ |${$1"Q"x y Q"Q"R"2"1"2"1"2"Q"y R*Q*R*y 1"2"1"2"1"2"1"2"1"2"1"Q*Q"R"Q"R"Q"R"2"1"2"1"2"R&y Q"x y Q"R"ÈÈÈÈÈÈÈÈÈÈÈÈÈt'“'S#P#Q#R#S#P#“#t#ÈP'”'p#q#p#q#p#q#p#q#”#P##‘##‘##‘##‘##‘##‘#‘#›$‘#œ ‘#› #œ$›$#‘#|$| { | { ›${ | {$| { |${ › œ | › œ { | {$| › œ { { | {$| { | |$œ › œ | |$2&1&2&1&2&R&Q&Q&y$x$Q&1&2&1&2&1&2&1&y$R.Q.R.y$Q&R&Q&R&Q&R&Q&Q.1&2&1&2&1&R&Q&y$x$Q&y$R"2&1&2&1&2&ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈS#“#t#Èt#ÈÈÈÈÈÈÈ#‘#”#S#”#S#“#t#ÈÈÈÈ› #{$‘''#‘#”#“#t#ÈÈ| › œ 'œ ‘''#‘#”#S#“#› œ | › œ { #{$#› #‘#{ | {$| { | |$œ › #| #2&1&2&1&2&R&Q&Q&y$x$Q&1&2&1&2&1&2&1&y$R.Q.R.y$Q&R&Q&R&Q&R&Q&Q.1&2&1&2&1&R&Q&y$x$Q&y$R"2&1&2&1&2&ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈS#» ÈÈÈÈÈÈÈÈÈÈ‘# ÈÈÈÈÈÈÈÈÈÈ|$Z ÈÈÈÈÈÈÈÈÈÈ} ~ ÈÈÈÈÈÈÈÈÈÈ » ÈÈÈÈÈÈÈÈÈÈœ$ ÈÈÈÈÈÈÈÈÈÈ€££‚£ƒ£„£…£ÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈ€££‚£ƒ£„£…£ÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈ€££‚£ƒ£„£…£ÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈ€££‚£ƒ£„£…£ÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈ€££‚£ƒ£„£…£ÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈ€££‚£ƒ£„£…£ÈÈÈÈÈÈ`£a£b£c£d£e£ÈÈÈÈÈÈË3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Í3%0Í3%0Í3%0Í3%0Í3%0Í3%0%0Í3%0Í3%0Í3%0Í3%0Í3%0Í3Í3%0Í3%0=44444=0Í3%004044ÈÈÈÈ044ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈË3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ì3Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Í3%0Í3%0Í3%0Í3%0Í3%0=44%0Í3%0Í3%0Í3%0=4444ÈÍ3%0Í3%0Í3%0=44ÈÈÈÈ4444444ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0à0àÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ]b^b_bÈÈÈÈÈÈÈÈÈ}b~bbÈÈÈÈÈÈÈÈÈbžb_bÈÈÈÈÈÈÈÈȽb¾bbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbÍbÎbõ`ö`/aþaõ`ö`/aþa]b^bÏbÐbaaOaÿaaaOaÿa}b~bÑbÒb?b>b}a>b?b>b?b>bbžbÓbÔb^a_a½a¾a¿a]a^a_a¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈüaö`/aþaõ`ö`/aþaõ`ö`/aþaýaaOaÿaaaOaÿaaaOaÿa=b>b?b>b?b>b}a>b?b>b?b>b½a¾a¿a]a^a_a½a¾a¿a]a^a_aJA B @ A B @ A B @ A Kja b ` a b ` a b ` a kŠ ‚ € ‚ € ‚ € ‹!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈJA B @ A KÈÈÈÈÈÈja b ` a kÈÈÈÈÈÈŠ ‚ € ‹ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÈE F G A A ÈÈÈÈÈC D e f g a a ÈÈE F G c d … † ‡ A A e f g ƒ „ ¥ ¦ § #0#0a a … † ‡ £ ¤ #0Ë3#0Ë3#0 ¥ ¦ § Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0€1È0É01Ë3#0Ë3Ë3#0Ë3#0Ë3Ç0@1A1"A#0Ë3#0#0Ë3#0Ë3#0ç0`1î1bAË3#0Ë3Ë3#0Ë3#0Ë3 1è@é@¡1#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3JA B @ A B @ A B @ A Kja b ` a b ` a b ` a kŠ ‚ € ‚ € ‚ € ‹#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ@ A B @ A B @ A B @ A B ` a b ` a b ` a b ` a b € ‚ € ‚ € ‚ € ‚ #0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3A$A$G$F$E$ÈÈÈÈÈÈÈa$a$g$f$e$D$C$ÈÈÈÈÈ$$‡$†$…$d$c$G$F$E$ÈÈ#0Ë3§$¦$¥$„$ƒ$g$f$e$A$A$Ë3#0Ë3#0Ë3¤$£$‡$†$…$a$a$#0Ë3#0Ë3#0Ë3#0§$¦$¥$$$Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈJA B @ A B @ A B @ A Kja b ` a b ` a b ` a kŠ ‚ € ‚ € ‚ € ‹Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Aé@è@1Ë3#0Ë3#0#0Ë3#0Ë3bAÎ1î1ç0#0Ë3#0Ë3Ë3#0Ë3#0BAî1Î1Ç0Ë3#0Ë3#0#0Ë3#0Ë3 AÉ0È0!1#0Ë3#0Ë3]b^bÕbÖb~aaÝaÞaßaÝa~aa}b~b×bØbžaŸabbbažaŸabžb_bÈÈÈÈÈÈÈÈȽb¾bbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈÝbÞbbÈÈÈÈÈÈÈÈÈ]b^b_bÈÈÈÈÈÈÈÈÈ}b~bbÈÈÈÈÈÈÈÈÈbžb_bÈÈÈÈÈÈÈÈÈÝaÞaßaÝa~aaÝaÞaßaÝa~aabbbažaŸabbbažaŸaÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈJA B @ A B @ A B @ A Kja b ` a b ` a b ` a kŠ ‚ € ‚ € ‚ € ‹ÈÈÈÈÈÈÈÅ Æ A A KÈÈÈÈÈÈä å æ a a kÈÈÈÈÈÈ!!! ‹ÈÈÈÈÈÈ$!%!#0Ë3%0&0ÈÈÈÈÈC!D!E!Ë3#0Í3Î3ÈÈÈÈÈc!d!e!#0Ë3%0&0ÈÈÈÈ‚!ƒ!„!#0Ë3#0Í3Î3ÈÈÈÈ¢!£!¤!Ë3#0Ë3%0&0ÈÈÀ!Á!Â!Ã!Ë3#0Ë3#0Í3Î3J"ã à!á!â!ã!#0Ë3#0Ë3%0&0j"b ""Ë3#0Ë3#0Ë3#0Í3Î3Š"‚ "!"#0Ë3#0Ë3#0Ë3%0&0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈJA B @ A KÈÈÈÈÈÈja b ` a kÈÈÈÈÈÈŠ ‚ € ‹ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈB$A$G$F$E$ÈÈÈÈÈÈÈb$a$g$f$e$D$C$ÈÈÈÈÈ‚$$‡$†$…$d$c$G$F$E$ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈE F G A KÈÈÈÈÈC D e f g a kÈÈE F G c d … † ‡ ‹@ A B @ A B ÉCÊCË3#0Ë3#0` a b ` a b !@"@#0Ë3#0Ë3€ ‚ € ‚ ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0€1È0É01Ë3!@"@#0Ë3#0Ë3Ë3Ç0@1A1"A#0ÉCÊCË3#0Ë3#0#0ç0`1î1bAË3!@"@#0Ë3#0Ë3Ë3 1è@é@¡1#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0&!ÈÈÈÈÈÈÈÈÈÈÈF!ÈÈÈÈÈÈÈÈÈÈÈf!g!ÈÈÈÈÈÈÈÈÈȆ!‡!ÈÈÈÈÈÈÈÈÈȦ!§!¨!ÈÈÈÈÈÈÈÈÈÆ!Ç!È!ÈÈÈÈÈÈÈÈÈæ!ç!è!!!ÈÈÈÈÈÈÈÌ3""'!(!)!ÈÈÈÈÈÈ$0Ì3"G!H!I!j!k!ÈÈÈÈÌ3$0Ì3$0h!i!Š!‹!Œ!@ A K$0Ì3$0Ì3$0‰!` a b ` a kÌ3$0Ì3$0Ì3$0Ì3 ‚ € ‹ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0JA B @ A B !@"@#0Ë3#0Ë3ja b ` a b ÉCÊCË3#0Ë3#0Š ‚ € ‚ !@"@#0Ë3#0Ë3Ë3#0§$¦$¥$„$ƒ$g$f$e$A$@$#0Ë3#0Ë3Ë3¤$£$‡$†$…$a$`$Ë3#0Ë3#0Ë3#0Ë3§$¦$¥$$€$#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3JA e f g ƒ „ ¥ ¦ § Ë3#0ja … † ‡ £ ¤ Ë3#0Ë3#0Ë3Š ¥ ¦ § #0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3È.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.``ÈÈÈÈÈÈÈÈÈÈÈ.`ÑcÒcÈÈÈÈÈÈÈÈÈÈ)`*`(`(`(`(`ÕcÈÈÈÈÈÈÈÈÈÈÈ-`ÈÈÈÈÈÈÈÈÈÈÈ`ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÅ##$#¢ ###¡åÁÂÀÁÂÀÁÂÀÁ&áâàáâàáâàá'ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ€€ÈÈÈÈÈÈÈ € +€ €€€ÈÅ##$#¢ÃÃÃÃÃåÁÂÀÁÂÀÁÂÀÁ&áâàáâàáâàá'ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈyszs{s|s}s~sÈÈÈÈȘs™sšs›sœssžsŸsÈÈÈȸs¹sºs»s¼s½s¾s¿sÈÈÈÈÈNsOsYsZs[s\sÈsÈÈÈÈÈ]sÈÈ^sÈ_sÈÈÈÈÈÈÈÈÈusÈÈÈÈÈÈÈÈÈÈÈ•sÈÈÈÈÈÈÈÈÈÈȵsÈÈÈÈÈÈÈÈÈÈÈ@rÈÈÈÈÈÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0|VUT!@"@#0Ë3#0Ë3|xwÈÈÈÉCÊCË3#0#4š™ÈÈÈÈÈ!@"@#0Ë3»ºÈÈÈÈÈÈÉCÊCË3|zÈÈÈÈÈÈÈ!@"@#0{ÈÈÈÈÈÈÈÈÉCÊC|›ÈÈÈÈÈÈÈÈ!@"@œÈÈÈÈÈÈÈÈÈÉCÊC¼ÈÈÈÈÈÈÈÈÈ!@"@ÜÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ`rÈÈÈÈÈÈÈÈÈÈÈvsÈÈÈÈÈÈÈÈÈÈÈ–sÈÈÈÈÈÈÈÈÈÈȶsÈÈÈÈÈÈÈÈÈÈÈrÈÈÈÈÈÈÈÈÈÈPr.rÈÈÈÈÈÈÈÈÈÈOrwsÈÈÈÈÈÈÈÈÈÈÈ—sÈÈÈÈÈÈÈÈÈÈÈ·sÈÈÈÈÈÈÈÈÈÈOrwsÈÈÈÈÈÈÈÈÈÈPr—sÈÈÈÈÈÈÈÈÈÈÈ·sÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ€€ÈÈÈÈÈÈÈÈÈÈ€€ÈÈÈÈÈÈÈÈÈÈ€ÈÈÈÈÈÈÈÅ###âÈÈÈÈÈÈåÁÂÀÁÂÈÈÈÈÈÈáâàáâÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ€€ÈÈÈÈÈÈÈÈ € €€€ÈÈÈÈÈÈÈÈÃÃÃÃ#ÈÈÈÈÈÈÀÁÂÀÁ&ÈÈÈÈÈÈàáâàá'ÈÈÈÈÈÈÅ##$#¢ ###¡¢åÁÂÀÁÂÀÁÂÀÁÂáâàáâàáâàáâ!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3TSRQÈÈÈ€€ÈÈÈtsrqNOP€€ÈÈÈ”“’‘nopPTSRQ#0Ë3#0±ŽÀtsrqË3#0Ë3#0Ë3¯°à”“’‘#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0±Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ ##$#¢ ###¡ÀÁÂÀÁÂÀÁÂÀÁ&àáâàáâàáâàá'Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3Aé@è@1#0Ë3#0Í3Î3#0Ë3#0bAÎ1î1ç0Ë3#0Ë3%0&0Ë3#0Ë3BAî1Î1Ç0#0Ë3#0Í3Î3#0Ë3#0 AÉ0È0!1Ë3#0Ë3%0&0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈQRSTÈÈÈÈPONPqrstQRSTponÀ‘’“”ÉCÊCÜ ÈÈÈÈÈÈÈÈÈ!@"@¼ ÈÈÈÈÈÈÈÈÈÉCÊCœ ÈÈÈÈÈÈÈÈÈ!@"@| › ÈÈÈÈÈÈÈÈÉCÊC#4{ ÈÈÈÈÈÈÈÈ!@"@#0Ë3z ÈÈÈÈÈÈÈÉCÊCË3#0» º ÈÈÈÈÈÈ!@"@#0Ë3#0š ™ ÈÈÈÈÈÉCÊCË3#0Ë3#0| x w ÈÈÈ!@"@#0Ë3#0Ë3#0Ë3| V U T ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈTSRQÈÈÈÈÈÈÈÈtsrqoUVWÈÈÈÈ”“’‘uvwTSRQÈÈÈÈÈÈÅ###¡¢ÈÈÈÈÈÈåÁÂÀÁÂÈÈÈÈÈÈáâàáâÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈ0=0Ð1ð1ï1Ï1ÈÈÈÈÈÈÈ044=0Ð1ÈÈÈÈÈÈÈÈÈÈ0=0ÈÈÈÈÈÈÈÈÈÈÈ0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ ##$#¢ ###¡ÀÁÂÀÁÂÀÁÂÀÁ&àáâàáâàáâàá'#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0ï1î1Î1î1Î1î1Î1î1Ë3#0Í3Î3ð1ï1Ï1ï1Ï1ï1Ï1ï1Ð1ð1=44Ð1ð1ï1Ï1ï1Ï1ï1Ï1ð1Ð1?4È=0Ð1ð1Ð1ð1Ð1ð1Ð1Ð1=44È0444=0ð1Ð1=444ÈÈÈÈÈÈ0444ÈÈÈÈÅ##$#¢ ###¡åÁÂÀÁÂÀÁÂÀÁ&áâàáâàáâàá'!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0 # TSRQÈÈÈÈÈÀÁÂtsrqNOPÈÈàá┓’‘nopJI#0Ë3#0Ë3#0Ë3±ŽjiË3#0Ë3#0Ë3#0Ë3#0¯°Š‰#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0©Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈHÈÈÈÈÈÈÈÈÈÈÈhHÈÈÈÈÈÈÈÈÈȈhìÈÈÈÈÈÈÈÈȨˆ ÈÈÈÈÈÈÈÈÈ#0¨,ìÈÈÈÈÈÈÈÈË3#0L ÈÈÈÈÈÈÈÈ#0Ë3l,ìÈÈÈÈÈÈÈË3#0Ë3L ÈÈÈÈÈÈÈ#0Ë3#0l,ìÈÈÈÈÈÈÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈ_!@"@#0Ë3#0Ë3ÈÈÈÈÈÉCÊC€1È0É01ÈÈÈÈÈŸ!@"@Ç0@1A1"AÈÈÈȾ¿ÉCÊCç0`1î1bAÈÈÈÝÞß!@"@ 1è@é@¡1úûüýþÿÉCÊCË3#0Ë3#0!@"@#0Ë3#0Ë3:;<=>Ë3ÉCÊCË3#0Ë3#0Z[\#0Ë3#0!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3Ë3#0Ë3#0Í3Î3ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0ÈÈÈÈÈÈË3#0Ë3#0Í3Î3ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0ÈÈÈÈÈÈË3#0Ë3#0Í3Î3ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0ÈÈÈÈÈÈË3#0Ë3#0Í3Î3ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0ÈÈÈÈÈÈË3#0Ë3#0Í3Î3ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0ÈÈÈÈÈÈË3#0Ë3#0Í3Î3ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0ÈÈÈÈÈÈ0=0Ð1ð1ï1Ï1Î1î1Î1î1Î1î1È044=0Ð1ð1ï1Ï1ï1Ï1ï1ÈÈÈÈ0=0Ð1ð1ï1Ï1ï1Ï1ÈÈÈÈÈ0=0Ð1ð1Ð1ð1Ð1ÈÈÈÈÈÈ0444=0ð1ÈÈÈÈÈÈÈÈÈÈ04ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÎ1î1Î1î1Î1î1Î1î1Î1î1Î1î1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ð1Ð1ð1Ð1=4444=0Ð1ð1Ð1Ð1=4444ÈÈÈ044=044ÈÈÈÈÈÈÈÈÈ0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÎ1î1Î1î1Î1Ï1ï1ð1Ð1ð1=44Ï1ï1Ï1ï1ð1Ð1=44444Èï1ð1Ð1=4444ÈÈÈÈÈð1=444ÈÈÈÈÈÈÈÈ=44ÈÈÈÈÈÈÈÈÈÈ4ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈqrstŽà±#0Ë3#0‘’“”°¯#0Ë3#0Ë3#0Ë3±#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3Aé@è@1#0Ë3#0Ë3Ë3#0Ë3#0bAÎ1î1ç0Ë3#0Ë3#0#0Ë3#0Ë3BAî1Î1Ç0#0Ë3#0Ë3Ë3#0Ë3#0 AÉ0È0!1Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3©Š‰jH#0Ë3#0Ë3#0Ë3#0Ë3#0©ŠIË3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3i#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0€1È0É01Ë3#0Í3Î3#0Ë3#0Ë3Ç0@1A1"A#0Ë3%0&0Ë3#0Ë3#0ç0`1î1bAË3#0Í3Î3#0Ë3#0Ë3 1è@é@¡1#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0JIÈÈÈÈÈÈÈÈÈÈjiJIÈÈÈÈÈÈÈÈŠ‰jiJIÈÈÈÈÈÈ#0©Š‰jiJIÈÈÈÈË3#0Ë3©Š‰jiJIÈÈ#0Ë3#0Ë3#0©Š‰jiJIË3#0Ë3#0Ë3#0Ë3©Š‰ji#0Ë3#0Ë3#0Ë3#0Ë3#0©Š‰Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3©#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÅ###¡¢ÈÈÈÈÈÈåÁÂÀÁÂÈÈÈÈÈÈáâàáâÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈTSRQÈÈÈÈÈÈÈÈtsrqNOPÈÈÈÈÈ”“’‘nopPTSRQ#0Ë3#0±ŽÀtsrqË3#0Ë3#0Ë3¯°à”“’‘#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0±ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ_ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈŸÈÈÈÈÈÈÈÈÈȾ¿È€€ÈÈÈÈÈÈÝÞßÈ€€ € +€ €úûüýþÿ ÃÃÃÃÃÀÁÂÀÁÂ:;<=>#0àáâàáâZ[\#0#0Ë3Ë3#0Ë3#0L ÈÈÈÈÈÈ#0Ë3#0Ë3l,-ÈÈÈÈÈË3#0Ë3#0Ë3LMNÈÈÈÈ#0Ë3#0Ë3#0lmnopqÈË3#0Ë3#0Ë3#0Ž‘¢#0Ë3#0Ë3#0Ë3#0®ŽtË3#0Ë3#0Ë3#0Ë3#0Ë3¯°”#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈ©ª«ÈÈÈÈÈÈÈÈÈÉÊËÈÈÈÈÈÈÈÈ6éêëÈÈÈÈÈSTUV  +ÈÈÈÈÈ¢stuv)*ÈÈÈÈÈÀ“”•–=44ÈÈÈÈÈà³´µ¶?4ÈÈÈÈÈÈ$0Ì3$0Ì3=44ÈÈÈÈÈÈÌ3$0Ì3$0?4ÈÈÈÈÈÈÈÍ3%0Í3=44ÈÈÈÈÈÈÈ%0=444ÈÈÈÈÈÈÈÈ=44ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈË3#0Aé@è@1Ë3#0Ë3#0Ë3#0#0Ë3bAÎ1î1ç0#0Ë3#0Ë3#0ï1Ë3#0BAî1Î1Ç0Ë3#0Ë3#0ï1Ï1#0Ë3 AÉ0È0!1#0Ë3#0ï1Ï1ï1Ë3#0Ë3#0Ë3#0Ë3#0ï1Ï1Ð1ð1#0Ë3#0Ë3#0Ë3#0ï1Ï1Ð1ð1=4Ë3#0Ë3#0Ë3#0ï1Ï1Ð1ð1=44Ï1ï1Ï1ï1Ï1ï1Ï1Ð1ð1=44Èï1Ï1ï1Ï1ï1Ï1Ð1ð1=44ÈÈÏ1ï1Ï1ï1Ï1Ð1ð1=44ÈÈÈÐ1ð1Ð1ð1Ð1ð1=44ÈÈÈÈð1Ð1ð1Ð1ð1=44ÈÈÈÈÈÈÈÈÈÈÈ0=0Ð1ð1ï1Ï1ÈÈÈÈÈÈÈ0=0Ð1ð1ï1ÈÈÈÈÈÈÈÈ>0ð1Ð1Ï1ÈÈÈÈÈÈÈÈ04=0Ð1ÈÈÈÈÈÈÈÈÈÈ0=0ÈÈÈÈÈÈÈÈÈÈÈ0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈï1Ï1Ð1ð1=44ÈÈÈÈÈÈÏ1ï1ð1Ð1?4ÈÈÈÈÈÈÈï1ð1Ð1=44ÈÈÈÈÈÈÈð1=444ÈÈÈÈÈÈÈÈ=44ÈÈÈÈÈÈÈÈÈÈ4ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ€€ÈÈÈÈÈÈÈÈÈÈ€€ € €ÈÈ ##$#¢ #ÃáÀÁÂÀÁÂÀÁÂÀÁ&àáâàáâàáâàá'#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÈÈÈÈÈÈÅ###¡¢ÈÈÈÈÈÈåÁÂÀÁÂÈÈÈÈÈÈáâàáâÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈJIÈÈÈÈÈÈÈÈÈÈjiJIÈÈÈÈÈÈÈÈŠ‰jiJIÈÈÈÈÈÈ#0©Š‰jiJIÈÈÈÈË3#0Ë3©Š‰jiJIÈÈ#0Ë3#0Ë3#0©Š‰jiJIÏ1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ð1Ð1ð1Ð1=4444=0Ð1ð1Ð1Ð1=4444ÈÈÈ044=044ÈÈÈÈÈÈÈÈÈ0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈTSRQÈÈÈÈÈÈÈÈtsrq NOPÈÈÈÈ”“’‘ÀnopTSRQÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ € +€ €ÈÈÈÅ##$#¢ÃÃÃ#¡¢åÁÂÀÁÂÀÁÂÀÁÂáâàáâàáâàáâ!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈJIÈÈÈÈÈÈÈÈÈÈjiJIÈÈÈÈÈÈÈÈŠ‰jiNOPÈÈÈÈÈ#0©Š‰nop¢#¡¢¢Ë3#0Ë3©ŽÁÂÀÁÂ#0Ë3#0Ë3Ë3¯°áâàáâÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ=<<ÈÈÈ8Å###¡¢ð1=<88=8Ð1åÁÂÀÁÂð1ð1ð1ð1ð1ð1áâàáâ ##$#¢ ###¡ÀÁÂÀÁÂÀÁÂÀÁ&àáâàáâàáâàá'#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ_ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈŸÈÈÈÈÈÈÈÈÈÈÈ¿¾ÈÈÈÈÈÈÈÈ€€ßÞÝÈÈÈÈÈ€€€€ÿþýüûúÈÈ€€€È ¡ÃÃâË3>=<;:ÀÁÂÀÁÂ#0Ë3#0\[ZàáâàáâÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈ_!@"@#0Ë3#0Ë3ÈÈÈÈÈÉCÊC€1È0É01ÈÈÈÈÈŸ!@"@Ç0@1A1"AÈÈÈȾ¿ÉCÊCç0`1#0bAÈÈÈÝÞß!@"@ 1è@é@¡1úûüýþÿÉCÊCË3#0Ë3#0!@"@#0Ë3#0Ë3:;<=>Ë3ÉCÊCË3#0Ë3#0Z[\#0Ë3#0!@"@#0Ë3#0Ë3Ë3#0Ë3±àŽtsrq#0Ë3#0Ë3#0Ë3¯°”“’‘Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3±#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ ##$#¢ ###¡¢ÀÁÂÀÁÂÀÁÂÀÁÂàáâàáâàáâàáâÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈQRSTÈÈÈÈÈPONqrstQRSTPpon‘’“”ªrstÀޱË3#0Ë3Ê’“”à°¯#0Ë3#0Ë3#0ËË3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈQRSŒÈÈÈÈPONPqrs¬QRSTponÀ‘’“ÌqrstŽà±#0Í3Î3‘’“”°¯#0Ë3#0Ë3%0&0±#0Ë3#0€1È0É01Ë3#0Í3Î3#0Ë3#0Ë3Ç0@1A1"A#0Ë3%0&0Ë3#0Ë3#0ç0`1î1bAË3#0Í3Î3#0Ë3#0Ë3 1è@é@¡1#0Ë3%0&0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈTSRQÈÈÈÈÈÈÈÈtsrqPNOPÈÈÈÈ”“’‘ÀnopTSRQË3#0Ë3±àŽtsrq#0Ë3#0Ë3#0Ë3¯°”“’‘Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3±#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈȶsÈÈÈÈÈÈÈÈÈÈÈrÈÈÈÈÈÈÈÈÈÈPr.rÈÈÈÈÈÈÈÈÈÈOrwsÈÈÈÈÈÈÈÈÈÈÈ—sÈÈÈÈÈÈÈÈÈÈÈ·sÈÈÈÈÈÅ##$#¢Ã###¡¢åÁÂÀÁÂÀÁÂÀÁÂáâàáâàáâàáâ!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈQRSŒÈÈÈÈÈPONqrs¬QRSTPpon‘’“ÌqrstÀޱË3#0Ë3‘’“”à°¯#0Ë3#0Ë3#0±Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈOrwsÈÈÈÈÈÈÈÈÈÈÈ—sÈÈÈÈÈÈÈÈÈÈÈ·sÈÈÈÈÈ ##$#¢Ã###¡¢ÀÁÂÀÁÂÀÁÂÀÁÂàáâàáâàáâàáâË3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈyszs{s|s}s~sÈÈÈÈȘs™sšs›sœssžsŸsÈÈÈȸs¹sºs»s¼s½s¾s¿sÈÈÈÈÈNsOsYsZs[s\sÈsÈÈÈÈÈ]sÈÈ^sÈ_sÈÈÈÈÈÈÈÈÈusÈÈÈÈÈÈÈÈÈÈÈ•sÈÈÈÈÈÈÈÈÈÈȵsÈÈÈÈÈÈÈÈÈÈÈ@rÈÈÈÈÈÈÈÈÈÈÈ`rÈÈÈÈÈÈÈÈÈÈÈvsÈÈÈÈÈÈÈÈÈÈÈ–sÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ€€ÈÈÈÈÈÈÈ € +€ €€€ÈÈÈÈÈÈÅÃÃÃÃà###¡¢åÁÂÀÁÂÀÁÂÀÁÂáâàáâàáâàáâÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈQRSŒÈÈÈÈÈPONqrs¬QRSTPpon‘’“ÌqrstÀޱË3#0Ë3‘’“”à°¯#0Ë3#0Ë3#0±Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈQRSŒÈÈÈÈÈPONqrs¬QRSTPpon‘’“ÌqrstÀޱË3%0&0‘’“”à°¯#0Ë3#0Í3Î3±Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ ##$#¢ ###¡ÀÁÂÀÁÂÀÁÂÀÁ&àáâàáâàáâàá'Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Aé@è@1Ë3#0Ë3%0&0Ë3#0Ë3bAÎ1î1ç0#0Ë3#0Í3Î3#0Ë3#0BAî1Î1Ç0Ë3#0Ë3%0&0Ë3#0Ë3 AÉ0È0!1#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0ð1ð1ð1ð1ð1ð1ÉCî1Î1î1Î1î1ð1ð1ð1ð1ð1ð1!@Î1î1Î1î1Î1ð1ð1ð1ð1ð1ð1=40=0ð1Ð1Ï1ð1ð1ð1ð1ð1=44È04=0Ð1ð1=40=0=44ÈÈÈÈ0=004È04ÈÈÈÈÈÈ0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ0=0Í3%0$0Ì3ÈÈÈÈÈÈÈ0=0Í3Ì3$0ÈÈÈÈÈÈÈÈ>0ð1Í3%0ÈÈÈÈÈÈÈÈ04=0Í3ÈÈÈÈÈÈÈÈÈÈ0=0ÈÈÈÈÈÈÈÈÈÈÈ0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Í3%0Í3%0Í3%0Í3%0Í3%0Í3%0%0Í3%0Í3=4444=0Í3%0Í3Ð1=4444ÈÈÈ044=044ÈÈÈÈÈÈÈÈÈ0ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Í3%0Í3%0Í3%0Í3%0Í3%0Í3%0%0Í3%0%0%0Í3%0Í3%0%0%0Í3%0%0%0%0M ˜ ˜ ž ˜ M$%0%0040˜ ª œ$œ ›$Y ª$ž ˜ ÈÈÈz$X Y œ ›${ ›$› œ ÈÈÈ~$}$Y X Y › ›$œ$X ÈÈÈÈ$X ›,{ ›$›(œ(›$ÈÈÈÈZ$Y › › œ › {$œ$ÈÈÈÈ~$}$X ›(| { |$œ ÈÈÈÈÈz$Y ›$› › œ › $0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0Í3%0Í3%0Í3%0Í3%0Í3%0Í3%0%0Í3%0%0%0Í3%0Í3%0%0%0Í3%0%0%0%0M ˜ ˜ ž ˜ M$%0%0ž ˜ ž ˜ ª Y X Y X ª$ž ˜ X Y X Y X ›(œ(›(| › œ { œ(›(œ(›(œ { | {$| › œ { { | {$| { | |$œ › œ | |$›$œ$| { |$›$› ›$œ(›(›${ › œ › œ | › { |${$| {$|$| ›$X Y ›$Y œ | |${$| {$$0Ì3$0Ì3$0Ì3$0Ì3$0Ì3M ª Ì3$0Ì3$0Ì3$0Ì3$0Ì3$0® Y Í3%0Í3%0Í3%0Í3%0Í3M ª { %0%0%0%0%0%0%0M ž ª Y œ$%0%0%0%0%0%0M ª z ~$}$Y ˜ ž ˜ ˜ ž ž ª Z ÈÈ~$}$›$| {$| { ›$Y$ ÈÈÈz${ ›$› œ › Y$} ~ ÈÈÈÈ› |$| › ›$X$ ÈÈÈÈÈ{ ›$Y X Y Y$Z ÈÈÈÈÈ› Y$X Y X } ~ ÈÈÈÈÈœ(›(Y X Y z ÈÈÈÈÈÈ›$|${ œ$Y X Y ›$| {$œ$›${ | {$| { { œ$Y œ | { |${ › |$œ › œ | |${$› › œ(| { ›$Y X ›$› › {$œ$Y ›$› œ | { {$›$X Y œ$Y X Y X Y › œ œ$œ$X Y X Y X Y X Y X Y X Y X Y X Y X Y š Ê Ë Ì ™ š ™ Í Î Ï ™ š Èê ë ì ÈÈÈí î ï ÈÈÈ +! ! !ÈÈÈ !!ÈÈÈÈ*!+!,!ÈÈÈÈ.!ÈÈÈÈÈK!ÈÈÈÈÈN!ÈÈÈY ÈÈÈÈÈÈÈÈÈÈX Z ÈÈÈÈÈÈÈÈÈÈY z ÈÈÈÈÈÈÈÈÈÈX ÈÈÈÈÈÈÈÈÈÈY Z ÈÈÈÈÈÈÈÈÈÈ} ~ ÈÈÈÈÈÈÈÈÈÈ~ ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈQRSTÈÈÈÈPONPqrstQRSTponÀ‘’“”ÈÈÈÈÈÈÈȶsÈÈÈÈÈÈÈÈÈÈÈ@rÈÈÈÈÈÈÈÈÈÈÈ`rÈÈÈÈÈÈÈÈÈÈȶsÈÈÈÈÈÈÈÈÈÈÈrÈÈÈÈÈÈÈÈÈÈPr.rÈÈÈÈÈÈÈÈÈÈOrwsÈÈÈÈÈÈÈÈÈÈÈ—sÈÈÈÈÈÈÈÈÈÈÈ·sÈÈÈ ##$#¢ #Ã#¡¢ÀÁÂÀÁÂÀÁÂÀÁÂàáâàáâàáâàáâÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÅ¡¢ÅÚåÁÂåú3123123áâ#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ123123123123#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ789:23456Ë3#0Ë3#0Ë3#0456Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ12:987ÈÈÈÈË3#0Ë3#0Ë3#0;<È#0Ë3#0Ë3#0Ë3#0Ë3654Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë33#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3È¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈÈ¿bÈÈÈÈÈÈÈÈÈÈô`Ûaò`ó`ô`ñ`ò`ó`ô`ñ`ò`ó`aûaaaaaaaaaaa4a2a2a3a4a1a2a3a4a1a2a3a²²²²²²²²²²²²ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ<ÃÈÈÈÈÈÈÈÈÂÂÂÂÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÃÈÈÈÈÈÈÈÈÈòÂóÂôÂÈÈÈÈÈÈûÂüÂýÂþÂÿÂÃÈÈÈÈÃÃÃà à +à à ÃÈÈÈÃÃÃÃÃÃÃà ÃÈ&Ã'Ã(Ã)Ã*Ã+Ã,Ã-Ã.Ã/Ã0Ã2Ã3Ã4Ã5Ã6Ã7Ã8Ã9Ã:Ã;ÃÈÈ=Ã>Ã?Ã@ÃAÃBÃCÃDÃÈÈÈÈÂÂEÃFÃGÃHÃÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈàÂáÂâÂãÂäÂåÂæÂäÖçÂèÂéÂêÂëÂìÂíÂîÂïÂðÂñÂïÖõÂöÂ÷ÂøÂùÂìÂíÂîÂïÂðÂúÂïÖÃöÂ÷ÂÃÃìÂíÂîÂïÂðÂÃïÖ ÃÃÃÃÃÃÃÃÃÃÃ×!Ã"Ã#Ã$Ã%ÃÈÈÈÈÈÈÈ1Ã1ÃÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈãÖâÖáÖàÖÈÈÈÈÈÈÈÈîÖíÖìÖëÖêÖéÖèÖçÖÈÇÈÈÈîÖíÖìÖùÖøÖ÷ÖöÖõÖôÖóÖòÖÈ×îÖíÖìÖ××÷ÖöÖ××ÿÖþÖýÖ××××××× × × × +× ×ÈÈÈ%×$×#×"×!× ××××ÈÈÈÈÈÈÈ1×0×/×.×-×ÈÈÈÈÈÈÈÈÈÈ;×:×ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈüÖûÖÈÈÈÈÈÈÈÈÈÈ××××ÈÈÈÈÈÈÈÈ×××××ÈÈÈÈÈÈÈ,×+×*×)×(×'×&×ÈÈÈÈÈ9×8×7×6×5×4×3×2×ÈÈÈÈD×C×B×A×@×?×>×=×ÈÈÈÈÈÈH×G×F×E×ÖÖÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ ##$#¢ ###¡ÀÁÂÀÁÂÀÁÂÀÁ&àáâàáâàáâàá'Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3 ##$#¢ ###¡ÀÁÂÀÁÂÀÁÂÀÁ&àáâàáâàáâàá'#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0ï1î1Î1î1Î1î1Î1î1Î1î1Î1Ç0ð1ï1Ï1ï1Ï1ï1Ï1ï1Ð1ð1=44Ð1ð1ï1Ï1ï1Ï1ï1Ï1ð1Ð1?4È=0Ð1ð1Ð1ð1Ð1ð1Ð1Ð1=44È0444=0ð1Ð1=444ÈÈÈÈÈÈ0444ÈÈÈÈJA B @ A B 5&4&3&5&4&¬!ja b ` a b ` a b ` a kŠ ‚ € ‚ € ‚ € ‹!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Í3Î3!@"@#0Ë3#0Ë3#0Ë3#0Ë3%0&0|$œ$œ$X$Y$Z ÈÈÈÈÈÈ›(œ(X$Y$} ~ ÈÈÈÈÈÈ{$›$Y$Y$Z ÈÈÈÈÈÈÈœ$Y$X$} ~ ÈÈÈÈÈÈÈY$X$} ~ ÈÈÈÈÈÈÈÈX$Y$Z ÈÈÈÈÈÈÈÈÈY$} ~ ÈÈÈÈÈÈÈÈÈ™$~ ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈø T#U#T#U#Èù ÈÈȸ T#Û W#X#W#X#X#!T#U#¸$Û W#8!Ú ‡#Ú Š#j#Ù W#X#Ø$X#‡#h#Ù Ú 9!!‡#8%h'j'W#i#j#ˆ#½ !Ú Ù !!ˆ'‡'Ú Ú 8!!‹#j#h#‹#Ù ‹#j#j#Ù Ù ‰#Š#‰#‡#ˆ#9!Ú †#‡#Ù j#½$‹#j#Ù !Ù ‹#h'Ú ½ †#‡#Ù †#‡#l#m#!†#ˆ'!n#o#Ú Ú i#!Œ##Ù j#Ù i#Ž##i#k#f#g#h#‹#j#k#f#g#h#i#h#‹#†#‡#ˆ#‰#Š#‹#†#‡#ˆ#‰#ˆ#ÈÈø ¹ º ¹ º Èù ÈÈȸ ¹ Û Ù Ú Ù Ú Û$!¹ º ¸$Û Ú 8!Ú ‡#Ú Š#j#Ù Ú Ù Ø$i#‡#h#Ù Ú 9!!‡#8%h'j'Ù i#j#ˆ#½ !Ú Ù !!ˆ'‡'Ú Ú 8!!‹#j#h#‹#Ù ‹#j#j#Ù Ù ‰#Š#‰#‡#ˆ#9!Ú †#‡#Ù j#½$‹#j#Ù !Ù ‹#h'Ú ½ †#‡#Ù †#‡#l#m#!†#ˆ'!n#o#Ú Ú i#!Œ##Ù j#Ù i#Ž##i#k#f#g#h#‹#j#k#f#g#h#i#h#‹#†#‡#ˆ#‰#Š#‹#†#‡#ˆ#‰#ˆ#Å##$#¢ #7Â8Â9Â:ÂåÁÂÀÁÂÀÁWÂXÂYÂZÂáâàáâàáwÂxÂyÂzÂî1Î1î1Î1î1Î1î1Î1î1˜Â™ÂšÂÎ1î1Î1î1Î1î1Î1î1Î1î1¹ÂºÂî1Î1î1Î1î1Î1î1Î1î1Î1%0&0Î1î1Î1€1È0É01î1Î1î1Í3Î3î1Î1î1Ç0@1A1"AÎ1î1Î1%0&0Î1î1Î1ç0`1î1bAî1Î1î1Í3Î3î1Î1î1 1è@é@¡1Î1î1Î1%0&0Î1î1Î1î1Î1î1Î1î1Î1î1Í3Î3î1Î1î1Î1î1Î1î1Î1î1Î1%0&0;Â<ÂIÃJÃÈÈÈÈÈÈÈÈ[Â\ÂKÃÈÈÈÈÈÈÈÈÈ{Â|ÂÈÈÈÈÈÈÈÈÈÈ›ÂÈÈÈÈÈÈÈÈÈÈÈ»ÂÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈJ×I×Å###¡¢ÈÈÈÈÈÈåÁÂÀÁÂÈÈÈÈÈÈáâàáâÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3 ##$#ÈÈÈÈÈÈÀÁÂÀÁ&ÈÈÈÈÈÈàáâàá'ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0ÈÈÈÈÈÈË3#0Ë3#0Í3Î3ÈÈÈÈÈÈ#0Ë3#0Ë3%0&0È € +€ €ÈÈË3#0Ë3#0Í3Î3 ÃÃá¢#0Ë3#0Ë3%0&0ÀÁÂÀÁÂË3#0Ë3#0Í3Î3àáâàáâ#0Ë3#0Ë3%0&0#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Í3Î3Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3%0&0#0Ë3#0Ë3#0Ë3ÈÈÈn°°ÉC#0Ë3#0Ë3#0ÈÈÈŽ!@Ë3#0Ë3#0Ë3ÈÈÈ®ÄÄÉC#0Ë3#0Ë3#0ÈÈÈÈ0=@!@Ë3#0Ë3#0Ë3ÈÈÈÈÈ3a2b2c2d2e2f2g2ÈÈÈÈ€22‚2ƒ2„2…2†2‡2¢¢ ¡3¢3£3¤3¥3¦3§3¨3ÂÂ&“!”1•1î1Î1î1–1—1˜1ââ'³´1µ1Î1î1Î1î1·1¸1#0Ë3#0«3¬3­3®3Î1î1Î1²3³3Ë3#0Ë3Ó1Ô1Õ1Ö1î1Î1î1×1Ø1#0Ë3#0ó1ô1õ1ö122222Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0ˆ2Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3©3ª3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ñ1Ò1#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ñ1ò1Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0´3‰2#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ù1©2Ë3#0Ë3#0Ë3#0Ë3#0Ë3#02É2#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0ÉC#0Ë3#0Ë3#0Ë3#0Ë3#0Í3Î3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3%0&0Î1î1Î1î1Î1Ï1ï1ð1Ð1ð1=44Ï1ï1Ï1ï1ð1Ð1=44444Èï1ð1Ð1=4444ÈÈÈȸ ð1=444ÈÈÈÈÈȸ Ø =44ÈÈÈÈÈÈÈÈØ X#4ÈÈÈÈÈÈÈÈÈØ W#ÈÈÈÈÈÈÈÈÈØ W#Ú ÈÈÈÈÈÈÈÈÈÛ Ú Ù ÈÈÈÈÈÈÈÈÈÛ Ù Ú ÈÈÈÈÈÈÈÈÈÈÛ Ù ÈÈÈÈÈÈÈÈÈÈÈÛ ÈÈÈÈÈÈÈÈÈÈÈÈÈÈø T#U#T#U#Èù ÈÈȸ T#Û W#X#W#X#X#!T#U#¸$Û W#8!Ú ‡#Ú Š#j#Ù W#X#Ø$X#‡#h#Ù Ú 9!!‡#8%h'j'W#i#j#ˆ#½ !Ú Ù !!ˆ'‡'Ú Ú 8!!‹#j#h#‹#Ù ‹#j#j#Ù Ù ‰#Š#‰#‡#ˆ#9!Ú †#‡#Ù j#½$‹#j#Ù !Ù ‹#h'Ú ½ †#‡#Ù †#‡#Œ##Ù j#Ù i#Ž##i#¬!4"5"h#‹#j#k#f#g#h#i#h#ja b ˆ#‰#Š#‹#†#‡#ˆ#‰#ˆ#Š ‚ € ‚ € ‚ € ‹BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1±¯•–—tsrqî1Î1î1Î1î1Î1¶·”“’‘Î1î1Î1î1Î1î1Î1î1Î1î1Î1±î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1€1È0É01î1Î1î1î1Î1î1Î1î1Ç0@1A1"AÎ1î1Î1Î1î1Î1î1Î1ç0`1î1bAî1Î1î1î1Î1î1Î1î1 1è@é@¡1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1TSRQÈÈÈÈÈÈÈÈtsrqUVWÈÈÈÈÈ”“’‘uvwoTSRQî1Î1î1±•–—tsrqÎ1î1Î1î1Î1¶·¯”“’‘î1Î1î1Î1î1Î1î1Î1î1Î1î1±Î1î1Î1î1Î1î1Î1î1Î1î1Î1Ç0î1Î1î1Î1î1Î1î1Î1î1Î1î1ç0Î1î1Î1î1Î1î1Î1î1Î1î1Î1Ç0î1Î1î1Î1î1Î1î1Î1î1Î1î1ç0Î1î1Î1î1Î1î1Î1î1Î1î1Î1Ç0î1Î1î1Î1î1Î1î1Î1î1Î1î1ç0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ï1Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ï1Ï1Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ï1ï1Ï1Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ð1ð1ï1Ï1Ë3#0Ë3#0Ë3#0Ë3#0=0Ð1ð1ï1Ï1Ë3#0Ë3#0Ë3#0Ë30=0Ð1ð1ï1Ï1Ë3#0Ë3#0Ë3#0È0=0Ð1ð1ï1Ï1ï1Ï1ï1Ï1ï1ÈÈ0=0Ð1ð1ï1Ï1ï1Ï1ï1Ï1ÈÈÈ0=0Ð1ð1ï1Ï1ï1Ï1ï1ÈÈÈÈ0=0Ð1ð1Ð1ð1Ð1ð1ÈÈÈÈÈ70=0Ð1ð1Ð1ð1Ð1Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ð1ð1Ð1ð1Ð1ð1Ð1ð1Ð1ð1Ð1ð1ð1Ð1ð1=4444=0ð1Ð1ð1Ð1=4444ÈÈÈ0=0ð1Ð1ð14ÈÈÈÈÈÈÈ0444Ë3#0Ë3#0 2¡2¢2£2¤2¥2¦2§2#0Ë3#0Ë3#0Á2Â2Ã2Ä2Å2Æ2Ç2Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ï1ï1Ð1ð1Ð1ð1Ð1ð1Ð1ð1Ð1ð1Ð1ð1ð1Ð1ð1=4444=0ð1Ð1ð1Ð1=4444ÈÈÈ0=0ð1Ð1ð14ÈÈÈÈÈÈÈ0444¨2#0Aé@è@1Ë3#0Ë3#0Ë3#0#0Ë3bAÎ1î1ç0#0Ë3#0Ë3#0ï1Ë3#0BAî1Î1Ç0Ë3#0Ë3#0ï1Ï1#0Ë3 AÉ0È0!1#0Ë3#0ï1Ï1ï1Ë3#0Ë3#0Ë3#0Ë3#0ï1Ï1Ð1ð1#0Ë3#0Ë3#0Ë3#0ï1Ï1Ð1ð1=4Ë3#0Ë3#0Ë3#0ï1Ï1Ð1ð1=44Ï1ï1Ï1ï1Ï1ï1Ï1Ð1ð1=44Èï1Ï1ï1Ï1ï1Ï1Ð1ð1=44ÈÈÏ1ï1Ï1ï1Ï1Ð1ð1=44ÈÈÈÐ1ð1Ð1ð1Ð1ð1=44ÈÈÈÈð1Ð1ð1Ð1ð1=44ÈÈÈÈÈh#f#n#o#f#g#h#k#i#l#m#g#ˆ#†#Ž##†#‡#ˆ#Ú †#Œ##‡#f#j#k#i#j#j#i#j#h#g#j#j#†#Š#‹#†#†#n#o#Š#ˆ#‡#l#m#l#m#h#f#h#Ž##g#h#f#Œ##Œ##ˆ#†#ˆ#j#†#‡#ˆ#l#m#i#j#k#i#j#j#i#j#k#i#Œ##f#Š#‹#†#l#m#‰#‡#ˆ#‰#Š#i#†#g#n#o#Œ##f#g#h#‰#Š#h#f#‡#Ž##‡#j#†#‡#ˆ#n#o#ˆ#†#k#i#j#k#h#f#k#i#Ž##i#j#‹#‰#Š#‹#ˆ#†#‹#‰#Š#‹#‰#Š#pqtutrrtuuspåÁÂÀÁÂÀÁÂÀÁÂáâàáâàáâàáâ!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3pqtutrrtuuspåÁÂÀÁÂÀÁÂÀÁÂáâàáâàáâàáâ!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Aé@è@1Ë3#0Ë3#0!@"@#0Ë3bAÎ1î1ç0#0Ë3#0Ë3ÉCÊCË3#0BAî1Î1Ç0Ë3#0Ë3#0!@"@#0Ë3 AÉ0È0!1#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈÈ € +€ € € €ÈÈ ##$#ÃÃÃÃÃÈÀÁÂÀÁÂÀÁÂÀ&Èàáâàáâàáâà'ÈË3#0Ë3#0Ë3#0Ë3#0Ë3%0&0È#0Ë3#0Ë3#0Ë3#0Ë3#0Í3=4È=40404000044ÈBÍAÎ1€1È0É01î1Î1î1Î1î1/BíAî1Ç0@1A1ð1É0€5Î1î1Î1BÍAÎ1ç0`1î1A1a1bAî1Î1î1/BíAî1 1è@Î1î1Î1"AÎ1î1Î1BÍAÎ1î1Î1¡Eé@è@¡1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1/BíAî1Î1î1Î1î1Î1î1Î1î1Î1BÍAÎ1î1Î1î1Î1î1Î1î1Î1î1psstsppsssppÀÁÂÀÁÂÀÁÂÀÁÂàáâàáâàáâàáâÎ1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Aé@è@1Î1î1Ð12î1Î1î1Î1bAÎ1î1ç0î1Î1ð102Î1î1Î1î1BAî1Î1Ç0Î1î1Ð12î1Î1î1Î1 AÉ0È0!1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Ð12î1Î1î1Î1î1Î1î1Î1î1Î1ð102Î1î1Î1î1Î1î1Î1î1Î1î1Ð12psstsppsssppÀÁÂÀÁÂÀÁÂÀÁÂàáâàáâàáâàáâÎ1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1Î1î1Î1î1Î1î1Î1î1Î1î1Î1î1psstsppsssppÀÁÂÀÁÂÀÁÂÀÁÂàáâàáâàáâàáâÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈÈÈÈÈ!@"@#0Ë3#0Ë3ÈÈÈÈÈÈÉCÊCË3#0Ë3#0ÈÈ € +€ €È!@"@#0Ë3#0Ë3Å#ÃÃâÉCÊCË3#0Ë3#0åÁÂÀÁÂ!@"@#0Ë3#0Ë3áâàáâÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3È È È È È È È È ÈÜ Í3Î3È È È È È È È È È ¼ %0&0È È È È È È È È È œ Í3Î3È È È È È È È È › | %0&0È È È È È È È È { #0Í3Î3È È È È È È È z | Ë3%0&0È È È È È È º » Ë3#0Í3Î3È È È È È ™ š Ë3#0Ë3Í3Î3È È È w x | Ë3#0Ë3#0%0&0T U V | #0Ë3#0Ë3#0Ë3Í3Î3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0%0&0#0Ë3#0Ë3#0Ë3#0Í3#0Ë3Í3Î3Ë3#0Ë3#0 2¡2¢2£2¤2¥2¦2§2#0Ë3#0Ë3#0Á2Â2Ã2Ä2Å2Æ2Ç2Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3¨2#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊC€1È0É01Ë3#0Ë3#0Ë3#0!@"@Ç0@1A1"A#0Ë3#0Ë3#0Ë3ÉCÊCç0`1î1bAË3#0Ë3#0Ë3#0!@"@ 1è@é@¡1#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3ÉCÊCË3#0Ë3#0Ë3#0Ë3#0Ë3#0!@"@#0Ë3#0Ë3#0Ë3#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3Ë3#0Ë3#0Ë3#0ÉCÊCË3#0Ë3#0#0Ë3#0Ë3#0Ë3!@"@#0Ë3#0Ë3 \ No newline at end of file diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/palette.pal b/sa1/data/maps/zone_1/act_2/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..5bbf52a1d6 --- /dev/null +++ b/sa1/data/maps/zone_1/act_2/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +8 205 255 +255 246 172 +246 213 131 +230 164 98 +213 106 82 +255 32 16 +255 32 16 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +24 57 41 +189 172 148 +139 139 139 +131 148 172 +98 115 156 +74 90 123 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +49 82 49 +16 32 24 +255 238 82 +246 189 82 +255 139 189 +255 57 139 +180 24 98 +222 148 82 +197 123 49 +164 82 16 +106 41 0 +0 205 255 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +197 139 32 +189 115 24 +172 82 0 +148 57 0 +213 148 82 +197 115 49 +164 82 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +0 205 255 +255 213 123 +246 189 90 +230 164 82 +205 131 65 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +230 180 106 +189 123 65 +172 90 41 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +8 205 255 +172 255 98 +123 222 106 +90 172 90 +74 131 74 +74 131 74 +49 82 49 +49 82 49 +8 32 16 +197 139 32 +189 115 24 +164 90 41 +148 74 24 +131 49 8 +106 24 0 +255 32 16 +8 205 255 +255 255 255 +255 172 139 +255 115 82 +230 32 0 +156 24 0 +197 222 238 +180 156 164 +180 164 148 +156 139 123 +131 115 98 +255 230 164 +246 123 65 +213 57 0 +164 32 0 +82 16 0 +0 205 255 +255 246 180 +246 213 164 +222 164 98 +180 123 65 +123 82 57 +74 41 49 +255 255 106 +189 255 49 +139 238 24 +98 197 24 +65 156 16 +32 115 16 +16 74 8 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +255 230 213 +255 197 172 +255 156 148 +230 90 123 +197 16 90 +255 197 106 +246 148 57 +238 98 16 +255 255 0 +213 246 123 +115 222 65 +57 189 49 +0 156 41 +0 123 41 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +0 205 255 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 205 255 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +255 32 16 +8 205 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 205 +0 0 156 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +8 205 255 +57 131 156 +90 148 172 +115 164 189 +139 180 205 +172 205 213 +197 222 230 +222 238 246 +255 255 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 +0 0 0 +255 255 255 +213 246 255 +172 230 255 +131 222 255 +74 205 255 +16 197 255 +8 189 255 +0 172 255 +0 156 255 +139 213 172 +115 180 131 +82 148 131 +255 246 189 +213 197 164 +148 156 123 +0 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +82 238 246 +74 222 246 +65 213 246 +49 205 238 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_1/act_2/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..63864bbaf5 Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_1/act_2/tilemaps/fg/tileset.png b/sa1/data/maps/zone_1/act_2/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..be1da1ca75 Binary files /dev/null and b/sa1/data/maps/zone_1/act_2/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_2/act_1/entities/enemies.csv b/sa1/data/maps/zone_2/act_1/entities/enemies.csv new file mode 100644 index 0000000000..957385c45d --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/entities/enemies.csv @@ -0,0 +1,12 @@ +Adv2,ENEMIES,41,6,,,,, +20,1,26,28,MOLE,102,-60,0,0 +32,1,2,26,SENBON,-4,0,10,2 +11,2,24,17,SENBON,-4,0,10,2 +11,2,10,18,SENBON,-4,0,10,2 +22,2,12,20,MOLE,52,-84,0,0 +27,2,29,20,MOLE,-125,-84,0,0 +10,3,20,6,MOLE,-84,-102,0,0 +17,3,11,0,MOLE,-43,-96,0,0 +23,3,10,14,FIREBALL,0,-6,2,8 +16,5,7,2,TENTOU,0,0,4,2 +16,5,18,2,TENTOU,-2,0,4,2 diff --git a/sa1/data/maps/zone_2/act_1/entities/interactables.csv b/sa1/data/maps/zone_2/act_1/entities/interactables.csv new file mode 100644 index 0000000000..e3943a86ef --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/entities/interactables.csv @@ -0,0 +1,111 @@ +Adv2,INTERACTABLES,41,6,,,,, +1,0,4,12,HOOK_RAIL,1,-12,0,0 +20,0,5,28,TRACK,52,0,37,3 +21,0,21,28,PIPE_EXIT,75,30,2,4 +24,0,17,30,SECURITY_GATE,1,0,19,18 +27,0,12,24,HOOK_RAIL,1,-24,0,0 +38,0,1,0,STAGE_GOAL,0,1,0,0 +38,0,1,20,STAGE_GOAL,0,1,0,0 +3,1,0,28,HOOK_RAIL,0,-60,0,0 +17,1,30,28,SWINGING_HOOK,1,-60,0,0 +18,1,19,28,SWINGING_HOOK,0,-60,0,0 +22,1,24,11,IA096,40,-43,0,0 +22,1,22,12,TOGGLE__PLAYER_VISIBILITY,1,0,3,4 +22,1,24,12,MARBLE_TRACK__UNK,32,0,120,0 +23,1,17,14,BOUNCE_BLOCK,15,-46,0,0 +23,1,12,25,PLATFORM_THIN,0,0,5,2 +23,1,2,27,LAVA,0,0,24,4 +24,1,17,16,SECURITY_GATE,1,0,19,16 +24,1,10,25,SPIKES__HIDING_UP,-10,-57,0,0 +25,1,17,16,SWINGING_HOOK,0,-48,0,0 +25,1,1,28,TRAMPOLINE,-33,-60,0,0 +29,1,22,30,SPRING__SMALL_UPLEFT,0,-62,0,0 +30,1,15,12,CRANE_CLAW,0,0,30,2 +33,1,29,28,SWING_ROPE,-17,0,35,2 +35,1,8,10,HOOK_RAIL,1,1,1,1 +38,1,1,8,STAGE_GOAL,0,1,0,0 +38,1,1,28,STAGE_GOAL,0,1,0,0 +3,2,14,20,SPRING__UP,0,-84,0,0 +3,2,18,20,SPRING__UP,0,-84,0,0 +3,2,24,26,HOOK_RAIL,1,-90,0,0 +8,2,8,28,PLATFORM_THIN__FALLING,-8,-92,0,0 +9,2,12,26,HOOK_RAIL,1,-90,0,0 +15,2,22,17,BOUNCE_BLOCK,10,-81,0,0 +15,2,5,18,CONVEYOR_BELT,0,0,13,5 +15,2,30,26,BOUNCE_BLOCK,2,-90,0,0 +15,2,0,30,CONVEYOR_BELT,1,0,19,5 +16,2,3,11,BOUNCE_BLOCK,-3,-75,0,0 +19,2,3,14,CHECKPOINT,3,-78,0,0 +20,2,17,0,PIPE_ENTRANCE,0,10,1,0 +20,2,5,6,TRACK,0,-45,30,2 +20,2,17,6,TRACK,-15,0,10,1 +20,2,20,20,TOGGLE_PLAYER_LAYER__BACK,0,0,3,16 +20,2,23,20,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +21,2,0,10,TOGGLE_PLAYER_LAYER__BACK,0,0,15,3 +22,2,22,11,TOGGLE__PLAYER_VISIBILITY,0,0,3,4 +24,2,7,20,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +24,2,7,22,TOGGLE_PLAYER_LAYER__BACK,0,0,2,22 +24,2,9,22,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,24 +24,2,23,24,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +24,2,26,24,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,4 +25,2,25,10,PLATFORM_THIN,0,0,2,10 +25,2,31,29,PLATFORM_THIN,-3,0,5,2 +26,2,10,6,TRACK,11,0,8,5 +26,2,17,6,PIPE_EXIT,-81,30,2,6 +26,2,10,18,TRACK,0,-15,10,4 +26,2,26,18,TRACK,-19,0,13,3 +27,2,21,1,PLATFORM_THIN__FALLING,-117,-65,0,0 +28,2,28,15,SPRING__RIGHT,2,-79,0,0 +29,2,4,14,CHECKPOINT,4,-78,0,0 +30,2,26,21,SPRING__UP,0,-85,0,0 +33,2,4,8,SWING_ROPE,-16,0,35,2 +33,2,31,26,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +33,2,31,28,TOGGLE_PLAYER_LAYER__BACK,0,0,2,18 +34,2,15,24,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +34,2,18,24,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +34,2,28,24,SPRING__BIG_UPRIGHT,0,-88,0,0 +34,2,1,28,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,18 +38,2,1,14,STAGE_GOAL,1,1,0,0 +6,3,24,0,SPRING__BIG_UPRIGHT,0,-96,0,0 +6,3,23,24,SECURITY_GATE,1,0,13,6 +6,3,29,30,CHECKPOINT,1,-126,0,0 +7,3,2,31,SPRING__UP,1,-127,0,0 +8,3,15,0,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +8,3,15,2,TOGGLE_PLAYER_LAYER__BACK,0,0,2,22 +8,3,17,2,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,24 +8,3,31,4,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +9,3,2,4,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,4 +10,3,26,7,SPRING__UP,0,-103,0,0 +10,3,14,19,SPRING__UP,0,-115,0,0 +12,3,29,0,SWING_ROPE,-17,0,35,2 +12,3,14,25,SPRING__UP,0,-121,0,0 +16,3,21,12,SECURITY_GATE,1,0,16,12 +16,3,8,24,SPIKES__HIDING_UP,-8,-120,0,0 +17,3,7,18,PLATFORM_THIN,0,0,4,2 +17,3,28,18,PLATFORM_THIN,-2,0,4,2 +18,3,22,7,SPRING__UP,0,-103,0,0 +18,3,10,25,SPRING__UP,1,-121,0,0 +18,3,10,25,SPRING__UP,1,-121,0,0 +18,3,10,25,SPRING__UP,1,-121,0,0 +18,3,10,25,SPRING__UP,1,-121,0,0 +19,3,12,25,SPRING__UP,1,-121,0,0 +22,3,26,8,BOUNCE_BLOCK,38,-104,0,0 +22,3,22,11,LAVA,0,0,24,4 +23,3,5,8,BOUNCE_BLOCK,27,-104,0,0 +23,3,18,13,SPRING__UP,0,-109,0,0 +26,3,2,18,SPIKES__HIDING_UP,-66,-114,0,0 +26,3,17,22,PIPE_ENTRANCE,0,10,1,0 +26,3,17,28,TRACK,13,0,9,1 +26,3,26,28,TRACK,0,-45,30,2 +34,3,23,22,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +34,3,23,24,TOGGLE_PLAYER_LAYER__BACK,0,0,2,14 +34,3,25,24,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,14 +35,3,7,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +35,3,10,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,4 +37,3,2,7,SPRING__UP,0,-103,0,0 +14,4,4,0,PLATFORM_CRUMBLING,60,-128,0,0 +14,4,20,4,PLATFORM_CRUMBLING,44,124,0,0 +14,4,24,5,SPRING__RIGHT,3,123,0,0 +17,4,29,28,TRAMPOLINE,-61,100,0,0 +18,4,12,10,BOOSTER,-76,0,0,0 +17,5,1,8,CHECKPOINT,2,88,0,0 diff --git a/sa1/data/maps/zone_2/act_1/entities/itemboxes.csv b/sa1/data/maps/zone_2/act_1/entities/itemboxes.csv new file mode 100644 index 0000000000..160a45ba41 --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/entities/itemboxes.csv @@ -0,0 +1,12 @@ +Adv2,ITEMS,41,6, +21,1,22,28,ONE_UP +22,1,29,28,RINGS_10 +27,1,26,28,RINGS_RANDOM +10,2,6,20,SHIELD_MAGNETIC +17,2,16,8,RINGS_5 +18,2,28,20,SPEED_UP +8,3,30,0,SHIELD +12,3,30,12,RINGS_5 +26,3,6,18,RINGS_10 +32,3,22,0,RINGS_RANDOM +13,4,30,12,INVINCIBILITY diff --git a/sa1/data/maps/zone_2/act_1/entities/rings.csv b/sa1/data/maps/zone_2/act_1/entities/rings.csv new file mode 100644 index 0000000000..139479de5f --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/entities/rings.csv @@ -0,0 +1,221 @@ +Adv2,RINGS,41,6 +1,0,9,20 +1,0,13,22 +1,0,17,24 +1,0,21,26 +22,0,24,29 +22,0,24,33 +23,0,31,30 +24,0,2,30 +24,0,5,30 +25,0,10,33 +2,1,15,7 +2,1,19,9 +2,1,23,11 +2,1,27,13 +16,1,6,31 +16,1,9,31 +16,1,12,31 +22,1,24,5 +24,1,30,11 +24,1,30,15 +24,1,30,19 +25,1,10,5 +25,1,10,9 +27,1,22,3 +27,1,26,5 +27,1,30,7 +28,1,2,9 +28,1,18,17 +28,1,22,19 +28,1,26,21 +28,1,30,23 +30,1,20,20 +30,1,25,20 +30,1,30,20 +31,1,3,20 +31,1,8,20 +33,1,18,27 +33,1,23,27 +33,1,28,27 +34,1,1,27 +34,1,6,27 +34,1,11,27 +35,1,18,21 +35,1,22,23 +35,1,26,25 +35,1,30,27 +1,2,9,4 +1,2,13,6 +1,2,17,8 +1,2,21,10 +2,2,27,4 +2,2,23,6 +2,2,19,8 +2,2,15,10 +2,2,15,23 +2,2,19,25 +2,2,23,27 +2,2,27,29 +7,2,7,11 +7,2,10,11 +7,2,13,11 +8,2,11,25 +8,2,14,25 +8,2,17,25 +10,2,11,15 +10,2,14,15 +10,2,17,15 +10,2,26,24 +10,2,26,28 +10,2,26,32 +12,2,17,31 +12,2,22,31 +12,2,27,31 +12,2,32,31 +13,2,5,31 +13,2,10,31 +14,2,17,14 +14,2,13,16 +14,2,9,18 +15,2,3,7 +15,2,6,7 +15,2,9,7 +15,2,25,8 +15,2,28,8 +15,2,31,8 +17,2,23,28 +17,2,26,28 +17,2,29,28 +18,2,22,26 +18,2,22,30 +19,2,13,12 +19,2,13,15 +19,2,13,18 +21,2,10,26 +21,2,9,30 +21,2,5,31 +22,2,25,24 +22,2,25,28 +22,2,25,32 +24,2,24,27 +24,2,18,29 +24,2,30,29 +27,2,14,14 +27,2,15,18 +27,2,19,19 +28,2,14,14 +28,2,13,18 +28,2,9,19 +29,2,16,16 +29,2,21,19 +29,2,25,23 +29,2,29,27 +30,2,27,8 +30,2,27,12 +30,2,27,16 +31,2,9,15 +31,2,13,16 +31,2,14,20 +32,2,25,7 +32,2,30,7 +33,2,3,7 +33,2,8,7 +33,2,13,7 +33,2,18,7 +34,2,14,11 +34,2,18,13 +34,2,22,15 +34,2,16,27 +34,2,10,29 +34,2,22,29 +35,2,4,10 +35,2,8,10 +35,2,12,10 +35,2,6,13 +35,2,10,13 +36,2,14,3 +36,2,18,5 +36,2,22,7 +36,2,26,9 +37,2,2,20 +37,2,2,25 +37,2,2,30 +3,3,29,2 +4,3,1,4 +4,3,5,6 +4,3,9,8 +5,3,3,21 +5,3,7,23 +5,3,11,25 +5,3,15,27 +7,3,3,3 +7,3,6,3 +7,3,9,3 +8,3,32,7 +8,3,26,9 +8,3,24,15 +9,3,22,5 +9,3,26,7 +9,3,6,9 +9,3,30,9 +9,3,8,15 +10,3,2,11 +10,3,18,19 +10,3,22,21 +10,3,26,23 +10,3,30,25 +11,3,23,30 +11,3,27,32 +12,3,24,19 +12,3,30,21 +12,3,32,27 +12,3,30,33 +13,3,31,22 +13,3,31,26 +13,3,31,30 +15,3,22,30 +17,3,30,30 +18,3,22,2 +18,3,10,12 +18,3,10,16 +18,3,10,20 +19,3,12,5 +19,3,12,9 +19,3,12,13 +19,3,25,19 +19,3,31,19 +20,3,5,21 +20,3,7,27 +24,3,16,3 +24,3,32,3 +25,3,26,27 +25,3,25,31 +25,3,21,32 +34,3,8,3 +34,3,24,3 +34,3,32,27 +35,3,8,19 +35,3,2,21 +35,3,14,21 +35,3,16,27 +36,3,22,12 +36,3,21,16 +36,3,17,17 +8,4,25,7 +8,4,26,11 +8,4,30,12 +9,4,29,12 +10,4,2,7 +10,4,1,11 +11,4,31,2 +15,4,21,2 +15,4,17,3 +15,4,10,31 +15,4,14,33 +17,4,30,2 +17,4,30,6 +15,5,18,3 +17,5,18,2 +17,5,17,6 +17,5,13,7 diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/bg/header.c b/sa1/data/maps/zone_2/act_1/tilemaps/bg/header.c new file mode 100644 index 0000000000..0c671fae4e --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_2_act_1_fg[]; +const u8 Tiles_zone_2_act_1_bg[] = INCBIN_U8("data/maps/zone_2/act_1/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_2_act_1_bg[] = INCBIN_U8("data/maps/zone_2/act_1/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_2_act_1_bg = { + .xTiles = 32, + .yTiles = 64, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_2_act_1_bg, + .tilesSize = sizeof(Tiles_zone_2_act_1_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_2_act_1_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_2_act_1_bg, +}; diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/bg/palette.pal b/sa1/data/maps/zone_2/act_1/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..c35f1696c4 --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +41 123 41 +222 255 123 +180 222 90 +139 180 82 +106 148 65 +90 106 57 +238 238 222 +205 205 180 +189 180 131 +156 148 82 +123 106 49 +255 222 0 +255 156 0 +255 106 0 +189 82 0 +57 32 0 +41 123 41 +255 230 156 +180 164 98 +139 123 65 +90 82 32 +255 222 0 +255 156 0 +255 106 0 +197 82 0 +139 57 0 +49 16 0 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +255 255 65 +255 222 0 +222 180 0 +180 172 0 +98 57 0 +0 0 0 +222 230 164 +180 189 156 +123 123 82 +90 82 41 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +230 255 115 +189 213 106 +123 164 98 +82 131 98 +32 90 65 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 189 +205 197 123 +164 148 98 +123 98 74 +90 74 41 +41 123 41 +255 238 180 +230 197 148 +205 164 115 +172 131 106 +139 106 98 +115 90 90 +82 57 65 +0 0 0 +0 255 0 +0 255 0 +255 230 74 +255 180 0 +197 123 0 +98 57 0 +0 0 0 +41 123 41 +255 255 0 +255 172 0 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +41 123 41 +255 255 205 +213 205 205 +148 139 148 +82 74 82 +32 41 0 +255 230 115 +255 156 0 +197 82 0 +255 205 0 +238 148 0 +213 82 0 +156 57 0 +106 41 0 +49 16 0 +0 0 0 +41 123 41 +0 255 0 +0 255 0 +0 255 0 +255 255 222 +189 189 156 +148 148 115 +98 115 82 +49 65 41 +0 16 0 +255 238 156 +255 189 98 +205 148 16 +148 106 0 +90 57 0 +0 0 0 +0 0 0 +255 255 222 +213 213 172 +172 172 131 +139 131 90 +115 98 49 +74 65 32 +255 230 74 +255 180 0 +255 106 0 +197 82 0 +131 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +197 82 0 +148 82 0 +106 32 0 +65 32 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +238 139 24 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +172 82 41 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 255 +255 255 0 +139 148 16 +82 90 24 +255 0 0 +123 0 0 +0 255 255 +0 148 156 +0 255 0 +106 148 172 +74 106 123 +57 82 98 +41 57 74 +32 49 57 +16 24 32 +255 0 0 +255 0 0 +172 41 32 +255 255 0 +156 156 57 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 +230 0 0 +148 180 98 +98 139 82 +74 106 65 +32 65 49 +8 24 41 +197 123 32 +164 90 16 +148 82 24 +115 74 32 +98 57 32 +49 49 41 +172 172 123 +139 131 115 +115 106 82 +16 16 16 +230 0 0 +123 156 131 +106 139 123 +65 106 106 +32 65 65 +148 115 74 +123 90 57 +106 74 41 +82 49 24 +65 32 0 +148 139 115 +115 106 82 +98 90 65 +74 65 49 +57 49 41 +0 0 0 diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_2/act_1/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..f9aa82cf78 Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/bg/tiles.png b/sa1/data/maps/zone_2/act_1/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..a24ff2c22b Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/flags.coll b/sa1/data/maps/zone_2/act_1/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..6e18df8a8f Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/header.c b/sa1/data/maps/zone_2/act_1/tilemaps/fg/header.c new file mode 100644 index 0000000000..94e2605c75 --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_2_act_1_fg[] = INCBIN_U16("data/maps/zone_2/act_1/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_2_act_1_fg[] = INCBIN_U8("data/maps/zone_2/act_1/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_2_act_1_fg[] = INCBIN_S8("data/maps/zone_2/act_1/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_2_act_1_fg[] = INCBIN_U8("data/maps/zone_2/act_1/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_2_act_1_fg[] = INCBIN_U16("data/maps/zone_2/act_1/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_2_act_1_fg0[] = INCBIN_MAP("data/maps/zone_2/act_1/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_2_act_1_fg1[] = INCBIN_MAP("data/maps/zone_2/act_1/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_2_act_1_fg[] = INCBIN_U16("data/maps/zone_2/act_1/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_2_act_1_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x340, + .animFrameCount = 8, + .animDelay = 4, + .tiles = Tileset_zone_2_act_1_fg, + .tilesSize = (u32)sizeof(Tileset_zone_2_act_1_fg) - (8 * 0x340), + .palette = Palette_zone_2_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_2_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_2_act_1_fg, + }, + .metatileMap = Map_zone_2_act_1_fg0, + .mapWidth = 108, + .mapHeight = 16, +}; + +ALIGNED(4) const struct MapHeader zone_2_act_1_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_2_act_1_fg, + .tilesSize = (u32)sizeof(Tileset_zone_2_act_1_fg) - (8 * 0x340), + .palette = Palette_zone_2_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_2_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_2_act_1_fg, + }, + .metatileMap = Map_zone_2_act_1_fg1, + .mapWidth = 108, + .mapHeight = 16, +}; + +const Collision CollHeader_zone_2_act_1_fg = { CollHeightMap_zone_2_act_1_fg, + CollTileRot_zone_2_act_1_fg, + Metatiles_zone_2_act_1_fg, + { Map_zone_2_act_1_fg0, Map_zone_2_act_1_fg1 }, + CollFlags_zone_2_act_1_fg, + 108, + 16, + 0x2880, + 0x0600 }; diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_2/act_1/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..a4de14a6e6 Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_2/act_1/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..bdccd102e7 Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_2/act_1/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..8a7f979f9e Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_2/act_1/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..61b8c959e1 --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {108,16} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_2/act_1/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..0d816fff43 Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/palette.pal b/sa1/data/maps/zone_2/act_1/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..c35f1696c4 --- /dev/null +++ b/sa1/data/maps/zone_2/act_1/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +41 123 41 +222 255 123 +180 222 90 +139 180 82 +106 148 65 +90 106 57 +238 238 222 +205 205 180 +189 180 131 +156 148 82 +123 106 49 +255 222 0 +255 156 0 +255 106 0 +189 82 0 +57 32 0 +41 123 41 +255 230 156 +180 164 98 +139 123 65 +90 82 32 +255 222 0 +255 156 0 +255 106 0 +197 82 0 +139 57 0 +49 16 0 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +255 255 65 +255 222 0 +222 180 0 +180 172 0 +98 57 0 +0 0 0 +222 230 164 +180 189 156 +123 123 82 +90 82 41 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +230 255 115 +189 213 106 +123 164 98 +82 131 98 +32 90 65 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 189 +205 197 123 +164 148 98 +123 98 74 +90 74 41 +41 123 41 +255 238 180 +230 197 148 +205 164 115 +172 131 106 +139 106 98 +115 90 90 +82 57 65 +0 0 0 +0 255 0 +0 255 0 +255 230 74 +255 180 0 +197 123 0 +98 57 0 +0 0 0 +41 123 41 +255 255 0 +255 172 0 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +41 123 41 +255 255 205 +213 205 205 +148 139 148 +82 74 82 +32 41 0 +255 230 115 +255 156 0 +197 82 0 +255 205 0 +238 148 0 +213 82 0 +156 57 0 +106 41 0 +49 16 0 +0 0 0 +41 123 41 +0 255 0 +0 255 0 +0 255 0 +255 255 222 +189 189 156 +148 148 115 +98 115 82 +49 65 41 +0 16 0 +255 238 156 +255 189 98 +205 148 16 +148 106 0 +90 57 0 +0 0 0 +0 0 0 +255 255 222 +213 213 172 +172 172 131 +139 131 90 +115 98 49 +74 65 32 +255 230 74 +255 180 0 +255 106 0 +197 82 0 +131 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +197 82 0 +148 82 0 +106 32 0 +65 32 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +238 139 24 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +172 82 41 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 255 +255 255 0 +139 148 16 +82 90 24 +255 0 0 +123 0 0 +0 255 255 +0 148 156 +0 255 0 +106 148 172 +74 106 123 +57 82 98 +41 57 74 +32 49 57 +16 24 32 +255 0 0 +255 0 0 +172 41 32 +255 255 0 +156 156 57 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 +230 0 0 +148 180 98 +98 139 82 +74 106 65 +32 65 49 +8 24 41 +197 123 32 +164 90 16 +148 82 24 +115 74 32 +98 57 32 +49 49 41 +172 172 123 +139 131 115 +115 106 82 +16 16 16 +230 0 0 +123 156 131 +106 139 123 +65 106 106 +32 65 65 +148 115 74 +123 90 57 +106 74 41 +82 49 24 +65 32 0 +148 139 115 +115 106 82 +98 90 65 +74 65 49 +57 49 41 +0 0 0 diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_2/act_1/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..d8d35f3521 Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_2/act_1/tilemaps/fg/tileset.png b/sa1/data/maps/zone_2/act_1/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..295cb55ccd Binary files /dev/null and b/sa1/data/maps/zone_2/act_1/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_2/act_2/entities/enemies.csv b/sa1/data/maps/zone_2/act_2/entities/enemies.csv new file mode 100644 index 0000000000..b49e6b0251 --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/entities/enemies.csv @@ -0,0 +1,13 @@ +Adv2,ENEMIES,36,8,,,,, +11,1,26,22,MOLE,-122,-54,0,0 +7,3,3,30,TENTOU,0,0,6,2 +7,3,17,30,TENTOU,0,0,6,2 +24,3,6,18,MOLE,-6,-114,0,0 +7,4,9,16,TENTOU,0,0,6,2 +18,4,17,24,FIREBALL,0,-6,2,8 +19,4,9,24,FIREBALL,0,-6,2,8 +21,4,30,16,MOLE,66,112,0,0 +2,5,22,20,MOLE,-86,76,0,0 +35,5,6,20,EGG_PRESS,-102,76,0,0 +5,6,26,0,MOLE,70,64,0,0 +6,6,6,0,MOLE,58,64,0,0 diff --git a/sa1/data/maps/zone_2/act_2/entities/interactables.csv b/sa1/data/maps/zone_2/act_2/entities/interactables.csv new file mode 100644 index 0000000000..6e612ea650 --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/entities/interactables.csv @@ -0,0 +1,178 @@ +Adv2,INTERACTABLES,36,8,,,,, +6,0,9,28,TRACK,27,0,18,3 +7,0,0,28,PIPE_EXIT,32,30,2,4 +9,0,31,24,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +9,0,31,26,TOGGLE_PLAYER_LAYER__BACK,0,0,2,22 +10,0,1,26,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,24 +10,0,15,28,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +10,0,18,28,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,4 +12,0,21,0,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +12,0,21,13,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +12,0,21,26,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +13,0,16,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +13,0,16,13,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +13,0,16,26,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +6,1,21,20,PIPE_ENTRANCE,0,10,1,0 +6,1,9,26,TRACK,0,-33,22,2 +6,1,21,26,TRACK,-15,0,10,1 +8,1,26,10,PLATFORM_THIN,0,0,2,6 +8,1,16,29,STEAM_EXHAUST,-16,-61,0,0 +12,1,21,7,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +12,1,12,17,SPRING__RIGHT,1,-49,0,0 +13,1,28,5,SPRING__LEFT,1,-37,0,0 +14,1,14,5,SPECIAL_SPRING,50,-37,0,0 +14,1,3,7,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +14,1,19,8,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +14,1,22,8,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +14,1,3,9,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +14,1,5,9,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +15,1,10,9,BOUNCE_BLOCK,22,-41,0,0 +15,1,3,18,BOUNCE_BLOCK,29,-50,0,0 +4,2,7,29,BOUNCE_BLOCK,121,-93,0,0 +6,2,29,14,SPIKES__HIDING_UP,35,-78,0,0 +7,2,13,8,TRAMPOLINE,19,-72,0,0 +9,2,31,8,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +9,2,31,10,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +10,2,1,10,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,24 +10,2,15,12,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +10,2,18,12,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +12,2,20,9,IA096,0,1,1,1 +12,2,18,10,TOGGLE__PLAYER_VISIBILITY,1,0,3,4 +12,2,20,10,MARBLE_TRACK__UNK,51,0,-76,0 +12,2,9,28,PLATFORM_THIN__FALLING,119,-92,0,0 +13,2,3,9,IA096,93,-73,0,0 +13,2,1,10,TOGGLE__PLAYER_VISIBILITY,1,0,3,4 +13,2,3,10,MARBLE_TRACK__UNK,27,0,120,0 +13,2,16,27,SPRING__LEFT,0,-91,0,0 +14,2,0,9,SPRING__UP,0,-73,0,0 +14,2,30,21,SPRING__UP,0,-85,0,0 +14,2,18,29,BOUNCE_BLOCK,46,-93,0,0 +15,2,10,15,SPRING__UP,1,-79,0,0 +24,2,20,12,PIPE_EXIT,-20,30,2,5 +24,2,20,24,TRACK,0,-15,10,4 +25,2,4,14,CHECKPOINT,3,-78,0,0 +25,2,18,21,IA096,-50,-85,0,0 +25,2,23,21,IA096,-55,-85,0,0 +25,2,16,22,TOGGLE__PLAYER_VISIBILITY,1,0,3,4 +25,2,18,22,MARBLE_TRACK__UNK,15,0,120,0 +25,2,21,22,TOGGLE__PLAYER_VISIBILITY,1,0,3,4 +25,2,23,22,MARBLE_TRACK__UNK,51,0,-76,0 +25,2,6,24,TRACK,-21,0,16,3 +26,2,15,20,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +26,2,15,22,TOGGLE_PLAYER_LAYER__BACK,0,0,2,26 +26,2,17,22,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,26 +26,2,31,24,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +27,2,20,12,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,6 +27,2,23,12,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +27,2,23,15,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +27,2,2,24,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +28,2,4,11,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +28,2,4,13,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +28,2,7,13,TOGGLE_PLAYER_LAYER__BACK,0,0,2,13 +28,2,31,18,PIPE_EXIT,97,30,3,6 +29,2,2,18,TRACK,-6,0,4,5 +3,3,29,4,BOUNCE_BLOCK,-125,-100,0,0 +4,3,11,10,PLATFORM_THIN,-3,0,5,2 +5,3,20,0,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +5,3,20,2,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,24 +5,3,23,2,TOGGLE_PLAYER_LAYER__BACK,0,0,2,22 +5,3,4,4,TOGGLE_PLAYER_LAYER__FRONT,-1,0,3,3 +5,3,7,4,TOGGLE_PLAYER_LAYER__BACK,-1,0,3,3 +7,3,19,18,CHECKPOINT,1,-114,0,0 +7,3,6,19,SPRING__UP,0,-115,0,0 +8,3,8,12,SWINGING_HOOK,0,-108,0,0 +8,3,26,12,SWINGING_HOOK,1,-108,0,0 +10,3,23,10,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +10,3,23,12,TOGGLE_PLAYER_LAYER__BACK,0,0,2,14 +10,3,25,12,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,14 +11,3,7,4,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +11,3,10,4,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +12,3,28,14,CONVEYOR_BELT,0,0,20,5 +12,3,24,26,CONVEYOR_BELT,1,0,20,5 +12,3,18,28,TOGGLE__PLAYER_VISIBILITY,0,0,3,4 +13,3,1,4,TOGGLE__PLAYER_VISIBILITY,0,0,3,4 +14,3,13,23,SWING_ROPE,-17,0,35,2 +15,3,24,0,HOOK_RAIL,1,-96,0,0 +17,3,20,0,HOOK_RAIL,0,-96,0,0 +17,3,12,13,SPRING__UP,0,-109,0,0 +17,3,0,25,SPRING__UP,0,-121,0,0 +18,3,22,18,SWINGING_HOOK,0,-114,0,0 +19,3,14,18,SWINGING_HOOK,1,-114,0,0 +20,3,20,15,PLATFORM_THIN,0,-4,2,6 +20,3,14,29,PLATFORM_THIN,-2,0,4,2 +22,3,31,8,CRANE_CLAW,0,0,30,2 +22,3,4,30,TOGGLE_PLAYER_LAYER__BACK,0,0,12,3 +24,3,30,10,PIPE_ENTRANCE,0,11,1,0 +24,3,30,17,TRACK,12,0,8,1 +24,3,22,19,SPRING__UP,0,-115,0,0 +25,3,16,4,TOGGLE__PLAYER_VISIBILITY,0,0,3,4 +25,3,6,17,TRACK,0,-28,19,2 +25,3,16,19,SPRING__RIGHT,0,-115,0,0 +27,3,12,3,TOGGLE_PLAYER_LAYER__FRONT,0,0,11,2 +27,3,23,3,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,18 +27,3,12,15,TOGGLE_PLAYER_LAYER__BACK,0,0,3,18 +27,3,23,21,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,18 +27,3,12,30,BOOSTER,-108,0,0,0 +28,3,4,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +28,3,7,0,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +28,3,4,3,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,18 +28,3,7,3,TOGGLE_PLAYER_LAYER__BACK,0,0,3,18 +28,3,22,16,TRACK,16,0,11,3 +28,3,4,21,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,18 +28,3,7,21,TOGGLE_PLAYER_LAYER__BACK,0,0,3,18 +29,3,2,16,TRACK,0,-33,22,4 +34,3,21,24,STAGE_GOAL,0,0,0,0 +6,4,4,29,SPRING__UP,0,99,0,0 +6,4,28,29,SPRING__UP,0,99,0,0 +7,4,21,16,SECURITY_GATE,1,0,14,6 +8,4,8,2,PLATFORM_THIN,0,-3,2,5 +8,4,30,17,SPRING__UP,0,111,0,0 +12,4,26,10,SPIKES__NORMAL_UP,102,118,0,0 +13,4,12,10,SPIKES__NORMAL_UP,84,118,0,0 +14,4,26,17,SPRING__LEFT,1,111,0,0 +15,4,10,10,SPIKES__HIDING_UP,22,118,0,0 +18,4,2,4,CHECKPOINT,2,124,0,0 +18,4,12,21,LAVA,0,0,12,4 +19,4,14,6,CONVEYOR_BELT,0,0,14,5 +19,4,4,21,LAVA,0,0,12,4 +19,4,31,26,PLATFORM_THIN__FALLING,-127,102,0,0 +20,4,8,16,SPRING__BIG_UPRIGHT,2,112,0,0 +20,4,26,29,SPRING__SMALL_UPLEFT,0,99,0,0 +21,4,24,4,TOGGLE_PLAYER_LAYER__BACK,0,0,3,16 +21,4,27,4,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +23,4,26,5,SPRING__RIGHT,0,123,0,0 +24,4,1,4,CHECKPOINT,4,124,0,0 +25,4,21,8,TOGGLE__PLAYER_VISIBILITY,0,0,3,4 +26,4,17,14,PIPE_ENTRANCE,0,10,1,0 +26,4,17,20,TRACK,73,0,49,1 +26,4,6,29,SPRING__UP,0,99,0,0 +28,4,22,20,TRACK,0,-39,26,2 +29,4,20,10,HOOK_RAIL,1,118,0,0 +34,4,21,12,STAGE_GOAL,0,0,0,0 +1,5,20,30,PLATFORM_THIN,0,0,3,2 +3,5,17,25,SWING_ROPE,-17,0,35,2 +5,5,30,15,SPRING__UP,0,81,0,0 +5,5,15,16,BOUNCE_BLOCK,81,80,0,0 +5,5,8,28,TOGGLE_PLAYER_LAYER__BACK,0,0,15,3 +7,5,21,8,BOOSTER,0,88,0,0 +8,5,6,11,PLATFORM_THIN,-4,0,6,2 +8,5,23,22,PLATFORM_THIN,0,0,2,6 +19,5,30,8,SPIKES__NORMAL_UP,-126,88,0,0 +20,5,12,9,SPRING__UP,0,87,0,0 +32,5,13,14,CHECKPOINT,5,82,0,0 +34,5,21,0,STAGE_GOAL,0,0,0,0 +34,5,21,20,STAGE_GOAL,1,0,0,0 +0,6,30,13,STEAM_EXHAUST,-30,51,0,0 +1,6,10,13,STEAM_EXHAUST,-42,51,0,0 +1,6,22,31,SPRING__RIGHT,0,33,0,0 +3,6,10,4,SPIKES__HIDING_UP,-106,60,0,0 +3,6,14,4,SPIKES__HIDING_UP,-110,60,0,0 +3,6,22,4,SPIKES__HIDING_UP,-118,60,0,0 +3,6,26,4,SPIKES__HIDING_UP,-122,60,0,0 +3,6,5,24,TRAMPOLINE,-101,40,0,0 +4,6,28,6,TOGGLE_PLAYER_LAYER__BACK,0,0,3,16 +4,6,31,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +4,6,4,19,SPRING__RIGHT,2,45,0,0 +6,6,12,7,SPRING__RIGHT,2,57,0,0 +8,6,11,4,PLATFORM_THIN,0,0,6,2 +8,6,26,12,SPIKES__HIDING_UP,-26,52,0,0 diff --git a/sa1/data/maps/zone_2/act_2/entities/itemboxes.csv b/sa1/data/maps/zone_2/act_2/entities/itemboxes.csv new file mode 100644 index 0000000000..a68564adaa --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/entities/itemboxes.csv @@ -0,0 +1,13 @@ +Adv2,ITEMS,36,8, +10,0,14,24,ONE_UP +11,1,16,4,RINGS_RANDOM +13,2,20,20,RINGS_RANDOM +21,2,10,26,SHIELD_MAGNETIC +9,3,10,30,SPEED_UP +18,3,10,6,RINGS_5 +25,3,2,6,SHIELD +12,4,2,4,RINGS_5 +26,4,2,28,RINGS_5 +1,6,18,24,RINGS_5 +3,6,18,4,SHIELD +8,6,30,12,INVINCIBILITY diff --git a/sa1/data/maps/zone_2/act_2/entities/rings.csv b/sa1/data/maps/zone_2/act_2/entities/rings.csv new file mode 100644 index 0000000000..8b668df62c --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/entities/rings.csv @@ -0,0 +1,206 @@ +Adv2,RINGS,36,8 +7,0,17,29 +7,0,21,29 +7,0,25,29 +10,0,16,31 +10,0,10,33 +10,0,22,33 +11,0,23,30 +11,0,26,30 +11,0,29,30 +7,1,2,13 +7,1,5,13 +7,1,8,13 +7,1,28,27 +7,1,32,27 +8,1,4,27 +8,1,8,27 +9,1,4,2 +9,1,8,2 +9,1,12,2 +10,1,8,7 +10,1,24,7 +11,1,6,31 +12,1,31,11 +12,1,27,13 +13,1,7,7 +13,1,3,9 +13,1,1,19 +13,1,5,21 +13,1,9,23 +13,1,13,25 +14,1,20,11 +14,1,14,13 +14,1,26,13 +14,1,12,19 +14,1,28,19 +3,2,29,27 +3,2,32,27 +4,2,8,21 +4,2,11,21 +4,2,14,21 +4,2,3,27 +5,2,18,20 +5,2,14,22 +5,2,10,24 +6,2,10,14 +6,2,6,16 +6,2,2,18 +7,2,5,30 +7,2,5,33 +9,2,21,15 +9,2,24,18 +9,2,27,21 +10,2,16,15 +10,2,10,17 +10,2,22,17 +10,2,8,23 +10,2,24,23 +11,2,5,3 +11,2,1,4 +12,2,28,19 +12,2,31,19 +13,2,13,3 +13,2,16,3 +13,2,19,3 +13,2,2,19 +21,2,20,25 +21,2,20,29 +21,2,20,33 +24,2,20,33 +24,2,23,33 +24,2,26,33 +26,2,32,27 +26,2,26,29 +27,2,24,15 +27,2,18,17 +27,2,30,17 +27,2,16,23 +27,2,32,23 +27,2,6,29 +4,3,32,15 +4,3,6,28 +5,3,8,7 +5,3,2,9 +5,3,14,9 +5,3,30,13 +5,3,16,15 +5,3,27,16 +6,3,1,10 +7,3,5,4 +7,3,25,13 +7,3,28,13 +7,3,31,13 +10,3,32,15 +11,3,8,7 +11,3,2,9 +11,3,14,9 +11,3,16,15 +12,3,15,17 +12,3,18,17 +12,3,21,17 +14,3,13,4 +14,3,14,8 +14,3,18,9 +14,3,1,22 +14,3,6,22 +14,3,11,22 +14,3,16,22 +14,3,21,22 +14,3,26,22 +15,3,29,8 +16,3,1,10 +16,3,5,12 +16,3,9,14 +16,3,32,15 +16,3,26,30 +17,3,12,9 +17,3,8,11 +17,3,4,13 +17,3,2,27 +17,3,6,29 +17,3,10,31 +17,3,14,33 +20,3,4,27 +20,3,7,27 +20,3,10,27 +21,3,8,12 +21,3,11,12 +21,3,14,12 +23,3,4,16 +23,3,9,16 +23,3,14,16 +23,3,19,16 +23,3,24,16 +26,3,24,3 +27,3,8,3 +27,3,31,24 +27,3,30,28 +27,3,26,29 +4,4,8,2 +4,4,14,4 +5,4,30,32 +6,4,4,14 +6,4,4,17 +6,4,4,20 +6,4,16,26 +6,4,14,32 +16,4,25,2 +16,4,21,3 +22,4,14,10 +22,4,13,14 +22,4,9,15 +24,4,12,5 +24,4,16,7 +24,4,20,10 +24,4,30,20 +25,4,1,23 +25,4,4,26 +29,4,29,20 +30,4,1,22 +30,4,5,24 +30,4,9,26 +0,5,27,22 +0,5,31,22 +0,5,29,25 +1,5,3,22 +1,5,1,25 +3,5,5,24 +3,5,10,24 +3,5,15,24 +3,5,20,24 +3,5,25,24 +3,5,30,24 +5,5,30,3 +5,5,30,6 +6,5,14,6 +6,5,16,12 +7,5,28,3 +7,5,31,3 +8,5,2,3 +8,5,21,8 +8,5,24,8 +8,5,27,8 +8,5,10,27 +8,5,13,27 +8,5,16,27 +30,5,26,3 +30,5,30,5 +31,5,2,7 +31,5,6,9 +33,5,3,15 +33,5,7,17 +33,5,11,19 +0,6,16,11 +0,6,19,11 +0,6,22,11 +1,6,32,29 +2,6,4,29 +2,6,8,29 +5,6,18,12 +5,6,16,16 +5,6,12,18 +7,6,9,8 +7,6,13,10 +7,6,17,12 +7,6,21,14 diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/bg/header.c b/sa1/data/maps/zone_2/act_2/tilemaps/bg/header.c new file mode 100644 index 0000000000..4e526801e1 --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_2_act_2_fg[]; +const u8 Tiles_zone_2_act_2_bg[] = INCBIN_U8("data/maps/zone_2/act_2/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_2_act_2_bg[] = INCBIN_U8("data/maps/zone_2/act_2/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_2_act_2_bg = { + .xTiles = 32, + .yTiles = 64, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_2_act_2_bg, + .tilesSize = sizeof(Tiles_zone_2_act_2_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_2_act_2_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_2_act_2_bg, +}; diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/bg/palette.pal b/sa1/data/maps/zone_2/act_2/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..c35f1696c4 --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +41 123 41 +222 255 123 +180 222 90 +139 180 82 +106 148 65 +90 106 57 +238 238 222 +205 205 180 +189 180 131 +156 148 82 +123 106 49 +255 222 0 +255 156 0 +255 106 0 +189 82 0 +57 32 0 +41 123 41 +255 230 156 +180 164 98 +139 123 65 +90 82 32 +255 222 0 +255 156 0 +255 106 0 +197 82 0 +139 57 0 +49 16 0 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +255 255 65 +255 222 0 +222 180 0 +180 172 0 +98 57 0 +0 0 0 +222 230 164 +180 189 156 +123 123 82 +90 82 41 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +230 255 115 +189 213 106 +123 164 98 +82 131 98 +32 90 65 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 189 +205 197 123 +164 148 98 +123 98 74 +90 74 41 +41 123 41 +255 238 180 +230 197 148 +205 164 115 +172 131 106 +139 106 98 +115 90 90 +82 57 65 +0 0 0 +0 255 0 +0 255 0 +255 230 74 +255 180 0 +197 123 0 +98 57 0 +0 0 0 +41 123 41 +255 255 0 +255 172 0 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +41 123 41 +255 255 205 +213 205 205 +148 139 148 +82 74 82 +32 41 0 +255 230 115 +255 156 0 +197 82 0 +255 205 0 +238 148 0 +213 82 0 +156 57 0 +106 41 0 +49 16 0 +0 0 0 +41 123 41 +0 255 0 +0 255 0 +0 255 0 +255 255 222 +189 189 156 +148 148 115 +98 115 82 +49 65 41 +0 16 0 +255 238 156 +255 189 98 +205 148 16 +148 106 0 +90 57 0 +0 0 0 +0 0 0 +255 255 222 +213 213 172 +172 172 131 +139 131 90 +115 98 49 +74 65 32 +255 230 74 +255 180 0 +255 106 0 +197 82 0 +131 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +197 82 0 +148 82 0 +106 32 0 +65 32 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +238 139 24 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +172 82 41 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 255 +255 255 0 +139 148 16 +82 90 24 +255 0 0 +123 0 0 +0 255 255 +0 148 156 +0 255 0 +106 148 172 +74 106 123 +57 82 98 +41 57 74 +32 49 57 +16 24 32 +255 0 0 +255 0 0 +172 41 32 +255 255 0 +156 156 57 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 +230 0 0 +148 180 98 +98 139 82 +74 106 65 +32 65 49 +8 24 41 +197 123 32 +164 90 16 +148 82 24 +115 74 32 +98 57 32 +49 49 41 +172 172 123 +139 131 115 +115 106 82 +16 16 16 +230 0 0 +123 156 131 +106 139 123 +65 106 106 +32 65 65 +148 115 74 +123 90 57 +106 74 41 +82 49 24 +65 32 0 +148 139 115 +115 106 82 +98 90 65 +74 65 49 +57 49 41 +0 0 0 diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_2/act_2/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..f9aa82cf78 Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/bg/tiles.png b/sa1/data/maps/zone_2/act_2/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..a24ff2c22b Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/flags.coll b/sa1/data/maps/zone_2/act_2/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..6e18df8a8f Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/header.c b/sa1/data/maps/zone_2/act_2/tilemaps/fg/header.c new file mode 100644 index 0000000000..92162232e5 --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_2_act_2_fg[] = INCBIN_U16("data/maps/zone_2/act_2/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_2_act_2_fg[] = INCBIN_U8("data/maps/zone_2/act_2/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_2_act_2_fg[] = INCBIN_S8("data/maps/zone_2/act_2/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_2_act_2_fg[] = INCBIN_U8("data/maps/zone_2/act_2/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_2_act_2_fg[] = INCBIN_U16("data/maps/zone_2/act_2/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_2_act_2_fg0[] = INCBIN_MAP("data/maps/zone_2/act_2/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_2_act_2_fg1[] = INCBIN_MAP("data/maps/zone_2/act_2/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_2_act_2_fg[] = INCBIN_U16("data/maps/zone_2/act_2/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_2_act_2_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x340, + .animFrameCount = 8, + .animDelay = 4, + .tiles = Tileset_zone_2_act_2_fg, + .tilesSize = (u32)sizeof(Tileset_zone_2_act_2_fg) - (8 * 0x340), + .palette = Palette_zone_2_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_2_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_2_act_2_fg, + }, + .metatileMap = Map_zone_2_act_2_fg0, + .mapWidth = 94, + .mapHeight = 20, +}; + +ALIGNED(4) const struct MapHeader zone_2_act_2_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_2_act_2_fg, + .tilesSize = (u32)sizeof(Tileset_zone_2_act_2_fg) - (8 * 0x340), + .palette = Palette_zone_2_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_2_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_2_act_2_fg, + }, + .metatileMap = Map_zone_2_act_2_fg1, + .mapWidth = 94, + .mapHeight = 20, +}; + +const Collision CollHeader_zone_2_act_2_fg = { CollHeightMap_zone_2_act_2_fg, + CollTileRot_zone_2_act_2_fg, + Metatiles_zone_2_act_2_fg, + { Map_zone_2_act_2_fg0, Map_zone_2_act_2_fg1 }, + CollFlags_zone_2_act_2_fg, + 94, + 20, + 0x2340, + 0x0780 }; diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_2/act_2/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..a4de14a6e6 Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_2/act_2/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..4065d42400 Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_2/act_2/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..33017a0166 Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_2/act_2/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..33c81ff4f7 --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {94,20} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_2/act_2/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..8b665cd6d4 Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/palette.pal b/sa1/data/maps/zone_2/act_2/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..c35f1696c4 --- /dev/null +++ b/sa1/data/maps/zone_2/act_2/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +41 123 41 +222 255 123 +180 222 90 +139 180 82 +106 148 65 +90 106 57 +238 238 222 +205 205 180 +189 180 131 +156 148 82 +123 106 49 +255 222 0 +255 156 0 +255 106 0 +189 82 0 +57 32 0 +41 123 41 +255 230 156 +180 164 98 +139 123 65 +90 82 32 +255 222 0 +255 156 0 +255 106 0 +197 82 0 +139 57 0 +49 16 0 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +255 255 65 +255 222 0 +222 180 0 +180 172 0 +98 57 0 +0 0 0 +222 230 164 +180 189 156 +123 123 82 +90 82 41 +230 255 222 +156 213 189 +82 164 156 +41 115 106 +24 32 32 +41 123 41 +230 255 115 +189 213 106 +123 164 98 +82 131 98 +32 90 65 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 189 +205 197 123 +164 148 98 +123 98 74 +90 74 41 +41 123 41 +255 238 180 +230 197 148 +205 164 115 +172 131 106 +139 106 98 +115 90 90 +82 57 65 +0 0 0 +0 255 0 +0 255 0 +255 230 74 +255 180 0 +197 123 0 +98 57 0 +0 0 0 +41 123 41 +255 255 0 +255 172 0 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +41 123 41 +255 255 205 +213 205 205 +148 139 148 +82 74 82 +32 41 0 +255 230 115 +255 156 0 +197 82 0 +255 205 0 +238 148 0 +213 82 0 +156 57 0 +106 41 0 +49 16 0 +0 0 0 +41 123 41 +0 255 0 +0 255 0 +0 255 0 +255 255 222 +189 189 156 +148 148 115 +98 115 82 +49 65 41 +0 16 0 +255 238 156 +255 189 98 +205 148 16 +148 106 0 +90 57 0 +0 0 0 +0 0 0 +255 255 222 +213 213 172 +172 172 131 +139 131 90 +115 98 49 +74 65 32 +255 230 74 +255 180 0 +255 106 0 +197 82 0 +131 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +197 82 0 +148 82 0 +106 32 0 +65 32 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +238 139 24 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +172 82 41 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 255 255 +255 255 0 +139 148 16 +82 90 24 +255 0 0 +123 0 0 +0 255 255 +0 148 156 +0 255 0 +106 148 172 +74 106 123 +57 82 98 +41 57 74 +32 49 57 +16 24 32 +255 0 0 +255 0 0 +172 41 32 +255 255 0 +156 156 57 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 +230 0 0 +148 180 98 +98 139 82 +74 106 65 +32 65 49 +8 24 41 +197 123 32 +164 90 16 +148 82 24 +115 74 32 +98 57 32 +49 49 41 +172 172 123 +139 131 115 +115 106 82 +16 16 16 +230 0 0 +123 156 131 +106 139 123 +65 106 106 +32 65 65 +148 115 74 +123 90 57 +106 74 41 +82 49 24 +65 32 0 +148 139 115 +115 106 82 +98 90 65 +74 65 49 +57 49 41 +0 0 0 diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_2/act_2/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..d8d35f3521 Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_2/act_2/tilemaps/fg/tileset.png b/sa1/data/maps/zone_2/act_2/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..295cb55ccd Binary files /dev/null and b/sa1/data/maps/zone_2/act_2/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_3/act_1/entities/enemies.csv b/sa1/data/maps/zone_3/act_1/entities/enemies.csv new file mode 100644 index 0000000000..319121968e --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/entities/enemies.csv @@ -0,0 +1,20 @@ +Adv2,ENEMIES,28,11,,,,, +5,0,20,9,SLOT,-4,0,11,2 +9,0,10,6,SLOT,-4,0,10,2 +11,0,2,22,HANABII,-4,0,9,2 +16,1,28,3,SLOT,-2,0,7,2 +17,1,18,2,HANABII,-3,0,9,2 +18,1,8,2,SLOT,-3,0,7,2 +12,2,30,24,PIERROT,-4,0,13,2 +8,3,0,22,SLOT,-3,0,8,2 +18,3,4,5,SLOT,-5,0,12,2 +18,3,29,5,SLOT,-5,0,12,2 +13,4,17,27,PIERROT,-5,0,14,2 +20,4,1,8,HANABII,-3,0,9,2 +10,5,1,18,PIERROT,-2,0,9,2 +18,5,26,6,PIERROT,-6,0,11,2 +12,6,10,13,SLOT,-5,0,10,2 +13,6,28,28,HANABII,-9,0,17,2 +19,6,23,10,PIERROT,-5,0,9,2 +21,6,28,23,SLOT,-5,0,11,2 +22,6,22,4,SLOT,-2,0,7,2 diff --git a/sa1/data/maps/zone_3/act_1/entities/interactables.csv b/sa1/data/maps/zone_3/act_1/entities/interactables.csv new file mode 100644 index 0000000000..0e17786016 --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/entities/interactables.csv @@ -0,0 +1,380 @@ +Adv2,INTERACTABLES,28,11,,,,, +1,0,17,18,PARTY_BALLOON,2,-18,0,0 +1,0,8,21,PARTY_BALLOON,0,-21,0,0 +3,0,23,12,BUMPER_ROUND__LINEAR,-119,-12,0,0 +3,0,31,12,BUMPER_ROUND__LINEAR,-127,-12,0,0 +4,0,5,12,BUMPER_ROUND__LINEAR,123,-12,0,0 +4,0,18,16,PLATFORM_THIN__FALLING,110,-16,0,0 +6,0,10,12,BUMPER_ROUND__LINEAR,54,-12,0,0 +7,0,23,21,BUMPER_ROUND__LINEAR,-3,0,5,2 +8,0,1,9,SEGA_SONIC_LETTER,0,0,0,0 +8,0,8,9,SEGA_SONIC_LETTER,1,0,30,0 +8,0,15,9,SEGA_SONIC_LETTER,2,0,60,0 +8,0,22,9,SEGA_SONIC_LETTER,3,0,90,0 +8,0,29,9,SEGA_SONIC_LETTER,4,0,120,0 +8,0,19,30,BUMPER_ROUND__LINEAR,-19,-30,0,0 +8,0,31,30,BUMPER_ROUND__LINEAR,-31,-30,0,0 +9,0,11,13,CONVEYOR_BELT,0,0,13,5 +9,0,24,13,CONVEYOR_BELT,1,0,13,5 +9,0,10,18,SPIKES__NORMAL_UP,-42,-18,0,0 +9,0,28,31,BUMPER_ROUND__LINEAR,-60,-31,0,0 +10,0,6,18,SPIKES__NORMAL_UP,-70,-18,0,0 +10,0,16,22,SPRING__BIG_UPRIGHT,0,-22,0,0 +11,0,29,26,BUMPER_ROUND__LINEAR,-125,-26,0,0 +12,0,8,26,BUMPER_ROUND__LINEAR,120,-26,0,0 +13,0,20,20,WALL_POLE__RIGHT,76,0,0,0 +14,0,14,12,CHECKPOINT,3,-12,0,0 +14,0,23,12,RED_FLAG,41,0,0,0 +15,0,19,12,RED_FLAG,13,0,0,0 +16,0,9,19,PARTY_BALLOON,2,-19,0,0 +16,0,24,22,PARTY_BALLOON,0,-22,0,0 +17,0,6,25,PARTY_BALLOON,1,-25,0,0 +18,0,26,18,BUMPER__HEXAGON,-4,0,5,2 +19,0,12,29,BUMPER_ROUND__LINEAR,-5,0,7,2 +20,0,30,12,SHIP_SWING,98,-12,0,0 +20,0,17,31,PARTY_BALLOON,0,-31,0,0 +20,0,29,31,PARTY_BALLOON,1,-31,0,0 +21,0,7,31,PARTY_BALLOON,2,-31,0,0 +4,1,4,4,SHIP_SWING,124,-36,0,0 +4,1,30,11,BUMPER_ROUND__LINEAR,98,-43,0,0 +4,1,19,23,SPRING__UP,1,-55,0,0 +5,1,14,4,WALL_POLE__RIGHT,82,-36,0,0 +5,1,6,11,BUMPER_ROUND__LINEAR,90,-43,0,0 +5,1,29,20,MARBLE_TRACK__ENTRANCE,80,0,64,0 +5,1,29,21,MARBLE_TRACK__DIR,5,0,60,30 +6,1,0,20,MARBLE_TRACK__DIR,76,39,60,31 +7,1,2,1,BUMPER_ROUND__LINEAR,0,0,2,6 +7,1,16,6,TRACK,12,1,12,0 +7,1,18,6,TOGGLE__PLAYER_VISIBILITY,1,0,9,4 +7,1,26,7,TRACK,-80,70,10,1 +7,1,16,8,TRACK,12,-1,12,0 +7,1,18,14,TRACK,10,0,10,2 +7,1,26,14,TRACK,-10,9,10,3 +7,1,18,20,TRACK,10,0,10,4 +7,1,26,20,TRACK,-10,9,10,5 +7,1,18,26,TRACK,10,0,10,6 +7,1,26,26,TRACK,-10,9,10,7 +8,1,21,18,FLIPPER,-21,-50,0,0 +8,1,30,29,BUMPER__HEXAGON,0,0,6,2 +9,1,13,2,PLATFORM_THIN,-8,0,10,2 +9,1,24,12,BUMPER_ROUND__LINEAR,-56,-44,0,0 +9,1,12,31,SPRING__BIG_UPLEFT,1,-63,0,0 +10,1,25,8,MARBLE_TRACK__ENTRANCE,60,0,56,0 +10,1,28,8,MARBLE_TRACK__DIR,51,25,50,31 +10,1,25,9,MARBLE_TRACK__DIR,6,0,30,30 +10,1,0,16,SPIKES__HIDING_UP,-64,-48,0,0 +11,1,22,4,SPIKES__HIDING_UP,-118,-36,0,0 +11,1,2,10,SPIKES__NORMAL_DOWN,-98,-42,0,0 +11,1,6,10,SPIKES__NORMAL_DOWN,-102,-42,0,0 +11,1,14,16,BUMPER_TRI__BIG,0,0,0,0 +11,1,22,22,SPIKES__NORMAL_DOWN,-118,-54,0,0 +11,1,26,22,SPIKES__NORMAL_DOWN,-122,-54,0,0 +11,1,13,30,PARTY_BALLOON,2,-62,0,0 +12,1,3,1,BUMPER_ROUND__LINEAR,0,-4,2,6 +12,1,20,31,BUMPER_ROUND__LINEAR,0,-5,2,6 +12,1,24,31,BUMPER_ROUND__LINEAR,0,0,2,6 +13,1,13,11,SPRING__UP,1,-43,0,0 +13,1,25,15,PARTY_BALLOON,0,-47,0,0 +13,1,28,24,PARTY_BALLOON,2,-56,0,0 +14,1,4,16,PARTY_BALLOON,1,-48,0,0 +14,1,22,25,MARBLE_TRACK__ENTRANCE,60,0,56,0 +14,1,26,25,MARBLE_TRACK__DIR,9,5,15,31 +14,1,22,26,MARBLE_TRACK__DIR,6,0,30,30 +15,1,2,28,SPIKES__NORMAL_DOWN,30,-60,0,0 +15,1,6,28,SPIKES__NORMAL_DOWN,26,-60,0,0 +15,1,10,28,SPIKES__NORMAL_DOWN,22,-60,0,0 +15,1,2,29,MARBLE_TRACK__UNK,74,32,35,0 +16,1,12,1,BUMPER_ROUND__CIRCULAR,0,6,7,2 +16,1,12,1,BUMPER_ROUND__CIRCULAR,6,6,7,2 +16,1,12,1,BUMPER_ROUND__LINEAR,-12,-33,0,0 +16,1,12,1,BUMPER_ROUND__CIRCULAR,4,6,7,2 +16,1,12,1,BUMPER_ROUND__CIRCULAR,2,6,7,2 +16,1,2,16,RED_FLAG,-2,0,0,0 +16,1,19,16,RED_FLAG,-19,0,0,0 +17,1,27,5,FLIPPER,-59,-37,0,0 +17,1,1,9,BUMPER_ROUND__LINEAR,-33,-41,0,0 +17,1,7,9,BUMPER_ROUND__LINEAR,-39,-41,0,0 +17,1,17,22,RED_FLAG,-49,0,0,0 +19,1,30,5,SPECIAL_SPRING,-126,-37,0,0 +19,1,28,20,RED_FLAG,-124,0,0,0 +20,1,3,5,FLIPPER,125,-37,0,0 +20,1,20,10,RED_FLAG,108,0,0,0 +21,1,24,6,TRACK,12,1,12,0 +21,1,26,6,TOGGLE__PLAYER_VISIBILITY,1,0,9,4 +21,1,24,8,TRACK,12,-1,12,0 +21,1,26,14,TRACK,10,0,10,2 +21,1,26,20,TRACK,10,0,10,4 +21,1,26,26,TRACK,10,0,10,6 +22,1,2,7,TRACK,-10,9,10,1 +22,1,2,14,TRACK,-10,9,10,3 +22,1,2,20,TRACK,-10,9,10,5 +22,1,2,26,TRACK,-10,9,10,7 +3,2,30,9,BUMPER_ROUND__LINEAR,-126,-73,0,0 +4,2,15,7,FLIPPER,0,-71,0,0 +4,2,5,9,BUMPER_ROUND__LINEAR,123,-73,0,0 +4,2,13,28,BUMPER_ROUND__LINEAR,115,-92,0,0 +4,2,19,28,BUMPER_ROUND__LINEAR,109,-92,0,0 +5,2,8,17,PLATFORM_THIN__FALLING,88,-81,0,0 +5,2,11,26,BUMPER_ROUND__LINEAR,85,-90,0,0 +5,2,15,26,BUMPER_ROUND__LINEAR,81,-90,0,0 +6,2,25,23,PLATFORM_THIN,0,0,8,2 +7,2,18,0,TRACK,10,0,10,8 +7,2,26,0,TRACK,-10,9,10,9 +7,2,18,6,TRACK,10,0,10,10 +7,2,26,6,TRACK,-10,9,10,11 +7,2,4,8,BUMPER_TRI__BIG,0,0,0,0 +7,2,18,12,TRACK,10,0,10,12 +7,2,26,12,TRACK,-10,9,10,13 +7,2,18,18,TRACK,10,0,10,14 +7,2,26,18,TRACK,-10,9,10,15 +7,2,18,24,TRACK,10,0,10,16 +7,2,26,24,TRACK,-10,9,10,17 +7,2,18,30,TRACK,10,0,10,18 +7,2,26,30,TRACK,-10,9,10,19 +8,2,11,24,MARBLE_TRACK__EXIT,-11,33,0,0 +8,2,9,25,MARBLE_TRACK__DIR,6,0,15,32 +8,2,14,31,CAROUSEL,-14,-95,0,0 +9,2,18,18,PLATFORM_SPIKED,1,0,5,2 +9,2,4,24,SPIKES__NORMAL_UP,-36,-88,0,0 +9,2,8,24,SPIKES__NORMAL_UP,-40,-88,0,0 +9,2,28,24,SPIKES__NORMAL_UP,-60,-88,0,0 +10,2,11,2,SPIKES__NORMAL_DOWN,-75,-66,0,0 +10,2,15,2,SPIKES__NORMAL_DOWN,-79,-66,0,0 +10,2,9,18,PLATFORM_SPIKED,1,0,4,2 +10,2,0,24,SPIKES__NORMAL_UP,-64,-88,0,0 +11,2,29,0,BUMPER_ROUND__LINEAR,0,-3,2,5 +11,2,2,3,BUMPER_ROUND__LINEAR,0,-67,0,0 +11,2,7,3,BUMPER_ROUND__LINEAR,-103,-67,0,0 +11,2,20,4,PARTY_BALLOON,1,-68,0,0 +11,2,9,21,FLIPPER,-105,-85,0,0 +12,2,15,0,MARBLE_TRACK__EXIT,113,37,0,0 +12,2,12,1,MARBLE_TRACK__DIR,6,0,15,36 +12,2,12,19,SPRING__BIG_UPRIGHT,1,-83,0,0 +14,2,21,5,PLATFORM_SQUARE,-8,0,9,2 +14,2,9,20,FLIPPER,55,-84,0,0 +14,2,25,22,BUMPER__HEXAGON,0,0,4,2 +14,2,18,28,BUMPER_ROUND__LINEAR,46,-92,0,0 +15,2,13,15,BUMPER_ROUND__LINEAR,19,-79,0,0 +16,2,13,30,BUMPER_ROUND__LINEAR,0,0,2,4 +18,2,9,6,TELEPORT_ORB,22,5,-112,-112 +18,2,26,11,PLATFORM_SQUARE,0,0,7,2 +18,2,23,17,PLATFORM_SQUARE,-7,0,8,2 +19,2,28,23,WALL_POLE__LEFT,-124,-87,0,0 +20,2,7,15,CONVEYOR_BELT,0,0,13,5 +20,2,19,15,CONVEYOR_BELT,0,0,13,5 +20,2,6,22,BUMPER_TRI__VERTICAL,0,-86,0,0 +20,2,8,22,BUMPER_TRI__VERTICAL,120,-86,0,0 +20,2,6,27,BUMPER_TRI__VERTICAL,0,-91,0,0 +20,2,8,27,BUMPER_TRI__VERTICAL,120,-91,0,0 +20,2,23,30,PLATFORM_SQUARE,0,0,8,2 +21,2,26,0,TRACK,10,0,10,8 +21,2,26,6,TRACK,10,0,10,10 +21,2,26,8,TOGGLE__PLAYER_VISIBILITY,0,0,8,2 +21,2,29,11,TRACK,0,6,10,127 +21,2,11,30,BUMPER_ROUND__LINEAR,85,-94,0,0 +22,2,2,0,TRACK,-10,9,10,9 +22,2,2,6,TRACK,-8,12,10,11 +3,3,24,0,BUMPER_TRI__BIG,-120,-96,0,0 +3,3,31,1,FLIPPER,-127,-97,0,0 +3,3,31,15,BUMPER_TRI__VERTICAL,-127,-111,0,0 +3,3,31,21,BUMPER_TRI__VERTICAL,-127,-117,0,0 +4,3,16,7,CONVEYOR_BELT,1,0,12,5 +4,3,14,25,BUMPER__HEXAGON,0,0,9,2 +5,3,12,14,PANEL_GATE__HORIZONTAL,1,-110,0,0 +6,3,23,30,SPRING__RIGHT,1,-126,0,0 +7,3,18,4,TRACK,10,0,10,20 +7,3,26,4,TRACK,-10,9,10,21 +7,3,18,10,TRACK,10,0,10,22 +7,3,26,10,TRACK,-10,9,10,23 +7,3,18,12,TOGGLE__PLAYER_VISIBILITY,0,0,9,2 +7,3,18,16,TRACK,0,6,10,127 +8,3,29,25,SEGA_SONIC_LETTER,6,0,0,0 +8,3,20,28,SEGA_SONIC_LETTER,5,0,0,0 +9,3,20,6,RED_FLAG,-52,-102,0,0 +9,3,29,18,PLATFORM_SQUARE,0,-2,2,4 +9,3,5,22,SEGA_SONIC_LETTER,7,0,0,0 +10,3,31,12,SPIKES__HIDING_DOWN,-95,-108,0,0 +10,3,14,24,CHECKPOINT,2,-120,0,0 +10,3,29,25,FLIPPER,-93,-121,0,0 +11,3,19,13,CONVEYOR_BELT,0,0,13,5 +11,3,31,13,CONVEYOR_BELT,0,0,13,5 +11,3,11,16,BUMPER_ROUND__LINEAR,-107,-112,0,0 +12,3,22,16,PLATFORM_THIN,-6,0,7,2 +13,3,0,21,BUMPER_ROUND__LINEAR,96,-117,0,0 +14,3,21,19,FLIPPER,43,-115,0,0 +15,3,3,30,CHECKPOINT,5,-126,0,0 +15,3,13,30,RED_FLAG,19,0,0,0 +17,3,26,14,PLATFORM_SPIKED,1,0,5,2 +17,3,12,20,SPIKES__NORMAL_UP,-44,-116,0,0 +17,3,16,20,SPIKES__NORMAL_UP,-48,-116,0,0 +18,3,18,14,PLATFORM_SPIKED,-5,0,5,2 +18,3,4,20,SPIKES__NORMAL_UP,-68,-116,0,0 +18,3,8,20,SPIKES__NORMAL_UP,-72,-116,0,0 +18,3,28,20,SPIKES__NORMAL_UP,-92,-116,0,0 +19,3,31,8,BARREL_OF_DOOM_MINI,-127,-104,0,0 +19,3,10,14,PLATFORM_SPIKED,1,0,5,2 +19,3,0,20,SPIKES__NORMAL_UP,-96,-116,0,0 +20,3,8,16,BUMPER_ROUND__LINEAR,120,-112,0,0 +20,3,8,20,BUMPER_ROUND__LINEAR,120,-116,0,0 +20,3,8,24,BUMPER_ROUND__LINEAR,120,-120,0,0 +21,3,7,2,BUMPER_ROUND__LINEAR,89,-98,0,0 +21,3,3,6,BUMPER_ROUND__LINEAR,93,-102,0,0 +3,4,30,16,BUMPER_TRI__BIG,-126,112,0,0 +4,4,9,19,FLIPPER,119,109,0,0 +4,4,31,20,BUMPER_ROUND__LINEAR,97,108,0,0 +5,4,14,2,TRACK,0,-24,20,0 +5,4,12,3,PANEL_GATE__HORIZONTAL,1,125,0,0 +5,4,29,5,BUMPER_TRI__HORIZONTAL,0,123,0,0 +5,4,15,12,PARTY_BALLOON,0,116,0,0 +5,4,20,14,PARTY_BALLOON,1,114,0,0 +5,4,7,20,BUMPER_ROUND__LINEAR,89,108,0,0 +5,4,24,21,BUMPER_ROUND__LINEAR,72,107,0,0 +6,4,12,4,BUMPER_TRI__BIG,0,0,0,0 +6,4,13,20,TRACK,14,0,10,0 +6,4,31,20,TRACK,14,0,10,127 +6,4,26,21,IA107,0,107,0,0 +6,4,26,25,TRACK,0,31,20,127 +6,4,0,29,WALL_POLE__RIGHT,64,99,0,0 +7,4,7,19,PANEL_GATE__VERTICAL,0,109,0,0 +7,4,28,29,SPRING__RIGHT,0,99,0,0 +8,4,7,0,SEGA_SONIC_LETTER,0,0,0,0 +9,4,12,0,WALL_POLE__RIGHT,-44,-128,0,0 +10,4,29,2,BUMPER_TRI__VERTICAL,-93,126,0,0 +10,4,29,8,BUMPER_TRI__VERTICAL,-93,120,0,0 +11,4,21,3,BUMPER__HEXAGON,-10,0,11,2 +11,4,9,23,FLIPPER,-105,105,0,0 +11,4,29,27,BUMPER_TRI__HORIZONTAL,-125,101,0,0 +12,4,13,7,PARTY_BALLOON,1,121,0,0 +12,4,1,17,BUMPER_ROUND__LINEAR,127,111,0,0 +12,4,12,17,BUMPER_ROUND__LINEAR,116,111,0,0 +12,4,22,17,BUMPER_ROUND__LINEAR,106,111,0,0 +12,4,3,27,BUMPER_TRI__HORIZONTAL,125,101,0,0 +12,4,9,27,BUMPER_TRI__HORIZONTAL,119,101,0,0 +12,4,15,27,BUMPER_TRI__HORIZONTAL,113,101,0,0 +12,4,21,27,BUMPER_TRI__HORIZONTAL,107,101,0,0 +13,4,28,16,BUMPER_TRI__BIG,0,0,0,0 +15,4,0,4,MARBLE_TRACK__DIR,-66,33,60,33 +16,4,10,1,BOWL,-10,127,0,0 +18,4,10,30,PLATFORM_SQUARE,-3,0,4,2 +19,4,15,11,CONVEYOR_BELT,0,0,13,5 +19,4,16,31,WALL_POLE__LEFT,-112,97,0,0 +20,4,8,11,CONVEYOR_BELT,1,0,13,5 +20,4,30,15,BUMPER__HEXAGON,-5,0,6,2 +21,4,12,23,CONVEYOR_BELT,1,0,13,5 +21,4,24,23,CONVEYOR_BELT,1,0,13,5 +22,4,0,16,BUMPER_ROUND__LINEAR,64,112,0,0 +22,4,19,16,BUMPER_ROUND__LINEAR,45,112,0,0 +22,4,4,17,CONVEYOR_BELT,1,0,13,5 +22,4,15,23,CONVEYOR_BELT,0,0,13,5 +22,4,27,23,CONVEYOR_BELT,0,0,13,5 +22,4,10,31,PLATFORM_SQUARE,0,0,10,2 +24,4,6,25,BOWL,-6,103,0,0 +5,5,7,14,RED_FLAG,89,0,0,0 +5,5,20,14,RED_FLAG,76,0,0,0 +6,5,24,19,PANEL_GATE__HORIZONTAL,0,77,0,0 +8,5,26,30,BUMPER_ROUND__LINEAR,-26,66,0,0 +9,5,24,20,BUMPER_TRI__BIG,-56,76,0,0 +9,5,24,20,BUMPER_TRI__BIG,0,0,0,0 +10,5,18,30,MARBLE_TRACK__DIR,12,6,12,35 +11,5,8,4,BUMPER_ROUND__LINEAR,-104,92,0,0 +11,5,31,25,FLIPPER,0,71,0,0 +12,5,0,21,CONVEYOR_BELT,1,0,13,5 +12,5,12,21,CONVEYOR_BELT,1,0,13,5 +13,5,1,0,MARBLE_TRACK__EXIT,95,40,1,0 +13,5,2,1,MARBLE_TRACK__DIR,-6,0,15,39 +13,5,9,12,BUMPER_TRI__VERTICAL,0,84,0,0 +13,5,9,17,BUMPER_TRI__VERTICAL,0,79,0,0 +13,5,28,20,WALL_BUMPER,3,0,12,4 +13,5,28,28,WALL_BUMPER,1,0,12,4 +14,5,20,15,WALL_POLE__LEFT,44,81,0,0 +14,5,30,24,BUMPER_ROUND__LINEAR,-7,0,9,2 +15,5,24,8,SPRING__LEFT,1,88,0,0 +15,5,2,24,BUMPER_ROUND__LINEAR,-7,0,9,2 +15,5,6,24,BUMPER_ROUND__LINEAR,-7,0,9,2 +18,5,12,20,WALL_POLE__RIGHT,-76,76,0,0 +19,5,26,15,SPRING__UP,0,81,0,0 +20,5,17,4,PLATFORM_SQUARE,0,0,6,2 +20,5,26,10,FLIPPER__VERTICAL,102,86,0,0 +23,5,12,20,SPIKES__NORMAL_DOWN,20,76,0,0 +23,5,16,20,SPIKES__NORMAL_DOWN,16,76,0,0 +7,6,22,0,RED_FLAG,10,0,0,0 +8,6,16,0,CHECKPOINT,1,64,0,0 +9,6,7,10,BUMPER_ROUND__CIRCULAR,2,6,6,2 +9,6,7,10,BUMPER_ROUND__LINEAR,-39,54,0,0 +9,6,7,10,BUMPER_ROUND__CIRCULAR,0,6,6,2 +9,6,7,10,BUMPER_ROUND__CIRCULAR,4,6,6,2 +9,6,7,10,BUMPER_ROUND__CIRCULAR,6,6,6,2 +9,6,8,26,FLIPPER__VERTICAL,-40,38,0,0 +9,6,25,28,TRACK,14,0,10,0 +10,6,28,4,MARBLE_TRACK__DIR,6,0,30,36 +10,6,31,4,MARBLE_TRACK__EXIT,-95,37,0,0 +10,6,19,27,PANEL_GATE__VERTICAL,0,37,0,0 +10,6,11,28,TRACK,14,0,10,127 +10,6,6,29,IA107,0,35,0,0 +11,6,4,0,CHECKPOINT,4,64,0,0 +11,6,17,0,BUMPER_ROUND__LINEAR,-113,64,0,0 +11,6,6,9,BUMPER_ROUND__LINEAR,-102,55,0,0 +11,6,24,28,SPIKES__NORMAL_UP,-120,36,0,0 +11,6,28,28,SPIKES__NORMAL_UP,-124,36,0,0 +12,6,6,22,PLATFORM_SPIKED,1,0,5,2 +12,6,30,22,PLATFORM_SPIKED,1,0,5,2 +12,6,16,28,SPIKES__NORMAL_UP,112,36,0,0 +12,6,20,28,SPIKES__NORMAL_UP,108,36,0,0 +13,6,16,4,SPRING__BIG_UPRIGHT,0,60,0,0 +13,6,25,11,PLATFORM_THIN,0,-2,2,4 +13,6,19,17,PARTY_BALLOON,0,47,0,0 +13,6,10,30,SPRING__RIGHT,1,34,0,0 +14,6,22,6,CHECKPOINT,6,58,0,0 +14,6,10,30,TRACK,12,11,20,0 +15,6,2,2,FLIPPER__VERTICAL,30,0,0,0 +16,6,23,19,BUMPER_ROUND__LINEAR,-23,45,0,0 +16,6,27,19,BUMPER_ROUND__LINEAR,-27,45,0,0 +17,6,20,0,PLATFORM_SQUARE,0,0,8,2 +17,6,7,1,CONVEYOR_BELT,0,0,13,5 +17,6,20,1,CONVEYOR_BELT,1,0,13,5 +17,6,4,10,PLATFORM_THIN,0,0,2,3 +18,6,12,0,WALL_POLE__RIGHT,-76,64,0,0 +18,6,30,11,CAROUSEL,-94,53,0,0 +18,6,12,14,WALL_POLE__RIGHT,-76,50,0,0 +18,6,10,25,PARTY_BALLOON,2,39,0,0 +20,6,8,17,WALL_POLE__LEFT,120,47,0,0 +20,6,22,18,PARTY_BALLOON,2,46,0,0 +20,6,30,20,PARTY_BALLOON,1,44,0,0 +21,6,5,18,PARTY_BALLOON,0,46,0,0 +21,6,21,31,SPRING__UP,1,33,0,0 +24,6,1,4,CHECKPOINT,7,60,0,0 +10,7,6,1,TRACK,0,31,20,127 +10,7,16,21,FLIPPER_SMALL_BLUE,80,34,0,0 +10,7,4,27,PANEL_GATE__HORIZONTAL,0,5,0,0 +11,7,23,20,MARBLE_TRACK__ENTRANCE,60,0,56,0 +11,7,23,21,MARBLE_TRACK__DIR,-40,0,30,30 +12,7,0,28,WALL_BUMPER,3,0,18,4 +12,7,18,28,WALL_BUMPER,3,0,18,4 +13,7,29,24,PARTY_BALLOON,2,8,0,0 +13,7,16,26,WALL_POLE__LEFT,80,6,0,0 +13,7,4,28,WALL_BUMPER,3,0,11,4 +13,7,23,31,PARTY_BALLOON,0,1,0,0 +14,7,19,7,TRACK,1,1,5,127 +14,7,22,9,TELEPORT_ORB,16,3,80,-80 +14,7,8,28,BUMPER_TRI__BIG,0,0,0,0 +15,7,31,20,TELEPORT_ORB,16,3,80,-80 +20,7,26,0,FLIPPER__VERTICAL,102,32,0,0 +21,7,16,4,SPIKES__HIDING_UP,80,28,0,0 +21,7,29,26,RED_FLAG,67,0,0,0 +24,7,23,16,STAGE_GOAL,0,1,0,0 +24,7,23,27,STAGE_GOAL,0,1,0,0 +10,8,28,11,WALL_POLE__LEFT,-92,-11,0,0 +10,8,16,26,RED_FLAG,-80,0,0,0 +11,8,8,8,WALL_BUMPER,3,0,24,4 +11,8,8,16,WALL_BUMPER,1,0,18,4 +11,8,26,16,WALL_BUMPER,1,0,18,4 +12,8,12,4,WALL_BUMPER,1,0,18,4 +12,8,30,4,WALL_BUMPER,1,0,17,4 +13,8,30,3,PARTY_BALLOON,2,-3,0,0 +13,8,23,9,PARTY_BALLOON,1,-9,0,0 +14,8,8,21,SPRING__LEFT,2,-21,0,0 +15,8,6,3,WALL_POLE__RIGHT,26,-3,0,0 +24,8,23,9,STAGE_GOAL,0,1,0,0 +24,8,23,22,STAGE_GOAL,0,1,0,0 +24,9,23,5,STAGE_GOAL,0,1,0,0 +24,9,23,18,STAGE_GOAL,1,1,0,0 diff --git a/sa1/data/maps/zone_3/act_1/entities/itemboxes.csv b/sa1/data/maps/zone_3/act_1/entities/itemboxes.csv new file mode 100644 index 0000000000..d89379385a --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/entities/itemboxes.csv @@ -0,0 +1,16 @@ +Adv2,ITEMS,28,11, +3,0,8,12,RINGS_10 +7,0,6,20,SPEED_UP +20,0,30,11,ONE_UP +13,1,18,16,INVINCIBILITY +6,2,31,29,INVINCIBILITY +21,2,4,14,ONE_UP +13,3,13,30,SPEED_UP +13,4,7,28,SHIELD_MAGNETIC +14,4,23,4,RINGS_RANDOM +15,5,30,2,RINGS_RANDOM +6,6,14,0,SPEED_UP +16,6,30,2,INVINCIBILITY +19,6,31,24,ONE_UP +20,6,30,6,RINGS_RANDOM +10,8,21,8,INVINCIBILITY diff --git a/sa1/data/maps/zone_3/act_1/entities/rings.csv b/sa1/data/maps/zone_3/act_1/entities/rings.csv new file mode 100644 index 0000000000..7254b1c054 --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/entities/rings.csv @@ -0,0 +1,352 @@ +Adv2,RINGS,28,11 +0,0,31,26 +1,0,2,28 +1,0,6,29 +2,0,15,29 +2,0,18,32 +4,0,29,9 +5,0,1,9 +5,0,5,9 +5,0,12,23 +5,0,12,28 +5,0,12,33 +6,0,28,5 +6,0,32,5 +7,0,4,5 +7,0,32,27 +7,0,32,31 +9,0,21,12 +9,0,24,12 +9,0,27,12 +9,0,1,27 +9,0,4,27 +9,0,7,27 +9,0,16,30 +9,0,19,30 +9,0,22,30 +11,0,4,3 +11,0,8,3 +11,0,12,3 +11,0,32,21 +11,0,11,24 +11,0,15,26 +11,0,19,28 +12,0,3,21 +12,0,6,21 +14,0,3,11 +14,0,7,11 +14,0,11,11 +15,0,5,11 +15,0,9,11 +15,0,13,11 +15,0,30,12 +15,0,30,32 +15,0,26,33 +16,0,1,15 +16,0,2,19 +16,0,1,29 +18,0,11,19 +18,0,14,19 +18,0,17,19 +18,0,11,22 +18,0,14,22 +18,0,17,22 +18,0,26,33 +20,0,15,13 +20,0,18,13 +20,0,21,13 +21,0,6,13 +21,0,9,13 +21,0,12,13 +2,1,21,3 +3,1,4,18 +3,1,7,21 +3,1,11,23 +3,1,15,23 +4,1,24,22 +4,1,26,26 +4,1,30,27 +7,1,30,2 +7,1,26,3 +7,1,7,9 +7,1,10,9 +7,1,13,9 +10,1,8,17 +10,1,12,19 +10,1,16,21 +11,1,5,28 +11,1,10,28 +11,1,15,28 +13,1,2,25 +13,1,5,25 +13,1,8,25 +14,1,3,11 +14,1,6,11 +14,1,9,11 +14,1,17,33 +14,1,21,33 +14,1,25,33 +15,1,20,11 +15,1,22,14 +15,1,26,15 +16,1,29,15 +17,1,1,16 +17,1,4,19 +18,1,22,3 +18,1,19,6 +19,1,9,6 +19,1,12,9 +19,1,15,12 +20,1,29,9 +20,1,12,10 +20,1,9,12 +20,1,6,15 +21,1,1,9 +21,1,5,9 +4,2,12,22 +4,2,17,22 +4,2,22,22 +5,2,4,22 +5,2,7,22 +5,2,10,22 +6,2,19,15 +6,2,23,15 +6,2,27,15 +6,2,31,15 +6,2,17,18 +6,2,21,18 +6,2,25,18 +6,2,29,18 +6,2,2,20 +6,2,5,23 +6,2,8,26 +7,2,1,18 +8,2,17,13 +8,2,20,13 +8,2,23,13 +8,2,21,30 +8,2,24,30 +8,2,27,30 +12,2,10,31 +12,2,13,31 +12,2,16,31 +13,2,4,25 +13,2,7,25 +13,2,10,25 +14,2,24,19 +14,2,27,19 +14,2,30,19 +15,2,29,27 +16,2,1,29 +16,2,5,31 +17,2,28,15 +17,2,30,18 +18,2,1,19 +19,2,31,25 +19,2,31,29 +19,2,31,33 +20,2,15,24 +20,2,18,24 +20,2,21,24 +21,2,25,28 +21,2,22,31 +4,3,8,21 +4,3,12,21 +4,3,16,21 +5,3,14,20 +5,3,14,24 +5,3,14,28 +7,3,7,29 +7,3,10,29 +7,3,13,29 +8,3,28,22 +8,3,31,22 +8,3,19,25 +8,3,22,25 +8,3,6,29 +8,3,9,29 +9,3,25,5 +9,3,29,5 +9,3,4,19 +9,3,7,19 +10,3,1,5 +10,3,21,22 +10,3,24,22 +10,3,27,22 +11,3,27,13 +11,3,30,13 +11,3,27,31 +11,3,31,31 +12,3,1,13 +14,3,10,13 +14,3,12,16 +14,3,16,17 +15,3,10,13 +15,3,8,16 +15,3,4,17 +15,3,22,29 +15,3,26,29 +15,3,30,29 +16,3,23,8 +16,3,27,10 +16,3,31,12 +21,3,19,2 +21,3,16,5 +21,3,13,8 +21,3,10,11 +21,3,7,14 +21,3,4,17 +5,4,11,10 +5,4,14,10 +5,4,17,10 +5,4,30,12 +5,4,30,16 +5,4,30,20 +6,4,26,33 +7,4,19,30 +8,4,30,27 +9,4,4,22 +9,4,2,26 +11,4,4,18 +11,4,8,20 +12,4,21,3 +12,4,25,3 +12,4,29,3 +12,4,2,23 +12,4,6,23 +12,4,10,23 +12,4,14,23 +12,4,18,23 +13,4,16,21 +13,4,19,21 +13,4,22,21 +19,4,21,23 +19,4,24,23 +20,4,14,32 +20,4,18,32 +20,4,22,32 +21,4,22,23 +21,4,25,23 +21,4,28,23 +22,4,6,11 +22,4,10,11 +22,4,14,11 +22,4,23,23 +22,4,26,23 +22,4,29,23 +4,5,14,7 +4,5,19,7 +4,5,23,10 +5,5,10,13 +5,5,13,13 +5,5,16,13 +6,5,26,5 +6,5,26,9 +7,5,19,2 +7,5,19,6 +7,5,31,31 +8,5,2,31 +8,5,5,31 +10,5,11,22 +10,5,15,24 +10,5,19,26 +11,5,10,10 +11,5,13,10 +12,5,10,11 +12,5,13,11 +12,5,16,11 +12,5,31,22 +13,5,3,24 +13,5,7,26 +14,5,25,17 +14,5,28,17 +14,5,31,17 +15,5,10,6 +15,5,13,6 +15,5,16,6 +15,5,16,33 +16,5,31,11 +16,5,10,17 +16,5,10,20 +16,5,10,23 +17,5,7,7 +17,5,3,9 +18,5,10,16 +18,5,10,19 +18,5,10,22 +20,5,13,13 +20,5,17,13 +20,5,21,13 +21,5,16,8 +21,5,14,12 +21,5,10,13 +22,5,18,26 +22,5,18,30 +23,5,15,29 +23,5,19,30 +23,5,22,32 +8,6,22,7 +8,6,22,11 +8,6,22,15 +9,6,12,29 +9,6,15,29 +9,6,18,29 +11,6,13,22 +11,6,16,22 +11,6,19,22 +12,6,3,16 +12,6,6,16 +12,6,9,16 +12,6,27,16 +12,6,30,16 +13,6,1,16 +15,6,14,4 +15,6,11,5 +16,6,26,15 +16,6,30,15 +16,6,11,20 +16,6,15,22 +16,6,19,24 +19,6,6,10 +19,6,9,10 +19,6,12,10 +20,6,25,30 +20,6,28,30 +20,6,31,30 +22,6,18,2 +22,6,11,26 +22,6,8,28 +22,6,4,29 +10,7,6,8 +10,7,6,12 +10,7,6,16 +12,7,12,21 +12,7,15,21 +12,7,18,21 +13,7,18,11 +13,7,18,15 +13,7,18,19 +22,7,8,30 +22,7,11,33 +10,8,6,9 +10,8,6,13 +10,8,6,17 +14,8,9,12 +14,8,12,12 +14,8,15,12 +19,8,19,7 +19,8,23,10 +19,8,27,13 +20,8,32,11 +21,8,8,9 +21,8,4,11 +22,8,14,4 +22,8,22,12 +22,8,25,15 +22,8,28,18 +23,8,5,27 +23,8,8,30 +23,8,11,33 +23,9,24,14 +23,9,27,16 +23,9,31,17 diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/bg/header.c b/sa1/data/maps/zone_3/act_1/tilemaps/bg/header.c new file mode 100644 index 0000000000..cfecd220c9 --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_3_act_1_fg[]; +const u8 Tiles_zone_3_act_1_bg[] = INCBIN_U8("data/maps/zone_3/act_1/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_3_act_1_bg[] = INCBIN_U8("data/maps/zone_3/act_1/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_3_act_1_bg = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_3_act_1_bg, + .tilesSize = sizeof(Tiles_zone_3_act_1_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_3_act_1_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_3_act_1_bg, +}; diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/bg/palette.pal b/sa1/data/maps/zone_3/act_1/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..43fea17a70 --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +49 115 139 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +255 255 115 +246 205 82 +230 156 65 +189 123 74 +148 90 90 +90 0 90 +255 230 156 +180 164 131 +106 98 106 +82 57 57 +255 255 255 +139 123 255 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 255 255 +189 180 164 +0 0 0 +74 49 180 +255 8 255 +164 0 164 +74 0 74 +0 255 0 +0 172 0 +0 82 0 +255 255 0 +255 115 0 +148 32 0 +238 65 32 +255 255 255 +189 189 180 +139 139 139 +98 98 98 +49 41 57 +41 0 106 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 255 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +255 180 139 +255 98 90 +172 32 16 +98 0 0 +255 230 0 +230 139 0 +156 57 0 +49 32 0 +0 0 0 +0 0 0 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 189 16 +230 139 0 +156 74 0 +123 197 74 +49 148 49 +0 74 0 +0 255 0 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 238 0 +255 156 0 +156 74 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +255 255 255 +0 255 255 +0 189 189 +0 123 123 +0 164 172 +0 123 123 +0 90 90 +0 57 57 +255 255 255 +164 180 164 +0 0 0 +255 0 0 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +0 0 0 +255 255 0 +246 197 0 +255 156 0 +255 106 0 +255 0 0 +123 74 123 +123 0 123 +139 0 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 255 0 +0 156 0 +255 164 115 +123 123 0 +123 74 0 +41 49 49 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +139 213 255 +65 164 255 +0 115 255 +255 156 255 +255 0 255 +255 0 131 +0 255 131 +0 222 115 +0 115 74 +0 8 0 +0 0 0 +255 255 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +255 255 255 +205 197 115 +115 98 65 +139 106 189 +115 82 164 +98 65 139 +74 41 115 +156 255 238 +115 197 172 +0 123 148 +24 115 41 +255 0 0 +189 123 0 +164 57 0 +24 0 57 +255 0 0 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +82 180 180 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +255 0 0 +255 255 255 +255 255 0 +255 189 0 +255 255 139 +197 197 115 +131 131 90 +74 74 57 +139 205 16 +90 148 57 +65 98 65 +41 16 65 +255 0 0 +98 123 74 +139 57 0 +0 0 0 diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_3/act_1/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..a193e8f0a9 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/bg/tiles.png b/sa1/data/maps/zone_3/act_1/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..c6d665ac93 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/flags.coll b/sa1/data/maps/zone_3/act_1/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..8f60182819 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/header.c b/sa1/data/maps/zone_3/act_1/tilemaps/fg/header.c new file mode 100644 index 0000000000..2dd605ef58 --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_3_act_1_fg[] = INCBIN_U16("data/maps/zone_3/act_1/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_3_act_1_fg[] = INCBIN_U8("data/maps/zone_3/act_1/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_3_act_1_fg[] = INCBIN_S8("data/maps/zone_3/act_1/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_3_act_1_fg[] = INCBIN_U8("data/maps/zone_3/act_1/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_3_act_1_fg[] = INCBIN_U16("data/maps/zone_3/act_1/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_3_act_1_fg0[] = INCBIN_MAP("data/maps/zone_3/act_1/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_3_act_1_fg1[] = INCBIN_MAP("data/maps/zone_3/act_1/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_3_act_1_fg[] = INCBIN_U16("data/maps/zone_3/act_1/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_3_act_1_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x100, + .animFrameCount = 4, + .animDelay = 4, + .tiles = Tileset_zone_3_act_1_fg, + .tilesSize = (u32)sizeof(Tileset_zone_3_act_1_fg) - (4 * 0x100), + .palette = Palette_zone_3_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_3_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_3_act_1_fg, + }, + .metatileMap = Map_zone_3_act_1_fg0, + .mapWidth = 74, + .mapHeight = 27, +}; + +ALIGNED(4) const struct MapHeader zone_3_act_1_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_3_act_1_fg, + .tilesSize = (u32)sizeof(Tileset_zone_3_act_1_fg) - (4 * 0x100), + .palette = Palette_zone_3_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_3_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_3_act_1_fg, + }, + .metatileMap = Map_zone_3_act_1_fg1, + .mapWidth = 74, + .mapHeight = 27, +}; + +const Collision CollHeader_zone_3_act_1_fg = { CollHeightMap_zone_3_act_1_fg, + CollTileRot_zone_3_act_1_fg, + Metatiles_zone_3_act_1_fg, + { Map_zone_3_act_1_fg0, Map_zone_3_act_1_fg1 }, + CollFlags_zone_3_act_1_fg, + 74, + 27, + 0x1BC0, + 0x0A20 }; diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_3/act_1/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..170e43bed1 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_3/act_1/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..0016a0d418 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_3/act_1/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..9981c79e40 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_3/act_1/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..aedbbb460b --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {74,27} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_3/act_1/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..161214572e Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/palette.pal b/sa1/data/maps/zone_3/act_1/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..43fea17a70 --- /dev/null +++ b/sa1/data/maps/zone_3/act_1/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +49 115 139 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +255 255 115 +246 205 82 +230 156 65 +189 123 74 +148 90 90 +90 0 90 +255 230 156 +180 164 131 +106 98 106 +82 57 57 +255 255 255 +139 123 255 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 255 255 +189 180 164 +0 0 0 +74 49 180 +255 8 255 +164 0 164 +74 0 74 +0 255 0 +0 172 0 +0 82 0 +255 255 0 +255 115 0 +148 32 0 +238 65 32 +255 255 255 +189 189 180 +139 139 139 +98 98 98 +49 41 57 +41 0 106 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 255 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +255 180 139 +255 98 90 +172 32 16 +98 0 0 +255 230 0 +230 139 0 +156 57 0 +49 32 0 +0 0 0 +0 0 0 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 189 16 +230 139 0 +156 74 0 +123 197 74 +49 148 49 +0 74 0 +0 255 0 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 238 0 +255 156 0 +156 74 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +255 255 255 +0 255 255 +0 189 189 +0 123 123 +0 164 172 +0 123 123 +0 90 90 +0 57 57 +255 255 255 +164 180 164 +0 0 0 +255 0 0 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +0 0 0 +255 255 0 +246 197 0 +255 156 0 +255 106 0 +255 0 0 +123 74 123 +123 0 123 +139 0 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 255 0 +0 156 0 +255 164 115 +123 123 0 +123 74 0 +41 49 49 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +139 213 255 +65 164 255 +0 115 255 +255 156 255 +255 0 255 +255 0 131 +0 255 131 +0 222 115 +0 115 74 +0 8 0 +0 0 0 +255 255 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +255 255 255 +205 197 115 +115 98 65 +139 106 189 +115 82 164 +98 65 139 +74 41 115 +156 255 238 +115 197 172 +0 123 148 +24 115 41 +255 0 0 +189 123 0 +164 57 0 +24 0 57 +255 0 0 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +82 180 180 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +255 0 0 +255 255 255 +255 255 0 +255 189 0 +255 255 139 +197 197 115 +131 131 90 +74 74 57 +139 205 16 +90 148 57 +65 98 65 +41 16 65 +255 0 0 +98 123 74 +139 57 0 +0 0 0 diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_3/act_1/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..7cc355ecf3 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_3/act_1/tilemaps/fg/tileset.png b/sa1/data/maps/zone_3/act_1/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..0870303ab0 Binary files /dev/null and b/sa1/data/maps/zone_3/act_1/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_3/act_2/entities/enemies.csv b/sa1/data/maps/zone_3/act_2/entities/enemies.csv new file mode 100644 index 0000000000..6fd7ba237b --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/entities/enemies.csv @@ -0,0 +1,28 @@ +Adv2,ENEMIES,30,11,,,,, +7,0,11,21,SLOT,-5,0,8,2 +8,0,20,16,HANABII,-8,0,15,2 +2,1,12,17,SLOT,-6,0,9,2 +4,1,24,23,SLOT,-6,0,13,2 +6,1,14,25,SLOT,-4,0,10,2 +12,1,6,2,HANABII,-4,0,13,2 +13,1,29,2,PIERROT,-4,0,5,2 +18,1,29,20,SLOT,-5,0,14,2 +16,2,17,13,SLOT,-3,0,11,2 +20,2,19,12,SLOT,-2,0,8,2 +21,2,20,12,SLOT,-3,0,8,2 +5,3,18,21,SLOT,-3,0,10,2 +9,3,16,21,SLOT,-2,0,9,2 +15,3,28,22,SLOT,-5,0,14,2 +2,4,14,17,SLOT,-3,0,10,2 +2,4,0,19,SLOT,-3,0,9,2 +3,4,28,26,HANABII,-4,0,11,2 +7,4,1,10,SLOT,-4,0,12,2 +17,5,28,2,PIERROT,-2,0,9,2 +7,6,27,9,SLOT,-2,0,9,2 +10,6,28,26,SLOT,-3,0,11,2 +19,6,11,30,SLOT,-5,0,11,2 +11,7,13,20,PIERROT,-8,0,15,2 +22,7,21,3,SLOT,-6,0,13,2 +17,8,29,6,HANABII,-6,0,12,2 +29,8,30,26,EGG_BALL,66,-26,0,0 +14,9,26,25,SLOT,-5,0,12,2 diff --git a/sa1/data/maps/zone_3/act_2/entities/interactables.csv b/sa1/data/maps/zone_3/act_2/entities/interactables.csv new file mode 100644 index 0000000000..918b8271af --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/entities/interactables.csv @@ -0,0 +1,453 @@ +Adv2,INTERACTABLES,30,11,,,,, +7,0,25,8,BUMPER_ROUND__LINEAR,7,-8,0,0 +7,0,28,24,WALL_POLE__RIGHT,4,-24,0,0 +9,0,25,31,FLIPPER,-57,-31,0,0 +10,0,27,13,CONVEYOR_BELT,0,0,13,5 +10,0,22,18,PLATFORM_THIN,0,0,2,4 +11,0,26,12,SPIKES__HIDING_UP,-122,-12,0,0 +11,0,7,13,CONVEYOR_BELT,0,0,13,5 +11,0,31,13,CONVEYOR_BELT,0,0,13,5 +12,0,11,13,CONVEYOR_BELT,0,0,13,5 +13,0,27,19,PLATFORM_THIN,-5,0,7,2 +13,0,10,23,SPIKES__NORMAL_LEFT,86,-23,0,0 +13,0,10,27,SPIKES__NORMAL_LEFT,86,-27,0,0 +14,0,10,15,PLATFORM_THIN,0,0,6,2 +15,0,4,15,SHIP_SWING,28,-15,0,0 +16,0,28,15,BUMPER_ROUND__LINEAR,-28,-15,0,0 +16,0,8,26,BUMPER_ROUND__LINEAR,-8,-26,0,0 +16,0,8,30,BUMPER_ROUND__LINEAR,-8,-30,0,0 +17,0,20,2,SPIKES__NORMAL_LEFT,-52,-2,0,0 +17,0,20,6,SPIKES__NORMAL_LEFT,-52,-6,0,0 +17,0,11,9,PARTY_BALLOON,0,-9,0,0 +17,0,2,15,BUMPER_ROUND__LINEAR,-34,-15,0,0 +17,0,11,21,PARTY_BALLOON,1,-21,0,0 +17,0,24,30,BREAKABLE_WALL,0,-30,0,0 +18,0,12,2,SPIKES__NORMAL_RIGHT,-76,-2,0,0 +18,0,12,6,SPIKES__NORMAL_RIGHT,-76,-6,0,0 +19,0,17,7,SHIP_SWING,-113,-7,0,0 +19,0,3,25,CONVEYOR_BELT,0,0,13,5 +19,0,15,25,CONVEYOR_BELT,0,0,13,5 +20,0,17,24,CHECKPOINT,6,-24,0,0 +20,0,5,28,PLATFORM_THIN,0,0,5,2 +21,0,6,23,CAROUSEL,90,-23,0,0 +28,0,15,1,STAGE_GOAL,0,0,0,0 +28,0,15,17,STAGE_GOAL,0,0,0,0 +3,1,13,22,PARTY_BALLOON,1,-54,0,0 +3,1,4,28,PARTY_BALLOON,0,-60,0,0 +3,1,11,29,CONVEYOR_BELT,0,0,13,5 +3,1,23,29,CONVEYOR_BELT,0,0,13,5 +4,1,5,24,PARTY_BALLOON,2,-56,0,0 +5,1,27,16,PARTY_BALLOON,1,-48,0,0 +5,1,18,25,PARTY_BALLOON,1,-57,0,0 +5,1,5,28,PARTY_BALLOON,2,-60,0,0 +6,1,9,19,PARTY_BALLOON,2,-51,0,0 +6,1,0,25,PARTY_BALLOON,0,-57,0,0 +7,1,14,17,SPRING__UP,0,-49,0,0 +7,1,4,26,WALL_POLE__RIGHT,28,-58,0,0 +7,1,28,28,BUMPER_TRI__BIG,4,0,0,0 +8,1,20,16,BUMPER_TRI__BIG,-20,0,0,0 +8,1,17,20,MARBLE_TRACK__ENTRANCE,60,0,56,0 +8,1,20,20,MARBLE_TRACK__DIR,76,38,60,31 +8,1,17,21,MARBLE_TRACK__DIR,5,0,60,30 +8,1,8,22,BUMPER_TRI__BIG,-8,0,0,0 +8,1,29,27,PARTY_BALLOON,1,-59,0,0 +8,1,21,30,PARTY_BALLOON,0,-62,0,0 +9,1,4,25,PARTY_BALLOON,2,-57,0,0 +9,1,30,28,BUMPER_TRI__BIG,0,0,0,0 +10,1,21,4,SEGA_SONIC_LETTER,0,2,0,0 +10,1,29,4,SEGA_SONIC_LETTER,5,2,0,0 +10,1,4,16,SPRING__LEFT,1,-48,0,0 +11,1,5,4,SEGA_SONIC_LETTER,6,2,0,0 +11,1,13,4,SEGA_SONIC_LETTER,7,2,0,0 +11,1,30,10,SPIKES__HIDING_UP,-126,-42,0,0 +12,1,25,8,BUMPER_TRI__VERTICAL,103,-40,0,0 +12,1,25,14,BUMPER_TRI__VERTICAL,103,-46,0,0 +13,1,9,2,BUMPER_TRI__VERTICAL,0,-34,0,0 +13,1,7,22,BUMPER_ROUND__LINEAR,89,-54,0,0 +13,1,10,27,BUMPER_ROUND__LINEAR,86,-59,0,0 +14,1,27,4,CHECKPOINT,1,-36,0,0 +14,1,18,23,SPRING__UP,0,-55,0,0 +14,1,6,28,SPIKES__NORMAL_UP,58,-60,0,0 +15,1,0,5,CONVEYOR_BELT,1,0,13,5 +15,1,12,5,CONVEYOR_BELT,1,0,13,5 +16,1,23,5,FLIPPER,-23,-37,0,0 +16,1,27,29,CONVEYOR_BELT,0,0,13,5 +17,1,6,12,BUMPER__HEXAGON,0,0,9,2 +17,1,27,17,BUMPER_TRI__HORIZONTAL,0,-49,0,0 +17,1,7,29,CONVEYOR_BELT,0,0,13,5 +18,1,0,17,BUMPER_TRI__HORIZONTAL,0,-49,0,0 +18,1,5,17,BUMPER_TRI__HORIZONTAL,0,-49,0,0 +19,1,5,11,PLATFORM_THIN,0,0,9,2 +19,1,22,23,WALL_POLE__RIGHT,-118,-55,0,0 +20,1,7,9,FLIPPER,0,-41,0,0 +20,1,4,28,SPRING__DOWN,1,-60,0,0 +22,1,16,16,BUMPER_TRI__BIG,48,0,0,0 +22,1,24,28,PARTY_BALLOON,2,-60,0,0 +24,1,12,16,BUMPER_TRI__BIG,0,0,0,0 +28,1,15,0,STAGE_GOAL,0,0,0,0 +28,1,15,15,STAGE_GOAL,0,0,0,0 +1,2,28,0,BUMPER_ROUND__LINEAR,-60,-64,0,0 +1,2,5,21,FLIPPER,-37,-85,0,0 +1,2,24,26,RED_FLAG,-56,-90,0,0 +1,2,10,29,BOWL,-42,-93,0,0 +3,2,23,14,BUMPER_ROUND__CIRCULAR,2,6,5,2 +3,2,23,14,BUMPER_ROUND__LINEAR,2,-78,0,0 +3,2,23,14,BUMPER_ROUND__CIRCULAR,6,6,5,2 +4,2,28,8,SPRING__RIGHT,2,-72,0,0 +5,2,26,4,BUMPER_ROUND__LINEAR,0,0,8,2 +6,2,24,5,WALL_POLE__LEFT,40,-69,0,0 +7,2,1,18,BUMPER_ROUND__LINEAR,0,0,2,5 +7,2,1,22,BUMPER_ROUND__LINEAR,0,0,2,5 +7,2,1,26,BUMPER_ROUND__LINEAR,0,0,2,5 +8,2,13,7,BUMPER_ROUND__LINEAR,-13,-71,0,0 +9,2,12,5,PLATFORM_THIN,0,0,8,2 +10,2,19,18,MARBLE_TRACK__EXIT,-83,33,0,0 +10,2,16,19,MARBLE_TRACK__DIR,6,0,30,32 +11,2,14,12,PLATFORM_SPIKED,0,0,6,2 +11,2,0,18,SPIKES__NORMAL_UP,-96,-82,0,0 +11,2,4,18,SPIKES__NORMAL_UP,-100,-82,0,0 +11,2,24,18,SPIKES__NORMAL_UP,-120,-82,0,0 +11,2,28,18,SPIKES__NORMAL_UP,-124,-82,0,0 +12,2,6,12,PLATFORM_SPIKED,0,0,6,2 +12,2,20,20,SPIKES__NORMAL_DOWN,108,-84,0,0 +12,2,24,20,SPIKES__NORMAL_DOWN,104,-84,0,0 +15,2,9,3,BUMPER_TRI__HORIZONTAL,0,-67,0,0 +15,2,14,3,BUMPER_TRI__HORIZONTAL,0,-67,0,0 +15,2,19,3,BUMPER_TRI__HORIZONTAL,0,-67,0,0 +15,2,9,19,BUMPER_TRI__HORIZONTAL,23,-83,0,0 +15,2,14,19,BUMPER_TRI__HORIZONTAL,18,-83,0,0 +15,2,19,19,BUMPER_TRI__HORIZONTAL,13,-83,0,0 +16,2,4,2,BUMPER_TRI__BIG,0,0,0,0 +16,2,4,21,CONVEYOR_BELT,1,0,13,5 +16,2,15,21,CONVEYOR_BELT,0,0,13,5 +17,2,22,8,SPIKES__HIDING_UP,-54,-72,0,0 +17,2,26,8,SPIKES__NORMAL_UP,-58,-72,0,0 +17,2,30,8,SPIKES__HIDING_UP,-62,-72,0,0 +17,2,17,21,BARREL_OF_DOOM_MINI,-49,-85,0,0 +17,2,14,29,BOWL,-46,-93,0,0 +18,2,18,4,PLATFORM_THIN__FALLING,-82,-68,0,0 +18,2,2,8,SPIKES__NORMAL_UP,-66,-72,0,0 +18,2,6,8,SPIKES__HIDING_UP,0,-72,0,0 +18,2,10,8,SPIKES__NORMAL_UP,-74,-72,0,0 +18,2,29,23,BUMPER_ROUND__CIRCULAR,6,6,10,2 +18,2,29,23,BUMPER_ROUND__CIRCULAR,2,6,9,2 +18,2,29,23,BUMPER_ROUND__CIRCULAR,0,6,9,2 +18,2,29,23,BUMPER_ROUND__CIRCULAR,4,6,9,2 +18,2,29,23,BUMPER_ROUND__LINEAR,0,0,0,0 +20,2,8,26,BUMPER_TRI__BIG,0,0,0,0 +22,2,24,4,PARTY_BALLOON,2,-68,0,0 +22,2,17,8,PARTY_BALLOON,0,-72,0,0 +22,2,24,11,PARTY_BALLOON,1,-75,0,0 +22,2,17,20,RED_FLAG,47,0,0,0 +24,2,2,24,MARBLE_TRACK__ENTRANCE,60,0,56,0 +24,2,6,24,MARBLE_TRACK__DIR,9,5,15,31 +24,2,2,25,MARBLE_TRACK__DIR,6,0,30,30 +24,2,14,28,MARBLE_TRACK__UNK,68,32,30,0 +28,2,15,1,STAGE_GOAL,0,0,0,0 +28,2,15,16,STAGE_GOAL,0,0,0,0 +1,3,23,19,BUMPER_TRI__HORIZONTAL,0,-115,0,0 +1,3,28,19,BUMPER_TRI__HORIZONTAL,0,-115,0,0 +3,3,28,6,BREAKABLE_WALL,0,-102,0,0 +3,3,8,17,BUMPER__HEXAGON,-5,0,7,2 +3,3,0,25,CONVEYOR_BELT,1,0,13,5 +3,3,11,25,CONVEYOR_BELT,0,0,13,5 +8,3,9,1,FLIPPER,-9,-97,0,0 +8,3,31,1,FLIPPER,0,-97,0,0 +8,3,9,12,BUMPER_TRI__VERTICAL,-9,-108,0,0 +8,3,23,17,PARTY_BALLOON,2,-113,0,0 +8,3,9,18,BUMPER_TRI__VERTICAL,-9,-114,0,0 +8,3,31,24,PARTY_BALLOON,0,-120,0,0 +8,3,9,29,FLIPPER,-9,-125,0,0 +9,3,4,18,PARTY_BALLOON,2,-114,0,0 +10,3,27,1,CONVEYOR_BELT,0,0,13,5 +10,3,27,21,BUMPER_ROUND__LINEAR,-91,-117,0,0 +10,3,9,24,SPIKES__NORMAL_DOWN,-73,-120,0,0 +10,3,13,24,SPIKES__NORMAL_DOWN,-77,-120,0,0 +10,3,27,27,BUMPER_ROUND__LINEAR,-91,-123,0,0 +11,3,7,1,CONVEYOR_BELT,0,0,13,5 +11,3,12,13,PARTY_BALLOON,1,-109,0,0 +11,3,8,22,BUMPER_ROUND__LINEAR,-4,0,6,2 +12,3,31,0,RED_FLAG,97,-96,0,0 +12,3,24,6,SPRING__LEFT,0,-102,0,0 +15,3,15,27,BARREL_OF_DOOM_MINI,17,-123,0,0 +15,3,23,31,CONVEYOR_BELT,0,0,13,5 +16,3,2,1,PLATFORM_SQUARE,-6,0,8,2 +16,3,12,18,BUMPER_ROUND__LINEAR,-12,-114,0,0 +16,3,19,18,BUMPER_ROUND__LINEAR,-19,-114,0,0 +16,3,26,18,BUMPER_TRI__HORIZONTAL,-26,-114,0,0 +16,3,31,18,BUMPER_TRI__HORIZONTAL,-31,-114,0,0 +16,3,26,20,BUMPER_TRI__HORIZONTAL,0,-116,0,0 +16,3,31,20,BUMPER_TRI__HORIZONTAL,0,-116,0,0 +17,3,2,0,BUMPER_TRI__BIG,0,0,0,0 +17,3,7,31,CONVEYOR_BELT,0,0,13,5 +19,3,26,11,PLATFORM_THIN,-5,0,6,2 +19,3,4,27,SPRING__BIG_UPRIGHT,1,-123,0,0 +20,3,11,6,SPIKES__NORMAL_DOWN,117,-102,0,0 +20,3,15,6,SPIKES__NORMAL_DOWN,113,-102,0,0 +20,3,9,14,BUMPER_ROUND__LINEAR,-7,0,9,2 +20,3,21,14,BUMPER_ROUND__LINEAR,0,-3,2,5 +20,3,6,24,CHECKPOINT,5,-120,0,0 +21,3,0,12,WALL_BUMPER,3,0,24,4 +21,3,24,12,WALL_BUMPER,3,0,24,4 +21,3,0,20,WALL_BUMPER,1,0,24,4 +21,3,24,20,WALL_BUMPER,1,0,24,4 +28,3,15,0,STAGE_GOAL,0,0,0,0 +28,3,15,16,STAGE_GOAL,0,0,0,0 +1,4,17,5,FLIPPER,-49,123,0,0 +1,4,28,5,CONVEYOR_BELT,1,0,13,5 +2,4,25,1,BUMPER_ROUND__LINEAR,-89,127,0,0 +2,4,7,5,CONVEYOR_BELT,0,0,13,5 +3,4,1,8,BUMPER_ROUND__LINEAR,-97,120,0,0 +3,4,8,8,BUMPER_ROUND__LINEAR,-104,120,0,0 +4,4,16,16,BUMPER_TRI__BIG,0,0,0,0 +5,4,20,22,BUMPER_TRI__BIG,0,0,0,0 +5,4,1,31,PARTY_BALLOON,2,97,0,0 +6,4,31,26,TOGGLE_PLAYER_LAYER__BACK,0,0,3,10 +7,4,31,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,19 +7,4,2,26,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,10 +8,4,18,23,SPRING__UP,2,105,0,0 +9,4,14,21,IA107,3,107,0,0 +9,4,14,25,TRACK,0,25,13,127 +9,4,12,31,PANEL_GATE__HORIZONTAL,0,97,0,0 +10,4,27,1,BUMPER_ROUND__LINEAR,-91,127,0,0 +10,4,15,19,PANEL_GATE__VERTICAL,1,109,0,0 +10,4,13,20,TRACK,-32,0,20,0 +11,4,19,5,FLIPPER,0,123,0,0 +11,4,4,17,FLIPPER__VERTICAL,-100,111,0,0 +11,4,27,20,TELEPORT_ORB,12,4,-120,64 +13,4,6,4,SPIKES__NORMAL_DOWN,90,124,0,0 +13,4,8,16,SEGA_SONIC_LETTER,0,2,0,0 +13,4,13,16,SEGA_SONIC_LETTER,5,2,15,0 +13,4,18,16,SEGA_SONIC_LETTER,6,2,30,0 +13,4,23,16,SEGA_SONIC_LETTER,7,2,45,0 +14,4,2,15,BUMPER_TRI__HORIZONTAL,62,113,0,0 +14,4,7,15,BUMPER_TRI__HORIZONTAL,57,113,0,0 +14,4,12,15,BUMPER_TRI__HORIZONTAL,52,113,0,0 +14,4,18,16,CHECKPOINT,2,112,0,0 +15,4,13,29,FLIPPER,19,99,0,0 +16,4,4,28,FERRIS_WHEEL,8,5,11,2 +16,4,4,28,FERRIS_WHEEL,12,5,11,2 +16,4,4,28,FERRIS_WHEEL,0,5,11,2 +16,4,4,28,FERRIS_WHEEL,4,5,11,2 +17,4,11,4,SPIKES__NORMAL_DOWN,-43,124,0,0 +17,4,15,4,SPIKES__NORMAL_DOWN,-47,124,0,0 +17,4,0,14,BUMPER_ROUND__LINEAR,-32,114,0,0 +17,4,8,14,BUMPER_ROUND__LINEAR,-40,114,0,0 +19,4,3,29,CONVEYOR_BELT,0,0,13,5 +19,4,28,30,TRACK,12,1,12,0 +19,4,30,30,TOGGLE__PLAYER_VISIBILITY,1,0,8,4 +21,4,13,8,BUMPER_ROUND__LINEAR,83,120,0,0 +21,4,18,8,BUMPER_ROUND__LINEAR,78,120,0,0 +21,4,17,24,PARTY_BALLOON,0,104,0,0 +21,4,29,24,PARTY_BALLOON,1,104,0,0 +22,4,3,10,PLATFORM_SQUARE,0,0,6,2 +22,4,28,16,BUMPER_TRI__BIG,0,0,0,0 +22,4,9,24,PARTY_BALLOON,1,104,0,0 +24,4,13,14,MARBLE_TRACK__DIR,-96,48,75,33 +28,4,15,1,STAGE_GOAL,0,0,0,0 +28,4,15,20,STAGE_GOAL,0,0,0,0 +1,5,16,2,SPRING__RIGHT,1,94,0,0 +3,5,31,28,RED_FLAG,-127,0,0,0 +4,5,15,1,PARTY_BALLOON,0,95,0,0 +4,5,25,2,PARTY_BALLOON,1,94,0,0 +6,5,30,31,CAROUSEL,34,65,0,0 +8,5,29,0,MARBLE_TRACK__DIR,6,0,60,34 +9,5,0,1,MARBLE_TRACK__DIR,76,37,65,35 +9,5,14,17,IA107,1,79,0,0 +10,5,31,30,MARBLE_TRACK__EXIT,-95,37,0,0 +10,5,28,31,MARBLE_TRACK__DIR,6,-1,30,36 +12,5,27,14,RED_FLAG,101,0,0,0 +13,5,14,15,SPRING__UP,1,81,0,0 +13,5,18,15,SPRING__UP,2,81,0,0 +13,5,22,15,SPRING__UP,1,81,0,0 +13,5,26,15,SPRING__UP,2,81,0,0 +15,5,11,21,CONVEYOR_BELT,0,0,13,5 +15,5,10,26,SPIKES__NORMAL_UP,22,70,0,0 +16,5,28,8,FERRIS_WHEEL,10,5,2,10 +16,5,28,8,FERRIS_WHEEL,14,5,2,10 +16,5,28,8,FERRIS_WHEEL,2,5,2,11 +16,5,28,8,FERRIS_WHEEL,6,5,2,10 +17,5,19,5,FLIPPER,0,91,0,0 +18,5,30,6,BUMPER_ROUND__LINEAR,-94,90,0,0 +18,5,13,31,BUMPER_TRI__VERTICAL,-77,65,0,0 +19,5,28,0,TRACK,12,-1,12,0 +19,5,30,6,TRACK,10,0,10,2 +19,5,6,9,BUMPER_ROUND__LINEAR,-102,87,0,0 +19,5,30,12,TRACK,10,0,10,4 +19,5,30,18,TRACK,10,0,10,6 +19,5,3,21,CONVEYOR_BELT,0,0,13,5 +19,5,30,24,TRACK,10,0,10,8 +19,5,30,30,TRACK,10,0,20,10 +20,5,6,0,TRACK,-10,9,10,1 +20,5,6,6,TRACK,-10,9,10,3 +20,5,6,12,TRACK,-10,9,10,5 +20,5,6,18,TRACK,-10,9,10,7 +20,5,6,24,TRACK,-10,9,10,9 +20,5,2,29,TOGGLE__PLAYER_VISIBILITY,0,0,5,3 +20,5,4,30,TRACK,4,0,5,0 +20,5,6,30,TRACK,4,0,5,127 +20,5,4,31,TRACK,4,0,5,0 +20,5,6,31,TRACK,4,0,5,127 +21,5,2,4,BUMPER_ROUND__LINEAR,0,0,0,0 +21,5,11,4,BUMPER_ROUND__LINEAR,85,92,0,0 +21,5,27,21,BUMPER_TRI__HORIZONTAL,0,75,0,0 +22,5,16,3,BUMPER_ROUND__LINEAR,48,93,0,0 +22,5,24,3,BUMPER_ROUND__LINEAR,0,0,0,0 +22,5,1,18,MARBLE_TRACK__EXIT,63,40,1,0 +22,5,2,19,MARBLE_TRACK__DIR,-6,0,30,39 +22,5,1,21,BUMPER_TRI__HORIZONTAL,0,75,0,0 +24,5,15,15,SEGA_SONIC_LETTER,0,6,0,0 +24,5,22,15,SEGA_SONIC_LETTER,1,6,15,0 +24,5,29,15,SEGA_SONIC_LETTER,2,6,30,0 +24,5,1,16,PLATFORM_SQUARE,-5,0,7,2 +25,5,4,15,SEGA_SONIC_LETTER,3,6,45,0 +25,5,11,15,SEGA_SONIC_LETTER,4,6,60,0 +25,5,1,29,BUMPER_ROUND__LINEAR,-33,67,0,0 +25,5,5,29,BUMPER_ROUND__LINEAR,-37,67,0,0 +25,5,9,29,BUMPER_ROUND__LINEAR,-41,67,0,0 +25,5,17,30,FLIPPER,4,6,-16,0 +28,5,15,4,STAGE_GOAL,0,0,0,0 +28,5,15,21,STAGE_GOAL,0,0,0,0 +7,6,16,9,WALL_POLE__LEFT,16,55,0,0 +7,6,27,19,FLIPPER,0,45,0,0 +8,6,2,0,BUMPER_ROUND__LINEAR,0,0,9,2 +8,6,5,22,MARBLE_TRACK__ENTRANCE,60,0,56,0 +8,6,8,22,MARBLE_TRACK__DIR,76,37,80,31 +8,6,5,23,MARBLE_TRACK__DIR,5,0,30,30 +8,6,20,29,MARBLE_TRACK__DIR,14,0,30,32 +9,6,0,29,FLIPPER_SMALL_BLUE,80,33,1,0 +11,6,23,26,PARTY_BALLOON,1,38,0,0 +11,6,31,27,BUMPER_TRI__VERTICAL,0,37,0,0 +12,6,15,21,PLATFORM_SQUARE,0,0,6,2 +13,6,16,7,CONVEYOR_BELT,1,0,13,5 +13,6,2,10,PLATFORM_SPIKED,1,0,6,2 +13,6,14,12,SPIKES__NORMAL_UP,82,52,0,0 +13,6,4,24,BUMPER_TRI__BIG,92,0,0,0 +13,6,18,30,CHECKPOINT,4,34,0,0 +14,6,13,26,BUMPER_ROUND__LINEAR,51,38,0,0 +14,6,13,30,BUMPER_ROUND__LINEAR,51,34,0,0 +15,6,9,8,PARTY_BALLOON,2,56,0,0 +15,6,23,14,PLATFORM_SQUARE,0,0,7,2 +15,6,16,27,PLATFORM_SQUARE,-6,0,8,2 +15,6,1,30,BUMPER_TRI__VERTICAL,31,34,0,0 +16,6,16,7,SPRING__UP,2,57,0,0 +16,6,21,7,SPRING__UP,2,57,0,0 +16,6,26,7,SPRING__UP,2,57,0,0 +16,6,31,7,SPRING__UP,2,57,0,0 +16,6,7,12,SPIKES__NORMAL_UP,-7,52,0,0 +17,6,26,9,BOWL,-58,55,0,0 +18,6,13,4,BUMPER_TRI__VERTICAL,-77,60,0,0 +18,6,13,9,BUMPER_TRI__VERTICAL,-77,55,0,0 +18,6,25,19,FLIPPER,-89,45,0,0 +19,6,6,1,BUMPER_ROUND__LINEAR,-102,63,0,0 +19,6,28,2,SPIKES__NORMAL_LEFT,-124,62,0,0 +19,6,18,12,SPIKES__NORMAL_UP,-114,52,0,0 +20,6,2,23,WALL_POLE__RIGHT,126,41,0,0 +21,6,13,1,FLIPPER,83,63,0,0 +21,6,30,3,BUMPER__HEXAGON,0,0,5,2 +21,6,26,15,BUMPER_ROUND__LINEAR,70,49,0,0 +21,6,2,18,TRACK,0,24,15,0 +21,6,21,25,FLIPPER__VERTICAL,75,39,0,0 +22,6,15,1,FLIPPER,0,63,0,0 +22,6,3,15,BUMPER_ROUND__LINEAR,61,49,0,0 +24,6,1,13,FLIPPER,-1,51,0,0 +28,6,15,4,STAGE_GOAL,0,0,0,0 +28,6,15,20,STAGE_GOAL,0,0,0,0 +8,7,2,0,FLIPPER__VERTICAL,-2,32,0,0 +9,7,0,4,SPRING__LEFT,0,28,0,0 +10,7,29,5,FLIPPER,-93,27,0,0 +11,7,31,1,BUMPER_TRI__VERTICAL,0,31,0,0 +11,7,10,4,BUMPER_ROUND__LINEAR,-106,28,0,0 +11,7,20,4,BUMPER_ROUND__LINEAR,-116,28,0,0 +12,7,23,17,CONVEYOR_BELT,0,0,13,5 +12,7,19,20,PARTY_BALLOON,1,12,0,0 +12,7,8,28,SPIKES__NORMAL_UP,120,4,0,0 +13,7,25,2,MARBLE_TRACK__ENTRANCE,60,0,56,0 +13,7,25,3,MARBLE_TRACK__DIR,8,2,30,1 +13,7,30,3,MARBLE_TRACK__DIR,76,38,60,31 +13,7,29,15,BUMPER_TRI__VERTICAL,67,17,0,0 +13,7,29,20,BUMPER_TRI__VERTICAL,67,12,0,0 +13,7,6,22,SPIKES__NORMAL_UP,90,10,0,0 +13,7,14,23,SPRING__UP,1,9,0,0 +14,7,10,6,PLATFORM_THIN,0,0,4,2 +14,7,9,21,BUMPER_ROUND__CIRCULAR,4,6,7,2 +14,7,9,21,BUMPER_ROUND__CIRCULAR,6,6,7,2 +14,7,9,21,BUMPER_ROUND__LINEAR,55,11,0,0 +14,7,9,21,BUMPER_ROUND__CIRCULAR,2,6,7,2 +14,7,9,21,BUMPER_ROUND__CIRCULAR,0,6,7,2 +15,7,1,3,BUMPER_TRI__VERTICAL,31,29,0,0 +15,7,1,8,BUMPER_TRI__VERTICAL,31,24,0,0 +15,7,24,11,CONVEYOR_BELT,1,0,13,5 +15,7,14,22,BUMPER_ROUND__LINEAR,18,10,0,0 +15,7,14,28,BUMPER_ROUND__LINEAR,18,4,0,0 +16,7,3,3,BUMPER_TRI__VERTICAL,0,29,0,0 +16,7,3,8,BUMPER_TRI__VERTICAL,0,24,0,0 +18,7,23,5,CONVEYOR_BELT,0,0,13,5 +19,7,31,10,BARREL_OF_DOOM_MINI,-127,22,0,0 +19,7,3,17,CONVEYOR_BELT,0,0,13,5 +19,7,24,17,PLATFORM_THIN__FALLING,-120,15,0,0 +21,7,22,7,PANEL_GATE__VERTICAL,0,25,0,0 +21,7,7,8,TRACK,20,0,15,127 +21,7,2,9,IA107,2,23,0,0 +21,7,30,25,BOWL,66,7,0,0 +21,7,6,28,SPIKES__NORMAL_DOWN,90,4,0,0 +21,7,10,28,SPIKES__NORMAL_DOWN,86,4,0,0 +22,7,25,10,SPIKES__NORMAL_UP,39,22,0,0 +22,7,15,22,RED_FLAG,49,10,0,0 +23,7,13,3,BUMPER_TRI__VERTICAL,0,29,0,0 +23,7,13,8,BUMPER_TRI__VERTICAL,0,24,0,0 +23,7,13,13,BUMPER_TRI__VERTICAL,0,19,0,0 +23,7,20,16,BUMPER_TRI__BIG,0,0,0,0 +24,7,28,16,BUMPER_ROUND__LINEAR,-28,16,0,0 +28,7,15,3,STAGE_GOAL,0,0,0,0 +28,7,15,17,STAGE_GOAL,0,0,0,0 +8,8,20,2,SPRING__RIGHT,0,-2,0,0 +11,8,8,8,SPRING__RIGHT,-104,-8,0,0 +13,8,17,24,BUMPER_TRI__VERTICAL,79,-24,0,0 +13,8,17,29,BUMPER_TRI__VERTICAL,79,-29,0,0 +14,8,11,15,SPRING__UP,0,-15,0,0 +14,8,15,15,FLIPPER,49,-15,0,0 +14,8,26,28,BUMPER__HEXAGON,0,0,8,2 +15,8,14,2,BUMPER_ROUND__LINEAR,18,-2,0,0 +15,8,5,15,FLIPPER,0,-15,0,0 +15,8,9,15,SPRING__UP,0,-15,0,0 +16,8,23,0,TELEPORT_ORB,16,3,-128,-64 +16,8,4,6,MARBLE_TRACK__DIR,6,0,30,32 +16,8,7,6,MARBLE_TRACK__EXIT,0,33,0,0 +16,8,21,17,PLATFORM_SQUARE,0,0,7,2 +16,8,8,26,SPIKES__HIDING_UP,-8,-26,0,0 +16,8,3,29,BUMPER_TRI__VERTICAL,0,-29,0,0 +17,8,0,20,TRACK,11,18,15,0 +18,8,4,30,PLATFORM_THIN,0,0,2,4 +19,8,16,6,SPRING__BIG_UPRIGHT,0,-6,0,0 +19,8,22,18,PLATFORM_SPIKED,-5,0,7,2 +19,8,8,24,SPIKES__NORMAL_UP,-104,-24,0,0 +19,8,12,24,SPIKES__NORMAL_UP,-108,-24,0,0 +20,8,14,18,PLATFORM_SPIKED,-5,0,7,2 +20,8,0,24,SPIKES__NORMAL_UP,-128,-24,0,0 +20,8,4,24,SPIKES__NORMAL_UP,124,-24,0,0 +20,8,24,24,SPIKES__NORMAL_UP,104,-24,0,0 +20,8,28,24,SPIKES__NORMAL_UP,100,-24,0,0 +22,8,16,14,BUMPER_TRI__BIG,0,0,0,0 +24,8,10,9,SPRING__UP,2,-9,0,0 +25,8,18,26,CHECKPOINT,8,-26,0,0 +28,8,15,0,STAGE_GOAL,0,0,0,0 +28,8,15,14,STAGE_GOAL,0,0,0,0 +28,8,15,26,STAGE_GOAL,1,0,0,0 +29,8,13,15,PLATFORM_THIN,83,-15,0,0 +14,9,14,13,FLIPPER,50,-45,0,0 +15,9,6,13,FLIPPER,0,-45,0,0 +17,9,30,3,PANEL_GATE__VERTICAL,0,-35,0,0 +17,9,15,4,TRACK,20,0,15,1 +17,9,10,5,IA107,2,-37,0,0 +18,9,12,0,WALL_BUMPER,4,0,24,4 +18,9,12,8,WALL_BUMPER,2,0,24,4 +19,9,4,0,WALL_BUMPER,4,0,24,4 +19,9,4,8,WALL_BUMPER,2,0,24,4 +19,9,30,16,BARREL_OF_DOOM_MINI,-126,-48,0,0 +21,9,24,12,SPRING__RIGHT,1,-44,0,0 +22,9,3,12,CHECKPOINT,7,-44,0,0 +23,9,27,4,TELEPORT_ORB,23,5,104,96 +14,10,26,4,TELEPORT_ORB,17,9,8,-32 +17,10,8,4,SPIKES__NORMAL_RIGHT,1,-68,0,0 +18,10,22,4,SPIKES__NORMAL_UP,-86,-68,0,0 diff --git a/sa1/data/maps/zone_3/act_2/entities/itemboxes.csv b/sa1/data/maps/zone_3/act_2/entities/itemboxes.csv new file mode 100644 index 0000000000..d8571ae98f --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/entities/itemboxes.csv @@ -0,0 +1,28 @@ +Adv2,ITEMS,30,11, +8,0,6,18,SPEED_UP +13,0,13,18,SHIELD_MAGNETIC +13,1,21,28,SHIELD +16,1,16,4,RINGS_5 +18,1,6,4,INVINCIBILITY +19,1,25,16,SHIELD +23,1,21,28,RINGS_RANDOM +6,2,17,2,RINGS_RANDOM +9,2,21,14,SHIELD +13,2,1,8,RINGS_5 +17,2,2,26,RINGS_RANDOM +14,3,28,12,INVINCIBILITY +21,4,2,22,ONE_UP +22,4,26,10,RINGS_RANDOM +1,5,27,2,SHIELD +11,5,28,20,INVINCIBILITY +19,5,19,20,SPEED_UP +20,5,26,12,RINGS_RANDOM +22,5,31,13,SHIELD_MAGNETIC +8,7,4,28,SPEED_UP +17,7,26,10,SHIELD +12,8,30,2,RINGS_RANDOM +13,8,1,2,RINGS_RANDOM +13,8,31,20,RINGS_10 +15,8,21,20,RINGS_10 +21,8,8,26,RINGS_RANDOM +20,9,18,18,SHIELD_MAGNETIC diff --git a/sa1/data/maps/zone_3/act_2/entities/rings.csv b/sa1/data/maps/zone_3/act_2/entities/rings.csv new file mode 100644 index 0000000000..03083d3bc0 --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/entities/rings.csv @@ -0,0 +1,399 @@ +Adv2,RINGS,30,11 +7,0,26,14 +7,0,26,18 +7,0,26,22 +8,0,32,12 +9,0,4,12 +9,0,8,12 +11,0,2,13 +11,0,5,13 +11,0,8,13 +11,0,2,23 +11,0,5,23 +11,0,8,23 +11,0,11,23 +11,0,2,26 +11,0,5,26 +11,0,8,26 +11,0,11,26 +12,0,10,13 +12,0,13,13 +12,0,16,13 +14,0,20,14 +14,0,23,14 +14,0,26,14 +15,0,13,14 +15,0,16,14 +15,0,19,14 +16,0,29,11 +16,0,32,11 +17,0,3,11 +18,0,32,6 +19,0,3,6 +19,0,6,6 +19,0,29,6 +19,0,32,6 +20,0,3,6 +1,1,12,23 +1,1,15,23 +1,1,18,23 +1,1,32,29 +1,1,32,33 +3,1,18,12 +3,1,21,12 +3,1,24,12 +3,1,18,15 +3,1,21,15 +3,1,24,15 +6,1,13,17 +6,1,17,17 +6,1,21,17 +7,1,5,14 +7,1,8,14 +7,1,11,14 +10,1,32,15 +11,1,4,15 +11,1,8,15 +11,1,12,15 +14,1,18,4 +14,1,18,8 +14,1,18,12 +15,1,12,21 +15,1,15,21 +15,1,18,21 +17,1,25,27 +17,1,28,27 +17,1,5,28 +17,1,9,28 +17,1,13,28 +18,1,23,2 +18,1,26,2 +18,1,29,2 +18,1,3,27 +18,1,6,27 +19,1,20,9 +19,1,20,13 +19,1,20,17 +22,1,32,23 +22,1,32,27 +22,1,32,31 +0,2,26,18 +0,2,29,18 +0,2,32,18 +1,2,32,5 +3,2,19,25 +3,2,28,25 +3,2,24,27 +5,2,10,7 +5,2,14,9 +5,2,17,12 +6,2,30,11 +6,2,26,31 +7,2,1,11 +7,2,4,11 +7,2,8,31 +8,2,18,9 +8,2,21,9 +8,2,24,9 +9,2,11,25 +9,2,7,27 +9,2,3,29 +10,2,23,24 +10,2,19,27 +10,2,18,33 +11,2,11,7 +11,2,14,7 +11,2,17,7 +11,2,12,23 +11,2,16,23 +11,2,20,23 +12,2,3,7 +12,2,6,7 +12,2,9,7 +12,2,6,23 +12,2,10,23 +12,2,14,23 +13,2,14,3 +13,2,14,6 +13,2,14,9 +15,2,10,12 +15,2,14,12 +15,2,18,12 +16,2,4,30 +16,2,8,30 +16,2,12,30 +19,2,23,30 +19,2,27,30 +19,2,31,30 +19,2,23,33 +19,2,27,33 +19,2,31,33 +20,2,4,3 +20,2,4,7 +20,2,4,11 +21,2,23,19 +21,2,27,19 +21,2,31,19 +3,3,14,11 +3,3,17,11 +3,3,20,11 +3,3,2,25 +3,3,6,25 +3,3,10,25 +4,3,24,15 +4,3,28,17 +4,3,32,19 +5,3,4,21 +5,3,24,31 +5,3,28,33 +6,3,27,4 +7,3,7,4 +7,3,1,5 +8,3,17,22 +8,3,17,25 +8,3,17,28 +9,3,28,4 +9,3,28,8 +9,3,28,12 +10,3,19,6 +10,3,23,10 +11,3,5,18 +11,3,9,18 +11,3,13,18 +12,3,3,5 +12,3,6,5 +12,3,9,5 +15,3,15,6 +15,3,15,10 +15,3,15,14 +16,3,16,29 +16,3,16,32 +17,3,14,23 +17,3,14,26 +17,3,14,29 +18,3,17,3 +18,3,21,7 +18,3,25,11 +20,3,12,23 +20,3,16,23 +20,3,20,23 +2,4,23,29 +2,4,27,33 +3,4,2,5 +3,4,6,5 +3,4,10,5 +3,4,27,22 +3,4,30,22 +4,4,1,22 +5,4,32,3 +5,4,15,33 +5,4,19,33 +6,4,4,5 +6,4,22,14 +6,4,26,16 +6,4,30,18 +7,4,2,20 +8,4,12,27 +8,4,11,31 +8,4,8,33 +13,4,13,8 +13,4,16,8 +13,4,19,8 +13,4,22,8 +14,4,7,8 +14,4,10,8 +14,4,13,8 +14,4,31,20 +15,4,20,19 +15,4,23,19 +15,4,26,19 +15,4,3,22 +15,4,7,24 +16,4,16,3 +16,4,3,14 +16,4,6,14 +16,4,9,14 +16,4,27,26 +16,4,30,26 +17,4,1,26 +17,4,9,32 +17,4,12,32 +17,4,15,32 +18,4,31,27 +18,4,2,32 +18,4,6,32 +18,4,10,32 +19,4,2,27 +19,4,5,27 +21,4,13,5 +21,4,17,5 +21,4,21,5 +2,5,31,5 +4,5,20,25 +4,5,12,27 +4,5,16,27 +5,5,11,3 +7,5,30,27 +7,5,18,29 +7,5,18,33 +8,5,2,27 +8,5,6,27 +11,5,19,19 +11,5,15,20 +11,5,12,23 +11,5,9,25 +14,5,24,31 +19,5,8,22 +19,5,12,22 +19,5,25,22 +19,5,25,26 +19,5,25,30 +20,5,15,31 +20,5,19,31 +20,5,23,32 +21,5,4,13 +21,5,6,17 +21,5,8,21 +21,5,26,29 +21,5,31,29 +22,5,24,13 +22,5,22,17 +22,5,20,21 +22,5,4,29 +24,5,20,8 +24,5,24,8 +24,5,28,8 +24,5,32,8 +24,5,32,23 +25,5,4,8 +25,5,8,8 +25,5,32,13 +25,5,3,23 +25,5,6,23 +26,5,3,10 +26,5,6,10 +26,5,3,13 +26,5,6,13 +26,5,9,13 +7,6,18,5 +10,6,10,26 +10,6,14,28 +10,6,18,30 +11,6,12,32 +11,6,16,32 +11,6,20,32 +13,6,1,5 +13,6,4,5 +13,6,7,5 +13,6,14,32 +14,6,23,3 +14,6,20,5 +14,6,21,16 +14,6,25,16 +14,6,29,16 +15,6,21,10 +15,6,25,10 +15,6,29,10 +20,6,27,2 +20,6,18,16 +20,6,23,16 +20,6,29,16 +21,6,14,21 +21,6,14,25 +21,6,16,28 +22,6,27,5 +22,6,23,7 +22,6,19,9 +23,6,2,32 +23,6,5,32 +23,6,8,32 +24,6,10,33 +7,7,9,27 +7,7,13,27 +7,7,17,27 +8,7,24,33 +8,7,27,33 +8,7,30,33 +10,7,8,29 +10,7,12,31 +10,7,16,33 +12,7,27,17 +12,7,30,17 +12,7,4,29 +12,7,4,33 +13,7,14,4 +13,7,14,8 +13,7,1,17 +14,7,2,12 +14,7,5,12 +14,7,8,12 +15,7,28,12 +15,7,31,12 +15,7,9,23 +15,7,9,27 +15,7,9,30 +17,7,26,33 +17,7,30,33 +18,7,28,5 +18,7,31,5 +18,7,2,33 +19,7,2,5 +19,7,7,17 +19,7,10,17 +19,7,13,17 +19,7,12,32 +19,7,15,32 +21,7,30,9 +22,7,2,9 +22,7,6,9 +23,7,14,25 +23,7,17,25 +23,7,20,25 +24,7,10,4 +24,7,10,7 +24,7,10,23 +24,7,10,27 +24,7,26,27 +24,7,10,31 +24,7,26,31 +12,8,3,5 +14,8,22,24 +14,8,26,24 +14,8,30,24 +14,8,9,30 +15,8,11,30 +18,8,26,6 +18,8,29,6 +19,8,21,12 +19,8,24,12 +20,8,12,12 +20,8,15,12 +21,8,30,19 +21,8,30,23 +21,8,30,27 +24,8,26,3 +24,8,26,20 +24,8,28,24 +25,8,1,25 +25,8,29,25 +26,8,1,25 +26,8,5,25 +13,9,29,12 +13,9,32,15 +14,9,11,2 +14,9,13,6 +14,9,3,18 +15,9,9,2 +15,9,7,6 +15,9,23,12 +15,9,20,15 +15,9,17,18 +20,9,6,18 +20,9,6,22 +20,9,6,26 +22,9,27,5 +22,9,31,5 +23,9,3,5 +18,10,16,3 +18,10,15,7 +18,10,12,9 diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/bg/header.c b/sa1/data/maps/zone_3/act_2/tilemaps/bg/header.c new file mode 100644 index 0000000000..ea149208de --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_3_act_2_fg[]; +const u8 Tiles_zone_3_act_2_bg[] = INCBIN_U8("data/maps/zone_3/act_2/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_3_act_2_bg[] = INCBIN_U8("data/maps/zone_3/act_2/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_3_act_2_bg = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_3_act_2_bg, + .tilesSize = sizeof(Tiles_zone_3_act_2_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_3_act_2_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_3_act_2_bg, +}; diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/bg/palette.pal b/sa1/data/maps/zone_3/act_2/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..43fea17a70 --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +49 115 139 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +255 255 115 +246 205 82 +230 156 65 +189 123 74 +148 90 90 +90 0 90 +255 230 156 +180 164 131 +106 98 106 +82 57 57 +255 255 255 +139 123 255 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 255 255 +189 180 164 +0 0 0 +74 49 180 +255 8 255 +164 0 164 +74 0 74 +0 255 0 +0 172 0 +0 82 0 +255 255 0 +255 115 0 +148 32 0 +238 65 32 +255 255 255 +189 189 180 +139 139 139 +98 98 98 +49 41 57 +41 0 106 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 255 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +255 180 139 +255 98 90 +172 32 16 +98 0 0 +255 230 0 +230 139 0 +156 57 0 +49 32 0 +0 0 0 +0 0 0 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 189 16 +230 139 0 +156 74 0 +123 197 74 +49 148 49 +0 74 0 +0 255 0 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 238 0 +255 156 0 +156 74 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +255 255 255 +0 255 255 +0 189 189 +0 123 123 +0 164 172 +0 123 123 +0 90 90 +0 57 57 +255 255 255 +164 180 164 +0 0 0 +255 0 0 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +0 0 0 +255 255 0 +246 197 0 +255 156 0 +255 106 0 +255 0 0 +123 74 123 +123 0 123 +139 0 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 255 0 +0 156 0 +255 164 115 +123 123 0 +123 74 0 +41 49 49 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +139 213 255 +65 164 255 +0 115 255 +255 156 255 +255 0 255 +255 0 131 +0 255 131 +0 222 115 +0 115 74 +0 8 0 +0 0 0 +255 255 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +255 255 255 +205 197 115 +115 98 65 +139 106 189 +115 82 164 +98 65 139 +74 41 115 +156 255 238 +115 197 172 +0 123 148 +24 115 41 +255 0 0 +189 123 0 +164 57 0 +24 0 57 +255 0 0 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +82 180 180 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +255 0 0 +255 255 255 +255 255 0 +255 189 0 +255 255 139 +197 197 115 +131 131 90 +74 74 57 +139 205 16 +90 148 57 +65 98 65 +41 16 65 +255 0 0 +98 123 74 +139 57 0 +0 0 0 diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_3/act_2/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..a193e8f0a9 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/bg/tiles.png b/sa1/data/maps/zone_3/act_2/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..c6d665ac93 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/flags.coll b/sa1/data/maps/zone_3/act_2/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..8f60182819 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/header.c b/sa1/data/maps/zone_3/act_2/tilemaps/fg/header.c new file mode 100644 index 0000000000..0ad1cf6fa7 --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_3_act_2_fg[] = INCBIN_U16("data/maps/zone_3/act_2/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_3_act_2_fg[] = INCBIN_U8("data/maps/zone_3/act_2/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_3_act_2_fg[] = INCBIN_S8("data/maps/zone_3/act_2/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_3_act_2_fg[] = INCBIN_U8("data/maps/zone_3/act_2/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_3_act_2_fg[] = INCBIN_U16("data/maps/zone_3/act_2/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_3_act_2_fg0[] = INCBIN_MAP("data/maps/zone_3/act_2/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_3_act_2_fg1[] = INCBIN_MAP("data/maps/zone_3/act_2/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_3_act_2_fg[] = INCBIN_U16("data/maps/zone_3/act_2/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_3_act_2_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x100, + .animFrameCount = 4, + .animDelay = 4, + .tiles = Tileset_zone_3_act_2_fg, + .tilesSize = (u32)sizeof(Tileset_zone_3_act_2_fg) - (4 * 0x100), + .palette = Palette_zone_3_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_3_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_3_act_2_fg, + }, + .metatileMap = Map_zone_3_act_2_fg0, + .mapWidth = 80, + .mapHeight = 29, +}; + +ALIGNED(4) const struct MapHeader zone_3_act_2_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_3_act_2_fg, + .tilesSize = (u32)sizeof(Tileset_zone_3_act_2_fg) - (4 * 0x100), + .palette = Palette_zone_3_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_3_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_3_act_2_fg, + }, + .metatileMap = Map_zone_3_act_2_fg1, + .mapWidth = 80, + .mapHeight = 29, +}; + +const Collision CollHeader_zone_3_act_2_fg = { CollHeightMap_zone_3_act_2_fg, + CollTileRot_zone_3_act_2_fg, + Metatiles_zone_3_act_2_fg, + { Map_zone_3_act_2_fg0, Map_zone_3_act_2_fg1 }, + CollFlags_zone_3_act_2_fg, + 80, + 29, + 0x1E00, + 0x0AE0 }; diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_3/act_2/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..170e43bed1 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_3/act_2/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..260b213e59 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_3/act_2/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..fab37f82e4 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_3/act_2/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..e30ef86330 --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {80,29} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_3/act_2/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..7df38b325e Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/palette.pal b/sa1/data/maps/zone_3/act_2/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..43fea17a70 --- /dev/null +++ b/sa1/data/maps/zone_3/act_2/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +49 115 139 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +255 255 115 +246 205 82 +230 156 65 +189 123 74 +148 90 90 +90 0 90 +255 230 156 +180 164 131 +106 98 106 +82 57 57 +255 255 255 +139 123 255 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 255 255 +189 180 164 +0 0 0 +74 49 180 +255 8 255 +164 0 164 +74 0 74 +0 255 0 +0 172 0 +0 82 0 +255 255 0 +255 115 0 +148 32 0 +238 65 32 +255 255 255 +189 189 180 +139 139 139 +98 98 98 +49 41 57 +41 0 106 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 255 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +255 180 139 +255 98 90 +172 32 16 +98 0 0 +255 230 0 +230 139 0 +156 57 0 +49 32 0 +0 0 0 +0 0 0 +0 0 0 +255 255 230 +205 205 189 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 189 16 +230 139 0 +156 74 0 +123 197 74 +49 148 49 +0 74 0 +0 255 0 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 238 0 +255 156 0 +156 74 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +255 255 255 +0 255 255 +0 189 189 +0 123 123 +0 164 172 +0 123 123 +0 90 90 +0 57 57 +255 255 255 +164 180 164 +0 0 0 +255 0 0 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +0 0 0 +255 255 0 +246 197 0 +255 156 0 +255 106 0 +255 0 0 +123 74 123 +123 0 123 +139 0 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 255 0 +0 156 0 +255 164 115 +123 123 0 +123 74 0 +41 49 49 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +139 213 255 +65 164 255 +0 115 255 +255 156 255 +255 0 255 +255 0 131 +0 255 131 +0 222 115 +0 115 74 +0 8 0 +0 0 0 +255 255 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 +255 255 255 +205 197 115 +115 98 65 +139 106 189 +115 82 164 +98 65 139 +74 41 115 +156 255 238 +115 197 172 +0 123 148 +24 115 41 +255 0 0 +189 123 0 +164 57 0 +24 0 57 +255 0 0 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +82 180 180 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +255 0 0 +255 255 255 +255 255 0 +255 189 0 +255 255 139 +197 197 115 +131 131 90 +74 74 57 +139 205 16 +90 148 57 +65 98 65 +41 16 65 +255 0 0 +98 123 74 +139 57 0 +0 0 0 diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_3/act_2/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..7cc355ecf3 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_3/act_2/tilemaps/fg/tileset.png b/sa1/data/maps/zone_3/act_2/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..0870303ab0 Binary files /dev/null and b/sa1/data/maps/zone_3/act_2/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_4/act_1/entities/enemies.csv b/sa1/data/maps/zone_4/act_1/entities/enemies.csv new file mode 100644 index 0000000000..2653e9c945 --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/entities/enemies.csv @@ -0,0 +1,18 @@ +Adv2,ENEMIES,41,12,,,,, +2,2,18,18,YUKIMARU,-3,0,5,2 +14,2,0,24,YUKIMARU,0,0,5,2 +19,2,25,18,YUKIMARU,0,0,4,2 +31,2,2,30,YUKIMARU,0,0,4,2 +31,2,22,30,YUKIMARU,0,0,4,2 +16,3,10,22,PEN,0,0,4,2 +17,3,26,30,YUKIMARU_SIDEWAYS,0,0,2,3 +19,3,25,10,PEN,0,0,4,2 +15,5,7,8,YUKIMARU,0,0,4,2 +22,5,18,24,PEN,0,0,4,2 +34,5,14,24,PEN,-3,0,5,2 +18,6,23,16,DRISAME,-87,48,0,0 +20,7,12,18,KURAA,0,0,4,2 +23,7,27,1,DRISAME,5,31,0,0 +31,7,9,20,DRISAME,23,12,0,0 +22,8,22,11,KURAA,0,0,4,2 +24,8,29,29,DRISAME,-29,-29,0,0 diff --git a/sa1/data/maps/zone_4/act_1/entities/interactables.csv b/sa1/data/maps/zone_4/act_1/entities/interactables.csv new file mode 100644 index 0000000000..6c55939204 --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/entities/interactables.csv @@ -0,0 +1,161 @@ +Adv2,INTERACTABLES,41,12,,,,, +2,0,27,6,GRIND_RAIL__START,0,0,3,2 +2,0,0,25,SPRING__UP,0,-25,0,0 +3,1,28,5,GRIND_RAIL__END,0,0,9,4 +4,1,11,11,ICE_BLOCK,117,-43,0,0 +31,1,16,4,HOOK_RAIL,1,-36,0,0 +31,1,0,29,SPRING__UP,0,-61,0,0 +1,2,10,18,CONVEYOR_BELT,0,0,22,3 +2,2,0,18,CONVEYOR_BELT,0,0,22,3 +2,2,22,18,CONVEYOR_BELT,0,0,22,4 +4,2,4,15,ICE_BLOCK,124,-79,0,0 +11,2,28,9,SPECIAL_SPRING,-124,-73,0,0 +13,2,6,15,SPRING__UP,1,-79,0,0 +15,2,0,30,SPRING__BIG_UPLEFT,0,-94,0,0 +17,2,20,12,SPRING__BIG_UPLEFT,0,-76,0,0 +18,2,26,9,FERRIS_WHEEL,5,5,2,11 +18,2,26,9,FERRIS_WHEEL,0,5,2,11 +18,2,26,9,FERRIS_WHEEL,11,5,2,11 +20,2,31,7,PLATFORM_THIN,-4,0,6,2 +20,2,11,14,PLATFORM_THIN,0,0,6,2 +28,2,4,16,TOGGLE_PLAYER_LAYER__BACK,0,0,2,4 +28,2,6,16,TOGGLE_PLAYER_LAYER__BACK,0,0,16,3 +28,2,22,16,TOGGLE_PLAYER_LAYER__BACK,0,0,16,3 +29,2,6,16,TOGGLE_PLAYER_LAYER__BACK,0,0,2,4 +29,2,9,20,CHECKPOINT,5,-84,0,0 +30,2,26,30,CONVEYOR_BELT,0,0,22,4 +31,2,16,30,CONVEYOR_BELT,0,0,22,4 +32,2,10,26,SPIKES__HIDING_UP,-10,-90,0,0 +33,2,30,8,TOGGLE_PLAYER_LAYER__BACK,0,0,6,2 +33,2,19,20,TOGGLE_PLAYER_LAYER__BACK,0,0,2,13 +33,2,21,20,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +34,2,1,10,PLATFORM_THIN__FALLING,-65,-74,0,0 +35,2,7,25,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +35,2,10,25,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +7,3,23,28,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +7,3,23,30,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +7,3,25,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +8,3,4,29,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +8,3,7,29,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +8,3,26,29,PLATFORM_THIN,0,0,2,5 +13,3,28,31,SPRING__BIG_UPRIGHT,0,-127,0,0 +14,3,7,16,PLATFORM_THIN,0,0,2,5 +18,3,14,7,PLATFORM_THIN,0,-3,2,5 +18,3,4,13,PLATFORM_THIN,0,0,2,5 +19,3,14,31,SPRING__UP,0,-127,0,0 +20,3,25,0,CHECKPOINT,2,-96,0,0 +21,3,14,29,BREAKABLE_WALL,0,-125,0,0 +22,3,16,0,PLATFORM_CRUMBLING,48,-96,0,0 +28,3,28,18,BOOSTER,100,1,0,0 +29,3,1,5,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +29,3,4,5,TOGGLE_PLAYER_LAYER__BACK,0,0,3,16 +29,3,14,31,SPRING__UP,0,-127,0,0 +33,3,19,1,TOGGLE_PLAYER_LAYER__BACK,0,0,2,13 +33,3,21,1,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +8,4,27,8,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +8,4,27,10,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +8,4,29,10,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +9,4,8,9,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +9,4,11,9,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +10,4,3,10,PLATFORM_THIN__FALLING,-67,118,0,0 +10,4,1,28,BOOSTER,-65,0,0,0 +11,4,0,4,CHECKPOINT,1,124,0,0 +11,4,20,11,SPRING__RIGHT,2,117,0,0 +14,4,20,12,SPRING__SMALL_UPLEFT,0,116,0,0 +16,4,1,3,PLATFORM_THIN__FALLING,-1,125,0,0 +17,4,27,8,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +17,4,27,10,TOGGLE_PLAYER_LAYER__BACK,0,0,2,20 +17,4,29,10,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +17,4,10,28,PLATFORM_THIN__FALLING,-42,100,0,0 +17,4,24,28,BOOSTER,-56,0,0,0 +18,4,11,9,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +18,4,14,9,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,4 +24,4,12,2,FORCED_ICE_SLIDE,0,0,18,13 +24,4,15,7,SKATING_STONE,1,0,0,0 +24,4,28,10,FORCED_ICE_SLIDE,0,1,18,13 +25,4,12,18,FORCED_ICE_SLIDE,0,2,18,13 +28,4,9,16,BOOSTER,119,0,0,0 +36,4,21,4,TOGGLE_PLAYER_LAYER__BACK,0,0,3,17 +37,4,2,3,SPRING__DOWN,0,125,0,0 +37,4,1,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +13,5,19,28,SKATING_STONE,1,0,0,0 +14,5,20,15,SPRING__LEFT,0,81,0,0 +15,5,2,8,SPIKES__NORMAL_UP,30,88,0,0 +15,5,31,24,SPIKES__NORMAL_DOWN,1,72,0,0 +18,5,18,27,SPRING__LEFT,0,69,0,0 +29,5,18,26,BOOSTER,78,1,0,0 +35,5,4,8,SPIKES__HIDING_UP,-100,88,0,0 +35,5,2,27,SPRING__LEFT,-98,69,0,0 +36,5,8,1,TOGGLE_PLAYER_LAYER__FRONT,-1,0,3,3 +36,5,11,1,TOGGLE_PLAYER_LAYER__BACK,-1,0,3,3 +38,5,13,20,STAGE_GOAL,1,1,0,0 +14,6,24,24,AIR_BUBBLES,40,40,0,0 +15,6,31,9,IA089,0,-7,2,9 +16,6,13,9,IA089,0,-20,2,22 +16,6,29,12,AIR_BUBBLES,-29,52,0,0 +17,6,24,12,FERRIS_WHEEL,5,2,2,11 +17,6,24,12,FERRIS_WHEEL,11,2,2,11 +17,6,24,12,FERRIS_WHEEL,0,2,2,11 +18,6,15,21,PLATFORM_THIN__FALLING,-79,43,0,0 +20,6,14,16,SPRING__BIG_UPRIGHT,0,48,0,0 +21,6,15,1,IA085,81,63,0,0 +21,6,31,1,IA085,65,63,0,0 +22,6,28,25,SPRING__RIGHT,0,39,0,0 +22,6,8,27,MOVING_SPRING,0,-2,2,4 +23,6,7,1,PLATFORM_THIN__FALLING,25,63,0,0 +24,6,0,4,SPRING__BIG_UPRIGHT,0,60,0,0 +27,6,29,18,AIR_BUBBLES,-125,46,0,0 +28,6,23,21,PLATFORM_THIN,0,0,6,2 +29,6,30,31,SPRING__UP,0,33,0,0 +33,6,9,2,FERRIS_WHEEL,8,2,2,18 +33,6,9,2,FERRIS_WHEEL,4,2,2,18 +33,6,9,2,FERRIS_WHEEL,0,2,2,18 +33,6,9,2,FERRIS_WHEEL,12,2,2,18 +33,6,31,24,CHECKPOINT,6,40,0,0 +34,6,4,31,SPRING__RIGHT,0,33,0,0 +15,7,0,17,SPRING__RIGHT,0,15,0,0 +15,7,29,22,BOOSTER,3,0,0,0 +18,7,19,13,MOVING_SPRING,0,0,5,2 +19,7,22,4,SPIKES__NORMAL_DOWN,-118,28,0,0 +19,7,26,4,SPIKES__NORMAL_DOWN,-122,28,0,0 +19,7,24,24,IA089,0,-11,2,13 +24,7,0,0,SPRING__RIGHT,0,32,0,0 +26,7,24,4,CHECKPOINT,4,28,0,0 +27,7,11,13,PLATFORM_SQUARE,0,0,2,6 +27,7,27,22,AIR_BUBBLES,-123,10,0,0 +28,7,4,23,SPRING__LEFT,0,9,0,0 +29,7,6,11,SPRING__UP,0,21,0,0 +30,7,18,10,FERRIS_WHEEL,13,2,2,10 +30,7,18,10,FERRIS_WHEEL,7,2,2,10 +30,7,18,10,FERRIS_WHEEL,2,2,2,10 +30,7,20,28,AIR_BUBBLES,44,4,0,0 +32,7,22,4,SPIKES__NORMAL_UP,-22,28,0,0 +32,7,26,4,SPIKES__NORMAL_UP,-26,28,0,0 +32,7,30,4,SPIKES__NORMAL_UP,-30,28,0,0 +32,7,16,5,SPRING__UP,0,27,0,0 +33,7,2,4,SPIKES__NORMAL_UP,-34,28,0,0 +33,7,6,4,SPIKES__NORMAL_UP,-38,28,0,0 +33,7,10,4,SPIKES__NORMAL_UP,-42,28,0,0 +35,7,26,20,SPRING__BIG_UPRIGHT,0,12,0,0 +37,7,26,29,SPRING__UP,1,3,0,0 +18,8,3,8,AIR_BUBBLES,-67,-8,0,0 +18,8,10,9,SPRING__UP,0,-9,0,0 +21,8,7,6,FERRIS_WHEEL,4,2,2,15 +21,8,7,6,FERRIS_WHEEL,0,2,2,15 +21,8,7,6,FERRIS_WHEEL,8,2,2,15 +21,8,7,6,FERRIS_WHEEL,12,2,2,15 +21,8,30,14,AIR_BUBBLES,66,-14,0,0 +22,8,6,12,PLATFORM_SQUARE,0,0,9,2 +23,8,16,18,PLATFORM_THIN,0,-2,2,4 +23,8,31,26,AIR_BUBBLES,1,-26,0,0 +24,8,29,20,CHECKPOINT,3,-20,0,0 +28,8,27,20,AIR_BUBBLES,101,-20,0,0 +29,8,4,14,PLATFORM_SQUARE,0,0,2,3 +30,8,9,8,PLATFORM_SQUARE,0,0,2,4 +20,9,12,0,AIR_BUBBLES,116,-32,0,0 +20,9,18,0,SPIKES__HIDING_UP,110,-32,0,0 +21,9,18,12,BOOSTER,78,0,0,0 +23,9,20,5,MOVING_SPRING,0,0,3,2 +25,9,4,1,SPRING__RIGHT,2,-33,0,0 +27,9,16,0,BOOSTER,-112,0,0,0 +29,9,26,1,SPRING__LEFT,3,-33,0,0 diff --git a/sa1/data/maps/zone_4/act_1/entities/itemboxes.csv b/sa1/data/maps/zone_4/act_1/entities/itemboxes.csv new file mode 100644 index 0000000000..1c75db3222 --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/entities/itemboxes.csv @@ -0,0 +1,22 @@ +Adv2,ITEMS,41,12, +4,1,11,10,SHIELD_MAGNETIC +4,2,4,14,RINGS_10 +27,2,26,8,SPEED_UP +33,2,26,8,RINGS_5 +8,3,2,24,INVINCIBILITY +22,3,10,0,SHIELD_MAGNETIC +29,3,18,30,RINGS_5 +18,4,2,4,SPEED_UP +21,4,10,4,RINGS_5 +34,4,14,16,RINGS_RANDOM +32,5,10,20,RINGS_5 +15,6,14,0,SHIELD +15,6,18,0,RINGS_5 +18,6,4,30,RINGS_5 +23,6,0,24,RINGS_5 +27,6,14,18,RINGS_10 +31,7,2,28,RINGS_5 +37,7,18,28,ONE_UP +20,8,28,26,RINGS_5 +23,8,3,14,SHIELD +24,9,10,12,RINGS_RANDOM diff --git a/sa1/data/maps/zone_4/act_1/entities/rings.csv b/sa1/data/maps/zone_4/act_1/entities/rings.csv new file mode 100644 index 0000000000..6b5036530d --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/entities/rings.csv @@ -0,0 +1,330 @@ +Adv2,RINGS,41,12 +0,0,24,23 +0,0,27,23 +0,0,30,23 +1,0,10,18 +1,0,13,18 +1,0,16,18 +2,0,1,7 +2,0,4,7 +2,0,7,7 +3,0,3,13 +3,0,5,15 +3,0,7,17 +3,0,21,31 +3,0,23,33 +4,0,18,20 +4,0,22,20 +4,0,26,20 +4,0,30,20 +4,0,20,23 +4,0,24,23 +4,0,28,23 +4,0,10,32 +4,0,13,32 +4,0,16,32 +3,1,25,3 +12,1,5,13 +12,1,8,13 +12,1,11,13 +13,1,6,31 +17,1,4,25 +17,1,8,25 +17,1,12,25 +21,1,7,31 +21,1,11,31 +21,1,15,31 +31,1,26,15 +31,1,30,17 +32,1,2,19 +32,1,6,21 +32,1,22,29 +32,1,26,31 +32,1,30,33 +4,2,32,22 +5,2,3,25 +5,2,6,28 +13,2,6,3 +13,2,6,7 +13,2,17,19 +13,2,19,23 +13,2,23,25 +14,2,14,11 +14,2,18,11 +14,2,22,11 +15,2,31,11 +15,2,28,14 +15,2,25,17 +15,2,22,20 +18,2,3,3 +18,2,6,3 +18,2,9,3 +19,2,32,11 +19,2,15,25 +19,2,13,29 +19,2,9,31 +20,2,3,11 +20,2,6,11 +20,2,31,27 +21,2,9,2 +21,2,13,2 +21,2,2,27 +21,2,5,27 +22,2,4,2 +22,2,7,2 +22,2,10,2 +29,2,27,26 +29,2,30,29 +30,2,22,10 +30,2,22,14 +30,2,22,18 +30,2,1,32 +33,2,2,3 +33,2,2,32 +34,2,1,17 +34,2,1,21 +34,2,1,25 +35,2,8,28 +35,2,2,30 +35,2,14,30 +6,3,9,31 +8,3,22,17 +8,3,25,17 +8,3,28,17 +8,3,8,32 +9,3,24,32 +9,3,27,32 +9,3,30,32 +11,3,6,32 +11,3,9,32 +11,3,12,32 +13,3,29,8 +13,3,32,8 +13,3,15,17 +13,3,13,21 +13,3,9,23 +14,3,3,8 +15,3,15,24 +15,3,19,26 +15,3,23,28 +16,3,25,18 +16,3,21,20 +16,3,17,22 +17,3,25,6 +17,3,28,6 +17,3,31,6 +28,3,11,12 +28,3,13,16 +28,3,17,18 +30,3,23,5 +30,3,21,9 +30,3,17,11 +33,3,6,2 +33,3,10,4 +34,3,32,4 +35,3,16,4 +35,3,1,30 +6,4,12,2 +6,4,15,5 +7,4,32,8 +8,4,2,2 +8,4,14,2 +8,4,16,8 +9,4,12,12 +9,4,6,14 +9,4,18,14 +9,4,4,20 +9,4,20,20 +10,4,15,22 +10,4,13,25 +10,4,10,27 +12,4,5,17 +12,4,9,19 +12,4,13,21 +13,4,18,24 +13,4,21,24 +13,4,24,24 +16,4,1,10 +16,4,1,14 +16,4,1,18 +18,4,12,12 +18,4,6,14 +18,4,6,14 +18,4,18,14 +18,4,4,20 +18,4,20,20 +20,4,23,3 +20,4,27,3 +20,4,31,3 +22,4,3,8 +22,4,7,10 +22,4,11,12 +23,4,31,9 +23,4,29,13 +23,4,25,15 +24,4,32,9 +25,4,4,11 +25,4,8,13 +25,4,12,15 +27,4,32,13 +27,4,30,18 +27,4,32,23 +28,4,27,4 +28,4,24,7 +28,4,21,10 +32,4,13,27 +32,4,13,30 +32,4,13,33 +33,4,10,21 +33,4,8,25 +33,4,4,27 +35,4,3,2 +35,4,7,4 +35,4,6,27 +35,4,9,27 +35,4,12,27 +36,4,4,10 +36,4,8,12 +36,4,12,14 +13,5,29,18 +14,5,5,14 +14,5,1,16 +15,5,32,3 +15,5,28,5 +15,5,24,7 +15,5,21,29 +15,5,24,29 +15,5,27,29 +17,5,32,23 +18,5,3,23 +18,5,6,23 +19,5,13,28 +19,5,16,31 +20,5,29,27 +20,5,32,27 +21,5,21,24 +21,5,24,24 +21,5,27,24 +21,5,3,27 +23,5,15,26 +23,5,18,26 +23,5,21,26 +24,5,5,26 +24,5,8,26 +24,5,11,26 +25,5,19,29 +25,5,15,31 +25,5,11,33 +28,5,19,9 +28,5,22,12 +28,5,25,15 +34,5,4,22 +34,5,7,22 +34,5,10,22 +35,5,14,14 +35,5,16,18 +35,5,20,20 +36,5,12,4 +36,5,6,6 +36,5,18,6 +36,5,4,12 +36,5,20,12 +37,5,26,32 +14,6,1,12 +14,6,4,15 +14,6,7,18 +14,6,21,19 +14,6,25,19 +14,6,29,19 +16,6,16,5 +16,6,19,5 +16,6,22,5 +19,6,19,2 +19,6,22,5 +21,6,16,18 +21,6,20,20 +21,6,24,22 +24,6,9,33 +28,6,6,12 +28,6,9,12 +28,6,12,12 +29,6,31,3 +29,6,31,7 +29,6,31,11 +29,6,10,23 +29,6,13,23 +29,6,16,23 +32,6,16,15 +32,6,16,19 +32,6,16,23 +34,6,11,29 +34,6,14,29 +34,6,17,29 +37,6,26,4 +37,6,26,8 +16,7,11,16 +16,7,7,18 +16,7,3,20 +17,7,8,26 +17,7,11,29 +17,7,14,32 +18,7,28,13 +18,7,31,13 +18,7,10,21 +18,7,10,25 +18,7,10,29 +19,7,2,13 +19,7,31,16 +20,7,2,16 +20,7,5,16 +24,7,13,3 +24,7,17,5 +25,7,25,10 +25,7,21,12 +25,7,17,14 +26,7,30,2 +27,7,1,2 +27,7,4,2 +27,7,22,12 +27,7,25,12 +27,7,28,12 +29,7,10,23 +29,7,10,27 +29,7,10,31 +35,7,32,12 +36,7,3,12 +36,7,6,12 +37,7,11,3 +37,7,14,3 +37,7,17,3 +37,7,26,12 +37,7,26,16 +37,7,26,20 +19,8,12,14 +19,8,15,17 +19,8,18,20 +19,8,21,23 +23,8,26,16 +23,8,29,16 +23,8,32,16 +24,8,15,25 +24,8,18,25 +24,8,21,25 +26,8,18,25 +26,8,16,29 +26,8,12,31 +27,8,2,25 +27,8,4,29 +27,8,8,31 +28,8,15,22 +28,8,12,25 +28,8,9,28 +29,8,10,26 +29,8,12,30 +29,8,16,32 +21,9,31,6 +21,9,28,9 +22,9,2,3 +22,9,32,3 +23,9,3,6 +23,9,6,9 diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/bg/header.c b/sa1/data/maps/zone_4/act_1/tilemaps/bg/header.c new file mode 100644 index 0000000000..44b29d1e7a --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_4_act_1_fg[]; +const u8 Tiles_zone_4_act_1_bg[] = INCBIN_U8("data/maps/zone_4/act_1/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_4_act_1_bg[] = INCBIN_U8("data/maps/zone_4/act_1/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_4_act_1_bg = { + .xTiles = 32, + .yTiles = 64, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_4_act_1_bg, + .tilesSize = sizeof(Tiles_zone_4_act_1_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_4_act_1_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_4_act_1_bg, +}; diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/bg/palette.pal b/sa1/data/maps/zone_4/act_1/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..46c6b6b58c --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +0 82 0 +16 115 41 +24 164 49 +98 230 82 +148 238 123 +0 0 0 +0 0 0 +172 197 255 +205 230 255 +0 82 230 +49 115 238 +98 156 238 +115 213 255 +197 238 255 +255 255 255 +0 139 213 +8 41 139 +98 57 180 +148 57 255 +172 82 255 +197 106 246 +222 139 246 +246 164 246 +0 0 0 +0 0 0 +8 41 139 +49 98 255 +57 131 255 +98 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 106 49 +0 131 82 +24 172 115 +49 189 115 +49 131 213 +74 148 230 +57 172 255 +65 205 255 +131 213 255 +172 238 255 +213 238 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +106 32 172 +131 32 189 +148 57 230 +131 106 238 +131 156 238 +123 172 189 +156 197 222 +74 148 230 +139 197 230 +180 238 238 +238 255 255 +0 139 213 +148 24 0 +255 197 0 +197 115 0 +213 49 0 +255 156 172 +0 156 0 +115 213 255 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +255 255 255 +0 139 213 +255 246 213 +238 197 156 +180 131 115 +131 74 65 +98 49 49 +0 82 0 +16 115 41 +0 0 0 +0 0 0 +0 0 0 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +131 49 98 +148 82 131 +172 106 172 +197 131 205 +222 164 246 +0 0 0 +255 189 222 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +98 123 246 +131 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +8 41 139 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +82 106 230 +98 123 238 +131 156 255 +0 0 0 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 115 255 +197 139 255 +213 164 255 +238 189 255 +255 213 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_4/act_1/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..c9700c1e5f Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/bg/tiles.png b/sa1/data/maps/zone_4/act_1/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..309a1449e2 Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/flags.coll b/sa1/data/maps/zone_4/act_1/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..6b5c78fa3c Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/header.c b/sa1/data/maps/zone_4/act_1/tilemaps/fg/header.c new file mode 100644 index 0000000000..5971f3c635 --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_4_act_1_fg[] = INCBIN_U16("data/maps/zone_4/act_1/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_4_act_1_fg[] = INCBIN_U8("data/maps/zone_4/act_1/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_4_act_1_fg[] = INCBIN_S8("data/maps/zone_4/act_1/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_4_act_1_fg[] = INCBIN_U8("data/maps/zone_4/act_1/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_4_act_1_fg[] = INCBIN_U16("data/maps/zone_4/act_1/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_4_act_1_fg0[] = INCBIN_MAP("data/maps/zone_4/act_1/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_4_act_1_fg1[] = INCBIN_MAP("data/maps/zone_4/act_1/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_4_act_1_fg[] = INCBIN_U16("data/maps/zone_4/act_1/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_4_act_1_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x60, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_4_act_1_fg, + .tilesSize = sizeof(Tileset_zone_4_act_1_fg) - (0 * 0x60), + .palette = Palette_zone_4_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_4_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_4_act_1_fg, + }, + .metatileMap = Map_zone_4_act_1_fg0, + .mapWidth = 109, + .mapHeight = 30, +}; + +ALIGNED(4) const struct MapHeader zone_4_act_1_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_4_act_1_fg, + .tilesSize = sizeof(Tileset_zone_4_act_1_fg) - (0 * 0x60), + .palette = Palette_zone_4_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_4_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_4_act_1_fg, + }, + .metatileMap = Map_zone_4_act_1_fg1, + .mapWidth = 109, + .mapHeight = 30, +}; + +const Collision CollHeader_zone_4_act_1_fg = { CollHeightMap_zone_4_act_1_fg, + CollTileRot_zone_4_act_1_fg, + Metatiles_zone_4_act_1_fg, + { Map_zone_4_act_1_fg0, Map_zone_4_act_1_fg1 }, + CollFlags_zone_4_act_1_fg, + 109, + 30, + 0x28E0, + 0x0B40 }; diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_4/act_1/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..dab43b3aec Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_4/act_1/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..0083a14a8c Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_4/act_1/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..687036354f Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_4/act_1/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..2b09120a11 --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {109,30} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_4/act_1/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..bf3262bc9d Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/palette.pal b/sa1/data/maps/zone_4/act_1/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..46c6b6b58c --- /dev/null +++ b/sa1/data/maps/zone_4/act_1/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +0 82 0 +16 115 41 +24 164 49 +98 230 82 +148 238 123 +0 0 0 +0 0 0 +172 197 255 +205 230 255 +0 82 230 +49 115 238 +98 156 238 +115 213 255 +197 238 255 +255 255 255 +0 139 213 +8 41 139 +98 57 180 +148 57 255 +172 82 255 +197 106 246 +222 139 246 +246 164 246 +0 0 0 +0 0 0 +8 41 139 +49 98 255 +57 131 255 +98 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 106 49 +0 131 82 +24 172 115 +49 189 115 +49 131 213 +74 148 230 +57 172 255 +65 205 255 +131 213 255 +172 238 255 +213 238 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +106 32 172 +131 32 189 +148 57 230 +131 106 238 +131 156 238 +123 172 189 +156 197 222 +74 148 230 +139 197 230 +180 238 238 +238 255 255 +0 139 213 +148 24 0 +255 197 0 +197 115 0 +213 49 0 +255 156 172 +0 156 0 +115 213 255 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +255 255 255 +0 139 213 +255 246 213 +238 197 156 +180 131 115 +131 74 65 +98 49 49 +0 82 0 +16 115 41 +0 0 0 +0 0 0 +0 0 0 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +131 49 98 +148 82 131 +172 106 172 +197 131 205 +222 164 246 +0 0 0 +255 189 222 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +98 123 246 +131 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +8 41 139 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +82 106 230 +98 123 238 +131 156 255 +0 0 0 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 115 255 +197 139 255 +213 164 255 +238 189 255 +255 213 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_4/act_1/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..ba3350d439 Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_4/act_1/tilemaps/fg/tileset.png b/sa1/data/maps/zone_4/act_1/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..972971b33f Binary files /dev/null and b/sa1/data/maps/zone_4/act_1/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_4/act_2/entities/enemies.csv b/sa1/data/maps/zone_4/act_2/entities/enemies.csv new file mode 100644 index 0000000000..b7f6f53868 --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/entities/enemies.csv @@ -0,0 +1,24 @@ +Adv2,ENEMIES,35,10,,,,, +3,2,28,30,PEN,0,0,3,2 +24,2,18,19,YUKIMARU_SIDEWAYS,0,0,2,4 +26,2,19,14,PEN,-2,0,4,2 +27,2,4,14,PEN,0,0,4,2 +14,3,19,0,PEN,0,0,5,2 +27,3,24,28,YUKIMARU_SIDEWAYS,0,0,2,4 +4,4,31,26,PEN,0,0,5,2 +18,4,5,2,PEN,0,0,5,2 +14,5,22,18,PEN,0,0,7,2 +19,5,0,0,YUKIMARU,0,0,5,2 +25,5,20,6,PEN,0,0,4,2 +26,5,5,6,PEN,-2,0,4,2 +7,6,22,17,KURAA,0,0,3,2 +8,6,0,17,KURAA,-1,0,3,2 +9,6,0,2,YUKIMARU_SIDEWAYS,0,0,2,3 +19,6,6,10,PEN,0,0,5,2 +34,6,14,10,EGG_SPIDER,-78,54,0,0 +4,7,23,25,DRISAME,105,7,0,0 +5,7,7,25,DRISAME,89,7,0,0 +10,7,4,12,KURAA,0,0,5,2 +11,7,1,25,DRISAME,-97,7,0,0 +12,7,28,13,KURAA,-2,0,4,2 +17,7,27,19,KURAA,-2,0,4,2 diff --git a/sa1/data/maps/zone_4/act_2/entities/interactables.csv b/sa1/data/maps/zone_4/act_2/entities/interactables.csv new file mode 100644 index 0000000000..cc01b9b2c4 --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/entities/interactables.csv @@ -0,0 +1,156 @@ +Adv2,INTERACTABLES,35,10,,,,, +20,1,21,26,PLATFORM_THIN,-4,0,6,2 +21,1,5,19,PLATFORM_THIN,0,0,6,2 +22,1,4,20,SPRING__BIG_UPRIGHT,0,-52,0,0 +28,1,27,23,PLATFORM_THIN,-3,0,5,2 +29,1,8,17,PLATFORM_THIN,0,0,5,2 +30,1,0,20,SPRING__BIG_UPRIGHT,0,-52,0,0 +10,2,28,8,HOOK_RAIL,1,-72,0,0 +15,2,12,12,SPRING__BIG_UPRIGHT,1,-76,0,0 +17,2,3,12,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +17,2,19,13,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +17,2,22,13,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +17,2,3,14,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +17,2,5,14,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +19,2,24,9,SPRING__UP,0,-73,0,0 +22,2,16,20,FERRIS_WHEEL,13,4,2,15 +22,2,16,20,FERRIS_WHEEL,7,4,2,15 +22,2,16,20,FERRIS_WHEEL,2,4,2,15 +23,2,18,27,SPECIAL_SPRING,14,-91,0,0 +25,2,5,27,ICE_BLOCK,-37,-91,0,0 +25,2,10,30,SPRING__BIG_UPRIGHT,0,-94,0,0 +27,2,12,7,SPRING__BIG_UPRIGHT,0,-71,0,0 +5,3,15,16,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +5,3,31,17,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +5,3,15,18,TOGGLE_PLAYER_LAYER__BACK,0,0,2,20 +5,3,17,18,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +6,3,2,17,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +7,3,18,21,MOVING_SPRING,0,0,2,3 +9,3,8,6,BOOSTER,-40,0,0,0 +10,3,28,29,SPRING__BIG_UPRIGHT,1,-125,0,0 +13,3,7,14,SPRING__SMALL_UPLEFT,0,-110,0,0 +14,3,30,1,ICE_BLOCK,34,-97,0,0 +14,3,30,1,SPRING__UP,0,-97,0,0 +16,3,9,6,BOOSTER,-9,0,0,0 +20,3,20,4,SPRING__BIG_UPRIGHT,0,-100,0,0 +20,3,20,6,HOOK_RAIL,1,-102,0,0 +20,3,20,28,SPRING__BIG_UPRIGHT,1,-124,0,0 +24,3,17,22,PLATFORM_THIN,-4,0,6,2 +25,3,14,19,SPRING__UP,0,-115,0,0 +28,3,20,1,SPRING__UP,0,-97,0,0 +28,3,7,2,PLATFORM_THIN__FALLING,0,-98,0,0 +29,3,20,13,SPRING__RIGHT,0,-109,0,0 +29,3,14,23,BREAKABLE_WALL,0,-119,0,0 +29,3,3,30,CHECKPOINT,6,-126,0,0 +30,3,17,12,CHECKPOINT,5,-108,0,0 +3,4,0,17,SPRING__RIGHT,0,111,0,0 +4,4,9,28,SPIKES__HIDING_UP,119,100,0,0 +4,4,13,28,SPIKES__NORMAL_UP,115,100,0,0 +7,4,26,7,MOVING_SPRING,0,-1,2,3 +8,4,26,22,PLATFORM_THIN__FALLING,-26,106,0,0 +9,4,30,31,PLATFORM_THIN,0,0,5,2 +12,4,21,15,MOVING_SPRING,0,0,2,4 +12,4,4,23,PLATFORM_THIN,0,0,5,2 +13,4,21,2,PLATFORM_SQUARE,0,0,7,2 +14,4,20,6,PLATFORM_THIN__FALLING,44,122,0,0 +15,4,21,3,MOVING_SPRING,0,0,4,2 +15,4,4,6,PLATFORM_THIN__FALLING,28,122,0,0 +15,4,21,25,TOGGLE_PLAYER_LAYER__BACK,0,0,18,2 +15,4,7,27,TOGGLE_PLAYER_LAYER__BACK,0,0,16,3 +15,4,7,30,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +15,4,9,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +16,4,7,25,TOGGLE_PLAYER_LAYER__BACK,0,0,15,2 +16,4,22,25,TOGGLE_PLAYER_LAYER__BACK,0,0,15,2 +16,4,12,29,SPRING__UP,0,99,0,0 +17,4,5,25,TOGGLE_PLAYER_LAYER__BACK,0,0,18,2 +17,4,21,27,TOGGLE_PLAYER_LAYER__BACK,0,0,4,3 +17,4,20,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +17,4,23,30,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +19,4,16,5,SPRING__RIGHT,-112,123,0,0 +21,4,4,4,SPIKES__HIDING_UP,92,124,0,0 +22,4,25,10,CHECKPOINT,3,118,0,0 +28,4,2,23,SPRING__UP,0,105,0,0 +30,4,24,26,FORCED_ICE_SLIDE,0,0,18,14 +30,4,3,28,STAGE_GOAL,1,0,0,0 +31,4,4,5,SPRING__LEFT,2,123,0,0 +15,5,7,10,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +15,5,9,10,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +17,5,20,10,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +17,5,23,10,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +17,5,20,22,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +17,5,23,22,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +18,5,2,0,PLATFORM_THIN,0,0,6,2 +18,5,22,29,PLATFORM_THIN__FALLING,-86,67,0,0 +18,5,0,30,CONVEYOR_BELT,0,0,12,4 +19,5,25,8,PLATFORM_THIN__FALLING,-121,88,0,0 +22,5,16,0,SPRING__BIG_UPLEFT,1,96,0,0 +22,5,11,12,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +22,5,27,13,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +22,5,30,13,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +22,5,11,14,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +22,5,13,14,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +22,5,1,19,MOVING_SPRING,-1,0,3,2 +22,5,11,26,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +22,5,13,26,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +23,5,16,15,PLATFORM_THIN__FALLING,16,81,0,0 +24,5,22,15,SPRING__UP,0,81,0,0 +26,5,20,12,SPRING__BIG_UPRIGHT,0,84,0,0 +31,5,5,6,FORCED_ICE_SLIDE,0,1,18,14 +31,5,17,18,FORCED_ICE_SLIDE,0,2,18,14 +7,6,10,5,BREAKABLE_WALL,0,59,0,0 +7,6,16,31,SPRING__RIGHT,0,33,0,0 +9,6,16,12,SPIKES__NORMAL_UP,-48,52,0,0 +9,6,25,14,PLATFORM_THIN__FALLING,-57,50,0,0 +10,6,15,8,PLATFORM_THIN,0,0,4,2 +11,6,28,1,ICE_BLOCK,-124,63,0,0 +11,6,28,1,SPRING__UP,2,63,0,0 +12,6,18,0,CHECKPOINT,2,64,0,0 +12,6,9,1,ICE_BLOCK,119,63,0,0 +12,6,8,2,SPRING__SMALL_UPRIGHT,1,62,0,0 +14,6,30,31,SPRING__UP,0,33,0,0 +15,6,8,12,BOOSTER,24,0,0,0 +19,6,26,12,BOOSTER,-122,0,0,0 +21,6,24,13,SPRING__RIGHT,1,51,0,0 +25,6,1,24,UNDERWATER_LAVA_PLATFORM,-33,40,0,0 +26,6,20,10,SPRING__BIG_UPRIGHT,0,54,0,0 +27,6,18,2,SPRING__BIG_UPLEFT,0,62,0,0 +4,7,31,19,IA085,97,13,0,0 +7,7,4,11,SPRING__LEFT,2,21,0,0 +10,7,14,16,AIR_BUBBLES,-78,16,0,0 +10,7,25,19,IA085,-89,13,0,0 +14,7,6,22,SPIKES__HIDING_UP,58,20,0,0 +15,7,10,22,AIR_BUBBLES,22,10,0,0 +16,7,22,28,AIR_BUBBLES,-22,4,0,0 +18,7,19,26,PLATFORM_THIN__FALLING,-83,6,0,0 +18,7,31,28,AIR_BUBBLES,-95,4,0,0 +19,7,21,20,PLATFORM_SQUARE,0,0,6,2 +21,7,7,16,AIR_BUBBLES,89,16,0,0 +21,7,14,16,BOOSTER,82,0,0,0 +22,7,20,16,CHECKPOINT,4,16,0,0 +23,7,18,10,SPIKES__HIDING_UP,14,22,0,0 +24,7,9,4,UNDERWATER_LAVA_PLATFORM,-9,28,0,0 +24,7,21,4,UNDERWATER_LAVA_PLATFORM,-21,28,0,0 +5,8,24,8,BOOSTER,72,0,0,0 +5,8,13,20,IA089,0,-10,2,12 +8,8,23,20,AIR_BUBBLES,-23,-20,0,0 +8,8,30,21,SPRING__UP,0,-21,0,0 +10,8,4,21,SPRING__LEFT,1,-21,0,0 +11,8,10,3,SPRING__UP,0,-3,0,0 +11,8,22,8,SPIKES__HIDING_UP,-118,-8,0,0 +12,8,19,14,PLATFORM_THIN,0,0,2,5 +12,8,30,18,PLATFORM_THIN,0,-3,2,5 +13,8,11,26,AIR_BUBBLES,85,-26,0,0 +14,8,29,20,UNDERWATER_LAVA_PLATFORM,35,-20,0,0 +14,8,2,27,SPRING__LEFT,0,-27,0,0 +15,8,21,8,UNDERWATER_LAVA_PLATFORM,11,-8,0,0 +15,8,9,20,UNDERWATER_LAVA_PLATFORM,23,-20,0,0 +16,8,3,5,PLATFORM_THIN__FALLING,-3,-5,0,0 +18,8,30,21,SPRING__LEFT,3,-21,0,0 +19,8,6,14,AIR_BUBBLES,-102,-14,0,0 +19,8,16,21,SPRING__RIGHT,2,-21,0,0 +5,9,29,12,AIR_BUBBLES,67,-44,0,0 +6,9,12,13,SPRING__LEFT,0,-45,0,0 +12,9,15,6,CHECKPOINT,1,-38,0,0 +12,9,0,7,SPRING__RIGHT,0,-39,0,0 +12,9,30,7,SPRING__LEFT,0,-39,0,0 +16,9,14,1,SPRING__UP,0,-33,0,0 diff --git a/sa1/data/maps/zone_4/act_2/entities/itemboxes.csv b/sa1/data/maps/zone_4/act_2/entities/itemboxes.csv new file mode 100644 index 0000000000..b142aeaa4b --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/entities/itemboxes.csv @@ -0,0 +1,18 @@ +Adv2,ITEMS,35,10, +20,1,4,28,SHIELD +28,1,8,28,RINGS_5 +15,2,8,8,RINGS_5 +17,2,28,8,INVINCIBILITY +25,2,5,26,RINGS_5 +6,3,28,6,SHIELD +11,3,14,30,RINGS_5 +21,4,0,4,ONE_UP +9,5,14,2,SHIELD +18,5,26,2,SHIELD_MAGNETIC +24,5,14,14,RINGS_5 +12,7,14,16,RINGS_5 +16,7,1,22,INVINCIBILITY +20,7,22,22,RINGS_5 +10,8,8,14,RINGS_RANDOM +6,9,22,6,SPEED_UP +16,9,6,0,RINGS_RANDOM diff --git a/sa1/data/maps/zone_4/act_2/entities/rings.csv b/sa1/data/maps/zone_4/act_2/entities/rings.csv new file mode 100644 index 0000000000..baa5d4294b --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/entities/rings.csv @@ -0,0 +1,336 @@ +Adv2,RINGS,35,10 +19,0,17,22 +19,0,21,22 +19,0,25,22 +19,0,29,22 +19,0,19,25 +19,0,23,25 +19,0,27,25 +15,1,21,32 +15,1,24,32 +15,1,27,32 +21,1,21,13 +21,1,24,13 +21,1,27,13 +22,1,18,4 +22,1,21,4 +22,1,24,4 +27,1,18,24 +27,1,21,24 +27,1,24,24 +30,1,21,3 +30,1,25,3 +30,1,29,3 +30,1,23,6 +30,1,27,6 +3,2,2,26 +3,2,6,26 +3,2,10,26 +7,2,18,33 +7,2,21,33 +7,2,24,33 +9,2,30,24 +9,2,27,27 +9,2,24,30 +10,2,1,21 +11,2,6,19 +11,2,10,21 +11,2,14,23 +11,2,18,25 +12,2,2,33 +14,2,5,32 +15,2,8,29 +15,2,11,29 +15,2,14,29 +16,2,25,32 +17,2,20,16 +17,2,14,18 +17,2,26,18 +17,2,12,24 +17,2,28,24 +18,2,30,24 +19,2,7,15 +19,2,4,18 +19,2,1,21 +20,2,4,23 +20,2,8,25 +20,2,12,27 +20,2,28,28 +20,2,31,28 +21,2,2,28 +23,2,5,23 +23,2,8,23 +23,2,11,23 +25,2,25,8 +25,2,28,8 +25,2,31,8 +27,2,22,12 +27,2,25,12 +27,2,28,12 +28,2,20,14 +28,2,20,18 +28,2,20,22 +29,2,4,11 +29,2,8,13 +29,2,12,15 +30,2,32,24 +30,2,28,26 +31,2,2,20 +1,3,9,6 +1,3,6,8 +1,3,3,10 +4,3,18,12 +4,3,21,15 +4,3,24,18 +4,3,27,21 +5,3,32,20 +5,3,26,22 +5,3,24,28 +6,3,6,22 +6,3,8,28 +10,3,32,25 +11,3,14,8 +11,3,17,8 +11,3,20,8 +11,3,3,25 +11,3,6,25 +12,3,6,3 +12,3,10,5 +12,3,14,7 +13,3,29,4 +13,3,19,28 +13,3,22,28 +13,3,25,28 +14,3,1,2 +14,3,12,32 +14,3,15,32 +14,3,18,32 +14,3,28,32 +14,3,31,32 +15,3,13,29 +15,3,16,29 +15,3,19,29 +15,3,2,32 +16,3,21,2 +16,3,17,4 +20,3,30,17 +20,3,6,30 +21,3,2,19 +21,3,6,21 +21,3,10,23 +21,3,26,31 +21,3,30,33 +23,3,9,33 +24,3,25,15 +24,3,28,15 +24,3,31,15 +25,3,26,9 +25,3,29,12 +25,3,32,15 +26,3,17,23 +26,3,21,23 +26,3,25,23 +27,3,15,7 +27,3,12,10 +27,3,9,13 +28,3,7,9 +28,3,7,13 +28,3,7,17 +30,3,25,10 +30,3,28,10 +30,3,31,10 +3,4,21,19 +3,4,25,21 +3,4,29,23 +4,4,9,23 +4,4,12,23 +4,4,15,23 +7,4,18,21 +7,4,20,25 +7,4,24,27 +9,4,15,15 +9,4,15,18 +9,4,15,21 +9,4,27,28 +9,4,31,28 +10,4,3,28 +10,4,32,28 +11,4,6,22 +11,4,4,26 +12,4,23,2 +12,4,26,2 +12,4,29,2 +16,4,21,6 +16,4,25,6 +16,4,29,6 +18,4,14,29 +18,4,17,29 +18,4,20,29 +19,4,32,4 +19,4,4,31 +19,4,7,31 +19,4,10,31 +20,4,4,2 +22,4,2,3 +22,4,6,5 +23,4,6,4 +23,4,3,7 +24,4,25,26 +24,4,28,26 +24,4,31,26 +27,4,1,20 +27,4,4,20 +27,4,7,20 +28,4,2,7 +28,4,2,11 +28,4,2,15 +30,4,29,32 +5,5,10,7 +5,5,12,11 +5,5,16,13 +6,5,11,29 +6,5,14,32 +8,5,24,23 +8,5,27,26 +8,5,30,29 +12,5,28,5 +12,5,32,5 +12,5,30,8 +13,5,4,5 +13,5,2,8 +13,5,30,14 +13,5,32,18 +14,5,4,20 +15,5,28,15 +15,5,32,15 +16,5,4,15 +17,5,16,23 +17,5,20,25 +17,5,24,27 +17,5,28,29 +18,5,26,22 +18,5,29,22 +18,5,32,22 +19,5,21,21 +19,5,18,23 +19,5,15,25 +20,5,10,6 +20,5,13,6 +20,5,16,6 +21,5,4,11 +21,5,7,14 +21,5,10,17 +22,5,28,16 +22,5,22,18 +22,5,20,24 +23,5,23,9 +23,5,26,9 +23,5,29,9 +23,5,2,18 +23,5,4,24 +25,5,26,4 +25,5,29,4 +25,5,32,4 +30,5,32,3 +31,5,3,6 +31,5,19,22 +31,5,22,25 +31,5,25,28 +6,6,17,3 +7,6,32,30 +8,6,6,24 +8,6,4,28 +9,6,20,6 +9,6,23,6 +9,6,26,6 +9,6,20,23 +9,6,20,27 +9,6,20,31 +10,6,22,2 +10,6,25,2 +10,6,28,2 +13,6,6,6 +13,6,10,8 +13,6,14,10 +14,6,2,20 +14,6,6,22 +14,6,10,24 +15,6,23,6 +15,6,21,10 +15,6,17,12 +18,6,14,25 +18,6,14,29 +18,6,14,33 +20,6,18,6 +20,6,16,10 +20,6,12,12 +22,6,11,3 +22,6,8,6 +22,6,5,9 +23,6,18,33 +23,6,21,33 +23,6,24,33 +26,6,11,5 +26,6,15,5 +26,6,19,5 +5,7,30,15 +6,7,4,11 +6,7,1,13 +8,7,30,32 +11,7,11,9 +11,7,11,13 +11,7,11,17 +13,7,10,20 +13,7,14,20 +13,7,18,20 +14,7,11,13 +14,7,15,13 +14,7,19,13 +15,7,18,18 +15,7,21,18 +15,7,24,18 +16,7,6,20 +16,7,9,20 +16,7,12,20 +17,7,12,23 +17,7,9,25 +17,7,6,27 +19,7,19,14 +19,7,22,14 +19,7,25,14 +20,7,29,12 +20,7,32,12 +21,7,3,12 +21,7,21,14 +21,7,25,14 +21,7,29,14 +22,7,32,10 +22,7,29,12 +22,7,26,14 +6,8,4,11 +6,8,7,14 +6,8,31,14 +6,8,10,17 +6,8,28,17 +7,8,2,11 +7,8,26,11 +7,8,29,14 +7,8,32,17 +8,8,30,4 +8,8,30,8 +11,8,31,6 +11,8,4,23 +11,8,8,25 +11,8,12,27 +11,8,16,29 +12,8,3,6 +12,8,7,6 +19,8,32,21 +20,8,4,23 +20,8,8,25 +5,9,10,6 +5,9,12,10 +5,9,16,12 +6,9,9,3 +6,9,12,3 +6,9,15,3 diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/bg/header.c b/sa1/data/maps/zone_4/act_2/tilemaps/bg/header.c new file mode 100644 index 0000000000..938e6d37b7 --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_4_act_2_fg[]; +const u8 Tiles_zone_4_act_2_bg[] = INCBIN_U8("data/maps/zone_4/act_2/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_4_act_2_bg[] = INCBIN_U8("data/maps/zone_4/act_2/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_4_act_2_bg = { + .xTiles = 32, + .yTiles = 64, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_4_act_2_bg, + .tilesSize = sizeof(Tiles_zone_4_act_2_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_4_act_2_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_4_act_2_bg, +}; diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/bg/palette.pal b/sa1/data/maps/zone_4/act_2/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..46c6b6b58c --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +0 82 0 +16 115 41 +24 164 49 +98 230 82 +148 238 123 +0 0 0 +0 0 0 +172 197 255 +205 230 255 +0 82 230 +49 115 238 +98 156 238 +115 213 255 +197 238 255 +255 255 255 +0 139 213 +8 41 139 +98 57 180 +148 57 255 +172 82 255 +197 106 246 +222 139 246 +246 164 246 +0 0 0 +0 0 0 +8 41 139 +49 98 255 +57 131 255 +98 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 106 49 +0 131 82 +24 172 115 +49 189 115 +49 131 213 +74 148 230 +57 172 255 +65 205 255 +131 213 255 +172 238 255 +213 238 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +106 32 172 +131 32 189 +148 57 230 +131 106 238 +131 156 238 +123 172 189 +156 197 222 +74 148 230 +139 197 230 +180 238 238 +238 255 255 +0 139 213 +148 24 0 +255 197 0 +197 115 0 +213 49 0 +255 156 172 +0 156 0 +115 213 255 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +255 255 255 +0 139 213 +255 246 213 +238 197 156 +180 131 115 +131 74 65 +98 49 49 +0 82 0 +16 115 41 +0 0 0 +0 0 0 +0 0 0 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +131 49 98 +148 82 131 +172 106 172 +197 131 205 +222 164 246 +0 0 0 +255 189 222 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +98 123 246 +131 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +8 41 139 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +82 106 230 +98 123 238 +131 156 255 +0 0 0 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 115 255 +197 139 255 +213 164 255 +238 189 255 +255 213 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_4/act_2/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..c9700c1e5f Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/bg/tiles.png b/sa1/data/maps/zone_4/act_2/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..309a1449e2 Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/flags.coll b/sa1/data/maps/zone_4/act_2/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..6b5c78fa3c Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/header.c b/sa1/data/maps/zone_4/act_2/tilemaps/fg/header.c new file mode 100644 index 0000000000..a6aab04146 --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_4_act_2_fg[] = INCBIN_U16("data/maps/zone_4/act_2/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_4_act_2_fg[] = INCBIN_U8("data/maps/zone_4/act_2/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_4_act_2_fg[] = INCBIN_S8("data/maps/zone_4/act_2/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_4_act_2_fg[] = INCBIN_U8("data/maps/zone_4/act_2/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_4_act_2_fg[] = INCBIN_U16("data/maps/zone_4/act_2/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_4_act_2_fg0[] = INCBIN_MAP("data/maps/zone_4/act_2/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_4_act_2_fg1[] = INCBIN_MAP("data/maps/zone_4/act_2/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_4_act_2_fg[] = INCBIN_U16("data/maps/zone_4/act_2/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_4_act_2_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x60, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_4_act_2_fg, + .tilesSize = sizeof(Tileset_zone_4_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_4_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_4_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_4_act_2_fg, + }, + .metatileMap = Map_zone_4_act_2_fg0, + .mapWidth = 92, + .mapHeight = 26, +}; + +ALIGNED(4) const struct MapHeader zone_4_act_2_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_4_act_2_fg, + .tilesSize = sizeof(Tileset_zone_4_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_4_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_4_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_4_act_2_fg, + }, + .metatileMap = Map_zone_4_act_2_fg1, + .mapWidth = 92, + .mapHeight = 26, +}; + +const Collision CollHeader_zone_4_act_2_fg = { CollHeightMap_zone_4_act_2_fg, + CollTileRot_zone_4_act_2_fg, + Metatiles_zone_4_act_2_fg, + { Map_zone_4_act_2_fg0, Map_zone_4_act_2_fg1 }, + CollFlags_zone_4_act_2_fg, + 92, + 26, + 0x2280, + 0x09C0 }; diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_4/act_2/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..dab43b3aec Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_4/act_2/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..42d0520793 Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_4/act_2/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..297e5ae8f5 Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_4/act_2/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..cd140f9a09 --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {92,26} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_4/act_2/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..b0aac3f382 Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/palette.pal b/sa1/data/maps/zone_4/act_2/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..46c6b6b58c --- /dev/null +++ b/sa1/data/maps/zone_4/act_2/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +0 82 0 +16 115 41 +24 164 49 +98 230 82 +148 238 123 +0 0 0 +0 0 0 +172 197 255 +205 230 255 +0 82 230 +49 115 238 +98 156 238 +115 213 255 +197 238 255 +255 255 255 +0 139 213 +8 41 139 +98 57 180 +148 57 255 +172 82 255 +197 106 246 +222 139 246 +246 164 246 +0 0 0 +0 0 0 +8 41 139 +49 98 255 +57 131 255 +98 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 106 49 +0 131 82 +24 172 115 +49 189 115 +49 131 213 +74 148 230 +57 172 255 +65 205 255 +131 213 255 +172 238 255 +213 238 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +106 32 172 +131 32 189 +148 57 230 +131 106 238 +131 156 238 +123 172 189 +156 197 222 +74 148 230 +139 197 230 +180 238 238 +238 255 255 +0 139 213 +148 24 0 +255 197 0 +197 115 0 +213 49 0 +255 156 172 +0 156 0 +115 213 255 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +255 255 255 +0 139 213 +255 246 213 +238 197 156 +180 131 115 +131 74 65 +98 49 49 +0 82 0 +16 115 41 +0 0 0 +0 0 0 +0 0 0 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +131 49 98 +148 82 131 +172 106 172 +197 131 205 +222 164 246 +0 0 0 +255 189 222 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +98 123 246 +131 156 255 +172 197 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +8 41 139 +8 41 197 +24 57 197 +41 74 197 +57 90 205 +82 106 230 +98 123 238 +131 156 255 +0 0 0 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +172 115 255 +197 139 255 +213 164 255 +238 189 255 +255 213 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_4/act_2/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..ba3350d439 Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_4/act_2/tilemaps/fg/tileset.png b/sa1/data/maps/zone_4/act_2/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..972971b33f Binary files /dev/null and b/sa1/data/maps/zone_4/act_2/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_5/act_1/entities/enemies.csv b/sa1/data/maps/zone_5/act_1/entities/enemies.csv new file mode 100644 index 0000000000..0139b8c456 --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/entities/enemies.csv @@ -0,0 +1,19 @@ +Adv2,ENEMIES,35,11,,,,, +8,0,9,14,BUZZER,-3,0,5,2 +2,1,29,5,BUZZER,-3,0,5,2 +7,1,18,31,WAMU,0,0,4,2 +17,1,6,6,BUZZER,0,0,7,2 +23,1,29,7,BUZZER,-3,0,5,2 +2,2,25,30,LEON,-4,0,6,2 +5,2,30,5,RHINOTANK,-3,0,5,2 +18,2,8,6,LEON,-4,0,6,2 +27,2,6,30,RHINOTANK,-2,0,4,2 +2,4,6,26,LEON,0,0,5,2 +4,4,10,3,BUZZER,-3,0,5,2 +10,4,27,4,BUZZER,0,0,5,2 +11,4,27,14,RHINOTANK,-1,0,3,2 +11,5,0,30,RHINOTANK,-3,0,5,2 +5,6,28,0,BUZZER,-4,0,6,2 +17,7,12,26,LEON,-2,0,4,2 +19,7,13,2,BUZZER,0,0,5,2 +28,10,13,2,LEON,1,1,5,2 diff --git a/sa1/data/maps/zone_5/act_1/entities/interactables.csv b/sa1/data/maps/zone_5/act_1/entities/interactables.csv new file mode 100644 index 0000000000..527bb07a6a --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/entities/interactables.csv @@ -0,0 +1,188 @@ +Adv2,INTERACTABLES,35,11,,,,, +9,0,22,11,SPRING__DOWN,0,-11,0,0 +18,0,31,0,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +18,0,31,16,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +19,0,1,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +19,0,16,0,TOGGLE_PLAYER_LAYER__BACK,0,0,3,16 +19,0,1,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +19,0,16,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,16 +21,0,0,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +21,0,3,0,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +21,0,0,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +21,0,3,16,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +3,1,22,15,MOVING_SPRING,0,0,2,6 +4,1,4,5,SPRING__BIG_UPLEFT,0,-37,0,0 +7,1,14,17,SPRING__UP,0,-49,0,0 +9,1,0,8,SPRING__BIG_UPRIGHT,-32,-40,0,0 +18,1,31,0,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +19,1,1,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +19,1,16,0,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +20,1,24,14,INCLINE_RAMP,1,0,5,5 +20,1,20,20,TOGGLE_PLAYER_LAYER__FRONT,0,0,12,3 +21,1,0,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +21,1,3,0,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +21,1,0,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +21,1,3,16,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +23,1,4,8,GRIND_RAIL__START,0,0,3,2 +23,1,22,14,RUN_WHEEL,0,-46,55,0 +4,2,8,5,MOVING_SPRING,0,0,7,2 +5,2,15,11,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +5,2,31,12,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +5,2,15,13,TOGGLE_PLAYER_LAYER__BACK,0,0,2,22 +5,2,17,13,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,22 +5,2,13,19,PLATFORM_THIN,0,0,2,6 +6,2,12,9,SPRING__BIG_UPRIGHT,0,-73,0,0 +6,2,2,12,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +7,2,2,21,SPRING__UP,0,-85,0,0 +8,2,17,24,SKATING_STONE,1,1,0,0 +16,2,4,0,SPRING__BIG_UPRIGHT,0,-64,0,0 +16,2,17,4,MOVING_SPRING,0,0,5,2 +17,2,4,9,DECORATION,-36,-73,0,0 +19,2,0,1,BREAKABLE_WALL,0,-65,0,0 +19,2,7,8,BOOSTER,-103,0,0,0 +21,2,0,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,16 +21,2,3,0,TOGGLE_PLAYER_LAYER__BACK,0,0,2,16 +21,2,30,13,SPRING__LEFT,1,-77,0,0 +24,2,25,26,GRIND_RAIL__END,0,0,9,4 +25,2,21,12,PLATFORM_THIN__FALLING,-53,-76,0,0 +10,3,18,10,RUN_WHEEL,0,-106,55,0 +10,3,27,27,MOVING_SPRING,-6,0,8,2 +11,3,16,5,BOULDER_SPAWNER,1,-101,0,0 +12,3,13,19,TORCH,115,-115,0,0 +12,3,22,19,TORCH,106,-115,0,0 +12,3,20,29,BOULDER_SPAWNER,1,-125,0,0 +15,3,20,4,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +15,3,23,4,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +15,3,10,14,MOVING_SPRING,0,0,2,4 +15,3,6,29,MOVING_SPRING,0,-2,2,4 +16,3,4,3,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +16,3,4,5,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +16,3,7,5,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +17,3,8,17,WATERFALL,-5,-7,12,16 +17,3,20,17,WATERFALL,-5,-7,12,16 +1,4,22,31,BOWL,-54,97,0,0 +3,4,18,4,SPIKES__HIDING_UP,-114,124,0,0 +5,4,9,26,IRON_BALL,0,0,7,2 +5,4,29,26,IRON_BALL,-5,0,7,2 +6,4,3,14,INCLINE_RAMP,0,0,5,5 +8,4,30,29,SPRING__UP,0,99,0,0 +10,4,11,16,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +10,4,27,17,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +10,4,30,17,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +10,4,11,18,TOGGLE_PLAYER_LAYER__BACK,0,0,2,22 +10,4,13,18,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,22 +11,4,6,14,SPRING__UP,0,114,0,0 +12,4,0,25,TOGGLE__PLAYER_FLOAT,0,0,12,16 +17,4,8,1,WATERFALL,-5,-7,12,16 +17,4,20,1,WATERFALL,-5,-7,12,16 +17,4,8,17,WATERFALL,-5,-7,12,16 +17,4,20,17,WATERFALL,-5,-7,12,16 +20,4,15,26,PLATFORM_SQUARE,0,1,6,2 +2,5,27,21,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +2,5,27,23,TOGGLE_PLAYER_LAYER__BACK,0,0,2,11 +2,5,29,23,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,11 +3,5,11,12,TOGGLE_PLAYER_LAYER__BACK,-1,0,3,3 +3,5,14,12,TOGGLE_PLAYER_LAYER__FRONT,-1,0,3,3 +8,5,13,14,MOVING_SPRING,-2,0,4,2 +8,5,0,23,LIFT,0,73,0,0 +12,5,8,2,IA097,1,94,0,0 +12,5,3,7,IA097,0,89,0,0 +12,5,0,9,TOGGLE__PLAYER_FLOAT,0,0,12,16 +12,5,7,15,IA097,2,81,0,0 +12,5,2,22,IA097,0,74,0,0 +12,5,0,25,TOGGLE__PLAYER_FLOAT,0,0,12,16 +12,5,8,25,IA097,1,71,0,0 +12,5,5,29,IA097,1,67,0,0 +13,5,4,1,PLATFORM_THIN,0,0,4,2 +13,5,24,1,BOULDER_SPAWNER,1,95,0,0 +13,5,14,15,SPRING__UP,0,81,0,0 +14,5,26,3,TORCH,38,93,0,0 +14,5,26,15,TORCH,38,81,0,0 +14,5,26,27,TORCH,38,69,0,0 +15,5,1,3,TORCH,31,93,0,0 +15,5,10,3,TORCH,22,93,0,0 +15,5,13,27,TORCH,19,69,0,0 +15,5,22,27,TORCH,10,69,0,0 +17,5,8,1,WATERFALL,-5,-7,12,16 +17,5,20,1,WATERFALL,-5,-7,12,16 +17,5,8,2,LAVA,1,0,24,4 +20,5,1,8,LIFT,127,88,0,0 +20,5,29,10,RUN_WHEEL,6,86,27,0 +20,5,10,18,RUN_WHEEL,0,78,55,0 +31,5,28,13,SPIKES__NORMAL_LEFT,4,83,0,0 +31,5,28,17,SPIKES__NORMAL_LEFT,4,79,0,0 +5,6,16,8,IA085,80,56,0,0 +5,6,30,12,IA085,66,52,0,0 +5,6,2,13,DECORATION,94,51,0,0 +5,6,10,24,SPIKES__NORMAL_UP,86,40,0,0 +5,6,14,24,SPIKES__NORMAL_UP,82,40,0,0 +5,6,18,24,SPIKES__NORMAL_UP,78,40,0,0 +5,6,22,24,SPIKES__NORMAL_UP,74,40,0,0 +5,6,26,24,SPIKES__NORMAL_UP,70,40,0,0 +5,6,30,24,SPIKES__NORMAL_UP,66,40,0,0 +6,6,12,8,IA085,52,56,0,0 +6,6,2,24,SPIKES__NORMAL_UP,62,40,0,0 +6,6,6,24,SPIKES__NORMAL_UP,58,40,0,0 +6,6,10,24,SPIKES__NORMAL_UP,54,40,0,0 +6,6,14,24,SPIKES__NORMAL_UP,50,40,0,0 +6,6,18,24,SPIKES__NORMAL_UP,46,40,0,0 +6,6,22,24,SPIKES__NORMAL_UP,42,40,0,0 +7,6,2,12,CHECKPOINT,1,52,0,0 +9,6,21,18,BOUNCE_BLOCK,-53,46,0,0 +10,6,8,10,BOUNCE_BLOCK,-72,54,0,0 +10,6,1,18,BOUNCE_BLOCK,-65,46,0,0 +12,6,4,5,IA097,2,59,0,0 +14,6,29,0,RUN_WHEEL,2,64,30,0 +15,6,20,5,BOULDER_SPAWNER,1,59,0,0 +15,6,9,17,RUN_WHEEL,6,47,35,0 +16,6,29,7,TORCH,-29,57,0,0 +17,6,6,7,TORCH,-38,57,0,0 +17,6,14,7,TORCH,-46,57,0,0 +18,6,21,21,RUN_WHEEL,6,43,45,0 +18,6,12,24,CHECKPOINT,3,40,0,0 +18,6,24,28,SPIKES__NORMAL_RIGHT,-88,36,0,0 +19,6,17,8,RUN_WHEEL,7,56,110,0 +19,6,2,16,PLATFORM_SQUARE,0,0,2,6 +20,6,0,8,PLATFORM_THIN,0,0,2,6 +20,6,16,12,PLATFORM_SQUARE,0,1,6,2 +21,6,16,13,SPRING__LEFT,0,51,0,0 +22,6,28,8,SPRING__BIG_UPLEFT,0,56,0,0 +22,6,4,27,SPRING__BIG_UPRIGHT,0,37,0,0 +25,6,28,12,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +25,6,12,13,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +25,6,15,13,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +25,6,28,14,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,18 +25,6,31,14,TOGGLE_PLAYER_LAYER__BACK,0,0,2,18 +26,6,26,0,SPIKES__NORMAL_UP,-90,64,0,0 +29,6,29,15,PLATFORM_THIN,-2,0,4,2 +29,6,29,25,PLATFORM_THIN,0,0,4,2 +30,6,22,6,SPIKES__HIDING_UP,42,58,0,0 +14,7,31,25,PLATFORM_SQUARE,0,1,5,2 +17,7,2,23,TORCH,-34,9,0,0 +17,7,9,23,TORCH,-41,9,0,0 +17,7,18,23,TORCH,-50,9,0,0 +17,7,0,28,CHECKPOINT,2,4,0,0 +17,7,26,31,BOWL,-58,1,0,0 +22,7,28,14,SPRING__BIG_UPLEFT,0,18,0,0 +29,7,24,12,PLATFORM_SQUARE,0,0,2,6 +18,8,14,18,MOVING_SPRING,0,0,2,5 +22,8,4,1,SPRING__BIG_UPRIGHT,0,-1,0,0 +22,8,28,20,SPRING__BIG_UPLEFT,0,-20,0,0 +23,8,29,12,SKATING_STONE,1,0,0,0 +27,8,0,27,SPRING__BIG_UPRIGHT,0,-27,0,0 +28,8,10,8,PLATFORM_THIN__FALLING,118,-8,0,0 +28,8,19,10,RUN_WHEEL,0,-10,55,0 +29,8,17,5,RUN_WHEEL,6,-5,55,0 +29,8,11,6,PLATFORM_THIN__FALLING,85,-6,0,0 +32,8,13,12,STAGE_GOAL,0,1,0,0 +18,9,7,0,BOOSTER,-71,0,0,0 +21,9,22,24,BOOSTER,74,0,0,0 +22,9,4,7,SPRING__BIG_UPRIGHT,0,-39,0,0 +22,9,28,26,SPRING__SMALL_UPLEFT,0,-58,0,0 +26,9,22,20,LIFT,-86,-52,0,0 +26,9,13,30,CHECKPOINT,4,1,1,1 +27,9,24,14,SPRING__SMALL_UPLEFT,0,-46,0,0 +32,9,13,0,STAGE_GOAL,1,1,0,0 +26,10,26,7,PLATFORM_THIN__FALLING,-90,-71,0,0 +27,10,6,7,PLATFORM_THIN__FALLING,-102,-71,0,0 +28,10,26,5,SPRING__UP,1,-69,0,0 diff --git a/sa1/data/maps/zone_5/act_1/entities/itemboxes.csv b/sa1/data/maps/zone_5/act_1/entities/itemboxes.csv new file mode 100644 index 0000000000..2a513fa717 --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/entities/itemboxes.csv @@ -0,0 +1,18 @@ +Adv2,ITEMS,35,11, +2,0,22,24,SHIELD +8,0,2,24,SHIELD_MAGNETIC +22,0,26,30,INVINCIBILITY +25,0,10,30,RINGS_5 +8,1,0,16,RINGS_10 +15,1,26,28,SHIELD +14,2,22,20,SPEED_UP +26,2,4,8,SHIELD_MAGNETIC +17,3,20,0,RINGS_RANDOM +10,4,20,13,INVINCIBILITY +21,4,10,28,SHIELD +13,5,4,22,RINGS_5 +1,6,18,0,RINGS_5 +18,6,8,0,RINGS_10 +31,6,14,0,ONE_UP +21,9,10,24,ONE_UP +28,9,6,12,RINGS_5 diff --git a/sa1/data/maps/zone_5/act_1/entities/rings.csv b/sa1/data/maps/zone_5/act_1/entities/rings.csv new file mode 100644 index 0000000000..4e1929166b --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/entities/rings.csv @@ -0,0 +1,257 @@ +Adv2,RINGS,35,11 +3,0,5,13 +3,0,8,13 +3,0,11,13 +3,0,21,32 +3,0,24,32 +3,0,27,32 +8,0,15,26 +8,0,19,28 +8,0,23,30 +8,0,27,32 +9,0,22,25 +9,0,22,29 +9,0,22,33 +18,0,31,30 +19,0,2,30 +19,0,5,30 +21,0,25,23 +21,0,29,23 +21,0,23,26 +21,0,27,26 +21,0,31,26 +2,1,22,24 +2,1,19,27 +2,1,16,30 +2,1,13,33 +3,1,14,23 +3,1,29,24 +3,1,32,24 +3,1,15,27 +3,1,19,28 +4,1,3,24 +7,1,14,4 +7,1,14,7 +7,1,14,10 +9,1,22,5 +16,1,9,22 +16,1,12,22 +16,1,15,22 +19,1,21,17 +19,1,25,19 +19,1,29,21 +20,1,7,26 +20,1,11,28 +20,1,15,30 +23,1,1,8 +23,1,4,8 +23,1,7,8 +23,1,20,19 +23,1,23,22 +23,1,18,25 +23,1,26,25 +23,1,21,28 +23,1,24,31 +24,1,29,10 +25,1,2,5 +25,1,1,9 +26,1,17,7 +26,1,21,9 +26,1,25,11 +27,1,23,23 +27,1,21,27 +27,1,17,28 +2,2,5,32 +5,2,32,15 +5,2,26,17 +5,2,24,23 +6,2,6,17 +6,2,8,23 +6,2,23,27 +6,2,21,31 +6,2,17,32 +7,2,2,11 +7,2,2,14 +7,2,2,17 +8,2,17,32 +16,2,19,15 +16,2,16,18 +16,2,13,21 +16,2,10,24 +24,2,4,3 +24,2,7,6 +24,2,2,9 +24,2,10,9 +24,2,5,12 +24,2,8,15 +24,2,20,19 +24,2,23,22 +24,2,18,25 +24,2,26,25 +24,2,21,28 +24,2,24,31 +25,2,15,5 +25,2,19,5 +25,2,13,8 +25,2,17,8 +25,2,21,8 +1,3,29,4 +1,3,13,6 +1,3,9,8 +1,3,5,10 +2,3,1,2 +5,3,11,29 +5,3,15,29 +5,3,19,29 +7,3,32,29 +8,3,17,4 +8,3,17,8 +8,3,12,23 +8,3,8,25 +8,3,4,27 +10,3,24,17 +10,3,27,17 +10,3,30,17 +11,3,31,9 +11,3,4,29 +11,3,4,32 +12,3,3,11 +12,3,7,13 +13,3,3,33 +15,3,24,7 +15,3,18,9 +15,3,30,9 +15,3,16,15 +15,3,32,15 +26,3,6,7 +26,3,5,11 +26,3,1,12 +27,3,21,3 +27,3,25,5 +27,3,29,7 +27,3,31,31 +28,3,7,27 +28,3,3,29 +3,4,26,11 +3,4,27,15 +3,4,31,16 +5,4,9,7 +5,4,13,7 +5,4,17,7 +5,4,21,7 +6,4,32,7 +6,4,28,9 +7,4,8,3 +7,4,4,5 +8,4,30,12 +8,4,30,15 +8,4,30,18 +8,4,14,28 +8,4,14,32 +10,4,28,20 +10,4,22,22 +10,4,20,28 +11,4,4,3 +11,4,12,8 +11,4,15,8 +11,4,18,8 +11,4,2,22 +11,4,4,28 +11,4,18,32 +13,4,7,3 +13,4,11,5 +18,4,14,23 +18,4,15,27 +18,4,19,28 +27,4,21,19 +27,4,25,21 +27,4,29,23 +2,5,4,26 +2,5,7,26 +2,5,10,26 +3,5,12,15 +3,5,6,17 +3,5,18,17 +3,5,4,23 +3,5,20,23 +8,5,14,4 +8,5,24,33 +10,5,9,30 +10,5,12,30 +10,5,15,30 +11,5,17,4 +11,5,13,5 +11,5,11,25 +11,5,14,25 +11,5,17,25 +14,5,7,5 +14,5,11,7 +14,5,15,9 +30,5,27,30 +30,5,30,30 +31,5,1,30 +4,6,10,3 +4,6,13,6 +4,6,16,9 +5,6,4,5 +5,6,7,5 +5,6,10,5 +6,6,19,5 +6,6,22,5 +6,6,25,5 +8,6,28,3 +8,6,32,5 +8,6,6,7 +8,6,5,11 +8,6,1,12 +9,6,4,7 +9,6,29,8 +9,6,32,8 +9,6,8,9 +9,6,12,11 +10,6,3,8 +16,6,23,8 +16,6,3,9 +16,6,7,11 +16,6,23,11 +16,6,11,13 +16,6,23,14 +20,6,30,19 +20,6,29,23 +20,6,25,24 +25,6,16,16 +25,6,10,18 +25,6,22,18 +25,6,8,24 +25,6,24,24 +26,6,12,9 +26,6,9,12 +26,6,6,15 +17,7,2,20 +17,7,5,20 +17,7,8,20 +18,7,14,19 +18,7,14,22 +18,7,14,25 +24,7,30,19 +24,7,27,22 +25,7,1,16 +18,8,25,12 +18,8,30,13 +19,8,2,16 +19,8,2,21 +23,8,29,21 +23,8,29,25 +23,8,29,29 +27,8,6,17 +27,8,9,17 +27,8,12,17 +24,9,9,14 +24,9,13,18 +24,9,17,22 +25,9,5,31 +25,9,9,31 +25,9,13,31 +28,9,26,21 +28,9,26,25 +28,9,26,29 diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/bg/header.c b/sa1/data/maps/zone_5/act_1/tilemaps/bg/header.c new file mode 100644 index 0000000000..8752663b32 --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_5_act_1_fg[]; +const u8 Tiles_zone_5_act_1_bg[] = INCBIN_U8("data/maps/zone_5/act_1/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_5_act_1_bg[] = INCBIN_U8("data/maps/zone_5/act_1/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_5_act_1_bg = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_5_act_1_bg, + .tilesSize = sizeof(Tiles_zone_5_act_1_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_5_act_1_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_5_act_1_bg, +}; diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/bg/palette.pal b/sa1/data/maps/zone_5/act_1/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..dde0965b9c --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +123 255 255 +139 255 230 +255 255 255 +115 222 189 +197 255 197 +115 197 189 +98 197 255 +123 230 255 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +255 0 0 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +106 123 8 +131 123 139 +255 0 255 +255 255 255 +205 205 197 +156 156 139 +98 106 82 +49 57 24 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +123 255 255 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 255 90 +189 205 49 +172 148 24 +115 82 8 +106 57 0 +41 16 0 +41 16 0 +131 123 139 +82 189 115 +180 213 164 +172 205 172 +148 180 148 +148 156 131 +123 139 115 +115 115 98 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +180 180 180 +90 90 98 +123 255 82 +246 255 222 +238 246 213 +230 255 164 +213 205 148 +172 172 115 +156 123 90 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 255 +106 98 90 +0 180 57 +255 230 172 +238 205 148 +213 172 106 +180 139 74 +131 106 49 +98 82 32 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 230 +189 222 197 +0 180 57 +156 222 8 +115 164 8 +230 246 32 +255 230 172 +74 57 24 +131 106 49 +98 82 32 +148 123 65 +230 189 123 +238 205 148 +189 148 82 +213 172 106 +180 139 74 +255 255 255 +0 180 57 +123 255 255 +255 255 197 +222 213 164 +180 180 156 +148 148 115 +123 115 98 +98 74 65 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +32 32 49 +255 255 230 +189 222 197 +74 246 213 +57 115 115 +115 115 106 +106 115 115 +98 115 106 +90 98 90 +74 90 82 +57 65 65 +32 24 32 +115 115 74 +98 106 57 +74 82 32 +57 57 16 +49 32 0 +8 16 16 +115 115 115 +0 115 49 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +255 222 172 +255 189 82 +255 148 24 +222 123 16 +189 106 8 +139 82 0 +98 49 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +0 180 57 +255 0 0 +148 189 131 +123 164 90 +115 222 189 +98 131 74 +115 197 189 +90 115 57 +172 0 131 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +74 246 213 +255 222 139 +230 131 65 +189 123 57 +164 106 41 +131 98 41 +106 82 24 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +90 57 24 +74 246 213 +0 180 57 +139 98 32 +106 90 24 +106 74 24 +82 65 16 +74 57 16 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +49 41 16 +0 0 0 +0 180 57 +74 65 0 +74 65 16 +74 49 8 +57 41 0 +49 24 0 +32 24 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +24 16 0 +0 180 57 +24 16 0 diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_5/act_1/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..28021632cf Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/bg/tiles.png b/sa1/data/maps/zone_5/act_1/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..6ed7563c4b Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/flags.coll b/sa1/data/maps/zone_5/act_1/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..bcdb7fdd1e Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/header.c b/sa1/data/maps/zone_5/act_1/tilemaps/fg/header.c new file mode 100644 index 0000000000..78b3c63599 --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_5_act_1_fg[] = INCBIN_U16("data/maps/zone_5/act_1/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_5_act_1_fg[] = INCBIN_U8("data/maps/zone_5/act_1/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_5_act_1_fg[] = INCBIN_S8("data/maps/zone_5/act_1/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_5_act_1_fg[] = INCBIN_U8("data/maps/zone_5/act_1/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_5_act_1_fg[] = INCBIN_U16("data/maps/zone_5/act_1/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_5_act_1_fg0[] = INCBIN_MAP("data/maps/zone_5/act_1/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_5_act_1_fg1[] = INCBIN_MAP("data/maps/zone_5/act_1/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_5_act_1_fg[] = INCBIN_U16("data/maps/zone_5/act_1/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_5_act_1_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x60, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_5_act_1_fg, + .tilesSize = sizeof(Tileset_zone_5_act_1_fg) - (0 * 0x60), + .palette = Palette_zone_5_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_5_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_5_act_1_fg, + }, + .metatileMap = Map_zone_5_act_1_fg0, + .mapWidth = 93, + .mapHeight = 28, +}; + +ALIGNED(4) const struct MapHeader zone_5_act_1_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_5_act_1_fg, + .tilesSize = sizeof(Tileset_zone_5_act_1_fg) - (0 * 0x60), + .palette = Palette_zone_5_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_5_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_5_act_1_fg, + }, + .metatileMap = Map_zone_5_act_1_fg1, + .mapWidth = 93, + .mapHeight = 28, +}; + +const Collision CollHeader_zone_5_act_1_fg = { CollHeightMap_zone_5_act_1_fg, + CollTileRot_zone_5_act_1_fg, + Metatiles_zone_5_act_1_fg, + { Map_zone_5_act_1_fg0, Map_zone_5_act_1_fg1 }, + CollFlags_zone_5_act_1_fg, + 93, + 28, + 0x22E0, + 0x0A80 }; diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_5/act_1/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..94ff19b058 Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_5/act_1/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..b9c9ca6672 Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_5/act_1/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..d4a423a46c Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_5/act_1/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..d98fab994b --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {93,28} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_5/act_1/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..55241a26df Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/palette.pal b/sa1/data/maps/zone_5/act_1/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..dde0965b9c --- /dev/null +++ b/sa1/data/maps/zone_5/act_1/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +123 255 255 +139 255 230 +255 255 255 +115 222 189 +197 255 197 +115 197 189 +98 197 255 +123 230 255 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +255 0 0 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +106 123 8 +131 123 139 +255 0 255 +255 255 255 +205 205 197 +156 156 139 +98 106 82 +49 57 24 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +123 255 255 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 255 90 +189 205 49 +172 148 24 +115 82 8 +106 57 0 +41 16 0 +41 16 0 +131 123 139 +82 189 115 +180 213 164 +172 205 172 +148 180 148 +148 156 131 +123 139 115 +115 115 98 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +180 180 180 +90 90 98 +123 255 82 +246 255 222 +238 246 213 +230 255 164 +213 205 148 +172 172 115 +156 123 90 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 255 +106 98 90 +0 180 57 +255 230 172 +238 205 148 +213 172 106 +180 139 74 +131 106 49 +98 82 32 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 230 +189 222 197 +0 180 57 +156 222 8 +115 164 8 +230 246 32 +255 230 172 +74 57 24 +131 106 49 +98 82 32 +148 123 65 +230 189 123 +238 205 148 +189 148 82 +213 172 106 +180 139 74 +255 255 255 +0 180 57 +123 255 255 +255 255 197 +222 213 164 +180 180 156 +148 148 115 +123 115 98 +98 74 65 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +32 32 49 +255 255 230 +189 222 197 +74 246 213 +57 115 115 +115 115 106 +106 115 115 +98 115 106 +90 98 90 +74 90 82 +57 65 65 +32 24 32 +115 115 74 +98 106 57 +74 82 32 +57 57 16 +49 32 0 +8 16 16 +115 115 115 +0 115 49 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +255 222 172 +255 189 82 +255 148 24 +222 123 16 +189 106 8 +139 82 0 +98 49 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +0 180 57 +255 0 0 +148 189 131 +123 164 90 +115 222 189 +98 131 74 +115 197 189 +90 115 57 +172 0 131 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +74 246 213 +255 222 139 +230 131 65 +189 123 57 +164 106 41 +131 98 41 +106 82 24 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +90 57 24 +74 246 213 +0 180 57 +139 98 32 +106 90 24 +106 74 24 +82 65 16 +74 57 16 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +49 41 16 +0 0 0 +0 180 57 +74 65 0 +74 65 16 +74 49 8 +57 41 0 +49 24 0 +32 24 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +24 16 0 +0 180 57 +24 16 0 diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_5/act_1/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..da56d3b29d Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_5/act_1/tilemaps/fg/tileset.png b/sa1/data/maps/zone_5/act_1/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..679a49ec40 Binary files /dev/null and b/sa1/data/maps/zone_5/act_1/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_5/act_2/entities/enemies.csv b/sa1/data/maps/zone_5/act_2/entities/enemies.csv new file mode 100644 index 0000000000..00a1a3e268 --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/entities/enemies.csv @@ -0,0 +1,17 @@ +Adv2,ENEMIES,38,7,,,,, +25,0,25,6,BUZZER,-4,0,6,2 +9,2,8,14,LEON,-3,0,5,2 +9,2,8,26,LEON,0,0,5,2 +10,2,0,14,LEON,0,0,5,2 +10,2,0,26,LEON,-3,0,5,2 +13,2,11,8,BUZZER,-4,0,6,2 +14,2,11,8,BUZZER,-4,0,6,2 +3,3,20,13,WAMU,0,0,4,2 +4,3,4,11,WAMU,-2,0,4,2 +26,3,13,4,LEON,0,0,5,2 +14,4,31,26,LEON,-3,0,5,2 +19,4,16,4,BUZZER,0,0,7,2 +22,4,2,1,BUZZER,0,0,6,2 +36,4,5,18,MECHA_KNUCKLES,123,110,0,0 +9,5,27,6,RHINOTANK,0,0,5,2 +18,5,23,6,RHINOTANK,-4,0,6,2 diff --git a/sa1/data/maps/zone_5/act_2/entities/interactables.csv b/sa1/data/maps/zone_5/act_2/entities/interactables.csv new file mode 100644 index 0000000000..add8c936ac --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/entities/interactables.csv @@ -0,0 +1,142 @@ +Adv2,INTERACTABLES,38,7,,,,, +21,0,1,19,TORCH,95,-19,0,0 +21,0,10,19,TORCH,86,-19,0,0 +21,0,18,19,TORCH,78,-19,0,0 +21,0,30,21,IA085,66,-21,0,0 +21,0,3,25,RUN_WHEEL,0,-25,55,0 +22,0,5,31,RUN_WHEEL,7,-31,98,0 +23,0,0,15,IA085,32,-15,0,0 +25,0,10,15,RUN_WHEEL,0,-15,75,0 +25,0,17,31,TORCH,-49,-31,0,0 +25,0,26,31,TORCH,-58,-31,0,0 +26,0,18,25,SPECIAL_SPRING,-82,-25,0,0 +26,0,2,31,TORCH,-66,-31,0,0 +20,1,30,11,SPRING__UP,0,-43,0,0 +20,1,6,15,PLATFORM_THIN,0,0,6,2 +20,1,6,23,PLATFORM_THIN,-4,0,6,2 +21,1,1,23,TORCH,95,-55,0,0 +21,1,10,23,TORCH,86,-55,0,0 +21,1,30,26,SPIKES__NORMAL_LEFT,0,-58,0,0 +25,1,13,13,RUN_WHEEL,6,-45,65,0 +26,1,17,25,MINILOOP_BASE,0,0,3,4 +26,1,20,25,IA034,0,0,3,4 +8,2,21,10,PLATFORM_SQUARE,0,1,4,2 +8,2,26,27,PLATFORM_SQUARE,0,0,2,4 +9,2,21,22,PLATFORM_SPIKED,0,0,2,6 +10,2,10,20,SPIKES__NORMAL_RIGHT,-74,-84,0,0 +10,2,25,26,PLATFORM_SPIKED,1,0,2,4 +11,2,25,20,CHECKPOINT,1,-84,0,0 +17,2,20,6,SPIKES__NORMAL_LEFT,-52,-70,0,0 +17,2,20,10,SPIKES__NORMAL_LEFT,-52,-74,0,0 +17,2,20,14,SPIKES__NORMAL_LEFT,-52,-78,0,0 +18,2,14,15,RUN_WHEEL,7,-79,45,0 +18,2,6,29,RUN_WHEEL,6,-93,25,0 +19,2,22,1,SPRING__LEFT,-118,-65,0,0 +19,2,0,4,SPIKES__HIDING_UP,-96,-68,0,0 +21,2,30,22,RUN_WHEEL,0,-86,75,0 +23,2,18,20,SPIKES__HIDING_UP,14,-84,0,0 +24,2,2,28,SPIKES__NORMAL_UP,-2,-92,0,0 +25,2,16,29,DECORATION,-48,-93,0,0 +27,2,9,17,IA034,0,0,3,4 +27,2,12,17,MINILOOP_BASE,0,0,3,4 +1,3,22,22,BOUNCE_BLOCK,-54,-118,0,0 +1,3,10,27,BOUNCE_BLOCK,-42,-123,0,0 +2,3,4,29,BOUNCE_BLOCK,-68,-125,0,0 +5,3,18,1,WATERFALL,0,0,2,11 +5,3,20,10,FORCED_ICE_SLIDE,0,0,24,27 +7,3,16,8,SPRING__BIG_UPRIGHT,0,-104,0,0 +7,3,12,28,PLATFORM_SQUARE,1,0,2,7 +8,3,8,26,SPRING__SMALL_UPLEFT,0,-122,0,0 +10,3,16,18,TOGGLE__PLAYER_FLOAT,0,0,12,14 +10,3,20,31,IA097,1,-127,0,0 +10,3,23,31,IA097,2,-127,0,0 +11,3,0,13,BOOSTER_STEEP,-96,0,0,0 +12,3,10,22,FORCED_ICE_SLIDE,1,1,26,17 +13,3,25,1,WATERFALL,0,0,3,12 +13,3,2,10,FORCED_ICE_SLIDE,1,0,26,17 +14,3,2,12,SPIKES__HIDING_UP,62,-108,0,0 +15,3,20,13,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +15,3,22,15,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +15,3,24,17,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +15,3,26,19,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +15,3,20,25,TOGGLE_PLAYER_LAYER__BACK,0,0,2,13 +15,3,22,27,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +15,3,24,29,TOGGLE_PLAYER_LAYER__BACK,0,0,2,12 +15,3,26,31,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +16,3,31,5,TOGGLE_PLAYER_LAYER__BACK,0,0,9,12 +16,3,31,17,TOGGLE_PLAYER_LAYER__BACK,0,0,9,12 +16,3,28,19,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +16,3,31,29,TOGGLE_PLAYER_LAYER__BACK,0,0,9,12 +16,3,28,31,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +18,3,2,25,SPRING__UP,1,-121,0,0 +21,3,5,7,PLATFORM_SPIKED,1,0,2,3 +21,3,25,7,TORCH,71,-103,0,0 +22,3,2,7,TORCH,62,-103,0,0 +22,3,10,7,TORCH,54,-103,0,0 +22,3,3,12,PLATFORM_THIN,0,0,2,8 +22,3,16,25,PLATFORM_THIN,0,-6,2,8 +23,3,27,15,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +23,3,27,17,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +23,3,29,17,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +24,3,14,12,SPRING__UP,0,-108,0,0 +24,3,11,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +24,3,14,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +24,3,29,21,PLATFORM_THIN__FALLING,-29,-117,0,0 +27,3,16,19,DECORATION,-112,-115,0,0 +28,3,3,25,PLATFORM_THIN,0,0,2,7 +36,3,29,29,STAGE_GOAL,0,0,0,0 +1,4,27,2,BOUNCE_BLOCK,-59,126,0,0 +1,4,18,7,BOUNCE_BLOCK,-50,121,0,0 +2,4,11,3,BOUNCE_BLOCK,-75,125,0,0 +2,4,4,12,BOUNCE_BLOCK,-68,116,0,0 +6,4,22,17,SPRING__UP,0,111,0,0 +7,4,2,4,SPIKES__HIDING_UP,30,124,0,0 +9,4,5,22,HANG_BAR,-13,0,28,2 +10,4,16,0,TOGGLE__PLAYER_FLOAT,0,0,12,14 +10,4,19,4,IA097,2,124,0,0 +10,4,24,7,IA097,0,121,0,0 +10,4,16,14,TOGGLE__PLAYER_FLOAT,0,0,12,14 +10,4,23,18,IA097,2,110,0,0 +10,4,18,19,IA097,0,109,0,0 +10,4,16,28,TOGGLE__PLAYER_FLOAT,0,0,12,14 +11,4,18,2,FORCED_ICE_SLIDE,1,2,26,17 +15,4,9,25,MINILOOP_BASE,0,0,3,4 +15,4,12,25,IA034,0,0,3,4 +17,4,20,5,SPRING__LEFT,1,123,0,0 +17,4,12,28,CHECKPOINT,2,100,0,0 +18,4,21,2,PLATFORM_SQUARE,-1,1,3,2 +19,4,11,19,TOGGLE_PLAYER_LAYER__BACK,0,0,5,2 +19,4,16,19,SPRING__BIG_UPLEFT,0,109,0,0 +19,4,27,20,TOGGLE_PLAYER_LAYER__BACK,0,0,3,3 +19,4,30,20,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,3 +19,4,11,21,TOGGLE_PLAYER_LAYER__BACK,0,0,2,21 +19,4,13,21,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,21 +20,4,11,24,LIFT,117,104,0,0 +22,4,22,14,PLATFORM_SQUARE,-3,1,5,2 +22,4,14,22,PLATFORM_SQUARE,0,1,5,2 +22,4,2,29,SPRING__UP,0,99,0,0 +27,4,25,11,TORCH,-121,117,0,0 +27,4,28,13,PLATFORM_THIN,0,-5,2,7 +28,4,2,11,TORCH,126,117,0,0 +28,4,10,11,TORCH,118,117,0,0 +28,4,12,24,PLATFORM_THIN,0,0,2,7 +31,4,4,29,SPRING__HIDING,28,32,0,0 +32,4,1,16,CHECKPOINT,3,112,0,0 +36,4,29,16,STAGE_GOAL,1,0,0,0 +8,5,9,0,BOUNCE_BLOCK,-9,96,0,0 +8,5,23,0,PLATFORM_THIN,-2,0,4,2 +8,5,4,6,BOUNCE_BLOCK,-4,90,0,0 +10,5,19,0,IA097,2,96,0,0 +10,5,24,5,IA097,1,91,0,0 +12,5,10,27,PLATFORM_SQUARE,0,1,4,2 +13,5,2,14,HANG_BAR,-18,0,40,2 +13,5,30,20,SPIKES__HIDING_UP,66,76,0,0 +14,5,16,7,LIFT,48,89,0,0 +14,5,2,20,SPIKES__NORMAL_UP,62,76,0,0 +16,5,1,17,IA034,0,0,3,4 +16,5,4,17,MINILOOP_BASE,0,0,3,4 +17,5,31,3,PLATFORM_SQUARE,0,1,4,2 +21,5,18,12,PLATFORM_SQUARE,0,0,2,6 +27,5,30,8,BOOSTER,-126,0,0,0 +29,5,20,9,SPRING__HIDING,76,32,0,0 +11,6,6,14,SPRING__SMALL_UPRIGHT,0,50,0,0 diff --git a/sa1/data/maps/zone_5/act_2/entities/itemboxes.csv b/sa1/data/maps/zone_5/act_2/entities/itemboxes.csv new file mode 100644 index 0000000000..ee2fcbc1bd --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/entities/itemboxes.csv @@ -0,0 +1,13 @@ +Adv2,ITEMS,38,7, +24,0,4,12,RINGS_5 +24,1,10,4,RINGS_10 +7,2,24,8,SPEED_UP +7,2,28,8,RINGS_5 +17,2,28,20,RINGS_RANDOM +24,3,2,11,RINGS_10 +28,3,26,12,SHIELD +6,4,14,16,SHIELD +9,4,26,22,SHIELD_MAGNETIC +19,4,24,15,INVINCIBILITY +27,4,14,16,RINGS_RANDOM +27,5,26,8,RINGS_5 diff --git a/sa1/data/maps/zone_5/act_2/entities/rings.csv b/sa1/data/maps/zone_5/act_2/entities/rings.csv new file mode 100644 index 0000000000..55a612248f --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/entities/rings.csv @@ -0,0 +1,161 @@ +Adv2,RINGS,38,7 +23,0,5,8 +23,0,8,8 +23,0,11,8 +23,0,21,33 +23,0,25,33 +23,0,29,33 +25,0,1,8 +25,0,4,8 +25,0,7,8 +20,1,14,5 +20,1,17,5 +20,1,20,5 +22,1,25,25 +22,1,29,27 +23,1,1,29 +24,1,9,28 +24,1,5,30 +24,1,1,32 +7,2,29,27 +7,2,32,27 +8,2,7,3 +8,2,10,3 +8,2,13,3 +8,2,3,27 +9,2,18,11 +9,2,21,11 +9,2,24,11 +10,2,22,15 +10,2,25,15 +10,2,28,15 +11,2,9,27 +11,2,14,27 +11,2,18,30 +12,2,20,12 +12,2,24,12 +12,2,28,12 +13,2,24,12 +13,2,28,12 +13,2,32,12 +15,2,18,24 +15,2,21,27 +15,2,24,30 +15,2,27,33 +24,2,17,24 +24,2,20,24 +24,2,23,24 +25,2,27,24 +25,2,30,24 +26,2,1,24 +28,2,19,20 +28,2,19,24 +28,2,19,28 +1,3,12,17 +1,3,15,17 +1,3,18,17 +1,3,19,30 +1,3,22,30 +1,3,25,30 +2,3,8,17 +2,3,11,17 +2,3,14,17 +4,3,31,19 +5,3,5,13 +5,3,2,16 +5,3,26,16 +5,3,29,19 +5,3,32,22 +6,3,3,25 +6,3,22,27 +6,3,6,28 +6,3,22,30 +6,3,22,33 +9,3,14,16 +9,3,18,16 +9,3,22,16 +11,3,18,3 +14,3,10,16 +14,3,10,20 +14,3,13,23 +14,3,17,23 +16,3,10,16 +16,3,13,19 +16,3,16,22 +16,3,19,25 +18,3,28,27 +18,3,31,27 +19,3,2,27 +22,3,30,30 +23,3,1,30 +23,3,4,30 +24,3,12,19 +24,3,6,21 +24,3,18,21 +24,3,4,27 +24,3,20,27 +26,3,20,2 +26,3,23,2 +26,3,26,2 +26,3,24,21 +26,3,20,23 +26,3,16,25 +26,3,12,27 +27,3,23,14 +27,3,26,14 +27,3,29,14 +8,4,14,27 +8,4,17,27 +8,4,20,27 +9,4,2,25 +9,4,6,25 +9,4,10,25 +9,4,16,32 +9,4,19,32 +9,4,22,32 +17,4,18,26 +17,4,21,26 +17,4,24,26 +19,4,28,23 +19,4,22,25 +19,4,20,31 +20,4,2,25 +20,4,4,31 +22,4,2,13 +22,4,5,13 +22,4,8,13 +24,4,28,16 +24,4,27,20 +24,4,24,23 +24,4,20,24 +29,4,29,24 +29,4,32,24 +30,4,3,24 +31,4,7,12 +31,4,10,12 +31,4,13,12 +32,4,28,10 +32,4,31,10 +32,4,11,14 +32,4,14,14 +32,4,17,14 +33,4,2,10 +12,5,31,17 +12,5,11,19 +12,5,14,19 +12,5,17,19 +13,5,3,17 +13,5,7,17 +16,5,32,21 +16,5,27,25 +16,5,31,25 +18,5,11,15 +18,5,10,19 +18,5,6,20 +20,5,12,18 +20,5,10,24 +20,5,6,27 +20,5,1,28 +28,5,5,6 +28,5,9,6 +28,5,13,6 diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/bg/header.c b/sa1/data/maps/zone_5/act_2/tilemaps/bg/header.c new file mode 100644 index 0000000000..4dbea7b04b --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_5_act_2_fg[]; +const u8 Tiles_zone_5_act_2_bg[] = INCBIN_U8("data/maps/zone_5/act_2/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_5_act_2_bg[] = INCBIN_U8("data/maps/zone_5/act_2/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_5_act_2_bg = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_5_act_2_bg, + .tilesSize = sizeof(Tiles_zone_5_act_2_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_5_act_2_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_5_act_2_bg, +}; diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/bg/palette.pal b/sa1/data/maps/zone_5/act_2/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..dde0965b9c --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +123 255 255 +139 255 230 +255 255 255 +115 222 189 +197 255 197 +115 197 189 +98 197 255 +123 230 255 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +255 0 0 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +106 123 8 +131 123 139 +255 0 255 +255 255 255 +205 205 197 +156 156 139 +98 106 82 +49 57 24 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +123 255 255 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 255 90 +189 205 49 +172 148 24 +115 82 8 +106 57 0 +41 16 0 +41 16 0 +131 123 139 +82 189 115 +180 213 164 +172 205 172 +148 180 148 +148 156 131 +123 139 115 +115 115 98 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +180 180 180 +90 90 98 +123 255 82 +246 255 222 +238 246 213 +230 255 164 +213 205 148 +172 172 115 +156 123 90 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 255 +106 98 90 +0 180 57 +255 230 172 +238 205 148 +213 172 106 +180 139 74 +131 106 49 +98 82 32 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 230 +189 222 197 +0 180 57 +156 222 8 +115 164 8 +230 246 32 +255 230 172 +74 57 24 +131 106 49 +98 82 32 +148 123 65 +230 189 123 +238 205 148 +189 148 82 +213 172 106 +180 139 74 +255 255 255 +0 180 57 +123 255 255 +255 255 197 +222 213 164 +180 180 156 +148 148 115 +123 115 98 +98 74 65 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +32 32 49 +255 255 230 +189 222 197 +74 246 213 +57 115 115 +115 115 106 +106 115 115 +98 115 106 +90 98 90 +74 90 82 +57 65 65 +32 24 32 +115 115 74 +98 106 57 +74 82 32 +57 57 16 +49 32 0 +8 16 16 +115 115 115 +0 115 49 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +255 222 172 +255 189 82 +255 148 24 +222 123 16 +189 106 8 +139 82 0 +98 49 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +0 180 57 +255 0 0 +148 189 131 +123 164 90 +115 222 189 +98 131 74 +115 197 189 +90 115 57 +172 0 131 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +74 246 213 +255 222 139 +230 131 65 +189 123 57 +164 106 41 +131 98 41 +106 82 24 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +90 57 24 +74 246 213 +0 180 57 +139 98 32 +106 90 24 +106 74 24 +82 65 16 +74 57 16 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +49 41 16 +0 0 0 +0 180 57 +74 65 0 +74 65 16 +74 49 8 +57 41 0 +49 24 0 +32 24 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +24 16 0 +0 180 57 +24 16 0 diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_5/act_2/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..28021632cf Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/bg/tiles.png b/sa1/data/maps/zone_5/act_2/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..6ed7563c4b Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/flags.coll b/sa1/data/maps/zone_5/act_2/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..bcdb7fdd1e Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/header.c b/sa1/data/maps/zone_5/act_2/tilemaps/fg/header.c new file mode 100644 index 0000000000..2fffe0824b --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_5_act_2_fg[] = INCBIN_U16("data/maps/zone_5/act_2/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_5_act_2_fg[] = INCBIN_U8("data/maps/zone_5/act_2/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_5_act_2_fg[] = INCBIN_S8("data/maps/zone_5/act_2/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_5_act_2_fg[] = INCBIN_U8("data/maps/zone_5/act_2/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_5_act_2_fg[] = INCBIN_U16("data/maps/zone_5/act_2/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_5_act_2_fg0[] = INCBIN_MAP("data/maps/zone_5/act_2/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_5_act_2_fg1[] = INCBIN_MAP("data/maps/zone_5/act_2/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_5_act_2_fg[] = INCBIN_U16("data/maps/zone_5/act_2/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_5_act_2_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x60, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_5_act_2_fg, + .tilesSize = sizeof(Tileset_zone_5_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_5_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_5_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_5_act_2_fg, + }, + .metatileMap = Map_zone_5_act_2_fg0, + .mapWidth = 100, + .mapHeight = 18, +}; + +ALIGNED(4) const struct MapHeader zone_5_act_2_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_5_act_2_fg, + .tilesSize = sizeof(Tileset_zone_5_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_5_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_5_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_5_act_2_fg, + }, + .metatileMap = Map_zone_5_act_2_fg1, + .mapWidth = 100, + .mapHeight = 18, +}; + +const Collision CollHeader_zone_5_act_2_fg = { CollHeightMap_zone_5_act_2_fg, + CollTileRot_zone_5_act_2_fg, + Metatiles_zone_5_act_2_fg, + { Map_zone_5_act_2_fg0, Map_zone_5_act_2_fg1 }, + CollFlags_zone_5_act_2_fg, + 100, + 18, + 0x2580, + 0x06C0 }; diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_5/act_2/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..94ff19b058 Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_5/act_2/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..6fb6194d00 Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_5/act_2/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..8e17b65d4a Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_5/act_2/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..ed0659b005 --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {100,18} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_5/act_2/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..a75482c96a Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/palette.pal b/sa1/data/maps/zone_5/act_2/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..dde0965b9c --- /dev/null +++ b/sa1/data/maps/zone_5/act_2/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +123 255 255 +139 255 230 +255 255 255 +115 222 189 +197 255 197 +115 197 189 +98 197 255 +123 230 255 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +255 0 0 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +106 123 8 +131 123 139 +255 0 255 +255 255 255 +205 205 197 +156 156 139 +98 106 82 +49 57 24 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +123 255 255 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 255 90 +189 205 49 +172 148 24 +115 82 8 +106 57 0 +41 16 0 +41 16 0 +131 123 139 +82 189 115 +180 213 164 +172 205 172 +148 180 148 +148 156 131 +123 139 115 +115 115 98 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +180 180 180 +90 90 98 +123 255 82 +246 255 222 +238 246 213 +230 255 164 +213 205 148 +172 172 115 +156 123 90 +82 74 90 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 255 +106 98 90 +0 180 57 +255 230 172 +238 205 148 +213 172 106 +180 139 74 +131 106 49 +98 82 32 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +41 16 0 +255 255 230 +189 222 197 +0 180 57 +156 222 8 +115 164 8 +230 246 32 +255 230 172 +74 57 24 +131 106 49 +98 82 32 +148 123 65 +230 189 123 +238 205 148 +189 148 82 +213 172 106 +180 139 74 +255 255 255 +0 180 57 +123 255 255 +255 255 197 +222 213 164 +180 180 156 +148 148 115 +123 115 98 +98 74 65 +74 57 82 +255 255 156 +213 230 115 +164 180 74 +131 115 32 +106 82 0 +32 32 49 +255 255 230 +189 222 197 +74 246 213 +57 115 115 +115 115 106 +106 115 115 +98 115 106 +90 98 90 +74 90 82 +57 65 65 +32 24 32 +115 115 74 +98 106 57 +74 82 32 +57 57 16 +49 32 0 +8 16 16 +115 115 115 +0 115 49 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +255 222 172 +255 189 82 +255 148 24 +222 123 16 +189 106 8 +139 82 0 +98 49 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +0 180 57 +255 0 0 +148 189 131 +123 164 90 +115 222 189 +98 131 74 +115 197 189 +90 115 57 +172 0 131 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +74 246 213 +255 222 139 +230 131 65 +189 123 57 +164 106 41 +131 98 41 +106 82 24 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +90 57 24 +74 246 213 +0 180 57 +139 98 32 +106 90 24 +106 74 24 +82 65 16 +74 57 16 +41 41 16 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +41 16 0 +0 180 57 +49 41 16 +0 0 0 +0 180 57 +74 65 0 +74 65 16 +74 49 8 +57 41 0 +49 24 0 +32 24 0 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +24 16 0 +0 180 57 +24 16 0 diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_5/act_2/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..287558b4e0 Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_5/act_2/tilemaps/fg/tileset.png b/sa1/data/maps/zone_5/act_2/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..679a49ec40 Binary files /dev/null and b/sa1/data/maps/zone_5/act_2/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_6/act_1/entities/enemies.csv b/sa1/data/maps/zone_6/act_1/entities/enemies.csv new file mode 100644 index 0000000000..3fd3feab83 --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/entities/enemies.csv @@ -0,0 +1,39 @@ +Adv2,ENEMIES,17,32,,,,, +7,1,6,25,MOLE,26,-57,0,0 +6,2,7,11,MIRROR,0,0,4,2 +10,2,14,25,OCT,-5,0,13,2 +8,3,11,27,OCT,0,0,6,2 +11,3,9,14,OCT,0,0,6,2 +6,4,26,3,OCT,0,0,4,2 +7,4,9,7,MOLE,23,121,0,0 +9,6,9,26,OCT,0,0,5,2 +10,6,3,21,MOLE,-67,43,0,0 +4,11,9,15,MIRROR,-3,0,5,2 +4,11,9,25,MIRROR,0,0,4,2 +6,13,1,18,MIRROR,0,0,4,2 +6,13,0,28,MIRROR,-2,0,4,2 +7,15,7,9,MOLE,25,23,0,0 +9,15,27,5,OCT,0,0,5,2 +12,16,13,22,MIRROR,0,0,8,2 +8,17,11,5,MOLE,-11,-37,0,0 +8,17,23,5,MOLE,-23,-37,0,0 +13,18,20,26,MIRROR,0,0,6,2 +11,19,20,4,OCT,0,0,6,2 +15,19,2,9,MOLE,30,-105,0,0 +5,20,24,5,MOLE,72,123,0,0 +8,20,5,5,MOLE,-5,123,0,0 +11,20,7,25,OCT,0,0,4,2 +7,21,0,3,MOLE,32,93,0,0 +10,23,5,31,OCT,-4,0,11,2 +5,24,0,22,OCT,0,0,5,2 +7,24,3,0,OCT,0,0,5,2 +8,24,29,27,MOLE,-29,-27,0,0 +13,25,9,15,OCT,-5,0,13,2 +3,26,16,31,OCT,-3,0,9,2 +8,26,5,5,MOLE,-5,-69,0,0 +9,26,17,14,MIRROR,0,0,5,2 +4,27,31,3,OCT,-2,0,6,2 +11,27,30,6,MIRROR,-3,0,5,2 +5,29,15,5,MOLE,81,91,0,0 +5,29,3,13,MIRROR,-2,0,6,2 +11,29,13,17,MOLE,-109,79,0,0 diff --git a/sa1/data/maps/zone_6/act_1/entities/interactables.csv b/sa1/data/maps/zone_6/act_1/entities/interactables.csv new file mode 100644 index 0000000000..6a1b0c2b11 --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/entities/interactables.csv @@ -0,0 +1,383 @@ +Adv2,INTERACTABLES,17,32,,,,, +7,0,16,15,TOGGLE__PLAYER_FLOAT,0,0,18,13 +7,0,25,23,SPIKED_BARREL__CHAOHUNT,7,-23,0,0 +7,0,16,28,TOGGLE__PLAYER_FLOAT,0,0,18,14 +8,0,12,0,STAGE_GOAL,0,1,0,0 +8,0,14,0,STAGE_GOAL,0,1,0,0 +8,0,16,0,STAGE_GOAL,0,1,0,0 +8,0,15,12,MOVING_SPRING,2,0,4,2 +8,0,4,21,STAGE_GOAL,1,0,0,0 +8,0,24,22,SPRING__UP,0,-22,0,0 +6,1,29,29,PLATFORM_SQUARE,0,0,2,7 +7,1,25,1,SPIKED_BARREL__CHAOHUNT,7,-33,0,0 +7,1,16,13,SPIKES__NORMAL_RIGHT,16,-45,0,0 +7,1,11,25,BOOSTER,21,0,0,0 +8,1,7,16,PLATFORM_SQUARE,-4,1,6,2 +8,1,25,23,PLATFORM_SQUARE,0,1,5,2 +9,1,7,16,SPRING__DOWN,1,-48,0,0 +6,2,24,17,SPIKES__NORMAL_UP,40,-81,0,0 +9,2,5,29,BOOSTER,0,-93,0,0 +6,3,0,10,SPRING__RIGHT,3,-106,0,0 +9,3,12,2,SPIKES__NORMAL_RIGHT,-44,-98,0,0 +9,3,18,21,BOOSTER,-50,0,0,0 +10,3,7,4,PLATFORM_SQUARE,-10,1,12,2 +11,3,7,2,PLATFORM_SQUARE,0,1,9,2 +11,3,9,24,PLATFORM_THIN,0,0,6,2 +11,3,30,28,SPRING__UP,1,-124,0,0 +5,4,30,7,SPIKES__NORMAL_DOWN,66,121,0,0 +6,4,3,7,BOUNCE_BLOCK,61,121,0,0 +7,4,4,14,SPRING__LEFT,1,114,0,0 +7,4,30,26,SPRING__UP,3,102,0,0 +8,4,11,6,PLATFORM_THIN,-5,0,7,2 +8,4,5,25,SPIKES__NORMAL_UP,-5,103,0,0 +8,4,23,25,BOOSTER,-23,0,0,0 +8,4,14,26,PLATFORM_THIN__FALLING,-14,102,0,0 +9,4,9,6,BOOSTER__WALL,-41,0,0,0 +11,4,10,1,SPIKES__HIDING_UP,-106,127,0,0 +11,4,14,1,SPIKES__NORMAL_UP,-110,127,0,0 +11,4,18,1,SPIKES__NORMAL_UP,-114,127,0,0 +5,5,11,5,BOOSTER__WALL,0,91,0,0 +5,5,27,29,BOOSTER,0,67,0,0 +6,5,18,24,MOVING_SPRING,0,0,8,2 +9,5,10,12,TOGGLE_GRAVITY,1,0,2,20 +9,5,12,12,TOGGLE_GRAVITY,2,0,2,20 +10,5,12,21,IRON_BALL,0,0,2,4 +12,5,26,14,SPIKES__NORMAL_DOWN,102,82,0,0 +12,5,30,14,SPIKES__HIDING_DOWN,98,82,0,0 +12,5,8,16,IRON_BALL,0,0,4,2 +7,6,25,9,BOOSTER,0,55,0,0 +7,6,28,16,SPIKES__NORMAL_RIGHT,4,48,0,0 +8,6,19,0,PLATFORM_THIN,0,-4,2,6 +8,6,11,5,SPIKED_BARREL,0,0,2,5 +8,6,3,8,SPIKED_BARREL,0,-4,2,6 +10,6,30,10,TOGGLE_GRAVITY,1,0,2,12 +10,6,30,22,TOGGLE_GRAVITY,1,0,2,14 +10,6,13,24,IRON_BALL,0,0,2,4 +11,6,0,10,TOGGLE_GRAVITY,2,0,2,12 +11,6,0,22,TOGGLE_GRAVITY,2,0,2,14 +12,6,4,11,SPRING__DOWN,0,53,0,0 +12,6,8,24,SPIKES__HIDING_DOWN,120,40,0,0 +4,7,13,11,TRACK,0,30,20,1 +4,7,24,11,PIPE_ENTRANCE,-30,0,2,0 +5,7,13,3,TOGGLE_PLAYER_LAYER__BACK,0,0,4,12 +5,7,17,4,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,11 +6,7,6,2,SPRING__UP,5,-56,0,0 +6,7,10,2,SPRING__UP,5,-56,0,0 +6,7,14,2,SPRING__UP,5,-56,0,0 +6,7,18,2,SPRING__UP,5,-56,0,0 +6,7,22,2,SPRING__UP,5,-56,0,0 +6,7,26,2,SPRING__UP,5,-56,0,0 +6,7,30,2,SPRING__UP,5,-56,0,0 +6,7,16,24,BOOSTER_STEEP,0,8,0,0 +7,7,2,2,SPRING__UP,5,-56,0,0 +7,7,31,22,PLATFORM_THIN__FALLING,1,10,0,0 +7,7,31,31,PLATFORM_THIN,1,1,0,0 +8,7,12,14,SPRING__UP,0,18,0,0 +9,7,28,2,SPRING__UP,0,30,0,0 +12,7,30,1,SPIKES__NORMAL_UP,98,31,0,0 +12,7,12,28,TOGGLE_PLAYER_LAYER__FRONT,0,0,22,3 +13,7,2,1,SPIKES__NORMAL_UP,94,31,0,0 +13,7,6,15,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +13,7,17,23,PIPE_ENTRANCE,12,0,3,0 +13,7,25,23,TRACK,0,120,80,1 +13,7,2,27,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,21 +13,7,6,28,TOGGLE_PLAYER_LAYER__BACK,0,0,4,20 +4,8,13,3,TRACK,25,0,15,2 +4,8,31,3,PIPE_EXIT,97,30,2,3 +8,8,16,24,BOOSTER_STEEP,0,-24,0,0 +10,8,5,26,BOOSTER_STEEP,-69,0,0,0 +11,8,13,6,BOOSTER_STEEP,-109,0,0,0 +13,8,2,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,19 +13,8,6,16,TOGGLE_PLAYER_LAYER__BACK,0,0,4,19 +13,8,16,19,SPIKES__NORMAL_LEFT,80,-19,0,0 +13,8,16,23,SPIKES__NORMAL_LEFT,80,-23,0,0 +13,8,16,27,SPIKES__NORMAL_LEFT,80,-27,0,0 +8,9,29,14,BOOSTER_STEEP,-29,0,0,0 +9,9,24,12,BOOSTER_STEEP,0,-44,0,0 +10,9,24,28,BOOSTER_STEEP,0,-60,0,0 +13,9,25,1,TRACK,0,120,80,2 +13,9,2,3,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,20 +13,9,6,3,TOGGLE_PLAYER_LAYER__BACK,0,0,4,20 +13,9,2,23,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,16 +13,9,6,23,TOGGLE_PLAYER_LAYER__BACK,0,0,5,16 +6,10,23,17,BOOSTER_STEEP,41,0,0,0 +7,10,23,1,BOOSTER_STEEP,9,0,0,0 +11,10,26,13,BOOSTER_STEEP,0,-77,0,0 +12,10,24,28,BOOSTER_STEEP,0,-92,0,0 +13,10,2,7,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,14 +13,10,6,7,TOGGLE_PLAYER_LAYER__BACK,0,0,5,14 +13,10,2,21,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,17 +13,10,6,21,TOGGLE_PLAYER_LAYER__BACK,0,0,5,18 +4,11,22,30,SPRING__UP,1,-126,0,0 +5,11,9,5,BOOSTER,87,0,0,0 +13,11,19,3,PIPE_EXIT,77,30,3,4 +13,11,25,3,TRACK,-15,0,10,3 +7,12,1,9,BOOSTER,1,119,0,0 +8,12,25,21,BOOSTER,0,107,0,0 +11,12,17,9,BOOSTER,0,119,0,0 +12,12,20,16,TOGGLE_PLAYER_LAYER__BACK,0,0,4,5 +12,12,23,16,TOGGLE_PLAYER_LAYER__BACK,0,0,15,4 +13,12,6,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,5 +13,12,0,20,CHECKPOINT,3,108,0,0 +14,12,14,0,SPIKES__NORMAL_RIGHT,50,-128,0,0 +14,12,14,4,SPIKES__NORMAL_RIGHT,50,124,0,0 +14,12,14,8,SPIKES__NORMAL_RIGHT,50,120,0,0 +14,12,14,12,SPIKES__NORMAL_RIGHT,50,116,0,0 +5,13,24,22,PLATFORM_THIN,0,0,2,6 +7,13,28,25,BOOSTER,4,0,0,0 +9,13,18,13,BOOSTER,-50,0,0,0 +12,13,20,3,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +12,13,23,3,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +12,13,21,13,BOOSTER,107,0,0,0 +5,14,7,5,WALL_BUMPER,1,0,4,20 +5,14,17,5,WALL_BUMPER,2,0,4,20 +5,14,17,24,WALL_BUMPER,2,0,4,20 +5,14,7,25,WALL_BUMPER,1,0,4,19 +12,14,16,6,SPRING__UP,1,58,0,0 +4,15,13,25,PIPE_EXIT,115,20,1,1 +5,15,7,11,WALL_BUMPER,1,0,4,12 +5,15,17,11,WALL_BUMPER,2,0,4,12 +6,15,18,13,SPIKES__NORMAL_RIGHT,46,19,0,0 +6,15,18,17,SPIKES__NORMAL_RIGHT,46,15,0,0 +6,15,16,25,BREAKABLE_WALL,1,7,0,0 +8,15,20,4,SPIKES__NORMAL_RIGHT,-20,28,0,0 +8,15,20,8,SPIKES__NORMAL_RIGHT,-20,24,0,0 +9,15,22,21,SPIKES__HIDING_UP,-54,11,0,0 +9,15,1,24,PLATFORM_THIN__FALLING,-33,8,0,0 +10,15,0,18,SPRING__SMALL_UPLEFT,1,14,0,0 +4,16,13,14,PIPE_ENTRANCE,0,-40,0,0 +4,16,14,29,PLATFORM_THIN,0,0,2,6 +6,16,18,13,SPIKES__NORMAL_RIGHT,46,-13,0,0 +6,16,18,17,TOGGLE__PLAYER_FLOAT,0,0,18,21 +6,16,27,27,SPIKED_BARREL__CHAOHUNT,37,-27,0,0 +7,16,4,13,SPRING__BIG_UPLEFT,0,-13,0,0 +8,16,19,4,FERRIS_WHEEL,15,5,8,2 +8,16,19,4,FERRIS_WHEEL,4,5,8,2 +8,16,19,4,FERRIS_WHEEL,9,5,8,2 +8,16,5,26,SPRING__UP,1,-26,0,0 +9,16,8,25,SPIKES__NORMAL_UP,-40,-25,0,0 +10,16,31,9,SPIKED_BARREL,0,0,2,5 +11,16,11,4,SPIKED_BARREL,0,0,2,5 +11,16,5,6,SPIKED_BARREL,0,-3,2,5 +13,16,1,1,BOOSTER,0,-1,0,0 +13,16,14,2,PLATFORM_THIN__FALLING,82,-2,0,0 +13,16,21,2,PLATFORM_THIN__FALLING,75,-2,0,0 +13,16,8,25,BOOSTER,88,0,0,0 +14,16,11,1,BOOSTER,53,0,0,0 +4,17,10,2,TOGGLE__PLAYER_FLOAT,0,0,18,14 +4,17,19,9,SPIKED_BARREL__CHAOHUNT,109,-41,0,0 +5,17,14,17,SPIKES__NORMAL_RIGHT,82,-49,0,0 +5,17,14,21,TOGGLE__PLAYER_FLOAT,0,0,18,21 +5,17,23,31,SPIKED_BARREL__CHAOHUNT,73,-63,0,0 +9,17,6,6,SPRING__LEFT,1,-38,0,0 +10,17,24,14,CONVEYOR_BELT,0,0,13,5 +10,17,31,18,IA099,1,-50,0,0 +11,17,1,0,CONVEYOR_BELT,0,0,13,5 +11,17,8,4,IA099,1,-36,0,0 +12,17,11,8,CONVEYOR_BELT,0,0,13,5 +12,17,18,12,IA099,1,-44,0,0 +12,17,1,13,SPRING__SMALL_UPRIGHT,0,-45,0,0 +12,17,27,13,CONVEYOR_BELT,0,0,13,5 +13,17,6,13,CONVEYOR_BELT,0,0,13,5 +13,17,2,17,IA099,1,-49,0,0 +13,17,13,17,IA099,1,-49,0,0 +13,17,31,22,SPIKED_BARREL,0,0,2,5 +13,17,25,28,SPIKED_BARREL,0,-3,2,5 +14,17,14,25,SPIKES__NORMAL_RIGHT,50,-57,0,0 +14,17,14,29,SPIKES__NORMAL_RIGHT,50,-61,0,0 +4,18,12,22,SPRING__UP,2,-86,0,0 +9,18,16,23,PLATFORM_THIN__FALLING,-48,-87,0,0 +10,18,25,9,SPIKES__NORMAL_UP,-89,-73,0,0 +10,18,28,15,SPRING__BIG_UPRIGHT,0,-79,0,0 +10,18,19,24,SPIKES__HIDING_DOWN,-83,-88,0,0 +10,18,23,24,SPIKES__HIDING_DOWN,-87,-88,0,0 +11,18,5,19,CONVEYOR_BELT,1,0,13,5 +11,18,11,23,IA099,0,-87,0,0 +13,18,19,0,SPIKED_BARREL,0,0,2,4 +14,18,14,1,SPIKES__NORMAL_RIGHT,50,-65,0,0 +16,18,2,5,SPIKES__NORMAL_UP,-2,-69,0,0 +16,18,6,5,SPIKES__NORMAL_UP,-6,-69,0,0 +6,19,28,12,PLATFORM_THIN,0,0,2,4 +6,19,26,26,SPRING__UP,1,-122,0,0 +7,19,4,5,MOVING_SPRING,0,0,4,2 +7,19,18,31,BOUNCE_BLOCK,14,-127,0,0 +7,19,28,31,BOUNCE_BLOCK,4,-127,0,0 +8,19,16,0,PLATFORM_THIN,0,0,2,8 +8,19,14,26,SPRING__LEFT,1,-122,0,0 +10,19,20,4,PLATFORM_THIN,0,0,2,5 +11,19,1,0,BOUNCE_BLOCK,-97,-96,0,0 +11,19,6,13,SPIKES__NORMAL_UP,-102,-109,0,0 +11,19,10,13,SPIKES__HIDING_UP,-106,-109,0,0 +15,19,9,10,SPRING__UP,2,-106,0,0 +4,20,27,14,CONVEYOR_BELT,0,0,13,5 +5,20,0,2,CONVEYOR_BELT,1,0,13,5 +5,20,6,6,IA099,0,122,0,0 +5,20,2,18,IA099,1,110,0,0 +5,20,6,29,BOOSTER,90,0,0,0 +8,20,17,15,TRACK,0,40,20,1 +8,20,23,15,PIPE_ENTRANCE,-8,0,2,0 +9,20,24,25,SPRING__BIG_UPLEFT,0,103,0,0 +10,20,26,10,HANG_BAR,-16,0,48,2 +11,20,15,10,HANG_BAR,-37,0,48,2 +11,20,30,29,CONVEYOR_BELT,0,0,9,5 +12,20,2,15,PIPE_ENTRANCE,45,0,3,0 +13,20,1,3,TRACK,80,0,60,2 +13,20,23,14,CONVEYOR_BELT,1,0,12,5 +13,20,1,15,TRACK,0,-18,20,1 +13,20,28,18,IA099,0,110,0,0 +14,20,17,3,PIPE_EXIT,47,20,0,3 +14,20,27,17,TRAMPOLINE,37,111,0,0 +14,20,7,27,CONVEYOR_BELT,0,0,13,5 +14,20,18,27,CONVEYOR_BELT,0,0,13,5 +14,20,29,27,CONVEYOR_BELT,0,0,13,5 +14,20,14,31,IA099,1,97,0,0 +14,20,25,31,IA099,1,97,0,0 +15,20,4,20,CONVEYOR_BELT,0,0,13,5 +15,20,11,24,IA099,1,104,0,0 +15,20,4,31,IA099,1,97,0,0 +4,21,28,17,TOGGLE_PLAYER_LAYER__BACK,0,0,2,4 +4,21,29,17,TOGGLE_PLAYER_LAYER__BACK,0,0,18,3 +5,21,26,0,CONVEYOR_BELT,1,0,9,5 +5,21,30,4,IA099,2,92,0,0 +5,21,13,17,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +5,21,0,20,CHECKPOINT,2,76,0,0 +5,21,14,24,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,11 +5,21,17,24,TOGGLE_PLAYER_LAYER__BACK,0,0,3,11 +6,21,14,30,PIPE_EXIT,50,30,3,5 +7,21,4,10,SPRING__RIGHT,2,86,0,0 +7,21,13,19,TRACK,0,16,10,3 +7,21,13,31,TRACK,-34,0,25,4 +8,21,5,19,TRACK,-26,0,15,2 +8,21,17,19,TRACK,52,0,45,2 +9,21,18,9,BOOSTER,-50,0,0,0 +10,21,4,6,CONVEYOR_BELT,1,0,13,5 +10,21,16,6,CONVEYOR_BELT,1,0,13,5 +10,21,10,10,IA099,0,86,0,0 +10,21,22,10,IA099,0,86,0,0 +10,21,15,17,CONVEYOR_BELT,0,0,13,6 +10,21,26,17,CONVEYOR_BELT,0,0,13,6 +10,21,1,19,PIPE_EXIT,-65,30,2,3 +10,21,22,21,IA099,1,75,0,0 +11,21,8,9,SPRING__BIG_UPRIGHT,0,87,0,0 +11,21,5,17,CONVEYOR_BELT,0,0,13,6 +11,21,1,21,IA099,1,75,0,0 +11,21,12,21,IA099,1,75,0,0 +11,21,29,21,MOVING_SPRING,0,0,8,2 +12,21,3,1,IA099,3,95,0,0 +12,21,16,21,BOOSTER,112,0,0,0 +8,22,5,11,TRACK,0,-26,15,1 +9,22,28,6,HANG_BAR,-8,0,76,2 +9,22,9,11,PIPE_ENTRANCE,-38,0,2,0 +9,22,23,19,CONVEYOR_BELT,0,0,13,5 +9,22,30,22,IA099,1,42,0,0 +11,22,16,6,HANG_BAR,-60,0,76,2 +11,22,4,18,PLATFORM_SQUARE,0,0,5,2 +11,22,8,28,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +11,22,29,30,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +11,22,8,31,TOGGLE_PLAYER_LAYER__BACK,0,0,3,19 +11,22,11,31,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +12,22,17,28,WALL_BUMPER,1,0,4,10 +12,22,0,30,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,4 +13,22,1,28,WALL_BUMPER,2,0,4,10 +14,22,2,8,SPIKES__NORMAL_RIGHT,62,56,0,0 +14,22,2,12,SPIKES__NORMAL_RIGHT,62,52,0,0 +4,23,13,15,TRACK,36,0,45,1 +5,23,17,15,TRACK,0,24,30,2 +8,23,25,26,PLATFORM_THIN,0,-4,2,6 +8,23,14,30,SPRING__UP,1,2,0,0 +8,23,3,31,PLATFORM_THIN__FALLING,-3,1,0,0 +9,23,4,21,MOVING_SPRING,0,0,2,5 +10,23,16,21,SPRING__BIG_UPRIGHT,0,11,0,0 +12,23,17,6,WALL_BUMPER,1,0,4,16 +13,23,1,6,WALL_BUMPER,2,0,4,15 +4,24,2,4,SPIKES__NORMAL_LEFT,126,-4,0,0 +4,24,2,8,SPIKES__NORMAL_LEFT,126,-8,0,0 +4,24,2,12,SPIKES__NORMAL_LEFT,126,-12,0,0 +4,24,2,16,SPIKES__NORMAL_LEFT,126,-16,0,0 +4,24,13,31,PIPE_ENTRANCE,0,-50,2,0 +5,24,17,7,TRACK,40,0,45,3 +6,24,21,7,PIPE_EXIT,43,30,2,4 +7,24,26,2,PLATFORM_THIN,0,0,2,8 +7,24,26,29,TOGGLE_PLAYER_LAYER__BACK,0,0,10,3 +8,24,3,29,TOGGLE_PLAYER_LAYER__BACK,0,0,10,3 +8,24,10,29,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +10,24,13,7,PLATFORM_THIN,0,0,2,4 +10,24,25,9,BOOSTER,-89,0,0,0 +10,24,22,25,SPRING__BIG_UPLEFT,0,-25,0,0 +10,24,22,28,SPIKES__NORMAL_LEFT,-86,-28,0,0 +12,24,18,6,PLATFORM_THIN__FALLING,110,-6,0,0 +12,24,10,9,SPIKES__NORMAL_UP,118,-9,0,0 +14,24,2,16,SPIKES__NORMAL_RIGHT,62,-16,0,0 +14,24,2,20,SPIKES__NORMAL_RIGHT,62,-20,0,0 +4,25,25,13,TRAMPOLINE,103,-45,0,0 +5,25,8,5,SPRING__BIG_UPRIGHT,0,-37,0,0 +5,25,29,21,PLATFORM_THIN,0,0,2,4 +6,25,14,9,PLATFORM_SQUARE,0,0,2,6 +7,25,18,3,TOGGLE_PLAYER_LAYER__BACK,0,0,3,12 +7,25,21,3,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +8,25,20,1,SPRING__LEFT,1,-33,0,0 +10,25,22,0,SPIKES__NORMAL_LEFT,-86,-32,0,0 +10,25,16,4,TOGGLE_PLAYER_LAYER__BACK,0,0,12,3 +10,25,16,7,TOGGLE_PLAYER_LAYER__BACK,0,0,3,19 +10,25,19,7,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +11,25,5,6,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +11,25,8,6,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,4 +11,25,25,13,CONVEYOR_BELT,0,0,13,5 +12,25,0,17,IA099,1,-49,0,0 +12,25,20,25,FERRIS_WHEEL,4,5,2,8 +12,25,20,25,FERRIS_WHEEL,9,5,2,8 +12,25,20,25,FERRIS_WHEEL,15,5,2,8 +13,25,10,1,BOOSTER,86,-33,0,0 +14,25,23,8,PLATFORM_THIN,-6,0,7,2 +14,25,4,25,TRAMPOLINE,60,-57,0,0 +1,26,13,15,PLATFORM_THIN,-5,0,6,2 +1,26,6,29,SPIKES__NORMAL_UP,-38,-93,0,0 +1,26,10,29,SPIKES__NORMAL_UP,-42,-93,0,0 +2,26,6,30,SPRING__UP,0,-94,0,0 +3,26,0,24,SPIKES__NORMAL_RIGHT,-96,-88,0,0 +6,26,3,16,PLATFORM_THIN,0,0,2,6 +6,26,10,29,SPIKES__NORMAL_UP,54,-93,0,0 +6,26,14,29,SPIKES__NORMAL_UP,50,-93,0,0 +6,26,18,29,SPIKES__NORMAL_UP,46,-93,0,0 +6,26,22,29,SPIKES__NORMAL_UP,42,-93,0,0 +10,26,4,9,BREAKABLE_WALL,0,-73,0,0 +10,26,31,17,BOOSTER,-95,0,0,0 +12,26,8,8,FERRIS_WHEEL,4,5,8,2 +12,26,8,8,FERRIS_WHEEL,15,5,8,2 +12,26,8,8,FERRIS_WHEEL,9,5,7,2 +12,26,24,29,MOVING_SPRING,0,0,7,2 +15,26,9,27,SPRING__SMALL_UPLEFT,0,-91,0,0 +1,27,2,10,SPRING__UP,1,-106,0,0 +3,27,0,10,SPRING__RIGHT,1,-106,0,0 +4,27,19,9,CHECKPOINT,1,-105,0,0 +4,27,24,10,SPRING__UP,0,-106,0,0 +6,27,3,2,PLATFORM_THIN__FALLING,61,-98,0,0 +6,27,24,22,SPIKES__NORMAL_LEFT,40,-118,0,0 +6,27,24,26,SPIKES__NORMAL_LEFT,40,-122,0,0 +6,27,8,30,PLATFORM_THIN__FALLING,56,-126,0,0 +8,27,31,17,SPRING__BIG_UPRIGHT,0,-113,0,0 +9,27,27,8,SPRING__SMALL_UPLEFT,0,-104,0,0 +9,27,24,31,SPRING__BIG_UPLEFT,0,-127,0,0 +12,27,8,24,HANG_BAR,-8,0,48,2 +13,27,1,24,HANG_BAR,-33,0,48,2 +14,27,5,2,PLATFORM_THIN__FALLING,59,-98,0,0 +6,28,24,26,SPRING__LEFT,0,102,0,0 +9,28,2,25,SPIKES__NORMAL_UP,-34,103,0,0 +11,28,22,2,SPRING__UP,0,126,0,0 +11,28,20,28,SPRING__BIG_UPRIGHT,0,100,0,0 +4,29,28,30,SPRING__RIGHT,2,66,0,0 +6,29,10,17,SPIKES__NORMAL_UP,54,79,0,0 +7,29,9,26,INCLINE_RAMP,1,0,4,4 +10,29,13,6,PLATFORM_THIN,-3,0,5,2 +10,29,29,6,PLATFORM_THIN,0,0,5,2 +11,29,4,27,PLATFORM_THIN,0,0,2,7 +11,29,14,29,BOOSTER,-110,0,0,0 +12,29,21,19,SPRING__SMALL_UPLEFT,0,77,0,0 +13,29,12,4,PLATFORM_THIN__FALLING,84,92,0,0 +14,29,3,1,TRAMPOLINE,61,95,0,0 +5,30,22,5,SPIKES__NORMAL_UP,74,59,0,0 +5,30,26,5,SPIKES__NORMAL_UP,70,59,0,0 +5,30,30,5,SPIKES__NORMAL_UP,66,59,0,0 +8,30,28,6,PLATFORM_THIN__FALLING,-28,58,0,0 +10,30,18,9,SPIKES__HIDING_UP,-82,55,0,0 +11,30,6,9,SPIKES__NORMAL_UP,-102,55,0,0 diff --git a/sa1/data/maps/zone_6/act_1/entities/itemboxes.csv b/sa1/data/maps/zone_6/act_1/entities/itemboxes.csv new file mode 100644 index 0000000000..54bccc0277 --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/entities/itemboxes.csv @@ -0,0 +1,30 @@ +Adv2,ITEMS,17,32, +6,1,4,26,ONE_UP +5,4,23,1,RINGS_RANDOM +7,4,25,7,RINGS_5 +13,5,2,17,INVINCIBILITY +6,7,2,1,SPEED_UP +10,15,2,16,RINGS_10 +7,16,19,1,RINGS_10 +15,17,9,17,SPEED_UP +6,18,20,21,SHIELD +10,18,17,9,RINGS_RANDOM +10,18,21,9,ONE_UP +16,18,12,5,INVINCIBILITY +7,19,30,1,RINGS_10 +12,19,11,13,RINGS_5 +5,20,2,16,INVINCIBILITY +8,20,12,5,RINGS_RANDOM +9,20,5,17,SHIELD +13,20,18,22,RINGS_RANDOM +5,21,28,2,RINGS_10 +7,23,24,19,RINGS_RANDOM +9,24,3,9,SHIELD_MAGNETIC +9,24,29,9,RINGS_RANDOM +11,25,28,15,INVINCIBILITY +15,25,19,21,RINGS_RANDOM +4,26,31,17,RINGS_RANDOM +8,26,24,5,SHIELD +6,27,22,18,SHIELD +7,29,0,13,RINGS_RANDOM +9,29,8,5,ONE_UP diff --git a/sa1/data/maps/zone_6/act_1/entities/rings.csv b/sa1/data/maps/zone_6/act_1/entities/rings.csv new file mode 100644 index 0000000000..5bf9500a3c --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/entities/rings.csv @@ -0,0 +1,417 @@ +Adv2,RINGS,17,32 +6,1,28,20 +6,1,31,20 +7,1,2,20 +6,2,19,20 +6,2,19,25 +6,2,19,30 +10,2,2,24 +10,2,5,24 +10,2,8,24 +10,2,20,24 +10,2,23,24 +10,2,26,24 +11,2,5,24 +11,2,8,24 +11,2,11,24 +6,3,18,4 +6,3,14,7 +7,3,31,22 +7,3,31,26 +7,3,31,30 +9,3,7,33 +10,3,6,21 +10,3,11,24 +10,3,17,27 +10,3,23,30 +11,3,30,8 +11,3,30,12 +11,3,30,16 +5,4,18,10 +5,4,14,12 +5,4,13,17 +8,4,9,2 +8,4,12,2 +8,4,15,2 +9,4,7,4 +9,4,7,7 +5,5,13,21 +5,5,15,27 +5,5,21,28 +6,5,9,3 +6,5,12,3 +6,5,15,3 +6,5,18,3 +6,5,21,3 +6,5,24,3 +6,5,27,3 +6,5,9,6 +6,5,12,6 +6,5,15,6 +6,5,18,6 +6,5,21,6 +6,5,24,6 +6,5,27,6 +6,5,6,28 +6,5,9,28 +6,5,12,28 +6,5,15,28 +6,5,18,28 +6,5,21,28 +6,5,24,28 +6,5,27,28 +6,5,30,28 +8,5,2,29 +8,5,5,29 +8,5,8,29 +10,5,6,17 +10,5,10,17 +10,5,14,17 +11,5,2,17 +11,5,6,17 +11,5,10,17 +12,5,7,25 +12,5,10,25 +12,5,13,25 +7,6,18,5 +7,6,21,5 +7,6,24,5 +8,6,12,28 +8,6,12,32 +9,6,32,15 +10,6,3,15 +10,6,6,15 +11,6,19,18 +11,6,22,18 +11,6,25,18 +12,6,20,17 +12,6,20,21 +12,6,4,25 +12,6,20,25 +12,6,4,28 +12,6,4,31 +6,7,4,20 +6,7,8,22 +6,7,12,24 +8,7,12,4 +11,7,31,30 +11,7,27,32 +12,7,25,24 +12,7,28,24 +12,7,31,24 +7,8,22,13 +7,8,26,15 +7,8,30,17 +8,8,22,29 +8,8,26,31 +8,8,30,33 +10,8,29,15 +10,8,25,17 +10,8,21,19 +11,8,23,2 +8,9,15,22 +8,9,11,24 +8,9,7,26 +9,9,13,7 +9,9,9,9 +9,9,5,11 +10,9,2,19 +10,9,6,21 +10,9,10,23 +6,10,15,22 +6,10,11,24 +6,10,7,26 +7,10,13,7 +7,10,9,9 +7,10,5,11 +11,10,6,5 +11,10,10,7 +11,10,14,9 +12,10,8,22 +12,10,12,24 +12,10,16,26 +5,11,11,29 +5,11,17,31 +5,11,23,33 +7,12,9,10 +7,12,15,12 +7,12,21,14 +9,12,29,14 +9,12,24,16 +10,12,2,12 +11,12,4,8 +11,12,8,8 +11,12,12,8 +6,13,1,11 +6,13,5,11 +6,13,9,11 +8,13,25,18 +8,13,20,20 +8,13,15,22 +9,13,25,12 +9,13,29,12 +10,13,1,12 +10,13,23,21 +10,13,27,23 +10,13,31,25 +12,13,16,14 +12,13,16,18 +12,13,16,22 +8,14,19,28 +8,14,22,28 +9,14,7,27 +9,14,10,27 +5,15,29,27 +5,15,32,27 +6,15,3,27 +8,15,6,30 +8,15,6,33 +12,15,10,32 +12,15,14,32 +12,15,18,32 +13,15,31,27 +14,15,2,27 +14,15,5,27 +6,16,23,20 +6,16,27,20 +6,16,31,20 +7,16,29,21 +7,16,23,23 +7,16,20,29 +8,16,6,4 +11,16,15,23 +11,16,18,23 +11,16,21,23 +12,16,26,19 +12,16,29,19 +12,16,32,19 +13,16,23,16 +13,16,22,20 +13,16,19,23 +4,17,13,20 +4,17,13,24 +4,17,13,28 +5,17,19,24 +5,17,23,24 +5,17,27,24 +12,17,16,32 +14,17,7,15 +14,17,10,15 +14,17,13,15 +15,17,5,30 +15,17,8,30 +15,17,11,30 +15,17,2,33 +15,17,5,33 +15,17,8,33 +15,17,11,33 +15,17,14,33 +7,18,20,20 +7,18,24,20 +7,18,28,20 +8,18,15,15 +8,18,18,15 +8,18,21,15 +9,18,14,30 +9,18,14,33 +12,18,12,2 +12,18,8,4 +14,18,5,31 +14,18,8,31 +14,18,11,31 +15,18,2,4 +15,18,5,4 +15,18,8,4 +15,18,11,4 +15,18,14,4 +6,19,14,9 +6,19,17,9 +6,19,20,9 +6,19,14,12 +6,19,17,12 +6,19,20,12 +8,19,16,12 +8,19,19,12 +8,19,22,12 +9,19,14,4 +9,19,22,32 +12,19,2,7 +12,19,5,7 +12,19,8,7 +14,19,28,5 +14,19,28,9 +14,19,28,13 +4,20,31,2 +5,20,3,2 +5,20,7,2 +6,20,8,4 +6,20,12,4 +6,20,16,4 +7,20,23,4 +7,20,23,8 +7,20,23,12 +9,20,22,4 +9,20,22,8 +10,20,21,22 +10,20,22,26 +10,20,25,28 +11,20,1,12 +11,20,5,12 +11,20,9,12 +11,20,23,33 +11,20,26,33 +11,20,29,33 +12,20,1,29 +12,20,4,29 +12,20,7,29 +14,20,17,16 +14,20,20,16 +14,20,23,16 +5,21,26,31 +5,21,29,31 +5,21,32,31 +6,21,14,7 +6,21,10,9 +6,21,6,11 +10,21,10,17 +10,21,13,17 +10,21,16,17 +10,21,26,17 +10,21,29,17 +10,21,32,17 +13,21,20,6 +13,21,16,8 +13,21,12,10 +8,22,13,31 +9,22,29,9 +9,22,4,31 +10,22,1,9 +10,22,5,9 +10,22,20,9 +10,22,24,9 +10,22,28,9 +11,22,32,33 +8,23,13,3 +8,23,13,7 +8,23,13,11 +9,23,4,2 +9,23,4,5 +9,23,26,5 +9,23,30,7 +10,23,2,9 +11,23,26,4 +11,23,4,7 +11,23,24,9 +11,23,4,11 +11,23,4,15 +11,23,24,25 +11,23,24,29 +11,23,24,33 +12,23,6,4 +12,23,8,9 +4,24,25,15 +4,24,25,18 +4,24,25,21 +9,24,2,25 +9,24,6,25 +9,24,10,25 +10,24,32,25 +11,24,2,30 +11,24,6,32 +12,24,14,32 +12,24,18,32 +12,24,22,32 +6,25,26,12 +6,25,30,12 +7,25,2,12 +9,25,24,3 +9,25,27,6 +9,25,30,9 +10,25,32,17 +11,25,8,9 +11,25,2,12 +11,25,14,12 +11,25,16,17 +1,26,15,13 +1,26,18,13 +1,26,21,13 +1,26,2,16 +1,26,2,19 +1,26,2,22 +2,26,6,8 +2,26,6,11 +2,26,6,14 +4,26,24,15 +4,26,24,18 +4,26,24,21 +8,26,13,9 +8,26,14,13 +8,26,17,16 +10,26,32,4 +10,26,32,8 +10,26,32,12 +14,26,6,5 +14,26,9,5 +14,26,12,5 +14,26,6,8 +14,26,9,8 +14,26,12,8 +3,27,15,4 +3,27,18,4 +3,27,21,4 +5,27,4,12 +5,27,8,14 +5,27,12,16 +5,27,20,20 +5,27,24,22 +5,27,28,24 +6,27,3,9 +6,27,3,13 +9,27,7,15 +9,27,10,15 +9,27,13,15 +11,27,22,10 +11,27,22,14 +11,27,22,18 +5,28,16,32 +5,28,19,32 +5,28,22,32 +6,28,8,24 +6,28,11,24 +6,28,14,24 +9,28,19,32 +9,28,22,32 +9,28,25,32 +11,28,30,33 +12,28,17,9 +12,28,21,9 +12,28,25,9 +12,28,1,33 +12,28,4,33 +13,28,32,6 +14,28,3,2 +14,28,3,6 +14,28,6,6 +14,28,3,10 +14,28,3,14 +5,29,24,23 +5,29,27,23 +5,29,30,23 +6,29,7,12 +6,29,10,12 +6,29,13,12 +7,29,26,15 +7,29,22,18 +7,29,18,21 +8,29,29,18 +9,29,19,3 +9,29,22,3 +9,29,25,3 +9,29,2,20 +9,29,6,22 +11,29,31,22 +12,29,7,18 +12,29,3,20 +10,30,7,3 +10,30,10,3 +10,30,13,3 diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/bg/header.c b/sa1/data/maps/zone_6/act_1/tilemaps/bg/header.c new file mode 100644 index 0000000000..8c3e358b62 --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_6_act_1_fg[]; +const u8 Tiles_zone_6_act_1_bg[] = INCBIN_U8("data/maps/zone_6/act_1/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_6_act_1_bg[] = INCBIN_U8("data/maps/zone_6/act_1/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_6_act_1_bg = { + .xTiles = 32, + .yTiles = 128, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_6_act_1_bg, + .tilesSize = sizeof(Tiles_zone_6_act_1_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_6_act_1_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_6_act_1_bg, +}; diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/bg/palette.pal b/sa1/data/maps/zone_6/act_1/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..08fdfbaf8f --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +8 16 65 +49 98 98 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 82 57 +49 57 24 +8 32 41 +255 213 82 +255 172 0 +222 148 0 +189 123 8 +148 98 8 +106 65 0 +0 255 0 +246 180 139 +246 115 57 +238 57 24 +238 57 24 +123 24 0 +57 16 0 +49 98 98 +246 246 238 +213 205 156 +156 148 123 +123 123 106 +82 82 57 +57 65 41 +8 32 41 +106 65 0 +255 255 0 +139 197 180 +123 172 222 +90 148 189 +0 82 139 +0 57 74 +8 41 49 +49 98 98 +246 246 238 +213 205 156 +156 148 123 +123 123 106 +82 82 57 +57 65 41 +8 32 41 +106 65 0 +0 131 0 +213 205 156 +246 115 57 +238 57 24 +205 32 0 +148 24 0 +123 16 0 +90 106 90 +65 82 65 +123 172 222 +41 123 189 +0 82 139 +0 57 74 +0 49 57 +49 65 49 +41 57 41 +8 16 65 +246 197 74 +255 172 41 +246 139 16 +230 74 0 +180 49 57 +131 57 90 +255 255 255 +255 222 164 +230 238 246 +205 230 238 +172 213 230 +123 197 230 +90 172 222 +57 156 213 +0 255 0 +0 0 0 +255 213 82 +222 148 0 +148 98 8 +131 189 123 +98 156 90 +65 123 57 +32 90 24 +0 57 0 +246 246 238 +213 205 156 +156 148 123 +123 123 106 +82 82 57 +49 98 98 +8 32 41 +0 131 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +189 205 222 +123 172 222 +41 123 189 +0 82 139 +0 57 74 +0 49 57 +0 32 32 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +106 65 0 +205 230 172 +148 197 156 +90 156 148 +74 131 123 +57 115 115 +205 32 0 +41 74 74 +24 57 57 +255 238 230 +246 115 57 +49 98 98 +148 24 0 +255 172 0 +189 82 8 +0 131 0 +49 98 98 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 82 57 +49 57 24 +8 32 41 +0 131 0 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +0 131 0 +156 148 123 +123 123 106 +49 57 24 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +0 131 0 +0 131 0 +0 131 0 +8 32 41 +32 57 82 +49 90 123 +65 123 172 +90 156 197 +139 189 230 +180 222 255 +222 246 255 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +255 255 82 +255 172 0 +148 98 8 +106 65 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +49 98 98 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_6/act_1/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..dd3619e34d Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/bg/tiles.png b/sa1/data/maps/zone_6/act_1/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..6c969ec3d6 Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/flags.coll b/sa1/data/maps/zone_6/act_1/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..65f57c2ee9 Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/header.c b/sa1/data/maps/zone_6/act_1/tilemaps/fg/header.c new file mode 100644 index 0000000000..a59e17449b --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_6_act_1_fg[] = INCBIN_U16("data/maps/zone_6/act_1/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_6_act_1_fg[] = INCBIN_U8("data/maps/zone_6/act_1/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_6_act_1_fg[] = INCBIN_S8("data/maps/zone_6/act_1/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_6_act_1_fg[] = INCBIN_U8("data/maps/zone_6/act_1/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_6_act_1_fg[] = INCBIN_U16("data/maps/zone_6/act_1/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_6_act_1_fg0[] = INCBIN_MAP("data/maps/zone_6/act_1/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_6_act_1_fg1[] = INCBIN_MAP("data/maps/zone_6/act_1/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_6_act_1_fg[] = INCBIN_U16("data/maps/zone_6/act_1/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_6_act_1_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_6_act_1_fg, + .tilesSize = sizeof(Tileset_zone_6_act_1_fg) - (0 * 0x00), + .palette = Palette_zone_6_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_6_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_6_act_1_fg, + }, + .metatileMap = Map_zone_6_act_1_fg0, + .mapWidth = 44, + .mapHeight = 83, +}; + +ALIGNED(4) const struct MapHeader zone_6_act_1_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_6_act_1_fg, + .tilesSize = sizeof(Tileset_zone_6_act_1_fg) - (0 * 0x00), + .palette = Palette_zone_6_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_6_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_6_act_1_fg, + }, + .metatileMap = Map_zone_6_act_1_fg1, + .mapWidth = 44, + .mapHeight = 83, +}; + +const Collision CollHeader_zone_6_act_1_fg = { CollHeightMap_zone_6_act_1_fg, + CollTileRot_zone_6_act_1_fg, + Metatiles_zone_6_act_1_fg, + { Map_zone_6_act_1_fg0, Map_zone_6_act_1_fg1 }, + CollFlags_zone_6_act_1_fg, + 44, + 83, + 0x1080, + 0x1F20 }; diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_6/act_1/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..634b43adfb Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_6/act_1/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..e3d4125023 Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_6/act_1/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..d5f1ccb801 Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_6/act_1/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..9d707e3d85 --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {44,83} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_6/act_1/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..db16990552 Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/palette.pal b/sa1/data/maps/zone_6/act_1/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..08fdfbaf8f --- /dev/null +++ b/sa1/data/maps/zone_6/act_1/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +8 16 65 +49 98 98 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 82 57 +49 57 24 +8 32 41 +255 213 82 +255 172 0 +222 148 0 +189 123 8 +148 98 8 +106 65 0 +0 255 0 +246 180 139 +246 115 57 +238 57 24 +238 57 24 +123 24 0 +57 16 0 +49 98 98 +246 246 238 +213 205 156 +156 148 123 +123 123 106 +82 82 57 +57 65 41 +8 32 41 +106 65 0 +255 255 0 +139 197 180 +123 172 222 +90 148 189 +0 82 139 +0 57 74 +8 41 49 +49 98 98 +246 246 238 +213 205 156 +156 148 123 +123 123 106 +82 82 57 +57 65 41 +8 32 41 +106 65 0 +0 131 0 +213 205 156 +246 115 57 +238 57 24 +205 32 0 +148 24 0 +123 16 0 +90 106 90 +65 82 65 +123 172 222 +41 123 189 +0 82 139 +0 57 74 +0 49 57 +49 65 49 +41 57 41 +8 16 65 +246 197 74 +255 172 41 +246 139 16 +230 74 0 +180 49 57 +131 57 90 +255 255 255 +255 222 164 +230 238 246 +205 230 238 +172 213 230 +123 197 230 +90 172 222 +57 156 213 +0 255 0 +0 0 0 +255 213 82 +222 148 0 +148 98 8 +131 189 123 +98 156 90 +65 123 57 +32 90 24 +0 57 0 +246 246 238 +213 205 156 +156 148 123 +123 123 106 +82 82 57 +49 98 98 +8 32 41 +0 131 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +189 205 222 +123 172 222 +41 123 189 +0 82 139 +0 57 74 +0 49 57 +0 32 32 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +106 65 0 +205 230 172 +148 197 156 +90 156 148 +74 131 123 +57 115 115 +205 32 0 +41 74 74 +24 57 57 +255 238 230 +246 115 57 +49 98 98 +148 24 0 +255 172 0 +189 82 8 +0 131 0 +49 98 98 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 82 57 +49 57 24 +8 32 41 +0 131 0 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +0 131 0 +156 148 123 +123 123 106 +49 57 24 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +0 131 0 +0 131 0 +0 131 0 +8 32 41 +32 57 82 +49 90 123 +65 123 172 +90 156 197 +139 189 230 +180 222 255 +222 246 255 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +255 255 82 +255 172 0 +148 98 8 +106 65 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +49 98 98 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_6/act_1/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..64bc801149 Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_6/act_1/tilemaps/fg/tileset.png b/sa1/data/maps/zone_6/act_1/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..dd3007c2ba Binary files /dev/null and b/sa1/data/maps/zone_6/act_1/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_6/act_2/entities/enemies.csv b/sa1/data/maps/zone_6/act_2/entities/enemies.csv new file mode 100644 index 0000000000..e037a302e3 --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/entities/enemies.csv @@ -0,0 +1,64 @@ +Adv2,ENEMIES,42,10,,,,, +20,0,15,15,OCT,-4,0,11,2 +22,0,21,24,MOLE,43,-24,0,0 +16,1,23,7,MIRROR,-5,0,12,2 +17,1,27,7,MIRROR,-4,0,10,2 +18,1,31,7,MIRROR,-4,0,11,2 +22,1,24,7,OCT,-4,0,9,2 +23,1,15,16,MOLE,17,-48,0,0 +24,1,21,12,OCT,-4,0,11,2 +25,1,1,20,OCT,-3,0,10,2 +26,1,1,23,MIRROR,-2,0,8,2 +13,2,24,26,MOLE,72,-90,0,0 +14,2,13,0,OCT,-6,0,14,2 +15,2,6,8,MOLE,26,-72,0,0 +19,2,9,27,MIRROR,-2,0,6,2 +25,2,17,8,MOLE,-49,-72,0,0 +28,2,28,0,OCT,-5,0,11,2 +11,3,15,6,OCT,-5,0,12,2 +16,3,1,24,MOLE,-1,-120,0,0 +37,3,20,20,MOLE,76,-116,0,0 +8,4,15,22,MIRROR,-5,0,12,2 +9,4,14,15,OCT,-5,0,12,2 +10,4,5,11,OCT,-7,0,16,2 +10,4,13,22,MOLE,-77,106,0,0 +11,4,4,16,MOLE,-100,112,0,0 +12,4,31,4,MOLE,97,124,0,0 +18,4,15,21,OCT,-5,0,11,2 +21,4,18,3,OCT,-5,0,12,2 +26,4,25,1,MIRROR,0,0,9,2 +26,4,30,28,MOLE,-94,100,0,0 +27,4,30,10,MIRROR,-5,0,15,2 +35,4,22,22,MIRROR,0,0,16,2 +7,5,27,14,MOLE,5,82,0,0 +11,5,11,20,MOLE,-107,76,0,0 +19,5,10,14,MOLE,-106,82,0,0 +21,5,16,0,OCT,-5,0,12,2 +24,5,11,22,OCT,-5,0,13,2 +25,5,9,11,OCT,-4,0,11,3 +29,5,6,30,MIRROR,-5,0,10,2 +31,5,27,17,OCT,-3,0,9,2 +32,5,25,14,OCT,-5,0,12,2 +3,6,15,27,OCT,-5,0,12,2 +3,6,31,29,MIRROR,-5,0,12,2 +5,6,29,7,OCT,-4,0,13,2 +5,6,4,30,MOLE,92,34,0,0 +7,6,17,10,OCT,-3,0,8,2 +7,6,1,24,MOLE,31,40,0,0 +8,6,19,9,OCT,-3,0,8,2 +8,6,5,24,MOLE,-5,40,0,0 +22,6,4,18,MIRROR,-6,0,14,2 +24,6,24,22,OCT,-5,0,11,2 +25,6,27,3,MIRROR,-4,0,10,2 +25,6,23,13,MIRROR,-6,0,12,2 +26,6,20,24,MOLE,-84,40,0,0 +27,6,22,6,MOLE,-118,58,0,0 +27,6,15,18,MOLE,-111,46,0,0 +29,6,9,18,OCT,-3,0,8,2 +30,6,2,17,OCT,-4,0,10,2 +15,7,13,30,OCT,-3,0,9,2 +17,7,0,13,OCT,-5,0,12,2 +21,7,10,0,MIRROR,-5,0,14,2 +27,7,7,6,MIRROR,-6,0,12,2 +28,7,12,0,MIRROR,-4,0,11,2 +39,7,16,16,EGG_SNAKE,16,16,0,0 diff --git a/sa1/data/maps/zone_6/act_2/entities/interactables.csv b/sa1/data/maps/zone_6/act_2/entities/interactables.csv new file mode 100644 index 0000000000..2a15142260 --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/entities/interactables.csv @@ -0,0 +1,525 @@ +Adv2,INTERACTABLES,42,10,,,,, +20,0,11,0,TOGGLE_PLAYER_LAYER__BACK,0,0,5,12 +20,0,16,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,12 +20,0,11,12,TOGGLE_PLAYER_LAYER__BACK,0,0,5,14 +20,0,16,12,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,14 +20,0,10,24,CHECKPOINT,1,-24,0,0 +21,0,20,18,TOGGLE_PLAYER_LAYER__BACK,0,0,4,7 +21,0,24,25,SPRING__LEFT,72,-25,0,0 +21,0,29,26,SPRING__LEFT,0,-26,0,0 +23,0,7,21,CONVEYOR_BELT,0,0,13,5 +23,0,19,30,CONVEYOR_BELT,0,0,13,5 +24,0,9,31,SPECIAL_SPRING,-9,-31,0,0 +29,0,15,0,TOGGLE_PLAYER_LAYER__BACK,0,0,3,7 +29,0,18,0,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,7 +29,0,15,7,TOGGLE_PLAYER_LAYER__BACK,0,0,3,9 +29,0,18,7,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,9 +29,0,15,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,10 +29,0,18,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,10 +29,0,15,26,TOGGLE_PLAYER_LAYER__BACK,0,0,3,11 +29,0,18,26,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,11 +37,0,20,31,TRACK_AIR_CORNER,0,-31,0,0 +38,0,9,18,TRACK_AIR_CORNER,0,-18,0,0 +38,0,10,19,TRACK,50,0,40,7 +38,0,29,31,TRACK_AIR_CORNER,1,-31,0,0 +39,0,7,9,TRACK_AIR_CORNER,0,-9,0,0 +39,0,8,10,TRACK,50,0,40,9 +39,0,8,19,TRACK,0,-30,20,8 +39,0,9,19,TRACK_AIR_CORNER,3,-19,0,0 +40,0,4,4,SPIKES__NORMAL_LEFT,-4,-4,0,0 +40,0,1,9,TRACK_AIR_CORNER,1,-9,0,0 +40,0,0,10,TRACK,0,90,70,10 +10,1,18,25,TRACK_AIR_CORNER,0,-57,0,0 +10,1,19,26,TRACK,56,0,45,2 +12,1,1,26,PIPE_EXIT,127,30,2,3 +16,1,13,16,SPIKES__NORMAL_UP,-13,-48,0,0 +17,1,17,16,SPIKES__NORMAL_UP,-49,-48,0,0 +18,1,21,16,SPIKES__NORMAL_UP,-85,-48,0,0 +19,1,26,0,PLATFORM_THIN,0,0,2,6 +20,1,20,2,TOGGLE_PLAYER_LAYER__FRONT,0,0,4,6 +20,1,20,9,SPRING__RIGHT,0,-41,0,0 +21,1,29,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +22,1,4,0,SPRING__BIG_UPRIGHT,0,-32,0,0 +22,1,27,13,CONVEYOR_BELT,0,0,13,5 +22,1,0,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +22,1,19,16,SPIKES__HIDING_UP,45,-48,0,0 +26,1,21,30,PLATFORM_SQUARE,1,0,9,2 +27,1,21,17,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +27,1,24,17,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +27,1,10,26,MOVING_SPRING,0,0,2,5 +28,1,1,12,SPIKES__NORMAL_UP,127,-44,0,0 +28,1,4,25,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +28,1,4,28,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,9 +28,1,7,28,TOGGLE_PLAYER_LAYER__BACK,0,0,3,9 +29,1,15,5,TOGGLE_PLAYER_LAYER__BACK,0,0,3,11 +29,1,18,5,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,11 +29,1,15,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,13 +29,1,18,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,13 +29,1,17,28,SPIKES__HIDING_UP,79,-60,0,0 +32,1,8,2,SPIKES__NORMAL_LEFT,-8,-34,0,0 +32,1,8,6,SPIKES__NORMAL_LEFT,-8,-38,0,0 +37,1,21,0,TRACK,50,0,40,4 +37,1,31,11,TRACK_AIR_CORNER,0,-43,0,0 +37,1,24,15,TRACK_AIR_CORNER,0,-47,0,0 +37,1,25,16,TRACK,0,60,50,4 +37,1,31,23,TRACK_AIR_CORNER,2,-55,0,0 +38,1,28,0,TRACK,0,20,15,5 +38,1,0,11,TRACK,0,20,15,7 +38,1,28,11,TRACK,-40,0,30,6 +38,1,29,12,TRACK_AIR_CORNER,3,-44,0,0 +38,1,18,15,TRACK_AIR_CORNER,1,-47,0,0 +38,1,17,16,TRACK,-30,0,20,3 +38,1,0,22,TRACK,40,0,30,8 +38,1,28,22,TRACK,0,20,15,9 +38,1,29,22,TRACK_AIR_CORNER,1,-54,0,0 +13,2,29,12,TOGGLE_GRAVITY,1,0,2,16 +13,2,18,27,SPRING__UP,0,-91,0,0 +14,2,7,5,CONVEYOR_BELT,0,0,13,5 +14,2,19,5,CONVEYOR_BELT,0,0,13,5 +14,2,8,9,CONVEYOR_BELT,1,0,13,5 +14,2,20,9,CONVEYOR_BELT,1,0,13,5 +14,2,2,12,TOGGLE_GRAVITY,2,0,2,17 +14,2,6,26,SPIKES__NORMAL_UP,58,-90,0,0 +14,2,10,26,SPIKES__NORMAL_UP,54,-90,0,0 +14,2,14,26,SPIKES__NORMAL_UP,50,-90,0,0 +15,2,2,8,SPIKES__NORMAL_UP,30,-72,0,0 +15,2,29,12,TOGGLE_GRAVITY,2,0,2,17 +15,2,2,14,SPIKES__NORMAL_DOWN,30,-78,0,0 +15,2,9,26,SPIKES__NORMAL_UP,23,-90,0,0 +15,2,13,26,SPIKES__NORMAL_UP,19,-90,0,0 +15,2,17,26,SPIKES__NORMAL_UP,15,-90,0,0 +16,2,8,3,SPRING__UP,1,-67,0,0 +16,2,2,12,TOGGLE_GRAVITY,1,0,2,17 +16,2,16,16,SPIKES__NORMAL_LEFT,-16,-80,0,0 +16,2,16,20,SPIKES__NORMAL_LEFT,-16,-84,0,0 +16,2,16,24,SPIKES__NORMAL_LEFT,-16,-88,0,0 +17,2,12,3,SPRING__UP,1,-67,0,0 +18,2,16,3,SPRING__UP,1,-67,0,0 +18,2,24,3,SPRING__RIGHT,2,-67,0,0 +19,2,25,14,BOOSTER,-121,-78,0,0 +19,2,30,31,SPRING__DOWN,1,-95,0,0 +20,2,25,30,TOGGLE_GRAVITY,2,0,2,17 +20,2,30,30,TOGGLE_GRAVITY,1,0,2,17 +20,2,2,31,SPRING__DOWN,1,-95,0,0 +22,2,24,7,PIPE_ENTRANCE,0,40,0,0 +23,2,28,12,BOUNCE_BLOCK,4,-76,0,0 +24,2,27,2,PLATFORM_THIN,0,0,2,6 +24,2,15,8,BOUNCE_BLOCK,-15,-72,0,0 +24,2,5,11,BOUNCE_BLOCK,-5,-75,0,0 +25,2,7,8,SPIKES__HIDING_UP,-39,-72,0,0 +25,2,25,9,SPRING__UP,2,-73,0,0 +26,2,19,17,CONVEYOR_BELT,0,0,13,5 +26,2,31,17,CONVEYOR_BELT,0,0,13,5 +26,2,10,20,SPIKES__NORMAL_UP,-74,-84,0,0 +26,2,14,20,SPIKES__NORMAL_UP,-78,-84,0,0 +26,2,18,20,SPIKES__NORMAL_UP,-82,-84,0,0 +26,2,20,21,CONVEYOR_BELT,1,0,13,5 +26,2,10,26,SPIKES__NORMAL_DOWN,-74,-90,0,0 +26,2,14,26,SPIKES__HIDING_DOWN,-78,-90,0,0 +27,2,15,20,BOOSTER,-111,0,0,0 +27,2,0,21,CONVEYOR_BELT,1,0,13,5 +28,2,16,9,SPRING__RIGHT,1,-73,0,0 +28,2,1,11,BOOSTER__WALL,0,0,1,1 +29,2,20,3,SPIKES__NORMAL_RIGHT,76,-67,0,0 +29,2,26,7,TRACK_AIR_CORNER,0,-71,0,0 +29,2,27,8,TRACK,15,0,15,2 +30,2,3,7,TRACK_AIR_CORNER,1,-71,0,0 +30,2,8,7,TRACK_AIR_CORNER,0,-71,0,0 +30,2,17,7,TRACK_AIR_CORNER,1,-71,0,0 +30,2,2,8,TRACK,0,55,45,3 +30,2,9,8,TRACK,15,0,15,6 +30,2,16,8,TRACK,0,50,30,7 +32,2,3,17,TOGGLE_PLAYER_LAYER__BACK,0,0,5,3 +32,2,8,21,SPRING__LEFT,1,-85,0,0 +37,2,31,1,TRACK_AIR_CORNER,0,-65,0,0 +37,2,31,11,TRACK_AIR_CORNER,2,-75,0,0 +37,2,25,17,TRACK,30,0,20,5 +37,2,24,18,TRACK_AIR_CORNER,2,-82,0,0 +37,2,20,27,TRACK_AIR_CORNER,2,-91,0,0 +37,2,21,27,TRACK,0,-80,60,3 +38,2,0,1,TRACK,0,20,15,11 +38,2,28,1,TRACK,-40,0,30,10 +38,2,29,2,TRACK_AIR_CORNER,3,-66,0,0 +38,2,0,10,TRACK,40,0,40,12 +38,2,10,17,TRACK,0,-100,80,6 +38,2,11,18,TRACK_AIR_CORNER,3,-82,0,0 +38,2,25,26,TRACK_AIR_CORNER,1,-90,0,0 +38,2,24,27,TRACK,-40,0,30,2 +39,2,1,10,TRACK,0,60,50,13 +39,2,2,10,TRACK_AIR_CORNER,1,-74,0,0 +40,2,0,10,TRACK,-50,0,40,11 +40,2,1,10,TRACK_AIR_CORNER,3,-74,0,0 +10,3,19,22,TRACK,0,-80,60,1 +10,3,29,22,PIPE_ENTRANCE,-15,0,2,0 +10,3,19,23,TRACK_AIR_CORNER,2,-119,0,0 +11,3,29,12,BOOSTER,-125,0,0,0 +13,3,28,4,PIPE_EXIT,68,30,3,1 +13,3,22,18,SPIKES__NORMAL_RIGHT,74,-114,0,0 +13,3,22,22,SPIKES__NORMAL_RIGHT,74,-118,0,0 +13,3,12,29,GRIND_RAIL__START,0,0,6,2 +15,3,25,4,PIPE_ENTRANCE,-60,0,2,0 +16,3,14,19,SPRING__UP,0,-115,0,0 +19,3,16,31,SPRING__BIG_UPLEFT,0,-127,0,0 +20,3,10,12,SPIKES__NORMAL_UP,118,-108,0,0 +20,3,14,12,SPIKES__NORMAL_UP,114,-108,0,0 +20,3,18,12,SPIKES__NORMAL_UP,110,-108,0,0 +20,3,22,12,SPIKES__NORMAL_UP,106,-108,0,0 +22,3,23,7,TRACK,8,0,10,1 +22,3,31,7,TRACK,0,50,30,2 +22,3,24,8,TRACK_AIR_CORNER,2,-104,0,0 +23,3,0,7,TRACK_AIR_CORNER,1,-103,0,0 +23,3,28,8,TRACK_AIR_CORNER,0,-104,0,0 +23,3,29,9,TRACK,40,0,25,7 +24,3,12,12,PLATFORM_CRUMBLING,1,-108,0,0 +24,3,24,25,SPRING__RIGHT,1,-121,0,0 +24,3,1,28,PLATFORM_SQUARE,0,-5,2,7 +25,3,16,3,TOGGLE_GRAVITY,2,0,2,11 +25,3,6,9,PIPE_EXIT,-38,30,2,8 +27,3,17,9,PLATFORM_THIN,0,0,2,6 +27,3,26,12,SPIKES__NORMAL_DOWN,-122,-108,0,0 +27,3,4,18,SPIKES__NORMAL_DOWN,-100,-114,0,0 +27,3,14,24,SPIKES__NORMAL_UP,-110,-120,0,0 +27,3,18,24,SPIKES__NORMAL_UP,-114,-120,0,0 +27,3,9,30,SPIKES__HIDING_DOWN,-105,-126,0,0 +28,3,3,10,TOGGLE_GRAVITY,2,0,2,16 +28,3,8,10,TOGGLE_GRAVITY,1,0,2,17 +28,3,14,12,SPIKES__NORMAL_DOWN,114,-108,0,0 +29,3,16,26,PIPE_ENTRANCE,15,0,3,0 +29,3,27,26,TRACK,0,-55,45,1 +29,3,28,27,TRACK_AIR_CORNER,3,-123,0,0 +30,3,16,18,TRACK,60,0,50,8 +30,3,15,19,TRACK_AIR_CORNER,2,-115,0,0 +30,3,2,26,TRACK,15,0,15,4 +30,3,9,26,TRACK,0,-55,45,5 +30,3,1,27,TRACK_AIR_CORNER,2,-123,0,0 +30,3,10,27,TRACK_AIR_CORNER,3,-123,0,0 +32,3,6,17,TRACK_AIR_CORNER,1,-113,0,0 +32,3,5,18,TRACK,0,35,20,9 +37,3,14,24,SPIKES__NORMAL_UP,82,-120,0,0 +38,3,10,1,TRACK_AIR_CORNER,0,-97,0,0 +38,3,10,2,TRACK,10,0,10,1 +38,3,17,2,TRACK,0,-80,60,2 +38,3,18,3,TRACK_AIR_CORNER,3,-99,0,0 +38,3,24,13,TRACK,0,-40,30,1 +38,3,0,14,PIPE_ENTRANCE,30,0,3,0 +38,3,25,14,TRACK_AIR_CORNER,3,-110,0,0 +38,3,8,18,TOGGLE_GRAVITY,0,4,7,2 +38,3,11,29,PIPE_ENTRANCE,0,-30,1,0 +39,3,1,25,PIPE_EXIT,31,30,0,14 +9,4,10,28,SPIKES__HIDING_UP,-42,100,0,0 +10,4,2,25,BOUNCE_BLOCK,-66,103,0,0 +11,4,16,1,MOVING_SPRING,-4,1,5,2 +11,4,27,17,SPRING__UP,0,111,0,0 +12,4,12,1,PLATFORM_SQUARE,0,1,7,2 +13,4,3,29,PLATFORM_SQUARE,0,1,6,2 +14,4,0,1,PLATFORM_THIN__FALLING,64,127,0,0 +14,4,19,8,PLATFORM_SQUARE,0,1,5,2 +15,4,16,4,BOOSTER,16,0,0,0 +15,4,1,5,PLATFORM_THIN__FALLING,31,123,0,0 +15,4,9,14,PLATFORM_THIN__FALLING,23,114,0,0 +15,4,30,20,SPIKES__NORMAL_LEFT,2,108,0,0 +15,4,29,25,PLATFORM_SQUARE,-7,0,9,2 +16,4,6,31,PLATFORM_SQUARE,0,0,9,2 +18,4,2,28,SPIKES__HIDING_UP,-66,0,0,0 +18,4,6,28,SPIKES__NORMAL_UP,-70,0,0,0 +19,4,19,2,TOGGLE_GRAVITY,1,0,2,17 +19,4,24,2,TOGGLE_GRAVITY,2,0,2,17 +19,4,30,16,SPIKES__NORMAL_UP,-126,112,0,0 +19,4,4,19,FERRIS_WHEEL,5,5,8,2 +19,4,4,19,FERRIS_WHEEL,11,5,8,2 +19,4,4,19,FERRIS_WHEEL,0,5,8,2 +19,4,26,31,PLATFORM_SQUARE,-8,1,10,2 +20,4,2,16,SPIKES__NORMAL_UP,126,112,0,0 +20,4,6,16,SPIKES__NORMAL_UP,122,112,0,0 +21,4,0,7,CONVEYOR_BELT,1,0,13,5 +21,4,12,13,CONVEYOR_BELT,1,0,13,5 +21,4,31,17,PLATFORM_THIN__FALLING,65,111,0,0 +22,4,24,10,TRACK_AIR_CORNER,0,118,0,0 +22,4,23,11,TRACK,40,0,25,5 +22,4,23,11,TRACK,40,0,25,5 +22,4,23,17,TRACK,0,-8,10,4 +22,4,31,17,TRACK,-8,0,10,3 +22,4,24,18,TRACK_AIR_CORNER,2,110,0,0 +22,4,29,30,TOGGLE__PLAYER_FLOAT,1,0,15,9 +23,4,16,4,PLATFORM_THIN,0,0,2,8 +23,4,29,11,TRACK,0,-40,25,6 +23,4,30,12,TRACK_AIR_CORNER,3,116,0,0 +23,4,0,18,TRACK_AIR_CORNER,3,110,0,0 +23,4,29,30,TOGGLE__PLAYER_FLOAT,1,0,11,9 +24,4,12,1,SPIKES__NORMAL_LEFT,-12,127,0,0 +24,4,12,5,SPIKES__NORMAL_LEFT,-12,123,0,0 +24,4,12,9,SPIKES__NORMAL_LEFT,-12,119,0,0 +26,4,8,22,PLATFORM_CRUMBLING,1,106,0,0 +26,4,12,28,SPIKES__NORMAL_DOWN,-76,100,0,0 +26,4,20,29,SPRING__RIGHT,1,99,0,0 +27,4,12,13,SPRING__RIGHT,1,115,0,0 +27,4,1,20,PLATFORM_SQUARE,0,0,6,2 +27,4,31,30,PLATFORM_THIN__FALLING,-127,98,0,0 +28,4,20,8,SPIKES__NORMAL_UP,108,120,0,0 +28,4,16,13,SPRING__LEFT,1,115,0,0 +29,4,0,0,SPIKES__HIDING_UP,96,-128,0,0 +29,4,22,11,TRACK_AIR_CORNER,0,117,0,0 +29,4,22,12,TRACK,0,20,15,11 +29,4,22,25,PIPE_EXIT,74,20,0,12 +29,4,5,29,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +29,4,8,29,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +32,4,5,12,TRACK,-100,0,60,10 +32,4,6,13,TRACK_AIR_CORNER,3,115,0,0 +34,4,1,5,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +34,4,4,5,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +34,4,16,13,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +34,4,16,16,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,9 +34,4,19,16,TOGGLE_PLAYER_LAYER__BACK,0,0,3,9 +34,4,28,29,SPRING__RIGHT,1,99,0,0 +37,4,18,16,SPIKES__NORMAL_DOWN,78,112,0,0 +38,4,18,4,SPIKES__NORMAL_DOWN,46,124,0,0 +7,5,7,31,MOVING_SPRING,0,-2,2,4 +8,5,6,15,SPRING__UP,1,-1,13,5 +10,5,7,6,MOVING_SPRING,0,-3,2,5 +10,5,1,27,MOVING_SPRING,0,0,2,6 +10,5,19,28,PLATFORM_SQUARE,0,0,7,2 +11,5,2,8,SPIKES__NORMAL_DOWN,-98,88,0,0 +11,5,6,8,SPIKES__NORMAL_DOWN,-102,88,0,0 +12,5,21,11,PIPE_ENTRANCE,30,0,3,0 +13,5,0,12,TRACK,60,0,45,1 +13,5,3,14,CONVEYOR_BELT,0,0,13,5 +13,5,15,14,CONVEYOR_BELT,0,0,13,5 +13,5,28,26,CONVEYOR_BELT,1,0,13,5 +13,5,7,30,PLATFORM_THIN,0,0,8,2 +14,5,22,2,GRIND_RAIL__END,0,0,8,2 +14,5,18,11,TRACK_AIR_CORNER,1,85,0,0 +14,5,17,12,TRACK,0,35,20,2 +14,5,5,15,SPRING__UP,0,81,0,0 +15,5,14,2,SPIKES__NORMAL_UP,18,94,0,0 +19,5,29,2,TOGGLE__PLAYER_FLOAT,1,0,11,8 +19,5,30,7,TORCH,-126,89,0,0 +20,5,18,0,BOUNCE_BLOCK,110,96,0,0 +20,5,31,2,BOUNCE_BLOCK,97,94,0,0 +20,5,2,7,TORCH,126,89,0,0 +20,5,6,7,TORCH,122,89,0,0 +21,5,15,31,BOUNCE_BLOCK,81,65,0,0 +22,5,30,3,TORCH,0,93,0,0 +22,5,22,4,CHECKPOINT,2,92,0,0 +22,5,14,8,SPIKES__HIDING_UP,50,88,0,0 +22,5,2,16,SPIKES__NORMAL_UP,62,80,0,0 +22,5,17,30,TOGGLE_GRAVITY,2,0,2,12 +23,5,2,3,TORCH,0,93,0,0 +23,5,6,3,TORCH,0,93,0,0 +23,5,10,3,TORCH,0,93,0,0 +23,5,30,3,TORCH,0,93,0,0 +23,5,20,17,BOOSTER__WALL,0,79,0,0 +24,5,2,3,TORCH,0,93,0,0 +24,5,6,3,TORCH,0,93,0,0 +24,5,12,8,SPRING__BIG_UPRIGHT,1,88,0,0 +24,5,11,29,CONVEYOR_BELT,0,0,13,5 +24,5,31,30,PLATFORM_THIN__FALLING,-31,66,0,0 +25,5,22,20,SPIKES__HIDING_UP,-54,76,0,0 +25,5,26,20,SPIKES__NORMAL_UP,-58,76,0,0 +25,5,28,20,PLATFORM_CRUMBLING,0,76,0,0 +25,5,10,25,PLATFORM_THIN__FALLING,-42,71,0,0 +26,5,11,19,PLATFORM_SQUARE,0,0,2,9 +27,5,14,8,SPIKES__NORMAL_UP,-110,88,0,0 +27,5,18,8,PLATFORM_CRUMBLING,0,88,0,0 +27,5,24,26,PLATFORM_CRUMBLING,1,70,0,0 +27,5,30,26,SPIKES__NORMAL_UP,-126,70,0,0 +28,5,2,26,SPIKES__NORMAL_UP,126,70,0,0 +29,5,20,6,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +29,5,20,9,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,8 +29,5,23,9,TOGGLE_PLAYER_LAYER__BACK,0,0,3,8 +29,5,17,24,BOOSTER__WALL,79,0,0,0 +31,5,18,24,TOGGLE_PLAYER_LAYER__BACK,0,0,2,5 +31,5,20,24,TOGGLE_PLAYER_LAYER__BACK,0,0,9,3 +31,5,29,24,TOGGLE_PLAYER_LAYER__BACK,0,0,2,4 +31,5,12,31,TOGGLE_PLAYER_LAYER__BACK,0,0,3,14 +31,5,15,31,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,14 +32,5,30,24,SPIKES__NORMAL_UP,-30,72,0,0 +32,5,3,28,CHECKPOINT,4,68,0,0 +33,5,14,26,SPIKES__HIDING_UP,-46,70,0,0 +33,5,20,26,BOOSTER,-52,0,0,0 +33,5,17,30,TOGGLE_GRAVITY,1,0,2,17 +33,5,22,30,TOGGLE_GRAVITY,2,0,2,17 +34,5,13,5,BOOSTER__WALL,-77,0,0,0 +34,5,30,25,SPRING__DOWN,1,71,0,0 +35,5,30,20,SPIKES__NORMAL_DOWN,-126,76,0,0 +36,5,0,11,SPRING__RIGHT,1,85,0,0 +36,5,26,31,SPRING__DOWN,2,65,0,0 +36,5,30,31,SPRING__DOWN,2,65,0,0 +37,5,30,8,SPIKES__NORMAL_DOWN,66,88,0,0 +37,5,2,31,SPRING__DOWN,2,65,0,0 +37,5,6,31,SPRING__DOWN,2,65,0,0 +37,5,10,31,SPRING__DOWN,2,65,0,0 +37,5,14,31,SPRING__DOWN,2,65,0,0 +38,5,2,8,SPIKES__NORMAL_DOWN,62,88,0,0 +38,5,6,8,SPIKES__NORMAL_DOWN,58,88,0,0 +5,6,20,21,FERRIS_WHEEL,5,5,2,10 +5,6,20,21,FERRIS_WHEEL,11,5,2,10 +5,6,20,21,FERRIS_WHEEL,0,5,2,10 +7,6,31,0,SPIKES__NORMAL_DOWN,1,64,0,0 +7,6,1,10,PLATFORM_SQUARE,0,0,2,7 +8,6,3,0,SPIKES__NORMAL_DOWN,-3,64,0,0 +8,6,7,0,SPIKES__NORMAL_DOWN,-7,64,0,0 +8,6,11,0,SPIKES__NORMAL_DOWN,-11,64,0,0 +8,6,5,10,PLATFORM_SQUARE,0,0,2,5 +8,6,29,15,PLATFORM_SQUARE,0,0,5,2 +9,6,21,24,SPIKES__HIDING_UP,-53,40,0,0 +9,6,24,31,SPRING__RIGHT,2,33,0,0 +11,6,6,13,SPRING__UP,0,51,0,0 +12,6,26,8,TRACK_AIR_CORNER,0,56,0,0 +12,6,27,8,TRACK,0,8,10,4 +12,6,27,15,TRACK,66,0,45,5 +12,6,26,16,TRACK_AIR_CORNER,2,48,0,0 +13,6,4,28,PLATFORM_THIN,0,0,5,2 +14,6,17,8,TRACK,-64,0,45,3 +14,6,18,9,TRACK_AIR_CORNER,3,55,0,0 +14,6,24,14,PIPE_EXIT,40,20,2,6 +15,6,5,10,TOGGLE_GRAVITY,1,0,2,11 +15,6,10,10,TOGGLE_GRAVITY,2,0,2,11 +15,6,9,22,TOGGLE_GRAVITY,1,0,2,12 +16,6,11,17,SPRING__DOWN,0,47,0,0 +17,6,17,18,SPIKES__HIDING_DOWN,-49,46,0,0 +18,6,31,28,TOGGLE_GRAVITY,0,0,2,17 +20,6,6,24,SPIKES__NORMAL_DOWN,122,40,0,0 +21,6,6,3,CONVEYOR_BELT,1,0,13,5 +21,6,18,3,CONVEYOR_BELT,1,0,12,5 +21,6,30,3,SPRING__RIGHT,0,61,0,0 +21,6,5,7,CONVEYOR_BELT,0,0,13,5 +21,6,17,7,CONVEYOR_BELT,0,0,13,5 +21,6,2,12,SPIKES__NORMAL_DOWN,94,52,0,0 +22,6,16,12,SPIKES__NORMAL_LEFT,48,52,0,0 +22,6,30,20,SPIKES__NORMAL_UP,34,44,0,0 +23,6,13,22,TOGGLE_GRAVITY,2,0,2,12 +23,6,18,22,TOGGLE_GRAVITY,1,0,2,13 +24,6,5,0,BOOSTER,0,64,0,0 +24,6,12,17,SPIKES__NORMAL_RIGHT,-12,47,0,0 +24,6,12,21,SPIKES__NORMAL_RIGHT,-12,43,0,0 +24,6,0,24,SPIKES__NORMAL_DOWN,0,40,0,0 +25,6,13,18,PLATFORM_SQUARE,-5,1,7,2 +26,6,5,24,PLATFORM_THIN__FALLING,-69,40,0,0 +26,6,12,30,SPIKES__NORMAL_DOWN,-76,34,0,0 +26,6,16,30,SPIKES__NORMAL_DOWN,-80,34,0,0 +27,6,12,7,SPRING__RIGHT,1,57,0,0 +27,6,28,11,TOGGLE_PLAYER_LAYER__BACK,0,0,3,8 +27,6,31,11,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,8 +28,6,12,6,BOOSTER,116,0,0,0 +29,6,19,11,TOGGLE_PLAYER_LAYER__BACK,0,0,3,9 +29,6,19,20,TOGGLE_PLAYER_LAYER__BACK,0,0,3,9 +29,6,19,29,TOGGLE_PLAYER_LAYER__BACK,0,0,3,8 +33,6,12,12,PLATFORM_CRUMBLING,1,52,0,0 +33,6,12,16,TOGGLE_GRAVITY,1,1,2,12 +33,6,17,16,TOGGLE_GRAVITY,2,0,2,13 +33,6,12,29,TOGGLE_GRAVITY,1,0,2,12 +33,6,17,29,TOGGLE_GRAVITY,2,0,2,12 +34,6,25,0,SPIKES__HIDING_DOWN,-89,64,0,0 +35,6,22,2,PLATFORM_THIN,-4,0,6,2 +35,6,2,14,PLATFORM_THIN,0,0,9,2 +36,6,11,4,PLATFORM_THIN,0,0,5,2 +5,7,8,10,SPIKES__NORMAL_RIGHT,88,22,0,0 +5,7,8,14,SPIKES__NORMAL_RIGHT,88,18,0,0 +5,7,16,27,MOVING_SPRING,-4,0,6,2 +6,7,2,4,BOOSTER,62,0,0,0 +6,7,5,26,TOGGLE_GRAVITY,1,0,2,17 +6,7,10,26,TOGGLE_GRAVITY,2,0,2,17 +13,7,2,4,SPIKES__NORMAL_UP,94,28,0,0 +13,7,6,4,SPIKES__NORMAL_UP,90,28,0,0 +13,7,10,4,SPIKES__NORMAL_UP,86,28,0,0 +13,7,14,4,SPIKES__NORMAL_UP,82,28,0,0 +13,7,18,4,SPIKES__NORMAL_UP,78,28,0,0 +13,7,22,4,SPIKES__NORMAL_UP,74,28,0,0 +13,7,26,4,SPIKES__NORMAL_UP,70,28,0,0 +13,7,30,12,SPIKES__HIDING_UP,66,20,0,0 +14,7,20,16,SPRING__BIG_UPRIGHT,0,16,0,0 +14,7,5,17,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,20 +14,7,8,17,TOGGLE_PLAYER_LAYER__BACK,0,0,3,4 +14,7,20,25,TOGGLE_PLAYER_LAYER__BACK,0,0,6,3 +14,7,20,28,TOGGLE_PLAYER_LAYER__FRONT,0,0,3,9 +14,7,23,28,TOGGLE_PLAYER_LAYER__BACK,0,0,3,9 +15,7,9,2,TOGGLE_GRAVITY,1,0,2,11 +15,7,9,13,TOGGLE_GRAVITY,1,0,2,10 +15,7,9,23,TOGGLE_GRAVITY,1,0,2,9 +16,7,8,7,PLATFORM_THIN,0,0,2,4 +16,7,16,21,TOGGLE_GRAVITY,0,4,11,2 +16,7,27,21,TOGGLE_GRAVITY,0,4,10,2 +16,7,14,22,SPIKES__NORMAL_UP,-14,10,0,0 +16,7,22,25,BOUNCE_BLOCK,-22,7,0,0 +17,7,22,0,PLATFORM_THIN,0,0,2,7 +17,7,1,8,PLATFORM_THIN,-5,0,6,2 +17,7,5,21,TOGGLE_GRAVITY,0,4,15,2 +17,7,22,22,BOOSTER,-54,0,0,0 +17,7,10,24,BOUNCE_BLOCK,-42,8,0,0 +17,7,1,28,BOUNCE_BLOCK,-33,4,0,0 +20,7,7,4,TOGGLE_GRAVITY,0,4,8,2 +20,7,18,4,SPIKES__NORMAL_UP,110,28,0,0 +22,7,18,2,TOGGLE_GRAVITY,1,0,2,14 +22,7,27,3,SPRING__DOWN,0,29,0,0 +22,7,16,4,SPIKES__NORMAL_LEFT,48,28,0,0 +22,7,18,16,TOGGLE_GRAVITY,1,1,2,13 +23,7,2,0,SPIKES__NORMAL_UP,30,32,0,0 +23,7,6,0,SPIKES__NORMAL_UP,26,32,0,0 +23,7,10,0,SPIKES__NORMAL_UP,22,32,0,0 +23,7,14,19,PLATFORM_THIN,0,0,2,6 +24,7,9,0,CHECKPOINT,3,32,0,0 +24,7,4,13,SPRING__UP,0,19,0,0 +25,7,10,4,TOGGLE__PLAYER_FLOAT,1,0,12,9 +25,7,13,9,TORCH,0,23,0,0 +25,7,17,9,TORCH,0,23,0,0 +25,7,28,23,SPRING__LEFT,1,9,0,0 +26,7,31,7,CONVEYOR_BELT,1,0,13,5 +26,7,25,10,SPIKES__NORMAL_UP,-89,22,0,0 +26,7,29,10,SPIKES__HIDING_UP,-93,22,0,0 +27,7,20,4,PLATFORM_THIN__FALLING,-116,28,0,0 +33,7,12,9,TOGGLE_GRAVITY,1,0,2,11 +33,7,17,9,TOGGLE_GRAVITY,2,0,2,11 +33,7,12,20,TOGGLE_GRAVITY,1,0,2,10 +33,7,17,20,TOGGLE_GRAVITY,2,0,2,10 +33,7,12,30,TOGGLE_GRAVITY,1,0,2,11 +33,7,17,30,TOGGLE_GRAVITY,2,0,2,11 +5,8,20,9,PLATFORM_SQUARE,0,1,6,2 +6,8,3,12,TOGGLE_GRAVITY,1,0,2,18 +6,8,8,12,TOGGLE_GRAVITY,2,0,2,18 +6,8,12,13,SPIKES__NORMAL_RIGHT,52,-13,0,0 +6,8,3,30,TOGGLE_GRAVITY,1,0,2,13 +6,8,8,30,TOGGLE_GRAVITY,2,0,2,13 +9,8,29,1,SPRING__DOWN,1,-1,0,0 +12,8,17,7,SPRING__DOWN,1,-7,0,0 +12,8,26,20,SPIKES__NORMAL_UP,102,-20,0,0 +12,8,30,20,SPIKES__NORMAL_UP,98,-20,0,0 +13,8,3,6,TOGGLE_GRAVITY,1,0,2,16 +13,8,2,20,SPIKES__NORMAL_UP,94,-20,0,0 +13,8,3,24,TOGGLE_GRAVITY,1,0,2,17 +14,8,17,18,BOOSTER__WALL,47,0,0,0 +15,8,9,0,TOGGLE_GRAVITY,1,0,2,11 +15,8,0,9,SPRING__RIGHT,1,-9,0,0 +16,8,27,11,MOVING_SPRING,0,0,5,2 +17,8,14,1,BOUNCE_BLOCK,-46,-1,0,0 +17,8,8,14,MOVING_SPRING,-3,0,5,2 +20,8,11,9,PIPE_ENTRANCE,0,15,0,0 +20,8,11,21,TRACK_AIR_CORNER,2,-21,0,0 +20,8,11,21,TRACK,30,0,20,1 +21,8,6,20,TRACK,0,30,20,2 +21,8,7,20,TRACK_AIR_CORNER,1,-20,0,0 +22,8,24,15,TRACK_AIR_CORNER,0,-15,0,0 +22,8,25,16,TRACK,60,0,45,5 +23,8,28,2,PIPE_EXIT,4,30,3,8 +24,8,9,1,TRACK_AIR_CORNER,1,-1,0,0 +24,8,8,2,TRACK,-15,0,15,7 +24,8,8,16,TRACK,0,-20,15,6 +24,8,9,17,TRACK_AIR_CORNER,3,-17,0,0 +33,8,12,9,TOGGLE_GRAVITY,1,0,2,10 +33,8,17,9,TOGGLE_GRAVITY,2,0,2,10 +33,8,12,19,TOGGLE_GRAVITY,1,0,2,10 +33,8,17,19,TOGGLE_GRAVITY,2,0,2,10 +33,8,12,29,TOGGLE_GRAVITY,1,0,2,12 +33,8,17,29,TOGGLE_GRAVITY,2,0,2,12 +40,8,5,20,STAGE_GOAL,0,0,0,0 +40,8,5,27,STAGE_GOAL,0,0,0,0 +6,9,3,11,TOGGLE_GRAVITY,1,0,2,13 +6,9,8,11,TOGGLE_GRAVITY,2,0,2,13 +13,9,7,6,BOOSTER,89,0,0,0 +13,9,3,9,TOGGLE_GRAVITY,1,0,2,15 +21,9,6,4,TRACK,60,0,45,3 +21,9,6,5,TRACK_AIR_CORNER,2,-37,0,0 +22,9,25,4,TRACK,0,-30,20,4 +22,9,26,5,TRACK_AIR_CORNER,3,-37,0,0 +33,9,12,9,TOGGLE_GRAVITY,1,0,2,15 +33,9,17,9,TOGGLE_GRAVITY,2,0,2,15 +40,9,5,6,STAGE_GOAL,1,0,0,0 diff --git a/sa1/data/maps/zone_6/act_2/entities/itemboxes.csv b/sa1/data/maps/zone_6/act_2/entities/itemboxes.csv new file mode 100644 index 0000000000..ecbc62e106 --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/entities/itemboxes.csv @@ -0,0 +1,31 @@ +Adv2,ITEMS,42,10, +27,1,24,12,SHIELD_MAGNETIC +27,1,28,12,RINGS_RANDOM +15,2,9,17,SPEED_UP +23,2,17,8,ONE_UP +13,3,18,12,SHIELD_MAGNETIC +18,3,14,24,RINGS_10 +18,3,17,24,RINGS_10 +20,3,9,3,RINGS_RANDOM +20,3,13,3,RINGS_RANDOM +20,3,17,3,RINGS_RANDOM +20,3,21,3,RINGS_RANDOM +34,3,22,15,RINGS_RANDOM +34,3,26,15,SHIELD +9,4,24,22,RINGS_RANDOM +24,4,26,13,SPEED_UP +28,4,25,4,RINGS_10 +28,4,10,22,RINGS_10 +28,4,13,22,RINGS_5 +35,4,20,28,RINGS_RANDOM +7,5,20,20,RINGS_10 +14,5,5,29,SHIELD_MAGNETIC +4,6,29,30,RINGS_5 +21,6,1,6,ONE_UP +26,6,12,12,SHIELD_MAGNETIC +26,6,28,24,RINGS_10 +12,7,26,4,ONE_UP +13,7,30,12,RINGS_10 +23,7,1,16,SHIELD +24,7,19,0,RINGS_RANDOM +28,7,1,4,RINGS_10 diff --git a/sa1/data/maps/zone_6/act_2/entities/rings.csv b/sa1/data/maps/zone_6/act_2/entities/rings.csv new file mode 100644 index 0000000000..c31ace1040 --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/entities/rings.csv @@ -0,0 +1,550 @@ +Adv2,RINGS,42,10 +19,0,30,15 +20,0,1,15 +20,0,4,15 +20,0,32,22 +20,0,7,33 +21,0,4,22 +21,0,8,22 +21,0,7,29 +21,0,4,32 +23,0,2,19 +23,0,5,19 +23,0,8,19 +38,0,23,21 +38,0,27,21 +38,0,31,21 +38,0,6,33 +38,0,10,33 +38,0,14,33 +39,0,32,15 +39,0,32,19 +39,0,32,23 +10,1,32,27 +11,1,5,27 +11,1,10,27 +13,1,22,32 +13,1,25,32 +13,1,28,32 +16,1,9,12 +16,1,9,16 +16,1,9,20 +17,1,13,12 +17,1,13,16 +17,1,13,20 +18,1,17,12 +18,1,17,16 +18,1,17,20 +20,1,7,5 +20,1,7,9 +21,1,1,3 +21,1,3,12 +21,1,7,15 +21,1,11,18 +24,1,2,16 +24,1,6,18 +24,1,10,20 +25,1,22,18 +25,1,25,18 +25,1,28,18 +25,1,25,22 +25,1,25,26 +26,1,20,26 +26,1,23,26 +26,1,26,26 +27,1,10,9 +27,1,10,13 +27,1,10,17 +27,1,24,20 +27,1,18,23 +27,1,30,23 +27,1,16,28 +27,1,32,28 +29,1,12,22 +29,1,12,26 +29,1,12,30 +30,1,1,27 +30,1,5,27 +30,1,9,27 +37,1,21,15 +37,1,21,19 +37,1,21,23 +37,1,26,26 +37,1,26,30 +38,1,10,5 +38,1,10,9 +38,1,12,12 +38,1,16,12 +38,1,20,12 +38,1,8,23 +38,1,12,23 +38,1,16,23 +38,1,18,26 +38,1,18,30 +39,1,32,2 +39,1,32,6 +39,1,32,10 +39,1,32,21 +39,1,32,25 +39,1,32,29 +10,2,19,7 +10,2,19,12 +10,2,19,17 +12,2,23,25 +12,2,20,28 +12,2,17,31 +16,2,8,30 +16,2,11,30 +16,2,8,33 +16,2,11,33 +22,2,25,21 +22,2,25,26 +22,2,25,31 +24,2,7,3 +24,2,10,3 +25,2,7,6 +25,2,10,6 +25,2,13,6 +26,2,30,26 +27,2,32,10 +27,2,31,16 +27,2,27,19 +27,2,1,26 +27,2,4,26 +27,2,19,28 +27,2,22,31 +30,2,1,20 +30,2,16,20 +30,2,1,25 +30,2,16,25 +30,2,1,30 +30,2,16,30 +31,2,2,8 +31,2,6,10 +31,2,10,12 +31,2,14,32 +37,2,26,2 +37,2,21,4 +37,2,21,8 +37,2,21,12 +37,2,32,28 +38,2,12,2 +38,2,16,2 +38,2,20,2 +38,2,10,4 +38,2,10,8 +38,2,18,8 +38,2,10,12 +38,2,14,12 +38,2,18,12 +38,2,4,28 +38,2,8,28 +39,2,11,11 +39,2,15,11 +39,2,19,11 +39,2,1,29 +10,3,19,7 +10,3,19,12 +10,3,19,17 +11,3,18,11 +11,3,21,11 +11,3,24,11 +12,3,20,29 +12,3,23,29 +12,3,26,29 +14,3,10,5 +14,3,15,5 +14,3,20,5 +15,3,1,5 +15,3,6,5 +15,3,11,5 +15,3,29,29 +15,3,28,32 +18,3,24,14 +18,3,27,14 +18,3,30,14 +19,3,10,5 +19,3,10,8 +19,3,10,11 +19,3,29,27 +19,3,32,27 +19,3,30,32 +20,3,3,27 +20,3,6,27 +20,3,1,32 +20,3,4,32 +20,3,7,32 +22,3,31,20 +22,3,31,25 +22,3,31,30 +23,3,29,20 +23,3,29,25 +23,3,29,30 +24,3,16,10 +24,3,21,10 +24,3,26,10 +24,3,29,23 +25,3,1,23 +25,3,5,25 +25,3,20,33 +26,3,9,3 +26,3,12,3 +26,3,15,3 +27,3,23,3 +28,3,6,19 +28,3,9,19 +28,3,12,19 +29,3,27,6 +29,3,27,11 +29,3,27,16 +30,3,8,6 +30,3,8,11 +30,3,31,15 +30,3,8,16 +30,3,28,18 +31,3,11,3 +31,3,8,6 +31,3,2,12 +31,3,9,19 +31,3,14,19 +31,3,19,19 +34,3,18,31 +34,3,21,31 +34,3,24,31 +34,3,27,31 +34,3,30,31 +39,3,1,2 +39,3,1,7 +8,4,6,23 +8,4,30,26 +8,4,6,27 +8,4,6,31 +9,4,1,26 +9,4,4,26 +10,4,7,17 +10,4,10,17 +10,4,13,17 +13,4,26,5 +13,4,28,7 +13,4,30,9 +14,4,2,13 +14,4,4,15 +14,4,6,17 +14,4,10,21 +14,4,12,23 +14,4,14,25 +15,4,26,3 +16,4,13,21 +16,4,17,21 +16,4,21,21 +19,4,1,5 +19,4,4,5 +19,4,7,5 +19,4,26,24 +19,4,29,24 +19,4,32,24 +20,4,3,24 +21,4,6,8 +21,4,9,8 +21,4,12,8 +21,4,19,15 +21,4,22,15 +21,4,25,15 +21,4,6,24 +21,4,9,24 +21,4,12,24 +21,4,6,27 +21,4,9,27 +21,4,12,27 +23,4,3,13 +23,4,8,13 +23,4,13,13 +25,4,24,3 +25,4,28,5 +25,4,32,17 +26,4,4,17 +26,4,8,17 +27,4,5,3 +27,4,4,8 +27,4,1,11 +29,4,8,32 +30,4,23,13 +30,4,28,13 +31,4,1,13 +31,4,15,13 +31,4,20,13 +31,4,25,13 +33,4,30,10 +33,4,28,16 +34,4,18,2 +34,4,21,2 +34,4,24,2 +34,4,27,2 +34,4,30,2 +34,4,4,8 +34,4,10,10 +34,4,12,16 +36,4,25,7 +36,4,22,10 +36,4,19,13 +7,5,7,15 +7,5,7,19 +7,5,7,23 +10,5,12,17 +10,5,15,17 +10,5,18,17 +13,5,10,13 +13,5,15,13 +13,5,20,13 +14,5,17,20 +14,5,17,25 +14,5,17,30 +18,5,26,6 +18,5,27,11 +18,5,31,13 +19,5,3,13 +20,5,18,12 +20,5,22,14 +20,5,26,16 +21,5,32,10 +22,5,12,2 +22,5,15,2 +22,5,3,10 +26,5,11,3 +26,5,11,6 +26,5,11,9 +28,5,32,9 +29,5,2,3 +29,5,14,3 +29,5,16,9 +30,5,5,15 +30,5,8,15 +30,5,11,15 +32,5,19,21 +32,5,23,21 +32,5,27,21 +33,5,26,25 +33,5,30,25 +34,5,2,25 +35,5,20,23 +35,5,16,25 +35,5,12,27 +36,5,22,23 +36,5,22,27 +36,5,22,31 +37,5,20,3 +37,5,23,3 +37,5,20,6 +37,5,23,6 +1,6,6,30 +1,6,10,32 +4,6,17,25 +4,6,20,25 +4,6,23,25 +5,6,19,9 +5,6,22,9 +5,6,25,9 +6,6,10,20 +6,6,10,23 +6,6,10,26 +8,6,29,3 +8,6,32,3 +9,6,3,3 +9,6,7,15 +9,6,10,15 +9,6,13,15 +10,6,26,22 +10,6,25,27 +10,6,21,29 +13,6,4,9 +13,6,9,9 +13,6,14,9 +13,6,26,9 +13,6,31,9 +13,6,6,16 +13,6,11,16 +13,6,16,16 +13,6,28,16 +14,6,4,9 +14,6,1,16 +14,6,6,16 +15,6,25,15 +15,6,29,17 +16,6,1,19 +16,6,23,21 +16,6,27,21 +16,6,31,21 +16,6,5,33 +16,6,8,33 +16,6,11,33 +17,6,14,24 +17,6,17,24 +17,6,20,24 +20,6,16,15 +20,6,19,15 +20,6,22,15 +22,6,29,14 +22,6,22,16 +22,6,20,23 +22,6,22,29 +22,6,29,32 +23,6,7,2 +23,6,14,4 +23,6,16,11 +23,6,14,17 +23,6,7,20 +24,6,4,31 +27,6,23,17 +27,6,26,17 +27,6,29,17 +28,6,19,5 +28,6,23,5 +28,6,27,5 +28,6,20,21 +28,6,24,23 +28,6,28,25 +29,6,32,32 +30,6,30,17 +30,6,26,19 +30,6,8,28 +30,6,4,30 +31,6,2,15 +34,6,11,3 +34,6,15,3 +34,6,19,3 +35,6,26,7 +35,6,29,7 +35,6,32,7 +35,6,4,24 +35,6,7,24 +35,6,10,24 +36,6,3,7 +36,6,6,7 +36,6,28,32 +36,6,31,32 +37,6,2,32 +37,6,5,32 +37,6,8,32 +37,6,11,32 +37,6,14,32 +1,7,14,2 +3,7,8,3 +3,7,12,3 +3,7,16,3 +8,7,25,31 +8,7,29,31 +8,7,6,32 +9,7,1,31 +13,7,32,28 +14,7,8,20 +14,7,2,23 +14,7,14,23 +14,7,16,28 +16,7,32,6 +16,7,2,9 +16,7,2,12 +16,7,2,15 +17,7,3,6 +17,7,6,6 +17,7,19,16 +17,7,22,16 +17,7,25,16 +18,7,11,5 +18,7,14,5 +18,7,17,5 +18,7,29,5 +18,7,32,5 +19,7,3,5 +20,7,11,8 +20,7,11,12 +20,7,11,16 +21,7,7,6 +21,7,11,8 +21,7,15,10 +22,7,27,11 +22,7,27,14 +22,7,27,17 +23,7,10,21 +23,7,10,25 +23,7,10,29 +24,7,4,2 +24,7,4,5 +25,7,13,2 +25,7,16,2 +25,7,19,2 +25,7,6,8 +25,7,6,12 +25,7,6,16 +26,7,8,4 +26,7,11,4 +26,7,14,4 +28,7,18,11 +28,7,14,13 +28,7,10,15 +36,7,29,3 +36,7,32,3 +36,7,28,6 +36,7,31,6 +37,7,3,3 +37,7,6,3 +37,7,9,3 +37,7,12,3 +37,7,2,6 +37,7,5,6 +37,7,8,6 +37,7,11,6 +37,7,14,6 +7,8,30,4 +7,8,11,9 +7,8,14,9 +7,8,17,9 +8,8,2,2 +9,8,29,25 +9,8,29,28 +9,8,26,31 +9,8,29,31 +9,8,32,31 +10,8,2,5 +10,8,6,5 +10,8,10,5 +10,8,17,5 +10,8,21,7 +10,8,25,9 +11,8,2,11 +11,8,6,11 +11,8,10,11 +11,8,30,11 +12,8,2,11 +12,8,6,11 +12,8,21,17 +12,8,24,17 +12,8,27,17 +12,8,28,29 +12,8,31,29 +13,8,2,29 +14,8,16,16 +14,8,16,22 +14,8,16,28 +15,8,12,7 +15,8,15,7 +15,8,18,7 +20,8,19,22 +20,8,24,22 +20,8,29,22 +21,8,2,22 +23,8,2,17 +23,8,7,17 +23,8,12,17 +23,8,17,17 +23,8,22,17 +23,8,27,17 +23,8,32,17 +9,9,29,2 +21,9,14,6 +21,9,19,6 +21,9,24,6 +21,9,29,6 +22,9,2,6 +22,9,7,6 +22,9,12,6 +22,9,17,6 diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/bg/header.c b/sa1/data/maps/zone_6/act_2/tilemaps/bg/header.c new file mode 100644 index 0000000000..e6087d395b --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_6_act_2_fg[]; +const u8 Tiles_zone_6_act_2_bg[] = INCBIN_U8("data/maps/zone_6/act_2/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_6_act_2_bg[] = INCBIN_U8("data/maps/zone_6/act_2/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_6_act_2_bg = { + .xTiles = 64, + .yTiles = 29, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_6_act_2_bg, + .tilesSize = sizeof(Tiles_zone_6_act_2_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_6_act_2_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_6_act_2_bg, +}; diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/bg/palette.pal b/sa1/data/maps/zone_6/act_2/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..333181eaca --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 0 0 +213 189 98 +139 131 98 +65 74 65 +197 205 180 +230 230 164 +255 255 156 +8 8 16 +0 148 0 +255 255 255 +213 205 180 +164 156 131 +139 131 98 +98 90 57 +8 8 16 +255 230 148 +222 189 98 +189 156 82 +156 131 65 +255 255 255 +123 255 255 +57 189 255 +0 123 255 +0 0 197 +0 148 0 +32 74 49 +8 148 98 +0 255 123 +255 255 255 +0 0 0 +0 90 41 +0 180 41 +180 180 180 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 +0 148 0 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 74 65 +65 82 74 +98 156 148 +74 131 123 +57 115 115 +41 82 82 +24 57 57 +0 0 0 +255 0 0 +0 164 255 +0 148 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 222 222 +255 156 189 +255 90 115 +255 32 49 +189 0 0 +255 0 0 +255 0 0 +8 8 16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 205 0 +255 222 49 +255 238 106 +255 255 156 +0 255 123 +82 255 131 +172 255 148 +255 255 156 +0 148 0 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +90 82 98 +65 57 74 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +8 8 16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +49 16 0 +98 57 8 +148 90 8 +205 123 8 +255 197 57 +255 255 189 +8 41 32 +74 115 106 +106 172 148 +139 213 172 +172 238 189 +255 0 0 +255 131 0 +0 213 213 +106 255 255 +0 0 0 +255 255 255 +255 255 180 +238 238 123 +197 197 115 +148 148 98 +123 123 74 +90 90 65 +65 65 57 +255 0 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 115 255 +230 0 189 +148 0 148 +0 255 255 +0 180 197 +0 115 115 +0 255 0 +0 189 0 +0 115 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 106 222 +222 8 180 +180 24 148 +148 41 123 +106 57 98 +74 65 74 +255 255 255 +164 164 164 +0 255 255 +49 156 180 +0 139 255 +49 98 180 +0 0 0 +0 0 0 +49 41 49 diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_6/act_2/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..e0873438b7 Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/bg/tiles.png b/sa1/data/maps/zone_6/act_2/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..7a9f9961e1 Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/flags.coll b/sa1/data/maps/zone_6/act_2/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..a52aacb0ea Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/header.c b/sa1/data/maps/zone_6/act_2/tilemaps/fg/header.c new file mode 100644 index 0000000000..d7dc5422ff --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_6_act_2_fg[] = INCBIN_U16("data/maps/zone_6/act_2/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_6_act_2_fg[] = INCBIN_U8("data/maps/zone_6/act_2/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_6_act_2_fg[] = INCBIN_S8("data/maps/zone_6/act_2/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_6_act_2_fg[] = INCBIN_U8("data/maps/zone_6/act_2/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_6_act_2_fg[] = INCBIN_U16("data/maps/zone_6/act_2/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_6_act_2_fg0[] = INCBIN_MAP("data/maps/zone_6/act_2/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_6_act_2_fg1[] = INCBIN_MAP("data/maps/zone_6/act_2/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_6_act_2_fg[] = INCBIN_U16("data/maps/zone_6/act_2/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_6_act_2_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x60, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_6_act_2_fg, + .tilesSize = sizeof(Tileset_zone_6_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_6_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_6_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_6_act_2_fg, + }, + .metatileMap = Map_zone_6_act_2_fg0, + .mapWidth = 110, + .mapHeight = 26, +}; + +ALIGNED(4) const struct MapHeader zone_6_act_2_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_6_act_2_fg, + .tilesSize = sizeof(Tileset_zone_6_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_6_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_6_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_6_act_2_fg, + }, + .metatileMap = Map_zone_6_act_2_fg1, + .mapWidth = 110, + .mapHeight = 26, +}; + +const Collision CollHeader_zone_6_act_2_fg = { CollHeightMap_zone_6_act_2_fg, + CollTileRot_zone_6_act_2_fg, + Metatiles_zone_6_act_2_fg, + { Map_zone_6_act_2_fg0, Map_zone_6_act_2_fg1 }, + CollFlags_zone_6_act_2_fg, + 110, + 26, + 0x2940, + 0x09C0 }; diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_6/act_2/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..9ab20b4e62 Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_6/act_2/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..49988a444f Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_6/act_2/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..cc8082c7a0 Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/metadata.txt b/sa1/data/maps/zone_6/act_2/tilemaps/fg/metadata.txt new file mode 100644 index 0000000000..a1fead7146 --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/tilemaps/fg/metadata.txt @@ -0,0 +1,3 @@ +tilemap_dim = {12,12} +map_dim = {110,26} +spawn_pos = {0,0} diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_6/act_2/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..21986c99d8 Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/palette.pal b/sa1/data/maps/zone_6/act_2/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..333181eaca --- /dev/null +++ b/sa1/data/maps/zone_6/act_2/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 0 0 +213 189 98 +139 131 98 +65 74 65 +197 205 180 +230 230 164 +255 255 156 +8 8 16 +0 148 0 +255 255 255 +213 205 180 +164 156 131 +139 131 98 +98 90 57 +8 8 16 +255 230 148 +222 189 98 +189 156 82 +156 131 65 +255 255 255 +123 255 255 +57 189 255 +0 123 255 +0 0 197 +0 148 0 +32 74 49 +8 148 98 +0 255 123 +255 255 255 +0 0 0 +0 90 41 +0 180 41 +180 180 180 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 +0 148 0 +230 238 222 +213 205 156 +180 180 139 +156 148 123 +123 123 106 +82 74 65 +65 82 74 +98 156 148 +74 131 123 +57 115 115 +41 82 82 +24 57 57 +0 0 0 +255 0 0 +0 164 255 +0 148 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 222 222 +255 156 189 +255 90 115 +255 32 49 +189 0 0 +255 0 0 +255 0 0 +8 8 16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 205 0 +255 222 49 +255 238 106 +255 255 156 +0 255 123 +82 255 131 +172 255 148 +255 255 156 +0 148 0 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +90 82 98 +65 57 74 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +8 8 16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 148 0 +0 0 0 +49 16 0 +98 57 8 +148 90 8 +205 123 8 +255 197 57 +255 255 189 +8 41 32 +74 115 106 +106 172 148 +139 213 172 +172 238 189 +255 0 0 +255 131 0 +0 213 213 +106 255 255 +0 0 0 +255 255 255 +255 255 180 +238 238 123 +197 197 115 +148 148 98 +123 123 74 +90 90 65 +65 65 57 +255 0 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 115 255 +230 0 189 +148 0 148 +0 255 255 +0 180 197 +0 115 115 +0 255 0 +0 189 0 +0 115 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 +0 0 0 +255 106 222 +222 8 180 +180 24 148 +148 41 123 +106 57 98 +74 65 74 +255 255 255 +164 164 164 +0 255 255 +49 156 180 +0 139 255 +49 98 180 +0 0 0 +0 0 0 +49 41 49 diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_6/act_2/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..8207604c73 Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_6/act_2/tilemaps/fg/tileset.png b/sa1/data/maps/zone_6/act_2/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..9f4e167ee8 Binary files /dev/null and b/sa1/data/maps/zone_6/act_2/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_7/act_1/entities/enemies.csv b/sa1/data/maps/zone_7/act_1/entities/enemies.csv new file mode 100644 index 0000000000..bdf187e898 --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/entities/enemies.csv @@ -0,0 +1,4 @@ +Adv2,ENEMIES,15,4,,,,, +9,1,25,3,EGG_X,-57,-35,0,0 +3,2,12,14,EGG_WRECKER,-108,-78,0,0 +6,2,12,22,EGG_DRILLSTER,52,-86,0,0 diff --git a/sa1/data/maps/zone_7/act_1/entities/interactables.csv b/sa1/data/maps/zone_7/act_1/entities/interactables.csv new file mode 100644 index 0000000000..7ad9bbeb2e --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/entities/interactables.csv @@ -0,0 +1,32 @@ +Adv2,INTERACTABLES,15,4,,,,, +7,1,9,21,CHECKPOINT,1,-53,0,0 +3,2,0,26,PLATFORM_THIN,-96,-90,0,0 +3,2,24,26,PLATFORM_THIN,-120,-90,0,0 +4,2,31,25,SMALL_FALL_BLOCK,97,-89,0,0 +5,2,1,25,SMALL_FALL_BLOCK,95,-89,0,0 +5,2,3,25,SMALL_FALL_BLOCK,93,-89,0,0 +7,2,14,21,SPRING__UP,2,-85,0,0 +1,3,17,2,SMALL_FALL_BLOCK,-49,-98,0,0 +1,3,19,2,SMALL_FALL_BLOCK,-51,-98,0,0 +1,3,21,2,SMALL_FALL_BLOCK,-53,-98,0,0 +1,3,23,2,SMALL_FALL_BLOCK,-55,-98,0,0 +1,3,25,2,SMALL_FALL_BLOCK,-57,-98,0,0 +1,3,27,2,SMALL_FALL_BLOCK,-59,-98,0,0 +1,3,29,2,SMALL_FALL_BLOCK,-61,-98,0,0 +1,3,31,2,SMALL_FALL_BLOCK,-63,-98,0,0 +2,3,1,2,SMALL_FALL_BLOCK,-65,-98,0,0 +2,3,3,2,SMALL_FALL_BLOCK,-67,-98,0,0 +2,3,5,2,SMALL_FALL_BLOCK,-69,-98,0,0 +2,3,7,2,SMALL_FALL_BLOCK,-71,-98,0,0 +4,3,17,2,SMALL_FALL_BLOCK,111,-98,0,0 +4,3,19,2,SMALL_FALL_BLOCK,109,-98,0,0 +4,3,21,2,SMALL_FALL_BLOCK,107,-98,0,0 +4,3,23,2,SMALL_FALL_BLOCK,105,-98,0,0 +4,3,25,2,SMALL_FALL_BLOCK,103,-98,0,0 +4,3,27,2,SMALL_FALL_BLOCK,101,-98,0,0 +4,3,29,2,SMALL_FALL_BLOCK,99,-98,0,0 +4,3,31,2,SMALL_FALL_BLOCK,97,-98,0,0 +5,3,1,2,SMALL_FALL_BLOCK,95,-98,0,0 +5,3,3,2,SMALL_FALL_BLOCK,93,-98,0,0 +5,3,5,2,SMALL_FALL_BLOCK,91,-98,0,0 +5,3,7,2,SMALL_FALL_BLOCK,89,-98,0,0 diff --git a/sa1/data/maps/zone_7/act_1/entities/itemboxes.csv b/sa1/data/maps/zone_7/act_1/entities/itemboxes.csv new file mode 100644 index 0000000000..de87c25ad6 --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/entities/itemboxes.csv @@ -0,0 +1 @@ +Adv2,ITEMS,15,4, diff --git a/sa1/data/maps/zone_7/act_1/entities/rings.csv b/sa1/data/maps/zone_7/act_1/entities/rings.csv new file mode 100644 index 0000000000..6c0009e98e --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/entities/rings.csv @@ -0,0 +1,23 @@ +Adv2,RINGS,15,4 +7,1,28,20 +7,1,31,20 +8,1,20,15 +8,1,23,15 +8,1,26,15 +8,1,2,20 +1,2,21,31 +1,2,25,31 +1,2,29,31 +2,2,1,31 +2,2,5,31 +4,2,21,31 +4,2,25,31 +4,2,29,31 +5,2,3,17 +5,2,6,17 +5,2,9,17 +5,2,1,31 +5,2,5,31 +7,2,14,3 +7,2,14,7 +7,2,14,11 diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/bg/header.c b/sa1/data/maps/zone_7/act_1/tilemaps/bg/header.c new file mode 100644 index 0000000000..eb2eac21d8 --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_7_act_1_fg[]; +const u8 Tiles_zone_7_act_1_bg[] = INCBIN_U8("data/maps/zone_7/act_1/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_7_act_1_bg[] = INCBIN_U8("data/maps/zone_7/act_1/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_7_act_1_bg = { + .xTiles = 37, + .yTiles = 23, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_7_act_1_bg, + .tilesSize = sizeof(Tiles_zone_7_act_1_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_7_act_1_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_7_act_1_bg, +}; diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/bg/palette.pal b/sa1/data/maps/zone_7/act_1/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..d9b045aa9a --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +57 180 90 +255 255 255 +230 238 246 +205 230 238 +172 213 230 +123 197 230 +90 172 222 +57 156 213 +24 131 205 +0 74 189 +82 0 131 +57 16 98 +8 16 65 +189 213 197 +139 180 189 +255 0 0 +57 180 90 +255 255 255 +213 230 238 +172 213 230 +106 180 230 +255 49 74 +57 156 213 +24 131 205 +8 106 189 +8 82 172 +0 57 139 +189 213 197 +164 189 172 +139 164 164 +106 148 148 +90 131 131 +57 180 90 +24 131 205 +8 106 189 +8 82 172 +0 57 139 +57 180 90 +57 180 90 +57 180 90 +8 16 65 +255 255 205 +238 230 156 +213 197 139 +197 172 98 +164 148 90 +106 106 74 +0 0 0 +57 180 90 +255 255 255 +230 255 230 +180 222 205 +164 197 205 +106 156 156 +57 98 98 +0 24 41 +255 230 115 +213 180 0 +205 139 0 +255 0 0 +213 0 0 +164 0 0 +115 0 0 +74 0 0 +238 0 0 +230 238 222 +197 205 180 +172 180 180 +139 156 164 +123 123 131 +57 49 65 +16 32 32 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +57 180 90 +255 255 255 +230 255 230 +180 222 205 +164 197 205 +106 156 156 +57 98 98 +0 24 41 +255 230 115 +213 180 0 +205 139 0 +255 90 32 +213 0 0 +164 0 0 +115 0 0 +74 0 0 +238 0 0 +255 255 255 +230 255 230 +180 222 205 +172 213 205 +106 156 156 +57 98 98 +16 57 57 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_7/act_1/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..d3ecc345f8 Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/bg/tiles.png b/sa1/data/maps/zone_7/act_1/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..2117e1cea7 Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/flags.coll b/sa1/data/maps/zone_7/act_1/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..8173f5c671 Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/header.c b/sa1/data/maps/zone_7/act_1/tilemaps/fg/header.c new file mode 100644 index 0000000000..bfa8d69ede --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_7_act_1_fg[] = INCBIN_U16("data/maps/zone_7/act_1/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_7_act_1_fg[] = INCBIN_U8("data/maps/zone_7/act_1/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_7_act_1_fg[] = INCBIN_S8("data/maps/zone_7/act_1/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_7_act_1_fg[] = INCBIN_U8("data/maps/zone_7/act_1/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_7_act_1_fg[] = INCBIN_U16("data/maps/zone_7/act_1/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_7_act_1_fg0[] = INCBIN_MAP("data/maps/zone_7/act_1/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_7_act_1_fg1[] = INCBIN_MAP("data/maps/zone_7/act_1/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_7_act_1_fg[] = INCBIN_U16("data/maps/zone_7/act_1/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_7_act_1_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_7_act_1_fg, + .tilesSize = sizeof(Tileset_zone_7_act_1_fg) - (0 * 0x00), + .palette = Palette_zone_7_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_7_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_7_act_1_fg, + }, + .metatileMap = Map_zone_7_act_1_fg0, + .mapWidth = 40, + .mapHeight = 10, +}; + +ALIGNED(4) const struct MapHeader zone_7_act_1_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_7_act_1_fg, + .tilesSize = sizeof(Tileset_zone_7_act_1_fg) - (0 * 0x00), + .palette = Palette_zone_7_act_1_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_7_act_1_fg) / sizeof(u16), + .map = Metatiles_zone_7_act_1_fg, + }, + .metatileMap = Map_zone_7_act_1_fg1, + .mapWidth = 40, + .mapHeight = 10, +}; + +const Collision CollHeader_zone_7_act_1_fg = { CollHeightMap_zone_7_act_1_fg, + CollTileRot_zone_7_act_1_fg, + Metatiles_zone_7_act_1_fg, + { Map_zone_7_act_1_fg0, Map_zone_7_act_1_fg1 }, + CollFlags_zone_7_act_1_fg, + 40, + 10, + 0x0F00, + 0x03C0 }; diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_7/act_1/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..1a7107c683 Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_7/act_1/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..0a56e19bc2 Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_7/act_1/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..cb3e1628bc Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_7/act_1/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..1fd5486e58 Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/palette.pal b/sa1/data/maps/zone_7/act_1/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..d9b045aa9a --- /dev/null +++ b/sa1/data/maps/zone_7/act_1/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +57 180 90 +255 255 255 +230 238 246 +205 230 238 +172 213 230 +123 197 230 +90 172 222 +57 156 213 +24 131 205 +0 74 189 +82 0 131 +57 16 98 +8 16 65 +189 213 197 +139 180 189 +255 0 0 +57 180 90 +255 255 255 +213 230 238 +172 213 230 +106 180 230 +255 49 74 +57 156 213 +24 131 205 +8 106 189 +8 82 172 +0 57 139 +189 213 197 +164 189 172 +139 164 164 +106 148 148 +90 131 131 +57 180 90 +24 131 205 +8 106 189 +8 82 172 +0 57 139 +57 180 90 +57 180 90 +57 180 90 +8 16 65 +255 255 205 +238 230 156 +213 197 139 +197 172 98 +164 148 90 +106 106 74 +0 0 0 +57 180 90 +255 255 255 +230 255 230 +180 222 205 +164 197 205 +106 156 156 +57 98 98 +0 24 41 +255 230 115 +213 180 0 +205 139 0 +255 0 0 +213 0 0 +164 0 0 +115 0 0 +74 0 0 +238 0 0 +230 238 222 +197 205 180 +172 180 180 +139 156 164 +123 123 131 +57 49 65 +16 32 32 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +57 180 90 +255 255 255 +230 255 230 +180 222 205 +164 197 205 +106 156 156 +57 98 98 +0 24 41 +255 230 115 +213 180 0 +205 139 0 +255 90 32 +213 0 0 +164 0 0 +115 0 0 +74 0 0 +238 0 0 +255 255 255 +230 255 230 +180 222 205 +172 213 205 +106 156 156 +57 98 98 +16 57 57 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 +238 0 0 diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_7/act_1/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..198115ebcc Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_7/act_1/tilemaps/fg/tileset.png b/sa1/data/maps/zone_7/act_1/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..b24d129e38 Binary files /dev/null and b/sa1/data/maps/zone_7/act_1/tilemaps/fg/tileset.png differ diff --git a/sa1/data/maps/zone_7/act_2/entities/enemies.csv b/sa1/data/maps/zone_7/act_2/entities/enemies.csv new file mode 100644 index 0000000000..b4442f3b08 --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/entities/enemies.csv @@ -0,0 +1,2 @@ +Adv2,ENEMIES,5,2,,,,, +1,0,4,31,SUPER_EGG_ROBOT,-36,-31,0,0 diff --git a/sa1/data/maps/zone_7/act_2/entities/interactables.csv b/sa1/data/maps/zone_7/act_2/entities/interactables.csv new file mode 100644 index 0000000000..f2c412b6e3 --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/entities/interactables.csv @@ -0,0 +1 @@ +Adv2,INTERACTABLES,5,2,,,,, diff --git a/sa1/data/maps/zone_7/act_2/entities/itemboxes.csv b/sa1/data/maps/zone_7/act_2/entities/itemboxes.csv new file mode 100644 index 0000000000..27695fccab --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/entities/itemboxes.csv @@ -0,0 +1 @@ +Adv2,ITEMS,5,2, diff --git a/sa1/data/maps/zone_7/act_2/entities/rings.csv b/sa1/data/maps/zone_7/act_2/entities/rings.csv new file mode 100644 index 0000000000..73c52bba45 --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/entities/rings.csv @@ -0,0 +1 @@ +Adv2,RINGS,5,2 diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/bg/header.c b/sa1/data/maps/zone_7/act_2/tilemaps/bg/header.c new file mode 100644 index 0000000000..e5e00fee3b --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/tilemaps/bg/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +extern const u16 Palette_zone_7_act_2_fg[]; +const u8 Tiles_zone_7_act_2_bg[] = INCBIN_U8("data/maps/zone_7/act_2/tilemaps/bg/tiles.4bpp"); +const u8 Tilemap_zone_7_act_2_bg[] = INCBIN_U8("data/maps/zone_7/act_2/tilemaps/bg/tilemap.tilemap2"); + +const Tilemap zone_7_act_2_bg = { + .xTiles = 32, + .yTiles = 20, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_zone_7_act_2_bg, + .tilesSize = sizeof(Tiles_zone_7_act_2_bg) - (0 * 0x00), + .palette = NULL, + .palOffset = 0, + .palLength = sizeof(Palette_zone_7_act_2_fg) / sizeof(u16), + .map = (const u16 *)Tilemap_zone_7_act_2_bg, +}; diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/bg/palette.pal b/sa1/data/maps/zone_7/act_2/tilemaps/bg/palette.pal new file mode 100644 index 0000000000..12d7f3af63 --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/tilemaps/bg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +255 255 255 +213 246 255 +180 230 255 +148 205 255 +115 197 255 +74 164 255 +0 131 238 +0 98 172 +0 65 106 +0 32 57 +0 0 0 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +255 255 255 +230 230 238 +205 213 213 +180 189 197 +164 172 180 +156 156 164 +139 139 148 +123 123 131 +106 106 115 +74 74 82 +41 41 49 +8 8 16 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +246 246 246 +222 230 238 +205 213 205 +180 180 197 +156 164 180 +139 148 156 +131 139 148 +123 123 131 +106 106 115 +74 74 82 +41 41 49 +8 8 16 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +180 230 255 +164 213 246 +148 197 230 +131 180 213 +115 172 205 +98 156 189 +82 139 172 +65 123 164 +49 115 148 +32 98 139 +16 82 123 +0 65 106 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +0 189 49 +205 205 205 +0 32 238 +0 115 255 +0 16 156 +0 172 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +32 32 32 +255 255 255 +115 115 115 +0 189 255 diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/bg/tilemap.tilemap2 b/sa1/data/maps/zone_7/act_2/tilemaps/bg/tilemap.tilemap2 new file mode 100644 index 0000000000..7178263506 Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/bg/tilemap.tilemap2 differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/bg/tiles.png b/sa1/data/maps/zone_7/act_2/tilemaps/bg/tiles.png new file mode 100644 index 0000000000..1baa4753d5 Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/bg/tiles.png differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/flags.coll b/sa1/data/maps/zone_7/act_2/tilemaps/fg/flags.coll new file mode 100644 index 0000000000..6048a30cd8 Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/fg/flags.coll differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/header.c b/sa1/data/maps/zone_7/act_2/tilemaps/fg/header.c new file mode 100644 index 0000000000..75dc665fb6 --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/tilemaps/fg/header.c @@ -0,0 +1,63 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_zone_7_act_2_fg[] = INCBIN_U16("data/maps/zone_7/act_2/tilemaps/fg/palette.gbapal"); +const u8 Tileset_zone_7_act_2_fg[] = INCBIN_U8("data/maps/zone_7/act_2/tilemaps/fg/tileset.4bpp"); +const s8 CollHeightMap_zone_7_act_2_fg[] = INCBIN_S8("data/maps/zone_7/act_2/tilemaps/fg/height_map.coll"); +const u8 CollTileRot_zone_7_act_2_fg[] = INCBIN_U8("data/maps/zone_7/act_2/tilemaps/fg/tile_rot.coll"); +const u16 Metatiles_zone_7_act_2_fg[] = INCBIN_U16("data/maps/zone_7/act_2/tilemaps/fg/metatiles.tilemap2"); + +const MetatileIndexType Map_zone_7_act_2_fg0[] = INCBIN_MAP("data/maps/zone_7/act_2/tilemaps/fg/map_front.bin"); + +const MetatileIndexType Map_zone_7_act_2_fg1[] = INCBIN_MAP("data/maps/zone_7/act_2/tilemaps/fg/map_back.bin"); + +const u16 CollFlags_zone_7_act_2_fg[] = INCBIN_U16("data/maps/zone_7/act_2/tilemaps/fg/flags.coll"); +ALIGNED(4) const struct MapHeader zone_7_act_2_fg0 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x60, + .animFrameCount = 0, + .animDelay = 60, + .tiles = Tileset_zone_7_act_2_fg, + .tilesSize = sizeof(Tileset_zone_7_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_7_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_7_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_7_act_2_fg, + }, + .metatileMap = Map_zone_7_act_2_fg0, + .mapWidth = 32, + .mapHeight = 3, +}; + +ALIGNED(4) const struct MapHeader zone_7_act_2_fg1 = +{ + .tileset = { + .xTiles = 12, + .yTiles = 12, + .animTileSize = 0x00, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tileset_zone_7_act_2_fg, + .tilesSize = sizeof(Tileset_zone_7_act_2_fg) - (0 * 0x60), + .palette = Palette_zone_7_act_2_fg, + .palOffset = 0, + .palLength = sizeof(Palette_zone_7_act_2_fg) / sizeof(u16), + .map = Metatiles_zone_7_act_2_fg, + }, + .metatileMap = Map_zone_7_act_2_fg1, + .mapWidth = 32, + .mapHeight = 3, +}; + +const Collision CollHeader_zone_7_act_2_fg = { CollHeightMap_zone_7_act_2_fg, + CollTileRot_zone_7_act_2_fg, + Metatiles_zone_7_act_2_fg, + { Map_zone_7_act_2_fg0, Map_zone_7_act_2_fg1 }, + CollFlags_zone_7_act_2_fg, + 32, + 3, + 0x0C00, + 0x0120 }; diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/height_map.coll b/sa1/data/maps/zone_7/act_2/tilemaps/fg/height_map.coll new file mode 100644 index 0000000000..a0462de03f Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/fg/height_map.coll differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/map_back.bin b/sa1/data/maps/zone_7/act_2/tilemaps/fg/map_back.bin new file mode 100644 index 0000000000..b14c028cd5 Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/fg/map_back.bin differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/map_front.bin b/sa1/data/maps/zone_7/act_2/tilemaps/fg/map_front.bin new file mode 100644 index 0000000000..a641d4273e Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/fg/map_front.bin differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/metatiles.tilemap2 b/sa1/data/maps/zone_7/act_2/tilemaps/fg/metatiles.tilemap2 new file mode 100644 index 0000000000..29a90ea85d Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/fg/metatiles.tilemap2 differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/palette.pal b/sa1/data/maps/zone_7/act_2/tilemaps/fg/palette.pal new file mode 100644 index 0000000000..12d7f3af63 --- /dev/null +++ b/sa1/data/maps/zone_7/act_2/tilemaps/fg/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +255 255 255 +213 246 255 +180 230 255 +148 205 255 +115 197 255 +74 164 255 +0 131 238 +0 98 172 +0 65 106 +0 32 57 +0 0 0 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +255 255 255 +230 230 238 +205 213 213 +180 189 197 +164 172 180 +156 156 164 +139 139 148 +123 123 131 +106 106 115 +74 74 82 +41 41 49 +8 8 16 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +246 246 246 +222 230 238 +205 213 205 +180 180 197 +156 164 180 +139 148 156 +131 139 148 +123 123 131 +106 106 115 +74 74 82 +41 41 49 +8 8 16 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +180 230 255 +164 213 246 +148 197 230 +131 180 213 +115 172 205 +98 156 189 +82 139 172 +65 123 164 +49 115 148 +32 98 139 +16 82 123 +0 65 106 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +148 197 90 +0 189 49 +205 205 205 +0 32 238 +0 115 255 +0 16 156 +0 172 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +32 32 32 +255 255 255 +115 115 115 +0 189 255 diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/tile_rot.coll b/sa1/data/maps/zone_7/act_2/tilemaps/fg/tile_rot.coll new file mode 100644 index 0000000000..4858c96a0a Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/fg/tile_rot.coll differ diff --git a/sa1/data/maps/zone_7/act_2/tilemaps/fg/tileset.png b/sa1/data/maps/zone_7/act_2/tilemaps/fg/tileset.png new file mode 100644 index 0000000000..f369c65b90 Binary files /dev/null and b/sa1/data/maps/zone_7/act_2/tilemaps/fg/tileset.png differ diff --git a/sa1/data/obj_gfx.s b/sa1/data/obj_gfx.s new file mode 100644 index 0000000000..ca0d7c0366 --- /dev/null +++ b/sa1/data/obj_gfx.s @@ -0,0 +1,12 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + + mSectionRodata + + .global C_DECL(gObjTiles_4bpp) +C_DECL(gObjTiles_4bpp): + .include "graphics/obj_tiles_4bpp.inc" + + .global C_DECL(gObjTiles_8bpp) +C_DECL(gObjTiles_8bpp): + .include "graphics/obj_tiles_8bpp.inc" diff --git a/sa1/data/rom_header_old.s b/sa1/data/rom_header_old.s new file mode 100644 index 0000000000..f58154edb0 --- /dev/null +++ b/sa1/data/rom_header_old.s @@ -0,0 +1,50 @@ +.include "asm/macros.inc" +.include "constants/constants.inc" + +@ The developers left an additional header inside the ROM, +@ using a different publisher ID. + +@@ _entry_old: @ 0x08000000 +@@ b _rom_header_old_end +@@ +@@ @ These will be set by gbafix +@@ +@@ .global RomHeaderNintendoLogo_old +@@ RomHeaderNintendoLogo_old: +@@ .space 0x9c +@@ +@@ RomHeaderGameTitle_old: +@@ .space 12 +@@ +@@ RomHeaderGameCode_old: +@@ .int 0 +@@ +@@ RomHeaderMakerCode_old: +@@ .short 0 +@@ +@@ RomHeaderMagic_old: +@@ .byte 0x96 +@@ +@@ RomHeaderMainUnitCode_old: +@@ .byte 0 +@@ +@@ RomHeaderDeviceType_old: +@@ .byte 0 +@@ +@@ RomHeaderReserved1_old: +@@ .space 7 +@@ +@@ RomHeaderSoftwareVersion_old: +@@ .byte 0 +@@ +@@ RomHeaderChecksum_old: +@@ .byte 0 +@@ +@@ RomHeaderReserved2_old: +@@ .space 2 +@@ +@@ _rom_header_old_end: + +@ Temp copy-paste +_0800032C: + .incbin "baserom_sa1.gba", 0x32C, 0xC0 diff --git a/sa1/data/sound_data.s b/sa1/data/sound_data.s new file mode 100644 index 0000000000..d0702424fc --- /dev/null +++ b/sa1/data/sound_data.s @@ -0,0 +1,14 @@ + .include "asm/macros/c_decl.inc" +.include "asm/macros/portable.inc" + .include "asm/macros/m4a.inc" + .include "asm/macros/music_voice.inc" + .include "asm/macros/c_decl.inc" + +@; TODO: Convert this all to C +mSectionRodata + .include "sound/voice_groups.inc" + .include "sound/keysplit_tables.inc" + .include "sound/programmable_wave_data.inc" + .include "sound/music_player_table.inc" + .include "sound/song_table.inc" + .include "sound/direct_sound_data.inc" diff --git a/sa1/genctx.py b/sa1/genctx.py new file mode 100644 index 0000000000..b84df6c3dc --- /dev/null +++ b/sa1/genctx.py @@ -0,0 +1,77 @@ +import glob +import itertools as it +import sys + +# NOTE(Jace): +# "ImportError: cannot import name 'TopologicalSorter' from 'graphlib'" +# +# If you get the above error message, try uninstalling graphlib and install graphlib-backport instead. +# +# Alternatively you can try updating to a Python version equal to or newer than 3.9, +# and reinstall the module, though I haven't tested that. +# +# The information on graphlib-backport is from: +# https://stackoverflow.com/questions/71119487/cannot-get-topologicalsorter-from-graphlib +from graphlib import TopologicalSorter + +if len(sys.argv) > 1 and sys.argv[1] == '-e': + excluded = sys.argv[1:] +else: + excluded = [] + +depends_on = {} +data = {} + +def search_directories(*patterns): + return it.chain.from_iterable(glob.iglob(pattern,recursive=True) for pattern in patterns) + +for filename in search_directories('./include/**/*.h'): + with open(filename) as header: + header_name = "/".join(filename.split('/')[2:]) + + if not header_name in depends_on: + depends_on[header_name] = set() + + if not header_name.startswith("gba/"): + if header_name != "global.h" \ + and header_name != "config.h" \ + and header_name != "functions.h": + depends_on[header_name].add("global.h") + + else: # header_name.startswith("gba/") + if not header_name.endswith("types.h") \ + and not header_name.endswith("defines.h"): + depends_on[header_name].add("gba/types.h") + elif not header_name.endswith("multiboot.h") \ + and not header_name.endswith("types.h"): + depends_on[header_name].add("gba/multiboot.h") + + data[header_name] = "" + for line in header.readlines(): + if "#include" in line \ + and not line.startswith("//") \ + and '<' not in line: + requires = line.split('"')[1] + depends_on[header_name].add(requires) + continue + + data[header_name] += line + data[header_name] += "\n" + +ts = TopologicalSorter(depends_on) +print_order = tuple(ts.static_order()) + +with open('ctx.c', 'w') as context: + # Since the context is only used for matching anyway, auto-insert + context.write("#define PLATFORM_GBA 1\n\n") + + for header in print_order: + exclude = False + for e in excluded: + if e in header: + exclude = True + break + + if not exclude: + print(header) + context.write(data[header]) diff --git a/sa1/graphics/obj_palettes/pal_000.pal b/sa1/graphics/obj_palettes/pal_000.pal new file mode 100644 index 0000000000..f0487bd289 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_000.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +180 180 180 +0 32 156 +0 65 238 +0 0 98 +0 156 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +32 32 32 +255 255 255 +115 115 115 +0 156 255 diff --git a/sa1/graphics/obj_palettes/pal_001.pal b/sa1/graphics/obj_palettes/pal_001.pal new file mode 100644 index 0000000000..43ce8e4ea8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_001.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 98 65 +255 255 255 +189 238 255 +115 222 255 +49 205 255 +32 164 255 +24 106 238 +16 41 189 +0 0 0 +255 255 0 +189 238 115 +0 189 156 +0 172 0 +123 222 131 +57 205 139 +0 123 0 diff --git a/sa1/graphics/obj_palettes/pal_002.pal b/sa1/graphics/obj_palettes/pal_002.pal new file mode 100644 index 0000000000..0d16b0fb01 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_002.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 0 255 +238 139 32 +255 189 32 +189 82 16 +172 205 222 +0 156 255 +32 65 255 +156 156 156 +115 115 115 +172 0 0 +255 32 32 +16 16 16 +255 255 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/obj_palettes/pal_003.pal b/sa1/graphics/obj_palettes/pal_003.pal new file mode 100644 index 0000000000..bbc5eaad63 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_003.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 0 255 +238 139 32 +255 189 32 +189 82 16 +172 205 222 +0 156 255 +32 65 255 +156 156 156 +115 115 115 +172 0 0 +255 32 32 +0 0 0 +255 255 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/obj_palettes/pal_004.pal b/sa1/graphics/obj_palettes/pal_004.pal new file mode 100644 index 0000000000..d1fd74d480 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_004.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +16 16 16 +172 0 0 +32 65 255 +255 32 32 +189 82 16 +115 115 115 +0 156 255 +156 156 156 +238 139 32 +255 189 32 +172 205 222 +255 255 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/obj_palettes/pal_005.pal b/sa1/graphics/obj_palettes/pal_005.pal new file mode 100644 index 0000000000..1c6c88849c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_005.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 164 +180 180 180 +189 0 0 +255 32 0 +115 0 0 +32 65 255 +255 255 156 +255 222 0 +156 82 0 +255 172 82 +0 172 16 +115 255 0 +32 32 32 +255 255 255 +115 115 115 +255 156 0 diff --git a/sa1/graphics/obj_palettes/pal_006.pal b/sa1/graphics/obj_palettes/pal_006.pal new file mode 100644 index 0000000000..5dcf1562c0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_006.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +255 255 255 +255 156 189 +255 115 172 +255 82 148 +246 49 131 +213 8 98 +255 222 172 +255 164 0 +255 106 0 +238 0 0 +197 0 0 +255 238 172 +255 205 98 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_007.pal b/sa1/graphics/obj_palettes/pal_007.pal new file mode 100644 index 0000000000..481a489b92 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_007.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +172 205 222 +238 65 156 +255 156 189 +189 32 82 +0 172 0 +115 115 115 +156 156 156 +156 82 0 +255 172 82 +172 0 0 +255 0 0 +0 0 0 +255 255 255 +255 255 156 +255 255 0 diff --git a/sa1/graphics/obj_palettes/pal_008.pal b/sa1/graphics/obj_palettes/pal_008.pal new file mode 100644 index 0000000000..1e1595ebe8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_008.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +0 172 0 +0 0 0 +115 115 115 +156 156 156 +156 82 0 +172 0 0 +172 205 222 +189 32 82 +238 65 156 +255 0 0 +255 156 189 +255 172 82 +255 255 0 +255 255 156 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_009.pal b/sa1/graphics/obj_palettes/pal_009.pal new file mode 100644 index 0000000000..79ed388992 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_009.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +189 189 189 +82 82 106 +82 131 156 +65 32 65 +82 123 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +57 49 16 +255 255 255 +115 115 115 +0 164 255 diff --git a/sa1/graphics/obj_palettes/pal_010.pal b/sa1/graphics/obj_palettes/pal_010.pal new file mode 100644 index 0000000000..f3bdb95f43 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_010.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +197 197 197 +172 139 49 +172 197 82 +139 65 32 +172 98 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +90 65 8 +255 255 255 +115 115 115 +0 180 255 diff --git a/sa1/graphics/obj_palettes/pal_011.pal b/sa1/graphics/obj_palettes/pal_011.pal new file mode 100644 index 0000000000..4228a93c88 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_011.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +205 205 205 +255 189 0 +255 255 0 +205 98 0 +255 65 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +115 82 0 +255 255 255 +115 115 115 +0 189 255 diff --git a/sa1/graphics/obj_palettes/pal_012.pal b/sa1/graphics/obj_palettes/pal_012.pal new file mode 100644 index 0000000000..318f2deab6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_012.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +222 222 222 +255 222 82 +255 255 115 +255 156 49 +255 139 82 +255 255 189 +255 238 82 +238 139 32 +255 205 139 +255 49 32 +255 98 98 +222 115 0 +255 255 255 +172 172 172 +82 222 255 diff --git a/sa1/graphics/obj_palettes/pal_013.pal b/sa1/graphics/obj_palettes/pal_013.pal new file mode 100644 index 0000000000..a13fab0db9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_013.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 98 74 +255 255 255 +189 238 255 +115 222 255 +49 205 255 +0 172 255 +0 139 255 +0 98 255 +0 65 238 +255 255 0 +189 238 123 +0 172 139 +0 156 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_014.pal b/sa1/graphics/obj_palettes/pal_014.pal new file mode 100644 index 0000000000..d032063507 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_014.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 98 74 +255 255 255 +255 255 148 +255 238 0 +255 205 0 +255 164 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_015.pal b/sa1/graphics/obj_palettes/pal_015.pal new file mode 100644 index 0000000000..da89dc68c6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_015.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 205 0 +255 156 16 +172 98 0 +139 82 0 +255 255 255 +205 205 205 +139 156 156 +98 98 98 +255 82 0 +205 65 0 +156 49 0 +255 115 0 +255 222 115 +49 49 65 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_016.pal b/sa1/graphics/obj_palettes/pal_016.pal new file mode 100644 index 0000000000..aaae1a7e47 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_016.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 255 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_017.pal b/sa1/graphics/obj_palettes/pal_017.pal new file mode 100644 index 0000000000..da89dc68c6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_017.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 205 0 +255 156 16 +172 98 0 +139 82 0 +255 255 255 +205 205 205 +139 156 156 +98 98 98 +255 82 0 +205 65 0 +156 49 0 +255 115 0 +255 222 115 +49 49 65 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_018.pal b/sa1/graphics/obj_palettes/pal_018.pal new file mode 100644 index 0000000000..10cffe5219 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_018.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 49 +16 222 189 +0 189 172 +0 156 139 +0 82 49 +255 255 255 +205 205 205 +139 156 156 +98 98 98 +255 205 0 +222 156 0 +156 98 0 +205 238 238 +115 238 222 +65 65 65 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_019.pal b/sa1/graphics/obj_palettes/pal_019.pal new file mode 100644 index 0000000000..63d81bded9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_019.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +238 115 189 +172 65 172 +98 49 139 +65 49 65 +255 255 255 +205 205 205 +139 156 156 +98 98 98 +255 255 0 +255 189 0 +222 115 0 +255 205 255 +255 139 255 +65 65 65 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_020.pal b/sa1/graphics/obj_palettes/pal_020.pal new file mode 100644 index 0000000000..97afd9d7f9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_020.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 49 +255 238 189 +238 205 189 +205 189 172 +189 156 139 +156 115 98 +115 98 82 +98 82 65 +82 65 49 +255 255 255 +222 222 222 +172 172 172 +115 115 115 +82 82 82 +32 32 32 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_021.pal b/sa1/graphics/obj_palettes/pal_021.pal new file mode 100644 index 0000000000..5d8a229f59 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_021.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 49 222 +255 255 255 +172 156 205 +115 115 156 +65 82 98 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +222 172 205 +222 238 238 +172 189 205 +139 156 172 +82 98 115 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_022.pal b/sa1/graphics/obj_palettes/pal_022.pal new file mode 100644 index 0000000000..0585e2a725 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_022.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 82 +255 255 255 +255 156 0 +255 82 0 +189 49 0 +98 0 0 +115 189 255 +65 156 230 +32 115 197 +0 82 156 +255 205 0 +222 222 222 +189 189 205 +139 139 172 +82 82 115 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_023.pal b/sa1/graphics/obj_palettes/pal_023.pal new file mode 100644 index 0000000000..0c29762dfc --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_023.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 49 222 +255 255 255 +255 238 115 +255 205 0 +255 156 0 +255 82 0 +222 32 0 +172 32 0 +98 0 0 +255 238 0 +222 172 205 +222 238 238 +172 189 205 +139 156 172 +82 98 115 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_024.pal b/sa1/graphics/obj_palettes/pal_024.pal new file mode 100644 index 0000000000..ea8a6e3d60 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_024.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 255 +32 238 189 +0 205 172 +0 156 139 +0 115 82 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +238 189 0 +255 255 255 +205 205 205 +115 115 115 +82 82 82 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_025.pal b/sa1/graphics/obj_palettes/pal_025.pal new file mode 100644 index 0000000000..33acbee606 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_025.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 65 189 +32 238 189 +0 205 172 +0 156 139 +0 115 82 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +238 189 0 +255 255 255 +205 205 205 +115 115 115 +82 82 82 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_026.pal b/sa1/graphics/obj_palettes/pal_026.pal new file mode 100644 index 0000000000..3e33a64972 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_026.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 115 156 +222 222 255 +189 189 255 +156 156 255 +98 98 172 +65 65 139 +238 32 0 +156 16 0 +255 98 0 +255 238 0 +238 189 0 +255 255 255 +205 205 205 +98 98 98 +238 139 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_027.pal b/sa1/graphics/obj_palettes/pal_027.pal new file mode 100644 index 0000000000..61e5fcb677 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_027.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 172 +32 189 255 +8 148 205 +0 98 156 +0 49 98 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +255 255 255 +222 238 238 +189 205 222 +115 139 156 +65 82 98 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_028.pal b/sa1/graphics/obj_palettes/pal_028.pal new file mode 100644 index 0000000000..614e87a041 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_028.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 115 49 +65 156 189 +139 139 255 +49 115 255 +0 49 156 +65 205 189 +65 238 189 +156 238 156 +205 238 65 +255 238 0 +255 255 255 +222 222 238 +156 172 189 +82 98 139 +65 98 205 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_029.pal b/sa1/graphics/obj_palettes/pal_029.pal new file mode 100644 index 0000000000..3b7782009b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_029.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 255 +139 189 255 +82 139 222 +32 65 205 +0 32 139 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +255 255 255 +222 222 238 +172 189 205 +115 139 156 +65 82 98 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_030.pal b/sa1/graphics/obj_palettes/pal_030.pal new file mode 100644 index 0000000000..aa76a1cf57 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_030.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 255 +180 123 255 +123 16 222 +65 8 156 +57 0 139 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +238 189 0 +255 255 255 +205 205 205 +139 139 139 +82 82 82 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_031.pal b/sa1/graphics/obj_palettes/pal_031.pal new file mode 100644 index 0000000000..17c0698c45 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_031.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 49 156 +255 255 255 +189 32 255 +115 32 255 +0 49 98 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +255 172 0 +222 238 238 +172 189 205 +139 156 172 +82 98 115 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_032.pal b/sa1/graphics/obj_palettes/pal_032.pal new file mode 100644 index 0000000000..de1baab956 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_032.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 255 255 +205 205 205 +139 156 156 +98 98 98 +0 0 0 +238 0 0 +205 65 0 +156 49 0 +255 115 0 +255 222 0 +189 115 238 +115 82 189 +65 49 139 +16 32 65 +255 115 156 diff --git a/sa1/graphics/obj_palettes/pal_033.pal b/sa1/graphics/obj_palettes/pal_033.pal new file mode 100644 index 0000000000..3d639624fa --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_033.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 0 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_034.pal b/sa1/graphics/obj_palettes/pal_034.pal new file mode 100644 index 0000000000..98dc03b9f5 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_034.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 49 +255 238 189 +238 205 189 +205 189 172 +189 156 139 +156 115 98 +115 98 82 +98 82 65 +82 65 49 +255 255 255 +222 222 222 +189 189 189 +139 139 139 +98 98 98 +65 65 65 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_035.pal b/sa1/graphics/obj_palettes/pal_035.pal new file mode 100644 index 0000000000..34020c635c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_035.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 49 +255 238 189 +238 222 189 +205 189 172 +189 156 139 +156 115 98 +115 98 82 +98 82 65 +82 65 49 +255 255 255 +197 197 197 +148 148 148 +115 115 115 +82 82 82 +41 41 41 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_036.pal b/sa1/graphics/obj_palettes/pal_036.pal new file mode 100644 index 0000000000..32967a37ec --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_036.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 0 +238 205 16 +205 172 8 +172 139 0 +139 98 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +255 0 0 +189 0 0 +115 0 0 +49 0 0 +255 255 172 +255 255 82 +255 238 49 diff --git a/sa1/graphics/obj_palettes/pal_037.pal b/sa1/graphics/obj_palettes/pal_037.pal new file mode 100644 index 0000000000..ecc659d28b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_037.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_038.pal b/sa1/graphics/obj_palettes/pal_038.pal new file mode 100644 index 0000000000..073ef48ffd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_038.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 205 255 +255 213 123 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +24 57 41 diff --git a/sa1/graphics/obj_palettes/pal_039.pal b/sa1/graphics/obj_palettes/pal_039.pal new file mode 100644 index 0000000000..073ef48ffd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_039.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 205 255 +255 213 123 +246 189 82 +230 164 49 +222 131 41 +189 90 0 +213 148 82 +197 115 49 +164 82 24 +131 49 8 +213 255 98 +156 238 106 +98 205 98 +82 156 90 +57 106 74 +24 57 41 diff --git a/sa1/graphics/obj_palettes/pal_040.pal b/sa1/graphics/obj_palettes/pal_040.pal new file mode 100644 index 0000000000..bb378df5b8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_040.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 222 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_041.pal b/sa1/graphics/obj_palettes/pal_041.pal new file mode 100644 index 0000000000..ea0407684b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_041.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_042.pal b/sa1/graphics/obj_palettes/pal_042.pal new file mode 100644 index 0000000000..732a7563db --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_042.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 74 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_043.pal b/sa1/graphics/obj_palettes/pal_043.pal new file mode 100644 index 0000000000..9e6fde5626 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_043.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_044.pal b/sa1/graphics/obj_palettes/pal_044.pal new file mode 100644 index 0000000000..46f272740e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_044.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 49 222 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_045.pal b/sa1/graphics/obj_palettes/pal_045.pal new file mode 100644 index 0000000000..ca907d084b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_045.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 49 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_046.pal b/sa1/graphics/obj_palettes/pal_046.pal new file mode 100644 index 0000000000..b301a0776d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_046.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 123 0 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_047.pal b/sa1/graphics/obj_palettes/pal_047.pal new file mode 100644 index 0000000000..732a7563db --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_047.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 74 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_048.pal b/sa1/graphics/obj_palettes/pal_048.pal new file mode 100644 index 0000000000..f4b1bbe6eb --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_048.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_049.pal b/sa1/graphics/obj_palettes/pal_049.pal new file mode 100644 index 0000000000..b0e71c7644 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_049.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_050.pal b/sa1/graphics/obj_palettes/pal_050.pal new file mode 100644 index 0000000000..b0e71c7644 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_050.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_051.pal b/sa1/graphics/obj_palettes/pal_051.pal new file mode 100644 index 0000000000..a8817e055c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_051.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 238 139 +123 180 90 +82 131 65 +65 106 49 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_052.pal b/sa1/graphics/obj_palettes/pal_052.pal new file mode 100644 index 0000000000..b0e71c7644 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_052.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_053.pal b/sa1/graphics/obj_palettes/pal_053.pal new file mode 100644 index 0000000000..ea0407684b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_053.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_054.pal b/sa1/graphics/obj_palettes/pal_054.pal new file mode 100644 index 0000000000..b0e71c7644 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_054.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_055.pal b/sa1/graphics/obj_palettes/pal_055.pal new file mode 100644 index 0000000000..83c564bbdf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_055.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +172 213 255 +74 180 255 +32 148 213 +0 98 172 +0 41 82 +255 255 255 +197 205 222 +148 172 189 +115 139 156 +82 98 123 +0 41 65 +255 189 255 +255 0 255 +189 0 131 +115 0 57 diff --git a/sa1/graphics/obj_palettes/pal_056.pal b/sa1/graphics/obj_palettes/pal_056.pal new file mode 100644 index 0000000000..83c564bbdf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_056.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +172 213 255 +74 180 255 +32 148 213 +0 98 172 +0 41 82 +255 255 255 +197 205 222 +148 172 189 +115 139 156 +82 98 123 +0 41 65 +255 189 255 +255 0 255 +189 0 131 +115 0 57 diff --git a/sa1/graphics/obj_palettes/pal_057.pal b/sa1/graphics/obj_palettes/pal_057.pal new file mode 100644 index 0000000000..b0e71c7644 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_057.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_058.pal b/sa1/graphics/obj_palettes/pal_058.pal new file mode 100644 index 0000000000..732a7563db --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_058.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 74 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_059.pal b/sa1/graphics/obj_palettes/pal_059.pal new file mode 100644 index 0000000000..0df7207872 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_059.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 74 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_060.pal b/sa1/graphics/obj_palettes/pal_060.pal new file mode 100644 index 0000000000..d4ca415b50 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_060.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 156 +255 115 0 +222 32 0 +156 16 0 +98 0 0 +222 197 255 +205 148 255 +148 98 255 +90 32 255 +0 0 0 +8 41 205 +57 131 255 +98 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_061.pal b/sa1/graphics/obj_palettes/pal_061.pal new file mode 100644 index 0000000000..ea0407684b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_061.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_062.pal b/sa1/graphics/obj_palettes/pal_062.pal new file mode 100644 index 0000000000..ea0407684b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_062.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_063.pal b/sa1/graphics/obj_palettes/pal_063.pal new file mode 100644 index 0000000000..d4ca415b50 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_063.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 156 +255 115 0 +222 32 0 +156 16 0 +98 0 0 +222 197 255 +205 148 255 +148 98 255 +90 32 255 +0 0 0 +8 41 205 +57 131 255 +98 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_064.pal b/sa1/graphics/obj_palettes/pal_064.pal new file mode 100644 index 0000000000..ea0407684b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_064.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_065.pal b/sa1/graphics/obj_palettes/pal_065.pal new file mode 100644 index 0000000000..1311035ec0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_065.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 213 0 +255 156 0 +238 49 0 +148 49 0 +98 24 0 +41 16 0 +65 16 0 +131 123 139 diff --git a/sa1/graphics/obj_palettes/pal_066.pal b/sa1/graphics/obj_palettes/pal_066.pal new file mode 100644 index 0000000000..1311035ec0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_066.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +238 255 255 +238 255 255 +205 246 230 +189 222 197 +164 189 180 +148 164 139 +82 74 90 +255 213 0 +255 156 0 +238 49 0 +148 49 0 +98 24 0 +41 16 0 +65 16 0 +131 123 139 diff --git a/sa1/graphics/obj_palettes/pal_067.pal b/sa1/graphics/obj_palettes/pal_067.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_067.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_068.pal b/sa1/graphics/obj_palettes/pal_068.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_068.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_069.pal b/sa1/graphics/obj_palettes/pal_069.pal new file mode 100644 index 0000000000..1f23dfc590 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_069.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +222 197 255 +205 148 255 +148 98 255 +90 32 255 +0 0 0 +16 90 213 +8 156 255 +32 189 255 +115 222 255 +205 238 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_070.pal b/sa1/graphics/obj_palettes/pal_070.pal new file mode 100644 index 0000000000..2de0fd179e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_070.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 106 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 +255 255 115 +246 205 82 +230 156 65 +189 123 74 +148 90 90 +90 0 90 +255 230 156 +180 164 131 +106 98 106 +82 57 57 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_071.pal b/sa1/graphics/obj_palettes/pal_071.pal new file mode 100644 index 0000000000..cea50be06f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_071.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 123 213 +255 57 0 +213 32 0 +164 16 0 +123 0 0 +255 255 255 +197 197 189 +131 131 131 +65 65 65 +57 164 255 +65 123 222 +65 82 172 +57 65 131 +255 205 0 +255 172 0 +246 115 0 diff --git a/sa1/graphics/obj_palettes/pal_072.pal b/sa1/graphics/obj_palettes/pal_072.pal new file mode 100644 index 0000000000..b0e71c7644 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_072.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_073.pal b/sa1/graphics/obj_palettes/pal_073.pal new file mode 100644 index 0000000000..bb378df5b8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_073.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 222 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_074.pal b/sa1/graphics/obj_palettes/pal_074.pal new file mode 100644 index 0000000000..d4ca415b50 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_074.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 156 +255 115 0 +222 32 0 +156 16 0 +98 0 0 +222 197 255 +205 148 255 +148 98 255 +90 32 255 +0 0 0 +8 41 205 +57 131 255 +98 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_075.pal b/sa1/graphics/obj_palettes/pal_075.pal new file mode 100644 index 0000000000..4fcdcd2162 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_075.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +255 255 255 +205 205 205 +156 156 156 +98 98 98 +49 49 49 +0 0 0 +230 255 230 +180 222 205 +164 197 205 +106 156 156 +57 98 98 +255 230 115 +213 180 0 +205 139 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_076.pal b/sa1/graphics/obj_palettes/pal_076.pal new file mode 100644 index 0000000000..4c2ee15993 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_076.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 222 +32 115 238 +0 222 255 +189 115 0 +0 49 172 +32 16 16 +255 255 255 +65 65 65 +255 98 82 +222 32 0 +115 16 0 +255 238 0 +255 189 0 +205 205 205 +156 156 156 +98 98 98 diff --git a/sa1/graphics/obj_palettes/pal_077.pal b/sa1/graphics/obj_palettes/pal_077.pal new file mode 100644 index 0000000000..b301a0776d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_077.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 123 0 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_078.pal b/sa1/graphics/obj_palettes/pal_078.pal new file mode 100644 index 0000000000..ea0407684b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_078.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_079.pal b/sa1/graphics/obj_palettes/pal_079.pal new file mode 100644 index 0000000000..aa3b1ee00a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_079.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_080.pal b/sa1/graphics/obj_palettes/pal_080.pal new file mode 100644 index 0000000000..ceb743d1df --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_080.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +172 213 255 +74 180 255 +32 148 213 +0 98 172 +0 41 82 +255 255 255 +197 205 222 +148 172 189 +115 139 156 +82 98 123 +0 41 65 +255 189 255 +255 0 255 +189 0 131 +115 0 57 diff --git a/sa1/graphics/obj_palettes/pal_081.pal b/sa1/graphics/obj_palettes/pal_081.pal new file mode 100644 index 0000000000..ceb743d1df --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_081.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +172 213 255 +74 180 255 +32 148 213 +0 98 172 +0 41 82 +255 255 255 +197 205 222 +148 172 189 +115 139 156 +82 98 123 +0 41 65 +255 189 255 +255 0 255 +189 0 131 +115 0 57 diff --git a/sa1/graphics/obj_palettes/pal_082.pal b/sa1/graphics/obj_palettes/pal_082.pal new file mode 100644 index 0000000000..4f8b67cebf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_082.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 197 32 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_083.pal b/sa1/graphics/obj_palettes/pal_083.pal new file mode 100644 index 0000000000..4f8b67cebf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_083.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 197 32 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_084.pal b/sa1/graphics/obj_palettes/pal_084.pal new file mode 100644 index 0000000000..b0e71c7644 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_084.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +230 255 139 +180 222 115 +123 180 90 +90 123 65 +57 74 41 +255 246 213 +222 205 164 +180 164 131 +139 131 115 +106 98 90 +65 65 65 +255 230 74 +255 180 0 +205 115 0 +148 90 24 diff --git a/sa1/graphics/obj_palettes/pal_085.pal b/sa1/graphics/obj_palettes/pal_085.pal new file mode 100644 index 0000000000..ea0407684b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_085.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_086.pal b/sa1/graphics/obj_palettes/pal_086.pal new file mode 100644 index 0000000000..83c564bbdf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_086.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 156 +172 213 255 +74 180 255 +32 148 213 +0 98 172 +0 41 82 +255 255 255 +197 205 222 +148 172 189 +115 139 156 +82 98 123 +0 41 65 +255 189 255 +255 0 255 +189 0 131 +115 0 57 diff --git a/sa1/graphics/obj_palettes/pal_087.pal b/sa1/graphics/obj_palettes/pal_087.pal new file mode 100644 index 0000000000..4fcdcd2162 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_087.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +255 255 255 +205 205 205 +156 156 156 +98 98 98 +49 49 49 +0 0 0 +230 255 230 +180 222 205 +164 197 205 +106 156 156 +57 98 98 +255 230 115 +213 180 0 +205 139 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_088.pal b/sa1/graphics/obj_palettes/pal_088.pal new file mode 100644 index 0000000000..1ea93db52e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_088.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +205 205 205 +0 32 238 +0 115 255 +0 16 156 +0 172 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +32 32 32 +255 255 255 +115 115 115 +0 189 255 diff --git a/sa1/graphics/obj_palettes/pal_089.pal b/sa1/graphics/obj_palettes/pal_089.pal new file mode 100644 index 0000000000..b801d76937 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_089.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 222 +32 65 255 +0 156 255 +189 115 0 +0 49 172 +32 16 16 +255 255 255 +65 65 65 +255 98 82 +222 32 0 +115 16 0 +255 238 0 +255 205 0 +172 172 172 +139 139 139 +98 98 98 diff --git a/sa1/graphics/obj_palettes/pal_090.pal b/sa1/graphics/obj_palettes/pal_090.pal new file mode 100644 index 0000000000..9e2eac3e1f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_090.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 222 +32 16 16 +255 255 255 +172 205 222 +255 255 0 +255 255 156 +238 156 0 +172 98 0 +115 65 0 +255 172 65 +172 0 0 +255 32 32 +49 49 49 +115 115 115 +65 65 115 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_091.pal b/sa1/graphics/obj_palettes/pal_091.pal new file mode 100644 index 0000000000..a9d4784851 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_091.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 49 0 +32 65 255 +255 255 156 +32 139 255 +189 115 0 +32 16 16 +255 255 255 +65 65 65 +255 205 98 +238 156 16 +115 65 0 +255 238 0 +255 205 0 +172 172 172 +139 139 139 +98 98 98 diff --git a/sa1/graphics/obj_palettes/pal_092.pal b/sa1/graphics/obj_palettes/pal_092.pal new file mode 100644 index 0000000000..ee5d05d2ce --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_092.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 82 +0 49 222 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +255 255 255 +255 49 0 +16 82 189 +156 16 16 +255 255 0 +222 172 0 +189 189 189 +156 156 156 +98 98 98 +65 65 65 diff --git a/sa1/graphics/obj_palettes/pal_093.pal b/sa1/graphics/obj_palettes/pal_093.pal new file mode 100644 index 0000000000..249e8f4e3a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_093.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 82 +222 49 0 +255 115 0 +255 172 0 +156 0 0 +32 16 16 +255 255 255 +255 49 0 +16 82 189 +156 16 16 +255 255 0 +222 172 0 +189 189 189 +156 156 156 +98 98 98 +65 65 65 diff --git a/sa1/graphics/obj_palettes/pal_094.pal b/sa1/graphics/obj_palettes/pal_094.pal new file mode 100644 index 0000000000..7b53f94b88 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_094.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 82 +0 49 222 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +255 255 255 +172 65 0 +16 82 189 +222 115 0 +255 255 0 +255 172 0 +205 222 238 +156 172 189 +98 115 139 +49 65 82 diff --git a/sa1/graphics/obj_palettes/pal_095.pal b/sa1/graphics/obj_palettes/pal_095.pal new file mode 100644 index 0000000000..f5d463048d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_095.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 82 +0 49 222 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +238 238 255 +172 65 0 +16 82 189 +222 115 0 +255 255 0 +255 172 0 +189 205 238 +156 172 189 +98 115 139 +49 65 82 diff --git a/sa1/graphics/obj_palettes/pal_096.pal b/sa1/graphics/obj_palettes/pal_096.pal new file mode 100644 index 0000000000..81b4abc125 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_096.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 41 123 +32 16 16 +255 255 255 +172 205 222 +255 255 0 +255 255 156 +238 156 0 +172 98 0 +115 65 0 +255 172 65 +172 0 0 +255 32 32 +49 49 49 +115 115 115 +65 65 115 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_097.pal b/sa1/graphics/obj_palettes/pal_097.pal new file mode 100644 index 0000000000..64a5751b8d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_097.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 222 +172 205 255 +205 222 255 +222 238 255 +238 255 255 +255 255 255 +0 32 205 +49 98 255 +49 139 255 +98 156 255 +139 156 255 +172 205 255 +205 238 255 +255 205 0 +0 0 0 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_098.pal b/sa1/graphics/obj_palettes/pal_098.pal new file mode 100644 index 0000000000..22b43233a6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_098.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +180 180 180 +189 0 65 +255 32 156 +115 0 49 +0 189 255 +255 255 156 +255 255 0 +156 82 0 +255 172 82 +189 82 16 +255 189 0 +32 32 32 +255 255 255 +115 115 115 +255 156 255 diff --git a/sa1/graphics/obj_palettes/pal_099.pal b/sa1/graphics/obj_palettes/pal_099.pal new file mode 100644 index 0000000000..17910c6b28 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_099.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +197 197 197 +106 106 148 +139 172 197 +65 65 82 +255 32 0 +255 255 156 +255 255 0 +156 82 0 +255 172 82 +189 82 16 +255 189 0 +32 32 32 +255 255 255 +115 115 115 +230 230 230 diff --git a/sa1/graphics/obj_palettes/pal_100.pal b/sa1/graphics/obj_palettes/pal_100.pal new file mode 100644 index 0000000000..a7c287616c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_100.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +180 180 180 +106 106 148 +139 172 197 +65 65 82 +255 32 0 +255 255 156 +255 255 0 +156 82 0 +255 172 82 +189 82 16 +255 189 0 +32 32 32 +255 255 255 +115 115 115 +230 230 230 diff --git a/sa1/graphics/obj_palettes/pal_101.pal b/sa1/graphics/obj_palettes/pal_101.pal new file mode 100644 index 0000000000..5396848b2a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_101.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_102.pal b/sa1/graphics/obj_palettes/pal_102.pal new file mode 100644 index 0000000000..acd4094a73 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_102.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 82 +0 49 222 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +238 238 255 +115 0 0 +16 82 189 +172 0 0 +255 49 0 +222 49 0 +189 205 238 +156 172 189 +98 115 139 +49 65 82 diff --git a/sa1/graphics/obj_palettes/pal_103.pal b/sa1/graphics/obj_palettes/pal_103.pal new file mode 100644 index 0000000000..7421ce4b50 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_103.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 205 255 +32 16 16 +255 255 255 +172 205 222 +255 255 0 +255 255 156 +238 156 0 +172 98 0 +115 65 0 +255 172 65 +172 0 0 +255 32 32 +49 49 49 +115 115 115 +65 65 115 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_104.pal b/sa1/graphics/obj_palettes/pal_104.pal new file mode 100644 index 0000000000..9169926188 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_104.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 115 +0 49 222 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +255 255 255 +139 65 0 +49 82 49 +222 115 0 +255 255 0 +255 189 0 +205 255 255 +156 222 205 +98 189 156 +65 115 98 diff --git a/sa1/graphics/obj_palettes/pal_105.pal b/sa1/graphics/obj_palettes/pal_105.pal new file mode 100644 index 0000000000..caaab0a841 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_105.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 49 +255 255 255 +238 238 238 +205 205 205 +172 172 189 +115 115 156 +65 82 115 +32 49 98 +0 0 0 +238 65 16 +172 49 0 +115 16 0 +255 139 0 +255 205 0 +0 82 255 +0 205 255 diff --git a/sa1/graphics/obj_palettes/pal_106.pal b/sa1/graphics/obj_palettes/pal_106.pal new file mode 100644 index 0000000000..c739b64898 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_106.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 49 +255 255 255 +189 222 255 +115 172 255 +49 115 255 +49 82 205 +49 49 156 +49 16 98 +0 0 0 +238 65 16 +172 49 0 +115 16 0 +255 139 0 +255 205 0 +139 255 255 +0 238 255 diff --git a/sa1/graphics/obj_palettes/pal_107.pal b/sa1/graphics/obj_palettes/pal_107.pal new file mode 100644 index 0000000000..2623d56edf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_107.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 49 +230 238 246 +205 213 213 +180 180 189 +156 156 156 +131 131 131 +106 98 98 +82 74 74 +57 41 49 +255 255 255 +222 222 222 +172 172 172 +115 115 115 +82 82 82 +32 32 32 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_108.pal b/sa1/graphics/obj_palettes/pal_108.pal new file mode 100644 index 0000000000..226567d21b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_108.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 222 +255 156 0 +255 189 65 +205 115 0 +255 98 0 +32 16 16 +255 255 255 +65 65 65 +238 0 0 +172 32 0 +98 16 0 +255 238 115 +255 205 0 +205 205 205 +156 156 156 +98 98 98 diff --git a/sa1/graphics/obj_palettes/pal_109.pal b/sa1/graphics/obj_palettes/pal_109.pal new file mode 100644 index 0000000000..4e8ece6345 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_109.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 82 +0 98 255 +0 189 255 +172 115 0 +255 49 16 +32 16 16 +255 255 255 +238 156 82 +222 222 222 +189 49 0 +255 255 0 +222 172 0 +189 189 189 +156 156 156 +98 98 98 +65 65 65 diff --git a/sa1/graphics/obj_palettes/pal_110.pal b/sa1/graphics/obj_palettes/pal_110.pal new file mode 100644 index 0000000000..7e32bd5514 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_110.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 82 +82 32 16 +222 98 16 +172 115 0 +139 49 16 +32 16 16 +255 255 255 +238 156 82 +222 222 222 +172 65 16 +172 49 0 +255 156 0 +189 189 189 +156 156 156 +98 98 98 +65 65 65 diff --git a/sa1/graphics/obj_palettes/pal_111.pal b/sa1/graphics/obj_palettes/pal_111.pal new file mode 100644 index 0000000000..da09d2a5a2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_111.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 115 +0 49 222 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +255 255 255 +139 65 0 +49 49 49 +222 115 0 +255 255 0 +255 189 0 +205 238 222 +156 205 189 +98 139 139 +65 82 98 diff --git a/sa1/graphics/obj_palettes/pal_112.pal b/sa1/graphics/obj_palettes/pal_112.pal new file mode 100644 index 0000000000..eb56636ca9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_112.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 115 +255 255 255 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +222 255 255 +164 189 205 +98 115 156 +74 98 98 +49 82 49 +255 115 32 +222 65 0 +189 32 0 +115 32 0 +82 32 0 diff --git a/sa1/graphics/obj_palettes/pal_113.pal b/sa1/graphics/obj_palettes/pal_113.pal new file mode 100644 index 0000000000..e95a9aa75b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_113.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 115 +255 255 255 +49 115 255 +32 205 255 +0 16 156 +32 16 16 +222 255 255 +172 189 205 +98 115 156 +65 98 98 +49 82 49 +255 115 32 +222 65 0 +189 32 0 +115 32 0 +82 32 0 diff --git a/sa1/graphics/obj_palettes/pal_114.pal b/sa1/graphics/obj_palettes/pal_114.pal new file mode 100644 index 0000000000..3d30f616b9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_114.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 123 0 +32 65 255 +0 156 255 +189 115 0 +0 49 172 +32 16 16 +255 255 255 +65 65 65 +255 98 82 +222 32 0 +115 16 0 +255 255 0 +255 205 0 +189 189 189 +139 139 139 +98 98 98 diff --git a/sa1/graphics/obj_palettes/pal_115.pal b/sa1/graphics/obj_palettes/pal_115.pal new file mode 100644 index 0000000000..4fcdcd2162 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_115.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +255 255 255 +205 205 205 +156 156 156 +98 98 98 +49 49 49 +0 0 0 +230 255 230 +180 222 205 +164 197 205 +106 156 156 +57 98 98 +255 230 115 +213 180 0 +205 139 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_116.pal b/sa1/graphics/obj_palettes/pal_116.pal new file mode 100644 index 0000000000..fbfe086f64 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_116.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +16 180 139 +0 0 0 +197 197 197 +255 255 255 +123 246 255 +0 222 246 +24 172 238 +57 65 230 +246 164 189 +255 106 180 +172 0 82 +148 65 24 +255 148 0 +255 246 0 +0 148 41 +0 230 0 diff --git a/sa1/graphics/obj_palettes/pal_117.pal b/sa1/graphics/obj_palettes/pal_117.pal new file mode 100644 index 0000000000..a9450dce2d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_117.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 205 0 +115 115 115 +255 255 255 +172 49 0 +255 139 82 +255 65 0 +222 49 0 +255 255 0 +189 255 65 +98 139 255 +82 32 238 +238 156 0 +0 0 0 +189 189 189 +0 0 172 +49 205 255 diff --git a/sa1/graphics/obj_palettes/pal_118.pal b/sa1/graphics/obj_palettes/pal_118.pal new file mode 100644 index 0000000000..0cb8f2aec4 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_118.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +106 0 0 +156 0 0 +205 0 0 +255 57 0 +255 172 164 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_119.pal b/sa1/graphics/obj_palettes/pal_119.pal new file mode 100644 index 0000000000..5a32d70634 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_119.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +0 0 205 +0 49 222 +0 90 230 +0 139 255 +0 222 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_120.pal b/sa1/graphics/obj_palettes/pal_120.pal new file mode 100644 index 0000000000..78e70718fc --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_120.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +106 74 0 +156 115 0 +205 156 0 +255 205 0 +255 255 98 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_121.pal b/sa1/graphics/obj_palettes/pal_121.pal new file mode 100644 index 0000000000..9e3d8f8131 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_121.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +0 98 0 +0 139 0 +0 180 0 +0 222 0 +123 238 123 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_122.pal b/sa1/graphics/obj_palettes/pal_122.pal new file mode 100644 index 0000000000..580d50056c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_122.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +65 90 98 +115 123 131 +148 156 164 +189 189 189 +230 230 230 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_123.pal b/sa1/graphics/obj_palettes/pal_123.pal new file mode 100644 index 0000000000..4ca20aeeee --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_123.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +0 98 197 +0 139 222 +0 172 238 +0 213 255 +123 238 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_124.pal b/sa1/graphics/obj_palettes/pal_124.pal new file mode 100644 index 0000000000..5c9f6beaf6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_124.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +98 0 106 +148 0 156 +197 0 205 +255 0 255 +255 189 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_125.pal b/sa1/graphics/obj_palettes/pal_125.pal new file mode 100644 index 0000000000..3e2505ea18 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_125.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +0 0 0 +32 65 0 +16 24 16 +98 189 0 +255 255 255 +213 213 213 +246 246 246 +57 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_126.pal b/sa1/graphics/obj_palettes/pal_126.pal new file mode 100644 index 0000000000..91cd39757c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_126.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +238 238 238 +205 205 205 +189 189 189 +156 156 156 +139 139 139 +98 98 98 +82 82 82 +82 82 82 +65 65 65 +49 49 49 +32 32 32 +16 16 16 +0 0 0 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_127.pal b/sa1/graphics/obj_palettes/pal_127.pal new file mode 100644 index 0000000000..3fccef67a2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_127.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +0 0 0 +0 65 238 +0 0 189 +0 0 98 +255 24 16 +180 0 0 +255 255 148 +255 172 65 +238 139 8 +255 255 255 +205 205 205 +156 156 156 +123 106 90 +74 82 74 +0 172 0 diff --git a/sa1/graphics/obj_palettes/pal_128.pal b/sa1/graphics/obj_palettes/pal_128.pal new file mode 100644 index 0000000000..c9f2daad83 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_128.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +0 0 0 +255 0 0 +180 0 0 +255 189 32 +255 164 57 +246 139 0 +238 115 16 +189 82 8 +255 255 255 +238 238 222 +213 213 197 +180 172 172 +148 139 139 +90 82 74 +0 213 255 diff --git a/sa1/graphics/obj_palettes/pal_129.pal b/sa1/graphics/obj_palettes/pal_129.pal new file mode 100644 index 0000000000..9f78fbaa27 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_129.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +0 0 0 +115 0 0 +180 0 0 +255 0 0 +255 115 82 +255 172 106 +255 246 148 +0 115 0 +0 189 8 +82 82 82 +115 115 115 +156 156 156 +205 205 205 +255 255 255 +0 164 255 diff --git a/sa1/graphics/obj_palettes/pal_130.pal b/sa1/graphics/obj_palettes/pal_130.pal new file mode 100644 index 0000000000..a74f036675 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_130.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +0 0 0 +255 0 0 +172 0 0 +255 148 189 +238 90 156 +246 230 0 +255 164 16 +246 123 8 +172 65 32 +255 255 255 +255 238 213 +238 197 189 +164 156 148 +90 82 74 +0 172 49 diff --git a/sa1/graphics/obj_palettes/pal_131.pal b/sa1/graphics/obj_palettes/pal_131.pal new file mode 100644 index 0000000000..b0fb36d2dd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_131.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 213 0 +238 156 0 +246 172 32 +246 189 74 +246 205 115 +255 222 156 +255 230 189 +255 246 222 +255 255 255 +0 0 0 +0 0 49 +0 0 32 +255 172 82 +255 131 65 +255 172 82 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_132.pal b/sa1/graphics/obj_palettes/pal_132.pal new file mode 100644 index 0000000000..69d7a1f464 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_132.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 213 0 +238 156 0 +246 172 32 +246 189 74 +246 205 115 +255 222 156 +255 230 189 +255 246 222 +255 255 255 +0 0 0 +0 0 49 +0 0 49 +0 213 0 +238 156 0 +246 172 32 +246 189 74 diff --git a/sa1/graphics/obj_palettes/pal_133.pal b/sa1/graphics/obj_palettes/pal_133.pal new file mode 100644 index 0000000000..3cb289377b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_133.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 213 0 +238 156 0 +246 172 32 +246 189 74 +246 205 115 +255 222 156 +255 230 189 +255 246 222 +255 255 255 +0 0 0 +0 0 49 +0 0 32 +255 0 213 +255 131 65 +255 0 213 +139 139 139 diff --git a/sa1/graphics/obj_palettes/pal_134.pal b/sa1/graphics/obj_palettes/pal_134.pal new file mode 100644 index 0000000000..235a7eef3f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_134.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 156 0 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +213 123 0 +238 139 0 +82 49 0 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_135.pal b/sa1/graphics/obj_palettes/pal_135.pal new file mode 100644 index 0000000000..c606a19fb6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_135.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +98 98 98 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_136.pal b/sa1/graphics/obj_palettes/pal_136.pal new file mode 100644 index 0000000000..71f2c4e4db --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_136.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 41 197 +238 230 172 +246 115 172 +197 0 82 +246 255 106 +131 197 24 +65 131 16 +106 246 255 +172 230 255 +115 213 255 +16 180 255 +197 189 131 +222 172 98 +148 106 41 +255 255 255 +65 82 32 diff --git a/sa1/graphics/obj_palettes/pal_137.pal b/sa1/graphics/obj_palettes/pal_137.pal new file mode 100644 index 0000000000..334c7b72e0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_137.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 41 197 +255 255 205 +156 156 156 +115 115 123 +255 255 0 +255 205 106 +255 172 0 +205 115 0 +213 57 41 +255 0 8 +139 41 0 +189 180 106 +131 156 90 +131 106 65 +82 82 49 +24 24 24 diff --git a/sa1/graphics/obj_palettes/pal_138.pal b/sa1/graphics/obj_palettes/pal_138.pal new file mode 100644 index 0000000000..341a70a9c5 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_138.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 41 197 +255 255 255 +189 189 164 +123 139 49 +255 238 0 +255 148 0 +246 74 41 +197 32 0 +131 16 0 +57 98 24 +106 90 148 +90 65 115 +115 222 222 +16 164 172 +16 115 139 +57 24 98 diff --git a/sa1/graphics/obj_palettes/pal_139.pal b/sa1/graphics/obj_palettes/pal_139.pal new file mode 100644 index 0000000000..02662b1017 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_139.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 41 197 +0 0 0 +24 65 106 +32 98 148 +49 123 189 +82 156 205 +115 180 213 +156 213 230 +197 238 246 +90 90 65 +123 123 106 +148 148 139 +172 172 156 +197 197 180 +230 230 205 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_140.pal b/sa1/graphics/obj_palettes/pal_140.pal new file mode 100644 index 0000000000..cdef36594d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_140.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 41 197 +255 255 255 +230 238 246 +205 230 238 +172 213 230 +172 189 197 +123 197 230 +123 156 189 +90 172 222 +57 156 213 +24 131 205 +0 74 189 +0 32 123 +0 0 0 +255 32 16 +255 32 16 diff --git a/sa1/graphics/obj_palettes/pal_141.pal b/sa1/graphics/obj_palettes/pal_141.pal new file mode 100644 index 0000000000..ba5657bed4 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_141.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +255 255 255 +189 238 255 +115 222 255 +49 205 255 +32 164 255 +24 106 238 +16 41 189 +0 0 0 +255 255 0 +189 238 115 +0 189 156 +0 172 0 +123 222 131 +57 205 139 +0 123 0 diff --git a/sa1/graphics/obj_palettes/pal_142.pal b/sa1/graphics/obj_palettes/pal_142.pal new file mode 100644 index 0000000000..7a41d46fa2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_142.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +0 0 0 +82 57 32 +106 82 49 +123 98 57 +139 115 65 +156 123 74 +172 139 82 +180 156 98 +189 164 123 +197 180 139 +213 197 164 +222 205 180 +230 222 197 +238 230 222 +246 246 238 diff --git a/sa1/graphics/obj_palettes/pal_143.pal b/sa1/graphics/obj_palettes/pal_143.pal new file mode 100644 index 0000000000..16f11baee3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_143.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 180 156 +0 0 0 +82 57 32 +123 98 57 +156 123 74 +180 156 98 +197 180 139 +222 205 180 +172 139 82 +197 180 139 +222 205 180 +189 164 123 +230 222 197 +255 255 255 +230 222 197 +82 57 32 diff --git a/sa1/graphics/obj_palettes/pal_144.pal b/sa1/graphics/obj_palettes/pal_144.pal new file mode 100644 index 0000000000..15499622ea --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_144.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 180 156 +0 0 0 +156 0 0 +205 0 0 +255 0 0 +255 131 0 +255 189 0 +255 255 0 +238 139 74 +255 180 90 +255 222 148 +172 172 172 +222 222 222 +255 255 255 +255 255 156 +65 65 65 diff --git a/sa1/graphics/obj_palettes/pal_145.pal b/sa1/graphics/obj_palettes/pal_145.pal new file mode 100644 index 0000000000..96d2ceb759 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_145.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 255 255 +205 205 205 +164 164 164 +115 115 115 +65 65 65 +16 16 16 +255 32 0 +189 0 0 +115 0 0 +255 238 0 +255 180 24 +246 123 16 +0 255 255 +65 213 222 +0 156 148 diff --git a/sa1/graphics/obj_palettes/pal_146.pal b/sa1/graphics/obj_palettes/pal_146.pal new file mode 100644 index 0000000000..7eef2df16a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_146.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 197 180 +0 0 0 +0 197 255 +0 156 255 +0 115 255 +0 90 255 +0 65 246 +0 41 238 +0 0 230 +0 0 172 +0 0 98 +0 255 0 +0 213 0 +0 180 0 +0 148 0 +0 98 0 diff --git a/sa1/graphics/obj_palettes/pal_147.pal b/sa1/graphics/obj_palettes/pal_147.pal new file mode 100644 index 0000000000..a6e0d848dd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_147.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +246 238 238 +222 222 230 +222 213 213 +205 189 197 +189 180 189 +180 164 172 +156 139 148 +115 115 115 +82 82 82 +90 82 74 +0 255 255 +65 222 230 +41 197 205 +0 164 156 +0 106 106 diff --git a/sa1/graphics/obj_palettes/pal_148.pal b/sa1/graphics/obj_palettes/pal_148.pal new file mode 100644 index 0000000000..d72ba444f3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_148.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 164 +255 230 148 +255 180 82 +238 164 41 +230 148 16 +164 82 16 +255 238 213 +255 205 164 +255 172 98 +246 115 16 +230 90 0 +189 57 0 +255 205 230 +255 156 197 +255 123 180 +246 98 164 diff --git a/sa1/graphics/obj_palettes/pal_149.pal b/sa1/graphics/obj_palettes/pal_149.pal new file mode 100644 index 0000000000..c4974d7d06 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_149.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +238 65 123 +213 49 90 +164 0 41 +255 246 0 +255 197 32 +255 197 0 +255 172 32 +255 148 0 +197 82 16 +164 16 0 +255 172 123 +255 123 106 +255 90 74 +255 24 24 +255 0 0 +238 0 0 diff --git a/sa1/graphics/obj_palettes/pal_150.pal b/sa1/graphics/obj_palettes/pal_150.pal new file mode 100644 index 0000000000..24c457733b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_150.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 0 0 +197 0 0 +164 0 0 +139 16 0 +106 0 0 +255 255 255 +238 255 255 +238 246 255 +238 246 255 +222 246 255 +213 230 246 +197 213 238 +189 213 246 +189 213 230 +172 197 230 +180 197 246 diff --git a/sa1/graphics/obj_palettes/pal_151.pal b/sa1/graphics/obj_palettes/pal_151.pal new file mode 100644 index 0000000000..83906d38ff --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_151.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +123 172 246 +98 139 238 +74 123 230 +57 106 222 +57 90 230 +41 98 213 +32 90 230 +24 74 230 +24 57 222 +156 197 246 +156 180 222 +139 164 222 +106 148 205 +82 115 213 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_152.pal b/sa1/graphics/obj_palettes/pal_152.pal new file mode 100644 index 0000000000..96d2ceb759 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_152.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 255 255 +205 205 205 +164 164 164 +115 115 115 +65 65 65 +16 16 16 +255 32 0 +189 0 0 +115 0 0 +255 238 0 +255 180 24 +246 123 16 +0 255 255 +65 213 222 +0 156 148 diff --git a/sa1/graphics/obj_palettes/pal_153.pal b/sa1/graphics/obj_palettes/pal_153.pal new file mode 100644 index 0000000000..f0487bd289 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_153.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +180 180 180 +0 32 156 +0 65 238 +0 0 98 +0 156 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +32 32 32 +255 255 255 +115 115 115 +0 156 255 diff --git a/sa1/graphics/obj_palettes/pal_154.pal b/sa1/graphics/obj_palettes/pal_154.pal new file mode 100644 index 0000000000..bbc5eaad63 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_154.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 0 255 +238 139 32 +255 189 32 +189 82 16 +172 205 222 +0 156 255 +32 65 255 +156 156 156 +115 115 115 +172 0 0 +255 32 32 +0 0 0 +255 255 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/obj_palettes/pal_155.pal b/sa1/graphics/obj_palettes/pal_155.pal new file mode 100644 index 0000000000..1c6c88849c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_155.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 164 +180 180 180 +189 0 0 +255 32 0 +115 0 0 +32 65 255 +255 255 156 +255 222 0 +156 82 0 +255 172 82 +0 172 16 +115 255 0 +32 32 32 +255 255 255 +115 115 115 +255 156 0 diff --git a/sa1/graphics/obj_palettes/pal_156.pal b/sa1/graphics/obj_palettes/pal_156.pal new file mode 100644 index 0000000000..481a489b92 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_156.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +172 205 222 +238 65 156 +255 156 189 +189 32 82 +0 172 0 +115 115 115 +156 156 156 +156 82 0 +255 172 82 +172 0 0 +255 0 0 +0 0 0 +255 255 255 +255 255 156 +255 255 0 diff --git a/sa1/graphics/obj_palettes/pal_157.pal b/sa1/graphics/obj_palettes/pal_157.pal new file mode 100644 index 0000000000..a8c1f470e5 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_157.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +57 180 90 +255 255 255 +230 238 246 +205 230 238 +172 213 230 +123 197 230 +90 172 222 +57 156 213 +24 131 205 +0 74 189 +0 32 123 +24 131 205 +16 115 205 +0 106 213 +255 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_158.pal b/sa1/graphics/obj_palettes/pal_158.pal new file mode 100644 index 0000000000..3aad20e634 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_158.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +57 180 90 +57 180 255 +32 164 255 +24 148 246 +16 131 238 +8 123 222 +0 106 213 +238 0 0 +238 0 0 +255 255 255 +205 238 255 +156 205 246 +106 180 238 +24 148 230 +24 82 164 +0 32 123 diff --git a/sa1/graphics/obj_palettes/pal_159.pal b/sa1/graphics/obj_palettes/pal_159.pal new file mode 100644 index 0000000000..de1baab956 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_159.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 255 255 +205 205 205 +139 156 156 +98 98 98 +0 0 0 +238 0 0 +205 65 0 +156 49 0 +255 115 0 +255 222 0 +189 115 238 +115 82 189 +65 49 139 +16 32 65 +255 115 156 diff --git a/sa1/graphics/obj_palettes/pal_160.pal b/sa1/graphics/obj_palettes/pal_160.pal new file mode 100644 index 0000000000..43ce8e4ea8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_160.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 98 65 +255 255 255 +189 238 255 +115 222 255 +49 205 255 +32 164 255 +24 106 238 +16 41 189 +0 0 0 +255 255 0 +189 238 115 +0 189 156 +0 172 0 +123 222 131 +57 205 139 +0 123 0 diff --git a/sa1/graphics/obj_palettes/pal_161.pal b/sa1/graphics/obj_palettes/pal_161.pal new file mode 100644 index 0000000000..4b0812f094 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_161.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_162.pal b/sa1/graphics/obj_palettes/pal_162.pal new file mode 100644 index 0000000000..0d34bab5d2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_162.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 164 123 +255 255 255 +172 197 222 +115 115 115 +32 32 32 +0 255 0 +255 246 148 +255 172 74 +238 156 0 +180 98 0 +115 65 0 +255 0 0 +172 0 0 +255 246 0 +0 180 57 +49 65 123 diff --git a/sa1/graphics/obj_palettes/pal_163.pal b/sa1/graphics/obj_palettes/pal_163.pal new file mode 100644 index 0000000000..5862f86010 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_163.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 197 197 +0 32 0 +0 82 0 +0 106 0 +0 139 0 +0 164 0 +0 197 0 +0 222 0 +49 230 49 +98 238 98 +156 246 156 +205 255 205 +255 255 255 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_164.pal b/sa1/graphics/obj_palettes/pal_164.pal new file mode 100644 index 0000000000..16a474e072 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_164.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +8 8 8 +24 24 24 +49 49 49 +57 57 57 +74 74 74 +90 90 90 +115 115 115 +139 139 139 +164 164 164 +189 189 189 +205 205 205 +222 222 222 +238 238 238 +246 246 246 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_165.pal b/sa1/graphics/obj_palettes/pal_165.pal new file mode 100644 index 0000000000..e36d775f60 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_165.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_166.pal b/sa1/graphics/obj_palettes/pal_166.pal new file mode 100644 index 0000000000..01ce4366c2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_166.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +16 82 32 +16 115 41 +24 164 49 +98 230 82 +172 74 0 +0 0 0 +0 0 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_167.pal b/sa1/graphics/obj_palettes/pal_167.pal new file mode 100644 index 0000000000..d793794490 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_167.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +164 180 156 +238 255 213 +139 139 123 +205 213 164 +180 189 82 +172 148 24 +123 115 98 +115 74 8 +41 16 0 +82 74 82 +255 255 255 +139 255 230 +123 230 255 +98 197 255 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_168.pal b/sa1/graphics/obj_palettes/pal_168.pal new file mode 100644 index 0000000000..a235c2f54a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_168.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 57 74 +49 98 98 +90 156 148 +24 41 41 +65 131 123 +123 123 106 +222 222 189 +164 164 131 +90 82 49 +238 156 0 +230 16 0 +0 74 156 +0 8 57 +255 255 255 +172 98 0 diff --git a/sa1/graphics/obj_palettes/pal_169.pal b/sa1/graphics/obj_palettes/pal_169.pal new file mode 100644 index 0000000000..93067decf6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_169.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 164 0 +255 255 255 +238 238 238 +222 222 222 +222 222 255 +189 189 255 +0 139 238 +0 98 255 +82 82 255 +0 0 255 +0 0 222 +0 0 205 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_170.pal b/sa1/graphics/obj_palettes/pal_170.pal new file mode 100644 index 0000000000..90a659a65e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_170.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 106 0 +255 57 0 +213 32 0 +156 16 0 +98 0 0 +255 255 255 +197 197 189 +131 131 131 +65 65 65 +57 164 255 +65 123 222 +65 82 172 +57 65 131 +255 255 0 +255 189 0 +246 139 0 diff --git a/sa1/graphics/obj_palettes/pal_171.pal b/sa1/graphics/obj_palettes/pal_171.pal new file mode 100644 index 0000000000..5dcf1562c0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_171.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +255 255 255 +255 156 189 +255 115 172 +255 82 148 +246 49 131 +213 8 98 +255 222 172 +255 164 0 +255 106 0 +238 0 0 +197 0 0 +255 238 172 +255 205 98 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_172.pal b/sa1/graphics/obj_palettes/pal_172.pal new file mode 100644 index 0000000000..5dcf1562c0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_172.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +255 255 255 +255 156 189 +255 115 172 +255 82 148 +246 49 131 +213 8 98 +255 222 172 +255 164 0 +255 106 0 +238 0 0 +197 0 0 +255 238 172 +255 205 98 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_173.pal b/sa1/graphics/obj_palettes/pal_173.pal new file mode 100644 index 0000000000..08680a6d2b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_173.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +0 0 0 +0 213 255 +0 131 255 +0 65 238 +0 0 222 +0 0 172 +0 0 98 +197 255 255 +0 0 0 +0 0 0 +255 255 255 +205 222 255 +255 238 189 +255 180 180 +255 213 230 diff --git a/sa1/graphics/obj_palettes/pal_174.pal b/sa1/graphics/obj_palettes/pal_174.pal new file mode 100644 index 0000000000..021749df16 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_174.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 238 0 +246 230 0 +255 222 0 +255 189 32 +238 189 41 +255 189 0 +246 189 49 +255 164 57 +255 148 0 +255 139 0 +246 139 0 +189 82 16 +156 16 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_175.pal b/sa1/graphics/obj_palettes/pal_175.pal new file mode 100644 index 0000000000..e68def3bfb --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_175.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 164 139 +255 123 106 +255 106 98 +255 24 24 +255 0 0 +230 0 0 +189 0 0 +139 0 0 +222 0 0 +180 0 0 +115 0 0 +255 230 213 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_176.pal b/sa1/graphics/obj_palettes/pal_176.pal new file mode 100644 index 0000000000..feed7b3fc3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_176.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +246 197 222 +255 148 189 +246 123 172 +246 82 139 +197 41 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_177.pal b/sa1/graphics/obj_palettes/pal_177.pal new file mode 100644 index 0000000000..7d4a85b166 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_177.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 172 +0 0 0 +255 255 255 +0 0 0 +49 49 49 +74 74 74 +98 98 98 +115 115 115 +131 131 131 +148 148 148 +156 156 156 +172 172 172 +180 180 180 +189 189 189 +205 205 205 +222 222 222 diff --git a/sa1/graphics/obj_palettes/pal_178.pal b/sa1/graphics/obj_palettes/pal_178.pal new file mode 100644 index 0000000000..c79f2e4d64 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_178.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +0 0 0 +255 156 0 +32 32 32 +49 41 24 +65 49 24 +90 65 24 +106 74 16 +123 82 16 +148 90 16 +164 106 8 +180 115 8 +197 123 8 +222 131 0 +238 148 0 +255 156 0 diff --git a/sa1/graphics/obj_palettes/pal_179.pal b/sa1/graphics/obj_palettes/pal_179.pal new file mode 100644 index 0000000000..6655025e99 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_179.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_180.pal b/sa1/graphics/obj_palettes/pal_180.pal new file mode 100644 index 0000000000..6655025e99 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_180.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_181.pal b/sa1/graphics/obj_palettes/pal_181.pal new file mode 100644 index 0000000000..296de61413 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_181.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +57 180 90 +57 180 255 +32 164 255 +24 148 246 +16 131 238 +8 123 222 +0 106 213 +238 0 0 +238 0 0 +255 255 255 +205 230 255 +156 205 255 +98 180 255 +49 156 255 +24 82 164 +0 32 123 diff --git a/sa1/graphics/obj_palettes/pal_182.pal b/sa1/graphics/obj_palettes/pal_182.pal new file mode 100644 index 0000000000..3aad20e634 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_182.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +57 180 90 +57 180 255 +32 164 255 +24 148 246 +16 131 238 +8 123 222 +0 106 213 +238 0 0 +238 0 0 +255 255 255 +205 238 255 +156 205 246 +106 180 238 +24 148 230 +24 82 164 +0 32 123 diff --git a/sa1/graphics/obj_palettes/pal_183.pal b/sa1/graphics/obj_palettes/pal_183.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_183.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_184.pal b/sa1/graphics/obj_palettes/pal_184.pal new file mode 100644 index 0000000000..3a3aef91a4 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_184.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +106 0 0 +156 0 0 +205 0 0 +255 57 0 +255 172 164 +255 255 255 +0 0 189 +0 32 222 +0 82 230 +0 139 255 +0 213 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_185.pal b/sa1/graphics/obj_palettes/pal_185.pal new file mode 100644 index 0000000000..f7df0515c5 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_185.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_186.pal b/sa1/graphics/obj_palettes/pal_186.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_186.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_187.pal b/sa1/graphics/obj_palettes/pal_187.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_187.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_188.pal b/sa1/graphics/obj_palettes/pal_188.pal new file mode 100644 index 0000000000..6655025e99 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_188.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_189.pal b/sa1/graphics/obj_palettes/pal_189.pal new file mode 100644 index 0000000000..a4e946e6c4 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_189.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 156 98 +255 255 255 +222 222 222 +189 189 189 +156 156 156 +98 98 90 +172 213 255 +82 164 255 +0 115 255 +255 189 172 +255 115 82 +255 49 0 +74 156 98 +74 156 98 +74 156 98 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_190.pal b/sa1/graphics/obj_palettes/pal_190.pal new file mode 100644 index 0000000000..01bb88c84c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_190.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +82 238 246 +74 222 246 +65 213 246 +49 205 238 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/graphics/obj_palettes/pal_191.pal b/sa1/graphics/obj_palettes/pal_191.pal new file mode 100644 index 0000000000..1885f06997 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_191.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 255 255 +164 255 255 +106 246 246 +255 255 255 +49 205 238 +41 189 238 +0 172 230 +57 230 246 +74 222 246 +65 213 246 +49 205 238 +82 238 246 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/graphics/obj_palettes/pal_192.pal b/sa1/graphics/obj_palettes/pal_192.pal new file mode 100644 index 0000000000..f80c4b4c7b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_192.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +164 255 255 +106 246 246 +255 255 255 +213 255 255 +41 189 238 +0 172 230 +57 230 246 +49 205 238 +65 213 246 +49 205 238 +82 238 246 +74 222 246 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/graphics/obj_palettes/pal_193.pal b/sa1/graphics/obj_palettes/pal_193.pal new file mode 100644 index 0000000000..dc283fafb2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_193.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +106 246 246 +255 255 255 +213 255 255 +164 255 255 +0 172 230 +57 230 246 +49 205 238 +41 189 238 +49 205 238 +82 238 246 +74 222 246 +65 213 246 +74 222 246 +65 213 246 +49 205 238 diff --git a/sa1/graphics/obj_palettes/pal_194.pal b/sa1/graphics/obj_palettes/pal_194.pal new file mode 100644 index 0000000000..5e3e1a9633 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_194.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_195.pal b/sa1/graphics/obj_palettes/pal_195.pal new file mode 100644 index 0000000000..00b76f330e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_195.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_196.pal b/sa1/graphics/obj_palettes/pal_196.pal new file mode 100644 index 0000000000..f1f704798a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_196.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +255 255 255 +213 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_197.pal b/sa1/graphics/obj_palettes/pal_197.pal new file mode 100644 index 0000000000..92c589b3b5 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_197.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +255 255 255 +213 255 255 +164 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_198.pal b/sa1/graphics/obj_palettes/pal_198.pal new file mode 100644 index 0000000000..6d7cfd65eb --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_198.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +57 230 246 +49 205 238 +41 189 238 +0 172 230 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_199.pal b/sa1/graphics/obj_palettes/pal_199.pal new file mode 100644 index 0000000000..9ea7297b96 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_199.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +49 205 238 +41 189 238 +0 172 230 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_200.pal b/sa1/graphics/obj_palettes/pal_200.pal new file mode 100644 index 0000000000..1de757398e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_200.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +41 189 238 +0 172 230 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_201.pal b/sa1/graphics/obj_palettes/pal_201.pal new file mode 100644 index 0000000000..ea09b88518 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_201.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 172 230 +255 255 255 +213 255 255 +164 255 255 +106 246 246 +57 230 246 +49 205 238 +41 189 238 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_202.pal b/sa1/graphics/obj_palettes/pal_202.pal new file mode 100644 index 0000000000..eb09e762ab --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_202.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_203.pal b/sa1/graphics/obj_palettes/pal_203.pal new file mode 100644 index 0000000000..f15e976b0d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_203.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 0 49 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +205 205 205 +205 205 0 +205 139 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_204.pal b/sa1/graphics/obj_palettes/pal_204.pal new file mode 100644 index 0000000000..b991d3c62d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_204.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 0 123 +0 0 49 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +255 255 255 +255 255 0 +255 189 16 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_205.pal b/sa1/graphics/obj_palettes/pal_205.pal new file mode 100644 index 0000000000..f6b97b1785 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_205.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 0 189 +0 0 123 +0 0 49 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +205 205 205 +205 205 0 +205 139 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_206.pal b/sa1/graphics/obj_palettes/pal_206.pal new file mode 100644 index 0000000000..41231c4f60 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_206.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +0 255 255 +0 189 255 +0 139 255 +0 90 255 +0 0 0 +0 0 0 +0 0 0 +255 255 0 +255 139 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_207.pal b/sa1/graphics/obj_palettes/pal_207.pal new file mode 100644 index 0000000000..57f345feae --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_207.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +0 255 255 +0 189 255 +0 139 255 +0 0 0 +0 0 0 +0 0 0 +205 205 0 +205 90 0 +205 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_208.pal b/sa1/graphics/obj_palettes/pal_208.pal new file mode 100644 index 0000000000..4d65e1e6e2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_208.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +0 255 255 +0 189 255 +0 0 0 +0 0 0 +0 0 0 +255 255 0 +255 139 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_209.pal b/sa1/graphics/obj_palettes/pal_209.pal new file mode 100644 index 0000000000..a767cd7930 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_209.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 189 255 +0 139 255 +0 90 255 +0 0 255 +0 0 189 +0 0 123 +0 0 49 +0 255 255 +0 0 0 +0 0 0 +0 0 0 +205 205 0 +205 90 0 +205 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_210.pal b/sa1/graphics/obj_palettes/pal_210.pal new file mode 100644 index 0000000000..0c6c138049 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_210.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +41 0 106 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 255 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 diff --git a/sa1/graphics/obj_palettes/pal_211.pal b/sa1/graphics/obj_palettes/pal_211.pal new file mode 100644 index 0000000000..5850cd3949 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_211.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +148 32 0 +255 255 255 +255 255 0 +255 98 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 diff --git a/sa1/graphics/obj_palettes/pal_212.pal b/sa1/graphics/obj_palettes/pal_212.pal new file mode 100644 index 0000000000..5922093fdf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_212.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 98 0 +148 32 0 +255 255 255 +255 255 0 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 diff --git a/sa1/graphics/obj_palettes/pal_213.pal b/sa1/graphics/obj_palettes/pal_213.pal new file mode 100644 index 0000000000..7664035610 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_213.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 57 0 +139 32 0 +74 0 0 +0 255 0 +0 172 0 +0 82 0 +255 255 0 +255 98 0 +148 32 0 +255 255 255 +255 255 255 +189 180 164 +139 131 123 +0 0 0 +0 255 255 diff --git a/sa1/graphics/obj_palettes/pal_214.pal b/sa1/graphics/obj_palettes/pal_214.pal new file mode 100644 index 0000000000..f8728cd2d6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_214.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 255 255 +189 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_215.pal b/sa1/graphics/obj_palettes/pal_215.pal new file mode 100644 index 0000000000..4fa1678e7c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_215.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 255 255 +0 172 123 +0 98 0 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +255 255 255 +189 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_216.pal b/sa1/graphics/obj_palettes/pal_216.pal new file mode 100644 index 0000000000..a0f72906b9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_216.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 0 255 +164 0 197 +74 0 139 +0 255 0 +41 172 0 +90 82 0 +255 255 255 +189 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_217.pal b/sa1/graphics/obj_palettes/pal_217.pal new file mode 100644 index 0000000000..32fd1e097a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_217.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 255 0 +41 172 0 +90 82 0 +255 255 0 +255 115 0 +148 32 0 +0 255 255 +0 172 123 +0 98 0 +255 0 255 +164 0 197 +74 0 139 +255 255 255 +189 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_218.pal b/sa1/graphics/obj_palettes/pal_218.pal new file mode 100644 index 0000000000..c211c92f98 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_218.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_219.pal b/sa1/graphics/obj_palettes/pal_219.pal new file mode 100644 index 0000000000..ae14eb65e9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_219.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +255 82 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_220.pal b/sa1/graphics/obj_palettes/pal_220.pal new file mode 100644 index 0000000000..9c830543bf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_220.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +255 82 0 +255 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_221.pal b/sa1/graphics/obj_palettes/pal_221.pal new file mode 100644 index 0000000000..b9a4df4d6e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_221.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +255 82 0 +255 0 8 +213 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_222.pal b/sa1/graphics/obj_palettes/pal_222.pal new file mode 100644 index 0000000000..7be3ce678f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_222.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +123 0 0 +172 0 0 +213 0 8 +255 0 8 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_223.pal b/sa1/graphics/obj_palettes/pal_223.pal new file mode 100644 index 0000000000..1cf78dd79b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_223.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +172 0 0 +213 0 8 +255 0 8 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_224.pal b/sa1/graphics/obj_palettes/pal_224.pal new file mode 100644 index 0000000000..983689f61e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_224.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +213 0 8 +255 0 8 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_225.pal b/sa1/graphics/obj_palettes/pal_225.pal new file mode 100644 index 0000000000..90cb9b30da --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_225.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 172 0 +255 0 8 +255 82 0 +255 0 8 +213 0 8 +172 0 0 +123 0 0 +172 0 0 +213 0 8 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 diff --git a/sa1/graphics/obj_palettes/pal_226.pal b/sa1/graphics/obj_palettes/pal_226.pal new file mode 100644 index 0000000000..91d3c5b96a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_226.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +8 205 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 255 +0 0 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_227.pal b/sa1/graphics/obj_palettes/pal_227.pal new file mode 100644 index 0000000000..7053f28a62 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_227.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 255 +0 0 255 +255 255 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_228.pal b/sa1/graphics/obj_palettes/pal_228.pal new file mode 100644 index 0000000000..856abf3b76 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_228.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 255 +0 0 255 +255 255 255 +213 222 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_229.pal b/sa1/graphics/obj_palettes/pal_229.pal new file mode 100644 index 0000000000..d8392c5b2b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_229.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +139 148 255 +106 106 255 +65 74 255 +32 32 255 +0 0 255 +255 255 255 +213 222 255 +180 180 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_230.pal b/sa1/graphics/obj_palettes/pal_230.pal new file mode 100644 index 0000000000..7aae9f2fa3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_230.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +106 106 255 +65 74 255 +32 32 255 +0 0 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_231.pal b/sa1/graphics/obj_palettes/pal_231.pal new file mode 100644 index 0000000000..16e51df0e0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_231.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 255 +32 32 255 +0 0 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_232.pal b/sa1/graphics/obj_palettes/pal_232.pal new file mode 100644 index 0000000000..b6f1b17eb0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_232.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +32 32 255 +0 0 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_233.pal b/sa1/graphics/obj_palettes/pal_233.pal new file mode 100644 index 0000000000..471708048b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_233.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 255 +255 255 255 +213 222 255 +180 180 255 +139 148 255 +106 106 255 +65 74 255 +32 32 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_234.pal b/sa1/graphics/obj_palettes/pal_234.pal new file mode 100644 index 0000000000..e102b35e86 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_234.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +8 205 255 +0 0 255 +32 32 255 +65 74 255 +106 106 255 +139 148 255 +180 180 255 +213 222 255 +255 255 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_235.pal b/sa1/graphics/obj_palettes/pal_235.pal new file mode 100644 index 0000000000..975aeb11e6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_235.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +0 0 255 +32 32 255 +65 74 255 +106 106 255 +139 148 255 +180 180 255 +213 222 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_236.pal b/sa1/graphics/obj_palettes/pal_236.pal new file mode 100644 index 0000000000..f658aebdb1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_236.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 222 255 +255 255 255 +0 0 255 +32 32 255 +65 74 255 +106 106 255 +139 148 255 +180 180 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_237.pal b/sa1/graphics/obj_palettes/pal_237.pal new file mode 100644 index 0000000000..f9390948dd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_237.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +180 180 255 +213 222 255 +255 255 255 +0 0 255 +32 32 255 +65 74 255 +106 106 255 +139 148 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_238.pal b/sa1/graphics/obj_palettes/pal_238.pal new file mode 100644 index 0000000000..e7f307b800 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_238.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +139 148 255 +180 180 255 +213 222 255 +255 255 255 +0 0 255 +32 32 255 +65 74 255 +106 106 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_239.pal b/sa1/graphics/obj_palettes/pal_239.pal new file mode 100644 index 0000000000..764adcb30f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_239.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +106 106 255 +139 148 255 +180 180 255 +213 222 255 +255 255 255 +0 0 255 +32 32 255 +65 74 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_240.pal b/sa1/graphics/obj_palettes/pal_240.pal new file mode 100644 index 0000000000..a036b89fac --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_240.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 255 +106 106 255 +139 148 255 +180 180 255 +213 222 255 +255 255 255 +0 0 255 +32 32 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_241.pal b/sa1/graphics/obj_palettes/pal_241.pal new file mode 100644 index 0000000000..0683ff9521 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_241.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +32 32 255 +65 74 255 +106 106 255 +139 148 255 +180 180 255 +213 222 255 +255 255 255 +0 0 255 +148 74 24 +131 49 8 +255 222 156 +230 180 98 +197 131 65 +148 98 32 +90 41 0 diff --git a/sa1/graphics/obj_palettes/pal_242.pal b/sa1/graphics/obj_palettes/pal_242.pal new file mode 100644 index 0000000000..0abfb1e04b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_242.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_243.pal b/sa1/graphics/obj_palettes/pal_243.pal new file mode 100644 index 0000000000..a30dcacfa1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_243.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_244.pal b/sa1/graphics/obj_palettes/pal_244.pal new file mode 100644 index 0000000000..9d9a43e675 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_244.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 246 255 +255 255 255 +172 197 255 +197 213 255 +213 230 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_245.pal b/sa1/graphics/obj_palettes/pal_245.pal new file mode 100644 index 0000000000..993c31c760 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_245.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 230 255 +238 246 255 +255 255 255 +172 197 255 +197 213 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_246.pal b/sa1/graphics/obj_palettes/pal_246.pal new file mode 100644 index 0000000000..4c55e83314 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_246.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +172 197 255 +0 0 0 +255 197 0 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_247.pal b/sa1/graphics/obj_palettes/pal_247.pal new file mode 100644 index 0000000000..11dee21215 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_247.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_248.pal b/sa1/graphics/obj_palettes/pal_248.pal new file mode 100644 index 0000000000..57026621b6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_248.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_249.pal b/sa1/graphics/obj_palettes/pal_249.pal new file mode 100644 index 0000000000..02d77b77a1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_249.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 246 255 +255 255 255 +172 197 255 +197 213 255 +213 230 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_250.pal b/sa1/graphics/obj_palettes/pal_250.pal new file mode 100644 index 0000000000..20bc6faabe --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_250.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +213 230 255 +238 246 255 +255 255 255 +172 197 255 +197 213 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_251.pal b/sa1/graphics/obj_palettes/pal_251.pal new file mode 100644 index 0000000000..4151f89e41 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_251.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +172 197 255 +0 156 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_252.pal b/sa1/graphics/obj_palettes/pal_252.pal new file mode 100644 index 0000000000..5ed602d691 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_252.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 115 49 +255 213 131 +238 197 90 +222 172 57 +205 139 0 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 diff --git a/sa1/graphics/obj_palettes/pal_253.pal b/sa1/graphics/obj_palettes/pal_253.pal new file mode 100644 index 0000000000..c1f82c5487 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_253.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +238 197 90 +222 172 57 +205 139 0 +255 213 131 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 diff --git a/sa1/graphics/obj_palettes/pal_254.pal b/sa1/graphics/obj_palettes/pal_254.pal new file mode 100644 index 0000000000..8a014032bc --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_254.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +222 172 57 +205 139 0 +255 213 131 +238 197 90 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 diff --git a/sa1/graphics/obj_palettes/pal_255.pal b/sa1/graphics/obj_palettes/pal_255.pal new file mode 100644 index 0000000000..2fe15be828 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_255.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +205 139 0 +255 213 131 +238 197 90 +222 172 57 +172 115 74 +148 98 24 +148 164 139 +255 255 230 +189 222 197 +164 189 180 +0 180 57 +0 180 57 +0 180 57 +0 180 57 +0 180 57 diff --git a/sa1/graphics/obj_palettes/pal_256.pal b/sa1/graphics/obj_palettes/pal_256.pal new file mode 100644 index 0000000000..63759fc91b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_256.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +246 74 41 +180 32 0 +98 16 0 +255 238 0 +255 156 0 +156 74 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 diff --git a/sa1/graphics/obj_palettes/pal_257.pal b/sa1/graphics/obj_palettes/pal_257.pal new file mode 100644 index 0000000000..ae4948d2b3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_257.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 230 +222 222 197 +156 164 148 +123 123 115 +41 49 49 +255 238 0 +255 156 0 +156 74 0 +246 74 41 +180 32 0 +98 16 0 +255 213 98 +255 123 0 +180 16 0 +82 0 0 diff --git a/sa1/graphics/obj_palettes/pal_258.pal b/sa1/graphics/obj_palettes/pal_258.pal new file mode 100644 index 0000000000..1b385e2d34 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_258.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +246 197 0 +255 156 0 +255 106 0 +255 0 0 +123 74 123 +123 0 123 +0 255 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_259.pal b/sa1/graphics/obj_palettes/pal_259.pal new file mode 100644 index 0000000000..5794d1bdca --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_259.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 156 0 +255 106 0 +255 0 0 +255 148 0 +255 255 0 +123 0 123 +123 123 123 +0 255 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_260.pal b/sa1/graphics/obj_palettes/pal_260.pal new file mode 100644 index 0000000000..7a56b7b6b9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_260.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +255 123 0 +255 255 0 +246 197 0 +255 156 0 +123 123 123 +123 74 123 +0 255 0 +255 255 238 +230 230 189 +197 180 106 +164 189 255 +0 0 255 +255 164 148 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_261.pal b/sa1/graphics/obj_palettes/pal_261.pal new file mode 100644 index 0000000000..22ffdd3cdd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_261.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +255 255 255 +0 255 255 +0 189 189 +0 123 123 +0 164 172 +0 123 123 +0 90 90 +0 57 57 +255 255 255 +164 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_262.pal b/sa1/graphics/obj_palettes/pal_262.pal new file mode 100644 index 0000000000..d92e561b5f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_262.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 148 +238 0 238 +156 0 98 +123 0 123 +0 255 255 +0 189 189 +0 123 123 +255 255 255 +0 123 123 +0 90 90 +0 57 57 +0 164 172 +255 255 255 +164 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_263.pal b/sa1/graphics/obj_palettes/pal_263.pal new file mode 100644 index 0000000000..5e84e65c0e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_263.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 0 238 +255 0 148 +123 0 123 +156 0 98 +0 189 189 +0 123 123 +255 255 255 +0 255 255 +0 90 90 +0 57 57 +0 164 172 +0 123 123 +255 255 255 +164 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_264.pal b/sa1/graphics/obj_palettes/pal_264.pal new file mode 100644 index 0000000000..bd5d56f689 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_264.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 0 238 +255 0 148 +123 0 123 +156 0 98 +0 123 123 +255 255 255 +0 255 255 +0 189 189 +0 57 57 +0 164 172 +0 123 123 +0 90 90 +255 255 255 +164 180 164 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_265.pal b/sa1/graphics/obj_palettes/pal_265.pal new file mode 100644 index 0000000000..9732664263 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_265.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +57 90 123 +49 65 106 +41 41 90 +32 16 74 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +82 180 180 +74 148 156 +65 115 131 +57 82 106 +49 49 82 diff --git a/sa1/graphics/obj_palettes/pal_266.pal b/sa1/graphics/obj_palettes/pal_266.pal new file mode 100644 index 0000000000..6d6d8fce52 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_266.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +57 90 123 +49 65 106 +41 41 90 +32 16 74 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +74 148 156 +65 115 131 +57 82 106 +49 49 82 +49 49 82 diff --git a/sa1/graphics/obj_palettes/pal_267.pal b/sa1/graphics/obj_palettes/pal_267.pal new file mode 100644 index 0000000000..e08f61c0ed --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_267.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +57 90 123 +49 65 106 +41 41 90 +32 16 74 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +65 115 131 +57 82 106 +49 49 82 +49 49 82 +49 49 82 diff --git a/sa1/graphics/obj_palettes/pal_268.pal b/sa1/graphics/obj_palettes/pal_268.pal new file mode 100644 index 0000000000..7645976b16 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_268.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +57 90 123 +49 65 106 +41 41 90 +32 16 74 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +57 82 106 +49 49 82 +49 49 82 +49 49 82 +82 180 180 diff --git a/sa1/graphics/obj_palettes/pal_269.pal b/sa1/graphics/obj_palettes/pal_269.pal new file mode 100644 index 0000000000..74335bdf11 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_269.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +57 90 123 +49 65 106 +41 41 90 +32 16 74 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +49 49 82 +49 49 82 +49 49 82 +82 180 180 +74 148 156 diff --git a/sa1/graphics/obj_palettes/pal_270.pal b/sa1/graphics/obj_palettes/pal_270.pal new file mode 100644 index 0000000000..add098d9ab --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_270.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +57 90 123 +49 65 106 +41 41 90 +32 16 74 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +49 49 82 +49 49 82 +82 180 180 +74 148 156 +65 115 131 diff --git a/sa1/graphics/obj_palettes/pal_271.pal b/sa1/graphics/obj_palettes/pal_271.pal new file mode 100644 index 0000000000..5199a09a88 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_271.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +57 90 123 +49 65 106 +41 41 90 +32 16 74 +24 0 57 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +49 49 82 +82 180 180 +74 148 156 +65 115 131 +57 82 106 diff --git a/sa1/graphics/obj_palettes/pal_272.pal b/sa1/graphics/obj_palettes/pal_272.pal new file mode 100644 index 0000000000..e68d6c3c48 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_272.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 +0 255 0 +0 156 0 +255 164 115 +123 123 0 +123 74 0 +41 49 49 diff --git a/sa1/graphics/obj_palettes/pal_273.pal b/sa1/graphics/obj_palettes/pal_273.pal new file mode 100644 index 0000000000..5013075a37 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_273.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 255 0 +0 156 0 +255 255 255 +123 123 0 +123 74 0 +255 164 115 +41 49 49 diff --git a/sa1/graphics/obj_palettes/pal_274.pal b/sa1/graphics/obj_palettes/pal_274.pal new file mode 100644 index 0000000000..4eb6f028c2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_274.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +255 164 0 +255 255 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +255 255 255 +0 255 0 +123 74 0 +255 164 115 +123 123 0 +41 49 49 diff --git a/sa1/graphics/obj_palettes/pal_275.pal b/sa1/graphics/obj_palettes/pal_275.pal new file mode 100644 index 0000000000..25f0d567bf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_275.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 0 +255 255 255 +213 205 180 +172 172 139 +123 115 98 +74 65 57 +8 8 16 +255 230 148 +222 189 98 +189 156 82 +156 131 65 +255 255 255 +123 255 255 +57 189 255 +0 123 255 +0 0 197 diff --git a/sa1/graphics/obj_palettes/pal_276.pal b/sa1/graphics/obj_palettes/pal_276.pal new file mode 100644 index 0000000000..1702a64641 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_276.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +213 205 180 +172 172 139 +123 115 98 +74 65 57 +8 8 16 +255 230 148 +222 189 98 +189 156 82 +156 131 65 +123 255 255 +57 189 255 +0 123 255 +0 0 197 +0 0 98 diff --git a/sa1/graphics/obj_palettes/pal_277.pal b/sa1/graphics/obj_palettes/pal_277.pal new file mode 100644 index 0000000000..dd2d8f1a64 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_277.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +213 205 180 +172 172 139 +123 115 98 +74 65 57 +8 8 16 +255 230 148 +222 189 98 +189 156 82 +156 131 65 +57 189 255 +0 123 255 +0 0 197 +0 0 98 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_278.pal b/sa1/graphics/obj_palettes/pal_278.pal new file mode 100644 index 0000000000..4c0bb2efb0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_278.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 164 0 +32 74 49 +8 148 98 +0 255 123 +255 255 255 +0 0 0 +0 90 41 +0 180 41 +180 180 180 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 diff --git a/sa1/graphics/obj_palettes/pal_279.pal b/sa1/graphics/obj_palettes/pal_279.pal new file mode 100644 index 0000000000..386aaf82a8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_279.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +32 74 49 +8 148 98 +0 255 123 +180 180 180 +0 0 0 +0 90 41 +0 180 41 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 diff --git a/sa1/graphics/obj_palettes/pal_280.pal b/sa1/graphics/obj_palettes/pal_280.pal new file mode 100644 index 0000000000..f8cd2a9175 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_280.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 255 123 +255 255 255 +32 74 49 +8 148 98 +0 180 41 +180 180 180 +0 0 0 +0 90 41 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 diff --git a/sa1/graphics/obj_palettes/pal_281.pal b/sa1/graphics/obj_palettes/pal_281.pal new file mode 100644 index 0000000000..97e3a6bb17 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_281.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +8 148 98 +0 255 123 +255 255 255 +32 74 49 +0 90 41 +0 180 41 +180 180 180 +0 0 0 +255 0 0 +255 255 255 +197 205 172 +156 148 115 +106 82 57 +65 24 0 +8 8 16 diff --git a/sa1/graphics/obj_palettes/pal_282.pal b/sa1/graphics/obj_palettes/pal_282.pal new file mode 100644 index 0000000000..58fcb8587a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_282.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 115 255 +230 0 189 +148 0 148 +0 255 255 +0 180 197 +0 115 115 +0 255 0 +0 189 0 +0 115 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_283.pal b/sa1/graphics/obj_palettes/pal_283.pal new file mode 100644 index 0000000000..1992ac322f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_283.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 255 255 +0 180 197 +0 115 115 +0 255 0 +0 189 0 +0 115 0 +255 255 0 +255 180 0 +197 90 0 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_284.pal b/sa1/graphics/obj_palettes/pal_284.pal new file mode 100644 index 0000000000..b09f2c7b48 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_284.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 255 0 +0 189 0 +0 115 0 +255 255 0 +255 180 0 +197 90 0 +255 115 255 +230 0 189 +148 0 148 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_285.pal b/sa1/graphics/obj_palettes/pal_285.pal new file mode 100644 index 0000000000..9c8e2900cf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_285.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +255 180 0 +197 90 0 +255 115 255 +230 0 189 +148 0 148 +0 255 255 +0 180 197 +0 115 115 +255 0 0 +148 41 123 +115 57 115 +90 57 90 +74 49 74 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_286.pal b/sa1/graphics/obj_palettes/pal_286.pal new file mode 100644 index 0000000000..3b67aaf186 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_286.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 255 255 +24 222 238 +24 189 222 +24 148 205 +8 115 180 +0 82 164 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_287.pal b/sa1/graphics/obj_palettes/pal_287.pal new file mode 100644 index 0000000000..9a93668640 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_287.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +24 222 238 +24 189 222 +24 148 205 +8 115 180 +0 82 164 +0 57 123 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +0 255 255 diff --git a/sa1/graphics/obj_palettes/pal_288.pal b/sa1/graphics/obj_palettes/pal_288.pal new file mode 100644 index 0000000000..c1757847f1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_288.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +24 189 222 +24 148 205 +8 115 180 +0 82 164 +0 57 123 +0 255 255 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +24 222 238 diff --git a/sa1/graphics/obj_palettes/pal_289.pal b/sa1/graphics/obj_palettes/pal_289.pal new file mode 100644 index 0000000000..9221f58eb4 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_289.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +24 148 205 +8 115 180 +0 82 164 +0 57 123 +0 255 255 +24 222 238 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +24 189 222 diff --git a/sa1/graphics/obj_palettes/pal_290.pal b/sa1/graphics/obj_palettes/pal_290.pal new file mode 100644 index 0000000000..52df16ed40 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_290.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +8 115 180 +0 82 164 +0 57 123 +0 255 255 +24 222 238 +24 189 222 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +24 148 205 diff --git a/sa1/graphics/obj_palettes/pal_291.pal b/sa1/graphics/obj_palettes/pal_291.pal new file mode 100644 index 0000000000..0eb60442aa --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_291.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 82 164 +0 57 123 +0 255 255 +24 222 238 +24 189 222 +24 148 205 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +8 115 180 diff --git a/sa1/graphics/obj_palettes/pal_292.pal b/sa1/graphics/obj_palettes/pal_292.pal new file mode 100644 index 0000000000..22210e2ff4 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_292.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 57 123 +0 255 255 +24 222 238 +24 189 222 +24 148 205 +8 115 180 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +0 82 164 diff --git a/sa1/graphics/obj_palettes/pal_293.pal b/sa1/graphics/obj_palettes/pal_293.pal new file mode 100644 index 0000000000..c5716c1ded --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_293.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +230 230 0 +213 197 0 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_294.pal b/sa1/graphics/obj_palettes/pal_294.pal new file mode 100644 index 0000000000..05a399cea9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_294.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +213 197 0 +180 172 0 +156 148 0 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_295.pal b/sa1/graphics/obj_palettes/pal_295.pal new file mode 100644 index 0000000000..b783ce5b9a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_295.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +156 148 0 +123 115 0 +82 74 0 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_296.pal b/sa1/graphics/obj_palettes/pal_296.pal new file mode 100644 index 0000000000..68f23b2e7a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_296.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +123 115 0 +82 74 0 +57 57 0 +0 16 82 +65 246 123 +65 246 123 +255 255 255 +255 172 164 +255 115 82 +255 57 0 +205 0 0 +164 0 0 +115 0 0 +74 0 0 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_297.pal b/sa1/graphics/obj_palettes/pal_297.pal new file mode 100644 index 0000000000..479771168c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_297.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_298.pal b/sa1/graphics/obj_palettes/pal_298.pal new file mode 100644 index 0000000000..e1e6a2c76b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_298.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 diff --git a/sa1/graphics/obj_palettes/pal_299.pal b/sa1/graphics/obj_palettes/pal_299.pal new file mode 100644 index 0000000000..697a2d097e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_299.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 diff --git a/sa1/graphics/obj_palettes/pal_300.pal b/sa1/graphics/obj_palettes/pal_300.pal new file mode 100644 index 0000000000..4f0cb5e4a9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_300.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 diff --git a/sa1/graphics/obj_palettes/pal_301.pal b/sa1/graphics/obj_palettes/pal_301.pal new file mode 100644 index 0000000000..d6377dddb2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_301.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 diff --git a/sa1/graphics/obj_palettes/pal_302.pal b/sa1/graphics/obj_palettes/pal_302.pal new file mode 100644 index 0000000000..cc4efaaf0d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_302.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 diff --git a/sa1/graphics/obj_palettes/pal_303.pal b/sa1/graphics/obj_palettes/pal_303.pal new file mode 100644 index 0000000000..dc6644f26a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_303.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 diff --git a/sa1/graphics/obj_palettes/pal_304.pal b/sa1/graphics/obj_palettes/pal_304.pal new file mode 100644 index 0000000000..aa86df5cfb --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_304.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_305.pal b/sa1/graphics/obj_palettes/pal_305.pal new file mode 100644 index 0000000000..ae6fb5ac53 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_305.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_306.pal b/sa1/graphics/obj_palettes/pal_306.pal new file mode 100644 index 0000000000..7145c58695 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_306.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_307.pal b/sa1/graphics/obj_palettes/pal_307.pal new file mode 100644 index 0000000000..c819cbf859 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_307.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_308.pal b/sa1/graphics/obj_palettes/pal_308.pal new file mode 100644 index 0000000000..b348c0fc54 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_308.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +255 115 57 +222 74 57 +189 32 49 +148 0 41 +115 0 57 +82 0 65 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +49 0 49 diff --git a/sa1/graphics/obj_palettes/pal_309.pal b/sa1/graphics/obj_palettes/pal_309.pal new file mode 100644 index 0000000000..d9c00b2af9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_309.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +222 74 57 +189 32 49 +148 0 41 +115 0 57 +82 0 65 +49 0 49 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +255 115 57 diff --git a/sa1/graphics/obj_palettes/pal_310.pal b/sa1/graphics/obj_palettes/pal_310.pal new file mode 100644 index 0000000000..4bb385806a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_310.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +189 32 49 +148 0 41 +115 0 57 +82 0 65 +49 0 49 +255 115 57 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +222 74 57 diff --git a/sa1/graphics/obj_palettes/pal_311.pal b/sa1/graphics/obj_palettes/pal_311.pal new file mode 100644 index 0000000000..5057164026 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_311.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +148 0 41 +115 0 57 +82 0 65 +49 0 49 +255 115 57 +222 74 57 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +189 32 49 diff --git a/sa1/graphics/obj_palettes/pal_312.pal b/sa1/graphics/obj_palettes/pal_312.pal new file mode 100644 index 0000000000..2928b7a1ff --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_312.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +115 0 57 +82 0 65 +49 0 49 +255 115 57 +222 74 57 +189 32 49 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +148 0 41 diff --git a/sa1/graphics/obj_palettes/pal_313.pal b/sa1/graphics/obj_palettes/pal_313.pal new file mode 100644 index 0000000000..f6c00dd4b2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_313.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +82 0 65 +49 0 49 +255 115 57 +222 74 57 +189 32 49 +148 0 41 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +115 0 57 diff --git a/sa1/graphics/obj_palettes/pal_314.pal b/sa1/graphics/obj_palettes/pal_314.pal new file mode 100644 index 0000000000..046faae73c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_314.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +49 0 49 +255 115 57 +222 74 57 +189 32 49 +148 0 41 +115 0 57 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +82 0 65 diff --git a/sa1/graphics/obj_palettes/pal_315.pal b/sa1/graphics/obj_palettes/pal_315.pal new file mode 100644 index 0000000000..fb51376ecd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_315.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +57 230 57 +57 197 57 +57 164 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +49 0 49 diff --git a/sa1/graphics/obj_palettes/pal_316.pal b/sa1/graphics/obj_palettes/pal_316.pal new file mode 100644 index 0000000000..9772412053 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_316.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +57 164 57 +57 131 57 +57 106 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +49 0 49 diff --git a/sa1/graphics/obj_palettes/pal_317.pal b/sa1/graphics/obj_palettes/pal_317.pal new file mode 100644 index 0000000000..69a1209fa7 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_317.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +57 131 57 +57 106 57 +16 74 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +49 0 49 diff --git a/sa1/graphics/obj_palettes/pal_318.pal b/sa1/graphics/obj_palettes/pal_318.pal new file mode 100644 index 0000000000..42430e86a9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_318.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +57 106 57 +16 74 24 +0 32 8 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 255 180 +230 230 90 +213 197 0 +172 156 0 +131 115 0 +98 82 0 +57 41 0 +49 0 49 diff --git a/sa1/graphics/obj_palettes/pal_319.pal b/sa1/graphics/obj_palettes/pal_319.pal new file mode 100644 index 0000000000..0c2364df17 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_319.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_320.pal b/sa1/graphics/obj_palettes/pal_320.pal new file mode 100644 index 0000000000..c7ed009027 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_320.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +255 255 0 diff --git a/sa1/graphics/obj_palettes/pal_321.pal b/sa1/graphics/obj_palettes/pal_321.pal new file mode 100644 index 0000000000..c574e74535 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_321.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +230 230 0 diff --git a/sa1/graphics/obj_palettes/pal_322.pal b/sa1/graphics/obj_palettes/pal_322.pal new file mode 100644 index 0000000000..7de6e34214 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_322.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +213 197 0 diff --git a/sa1/graphics/obj_palettes/pal_323.pal b/sa1/graphics/obj_palettes/pal_323.pal new file mode 100644 index 0000000000..2e3abb4187 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_323.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +189 164 0 diff --git a/sa1/graphics/obj_palettes/pal_324.pal b/sa1/graphics/obj_palettes/pal_324.pal new file mode 100644 index 0000000000..17d69d9653 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_324.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +164 131 0 diff --git a/sa1/graphics/obj_palettes/pal_325.pal b/sa1/graphics/obj_palettes/pal_325.pal new file mode 100644 index 0000000000..29db1ac778 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_325.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +139 98 0 diff --git a/sa1/graphics/obj_palettes/pal_326.pal b/sa1/graphics/obj_palettes/pal_326.pal new file mode 100644 index 0000000000..ea784075ea --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_326.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_327.pal b/sa1/graphics/obj_palettes/pal_327.pal new file mode 100644 index 0000000000..0da2772f24 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_327.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_328.pal b/sa1/graphics/obj_palettes/pal_328.pal new file mode 100644 index 0000000000..27e42b1ac6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_328.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_329.pal b/sa1/graphics/obj_palettes/pal_329.pal new file mode 100644 index 0000000000..37cd798474 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_329.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 148 +0 255 0 +0 213 0 +0 164 0 +0 123 0 +0 74 0 +0 32 0 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_330.pal b/sa1/graphics/obj_palettes/pal_330.pal new file mode 100644 index 0000000000..b1a9ea547d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_330.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 255 255 +24 222 238 +24 189 222 +24 148 205 +8 115 180 +0 82 164 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_331.pal b/sa1/graphics/obj_palettes/pal_331.pal new file mode 100644 index 0000000000..dca54f8bb2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_331.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +24 222 238 +24 189 222 +24 148 205 +8 115 180 +0 82 164 +0 57 123 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +0 255 255 diff --git a/sa1/graphics/obj_palettes/pal_332.pal b/sa1/graphics/obj_palettes/pal_332.pal new file mode 100644 index 0000000000..e14fe8e40a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_332.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +24 189 222 +24 148 205 +8 115 180 +0 82 164 +0 57 123 +0 255 255 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +24 222 238 diff --git a/sa1/graphics/obj_palettes/pal_333.pal b/sa1/graphics/obj_palettes/pal_333.pal new file mode 100644 index 0000000000..3cd6d74c79 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_333.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +24 148 205 +8 115 180 +0 82 164 +0 57 123 +0 255 255 +24 222 238 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +24 189 222 diff --git a/sa1/graphics/obj_palettes/pal_334.pal b/sa1/graphics/obj_palettes/pal_334.pal new file mode 100644 index 0000000000..f7ead7c513 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_334.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +8 115 180 +0 82 164 +0 57 123 +0 255 255 +24 222 238 +24 189 222 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +24 148 205 diff --git a/sa1/graphics/obj_palettes/pal_335.pal b/sa1/graphics/obj_palettes/pal_335.pal new file mode 100644 index 0000000000..6b24f7c10b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_335.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 82 164 +0 57 123 +0 255 255 +24 222 238 +24 189 222 +24 148 205 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +8 115 180 diff --git a/sa1/graphics/obj_palettes/pal_336.pal b/sa1/graphics/obj_palettes/pal_336.pal new file mode 100644 index 0000000000..cc2651506d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_336.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +0 57 123 +0 255 255 +24 222 238 +24 189 222 +24 148 205 +8 115 180 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +0 82 164 diff --git a/sa1/graphics/obj_palettes/pal_337.pal b/sa1/graphics/obj_palettes/pal_337.pal new file mode 100644 index 0000000000..d8a63e87e9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_337.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +230 230 0 +213 197 0 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_338.pal b/sa1/graphics/obj_palettes/pal_338.pal new file mode 100644 index 0000000000..3c1f3efd0a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_338.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +213 197 0 +180 172 0 +156 148 0 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_339.pal b/sa1/graphics/obj_palettes/pal_339.pal new file mode 100644 index 0000000000..7ca4d72975 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_339.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +156 148 0 +123 115 0 +82 74 0 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_340.pal b/sa1/graphics/obj_palettes/pal_340.pal new file mode 100644 index 0000000000..c6f8191424 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_340.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +123 115 0 +82 74 0 +57 57 0 +0 16 82 +65 246 123 +65 246 123 +255 255 255 +246 255 246 +230 238 222 +189 189 180 +139 148 139 +98 106 90 +57 57 49 +8 16 8 +0 57 123 diff --git a/sa1/graphics/obj_palettes/pal_341.pal b/sa1/graphics/obj_palettes/pal_341.pal new file mode 100644 index 0000000000..d9380c9502 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_341.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_342.pal b/sa1/graphics/obj_palettes/pal_342.pal new file mode 100644 index 0000000000..35c6624cb7 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_342.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +255 255 0 diff --git a/sa1/graphics/obj_palettes/pal_343.pal b/sa1/graphics/obj_palettes/pal_343.pal new file mode 100644 index 0000000000..f377b8aeee --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_343.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +230 230 0 diff --git a/sa1/graphics/obj_palettes/pal_344.pal b/sa1/graphics/obj_palettes/pal_344.pal new file mode 100644 index 0000000000..f9b1b9ba27 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_344.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +213 197 0 diff --git a/sa1/graphics/obj_palettes/pal_345.pal b/sa1/graphics/obj_palettes/pal_345.pal new file mode 100644 index 0000000000..bf50373d20 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_345.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +189 164 0 diff --git a/sa1/graphics/obj_palettes/pal_346.pal b/sa1/graphics/obj_palettes/pal_346.pal new file mode 100644 index 0000000000..0ad8046d21 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_346.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +164 131 0 diff --git a/sa1/graphics/obj_palettes/pal_347.pal b/sa1/graphics/obj_palettes/pal_347.pal new file mode 100644 index 0000000000..52858725dd --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_347.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +139 98 0 diff --git a/sa1/graphics/obj_palettes/pal_348.pal b/sa1/graphics/obj_palettes/pal_348.pal new file mode 100644 index 0000000000..bc3544dc2e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_348.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_349.pal b/sa1/graphics/obj_palettes/pal_349.pal new file mode 100644 index 0000000000..24dd9cd71c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_349.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_350.pal b/sa1/graphics/obj_palettes/pal_350.pal new file mode 100644 index 0000000000..1f3085f22c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_350.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_351.pal b/sa1/graphics/obj_palettes/pal_351.pal new file mode 100644 index 0000000000..92f62d9e02 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_351.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 255 255 +123 222 238 +24 189 222 +16 148 180 +8 106 131 +8 57 90 +0 16 49 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_352.pal b/sa1/graphics/obj_palettes/pal_352.pal new file mode 100644 index 0000000000..a100b10d19 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_352.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_353.pal b/sa1/graphics/obj_palettes/pal_353.pal new file mode 100644 index 0000000000..21bbf5e269 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_353.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +255 255 0 diff --git a/sa1/graphics/obj_palettes/pal_354.pal b/sa1/graphics/obj_palettes/pal_354.pal new file mode 100644 index 0000000000..bcacb5c59a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_354.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +230 230 0 diff --git a/sa1/graphics/obj_palettes/pal_355.pal b/sa1/graphics/obj_palettes/pal_355.pal new file mode 100644 index 0000000000..2604fd7013 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_355.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +213 197 0 diff --git a/sa1/graphics/obj_palettes/pal_356.pal b/sa1/graphics/obj_palettes/pal_356.pal new file mode 100644 index 0000000000..cb7878ac0d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_356.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +189 164 0 diff --git a/sa1/graphics/obj_palettes/pal_357.pal b/sa1/graphics/obj_palettes/pal_357.pal new file mode 100644 index 0000000000..10581c4c70 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_357.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +164 131 0 diff --git a/sa1/graphics/obj_palettes/pal_358.pal b/sa1/graphics/obj_palettes/pal_358.pal new file mode 100644 index 0000000000..cebb159882 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_358.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +139 98 0 diff --git a/sa1/graphics/obj_palettes/pal_359.pal b/sa1/graphics/obj_palettes/pal_359.pal new file mode 100644 index 0000000000..a8ee7092ea --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_359.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_360.pal b/sa1/graphics/obj_palettes/pal_360.pal new file mode 100644 index 0000000000..075cbffb41 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_360.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_361.pal b/sa1/graphics/obj_palettes/pal_361.pal new file mode 100644 index 0000000000..11be9f7908 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_361.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_362.pal b/sa1/graphics/obj_palettes/pal_362.pal new file mode 100644 index 0000000000..643fa1afc8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_362.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +255 189 255 +255 0 255 +213 0 213 +164 0 164 +123 0 123 +74 0 74 +24 0 24 +115 74 0 diff --git a/sa1/graphics/obj_palettes/pal_363.pal b/sa1/graphics/obj_palettes/pal_363.pal new file mode 100644 index 0000000000..9473c5f9f2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_363.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_364.pal b/sa1/graphics/obj_palettes/pal_364.pal new file mode 100644 index 0000000000..c182296360 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_364.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +0 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_365.pal b/sa1/graphics/obj_palettes/pal_365.pal new file mode 100644 index 0000000000..9e9258ea8d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_365.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +0 0 255 +0 255 255 +255 0 0 +106 255 106 +255 255 0 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_366.pal b/sa1/graphics/obj_palettes/pal_366.pal new file mode 100644 index 0000000000..e31d41a1e1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_366.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 255 0 +0 0 255 +0 255 255 +255 0 0 +106 255 106 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_367.pal b/sa1/graphics/obj_palettes/pal_367.pal new file mode 100644 index 0000000000..8f758ae787 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_367.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +255 0 0 +255 172 41 +246 115 57 +238 57 24 +123 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_368.pal b/sa1/graphics/obj_palettes/pal_368.pal new file mode 100644 index 0000000000..1494321567 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_368.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 131 0 +255 255 82 +255 172 0 +148 98 8 +106 65 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +49 98 98 diff --git a/sa1/graphics/obj_palettes/pal_369.pal b/sa1/graphics/obj_palettes/pal_369.pal new file mode 100644 index 0000000000..818ff359f2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_369.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 131 0 +255 172 0 +148 98 8 +106 65 0 +255 255 82 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +49 98 98 diff --git a/sa1/graphics/obj_palettes/pal_370.pal b/sa1/graphics/obj_palettes/pal_370.pal new file mode 100644 index 0000000000..dacaf9ffa3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_370.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 131 0 +148 98 8 +106 65 0 +255 255 82 +255 172 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +49 98 98 diff --git a/sa1/graphics/obj_palettes/pal_371.pal b/sa1/graphics/obj_palettes/pal_371.pal new file mode 100644 index 0000000000..6551bb5ab1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_371.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 131 0 +106 65 0 +255 255 82 +255 172 0 +148 98 8 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +0 131 0 +49 98 98 diff --git a/sa1/graphics/obj_palettes/pal_372.pal b/sa1/graphics/obj_palettes/pal_372.pal new file mode 100644 index 0000000000..a23f0839c7 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_372.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 131 0 +156 148 123 +123 123 106 +49 57 24 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +0 131 0 +0 131 0 diff --git a/sa1/graphics/obj_palettes/pal_373.pal b/sa1/graphics/obj_palettes/pal_373.pal new file mode 100644 index 0000000000..87d92c892e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_373.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 131 0 +156 148 123 +123 123 106 +49 57 24 +246 246 238 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +246 238 189 +246 222 148 +255 197 65 +246 156 0 +246 156 0 +0 131 0 +0 131 0 diff --git a/sa1/graphics/obj_palettes/pal_374.pal b/sa1/graphics/obj_palettes/pal_374.pal new file mode 100644 index 0000000000..ada190e6de --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_374.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +246 115 57 +238 57 24 +205 57 24 +90 24 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_375.pal b/sa1/graphics/obj_palettes/pal_375.pal new file mode 100644 index 0000000000..ce4d06533b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_375.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +238 57 24 +205 57 24 +90 24 0 +74 32 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_376.pal b/sa1/graphics/obj_palettes/pal_376.pal new file mode 100644 index 0000000000..99def61684 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_376.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 0 0 +106 255 106 +255 255 0 +0 0 255 +0 255 255 +205 57 24 +90 24 0 +74 32 0 +32 8 0 +0 131 0 +0 131 0 +24 57 57 +49 98 98 +57 65 41 +8 32 41 diff --git a/sa1/graphics/obj_palettes/pal_377.pal b/sa1/graphics/obj_palettes/pal_377.pal new file mode 100644 index 0000000000..1f87056ed6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_377.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +139 213 255 +65 164 255 +0 115 255 +255 156 255 +255 0 255 +255 0 131 +0 255 131 +0 222 115 +0 115 74 +0 8 0 diff --git a/sa1/graphics/obj_palettes/pal_378.pal b/sa1/graphics/obj_palettes/pal_378.pal new file mode 100644 index 0000000000..6a013f1a7d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_378.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 74 +255 180 49 +255 123 0 +180 16 0 +0 0 0 +255 156 255 +255 0 255 +255 0 131 +139 213 255 +65 164 255 +0 115 255 +0 115 74 +0 8 0 +0 255 131 +0 222 115 diff --git a/sa1/graphics/obj_palettes/pal_379.pal b/sa1/graphics/obj_palettes/pal_379.pal new file mode 100644 index 0000000000..42f40f0ff5 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_379.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +49 115 139 +255 255 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_380.pal b/sa1/graphics/obj_palettes/pal_380.pal new file mode 100644 index 0000000000..540099267f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_380.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 255 0 +0 172 0 +0 90 0 +255 255 0 +255 255 0 +255 197 0 +255 123 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_381.pal b/sa1/graphics/obj_palettes/pal_381.pal new file mode 100644 index 0000000000..99dcb3ed39 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_381.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 172 0 +0 90 0 +255 255 0 +0 255 0 +255 123 0 +255 0 0 +255 255 0 +255 197 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_382.pal b/sa1/graphics/obj_palettes/pal_382.pal new file mode 100644 index 0000000000..763dc55b10 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_382.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 90 0 +255 255 0 +0 255 0 +0 172 0 +255 123 0 +255 0 0 +255 255 0 +255 197 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_383.pal b/sa1/graphics/obj_palettes/pal_383.pal new file mode 100644 index 0000000000..ba520a6e4d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_383.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +238 139 24 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +172 82 41 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_384.pal b/sa1/graphics/obj_palettes/pal_384.pal new file mode 100644 index 0000000000..e24fb1a10e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_384.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +32 90 65 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_385.pal b/sa1/graphics/obj_palettes/pal_385.pal new file mode 100644 index 0000000000..4354574820 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_385.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +139 115 49 +82 98 57 +32 90 65 +32 90 65 +32 90 65 +82 65 41 +41 57 41 +0 49 41 +0 49 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_386.pal b/sa1/graphics/obj_palettes/pal_386.pal new file mode 100644 index 0000000000..e24fb1a10e --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_386.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 131 41 +139 115 49 +82 98 57 +32 90 65 +32 90 65 +131 74 41 +82 65 41 +41 57 41 +0 49 41 +0 49 41 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_387.pal b/sa1/graphics/obj_palettes/pal_387.pal new file mode 100644 index 0000000000..c88d86d073 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_387.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 222 222 +255 156 189 +255 90 115 +255 32 49 +189 0 0 +255 0 0 +255 0 0 +8 8 16 diff --git a/sa1/graphics/obj_palettes/pal_388.pal b/sa1/graphics/obj_palettes/pal_388.pal new file mode 100644 index 0000000000..7d1db669af --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_388.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 238 238 +255 172 205 +255 98 123 +255 41 57 +205 8 8 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_389.pal b/sa1/graphics/obj_palettes/pal_389.pal new file mode 100644 index 0000000000..4627bfd5ea --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_389.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 246 246 +255 180 213 +255 115 139 +255 57 74 +213 24 24 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_390.pal b/sa1/graphics/obj_palettes/pal_390.pal new file mode 100644 index 0000000000..fd32e215a3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_390.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 255 255 +255 197 230 +255 131 156 +255 65 82 +230 32 32 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_391.pal b/sa1/graphics/obj_palettes/pal_391.pal new file mode 100644 index 0000000000..dd9f4990b6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_391.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 255 255 +255 205 246 +255 139 164 +255 82 98 +246 49 49 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_392.pal b/sa1/graphics/obj_palettes/pal_392.pal new file mode 100644 index 0000000000..fd32e215a3 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_392.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 255 255 +255 197 230 +255 131 156 +255 65 82 +230 32 32 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_393.pal b/sa1/graphics/obj_palettes/pal_393.pal new file mode 100644 index 0000000000..4627bfd5ea --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_393.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 246 246 +255 180 213 +255 115 139 +255 57 74 +213 24 24 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_394.pal b/sa1/graphics/obj_palettes/pal_394.pal new file mode 100644 index 0000000000..7d1db669af --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_394.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +246 213 139 +238 189 49 +180 148 49 +123 106 49 +90 82 41 +49 49 49 +255 238 238 +255 172 205 +255 98 123 +255 41 57 +205 8 8 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_395.pal b/sa1/graphics/obj_palettes/pal_395.pal new file mode 100644 index 0000000000..a969af04c7 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_395.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +213 238 246 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +57 49 65 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +8 8 16 diff --git a/sa1/graphics/obj_palettes/pal_396.pal b/sa1/graphics/obj_palettes/pal_396.pal new file mode 100644 index 0000000000..96f44f25a8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_396.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +213 238 246 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +57 49 65 +0 0 197 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_397.pal b/sa1/graphics/obj_palettes/pal_397.pal new file mode 100644 index 0000000000..ccf63528d1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_397.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +213 238 246 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +57 49 65 +57 189 255 +0 0 197 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_398.pal b/sa1/graphics/obj_palettes/pal_398.pal new file mode 100644 index 0000000000..a32285a3d6 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_398.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +213 238 246 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +57 49 65 +123 255 255 +57 189 255 +0 0 197 +255 0 0 +255 115 0 +255 205 0 +255 255 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_399.pal b/sa1/graphics/obj_palettes/pal_399.pal new file mode 100644 index 0000000000..d1b3dc0da7 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_399.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +213 238 246 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +57 49 65 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +255 0 0 +255 115 0 +255 205 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_400.pal b/sa1/graphics/obj_palettes/pal_400.pal new file mode 100644 index 0000000000..ddd46efb5b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_400.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +213 238 246 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +57 49 65 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +255 0 0 +255 115 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_401.pal b/sa1/graphics/obj_palettes/pal_401.pal new file mode 100644 index 0000000000..4c54fcd0ba --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_401.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +213 238 246 +172 189 222 +156 172 189 +139 156 164 +123 131 139 +98 106 115 +57 49 65 +255 115 0 +255 205 0 +255 255 0 +123 255 255 +57 189 255 +0 0 197 +255 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_402.pal b/sa1/graphics/obj_palettes/pal_402.pal new file mode 100644 index 0000000000..544be595a1 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_402.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +255 205 0 +255 222 49 +255 238 106 +255 255 156 +0 255 123 +82 255 131 +172 255 148 +255 255 156 diff --git a/sa1/graphics/obj_palettes/pal_403.pal b/sa1/graphics/obj_palettes/pal_403.pal new file mode 100644 index 0000000000..79fb94fd1c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_403.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +238 246 180 +213 197 57 +222 213 98 +230 230 139 +246 238 180 +16 238 156 +90 238 156 +172 238 172 diff --git a/sa1/graphics/obj_palettes/pal_404.pal b/sa1/graphics/obj_palettes/pal_404.pal new file mode 100644 index 0000000000..c0602bc147 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_404.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +205 222 180 +222 238 205 +172 189 123 +189 205 148 +172 213 197 +238 213 197 +41 213 180 +106 213 189 diff --git a/sa1/graphics/obj_palettes/pal_405.pal b/sa1/graphics/obj_palettes/pal_405.pal new file mode 100644 index 0000000000..5682ed9ca4 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_405.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +156 197 197 +172 213 213 +197 230 230 +131 180 180 +115 189 213 +172 189 222 +230 189 222 +65 189 213 diff --git a/sa1/graphics/obj_palettes/pal_406.pal b/sa1/graphics/obj_palettes/pal_406.pal new file mode 100644 index 0000000000..6e579a5c3a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_406.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +90 172 246 +115 189 246 +148 205 255 +180 222 255 +90 172 246 +131 172 246 +172 164 246 +222 164 246 diff --git a/sa1/graphics/obj_palettes/pal_407.pal b/sa1/graphics/obj_palettes/pal_407.pal new file mode 100644 index 0000000000..0ccd3f2721 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_407.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +197 230 230 +131 180 180 +156 197 197 +172 213 213 +230 189 222 +65 189 213 +115 189 213 +172 189 222 diff --git a/sa1/graphics/obj_palettes/pal_408.pal b/sa1/graphics/obj_palettes/pal_408.pal new file mode 100644 index 0000000000..8d2487a4d5 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_408.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +205 222 180 +222 238 205 +172 189 123 +205 222 180 +172 213 197 +238 213 197 +41 213 180 +106 213 189 diff --git a/sa1/graphics/obj_palettes/pal_409.pal b/sa1/graphics/obj_palettes/pal_409.pal new file mode 100644 index 0000000000..5e989c682f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_409.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 255 255 +205 230 238 +164 180 213 +148 164 180 +131 148 156 +98 106 115 +57 49 65 +222 213 98 +230 230 139 +238 246 180 +213 197 57 +90 238 156 +172 238 172 +246 238 180 +16 238 156 diff --git a/sa1/graphics/obj_palettes/pal_410.pal b/sa1/graphics/obj_palettes/pal_410.pal new file mode 100644 index 0000000000..14eb04218f --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_410.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +90 32 24 +0 0 0 +123 123 41 +90 90 24 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 diff --git a/sa1/graphics/obj_palettes/pal_411.pal b/sa1/graphics/obj_palettes/pal_411.pal new file mode 100644 index 0000000000..7f58d0a7bc --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_411.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +172 41 32 +90 32 24 +255 255 0 +205 205 24 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 diff --git a/sa1/graphics/obj_palettes/pal_412.pal b/sa1/graphics/obj_palettes/pal_412.pal new file mode 100644 index 0000000000..539944f604 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_412.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +255 0 0 +172 41 32 +205 205 24 +156 156 57 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 diff --git a/sa1/graphics/obj_palettes/pal_413.pal b/sa1/graphics/obj_palettes/pal_413.pal new file mode 100644 index 0000000000..c9a0f80b96 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_413.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +172 41 32 +90 32 24 +156 156 57 +123 123 41 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 diff --git a/sa1/graphics/obj_palettes/pal_414.pal b/sa1/graphics/obj_palettes/pal_414.pal new file mode 100644 index 0000000000..d2de8204aa --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_414.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +172 41 32 +90 32 24 +90 90 24 +41 41 8 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 diff --git a/sa1/graphics/obj_palettes/pal_415.pal b/sa1/graphics/obj_palettes/pal_415.pal new file mode 100644 index 0000000000..677f009ca7 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_415.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +255 0 0 +172 41 32 +41 41 8 +0 0 0 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 diff --git a/sa1/graphics/obj_palettes/pal_416.pal b/sa1/graphics/obj_palettes/pal_416.pal new file mode 100644 index 0000000000..885ddae220 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_416.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +172 41 32 +90 32 24 +0 0 0 +0 0 0 +123 164 131 +82 123 115 +57 90 82 +180 172 123 +164 148 106 +148 131 90 +123 106 74 +98 90 65 +82 65 49 +57 49 41 +32 32 24 diff --git a/sa1/graphics/obj_palettes/pal_417.pal b/sa1/graphics/obj_palettes/pal_417.pal new file mode 100644 index 0000000000..489295903c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_417.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +49 16 0 +98 57 8 +148 90 8 +205 123 8 +255 197 57 +255 255 189 +8 41 32 +74 115 106 +106 172 148 +139 213 172 +172 238 189 +255 0 0 +255 131 0 +0 213 213 +106 255 255 diff --git a/sa1/graphics/obj_palettes/pal_418.pal b/sa1/graphics/obj_palettes/pal_418.pal new file mode 100644 index 0000000000..487a6d9f75 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_418.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +49 16 0 +98 57 8 +148 90 8 +205 123 8 +255 197 57 +255 255 189 +8 41 32 +74 115 106 +106 172 148 +139 213 172 +172 238 189 +0 213 213 +106 255 255 +255 0 0 +255 131 0 diff --git a/sa1/graphics/obj_palettes/pal_419.pal b/sa1/graphics/obj_palettes/pal_419.pal new file mode 100644 index 0000000000..9e00f2b028 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_419.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 106 222 +230 82 197 +205 49 172 +180 24 148 +148 41 123 +106 57 98 +255 255 255 +164 164 164 +0 255 255 +49 156 180 +0 139 255 +49 98 180 +0 74 148 +49 65 123 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_420.pal b/sa1/graphics/obj_palettes/pal_420.pal new file mode 100644 index 0000000000..cfd07d5341 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_420.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 106 222 +230 82 197 +205 49 172 +180 24 148 +148 41 123 +106 57 98 +0 255 255 +49 156 180 +0 139 255 +49 98 180 +0 74 148 +49 65 123 +255 255 255 +164 164 164 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_421.pal b/sa1/graphics/obj_palettes/pal_421.pal new file mode 100644 index 0000000000..aaffd49d9a --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_421.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 106 222 +230 82 197 +205 49 172 +180 24 148 +148 41 123 +106 57 98 +0 139 255 +49 98 180 +0 74 148 +49 65 123 +255 255 255 +164 164 164 +0 255 255 +49 156 180 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_422.pal b/sa1/graphics/obj_palettes/pal_422.pal new file mode 100644 index 0000000000..8fed516934 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_422.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +255 106 222 +230 82 197 +205 49 172 +180 24 148 +148 41 123 +106 57 98 +0 74 148 +49 65 123 +255 255 255 +164 164 164 +0 255 255 +49 156 180 +0 139 255 +49 98 180 +49 41 49 diff --git a/sa1/graphics/obj_palettes/pal_423.pal b/sa1/graphics/obj_palettes/pal_423.pal new file mode 100644 index 0000000000..f0487bd289 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_423.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +180 180 180 +0 32 156 +0 65 238 +0 0 98 +0 156 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +32 32 32 +255 255 255 +115 115 115 +0 156 255 diff --git a/sa1/graphics/obj_palettes/pal_424.pal b/sa1/graphics/obj_palettes/pal_424.pal new file mode 100644 index 0000000000..0d16b0fb01 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_424.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 0 255 +238 139 32 +255 189 32 +189 82 16 +172 205 222 +0 156 255 +32 65 255 +156 156 156 +115 115 115 +172 0 0 +255 32 32 +16 16 16 +255 255 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/obj_palettes/pal_425.pal b/sa1/graphics/obj_palettes/pal_425.pal new file mode 100644 index 0000000000..1c6c88849c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_425.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 164 +180 180 180 +189 0 0 +255 32 0 +115 0 0 +32 65 255 +255 255 156 +255 222 0 +156 82 0 +255 172 82 +0 172 16 +115 255 0 +32 32 32 +255 255 255 +115 115 115 +255 156 0 diff --git a/sa1/graphics/obj_palettes/pal_426.pal b/sa1/graphics/obj_palettes/pal_426.pal new file mode 100644 index 0000000000..481a489b92 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_426.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +172 205 222 +238 65 156 +255 156 189 +189 32 82 +0 172 0 +115 115 115 +156 156 156 +156 82 0 +255 172 82 +172 0 0 +255 0 0 +0 0 0 +255 255 255 +255 255 156 +255 255 0 diff --git a/sa1/graphics/obj_palettes/pal_427.pal b/sa1/graphics/obj_palettes/pal_427.pal new file mode 100644 index 0000000000..5dcf1562c0 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_427.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +255 255 255 +255 156 189 +255 115 172 +255 82 148 +246 49 131 +213 8 98 +255 222 172 +255 164 0 +255 106 0 +238 0 0 +197 0 0 +255 238 172 +255 205 98 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_428.pal b/sa1/graphics/obj_palettes/pal_428.pal new file mode 100644 index 0000000000..43ce8e4ea8 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_428.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +82 98 65 +255 255 255 +189 238 255 +115 222 255 +49 205 255 +32 164 255 +24 106 238 +16 41 189 +0 0 0 +255 255 0 +189 238 115 +0 189 156 +0 172 0 +123 222 131 +57 205 139 +0 123 0 diff --git a/sa1/graphics/obj_palettes/pal_429.pal b/sa1/graphics/obj_palettes/pal_429.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_429.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_430.pal b/sa1/graphics/obj_palettes/pal_430.pal new file mode 100644 index 0000000000..3d639624fa --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_430.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 0 +255 49 0 +222 32 0 +156 16 0 +98 0 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +49 172 255 +65 115 222 +65 82 172 +49 65 139 +255 238 0 +255 189 0 +255 139 0 diff --git a/sa1/graphics/obj_palettes/pal_431.pal b/sa1/graphics/obj_palettes/pal_431.pal new file mode 100644 index 0000000000..32967a37ec --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_431.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 98 0 +238 205 16 +205 172 8 +172 139 0 +139 98 0 +255 255 255 +205 205 189 +139 139 139 +65 65 65 +255 0 0 +189 0 0 +115 0 0 +49 0 0 +255 255 172 +255 255 82 +255 238 49 diff --git a/sa1/graphics/obj_palettes/pal_432.pal b/sa1/graphics/obj_palettes/pal_432.pal new file mode 100644 index 0000000000..34020c635c --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_432.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 139 49 +255 238 189 +238 222 189 +205 189 172 +189 156 139 +156 115 98 +115 98 82 +98 82 65 +82 65 49 +255 255 255 +197 197 197 +148 148 148 +115 115 115 +82 82 82 +41 41 41 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_433.pal b/sa1/graphics/obj_palettes/pal_433.pal new file mode 100644 index 0000000000..a9450dce2d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_433.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 205 0 +115 115 115 +255 255 255 +172 49 0 +255 139 82 +255 65 0 +222 49 0 +255 255 0 +189 255 65 +98 139 255 +82 32 238 +238 156 0 +0 0 0 +189 189 189 +0 0 172 +49 205 255 diff --git a/sa1/graphics/obj_palettes/pal_434.pal b/sa1/graphics/obj_palettes/pal_434.pal new file mode 100644 index 0000000000..d4ca415b50 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_434.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 156 +255 115 0 +222 32 0 +156 16 0 +98 0 0 +222 197 255 +205 148 255 +148 98 255 +90 32 255 +0 0 0 +8 41 205 +57 131 255 +98 156 255 +172 197 255 +205 230 255 +255 255 255 diff --git a/sa1/graphics/obj_palettes/pal_435.pal b/sa1/graphics/obj_palettes/pal_435.pal new file mode 100644 index 0000000000..61e5fcb677 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_435.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 172 +32 189 255 +8 148 205 +0 98 156 +0 49 98 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +255 255 255 +222 238 238 +189 205 222 +115 139 156 +65 82 98 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_436.pal b/sa1/graphics/obj_palettes/pal_436.pal new file mode 100644 index 0000000000..3b7782009b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_436.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 255 +139 189 255 +82 139 222 +32 65 205 +0 32 139 +255 115 0 +238 32 0 +156 16 0 +98 0 0 +255 238 0 +255 255 255 +222 222 238 +172 189 205 +115 139 156 +65 82 98 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_437.pal b/sa1/graphics/obj_palettes/pal_437.pal new file mode 100644 index 0000000000..614e87a041 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_437.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 115 49 +65 156 189 +139 139 255 +49 115 255 +0 49 156 +65 205 189 +65 238 189 +156 238 156 +205 238 65 +255 238 0 +255 255 255 +222 222 238 +156 172 189 +82 98 139 +65 98 205 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_438.pal b/sa1/graphics/obj_palettes/pal_438.pal new file mode 100644 index 0000000000..de1baab956 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_438.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 255 255 +205 205 205 +139 156 156 +98 98 98 +0 0 0 +238 0 0 +205 65 0 +156 49 0 +255 115 0 +255 222 0 +189 115 238 +115 82 189 +65 49 139 +16 32 65 +255 115 156 diff --git a/sa1/graphics/obj_palettes/pal_439.pal b/sa1/graphics/obj_palettes/pal_439.pal new file mode 100644 index 0000000000..62a5c7ca3d --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_439.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +0 0 0 +255 255 255 +189 189 189 +90 82 74 +255 230 205 +255 197 156 +246 230 0 +255 156 0 +131 24 24 +0 180 0 +0 131 0 +255 148 189 +246 82 139 +197 41 65 +255 0 0 diff --git a/sa1/graphics/obj_palettes/pal_440.pal b/sa1/graphics/obj_palettes/pal_440.pal new file mode 100644 index 0000000000..4cf7de7061 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_440.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_441.pal b/sa1/graphics/obj_palettes/pal_441.pal new file mode 100644 index 0000000000..60458ff207 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_441.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +82 82 82 +65 65 65 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_442.pal b/sa1/graphics/obj_palettes/pal_442.pal new file mode 100644 index 0000000000..c4637be352 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_442.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +82 82 82 +65 65 65 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_443.pal b/sa1/graphics/obj_palettes/pal_443.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_443.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_444.pal b/sa1/graphics/obj_palettes/pal_444.pal new file mode 100644 index 0000000000..d5833c9be2 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_444.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +255 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_445.pal b/sa1/graphics/obj_palettes/pal_445.pal new file mode 100644 index 0000000000..eedf37e3f9 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_445.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +156 156 156 +82 82 82 +65 65 65 +0 0 0 +222 222 255 +189 189 255 +82 82 255 +0 98 255 +0 0 172 +0 139 238 +0 0 222 +0 0 255 +255 255 0 +255 255 255 +0 0 205 diff --git a/sa1/graphics/obj_palettes/pal_446.pal b/sa1/graphics/obj_palettes/pal_446.pal new file mode 100644 index 0000000000..6655025e99 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_446.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_447.pal b/sa1/graphics/obj_palettes/pal_447.pal new file mode 100644 index 0000000000..d6460a01cf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_447.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +65 156 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_448.pal b/sa1/graphics/obj_palettes/pal_448.pal new file mode 100644 index 0000000000..93c13adf58 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_448.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +255 255 255 +230 255 172 +197 246 82 +255 230 172 +255 197 82 +255 172 0 +230 189 0 +197 213 0 +255 139 0 +255 115 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_449.pal b/sa1/graphics/obj_palettes/pal_449.pal new file mode 100644 index 0000000000..a67feced76 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_449.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 0 +0 0 0 +255 255 255 +213 205 205 +148 139 139 +246 230 0 +246 189 49 +255 148 0 +238 115 16 +148 65 24 +0 172 49 +49 123 24 +0 213 57 +255 0 0 +197 8 8 +131 16 8 diff --git a/sa1/graphics/obj_palettes/pal_450.pal b/sa1/graphics/obj_palettes/pal_450.pal new file mode 100644 index 0000000000..013b5230bc --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_450.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +164 238 0 +255 255 255 +230 255 172 +197 246 82 +255 230 172 +255 197 82 +255 172 0 +230 189 0 +197 213 0 +255 139 0 +255 115 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_451.pal b/sa1/graphics/obj_palettes/pal_451.pal new file mode 100644 index 0000000000..66f91cebdf --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_451.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +255 255 255 +238 238 238 +222 222 222 +205 205 205 +189 189 189 +172 172 172 +156 156 156 +115 115 115 +98 98 98 +65 65 65 +0 0 0 diff --git a/sa1/graphics/obj_palettes/pal_452.pal b/sa1/graphics/obj_palettes/pal_452.pal new file mode 100644 index 0000000000..7d35c73e07 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_452.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 172 0 +255 0 0 +255 139 172 +255 255 255 +0 49 98 +0 16 189 +0 0 255 +0 0 0 +82 16 0 +172 32 0 +255 49 0 +82 65 0 +205 164 0 +255 222 0 +98 32 49 +238 82 148 diff --git a/sa1/graphics/obj_palettes/pal_453.pal b/sa1/graphics/obj_palettes/pal_453.pal new file mode 100644 index 0000000000..0af053e157 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_453.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_454.pal b/sa1/graphics/obj_palettes/pal_454.pal new file mode 100644 index 0000000000..6ce830e2ff --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_454.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 131 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_455.pal b/sa1/graphics/obj_palettes/pal_455.pal new file mode 100644 index 0000000000..a4e6440298 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_455.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 189 213 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_456.pal b/sa1/graphics/obj_palettes/pal_456.pal new file mode 100644 index 0000000000..09d30d5327 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_456.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +16 180 139 +0 0 0 +255 255 255 +246 164 189 +255 106 180 +255 246 0 +255 197 0 +255 148 0 +148 65 24 +123 246 255 +0 222 246 +24 172 238 +41 115 238 +24 49 139 +205 205 205 +164 230 82 diff --git a/sa1/graphics/obj_palettes/pal_457.pal b/sa1/graphics/obj_palettes/pal_457.pal new file mode 100644 index 0000000000..0925c91247 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_457.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +16 180 139 +0 0 0 +255 255 255 +246 164 189 +255 106 180 +255 246 0 +255 197 0 +255 148 0 +148 65 24 +123 246 255 +0 222 246 +24 172 238 +32 106 230 +24 49 139 +205 205 205 +164 230 82 diff --git a/sa1/graphics/obj_palettes/pal_458.pal b/sa1/graphics/obj_palettes/pal_458.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_458.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_palettes/pal_459.pal b/sa1/graphics/obj_palettes/pal_459.pal new file mode 100644 index 0000000000..0af053e157 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_459.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_460.pal b/sa1/graphics/obj_palettes/pal_460.pal new file mode 100644 index 0000000000..e36d775f60 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_460.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_461.pal b/sa1/graphics/obj_palettes/pal_461.pal new file mode 100644 index 0000000000..188ee93322 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_461.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 148 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 diff --git a/sa1/graphics/obj_palettes/pal_462.pal b/sa1/graphics/obj_palettes/pal_462.pal new file mode 100644 index 0000000000..b06826e997 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_462.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 164 +205 205 205 +189 0 0 +255 32 0 +115 0 0 +32 65 255 +255 255 156 +255 222 0 +156 82 0 +255 172 82 +0 172 16 +115 255 0 +32 32 32 +255 255 255 +115 115 115 +255 98 0 diff --git a/sa1/graphics/obj_palettes/pal_463.pal b/sa1/graphics/obj_palettes/pal_463.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/obj_palettes/pal_463.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f000.png b/sa1/graphics/obj_tiles/4bpp/a0000_f000.png new file mode 100644 index 0000000000..a8c43434dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f001.png b/sa1/graphics/obj_tiles/4bpp/a0000_f001.png new file mode 100644 index 0000000000..11676cf231 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f002.png b/sa1/graphics/obj_tiles/4bpp/a0000_f002.png new file mode 100644 index 0000000000..6ec415911c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f003.png b/sa1/graphics/obj_tiles/4bpp/a0000_f003.png new file mode 100644 index 0000000000..02ede01568 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f004.png b/sa1/graphics/obj_tiles/4bpp/a0000_f004.png new file mode 100644 index 0000000000..9e4b2fe773 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f005.png b/sa1/graphics/obj_tiles/4bpp/a0000_f005.png new file mode 100644 index 0000000000..b10b30a64d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f006.png b/sa1/graphics/obj_tiles/4bpp/a0000_f006.png new file mode 100644 index 0000000000..8d594d69dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f007.png b/sa1/graphics/obj_tiles/4bpp/a0000_f007.png new file mode 100644 index 0000000000..cf9caa98dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f008.png b/sa1/graphics/obj_tiles/4bpp/a0000_f008.png new file mode 100644 index 0000000000..ced04f5d42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f009.png b/sa1/graphics/obj_tiles/4bpp/a0000_f009.png new file mode 100644 index 0000000000..4a3656e493 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f010.png b/sa1/graphics/obj_tiles/4bpp/a0000_f010.png new file mode 100644 index 0000000000..d32f6f8462 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f011.png b/sa1/graphics/obj_tiles/4bpp/a0000_f011.png new file mode 100644 index 0000000000..1471458c1e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0000_f012.png b/sa1/graphics/obj_tiles/4bpp/a0000_f012.png new file mode 100644 index 0000000000..c6ac9c0253 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0000_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f000.png b/sa1/graphics/obj_tiles/4bpp/a0001_f000.png new file mode 100644 index 0000000000..aab3e43675 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f001.png b/sa1/graphics/obj_tiles/4bpp/a0001_f001.png new file mode 100644 index 0000000000..7d383d4d81 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f002.png b/sa1/graphics/obj_tiles/4bpp/a0001_f002.png new file mode 100644 index 0000000000..c36987d75f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f003.png b/sa1/graphics/obj_tiles/4bpp/a0001_f003.png new file mode 100644 index 0000000000..c39ae9fac9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f004.png b/sa1/graphics/obj_tiles/4bpp/a0001_f004.png new file mode 100644 index 0000000000..cd25776d39 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f005.png b/sa1/graphics/obj_tiles/4bpp/a0001_f005.png new file mode 100644 index 0000000000..c442e073d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f006.png b/sa1/graphics/obj_tiles/4bpp/a0001_f006.png new file mode 100644 index 0000000000..ec2a1e70bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f007.png b/sa1/graphics/obj_tiles/4bpp/a0001_f007.png new file mode 100644 index 0000000000..33d8dcccbe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f008.png b/sa1/graphics/obj_tiles/4bpp/a0001_f008.png new file mode 100644 index 0000000000..240baba012 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f009.png b/sa1/graphics/obj_tiles/4bpp/a0001_f009.png new file mode 100644 index 0000000000..0af848e9e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f010.png b/sa1/graphics/obj_tiles/4bpp/a0001_f010.png new file mode 100644 index 0000000000..020319002e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f011.png b/sa1/graphics/obj_tiles/4bpp/a0001_f011.png new file mode 100644 index 0000000000..40b48927a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f012.png b/sa1/graphics/obj_tiles/4bpp/a0001_f012.png new file mode 100644 index 0000000000..69b79c0c72 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f013.png b/sa1/graphics/obj_tiles/4bpp/a0001_f013.png new file mode 100644 index 0000000000..ffe1deac82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f014.png b/sa1/graphics/obj_tiles/4bpp/a0001_f014.png new file mode 100644 index 0000000000..fec9fa0242 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f015.png b/sa1/graphics/obj_tiles/4bpp/a0001_f015.png new file mode 100644 index 0000000000..a0580e860d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f016.png b/sa1/graphics/obj_tiles/4bpp/a0001_f016.png new file mode 100644 index 0000000000..1b5ef0efa1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0001_f017.png b/sa1/graphics/obj_tiles/4bpp/a0001_f017.png new file mode 100644 index 0000000000..f27291f321 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0001_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0002_f000.png b/sa1/graphics/obj_tiles/4bpp/a0002_f000.png new file mode 100644 index 0000000000..4c1f19028a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0002_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0002_f001.png b/sa1/graphics/obj_tiles/4bpp/a0002_f001.png new file mode 100644 index 0000000000..700be11b2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0002_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0002_f002.png b/sa1/graphics/obj_tiles/4bpp/a0002_f002.png new file mode 100644 index 0000000000..5cf3486664 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0002_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0002_f003.png b/sa1/graphics/obj_tiles/4bpp/a0002_f003.png new file mode 100644 index 0000000000..40ca033eb5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0002_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0002_f004.png b/sa1/graphics/obj_tiles/4bpp/a0002_f004.png new file mode 100644 index 0000000000..b21200802a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0002_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0003_f000.png b/sa1/graphics/obj_tiles/4bpp/a0003_f000.png new file mode 100644 index 0000000000..8159c1867a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0003_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0003_f001.png b/sa1/graphics/obj_tiles/4bpp/a0003_f001.png new file mode 100644 index 0000000000..ecc1b32697 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0003_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0003_f002.png b/sa1/graphics/obj_tiles/4bpp/a0003_f002.png new file mode 100644 index 0000000000..3562d01092 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0003_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0003_f003.png b/sa1/graphics/obj_tiles/4bpp/a0003_f003.png new file mode 100644 index 0000000000..ac8668d6ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0003_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f000.png b/sa1/graphics/obj_tiles/4bpp/a0004_f000.png new file mode 100644 index 0000000000..b7d56588c7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f001.png b/sa1/graphics/obj_tiles/4bpp/a0004_f001.png new file mode 100644 index 0000000000..95048b527f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f002.png b/sa1/graphics/obj_tiles/4bpp/a0004_f002.png new file mode 100644 index 0000000000..e5dfd440a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f003.png b/sa1/graphics/obj_tiles/4bpp/a0004_f003.png new file mode 100644 index 0000000000..a7ea2afcfd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f004.png b/sa1/graphics/obj_tiles/4bpp/a0004_f004.png new file mode 100644 index 0000000000..a2c9ac5d7d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f005.png b/sa1/graphics/obj_tiles/4bpp/a0004_f005.png new file mode 100644 index 0000000000..be4aa304ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f006.png b/sa1/graphics/obj_tiles/4bpp/a0004_f006.png new file mode 100644 index 0000000000..edb8eed864 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0004_f007.png b/sa1/graphics/obj_tiles/4bpp/a0004_f007.png new file mode 100644 index 0000000000..e6f409a4b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0004_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0005_f000.png b/sa1/graphics/obj_tiles/4bpp/a0005_f000.png new file mode 100644 index 0000000000..a86b57a446 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0005_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0005_f001.png b/sa1/graphics/obj_tiles/4bpp/a0005_f001.png new file mode 100644 index 0000000000..d734d3a11d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0005_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0005_f002.png b/sa1/graphics/obj_tiles/4bpp/a0005_f002.png new file mode 100644 index 0000000000..75e470aa3f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0005_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0005_f003.png b/sa1/graphics/obj_tiles/4bpp/a0005_f003.png new file mode 100644 index 0000000000..dd51cd9166 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0005_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0006_f000.png b/sa1/graphics/obj_tiles/4bpp/a0006_f000.png new file mode 100644 index 0000000000..99e71e0af2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0006_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0006_f001.png b/sa1/graphics/obj_tiles/4bpp/a0006_f001.png new file mode 100644 index 0000000000..c34300bf5b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0006_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0007_f000.png b/sa1/graphics/obj_tiles/4bpp/a0007_f000.png new file mode 100644 index 0000000000..a6bd0833b2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0007_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0007_f001.png b/sa1/graphics/obj_tiles/4bpp/a0007_f001.png new file mode 100644 index 0000000000..0e40d6f751 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0007_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0007_f002.png b/sa1/graphics/obj_tiles/4bpp/a0007_f002.png new file mode 100644 index 0000000000..e683b03eae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0007_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0007_f003.png b/sa1/graphics/obj_tiles/4bpp/a0007_f003.png new file mode 100644 index 0000000000..75d0e2b00d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0007_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0008_f000.png b/sa1/graphics/obj_tiles/4bpp/a0008_f000.png new file mode 100644 index 0000000000..ec7605a4bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0008_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0008_f001.png b/sa1/graphics/obj_tiles/4bpp/a0008_f001.png new file mode 100644 index 0000000000..cd9cf54c5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0008_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0008_f002.png b/sa1/graphics/obj_tiles/4bpp/a0008_f002.png new file mode 100644 index 0000000000..6c774c9508 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0008_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0008_f003.png b/sa1/graphics/obj_tiles/4bpp/a0008_f003.png new file mode 100644 index 0000000000..d032670d4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0008_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0009_f000.png b/sa1/graphics/obj_tiles/4bpp/a0009_f000.png new file mode 100644 index 0000000000..3899827b73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0009_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0009_f001.png b/sa1/graphics/obj_tiles/4bpp/a0009_f001.png new file mode 100644 index 0000000000..e3c4db36fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0009_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0009_f002.png b/sa1/graphics/obj_tiles/4bpp/a0009_f002.png new file mode 100644 index 0000000000..5ae07c3f6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0009_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f000.png b/sa1/graphics/obj_tiles/4bpp/a0010_f000.png new file mode 100644 index 0000000000..e0086a93d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f001.png b/sa1/graphics/obj_tiles/4bpp/a0010_f001.png new file mode 100644 index 0000000000..99d22017ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f002.png b/sa1/graphics/obj_tiles/4bpp/a0010_f002.png new file mode 100644 index 0000000000..95840313cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f003.png b/sa1/graphics/obj_tiles/4bpp/a0010_f003.png new file mode 100644 index 0000000000..793f595df1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f004.png b/sa1/graphics/obj_tiles/4bpp/a0010_f004.png new file mode 100644 index 0000000000..1fd604725e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f005.png b/sa1/graphics/obj_tiles/4bpp/a0010_f005.png new file mode 100644 index 0000000000..ab714dd8cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f006.png b/sa1/graphics/obj_tiles/4bpp/a0010_f006.png new file mode 100644 index 0000000000..d54a297fff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f007.png b/sa1/graphics/obj_tiles/4bpp/a0010_f007.png new file mode 100644 index 0000000000..60d7cfda59 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f008.png b/sa1/graphics/obj_tiles/4bpp/a0010_f008.png new file mode 100644 index 0000000000..3f14d831e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f009.png b/sa1/graphics/obj_tiles/4bpp/a0010_f009.png new file mode 100644 index 0000000000..d3fea95b16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f010.png b/sa1/graphics/obj_tiles/4bpp/a0010_f010.png new file mode 100644 index 0000000000..b3b81e2f6e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f011.png b/sa1/graphics/obj_tiles/4bpp/a0010_f011.png new file mode 100644 index 0000000000..9485a518e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f012.png b/sa1/graphics/obj_tiles/4bpp/a0010_f012.png new file mode 100644 index 0000000000..fe6515e43d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f013.png b/sa1/graphics/obj_tiles/4bpp/a0010_f013.png new file mode 100644 index 0000000000..3092954e9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0010_f014.png b/sa1/graphics/obj_tiles/4bpp/a0010_f014.png new file mode 100644 index 0000000000..70b9569c61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0010_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f000.png b/sa1/graphics/obj_tiles/4bpp/a0011_f000.png new file mode 100644 index 0000000000..81d863c683 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f001.png b/sa1/graphics/obj_tiles/4bpp/a0011_f001.png new file mode 100644 index 0000000000..ba718ee1d0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f002.png b/sa1/graphics/obj_tiles/4bpp/a0011_f002.png new file mode 100644 index 0000000000..ba28c9f93f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f003.png b/sa1/graphics/obj_tiles/4bpp/a0011_f003.png new file mode 100644 index 0000000000..710a2f6e51 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f004.png b/sa1/graphics/obj_tiles/4bpp/a0011_f004.png new file mode 100644 index 0000000000..64e8d11693 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f005.png b/sa1/graphics/obj_tiles/4bpp/a0011_f005.png new file mode 100644 index 0000000000..bea6daafeb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f006.png b/sa1/graphics/obj_tiles/4bpp/a0011_f006.png new file mode 100644 index 0000000000..02ccabaa8d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f007.png b/sa1/graphics/obj_tiles/4bpp/a0011_f007.png new file mode 100644 index 0000000000..4f75da97c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f008.png b/sa1/graphics/obj_tiles/4bpp/a0011_f008.png new file mode 100644 index 0000000000..a4a461cb43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f009.png b/sa1/graphics/obj_tiles/4bpp/a0011_f009.png new file mode 100644 index 0000000000..eefe224fa2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0011_f010.png b/sa1/graphics/obj_tiles/4bpp/a0011_f010.png new file mode 100644 index 0000000000..c9badd9041 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0011_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f000.png b/sa1/graphics/obj_tiles/4bpp/a0012_f000.png new file mode 100644 index 0000000000..92c53770dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f001.png b/sa1/graphics/obj_tiles/4bpp/a0012_f001.png new file mode 100644 index 0000000000..8e232380c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f002.png b/sa1/graphics/obj_tiles/4bpp/a0012_f002.png new file mode 100644 index 0000000000..fdce09ed91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f003.png b/sa1/graphics/obj_tiles/4bpp/a0012_f003.png new file mode 100644 index 0000000000..8bce61e04d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f004.png b/sa1/graphics/obj_tiles/4bpp/a0012_f004.png new file mode 100644 index 0000000000..96741da545 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f005.png b/sa1/graphics/obj_tiles/4bpp/a0012_f005.png new file mode 100644 index 0000000000..4edc51c781 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f006.png b/sa1/graphics/obj_tiles/4bpp/a0012_f006.png new file mode 100644 index 0000000000..d95e3a9313 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f007.png b/sa1/graphics/obj_tiles/4bpp/a0012_f007.png new file mode 100644 index 0000000000..aaf4848b57 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0012_f008.png b/sa1/graphics/obj_tiles/4bpp/a0012_f008.png new file mode 100644 index 0000000000..340a32cfe3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0012_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f000.png b/sa1/graphics/obj_tiles/4bpp/a0013_f000.png new file mode 100644 index 0000000000..c0efbbed77 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f001.png b/sa1/graphics/obj_tiles/4bpp/a0013_f001.png new file mode 100644 index 0000000000..ca0e038c6b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f002.png b/sa1/graphics/obj_tiles/4bpp/a0013_f002.png new file mode 100644 index 0000000000..baa96210a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f003.png b/sa1/graphics/obj_tiles/4bpp/a0013_f003.png new file mode 100644 index 0000000000..6fa1989f74 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f004.png b/sa1/graphics/obj_tiles/4bpp/a0013_f004.png new file mode 100644 index 0000000000..eafa6ca848 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f005.png b/sa1/graphics/obj_tiles/4bpp/a0013_f005.png new file mode 100644 index 0000000000..10d6d9d399 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f006.png b/sa1/graphics/obj_tiles/4bpp/a0013_f006.png new file mode 100644 index 0000000000..eba1b60a47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f007.png b/sa1/graphics/obj_tiles/4bpp/a0013_f007.png new file mode 100644 index 0000000000..971912c7a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f008.png b/sa1/graphics/obj_tiles/4bpp/a0013_f008.png new file mode 100644 index 0000000000..4d80e108f8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0013_f009.png b/sa1/graphics/obj_tiles/4bpp/a0013_f009.png new file mode 100644 index 0000000000..c0efbbed77 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0013_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f000.png b/sa1/graphics/obj_tiles/4bpp/a0014_f000.png new file mode 100644 index 0000000000..5ba75589fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f001.png b/sa1/graphics/obj_tiles/4bpp/a0014_f001.png new file mode 100644 index 0000000000..2854bea1d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f002.png b/sa1/graphics/obj_tiles/4bpp/a0014_f002.png new file mode 100644 index 0000000000..f795521c79 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f003.png b/sa1/graphics/obj_tiles/4bpp/a0014_f003.png new file mode 100644 index 0000000000..c6532fcae0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f004.png b/sa1/graphics/obj_tiles/4bpp/a0014_f004.png new file mode 100644 index 0000000000..b102a32e67 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f005.png b/sa1/graphics/obj_tiles/4bpp/a0014_f005.png new file mode 100644 index 0000000000..e1a4eb46c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f006.png b/sa1/graphics/obj_tiles/4bpp/a0014_f006.png new file mode 100644 index 0000000000..5994bb1ef7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f007.png b/sa1/graphics/obj_tiles/4bpp/a0014_f007.png new file mode 100644 index 0000000000..541be930a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f008.png b/sa1/graphics/obj_tiles/4bpp/a0014_f008.png new file mode 100644 index 0000000000..a499caf13c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0014_f009.png b/sa1/graphics/obj_tiles/4bpp/a0014_f009.png new file mode 100644 index 0000000000..5ba75589fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0014_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0017_f000.png b/sa1/graphics/obj_tiles/4bpp/a0017_f000.png new file mode 100644 index 0000000000..b8aab50817 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0017_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0017_f001.png b/sa1/graphics/obj_tiles/4bpp/a0017_f001.png new file mode 100644 index 0000000000..119c22fb93 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0017_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f000.png b/sa1/graphics/obj_tiles/4bpp/a0018_f000.png new file mode 100644 index 0000000000..c08bad31de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f001.png b/sa1/graphics/obj_tiles/4bpp/a0018_f001.png new file mode 100644 index 0000000000..a7b3cf9450 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f002.png b/sa1/graphics/obj_tiles/4bpp/a0018_f002.png new file mode 100644 index 0000000000..7636b6c3ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f003.png b/sa1/graphics/obj_tiles/4bpp/a0018_f003.png new file mode 100644 index 0000000000..fd495f7c85 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f004.png b/sa1/graphics/obj_tiles/4bpp/a0018_f004.png new file mode 100644 index 0000000000..9cd97c0839 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f005.png b/sa1/graphics/obj_tiles/4bpp/a0018_f005.png new file mode 100644 index 0000000000..4c991353a2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f006.png b/sa1/graphics/obj_tiles/4bpp/a0018_f006.png new file mode 100644 index 0000000000..5aed5a7846 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0018_f007.png b/sa1/graphics/obj_tiles/4bpp/a0018_f007.png new file mode 100644 index 0000000000..8793af75dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0018_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0019_f000.png b/sa1/graphics/obj_tiles/4bpp/a0019_f000.png new file mode 100644 index 0000000000..2eb32e2cc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0019_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0019_f001.png b/sa1/graphics/obj_tiles/4bpp/a0019_f001.png new file mode 100644 index 0000000000..8d4d452f5c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0019_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0019_f002.png b/sa1/graphics/obj_tiles/4bpp/a0019_f002.png new file mode 100644 index 0000000000..05b4740473 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0019_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0019_f003.png b/sa1/graphics/obj_tiles/4bpp/a0019_f003.png new file mode 100644 index 0000000000..f57cd3a3fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0019_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0019_f004.png b/sa1/graphics/obj_tiles/4bpp/a0019_f004.png new file mode 100644 index 0000000000..5ce0016131 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0019_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0021_f000.png b/sa1/graphics/obj_tiles/4bpp/a0021_f000.png new file mode 100644 index 0000000000..f1b7958d17 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0021_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0021_f001.png b/sa1/graphics/obj_tiles/4bpp/a0021_f001.png new file mode 100644 index 0000000000..df5b65ff23 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0021_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0021_f002.png b/sa1/graphics/obj_tiles/4bpp/a0021_f002.png new file mode 100644 index 0000000000..7e576980d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0021_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0021_f003.png b/sa1/graphics/obj_tiles/4bpp/a0021_f003.png new file mode 100644 index 0000000000..9b0f998969 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0021_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0021_f004.png b/sa1/graphics/obj_tiles/4bpp/a0021_f004.png new file mode 100644 index 0000000000..ae48cf0271 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0021_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f000.png b/sa1/graphics/obj_tiles/4bpp/a0022_f000.png new file mode 100644 index 0000000000..73c9db962e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f001.png b/sa1/graphics/obj_tiles/4bpp/a0022_f001.png new file mode 100644 index 0000000000..d9ac197d71 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f002.png b/sa1/graphics/obj_tiles/4bpp/a0022_f002.png new file mode 100644 index 0000000000..4b56a73490 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f003.png b/sa1/graphics/obj_tiles/4bpp/a0022_f003.png new file mode 100644 index 0000000000..cdfe835d1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f004.png b/sa1/graphics/obj_tiles/4bpp/a0022_f004.png new file mode 100644 index 0000000000..10529d7b8d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f005.png b/sa1/graphics/obj_tiles/4bpp/a0022_f005.png new file mode 100644 index 0000000000..0cf0be1808 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f006.png b/sa1/graphics/obj_tiles/4bpp/a0022_f006.png new file mode 100644 index 0000000000..93f402929d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f007.png b/sa1/graphics/obj_tiles/4bpp/a0022_f007.png new file mode 100644 index 0000000000..340375f8d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f008.png b/sa1/graphics/obj_tiles/4bpp/a0022_f008.png new file mode 100644 index 0000000000..f4b75cbf99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f009.png b/sa1/graphics/obj_tiles/4bpp/a0022_f009.png new file mode 100644 index 0000000000..b3ce7163aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f010.png b/sa1/graphics/obj_tiles/4bpp/a0022_f010.png new file mode 100644 index 0000000000..8fced7c023 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f011.png b/sa1/graphics/obj_tiles/4bpp/a0022_f011.png new file mode 100644 index 0000000000..c195c96a34 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f012.png b/sa1/graphics/obj_tiles/4bpp/a0022_f012.png new file mode 100644 index 0000000000..205885ddd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f013.png b/sa1/graphics/obj_tiles/4bpp/a0022_f013.png new file mode 100644 index 0000000000..ea66cc7994 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0022_f014.png b/sa1/graphics/obj_tiles/4bpp/a0022_f014.png new file mode 100644 index 0000000000..47162050ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0022_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f000.png b/sa1/graphics/obj_tiles/4bpp/a0023_f000.png new file mode 100644 index 0000000000..8765a77d28 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f001.png b/sa1/graphics/obj_tiles/4bpp/a0023_f001.png new file mode 100644 index 0000000000..4f7587bbdf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f002.png b/sa1/graphics/obj_tiles/4bpp/a0023_f002.png new file mode 100644 index 0000000000..4d0752db9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f003.png b/sa1/graphics/obj_tiles/4bpp/a0023_f003.png new file mode 100644 index 0000000000..58d8db492b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f004.png b/sa1/graphics/obj_tiles/4bpp/a0023_f004.png new file mode 100644 index 0000000000..4ac8a802fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f005.png b/sa1/graphics/obj_tiles/4bpp/a0023_f005.png new file mode 100644 index 0000000000..d75cf1f13f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f006.png b/sa1/graphics/obj_tiles/4bpp/a0023_f006.png new file mode 100644 index 0000000000..32f0ea36da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f007.png b/sa1/graphics/obj_tiles/4bpp/a0023_f007.png new file mode 100644 index 0000000000..cf5e976390 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f008.png b/sa1/graphics/obj_tiles/4bpp/a0023_f008.png new file mode 100644 index 0000000000..187f146d36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f009.png b/sa1/graphics/obj_tiles/4bpp/a0023_f009.png new file mode 100644 index 0000000000..6172ae0aa9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f010.png b/sa1/graphics/obj_tiles/4bpp/a0023_f010.png new file mode 100644 index 0000000000..8a8525b0b4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f011.png b/sa1/graphics/obj_tiles/4bpp/a0023_f011.png new file mode 100644 index 0000000000..61ab80c476 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f012.png b/sa1/graphics/obj_tiles/4bpp/a0023_f012.png new file mode 100644 index 0000000000..8d2b8fd373 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f013.png b/sa1/graphics/obj_tiles/4bpp/a0023_f013.png new file mode 100644 index 0000000000..1bd05e6970 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f014.png b/sa1/graphics/obj_tiles/4bpp/a0023_f014.png new file mode 100644 index 0000000000..1e9d349efc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f015.png b/sa1/graphics/obj_tiles/4bpp/a0023_f015.png new file mode 100644 index 0000000000..7ec45345c7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0023_f016.png b/sa1/graphics/obj_tiles/4bpp/a0023_f016.png new file mode 100644 index 0000000000..66cda85535 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0023_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0024_f000.png b/sa1/graphics/obj_tiles/4bpp/a0024_f000.png new file mode 100644 index 0000000000..c188bef092 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0024_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0024_f001.png b/sa1/graphics/obj_tiles/4bpp/a0024_f001.png new file mode 100644 index 0000000000..214f80e08e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0024_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0024_f002.png b/sa1/graphics/obj_tiles/4bpp/a0024_f002.png new file mode 100644 index 0000000000..bb38ba5052 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0024_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0024_f003.png b/sa1/graphics/obj_tiles/4bpp/a0024_f003.png new file mode 100644 index 0000000000..2580110593 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0024_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0024_f004.png b/sa1/graphics/obj_tiles/4bpp/a0024_f004.png new file mode 100644 index 0000000000..f0decb6419 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0024_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0024_f005.png b/sa1/graphics/obj_tiles/4bpp/a0024_f005.png new file mode 100644 index 0000000000..7e156ed392 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0024_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0025_f000.png b/sa1/graphics/obj_tiles/4bpp/a0025_f000.png new file mode 100644 index 0000000000..7873b514d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0025_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0025_f001.png b/sa1/graphics/obj_tiles/4bpp/a0025_f001.png new file mode 100644 index 0000000000..f5a6060e91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0025_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0025_f002.png b/sa1/graphics/obj_tiles/4bpp/a0025_f002.png new file mode 100644 index 0000000000..c4e50050b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0025_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0025_f003.png b/sa1/graphics/obj_tiles/4bpp/a0025_f003.png new file mode 100644 index 0000000000..8da52f1a2c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0025_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f000.png b/sa1/graphics/obj_tiles/4bpp/a0026_f000.png new file mode 100644 index 0000000000..876bf0bd6c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f001.png b/sa1/graphics/obj_tiles/4bpp/a0026_f001.png new file mode 100644 index 0000000000..2bdeb9a364 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f002.png b/sa1/graphics/obj_tiles/4bpp/a0026_f002.png new file mode 100644 index 0000000000..5daf721f8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f003.png b/sa1/graphics/obj_tiles/4bpp/a0026_f003.png new file mode 100644 index 0000000000..d2fc192068 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f004.png b/sa1/graphics/obj_tiles/4bpp/a0026_f004.png new file mode 100644 index 0000000000..eeafc498e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f005.png b/sa1/graphics/obj_tiles/4bpp/a0026_f005.png new file mode 100644 index 0000000000..3905ec3b92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f006.png b/sa1/graphics/obj_tiles/4bpp/a0026_f006.png new file mode 100644 index 0000000000..f768885403 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f007.png b/sa1/graphics/obj_tiles/4bpp/a0026_f007.png new file mode 100644 index 0000000000..cf1e20bb13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0026_f008.png b/sa1/graphics/obj_tiles/4bpp/a0026_f008.png new file mode 100644 index 0000000000..f7501ea94d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0026_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f000.png b/sa1/graphics/obj_tiles/4bpp/a0027_f000.png new file mode 100644 index 0000000000..fc482f3fac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f001.png b/sa1/graphics/obj_tiles/4bpp/a0027_f001.png new file mode 100644 index 0000000000..4b4d2c3b70 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f002.png b/sa1/graphics/obj_tiles/4bpp/a0027_f002.png new file mode 100644 index 0000000000..67ab6c9c9a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f003.png b/sa1/graphics/obj_tiles/4bpp/a0027_f003.png new file mode 100644 index 0000000000..0a00539015 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f004.png b/sa1/graphics/obj_tiles/4bpp/a0027_f004.png new file mode 100644 index 0000000000..2240da538b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f005.png b/sa1/graphics/obj_tiles/4bpp/a0027_f005.png new file mode 100644 index 0000000000..1d73d7f266 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f006.png b/sa1/graphics/obj_tiles/4bpp/a0027_f006.png new file mode 100644 index 0000000000..777c859fdf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f007.png b/sa1/graphics/obj_tiles/4bpp/a0027_f007.png new file mode 100644 index 0000000000..d77e1d1a0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f008.png b/sa1/graphics/obj_tiles/4bpp/a0027_f008.png new file mode 100644 index 0000000000..51d2846d92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f009.png b/sa1/graphics/obj_tiles/4bpp/a0027_f009.png new file mode 100644 index 0000000000..098e10f986 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f010.png b/sa1/graphics/obj_tiles/4bpp/a0027_f010.png new file mode 100644 index 0000000000..a687ef33e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f011.png b/sa1/graphics/obj_tiles/4bpp/a0027_f011.png new file mode 100644 index 0000000000..b3cc542b35 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f012.png b/sa1/graphics/obj_tiles/4bpp/a0027_f012.png new file mode 100644 index 0000000000..aa09c14561 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f013.png b/sa1/graphics/obj_tiles/4bpp/a0027_f013.png new file mode 100644 index 0000000000..c253c8e2ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f014.png b/sa1/graphics/obj_tiles/4bpp/a0027_f014.png new file mode 100644 index 0000000000..72eaf80207 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f015.png b/sa1/graphics/obj_tiles/4bpp/a0027_f015.png new file mode 100644 index 0000000000..f815f2bba5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f016.png b/sa1/graphics/obj_tiles/4bpp/a0027_f016.png new file mode 100644 index 0000000000..eea1cd9876 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0027_f017.png b/sa1/graphics/obj_tiles/4bpp/a0027_f017.png new file mode 100644 index 0000000000..1252e2b758 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0027_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f000.png b/sa1/graphics/obj_tiles/4bpp/a0028_f000.png new file mode 100644 index 0000000000..1c7b41af90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f001.png b/sa1/graphics/obj_tiles/4bpp/a0028_f001.png new file mode 100644 index 0000000000..7ec6c26cbc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f002.png b/sa1/graphics/obj_tiles/4bpp/a0028_f002.png new file mode 100644 index 0000000000..36996e4636 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f003.png b/sa1/graphics/obj_tiles/4bpp/a0028_f003.png new file mode 100644 index 0000000000..4eb2f41a18 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f004.png b/sa1/graphics/obj_tiles/4bpp/a0028_f004.png new file mode 100644 index 0000000000..33aaf69dec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f005.png b/sa1/graphics/obj_tiles/4bpp/a0028_f005.png new file mode 100644 index 0000000000..7d4bb6b835 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f006.png b/sa1/graphics/obj_tiles/4bpp/a0028_f006.png new file mode 100644 index 0000000000..67ec145ca7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f007.png b/sa1/graphics/obj_tiles/4bpp/a0028_f007.png new file mode 100644 index 0000000000..9c8fcbad1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f008.png b/sa1/graphics/obj_tiles/4bpp/a0028_f008.png new file mode 100644 index 0000000000..32a3681cf5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f009.png b/sa1/graphics/obj_tiles/4bpp/a0028_f009.png new file mode 100644 index 0000000000..0284f6e0de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f010.png b/sa1/graphics/obj_tiles/4bpp/a0028_f010.png new file mode 100644 index 0000000000..5d033d1c99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f011.png b/sa1/graphics/obj_tiles/4bpp/a0028_f011.png new file mode 100644 index 0000000000..da4792a699 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f012.png b/sa1/graphics/obj_tiles/4bpp/a0028_f012.png new file mode 100644 index 0000000000..8bc14b09c1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f013.png b/sa1/graphics/obj_tiles/4bpp/a0028_f013.png new file mode 100644 index 0000000000..b8fcf7c032 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f014.png b/sa1/graphics/obj_tiles/4bpp/a0028_f014.png new file mode 100644 index 0000000000..8a9b10a069 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0028_f015.png b/sa1/graphics/obj_tiles/4bpp/a0028_f015.png new file mode 100644 index 0000000000..06780a282d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0028_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0029_f000.png b/sa1/graphics/obj_tiles/4bpp/a0029_f000.png new file mode 100644 index 0000000000..3543994d75 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0029_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0029_f001.png b/sa1/graphics/obj_tiles/4bpp/a0029_f001.png new file mode 100644 index 0000000000..22d2ce24a6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0029_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0029_f002.png b/sa1/graphics/obj_tiles/4bpp/a0029_f002.png new file mode 100644 index 0000000000..e52b748c13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0029_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f000.png b/sa1/graphics/obj_tiles/4bpp/a0030_f000.png new file mode 100644 index 0000000000..634a81ae7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f001.png b/sa1/graphics/obj_tiles/4bpp/a0030_f001.png new file mode 100644 index 0000000000..4289567117 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f002.png b/sa1/graphics/obj_tiles/4bpp/a0030_f002.png new file mode 100644 index 0000000000..ee7bbdf2fc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f003.png b/sa1/graphics/obj_tiles/4bpp/a0030_f003.png new file mode 100644 index 0000000000..4444a6cdd0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f004.png b/sa1/graphics/obj_tiles/4bpp/a0030_f004.png new file mode 100644 index 0000000000..1ce3128df5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f005.png b/sa1/graphics/obj_tiles/4bpp/a0030_f005.png new file mode 100644 index 0000000000..464689ae3a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f006.png b/sa1/graphics/obj_tiles/4bpp/a0030_f006.png new file mode 100644 index 0000000000..37db75964e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f007.png b/sa1/graphics/obj_tiles/4bpp/a0030_f007.png new file mode 100644 index 0000000000..bedbd4cb0d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f008.png b/sa1/graphics/obj_tiles/4bpp/a0030_f008.png new file mode 100644 index 0000000000..0150eb02b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f009.png b/sa1/graphics/obj_tiles/4bpp/a0030_f009.png new file mode 100644 index 0000000000..c2b26c5631 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0030_f010.png b/sa1/graphics/obj_tiles/4bpp/a0030_f010.png new file mode 100644 index 0000000000..89030b1ec0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0030_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f000.png b/sa1/graphics/obj_tiles/4bpp/a0031_f000.png new file mode 100644 index 0000000000..777c859fdf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f001.png b/sa1/graphics/obj_tiles/4bpp/a0031_f001.png new file mode 100644 index 0000000000..67ec145ca7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f002.png b/sa1/graphics/obj_tiles/4bpp/a0031_f002.png new file mode 100644 index 0000000000..84918241d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f003.png b/sa1/graphics/obj_tiles/4bpp/a0031_f003.png new file mode 100644 index 0000000000..360ababb06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f004.png b/sa1/graphics/obj_tiles/4bpp/a0031_f004.png new file mode 100644 index 0000000000..231f17bfe4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f005.png b/sa1/graphics/obj_tiles/4bpp/a0031_f005.png new file mode 100644 index 0000000000..79b228a21b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f006.png b/sa1/graphics/obj_tiles/4bpp/a0031_f006.png new file mode 100644 index 0000000000..2901f1a10c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f007.png b/sa1/graphics/obj_tiles/4bpp/a0031_f007.png new file mode 100644 index 0000000000..c2f3cc99ec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f008.png b/sa1/graphics/obj_tiles/4bpp/a0031_f008.png new file mode 100644 index 0000000000..e8fc7075bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f009.png b/sa1/graphics/obj_tiles/4bpp/a0031_f009.png new file mode 100644 index 0000000000..e0908c9ec8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f010.png b/sa1/graphics/obj_tiles/4bpp/a0031_f010.png new file mode 100644 index 0000000000..c22d150705 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f011.png b/sa1/graphics/obj_tiles/4bpp/a0031_f011.png new file mode 100644 index 0000000000..08ad44e557 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f012.png b/sa1/graphics/obj_tiles/4bpp/a0031_f012.png new file mode 100644 index 0000000000..32a3681cf5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0031_f013.png b/sa1/graphics/obj_tiles/4bpp/a0031_f013.png new file mode 100644 index 0000000000..a687ef33e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0031_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0032_f000.png b/sa1/graphics/obj_tiles/4bpp/a0032_f000.png new file mode 100644 index 0000000000..777c859fdf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0032_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0032_f001.png b/sa1/graphics/obj_tiles/4bpp/a0032_f001.png new file mode 100644 index 0000000000..67ec145ca7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0032_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0032_f002.png b/sa1/graphics/obj_tiles/4bpp/a0032_f002.png new file mode 100644 index 0000000000..84918241d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0032_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0032_f003.png b/sa1/graphics/obj_tiles/4bpp/a0032_f003.png new file mode 100644 index 0000000000..360ababb06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0032_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0032_f004.png b/sa1/graphics/obj_tiles/4bpp/a0032_f004.png new file mode 100644 index 0000000000..08ad44e557 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0032_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0032_f005.png b/sa1/graphics/obj_tiles/4bpp/a0032_f005.png new file mode 100644 index 0000000000..32a3681cf5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0032_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0032_f006.png b/sa1/graphics/obj_tiles/4bpp/a0032_f006.png new file mode 100644 index 0000000000..a687ef33e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0032_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0033_f000.png b/sa1/graphics/obj_tiles/4bpp/a0033_f000.png new file mode 100644 index 0000000000..d9435a2dac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0033_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0033_f001.png b/sa1/graphics/obj_tiles/4bpp/a0033_f001.png new file mode 100644 index 0000000000..95e34e8b00 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0033_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0033_f002.png b/sa1/graphics/obj_tiles/4bpp/a0033_f002.png new file mode 100644 index 0000000000..94c6ce1636 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0033_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f000.png b/sa1/graphics/obj_tiles/4bpp/a0034_f000.png new file mode 100644 index 0000000000..ba3eeb4476 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f001.png b/sa1/graphics/obj_tiles/4bpp/a0034_f001.png new file mode 100644 index 0000000000..cc69f36b65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f002.png b/sa1/graphics/obj_tiles/4bpp/a0034_f002.png new file mode 100644 index 0000000000..865a0170e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f003.png b/sa1/graphics/obj_tiles/4bpp/a0034_f003.png new file mode 100644 index 0000000000..dc36d0b1fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f004.png b/sa1/graphics/obj_tiles/4bpp/a0034_f004.png new file mode 100644 index 0000000000..9c20ee862f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f005.png b/sa1/graphics/obj_tiles/4bpp/a0034_f005.png new file mode 100644 index 0000000000..711237e1aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f006.png b/sa1/graphics/obj_tiles/4bpp/a0034_f006.png new file mode 100644 index 0000000000..aa2ad4b7f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0034_f007.png b/sa1/graphics/obj_tiles/4bpp/a0034_f007.png new file mode 100644 index 0000000000..c4f0046ea7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0034_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f000.png b/sa1/graphics/obj_tiles/4bpp/a0035_f000.png new file mode 100644 index 0000000000..3092954e9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f001.png b/sa1/graphics/obj_tiles/4bpp/a0035_f001.png new file mode 100644 index 0000000000..70b9569c61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f002.png b/sa1/graphics/obj_tiles/4bpp/a0035_f002.png new file mode 100644 index 0000000000..b35119c844 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f003.png b/sa1/graphics/obj_tiles/4bpp/a0035_f003.png new file mode 100644 index 0000000000..e6113ef333 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f004.png b/sa1/graphics/obj_tiles/4bpp/a0035_f004.png new file mode 100644 index 0000000000..a10899059d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f005.png b/sa1/graphics/obj_tiles/4bpp/a0035_f005.png new file mode 100644 index 0000000000..54102fe15a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f006.png b/sa1/graphics/obj_tiles/4bpp/a0035_f006.png new file mode 100644 index 0000000000..eb0cce549f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f007.png b/sa1/graphics/obj_tiles/4bpp/a0035_f007.png new file mode 100644 index 0000000000..5eeeda158d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f008.png b/sa1/graphics/obj_tiles/4bpp/a0035_f008.png new file mode 100644 index 0000000000..b11f23083d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0035_f009.png b/sa1/graphics/obj_tiles/4bpp/a0035_f009.png new file mode 100644 index 0000000000..8a938f1b30 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0035_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f000.png b/sa1/graphics/obj_tiles/4bpp/a0036_f000.png new file mode 100644 index 0000000000..f26b10f812 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f001.png b/sa1/graphics/obj_tiles/4bpp/a0036_f001.png new file mode 100644 index 0000000000..4227d04c7d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f002.png b/sa1/graphics/obj_tiles/4bpp/a0036_f002.png new file mode 100644 index 0000000000..b268f44fa5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f003.png b/sa1/graphics/obj_tiles/4bpp/a0036_f003.png new file mode 100644 index 0000000000..d059b51936 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f004.png b/sa1/graphics/obj_tiles/4bpp/a0036_f004.png new file mode 100644 index 0000000000..668d93ca52 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f005.png b/sa1/graphics/obj_tiles/4bpp/a0036_f005.png new file mode 100644 index 0000000000..15d3cfaf89 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f006.png b/sa1/graphics/obj_tiles/4bpp/a0036_f006.png new file mode 100644 index 0000000000..a21db67c40 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f007.png b/sa1/graphics/obj_tiles/4bpp/a0036_f007.png new file mode 100644 index 0000000000..8b6668841b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f008.png b/sa1/graphics/obj_tiles/4bpp/a0036_f008.png new file mode 100644 index 0000000000..73131098c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f009.png b/sa1/graphics/obj_tiles/4bpp/a0036_f009.png new file mode 100644 index 0000000000..30cf69d04c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f010.png b/sa1/graphics/obj_tiles/4bpp/a0036_f010.png new file mode 100644 index 0000000000..db6dd3e80c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f011.png b/sa1/graphics/obj_tiles/4bpp/a0036_f011.png new file mode 100644 index 0000000000..976d29c926 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f012.png b/sa1/graphics/obj_tiles/4bpp/a0036_f012.png new file mode 100644 index 0000000000..fc04330c5c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f013.png b/sa1/graphics/obj_tiles/4bpp/a0036_f013.png new file mode 100644 index 0000000000..6df611ca35 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f014.png b/sa1/graphics/obj_tiles/4bpp/a0036_f014.png new file mode 100644 index 0000000000..2c93a8fab0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f015.png b/sa1/graphics/obj_tiles/4bpp/a0036_f015.png new file mode 100644 index 0000000000..1cf13698bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f016.png b/sa1/graphics/obj_tiles/4bpp/a0036_f016.png new file mode 100644 index 0000000000..7e485bfba2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f017.png b/sa1/graphics/obj_tiles/4bpp/a0036_f017.png new file mode 100644 index 0000000000..aa436bab8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f018.png b/sa1/graphics/obj_tiles/4bpp/a0036_f018.png new file mode 100644 index 0000000000..ea1cdf5a26 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f019.png b/sa1/graphics/obj_tiles/4bpp/a0036_f019.png new file mode 100644 index 0000000000..437f708220 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f020.png b/sa1/graphics/obj_tiles/4bpp/a0036_f020.png new file mode 100644 index 0000000000..b63b259be5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f021.png b/sa1/graphics/obj_tiles/4bpp/a0036_f021.png new file mode 100644 index 0000000000..81eb82b085 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f022.png b/sa1/graphics/obj_tiles/4bpp/a0036_f022.png new file mode 100644 index 0000000000..a9959b5919 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0036_f023.png b/sa1/graphics/obj_tiles/4bpp/a0036_f023.png new file mode 100644 index 0000000000..6c206f0510 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0036_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f000.png b/sa1/graphics/obj_tiles/4bpp/a0037_f000.png new file mode 100644 index 0000000000..bab7ae613d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f001.png b/sa1/graphics/obj_tiles/4bpp/a0037_f001.png new file mode 100644 index 0000000000..0ba7d55bfa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f002.png b/sa1/graphics/obj_tiles/4bpp/a0037_f002.png new file mode 100644 index 0000000000..6103eb93cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f003.png b/sa1/graphics/obj_tiles/4bpp/a0037_f003.png new file mode 100644 index 0000000000..ab5bbb3600 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f004.png b/sa1/graphics/obj_tiles/4bpp/a0037_f004.png new file mode 100644 index 0000000000..3fd699af24 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f005.png b/sa1/graphics/obj_tiles/4bpp/a0037_f005.png new file mode 100644 index 0000000000..6b80a055da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f006.png b/sa1/graphics/obj_tiles/4bpp/a0037_f006.png new file mode 100644 index 0000000000..f36e25d403 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0037_f007.png b/sa1/graphics/obj_tiles/4bpp/a0037_f007.png new file mode 100644 index 0000000000..3eef807d8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0037_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0038_f000.png b/sa1/graphics/obj_tiles/4bpp/a0038_f000.png new file mode 100644 index 0000000000..49a0b2b701 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0038_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0038_f001.png b/sa1/graphics/obj_tiles/4bpp/a0038_f001.png new file mode 100644 index 0000000000..75e22c4870 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0038_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0038_f002.png b/sa1/graphics/obj_tiles/4bpp/a0038_f002.png new file mode 100644 index 0000000000..9f6d293834 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0038_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0038_f003.png b/sa1/graphics/obj_tiles/4bpp/a0038_f003.png new file mode 100644 index 0000000000..303357c37d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0038_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0038_f004.png b/sa1/graphics/obj_tiles/4bpp/a0038_f004.png new file mode 100644 index 0000000000..f3487f237e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0038_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0039_f000.png b/sa1/graphics/obj_tiles/4bpp/a0039_f000.png new file mode 100644 index 0000000000..d1b0089de6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0039_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0039_f001.png b/sa1/graphics/obj_tiles/4bpp/a0039_f001.png new file mode 100644 index 0000000000..f80d23cc65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0039_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0039_f002.png b/sa1/graphics/obj_tiles/4bpp/a0039_f002.png new file mode 100644 index 0000000000..813f008c9d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0039_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0039_f003.png b/sa1/graphics/obj_tiles/4bpp/a0039_f003.png new file mode 100644 index 0000000000..467c56b7e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0039_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f000.png b/sa1/graphics/obj_tiles/4bpp/a0040_f000.png new file mode 100644 index 0000000000..193beeffd5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f001.png b/sa1/graphics/obj_tiles/4bpp/a0040_f001.png new file mode 100644 index 0000000000..da8286b661 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f002.png b/sa1/graphics/obj_tiles/4bpp/a0040_f002.png new file mode 100644 index 0000000000..930a4408d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f003.png b/sa1/graphics/obj_tiles/4bpp/a0040_f003.png new file mode 100644 index 0000000000..d7cd9cd13a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f004.png b/sa1/graphics/obj_tiles/4bpp/a0040_f004.png new file mode 100644 index 0000000000..400f13286f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f005.png b/sa1/graphics/obj_tiles/4bpp/a0040_f005.png new file mode 100644 index 0000000000..7ca5f4af56 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f006.png b/sa1/graphics/obj_tiles/4bpp/a0040_f006.png new file mode 100644 index 0000000000..79fad10694 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f007.png b/sa1/graphics/obj_tiles/4bpp/a0040_f007.png new file mode 100644 index 0000000000..b503bc4496 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f008.png b/sa1/graphics/obj_tiles/4bpp/a0040_f008.png new file mode 100644 index 0000000000..adc9761e6e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f009.png b/sa1/graphics/obj_tiles/4bpp/a0040_f009.png new file mode 100644 index 0000000000..76df571eb6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f010.png b/sa1/graphics/obj_tiles/4bpp/a0040_f010.png new file mode 100644 index 0000000000..ae175872b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f011.png b/sa1/graphics/obj_tiles/4bpp/a0040_f011.png new file mode 100644 index 0000000000..9ed0d38d4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f012.png b/sa1/graphics/obj_tiles/4bpp/a0040_f012.png new file mode 100644 index 0000000000..12dc84c873 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f013.png b/sa1/graphics/obj_tiles/4bpp/a0040_f013.png new file mode 100644 index 0000000000..03c2a79814 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f014.png b/sa1/graphics/obj_tiles/4bpp/a0040_f014.png new file mode 100644 index 0000000000..24c8eb5d2d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f015.png b/sa1/graphics/obj_tiles/4bpp/a0040_f015.png new file mode 100644 index 0000000000..355a9847df Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f016.png b/sa1/graphics/obj_tiles/4bpp/a0040_f016.png new file mode 100644 index 0000000000..7b92d5ba9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f017.png b/sa1/graphics/obj_tiles/4bpp/a0040_f017.png new file mode 100644 index 0000000000..9626b9207d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f018.png b/sa1/graphics/obj_tiles/4bpp/a0040_f018.png new file mode 100644 index 0000000000..750c7a1d32 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0040_f019.png b/sa1/graphics/obj_tiles/4bpp/a0040_f019.png new file mode 100644 index 0000000000..913e257b6c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0040_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0041_f000.png b/sa1/graphics/obj_tiles/4bpp/a0041_f000.png new file mode 100644 index 0000000000..e51f57172e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0041_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0041_f001.png b/sa1/graphics/obj_tiles/4bpp/a0041_f001.png new file mode 100644 index 0000000000..ec0cfb220b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0041_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0041_f002.png b/sa1/graphics/obj_tiles/4bpp/a0041_f002.png new file mode 100644 index 0000000000..9ea39ffb19 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0041_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0041_f003.png b/sa1/graphics/obj_tiles/4bpp/a0041_f003.png new file mode 100644 index 0000000000..4fc0762548 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0041_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0041_f004.png b/sa1/graphics/obj_tiles/4bpp/a0041_f004.png new file mode 100644 index 0000000000..21728c4276 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0041_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f000.png b/sa1/graphics/obj_tiles/4bpp/a0042_f000.png new file mode 100644 index 0000000000..ea93905a79 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f001.png b/sa1/graphics/obj_tiles/4bpp/a0042_f001.png new file mode 100644 index 0000000000..726eae46f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f002.png b/sa1/graphics/obj_tiles/4bpp/a0042_f002.png new file mode 100644 index 0000000000..189b767cc6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f003.png b/sa1/graphics/obj_tiles/4bpp/a0042_f003.png new file mode 100644 index 0000000000..d42a101147 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f004.png b/sa1/graphics/obj_tiles/4bpp/a0042_f004.png new file mode 100644 index 0000000000..8a518630ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f005.png b/sa1/graphics/obj_tiles/4bpp/a0042_f005.png new file mode 100644 index 0000000000..7913687324 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f006.png b/sa1/graphics/obj_tiles/4bpp/a0042_f006.png new file mode 100644 index 0000000000..1ad8586273 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0042_f007.png b/sa1/graphics/obj_tiles/4bpp/a0042_f007.png new file mode 100644 index 0000000000..56f21ed31b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0042_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0043_f000.png b/sa1/graphics/obj_tiles/4bpp/a0043_f000.png new file mode 100644 index 0000000000..49a0b2b701 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0043_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0043_f001.png b/sa1/graphics/obj_tiles/4bpp/a0043_f001.png new file mode 100644 index 0000000000..75e22c4870 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0043_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0043_f002.png b/sa1/graphics/obj_tiles/4bpp/a0043_f002.png new file mode 100644 index 0000000000..9f6d293834 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0043_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0044_f000.png b/sa1/graphics/obj_tiles/4bpp/a0044_f000.png new file mode 100644 index 0000000000..2bf0b0b1f8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0044_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0044_f001.png b/sa1/graphics/obj_tiles/4bpp/a0044_f001.png new file mode 100644 index 0000000000..ac661501bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0044_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0044_f002.png b/sa1/graphics/obj_tiles/4bpp/a0044_f002.png new file mode 100644 index 0000000000..348dd62ee9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0044_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0044_f003.png b/sa1/graphics/obj_tiles/4bpp/a0044_f003.png new file mode 100644 index 0000000000..1ed9a1eaf4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0044_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f000.png b/sa1/graphics/obj_tiles/4bpp/a0045_f000.png new file mode 100644 index 0000000000..eb002c82ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f001.png b/sa1/graphics/obj_tiles/4bpp/a0045_f001.png new file mode 100644 index 0000000000..0494468761 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f002.png b/sa1/graphics/obj_tiles/4bpp/a0045_f002.png new file mode 100644 index 0000000000..9c9805c279 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f003.png b/sa1/graphics/obj_tiles/4bpp/a0045_f003.png new file mode 100644 index 0000000000..cbe85f8b65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f004.png b/sa1/graphics/obj_tiles/4bpp/a0045_f004.png new file mode 100644 index 0000000000..685b528938 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f005.png b/sa1/graphics/obj_tiles/4bpp/a0045_f005.png new file mode 100644 index 0000000000..cb2a3e8626 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f006.png b/sa1/graphics/obj_tiles/4bpp/a0045_f006.png new file mode 100644 index 0000000000..9f24d1018a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f007.png b/sa1/graphics/obj_tiles/4bpp/a0045_f007.png new file mode 100644 index 0000000000..d3fea95b16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f008.png b/sa1/graphics/obj_tiles/4bpp/a0045_f008.png new file mode 100644 index 0000000000..b3b81e2f6e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f009.png b/sa1/graphics/obj_tiles/4bpp/a0045_f009.png new file mode 100644 index 0000000000..9485a518e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f010.png b/sa1/graphics/obj_tiles/4bpp/a0045_f010.png new file mode 100644 index 0000000000..fe6515e43d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f011.png b/sa1/graphics/obj_tiles/4bpp/a0045_f011.png new file mode 100644 index 0000000000..3092954e9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f012.png b/sa1/graphics/obj_tiles/4bpp/a0045_f012.png new file mode 100644 index 0000000000..70b9569c61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0045_f013.png b/sa1/graphics/obj_tiles/4bpp/a0045_f013.png new file mode 100644 index 0000000000..b35119c844 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0045_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f000.png b/sa1/graphics/obj_tiles/4bpp/a0049_f000.png new file mode 100644 index 0000000000..77abe6f339 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f001.png b/sa1/graphics/obj_tiles/4bpp/a0049_f001.png new file mode 100644 index 0000000000..58db301dbf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f002.png b/sa1/graphics/obj_tiles/4bpp/a0049_f002.png new file mode 100644 index 0000000000..eb2f439f91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f003.png b/sa1/graphics/obj_tiles/4bpp/a0049_f003.png new file mode 100644 index 0000000000..a29cd84202 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f004.png b/sa1/graphics/obj_tiles/4bpp/a0049_f004.png new file mode 100644 index 0000000000..eb002c82ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f005.png b/sa1/graphics/obj_tiles/4bpp/a0049_f005.png new file mode 100644 index 0000000000..0494468761 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f006.png b/sa1/graphics/obj_tiles/4bpp/a0049_f006.png new file mode 100644 index 0000000000..9c9805c279 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f007.png b/sa1/graphics/obj_tiles/4bpp/a0049_f007.png new file mode 100644 index 0000000000..e3c4db36fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f008.png b/sa1/graphics/obj_tiles/4bpp/a0049_f008.png new file mode 100644 index 0000000000..5ae07c3f6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0049_f009.png b/sa1/graphics/obj_tiles/4bpp/a0049_f009.png new file mode 100644 index 0000000000..3899827b73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0049_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f000.png b/sa1/graphics/obj_tiles/4bpp/a0050_f000.png new file mode 100644 index 0000000000..863149ead6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f001.png b/sa1/graphics/obj_tiles/4bpp/a0050_f001.png new file mode 100644 index 0000000000..47e295932b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f002.png b/sa1/graphics/obj_tiles/4bpp/a0050_f002.png new file mode 100644 index 0000000000..de26482128 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f003.png b/sa1/graphics/obj_tiles/4bpp/a0050_f003.png new file mode 100644 index 0000000000..fb1567ba83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f004.png b/sa1/graphics/obj_tiles/4bpp/a0050_f004.png new file mode 100644 index 0000000000..ad3b57e798 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f005.png b/sa1/graphics/obj_tiles/4bpp/a0050_f005.png new file mode 100644 index 0000000000..c0a6599e15 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f006.png b/sa1/graphics/obj_tiles/4bpp/a0050_f006.png new file mode 100644 index 0000000000..2db991bab2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f007.png b/sa1/graphics/obj_tiles/4bpp/a0050_f007.png new file mode 100644 index 0000000000..2c251ae39b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f008.png b/sa1/graphics/obj_tiles/4bpp/a0050_f008.png new file mode 100644 index 0000000000..ec7605a4bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f009.png b/sa1/graphics/obj_tiles/4bpp/a0050_f009.png new file mode 100644 index 0000000000..cd9cf54c5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f010.png b/sa1/graphics/obj_tiles/4bpp/a0050_f010.png new file mode 100644 index 0000000000..6c774c9508 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f011.png b/sa1/graphics/obj_tiles/4bpp/a0050_f011.png new file mode 100644 index 0000000000..d032670d4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f012.png b/sa1/graphics/obj_tiles/4bpp/a0050_f012.png new file mode 100644 index 0000000000..f77452557c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f013.png b/sa1/graphics/obj_tiles/4bpp/a0050_f013.png new file mode 100644 index 0000000000..e4fd61f835 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f014.png b/sa1/graphics/obj_tiles/4bpp/a0050_f014.png new file mode 100644 index 0000000000..646c6b4682 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f015.png b/sa1/graphics/obj_tiles/4bpp/a0050_f015.png new file mode 100644 index 0000000000..4d31db28b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f016.png b/sa1/graphics/obj_tiles/4bpp/a0050_f016.png new file mode 100644 index 0000000000..39283bdb80 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f017.png b/sa1/graphics/obj_tiles/4bpp/a0050_f017.png new file mode 100644 index 0000000000..1c4efa9b30 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f018.png b/sa1/graphics/obj_tiles/4bpp/a0050_f018.png new file mode 100644 index 0000000000..255ec34968 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0050_f019.png b/sa1/graphics/obj_tiles/4bpp/a0050_f019.png new file mode 100644 index 0000000000..1e7df34b8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0050_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0051_f000.png b/sa1/graphics/obj_tiles/4bpp/a0051_f000.png new file mode 100644 index 0000000000..c6e296a1a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0051_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0051_f001.png b/sa1/graphics/obj_tiles/4bpp/a0051_f001.png new file mode 100644 index 0000000000..d5f941ca84 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0051_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0051_f002.png b/sa1/graphics/obj_tiles/4bpp/a0051_f002.png new file mode 100644 index 0000000000..8d613eb678 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0051_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0051_f003.png b/sa1/graphics/obj_tiles/4bpp/a0051_f003.png new file mode 100644 index 0000000000..1827349a09 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0051_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f000.png b/sa1/graphics/obj_tiles/4bpp/a0052_f000.png new file mode 100644 index 0000000000..cab71620b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f001.png b/sa1/graphics/obj_tiles/4bpp/a0052_f001.png new file mode 100644 index 0000000000..8baed976b3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f002.png b/sa1/graphics/obj_tiles/4bpp/a0052_f002.png new file mode 100644 index 0000000000..e993f11559 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f003.png b/sa1/graphics/obj_tiles/4bpp/a0052_f003.png new file mode 100644 index 0000000000..c031b58926 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f004.png b/sa1/graphics/obj_tiles/4bpp/a0052_f004.png new file mode 100644 index 0000000000..508e8fab1e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f005.png b/sa1/graphics/obj_tiles/4bpp/a0052_f005.png new file mode 100644 index 0000000000..a9f64825bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f006.png b/sa1/graphics/obj_tiles/4bpp/a0052_f006.png new file mode 100644 index 0000000000..1b5153b393 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f007.png b/sa1/graphics/obj_tiles/4bpp/a0052_f007.png new file mode 100644 index 0000000000..cbd98b1e8a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f008.png b/sa1/graphics/obj_tiles/4bpp/a0052_f008.png new file mode 100644 index 0000000000..fe4ef86ab0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f009.png b/sa1/graphics/obj_tiles/4bpp/a0052_f009.png new file mode 100644 index 0000000000..2ab45fe545 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0052_f010.png b/sa1/graphics/obj_tiles/4bpp/a0052_f010.png new file mode 100644 index 0000000000..459383d971 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0052_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0053_f000.png b/sa1/graphics/obj_tiles/4bpp/a0053_f000.png new file mode 100644 index 0000000000..0b54293048 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0053_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0053_f001.png b/sa1/graphics/obj_tiles/4bpp/a0053_f001.png new file mode 100644 index 0000000000..d4d7372fc4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0053_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0053_f002.png b/sa1/graphics/obj_tiles/4bpp/a0053_f002.png new file mode 100644 index 0000000000..cde6ceae73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0053_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0053_f003.png b/sa1/graphics/obj_tiles/4bpp/a0053_f003.png new file mode 100644 index 0000000000..ac8668d6ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0053_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0053_f004.png b/sa1/graphics/obj_tiles/4bpp/a0053_f004.png new file mode 100644 index 0000000000..ecc1b32697 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0053_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0053_f005.png b/sa1/graphics/obj_tiles/4bpp/a0053_f005.png new file mode 100644 index 0000000000..8159c1867a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0053_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0055_f000.png b/sa1/graphics/obj_tiles/4bpp/a0055_f000.png new file mode 100644 index 0000000000..77abe6f339 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0055_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0055_f001.png b/sa1/graphics/obj_tiles/4bpp/a0055_f001.png new file mode 100644 index 0000000000..a29cd84202 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0055_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0055_f002.png b/sa1/graphics/obj_tiles/4bpp/a0055_f002.png new file mode 100644 index 0000000000..eb2f439f91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0055_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0055_f003.png b/sa1/graphics/obj_tiles/4bpp/a0055_f003.png new file mode 100644 index 0000000000..58db301dbf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0055_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0081_f000.png b/sa1/graphics/obj_tiles/4bpp/a0081_f000.png new file mode 100644 index 0000000000..a5d593ba4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0081_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0081_f001.png b/sa1/graphics/obj_tiles/4bpp/a0081_f001.png new file mode 100644 index 0000000000..c82b519cb6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0081_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0081_f002.png b/sa1/graphics/obj_tiles/4bpp/a0081_f002.png new file mode 100644 index 0000000000..2363c9ce3a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0081_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0081_f003.png b/sa1/graphics/obj_tiles/4bpp/a0081_f003.png new file mode 100644 index 0000000000..0eb4ade9fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0081_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0082_f000.png b/sa1/graphics/obj_tiles/4bpp/a0082_f000.png new file mode 100644 index 0000000000..5c3d434b9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0082_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0082_f001.png b/sa1/graphics/obj_tiles/4bpp/a0082_f001.png new file mode 100644 index 0000000000..6e831a9e7f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0082_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0082_f002.png b/sa1/graphics/obj_tiles/4bpp/a0082_f002.png new file mode 100644 index 0000000000..647605b679 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0082_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0082_f003.png b/sa1/graphics/obj_tiles/4bpp/a0082_f003.png new file mode 100644 index 0000000000..de3a24450d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0082_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0083_f000.png b/sa1/graphics/obj_tiles/4bpp/a0083_f000.png new file mode 100644 index 0000000000..b424be993a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0083_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0083_f001.png b/sa1/graphics/obj_tiles/4bpp/a0083_f001.png new file mode 100644 index 0000000000..e8621f9487 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0083_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0083_f002.png b/sa1/graphics/obj_tiles/4bpp/a0083_f002.png new file mode 100644 index 0000000000..a43221f08d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0083_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0083_f003.png b/sa1/graphics/obj_tiles/4bpp/a0083_f003.png new file mode 100644 index 0000000000..f0c279cc2b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0083_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0084_f000.png b/sa1/graphics/obj_tiles/4bpp/a0084_f000.png new file mode 100644 index 0000000000..33a333a909 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0084_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0084_f001.png b/sa1/graphics/obj_tiles/4bpp/a0084_f001.png new file mode 100644 index 0000000000..aeca79d65b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0084_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0084_f002.png b/sa1/graphics/obj_tiles/4bpp/a0084_f002.png new file mode 100644 index 0000000000..935682dfc7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0084_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0084_f003.png b/sa1/graphics/obj_tiles/4bpp/a0084_f003.png new file mode 100644 index 0000000000..52fb60b170 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0084_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0085_f000.png b/sa1/graphics/obj_tiles/4bpp/a0085_f000.png new file mode 100644 index 0000000000..274b06e495 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0085_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0085_f001.png b/sa1/graphics/obj_tiles/4bpp/a0085_f001.png new file mode 100644 index 0000000000..d80536cf9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0085_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0086_f000.png b/sa1/graphics/obj_tiles/4bpp/a0086_f000.png new file mode 100644 index 0000000000..3092954e9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0086_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0086_f001.png b/sa1/graphics/obj_tiles/4bpp/a0086_f001.png new file mode 100644 index 0000000000..70b9569c61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0086_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0086_f002.png b/sa1/graphics/obj_tiles/4bpp/a0086_f002.png new file mode 100644 index 0000000000..b35119c844 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0086_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0087_f000.png b/sa1/graphics/obj_tiles/4bpp/a0087_f000.png new file mode 100644 index 0000000000..e1cd3ee810 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0087_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0087_f001.png b/sa1/graphics/obj_tiles/4bpp/a0087_f001.png new file mode 100644 index 0000000000..9aff847cd4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0087_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0088_f000.png b/sa1/graphics/obj_tiles/4bpp/a0088_f000.png new file mode 100644 index 0000000000..820567b990 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0088_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0088_f001.png b/sa1/graphics/obj_tiles/4bpp/a0088_f001.png new file mode 100644 index 0000000000..3cc7e10910 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0088_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0088_f002.png b/sa1/graphics/obj_tiles/4bpp/a0088_f002.png new file mode 100644 index 0000000000..9f4239d88e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0088_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0088_f003.png b/sa1/graphics/obj_tiles/4bpp/a0088_f003.png new file mode 100644 index 0000000000..5f8bd396dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0088_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0088_f004.png b/sa1/graphics/obj_tiles/4bpp/a0088_f004.png new file mode 100644 index 0000000000..1fcc1d4f4c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0088_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0089_f000.png b/sa1/graphics/obj_tiles/4bpp/a0089_f000.png new file mode 100644 index 0000000000..6db6180e62 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0089_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0089_f001.png b/sa1/graphics/obj_tiles/4bpp/a0089_f001.png new file mode 100644 index 0000000000..ec29f3342d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0089_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0089_f002.png b/sa1/graphics/obj_tiles/4bpp/a0089_f002.png new file mode 100644 index 0000000000..766888e78e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0089_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0089_f003.png b/sa1/graphics/obj_tiles/4bpp/a0089_f003.png new file mode 100644 index 0000000000..deb6e0fe21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0089_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0089_f004.png b/sa1/graphics/obj_tiles/4bpp/a0089_f004.png new file mode 100644 index 0000000000..14d58d14dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0089_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0091_f000.png b/sa1/graphics/obj_tiles/4bpp/a0091_f000.png new file mode 100644 index 0000000000..33eae822d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0091_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0091_f001.png b/sa1/graphics/obj_tiles/4bpp/a0091_f001.png new file mode 100644 index 0000000000..ce1bf6789a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0091_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f000.png b/sa1/graphics/obj_tiles/4bpp/a0093_f000.png new file mode 100644 index 0000000000..ae49b88e6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f001.png b/sa1/graphics/obj_tiles/4bpp/a0093_f001.png new file mode 100644 index 0000000000..b3f8d936bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f002.png b/sa1/graphics/obj_tiles/4bpp/a0093_f002.png new file mode 100644 index 0000000000..4227d04c7d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f003.png b/sa1/graphics/obj_tiles/4bpp/a0093_f003.png new file mode 100644 index 0000000000..ece8930cc6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f004.png b/sa1/graphics/obj_tiles/4bpp/a0093_f004.png new file mode 100644 index 0000000000..baad8c65b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f005.png b/sa1/graphics/obj_tiles/4bpp/a0093_f005.png new file mode 100644 index 0000000000..d27a3ba65f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f006.png b/sa1/graphics/obj_tiles/4bpp/a0093_f006.png new file mode 100644 index 0000000000..37b8a197fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0093_f007.png b/sa1/graphics/obj_tiles/4bpp/a0093_f007.png new file mode 100644 index 0000000000..29ec9773ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0093_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0096_f000.png b/sa1/graphics/obj_tiles/4bpp/a0096_f000.png new file mode 100644 index 0000000000..d1b0089de6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0096_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0096_f001.png b/sa1/graphics/obj_tiles/4bpp/a0096_f001.png new file mode 100644 index 0000000000..f80d23cc65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0096_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0096_f002.png b/sa1/graphics/obj_tiles/4bpp/a0096_f002.png new file mode 100644 index 0000000000..813f008c9d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0096_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0096_f003.png b/sa1/graphics/obj_tiles/4bpp/a0096_f003.png new file mode 100644 index 0000000000..467c56b7e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0096_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0097_f000.png b/sa1/graphics/obj_tiles/4bpp/a0097_f000.png new file mode 100644 index 0000000000..f0a65c0147 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0097_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0097_f001.png b/sa1/graphics/obj_tiles/4bpp/a0097_f001.png new file mode 100644 index 0000000000..7a65bdb9f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0097_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0097_f002.png b/sa1/graphics/obj_tiles/4bpp/a0097_f002.png new file mode 100644 index 0000000000..f90509cedc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0097_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0098_f000.png b/sa1/graphics/obj_tiles/4bpp/a0098_f000.png new file mode 100644 index 0000000000..2e9b4ebe3c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0098_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f000.png b/sa1/graphics/obj_tiles/4bpp/a0099_f000.png new file mode 100644 index 0000000000..a3deccda0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f001.png b/sa1/graphics/obj_tiles/4bpp/a0099_f001.png new file mode 100644 index 0000000000..49fdda56ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f002.png b/sa1/graphics/obj_tiles/4bpp/a0099_f002.png new file mode 100644 index 0000000000..2dec9fb585 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f003.png b/sa1/graphics/obj_tiles/4bpp/a0099_f003.png new file mode 100644 index 0000000000..3f08e025ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f004.png b/sa1/graphics/obj_tiles/4bpp/a0099_f004.png new file mode 100644 index 0000000000..47c0ea3fc1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f005.png b/sa1/graphics/obj_tiles/4bpp/a0099_f005.png new file mode 100644 index 0000000000..2d1d54ce48 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f006.png b/sa1/graphics/obj_tiles/4bpp/a0099_f006.png new file mode 100644 index 0000000000..680eb72e9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f007.png b/sa1/graphics/obj_tiles/4bpp/a0099_f007.png new file mode 100644 index 0000000000..68ab5e33d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f008.png b/sa1/graphics/obj_tiles/4bpp/a0099_f008.png new file mode 100644 index 0000000000..6ae1889410 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f009.png b/sa1/graphics/obj_tiles/4bpp/a0099_f009.png new file mode 100644 index 0000000000..e0179a3774 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0099_f010.png b/sa1/graphics/obj_tiles/4bpp/a0099_f010.png new file mode 100644 index 0000000000..d4322d2ed5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0099_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f000.png b/sa1/graphics/obj_tiles/4bpp/a0100_f000.png new file mode 100644 index 0000000000..d96054dd11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f001.png b/sa1/graphics/obj_tiles/4bpp/a0100_f001.png new file mode 100644 index 0000000000..0321cc8972 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f002.png b/sa1/graphics/obj_tiles/4bpp/a0100_f002.png new file mode 100644 index 0000000000..8da1fdd397 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f003.png b/sa1/graphics/obj_tiles/4bpp/a0100_f003.png new file mode 100644 index 0000000000..46705e49b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f004.png b/sa1/graphics/obj_tiles/4bpp/a0100_f004.png new file mode 100644 index 0000000000..b5f1b91a0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f005.png b/sa1/graphics/obj_tiles/4bpp/a0100_f005.png new file mode 100644 index 0000000000..3cefbd9b84 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f006.png b/sa1/graphics/obj_tiles/4bpp/a0100_f006.png new file mode 100644 index 0000000000..c3b9eecbff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f007.png b/sa1/graphics/obj_tiles/4bpp/a0100_f007.png new file mode 100644 index 0000000000..27fe633508 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f008.png b/sa1/graphics/obj_tiles/4bpp/a0100_f008.png new file mode 100644 index 0000000000..5881ec6b35 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f009.png b/sa1/graphics/obj_tiles/4bpp/a0100_f009.png new file mode 100644 index 0000000000..9ed935d76d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f010.png b/sa1/graphics/obj_tiles/4bpp/a0100_f010.png new file mode 100644 index 0000000000..f46ba2c1f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f011.png b/sa1/graphics/obj_tiles/4bpp/a0100_f011.png new file mode 100644 index 0000000000..dd7e61f1d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f012.png b/sa1/graphics/obj_tiles/4bpp/a0100_f012.png new file mode 100644 index 0000000000..4e557da821 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f013.png b/sa1/graphics/obj_tiles/4bpp/a0100_f013.png new file mode 100644 index 0000000000..b733c74960 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f014.png b/sa1/graphics/obj_tiles/4bpp/a0100_f014.png new file mode 100644 index 0000000000..1a9792f771 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f015.png b/sa1/graphics/obj_tiles/4bpp/a0100_f015.png new file mode 100644 index 0000000000..1b1a80c3bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f016.png b/sa1/graphics/obj_tiles/4bpp/a0100_f016.png new file mode 100644 index 0000000000..eed05b6bce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f017.png b/sa1/graphics/obj_tiles/4bpp/a0100_f017.png new file mode 100644 index 0000000000..05aaf40190 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f018.png b/sa1/graphics/obj_tiles/4bpp/a0100_f018.png new file mode 100644 index 0000000000..e7082824fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f019.png b/sa1/graphics/obj_tiles/4bpp/a0100_f019.png new file mode 100644 index 0000000000..ae8981aa08 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f020.png b/sa1/graphics/obj_tiles/4bpp/a0100_f020.png new file mode 100644 index 0000000000..b77228521d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f021.png b/sa1/graphics/obj_tiles/4bpp/a0100_f021.png new file mode 100644 index 0000000000..b3c7f0e044 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f022.png b/sa1/graphics/obj_tiles/4bpp/a0100_f022.png new file mode 100644 index 0000000000..8a80dcfa2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f023.png b/sa1/graphics/obj_tiles/4bpp/a0100_f023.png new file mode 100644 index 0000000000..9d0e2fb686 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0100_f024.png b/sa1/graphics/obj_tiles/4bpp/a0100_f024.png new file mode 100644 index 0000000000..550437934a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0100_f024.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0101_f000.png b/sa1/graphics/obj_tiles/4bpp/a0101_f000.png new file mode 100644 index 0000000000..d687898987 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0101_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0101_f001.png b/sa1/graphics/obj_tiles/4bpp/a0101_f001.png new file mode 100644 index 0000000000..0f82e1c9d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0101_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0101_f002.png b/sa1/graphics/obj_tiles/4bpp/a0101_f002.png new file mode 100644 index 0000000000..34d1fc58f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0101_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0101_f003.png b/sa1/graphics/obj_tiles/4bpp/a0101_f003.png new file mode 100644 index 0000000000..fb8d606dff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0101_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0101_f004.png b/sa1/graphics/obj_tiles/4bpp/a0101_f004.png new file mode 100644 index 0000000000..7a1e96a11d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0101_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0101_f005.png b/sa1/graphics/obj_tiles/4bpp/a0101_f005.png new file mode 100644 index 0000000000..0e4f3e5db6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0101_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f000.png b/sa1/graphics/obj_tiles/4bpp/a0102_f000.png new file mode 100644 index 0000000000..c94740266e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f001.png b/sa1/graphics/obj_tiles/4bpp/a0102_f001.png new file mode 100644 index 0000000000..4ab01e5ac9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f002.png b/sa1/graphics/obj_tiles/4bpp/a0102_f002.png new file mode 100644 index 0000000000..0ec5e9d807 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f003.png b/sa1/graphics/obj_tiles/4bpp/a0102_f003.png new file mode 100644 index 0000000000..46c53b6210 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f004.png b/sa1/graphics/obj_tiles/4bpp/a0102_f004.png new file mode 100644 index 0000000000..f59a94017b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f005.png b/sa1/graphics/obj_tiles/4bpp/a0102_f005.png new file mode 100644 index 0000000000..195efa69f8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f006.png b/sa1/graphics/obj_tiles/4bpp/a0102_f006.png new file mode 100644 index 0000000000..613ff192f6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f007.png b/sa1/graphics/obj_tiles/4bpp/a0102_f007.png new file mode 100644 index 0000000000..16f72adfca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f008.png b/sa1/graphics/obj_tiles/4bpp/a0102_f008.png new file mode 100644 index 0000000000..e736831117 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f009.png b/sa1/graphics/obj_tiles/4bpp/a0102_f009.png new file mode 100644 index 0000000000..b8c47e41c5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f010.png b/sa1/graphics/obj_tiles/4bpp/a0102_f010.png new file mode 100644 index 0000000000..79c1f75db6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f011.png b/sa1/graphics/obj_tiles/4bpp/a0102_f011.png new file mode 100644 index 0000000000..5fde3c0348 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0102_f012.png b/sa1/graphics/obj_tiles/4bpp/a0102_f012.png new file mode 100644 index 0000000000..a3d7814d47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0102_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f000.png b/sa1/graphics/obj_tiles/4bpp/a0103_f000.png new file mode 100644 index 0000000000..4af82ccad7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f001.png b/sa1/graphics/obj_tiles/4bpp/a0103_f001.png new file mode 100644 index 0000000000..8d13fe56b4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f002.png b/sa1/graphics/obj_tiles/4bpp/a0103_f002.png new file mode 100644 index 0000000000..0187e15bdc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f003.png b/sa1/graphics/obj_tiles/4bpp/a0103_f003.png new file mode 100644 index 0000000000..93d57af893 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f004.png b/sa1/graphics/obj_tiles/4bpp/a0103_f004.png new file mode 100644 index 0000000000..aba4ef6b03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f005.png b/sa1/graphics/obj_tiles/4bpp/a0103_f005.png new file mode 100644 index 0000000000..7f577f216b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f006.png b/sa1/graphics/obj_tiles/4bpp/a0103_f006.png new file mode 100644 index 0000000000..f50b246be2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f007.png b/sa1/graphics/obj_tiles/4bpp/a0103_f007.png new file mode 100644 index 0000000000..448cd73fe5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f008.png b/sa1/graphics/obj_tiles/4bpp/a0103_f008.png new file mode 100644 index 0000000000..94cf80198f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f009.png b/sa1/graphics/obj_tiles/4bpp/a0103_f009.png new file mode 100644 index 0000000000..50c9173483 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0103_f010.png b/sa1/graphics/obj_tiles/4bpp/a0103_f010.png new file mode 100644 index 0000000000..7dde46dc0d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0103_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f000.png b/sa1/graphics/obj_tiles/4bpp/a0104_f000.png new file mode 100644 index 0000000000..c960265d7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f001.png b/sa1/graphics/obj_tiles/4bpp/a0104_f001.png new file mode 100644 index 0000000000..6ffa8fe828 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f002.png b/sa1/graphics/obj_tiles/4bpp/a0104_f002.png new file mode 100644 index 0000000000..52123d303f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f003.png b/sa1/graphics/obj_tiles/4bpp/a0104_f003.png new file mode 100644 index 0000000000..162febcbce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f004.png b/sa1/graphics/obj_tiles/4bpp/a0104_f004.png new file mode 100644 index 0000000000..04a4fa5616 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f005.png b/sa1/graphics/obj_tiles/4bpp/a0104_f005.png new file mode 100644 index 0000000000..21bc53c4b6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f006.png b/sa1/graphics/obj_tiles/4bpp/a0104_f006.png new file mode 100644 index 0000000000..b899fbed28 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f007.png b/sa1/graphics/obj_tiles/4bpp/a0104_f007.png new file mode 100644 index 0000000000..fe55cea160 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f008.png b/sa1/graphics/obj_tiles/4bpp/a0104_f008.png new file mode 100644 index 0000000000..3804fa17ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f009.png b/sa1/graphics/obj_tiles/4bpp/a0104_f009.png new file mode 100644 index 0000000000..8e5af3030c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0104_f010.png b/sa1/graphics/obj_tiles/4bpp/a0104_f010.png new file mode 100644 index 0000000000..83ee265de5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0104_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0105_f000.png b/sa1/graphics/obj_tiles/4bpp/a0105_f000.png new file mode 100644 index 0000000000..86e857bbb4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0105_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0105_f001.png b/sa1/graphics/obj_tiles/4bpp/a0105_f001.png new file mode 100644 index 0000000000..a4803a6832 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0105_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0106_f000.png b/sa1/graphics/obj_tiles/4bpp/a0106_f000.png new file mode 100644 index 0000000000..adf254f001 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0106_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0106_f001.png b/sa1/graphics/obj_tiles/4bpp/a0106_f001.png new file mode 100644 index 0000000000..ff8a5a4e02 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0106_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0106_f002.png b/sa1/graphics/obj_tiles/4bpp/a0106_f002.png new file mode 100644 index 0000000000..3ac55d7a1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0106_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0106_f003.png b/sa1/graphics/obj_tiles/4bpp/a0106_f003.png new file mode 100644 index 0000000000..ea18268226 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0106_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f000.png b/sa1/graphics/obj_tiles/4bpp/a0107_f000.png new file mode 100644 index 0000000000..f6ba0456e1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f001.png b/sa1/graphics/obj_tiles/4bpp/a0107_f001.png new file mode 100644 index 0000000000..8759a14b5e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f002.png b/sa1/graphics/obj_tiles/4bpp/a0107_f002.png new file mode 100644 index 0000000000..4bae816d5c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f003.png b/sa1/graphics/obj_tiles/4bpp/a0107_f003.png new file mode 100644 index 0000000000..e9ae61caa1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f004.png b/sa1/graphics/obj_tiles/4bpp/a0107_f004.png new file mode 100644 index 0000000000..129e0e4a77 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f005.png b/sa1/graphics/obj_tiles/4bpp/a0107_f005.png new file mode 100644 index 0000000000..d88ee24728 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f006.png b/sa1/graphics/obj_tiles/4bpp/a0107_f006.png new file mode 100644 index 0000000000..5f606e823c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f007.png b/sa1/graphics/obj_tiles/4bpp/a0107_f007.png new file mode 100644 index 0000000000..01b69966fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f008.png b/sa1/graphics/obj_tiles/4bpp/a0107_f008.png new file mode 100644 index 0000000000..a3d96d17e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f009.png b/sa1/graphics/obj_tiles/4bpp/a0107_f009.png new file mode 100644 index 0000000000..cda87e4dde Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f010.png b/sa1/graphics/obj_tiles/4bpp/a0107_f010.png new file mode 100644 index 0000000000..2dee3efe5d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0107_f011.png b/sa1/graphics/obj_tiles/4bpp/a0107_f011.png new file mode 100644 index 0000000000..c4b7b9bafe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0107_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0108_f000.png b/sa1/graphics/obj_tiles/4bpp/a0108_f000.png new file mode 100644 index 0000000000..1d86e99a0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0108_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0108_f001.png b/sa1/graphics/obj_tiles/4bpp/a0108_f001.png new file mode 100644 index 0000000000..6c12d6aad5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0108_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0108_f002.png b/sa1/graphics/obj_tiles/4bpp/a0108_f002.png new file mode 100644 index 0000000000..1ad7afaee5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0108_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0108_f003.png b/sa1/graphics/obj_tiles/4bpp/a0108_f003.png new file mode 100644 index 0000000000..adf254f001 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0108_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f000.png b/sa1/graphics/obj_tiles/4bpp/a0109_f000.png new file mode 100644 index 0000000000..cb8c93e62a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f001.png b/sa1/graphics/obj_tiles/4bpp/a0109_f001.png new file mode 100644 index 0000000000..b25a76b93d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f002.png b/sa1/graphics/obj_tiles/4bpp/a0109_f002.png new file mode 100644 index 0000000000..56e4948a76 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f003.png b/sa1/graphics/obj_tiles/4bpp/a0109_f003.png new file mode 100644 index 0000000000..e80a0bfc32 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f004.png b/sa1/graphics/obj_tiles/4bpp/a0109_f004.png new file mode 100644 index 0000000000..e4812228e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f005.png b/sa1/graphics/obj_tiles/4bpp/a0109_f005.png new file mode 100644 index 0000000000..3ad2b4322e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f006.png b/sa1/graphics/obj_tiles/4bpp/a0109_f006.png new file mode 100644 index 0000000000..37fc2cd113 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f007.png b/sa1/graphics/obj_tiles/4bpp/a0109_f007.png new file mode 100644 index 0000000000..fbc85e5f0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f008.png b/sa1/graphics/obj_tiles/4bpp/a0109_f008.png new file mode 100644 index 0000000000..00cdfe7583 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f009.png b/sa1/graphics/obj_tiles/4bpp/a0109_f009.png new file mode 100644 index 0000000000..2e55394f49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f010.png b/sa1/graphics/obj_tiles/4bpp/a0109_f010.png new file mode 100644 index 0000000000..e8c1b11d34 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f011.png b/sa1/graphics/obj_tiles/4bpp/a0109_f011.png new file mode 100644 index 0000000000..e68dfbe12c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f012.png b/sa1/graphics/obj_tiles/4bpp/a0109_f012.png new file mode 100644 index 0000000000..c94740266e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f013.png b/sa1/graphics/obj_tiles/4bpp/a0109_f013.png new file mode 100644 index 0000000000..4ab01e5ac9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0109_f014.png b/sa1/graphics/obj_tiles/4bpp/a0109_f014.png new file mode 100644 index 0000000000..d53be3a2a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0109_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f000.png b/sa1/graphics/obj_tiles/4bpp/a0110_f000.png new file mode 100644 index 0000000000..244f0ed9c1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f001.png b/sa1/graphics/obj_tiles/4bpp/a0110_f001.png new file mode 100644 index 0000000000..3e12151c12 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f002.png b/sa1/graphics/obj_tiles/4bpp/a0110_f002.png new file mode 100644 index 0000000000..37577b52c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f003.png b/sa1/graphics/obj_tiles/4bpp/a0110_f003.png new file mode 100644 index 0000000000..17746550ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f004.png b/sa1/graphics/obj_tiles/4bpp/a0110_f004.png new file mode 100644 index 0000000000..8293f95672 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f005.png b/sa1/graphics/obj_tiles/4bpp/a0110_f005.png new file mode 100644 index 0000000000..ff61c9b82e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f006.png b/sa1/graphics/obj_tiles/4bpp/a0110_f006.png new file mode 100644 index 0000000000..a2383d8ade Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f007.png b/sa1/graphics/obj_tiles/4bpp/a0110_f007.png new file mode 100644 index 0000000000..ea7145c700 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f008.png b/sa1/graphics/obj_tiles/4bpp/a0110_f008.png new file mode 100644 index 0000000000..ae69ef9b90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f009.png b/sa1/graphics/obj_tiles/4bpp/a0110_f009.png new file mode 100644 index 0000000000..13fa889a81 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0110_f010.png b/sa1/graphics/obj_tiles/4bpp/a0110_f010.png new file mode 100644 index 0000000000..5a77cad49d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0110_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f000.png b/sa1/graphics/obj_tiles/4bpp/a0111_f000.png new file mode 100644 index 0000000000..47c0ea3fc1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f001.png b/sa1/graphics/obj_tiles/4bpp/a0111_f001.png new file mode 100644 index 0000000000..9570743201 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f002.png b/sa1/graphics/obj_tiles/4bpp/a0111_f002.png new file mode 100644 index 0000000000..8a0b3473f6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f003.png b/sa1/graphics/obj_tiles/4bpp/a0111_f003.png new file mode 100644 index 0000000000..8d1489d464 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f004.png b/sa1/graphics/obj_tiles/4bpp/a0111_f004.png new file mode 100644 index 0000000000..cc9ec665a5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f005.png b/sa1/graphics/obj_tiles/4bpp/a0111_f005.png new file mode 100644 index 0000000000..adce63d0ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f006.png b/sa1/graphics/obj_tiles/4bpp/a0111_f006.png new file mode 100644 index 0000000000..07b4b6f0a2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f007.png b/sa1/graphics/obj_tiles/4bpp/a0111_f007.png new file mode 100644 index 0000000000..f29510e8fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0111_f008.png b/sa1/graphics/obj_tiles/4bpp/a0111_f008.png new file mode 100644 index 0000000000..98e2240303 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0111_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f000.png b/sa1/graphics/obj_tiles/4bpp/a0112_f000.png new file mode 100644 index 0000000000..5985304b97 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f001.png b/sa1/graphics/obj_tiles/4bpp/a0112_f001.png new file mode 100644 index 0000000000..c43ab6f62f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f002.png b/sa1/graphics/obj_tiles/4bpp/a0112_f002.png new file mode 100644 index 0000000000..1834cc0f78 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f003.png b/sa1/graphics/obj_tiles/4bpp/a0112_f003.png new file mode 100644 index 0000000000..61d09016b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f004.png b/sa1/graphics/obj_tiles/4bpp/a0112_f004.png new file mode 100644 index 0000000000..68322fecac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f005.png b/sa1/graphics/obj_tiles/4bpp/a0112_f005.png new file mode 100644 index 0000000000..40b2d518f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f006.png b/sa1/graphics/obj_tiles/4bpp/a0112_f006.png new file mode 100644 index 0000000000..9edc540459 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f007.png b/sa1/graphics/obj_tiles/4bpp/a0112_f007.png new file mode 100644 index 0000000000..75b97cb93a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f008.png b/sa1/graphics/obj_tiles/4bpp/a0112_f008.png new file mode 100644 index 0000000000..4edf68b303 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0112_f009.png b/sa1/graphics/obj_tiles/4bpp/a0112_f009.png new file mode 100644 index 0000000000..5985304b97 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0112_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f000.png b/sa1/graphics/obj_tiles/4bpp/a0113_f000.png new file mode 100644 index 0000000000..f5049bf71b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f001.png b/sa1/graphics/obj_tiles/4bpp/a0113_f001.png new file mode 100644 index 0000000000..6148a04f72 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f002.png b/sa1/graphics/obj_tiles/4bpp/a0113_f002.png new file mode 100644 index 0000000000..fd398494c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f003.png b/sa1/graphics/obj_tiles/4bpp/a0113_f003.png new file mode 100644 index 0000000000..efa85a5e6c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f004.png b/sa1/graphics/obj_tiles/4bpp/a0113_f004.png new file mode 100644 index 0000000000..1afa1ffc9d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f005.png b/sa1/graphics/obj_tiles/4bpp/a0113_f005.png new file mode 100644 index 0000000000..7f3ad5b96f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f006.png b/sa1/graphics/obj_tiles/4bpp/a0113_f006.png new file mode 100644 index 0000000000..bce5289010 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f007.png b/sa1/graphics/obj_tiles/4bpp/a0113_f007.png new file mode 100644 index 0000000000..632d42dd9f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0113_f008.png b/sa1/graphics/obj_tiles/4bpp/a0113_f008.png new file mode 100644 index 0000000000..47c0ea3fc1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0113_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0116_f000.png b/sa1/graphics/obj_tiles/4bpp/a0116_f000.png new file mode 100644 index 0000000000..fb02c6331a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0116_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0116_f001.png b/sa1/graphics/obj_tiles/4bpp/a0116_f001.png new file mode 100644 index 0000000000..367b0c4c97 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0116_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f000.png b/sa1/graphics/obj_tiles/4bpp/a0117_f000.png new file mode 100644 index 0000000000..d495d40105 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f001.png b/sa1/graphics/obj_tiles/4bpp/a0117_f001.png new file mode 100644 index 0000000000..9163cc9bdd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f002.png b/sa1/graphics/obj_tiles/4bpp/a0117_f002.png new file mode 100644 index 0000000000..77a2ca0620 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f003.png b/sa1/graphics/obj_tiles/4bpp/a0117_f003.png new file mode 100644 index 0000000000..808dfa1d64 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f004.png b/sa1/graphics/obj_tiles/4bpp/a0117_f004.png new file mode 100644 index 0000000000..1679e4abaf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f005.png b/sa1/graphics/obj_tiles/4bpp/a0117_f005.png new file mode 100644 index 0000000000..918f4c7e1c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f006.png b/sa1/graphics/obj_tiles/4bpp/a0117_f006.png new file mode 100644 index 0000000000..e35ba2acc6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0117_f007.png b/sa1/graphics/obj_tiles/4bpp/a0117_f007.png new file mode 100644 index 0000000000..477d267aaf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0117_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0118_f000.png b/sa1/graphics/obj_tiles/4bpp/a0118_f000.png new file mode 100644 index 0000000000..089cd7643a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0118_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0118_f001.png b/sa1/graphics/obj_tiles/4bpp/a0118_f001.png new file mode 100644 index 0000000000..4c524136e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0118_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0118_f002.png b/sa1/graphics/obj_tiles/4bpp/a0118_f002.png new file mode 100644 index 0000000000..27389fc934 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0118_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0118_f003.png b/sa1/graphics/obj_tiles/4bpp/a0118_f003.png new file mode 100644 index 0000000000..224cac04f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0118_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0118_f004.png b/sa1/graphics/obj_tiles/4bpp/a0118_f004.png new file mode 100644 index 0000000000..bf51ef02b4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0118_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0120_f000.png b/sa1/graphics/obj_tiles/4bpp/a0120_f000.png new file mode 100644 index 0000000000..47d351be6b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0120_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0120_f001.png b/sa1/graphics/obj_tiles/4bpp/a0120_f001.png new file mode 100644 index 0000000000..f4b7157f91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0120_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0120_f002.png b/sa1/graphics/obj_tiles/4bpp/a0120_f002.png new file mode 100644 index 0000000000..d955ec8803 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0120_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0120_f003.png b/sa1/graphics/obj_tiles/4bpp/a0120_f003.png new file mode 100644 index 0000000000..88a16a5bf0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0120_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0120_f004.png b/sa1/graphics/obj_tiles/4bpp/a0120_f004.png new file mode 100644 index 0000000000..f05aafd474 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0120_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f000.png b/sa1/graphics/obj_tiles/4bpp/a0121_f000.png new file mode 100644 index 0000000000..62e0928304 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f001.png b/sa1/graphics/obj_tiles/4bpp/a0121_f001.png new file mode 100644 index 0000000000..044355cf13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f002.png b/sa1/graphics/obj_tiles/4bpp/a0121_f002.png new file mode 100644 index 0000000000..18b5ae9492 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f003.png b/sa1/graphics/obj_tiles/4bpp/a0121_f003.png new file mode 100644 index 0000000000..4beef073f7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f004.png b/sa1/graphics/obj_tiles/4bpp/a0121_f004.png new file mode 100644 index 0000000000..86ab49e78b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f005.png b/sa1/graphics/obj_tiles/4bpp/a0121_f005.png new file mode 100644 index 0000000000..d0c946cc08 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f006.png b/sa1/graphics/obj_tiles/4bpp/a0121_f006.png new file mode 100644 index 0000000000..a5491fefc7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f007.png b/sa1/graphics/obj_tiles/4bpp/a0121_f007.png new file mode 100644 index 0000000000..3afbf29410 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f008.png b/sa1/graphics/obj_tiles/4bpp/a0121_f008.png new file mode 100644 index 0000000000..84fb3c5d4f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f009.png b/sa1/graphics/obj_tiles/4bpp/a0121_f009.png new file mode 100644 index 0000000000..4bb30eeb9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f010.png b/sa1/graphics/obj_tiles/4bpp/a0121_f010.png new file mode 100644 index 0000000000..e59c3f8d16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0121_f011.png b/sa1/graphics/obj_tiles/4bpp/a0121_f011.png new file mode 100644 index 0000000000..e61ef59dfd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0121_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f000.png b/sa1/graphics/obj_tiles/4bpp/a0122_f000.png new file mode 100644 index 0000000000..2068f94ac0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f001.png b/sa1/graphics/obj_tiles/4bpp/a0122_f001.png new file mode 100644 index 0000000000..36ab3bb85b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f002.png b/sa1/graphics/obj_tiles/4bpp/a0122_f002.png new file mode 100644 index 0000000000..66886b609b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f003.png b/sa1/graphics/obj_tiles/4bpp/a0122_f003.png new file mode 100644 index 0000000000..e53e137265 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f004.png b/sa1/graphics/obj_tiles/4bpp/a0122_f004.png new file mode 100644 index 0000000000..3c92e8ad88 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f005.png b/sa1/graphics/obj_tiles/4bpp/a0122_f005.png new file mode 100644 index 0000000000..c576882785 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f006.png b/sa1/graphics/obj_tiles/4bpp/a0122_f006.png new file mode 100644 index 0000000000..d97139fdc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f007.png b/sa1/graphics/obj_tiles/4bpp/a0122_f007.png new file mode 100644 index 0000000000..5acda46d50 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f008.png b/sa1/graphics/obj_tiles/4bpp/a0122_f008.png new file mode 100644 index 0000000000..9442f54494 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f009.png b/sa1/graphics/obj_tiles/4bpp/a0122_f009.png new file mode 100644 index 0000000000..46a3716922 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f010.png b/sa1/graphics/obj_tiles/4bpp/a0122_f010.png new file mode 100644 index 0000000000..7014531985 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f011.png b/sa1/graphics/obj_tiles/4bpp/a0122_f011.png new file mode 100644 index 0000000000..f993680a64 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f012.png b/sa1/graphics/obj_tiles/4bpp/a0122_f012.png new file mode 100644 index 0000000000..147a14ff0f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f013.png b/sa1/graphics/obj_tiles/4bpp/a0122_f013.png new file mode 100644 index 0000000000..61e70b77d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f014.png b/sa1/graphics/obj_tiles/4bpp/a0122_f014.png new file mode 100644 index 0000000000..a8af45b793 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f015.png b/sa1/graphics/obj_tiles/4bpp/a0122_f015.png new file mode 100644 index 0000000000..1c45f14379 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f016.png b/sa1/graphics/obj_tiles/4bpp/a0122_f016.png new file mode 100644 index 0000000000..030abc8842 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f017.png b/sa1/graphics/obj_tiles/4bpp/a0122_f017.png new file mode 100644 index 0000000000..67a3f593ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f018.png b/sa1/graphics/obj_tiles/4bpp/a0122_f018.png new file mode 100644 index 0000000000..e2689408c2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f019.png b/sa1/graphics/obj_tiles/4bpp/a0122_f019.png new file mode 100644 index 0000000000..eb002c4893 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f020.png b/sa1/graphics/obj_tiles/4bpp/a0122_f020.png new file mode 100644 index 0000000000..0ccb723fb1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f021.png b/sa1/graphics/obj_tiles/4bpp/a0122_f021.png new file mode 100644 index 0000000000..0ddfcae062 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f022.png b/sa1/graphics/obj_tiles/4bpp/a0122_f022.png new file mode 100644 index 0000000000..a90ee34209 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f023.png b/sa1/graphics/obj_tiles/4bpp/a0122_f023.png new file mode 100644 index 0000000000..8acf8300aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f024.png b/sa1/graphics/obj_tiles/4bpp/a0122_f024.png new file mode 100644 index 0000000000..01b972b312 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f024.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f025.png b/sa1/graphics/obj_tiles/4bpp/a0122_f025.png new file mode 100644 index 0000000000..b117d2d325 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f025.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f026.png b/sa1/graphics/obj_tiles/4bpp/a0122_f026.png new file mode 100644 index 0000000000..d35b914fe5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f026.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0122_f027.png b/sa1/graphics/obj_tiles/4bpp/a0122_f027.png new file mode 100644 index 0000000000..11b46631da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0122_f027.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f000.png b/sa1/graphics/obj_tiles/4bpp/a0123_f000.png new file mode 100644 index 0000000000..c88d6e2052 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f001.png b/sa1/graphics/obj_tiles/4bpp/a0123_f001.png new file mode 100644 index 0000000000..29eba4fe6e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f002.png b/sa1/graphics/obj_tiles/4bpp/a0123_f002.png new file mode 100644 index 0000000000..0462e1d581 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f003.png b/sa1/graphics/obj_tiles/4bpp/a0123_f003.png new file mode 100644 index 0000000000..f2f6a8a69b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f004.png b/sa1/graphics/obj_tiles/4bpp/a0123_f004.png new file mode 100644 index 0000000000..3daa498b58 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f005.png b/sa1/graphics/obj_tiles/4bpp/a0123_f005.png new file mode 100644 index 0000000000..bc5d8b4dd2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f006.png b/sa1/graphics/obj_tiles/4bpp/a0123_f006.png new file mode 100644 index 0000000000..2c78b37c25 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f007.png b/sa1/graphics/obj_tiles/4bpp/a0123_f007.png new file mode 100644 index 0000000000..53d09d63f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f008.png b/sa1/graphics/obj_tiles/4bpp/a0123_f008.png new file mode 100644 index 0000000000..13bc7da4e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f009.png b/sa1/graphics/obj_tiles/4bpp/a0123_f009.png new file mode 100644 index 0000000000..8ded1961cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f010.png b/sa1/graphics/obj_tiles/4bpp/a0123_f010.png new file mode 100644 index 0000000000..c76b63eb6b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f011.png b/sa1/graphics/obj_tiles/4bpp/a0123_f011.png new file mode 100644 index 0000000000..3c2256e4c2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0123_f012.png b/sa1/graphics/obj_tiles/4bpp/a0123_f012.png new file mode 100644 index 0000000000..34541b99e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0123_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0124_f000.png b/sa1/graphics/obj_tiles/4bpp/a0124_f000.png new file mode 100644 index 0000000000..cb8c93e62a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0124_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0124_f001.png b/sa1/graphics/obj_tiles/4bpp/a0124_f001.png new file mode 100644 index 0000000000..1cf0b2ed64 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0124_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0124_f002.png b/sa1/graphics/obj_tiles/4bpp/a0124_f002.png new file mode 100644 index 0000000000..e454d293c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0124_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0124_f003.png b/sa1/graphics/obj_tiles/4bpp/a0124_f003.png new file mode 100644 index 0000000000..6b4f70a3df Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0124_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f000.png b/sa1/graphics/obj_tiles/4bpp/a0125_f000.png new file mode 100644 index 0000000000..f9ab4cc885 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f001.png b/sa1/graphics/obj_tiles/4bpp/a0125_f001.png new file mode 100644 index 0000000000..d1746dfb3f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f002.png b/sa1/graphics/obj_tiles/4bpp/a0125_f002.png new file mode 100644 index 0000000000..e83689028c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f003.png b/sa1/graphics/obj_tiles/4bpp/a0125_f003.png new file mode 100644 index 0000000000..2d98a84105 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f004.png b/sa1/graphics/obj_tiles/4bpp/a0125_f004.png new file mode 100644 index 0000000000..6307d47758 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f005.png b/sa1/graphics/obj_tiles/4bpp/a0125_f005.png new file mode 100644 index 0000000000..e630eb99e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f006.png b/sa1/graphics/obj_tiles/4bpp/a0125_f006.png new file mode 100644 index 0000000000..d401cbe7e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f007.png b/sa1/graphics/obj_tiles/4bpp/a0125_f007.png new file mode 100644 index 0000000000..34e0f5d24c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0125_f008.png b/sa1/graphics/obj_tiles/4bpp/a0125_f008.png new file mode 100644 index 0000000000..946b5cd0b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0125_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f000.png b/sa1/graphics/obj_tiles/4bpp/a0126_f000.png new file mode 100644 index 0000000000..30df8cc822 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f001.png b/sa1/graphics/obj_tiles/4bpp/a0126_f001.png new file mode 100644 index 0000000000..56b92ec162 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f002.png b/sa1/graphics/obj_tiles/4bpp/a0126_f002.png new file mode 100644 index 0000000000..0d580c3fcb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f003.png b/sa1/graphics/obj_tiles/4bpp/a0126_f003.png new file mode 100644 index 0000000000..52a34a4c71 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f004.png b/sa1/graphics/obj_tiles/4bpp/a0126_f004.png new file mode 100644 index 0000000000..c995ae02c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f005.png b/sa1/graphics/obj_tiles/4bpp/a0126_f005.png new file mode 100644 index 0000000000..fe63a95d1a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f006.png b/sa1/graphics/obj_tiles/4bpp/a0126_f006.png new file mode 100644 index 0000000000..5d17904d6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f007.png b/sa1/graphics/obj_tiles/4bpp/a0126_f007.png new file mode 100644 index 0000000000..1ac66af5d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f008.png b/sa1/graphics/obj_tiles/4bpp/a0126_f008.png new file mode 100644 index 0000000000..3afe7e30e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f009.png b/sa1/graphics/obj_tiles/4bpp/a0126_f009.png new file mode 100644 index 0000000000..59c3b3987a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f010.png b/sa1/graphics/obj_tiles/4bpp/a0126_f010.png new file mode 100644 index 0000000000..818db7a983 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f011.png b/sa1/graphics/obj_tiles/4bpp/a0126_f011.png new file mode 100644 index 0000000000..b178be0243 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f012.png b/sa1/graphics/obj_tiles/4bpp/a0126_f012.png new file mode 100644 index 0000000000..22784e26ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f013.png b/sa1/graphics/obj_tiles/4bpp/a0126_f013.png new file mode 100644 index 0000000000..f8ff4c8330 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f014.png b/sa1/graphics/obj_tiles/4bpp/a0126_f014.png new file mode 100644 index 0000000000..5d931737c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f015.png b/sa1/graphics/obj_tiles/4bpp/a0126_f015.png new file mode 100644 index 0000000000..2580c1acf4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f016.png b/sa1/graphics/obj_tiles/4bpp/a0126_f016.png new file mode 100644 index 0000000000..52443a2004 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0126_f017.png b/sa1/graphics/obj_tiles/4bpp/a0126_f017.png new file mode 100644 index 0000000000..9007bc80e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0126_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f000.png b/sa1/graphics/obj_tiles/4bpp/a0127_f000.png new file mode 100644 index 0000000000..3e64a33596 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f001.png b/sa1/graphics/obj_tiles/4bpp/a0127_f001.png new file mode 100644 index 0000000000..7652044976 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f002.png b/sa1/graphics/obj_tiles/4bpp/a0127_f002.png new file mode 100644 index 0000000000..e278c60a61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f003.png b/sa1/graphics/obj_tiles/4bpp/a0127_f003.png new file mode 100644 index 0000000000..b35e7e8d06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f004.png b/sa1/graphics/obj_tiles/4bpp/a0127_f004.png new file mode 100644 index 0000000000..0f523f51f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f005.png b/sa1/graphics/obj_tiles/4bpp/a0127_f005.png new file mode 100644 index 0000000000..6b8fbd35ad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f006.png b/sa1/graphics/obj_tiles/4bpp/a0127_f006.png new file mode 100644 index 0000000000..44d25ac56b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f007.png b/sa1/graphics/obj_tiles/4bpp/a0127_f007.png new file mode 100644 index 0000000000..e21cafcbb7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f008.png b/sa1/graphics/obj_tiles/4bpp/a0127_f008.png new file mode 100644 index 0000000000..dc92f5e3a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f009.png b/sa1/graphics/obj_tiles/4bpp/a0127_f009.png new file mode 100644 index 0000000000..6f57f876a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f010.png b/sa1/graphics/obj_tiles/4bpp/a0127_f010.png new file mode 100644 index 0000000000..cef31690d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f011.png b/sa1/graphics/obj_tiles/4bpp/a0127_f011.png new file mode 100644 index 0000000000..c2f4fdc48f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f012.png b/sa1/graphics/obj_tiles/4bpp/a0127_f012.png new file mode 100644 index 0000000000..5867da8f03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f013.png b/sa1/graphics/obj_tiles/4bpp/a0127_f013.png new file mode 100644 index 0000000000..9a3db58e06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f014.png b/sa1/graphics/obj_tiles/4bpp/a0127_f014.png new file mode 100644 index 0000000000..a8b9807449 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0127_f015.png b/sa1/graphics/obj_tiles/4bpp/a0127_f015.png new file mode 100644 index 0000000000..6437934b73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0127_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0128_f000.png b/sa1/graphics/obj_tiles/4bpp/a0128_f000.png new file mode 100644 index 0000000000..c85ed81556 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0128_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0128_f001.png b/sa1/graphics/obj_tiles/4bpp/a0128_f001.png new file mode 100644 index 0000000000..efb33d48ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0128_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0128_f002.png b/sa1/graphics/obj_tiles/4bpp/a0128_f002.png new file mode 100644 index 0000000000..646446ff22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0128_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f000.png b/sa1/graphics/obj_tiles/4bpp/a0129_f000.png new file mode 100644 index 0000000000..0ac990b3c4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f001.png b/sa1/graphics/obj_tiles/4bpp/a0129_f001.png new file mode 100644 index 0000000000..3c29c13d82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f002.png b/sa1/graphics/obj_tiles/4bpp/a0129_f002.png new file mode 100644 index 0000000000..682e034d1e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f003.png b/sa1/graphics/obj_tiles/4bpp/a0129_f003.png new file mode 100644 index 0000000000..ef118a65e3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f004.png b/sa1/graphics/obj_tiles/4bpp/a0129_f004.png new file mode 100644 index 0000000000..933bd05b22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f005.png b/sa1/graphics/obj_tiles/4bpp/a0129_f005.png new file mode 100644 index 0000000000..91791f85b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f006.png b/sa1/graphics/obj_tiles/4bpp/a0129_f006.png new file mode 100644 index 0000000000..88373a0172 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f007.png b/sa1/graphics/obj_tiles/4bpp/a0129_f007.png new file mode 100644 index 0000000000..6bb276d7f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f008.png b/sa1/graphics/obj_tiles/4bpp/a0129_f008.png new file mode 100644 index 0000000000..1f428de8bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f009.png b/sa1/graphics/obj_tiles/4bpp/a0129_f009.png new file mode 100644 index 0000000000..4db8096396 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0129_f010.png b/sa1/graphics/obj_tiles/4bpp/a0129_f010.png new file mode 100644 index 0000000000..979c043a29 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0129_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f000.png b/sa1/graphics/obj_tiles/4bpp/a0130_f000.png new file mode 100644 index 0000000000..c995ae02c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f001.png b/sa1/graphics/obj_tiles/4bpp/a0130_f001.png new file mode 100644 index 0000000000..e64ac0a82a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f002.png b/sa1/graphics/obj_tiles/4bpp/a0130_f002.png new file mode 100644 index 0000000000..e4fc0ee12d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f003.png b/sa1/graphics/obj_tiles/4bpp/a0130_f003.png new file mode 100644 index 0000000000..a88eeb0d99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f004.png b/sa1/graphics/obj_tiles/4bpp/a0130_f004.png new file mode 100644 index 0000000000..f7e6f2a24d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f005.png b/sa1/graphics/obj_tiles/4bpp/a0130_f005.png new file mode 100644 index 0000000000..b014ad67ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f006.png b/sa1/graphics/obj_tiles/4bpp/a0130_f006.png new file mode 100644 index 0000000000..ff9b90b4b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f007.png b/sa1/graphics/obj_tiles/4bpp/a0130_f007.png new file mode 100644 index 0000000000..de81aa9fed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0130_f008.png b/sa1/graphics/obj_tiles/4bpp/a0130_f008.png new file mode 100644 index 0000000000..b7fa2ff5d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0130_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f000.png b/sa1/graphics/obj_tiles/4bpp/a0131_f000.png new file mode 100644 index 0000000000..953d35775d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f001.png b/sa1/graphics/obj_tiles/4bpp/a0131_f001.png new file mode 100644 index 0000000000..2bb963cd94 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f002.png b/sa1/graphics/obj_tiles/4bpp/a0131_f002.png new file mode 100644 index 0000000000..291307c0c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f003.png b/sa1/graphics/obj_tiles/4bpp/a0131_f003.png new file mode 100644 index 0000000000..5f61458b28 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f004.png b/sa1/graphics/obj_tiles/4bpp/a0131_f004.png new file mode 100644 index 0000000000..cbcb002b49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f005.png b/sa1/graphics/obj_tiles/4bpp/a0131_f005.png new file mode 100644 index 0000000000..524ca32773 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f006.png b/sa1/graphics/obj_tiles/4bpp/a0131_f006.png new file mode 100644 index 0000000000..35df1a4f6c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0131_f007.png b/sa1/graphics/obj_tiles/4bpp/a0131_f007.png new file mode 100644 index 0000000000..800cd79e13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0131_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f000.png b/sa1/graphics/obj_tiles/4bpp/a0132_f000.png new file mode 100644 index 0000000000..790163e51e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f001.png b/sa1/graphics/obj_tiles/4bpp/a0132_f001.png new file mode 100644 index 0000000000..ec33e426ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f002.png b/sa1/graphics/obj_tiles/4bpp/a0132_f002.png new file mode 100644 index 0000000000..ab06de5a4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f003.png b/sa1/graphics/obj_tiles/4bpp/a0132_f003.png new file mode 100644 index 0000000000..e064345cf8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f004.png b/sa1/graphics/obj_tiles/4bpp/a0132_f004.png new file mode 100644 index 0000000000..e33b18d576 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f005.png b/sa1/graphics/obj_tiles/4bpp/a0132_f005.png new file mode 100644 index 0000000000..5aa8b2be3b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f006.png b/sa1/graphics/obj_tiles/4bpp/a0132_f006.png new file mode 100644 index 0000000000..2d2df69ab7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f007.png b/sa1/graphics/obj_tiles/4bpp/a0132_f007.png new file mode 100644 index 0000000000..f0dc647944 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f008.png b/sa1/graphics/obj_tiles/4bpp/a0132_f008.png new file mode 100644 index 0000000000..ea7f6d3c55 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0132_f009.png b/sa1/graphics/obj_tiles/4bpp/a0132_f009.png new file mode 100644 index 0000000000..79893f7f21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0132_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f000.png b/sa1/graphics/obj_tiles/4bpp/a0133_f000.png new file mode 100644 index 0000000000..d706643cfc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f001.png b/sa1/graphics/obj_tiles/4bpp/a0133_f001.png new file mode 100644 index 0000000000..5aee5720b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f002.png b/sa1/graphics/obj_tiles/4bpp/a0133_f002.png new file mode 100644 index 0000000000..6bddb96aa1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f003.png b/sa1/graphics/obj_tiles/4bpp/a0133_f003.png new file mode 100644 index 0000000000..c36f879549 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f004.png b/sa1/graphics/obj_tiles/4bpp/a0133_f004.png new file mode 100644 index 0000000000..ce26be7505 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f005.png b/sa1/graphics/obj_tiles/4bpp/a0133_f005.png new file mode 100644 index 0000000000..7bd755d68f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f006.png b/sa1/graphics/obj_tiles/4bpp/a0133_f006.png new file mode 100644 index 0000000000..a60eeeed63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0133_f007.png b/sa1/graphics/obj_tiles/4bpp/a0133_f007.png new file mode 100644 index 0000000000..243af639d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0133_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f000.png b/sa1/graphics/obj_tiles/4bpp/a0134_f000.png new file mode 100644 index 0000000000..a9cb55867b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f001.png b/sa1/graphics/obj_tiles/4bpp/a0134_f001.png new file mode 100644 index 0000000000..341c05f576 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f002.png b/sa1/graphics/obj_tiles/4bpp/a0134_f002.png new file mode 100644 index 0000000000..c94740266e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f003.png b/sa1/graphics/obj_tiles/4bpp/a0134_f003.png new file mode 100644 index 0000000000..4ab01e5ac9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f004.png b/sa1/graphics/obj_tiles/4bpp/a0134_f004.png new file mode 100644 index 0000000000..d53be3a2a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f005.png b/sa1/graphics/obj_tiles/4bpp/a0134_f005.png new file mode 100644 index 0000000000..a0f2c30306 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f006.png b/sa1/graphics/obj_tiles/4bpp/a0134_f006.png new file mode 100644 index 0000000000..e728805128 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f007.png b/sa1/graphics/obj_tiles/4bpp/a0134_f007.png new file mode 100644 index 0000000000..21f894778e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f008.png b/sa1/graphics/obj_tiles/4bpp/a0134_f008.png new file mode 100644 index 0000000000..35b7537148 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f009.png b/sa1/graphics/obj_tiles/4bpp/a0134_f009.png new file mode 100644 index 0000000000..fd781f266e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f010.png b/sa1/graphics/obj_tiles/4bpp/a0134_f010.png new file mode 100644 index 0000000000..7d323f13f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f011.png b/sa1/graphics/obj_tiles/4bpp/a0134_f011.png new file mode 100644 index 0000000000..ac0351680e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f012.png b/sa1/graphics/obj_tiles/4bpp/a0134_f012.png new file mode 100644 index 0000000000..5fd468e32c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f013.png b/sa1/graphics/obj_tiles/4bpp/a0134_f013.png new file mode 100644 index 0000000000..1d06ea445c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f014.png b/sa1/graphics/obj_tiles/4bpp/a0134_f014.png new file mode 100644 index 0000000000..2635205f47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f015.png b/sa1/graphics/obj_tiles/4bpp/a0134_f015.png new file mode 100644 index 0000000000..a8d1c24f37 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f016.png b/sa1/graphics/obj_tiles/4bpp/a0134_f016.png new file mode 100644 index 0000000000..87e1248cc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0134_f017.png b/sa1/graphics/obj_tiles/4bpp/a0134_f017.png new file mode 100644 index 0000000000..4e7a87aa3e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0134_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f000.png b/sa1/graphics/obj_tiles/4bpp/a0135_f000.png new file mode 100644 index 0000000000..98653edc8d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f001.png b/sa1/graphics/obj_tiles/4bpp/a0135_f001.png new file mode 100644 index 0000000000..11fe516473 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f002.png b/sa1/graphics/obj_tiles/4bpp/a0135_f002.png new file mode 100644 index 0000000000..cd03f89c39 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f003.png b/sa1/graphics/obj_tiles/4bpp/a0135_f003.png new file mode 100644 index 0000000000..0c9e570f5d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f004.png b/sa1/graphics/obj_tiles/4bpp/a0135_f004.png new file mode 100644 index 0000000000..a50aa000ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f005.png b/sa1/graphics/obj_tiles/4bpp/a0135_f005.png new file mode 100644 index 0000000000..275a02629f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f006.png b/sa1/graphics/obj_tiles/4bpp/a0135_f006.png new file mode 100644 index 0000000000..37c00758bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f007.png b/sa1/graphics/obj_tiles/4bpp/a0135_f007.png new file mode 100644 index 0000000000..2b14baae66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f008.png b/sa1/graphics/obj_tiles/4bpp/a0135_f008.png new file mode 100644 index 0000000000..d09d70df9a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f009.png b/sa1/graphics/obj_tiles/4bpp/a0135_f009.png new file mode 100644 index 0000000000..2b8ff0f5f7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f010.png b/sa1/graphics/obj_tiles/4bpp/a0135_f010.png new file mode 100644 index 0000000000..e59fc0a017 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f011.png b/sa1/graphics/obj_tiles/4bpp/a0135_f011.png new file mode 100644 index 0000000000..c466ca61e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f012.png b/sa1/graphics/obj_tiles/4bpp/a0135_f012.png new file mode 100644 index 0000000000..8e4685f87a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f013.png b/sa1/graphics/obj_tiles/4bpp/a0135_f013.png new file mode 100644 index 0000000000..aa69d15eaf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f014.png b/sa1/graphics/obj_tiles/4bpp/a0135_f014.png new file mode 100644 index 0000000000..c8728ff547 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f015.png b/sa1/graphics/obj_tiles/4bpp/a0135_f015.png new file mode 100644 index 0000000000..d1514904dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f016.png b/sa1/graphics/obj_tiles/4bpp/a0135_f016.png new file mode 100644 index 0000000000..da9c16acde Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f017.png b/sa1/graphics/obj_tiles/4bpp/a0135_f017.png new file mode 100644 index 0000000000..9c2c91cca6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f018.png b/sa1/graphics/obj_tiles/4bpp/a0135_f018.png new file mode 100644 index 0000000000..3ac8b6e558 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f019.png b/sa1/graphics/obj_tiles/4bpp/a0135_f019.png new file mode 100644 index 0000000000..da9e368e57 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f020.png b/sa1/graphics/obj_tiles/4bpp/a0135_f020.png new file mode 100644 index 0000000000..fdfb8370bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f021.png b/sa1/graphics/obj_tiles/4bpp/a0135_f021.png new file mode 100644 index 0000000000..b6bcb5485e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f022.png b/sa1/graphics/obj_tiles/4bpp/a0135_f022.png new file mode 100644 index 0000000000..55f8edc382 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0135_f023.png b/sa1/graphics/obj_tiles/4bpp/a0135_f023.png new file mode 100644 index 0000000000..b4ba6e9101 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0135_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f000.png b/sa1/graphics/obj_tiles/4bpp/a0136_f000.png new file mode 100644 index 0000000000..4361beb1e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f001.png b/sa1/graphics/obj_tiles/4bpp/a0136_f001.png new file mode 100644 index 0000000000..4e0c7d9886 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f002.png b/sa1/graphics/obj_tiles/4bpp/a0136_f002.png new file mode 100644 index 0000000000..14abd60c87 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f003.png b/sa1/graphics/obj_tiles/4bpp/a0136_f003.png new file mode 100644 index 0000000000..38fa352ad8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f004.png b/sa1/graphics/obj_tiles/4bpp/a0136_f004.png new file mode 100644 index 0000000000..5f99f01193 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f005.png b/sa1/graphics/obj_tiles/4bpp/a0136_f005.png new file mode 100644 index 0000000000..665d9d91a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f006.png b/sa1/graphics/obj_tiles/4bpp/a0136_f006.png new file mode 100644 index 0000000000..26533de077 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0136_f007.png b/sa1/graphics/obj_tiles/4bpp/a0136_f007.png new file mode 100644 index 0000000000..48030b5daa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0136_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0137_f000.png b/sa1/graphics/obj_tiles/4bpp/a0137_f000.png new file mode 100644 index 0000000000..1adf2bf837 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0137_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0137_f001.png b/sa1/graphics/obj_tiles/4bpp/a0137_f001.png new file mode 100644 index 0000000000..2601b40c83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0137_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0137_f002.png b/sa1/graphics/obj_tiles/4bpp/a0137_f002.png new file mode 100644 index 0000000000..90944c07ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0137_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0137_f003.png b/sa1/graphics/obj_tiles/4bpp/a0137_f003.png new file mode 100644 index 0000000000..a8d91a29bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0137_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0137_f004.png b/sa1/graphics/obj_tiles/4bpp/a0137_f004.png new file mode 100644 index 0000000000..bb223cebd5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0137_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f000.png b/sa1/graphics/obj_tiles/4bpp/a0138_f000.png new file mode 100644 index 0000000000..dc928d6949 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f001.png b/sa1/graphics/obj_tiles/4bpp/a0138_f001.png new file mode 100644 index 0000000000..5bcd781613 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f002.png b/sa1/graphics/obj_tiles/4bpp/a0138_f002.png new file mode 100644 index 0000000000..4d69bd7e12 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f003.png b/sa1/graphics/obj_tiles/4bpp/a0138_f003.png new file mode 100644 index 0000000000..b74d99aae6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f004.png b/sa1/graphics/obj_tiles/4bpp/a0138_f004.png new file mode 100644 index 0000000000..d4041c65da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f005.png b/sa1/graphics/obj_tiles/4bpp/a0138_f005.png new file mode 100644 index 0000000000..15de72cb22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f006.png b/sa1/graphics/obj_tiles/4bpp/a0138_f006.png new file mode 100644 index 0000000000..2931c3285a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f007.png b/sa1/graphics/obj_tiles/4bpp/a0138_f007.png new file mode 100644 index 0000000000..4725afa7ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f008.png b/sa1/graphics/obj_tiles/4bpp/a0138_f008.png new file mode 100644 index 0000000000..16e15fd71b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f009.png b/sa1/graphics/obj_tiles/4bpp/a0138_f009.png new file mode 100644 index 0000000000..84080d3f7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f010.png b/sa1/graphics/obj_tiles/4bpp/a0138_f010.png new file mode 100644 index 0000000000..694624d348 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0138_f011.png b/sa1/graphics/obj_tiles/4bpp/a0138_f011.png new file mode 100644 index 0000000000..435dd29556 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0138_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f000.png b/sa1/graphics/obj_tiles/4bpp/a0139_f000.png new file mode 100644 index 0000000000..245470a5c4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f001.png b/sa1/graphics/obj_tiles/4bpp/a0139_f001.png new file mode 100644 index 0000000000..952dbe57fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f002.png b/sa1/graphics/obj_tiles/4bpp/a0139_f002.png new file mode 100644 index 0000000000..3943edaec4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f003.png b/sa1/graphics/obj_tiles/4bpp/a0139_f003.png new file mode 100644 index 0000000000..61219219f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f004.png b/sa1/graphics/obj_tiles/4bpp/a0139_f004.png new file mode 100644 index 0000000000..d6bbba3912 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f005.png b/sa1/graphics/obj_tiles/4bpp/a0139_f005.png new file mode 100644 index 0000000000..a835bcfd27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f006.png b/sa1/graphics/obj_tiles/4bpp/a0139_f006.png new file mode 100644 index 0000000000..d62660b1dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f007.png b/sa1/graphics/obj_tiles/4bpp/a0139_f007.png new file mode 100644 index 0000000000..ad7f2bc6cb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f008.png b/sa1/graphics/obj_tiles/4bpp/a0139_f008.png new file mode 100644 index 0000000000..568dcac27e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f009.png b/sa1/graphics/obj_tiles/4bpp/a0139_f009.png new file mode 100644 index 0000000000..2aa24b431d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f010.png b/sa1/graphics/obj_tiles/4bpp/a0139_f010.png new file mode 100644 index 0000000000..09cb2059e3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f011.png b/sa1/graphics/obj_tiles/4bpp/a0139_f011.png new file mode 100644 index 0000000000..ab3caf4d1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f012.png b/sa1/graphics/obj_tiles/4bpp/a0139_f012.png new file mode 100644 index 0000000000..0d22c1922a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f013.png b/sa1/graphics/obj_tiles/4bpp/a0139_f013.png new file mode 100644 index 0000000000..8c20b73689 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f014.png b/sa1/graphics/obj_tiles/4bpp/a0139_f014.png new file mode 100644 index 0000000000..ee930d12b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f015.png b/sa1/graphics/obj_tiles/4bpp/a0139_f015.png new file mode 100644 index 0000000000..a90da85f83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f016.png b/sa1/graphics/obj_tiles/4bpp/a0139_f016.png new file mode 100644 index 0000000000..bc709b1d16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f017.png b/sa1/graphics/obj_tiles/4bpp/a0139_f017.png new file mode 100644 index 0000000000..535f890cc5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f018.png b/sa1/graphics/obj_tiles/4bpp/a0139_f018.png new file mode 100644 index 0000000000..e1b1416651 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0139_f019.png b/sa1/graphics/obj_tiles/4bpp/a0139_f019.png new file mode 100644 index 0000000000..1121e25d9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0139_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0140_f000.png b/sa1/graphics/obj_tiles/4bpp/a0140_f000.png new file mode 100644 index 0000000000..68e8f11283 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0140_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0140_f001.png b/sa1/graphics/obj_tiles/4bpp/a0140_f001.png new file mode 100644 index 0000000000..f32996e1af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0140_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0140_f002.png b/sa1/graphics/obj_tiles/4bpp/a0140_f002.png new file mode 100644 index 0000000000..659f5bfe98 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0140_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0140_f003.png b/sa1/graphics/obj_tiles/4bpp/a0140_f003.png new file mode 100644 index 0000000000..0e255683e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0140_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0140_f004.png b/sa1/graphics/obj_tiles/4bpp/a0140_f004.png new file mode 100644 index 0000000000..4fa3d239ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0140_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0140_f005.png b/sa1/graphics/obj_tiles/4bpp/a0140_f005.png new file mode 100644 index 0000000000..f683765a11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0140_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f000.png b/sa1/graphics/obj_tiles/4bpp/a0141_f000.png new file mode 100644 index 0000000000..7eaaa62bd4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f001.png b/sa1/graphics/obj_tiles/4bpp/a0141_f001.png new file mode 100644 index 0000000000..a1b09b4dd0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f002.png b/sa1/graphics/obj_tiles/4bpp/a0141_f002.png new file mode 100644 index 0000000000..a3d0afe2b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f003.png b/sa1/graphics/obj_tiles/4bpp/a0141_f003.png new file mode 100644 index 0000000000..b20d5fc5ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f004.png b/sa1/graphics/obj_tiles/4bpp/a0141_f004.png new file mode 100644 index 0000000000..1443d5d7b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f005.png b/sa1/graphics/obj_tiles/4bpp/a0141_f005.png new file mode 100644 index 0000000000..823b1de3f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f006.png b/sa1/graphics/obj_tiles/4bpp/a0141_f006.png new file mode 100644 index 0000000000..076c1a906e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0141_f007.png b/sa1/graphics/obj_tiles/4bpp/a0141_f007.png new file mode 100644 index 0000000000..1ceed40173 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0141_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0142_f000.png b/sa1/graphics/obj_tiles/4bpp/a0142_f000.png new file mode 100644 index 0000000000..1adf2bf837 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0142_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0142_f001.png b/sa1/graphics/obj_tiles/4bpp/a0142_f001.png new file mode 100644 index 0000000000..2601b40c83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0142_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0142_f002.png b/sa1/graphics/obj_tiles/4bpp/a0142_f002.png new file mode 100644 index 0000000000..90944c07ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0142_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f000.png b/sa1/graphics/obj_tiles/4bpp/a0145_f000.png new file mode 100644 index 0000000000..e096d9aee9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f001.png b/sa1/graphics/obj_tiles/4bpp/a0145_f001.png new file mode 100644 index 0000000000..36b34a4cd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f002.png b/sa1/graphics/obj_tiles/4bpp/a0145_f002.png new file mode 100644 index 0000000000..a6e179c454 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f003.png b/sa1/graphics/obj_tiles/4bpp/a0145_f003.png new file mode 100644 index 0000000000..6b5df62504 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f004.png b/sa1/graphics/obj_tiles/4bpp/a0145_f004.png new file mode 100644 index 0000000000..b66371d98a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f005.png b/sa1/graphics/obj_tiles/4bpp/a0145_f005.png new file mode 100644 index 0000000000..3927e8ffeb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f006.png b/sa1/graphics/obj_tiles/4bpp/a0145_f006.png new file mode 100644 index 0000000000..5820b7f0eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f007.png b/sa1/graphics/obj_tiles/4bpp/a0145_f007.png new file mode 100644 index 0000000000..6daa5906ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0145_f008.png b/sa1/graphics/obj_tiles/4bpp/a0145_f008.png new file mode 100644 index 0000000000..4890cf6b49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0145_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0146_f000.png b/sa1/graphics/obj_tiles/4bpp/a0146_f000.png new file mode 100644 index 0000000000..a75bd9ffe7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0146_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0146_f001.png b/sa1/graphics/obj_tiles/4bpp/a0146_f001.png new file mode 100644 index 0000000000..67fef86c82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0146_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f000.png b/sa1/graphics/obj_tiles/4bpp/a0147_f000.png new file mode 100644 index 0000000000..6c2cc4318a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f001.png b/sa1/graphics/obj_tiles/4bpp/a0147_f001.png new file mode 100644 index 0000000000..3551ae8a4f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f002.png b/sa1/graphics/obj_tiles/4bpp/a0147_f002.png new file mode 100644 index 0000000000..c0b94942a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f003.png b/sa1/graphics/obj_tiles/4bpp/a0147_f003.png new file mode 100644 index 0000000000..9a168ef4e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f004.png b/sa1/graphics/obj_tiles/4bpp/a0147_f004.png new file mode 100644 index 0000000000..0fd98e2c76 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f005.png b/sa1/graphics/obj_tiles/4bpp/a0147_f005.png new file mode 100644 index 0000000000..b213bedec2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f006.png b/sa1/graphics/obj_tiles/4bpp/a0147_f006.png new file mode 100644 index 0000000000..169ceed1f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f007.png b/sa1/graphics/obj_tiles/4bpp/a0147_f007.png new file mode 100644 index 0000000000..df39b267d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0147_f008.png b/sa1/graphics/obj_tiles/4bpp/a0147_f008.png new file mode 100644 index 0000000000..a149d33570 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0147_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f000.png b/sa1/graphics/obj_tiles/4bpp/a0149_f000.png new file mode 100644 index 0000000000..c94740266e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f001.png b/sa1/graphics/obj_tiles/4bpp/a0149_f001.png new file mode 100644 index 0000000000..3bfa5c5727 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f002.png b/sa1/graphics/obj_tiles/4bpp/a0149_f002.png new file mode 100644 index 0000000000..16852bae49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f003.png b/sa1/graphics/obj_tiles/4bpp/a0149_f003.png new file mode 100644 index 0000000000..2420a9e1d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f004.png b/sa1/graphics/obj_tiles/4bpp/a0149_f004.png new file mode 100644 index 0000000000..ad0aa2d97a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f005.png b/sa1/graphics/obj_tiles/4bpp/a0149_f005.png new file mode 100644 index 0000000000..b2ba433b8f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f006.png b/sa1/graphics/obj_tiles/4bpp/a0149_f006.png new file mode 100644 index 0000000000..0bc434cc65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f007.png b/sa1/graphics/obj_tiles/4bpp/a0149_f007.png new file mode 100644 index 0000000000..49126754c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0149_f008.png b/sa1/graphics/obj_tiles/4bpp/a0149_f008.png new file mode 100644 index 0000000000..050680e5b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0149_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f000.png b/sa1/graphics/obj_tiles/4bpp/a0155_f000.png new file mode 100644 index 0000000000..4630ba8efa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f001.png b/sa1/graphics/obj_tiles/4bpp/a0155_f001.png new file mode 100644 index 0000000000..c11494561d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f002.png b/sa1/graphics/obj_tiles/4bpp/a0155_f002.png new file mode 100644 index 0000000000..53c26f931f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f003.png b/sa1/graphics/obj_tiles/4bpp/a0155_f003.png new file mode 100644 index 0000000000..38673414a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f004.png b/sa1/graphics/obj_tiles/4bpp/a0155_f004.png new file mode 100644 index 0000000000..4514d48c2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f005.png b/sa1/graphics/obj_tiles/4bpp/a0155_f005.png new file mode 100644 index 0000000000..8bed95680c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f006.png b/sa1/graphics/obj_tiles/4bpp/a0155_f006.png new file mode 100644 index 0000000000..72e8d4def2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f007.png b/sa1/graphics/obj_tiles/4bpp/a0155_f007.png new file mode 100644 index 0000000000..25e3938d2b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f008.png b/sa1/graphics/obj_tiles/4bpp/a0155_f008.png new file mode 100644 index 0000000000..d5bee2a313 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f009.png b/sa1/graphics/obj_tiles/4bpp/a0155_f009.png new file mode 100644 index 0000000000..17e488072d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0155_f010.png b/sa1/graphics/obj_tiles/4bpp/a0155_f010.png new file mode 100644 index 0000000000..7748740607 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0155_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0156_f000.png b/sa1/graphics/obj_tiles/4bpp/a0156_f000.png new file mode 100644 index 0000000000..6c6f7f425e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0156_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0156_f001.png b/sa1/graphics/obj_tiles/4bpp/a0156_f001.png new file mode 100644 index 0000000000..a06112ef01 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0156_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f000.png b/sa1/graphics/obj_tiles/4bpp/a0157_f000.png new file mode 100644 index 0000000000..a437f56465 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f001.png b/sa1/graphics/obj_tiles/4bpp/a0157_f001.png new file mode 100644 index 0000000000..36c58c4811 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f002.png b/sa1/graphics/obj_tiles/4bpp/a0157_f002.png new file mode 100644 index 0000000000..362b04fd4b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f003.png b/sa1/graphics/obj_tiles/4bpp/a0157_f003.png new file mode 100644 index 0000000000..07c53b336e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f004.png b/sa1/graphics/obj_tiles/4bpp/a0157_f004.png new file mode 100644 index 0000000000..0e90e99120 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f005.png b/sa1/graphics/obj_tiles/4bpp/a0157_f005.png new file mode 100644 index 0000000000..f44223dc8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f006.png b/sa1/graphics/obj_tiles/4bpp/a0157_f006.png new file mode 100644 index 0000000000..2cf48d4107 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f007.png b/sa1/graphics/obj_tiles/4bpp/a0157_f007.png new file mode 100644 index 0000000000..224a28e564 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f008.png b/sa1/graphics/obj_tiles/4bpp/a0157_f008.png new file mode 100644 index 0000000000..4a72af6d1a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0157_f009.png b/sa1/graphics/obj_tiles/4bpp/a0157_f009.png new file mode 100644 index 0000000000..463f230cac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0157_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0158_f000.png b/sa1/graphics/obj_tiles/4bpp/a0158_f000.png new file mode 100644 index 0000000000..024e30ef53 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0158_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0158_f001.png b/sa1/graphics/obj_tiles/4bpp/a0158_f001.png new file mode 100644 index 0000000000..271fc0cb9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0158_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0158_f002.png b/sa1/graphics/obj_tiles/4bpp/a0158_f002.png new file mode 100644 index 0000000000..a9cb55867b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0158_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0158_f003.png b/sa1/graphics/obj_tiles/4bpp/a0158_f003.png new file mode 100644 index 0000000000..341c05f576 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0158_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0158_f004.png b/sa1/graphics/obj_tiles/4bpp/a0158_f004.png new file mode 100644 index 0000000000..c94740266e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0158_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0158_f005.png b/sa1/graphics/obj_tiles/4bpp/a0158_f005.png new file mode 100644 index 0000000000..4ab01e5ac9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0158_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0158_f006.png b/sa1/graphics/obj_tiles/4bpp/a0158_f006.png new file mode 100644 index 0000000000..d53be3a2a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0158_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0180_f000.png b/sa1/graphics/obj_tiles/4bpp/a0180_f000.png new file mode 100644 index 0000000000..ecd39a60ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0180_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0180_f001.png b/sa1/graphics/obj_tiles/4bpp/a0180_f001.png new file mode 100644 index 0000000000..0f583c1bdd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0180_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0180_f002.png b/sa1/graphics/obj_tiles/4bpp/a0180_f002.png new file mode 100644 index 0000000000..1f03f7f6cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0180_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0181_f000.png b/sa1/graphics/obj_tiles/4bpp/a0181_f000.png new file mode 100644 index 0000000000..db95045f99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0181_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0181_f001.png b/sa1/graphics/obj_tiles/4bpp/a0181_f001.png new file mode 100644 index 0000000000..fd163f1db4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0181_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0181_f002.png b/sa1/graphics/obj_tiles/4bpp/a0181_f002.png new file mode 100644 index 0000000000..a835e887f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0181_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0182_f000.png b/sa1/graphics/obj_tiles/4bpp/a0182_f000.png new file mode 100644 index 0000000000..beb12de454 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0182_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0182_f001.png b/sa1/graphics/obj_tiles/4bpp/a0182_f001.png new file mode 100644 index 0000000000..e24bff3042 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0182_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0182_f002.png b/sa1/graphics/obj_tiles/4bpp/a0182_f002.png new file mode 100644 index 0000000000..b988734a38 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0182_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0184_f000.png b/sa1/graphics/obj_tiles/4bpp/a0184_f000.png new file mode 100644 index 0000000000..51aa90b8d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0184_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0184_f001.png b/sa1/graphics/obj_tiles/4bpp/a0184_f001.png new file mode 100644 index 0000000000..4c67edbf23 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0184_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0185_f000.png b/sa1/graphics/obj_tiles/4bpp/a0185_f000.png new file mode 100644 index 0000000000..6e89a63309 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0185_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0185_f001.png b/sa1/graphics/obj_tiles/4bpp/a0185_f001.png new file mode 100644 index 0000000000..530ff2e222 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0185_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0185_f002.png b/sa1/graphics/obj_tiles/4bpp/a0185_f002.png new file mode 100644 index 0000000000..38db96f0ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0185_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f000.png b/sa1/graphics/obj_tiles/4bpp/a0186_f000.png new file mode 100644 index 0000000000..6f796cee53 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f001.png b/sa1/graphics/obj_tiles/4bpp/a0186_f001.png new file mode 100644 index 0000000000..780b48cd42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f002.png b/sa1/graphics/obj_tiles/4bpp/a0186_f002.png new file mode 100644 index 0000000000..b40304146d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f003.png b/sa1/graphics/obj_tiles/4bpp/a0186_f003.png new file mode 100644 index 0000000000..f8c91b9332 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f004.png b/sa1/graphics/obj_tiles/4bpp/a0186_f004.png new file mode 100644 index 0000000000..7115111ea1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f005.png b/sa1/graphics/obj_tiles/4bpp/a0186_f005.png new file mode 100644 index 0000000000..d00ed3c236 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f006.png b/sa1/graphics/obj_tiles/4bpp/a0186_f006.png new file mode 100644 index 0000000000..6fd37eefa2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0186_f007.png b/sa1/graphics/obj_tiles/4bpp/a0186_f007.png new file mode 100644 index 0000000000..548efef57a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0186_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0187_f000.png b/sa1/graphics/obj_tiles/4bpp/a0187_f000.png new file mode 100644 index 0000000000..0eb69bcaf1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0187_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0187_f001.png b/sa1/graphics/obj_tiles/4bpp/a0187_f001.png new file mode 100644 index 0000000000..2617025979 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0187_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0187_f002.png b/sa1/graphics/obj_tiles/4bpp/a0187_f002.png new file mode 100644 index 0000000000..a3b8054ea6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0187_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0187_f003.png b/sa1/graphics/obj_tiles/4bpp/a0187_f003.png new file mode 100644 index 0000000000..faf6705c21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0187_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0187_f004.png b/sa1/graphics/obj_tiles/4bpp/a0187_f004.png new file mode 100644 index 0000000000..ff897af0c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0187_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0188_f000.png b/sa1/graphics/obj_tiles/4bpp/a0188_f000.png new file mode 100644 index 0000000000..57f2d759d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0188_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0188_f001.png b/sa1/graphics/obj_tiles/4bpp/a0188_f001.png new file mode 100644 index 0000000000..56da576fad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0188_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0188_f002.png b/sa1/graphics/obj_tiles/4bpp/a0188_f002.png new file mode 100644 index 0000000000..0032c78d8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0188_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0188_f003.png b/sa1/graphics/obj_tiles/4bpp/a0188_f003.png new file mode 100644 index 0000000000..7fc3ef0cf9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0188_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0190_f000.png b/sa1/graphics/obj_tiles/4bpp/a0190_f000.png new file mode 100644 index 0000000000..dcb9347811 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0190_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0190_f001.png b/sa1/graphics/obj_tiles/4bpp/a0190_f001.png new file mode 100644 index 0000000000..22c6685798 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0190_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0191_f000.png b/sa1/graphics/obj_tiles/4bpp/a0191_f000.png new file mode 100644 index 0000000000..3195a2128e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0191_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0191_f001.png b/sa1/graphics/obj_tiles/4bpp/a0191_f001.png new file mode 100644 index 0000000000..ec418363ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0191_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0191_f002.png b/sa1/graphics/obj_tiles/4bpp/a0191_f002.png new file mode 100644 index 0000000000..966505199e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0191_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0191_f003.png b/sa1/graphics/obj_tiles/4bpp/a0191_f003.png new file mode 100644 index 0000000000..9b3dd32929 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0191_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0191_f004.png b/sa1/graphics/obj_tiles/4bpp/a0191_f004.png new file mode 100644 index 0000000000..bb3f470386 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0191_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f000.png b/sa1/graphics/obj_tiles/4bpp/a0192_f000.png new file mode 100644 index 0000000000..4d9ce5b21a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f001.png b/sa1/graphics/obj_tiles/4bpp/a0192_f001.png new file mode 100644 index 0000000000..a55fc48711 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f002.png b/sa1/graphics/obj_tiles/4bpp/a0192_f002.png new file mode 100644 index 0000000000..cbc229f905 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f003.png b/sa1/graphics/obj_tiles/4bpp/a0192_f003.png new file mode 100644 index 0000000000..d36d97681e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f004.png b/sa1/graphics/obj_tiles/4bpp/a0192_f004.png new file mode 100644 index 0000000000..98f15526b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f005.png b/sa1/graphics/obj_tiles/4bpp/a0192_f005.png new file mode 100644 index 0000000000..bdc40a2647 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f006.png b/sa1/graphics/obj_tiles/4bpp/a0192_f006.png new file mode 100644 index 0000000000..cf99ed1754 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0192_f007.png b/sa1/graphics/obj_tiles/4bpp/a0192_f007.png new file mode 100644 index 0000000000..bfb7584b52 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0192_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0195_f000.png b/sa1/graphics/obj_tiles/4bpp/a0195_f000.png new file mode 100644 index 0000000000..d3162d590c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0195_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0195_f001.png b/sa1/graphics/obj_tiles/4bpp/a0195_f001.png new file mode 100644 index 0000000000..95232fbafc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0195_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0195_f002.png b/sa1/graphics/obj_tiles/4bpp/a0195_f002.png new file mode 100644 index 0000000000..c4b121f9f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0195_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0195_f003.png b/sa1/graphics/obj_tiles/4bpp/a0195_f003.png new file mode 100644 index 0000000000..2404bf9a32 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0195_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0196_f000.png b/sa1/graphics/obj_tiles/4bpp/a0196_f000.png new file mode 100644 index 0000000000..1d5d8385a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0196_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0196_f001.png b/sa1/graphics/obj_tiles/4bpp/a0196_f001.png new file mode 100644 index 0000000000..d4c4acc91c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0196_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0196_f002.png b/sa1/graphics/obj_tiles/4bpp/a0196_f002.png new file mode 100644 index 0000000000..c1fa393e51 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0196_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0197_f000.png b/sa1/graphics/obj_tiles/4bpp/a0197_f000.png new file mode 100644 index 0000000000..a3a1ba5d9f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0197_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0198_f000.png b/sa1/graphics/obj_tiles/4bpp/a0198_f000.png new file mode 100644 index 0000000000..d687898987 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0198_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0198_f001.png b/sa1/graphics/obj_tiles/4bpp/a0198_f001.png new file mode 100644 index 0000000000..77dca6294a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0198_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0198_f002.png b/sa1/graphics/obj_tiles/4bpp/a0198_f002.png new file mode 100644 index 0000000000..95498e0b7a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0198_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0198_f003.png b/sa1/graphics/obj_tiles/4bpp/a0198_f003.png new file mode 100644 index 0000000000..54697e0c4e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0198_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f000.png b/sa1/graphics/obj_tiles/4bpp/a0199_f000.png new file mode 100644 index 0000000000..5be25399dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f001.png b/sa1/graphics/obj_tiles/4bpp/a0199_f001.png new file mode 100644 index 0000000000..8a9317f47d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f002.png b/sa1/graphics/obj_tiles/4bpp/a0199_f002.png new file mode 100644 index 0000000000..1d7fda82db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f003.png b/sa1/graphics/obj_tiles/4bpp/a0199_f003.png new file mode 100644 index 0000000000..b246037f17 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f004.png b/sa1/graphics/obj_tiles/4bpp/a0199_f004.png new file mode 100644 index 0000000000..cb842b2dd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f005.png b/sa1/graphics/obj_tiles/4bpp/a0199_f005.png new file mode 100644 index 0000000000..ef2bbdc1c5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f006.png b/sa1/graphics/obj_tiles/4bpp/a0199_f006.png new file mode 100644 index 0000000000..0b58587afc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f007.png b/sa1/graphics/obj_tiles/4bpp/a0199_f007.png new file mode 100644 index 0000000000..1524f625b4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f008.png b/sa1/graphics/obj_tiles/4bpp/a0199_f008.png new file mode 100644 index 0000000000..ca2ac481d8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f009.png b/sa1/graphics/obj_tiles/4bpp/a0199_f009.png new file mode 100644 index 0000000000..2383ab0d89 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f010.png b/sa1/graphics/obj_tiles/4bpp/a0199_f010.png new file mode 100644 index 0000000000..cdf1d3abe2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f011.png b/sa1/graphics/obj_tiles/4bpp/a0199_f011.png new file mode 100644 index 0000000000..562eac07d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f012.png b/sa1/graphics/obj_tiles/4bpp/a0199_f012.png new file mode 100644 index 0000000000..80213e4cdb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0199_f013.png b/sa1/graphics/obj_tiles/4bpp/a0199_f013.png new file mode 100644 index 0000000000..a009323805 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0199_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f000.png b/sa1/graphics/obj_tiles/4bpp/a0200_f000.png new file mode 100644 index 0000000000..c072a39089 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f001.png b/sa1/graphics/obj_tiles/4bpp/a0200_f001.png new file mode 100644 index 0000000000..9ac830f1f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f002.png b/sa1/graphics/obj_tiles/4bpp/a0200_f002.png new file mode 100644 index 0000000000..f0c785949d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f003.png b/sa1/graphics/obj_tiles/4bpp/a0200_f003.png new file mode 100644 index 0000000000..336b59c006 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f004.png b/sa1/graphics/obj_tiles/4bpp/a0200_f004.png new file mode 100644 index 0000000000..ef721033c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f005.png b/sa1/graphics/obj_tiles/4bpp/a0200_f005.png new file mode 100644 index 0000000000..86c54ab560 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f006.png b/sa1/graphics/obj_tiles/4bpp/a0200_f006.png new file mode 100644 index 0000000000..b651172129 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f007.png b/sa1/graphics/obj_tiles/4bpp/a0200_f007.png new file mode 100644 index 0000000000..65f4544350 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f008.png b/sa1/graphics/obj_tiles/4bpp/a0200_f008.png new file mode 100644 index 0000000000..fcb00b85ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f009.png b/sa1/graphics/obj_tiles/4bpp/a0200_f009.png new file mode 100644 index 0000000000..b7d9782d5c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f010.png b/sa1/graphics/obj_tiles/4bpp/a0200_f010.png new file mode 100644 index 0000000000..505d47a0ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f011.png b/sa1/graphics/obj_tiles/4bpp/a0200_f011.png new file mode 100644 index 0000000000..8902216bb1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0200_f012.png b/sa1/graphics/obj_tiles/4bpp/a0200_f012.png new file mode 100644 index 0000000000..0dba9a9984 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0200_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0201_f000.png b/sa1/graphics/obj_tiles/4bpp/a0201_f000.png new file mode 100644 index 0000000000..a64797f592 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0201_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0201_f001.png b/sa1/graphics/obj_tiles/4bpp/a0201_f001.png new file mode 100644 index 0000000000..e4b28c07b6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0201_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0201_f002.png b/sa1/graphics/obj_tiles/4bpp/a0201_f002.png new file mode 100644 index 0000000000..d62a70307c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0201_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0202_f000.png b/sa1/graphics/obj_tiles/4bpp/a0202_f000.png new file mode 100644 index 0000000000..f6ba5c89ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0202_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0202_f001.png b/sa1/graphics/obj_tiles/4bpp/a0202_f001.png new file mode 100644 index 0000000000..97234b6824 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0202_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0202_f002.png b/sa1/graphics/obj_tiles/4bpp/a0202_f002.png new file mode 100644 index 0000000000..e8588e64b6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0202_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0202_f003.png b/sa1/graphics/obj_tiles/4bpp/a0202_f003.png new file mode 100644 index 0000000000..7995c61e5b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0202_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f000.png b/sa1/graphics/obj_tiles/4bpp/a0203_f000.png new file mode 100644 index 0000000000..6b3f8a96fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f001.png b/sa1/graphics/obj_tiles/4bpp/a0203_f001.png new file mode 100644 index 0000000000..a0ffe5d54b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f002.png b/sa1/graphics/obj_tiles/4bpp/a0203_f002.png new file mode 100644 index 0000000000..399f2d698a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f003.png b/sa1/graphics/obj_tiles/4bpp/a0203_f003.png new file mode 100644 index 0000000000..366ca510dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f004.png b/sa1/graphics/obj_tiles/4bpp/a0203_f004.png new file mode 100644 index 0000000000..ecae751d3a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f005.png b/sa1/graphics/obj_tiles/4bpp/a0203_f005.png new file mode 100644 index 0000000000..9f3c133814 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f006.png b/sa1/graphics/obj_tiles/4bpp/a0203_f006.png new file mode 100644 index 0000000000..99b205202d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0203_f007.png b/sa1/graphics/obj_tiles/4bpp/a0203_f007.png new file mode 100644 index 0000000000..af18d559bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0203_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f000.png b/sa1/graphics/obj_tiles/4bpp/a0204_f000.png new file mode 100644 index 0000000000..8a0fd50726 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f001.png b/sa1/graphics/obj_tiles/4bpp/a0204_f001.png new file mode 100644 index 0000000000..6b3e6be924 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f002.png b/sa1/graphics/obj_tiles/4bpp/a0204_f002.png new file mode 100644 index 0000000000..b46b9a8bfc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f003.png b/sa1/graphics/obj_tiles/4bpp/a0204_f003.png new file mode 100644 index 0000000000..0a169fe041 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f004.png b/sa1/graphics/obj_tiles/4bpp/a0204_f004.png new file mode 100644 index 0000000000..49547699e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f005.png b/sa1/graphics/obj_tiles/4bpp/a0204_f005.png new file mode 100644 index 0000000000..2a3caacd61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f006.png b/sa1/graphics/obj_tiles/4bpp/a0204_f006.png new file mode 100644 index 0000000000..3f25829083 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0204_f007.png b/sa1/graphics/obj_tiles/4bpp/a0204_f007.png new file mode 100644 index 0000000000..07131a3de3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0204_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0205_f000.png b/sa1/graphics/obj_tiles/4bpp/a0205_f000.png new file mode 100644 index 0000000000..9df933ad03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0205_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0205_f001.png b/sa1/graphics/obj_tiles/4bpp/a0205_f001.png new file mode 100644 index 0000000000..4cd05dd33f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0205_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0206_f000.png b/sa1/graphics/obj_tiles/4bpp/a0206_f000.png new file mode 100644 index 0000000000..c6a60d6b2d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0206_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0206_f001.png b/sa1/graphics/obj_tiles/4bpp/a0206_f001.png new file mode 100644 index 0000000000..641f7df674 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0206_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0206_f002.png b/sa1/graphics/obj_tiles/4bpp/a0206_f002.png new file mode 100644 index 0000000000..1d71f565c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0206_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0206_f003.png b/sa1/graphics/obj_tiles/4bpp/a0206_f003.png new file mode 100644 index 0000000000..39de846914 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0206_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0207_f000.png b/sa1/graphics/obj_tiles/4bpp/a0207_f000.png new file mode 100644 index 0000000000..a1f71f1f7a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0207_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0207_f001.png b/sa1/graphics/obj_tiles/4bpp/a0207_f001.png new file mode 100644 index 0000000000..ddbf19b1e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0207_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0207_f002.png b/sa1/graphics/obj_tiles/4bpp/a0207_f002.png new file mode 100644 index 0000000000..b73befd540 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0207_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0207_f003.png b/sa1/graphics/obj_tiles/4bpp/a0207_f003.png new file mode 100644 index 0000000000..78c98b0ef0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0207_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0208_f000.png b/sa1/graphics/obj_tiles/4bpp/a0208_f000.png new file mode 100644 index 0000000000..46612ed2d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0208_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0208_f001.png b/sa1/graphics/obj_tiles/4bpp/a0208_f001.png new file mode 100644 index 0000000000..b698272b8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0208_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0208_f002.png b/sa1/graphics/obj_tiles/4bpp/a0208_f002.png new file mode 100644 index 0000000000..a459735781 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0208_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0208_f003.png b/sa1/graphics/obj_tiles/4bpp/a0208_f003.png new file mode 100644 index 0000000000..61c9c1a079 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0208_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f000.png b/sa1/graphics/obj_tiles/4bpp/a0209_f000.png new file mode 100644 index 0000000000..b071af2092 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f001.png b/sa1/graphics/obj_tiles/4bpp/a0209_f001.png new file mode 100644 index 0000000000..7d9a0cff21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f002.png b/sa1/graphics/obj_tiles/4bpp/a0209_f002.png new file mode 100644 index 0000000000..0ba38f251f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f003.png b/sa1/graphics/obj_tiles/4bpp/a0209_f003.png new file mode 100644 index 0000000000..4a9cc77bfe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f004.png b/sa1/graphics/obj_tiles/4bpp/a0209_f004.png new file mode 100644 index 0000000000..544d2eb74d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f005.png b/sa1/graphics/obj_tiles/4bpp/a0209_f005.png new file mode 100644 index 0000000000..ed1b087a2e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f006.png b/sa1/graphics/obj_tiles/4bpp/a0209_f006.png new file mode 100644 index 0000000000..39b0133cc8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f007.png b/sa1/graphics/obj_tiles/4bpp/a0209_f007.png new file mode 100644 index 0000000000..1fb3529d88 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f008.png b/sa1/graphics/obj_tiles/4bpp/a0209_f008.png new file mode 100644 index 0000000000..00a4126a95 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f009.png b/sa1/graphics/obj_tiles/4bpp/a0209_f009.png new file mode 100644 index 0000000000..2d30e26896 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f010.png b/sa1/graphics/obj_tiles/4bpp/a0209_f010.png new file mode 100644 index 0000000000..ef1fc50fb0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f011.png b/sa1/graphics/obj_tiles/4bpp/a0209_f011.png new file mode 100644 index 0000000000..d7de3b6b66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f012.png b/sa1/graphics/obj_tiles/4bpp/a0209_f012.png new file mode 100644 index 0000000000..81bf8e0d54 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f013.png b/sa1/graphics/obj_tiles/4bpp/a0209_f013.png new file mode 100644 index 0000000000..dd58af00a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f014.png b/sa1/graphics/obj_tiles/4bpp/a0209_f014.png new file mode 100644 index 0000000000..ac81316981 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0209_f015.png b/sa1/graphics/obj_tiles/4bpp/a0209_f015.png new file mode 100644 index 0000000000..6890d5cfe4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0209_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f000.png b/sa1/graphics/obj_tiles/4bpp/a0210_f000.png new file mode 100644 index 0000000000..8e1258efea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f001.png b/sa1/graphics/obj_tiles/4bpp/a0210_f001.png new file mode 100644 index 0000000000..895696890d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f002.png b/sa1/graphics/obj_tiles/4bpp/a0210_f002.png new file mode 100644 index 0000000000..9600d74e1a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f003.png b/sa1/graphics/obj_tiles/4bpp/a0210_f003.png new file mode 100644 index 0000000000..54cf22b240 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f004.png b/sa1/graphics/obj_tiles/4bpp/a0210_f004.png new file mode 100644 index 0000000000..9befd57fce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f005.png b/sa1/graphics/obj_tiles/4bpp/a0210_f005.png new file mode 100644 index 0000000000..b48d81d461 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f006.png b/sa1/graphics/obj_tiles/4bpp/a0210_f006.png new file mode 100644 index 0000000000..ec255d3318 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f007.png b/sa1/graphics/obj_tiles/4bpp/a0210_f007.png new file mode 100644 index 0000000000..aa24c4e694 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f008.png b/sa1/graphics/obj_tiles/4bpp/a0210_f008.png new file mode 100644 index 0000000000..cfd4a7d5da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f009.png b/sa1/graphics/obj_tiles/4bpp/a0210_f009.png new file mode 100644 index 0000000000..fa56e64ab9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0210_f010.png b/sa1/graphics/obj_tiles/4bpp/a0210_f010.png new file mode 100644 index 0000000000..62c7ce8a41 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0210_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f000.png b/sa1/graphics/obj_tiles/4bpp/a0211_f000.png new file mode 100644 index 0000000000..f89d03d482 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f001.png b/sa1/graphics/obj_tiles/4bpp/a0211_f001.png new file mode 100644 index 0000000000..16d7767b63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f002.png b/sa1/graphics/obj_tiles/4bpp/a0211_f002.png new file mode 100644 index 0000000000..9701153614 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f003.png b/sa1/graphics/obj_tiles/4bpp/a0211_f003.png new file mode 100644 index 0000000000..13377fc8ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f004.png b/sa1/graphics/obj_tiles/4bpp/a0211_f004.png new file mode 100644 index 0000000000..a267f3aade Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f005.png b/sa1/graphics/obj_tiles/4bpp/a0211_f005.png new file mode 100644 index 0000000000..f733b0b945 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f006.png b/sa1/graphics/obj_tiles/4bpp/a0211_f006.png new file mode 100644 index 0000000000..aca94aa8f8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f007.png b/sa1/graphics/obj_tiles/4bpp/a0211_f007.png new file mode 100644 index 0000000000..ee27dadb42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0211_f008.png b/sa1/graphics/obj_tiles/4bpp/a0211_f008.png new file mode 100644 index 0000000000..fa106728a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0211_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f000.png b/sa1/graphics/obj_tiles/4bpp/a0212_f000.png new file mode 100644 index 0000000000..8a9c9694be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f001.png b/sa1/graphics/obj_tiles/4bpp/a0212_f001.png new file mode 100644 index 0000000000..640c852bfc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f002.png b/sa1/graphics/obj_tiles/4bpp/a0212_f002.png new file mode 100644 index 0000000000..4dd577be6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f003.png b/sa1/graphics/obj_tiles/4bpp/a0212_f003.png new file mode 100644 index 0000000000..4a466bcf1c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f004.png b/sa1/graphics/obj_tiles/4bpp/a0212_f004.png new file mode 100644 index 0000000000..f7df2c6556 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f005.png b/sa1/graphics/obj_tiles/4bpp/a0212_f005.png new file mode 100644 index 0000000000..5c7f0fbbea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f006.png b/sa1/graphics/obj_tiles/4bpp/a0212_f006.png new file mode 100644 index 0000000000..b2e2d9fa81 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0212_f007.png b/sa1/graphics/obj_tiles/4bpp/a0212_f007.png new file mode 100644 index 0000000000..8a9c9694be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0212_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f000.png b/sa1/graphics/obj_tiles/4bpp/a0213_f000.png new file mode 100644 index 0000000000..c3d3e798b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f001.png b/sa1/graphics/obj_tiles/4bpp/a0213_f001.png new file mode 100644 index 0000000000..7b9483b0ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f002.png b/sa1/graphics/obj_tiles/4bpp/a0213_f002.png new file mode 100644 index 0000000000..ee493b1f64 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f003.png b/sa1/graphics/obj_tiles/4bpp/a0213_f003.png new file mode 100644 index 0000000000..4145570e18 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f004.png b/sa1/graphics/obj_tiles/4bpp/a0213_f004.png new file mode 100644 index 0000000000..dbe628c91a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f005.png b/sa1/graphics/obj_tiles/4bpp/a0213_f005.png new file mode 100644 index 0000000000..085c1227f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f006.png b/sa1/graphics/obj_tiles/4bpp/a0213_f006.png new file mode 100644 index 0000000000..9aca60ac3b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0213_f007.png b/sa1/graphics/obj_tiles/4bpp/a0213_f007.png new file mode 100644 index 0000000000..c3d3e798b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0213_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0216_f000.png b/sa1/graphics/obj_tiles/4bpp/a0216_f000.png new file mode 100644 index 0000000000..8ed8363bad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0216_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0216_f001.png b/sa1/graphics/obj_tiles/4bpp/a0216_f001.png new file mode 100644 index 0000000000..0a56ababf8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0216_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f000.png b/sa1/graphics/obj_tiles/4bpp/a0217_f000.png new file mode 100644 index 0000000000..f1a706b48a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f001.png b/sa1/graphics/obj_tiles/4bpp/a0217_f001.png new file mode 100644 index 0000000000..193ede7968 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f002.png b/sa1/graphics/obj_tiles/4bpp/a0217_f002.png new file mode 100644 index 0000000000..6be04b7719 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f003.png b/sa1/graphics/obj_tiles/4bpp/a0217_f003.png new file mode 100644 index 0000000000..193a33ace2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f004.png b/sa1/graphics/obj_tiles/4bpp/a0217_f004.png new file mode 100644 index 0000000000..7daadea6d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f005.png b/sa1/graphics/obj_tiles/4bpp/a0217_f005.png new file mode 100644 index 0000000000..b59988946e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f006.png b/sa1/graphics/obj_tiles/4bpp/a0217_f006.png new file mode 100644 index 0000000000..cf8725b1fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0217_f007.png b/sa1/graphics/obj_tiles/4bpp/a0217_f007.png new file mode 100644 index 0000000000..e03be9935b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0217_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0218_f000.png b/sa1/graphics/obj_tiles/4bpp/a0218_f000.png new file mode 100644 index 0000000000..99e1525199 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0218_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0218_f001.png b/sa1/graphics/obj_tiles/4bpp/a0218_f001.png new file mode 100644 index 0000000000..4fff0a6821 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0218_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0218_f002.png b/sa1/graphics/obj_tiles/4bpp/a0218_f002.png new file mode 100644 index 0000000000..0fcbe7cd4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0218_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0218_f003.png b/sa1/graphics/obj_tiles/4bpp/a0218_f003.png new file mode 100644 index 0000000000..8e14d99148 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0218_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0218_f004.png b/sa1/graphics/obj_tiles/4bpp/a0218_f004.png new file mode 100644 index 0000000000..ffada0d262 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0218_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0220_f000.png b/sa1/graphics/obj_tiles/4bpp/a0220_f000.png new file mode 100644 index 0000000000..fb787dd260 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0220_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0220_f001.png b/sa1/graphics/obj_tiles/4bpp/a0220_f001.png new file mode 100644 index 0000000000..cd5a321233 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0220_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0220_f002.png b/sa1/graphics/obj_tiles/4bpp/a0220_f002.png new file mode 100644 index 0000000000..41ddb2d2a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0220_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0220_f003.png b/sa1/graphics/obj_tiles/4bpp/a0220_f003.png new file mode 100644 index 0000000000..024e786be7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0220_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0220_f004.png b/sa1/graphics/obj_tiles/4bpp/a0220_f004.png new file mode 100644 index 0000000000..e653e425d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0220_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f000.png b/sa1/graphics/obj_tiles/4bpp/a0221_f000.png new file mode 100644 index 0000000000..0bc4caa108 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f001.png b/sa1/graphics/obj_tiles/4bpp/a0221_f001.png new file mode 100644 index 0000000000..42a8032317 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f002.png b/sa1/graphics/obj_tiles/4bpp/a0221_f002.png new file mode 100644 index 0000000000..929c4c7123 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f003.png b/sa1/graphics/obj_tiles/4bpp/a0221_f003.png new file mode 100644 index 0000000000..a6e2404bb1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f004.png b/sa1/graphics/obj_tiles/4bpp/a0221_f004.png new file mode 100644 index 0000000000..4c7e332ef2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f005.png b/sa1/graphics/obj_tiles/4bpp/a0221_f005.png new file mode 100644 index 0000000000..fde3a49c7a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f006.png b/sa1/graphics/obj_tiles/4bpp/a0221_f006.png new file mode 100644 index 0000000000..49542a5bd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f007.png b/sa1/graphics/obj_tiles/4bpp/a0221_f007.png new file mode 100644 index 0000000000..993e77a34d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f008.png b/sa1/graphics/obj_tiles/4bpp/a0221_f008.png new file mode 100644 index 0000000000..60db410702 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f009.png b/sa1/graphics/obj_tiles/4bpp/a0221_f009.png new file mode 100644 index 0000000000..8b43df3476 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f010.png b/sa1/graphics/obj_tiles/4bpp/a0221_f010.png new file mode 100644 index 0000000000..ea38c73add Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f011.png b/sa1/graphics/obj_tiles/4bpp/a0221_f011.png new file mode 100644 index 0000000000..1fd68cf1eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f012.png b/sa1/graphics/obj_tiles/4bpp/a0221_f012.png new file mode 100644 index 0000000000..1a9b1c5bd9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f013.png b/sa1/graphics/obj_tiles/4bpp/a0221_f013.png new file mode 100644 index 0000000000..2632812e56 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f014.png b/sa1/graphics/obj_tiles/4bpp/a0221_f014.png new file mode 100644 index 0000000000..03258ad5ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0221_f015.png b/sa1/graphics/obj_tiles/4bpp/a0221_f015.png new file mode 100644 index 0000000000..84eab06469 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0221_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f000.png b/sa1/graphics/obj_tiles/4bpp/a0222_f000.png new file mode 100644 index 0000000000..ade6bc0fcf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f001.png b/sa1/graphics/obj_tiles/4bpp/a0222_f001.png new file mode 100644 index 0000000000..6242d21ac3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f002.png b/sa1/graphics/obj_tiles/4bpp/a0222_f002.png new file mode 100644 index 0000000000..6f01033953 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f003.png b/sa1/graphics/obj_tiles/4bpp/a0222_f003.png new file mode 100644 index 0000000000..0b8ea3e5bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f004.png b/sa1/graphics/obj_tiles/4bpp/a0222_f004.png new file mode 100644 index 0000000000..c8e7e682ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f005.png b/sa1/graphics/obj_tiles/4bpp/a0222_f005.png new file mode 100644 index 0000000000..718896e0ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f006.png b/sa1/graphics/obj_tiles/4bpp/a0222_f006.png new file mode 100644 index 0000000000..f12b9684db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f007.png b/sa1/graphics/obj_tiles/4bpp/a0222_f007.png new file mode 100644 index 0000000000..db0a3f0d70 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f008.png b/sa1/graphics/obj_tiles/4bpp/a0222_f008.png new file mode 100644 index 0000000000..71e638a031 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f009.png b/sa1/graphics/obj_tiles/4bpp/a0222_f009.png new file mode 100644 index 0000000000..f7a85f845d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f010.png b/sa1/graphics/obj_tiles/4bpp/a0222_f010.png new file mode 100644 index 0000000000..81a0aaeca9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f011.png b/sa1/graphics/obj_tiles/4bpp/a0222_f011.png new file mode 100644 index 0000000000..8749efa1db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f012.png b/sa1/graphics/obj_tiles/4bpp/a0222_f012.png new file mode 100644 index 0000000000..aa1178809e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f013.png b/sa1/graphics/obj_tiles/4bpp/a0222_f013.png new file mode 100644 index 0000000000..fde4b6b15b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f014.png b/sa1/graphics/obj_tiles/4bpp/a0222_f014.png new file mode 100644 index 0000000000..3e60152b76 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0222_f015.png b/sa1/graphics/obj_tiles/4bpp/a0222_f015.png new file mode 100644 index 0000000000..cd7c6dada5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0222_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f000.png b/sa1/graphics/obj_tiles/4bpp/a0223_f000.png new file mode 100644 index 0000000000..d0022250a5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f001.png b/sa1/graphics/obj_tiles/4bpp/a0223_f001.png new file mode 100644 index 0000000000..70799dc379 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f002.png b/sa1/graphics/obj_tiles/4bpp/a0223_f002.png new file mode 100644 index 0000000000..6d55f0f178 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f003.png b/sa1/graphics/obj_tiles/4bpp/a0223_f003.png new file mode 100644 index 0000000000..d3163e76ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f004.png b/sa1/graphics/obj_tiles/4bpp/a0223_f004.png new file mode 100644 index 0000000000..677f401f11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f005.png b/sa1/graphics/obj_tiles/4bpp/a0223_f005.png new file mode 100644 index 0000000000..5fc1f4911c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f006.png b/sa1/graphics/obj_tiles/4bpp/a0223_f006.png new file mode 100644 index 0000000000..659bfbe86c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f007.png b/sa1/graphics/obj_tiles/4bpp/a0223_f007.png new file mode 100644 index 0000000000..25012fcd27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f008.png b/sa1/graphics/obj_tiles/4bpp/a0223_f008.png new file mode 100644 index 0000000000..8a95fbffd1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f009.png b/sa1/graphics/obj_tiles/4bpp/a0223_f009.png new file mode 100644 index 0000000000..5500072145 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f010.png b/sa1/graphics/obj_tiles/4bpp/a0223_f010.png new file mode 100644 index 0000000000..de6ae51105 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f011.png b/sa1/graphics/obj_tiles/4bpp/a0223_f011.png new file mode 100644 index 0000000000..b4af87f8da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f012.png b/sa1/graphics/obj_tiles/4bpp/a0223_f012.png new file mode 100644 index 0000000000..40b8c2df22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0223_f013.png b/sa1/graphics/obj_tiles/4bpp/a0223_f013.png new file mode 100644 index 0000000000..ec76c09dfd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0223_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0224_f000.png b/sa1/graphics/obj_tiles/4bpp/a0224_f000.png new file mode 100644 index 0000000000..7d9a0cff21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0224_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0224_f001.png b/sa1/graphics/obj_tiles/4bpp/a0224_f001.png new file mode 100644 index 0000000000..7c64de7923 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0224_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0224_f002.png b/sa1/graphics/obj_tiles/4bpp/a0224_f002.png new file mode 100644 index 0000000000..de5175ec17 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0224_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0224_f003.png b/sa1/graphics/obj_tiles/4bpp/a0224_f003.png new file mode 100644 index 0000000000..ac51f48a1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0224_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f000.png b/sa1/graphics/obj_tiles/4bpp/a0225_f000.png new file mode 100644 index 0000000000..bc12201f0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f001.png b/sa1/graphics/obj_tiles/4bpp/a0225_f001.png new file mode 100644 index 0000000000..b6005d2a0d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f002.png b/sa1/graphics/obj_tiles/4bpp/a0225_f002.png new file mode 100644 index 0000000000..22d514198b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f003.png b/sa1/graphics/obj_tiles/4bpp/a0225_f003.png new file mode 100644 index 0000000000..5be6b690db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f004.png b/sa1/graphics/obj_tiles/4bpp/a0225_f004.png new file mode 100644 index 0000000000..073ef757b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f005.png b/sa1/graphics/obj_tiles/4bpp/a0225_f005.png new file mode 100644 index 0000000000..46b3a25736 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f006.png b/sa1/graphics/obj_tiles/4bpp/a0225_f006.png new file mode 100644 index 0000000000..b568ba574e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f007.png b/sa1/graphics/obj_tiles/4bpp/a0225_f007.png new file mode 100644 index 0000000000..38423702cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0225_f008.png b/sa1/graphics/obj_tiles/4bpp/a0225_f008.png new file mode 100644 index 0000000000..7834887084 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0225_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f000.png b/sa1/graphics/obj_tiles/4bpp/a0226_f000.png new file mode 100644 index 0000000000..05a946b454 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f001.png b/sa1/graphics/obj_tiles/4bpp/a0226_f001.png new file mode 100644 index 0000000000..488415d0c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f002.png b/sa1/graphics/obj_tiles/4bpp/a0226_f002.png new file mode 100644 index 0000000000..e18dbf3468 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f003.png b/sa1/graphics/obj_tiles/4bpp/a0226_f003.png new file mode 100644 index 0000000000..6ac939b8ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f004.png b/sa1/graphics/obj_tiles/4bpp/a0226_f004.png new file mode 100644 index 0000000000..a8a82ff3f8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f005.png b/sa1/graphics/obj_tiles/4bpp/a0226_f005.png new file mode 100644 index 0000000000..8cc7d3f70b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f006.png b/sa1/graphics/obj_tiles/4bpp/a0226_f006.png new file mode 100644 index 0000000000..906faaa848 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f007.png b/sa1/graphics/obj_tiles/4bpp/a0226_f007.png new file mode 100644 index 0000000000..f8562deba7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f008.png b/sa1/graphics/obj_tiles/4bpp/a0226_f008.png new file mode 100644 index 0000000000..e972883308 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f009.png b/sa1/graphics/obj_tiles/4bpp/a0226_f009.png new file mode 100644 index 0000000000..59703cd62b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f010.png b/sa1/graphics/obj_tiles/4bpp/a0226_f010.png new file mode 100644 index 0000000000..b53fc6d1e5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f011.png b/sa1/graphics/obj_tiles/4bpp/a0226_f011.png new file mode 100644 index 0000000000..5de7b15cf7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f012.png b/sa1/graphics/obj_tiles/4bpp/a0226_f012.png new file mode 100644 index 0000000000..897aee4f2d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f013.png b/sa1/graphics/obj_tiles/4bpp/a0226_f013.png new file mode 100644 index 0000000000..26c6aa02e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f014.png b/sa1/graphics/obj_tiles/4bpp/a0226_f014.png new file mode 100644 index 0000000000..3690ea8354 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f015.png b/sa1/graphics/obj_tiles/4bpp/a0226_f015.png new file mode 100644 index 0000000000..d0f84f4e0e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f016.png b/sa1/graphics/obj_tiles/4bpp/a0226_f016.png new file mode 100644 index 0000000000..7ac97531a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0226_f017.png b/sa1/graphics/obj_tiles/4bpp/a0226_f017.png new file mode 100644 index 0000000000..2efe4f1c71 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0226_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f000.png b/sa1/graphics/obj_tiles/4bpp/a0227_f000.png new file mode 100644 index 0000000000..4c971c98a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f001.png b/sa1/graphics/obj_tiles/4bpp/a0227_f001.png new file mode 100644 index 0000000000..d9169454ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f002.png b/sa1/graphics/obj_tiles/4bpp/a0227_f002.png new file mode 100644 index 0000000000..9188545288 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f003.png b/sa1/graphics/obj_tiles/4bpp/a0227_f003.png new file mode 100644 index 0000000000..0ad702b056 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f004.png b/sa1/graphics/obj_tiles/4bpp/a0227_f004.png new file mode 100644 index 0000000000..adba955282 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f005.png b/sa1/graphics/obj_tiles/4bpp/a0227_f005.png new file mode 100644 index 0000000000..b2d7ed4239 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f006.png b/sa1/graphics/obj_tiles/4bpp/a0227_f006.png new file mode 100644 index 0000000000..f5f327ecd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f007.png b/sa1/graphics/obj_tiles/4bpp/a0227_f007.png new file mode 100644 index 0000000000..99cc3bdd7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f008.png b/sa1/graphics/obj_tiles/4bpp/a0227_f008.png new file mode 100644 index 0000000000..cd10314728 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f009.png b/sa1/graphics/obj_tiles/4bpp/a0227_f009.png new file mode 100644 index 0000000000..c4ae538839 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f010.png b/sa1/graphics/obj_tiles/4bpp/a0227_f010.png new file mode 100644 index 0000000000..5735d92fc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f011.png b/sa1/graphics/obj_tiles/4bpp/a0227_f011.png new file mode 100644 index 0000000000..04f55d6a0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f012.png b/sa1/graphics/obj_tiles/4bpp/a0227_f012.png new file mode 100644 index 0000000000..3c30a0097c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f013.png b/sa1/graphics/obj_tiles/4bpp/a0227_f013.png new file mode 100644 index 0000000000..1318caaae0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0227_f014.png b/sa1/graphics/obj_tiles/4bpp/a0227_f014.png new file mode 100644 index 0000000000..e9cc105e6c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0227_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0228_f000.png b/sa1/graphics/obj_tiles/4bpp/a0228_f000.png new file mode 100644 index 0000000000..4d36478111 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0228_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0228_f001.png b/sa1/graphics/obj_tiles/4bpp/a0228_f001.png new file mode 100644 index 0000000000..59ff5473ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0228_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0228_f002.png b/sa1/graphics/obj_tiles/4bpp/a0228_f002.png new file mode 100644 index 0000000000..c4884d9c08 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0228_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f000.png b/sa1/graphics/obj_tiles/4bpp/a0229_f000.png new file mode 100644 index 0000000000..5dcdc7d67d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f001.png b/sa1/graphics/obj_tiles/4bpp/a0229_f001.png new file mode 100644 index 0000000000..6790f41779 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f002.png b/sa1/graphics/obj_tiles/4bpp/a0229_f002.png new file mode 100644 index 0000000000..1bb443e6fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f003.png b/sa1/graphics/obj_tiles/4bpp/a0229_f003.png new file mode 100644 index 0000000000..334349504a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f004.png b/sa1/graphics/obj_tiles/4bpp/a0229_f004.png new file mode 100644 index 0000000000..daf4c6bde8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f005.png b/sa1/graphics/obj_tiles/4bpp/a0229_f005.png new file mode 100644 index 0000000000..71dc00296d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f006.png b/sa1/graphics/obj_tiles/4bpp/a0229_f006.png new file mode 100644 index 0000000000..2a65f08c4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f007.png b/sa1/graphics/obj_tiles/4bpp/a0229_f007.png new file mode 100644 index 0000000000..dd22a110d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f008.png b/sa1/graphics/obj_tiles/4bpp/a0229_f008.png new file mode 100644 index 0000000000..384055ac71 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f009.png b/sa1/graphics/obj_tiles/4bpp/a0229_f009.png new file mode 100644 index 0000000000..450c0bf6d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0229_f010.png b/sa1/graphics/obj_tiles/4bpp/a0229_f010.png new file mode 100644 index 0000000000..d1c34ceecd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0229_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f000.png b/sa1/graphics/obj_tiles/4bpp/a0230_f000.png new file mode 100644 index 0000000000..e972883308 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f001.png b/sa1/graphics/obj_tiles/4bpp/a0230_f001.png new file mode 100644 index 0000000000..c1a4f34570 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f002.png b/sa1/graphics/obj_tiles/4bpp/a0230_f002.png new file mode 100644 index 0000000000..240b0b8737 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f003.png b/sa1/graphics/obj_tiles/4bpp/a0230_f003.png new file mode 100644 index 0000000000..fc35ca3893 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f004.png b/sa1/graphics/obj_tiles/4bpp/a0230_f004.png new file mode 100644 index 0000000000..042bf02f8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f005.png b/sa1/graphics/obj_tiles/4bpp/a0230_f005.png new file mode 100644 index 0000000000..8661769df2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f006.png b/sa1/graphics/obj_tiles/4bpp/a0230_f006.png new file mode 100644 index 0000000000..4dccb50b4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f007.png b/sa1/graphics/obj_tiles/4bpp/a0230_f007.png new file mode 100644 index 0000000000..368251a4bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f008.png b/sa1/graphics/obj_tiles/4bpp/a0230_f008.png new file mode 100644 index 0000000000..5be3d92345 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f009.png b/sa1/graphics/obj_tiles/4bpp/a0230_f009.png new file mode 100644 index 0000000000..4947e5316c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f010.png b/sa1/graphics/obj_tiles/4bpp/a0230_f010.png new file mode 100644 index 0000000000..4055f86a63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f011.png b/sa1/graphics/obj_tiles/4bpp/a0230_f011.png new file mode 100644 index 0000000000..a46067afce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f012.png b/sa1/graphics/obj_tiles/4bpp/a0230_f012.png new file mode 100644 index 0000000000..215c109ede Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0230_f013.png b/sa1/graphics/obj_tiles/4bpp/a0230_f013.png new file mode 100644 index 0000000000..e7a71a73f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0230_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0231_f000.png b/sa1/graphics/obj_tiles/4bpp/a0231_f000.png new file mode 100644 index 0000000000..906faaa848 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0231_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0231_f001.png b/sa1/graphics/obj_tiles/4bpp/a0231_f001.png new file mode 100644 index 0000000000..f5f327ecd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0231_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0231_f002.png b/sa1/graphics/obj_tiles/4bpp/a0231_f002.png new file mode 100644 index 0000000000..1e0b0126ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0231_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0231_f003.png b/sa1/graphics/obj_tiles/4bpp/a0231_f003.png new file mode 100644 index 0000000000..3cc2764245 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0231_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0231_f004.png b/sa1/graphics/obj_tiles/4bpp/a0231_f004.png new file mode 100644 index 0000000000..1d57aac3a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0231_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0231_f005.png b/sa1/graphics/obj_tiles/4bpp/a0231_f005.png new file mode 100644 index 0000000000..cd10314728 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0231_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0231_f006.png b/sa1/graphics/obj_tiles/4bpp/a0231_f006.png new file mode 100644 index 0000000000..b53fc6d1e5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0231_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0232_f000.png b/sa1/graphics/obj_tiles/4bpp/a0232_f000.png new file mode 100644 index 0000000000..70eb226e1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0232_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0232_f001.png b/sa1/graphics/obj_tiles/4bpp/a0232_f001.png new file mode 100644 index 0000000000..fb8270997c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0232_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0232_f002.png b/sa1/graphics/obj_tiles/4bpp/a0232_f002.png new file mode 100644 index 0000000000..ee3327ae7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0232_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f000.png b/sa1/graphics/obj_tiles/4bpp/a0233_f000.png new file mode 100644 index 0000000000..3694e1a3a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f001.png b/sa1/graphics/obj_tiles/4bpp/a0233_f001.png new file mode 100644 index 0000000000..20162d7565 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f002.png b/sa1/graphics/obj_tiles/4bpp/a0233_f002.png new file mode 100644 index 0000000000..51b440f68f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f003.png b/sa1/graphics/obj_tiles/4bpp/a0233_f003.png new file mode 100644 index 0000000000..d6457bd675 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f004.png b/sa1/graphics/obj_tiles/4bpp/a0233_f004.png new file mode 100644 index 0000000000..616733fbc4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f005.png b/sa1/graphics/obj_tiles/4bpp/a0233_f005.png new file mode 100644 index 0000000000..43cfadbeef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f006.png b/sa1/graphics/obj_tiles/4bpp/a0233_f006.png new file mode 100644 index 0000000000..12a8fad09e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0233_f007.png b/sa1/graphics/obj_tiles/4bpp/a0233_f007.png new file mode 100644 index 0000000000..2ab1491391 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0233_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f000.png b/sa1/graphics/obj_tiles/4bpp/a0234_f000.png new file mode 100644 index 0000000000..ac81316981 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f001.png b/sa1/graphics/obj_tiles/4bpp/a0234_f001.png new file mode 100644 index 0000000000..6890d5cfe4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f002.png b/sa1/graphics/obj_tiles/4bpp/a0234_f002.png new file mode 100644 index 0000000000..bc7527331b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f003.png b/sa1/graphics/obj_tiles/4bpp/a0234_f003.png new file mode 100644 index 0000000000..0f20f58226 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f004.png b/sa1/graphics/obj_tiles/4bpp/a0234_f004.png new file mode 100644 index 0000000000..5b6a2ae8e3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f005.png b/sa1/graphics/obj_tiles/4bpp/a0234_f005.png new file mode 100644 index 0000000000..9589925bdb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f006.png b/sa1/graphics/obj_tiles/4bpp/a0234_f006.png new file mode 100644 index 0000000000..6112ea6f7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0234_f007.png b/sa1/graphics/obj_tiles/4bpp/a0234_f007.png new file mode 100644 index 0000000000..a6bcfa9717 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0234_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f000.png b/sa1/graphics/obj_tiles/4bpp/a0235_f000.png new file mode 100644 index 0000000000..bab12e0c01 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f001.png b/sa1/graphics/obj_tiles/4bpp/a0235_f001.png new file mode 100644 index 0000000000..3a850e9928 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f002.png b/sa1/graphics/obj_tiles/4bpp/a0235_f002.png new file mode 100644 index 0000000000..c544440f6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f003.png b/sa1/graphics/obj_tiles/4bpp/a0235_f003.png new file mode 100644 index 0000000000..a0dc049828 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f004.png b/sa1/graphics/obj_tiles/4bpp/a0235_f004.png new file mode 100644 index 0000000000..542ca83c0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f005.png b/sa1/graphics/obj_tiles/4bpp/a0235_f005.png new file mode 100644 index 0000000000..f01108da0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f006.png b/sa1/graphics/obj_tiles/4bpp/a0235_f006.png new file mode 100644 index 0000000000..6c5fb3125f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f007.png b/sa1/graphics/obj_tiles/4bpp/a0235_f007.png new file mode 100644 index 0000000000..fdd5fe6751 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f008.png b/sa1/graphics/obj_tiles/4bpp/a0235_f008.png new file mode 100644 index 0000000000..7ff7e371b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f009.png b/sa1/graphics/obj_tiles/4bpp/a0235_f009.png new file mode 100644 index 0000000000..94b497f97d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f010.png b/sa1/graphics/obj_tiles/4bpp/a0235_f010.png new file mode 100644 index 0000000000..08d5fea8d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f011.png b/sa1/graphics/obj_tiles/4bpp/a0235_f011.png new file mode 100644 index 0000000000..39622fcab5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f012.png b/sa1/graphics/obj_tiles/4bpp/a0235_f012.png new file mode 100644 index 0000000000..3b7f9bc9ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f013.png b/sa1/graphics/obj_tiles/4bpp/a0235_f013.png new file mode 100644 index 0000000000..8fea9945a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f014.png b/sa1/graphics/obj_tiles/4bpp/a0235_f014.png new file mode 100644 index 0000000000..adb0727fa8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f015.png b/sa1/graphics/obj_tiles/4bpp/a0235_f015.png new file mode 100644 index 0000000000..006d9b81ad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f016.png b/sa1/graphics/obj_tiles/4bpp/a0235_f016.png new file mode 100644 index 0000000000..5ee49bdf43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f017.png b/sa1/graphics/obj_tiles/4bpp/a0235_f017.png new file mode 100644 index 0000000000..da671d92d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f018.png b/sa1/graphics/obj_tiles/4bpp/a0235_f018.png new file mode 100644 index 0000000000..85beccd713 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f019.png b/sa1/graphics/obj_tiles/4bpp/a0235_f019.png new file mode 100644 index 0000000000..9beb24c18c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f020.png b/sa1/graphics/obj_tiles/4bpp/a0235_f020.png new file mode 100644 index 0000000000..ed69dcad43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f021.png b/sa1/graphics/obj_tiles/4bpp/a0235_f021.png new file mode 100644 index 0000000000..6707e6073b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f022.png b/sa1/graphics/obj_tiles/4bpp/a0235_f022.png new file mode 100644 index 0000000000..4d328a9b91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0235_f023.png b/sa1/graphics/obj_tiles/4bpp/a0235_f023.png new file mode 100644 index 0000000000..eb0f6d01e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0235_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f000.png b/sa1/graphics/obj_tiles/4bpp/a0236_f000.png new file mode 100644 index 0000000000..8c19986992 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f001.png b/sa1/graphics/obj_tiles/4bpp/a0236_f001.png new file mode 100644 index 0000000000..c4cdd55647 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f002.png b/sa1/graphics/obj_tiles/4bpp/a0236_f002.png new file mode 100644 index 0000000000..950615e94d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f003.png b/sa1/graphics/obj_tiles/4bpp/a0236_f003.png new file mode 100644 index 0000000000..599c33d1b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f004.png b/sa1/graphics/obj_tiles/4bpp/a0236_f004.png new file mode 100644 index 0000000000..638fc5480a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f005.png b/sa1/graphics/obj_tiles/4bpp/a0236_f005.png new file mode 100644 index 0000000000..c28d8217c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f006.png b/sa1/graphics/obj_tiles/4bpp/a0236_f006.png new file mode 100644 index 0000000000..5c81e1ae8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0236_f007.png b/sa1/graphics/obj_tiles/4bpp/a0236_f007.png new file mode 100644 index 0000000000..c324cbca8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0236_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0237_f000.png b/sa1/graphics/obj_tiles/4bpp/a0237_f000.png new file mode 100644 index 0000000000..d0cdf0b281 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0237_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0237_f001.png b/sa1/graphics/obj_tiles/4bpp/a0237_f001.png new file mode 100644 index 0000000000..6bdcb4ca78 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0237_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0237_f002.png b/sa1/graphics/obj_tiles/4bpp/a0237_f002.png new file mode 100644 index 0000000000..891e664717 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0237_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0237_f003.png b/sa1/graphics/obj_tiles/4bpp/a0237_f003.png new file mode 100644 index 0000000000..3b4bf5f142 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0237_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0237_f004.png b/sa1/graphics/obj_tiles/4bpp/a0237_f004.png new file mode 100644 index 0000000000..1a675db1a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0237_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0238_f000.png b/sa1/graphics/obj_tiles/4bpp/a0238_f000.png new file mode 100644 index 0000000000..698f6f2da0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0238_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0238_f001.png b/sa1/graphics/obj_tiles/4bpp/a0238_f001.png new file mode 100644 index 0000000000..23fe58fea7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0238_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0238_f002.png b/sa1/graphics/obj_tiles/4bpp/a0238_f002.png new file mode 100644 index 0000000000..f918a62901 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0238_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0238_f003.png b/sa1/graphics/obj_tiles/4bpp/a0238_f003.png new file mode 100644 index 0000000000..4693847f2b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0238_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f000.png b/sa1/graphics/obj_tiles/4bpp/a0239_f000.png new file mode 100644 index 0000000000..31259414bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f001.png b/sa1/graphics/obj_tiles/4bpp/a0239_f001.png new file mode 100644 index 0000000000..a0a16de736 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f002.png b/sa1/graphics/obj_tiles/4bpp/a0239_f002.png new file mode 100644 index 0000000000..d15c817c99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f003.png b/sa1/graphics/obj_tiles/4bpp/a0239_f003.png new file mode 100644 index 0000000000..0ede2029ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f004.png b/sa1/graphics/obj_tiles/4bpp/a0239_f004.png new file mode 100644 index 0000000000..f22ae0441f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f005.png b/sa1/graphics/obj_tiles/4bpp/a0239_f005.png new file mode 100644 index 0000000000..2c263dbd27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f006.png b/sa1/graphics/obj_tiles/4bpp/a0239_f006.png new file mode 100644 index 0000000000..a903442ece Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f007.png b/sa1/graphics/obj_tiles/4bpp/a0239_f007.png new file mode 100644 index 0000000000..91f9651ace Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f008.png b/sa1/graphics/obj_tiles/4bpp/a0239_f008.png new file mode 100644 index 0000000000..ccfc3abe15 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f009.png b/sa1/graphics/obj_tiles/4bpp/a0239_f009.png new file mode 100644 index 0000000000..de1cd28a04 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f010.png b/sa1/graphics/obj_tiles/4bpp/a0239_f010.png new file mode 100644 index 0000000000..0e6c2f3bd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f011.png b/sa1/graphics/obj_tiles/4bpp/a0239_f011.png new file mode 100644 index 0000000000..743247080a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f012.png b/sa1/graphics/obj_tiles/4bpp/a0239_f012.png new file mode 100644 index 0000000000..dd4382c541 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f013.png b/sa1/graphics/obj_tiles/4bpp/a0239_f013.png new file mode 100644 index 0000000000..7e400975fc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f014.png b/sa1/graphics/obj_tiles/4bpp/a0239_f014.png new file mode 100644 index 0000000000..4f696ca5e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f015.png b/sa1/graphics/obj_tiles/4bpp/a0239_f015.png new file mode 100644 index 0000000000..5aa0a311a2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f016.png b/sa1/graphics/obj_tiles/4bpp/a0239_f016.png new file mode 100644 index 0000000000..85082f02bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f017.png b/sa1/graphics/obj_tiles/4bpp/a0239_f017.png new file mode 100644 index 0000000000..769aedac35 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f018.png b/sa1/graphics/obj_tiles/4bpp/a0239_f018.png new file mode 100644 index 0000000000..6bb919ebfd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0239_f019.png b/sa1/graphics/obj_tiles/4bpp/a0239_f019.png new file mode 100644 index 0000000000..d2053438bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0239_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0240_f000.png b/sa1/graphics/obj_tiles/4bpp/a0240_f000.png new file mode 100644 index 0000000000..a628841341 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0240_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0240_f001.png b/sa1/graphics/obj_tiles/4bpp/a0240_f001.png new file mode 100644 index 0000000000..256fc24af7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0240_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0240_f002.png b/sa1/graphics/obj_tiles/4bpp/a0240_f002.png new file mode 100644 index 0000000000..b91b9e5bb3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0240_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0240_f003.png b/sa1/graphics/obj_tiles/4bpp/a0240_f003.png new file mode 100644 index 0000000000..038a9472dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0240_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0240_f004.png b/sa1/graphics/obj_tiles/4bpp/a0240_f004.png new file mode 100644 index 0000000000..07fca5f087 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0240_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0240_f005.png b/sa1/graphics/obj_tiles/4bpp/a0240_f005.png new file mode 100644 index 0000000000..199f8cc9ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0240_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f000.png b/sa1/graphics/obj_tiles/4bpp/a0241_f000.png new file mode 100644 index 0000000000..b3e65b1e01 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f001.png b/sa1/graphics/obj_tiles/4bpp/a0241_f001.png new file mode 100644 index 0000000000..6ef14a5ea4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f002.png b/sa1/graphics/obj_tiles/4bpp/a0241_f002.png new file mode 100644 index 0000000000..cacc12f767 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f003.png b/sa1/graphics/obj_tiles/4bpp/a0241_f003.png new file mode 100644 index 0000000000..5c629641db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f004.png b/sa1/graphics/obj_tiles/4bpp/a0241_f004.png new file mode 100644 index 0000000000..5344c74a94 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f005.png b/sa1/graphics/obj_tiles/4bpp/a0241_f005.png new file mode 100644 index 0000000000..61fcc140cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f006.png b/sa1/graphics/obj_tiles/4bpp/a0241_f006.png new file mode 100644 index 0000000000..82a68039dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0241_f007.png b/sa1/graphics/obj_tiles/4bpp/a0241_f007.png new file mode 100644 index 0000000000..15ebd57629 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0241_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0242_f000.png b/sa1/graphics/obj_tiles/4bpp/a0242_f000.png new file mode 100644 index 0000000000..d0cdf0b281 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0242_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0242_f001.png b/sa1/graphics/obj_tiles/4bpp/a0242_f001.png new file mode 100644 index 0000000000..6bdcb4ca78 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0242_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0242_f002.png b/sa1/graphics/obj_tiles/4bpp/a0242_f002.png new file mode 100644 index 0000000000..891e664717 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0242_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0245_f000.png b/sa1/graphics/obj_tiles/4bpp/a0245_f000.png new file mode 100644 index 0000000000..ff853dcb13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0245_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0245_f001.png b/sa1/graphics/obj_tiles/4bpp/a0245_f001.png new file mode 100644 index 0000000000..2685f80433 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0245_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0245_f002.png b/sa1/graphics/obj_tiles/4bpp/a0245_f002.png new file mode 100644 index 0000000000..ab2cb4aec3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0245_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0245_f003.png b/sa1/graphics/obj_tiles/4bpp/a0245_f003.png new file mode 100644 index 0000000000..bee1ec09e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0245_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0245_f004.png b/sa1/graphics/obj_tiles/4bpp/a0245_f004.png new file mode 100644 index 0000000000..db44a8b660 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0245_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0245_f005.png b/sa1/graphics/obj_tiles/4bpp/a0245_f005.png new file mode 100644 index 0000000000..2baa6b8010 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0245_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0246_f000.png b/sa1/graphics/obj_tiles/4bpp/a0246_f000.png new file mode 100644 index 0000000000..67e89fd575 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0246_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0246_f001.png b/sa1/graphics/obj_tiles/4bpp/a0246_f001.png new file mode 100644 index 0000000000..5518c4c07f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0246_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0246_f002.png b/sa1/graphics/obj_tiles/4bpp/a0246_f002.png new file mode 100644 index 0000000000..57d38fd9bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0246_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0246_f003.png b/sa1/graphics/obj_tiles/4bpp/a0246_f003.png new file mode 100644 index 0000000000..ffd3cadee6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0246_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f000.png b/sa1/graphics/obj_tiles/4bpp/a0249_f000.png new file mode 100644 index 0000000000..5fc1f4911c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f001.png b/sa1/graphics/obj_tiles/4bpp/a0249_f001.png new file mode 100644 index 0000000000..25012fcd27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f002.png b/sa1/graphics/obj_tiles/4bpp/a0249_f002.png new file mode 100644 index 0000000000..8a95fbffd1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f003.png b/sa1/graphics/obj_tiles/4bpp/a0249_f003.png new file mode 100644 index 0000000000..659bfbe86c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f004.png b/sa1/graphics/obj_tiles/4bpp/a0249_f004.png new file mode 100644 index 0000000000..de6ae51105 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f005.png b/sa1/graphics/obj_tiles/4bpp/a0249_f005.png new file mode 100644 index 0000000000..b4af87f8da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f006.png b/sa1/graphics/obj_tiles/4bpp/a0249_f006.png new file mode 100644 index 0000000000..40b8c2df22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0249_f007.png b/sa1/graphics/obj_tiles/4bpp/a0249_f007.png new file mode 100644 index 0000000000..ec76c09dfd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0249_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f000.png b/sa1/graphics/obj_tiles/4bpp/a0250_f000.png new file mode 100644 index 0000000000..b15f260792 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f001.png b/sa1/graphics/obj_tiles/4bpp/a0250_f001.png new file mode 100644 index 0000000000..285abaf4aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f002.png b/sa1/graphics/obj_tiles/4bpp/a0250_f002.png new file mode 100644 index 0000000000..e79a7f2c92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f003.png b/sa1/graphics/obj_tiles/4bpp/a0250_f003.png new file mode 100644 index 0000000000..a714224bc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f004.png b/sa1/graphics/obj_tiles/4bpp/a0250_f004.png new file mode 100644 index 0000000000..923d8654f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f005.png b/sa1/graphics/obj_tiles/4bpp/a0250_f005.png new file mode 100644 index 0000000000..3d4e97548f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f006.png b/sa1/graphics/obj_tiles/4bpp/a0250_f006.png new file mode 100644 index 0000000000..ef1fc50fb0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f007.png b/sa1/graphics/obj_tiles/4bpp/a0250_f007.png new file mode 100644 index 0000000000..d7de3b6b66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f008.png b/sa1/graphics/obj_tiles/4bpp/a0250_f008.png new file mode 100644 index 0000000000..81bf8e0d54 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f009.png b/sa1/graphics/obj_tiles/4bpp/a0250_f009.png new file mode 100644 index 0000000000..ac81316981 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f010.png b/sa1/graphics/obj_tiles/4bpp/a0250_f010.png new file mode 100644 index 0000000000..6890d5cfe4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f011.png b/sa1/graphics/obj_tiles/4bpp/a0250_f011.png new file mode 100644 index 0000000000..a8b922243e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f012.png b/sa1/graphics/obj_tiles/4bpp/a0250_f012.png new file mode 100644 index 0000000000..7c5a4fd437 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f013.png b/sa1/graphics/obj_tiles/4bpp/a0250_f013.png new file mode 100644 index 0000000000..7dd4469a4f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f014.png b/sa1/graphics/obj_tiles/4bpp/a0250_f014.png new file mode 100644 index 0000000000..e0efa28519 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f015.png b/sa1/graphics/obj_tiles/4bpp/a0250_f015.png new file mode 100644 index 0000000000..9759afb4c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f016.png b/sa1/graphics/obj_tiles/4bpp/a0250_f016.png new file mode 100644 index 0000000000..3d08d01931 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f017.png b/sa1/graphics/obj_tiles/4bpp/a0250_f017.png new file mode 100644 index 0000000000..9d77a73126 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0250_f018.png b/sa1/graphics/obj_tiles/4bpp/a0250_f018.png new file mode 100644 index 0000000000..583291b6eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0250_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0260_f000.png b/sa1/graphics/obj_tiles/4bpp/a0260_f000.png new file mode 100644 index 0000000000..85038bfa53 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0260_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0260_f001.png b/sa1/graphics/obj_tiles/4bpp/a0260_f001.png new file mode 100644 index 0000000000..5299bbbe5c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0260_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0261_f000.png b/sa1/graphics/obj_tiles/4bpp/a0261_f000.png new file mode 100644 index 0000000000..67e89fd575 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0261_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0261_f001.png b/sa1/graphics/obj_tiles/4bpp/a0261_f001.png new file mode 100644 index 0000000000..5518c4c07f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0261_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0261_f002.png b/sa1/graphics/obj_tiles/4bpp/a0261_f002.png new file mode 100644 index 0000000000..57d38fd9bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0261_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0261_f003.png b/sa1/graphics/obj_tiles/4bpp/a0261_f003.png new file mode 100644 index 0000000000..ffd3cadee6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0261_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0262_f000.png b/sa1/graphics/obj_tiles/4bpp/a0262_f000.png new file mode 100644 index 0000000000..7687842bf7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0262_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0262_f001.png b/sa1/graphics/obj_tiles/4bpp/a0262_f001.png new file mode 100644 index 0000000000..9a8bda0392 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0262_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f000.png b/sa1/graphics/obj_tiles/4bpp/a0263_f000.png new file mode 100644 index 0000000000..39b0133cc8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f001.png b/sa1/graphics/obj_tiles/4bpp/a0263_f001.png new file mode 100644 index 0000000000..1fb3529d88 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f002.png b/sa1/graphics/obj_tiles/4bpp/a0263_f002.png new file mode 100644 index 0000000000..00a4126a95 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f003.png b/sa1/graphics/obj_tiles/4bpp/a0263_f003.png new file mode 100644 index 0000000000..2d30e26896 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f004.png b/sa1/graphics/obj_tiles/4bpp/a0263_f004.png new file mode 100644 index 0000000000..ef1fc50fb0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f005.png b/sa1/graphics/obj_tiles/4bpp/a0263_f005.png new file mode 100644 index 0000000000..d7de3b6b66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f006.png b/sa1/graphics/obj_tiles/4bpp/a0263_f006.png new file mode 100644 index 0000000000..81bf8e0d54 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f007.png b/sa1/graphics/obj_tiles/4bpp/a0263_f007.png new file mode 100644 index 0000000000..dd58af00a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f008.png b/sa1/graphics/obj_tiles/4bpp/a0263_f008.png new file mode 100644 index 0000000000..ac81316981 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f009.png b/sa1/graphics/obj_tiles/4bpp/a0263_f009.png new file mode 100644 index 0000000000..6890d5cfe4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0263_f010.png b/sa1/graphics/obj_tiles/4bpp/a0263_f010.png new file mode 100644 index 0000000000..bc7527331b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0263_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0264_f000.png b/sa1/graphics/obj_tiles/4bpp/a0264_f000.png new file mode 100644 index 0000000000..b58ce9d02e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0264_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0264_f001.png b/sa1/graphics/obj_tiles/4bpp/a0264_f001.png new file mode 100644 index 0000000000..c2f7dfd46a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0264_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0264_f002.png b/sa1/graphics/obj_tiles/4bpp/a0264_f002.png new file mode 100644 index 0000000000..7ebf0605d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0264_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f000.png b/sa1/graphics/obj_tiles/4bpp/a0265_f000.png new file mode 100644 index 0000000000..288d44093e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f001.png b/sa1/graphics/obj_tiles/4bpp/a0265_f001.png new file mode 100644 index 0000000000..2de092fa7d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f002.png b/sa1/graphics/obj_tiles/4bpp/a0265_f002.png new file mode 100644 index 0000000000..6846f4bbfd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f003.png b/sa1/graphics/obj_tiles/4bpp/a0265_f003.png new file mode 100644 index 0000000000..9e8091f896 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f004.png b/sa1/graphics/obj_tiles/4bpp/a0265_f004.png new file mode 100644 index 0000000000..c32f93fb3f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f005.png b/sa1/graphics/obj_tiles/4bpp/a0265_f005.png new file mode 100644 index 0000000000..a4b1a10c2d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f006.png b/sa1/graphics/obj_tiles/4bpp/a0265_f006.png new file mode 100644 index 0000000000..7ebf0605d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f007.png b/sa1/graphics/obj_tiles/4bpp/a0265_f007.png new file mode 100644 index 0000000000..ddcf9bbbc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f008.png b/sa1/graphics/obj_tiles/4bpp/a0265_f008.png new file mode 100644 index 0000000000..e0ab27d767 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f009.png b/sa1/graphics/obj_tiles/4bpp/a0265_f009.png new file mode 100644 index 0000000000..df26e2b088 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f010.png b/sa1/graphics/obj_tiles/4bpp/a0265_f010.png new file mode 100644 index 0000000000..0b419675eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f011.png b/sa1/graphics/obj_tiles/4bpp/a0265_f011.png new file mode 100644 index 0000000000..2b62b19dca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f012.png b/sa1/graphics/obj_tiles/4bpp/a0265_f012.png new file mode 100644 index 0000000000..97234b6824 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0265_f013.png b/sa1/graphics/obj_tiles/4bpp/a0265_f013.png new file mode 100644 index 0000000000..f6ba5c89ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0265_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0269_f000.png b/sa1/graphics/obj_tiles/4bpp/a0269_f000.png new file mode 100644 index 0000000000..1b95771426 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0269_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0269_f001.png b/sa1/graphics/obj_tiles/4bpp/a0269_f001.png new file mode 100644 index 0000000000..1df52c9cc0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0269_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0269_f002.png b/sa1/graphics/obj_tiles/4bpp/a0269_f002.png new file mode 100644 index 0000000000..eaee43227f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0269_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0269_f003.png b/sa1/graphics/obj_tiles/4bpp/a0269_f003.png new file mode 100644 index 0000000000..87dcb8d47b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0269_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0269_f004.png b/sa1/graphics/obj_tiles/4bpp/a0269_f004.png new file mode 100644 index 0000000000..a39ff26aa6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0269_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0269_f005.png b/sa1/graphics/obj_tiles/4bpp/a0269_f005.png new file mode 100644 index 0000000000..79404f7da9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0269_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0270_f000.png b/sa1/graphics/obj_tiles/4bpp/a0270_f000.png new file mode 100644 index 0000000000..6abedced59 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0270_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0270_f001.png b/sa1/graphics/obj_tiles/4bpp/a0270_f001.png new file mode 100644 index 0000000000..a0de51fbe6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0270_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0271_f000.png b/sa1/graphics/obj_tiles/4bpp/a0271_f000.png new file mode 100644 index 0000000000..6cbd8b8050 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0271_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0271_f001.png b/sa1/graphics/obj_tiles/4bpp/a0271_f001.png new file mode 100644 index 0000000000..760dc1f0ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0271_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0271_f002.png b/sa1/graphics/obj_tiles/4bpp/a0271_f002.png new file mode 100644 index 0000000000..13120a7ffc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0271_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0271_f003.png b/sa1/graphics/obj_tiles/4bpp/a0271_f003.png new file mode 100644 index 0000000000..206134c5fe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0271_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0271_f004.png b/sa1/graphics/obj_tiles/4bpp/a0271_f004.png new file mode 100644 index 0000000000..79a3391c4f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0271_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0271_f005.png b/sa1/graphics/obj_tiles/4bpp/a0271_f005.png new file mode 100644 index 0000000000..5a932dc447 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0271_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0280_f000.png b/sa1/graphics/obj_tiles/4bpp/a0280_f000.png new file mode 100644 index 0000000000..ef7e4fece2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0280_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0280_f001.png b/sa1/graphics/obj_tiles/4bpp/a0280_f001.png new file mode 100644 index 0000000000..826e802689 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0280_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0280_f002.png b/sa1/graphics/obj_tiles/4bpp/a0280_f002.png new file mode 100644 index 0000000000..e5bfb81101 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0280_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0280_f003.png b/sa1/graphics/obj_tiles/4bpp/a0280_f003.png new file mode 100644 index 0000000000..5f9505e55d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0280_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0281_f000.png b/sa1/graphics/obj_tiles/4bpp/a0281_f000.png new file mode 100644 index 0000000000..640c852bfc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0281_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0281_f001.png b/sa1/graphics/obj_tiles/4bpp/a0281_f001.png new file mode 100644 index 0000000000..4dd577be6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0281_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0281_f002.png b/sa1/graphics/obj_tiles/4bpp/a0281_f002.png new file mode 100644 index 0000000000..4a466bcf1c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0281_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0281_f003.png b/sa1/graphics/obj_tiles/4bpp/a0281_f003.png new file mode 100644 index 0000000000..5c87e695e3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0281_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0282_f000.png b/sa1/graphics/obj_tiles/4bpp/a0282_f000.png new file mode 100644 index 0000000000..91cd5060cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0282_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0282_f001.png b/sa1/graphics/obj_tiles/4bpp/a0282_f001.png new file mode 100644 index 0000000000..cd5d1502ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0282_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0282_f002.png b/sa1/graphics/obj_tiles/4bpp/a0282_f002.png new file mode 100644 index 0000000000..e07b4bfc84 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0282_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0282_f003.png b/sa1/graphics/obj_tiles/4bpp/a0282_f003.png new file mode 100644 index 0000000000..1f06a18980 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0282_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0284_f000.png b/sa1/graphics/obj_tiles/4bpp/a0284_f000.png new file mode 100644 index 0000000000..4f34730492 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0284_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0284_f001.png b/sa1/graphics/obj_tiles/4bpp/a0284_f001.png new file mode 100644 index 0000000000..e30bf882a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0284_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0285_f000.png b/sa1/graphics/obj_tiles/4bpp/a0285_f000.png new file mode 100644 index 0000000000..ac81316981 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0285_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0285_f001.png b/sa1/graphics/obj_tiles/4bpp/a0285_f001.png new file mode 100644 index 0000000000..6890d5cfe4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0285_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0285_f002.png b/sa1/graphics/obj_tiles/4bpp/a0285_f002.png new file mode 100644 index 0000000000..bc7527331b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0285_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0286_f000.png b/sa1/graphics/obj_tiles/4bpp/a0286_f000.png new file mode 100644 index 0000000000..d1042cf414 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0286_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0286_f001.png b/sa1/graphics/obj_tiles/4bpp/a0286_f001.png new file mode 100644 index 0000000000..1ecf751fed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0286_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0287_f000.png b/sa1/graphics/obj_tiles/4bpp/a0287_f000.png new file mode 100644 index 0000000000..3e93044af2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0287_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0287_f001.png b/sa1/graphics/obj_tiles/4bpp/a0287_f001.png new file mode 100644 index 0000000000..bfeabb4eb8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0287_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0287_f002.png b/sa1/graphics/obj_tiles/4bpp/a0287_f002.png new file mode 100644 index 0000000000..95637f8071 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0287_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0287_f003.png b/sa1/graphics/obj_tiles/4bpp/a0287_f003.png new file mode 100644 index 0000000000..486dfdf5e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0287_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0287_f004.png b/sa1/graphics/obj_tiles/4bpp/a0287_f004.png new file mode 100644 index 0000000000..c5466b94a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0287_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0288_f000.png b/sa1/graphics/obj_tiles/4bpp/a0288_f000.png new file mode 100644 index 0000000000..e041ca6c42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0288_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0288_f001.png b/sa1/graphics/obj_tiles/4bpp/a0288_f001.png new file mode 100644 index 0000000000..4194c84322 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0288_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0288_f002.png b/sa1/graphics/obj_tiles/4bpp/a0288_f002.png new file mode 100644 index 0000000000..4192d2523d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0288_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0288_f003.png b/sa1/graphics/obj_tiles/4bpp/a0288_f003.png new file mode 100644 index 0000000000..eadef7ae48 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0288_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f000.png b/sa1/graphics/obj_tiles/4bpp/a0292_f000.png new file mode 100644 index 0000000000..c38c3768ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f001.png b/sa1/graphics/obj_tiles/4bpp/a0292_f001.png new file mode 100644 index 0000000000..9aebc0a7ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f002.png b/sa1/graphics/obj_tiles/4bpp/a0292_f002.png new file mode 100644 index 0000000000..3a850e9928 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f003.png b/sa1/graphics/obj_tiles/4bpp/a0292_f003.png new file mode 100644 index 0000000000..eb48c3085e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f004.png b/sa1/graphics/obj_tiles/4bpp/a0292_f004.png new file mode 100644 index 0000000000..ec2d1c1b00 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f005.png b/sa1/graphics/obj_tiles/4bpp/a0292_f005.png new file mode 100644 index 0000000000..5ce93316a6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f006.png b/sa1/graphics/obj_tiles/4bpp/a0292_f006.png new file mode 100644 index 0000000000..ac743baa59 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0292_f007.png b/sa1/graphics/obj_tiles/4bpp/a0292_f007.png new file mode 100644 index 0000000000..ac16f7b61e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0292_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0295_f000.png b/sa1/graphics/obj_tiles/4bpp/a0295_f000.png new file mode 100644 index 0000000000..698f6f2da0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0295_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0295_f001.png b/sa1/graphics/obj_tiles/4bpp/a0295_f001.png new file mode 100644 index 0000000000..23fe58fea7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0295_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0295_f002.png b/sa1/graphics/obj_tiles/4bpp/a0295_f002.png new file mode 100644 index 0000000000..f918a62901 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0295_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0295_f003.png b/sa1/graphics/obj_tiles/4bpp/a0295_f003.png new file mode 100644 index 0000000000..4693847f2b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0295_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0296_f000.png b/sa1/graphics/obj_tiles/4bpp/a0296_f000.png new file mode 100644 index 0000000000..cb2ff60b34 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0296_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0296_f001.png b/sa1/graphics/obj_tiles/4bpp/a0296_f001.png new file mode 100644 index 0000000000..3a7553a162 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0296_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0296_f002.png b/sa1/graphics/obj_tiles/4bpp/a0296_f002.png new file mode 100644 index 0000000000..7182272978 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0296_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0297_f000.png b/sa1/graphics/obj_tiles/4bpp/a0297_f000.png new file mode 100644 index 0000000000..aac25b6abd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0297_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f000.png b/sa1/graphics/obj_tiles/4bpp/a0298_f000.png new file mode 100644 index 0000000000..dc7f6e017d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f001.png b/sa1/graphics/obj_tiles/4bpp/a0298_f001.png new file mode 100644 index 0000000000..8af991964b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f002.png b/sa1/graphics/obj_tiles/4bpp/a0298_f002.png new file mode 100644 index 0000000000..02b563f7bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f003.png b/sa1/graphics/obj_tiles/4bpp/a0298_f003.png new file mode 100644 index 0000000000..f8b7fb5d10 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f004.png b/sa1/graphics/obj_tiles/4bpp/a0298_f004.png new file mode 100644 index 0000000000..fa2f9666fe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f005.png b/sa1/graphics/obj_tiles/4bpp/a0298_f005.png new file mode 100644 index 0000000000..38150958dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f006.png b/sa1/graphics/obj_tiles/4bpp/a0298_f006.png new file mode 100644 index 0000000000..49a61ca41b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f007.png b/sa1/graphics/obj_tiles/4bpp/a0298_f007.png new file mode 100644 index 0000000000..29b2be110b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f008.png b/sa1/graphics/obj_tiles/4bpp/a0298_f008.png new file mode 100644 index 0000000000..629d803362 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f009.png b/sa1/graphics/obj_tiles/4bpp/a0298_f009.png new file mode 100644 index 0000000000..3502c67603 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0298_f010.png b/sa1/graphics/obj_tiles/4bpp/a0298_f010.png new file mode 100644 index 0000000000..c301b03a18 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0298_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f000.png b/sa1/graphics/obj_tiles/4bpp/a0299_f000.png new file mode 100644 index 0000000000..76a509dad8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f001.png b/sa1/graphics/obj_tiles/4bpp/a0299_f001.png new file mode 100644 index 0000000000..8c3e1dc86e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f002.png b/sa1/graphics/obj_tiles/4bpp/a0299_f002.png new file mode 100644 index 0000000000..7ab23d1892 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f003.png b/sa1/graphics/obj_tiles/4bpp/a0299_f003.png new file mode 100644 index 0000000000..54bccf3979 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f004.png b/sa1/graphics/obj_tiles/4bpp/a0299_f004.png new file mode 100644 index 0000000000..de15e1ea04 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f005.png b/sa1/graphics/obj_tiles/4bpp/a0299_f005.png new file mode 100644 index 0000000000..579eadea43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f006.png b/sa1/graphics/obj_tiles/4bpp/a0299_f006.png new file mode 100644 index 0000000000..781168e794 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f007.png b/sa1/graphics/obj_tiles/4bpp/a0299_f007.png new file mode 100644 index 0000000000..4afbed0a81 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f008.png b/sa1/graphics/obj_tiles/4bpp/a0299_f008.png new file mode 100644 index 0000000000..fd433197b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f009.png b/sa1/graphics/obj_tiles/4bpp/a0299_f009.png new file mode 100644 index 0000000000..a054c910b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f010.png b/sa1/graphics/obj_tiles/4bpp/a0299_f010.png new file mode 100644 index 0000000000..3499daddf9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f011.png b/sa1/graphics/obj_tiles/4bpp/a0299_f011.png new file mode 100644 index 0000000000..13a24ba6a2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f012.png b/sa1/graphics/obj_tiles/4bpp/a0299_f012.png new file mode 100644 index 0000000000..e0307b4741 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f013.png b/sa1/graphics/obj_tiles/4bpp/a0299_f013.png new file mode 100644 index 0000000000..4f4828dfef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f014.png b/sa1/graphics/obj_tiles/4bpp/a0299_f014.png new file mode 100644 index 0000000000..a9fff4b914 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f015.png b/sa1/graphics/obj_tiles/4bpp/a0299_f015.png new file mode 100644 index 0000000000..fceef0f904 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f016.png b/sa1/graphics/obj_tiles/4bpp/a0299_f016.png new file mode 100644 index 0000000000..8c265f3eba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f017.png b/sa1/graphics/obj_tiles/4bpp/a0299_f017.png new file mode 100644 index 0000000000..5846377db7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f018.png b/sa1/graphics/obj_tiles/4bpp/a0299_f018.png new file mode 100644 index 0000000000..5675470ba3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f019.png b/sa1/graphics/obj_tiles/4bpp/a0299_f019.png new file mode 100644 index 0000000000..632bf46de9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f020.png b/sa1/graphics/obj_tiles/4bpp/a0299_f020.png new file mode 100644 index 0000000000..a8011faa04 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f021.png b/sa1/graphics/obj_tiles/4bpp/a0299_f021.png new file mode 100644 index 0000000000..ae8da0b863 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f022.png b/sa1/graphics/obj_tiles/4bpp/a0299_f022.png new file mode 100644 index 0000000000..b1a631711c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f023.png b/sa1/graphics/obj_tiles/4bpp/a0299_f023.png new file mode 100644 index 0000000000..1cb692e705 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f024.png b/sa1/graphics/obj_tiles/4bpp/a0299_f024.png new file mode 100644 index 0000000000..3e7acfe0d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f024.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f025.png b/sa1/graphics/obj_tiles/4bpp/a0299_f025.png new file mode 100644 index 0000000000..0b782fc038 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f025.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f026.png b/sa1/graphics/obj_tiles/4bpp/a0299_f026.png new file mode 100644 index 0000000000..9be2c320a2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f026.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f027.png b/sa1/graphics/obj_tiles/4bpp/a0299_f027.png new file mode 100644 index 0000000000..e8ade86b58 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f027.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f028.png b/sa1/graphics/obj_tiles/4bpp/a0299_f028.png new file mode 100644 index 0000000000..63560a0a27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f028.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f029.png b/sa1/graphics/obj_tiles/4bpp/a0299_f029.png new file mode 100644 index 0000000000..c4affb263d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f029.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0299_f030.png b/sa1/graphics/obj_tiles/4bpp/a0299_f030.png new file mode 100644 index 0000000000..2f3eb40c6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0299_f030.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0300_f000.png b/sa1/graphics/obj_tiles/4bpp/a0300_f000.png new file mode 100644 index 0000000000..eae19b8378 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0300_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0300_f001.png b/sa1/graphics/obj_tiles/4bpp/a0300_f001.png new file mode 100644 index 0000000000..f344eae694 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0300_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0300_f002.png b/sa1/graphics/obj_tiles/4bpp/a0300_f002.png new file mode 100644 index 0000000000..e98f7d293c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0300_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0300_f003.png b/sa1/graphics/obj_tiles/4bpp/a0300_f003.png new file mode 100644 index 0000000000..a5eaf79ea9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0300_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0300_f004.png b/sa1/graphics/obj_tiles/4bpp/a0300_f004.png new file mode 100644 index 0000000000..967b582337 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0300_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0301_f000.png b/sa1/graphics/obj_tiles/4bpp/a0301_f000.png new file mode 100644 index 0000000000..600f10c533 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0301_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0301_f001.png b/sa1/graphics/obj_tiles/4bpp/a0301_f001.png new file mode 100644 index 0000000000..087832fc6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0301_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0301_f002.png b/sa1/graphics/obj_tiles/4bpp/a0301_f002.png new file mode 100644 index 0000000000..4c37fcda66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0301_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0301_f003.png b/sa1/graphics/obj_tiles/4bpp/a0301_f003.png new file mode 100644 index 0000000000..22ec1d0422 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0301_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0301_f004.png b/sa1/graphics/obj_tiles/4bpp/a0301_f004.png new file mode 100644 index 0000000000..58e45c1d90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0301_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f000.png b/sa1/graphics/obj_tiles/4bpp/a0302_f000.png new file mode 100644 index 0000000000..6dbe4bee10 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f001.png b/sa1/graphics/obj_tiles/4bpp/a0302_f001.png new file mode 100644 index 0000000000..f91d17b068 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f002.png b/sa1/graphics/obj_tiles/4bpp/a0302_f002.png new file mode 100644 index 0000000000..43ce3bffca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f003.png b/sa1/graphics/obj_tiles/4bpp/a0302_f003.png new file mode 100644 index 0000000000..cd8cdd502d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f004.png b/sa1/graphics/obj_tiles/4bpp/a0302_f004.png new file mode 100644 index 0000000000..3ff121201d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f005.png b/sa1/graphics/obj_tiles/4bpp/a0302_f005.png new file mode 100644 index 0000000000..940f70155c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f006.png b/sa1/graphics/obj_tiles/4bpp/a0302_f006.png new file mode 100644 index 0000000000..9b6de0c751 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f007.png b/sa1/graphics/obj_tiles/4bpp/a0302_f007.png new file mode 100644 index 0000000000..99fe6df1ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f008.png b/sa1/graphics/obj_tiles/4bpp/a0302_f008.png new file mode 100644 index 0000000000..da64f7f1c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f009.png b/sa1/graphics/obj_tiles/4bpp/a0302_f009.png new file mode 100644 index 0000000000..273defc474 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0302_f010.png b/sa1/graphics/obj_tiles/4bpp/a0302_f010.png new file mode 100644 index 0000000000..df7a26a1ec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0302_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0303_f000.png b/sa1/graphics/obj_tiles/4bpp/a0303_f000.png new file mode 100644 index 0000000000..d781bb2bf3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0303_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0303_f001.png b/sa1/graphics/obj_tiles/4bpp/a0303_f001.png new file mode 100644 index 0000000000..6132574119 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0303_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0303_f002.png b/sa1/graphics/obj_tiles/4bpp/a0303_f002.png new file mode 100644 index 0000000000..62fa32d200 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0303_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0303_f003.png b/sa1/graphics/obj_tiles/4bpp/a0303_f003.png new file mode 100644 index 0000000000..404f281b5b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0303_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0303_f004.png b/sa1/graphics/obj_tiles/4bpp/a0303_f004.png new file mode 100644 index 0000000000..e18d8264d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0303_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0303_f005.png b/sa1/graphics/obj_tiles/4bpp/a0303_f005.png new file mode 100644 index 0000000000..249cb66c9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0303_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0304_f000.png b/sa1/graphics/obj_tiles/4bpp/a0304_f000.png new file mode 100644 index 0000000000..3e3c2c45be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0304_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0304_f001.png b/sa1/graphics/obj_tiles/4bpp/a0304_f001.png new file mode 100644 index 0000000000..b18600581f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0304_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0305_f000.png b/sa1/graphics/obj_tiles/4bpp/a0305_f000.png new file mode 100644 index 0000000000..9a6354aea7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0305_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0305_f001.png b/sa1/graphics/obj_tiles/4bpp/a0305_f001.png new file mode 100644 index 0000000000..04775166aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0305_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0305_f002.png b/sa1/graphics/obj_tiles/4bpp/a0305_f002.png new file mode 100644 index 0000000000..0fd9686a4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0305_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0305_f003.png b/sa1/graphics/obj_tiles/4bpp/a0305_f003.png new file mode 100644 index 0000000000..57e65ae097 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0305_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0306_f000.png b/sa1/graphics/obj_tiles/4bpp/a0306_f000.png new file mode 100644 index 0000000000..7e8ceaf6b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0306_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0306_f001.png b/sa1/graphics/obj_tiles/4bpp/a0306_f001.png new file mode 100644 index 0000000000..1f4ae9e3ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0306_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0306_f002.png b/sa1/graphics/obj_tiles/4bpp/a0306_f002.png new file mode 100644 index 0000000000..efbc7e36e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0306_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0306_f003.png b/sa1/graphics/obj_tiles/4bpp/a0306_f003.png new file mode 100644 index 0000000000..4f785a16dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0306_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0307_f000.png b/sa1/graphics/obj_tiles/4bpp/a0307_f000.png new file mode 100644 index 0000000000..7edc40ce1a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0307_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0307_f001.png b/sa1/graphics/obj_tiles/4bpp/a0307_f001.png new file mode 100644 index 0000000000..a792528c7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0307_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0307_f002.png b/sa1/graphics/obj_tiles/4bpp/a0307_f002.png new file mode 100644 index 0000000000..5ee1ae16e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0307_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0307_f003.png b/sa1/graphics/obj_tiles/4bpp/a0307_f003.png new file mode 100644 index 0000000000..9a6354aea7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0307_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f000.png b/sa1/graphics/obj_tiles/4bpp/a0308_f000.png new file mode 100644 index 0000000000..b31621ea5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f001.png b/sa1/graphics/obj_tiles/4bpp/a0308_f001.png new file mode 100644 index 0000000000..beba17e7c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f002.png b/sa1/graphics/obj_tiles/4bpp/a0308_f002.png new file mode 100644 index 0000000000..3bda266f12 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f003.png b/sa1/graphics/obj_tiles/4bpp/a0308_f003.png new file mode 100644 index 0000000000..6a515b64fe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f004.png b/sa1/graphics/obj_tiles/4bpp/a0308_f004.png new file mode 100644 index 0000000000..c266040158 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f005.png b/sa1/graphics/obj_tiles/4bpp/a0308_f005.png new file mode 100644 index 0000000000..d5000d2647 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f006.png b/sa1/graphics/obj_tiles/4bpp/a0308_f006.png new file mode 100644 index 0000000000..6387dadf10 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f007.png b/sa1/graphics/obj_tiles/4bpp/a0308_f007.png new file mode 100644 index 0000000000..ea54e190fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f008.png b/sa1/graphics/obj_tiles/4bpp/a0308_f008.png new file mode 100644 index 0000000000..4bbca55c4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f009.png b/sa1/graphics/obj_tiles/4bpp/a0308_f009.png new file mode 100644 index 0000000000..2c77a0e57f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f010.png b/sa1/graphics/obj_tiles/4bpp/a0308_f010.png new file mode 100644 index 0000000000..f511b26f03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f011.png b/sa1/graphics/obj_tiles/4bpp/a0308_f011.png new file mode 100644 index 0000000000..8daa6e5704 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f012.png b/sa1/graphics/obj_tiles/4bpp/a0308_f012.png new file mode 100644 index 0000000000..600f10c533 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f013.png b/sa1/graphics/obj_tiles/4bpp/a0308_f013.png new file mode 100644 index 0000000000..087832fc6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0308_f014.png b/sa1/graphics/obj_tiles/4bpp/a0308_f014.png new file mode 100644 index 0000000000..58e45c1d90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0308_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f000.png b/sa1/graphics/obj_tiles/4bpp/a0309_f000.png new file mode 100644 index 0000000000..eebe64c56b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f001.png b/sa1/graphics/obj_tiles/4bpp/a0309_f001.png new file mode 100644 index 0000000000..548bedb36f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f002.png b/sa1/graphics/obj_tiles/4bpp/a0309_f002.png new file mode 100644 index 0000000000..f2ca626114 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f003.png b/sa1/graphics/obj_tiles/4bpp/a0309_f003.png new file mode 100644 index 0000000000..72970fa5ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f004.png b/sa1/graphics/obj_tiles/4bpp/a0309_f004.png new file mode 100644 index 0000000000..f59dde727c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f005.png b/sa1/graphics/obj_tiles/4bpp/a0309_f005.png new file mode 100644 index 0000000000..15345ea193 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f006.png b/sa1/graphics/obj_tiles/4bpp/a0309_f006.png new file mode 100644 index 0000000000..de321001f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f007.png b/sa1/graphics/obj_tiles/4bpp/a0309_f007.png new file mode 100644 index 0000000000..5a3c8b06e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f008.png b/sa1/graphics/obj_tiles/4bpp/a0309_f008.png new file mode 100644 index 0000000000..b1534bf8ec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f009.png b/sa1/graphics/obj_tiles/4bpp/a0309_f009.png new file mode 100644 index 0000000000..faa6c3c4f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0309_f010.png b/sa1/graphics/obj_tiles/4bpp/a0309_f010.png new file mode 100644 index 0000000000..76e2b5df05 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0309_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f000.png b/sa1/graphics/obj_tiles/4bpp/a0310_f000.png new file mode 100644 index 0000000000..e6b14e4cc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f001.png b/sa1/graphics/obj_tiles/4bpp/a0310_f001.png new file mode 100644 index 0000000000..4dfd4478a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f002.png b/sa1/graphics/obj_tiles/4bpp/a0310_f002.png new file mode 100644 index 0000000000..60820ae532 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f003.png b/sa1/graphics/obj_tiles/4bpp/a0310_f003.png new file mode 100644 index 0000000000..d637ddff1c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f004.png b/sa1/graphics/obj_tiles/4bpp/a0310_f004.png new file mode 100644 index 0000000000..ad68a1e129 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f005.png b/sa1/graphics/obj_tiles/4bpp/a0310_f005.png new file mode 100644 index 0000000000..ebab4fb7bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f006.png b/sa1/graphics/obj_tiles/4bpp/a0310_f006.png new file mode 100644 index 0000000000..72d98db1c2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f007.png b/sa1/graphics/obj_tiles/4bpp/a0310_f007.png new file mode 100644 index 0000000000..2b9d584de8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0310_f008.png b/sa1/graphics/obj_tiles/4bpp/a0310_f008.png new file mode 100644 index 0000000000..35adfd9322 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0310_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f000.png b/sa1/graphics/obj_tiles/4bpp/a0311_f000.png new file mode 100644 index 0000000000..06e0f1af9a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f001.png b/sa1/graphics/obj_tiles/4bpp/a0311_f001.png new file mode 100644 index 0000000000..037c3399da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f002.png b/sa1/graphics/obj_tiles/4bpp/a0311_f002.png new file mode 100644 index 0000000000..b523c59e02 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f003.png b/sa1/graphics/obj_tiles/4bpp/a0311_f003.png new file mode 100644 index 0000000000..a1e1fdafdf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f004.png b/sa1/graphics/obj_tiles/4bpp/a0311_f004.png new file mode 100644 index 0000000000..7964f2c804 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f005.png b/sa1/graphics/obj_tiles/4bpp/a0311_f005.png new file mode 100644 index 0000000000..076b31b8c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f006.png b/sa1/graphics/obj_tiles/4bpp/a0311_f006.png new file mode 100644 index 0000000000..b523c59e02 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f007.png b/sa1/graphics/obj_tiles/4bpp/a0311_f007.png new file mode 100644 index 0000000000..037c3399da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0311_f008.png b/sa1/graphics/obj_tiles/4bpp/a0311_f008.png new file mode 100644 index 0000000000..06e0f1af9a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0311_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f000.png b/sa1/graphics/obj_tiles/4bpp/a0312_f000.png new file mode 100644 index 0000000000..2d00fa68ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f001.png b/sa1/graphics/obj_tiles/4bpp/a0312_f001.png new file mode 100644 index 0000000000..dc22c1c4ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f002.png b/sa1/graphics/obj_tiles/4bpp/a0312_f002.png new file mode 100644 index 0000000000..43f37db8a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f003.png b/sa1/graphics/obj_tiles/4bpp/a0312_f003.png new file mode 100644 index 0000000000..2a99cbeeeb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f004.png b/sa1/graphics/obj_tiles/4bpp/a0312_f004.png new file mode 100644 index 0000000000..40d91d0916 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f005.png b/sa1/graphics/obj_tiles/4bpp/a0312_f005.png new file mode 100644 index 0000000000..93c1362234 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f006.png b/sa1/graphics/obj_tiles/4bpp/a0312_f006.png new file mode 100644 index 0000000000..43f37db8a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f007.png b/sa1/graphics/obj_tiles/4bpp/a0312_f007.png new file mode 100644 index 0000000000..dc22c1c4ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0312_f008.png b/sa1/graphics/obj_tiles/4bpp/a0312_f008.png new file mode 100644 index 0000000000..2d00fa68ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0312_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0315_f000.png b/sa1/graphics/obj_tiles/4bpp/a0315_f000.png new file mode 100644 index 0000000000..ed8c58eb9e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0315_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0315_f001.png b/sa1/graphics/obj_tiles/4bpp/a0315_f001.png new file mode 100644 index 0000000000..3fa26d1e94 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0315_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0317_f000.png b/sa1/graphics/obj_tiles/4bpp/a0317_f000.png new file mode 100644 index 0000000000..8451271749 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0317_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0317_f001.png b/sa1/graphics/obj_tiles/4bpp/a0317_f001.png new file mode 100644 index 0000000000..8588be564d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0317_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0317_f002.png b/sa1/graphics/obj_tiles/4bpp/a0317_f002.png new file mode 100644 index 0000000000..9482fc0e50 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0317_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0317_f003.png b/sa1/graphics/obj_tiles/4bpp/a0317_f003.png new file mode 100644 index 0000000000..fb8ba2294d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0317_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0319_f000.png b/sa1/graphics/obj_tiles/4bpp/a0319_f000.png new file mode 100644 index 0000000000..6645ab8d38 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0319_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0319_f001.png b/sa1/graphics/obj_tiles/4bpp/a0319_f001.png new file mode 100644 index 0000000000..ef78dafcb5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0319_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0319_f002.png b/sa1/graphics/obj_tiles/4bpp/a0319_f002.png new file mode 100644 index 0000000000..e3ab338651 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0319_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0319_f003.png b/sa1/graphics/obj_tiles/4bpp/a0319_f003.png new file mode 100644 index 0000000000..f87be4d0b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0319_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0319_f004.png b/sa1/graphics/obj_tiles/4bpp/a0319_f004.png new file mode 100644 index 0000000000..f6dab769a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0319_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f000.png b/sa1/graphics/obj_tiles/4bpp/a0320_f000.png new file mode 100644 index 0000000000..4f2dc0ed0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f001.png b/sa1/graphics/obj_tiles/4bpp/a0320_f001.png new file mode 100644 index 0000000000..9c032824b2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f002.png b/sa1/graphics/obj_tiles/4bpp/a0320_f002.png new file mode 100644 index 0000000000..dea16c807c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f003.png b/sa1/graphics/obj_tiles/4bpp/a0320_f003.png new file mode 100644 index 0000000000..f5060e0af3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f004.png b/sa1/graphics/obj_tiles/4bpp/a0320_f004.png new file mode 100644 index 0000000000..623dd23d23 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f005.png b/sa1/graphics/obj_tiles/4bpp/a0320_f005.png new file mode 100644 index 0000000000..0d959e366f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f006.png b/sa1/graphics/obj_tiles/4bpp/a0320_f006.png new file mode 100644 index 0000000000..adb7091393 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f007.png b/sa1/graphics/obj_tiles/4bpp/a0320_f007.png new file mode 100644 index 0000000000..94eae19868 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f008.png b/sa1/graphics/obj_tiles/4bpp/a0320_f008.png new file mode 100644 index 0000000000..f0f84874b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f009.png b/sa1/graphics/obj_tiles/4bpp/a0320_f009.png new file mode 100644 index 0000000000..183ce7e992 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f010.png b/sa1/graphics/obj_tiles/4bpp/a0320_f010.png new file mode 100644 index 0000000000..9142e6c8b2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f011.png b/sa1/graphics/obj_tiles/4bpp/a0320_f011.png new file mode 100644 index 0000000000..842ea25e70 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f012.png b/sa1/graphics/obj_tiles/4bpp/a0320_f012.png new file mode 100644 index 0000000000..2c81154636 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f013.png b/sa1/graphics/obj_tiles/4bpp/a0320_f013.png new file mode 100644 index 0000000000..cc35574e5f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0320_f014.png b/sa1/graphics/obj_tiles/4bpp/a0320_f014.png new file mode 100644 index 0000000000..f71f144f14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0320_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f000.png b/sa1/graphics/obj_tiles/4bpp/a0321_f000.png new file mode 100644 index 0000000000..a4e23edc49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f001.png b/sa1/graphics/obj_tiles/4bpp/a0321_f001.png new file mode 100644 index 0000000000..6250bca41d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f002.png b/sa1/graphics/obj_tiles/4bpp/a0321_f002.png new file mode 100644 index 0000000000..7580bd7c4e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f003.png b/sa1/graphics/obj_tiles/4bpp/a0321_f003.png new file mode 100644 index 0000000000..421340cb56 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f004.png b/sa1/graphics/obj_tiles/4bpp/a0321_f004.png new file mode 100644 index 0000000000..e956737189 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f005.png b/sa1/graphics/obj_tiles/4bpp/a0321_f005.png new file mode 100644 index 0000000000..e1fb506159 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f006.png b/sa1/graphics/obj_tiles/4bpp/a0321_f006.png new file mode 100644 index 0000000000..aeeca284b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f007.png b/sa1/graphics/obj_tiles/4bpp/a0321_f007.png new file mode 100644 index 0000000000..1ff9024a39 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f008.png b/sa1/graphics/obj_tiles/4bpp/a0321_f008.png new file mode 100644 index 0000000000..6881ccd83a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f009.png b/sa1/graphics/obj_tiles/4bpp/a0321_f009.png new file mode 100644 index 0000000000..8976e748ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f010.png b/sa1/graphics/obj_tiles/4bpp/a0321_f010.png new file mode 100644 index 0000000000..ab243d5fe2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f011.png b/sa1/graphics/obj_tiles/4bpp/a0321_f011.png new file mode 100644 index 0000000000..93a0582729 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f012.png b/sa1/graphics/obj_tiles/4bpp/a0321_f012.png new file mode 100644 index 0000000000..5959bed6ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f013.png b/sa1/graphics/obj_tiles/4bpp/a0321_f013.png new file mode 100644 index 0000000000..30a3b52862 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f014.png b/sa1/graphics/obj_tiles/4bpp/a0321_f014.png new file mode 100644 index 0000000000..636ca2c766 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f015.png b/sa1/graphics/obj_tiles/4bpp/a0321_f015.png new file mode 100644 index 0000000000..f2d7f55c73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f016.png b/sa1/graphics/obj_tiles/4bpp/a0321_f016.png new file mode 100644 index 0000000000..fbf9196f4b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f017.png b/sa1/graphics/obj_tiles/4bpp/a0321_f017.png new file mode 100644 index 0000000000..9db4c60689 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f018.png b/sa1/graphics/obj_tiles/4bpp/a0321_f018.png new file mode 100644 index 0000000000..3ee8cbdd91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f019.png b/sa1/graphics/obj_tiles/4bpp/a0321_f019.png new file mode 100644 index 0000000000..22680fcec2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f020.png b/sa1/graphics/obj_tiles/4bpp/a0321_f020.png new file mode 100644 index 0000000000..028ef5c5b6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f021.png b/sa1/graphics/obj_tiles/4bpp/a0321_f021.png new file mode 100644 index 0000000000..f46f2b7c26 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f022.png b/sa1/graphics/obj_tiles/4bpp/a0321_f022.png new file mode 100644 index 0000000000..c27700a04e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f023.png b/sa1/graphics/obj_tiles/4bpp/a0321_f023.png new file mode 100644 index 0000000000..059512bfbd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f024.png b/sa1/graphics/obj_tiles/4bpp/a0321_f024.png new file mode 100644 index 0000000000..9171384991 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f024.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f025.png b/sa1/graphics/obj_tiles/4bpp/a0321_f025.png new file mode 100644 index 0000000000..8c8b106239 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f025.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f026.png b/sa1/graphics/obj_tiles/4bpp/a0321_f026.png new file mode 100644 index 0000000000..0837ffeec0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f026.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f027.png b/sa1/graphics/obj_tiles/4bpp/a0321_f027.png new file mode 100644 index 0000000000..b9959842f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f027.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f028.png b/sa1/graphics/obj_tiles/4bpp/a0321_f028.png new file mode 100644 index 0000000000..99eff80011 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f028.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0321_f029.png b/sa1/graphics/obj_tiles/4bpp/a0321_f029.png new file mode 100644 index 0000000000..626c15435c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0321_f029.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f000.png b/sa1/graphics/obj_tiles/4bpp/a0322_f000.png new file mode 100644 index 0000000000..4da0e9c3a5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f001.png b/sa1/graphics/obj_tiles/4bpp/a0322_f001.png new file mode 100644 index 0000000000..df97f9dcc3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f002.png b/sa1/graphics/obj_tiles/4bpp/a0322_f002.png new file mode 100644 index 0000000000..732a0d4056 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f003.png b/sa1/graphics/obj_tiles/4bpp/a0322_f003.png new file mode 100644 index 0000000000..a602346e2d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f004.png b/sa1/graphics/obj_tiles/4bpp/a0322_f004.png new file mode 100644 index 0000000000..2200f91835 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f005.png b/sa1/graphics/obj_tiles/4bpp/a0322_f005.png new file mode 100644 index 0000000000..427c09ec9d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f006.png b/sa1/graphics/obj_tiles/4bpp/a0322_f006.png new file mode 100644 index 0000000000..722fe4ff2b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f007.png b/sa1/graphics/obj_tiles/4bpp/a0322_f007.png new file mode 100644 index 0000000000..a409d02e6c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f008.png b/sa1/graphics/obj_tiles/4bpp/a0322_f008.png new file mode 100644 index 0000000000..936a4beebb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0322_f009.png b/sa1/graphics/obj_tiles/4bpp/a0322_f009.png new file mode 100644 index 0000000000..2af916a538 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0322_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0323_f000.png b/sa1/graphics/obj_tiles/4bpp/a0323_f000.png new file mode 100644 index 0000000000..b31621ea5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0323_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0323_f001.png b/sa1/graphics/obj_tiles/4bpp/a0323_f001.png new file mode 100644 index 0000000000..ae7514f5b6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0323_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0323_f002.png b/sa1/graphics/obj_tiles/4bpp/a0323_f002.png new file mode 100644 index 0000000000..a70b43cf61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0323_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0323_f003.png b/sa1/graphics/obj_tiles/4bpp/a0323_f003.png new file mode 100644 index 0000000000..0041396acf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0323_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f000.png b/sa1/graphics/obj_tiles/4bpp/a0324_f000.png new file mode 100644 index 0000000000..d0f0785b0f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f001.png b/sa1/graphics/obj_tiles/4bpp/a0324_f001.png new file mode 100644 index 0000000000..d77ec4acda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f002.png b/sa1/graphics/obj_tiles/4bpp/a0324_f002.png new file mode 100644 index 0000000000..056baa038b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f003.png b/sa1/graphics/obj_tiles/4bpp/a0324_f003.png new file mode 100644 index 0000000000..281889faca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f004.png b/sa1/graphics/obj_tiles/4bpp/a0324_f004.png new file mode 100644 index 0000000000..bdc8c77469 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f005.png b/sa1/graphics/obj_tiles/4bpp/a0324_f005.png new file mode 100644 index 0000000000..8efc072178 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f006.png b/sa1/graphics/obj_tiles/4bpp/a0324_f006.png new file mode 100644 index 0000000000..fe679416f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f007.png b/sa1/graphics/obj_tiles/4bpp/a0324_f007.png new file mode 100644 index 0000000000..0109aa734d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0324_f008.png b/sa1/graphics/obj_tiles/4bpp/a0324_f008.png new file mode 100644 index 0000000000..e141801a88 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0324_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f000.png b/sa1/graphics/obj_tiles/4bpp/a0325_f000.png new file mode 100644 index 0000000000..05c5594bbc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f001.png b/sa1/graphics/obj_tiles/4bpp/a0325_f001.png new file mode 100644 index 0000000000..ff1570873b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f002.png b/sa1/graphics/obj_tiles/4bpp/a0325_f002.png new file mode 100644 index 0000000000..cd41e203ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f003.png b/sa1/graphics/obj_tiles/4bpp/a0325_f003.png new file mode 100644 index 0000000000..f51e876f81 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f004.png b/sa1/graphics/obj_tiles/4bpp/a0325_f004.png new file mode 100644 index 0000000000..b12b1f8c3e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f005.png b/sa1/graphics/obj_tiles/4bpp/a0325_f005.png new file mode 100644 index 0000000000..4b196f1986 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f006.png b/sa1/graphics/obj_tiles/4bpp/a0325_f006.png new file mode 100644 index 0000000000..a97cd1999d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f007.png b/sa1/graphics/obj_tiles/4bpp/a0325_f007.png new file mode 100644 index 0000000000..75b61887f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f008.png b/sa1/graphics/obj_tiles/4bpp/a0325_f008.png new file mode 100644 index 0000000000..6164f9b243 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f009.png b/sa1/graphics/obj_tiles/4bpp/a0325_f009.png new file mode 100644 index 0000000000..a2e26b1136 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f010.png b/sa1/graphics/obj_tiles/4bpp/a0325_f010.png new file mode 100644 index 0000000000..31d8fa3661 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f011.png b/sa1/graphics/obj_tiles/4bpp/a0325_f011.png new file mode 100644 index 0000000000..dbd8145b35 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f012.png b/sa1/graphics/obj_tiles/4bpp/a0325_f012.png new file mode 100644 index 0000000000..fea1c54764 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f013.png b/sa1/graphics/obj_tiles/4bpp/a0325_f013.png new file mode 100644 index 0000000000..81ab18d8cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f014.png b/sa1/graphics/obj_tiles/4bpp/a0325_f014.png new file mode 100644 index 0000000000..6768b480be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f015.png b/sa1/graphics/obj_tiles/4bpp/a0325_f015.png new file mode 100644 index 0000000000..0f6ace7ba5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f016.png b/sa1/graphics/obj_tiles/4bpp/a0325_f016.png new file mode 100644 index 0000000000..641942e0db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0325_f017.png b/sa1/graphics/obj_tiles/4bpp/a0325_f017.png new file mode 100644 index 0000000000..a199f0dc42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0325_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f000.png b/sa1/graphics/obj_tiles/4bpp/a0326_f000.png new file mode 100644 index 0000000000..8e67bd5fa1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f001.png b/sa1/graphics/obj_tiles/4bpp/a0326_f001.png new file mode 100644 index 0000000000..cddec53927 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f002.png b/sa1/graphics/obj_tiles/4bpp/a0326_f002.png new file mode 100644 index 0000000000..24270bce36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f003.png b/sa1/graphics/obj_tiles/4bpp/a0326_f003.png new file mode 100644 index 0000000000..367c70008a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f004.png b/sa1/graphics/obj_tiles/4bpp/a0326_f004.png new file mode 100644 index 0000000000..9b5516d35a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f005.png b/sa1/graphics/obj_tiles/4bpp/a0326_f005.png new file mode 100644 index 0000000000..ea2b7ef16b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f006.png b/sa1/graphics/obj_tiles/4bpp/a0326_f006.png new file mode 100644 index 0000000000..a6828cfe8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f007.png b/sa1/graphics/obj_tiles/4bpp/a0326_f007.png new file mode 100644 index 0000000000..589fc40863 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f008.png b/sa1/graphics/obj_tiles/4bpp/a0326_f008.png new file mode 100644 index 0000000000..a543cf3042 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f009.png b/sa1/graphics/obj_tiles/4bpp/a0326_f009.png new file mode 100644 index 0000000000..21dbf8bc1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f010.png b/sa1/graphics/obj_tiles/4bpp/a0326_f010.png new file mode 100644 index 0000000000..ce17312c37 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f011.png b/sa1/graphics/obj_tiles/4bpp/a0326_f011.png new file mode 100644 index 0000000000..6e5ef9b8b3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f012.png b/sa1/graphics/obj_tiles/4bpp/a0326_f012.png new file mode 100644 index 0000000000..5c0ceed7c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f013.png b/sa1/graphics/obj_tiles/4bpp/a0326_f013.png new file mode 100644 index 0000000000..38d1a81d81 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f014.png b/sa1/graphics/obj_tiles/4bpp/a0326_f014.png new file mode 100644 index 0000000000..2f9e3a7ce4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0326_f015.png b/sa1/graphics/obj_tiles/4bpp/a0326_f015.png new file mode 100644 index 0000000000..4fa09c14d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0326_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0327_f000.png b/sa1/graphics/obj_tiles/4bpp/a0327_f000.png new file mode 100644 index 0000000000..c5c5c2cebb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0327_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0327_f001.png b/sa1/graphics/obj_tiles/4bpp/a0327_f001.png new file mode 100644 index 0000000000..f69bee66ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0327_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0327_f002.png b/sa1/graphics/obj_tiles/4bpp/a0327_f002.png new file mode 100644 index 0000000000..daeb8ce4c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0327_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f000.png b/sa1/graphics/obj_tiles/4bpp/a0328_f000.png new file mode 100644 index 0000000000..9a3f3211f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f001.png b/sa1/graphics/obj_tiles/4bpp/a0328_f001.png new file mode 100644 index 0000000000..ccfc6aaff7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f002.png b/sa1/graphics/obj_tiles/4bpp/a0328_f002.png new file mode 100644 index 0000000000..6c81ca792f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f003.png b/sa1/graphics/obj_tiles/4bpp/a0328_f003.png new file mode 100644 index 0000000000..01dd4a186a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f004.png b/sa1/graphics/obj_tiles/4bpp/a0328_f004.png new file mode 100644 index 0000000000..8b6930acbe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f005.png b/sa1/graphics/obj_tiles/4bpp/a0328_f005.png new file mode 100644 index 0000000000..f02b7dd5d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f006.png b/sa1/graphics/obj_tiles/4bpp/a0328_f006.png new file mode 100644 index 0000000000..f7a3726b36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f007.png b/sa1/graphics/obj_tiles/4bpp/a0328_f007.png new file mode 100644 index 0000000000..0f8ac6c980 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f008.png b/sa1/graphics/obj_tiles/4bpp/a0328_f008.png new file mode 100644 index 0000000000..456ce967a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f009.png b/sa1/graphics/obj_tiles/4bpp/a0328_f009.png new file mode 100644 index 0000000000..6678948127 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0328_f010.png b/sa1/graphics/obj_tiles/4bpp/a0328_f010.png new file mode 100644 index 0000000000..dd8c633956 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0328_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f000.png b/sa1/graphics/obj_tiles/4bpp/a0329_f000.png new file mode 100644 index 0000000000..8963963aab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f001.png b/sa1/graphics/obj_tiles/4bpp/a0329_f001.png new file mode 100644 index 0000000000..66d52621fc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f002.png b/sa1/graphics/obj_tiles/4bpp/a0329_f002.png new file mode 100644 index 0000000000..ad515871af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f003.png b/sa1/graphics/obj_tiles/4bpp/a0329_f003.png new file mode 100644 index 0000000000..0cca9ca05c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f004.png b/sa1/graphics/obj_tiles/4bpp/a0329_f004.png new file mode 100644 index 0000000000..95ae0a5498 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f005.png b/sa1/graphics/obj_tiles/4bpp/a0329_f005.png new file mode 100644 index 0000000000..a022ffca41 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f006.png b/sa1/graphics/obj_tiles/4bpp/a0329_f006.png new file mode 100644 index 0000000000..7794684116 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f007.png b/sa1/graphics/obj_tiles/4bpp/a0329_f007.png new file mode 100644 index 0000000000..20a797bb68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f008.png b/sa1/graphics/obj_tiles/4bpp/a0329_f008.png new file mode 100644 index 0000000000..709511df54 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f009.png b/sa1/graphics/obj_tiles/4bpp/a0329_f009.png new file mode 100644 index 0000000000..6c92ed27dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f010.png b/sa1/graphics/obj_tiles/4bpp/a0329_f010.png new file mode 100644 index 0000000000..a0d68d577c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f011.png b/sa1/graphics/obj_tiles/4bpp/a0329_f011.png new file mode 100644 index 0000000000..3cb799f26c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f012.png b/sa1/graphics/obj_tiles/4bpp/a0329_f012.png new file mode 100644 index 0000000000..67f318b321 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0329_f013.png b/sa1/graphics/obj_tiles/4bpp/a0329_f013.png new file mode 100644 index 0000000000..8edfcd72b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0329_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0330_f000.png b/sa1/graphics/obj_tiles/4bpp/a0330_f000.png new file mode 100644 index 0000000000..a97cd1999d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0330_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0330_f001.png b/sa1/graphics/obj_tiles/4bpp/a0330_f001.png new file mode 100644 index 0000000000..a6828cfe8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0330_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0330_f002.png b/sa1/graphics/obj_tiles/4bpp/a0330_f002.png new file mode 100644 index 0000000000..64d0964392 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0330_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0330_f003.png b/sa1/graphics/obj_tiles/4bpp/a0330_f003.png new file mode 100644 index 0000000000..a8c9bf7fe2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0330_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0330_f004.png b/sa1/graphics/obj_tiles/4bpp/a0330_f004.png new file mode 100644 index 0000000000..267b3ec461 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0330_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0330_f005.png b/sa1/graphics/obj_tiles/4bpp/a0330_f005.png new file mode 100644 index 0000000000..a543cf3042 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0330_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0330_f006.png b/sa1/graphics/obj_tiles/4bpp/a0330_f006.png new file mode 100644 index 0000000000..31d8fa3661 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0330_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0331_f000.png b/sa1/graphics/obj_tiles/4bpp/a0331_f000.png new file mode 100644 index 0000000000..244c6586bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0331_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0331_f001.png b/sa1/graphics/obj_tiles/4bpp/a0331_f001.png new file mode 100644 index 0000000000..921b856cd9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0331_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0331_f002.png b/sa1/graphics/obj_tiles/4bpp/a0331_f002.png new file mode 100644 index 0000000000..4142739f83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0331_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0331_f003.png b/sa1/graphics/obj_tiles/4bpp/a0331_f003.png new file mode 100644 index 0000000000..44de4e0b4f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0331_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0331_f004.png b/sa1/graphics/obj_tiles/4bpp/a0331_f004.png new file mode 100644 index 0000000000..5847e9168b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0331_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0331_f005.png b/sa1/graphics/obj_tiles/4bpp/a0331_f005.png new file mode 100644 index 0000000000..a60cc32882 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0331_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f000.png b/sa1/graphics/obj_tiles/4bpp/a0332_f000.png new file mode 100644 index 0000000000..2902c759a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f001.png b/sa1/graphics/obj_tiles/4bpp/a0332_f001.png new file mode 100644 index 0000000000..927f44bd27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f002.png b/sa1/graphics/obj_tiles/4bpp/a0332_f002.png new file mode 100644 index 0000000000..86d6449bfd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f003.png b/sa1/graphics/obj_tiles/4bpp/a0332_f003.png new file mode 100644 index 0000000000..fbd7a0c797 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f004.png b/sa1/graphics/obj_tiles/4bpp/a0332_f004.png new file mode 100644 index 0000000000..07e5ab7422 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f005.png b/sa1/graphics/obj_tiles/4bpp/a0332_f005.png new file mode 100644 index 0000000000..877a7283ae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f006.png b/sa1/graphics/obj_tiles/4bpp/a0332_f006.png new file mode 100644 index 0000000000..7a199a6100 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0332_f007.png b/sa1/graphics/obj_tiles/4bpp/a0332_f007.png new file mode 100644 index 0000000000..d6b19f2dc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0332_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f000.png b/sa1/graphics/obj_tiles/4bpp/a0333_f000.png new file mode 100644 index 0000000000..8b813768c1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f001.png b/sa1/graphics/obj_tiles/4bpp/a0333_f001.png new file mode 100644 index 0000000000..f2a669a670 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f002.png b/sa1/graphics/obj_tiles/4bpp/a0333_f002.png new file mode 100644 index 0000000000..24bbb74c53 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f003.png b/sa1/graphics/obj_tiles/4bpp/a0333_f003.png new file mode 100644 index 0000000000..26fb839a49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f004.png b/sa1/graphics/obj_tiles/4bpp/a0333_f004.png new file mode 100644 index 0000000000..b4b472f672 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f005.png b/sa1/graphics/obj_tiles/4bpp/a0333_f005.png new file mode 100644 index 0000000000..afda5525ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f006.png b/sa1/graphics/obj_tiles/4bpp/a0333_f006.png new file mode 100644 index 0000000000..cd24c97259 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f007.png b/sa1/graphics/obj_tiles/4bpp/a0333_f007.png new file mode 100644 index 0000000000..dd13294019 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f008.png b/sa1/graphics/obj_tiles/4bpp/a0333_f008.png new file mode 100644 index 0000000000..d22626390b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f009.png b/sa1/graphics/obj_tiles/4bpp/a0333_f009.png new file mode 100644 index 0000000000..f396b85c42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f010.png b/sa1/graphics/obj_tiles/4bpp/a0333_f010.png new file mode 100644 index 0000000000..c6dede8a6e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f011.png b/sa1/graphics/obj_tiles/4bpp/a0333_f011.png new file mode 100644 index 0000000000..b1bcbef9c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f012.png b/sa1/graphics/obj_tiles/4bpp/a0333_f012.png new file mode 100644 index 0000000000..dfca540c12 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0333_f013.png b/sa1/graphics/obj_tiles/4bpp/a0333_f013.png new file mode 100644 index 0000000000..ac788a44fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0333_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f000.png b/sa1/graphics/obj_tiles/4bpp/a0334_f000.png new file mode 100644 index 0000000000..e8ecac7c70 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f001.png b/sa1/graphics/obj_tiles/4bpp/a0334_f001.png new file mode 100644 index 0000000000..917c7ef4e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f002.png b/sa1/graphics/obj_tiles/4bpp/a0334_f002.png new file mode 100644 index 0000000000..d36aa1209b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f003.png b/sa1/graphics/obj_tiles/4bpp/a0334_f003.png new file mode 100644 index 0000000000..78423a6278 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f004.png b/sa1/graphics/obj_tiles/4bpp/a0334_f004.png new file mode 100644 index 0000000000..cd1151c775 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f005.png b/sa1/graphics/obj_tiles/4bpp/a0334_f005.png new file mode 100644 index 0000000000..81ad1f43ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f006.png b/sa1/graphics/obj_tiles/4bpp/a0334_f006.png new file mode 100644 index 0000000000..16354abb7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f007.png b/sa1/graphics/obj_tiles/4bpp/a0334_f007.png new file mode 100644 index 0000000000..57aa9e940b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f008.png b/sa1/graphics/obj_tiles/4bpp/a0334_f008.png new file mode 100644 index 0000000000..fac13d2368 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f009.png b/sa1/graphics/obj_tiles/4bpp/a0334_f009.png new file mode 100644 index 0000000000..d85372306a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f010.png b/sa1/graphics/obj_tiles/4bpp/a0334_f010.png new file mode 100644 index 0000000000..b59a2c2ac7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f011.png b/sa1/graphics/obj_tiles/4bpp/a0334_f011.png new file mode 100644 index 0000000000..be79b0db2d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f012.png b/sa1/graphics/obj_tiles/4bpp/a0334_f012.png new file mode 100644 index 0000000000..f430351b6f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f013.png b/sa1/graphics/obj_tiles/4bpp/a0334_f013.png new file mode 100644 index 0000000000..953a9ca549 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f014.png b/sa1/graphics/obj_tiles/4bpp/a0334_f014.png new file mode 100644 index 0000000000..4d89648396 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f015.png b/sa1/graphics/obj_tiles/4bpp/a0334_f015.png new file mode 100644 index 0000000000..d2ce5598e1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f016.png b/sa1/graphics/obj_tiles/4bpp/a0334_f016.png new file mode 100644 index 0000000000..d998d6fc2c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f017.png b/sa1/graphics/obj_tiles/4bpp/a0334_f017.png new file mode 100644 index 0000000000..819d201a80 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f018.png b/sa1/graphics/obj_tiles/4bpp/a0334_f018.png new file mode 100644 index 0000000000..3ebb8d810d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f019.png b/sa1/graphics/obj_tiles/4bpp/a0334_f019.png new file mode 100644 index 0000000000..a70232e560 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f020.png b/sa1/graphics/obj_tiles/4bpp/a0334_f020.png new file mode 100644 index 0000000000..1d8e6c1dce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f021.png b/sa1/graphics/obj_tiles/4bpp/a0334_f021.png new file mode 100644 index 0000000000..8eee3917cb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f022.png b/sa1/graphics/obj_tiles/4bpp/a0334_f022.png new file mode 100644 index 0000000000..6706b7a2c4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0334_f023.png b/sa1/graphics/obj_tiles/4bpp/a0334_f023.png new file mode 100644 index 0000000000..9d733af05b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0334_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f000.png b/sa1/graphics/obj_tiles/4bpp/a0335_f000.png new file mode 100644 index 0000000000..c317bbfebc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f001.png b/sa1/graphics/obj_tiles/4bpp/a0335_f001.png new file mode 100644 index 0000000000..a82e66b875 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f002.png b/sa1/graphics/obj_tiles/4bpp/a0335_f002.png new file mode 100644 index 0000000000..08f7c7f193 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f003.png b/sa1/graphics/obj_tiles/4bpp/a0335_f003.png new file mode 100644 index 0000000000..6df1a09495 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f004.png b/sa1/graphics/obj_tiles/4bpp/a0335_f004.png new file mode 100644 index 0000000000..70a98b136e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f005.png b/sa1/graphics/obj_tiles/4bpp/a0335_f005.png new file mode 100644 index 0000000000..90c2b94cf1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f006.png b/sa1/graphics/obj_tiles/4bpp/a0335_f006.png new file mode 100644 index 0000000000..c4a1818a7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0335_f007.png b/sa1/graphics/obj_tiles/4bpp/a0335_f007.png new file mode 100644 index 0000000000..595fb5e7a5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0335_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0336_f000.png b/sa1/graphics/obj_tiles/4bpp/a0336_f000.png new file mode 100644 index 0000000000..542051ee11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0336_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0336_f001.png b/sa1/graphics/obj_tiles/4bpp/a0336_f001.png new file mode 100644 index 0000000000..a7dbfb025b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0336_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0336_f002.png b/sa1/graphics/obj_tiles/4bpp/a0336_f002.png new file mode 100644 index 0000000000..ed023c8bc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0336_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0336_f003.png b/sa1/graphics/obj_tiles/4bpp/a0336_f003.png new file mode 100644 index 0000000000..6d267e8ce7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0336_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0336_f004.png b/sa1/graphics/obj_tiles/4bpp/a0336_f004.png new file mode 100644 index 0000000000..af09121a41 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0336_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0337_f000.png b/sa1/graphics/obj_tiles/4bpp/a0337_f000.png new file mode 100644 index 0000000000..8f92c0a2a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0337_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0337_f001.png b/sa1/graphics/obj_tiles/4bpp/a0337_f001.png new file mode 100644 index 0000000000..ea839fee68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0337_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0337_f002.png b/sa1/graphics/obj_tiles/4bpp/a0337_f002.png new file mode 100644 index 0000000000..84ab131eb1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0337_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0337_f003.png b/sa1/graphics/obj_tiles/4bpp/a0337_f003.png new file mode 100644 index 0000000000..7f1e85ebd2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0337_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f000.png b/sa1/graphics/obj_tiles/4bpp/a0338_f000.png new file mode 100644 index 0000000000..82a5802607 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f001.png b/sa1/graphics/obj_tiles/4bpp/a0338_f001.png new file mode 100644 index 0000000000..2b180a3873 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f002.png b/sa1/graphics/obj_tiles/4bpp/a0338_f002.png new file mode 100644 index 0000000000..0be8454925 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f003.png b/sa1/graphics/obj_tiles/4bpp/a0338_f003.png new file mode 100644 index 0000000000..c5b432cccf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f004.png b/sa1/graphics/obj_tiles/4bpp/a0338_f004.png new file mode 100644 index 0000000000..cde96a0cbc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f005.png b/sa1/graphics/obj_tiles/4bpp/a0338_f005.png new file mode 100644 index 0000000000..e076861322 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f006.png b/sa1/graphics/obj_tiles/4bpp/a0338_f006.png new file mode 100644 index 0000000000..13cb645d93 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f007.png b/sa1/graphics/obj_tiles/4bpp/a0338_f007.png new file mode 100644 index 0000000000..2628d5e09f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f008.png b/sa1/graphics/obj_tiles/4bpp/a0338_f008.png new file mode 100644 index 0000000000..1de0c703b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f009.png b/sa1/graphics/obj_tiles/4bpp/a0338_f009.png new file mode 100644 index 0000000000..5597a0dde1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f010.png b/sa1/graphics/obj_tiles/4bpp/a0338_f010.png new file mode 100644 index 0000000000..53a210cf00 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f011.png b/sa1/graphics/obj_tiles/4bpp/a0338_f011.png new file mode 100644 index 0000000000..93a9f58e3f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f012.png b/sa1/graphics/obj_tiles/4bpp/a0338_f012.png new file mode 100644 index 0000000000..9d4c5532bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f013.png b/sa1/graphics/obj_tiles/4bpp/a0338_f013.png new file mode 100644 index 0000000000..77af327a1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f014.png b/sa1/graphics/obj_tiles/4bpp/a0338_f014.png new file mode 100644 index 0000000000..b6660379d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f015.png b/sa1/graphics/obj_tiles/4bpp/a0338_f015.png new file mode 100644 index 0000000000..8e53fc8cc8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f016.png b/sa1/graphics/obj_tiles/4bpp/a0338_f016.png new file mode 100644 index 0000000000..537e3b23a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f017.png b/sa1/graphics/obj_tiles/4bpp/a0338_f017.png new file mode 100644 index 0000000000..5d96bb1e56 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f018.png b/sa1/graphics/obj_tiles/4bpp/a0338_f018.png new file mode 100644 index 0000000000..770c2eff05 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0338_f019.png b/sa1/graphics/obj_tiles/4bpp/a0338_f019.png new file mode 100644 index 0000000000..150ce8a506 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0338_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0339_f000.png b/sa1/graphics/obj_tiles/4bpp/a0339_f000.png new file mode 100644 index 0000000000..47bb81bbf7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0339_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0339_f001.png b/sa1/graphics/obj_tiles/4bpp/a0339_f001.png new file mode 100644 index 0000000000..da1fce16ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0339_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0339_f002.png b/sa1/graphics/obj_tiles/4bpp/a0339_f002.png new file mode 100644 index 0000000000..858cfae5cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0339_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0339_f003.png b/sa1/graphics/obj_tiles/4bpp/a0339_f003.png new file mode 100644 index 0000000000..a0d13e4a54 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0339_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0339_f004.png b/sa1/graphics/obj_tiles/4bpp/a0339_f004.png new file mode 100644 index 0000000000..a30aec489e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0339_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0339_f005.png b/sa1/graphics/obj_tiles/4bpp/a0339_f005.png new file mode 100644 index 0000000000..4eb69702dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0339_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f000.png b/sa1/graphics/obj_tiles/4bpp/a0340_f000.png new file mode 100644 index 0000000000..79c62c885b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f001.png b/sa1/graphics/obj_tiles/4bpp/a0340_f001.png new file mode 100644 index 0000000000..34845b4a92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f002.png b/sa1/graphics/obj_tiles/4bpp/a0340_f002.png new file mode 100644 index 0000000000..ceb4ccbe43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f003.png b/sa1/graphics/obj_tiles/4bpp/a0340_f003.png new file mode 100644 index 0000000000..d6dd919423 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f004.png b/sa1/graphics/obj_tiles/4bpp/a0340_f004.png new file mode 100644 index 0000000000..ebe8e79d06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f005.png b/sa1/graphics/obj_tiles/4bpp/a0340_f005.png new file mode 100644 index 0000000000..e3145f0cb5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f006.png b/sa1/graphics/obj_tiles/4bpp/a0340_f006.png new file mode 100644 index 0000000000..eaa2817007 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0340_f007.png b/sa1/graphics/obj_tiles/4bpp/a0340_f007.png new file mode 100644 index 0000000000..28a5c45484 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0340_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0341_f000.png b/sa1/graphics/obj_tiles/4bpp/a0341_f000.png new file mode 100644 index 0000000000..542051ee11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0341_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0341_f001.png b/sa1/graphics/obj_tiles/4bpp/a0341_f001.png new file mode 100644 index 0000000000..a7dbfb025b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0341_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0341_f002.png b/sa1/graphics/obj_tiles/4bpp/a0341_f002.png new file mode 100644 index 0000000000..ed023c8bc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0341_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0342_f000.png b/sa1/graphics/obj_tiles/4bpp/a0342_f000.png new file mode 100644 index 0000000000..5ebb31cc52 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0342_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0342_f001.png b/sa1/graphics/obj_tiles/4bpp/a0342_f001.png new file mode 100644 index 0000000000..041ad76a8d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0342_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0342_f002.png b/sa1/graphics/obj_tiles/4bpp/a0342_f002.png new file mode 100644 index 0000000000..69b22167bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0342_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0342_f003.png b/sa1/graphics/obj_tiles/4bpp/a0342_f003.png new file mode 100644 index 0000000000..6300e12560 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0342_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f000.png b/sa1/graphics/obj_tiles/4bpp/a0343_f000.png new file mode 100644 index 0000000000..479570a5fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f001.png b/sa1/graphics/obj_tiles/4bpp/a0343_f001.png new file mode 100644 index 0000000000..db2cc37785 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f002.png b/sa1/graphics/obj_tiles/4bpp/a0343_f002.png new file mode 100644 index 0000000000..df0ba06d7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f003.png b/sa1/graphics/obj_tiles/4bpp/a0343_f003.png new file mode 100644 index 0000000000..0fa615ede4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f004.png b/sa1/graphics/obj_tiles/4bpp/a0343_f004.png new file mode 100644 index 0000000000..a7fd0c4a33 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f005.png b/sa1/graphics/obj_tiles/4bpp/a0343_f005.png new file mode 100644 index 0000000000..78f155a020 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f006.png b/sa1/graphics/obj_tiles/4bpp/a0343_f006.png new file mode 100644 index 0000000000..4bbca55c4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f007.png b/sa1/graphics/obj_tiles/4bpp/a0343_f007.png new file mode 100644 index 0000000000..2c77a0e57f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f008.png b/sa1/graphics/obj_tiles/4bpp/a0343_f008.png new file mode 100644 index 0000000000..f511b26f03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0343_f009.png b/sa1/graphics/obj_tiles/4bpp/a0343_f009.png new file mode 100644 index 0000000000..8daa6e5704 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0343_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f000.png b/sa1/graphics/obj_tiles/4bpp/a0348_f000.png new file mode 100644 index 0000000000..3704be8680 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f001.png b/sa1/graphics/obj_tiles/4bpp/a0348_f001.png new file mode 100644 index 0000000000..3e75ba48f6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f002.png b/sa1/graphics/obj_tiles/4bpp/a0348_f002.png new file mode 100644 index 0000000000..59f2b48204 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f003.png b/sa1/graphics/obj_tiles/4bpp/a0348_f003.png new file mode 100644 index 0000000000..5a78a60dff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f004.png b/sa1/graphics/obj_tiles/4bpp/a0348_f004.png new file mode 100644 index 0000000000..2a4e392bd1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f005.png b/sa1/graphics/obj_tiles/4bpp/a0348_f005.png new file mode 100644 index 0000000000..452fd4de6f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f006.png b/sa1/graphics/obj_tiles/4bpp/a0348_f006.png new file mode 100644 index 0000000000..8fb9cd477b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f007.png b/sa1/graphics/obj_tiles/4bpp/a0348_f007.png new file mode 100644 index 0000000000..9045d03e66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f008.png b/sa1/graphics/obj_tiles/4bpp/a0348_f008.png new file mode 100644 index 0000000000..eb942240b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f009.png b/sa1/graphics/obj_tiles/4bpp/a0348_f009.png new file mode 100644 index 0000000000..4ab7f2faaa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f010.png b/sa1/graphics/obj_tiles/4bpp/a0348_f010.png new file mode 100644 index 0000000000..335d21b04e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f011.png b/sa1/graphics/obj_tiles/4bpp/a0348_f011.png new file mode 100644 index 0000000000..ad8b30933b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f012.png b/sa1/graphics/obj_tiles/4bpp/a0348_f012.png new file mode 100644 index 0000000000..c65220f5f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f013.png b/sa1/graphics/obj_tiles/4bpp/a0348_f013.png new file mode 100644 index 0000000000..05c756a99e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0348_f014.png b/sa1/graphics/obj_tiles/4bpp/a0348_f014.png new file mode 100644 index 0000000000..882ffdf6e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0348_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f000.png b/sa1/graphics/obj_tiles/4bpp/a0353_f000.png new file mode 100644 index 0000000000..f4eec310cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f001.png b/sa1/graphics/obj_tiles/4bpp/a0353_f001.png new file mode 100644 index 0000000000..10bad828f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f002.png b/sa1/graphics/obj_tiles/4bpp/a0353_f002.png new file mode 100644 index 0000000000..1a1380c96c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f003.png b/sa1/graphics/obj_tiles/4bpp/a0353_f003.png new file mode 100644 index 0000000000..aecbc874d0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f004.png b/sa1/graphics/obj_tiles/4bpp/a0353_f004.png new file mode 100644 index 0000000000..bdaf2392c7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f005.png b/sa1/graphics/obj_tiles/4bpp/a0353_f005.png new file mode 100644 index 0000000000..880d1ce413 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f006.png b/sa1/graphics/obj_tiles/4bpp/a0353_f006.png new file mode 100644 index 0000000000..3c14a3b4eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f007.png b/sa1/graphics/obj_tiles/4bpp/a0353_f007.png new file mode 100644 index 0000000000..c51f1bfd11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f008.png b/sa1/graphics/obj_tiles/4bpp/a0353_f008.png new file mode 100644 index 0000000000..253dbb6812 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f009.png b/sa1/graphics/obj_tiles/4bpp/a0353_f009.png new file mode 100644 index 0000000000..8865e9050f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f010.png b/sa1/graphics/obj_tiles/4bpp/a0353_f010.png new file mode 100644 index 0000000000..d7ab70fbf7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f011.png b/sa1/graphics/obj_tiles/4bpp/a0353_f011.png new file mode 100644 index 0000000000..95a96e7f46 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f012.png b/sa1/graphics/obj_tiles/4bpp/a0353_f012.png new file mode 100644 index 0000000000..7385f998fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f013.png b/sa1/graphics/obj_tiles/4bpp/a0353_f013.png new file mode 100644 index 0000000000..e078e1ea19 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f014.png b/sa1/graphics/obj_tiles/4bpp/a0353_f014.png new file mode 100644 index 0000000000..5170297c8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f015.png b/sa1/graphics/obj_tiles/4bpp/a0353_f015.png new file mode 100644 index 0000000000..93eb47a184 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f016.png b/sa1/graphics/obj_tiles/4bpp/a0353_f016.png new file mode 100644 index 0000000000..073ef26d27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0353_f017.png b/sa1/graphics/obj_tiles/4bpp/a0353_f017.png new file mode 100644 index 0000000000..ddceb8d6df Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0353_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f000.png b/sa1/graphics/obj_tiles/4bpp/a0373_f000.png new file mode 100644 index 0000000000..8fb9cd477b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f001.png b/sa1/graphics/obj_tiles/4bpp/a0373_f001.png new file mode 100644 index 0000000000..9045d03e66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f002.png b/sa1/graphics/obj_tiles/4bpp/a0373_f002.png new file mode 100644 index 0000000000..2ed324af83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f003.png b/sa1/graphics/obj_tiles/4bpp/a0373_f003.png new file mode 100644 index 0000000000..8a0bedc67f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f004.png b/sa1/graphics/obj_tiles/4bpp/a0373_f004.png new file mode 100644 index 0000000000..53b06664ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f005.png b/sa1/graphics/obj_tiles/4bpp/a0373_f005.png new file mode 100644 index 0000000000..e89ead111c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f006.png b/sa1/graphics/obj_tiles/4bpp/a0373_f006.png new file mode 100644 index 0000000000..86dd33cf56 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f007.png b/sa1/graphics/obj_tiles/4bpp/a0373_f007.png new file mode 100644 index 0000000000..e785500b37 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f008.png b/sa1/graphics/obj_tiles/4bpp/a0373_f008.png new file mode 100644 index 0000000000..48ac88c462 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f009.png b/sa1/graphics/obj_tiles/4bpp/a0373_f009.png new file mode 100644 index 0000000000..09e56bb230 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f010.png b/sa1/graphics/obj_tiles/4bpp/a0373_f010.png new file mode 100644 index 0000000000..0373c21fa2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f011.png b/sa1/graphics/obj_tiles/4bpp/a0373_f011.png new file mode 100644 index 0000000000..c81f11f4d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f012.png b/sa1/graphics/obj_tiles/4bpp/a0373_f012.png new file mode 100644 index 0000000000..2c77a0e57f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f013.png b/sa1/graphics/obj_tiles/4bpp/a0373_f013.png new file mode 100644 index 0000000000..f511b26f03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0373_f014.png b/sa1/graphics/obj_tiles/4bpp/a0373_f014.png new file mode 100644 index 0000000000..8daa6e5704 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0373_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f000.png b/sa1/graphics/obj_tiles/4bpp/a0374_f000.png new file mode 100644 index 0000000000..600f10c533 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f001.png b/sa1/graphics/obj_tiles/4bpp/a0374_f001.png new file mode 100644 index 0000000000..087832fc6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f002.png b/sa1/graphics/obj_tiles/4bpp/a0374_f002.png new file mode 100644 index 0000000000..4f6a6cbf19 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f003.png b/sa1/graphics/obj_tiles/4bpp/a0374_f003.png new file mode 100644 index 0000000000..946a8031be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f004.png b/sa1/graphics/obj_tiles/4bpp/a0374_f004.png new file mode 100644 index 0000000000..1b7c917447 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f005.png b/sa1/graphics/obj_tiles/4bpp/a0374_f005.png new file mode 100644 index 0000000000..ccb5d5ab3a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f006.png b/sa1/graphics/obj_tiles/4bpp/a0374_f006.png new file mode 100644 index 0000000000..7edc40ce1a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f007.png b/sa1/graphics/obj_tiles/4bpp/a0374_f007.png new file mode 100644 index 0000000000..a792528c7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f008.png b/sa1/graphics/obj_tiles/4bpp/a0374_f008.png new file mode 100644 index 0000000000..5ee1ae16e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0374_f009.png b/sa1/graphics/obj_tiles/4bpp/a0374_f009.png new file mode 100644 index 0000000000..9a6354aea7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0374_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f000.png b/sa1/graphics/obj_tiles/4bpp/a0375_f000.png new file mode 100644 index 0000000000..4f6a6cbf19 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f001.png b/sa1/graphics/obj_tiles/4bpp/a0375_f001.png new file mode 100644 index 0000000000..fe60030c18 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f002.png b/sa1/graphics/obj_tiles/4bpp/a0375_f002.png new file mode 100644 index 0000000000..b027ab1dbc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f003.png b/sa1/graphics/obj_tiles/4bpp/a0375_f003.png new file mode 100644 index 0000000000..943811b138 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f004.png b/sa1/graphics/obj_tiles/4bpp/a0375_f004.png new file mode 100644 index 0000000000..dfecc7bb16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f005.png b/sa1/graphics/obj_tiles/4bpp/a0375_f005.png new file mode 100644 index 0000000000..c2f9d20151 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f006.png b/sa1/graphics/obj_tiles/4bpp/a0375_f006.png new file mode 100644 index 0000000000..cfa6349c5e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f007.png b/sa1/graphics/obj_tiles/4bpp/a0375_f007.png new file mode 100644 index 0000000000..063fb49d14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f008.png b/sa1/graphics/obj_tiles/4bpp/a0375_f008.png new file mode 100644 index 0000000000..728f3992bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f009.png b/sa1/graphics/obj_tiles/4bpp/a0375_f009.png new file mode 100644 index 0000000000..79e00a27f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f010.png b/sa1/graphics/obj_tiles/4bpp/a0375_f010.png new file mode 100644 index 0000000000..4861610587 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f011.png b/sa1/graphics/obj_tiles/4bpp/a0375_f011.png new file mode 100644 index 0000000000..a0664d6539 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0375_f012.png b/sa1/graphics/obj_tiles/4bpp/a0375_f012.png new file mode 100644 index 0000000000..caf0b778aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0375_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f000.png b/sa1/graphics/obj_tiles/4bpp/a0376_f000.png new file mode 100644 index 0000000000..28e43dcbd9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f001.png b/sa1/graphics/obj_tiles/4bpp/a0376_f001.png new file mode 100644 index 0000000000..0b4ae3d4bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f002.png b/sa1/graphics/obj_tiles/4bpp/a0376_f002.png new file mode 100644 index 0000000000..44fea929f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f003.png b/sa1/graphics/obj_tiles/4bpp/a0376_f003.png new file mode 100644 index 0000000000..0b631d1444 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f004.png b/sa1/graphics/obj_tiles/4bpp/a0376_f004.png new file mode 100644 index 0000000000..70e9881dd2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f005.png b/sa1/graphics/obj_tiles/4bpp/a0376_f005.png new file mode 100644 index 0000000000..85809afc43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f006.png b/sa1/graphics/obj_tiles/4bpp/a0376_f006.png new file mode 100644 index 0000000000..df55afbc4e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f007.png b/sa1/graphics/obj_tiles/4bpp/a0376_f007.png new file mode 100644 index 0000000000..f6df288648 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f008.png b/sa1/graphics/obj_tiles/4bpp/a0376_f008.png new file mode 100644 index 0000000000..d831738385 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f009.png b/sa1/graphics/obj_tiles/4bpp/a0376_f009.png new file mode 100644 index 0000000000..2e0bbeb96b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f010.png b/sa1/graphics/obj_tiles/4bpp/a0376_f010.png new file mode 100644 index 0000000000..4bbca55c4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f011.png b/sa1/graphics/obj_tiles/4bpp/a0376_f011.png new file mode 100644 index 0000000000..2c77a0e57f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f012.png b/sa1/graphics/obj_tiles/4bpp/a0376_f012.png new file mode 100644 index 0000000000..f511b26f03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0376_f013.png b/sa1/graphics/obj_tiles/4bpp/a0376_f013.png new file mode 100644 index 0000000000..8daa6e5704 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0376_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f000.png b/sa1/graphics/obj_tiles/4bpp/a0377_f000.png new file mode 100644 index 0000000000..8fadd6beb3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f001.png b/sa1/graphics/obj_tiles/4bpp/a0377_f001.png new file mode 100644 index 0000000000..39b6a0d9b4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f002.png b/sa1/graphics/obj_tiles/4bpp/a0377_f002.png new file mode 100644 index 0000000000..edbb0d9747 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f003.png b/sa1/graphics/obj_tiles/4bpp/a0377_f003.png new file mode 100644 index 0000000000..6d7119df91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f004.png b/sa1/graphics/obj_tiles/4bpp/a0377_f004.png new file mode 100644 index 0000000000..b946433e29 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f005.png b/sa1/graphics/obj_tiles/4bpp/a0377_f005.png new file mode 100644 index 0000000000..57f7b3e058 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f006.png b/sa1/graphics/obj_tiles/4bpp/a0377_f006.png new file mode 100644 index 0000000000..565d717d46 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f007.png b/sa1/graphics/obj_tiles/4bpp/a0377_f007.png new file mode 100644 index 0000000000..68dd083c3c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f008.png b/sa1/graphics/obj_tiles/4bpp/a0377_f008.png new file mode 100644 index 0000000000..19e3f15cb3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f009.png b/sa1/graphics/obj_tiles/4bpp/a0377_f009.png new file mode 100644 index 0000000000..4bbca55c4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f010.png b/sa1/graphics/obj_tiles/4bpp/a0377_f010.png new file mode 100644 index 0000000000..2c77a0e57f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f011.png b/sa1/graphics/obj_tiles/4bpp/a0377_f011.png new file mode 100644 index 0000000000..f511b26f03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0377_f012.png b/sa1/graphics/obj_tiles/4bpp/a0377_f012.png new file mode 100644 index 0000000000..8daa6e5704 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0377_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0379_f000.png b/sa1/graphics/obj_tiles/4bpp/a0379_f000.png new file mode 100644 index 0000000000..b052596d49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0379_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0379_f001.png b/sa1/graphics/obj_tiles/4bpp/a0379_f001.png new file mode 100644 index 0000000000..d14c85a224 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0379_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0379_f002.png b/sa1/graphics/obj_tiles/4bpp/a0379_f002.png new file mode 100644 index 0000000000..006e9458af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0379_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0380_f000.png b/sa1/graphics/obj_tiles/4bpp/a0380_f000.png new file mode 100644 index 0000000000..6cc89b06f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0380_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0380_f001.png b/sa1/graphics/obj_tiles/4bpp/a0380_f001.png new file mode 100644 index 0000000000..e23bf2650c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0380_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0380_f002.png b/sa1/graphics/obj_tiles/4bpp/a0380_f002.png new file mode 100644 index 0000000000..8ed39a5a59 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0380_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0381_f000.png b/sa1/graphics/obj_tiles/4bpp/a0381_f000.png new file mode 100644 index 0000000000..7827de3ca9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0381_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0381_f001.png b/sa1/graphics/obj_tiles/4bpp/a0381_f001.png new file mode 100644 index 0000000000..f0bbe43c5d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0381_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0381_f002.png b/sa1/graphics/obj_tiles/4bpp/a0381_f002.png new file mode 100644 index 0000000000..b716c710c2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0381_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0383_f000.png b/sa1/graphics/obj_tiles/4bpp/a0383_f000.png new file mode 100644 index 0000000000..eff6c697ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0383_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0383_f001.png b/sa1/graphics/obj_tiles/4bpp/a0383_f001.png new file mode 100644 index 0000000000..c2b751b4a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0383_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0384_f000.png b/sa1/graphics/obj_tiles/4bpp/a0384_f000.png new file mode 100644 index 0000000000..600f10c533 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0384_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0384_f001.png b/sa1/graphics/obj_tiles/4bpp/a0384_f001.png new file mode 100644 index 0000000000..b018cb74d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0384_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0384_f002.png b/sa1/graphics/obj_tiles/4bpp/a0384_f002.png new file mode 100644 index 0000000000..d0c9a5fe8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0384_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0385_f000.png b/sa1/graphics/obj_tiles/4bpp/a0385_f000.png new file mode 100644 index 0000000000..1fb4d92200 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0385_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0385_f001.png b/sa1/graphics/obj_tiles/4bpp/a0385_f001.png new file mode 100644 index 0000000000..b55b74cc86 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0385_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0386_f000.png b/sa1/graphics/obj_tiles/4bpp/a0386_f000.png new file mode 100644 index 0000000000..195aa4868c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0386_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0386_f001.png b/sa1/graphics/obj_tiles/4bpp/a0386_f001.png new file mode 100644 index 0000000000..9095d16b0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0386_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0386_f002.png b/sa1/graphics/obj_tiles/4bpp/a0386_f002.png new file mode 100644 index 0000000000..c1f9b3bcf6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0386_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0387_f000.png b/sa1/graphics/obj_tiles/4bpp/a0387_f000.png new file mode 100644 index 0000000000..26a45fab47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0387_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0387_f001.png b/sa1/graphics/obj_tiles/4bpp/a0387_f001.png new file mode 100644 index 0000000000..9ffccb1adb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0387_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0387_f002.png b/sa1/graphics/obj_tiles/4bpp/a0387_f002.png new file mode 100644 index 0000000000..12f5397bf4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0387_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0387_f003.png b/sa1/graphics/obj_tiles/4bpp/a0387_f003.png new file mode 100644 index 0000000000..a7a74119d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0387_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f000.png b/sa1/graphics/obj_tiles/4bpp/a0391_f000.png new file mode 100644 index 0000000000..6b2458c8f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f001.png b/sa1/graphics/obj_tiles/4bpp/a0391_f001.png new file mode 100644 index 0000000000..bfbff1bacd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f002.png b/sa1/graphics/obj_tiles/4bpp/a0391_f002.png new file mode 100644 index 0000000000..1a5b8e88bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f003.png b/sa1/graphics/obj_tiles/4bpp/a0391_f003.png new file mode 100644 index 0000000000..7379977ffb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f004.png b/sa1/graphics/obj_tiles/4bpp/a0391_f004.png new file mode 100644 index 0000000000..e41bd15b14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f005.png b/sa1/graphics/obj_tiles/4bpp/a0391_f005.png new file mode 100644 index 0000000000..1afb337923 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f006.png b/sa1/graphics/obj_tiles/4bpp/a0391_f006.png new file mode 100644 index 0000000000..222aa22442 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0391_f007.png b/sa1/graphics/obj_tiles/4bpp/a0391_f007.png new file mode 100644 index 0000000000..9773ed6e49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0391_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0392_f000.png b/sa1/graphics/obj_tiles/4bpp/a0392_f000.png new file mode 100644 index 0000000000..85c60809e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0392_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0392_f001.png b/sa1/graphics/obj_tiles/4bpp/a0392_f001.png new file mode 100644 index 0000000000..ddf5e17c89 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0392_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0392_f002.png b/sa1/graphics/obj_tiles/4bpp/a0392_f002.png new file mode 100644 index 0000000000..0d88344443 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0392_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0392_f003.png b/sa1/graphics/obj_tiles/4bpp/a0392_f003.png new file mode 100644 index 0000000000..5af766dd91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0392_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0393_f000.png b/sa1/graphics/obj_tiles/4bpp/a0393_f000.png new file mode 100644 index 0000000000..d226e7a46a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0393_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0393_f001.png b/sa1/graphics/obj_tiles/4bpp/a0393_f001.png new file mode 100644 index 0000000000..7aae420d42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0393_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0393_f002.png b/sa1/graphics/obj_tiles/4bpp/a0393_f002.png new file mode 100644 index 0000000000..01b6419c50 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0393_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f000.png b/sa1/graphics/obj_tiles/4bpp/a0394_f000.png new file mode 100644 index 0000000000..14c0f03bf1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f001.png b/sa1/graphics/obj_tiles/4bpp/a0394_f001.png new file mode 100644 index 0000000000..c93e19655b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f002.png b/sa1/graphics/obj_tiles/4bpp/a0394_f002.png new file mode 100644 index 0000000000..9d628d05f8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f003.png b/sa1/graphics/obj_tiles/4bpp/a0394_f003.png new file mode 100644 index 0000000000..be4bbe28e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f004.png b/sa1/graphics/obj_tiles/4bpp/a0394_f004.png new file mode 100644 index 0000000000..e3b4a8b68a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f005.png b/sa1/graphics/obj_tiles/4bpp/a0394_f005.png new file mode 100644 index 0000000000..03d5b3e8a6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f006.png b/sa1/graphics/obj_tiles/4bpp/a0394_f006.png new file mode 100644 index 0000000000..5b1bd6b48c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f007.png b/sa1/graphics/obj_tiles/4bpp/a0394_f007.png new file mode 100644 index 0000000000..082ecaf67c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f008.png b/sa1/graphics/obj_tiles/4bpp/a0394_f008.png new file mode 100644 index 0000000000..43f7a62155 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0394_f009.png b/sa1/graphics/obj_tiles/4bpp/a0394_f009.png new file mode 100644 index 0000000000..46a6b81bbb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0394_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0396_f000.png b/sa1/graphics/obj_tiles/4bpp/a0396_f000.png new file mode 100644 index 0000000000..55e1733125 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0396_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0397_f000.png b/sa1/graphics/obj_tiles/4bpp/a0397_f000.png new file mode 100644 index 0000000000..c3f545ccb5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0397_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0397_f001.png b/sa1/graphics/obj_tiles/4bpp/a0397_f001.png new file mode 100644 index 0000000000..ef7ac3049b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0397_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0397_f002.png b/sa1/graphics/obj_tiles/4bpp/a0397_f002.png new file mode 100644 index 0000000000..9869e49ea7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0397_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f000.png b/sa1/graphics/obj_tiles/4bpp/a0398_f000.png new file mode 100644 index 0000000000..3092954e9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f001.png b/sa1/graphics/obj_tiles/4bpp/a0398_f001.png new file mode 100644 index 0000000000..70b9569c61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f002.png b/sa1/graphics/obj_tiles/4bpp/a0398_f002.png new file mode 100644 index 0000000000..b35119c844 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f003.png b/sa1/graphics/obj_tiles/4bpp/a0398_f003.png new file mode 100644 index 0000000000..8765a77d28 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f004.png b/sa1/graphics/obj_tiles/4bpp/a0398_f004.png new file mode 100644 index 0000000000..4f7587bbdf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f005.png b/sa1/graphics/obj_tiles/4bpp/a0398_f005.png new file mode 100644 index 0000000000..5cbd9920e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f006.png b/sa1/graphics/obj_tiles/4bpp/a0398_f006.png new file mode 100644 index 0000000000..fa8ab3cd57 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f007.png b/sa1/graphics/obj_tiles/4bpp/a0398_f007.png new file mode 100644 index 0000000000..6f30d1da82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f008.png b/sa1/graphics/obj_tiles/4bpp/a0398_f008.png new file mode 100644 index 0000000000..ce241caa82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f009.png b/sa1/graphics/obj_tiles/4bpp/a0398_f009.png new file mode 100644 index 0000000000..12ebcb0c4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f010.png b/sa1/graphics/obj_tiles/4bpp/a0398_f010.png new file mode 100644 index 0000000000..4174766067 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f011.png b/sa1/graphics/obj_tiles/4bpp/a0398_f011.png new file mode 100644 index 0000000000..7d273bee5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f012.png b/sa1/graphics/obj_tiles/4bpp/a0398_f012.png new file mode 100644 index 0000000000..f370cce0e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f013.png b/sa1/graphics/obj_tiles/4bpp/a0398_f013.png new file mode 100644 index 0000000000..8bea03c944 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0398_f014.png b/sa1/graphics/obj_tiles/4bpp/a0398_f014.png new file mode 100644 index 0000000000..b839a55df4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0398_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f000.png b/sa1/graphics/obj_tiles/4bpp/a0399_f000.png new file mode 100644 index 0000000000..e5d2542b7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f001.png b/sa1/graphics/obj_tiles/4bpp/a0399_f001.png new file mode 100644 index 0000000000..09fffb848b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f002.png b/sa1/graphics/obj_tiles/4bpp/a0399_f002.png new file mode 100644 index 0000000000..4446a1d23d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f003.png b/sa1/graphics/obj_tiles/4bpp/a0399_f003.png new file mode 100644 index 0000000000..85263fbcc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f004.png b/sa1/graphics/obj_tiles/4bpp/a0399_f004.png new file mode 100644 index 0000000000..4780bce91f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f005.png b/sa1/graphics/obj_tiles/4bpp/a0399_f005.png new file mode 100644 index 0000000000..36fb956d3d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f006.png b/sa1/graphics/obj_tiles/4bpp/a0399_f006.png new file mode 100644 index 0000000000..4fd22811cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f007.png b/sa1/graphics/obj_tiles/4bpp/a0399_f007.png new file mode 100644 index 0000000000..2a07ccce17 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0399_f008.png b/sa1/graphics/obj_tiles/4bpp/a0399_f008.png new file mode 100644 index 0000000000..846950db26 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0399_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0400_f000.png b/sa1/graphics/obj_tiles/4bpp/a0400_f000.png new file mode 100644 index 0000000000..cde3d573c1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0400_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0400_f001.png b/sa1/graphics/obj_tiles/4bpp/a0400_f001.png new file mode 100644 index 0000000000..ef46635257 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0400_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0400_f002.png b/sa1/graphics/obj_tiles/4bpp/a0400_f002.png new file mode 100644 index 0000000000..40cb7c06f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0400_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0400_f003.png b/sa1/graphics/obj_tiles/4bpp/a0400_f003.png new file mode 100644 index 0000000000..3970783df2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0400_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0400_f004.png b/sa1/graphics/obj_tiles/4bpp/a0400_f004.png new file mode 100644 index 0000000000..ee58f0b4cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0400_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0400_f005.png b/sa1/graphics/obj_tiles/4bpp/a0400_f005.png new file mode 100644 index 0000000000..a4d03bf148 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0400_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0400_f006.png b/sa1/graphics/obj_tiles/4bpp/a0400_f006.png new file mode 100644 index 0000000000..585460332b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0400_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0401_f000.png b/sa1/graphics/obj_tiles/4bpp/a0401_f000.png new file mode 100644 index 0000000000..2859ee80c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0401_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0401_f001.png b/sa1/graphics/obj_tiles/4bpp/a0401_f001.png new file mode 100644 index 0000000000..36af561a76 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0401_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0401_f002.png b/sa1/graphics/obj_tiles/4bpp/a0401_f002.png new file mode 100644 index 0000000000..2d941d2519 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0401_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0401_f003.png b/sa1/graphics/obj_tiles/4bpp/a0401_f003.png new file mode 100644 index 0000000000..0c8df76a10 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0401_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0401_f004.png b/sa1/graphics/obj_tiles/4bpp/a0401_f004.png new file mode 100644 index 0000000000..230f5ac03b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0401_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0401_f005.png b/sa1/graphics/obj_tiles/4bpp/a0401_f005.png new file mode 100644 index 0000000000..cef7450141 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0401_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0402_f000.png b/sa1/graphics/obj_tiles/4bpp/a0402_f000.png new file mode 100644 index 0000000000..aa1e0efeb5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0402_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0402_f001.png b/sa1/graphics/obj_tiles/4bpp/a0402_f001.png new file mode 100644 index 0000000000..e2a971af16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0402_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0402_f002.png b/sa1/graphics/obj_tiles/4bpp/a0402_f002.png new file mode 100644 index 0000000000..a037835d06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0402_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0402_f003.png b/sa1/graphics/obj_tiles/4bpp/a0402_f003.png new file mode 100644 index 0000000000..83fa8430fe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0402_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0403_f000.png b/sa1/graphics/obj_tiles/4bpp/a0403_f000.png new file mode 100644 index 0000000000..d1f6d6d906 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0403_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0403_f001.png b/sa1/graphics/obj_tiles/4bpp/a0403_f001.png new file mode 100644 index 0000000000..e0373c066b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0403_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0403_f002.png b/sa1/graphics/obj_tiles/4bpp/a0403_f002.png new file mode 100644 index 0000000000..b300580b58 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0403_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0403_f003.png b/sa1/graphics/obj_tiles/4bpp/a0403_f003.png new file mode 100644 index 0000000000..49ee22c915 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0403_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0403_f004.png b/sa1/graphics/obj_tiles/4bpp/a0403_f004.png new file mode 100644 index 0000000000..9fe18a6e8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0403_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0404_f000.png b/sa1/graphics/obj_tiles/4bpp/a0404_f000.png new file mode 100644 index 0000000000..3a89c24705 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0404_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0404_f001.png b/sa1/graphics/obj_tiles/4bpp/a0404_f001.png new file mode 100644 index 0000000000..482d91f3af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0404_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0404_f002.png b/sa1/graphics/obj_tiles/4bpp/a0404_f002.png new file mode 100644 index 0000000000..19a1e565dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0404_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0404_f003.png b/sa1/graphics/obj_tiles/4bpp/a0404_f003.png new file mode 100644 index 0000000000..927267415b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0404_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0404_f004.png b/sa1/graphics/obj_tiles/4bpp/a0404_f004.png new file mode 100644 index 0000000000..e84cc02d1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0404_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0405_f000.png b/sa1/graphics/obj_tiles/4bpp/a0405_f000.png new file mode 100644 index 0000000000..5721b1a76d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0405_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0405_f001.png b/sa1/graphics/obj_tiles/4bpp/a0405_f001.png new file mode 100644 index 0000000000..40fc98e4c7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0405_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0405_f002.png b/sa1/graphics/obj_tiles/4bpp/a0405_f002.png new file mode 100644 index 0000000000..f6c0ad42b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0405_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0405_f003.png b/sa1/graphics/obj_tiles/4bpp/a0405_f003.png new file mode 100644 index 0000000000..1d8b0e95fc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0405_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0405_f004.png b/sa1/graphics/obj_tiles/4bpp/a0405_f004.png new file mode 100644 index 0000000000..e841e6451a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0405_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0405_f005.png b/sa1/graphics/obj_tiles/4bpp/a0405_f005.png new file mode 100644 index 0000000000..85731c5a38 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0405_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0406_f000.png b/sa1/graphics/obj_tiles/4bpp/a0406_f000.png new file mode 100644 index 0000000000..2fa3dc0ef8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0406_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0406_f001.png b/sa1/graphics/obj_tiles/4bpp/a0406_f001.png new file mode 100644 index 0000000000..057b4d3e3b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0406_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0406_f002.png b/sa1/graphics/obj_tiles/4bpp/a0406_f002.png new file mode 100644 index 0000000000..ee3d2523eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0406_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0406_f003.png b/sa1/graphics/obj_tiles/4bpp/a0406_f003.png new file mode 100644 index 0000000000..93e4763338 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0406_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0406_f004.png b/sa1/graphics/obj_tiles/4bpp/a0406_f004.png new file mode 100644 index 0000000000..a3d342c945 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0406_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0406_f005.png b/sa1/graphics/obj_tiles/4bpp/a0406_f005.png new file mode 100644 index 0000000000..380653174f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0406_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0407_f000.png b/sa1/graphics/obj_tiles/4bpp/a0407_f000.png new file mode 100644 index 0000000000..0759ab5cd3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0407_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0407_f001.png b/sa1/graphics/obj_tiles/4bpp/a0407_f001.png new file mode 100644 index 0000000000..6648249100 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0407_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0407_f002.png b/sa1/graphics/obj_tiles/4bpp/a0407_f002.png new file mode 100644 index 0000000000..650d76c27e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0407_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0407_f003.png b/sa1/graphics/obj_tiles/4bpp/a0407_f003.png new file mode 100644 index 0000000000..782cbf842a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0407_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0408_f000.png b/sa1/graphics/obj_tiles/4bpp/a0408_f000.png new file mode 100644 index 0000000000..635412ee07 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0408_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0409_f000.png b/sa1/graphics/obj_tiles/4bpp/a0409_f000.png new file mode 100644 index 0000000000..0e082a73ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0409_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0410_f000.png b/sa1/graphics/obj_tiles/4bpp/a0410_f000.png new file mode 100644 index 0000000000..20122182f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0410_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0410_f001.png b/sa1/graphics/obj_tiles/4bpp/a0410_f001.png new file mode 100644 index 0000000000..ff5f7956fe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0410_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0411_f000.png b/sa1/graphics/obj_tiles/4bpp/a0411_f000.png new file mode 100644 index 0000000000..06a4f93c57 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0411_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0411_f001.png b/sa1/graphics/obj_tiles/4bpp/a0411_f001.png new file mode 100644 index 0000000000..87d8ddada1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0411_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0411_f002.png b/sa1/graphics/obj_tiles/4bpp/a0411_f002.png new file mode 100644 index 0000000000..ef1f3dfd52 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0411_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0411_f003.png b/sa1/graphics/obj_tiles/4bpp/a0411_f003.png new file mode 100644 index 0000000000..574256e590 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0411_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0412_f000.png b/sa1/graphics/obj_tiles/4bpp/a0412_f000.png new file mode 100644 index 0000000000..f99e755e47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0412_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0412_f001.png b/sa1/graphics/obj_tiles/4bpp/a0412_f001.png new file mode 100644 index 0000000000..052f964a9f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0412_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0412_f002.png b/sa1/graphics/obj_tiles/4bpp/a0412_f002.png new file mode 100644 index 0000000000..649223e4dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0412_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0412_f003.png b/sa1/graphics/obj_tiles/4bpp/a0412_f003.png new file mode 100644 index 0000000000..ed4a847e1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0412_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0413_f000.png b/sa1/graphics/obj_tiles/4bpp/a0413_f000.png new file mode 100644 index 0000000000..0a7db79581 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0413_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0413_f001.png b/sa1/graphics/obj_tiles/4bpp/a0413_f001.png new file mode 100644 index 0000000000..32ca2bd878 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0413_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0413_f002.png b/sa1/graphics/obj_tiles/4bpp/a0413_f002.png new file mode 100644 index 0000000000..ca9b30937c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0413_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0413_f003.png b/sa1/graphics/obj_tiles/4bpp/a0413_f003.png new file mode 100644 index 0000000000..bd935bb8d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0413_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0413_f004.png b/sa1/graphics/obj_tiles/4bpp/a0413_f004.png new file mode 100644 index 0000000000..0961ce7cf4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0413_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0414_f000.png b/sa1/graphics/obj_tiles/4bpp/a0414_f000.png new file mode 100644 index 0000000000..7eb822d2c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0414_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0414_f001.png b/sa1/graphics/obj_tiles/4bpp/a0414_f001.png new file mode 100644 index 0000000000..6a3f4b3bf4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0414_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0415_f000.png b/sa1/graphics/obj_tiles/4bpp/a0415_f000.png new file mode 100644 index 0000000000..5993d83da1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0415_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0415_f001.png b/sa1/graphics/obj_tiles/4bpp/a0415_f001.png new file mode 100644 index 0000000000..8793ba664c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0415_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0415_f002.png b/sa1/graphics/obj_tiles/4bpp/a0415_f002.png new file mode 100644 index 0000000000..4905167d92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0415_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0415_f003.png b/sa1/graphics/obj_tiles/4bpp/a0415_f003.png new file mode 100644 index 0000000000..2e34874244 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0415_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0416_f000.png b/sa1/graphics/obj_tiles/4bpp/a0416_f000.png new file mode 100644 index 0000000000..51ee1dbd5b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0416_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0416_f001.png b/sa1/graphics/obj_tiles/4bpp/a0416_f001.png new file mode 100644 index 0000000000..90c2ca9eab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0416_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0416_f002.png b/sa1/graphics/obj_tiles/4bpp/a0416_f002.png new file mode 100644 index 0000000000..f3bd039b55 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0416_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0416_f003.png b/sa1/graphics/obj_tiles/4bpp/a0416_f003.png new file mode 100644 index 0000000000..d13cf58099 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0416_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0416_f004.png b/sa1/graphics/obj_tiles/4bpp/a0416_f004.png new file mode 100644 index 0000000000..d2ce935e26 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0416_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0417_f000.png b/sa1/graphics/obj_tiles/4bpp/a0417_f000.png new file mode 100644 index 0000000000..6448cc656a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0417_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0417_f001.png b/sa1/graphics/obj_tiles/4bpp/a0417_f001.png new file mode 100644 index 0000000000..5b52515556 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0417_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0417_f002.png b/sa1/graphics/obj_tiles/4bpp/a0417_f002.png new file mode 100644 index 0000000000..cd8aa47573 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0417_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0417_f003.png b/sa1/graphics/obj_tiles/4bpp/a0417_f003.png new file mode 100644 index 0000000000..ddc536d28d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0417_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0417_f004.png b/sa1/graphics/obj_tiles/4bpp/a0417_f004.png new file mode 100644 index 0000000000..aeec49b91f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0417_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0417_f005.png b/sa1/graphics/obj_tiles/4bpp/a0417_f005.png new file mode 100644 index 0000000000..c6e7a25b05 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0417_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0418_f000.png b/sa1/graphics/obj_tiles/4bpp/a0418_f000.png new file mode 100644 index 0000000000..7da251daae Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0418_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0418_f001.png b/sa1/graphics/obj_tiles/4bpp/a0418_f001.png new file mode 100644 index 0000000000..80a5cb3671 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0418_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0418_f002.png b/sa1/graphics/obj_tiles/4bpp/a0418_f002.png new file mode 100644 index 0000000000..f41c90c901 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0418_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0418_f003.png b/sa1/graphics/obj_tiles/4bpp/a0418_f003.png new file mode 100644 index 0000000000..0d1732ce61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0418_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0419_f000.png b/sa1/graphics/obj_tiles/4bpp/a0419_f000.png new file mode 100644 index 0000000000..6a46f813b3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0419_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0419_f001.png b/sa1/graphics/obj_tiles/4bpp/a0419_f001.png new file mode 100644 index 0000000000..15df655420 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0419_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0420_f000.png b/sa1/graphics/obj_tiles/4bpp/a0420_f000.png new file mode 100644 index 0000000000..a1380b1693 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0420_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0421_f000.png b/sa1/graphics/obj_tiles/4bpp/a0421_f000.png new file mode 100644 index 0000000000..8ff0386ce3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0421_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0422_f000.png b/sa1/graphics/obj_tiles/4bpp/a0422_f000.png new file mode 100644 index 0000000000..8df308f020 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0422_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0422_f001.png b/sa1/graphics/obj_tiles/4bpp/a0422_f001.png new file mode 100644 index 0000000000..7b2ee726cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0422_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0422_f002.png b/sa1/graphics/obj_tiles/4bpp/a0422_f002.png new file mode 100644 index 0000000000..31827debf1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0422_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0422_f003.png b/sa1/graphics/obj_tiles/4bpp/a0422_f003.png new file mode 100644 index 0000000000..1afff1c387 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0422_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0422_f004.png b/sa1/graphics/obj_tiles/4bpp/a0422_f004.png new file mode 100644 index 0000000000..1851794e0d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0422_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0423_f000.png b/sa1/graphics/obj_tiles/4bpp/a0423_f000.png new file mode 100644 index 0000000000..0812b2dc28 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0423_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0423_f001.png b/sa1/graphics/obj_tiles/4bpp/a0423_f001.png new file mode 100644 index 0000000000..2cfca33784 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0423_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0423_f002.png b/sa1/graphics/obj_tiles/4bpp/a0423_f002.png new file mode 100644 index 0000000000..14615604c5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0423_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0423_f003.png b/sa1/graphics/obj_tiles/4bpp/a0423_f003.png new file mode 100644 index 0000000000..728e91d594 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0423_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0423_f004.png b/sa1/graphics/obj_tiles/4bpp/a0423_f004.png new file mode 100644 index 0000000000..2245e4ff6f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0423_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0424_f000.png b/sa1/graphics/obj_tiles/4bpp/a0424_f000.png new file mode 100644 index 0000000000..477b4f06f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0424_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0424_f001.png b/sa1/graphics/obj_tiles/4bpp/a0424_f001.png new file mode 100644 index 0000000000..2b6b659bb4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0424_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0424_f002.png b/sa1/graphics/obj_tiles/4bpp/a0424_f002.png new file mode 100644 index 0000000000..cf3ad6884e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0424_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0425_f000.png b/sa1/graphics/obj_tiles/4bpp/a0425_f000.png new file mode 100644 index 0000000000..6ce646c9f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0425_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0425_f001.png b/sa1/graphics/obj_tiles/4bpp/a0425_f001.png new file mode 100644 index 0000000000..82e9e70dac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0425_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0425_f002.png b/sa1/graphics/obj_tiles/4bpp/a0425_f002.png new file mode 100644 index 0000000000..f43c033996 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0425_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0425_f003.png b/sa1/graphics/obj_tiles/4bpp/a0425_f003.png new file mode 100644 index 0000000000..ae04509b50 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0425_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0425_f004.png b/sa1/graphics/obj_tiles/4bpp/a0425_f004.png new file mode 100644 index 0000000000..4ec420f5bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0425_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0425_f005.png b/sa1/graphics/obj_tiles/4bpp/a0425_f005.png new file mode 100644 index 0000000000..6ede262482 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0425_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0426_f000.png b/sa1/graphics/obj_tiles/4bpp/a0426_f000.png new file mode 100644 index 0000000000..e6bff46172 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0426_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0426_f001.png b/sa1/graphics/obj_tiles/4bpp/a0426_f001.png new file mode 100644 index 0000000000..af128da8a2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0426_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0426_f002.png b/sa1/graphics/obj_tiles/4bpp/a0426_f002.png new file mode 100644 index 0000000000..45919b8be4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0426_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0426_f003.png b/sa1/graphics/obj_tiles/4bpp/a0426_f003.png new file mode 100644 index 0000000000..cef58647ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0426_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0426_f004.png b/sa1/graphics/obj_tiles/4bpp/a0426_f004.png new file mode 100644 index 0000000000..47e351b75d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0426_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0427_f000.png b/sa1/graphics/obj_tiles/4bpp/a0427_f000.png new file mode 100644 index 0000000000..6fadcca2ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0427_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0428_f000.png b/sa1/graphics/obj_tiles/4bpp/a0428_f000.png new file mode 100644 index 0000000000..ab2b19752d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0428_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0429_f000.png b/sa1/graphics/obj_tiles/4bpp/a0429_f000.png new file mode 100644 index 0000000000..d88e94bbc5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0429_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0429_f001.png b/sa1/graphics/obj_tiles/4bpp/a0429_f001.png new file mode 100644 index 0000000000..79c0987280 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0429_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f000.png b/sa1/graphics/obj_tiles/4bpp/a0430_f000.png new file mode 100644 index 0000000000..b2be1e0a31 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f001.png b/sa1/graphics/obj_tiles/4bpp/a0430_f001.png new file mode 100644 index 0000000000..c6c2bf8461 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f002.png b/sa1/graphics/obj_tiles/4bpp/a0430_f002.png new file mode 100644 index 0000000000..1f965534f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f003.png b/sa1/graphics/obj_tiles/4bpp/a0430_f003.png new file mode 100644 index 0000000000..f5e757b7f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f004.png b/sa1/graphics/obj_tiles/4bpp/a0430_f004.png new file mode 100644 index 0000000000..4c18ef37c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f005.png b/sa1/graphics/obj_tiles/4bpp/a0430_f005.png new file mode 100644 index 0000000000..b279a5f1aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f006.png b/sa1/graphics/obj_tiles/4bpp/a0430_f006.png new file mode 100644 index 0000000000..18b3162a58 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0430_f007.png b/sa1/graphics/obj_tiles/4bpp/a0430_f007.png new file mode 100644 index 0000000000..18b3162a58 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0430_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0431_f000.png b/sa1/graphics/obj_tiles/4bpp/a0431_f000.png new file mode 100644 index 0000000000..f8c4d78fe5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0431_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0431_f001.png b/sa1/graphics/obj_tiles/4bpp/a0431_f001.png new file mode 100644 index 0000000000..9d8b8bcb6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0431_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0431_f002.png b/sa1/graphics/obj_tiles/4bpp/a0431_f002.png new file mode 100644 index 0000000000..fb0a230198 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0431_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0432_f000.png b/sa1/graphics/obj_tiles/4bpp/a0432_f000.png new file mode 100644 index 0000000000..bec90814d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0432_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0432_f001.png b/sa1/graphics/obj_tiles/4bpp/a0432_f001.png new file mode 100644 index 0000000000..1398dab15c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0432_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0432_f002.png b/sa1/graphics/obj_tiles/4bpp/a0432_f002.png new file mode 100644 index 0000000000..cab3fb1f0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0432_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0432_f003.png b/sa1/graphics/obj_tiles/4bpp/a0432_f003.png new file mode 100644 index 0000000000..2c7a14d372 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0432_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0432_f004.png b/sa1/graphics/obj_tiles/4bpp/a0432_f004.png new file mode 100644 index 0000000000..394c224311 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0432_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0433_f000.png b/sa1/graphics/obj_tiles/4bpp/a0433_f000.png new file mode 100644 index 0000000000..2e65ac92e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0433_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0433_f001.png b/sa1/graphics/obj_tiles/4bpp/a0433_f001.png new file mode 100644 index 0000000000..e81aa49e7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0433_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0433_f002.png b/sa1/graphics/obj_tiles/4bpp/a0433_f002.png new file mode 100644 index 0000000000..9bd1581dc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0433_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0433_f003.png b/sa1/graphics/obj_tiles/4bpp/a0433_f003.png new file mode 100644 index 0000000000..0f23a85995 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0433_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0433_f004.png b/sa1/graphics/obj_tiles/4bpp/a0433_f004.png new file mode 100644 index 0000000000..c298761f44 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0433_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0434_f000.png b/sa1/graphics/obj_tiles/4bpp/a0434_f000.png new file mode 100644 index 0000000000..ba94540b22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0434_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0434_f001.png b/sa1/graphics/obj_tiles/4bpp/a0434_f001.png new file mode 100644 index 0000000000..83b72f3238 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0434_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0434_f002.png b/sa1/graphics/obj_tiles/4bpp/a0434_f002.png new file mode 100644 index 0000000000..c6acf87076 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0434_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0434_f003.png b/sa1/graphics/obj_tiles/4bpp/a0434_f003.png new file mode 100644 index 0000000000..c98ab9ef1c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0434_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0435_f000.png b/sa1/graphics/obj_tiles/4bpp/a0435_f000.png new file mode 100644 index 0000000000..b99ac5faa7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0435_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0435_f001.png b/sa1/graphics/obj_tiles/4bpp/a0435_f001.png new file mode 100644 index 0000000000..16c6ef00ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0435_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0436_f000.png b/sa1/graphics/obj_tiles/4bpp/a0436_f000.png new file mode 100644 index 0000000000..b99ac5faa7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0436_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0436_f001.png b/sa1/graphics/obj_tiles/4bpp/a0436_f001.png new file mode 100644 index 0000000000..16c6ef00ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0436_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0437_f000.png b/sa1/graphics/obj_tiles/4bpp/a0437_f000.png new file mode 100644 index 0000000000..82659c854b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0437_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0437_f001.png b/sa1/graphics/obj_tiles/4bpp/a0437_f001.png new file mode 100644 index 0000000000..9b44a543d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0437_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0437_f002.png b/sa1/graphics/obj_tiles/4bpp/a0437_f002.png new file mode 100644 index 0000000000..d7bc5fd4bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0437_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0438_f000.png b/sa1/graphics/obj_tiles/4bpp/a0438_f000.png new file mode 100644 index 0000000000..8d4591b495 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0438_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0438_f001.png b/sa1/graphics/obj_tiles/4bpp/a0438_f001.png new file mode 100644 index 0000000000..f97620f9fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0438_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0438_f002.png b/sa1/graphics/obj_tiles/4bpp/a0438_f002.png new file mode 100644 index 0000000000..df4217950b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0438_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0439_f000.png b/sa1/graphics/obj_tiles/4bpp/a0439_f000.png new file mode 100644 index 0000000000..f50707d666 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0439_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0439_f001.png b/sa1/graphics/obj_tiles/4bpp/a0439_f001.png new file mode 100644 index 0000000000..5cf266f846 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0439_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0439_f002.png b/sa1/graphics/obj_tiles/4bpp/a0439_f002.png new file mode 100644 index 0000000000..c3eab0ad69 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0439_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0440_f000.png b/sa1/graphics/obj_tiles/4bpp/a0440_f000.png new file mode 100644 index 0000000000..e9d9d82ea5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0440_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0440_f001.png b/sa1/graphics/obj_tiles/4bpp/a0440_f001.png new file mode 100644 index 0000000000..d421bf3898 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0440_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0440_f002.png b/sa1/graphics/obj_tiles/4bpp/a0440_f002.png new file mode 100644 index 0000000000..a8b7d87bbf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0440_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0441_f000.png b/sa1/graphics/obj_tiles/4bpp/a0441_f000.png new file mode 100644 index 0000000000..fd220a56b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0441_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0441_f001.png b/sa1/graphics/obj_tiles/4bpp/a0441_f001.png new file mode 100644 index 0000000000..dc206711b3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0441_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0441_f002.png b/sa1/graphics/obj_tiles/4bpp/a0441_f002.png new file mode 100644 index 0000000000..65fbea61f7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0441_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0442_f000.png b/sa1/graphics/obj_tiles/4bpp/a0442_f000.png new file mode 100644 index 0000000000..293af48944 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0442_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0442_f001.png b/sa1/graphics/obj_tiles/4bpp/a0442_f001.png new file mode 100644 index 0000000000..d24e38446e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0442_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0442_f002.png b/sa1/graphics/obj_tiles/4bpp/a0442_f002.png new file mode 100644 index 0000000000..f00b009519 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0442_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0443_f000.png b/sa1/graphics/obj_tiles/4bpp/a0443_f000.png new file mode 100644 index 0000000000..997ce862ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0443_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0443_f001.png b/sa1/graphics/obj_tiles/4bpp/a0443_f001.png new file mode 100644 index 0000000000..6dcf0b8ef8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0443_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0443_f002.png b/sa1/graphics/obj_tiles/4bpp/a0443_f002.png new file mode 100644 index 0000000000..70d09cfde5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0443_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0444_f000.png b/sa1/graphics/obj_tiles/4bpp/a0444_f000.png new file mode 100644 index 0000000000..3b8bbe1964 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0444_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0444_f001.png b/sa1/graphics/obj_tiles/4bpp/a0444_f001.png new file mode 100644 index 0000000000..2258f5e855 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0444_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0444_f002.png b/sa1/graphics/obj_tiles/4bpp/a0444_f002.png new file mode 100644 index 0000000000..1aa5759fa7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0444_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0445_f000.png b/sa1/graphics/obj_tiles/4bpp/a0445_f000.png new file mode 100644 index 0000000000..3df60a5dc3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0445_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0445_f001.png b/sa1/graphics/obj_tiles/4bpp/a0445_f001.png new file mode 100644 index 0000000000..3ea27aec3b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0445_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0445_f002.png b/sa1/graphics/obj_tiles/4bpp/a0445_f002.png new file mode 100644 index 0000000000..7703595fbe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0445_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0446_f000.png b/sa1/graphics/obj_tiles/4bpp/a0446_f000.png new file mode 100644 index 0000000000..19c60c1a49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0446_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0446_f001.png b/sa1/graphics/obj_tiles/4bpp/a0446_f001.png new file mode 100644 index 0000000000..c960ed52be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0446_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0446_f002.png b/sa1/graphics/obj_tiles/4bpp/a0446_f002.png new file mode 100644 index 0000000000..4215e60dda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0446_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0447_f000.png b/sa1/graphics/obj_tiles/4bpp/a0447_f000.png new file mode 100644 index 0000000000..7f0e105068 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0447_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0447_f001.png b/sa1/graphics/obj_tiles/4bpp/a0447_f001.png new file mode 100644 index 0000000000..d6052ef0bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0447_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0447_f002.png b/sa1/graphics/obj_tiles/4bpp/a0447_f002.png new file mode 100644 index 0000000000..d6ce8dc491 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0447_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0448_f000.png b/sa1/graphics/obj_tiles/4bpp/a0448_f000.png new file mode 100644 index 0000000000..2d2679eb31 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0448_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0448_f001.png b/sa1/graphics/obj_tiles/4bpp/a0448_f001.png new file mode 100644 index 0000000000..1f092841ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0448_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0448_f002.png b/sa1/graphics/obj_tiles/4bpp/a0448_f002.png new file mode 100644 index 0000000000..f2d615edc8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0448_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0449_f000.png b/sa1/graphics/obj_tiles/4bpp/a0449_f000.png new file mode 100644 index 0000000000..eb7ddea33c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0449_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0449_f001.png b/sa1/graphics/obj_tiles/4bpp/a0449_f001.png new file mode 100644 index 0000000000..422cf7b69b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0449_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0449_f002.png b/sa1/graphics/obj_tiles/4bpp/a0449_f002.png new file mode 100644 index 0000000000..d7eb793ade Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0449_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0450_f000.png b/sa1/graphics/obj_tiles/4bpp/a0450_f000.png new file mode 100644 index 0000000000..a4240929d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0450_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0450_f001.png b/sa1/graphics/obj_tiles/4bpp/a0450_f001.png new file mode 100644 index 0000000000..b489b8e178 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0450_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0450_f002.png b/sa1/graphics/obj_tiles/4bpp/a0450_f002.png new file mode 100644 index 0000000000..447914befd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0450_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0451_f000.png b/sa1/graphics/obj_tiles/4bpp/a0451_f000.png new file mode 100644 index 0000000000..266b829de2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0451_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0451_f001.png b/sa1/graphics/obj_tiles/4bpp/a0451_f001.png new file mode 100644 index 0000000000..33cb49684c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0451_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0451_f002.png b/sa1/graphics/obj_tiles/4bpp/a0451_f002.png new file mode 100644 index 0000000000..08e1982d82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0451_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0452_f000.png b/sa1/graphics/obj_tiles/4bpp/a0452_f000.png new file mode 100644 index 0000000000..39935145c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0452_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0452_f001.png b/sa1/graphics/obj_tiles/4bpp/a0452_f001.png new file mode 100644 index 0000000000..c5cfe7691e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0452_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0452_f002.png b/sa1/graphics/obj_tiles/4bpp/a0452_f002.png new file mode 100644 index 0000000000..f2afe4e5da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0452_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0452_f003.png b/sa1/graphics/obj_tiles/4bpp/a0452_f003.png new file mode 100644 index 0000000000..572d1fcc6b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0452_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0452_f004.png b/sa1/graphics/obj_tiles/4bpp/a0452_f004.png new file mode 100644 index 0000000000..5ad7c834d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0452_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0452_f005.png b/sa1/graphics/obj_tiles/4bpp/a0452_f005.png new file mode 100644 index 0000000000..41dd482e51 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0452_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0452_f006.png b/sa1/graphics/obj_tiles/4bpp/a0452_f006.png new file mode 100644 index 0000000000..bf19fed934 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0452_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0453_f000.png b/sa1/graphics/obj_tiles/4bpp/a0453_f000.png new file mode 100644 index 0000000000..5b353d362d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0453_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0453_f001.png b/sa1/graphics/obj_tiles/4bpp/a0453_f001.png new file mode 100644 index 0000000000..2d3f7d4862 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0453_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0453_f002.png b/sa1/graphics/obj_tiles/4bpp/a0453_f002.png new file mode 100644 index 0000000000..31b87a7b4f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0453_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0453_f003.png b/sa1/graphics/obj_tiles/4bpp/a0453_f003.png new file mode 100644 index 0000000000..0703aec755 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0453_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0453_f004.png b/sa1/graphics/obj_tiles/4bpp/a0453_f004.png new file mode 100644 index 0000000000..14422cd091 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0453_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0453_f005.png b/sa1/graphics/obj_tiles/4bpp/a0453_f005.png new file mode 100644 index 0000000000..fcb0a48799 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0453_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0453_f006.png b/sa1/graphics/obj_tiles/4bpp/a0453_f006.png new file mode 100644 index 0000000000..3cbb39e9c2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0453_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0454_f000.png b/sa1/graphics/obj_tiles/4bpp/a0454_f000.png new file mode 100644 index 0000000000..2960141483 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0454_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0454_f001.png b/sa1/graphics/obj_tiles/4bpp/a0454_f001.png new file mode 100644 index 0000000000..2a470e9ddf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0454_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0454_f002.png b/sa1/graphics/obj_tiles/4bpp/a0454_f002.png new file mode 100644 index 0000000000..fd66b5b3b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0454_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0454_f003.png b/sa1/graphics/obj_tiles/4bpp/a0454_f003.png new file mode 100644 index 0000000000..45add0c35a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0454_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f000.png b/sa1/graphics/obj_tiles/4bpp/a0455_f000.png new file mode 100644 index 0000000000..1b546e6a99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f001.png b/sa1/graphics/obj_tiles/4bpp/a0455_f001.png new file mode 100644 index 0000000000..5d2629902c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f002.png b/sa1/graphics/obj_tiles/4bpp/a0455_f002.png new file mode 100644 index 0000000000..ed4a055b98 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f003.png b/sa1/graphics/obj_tiles/4bpp/a0455_f003.png new file mode 100644 index 0000000000..ded3c7fc06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f004.png b/sa1/graphics/obj_tiles/4bpp/a0455_f004.png new file mode 100644 index 0000000000..a2c7ccd169 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f005.png b/sa1/graphics/obj_tiles/4bpp/a0455_f005.png new file mode 100644 index 0000000000..1fbb8ac6bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f006.png b/sa1/graphics/obj_tiles/4bpp/a0455_f006.png new file mode 100644 index 0000000000..fae06b08e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f007.png b/sa1/graphics/obj_tiles/4bpp/a0455_f007.png new file mode 100644 index 0000000000..8b3f085e2c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f008.png b/sa1/graphics/obj_tiles/4bpp/a0455_f008.png new file mode 100644 index 0000000000..70cd9d2eb6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f009.png b/sa1/graphics/obj_tiles/4bpp/a0455_f009.png new file mode 100644 index 0000000000..9d216e885f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f010.png b/sa1/graphics/obj_tiles/4bpp/a0455_f010.png new file mode 100644 index 0000000000..b54d7e8802 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f011.png b/sa1/graphics/obj_tiles/4bpp/a0455_f011.png new file mode 100644 index 0000000000..8fc7e5fc5b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f012.png b/sa1/graphics/obj_tiles/4bpp/a0455_f012.png new file mode 100644 index 0000000000..1a516d3371 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f013.png b/sa1/graphics/obj_tiles/4bpp/a0455_f013.png new file mode 100644 index 0000000000..43bded8536 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f014.png b/sa1/graphics/obj_tiles/4bpp/a0455_f014.png new file mode 100644 index 0000000000..3af195ce3e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f015.png b/sa1/graphics/obj_tiles/4bpp/a0455_f015.png new file mode 100644 index 0000000000..cb578b3400 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f016.png b/sa1/graphics/obj_tiles/4bpp/a0455_f016.png new file mode 100644 index 0000000000..e95d65825c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f017.png b/sa1/graphics/obj_tiles/4bpp/a0455_f017.png new file mode 100644 index 0000000000..6cefeee619 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f018.png b/sa1/graphics/obj_tiles/4bpp/a0455_f018.png new file mode 100644 index 0000000000..76c15dd81c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0455_f019.png b/sa1/graphics/obj_tiles/4bpp/a0455_f019.png new file mode 100644 index 0000000000..5d3b4deea6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0455_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0456_f000.png b/sa1/graphics/obj_tiles/4bpp/a0456_f000.png new file mode 100644 index 0000000000..38952ce485 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0456_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0457_f000.png b/sa1/graphics/obj_tiles/4bpp/a0457_f000.png new file mode 100644 index 0000000000..a9f10977ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0457_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0457_f001.png b/sa1/graphics/obj_tiles/4bpp/a0457_f001.png new file mode 100644 index 0000000000..1688e41e45 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0457_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0457_f002.png b/sa1/graphics/obj_tiles/4bpp/a0457_f002.png new file mode 100644 index 0000000000..7cc9241534 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0457_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0457_f003.png b/sa1/graphics/obj_tiles/4bpp/a0457_f003.png new file mode 100644 index 0000000000..762382beb0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0457_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0458_f000.png b/sa1/graphics/obj_tiles/4bpp/a0458_f000.png new file mode 100644 index 0000000000..9d47b77389 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0458_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0459_f000.png b/sa1/graphics/obj_tiles/4bpp/a0459_f000.png new file mode 100644 index 0000000000..5c28d5609a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0459_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0460_f000.png b/sa1/graphics/obj_tiles/4bpp/a0460_f000.png new file mode 100644 index 0000000000..ff5b0df94a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0460_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0461_f000.png b/sa1/graphics/obj_tiles/4bpp/a0461_f000.png new file mode 100644 index 0000000000..8dd7fb283f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0461_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0461_f001.png b/sa1/graphics/obj_tiles/4bpp/a0461_f001.png new file mode 100644 index 0000000000..30e11d573f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0461_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0461_f002.png b/sa1/graphics/obj_tiles/4bpp/a0461_f002.png new file mode 100644 index 0000000000..8cced2efd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0461_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0461_f003.png b/sa1/graphics/obj_tiles/4bpp/a0461_f003.png new file mode 100644 index 0000000000..5e891bbe96 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0461_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0461_f004.png b/sa1/graphics/obj_tiles/4bpp/a0461_f004.png new file mode 100644 index 0000000000..2feb7118f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0461_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0461_f005.png b/sa1/graphics/obj_tiles/4bpp/a0461_f005.png new file mode 100644 index 0000000000..e02982df75 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0461_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0461_f006.png b/sa1/graphics/obj_tiles/4bpp/a0461_f006.png new file mode 100644 index 0000000000..6af98b6bb9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0461_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0462_f000.png b/sa1/graphics/obj_tiles/4bpp/a0462_f000.png new file mode 100644 index 0000000000..07fa99832a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0462_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0463_f000.png b/sa1/graphics/obj_tiles/4bpp/a0463_f000.png new file mode 100644 index 0000000000..7f40dada18 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0463_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0464_f000.png b/sa1/graphics/obj_tiles/4bpp/a0464_f000.png new file mode 100644 index 0000000000..daba9b8a68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0464_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0464_f001.png b/sa1/graphics/obj_tiles/4bpp/a0464_f001.png new file mode 100644 index 0000000000..85068648b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0464_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0464_f002.png b/sa1/graphics/obj_tiles/4bpp/a0464_f002.png new file mode 100644 index 0000000000..7dfffb5a63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0464_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f000.png b/sa1/graphics/obj_tiles/4bpp/a0465_f000.png new file mode 100644 index 0000000000..8afeeee860 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f001.png b/sa1/graphics/obj_tiles/4bpp/a0465_f001.png new file mode 100644 index 0000000000..8e87e06b4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f002.png b/sa1/graphics/obj_tiles/4bpp/a0465_f002.png new file mode 100644 index 0000000000..8e87e06b4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f003.png b/sa1/graphics/obj_tiles/4bpp/a0465_f003.png new file mode 100644 index 0000000000..5712d0d5c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f004.png b/sa1/graphics/obj_tiles/4bpp/a0465_f004.png new file mode 100644 index 0000000000..5712d0d5c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f005.png b/sa1/graphics/obj_tiles/4bpp/a0465_f005.png new file mode 100644 index 0000000000..d7ba6fdd62 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f006.png b/sa1/graphics/obj_tiles/4bpp/a0465_f006.png new file mode 100644 index 0000000000..ab38daf69b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f007.png b/sa1/graphics/obj_tiles/4bpp/a0465_f007.png new file mode 100644 index 0000000000..1fddb945d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0465_f008.png b/sa1/graphics/obj_tiles/4bpp/a0465_f008.png new file mode 100644 index 0000000000..3936fadd68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0465_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0466_f000.png b/sa1/graphics/obj_tiles/4bpp/a0466_f000.png new file mode 100644 index 0000000000..fb604cc94c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0466_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0467_f000.png b/sa1/graphics/obj_tiles/4bpp/a0467_f000.png new file mode 100644 index 0000000000..1d87e660a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0467_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0467_f001.png b/sa1/graphics/obj_tiles/4bpp/a0467_f001.png new file mode 100644 index 0000000000..9a27e82633 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0467_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0467_f002.png b/sa1/graphics/obj_tiles/4bpp/a0467_f002.png new file mode 100644 index 0000000000..284590b6bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0467_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0467_f003.png b/sa1/graphics/obj_tiles/4bpp/a0467_f003.png new file mode 100644 index 0000000000..1b74be589a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0467_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0467_f004.png b/sa1/graphics/obj_tiles/4bpp/a0467_f004.png new file mode 100644 index 0000000000..2d21b8397f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0467_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0467_f005.png b/sa1/graphics/obj_tiles/4bpp/a0467_f005.png new file mode 100644 index 0000000000..ae87be3265 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0467_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0467_f006.png b/sa1/graphics/obj_tiles/4bpp/a0467_f006.png new file mode 100644 index 0000000000..721136332d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0467_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0468_f000.png b/sa1/graphics/obj_tiles/4bpp/a0468_f000.png new file mode 100644 index 0000000000..f20b6f1869 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0468_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0468_f001.png b/sa1/graphics/obj_tiles/4bpp/a0468_f001.png new file mode 100644 index 0000000000..1ca3e69544 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0468_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0468_f002.png b/sa1/graphics/obj_tiles/4bpp/a0468_f002.png new file mode 100644 index 0000000000..b2d20d54b4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0468_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0468_f003.png b/sa1/graphics/obj_tiles/4bpp/a0468_f003.png new file mode 100644 index 0000000000..b37ba8c67c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0468_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0468_f004.png b/sa1/graphics/obj_tiles/4bpp/a0468_f004.png new file mode 100644 index 0000000000..d351774dbf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0468_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0469_f000.png b/sa1/graphics/obj_tiles/4bpp/a0469_f000.png new file mode 100644 index 0000000000..95425d475c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0469_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0469_f001.png b/sa1/graphics/obj_tiles/4bpp/a0469_f001.png new file mode 100644 index 0000000000..95425d475c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0469_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0469_f002.png b/sa1/graphics/obj_tiles/4bpp/a0469_f002.png new file mode 100644 index 0000000000..fa22977103 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0469_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0469_f003.png b/sa1/graphics/obj_tiles/4bpp/a0469_f003.png new file mode 100644 index 0000000000..809e196885 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0469_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0469_f004.png b/sa1/graphics/obj_tiles/4bpp/a0469_f004.png new file mode 100644 index 0000000000..945e42d927 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0469_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0469_f005.png b/sa1/graphics/obj_tiles/4bpp/a0469_f005.png new file mode 100644 index 0000000000..728658490e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0469_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0470_f000.png b/sa1/graphics/obj_tiles/4bpp/a0470_f000.png new file mode 100644 index 0000000000..9f34d293dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0470_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0470_f001.png b/sa1/graphics/obj_tiles/4bpp/a0470_f001.png new file mode 100644 index 0000000000..4b2c356052 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0470_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0470_f002.png b/sa1/graphics/obj_tiles/4bpp/a0470_f002.png new file mode 100644 index 0000000000..af87070add Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0470_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0470_f003.png b/sa1/graphics/obj_tiles/4bpp/a0470_f003.png new file mode 100644 index 0000000000..ab9c871420 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0470_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0470_f004.png b/sa1/graphics/obj_tiles/4bpp/a0470_f004.png new file mode 100644 index 0000000000..e40fda32db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0470_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f000.png b/sa1/graphics/obj_tiles/4bpp/a0471_f000.png new file mode 100644 index 0000000000..a755c1b63e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f001.png b/sa1/graphics/obj_tiles/4bpp/a0471_f001.png new file mode 100644 index 0000000000..04e0107f43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f002.png b/sa1/graphics/obj_tiles/4bpp/a0471_f002.png new file mode 100644 index 0000000000..c2efacdac6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f003.png b/sa1/graphics/obj_tiles/4bpp/a0471_f003.png new file mode 100644 index 0000000000..cd307c3b32 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f004.png b/sa1/graphics/obj_tiles/4bpp/a0471_f004.png new file mode 100644 index 0000000000..4e5ca11a7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f005.png b/sa1/graphics/obj_tiles/4bpp/a0471_f005.png new file mode 100644 index 0000000000..fdca6769f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f006.png b/sa1/graphics/obj_tiles/4bpp/a0471_f006.png new file mode 100644 index 0000000000..dc45bfd3c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f007.png b/sa1/graphics/obj_tiles/4bpp/a0471_f007.png new file mode 100644 index 0000000000..854712fd90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0471_f008.png b/sa1/graphics/obj_tiles/4bpp/a0471_f008.png new file mode 100644 index 0000000000..a4cba005e3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0471_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0472_f000.png b/sa1/graphics/obj_tiles/4bpp/a0472_f000.png new file mode 100644 index 0000000000..775abf85ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0472_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0472_f001.png b/sa1/graphics/obj_tiles/4bpp/a0472_f001.png new file mode 100644 index 0000000000..9feb24a055 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0472_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0472_f002.png b/sa1/graphics/obj_tiles/4bpp/a0472_f002.png new file mode 100644 index 0000000000..2e0881c9d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0472_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0473_f000.png b/sa1/graphics/obj_tiles/4bpp/a0473_f000.png new file mode 100644 index 0000000000..0d9361fd13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0473_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0473_f001.png b/sa1/graphics/obj_tiles/4bpp/a0473_f001.png new file mode 100644 index 0000000000..51ee0f2ab9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0473_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0473_f002.png b/sa1/graphics/obj_tiles/4bpp/a0473_f002.png new file mode 100644 index 0000000000..fb9385747f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0473_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0474_f000.png b/sa1/graphics/obj_tiles/4bpp/a0474_f000.png new file mode 100644 index 0000000000..2548e3bc99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0474_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0474_f001.png b/sa1/graphics/obj_tiles/4bpp/a0474_f001.png new file mode 100644 index 0000000000..55c94b4bbb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0474_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0474_f002.png b/sa1/graphics/obj_tiles/4bpp/a0474_f002.png new file mode 100644 index 0000000000..c5a2e844a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0474_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0475_f000.png b/sa1/graphics/obj_tiles/4bpp/a0475_f000.png new file mode 100644 index 0000000000..f63a4c293d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0475_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0476_f000.png b/sa1/graphics/obj_tiles/4bpp/a0476_f000.png new file mode 100644 index 0000000000..8e3f40b2d8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0476_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0477_f000.png b/sa1/graphics/obj_tiles/4bpp/a0477_f000.png new file mode 100644 index 0000000000..e0579b9e87 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0477_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0478_f000.png b/sa1/graphics/obj_tiles/4bpp/a0478_f000.png new file mode 100644 index 0000000000..06954012bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0478_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0478_f001.png b/sa1/graphics/obj_tiles/4bpp/a0478_f001.png new file mode 100644 index 0000000000..9d3f12f864 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0478_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0478_f002.png b/sa1/graphics/obj_tiles/4bpp/a0478_f002.png new file mode 100644 index 0000000000..7bfbe0b55e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0478_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0478_f003.png b/sa1/graphics/obj_tiles/4bpp/a0478_f003.png new file mode 100644 index 0000000000..2c79be0b9f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0478_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0478_f004.png b/sa1/graphics/obj_tiles/4bpp/a0478_f004.png new file mode 100644 index 0000000000..7a833e5aab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0478_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0478_f005.png b/sa1/graphics/obj_tiles/4bpp/a0478_f005.png new file mode 100644 index 0000000000..57b1413687 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0478_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f000.png b/sa1/graphics/obj_tiles/4bpp/a0479_f000.png new file mode 100644 index 0000000000..c3fd8fd039 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f001.png b/sa1/graphics/obj_tiles/4bpp/a0479_f001.png new file mode 100644 index 0000000000..0dae0ccdbd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f002.png b/sa1/graphics/obj_tiles/4bpp/a0479_f002.png new file mode 100644 index 0000000000..81af7b24af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f003.png b/sa1/graphics/obj_tiles/4bpp/a0479_f003.png new file mode 100644 index 0000000000..9b42c852b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f004.png b/sa1/graphics/obj_tiles/4bpp/a0479_f004.png new file mode 100644 index 0000000000..b859b68c07 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f005.png b/sa1/graphics/obj_tiles/4bpp/a0479_f005.png new file mode 100644 index 0000000000..c150776aad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f006.png b/sa1/graphics/obj_tiles/4bpp/a0479_f006.png new file mode 100644 index 0000000000..8579119a2c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f007.png b/sa1/graphics/obj_tiles/4bpp/a0479_f007.png new file mode 100644 index 0000000000..0e9252d35d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0479_f008.png b/sa1/graphics/obj_tiles/4bpp/a0479_f008.png new file mode 100644 index 0000000000..d4dcd7b047 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0479_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f000.png b/sa1/graphics/obj_tiles/4bpp/a0480_f000.png new file mode 100644 index 0000000000..6cda3e7fa7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f001.png b/sa1/graphics/obj_tiles/4bpp/a0480_f001.png new file mode 100644 index 0000000000..6ebb850c37 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f002.png b/sa1/graphics/obj_tiles/4bpp/a0480_f002.png new file mode 100644 index 0000000000..dafb4d72d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f003.png b/sa1/graphics/obj_tiles/4bpp/a0480_f003.png new file mode 100644 index 0000000000..bb0b7cf331 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f004.png b/sa1/graphics/obj_tiles/4bpp/a0480_f004.png new file mode 100644 index 0000000000..2b3dce68d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f005.png b/sa1/graphics/obj_tiles/4bpp/a0480_f005.png new file mode 100644 index 0000000000..c150776aad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f006.png b/sa1/graphics/obj_tiles/4bpp/a0480_f006.png new file mode 100644 index 0000000000..8579119a2c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f007.png b/sa1/graphics/obj_tiles/4bpp/a0480_f007.png new file mode 100644 index 0000000000..0e9252d35d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0480_f008.png b/sa1/graphics/obj_tiles/4bpp/a0480_f008.png new file mode 100644 index 0000000000..d4dcd7b047 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0480_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f000.png b/sa1/graphics/obj_tiles/4bpp/a0481_f000.png new file mode 100644 index 0000000000..092ac0c1af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f001.png b/sa1/graphics/obj_tiles/4bpp/a0481_f001.png new file mode 100644 index 0000000000..f0f6a5a5c5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f002.png b/sa1/graphics/obj_tiles/4bpp/a0481_f002.png new file mode 100644 index 0000000000..2b5922af82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f003.png b/sa1/graphics/obj_tiles/4bpp/a0481_f003.png new file mode 100644 index 0000000000..88898b795b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f004.png b/sa1/graphics/obj_tiles/4bpp/a0481_f004.png new file mode 100644 index 0000000000..a21e61b68c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f005.png b/sa1/graphics/obj_tiles/4bpp/a0481_f005.png new file mode 100644 index 0000000000..c150776aad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f006.png b/sa1/graphics/obj_tiles/4bpp/a0481_f006.png new file mode 100644 index 0000000000..8579119a2c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f007.png b/sa1/graphics/obj_tiles/4bpp/a0481_f007.png new file mode 100644 index 0000000000..0e9252d35d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0481_f008.png b/sa1/graphics/obj_tiles/4bpp/a0481_f008.png new file mode 100644 index 0000000000..d4dcd7b047 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0481_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0482_f000.png b/sa1/graphics/obj_tiles/4bpp/a0482_f000.png new file mode 100644 index 0000000000..f9573464b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0482_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0482_f001.png b/sa1/graphics/obj_tiles/4bpp/a0482_f001.png new file mode 100644 index 0000000000..fe93a37efa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0482_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0482_f002.png b/sa1/graphics/obj_tiles/4bpp/a0482_f002.png new file mode 100644 index 0000000000..59bf280487 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0482_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0482_f003.png b/sa1/graphics/obj_tiles/4bpp/a0482_f003.png new file mode 100644 index 0000000000..d731fd46de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0482_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0482_f004.png b/sa1/graphics/obj_tiles/4bpp/a0482_f004.png new file mode 100644 index 0000000000..d61c3d4190 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0482_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0483_f000.png b/sa1/graphics/obj_tiles/4bpp/a0483_f000.png new file mode 100644 index 0000000000..a1e8e200a5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0483_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0483_f001.png b/sa1/graphics/obj_tiles/4bpp/a0483_f001.png new file mode 100644 index 0000000000..81c6120951 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0483_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0483_f002.png b/sa1/graphics/obj_tiles/4bpp/a0483_f002.png new file mode 100644 index 0000000000..3e2c75b0ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0483_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0483_f003.png b/sa1/graphics/obj_tiles/4bpp/a0483_f003.png new file mode 100644 index 0000000000..de88ec9941 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0483_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0483_f004.png b/sa1/graphics/obj_tiles/4bpp/a0483_f004.png new file mode 100644 index 0000000000..f5b9a881d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0483_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0484_f000.png b/sa1/graphics/obj_tiles/4bpp/a0484_f000.png new file mode 100644 index 0000000000..6fe31f9611 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0484_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0485_f000.png b/sa1/graphics/obj_tiles/4bpp/a0485_f000.png new file mode 100644 index 0000000000..7c0b7ed520 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0485_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0486_f000.png b/sa1/graphics/obj_tiles/4bpp/a0486_f000.png new file mode 100644 index 0000000000..91553260d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0486_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0486_f001.png b/sa1/graphics/obj_tiles/4bpp/a0486_f001.png new file mode 100644 index 0000000000..f91c5bccdc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0486_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0487_f000.png b/sa1/graphics/obj_tiles/4bpp/a0487_f000.png new file mode 100644 index 0000000000..cba4a47255 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0487_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0487_f001.png b/sa1/graphics/obj_tiles/4bpp/a0487_f001.png new file mode 100644 index 0000000000..edd3f9e54c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0487_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0488_f000.png b/sa1/graphics/obj_tiles/4bpp/a0488_f000.png new file mode 100644 index 0000000000..9f63fd3132 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0488_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0489_f000.png b/sa1/graphics/obj_tiles/4bpp/a0489_f000.png new file mode 100644 index 0000000000..372c194e44 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0489_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0490_f000.png b/sa1/graphics/obj_tiles/4bpp/a0490_f000.png new file mode 100644 index 0000000000..e3bed174c2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0490_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0491_f000.png b/sa1/graphics/obj_tiles/4bpp/a0491_f000.png new file mode 100644 index 0000000000..09bfb6b1c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0491_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f000.png b/sa1/graphics/obj_tiles/4bpp/a0492_f000.png new file mode 100644 index 0000000000..20e1dbbdd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f001.png b/sa1/graphics/obj_tiles/4bpp/a0492_f001.png new file mode 100644 index 0000000000..b90a2c2b26 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f002.png b/sa1/graphics/obj_tiles/4bpp/a0492_f002.png new file mode 100644 index 0000000000..2c9f6d86b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f003.png b/sa1/graphics/obj_tiles/4bpp/a0492_f003.png new file mode 100644 index 0000000000..0906cf310d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f004.png b/sa1/graphics/obj_tiles/4bpp/a0492_f004.png new file mode 100644 index 0000000000..89eff002c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f005.png b/sa1/graphics/obj_tiles/4bpp/a0492_f005.png new file mode 100644 index 0000000000..6162a0c200 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f006.png b/sa1/graphics/obj_tiles/4bpp/a0492_f006.png new file mode 100644 index 0000000000..8eccddb3c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f007.png b/sa1/graphics/obj_tiles/4bpp/a0492_f007.png new file mode 100644 index 0000000000..db8d59ff1b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f008.png b/sa1/graphics/obj_tiles/4bpp/a0492_f008.png new file mode 100644 index 0000000000..1ce2b763f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f009.png b/sa1/graphics/obj_tiles/4bpp/a0492_f009.png new file mode 100644 index 0000000000..8b3f506550 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f010.png b/sa1/graphics/obj_tiles/4bpp/a0492_f010.png new file mode 100644 index 0000000000..670f1f75ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f011.png b/sa1/graphics/obj_tiles/4bpp/a0492_f011.png new file mode 100644 index 0000000000..cfc35dd3d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f012.png b/sa1/graphics/obj_tiles/4bpp/a0492_f012.png new file mode 100644 index 0000000000..4308ffa7cb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f013.png b/sa1/graphics/obj_tiles/4bpp/a0492_f013.png new file mode 100644 index 0000000000..80d0c89e32 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f014.png b/sa1/graphics/obj_tiles/4bpp/a0492_f014.png new file mode 100644 index 0000000000..8d9a9f3519 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f015.png b/sa1/graphics/obj_tiles/4bpp/a0492_f015.png new file mode 100644 index 0000000000..ad7da7de3d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f016.png b/sa1/graphics/obj_tiles/4bpp/a0492_f016.png new file mode 100644 index 0000000000..2a364695fe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f017.png b/sa1/graphics/obj_tiles/4bpp/a0492_f017.png new file mode 100644 index 0000000000..5ce2ca548a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f018.png b/sa1/graphics/obj_tiles/4bpp/a0492_f018.png new file mode 100644 index 0000000000..fbab0848cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f019.png b/sa1/graphics/obj_tiles/4bpp/a0492_f019.png new file mode 100644 index 0000000000..42672422e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f020.png b/sa1/graphics/obj_tiles/4bpp/a0492_f020.png new file mode 100644 index 0000000000..4d026bd1e1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f021.png b/sa1/graphics/obj_tiles/4bpp/a0492_f021.png new file mode 100644 index 0000000000..bc7b8ccf15 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f022.png b/sa1/graphics/obj_tiles/4bpp/a0492_f022.png new file mode 100644 index 0000000000..bd73b82007 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f023.png b/sa1/graphics/obj_tiles/4bpp/a0492_f023.png new file mode 100644 index 0000000000..505a23b303 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f024.png b/sa1/graphics/obj_tiles/4bpp/a0492_f024.png new file mode 100644 index 0000000000..918cc39585 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f024.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f025.png b/sa1/graphics/obj_tiles/4bpp/a0492_f025.png new file mode 100644 index 0000000000..598d8d6488 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f025.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f026.png b/sa1/graphics/obj_tiles/4bpp/a0492_f026.png new file mode 100644 index 0000000000..2faa9e1b07 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f026.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f027.png b/sa1/graphics/obj_tiles/4bpp/a0492_f027.png new file mode 100644 index 0000000000..abb47c23e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f027.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f028.png b/sa1/graphics/obj_tiles/4bpp/a0492_f028.png new file mode 100644 index 0000000000..7c9f4b81e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f028.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f029.png b/sa1/graphics/obj_tiles/4bpp/a0492_f029.png new file mode 100644 index 0000000000..53145d6781 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f029.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f030.png b/sa1/graphics/obj_tiles/4bpp/a0492_f030.png new file mode 100644 index 0000000000..7a7b3f1bd5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f030.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f031.png b/sa1/graphics/obj_tiles/4bpp/a0492_f031.png new file mode 100644 index 0000000000..42daf0c7e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f031.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f032.png b/sa1/graphics/obj_tiles/4bpp/a0492_f032.png new file mode 100644 index 0000000000..46dee0dcf1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f032.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f033.png b/sa1/graphics/obj_tiles/4bpp/a0492_f033.png new file mode 100644 index 0000000000..c97de4d1a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f033.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f034.png b/sa1/graphics/obj_tiles/4bpp/a0492_f034.png new file mode 100644 index 0000000000..80d80bf424 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f034.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f035.png b/sa1/graphics/obj_tiles/4bpp/a0492_f035.png new file mode 100644 index 0000000000..04b1d14f45 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f035.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f036.png b/sa1/graphics/obj_tiles/4bpp/a0492_f036.png new file mode 100644 index 0000000000..f8fb402b2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f036.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f037.png b/sa1/graphics/obj_tiles/4bpp/a0492_f037.png new file mode 100644 index 0000000000..0d36fe54c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f037.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f038.png b/sa1/graphics/obj_tiles/4bpp/a0492_f038.png new file mode 100644 index 0000000000..90c75a09d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f038.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0492_f039.png b/sa1/graphics/obj_tiles/4bpp/a0492_f039.png new file mode 100644 index 0000000000..7f0772cfaf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0492_f039.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0493_f000.png b/sa1/graphics/obj_tiles/4bpp/a0493_f000.png new file mode 100644 index 0000000000..e3e29baf0c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0493_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0494_f000.png b/sa1/graphics/obj_tiles/4bpp/a0494_f000.png new file mode 100644 index 0000000000..5a4b77b7c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0494_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0495_f000.png b/sa1/graphics/obj_tiles/4bpp/a0495_f000.png new file mode 100644 index 0000000000..9974610ae3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0495_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0496_f000.png b/sa1/graphics/obj_tiles/4bpp/a0496_f000.png new file mode 100644 index 0000000000..4c249202ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0496_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0496_f001.png b/sa1/graphics/obj_tiles/4bpp/a0496_f001.png new file mode 100644 index 0000000000..23f8c276fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0496_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0496_f002.png b/sa1/graphics/obj_tiles/4bpp/a0496_f002.png new file mode 100644 index 0000000000..a276c35847 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0496_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0496_f003.png b/sa1/graphics/obj_tiles/4bpp/a0496_f003.png new file mode 100644 index 0000000000..6b8ec032da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0496_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0496_f004.png b/sa1/graphics/obj_tiles/4bpp/a0496_f004.png new file mode 100644 index 0000000000..d840a24e16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0496_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0496_f005.png b/sa1/graphics/obj_tiles/4bpp/a0496_f005.png new file mode 100644 index 0000000000..fab626b50f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0496_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0497_f000.png b/sa1/graphics/obj_tiles/4bpp/a0497_f000.png new file mode 100644 index 0000000000..52808d5799 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0497_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0497_f001.png b/sa1/graphics/obj_tiles/4bpp/a0497_f001.png new file mode 100644 index 0000000000..09d71bbb37 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0497_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0497_f002.png b/sa1/graphics/obj_tiles/4bpp/a0497_f002.png new file mode 100644 index 0000000000..1973b6e786 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0497_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0497_f003.png b/sa1/graphics/obj_tiles/4bpp/a0497_f003.png new file mode 100644 index 0000000000..7e98200881 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0497_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0497_f004.png b/sa1/graphics/obj_tiles/4bpp/a0497_f004.png new file mode 100644 index 0000000000..563f9762b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0497_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0497_f005.png b/sa1/graphics/obj_tiles/4bpp/a0497_f005.png new file mode 100644 index 0000000000..dd720bc283 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0497_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0498_f000.png b/sa1/graphics/obj_tiles/4bpp/a0498_f000.png new file mode 100644 index 0000000000..4cf75bdba6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0498_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0498_f001.png b/sa1/graphics/obj_tiles/4bpp/a0498_f001.png new file mode 100644 index 0000000000..d51c25e243 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0498_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0498_f002.png b/sa1/graphics/obj_tiles/4bpp/a0498_f002.png new file mode 100644 index 0000000000..687227023e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0498_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0498_f003.png b/sa1/graphics/obj_tiles/4bpp/a0498_f003.png new file mode 100644 index 0000000000..735cb05261 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0498_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0499_f000.png b/sa1/graphics/obj_tiles/4bpp/a0499_f000.png new file mode 100644 index 0000000000..c39a7e22d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0499_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0501_f000.png b/sa1/graphics/obj_tiles/4bpp/a0501_f000.png new file mode 100644 index 0000000000..e98096c6c2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0501_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0501_f001.png b/sa1/graphics/obj_tiles/4bpp/a0501_f001.png new file mode 100644 index 0000000000..65f9f17e82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0501_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0501_f002.png b/sa1/graphics/obj_tiles/4bpp/a0501_f002.png new file mode 100644 index 0000000000..7bff6721fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0501_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0501_f003.png b/sa1/graphics/obj_tiles/4bpp/a0501_f003.png new file mode 100644 index 0000000000..18d3a8fcd7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0501_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0501_f004.png b/sa1/graphics/obj_tiles/4bpp/a0501_f004.png new file mode 100644 index 0000000000..97b1db3c5d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0501_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0501_f005.png b/sa1/graphics/obj_tiles/4bpp/a0501_f005.png new file mode 100644 index 0000000000..74abf032c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0501_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0501_f006.png b/sa1/graphics/obj_tiles/4bpp/a0501_f006.png new file mode 100644 index 0000000000..ce510727fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0501_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0502_f000.png b/sa1/graphics/obj_tiles/4bpp/a0502_f000.png new file mode 100644 index 0000000000..f6713b3053 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0502_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0503_f000.png b/sa1/graphics/obj_tiles/4bpp/a0503_f000.png new file mode 100644 index 0000000000..a90b1d033c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0503_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0503_f001.png b/sa1/graphics/obj_tiles/4bpp/a0503_f001.png new file mode 100644 index 0000000000..a923062581 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0503_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0503_f002.png b/sa1/graphics/obj_tiles/4bpp/a0503_f002.png new file mode 100644 index 0000000000..8e6542b66a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0503_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0504_f000.png b/sa1/graphics/obj_tiles/4bpp/a0504_f000.png new file mode 100644 index 0000000000..21f5393d7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0504_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0504_f001.png b/sa1/graphics/obj_tiles/4bpp/a0504_f001.png new file mode 100644 index 0000000000..ef39d398f7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0504_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0505_f000.png b/sa1/graphics/obj_tiles/4bpp/a0505_f000.png new file mode 100644 index 0000000000..50065f2095 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0505_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0505_f001.png b/sa1/graphics/obj_tiles/4bpp/a0505_f001.png new file mode 100644 index 0000000000..4640c00a31 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0505_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0505_f002.png b/sa1/graphics/obj_tiles/4bpp/a0505_f002.png new file mode 100644 index 0000000000..1922de791f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0505_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0505_f003.png b/sa1/graphics/obj_tiles/4bpp/a0505_f003.png new file mode 100644 index 0000000000..ed490f41f7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0505_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0505_f004.png b/sa1/graphics/obj_tiles/4bpp/a0505_f004.png new file mode 100644 index 0000000000..c2b2efa5a6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0505_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0505_f005.png b/sa1/graphics/obj_tiles/4bpp/a0505_f005.png new file mode 100644 index 0000000000..1b6a95fcd0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0505_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0505_f006.png b/sa1/graphics/obj_tiles/4bpp/a0505_f006.png new file mode 100644 index 0000000000..1dbfc99b36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0505_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0506_f000.png b/sa1/graphics/obj_tiles/4bpp/a0506_f000.png new file mode 100644 index 0000000000..cce6a7793f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0506_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0507_f000.png b/sa1/graphics/obj_tiles/4bpp/a0507_f000.png new file mode 100644 index 0000000000..ce2d87b69e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0507_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0508_f000.png b/sa1/graphics/obj_tiles/4bpp/a0508_f000.png new file mode 100644 index 0000000000..dd49f7d73a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0508_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0508_f001.png b/sa1/graphics/obj_tiles/4bpp/a0508_f001.png new file mode 100644 index 0000000000..6bb149a02c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0508_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0508_f002.png b/sa1/graphics/obj_tiles/4bpp/a0508_f002.png new file mode 100644 index 0000000000..edca8ce5cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0508_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0508_f003.png b/sa1/graphics/obj_tiles/4bpp/a0508_f003.png new file mode 100644 index 0000000000..1cf51cf221 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0508_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0509_f000.png b/sa1/graphics/obj_tiles/4bpp/a0509_f000.png new file mode 100644 index 0000000000..b3caa23cbd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0509_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0509_f001.png b/sa1/graphics/obj_tiles/4bpp/a0509_f001.png new file mode 100644 index 0000000000..fe085443cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0509_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0509_f002.png b/sa1/graphics/obj_tiles/4bpp/a0509_f002.png new file mode 100644 index 0000000000..03ab4ce487 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0509_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0509_f003.png b/sa1/graphics/obj_tiles/4bpp/a0509_f003.png new file mode 100644 index 0000000000..3331a2644a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0509_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0510_f000.png b/sa1/graphics/obj_tiles/4bpp/a0510_f000.png new file mode 100644 index 0000000000..56857b1118 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0510_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0511_f000.png b/sa1/graphics/obj_tiles/4bpp/a0511_f000.png new file mode 100644 index 0000000000..a9eb6e192e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0511_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0511_f001.png b/sa1/graphics/obj_tiles/4bpp/a0511_f001.png new file mode 100644 index 0000000000..32cb707d88 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0511_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0511_f002.png b/sa1/graphics/obj_tiles/4bpp/a0511_f002.png new file mode 100644 index 0000000000..84b37a220b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0511_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0512_f000.png b/sa1/graphics/obj_tiles/4bpp/a0512_f000.png new file mode 100644 index 0000000000..9861a3027b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0512_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0512_f001.png b/sa1/graphics/obj_tiles/4bpp/a0512_f001.png new file mode 100644 index 0000000000..c5b2a896fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0512_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0512_f002.png b/sa1/graphics/obj_tiles/4bpp/a0512_f002.png new file mode 100644 index 0000000000..31a9f509e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0512_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0513_f000.png b/sa1/graphics/obj_tiles/4bpp/a0513_f000.png new file mode 100644 index 0000000000..7324676b9e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0513_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0514_f000.png b/sa1/graphics/obj_tiles/4bpp/a0514_f000.png new file mode 100644 index 0000000000..07e64b9a3c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0514_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0514_f001.png b/sa1/graphics/obj_tiles/4bpp/a0514_f001.png new file mode 100644 index 0000000000..4bb627e7f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0514_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0515_f000.png b/sa1/graphics/obj_tiles/4bpp/a0515_f000.png new file mode 100644 index 0000000000..d103800ef4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0515_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0515_f001.png b/sa1/graphics/obj_tiles/4bpp/a0515_f001.png new file mode 100644 index 0000000000..45ecbb7514 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0515_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0515_f002.png b/sa1/graphics/obj_tiles/4bpp/a0515_f002.png new file mode 100644 index 0000000000..21287d74e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0515_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0515_f003.png b/sa1/graphics/obj_tiles/4bpp/a0515_f003.png new file mode 100644 index 0000000000..882f2b2760 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0515_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f000.png b/sa1/graphics/obj_tiles/4bpp/a0516_f000.png new file mode 100644 index 0000000000..4cdf48a70d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f001.png b/sa1/graphics/obj_tiles/4bpp/a0516_f001.png new file mode 100644 index 0000000000..6f121a3eec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f002.png b/sa1/graphics/obj_tiles/4bpp/a0516_f002.png new file mode 100644 index 0000000000..42dfa8a510 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f003.png b/sa1/graphics/obj_tiles/4bpp/a0516_f003.png new file mode 100644 index 0000000000..be6f1a59ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f004.png b/sa1/graphics/obj_tiles/4bpp/a0516_f004.png new file mode 100644 index 0000000000..94f2cc0797 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f005.png b/sa1/graphics/obj_tiles/4bpp/a0516_f005.png new file mode 100644 index 0000000000..f5bcadf296 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f006.png b/sa1/graphics/obj_tiles/4bpp/a0516_f006.png new file mode 100644 index 0000000000..9d3f51d2d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0516_f007.png b/sa1/graphics/obj_tiles/4bpp/a0516_f007.png new file mode 100644 index 0000000000..d56f595cf7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0516_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0517_f000.png b/sa1/graphics/obj_tiles/4bpp/a0517_f000.png new file mode 100644 index 0000000000..7dab1ba30d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0517_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0518_f000.png b/sa1/graphics/obj_tiles/4bpp/a0518_f000.png new file mode 100644 index 0000000000..01268a48fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0518_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0519_f000.png b/sa1/graphics/obj_tiles/4bpp/a0519_f000.png new file mode 100644 index 0000000000..86341e2beb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0519_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0520_f000.png b/sa1/graphics/obj_tiles/4bpp/a0520_f000.png new file mode 100644 index 0000000000..0095a5ae73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0520_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0521_f000.png b/sa1/graphics/obj_tiles/4bpp/a0521_f000.png new file mode 100644 index 0000000000..17492b30a6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0521_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0522_f000.png b/sa1/graphics/obj_tiles/4bpp/a0522_f000.png new file mode 100644 index 0000000000..0592fe81dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0522_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0522_f001.png b/sa1/graphics/obj_tiles/4bpp/a0522_f001.png new file mode 100644 index 0000000000..afd55d1e3b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0522_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0522_f002.png b/sa1/graphics/obj_tiles/4bpp/a0522_f002.png new file mode 100644 index 0000000000..c92d838e5f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0522_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0522_f003.png b/sa1/graphics/obj_tiles/4bpp/a0522_f003.png new file mode 100644 index 0000000000..773691cb56 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0522_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0523_f000.png b/sa1/graphics/obj_tiles/4bpp/a0523_f000.png new file mode 100644 index 0000000000..924b3e325b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0523_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0524_f000.png b/sa1/graphics/obj_tiles/4bpp/a0524_f000.png new file mode 100644 index 0000000000..4a0958cc19 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0524_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0525_f000.png b/sa1/graphics/obj_tiles/4bpp/a0525_f000.png new file mode 100644 index 0000000000..c2468b683f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0525_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0526_f000.png b/sa1/graphics/obj_tiles/4bpp/a0526_f000.png new file mode 100644 index 0000000000..8024a30991 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0526_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0526_f001.png b/sa1/graphics/obj_tiles/4bpp/a0526_f001.png new file mode 100644 index 0000000000..d5b796a9c7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0526_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0526_f002.png b/sa1/graphics/obj_tiles/4bpp/a0526_f002.png new file mode 100644 index 0000000000..86b00567d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0526_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0526_f003.png b/sa1/graphics/obj_tiles/4bpp/a0526_f003.png new file mode 100644 index 0000000000..1b205a2187 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0526_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0526_f004.png b/sa1/graphics/obj_tiles/4bpp/a0526_f004.png new file mode 100644 index 0000000000..0629f69e49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0526_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0527_f000.png b/sa1/graphics/obj_tiles/4bpp/a0527_f000.png new file mode 100644 index 0000000000..8cab26c659 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0527_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0528_f000.png b/sa1/graphics/obj_tiles/4bpp/a0528_f000.png new file mode 100644 index 0000000000..94024c8fec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0528_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0529_f000.png b/sa1/graphics/obj_tiles/4bpp/a0529_f000.png new file mode 100644 index 0000000000..2d71ea1c7a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0529_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0530_f000.png b/sa1/graphics/obj_tiles/4bpp/a0530_f000.png new file mode 100644 index 0000000000..be04540ff9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0530_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0531_f000.png b/sa1/graphics/obj_tiles/4bpp/a0531_f000.png new file mode 100644 index 0000000000..9dd6d0f3db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0531_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0532_f000.png b/sa1/graphics/obj_tiles/4bpp/a0532_f000.png new file mode 100644 index 0000000000..6498025f2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0532_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0532_f001.png b/sa1/graphics/obj_tiles/4bpp/a0532_f001.png new file mode 100644 index 0000000000..3885f119e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0532_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0532_f002.png b/sa1/graphics/obj_tiles/4bpp/a0532_f002.png new file mode 100644 index 0000000000..f2d765ec49 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0532_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0532_f003.png b/sa1/graphics/obj_tiles/4bpp/a0532_f003.png new file mode 100644 index 0000000000..737ccb6756 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0532_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0532_f004.png b/sa1/graphics/obj_tiles/4bpp/a0532_f004.png new file mode 100644 index 0000000000..8d569541da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0532_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0532_f005.png b/sa1/graphics/obj_tiles/4bpp/a0532_f005.png new file mode 100644 index 0000000000..e712fccdab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0532_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0532_f006.png b/sa1/graphics/obj_tiles/4bpp/a0532_f006.png new file mode 100644 index 0000000000..16d2f7212e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0532_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0533_f000.png b/sa1/graphics/obj_tiles/4bpp/a0533_f000.png new file mode 100644 index 0000000000..111d3e8e58 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0533_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0533_f001.png b/sa1/graphics/obj_tiles/4bpp/a0533_f001.png new file mode 100644 index 0000000000..e420f56215 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0533_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0534_f000.png b/sa1/graphics/obj_tiles/4bpp/a0534_f000.png new file mode 100644 index 0000000000..bde76fd521 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0534_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0535_f000.png b/sa1/graphics/obj_tiles/4bpp/a0535_f000.png new file mode 100644 index 0000000000..144820c933 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0535_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0536_f000.png b/sa1/graphics/obj_tiles/4bpp/a0536_f000.png new file mode 100644 index 0000000000..0ee8186625 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0536_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0537_f000.png b/sa1/graphics/obj_tiles/4bpp/a0537_f000.png new file mode 100644 index 0000000000..c62585c295 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0537_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0538_f000.png b/sa1/graphics/obj_tiles/4bpp/a0538_f000.png new file mode 100644 index 0000000000..a5f4461e2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0538_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0539_f000.png b/sa1/graphics/obj_tiles/4bpp/a0539_f000.png new file mode 100644 index 0000000000..1fbc39d7e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0539_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0540_f000.png b/sa1/graphics/obj_tiles/4bpp/a0540_f000.png new file mode 100644 index 0000000000..599cb1c232 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0540_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0540_f001.png b/sa1/graphics/obj_tiles/4bpp/a0540_f001.png new file mode 100644 index 0000000000..28b8b96d34 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0540_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0540_f002.png b/sa1/graphics/obj_tiles/4bpp/a0540_f002.png new file mode 100644 index 0000000000..12abe876b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0540_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0540_f003.png b/sa1/graphics/obj_tiles/4bpp/a0540_f003.png new file mode 100644 index 0000000000..d3e3b46288 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0540_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0540_f004.png b/sa1/graphics/obj_tiles/4bpp/a0540_f004.png new file mode 100644 index 0000000000..1ce442c2af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0540_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0541_f000.png b/sa1/graphics/obj_tiles/4bpp/a0541_f000.png new file mode 100644 index 0000000000..40e37b5793 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0541_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0542_f000.png b/sa1/graphics/obj_tiles/4bpp/a0542_f000.png new file mode 100644 index 0000000000..ada05e1451 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0542_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0542_f001.png b/sa1/graphics/obj_tiles/4bpp/a0542_f001.png new file mode 100644 index 0000000000..15e8b75f6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0542_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0542_f002.png b/sa1/graphics/obj_tiles/4bpp/a0542_f002.png new file mode 100644 index 0000000000..d1e31b4858 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0542_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0542_f003.png b/sa1/graphics/obj_tiles/4bpp/a0542_f003.png new file mode 100644 index 0000000000..911f2abbe5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0542_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0543_f000.png b/sa1/graphics/obj_tiles/4bpp/a0543_f000.png new file mode 100644 index 0000000000..9a4df5dfe3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0543_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0544_f000.png b/sa1/graphics/obj_tiles/4bpp/a0544_f000.png new file mode 100644 index 0000000000..6918c329bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0544_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0545_f000.png b/sa1/graphics/obj_tiles/4bpp/a0545_f000.png new file mode 100644 index 0000000000..3889220772 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0545_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0545_f001.png b/sa1/graphics/obj_tiles/4bpp/a0545_f001.png new file mode 100644 index 0000000000..3577868698 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0545_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0546_f000.png b/sa1/graphics/obj_tiles/4bpp/a0546_f000.png new file mode 100644 index 0000000000..6a01cd6099 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0546_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0546_f001.png b/sa1/graphics/obj_tiles/4bpp/a0546_f001.png new file mode 100644 index 0000000000..084dde5ab7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0546_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0547_f000.png b/sa1/graphics/obj_tiles/4bpp/a0547_f000.png new file mode 100644 index 0000000000..fb9d027f1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0547_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0548_f000.png b/sa1/graphics/obj_tiles/4bpp/a0548_f000.png new file mode 100644 index 0000000000..ad6aa930ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0548_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0549_f000.png b/sa1/graphics/obj_tiles/4bpp/a0549_f000.png new file mode 100644 index 0000000000..94c95e9847 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0549_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0550_f000.png b/sa1/graphics/obj_tiles/4bpp/a0550_f000.png new file mode 100644 index 0000000000..c62585c295 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0550_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0551_f000.png b/sa1/graphics/obj_tiles/4bpp/a0551_f000.png new file mode 100644 index 0000000000..58437d4dc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0551_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0552_f000.png b/sa1/graphics/obj_tiles/4bpp/a0552_f000.png new file mode 100644 index 0000000000..bf29deee01 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0552_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0552_f001.png b/sa1/graphics/obj_tiles/4bpp/a0552_f001.png new file mode 100644 index 0000000000..9a49ae371f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0552_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0552_f002.png b/sa1/graphics/obj_tiles/4bpp/a0552_f002.png new file mode 100644 index 0000000000..44705db7fc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0552_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0553_f000.png b/sa1/graphics/obj_tiles/4bpp/a0553_f000.png new file mode 100644 index 0000000000..3989cf6571 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0553_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0554_f000.png b/sa1/graphics/obj_tiles/4bpp/a0554_f000.png new file mode 100644 index 0000000000..f471d57f48 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0554_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0555_f000.png b/sa1/graphics/obj_tiles/4bpp/a0555_f000.png new file mode 100644 index 0000000000..d04b0614c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0555_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0556_f000.png b/sa1/graphics/obj_tiles/4bpp/a0556_f000.png new file mode 100644 index 0000000000..d76f7299eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0556_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0557_f000.png b/sa1/graphics/obj_tiles/4bpp/a0557_f000.png new file mode 100644 index 0000000000..fd06da70b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0557_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0558_f000.png b/sa1/graphics/obj_tiles/4bpp/a0558_f000.png new file mode 100644 index 0000000000..7ac834b3cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0558_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0558_f001.png b/sa1/graphics/obj_tiles/4bpp/a0558_f001.png new file mode 100644 index 0000000000..ca85fe7404 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0558_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0558_f002.png b/sa1/graphics/obj_tiles/4bpp/a0558_f002.png new file mode 100644 index 0000000000..f5d77cf107 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0558_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0558_f003.png b/sa1/graphics/obj_tiles/4bpp/a0558_f003.png new file mode 100644 index 0000000000..13314d2c39 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0558_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0559_f000.png b/sa1/graphics/obj_tiles/4bpp/a0559_f000.png new file mode 100644 index 0000000000..e9c20960a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0559_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0560_f000.png b/sa1/graphics/obj_tiles/4bpp/a0560_f000.png new file mode 100644 index 0000000000..faaf53a164 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0560_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0560_f001.png b/sa1/graphics/obj_tiles/4bpp/a0560_f001.png new file mode 100644 index 0000000000..966a3e8dd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0560_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0561_f000.png b/sa1/graphics/obj_tiles/4bpp/a0561_f000.png new file mode 100644 index 0000000000..c5b7a8a31e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0561_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0561_f001.png b/sa1/graphics/obj_tiles/4bpp/a0561_f001.png new file mode 100644 index 0000000000..ced2e6a33e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0561_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0561_f002.png b/sa1/graphics/obj_tiles/4bpp/a0561_f002.png new file mode 100644 index 0000000000..f286615cd1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0561_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0562_f000.png b/sa1/graphics/obj_tiles/4bpp/a0562_f000.png new file mode 100644 index 0000000000..513b0a5e14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0562_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0562_f001.png b/sa1/graphics/obj_tiles/4bpp/a0562_f001.png new file mode 100644 index 0000000000..2c7d1984d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0562_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0562_f002.png b/sa1/graphics/obj_tiles/4bpp/a0562_f002.png new file mode 100644 index 0000000000..8d067981e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0562_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0563_f000.png b/sa1/graphics/obj_tiles/4bpp/a0563_f000.png new file mode 100644 index 0000000000..ae0e88e893 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0563_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0563_f001.png b/sa1/graphics/obj_tiles/4bpp/a0563_f001.png new file mode 100644 index 0000000000..2faabc2539 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0563_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0563_f002.png b/sa1/graphics/obj_tiles/4bpp/a0563_f002.png new file mode 100644 index 0000000000..4ccb2ae380 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0563_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f000.png b/sa1/graphics/obj_tiles/4bpp/a0564_f000.png new file mode 100644 index 0000000000..6090b086de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f001.png b/sa1/graphics/obj_tiles/4bpp/a0564_f001.png new file mode 100644 index 0000000000..1689b78457 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f002.png b/sa1/graphics/obj_tiles/4bpp/a0564_f002.png new file mode 100644 index 0000000000..aca5742373 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f003.png b/sa1/graphics/obj_tiles/4bpp/a0564_f003.png new file mode 100644 index 0000000000..1eebaa9ab1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f004.png b/sa1/graphics/obj_tiles/4bpp/a0564_f004.png new file mode 100644 index 0000000000..4c227c2416 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f005.png b/sa1/graphics/obj_tiles/4bpp/a0564_f005.png new file mode 100644 index 0000000000..9705364c44 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f006.png b/sa1/graphics/obj_tiles/4bpp/a0564_f006.png new file mode 100644 index 0000000000..33c6d608da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0564_f007.png b/sa1/graphics/obj_tiles/4bpp/a0564_f007.png new file mode 100644 index 0000000000..b48051684a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0564_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f000.png b/sa1/graphics/obj_tiles/4bpp/a0565_f000.png new file mode 100644 index 0000000000..acd895adfe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f001.png b/sa1/graphics/obj_tiles/4bpp/a0565_f001.png new file mode 100644 index 0000000000..2ef09bd26f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f002.png b/sa1/graphics/obj_tiles/4bpp/a0565_f002.png new file mode 100644 index 0000000000..8e9d742492 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f003.png b/sa1/graphics/obj_tiles/4bpp/a0565_f003.png new file mode 100644 index 0000000000..f1d1681fb9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f004.png b/sa1/graphics/obj_tiles/4bpp/a0565_f004.png new file mode 100644 index 0000000000..b14d10bf79 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f005.png b/sa1/graphics/obj_tiles/4bpp/a0565_f005.png new file mode 100644 index 0000000000..7694db83ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f006.png b/sa1/graphics/obj_tiles/4bpp/a0565_f006.png new file mode 100644 index 0000000000..edb4e4cac4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0565_f007.png b/sa1/graphics/obj_tiles/4bpp/a0565_f007.png new file mode 100644 index 0000000000..8059921509 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0565_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f000.png b/sa1/graphics/obj_tiles/4bpp/a0566_f000.png new file mode 100644 index 0000000000..ac91ce8f20 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f001.png b/sa1/graphics/obj_tiles/4bpp/a0566_f001.png new file mode 100644 index 0000000000..8a4c786e93 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f002.png b/sa1/graphics/obj_tiles/4bpp/a0566_f002.png new file mode 100644 index 0000000000..5637e3e542 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f003.png b/sa1/graphics/obj_tiles/4bpp/a0566_f003.png new file mode 100644 index 0000000000..8fc3e24876 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f004.png b/sa1/graphics/obj_tiles/4bpp/a0566_f004.png new file mode 100644 index 0000000000..e224041554 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f005.png b/sa1/graphics/obj_tiles/4bpp/a0566_f005.png new file mode 100644 index 0000000000..6664d04594 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f006.png b/sa1/graphics/obj_tiles/4bpp/a0566_f006.png new file mode 100644 index 0000000000..b3638b2ed3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0566_f007.png b/sa1/graphics/obj_tiles/4bpp/a0566_f007.png new file mode 100644 index 0000000000..aadf81b964 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0566_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f000.png b/sa1/graphics/obj_tiles/4bpp/a0567_f000.png new file mode 100644 index 0000000000..5745589e22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f001.png b/sa1/graphics/obj_tiles/4bpp/a0567_f001.png new file mode 100644 index 0000000000..7d4e89e1be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f002.png b/sa1/graphics/obj_tiles/4bpp/a0567_f002.png new file mode 100644 index 0000000000..60e67eb0de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f003.png b/sa1/graphics/obj_tiles/4bpp/a0567_f003.png new file mode 100644 index 0000000000..89bd85fd63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f004.png b/sa1/graphics/obj_tiles/4bpp/a0567_f004.png new file mode 100644 index 0000000000..5832f1ade7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f005.png b/sa1/graphics/obj_tiles/4bpp/a0567_f005.png new file mode 100644 index 0000000000..6643b577ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f006.png b/sa1/graphics/obj_tiles/4bpp/a0567_f006.png new file mode 100644 index 0000000000..e0efa420aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f007.png b/sa1/graphics/obj_tiles/4bpp/a0567_f007.png new file mode 100644 index 0000000000..e68e00db0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f008.png b/sa1/graphics/obj_tiles/4bpp/a0567_f008.png new file mode 100644 index 0000000000..dbe8ae771f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0567_f009.png b/sa1/graphics/obj_tiles/4bpp/a0567_f009.png new file mode 100644 index 0000000000..a51bd2840c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0567_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0568_f000.png b/sa1/graphics/obj_tiles/4bpp/a0568_f000.png new file mode 100644 index 0000000000..e397400578 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0568_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0568_f001.png b/sa1/graphics/obj_tiles/4bpp/a0568_f001.png new file mode 100644 index 0000000000..b54f0ca98c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0568_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0568_f002.png b/sa1/graphics/obj_tiles/4bpp/a0568_f002.png new file mode 100644 index 0000000000..8a0e6bc4a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0568_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0569_f000.png b/sa1/graphics/obj_tiles/4bpp/a0569_f000.png new file mode 100644 index 0000000000..38ea16aa47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0569_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0570_f000.png b/sa1/graphics/obj_tiles/4bpp/a0570_f000.png new file mode 100644 index 0000000000..9f08148cad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0570_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0570_f001.png b/sa1/graphics/obj_tiles/4bpp/a0570_f001.png new file mode 100644 index 0000000000..44f803d7a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0570_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0570_f002.png b/sa1/graphics/obj_tiles/4bpp/a0570_f002.png new file mode 100644 index 0000000000..0e4235ce2e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0570_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0571_f000.png b/sa1/graphics/obj_tiles/4bpp/a0571_f000.png new file mode 100644 index 0000000000..4c855e331e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0571_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0571_f001.png b/sa1/graphics/obj_tiles/4bpp/a0571_f001.png new file mode 100644 index 0000000000..d4c54bc6a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0571_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0571_f002.png b/sa1/graphics/obj_tiles/4bpp/a0571_f002.png new file mode 100644 index 0000000000..dc7608f415 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0571_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0572_f000.png b/sa1/graphics/obj_tiles/4bpp/a0572_f000.png new file mode 100644 index 0000000000..1167ee4ff4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0572_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0572_f001.png b/sa1/graphics/obj_tiles/4bpp/a0572_f001.png new file mode 100644 index 0000000000..1cd3f42280 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0572_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0572_f002.png b/sa1/graphics/obj_tiles/4bpp/a0572_f002.png new file mode 100644 index 0000000000..d27db9e495 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0572_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0572_f003.png b/sa1/graphics/obj_tiles/4bpp/a0572_f003.png new file mode 100644 index 0000000000..a9c7d86ec3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0572_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0572_f004.png b/sa1/graphics/obj_tiles/4bpp/a0572_f004.png new file mode 100644 index 0000000000..e7193def69 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0572_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0573_f000.png b/sa1/graphics/obj_tiles/4bpp/a0573_f000.png new file mode 100644 index 0000000000..fab0e939b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0573_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0574_f000.png b/sa1/graphics/obj_tiles/4bpp/a0574_f000.png new file mode 100644 index 0000000000..bc7759a209 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0574_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0575_f000.png b/sa1/graphics/obj_tiles/4bpp/a0575_f000.png new file mode 100644 index 0000000000..a0e67f0c9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0575_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0575_f001.png b/sa1/graphics/obj_tiles/4bpp/a0575_f001.png new file mode 100644 index 0000000000..6a7525197f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0575_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0575_f002.png b/sa1/graphics/obj_tiles/4bpp/a0575_f002.png new file mode 100644 index 0000000000..52be22a0a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0575_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0576_f000.png b/sa1/graphics/obj_tiles/4bpp/a0576_f000.png new file mode 100644 index 0000000000..ede31eec66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0576_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0577_f000.png b/sa1/graphics/obj_tiles/4bpp/a0577_f000.png new file mode 100644 index 0000000000..74aba73623 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0577_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0578_f000.png b/sa1/graphics/obj_tiles/4bpp/a0578_f000.png new file mode 100644 index 0000000000..c3bc9a8afc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0578_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0579_f000.png b/sa1/graphics/obj_tiles/4bpp/a0579_f000.png new file mode 100644 index 0000000000..92917d90ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0579_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0580_f000.png b/sa1/graphics/obj_tiles/4bpp/a0580_f000.png new file mode 100644 index 0000000000..bec9a07805 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0580_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0581_f000.png b/sa1/graphics/obj_tiles/4bpp/a0581_f000.png new file mode 100644 index 0000000000..51b6aac0ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0581_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0581_f001.png b/sa1/graphics/obj_tiles/4bpp/a0581_f001.png new file mode 100644 index 0000000000..ad9b0437ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0581_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0581_f002.png b/sa1/graphics/obj_tiles/4bpp/a0581_f002.png new file mode 100644 index 0000000000..806903d7e5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0581_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0581_f003.png b/sa1/graphics/obj_tiles/4bpp/a0581_f003.png new file mode 100644 index 0000000000..457340e4a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0581_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0582_f000.png b/sa1/graphics/obj_tiles/4bpp/a0582_f000.png new file mode 100644 index 0000000000..a12c10f65e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0582_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0582_f001.png b/sa1/graphics/obj_tiles/4bpp/a0582_f001.png new file mode 100644 index 0000000000..9ec0cbe2c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0582_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0582_f002.png b/sa1/graphics/obj_tiles/4bpp/a0582_f002.png new file mode 100644 index 0000000000..ffb68c8db7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0582_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0582_f003.png b/sa1/graphics/obj_tiles/4bpp/a0582_f003.png new file mode 100644 index 0000000000..39dac880cb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0582_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0582_f004.png b/sa1/graphics/obj_tiles/4bpp/a0582_f004.png new file mode 100644 index 0000000000..096ccf189b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0582_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0583_f000.png b/sa1/graphics/obj_tiles/4bpp/a0583_f000.png new file mode 100644 index 0000000000..5502b03072 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0583_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0584_f000.png b/sa1/graphics/obj_tiles/4bpp/a0584_f000.png new file mode 100644 index 0000000000..9af498fd74 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0584_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0584_f001.png b/sa1/graphics/obj_tiles/4bpp/a0584_f001.png new file mode 100644 index 0000000000..ffffbc20d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0584_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0584_f002.png b/sa1/graphics/obj_tiles/4bpp/a0584_f002.png new file mode 100644 index 0000000000..ce9f2634f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0584_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0584_f003.png b/sa1/graphics/obj_tiles/4bpp/a0584_f003.png new file mode 100644 index 0000000000..9ec923bf6b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0584_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0585_f000.png b/sa1/graphics/obj_tiles/4bpp/a0585_f000.png new file mode 100644 index 0000000000..f26aa7514b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0585_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0585_f001.png b/sa1/graphics/obj_tiles/4bpp/a0585_f001.png new file mode 100644 index 0000000000..84765cddba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0585_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0585_f002.png b/sa1/graphics/obj_tiles/4bpp/a0585_f002.png new file mode 100644 index 0000000000..81edb24f00 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0585_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0585_f003.png b/sa1/graphics/obj_tiles/4bpp/a0585_f003.png new file mode 100644 index 0000000000..0dcdfcb965 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0585_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0586_f000.png b/sa1/graphics/obj_tiles/4bpp/a0586_f000.png new file mode 100644 index 0000000000..11550355e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0586_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0586_f001.png b/sa1/graphics/obj_tiles/4bpp/a0586_f001.png new file mode 100644 index 0000000000..70b90e2234 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0586_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0586_f002.png b/sa1/graphics/obj_tiles/4bpp/a0586_f002.png new file mode 100644 index 0000000000..b741deb062 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0586_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0586_f003.png b/sa1/graphics/obj_tiles/4bpp/a0586_f003.png new file mode 100644 index 0000000000..93cef85cbc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0586_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0587_f000.png b/sa1/graphics/obj_tiles/4bpp/a0587_f000.png new file mode 100644 index 0000000000..84ef7a4bd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0587_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0587_f001.png b/sa1/graphics/obj_tiles/4bpp/a0587_f001.png new file mode 100644 index 0000000000..f2f57b3dd5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0587_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0587_f002.png b/sa1/graphics/obj_tiles/4bpp/a0587_f002.png new file mode 100644 index 0000000000..0d368556d0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0587_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0587_f003.png b/sa1/graphics/obj_tiles/4bpp/a0587_f003.png new file mode 100644 index 0000000000..1dde8ff35e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0587_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0588_f000.png b/sa1/graphics/obj_tiles/4bpp/a0588_f000.png new file mode 100644 index 0000000000..fd7e87c79f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0588_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0588_f001.png b/sa1/graphics/obj_tiles/4bpp/a0588_f001.png new file mode 100644 index 0000000000..dd82334e16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0588_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0588_f002.png b/sa1/graphics/obj_tiles/4bpp/a0588_f002.png new file mode 100644 index 0000000000..8184d04024 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0588_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0588_f003.png b/sa1/graphics/obj_tiles/4bpp/a0588_f003.png new file mode 100644 index 0000000000..c93d50212e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0588_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0588_f004.png b/sa1/graphics/obj_tiles/4bpp/a0588_f004.png new file mode 100644 index 0000000000..2e864c1e31 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0588_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0588_f005.png b/sa1/graphics/obj_tiles/4bpp/a0588_f005.png new file mode 100644 index 0000000000..41a22cdb78 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0588_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0589_f000.png b/sa1/graphics/obj_tiles/4bpp/a0589_f000.png new file mode 100644 index 0000000000..798aebff29 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0589_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0589_f001.png b/sa1/graphics/obj_tiles/4bpp/a0589_f001.png new file mode 100644 index 0000000000..9abd7e24a6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0589_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0589_f002.png b/sa1/graphics/obj_tiles/4bpp/a0589_f002.png new file mode 100644 index 0000000000..74b377d8e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0589_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0589_f003.png b/sa1/graphics/obj_tiles/4bpp/a0589_f003.png new file mode 100644 index 0000000000..945e9b8048 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0589_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0589_f004.png b/sa1/graphics/obj_tiles/4bpp/a0589_f004.png new file mode 100644 index 0000000000..af59ef1443 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0589_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0589_f005.png b/sa1/graphics/obj_tiles/4bpp/a0589_f005.png new file mode 100644 index 0000000000..01f2ad477a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0589_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f000.png b/sa1/graphics/obj_tiles/4bpp/a0590_f000.png new file mode 100644 index 0000000000..e35ea86a2c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f001.png b/sa1/graphics/obj_tiles/4bpp/a0590_f001.png new file mode 100644 index 0000000000..f5bb930bdb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f002.png b/sa1/graphics/obj_tiles/4bpp/a0590_f002.png new file mode 100644 index 0000000000..5b840752e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f003.png b/sa1/graphics/obj_tiles/4bpp/a0590_f003.png new file mode 100644 index 0000000000..2cd2a796c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f004.png b/sa1/graphics/obj_tiles/4bpp/a0590_f004.png new file mode 100644 index 0000000000..ca9acef946 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f005.png b/sa1/graphics/obj_tiles/4bpp/a0590_f005.png new file mode 100644 index 0000000000..c42048ca99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f006.png b/sa1/graphics/obj_tiles/4bpp/a0590_f006.png new file mode 100644 index 0000000000..f1177445bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0590_f007.png b/sa1/graphics/obj_tiles/4bpp/a0590_f007.png new file mode 100644 index 0000000000..14968477a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0590_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f000.png b/sa1/graphics/obj_tiles/4bpp/a0591_f000.png new file mode 100644 index 0000000000..8476f6bf03 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f001.png b/sa1/graphics/obj_tiles/4bpp/a0591_f001.png new file mode 100644 index 0000000000..f8e56748d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f002.png b/sa1/graphics/obj_tiles/4bpp/a0591_f002.png new file mode 100644 index 0000000000..785e7c00ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f003.png b/sa1/graphics/obj_tiles/4bpp/a0591_f003.png new file mode 100644 index 0000000000..d91d513bdb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f004.png b/sa1/graphics/obj_tiles/4bpp/a0591_f004.png new file mode 100644 index 0000000000..ec65e77ae3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f005.png b/sa1/graphics/obj_tiles/4bpp/a0591_f005.png new file mode 100644 index 0000000000..a1a7c05026 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f006.png b/sa1/graphics/obj_tiles/4bpp/a0591_f006.png new file mode 100644 index 0000000000..0be1aa77fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0591_f007.png b/sa1/graphics/obj_tiles/4bpp/a0591_f007.png new file mode 100644 index 0000000000..e8c88a2fe6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0591_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0592_f000.png b/sa1/graphics/obj_tiles/4bpp/a0592_f000.png new file mode 100644 index 0000000000..9a1ffd7565 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0592_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0593_f000.png b/sa1/graphics/obj_tiles/4bpp/a0593_f000.png new file mode 100644 index 0000000000..27596ba48b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0593_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0593_f001.png b/sa1/graphics/obj_tiles/4bpp/a0593_f001.png new file mode 100644 index 0000000000..1685db2fe1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0593_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0593_f002.png b/sa1/graphics/obj_tiles/4bpp/a0593_f002.png new file mode 100644 index 0000000000..8741a43bd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0593_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0593_f003.png b/sa1/graphics/obj_tiles/4bpp/a0593_f003.png new file mode 100644 index 0000000000..85799627aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0593_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0594_f000.png b/sa1/graphics/obj_tiles/4bpp/a0594_f000.png new file mode 100644 index 0000000000..73c22d9c54 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0594_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0595_f000.png b/sa1/graphics/obj_tiles/4bpp/a0595_f000.png new file mode 100644 index 0000000000..15e22c8f2b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0595_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0596_f000.png b/sa1/graphics/obj_tiles/4bpp/a0596_f000.png new file mode 100644 index 0000000000..9814c7186f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0596_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0597_f000.png b/sa1/graphics/obj_tiles/4bpp/a0597_f000.png new file mode 100644 index 0000000000..16574cc1f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0597_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0597_f001.png b/sa1/graphics/obj_tiles/4bpp/a0597_f001.png new file mode 100644 index 0000000000..b100c241f7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0597_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0597_f002.png b/sa1/graphics/obj_tiles/4bpp/a0597_f002.png new file mode 100644 index 0000000000..fdb6baed13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0597_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0597_f003.png b/sa1/graphics/obj_tiles/4bpp/a0597_f003.png new file mode 100644 index 0000000000..ac445634a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0597_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0598_f000.png b/sa1/graphics/obj_tiles/4bpp/a0598_f000.png new file mode 100644 index 0000000000..351ecd6894 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0598_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0599_f000.png b/sa1/graphics/obj_tiles/4bpp/a0599_f000.png new file mode 100644 index 0000000000..1ac8099433 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0599_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0600_f000.png b/sa1/graphics/obj_tiles/4bpp/a0600_f000.png new file mode 100644 index 0000000000..3295fd88b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0600_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0601_f000.png b/sa1/graphics/obj_tiles/4bpp/a0601_f000.png new file mode 100644 index 0000000000..23ddf86b45 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0601_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0602_f000.png b/sa1/graphics/obj_tiles/4bpp/a0602_f000.png new file mode 100644 index 0000000000..a93915e54b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0602_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0603_f000.png b/sa1/graphics/obj_tiles/4bpp/a0603_f000.png new file mode 100644 index 0000000000..ca1f0c0e31 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0603_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0603_f001.png b/sa1/graphics/obj_tiles/4bpp/a0603_f001.png new file mode 100644 index 0000000000..117a3ec42a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0603_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0603_f002.png b/sa1/graphics/obj_tiles/4bpp/a0603_f002.png new file mode 100644 index 0000000000..476cd09bd2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0603_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0603_f003.png b/sa1/graphics/obj_tiles/4bpp/a0603_f003.png new file mode 100644 index 0000000000..0e10636e43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0603_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0604_f000.png b/sa1/graphics/obj_tiles/4bpp/a0604_f000.png new file mode 100644 index 0000000000..ae3e223224 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0604_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0604_f001.png b/sa1/graphics/obj_tiles/4bpp/a0604_f001.png new file mode 100644 index 0000000000..9a434bb529 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0604_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0604_f002.png b/sa1/graphics/obj_tiles/4bpp/a0604_f002.png new file mode 100644 index 0000000000..3122cdbae5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0604_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0604_f003.png b/sa1/graphics/obj_tiles/4bpp/a0604_f003.png new file mode 100644 index 0000000000..3c3709e8b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0604_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0605_f000.png b/sa1/graphics/obj_tiles/4bpp/a0605_f000.png new file mode 100644 index 0000000000..83beabd793 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0605_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0606_f000.png b/sa1/graphics/obj_tiles/4bpp/a0606_f000.png new file mode 100644 index 0000000000..4d2d6d49bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0606_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0607_f000.png b/sa1/graphics/obj_tiles/4bpp/a0607_f000.png new file mode 100644 index 0000000000..b1ebf74772 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0607_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0607_f001.png b/sa1/graphics/obj_tiles/4bpp/a0607_f001.png new file mode 100644 index 0000000000..c41184fc20 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0607_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0607_f002.png b/sa1/graphics/obj_tiles/4bpp/a0607_f002.png new file mode 100644 index 0000000000..9004020fc0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0607_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0608_f000.png b/sa1/graphics/obj_tiles/4bpp/a0608_f000.png new file mode 100644 index 0000000000..194c04d199 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0608_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0609_f000.png b/sa1/graphics/obj_tiles/4bpp/a0609_f000.png new file mode 100644 index 0000000000..3d5e0296fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0609_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0610_f000.png b/sa1/graphics/obj_tiles/4bpp/a0610_f000.png new file mode 100644 index 0000000000..683060b7b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0610_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0610_f001.png b/sa1/graphics/obj_tiles/4bpp/a0610_f001.png new file mode 100644 index 0000000000..3cb9bad901 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0610_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0610_f002.png b/sa1/graphics/obj_tiles/4bpp/a0610_f002.png new file mode 100644 index 0000000000..6eee0ca32a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0610_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0610_f003.png b/sa1/graphics/obj_tiles/4bpp/a0610_f003.png new file mode 100644 index 0000000000..6868c010e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0610_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0610_f004.png b/sa1/graphics/obj_tiles/4bpp/a0610_f004.png new file mode 100644 index 0000000000..df23ead2ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0610_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0611_f000.png b/sa1/graphics/obj_tiles/4bpp/a0611_f000.png new file mode 100644 index 0000000000..78b4d2ff1c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0611_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0611_f001.png b/sa1/graphics/obj_tiles/4bpp/a0611_f001.png new file mode 100644 index 0000000000..c2bce71576 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0611_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0611_f002.png b/sa1/graphics/obj_tiles/4bpp/a0611_f002.png new file mode 100644 index 0000000000..9f57d5e56c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0611_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0611_f003.png b/sa1/graphics/obj_tiles/4bpp/a0611_f003.png new file mode 100644 index 0000000000..2267a5c6e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0611_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0611_f004.png b/sa1/graphics/obj_tiles/4bpp/a0611_f004.png new file mode 100644 index 0000000000..9c671a939a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0611_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0612_f000.png b/sa1/graphics/obj_tiles/4bpp/a0612_f000.png new file mode 100644 index 0000000000..d903b6c978 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0612_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0613_f000.png b/sa1/graphics/obj_tiles/4bpp/a0613_f000.png new file mode 100644 index 0000000000..cb89a7284e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0613_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0614_f000.png b/sa1/graphics/obj_tiles/4bpp/a0614_f000.png new file mode 100644 index 0000000000..6a7f97539a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0614_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0615_f000.png b/sa1/graphics/obj_tiles/4bpp/a0615_f000.png new file mode 100644 index 0000000000..cfe3031cb9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0615_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0616_f000.png b/sa1/graphics/obj_tiles/4bpp/a0616_f000.png new file mode 100644 index 0000000000..e61a67d85e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0616_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0617_f000.png b/sa1/graphics/obj_tiles/4bpp/a0617_f000.png new file mode 100644 index 0000000000..81185c7f9b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0617_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0618_f000.png b/sa1/graphics/obj_tiles/4bpp/a0618_f000.png new file mode 100644 index 0000000000..8f9bb9429f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0618_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0618_f001.png b/sa1/graphics/obj_tiles/4bpp/a0618_f001.png new file mode 100644 index 0000000000..d25cb4e7c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0618_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0618_f002.png b/sa1/graphics/obj_tiles/4bpp/a0618_f002.png new file mode 100644 index 0000000000..6f8812d961 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0618_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0618_f003.png b/sa1/graphics/obj_tiles/4bpp/a0618_f003.png new file mode 100644 index 0000000000..f665ba3a9e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0618_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0618_f004.png b/sa1/graphics/obj_tiles/4bpp/a0618_f004.png new file mode 100644 index 0000000000..ff7151493f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0618_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0619_f000.png b/sa1/graphics/obj_tiles/4bpp/a0619_f000.png new file mode 100644 index 0000000000..58b24217fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0619_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0620_f000.png b/sa1/graphics/obj_tiles/4bpp/a0620_f000.png new file mode 100644 index 0000000000..385a605316 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0620_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0620_f001.png b/sa1/graphics/obj_tiles/4bpp/a0620_f001.png new file mode 100644 index 0000000000..ed6631582c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0620_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0620_f002.png b/sa1/graphics/obj_tiles/4bpp/a0620_f002.png new file mode 100644 index 0000000000..e183126064 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0620_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0620_f003.png b/sa1/graphics/obj_tiles/4bpp/a0620_f003.png new file mode 100644 index 0000000000..5b3119e354 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0620_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0620_f004.png b/sa1/graphics/obj_tiles/4bpp/a0620_f004.png new file mode 100644 index 0000000000..17b882aadd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0620_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0620_f005.png b/sa1/graphics/obj_tiles/4bpp/a0620_f005.png new file mode 100644 index 0000000000..cfbc4fc8ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0620_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0621_f000.png b/sa1/graphics/obj_tiles/4bpp/a0621_f000.png new file mode 100644 index 0000000000..2245f1f749 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0621_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0622_f000.png b/sa1/graphics/obj_tiles/4bpp/a0622_f000.png new file mode 100644 index 0000000000..d963de2d0e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0622_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0622_f001.png b/sa1/graphics/obj_tiles/4bpp/a0622_f001.png new file mode 100644 index 0000000000..f430e974fe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0622_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0622_f002.png b/sa1/graphics/obj_tiles/4bpp/a0622_f002.png new file mode 100644 index 0000000000..d902a16231 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0622_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0622_f003.png b/sa1/graphics/obj_tiles/4bpp/a0622_f003.png new file mode 100644 index 0000000000..6caf8cc438 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0622_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0622_f004.png b/sa1/graphics/obj_tiles/4bpp/a0622_f004.png new file mode 100644 index 0000000000..a1f475dca0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0622_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0623_f000.png b/sa1/graphics/obj_tiles/4bpp/a0623_f000.png new file mode 100644 index 0000000000..f3eb028c38 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0623_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0624_f000.png b/sa1/graphics/obj_tiles/4bpp/a0624_f000.png new file mode 100644 index 0000000000..cffe20fe6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0624_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0624_f001.png b/sa1/graphics/obj_tiles/4bpp/a0624_f001.png new file mode 100644 index 0000000000..069187a25c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0624_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0624_f002.png b/sa1/graphics/obj_tiles/4bpp/a0624_f002.png new file mode 100644 index 0000000000..b5291b81cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0624_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0624_f003.png b/sa1/graphics/obj_tiles/4bpp/a0624_f003.png new file mode 100644 index 0000000000..222176a2bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0624_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0625_f000.png b/sa1/graphics/obj_tiles/4bpp/a0625_f000.png new file mode 100644 index 0000000000..3f39e8c24e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0625_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0625_f001.png b/sa1/graphics/obj_tiles/4bpp/a0625_f001.png new file mode 100644 index 0000000000..0d68d8aac1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0625_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0626_f000.png b/sa1/graphics/obj_tiles/4bpp/a0626_f000.png new file mode 100644 index 0000000000..b0b86cfc69 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0626_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0627_f000.png b/sa1/graphics/obj_tiles/4bpp/a0627_f000.png new file mode 100644 index 0000000000..c3f25c35ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0627_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0627_f001.png b/sa1/graphics/obj_tiles/4bpp/a0627_f001.png new file mode 100644 index 0000000000..1ea3dcd62d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0627_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0628_f000.png b/sa1/graphics/obj_tiles/4bpp/a0628_f000.png new file mode 100644 index 0000000000..00647f04b2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0628_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0628_f001.png b/sa1/graphics/obj_tiles/4bpp/a0628_f001.png new file mode 100644 index 0000000000..7417bcbc68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0628_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0628_f002.png b/sa1/graphics/obj_tiles/4bpp/a0628_f002.png new file mode 100644 index 0000000000..c5c2615948 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0628_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0628_f003.png b/sa1/graphics/obj_tiles/4bpp/a0628_f003.png new file mode 100644 index 0000000000..ef965732f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0628_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0628_f004.png b/sa1/graphics/obj_tiles/4bpp/a0628_f004.png new file mode 100644 index 0000000000..96d6c35db2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0628_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0628_f005.png b/sa1/graphics/obj_tiles/4bpp/a0628_f005.png new file mode 100644 index 0000000000..dc0b8cfc36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0628_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0629_f000.png b/sa1/graphics/obj_tiles/4bpp/a0629_f000.png new file mode 100644 index 0000000000..a144071919 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0629_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0629_f001.png b/sa1/graphics/obj_tiles/4bpp/a0629_f001.png new file mode 100644 index 0000000000..4b75130523 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0629_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0629_f002.png b/sa1/graphics/obj_tiles/4bpp/a0629_f002.png new file mode 100644 index 0000000000..ffb98de837 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0629_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0629_f003.png b/sa1/graphics/obj_tiles/4bpp/a0629_f003.png new file mode 100644 index 0000000000..3643da8456 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0629_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0630_f000.png b/sa1/graphics/obj_tiles/4bpp/a0630_f000.png new file mode 100644 index 0000000000..4483218864 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0630_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f000.png b/sa1/graphics/obj_tiles/4bpp/a0631_f000.png new file mode 100644 index 0000000000..5cefc1836b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f001.png b/sa1/graphics/obj_tiles/4bpp/a0631_f001.png new file mode 100644 index 0000000000..1ae1ba0955 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f002.png b/sa1/graphics/obj_tiles/4bpp/a0631_f002.png new file mode 100644 index 0000000000..e0acc32022 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f003.png b/sa1/graphics/obj_tiles/4bpp/a0631_f003.png new file mode 100644 index 0000000000..703ec49fbb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f004.png b/sa1/graphics/obj_tiles/4bpp/a0631_f004.png new file mode 100644 index 0000000000..0372fd1e19 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f005.png b/sa1/graphics/obj_tiles/4bpp/a0631_f005.png new file mode 100644 index 0000000000..7af97f7f84 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f006.png b/sa1/graphics/obj_tiles/4bpp/a0631_f006.png new file mode 100644 index 0000000000..37a030f83d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0631_f007.png b/sa1/graphics/obj_tiles/4bpp/a0631_f007.png new file mode 100644 index 0000000000..f6c1fa559e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0631_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0632_f000.png b/sa1/graphics/obj_tiles/4bpp/a0632_f000.png new file mode 100644 index 0000000000..eb3a0008e3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0632_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0632_f001.png b/sa1/graphics/obj_tiles/4bpp/a0632_f001.png new file mode 100644 index 0000000000..51fb42c9a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0632_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0632_f002.png b/sa1/graphics/obj_tiles/4bpp/a0632_f002.png new file mode 100644 index 0000000000..2a79f0dc1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0632_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0632_f003.png b/sa1/graphics/obj_tiles/4bpp/a0632_f003.png new file mode 100644 index 0000000000..db37625e6f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0632_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0632_f004.png b/sa1/graphics/obj_tiles/4bpp/a0632_f004.png new file mode 100644 index 0000000000..934f25fa0d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0632_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0632_f005.png b/sa1/graphics/obj_tiles/4bpp/a0632_f005.png new file mode 100644 index 0000000000..2d0e55aa86 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0632_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0633_f000.png b/sa1/graphics/obj_tiles/4bpp/a0633_f000.png new file mode 100644 index 0000000000..fd72efc4ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0633_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0633_f001.png b/sa1/graphics/obj_tiles/4bpp/a0633_f001.png new file mode 100644 index 0000000000..dd70da9d42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0633_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0634_f000.png b/sa1/graphics/obj_tiles/4bpp/a0634_f000.png new file mode 100644 index 0000000000..3c6ca52e0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0634_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0634_f001.png b/sa1/graphics/obj_tiles/4bpp/a0634_f001.png new file mode 100644 index 0000000000..b744de25b4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0634_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0634_f002.png b/sa1/graphics/obj_tiles/4bpp/a0634_f002.png new file mode 100644 index 0000000000..6ab252bb84 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0634_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0634_f003.png b/sa1/graphics/obj_tiles/4bpp/a0634_f003.png new file mode 100644 index 0000000000..ad8e713b4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0634_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0634_f004.png b/sa1/graphics/obj_tiles/4bpp/a0634_f004.png new file mode 100644 index 0000000000..0c92db33e2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0634_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0635_f000.png b/sa1/graphics/obj_tiles/4bpp/a0635_f000.png new file mode 100644 index 0000000000..4024f60034 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0635_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0635_f001.png b/sa1/graphics/obj_tiles/4bpp/a0635_f001.png new file mode 100644 index 0000000000..8590168806 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0635_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0635_f002.png b/sa1/graphics/obj_tiles/4bpp/a0635_f002.png new file mode 100644 index 0000000000..6a054e3c31 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0635_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0635_f003.png b/sa1/graphics/obj_tiles/4bpp/a0635_f003.png new file mode 100644 index 0000000000..fd11a54671 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0635_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0635_f004.png b/sa1/graphics/obj_tiles/4bpp/a0635_f004.png new file mode 100644 index 0000000000..d707c85846 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0635_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0635_f005.png b/sa1/graphics/obj_tiles/4bpp/a0635_f005.png new file mode 100644 index 0000000000..17a0057301 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0635_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0636_f000.png b/sa1/graphics/obj_tiles/4bpp/a0636_f000.png new file mode 100644 index 0000000000..b1aa73e023 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0636_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0636_f001.png b/sa1/graphics/obj_tiles/4bpp/a0636_f001.png new file mode 100644 index 0000000000..c2926e178e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0636_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0636_f002.png b/sa1/graphics/obj_tiles/4bpp/a0636_f002.png new file mode 100644 index 0000000000..a4ab9e2f42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0636_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0636_f003.png b/sa1/graphics/obj_tiles/4bpp/a0636_f003.png new file mode 100644 index 0000000000..5028468d92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0636_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f000.png b/sa1/graphics/obj_tiles/4bpp/a0637_f000.png new file mode 100644 index 0000000000..0c122c69de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f001.png b/sa1/graphics/obj_tiles/4bpp/a0637_f001.png new file mode 100644 index 0000000000..b01e1345a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f002.png b/sa1/graphics/obj_tiles/4bpp/a0637_f002.png new file mode 100644 index 0000000000..c119a0840e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f003.png b/sa1/graphics/obj_tiles/4bpp/a0637_f003.png new file mode 100644 index 0000000000..9690682f71 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f004.png b/sa1/graphics/obj_tiles/4bpp/a0637_f004.png new file mode 100644 index 0000000000..76ea8ca842 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f005.png b/sa1/graphics/obj_tiles/4bpp/a0637_f005.png new file mode 100644 index 0000000000..2539d44f84 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f006.png b/sa1/graphics/obj_tiles/4bpp/a0637_f006.png new file mode 100644 index 0000000000..387cc898c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0637_f007.png b/sa1/graphics/obj_tiles/4bpp/a0637_f007.png new file mode 100644 index 0000000000..fba5574baf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0637_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0638_f000.png b/sa1/graphics/obj_tiles/4bpp/a0638_f000.png new file mode 100644 index 0000000000..6e79113dfb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0638_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0638_f001.png b/sa1/graphics/obj_tiles/4bpp/a0638_f001.png new file mode 100644 index 0000000000..b9011faf1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0638_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0639_f000.png b/sa1/graphics/obj_tiles/4bpp/a0639_f000.png new file mode 100644 index 0000000000..0e5809dfbd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0639_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0639_f001.png b/sa1/graphics/obj_tiles/4bpp/a0639_f001.png new file mode 100644 index 0000000000..1c1b446547 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0639_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0639_f002.png b/sa1/graphics/obj_tiles/4bpp/a0639_f002.png new file mode 100644 index 0000000000..8d3ee66f16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0639_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0639_f003.png b/sa1/graphics/obj_tiles/4bpp/a0639_f003.png new file mode 100644 index 0000000000..475eaf1b13 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0639_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f000.png b/sa1/graphics/obj_tiles/4bpp/a0640_f000.png new file mode 100644 index 0000000000..52bb1a09ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f001.png b/sa1/graphics/obj_tiles/4bpp/a0640_f001.png new file mode 100644 index 0000000000..865ad04972 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f002.png b/sa1/graphics/obj_tiles/4bpp/a0640_f002.png new file mode 100644 index 0000000000..da5ab344c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f003.png b/sa1/graphics/obj_tiles/4bpp/a0640_f003.png new file mode 100644 index 0000000000..937a6e3e92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f004.png b/sa1/graphics/obj_tiles/4bpp/a0640_f004.png new file mode 100644 index 0000000000..afbf93ccb0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f005.png b/sa1/graphics/obj_tiles/4bpp/a0640_f005.png new file mode 100644 index 0000000000..517d14dd59 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f006.png b/sa1/graphics/obj_tiles/4bpp/a0640_f006.png new file mode 100644 index 0000000000..1fc917037c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f007.png b/sa1/graphics/obj_tiles/4bpp/a0640_f007.png new file mode 100644 index 0000000000..dc05cf2ebe Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f008.png b/sa1/graphics/obj_tiles/4bpp/a0640_f008.png new file mode 100644 index 0000000000..0c1f8e5140 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f009.png b/sa1/graphics/obj_tiles/4bpp/a0640_f009.png new file mode 100644 index 0000000000..14654a105b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0640_f010.png b/sa1/graphics/obj_tiles/4bpp/a0640_f010.png new file mode 100644 index 0000000000..67f003b96c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0640_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0641_f000.png b/sa1/graphics/obj_tiles/4bpp/a0641_f000.png new file mode 100644 index 0000000000..e6c078bb5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0641_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0641_f001.png b/sa1/graphics/obj_tiles/4bpp/a0641_f001.png new file mode 100644 index 0000000000..be3d5f7f46 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0641_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0642_f000.png b/sa1/graphics/obj_tiles/4bpp/a0642_f000.png new file mode 100644 index 0000000000..e6b57a1cb8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0642_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0642_f001.png b/sa1/graphics/obj_tiles/4bpp/a0642_f001.png new file mode 100644 index 0000000000..77fc707491 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0642_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0642_f002.png b/sa1/graphics/obj_tiles/4bpp/a0642_f002.png new file mode 100644 index 0000000000..e0830eaa6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0642_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0642_f003.png b/sa1/graphics/obj_tiles/4bpp/a0642_f003.png new file mode 100644 index 0000000000..037d182c43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0642_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f000.png b/sa1/graphics/obj_tiles/4bpp/a0643_f000.png new file mode 100644 index 0000000000..a7e9f14d9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f001.png b/sa1/graphics/obj_tiles/4bpp/a0643_f001.png new file mode 100644 index 0000000000..c1d92ade16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f002.png b/sa1/graphics/obj_tiles/4bpp/a0643_f002.png new file mode 100644 index 0000000000..a6101bfd68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f003.png b/sa1/graphics/obj_tiles/4bpp/a0643_f003.png new file mode 100644 index 0000000000..18c83c8a6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f004.png b/sa1/graphics/obj_tiles/4bpp/a0643_f004.png new file mode 100644 index 0000000000..4a1bde5b14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f005.png b/sa1/graphics/obj_tiles/4bpp/a0643_f005.png new file mode 100644 index 0000000000..1fd99005ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f006.png b/sa1/graphics/obj_tiles/4bpp/a0643_f006.png new file mode 100644 index 0000000000..ab51d368da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0643_f007.png b/sa1/graphics/obj_tiles/4bpp/a0643_f007.png new file mode 100644 index 0000000000..569755da8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0643_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0644_f000.png b/sa1/graphics/obj_tiles/4bpp/a0644_f000.png new file mode 100644 index 0000000000..a479626cce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0644_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0644_f001.png b/sa1/graphics/obj_tiles/4bpp/a0644_f001.png new file mode 100644 index 0000000000..9cf49fef20 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0644_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0644_f002.png b/sa1/graphics/obj_tiles/4bpp/a0644_f002.png new file mode 100644 index 0000000000..4468df2ad2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0644_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0644_f003.png b/sa1/graphics/obj_tiles/4bpp/a0644_f003.png new file mode 100644 index 0000000000..750296f933 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0644_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0644_f004.png b/sa1/graphics/obj_tiles/4bpp/a0644_f004.png new file mode 100644 index 0000000000..cc99a05873 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0644_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0644_f005.png b/sa1/graphics/obj_tiles/4bpp/a0644_f005.png new file mode 100644 index 0000000000..d7bcad79a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0644_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0645_f000.png b/sa1/graphics/obj_tiles/4bpp/a0645_f000.png new file mode 100644 index 0000000000..5281e68a0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0645_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0645_f001.png b/sa1/graphics/obj_tiles/4bpp/a0645_f001.png new file mode 100644 index 0000000000..16485debb5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0645_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0646_f000.png b/sa1/graphics/obj_tiles/4bpp/a0646_f000.png new file mode 100644 index 0000000000..a99b35b89a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0646_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0646_f001.png b/sa1/graphics/obj_tiles/4bpp/a0646_f001.png new file mode 100644 index 0000000000..8ce5f1d1a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0646_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0646_f002.png b/sa1/graphics/obj_tiles/4bpp/a0646_f002.png new file mode 100644 index 0000000000..37f4d997ad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0646_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0646_f003.png b/sa1/graphics/obj_tiles/4bpp/a0646_f003.png new file mode 100644 index 0000000000..cded588742 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0646_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0646_f004.png b/sa1/graphics/obj_tiles/4bpp/a0646_f004.png new file mode 100644 index 0000000000..5275c9b06c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0646_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0647_f000.png b/sa1/graphics/obj_tiles/4bpp/a0647_f000.png new file mode 100644 index 0000000000..a65500f4ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0647_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0647_f001.png b/sa1/graphics/obj_tiles/4bpp/a0647_f001.png new file mode 100644 index 0000000000..becaa57605 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0647_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0647_f002.png b/sa1/graphics/obj_tiles/4bpp/a0647_f002.png new file mode 100644 index 0000000000..a945d60bbd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0647_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0647_f003.png b/sa1/graphics/obj_tiles/4bpp/a0647_f003.png new file mode 100644 index 0000000000..6135b9e1e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0647_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0647_f004.png b/sa1/graphics/obj_tiles/4bpp/a0647_f004.png new file mode 100644 index 0000000000..8dfc2f1f0f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0647_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0647_f005.png b/sa1/graphics/obj_tiles/4bpp/a0647_f005.png new file mode 100644 index 0000000000..eb249daca4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0647_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0648_f000.png b/sa1/graphics/obj_tiles/4bpp/a0648_f000.png new file mode 100644 index 0000000000..6d476091bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0648_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0648_f001.png b/sa1/graphics/obj_tiles/4bpp/a0648_f001.png new file mode 100644 index 0000000000..c30c7bf8bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0648_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0648_f002.png b/sa1/graphics/obj_tiles/4bpp/a0648_f002.png new file mode 100644 index 0000000000..9c9f361336 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0648_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0648_f003.png b/sa1/graphics/obj_tiles/4bpp/a0648_f003.png new file mode 100644 index 0000000000..9d72a90dc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0648_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f000.png b/sa1/graphics/obj_tiles/4bpp/a0649_f000.png new file mode 100644 index 0000000000..c19e8d74e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f001.png b/sa1/graphics/obj_tiles/4bpp/a0649_f001.png new file mode 100644 index 0000000000..5031664c7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f002.png b/sa1/graphics/obj_tiles/4bpp/a0649_f002.png new file mode 100644 index 0000000000..3887697107 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f003.png b/sa1/graphics/obj_tiles/4bpp/a0649_f003.png new file mode 100644 index 0000000000..0ffffec5e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f004.png b/sa1/graphics/obj_tiles/4bpp/a0649_f004.png new file mode 100644 index 0000000000..36be34da7d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f005.png b/sa1/graphics/obj_tiles/4bpp/a0649_f005.png new file mode 100644 index 0000000000..818bb6b80c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f006.png b/sa1/graphics/obj_tiles/4bpp/a0649_f006.png new file mode 100644 index 0000000000..3f76f1e8f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0649_f007.png b/sa1/graphics/obj_tiles/4bpp/a0649_f007.png new file mode 100644 index 0000000000..cc5d116270 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0649_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0650_f000.png b/sa1/graphics/obj_tiles/4bpp/a0650_f000.png new file mode 100644 index 0000000000..f224ef369a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0650_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0650_f001.png b/sa1/graphics/obj_tiles/4bpp/a0650_f001.png new file mode 100644 index 0000000000..7846606589 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0650_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0651_f000.png b/sa1/graphics/obj_tiles/4bpp/a0651_f000.png new file mode 100644 index 0000000000..b6e4072ac1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0651_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0651_f001.png b/sa1/graphics/obj_tiles/4bpp/a0651_f001.png new file mode 100644 index 0000000000..7e7d1cabd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0651_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0651_f002.png b/sa1/graphics/obj_tiles/4bpp/a0651_f002.png new file mode 100644 index 0000000000..7717e5d770 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0651_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0651_f003.png b/sa1/graphics/obj_tiles/4bpp/a0651_f003.png new file mode 100644 index 0000000000..3b30871646 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0651_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f000.png b/sa1/graphics/obj_tiles/4bpp/a0652_f000.png new file mode 100644 index 0000000000..fa2ea1d017 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f001.png b/sa1/graphics/obj_tiles/4bpp/a0652_f001.png new file mode 100644 index 0000000000..636a51174d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f002.png b/sa1/graphics/obj_tiles/4bpp/a0652_f002.png new file mode 100644 index 0000000000..a3fc8f3025 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f003.png b/sa1/graphics/obj_tiles/4bpp/a0652_f003.png new file mode 100644 index 0000000000..fef09d2c7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f004.png b/sa1/graphics/obj_tiles/4bpp/a0652_f004.png new file mode 100644 index 0000000000..402826dfe8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f005.png b/sa1/graphics/obj_tiles/4bpp/a0652_f005.png new file mode 100644 index 0000000000..37c0408056 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f006.png b/sa1/graphics/obj_tiles/4bpp/a0652_f006.png new file mode 100644 index 0000000000..2b6dde15d3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f007.png b/sa1/graphics/obj_tiles/4bpp/a0652_f007.png new file mode 100644 index 0000000000..1d32f4f7e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f008.png b/sa1/graphics/obj_tiles/4bpp/a0652_f008.png new file mode 100644 index 0000000000..6318929904 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f009.png b/sa1/graphics/obj_tiles/4bpp/a0652_f009.png new file mode 100644 index 0000000000..ac035f6910 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0652_f010.png b/sa1/graphics/obj_tiles/4bpp/a0652_f010.png new file mode 100644 index 0000000000..3a97dea904 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0652_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0653_f000.png b/sa1/graphics/obj_tiles/4bpp/a0653_f000.png new file mode 100644 index 0000000000..a554a337d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0653_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0653_f001.png b/sa1/graphics/obj_tiles/4bpp/a0653_f001.png new file mode 100644 index 0000000000..7ff3c0b204 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0653_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0654_f000.png b/sa1/graphics/obj_tiles/4bpp/a0654_f000.png new file mode 100644 index 0000000000..cb971a5bd3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0654_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0654_f001.png b/sa1/graphics/obj_tiles/4bpp/a0654_f001.png new file mode 100644 index 0000000000..a82d7b9219 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0654_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0654_f002.png b/sa1/graphics/obj_tiles/4bpp/a0654_f002.png new file mode 100644 index 0000000000..c114e3c3d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0654_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0654_f003.png b/sa1/graphics/obj_tiles/4bpp/a0654_f003.png new file mode 100644 index 0000000000..8558c15908 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0654_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f000.png b/sa1/graphics/obj_tiles/4bpp/a0655_f000.png new file mode 100644 index 0000000000..b8ee2e37fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f001.png b/sa1/graphics/obj_tiles/4bpp/a0655_f001.png new file mode 100644 index 0000000000..97beb6eb9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f002.png b/sa1/graphics/obj_tiles/4bpp/a0655_f002.png new file mode 100644 index 0000000000..c2d1cfb238 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f003.png b/sa1/graphics/obj_tiles/4bpp/a0655_f003.png new file mode 100644 index 0000000000..5795370282 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f004.png b/sa1/graphics/obj_tiles/4bpp/a0655_f004.png new file mode 100644 index 0000000000..c5334c4741 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f005.png b/sa1/graphics/obj_tiles/4bpp/a0655_f005.png new file mode 100644 index 0000000000..7ff4238e63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f006.png b/sa1/graphics/obj_tiles/4bpp/a0655_f006.png new file mode 100644 index 0000000000..d5ed0dd51a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0655_f007.png b/sa1/graphics/obj_tiles/4bpp/a0655_f007.png new file mode 100644 index 0000000000..c896972ddf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0655_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0656_f000.png b/sa1/graphics/obj_tiles/4bpp/a0656_f000.png new file mode 100644 index 0000000000..bef24e12d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0656_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0656_f001.png b/sa1/graphics/obj_tiles/4bpp/a0656_f001.png new file mode 100644 index 0000000000..d5f56c8404 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0656_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0657_f000.png b/sa1/graphics/obj_tiles/4bpp/a0657_f000.png new file mode 100644 index 0000000000..6677be86fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0657_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0657_f001.png b/sa1/graphics/obj_tiles/4bpp/a0657_f001.png new file mode 100644 index 0000000000..474e353065 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0657_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0657_f002.png b/sa1/graphics/obj_tiles/4bpp/a0657_f002.png new file mode 100644 index 0000000000..dbb7d58e7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0657_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0657_f003.png b/sa1/graphics/obj_tiles/4bpp/a0657_f003.png new file mode 100644 index 0000000000..ee87bf1e7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0657_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0657_f004.png b/sa1/graphics/obj_tiles/4bpp/a0657_f004.png new file mode 100644 index 0000000000..cf0d8ac8d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0657_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0657_f005.png b/sa1/graphics/obj_tiles/4bpp/a0657_f005.png new file mode 100644 index 0000000000..1d18ed6ff7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0657_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0658_f000.png b/sa1/graphics/obj_tiles/4bpp/a0658_f000.png new file mode 100644 index 0000000000..bfdb094ac7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0658_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0658_f001.png b/sa1/graphics/obj_tiles/4bpp/a0658_f001.png new file mode 100644 index 0000000000..ac3be9ddb2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0658_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0658_f002.png b/sa1/graphics/obj_tiles/4bpp/a0658_f002.png new file mode 100644 index 0000000000..3d1f43c013 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0658_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0658_f003.png b/sa1/graphics/obj_tiles/4bpp/a0658_f003.png new file mode 100644 index 0000000000..d4357a4275 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0658_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0658_f004.png b/sa1/graphics/obj_tiles/4bpp/a0658_f004.png new file mode 100644 index 0000000000..f55f2824f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0658_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0658_f005.png b/sa1/graphics/obj_tiles/4bpp/a0658_f005.png new file mode 100644 index 0000000000..afcca6701f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0658_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0659_f000.png b/sa1/graphics/obj_tiles/4bpp/a0659_f000.png new file mode 100644 index 0000000000..de40743718 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0659_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f000.png b/sa1/graphics/obj_tiles/4bpp/a0660_f000.png new file mode 100644 index 0000000000..b3275bb46a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f001.png b/sa1/graphics/obj_tiles/4bpp/a0660_f001.png new file mode 100644 index 0000000000..81421ffb6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f002.png b/sa1/graphics/obj_tiles/4bpp/a0660_f002.png new file mode 100644 index 0000000000..7d54ba1931 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f003.png b/sa1/graphics/obj_tiles/4bpp/a0660_f003.png new file mode 100644 index 0000000000..98a336f313 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f004.png b/sa1/graphics/obj_tiles/4bpp/a0660_f004.png new file mode 100644 index 0000000000..383db0b549 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f005.png b/sa1/graphics/obj_tiles/4bpp/a0660_f005.png new file mode 100644 index 0000000000..b3275bb46a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f006.png b/sa1/graphics/obj_tiles/4bpp/a0660_f006.png new file mode 100644 index 0000000000..81421ffb6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f007.png b/sa1/graphics/obj_tiles/4bpp/a0660_f007.png new file mode 100644 index 0000000000..7d54ba1931 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f008.png b/sa1/graphics/obj_tiles/4bpp/a0660_f008.png new file mode 100644 index 0000000000..98a336f313 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0660_f009.png b/sa1/graphics/obj_tiles/4bpp/a0660_f009.png new file mode 100644 index 0000000000..383db0b549 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0660_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0661_f000.png b/sa1/graphics/obj_tiles/4bpp/a0661_f000.png new file mode 100644 index 0000000000..7d1629cec7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0661_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0662_f000.png b/sa1/graphics/obj_tiles/4bpp/a0662_f000.png new file mode 100644 index 0000000000..a57fe29bd3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0662_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0662_f002.png b/sa1/graphics/obj_tiles/4bpp/a0662_f002.png new file mode 100644 index 0000000000..e53c7018ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0662_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0662_f004.png b/sa1/graphics/obj_tiles/4bpp/a0662_f004.png new file mode 100644 index 0000000000..59ec34c4a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0662_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0663_f000.png b/sa1/graphics/obj_tiles/4bpp/a0663_f000.png new file mode 100644 index 0000000000..af6edffabd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0663_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0663_f001.png b/sa1/graphics/obj_tiles/4bpp/a0663_f001.png new file mode 100644 index 0000000000..69c917c457 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0663_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0664_f000.png b/sa1/graphics/obj_tiles/4bpp/a0664_f000.png new file mode 100644 index 0000000000..d4c2b6358a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0664_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0664_f001.png b/sa1/graphics/obj_tiles/4bpp/a0664_f001.png new file mode 100644 index 0000000000..4375ad08dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0664_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0665_f000.png b/sa1/graphics/obj_tiles/4bpp/a0665_f000.png new file mode 100644 index 0000000000..c98595fc92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0665_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0665_f001.png b/sa1/graphics/obj_tiles/4bpp/a0665_f001.png new file mode 100644 index 0000000000..3b0269ecb2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0665_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0667_f000.png b/sa1/graphics/obj_tiles/4bpp/a0667_f000.png new file mode 100644 index 0000000000..644f6ddcac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0667_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0667_f001.png b/sa1/graphics/obj_tiles/4bpp/a0667_f001.png new file mode 100644 index 0000000000..4b816d9a88 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0667_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0667_f002.png b/sa1/graphics/obj_tiles/4bpp/a0667_f002.png new file mode 100644 index 0000000000..cbda8956ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0667_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0667_f003.png b/sa1/graphics/obj_tiles/4bpp/a0667_f003.png new file mode 100644 index 0000000000..9f85d8fc97 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0667_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0667_f004.png b/sa1/graphics/obj_tiles/4bpp/a0667_f004.png new file mode 100644 index 0000000000..968a476391 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0667_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0668_f000.png b/sa1/graphics/obj_tiles/4bpp/a0668_f000.png new file mode 100644 index 0000000000..1979951e52 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0668_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0668_f001.png b/sa1/graphics/obj_tiles/4bpp/a0668_f001.png new file mode 100644 index 0000000000..701b933007 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0668_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0668_f002.png b/sa1/graphics/obj_tiles/4bpp/a0668_f002.png new file mode 100644 index 0000000000..4ef8cdcce2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0668_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0668_f003.png b/sa1/graphics/obj_tiles/4bpp/a0668_f003.png new file mode 100644 index 0000000000..ffe550b4c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0668_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0669_f000.png b/sa1/graphics/obj_tiles/4bpp/a0669_f000.png new file mode 100644 index 0000000000..c193704ea5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0669_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f000.png b/sa1/graphics/obj_tiles/4bpp/a0670_f000.png new file mode 100644 index 0000000000..2f911b108c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f001.png b/sa1/graphics/obj_tiles/4bpp/a0670_f001.png new file mode 100644 index 0000000000..62ad71c1cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f002.png b/sa1/graphics/obj_tiles/4bpp/a0670_f002.png new file mode 100644 index 0000000000..e531a5c652 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f003.png b/sa1/graphics/obj_tiles/4bpp/a0670_f003.png new file mode 100644 index 0000000000..5eb59bcb6e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f004.png b/sa1/graphics/obj_tiles/4bpp/a0670_f004.png new file mode 100644 index 0000000000..592ce1b673 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f005.png b/sa1/graphics/obj_tiles/4bpp/a0670_f005.png new file mode 100644 index 0000000000..c47b779563 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f006.png b/sa1/graphics/obj_tiles/4bpp/a0670_f006.png new file mode 100644 index 0000000000..d6a03bfc20 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0670_f007.png b/sa1/graphics/obj_tiles/4bpp/a0670_f007.png new file mode 100644 index 0000000000..417c7e015e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0670_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0671_f000.png b/sa1/graphics/obj_tiles/4bpp/a0671_f000.png new file mode 100644 index 0000000000..32f35c6277 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0671_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0672_f000.png b/sa1/graphics/obj_tiles/4bpp/a0672_f000.png new file mode 100644 index 0000000000..44dc92a218 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0672_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0672_f001.png b/sa1/graphics/obj_tiles/4bpp/a0672_f001.png new file mode 100644 index 0000000000..796803094d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0672_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0672_f002.png b/sa1/graphics/obj_tiles/4bpp/a0672_f002.png new file mode 100644 index 0000000000..3dfb47fbe6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0672_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0672_f003.png b/sa1/graphics/obj_tiles/4bpp/a0672_f003.png new file mode 100644 index 0000000000..1dc82b64b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0672_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0672_f004.png b/sa1/graphics/obj_tiles/4bpp/a0672_f004.png new file mode 100644 index 0000000000..ba815c31cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0672_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0673_f000.png b/sa1/graphics/obj_tiles/4bpp/a0673_f000.png new file mode 100644 index 0000000000..1b7d74d010 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0673_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0673_f001.png b/sa1/graphics/obj_tiles/4bpp/a0673_f001.png new file mode 100644 index 0000000000..e6aa028d81 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0673_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0674_f000.png b/sa1/graphics/obj_tiles/4bpp/a0674_f000.png new file mode 100644 index 0000000000..7431790e85 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0674_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0675_f000.png b/sa1/graphics/obj_tiles/4bpp/a0675_f000.png new file mode 100644 index 0000000000..e62b7cbbbf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0675_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0675_f001.png b/sa1/graphics/obj_tiles/4bpp/a0675_f001.png new file mode 100644 index 0000000000..481b0271eb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0675_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0676_f000.png b/sa1/graphics/obj_tiles/4bpp/a0676_f000.png new file mode 100644 index 0000000000..ab7670ab48 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0676_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0677_f000.png b/sa1/graphics/obj_tiles/4bpp/a0677_f000.png new file mode 100644 index 0000000000..2530612ccc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0677_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0678_f000.png b/sa1/graphics/obj_tiles/4bpp/a0678_f000.png new file mode 100644 index 0000000000..6989822f1a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0678_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0679_f000.png b/sa1/graphics/obj_tiles/4bpp/a0679_f000.png new file mode 100644 index 0000000000..70c08c0b99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0679_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0679_f001.png b/sa1/graphics/obj_tiles/4bpp/a0679_f001.png new file mode 100644 index 0000000000..3bb3d14b92 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0679_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0680_f000.png b/sa1/graphics/obj_tiles/4bpp/a0680_f000.png new file mode 100644 index 0000000000..a57ad243be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0680_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0680_f001.png b/sa1/graphics/obj_tiles/4bpp/a0680_f001.png new file mode 100644 index 0000000000..76def1d58a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0680_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0680_f002.png b/sa1/graphics/obj_tiles/4bpp/a0680_f002.png new file mode 100644 index 0000000000..7ad1702075 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0680_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0680_f003.png b/sa1/graphics/obj_tiles/4bpp/a0680_f003.png new file mode 100644 index 0000000000..0f197b70db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0680_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0680_f004.png b/sa1/graphics/obj_tiles/4bpp/a0680_f004.png new file mode 100644 index 0000000000..d8b1ed727d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0680_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f000.png b/sa1/graphics/obj_tiles/4bpp/a0681_f000.png new file mode 100644 index 0000000000..367e704720 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f001.png b/sa1/graphics/obj_tiles/4bpp/a0681_f001.png new file mode 100644 index 0000000000..cb3508433d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f002.png b/sa1/graphics/obj_tiles/4bpp/a0681_f002.png new file mode 100644 index 0000000000..9f18fa9b8a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f003.png b/sa1/graphics/obj_tiles/4bpp/a0681_f003.png new file mode 100644 index 0000000000..9daaeed848 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f004.png b/sa1/graphics/obj_tiles/4bpp/a0681_f004.png new file mode 100644 index 0000000000..367e704720 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f005.png b/sa1/graphics/obj_tiles/4bpp/a0681_f005.png new file mode 100644 index 0000000000..cb3508433d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f006.png b/sa1/graphics/obj_tiles/4bpp/a0681_f006.png new file mode 100644 index 0000000000..9f18fa9b8a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0681_f007.png b/sa1/graphics/obj_tiles/4bpp/a0681_f007.png new file mode 100644 index 0000000000..9daaeed848 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0681_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0682_f000.png b/sa1/graphics/obj_tiles/4bpp/a0682_f000.png new file mode 100644 index 0000000000..8b9722a52b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0682_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0683_f000.png b/sa1/graphics/obj_tiles/4bpp/a0683_f000.png new file mode 100644 index 0000000000..92a940418f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0683_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0683_f001.png b/sa1/graphics/obj_tiles/4bpp/a0683_f001.png new file mode 100644 index 0000000000..85cdbfbd85 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0683_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0683_f002.png b/sa1/graphics/obj_tiles/4bpp/a0683_f002.png new file mode 100644 index 0000000000..490c245a14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0683_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0683_f003.png b/sa1/graphics/obj_tiles/4bpp/a0683_f003.png new file mode 100644 index 0000000000..f587400946 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0683_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0683_f004.png b/sa1/graphics/obj_tiles/4bpp/a0683_f004.png new file mode 100644 index 0000000000..f4467f51fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0683_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0684_f000.png b/sa1/graphics/obj_tiles/4bpp/a0684_f000.png new file mode 100644 index 0000000000..ec4780fa38 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0684_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0685_f000.png b/sa1/graphics/obj_tiles/4bpp/a0685_f000.png new file mode 100644 index 0000000000..e07d073bd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0685_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0685_f001.png b/sa1/graphics/obj_tiles/4bpp/a0685_f001.png new file mode 100644 index 0000000000..9a25f8ced3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0685_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0686_f000.png b/sa1/graphics/obj_tiles/4bpp/a0686_f000.png new file mode 100644 index 0000000000..a57ad243be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0686_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0686_f001.png b/sa1/graphics/obj_tiles/4bpp/a0686_f001.png new file mode 100644 index 0000000000..76def1d58a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0686_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0686_f002.png b/sa1/graphics/obj_tiles/4bpp/a0686_f002.png new file mode 100644 index 0000000000..7ad1702075 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0686_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0686_f003.png b/sa1/graphics/obj_tiles/4bpp/a0686_f003.png new file mode 100644 index 0000000000..0f197b70db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0686_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0686_f004.png b/sa1/graphics/obj_tiles/4bpp/a0686_f004.png new file mode 100644 index 0000000000..d8b1ed727d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0686_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0687_f000.png b/sa1/graphics/obj_tiles/4bpp/a0687_f000.png new file mode 100644 index 0000000000..2ddc1aaae9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0687_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0687_f001.png b/sa1/graphics/obj_tiles/4bpp/a0687_f001.png new file mode 100644 index 0000000000..5b9ca84403 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0687_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f000.png b/sa1/graphics/obj_tiles/4bpp/a0688_f000.png new file mode 100644 index 0000000000..841d1661c5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f001.png b/sa1/graphics/obj_tiles/4bpp/a0688_f001.png new file mode 100644 index 0000000000..c30a025848 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f002.png b/sa1/graphics/obj_tiles/4bpp/a0688_f002.png new file mode 100644 index 0000000000..dcf220a214 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f003.png b/sa1/graphics/obj_tiles/4bpp/a0688_f003.png new file mode 100644 index 0000000000..6fbd326f8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f004.png b/sa1/graphics/obj_tiles/4bpp/a0688_f004.png new file mode 100644 index 0000000000..2fbd129777 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f005.png b/sa1/graphics/obj_tiles/4bpp/a0688_f005.png new file mode 100644 index 0000000000..a40daf1954 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f006.png b/sa1/graphics/obj_tiles/4bpp/a0688_f006.png new file mode 100644 index 0000000000..ac17ab2ae1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f007.png b/sa1/graphics/obj_tiles/4bpp/a0688_f007.png new file mode 100644 index 0000000000..9391887756 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f008.png b/sa1/graphics/obj_tiles/4bpp/a0688_f008.png new file mode 100644 index 0000000000..0b5c041fe8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f009.png b/sa1/graphics/obj_tiles/4bpp/a0688_f009.png new file mode 100644 index 0000000000..925bd6feed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f010.png b/sa1/graphics/obj_tiles/4bpp/a0688_f010.png new file mode 100644 index 0000000000..76ee524a8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f011.png b/sa1/graphics/obj_tiles/4bpp/a0688_f011.png new file mode 100644 index 0000000000..89be6d85e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f012.png b/sa1/graphics/obj_tiles/4bpp/a0688_f012.png new file mode 100644 index 0000000000..fbb45213b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f013.png b/sa1/graphics/obj_tiles/4bpp/a0688_f013.png new file mode 100644 index 0000000000..9391887756 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f014.png b/sa1/graphics/obj_tiles/4bpp/a0688_f014.png new file mode 100644 index 0000000000..ac17ab2ae1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f015.png b/sa1/graphics/obj_tiles/4bpp/a0688_f015.png new file mode 100644 index 0000000000..a40daf1954 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f016.png b/sa1/graphics/obj_tiles/4bpp/a0688_f016.png new file mode 100644 index 0000000000..43096797dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f017.png b/sa1/graphics/obj_tiles/4bpp/a0688_f017.png new file mode 100644 index 0000000000..89be6d85e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f018.png b/sa1/graphics/obj_tiles/4bpp/a0688_f018.png new file mode 100644 index 0000000000..76ee524a8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f019.png b/sa1/graphics/obj_tiles/4bpp/a0688_f019.png new file mode 100644 index 0000000000..925bd6feed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f020.png b/sa1/graphics/obj_tiles/4bpp/a0688_f020.png new file mode 100644 index 0000000000..5e70b90605 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f021.png b/sa1/graphics/obj_tiles/4bpp/a0688_f021.png new file mode 100644 index 0000000000..6fbd326f8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f022.png b/sa1/graphics/obj_tiles/4bpp/a0688_f022.png new file mode 100644 index 0000000000..dcf220a214 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f023.png b/sa1/graphics/obj_tiles/4bpp/a0688_f023.png new file mode 100644 index 0000000000..c30a025848 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f024.png b/sa1/graphics/obj_tiles/4bpp/a0688_f024.png new file mode 100644 index 0000000000..34201248b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f024.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f025.png b/sa1/graphics/obj_tiles/4bpp/a0688_f025.png new file mode 100644 index 0000000000..aa480462b6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f025.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0688_f026.png b/sa1/graphics/obj_tiles/4bpp/a0688_f026.png new file mode 100644 index 0000000000..d5d34b4483 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0688_f026.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0689_f000.png b/sa1/graphics/obj_tiles/4bpp/a0689_f000.png new file mode 100644 index 0000000000..23d0c572f6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0689_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0689_f001.png b/sa1/graphics/obj_tiles/4bpp/a0689_f001.png new file mode 100644 index 0000000000..285ff7b8e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0689_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0689_f002.png b/sa1/graphics/obj_tiles/4bpp/a0689_f002.png new file mode 100644 index 0000000000..b971202399 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0689_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0689_f003.png b/sa1/graphics/obj_tiles/4bpp/a0689_f003.png new file mode 100644 index 0000000000..41ca324373 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0689_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0690_f000.png b/sa1/graphics/obj_tiles/4bpp/a0690_f000.png new file mode 100644 index 0000000000..ec837319c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0690_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0690_f001.png b/sa1/graphics/obj_tiles/4bpp/a0690_f001.png new file mode 100644 index 0000000000..a558124582 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0690_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0691_f000.png b/sa1/graphics/obj_tiles/4bpp/a0691_f000.png new file mode 100644 index 0000000000..32a1eb2541 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0691_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0691_f001.png b/sa1/graphics/obj_tiles/4bpp/a0691_f001.png new file mode 100644 index 0000000000..af0d50bc0e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0691_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0691_f002.png b/sa1/graphics/obj_tiles/4bpp/a0691_f002.png new file mode 100644 index 0000000000..0811d1ac91 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0691_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0691_f003.png b/sa1/graphics/obj_tiles/4bpp/a0691_f003.png new file mode 100644 index 0000000000..28d5921874 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0691_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0691_f004.png b/sa1/graphics/obj_tiles/4bpp/a0691_f004.png new file mode 100644 index 0000000000..a53afe37fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0691_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0691_f005.png b/sa1/graphics/obj_tiles/4bpp/a0691_f005.png new file mode 100644 index 0000000000..55bee68052 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0691_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0691_f006.png b/sa1/graphics/obj_tiles/4bpp/a0691_f006.png new file mode 100644 index 0000000000..024579022d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0691_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0692_f000.png b/sa1/graphics/obj_tiles/4bpp/a0692_f000.png new file mode 100644 index 0000000000..fde60118bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0692_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0693_f000.png b/sa1/graphics/obj_tiles/4bpp/a0693_f000.png new file mode 100644 index 0000000000..61838cddbb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0693_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0693_f001.png b/sa1/graphics/obj_tiles/4bpp/a0693_f001.png new file mode 100644 index 0000000000..bbcf9195b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0693_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0693_f002.png b/sa1/graphics/obj_tiles/4bpp/a0693_f002.png new file mode 100644 index 0000000000..83ba70429c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0693_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0693_f003.png b/sa1/graphics/obj_tiles/4bpp/a0693_f003.png new file mode 100644 index 0000000000..dba6f2fc22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0693_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f000.png b/sa1/graphics/obj_tiles/4bpp/a0694_f000.png new file mode 100644 index 0000000000..2a2986ada1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f001.png b/sa1/graphics/obj_tiles/4bpp/a0694_f001.png new file mode 100644 index 0000000000..3f45dea737 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f002.png b/sa1/graphics/obj_tiles/4bpp/a0694_f002.png new file mode 100644 index 0000000000..9526c85fc4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f003.png b/sa1/graphics/obj_tiles/4bpp/a0694_f003.png new file mode 100644 index 0000000000..5bd85aa15d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f004.png b/sa1/graphics/obj_tiles/4bpp/a0694_f004.png new file mode 100644 index 0000000000..cb125e27dd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f005.png b/sa1/graphics/obj_tiles/4bpp/a0694_f005.png new file mode 100644 index 0000000000..77742d0642 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f006.png b/sa1/graphics/obj_tiles/4bpp/a0694_f006.png new file mode 100644 index 0000000000..5e029a7d14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f007.png b/sa1/graphics/obj_tiles/4bpp/a0694_f007.png new file mode 100644 index 0000000000..0995ae3932 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f008.png b/sa1/graphics/obj_tiles/4bpp/a0694_f008.png new file mode 100644 index 0000000000..5396888f9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f009.png b/sa1/graphics/obj_tiles/4bpp/a0694_f009.png new file mode 100644 index 0000000000..85434722e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f010.png b/sa1/graphics/obj_tiles/4bpp/a0694_f010.png new file mode 100644 index 0000000000..a079ec5e72 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f011.png b/sa1/graphics/obj_tiles/4bpp/a0694_f011.png new file mode 100644 index 0000000000..f6ebbc666c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f012.png b/sa1/graphics/obj_tiles/4bpp/a0694_f012.png new file mode 100644 index 0000000000..101c0f6870 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f013.png b/sa1/graphics/obj_tiles/4bpp/a0694_f013.png new file mode 100644 index 0000000000..0bb4f6dfd3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f014.png b/sa1/graphics/obj_tiles/4bpp/a0694_f014.png new file mode 100644 index 0000000000..f1420f07ad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f015.png b/sa1/graphics/obj_tiles/4bpp/a0694_f015.png new file mode 100644 index 0000000000..c56ac5d687 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0694_f016.png b/sa1/graphics/obj_tiles/4bpp/a0694_f016.png new file mode 100644 index 0000000000..3f45dea737 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0694_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0695_f000.png b/sa1/graphics/obj_tiles/4bpp/a0695_f000.png new file mode 100644 index 0000000000..314797f7f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0695_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0695_f001.png b/sa1/graphics/obj_tiles/4bpp/a0695_f001.png new file mode 100644 index 0000000000..903f7cd304 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0695_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0696_f000.png b/sa1/graphics/obj_tiles/4bpp/a0696_f000.png new file mode 100644 index 0000000000..2f17672bdd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0696_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0696_f001.png b/sa1/graphics/obj_tiles/4bpp/a0696_f001.png new file mode 100644 index 0000000000..fcf5ebc3d0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0696_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0697_f000.png b/sa1/graphics/obj_tiles/4bpp/a0697_f000.png new file mode 100644 index 0000000000..98493bd821 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0697_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0697_f001.png b/sa1/graphics/obj_tiles/4bpp/a0697_f001.png new file mode 100644 index 0000000000..93f4c01018 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0697_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0698_f000.png b/sa1/graphics/obj_tiles/4bpp/a0698_f000.png new file mode 100644 index 0000000000..a9bc1ad2c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0698_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0698_f001.png b/sa1/graphics/obj_tiles/4bpp/a0698_f001.png new file mode 100644 index 0000000000..279a646569 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0698_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0698_f002.png b/sa1/graphics/obj_tiles/4bpp/a0698_f002.png new file mode 100644 index 0000000000..84803ef68a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0698_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0698_f003.png b/sa1/graphics/obj_tiles/4bpp/a0698_f003.png new file mode 100644 index 0000000000..c4b7bdc33c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0698_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0699_f000.png b/sa1/graphics/obj_tiles/4bpp/a0699_f000.png new file mode 100644 index 0000000000..a4d651f8d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0699_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0699_f001.png b/sa1/graphics/obj_tiles/4bpp/a0699_f001.png new file mode 100644 index 0000000000..c0f79e0bca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0699_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0699_f002.png b/sa1/graphics/obj_tiles/4bpp/a0699_f002.png new file mode 100644 index 0000000000..0a509d9d4b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0699_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0699_f003.png b/sa1/graphics/obj_tiles/4bpp/a0699_f003.png new file mode 100644 index 0000000000..8af3bf0dfc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0699_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0700_f000.png b/sa1/graphics/obj_tiles/4bpp/a0700_f000.png new file mode 100644 index 0000000000..b6389ec2b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0700_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0701_f000.png b/sa1/graphics/obj_tiles/4bpp/a0701_f000.png new file mode 100644 index 0000000000..db54707547 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0701_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0701_f001.png b/sa1/graphics/obj_tiles/4bpp/a0701_f001.png new file mode 100644 index 0000000000..f4165dbc7d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0701_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0702_f000.png b/sa1/graphics/obj_tiles/4bpp/a0702_f000.png new file mode 100644 index 0000000000..d530373836 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0702_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0702_f001.png b/sa1/graphics/obj_tiles/4bpp/a0702_f001.png new file mode 100644 index 0000000000..becdac6b3b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0702_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0702_f002.png b/sa1/graphics/obj_tiles/4bpp/a0702_f002.png new file mode 100644 index 0000000000..97e89070b3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0702_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0702_f003.png b/sa1/graphics/obj_tiles/4bpp/a0702_f003.png new file mode 100644 index 0000000000..521d4b5820 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0702_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0702_f004.png b/sa1/graphics/obj_tiles/4bpp/a0702_f004.png new file mode 100644 index 0000000000..c7a072b926 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0702_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0703_f000.png b/sa1/graphics/obj_tiles/4bpp/a0703_f000.png new file mode 100644 index 0000000000..9cd1388056 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0703_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0703_f001.png b/sa1/graphics/obj_tiles/4bpp/a0703_f001.png new file mode 100644 index 0000000000..3efc2d42cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0703_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0703_f002.png b/sa1/graphics/obj_tiles/4bpp/a0703_f002.png new file mode 100644 index 0000000000..33557a7d78 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0703_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0703_f003.png b/sa1/graphics/obj_tiles/4bpp/a0703_f003.png new file mode 100644 index 0000000000..2252c5f44a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0703_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0703_f004.png b/sa1/graphics/obj_tiles/4bpp/a0703_f004.png new file mode 100644 index 0000000000..76e692920c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0703_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0704_f000.png b/sa1/graphics/obj_tiles/4bpp/a0704_f000.png new file mode 100644 index 0000000000..783e30ebba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0704_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0704_f001.png b/sa1/graphics/obj_tiles/4bpp/a0704_f001.png new file mode 100644 index 0000000000..1cae72db37 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0704_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0704_f002.png b/sa1/graphics/obj_tiles/4bpp/a0704_f002.png new file mode 100644 index 0000000000..d128327980 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0704_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0704_f003.png b/sa1/graphics/obj_tiles/4bpp/a0704_f003.png new file mode 100644 index 0000000000..1b3bdd65de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0704_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0704_f004.png b/sa1/graphics/obj_tiles/4bpp/a0704_f004.png new file mode 100644 index 0000000000..3db256bfe0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0704_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0705_f000.png b/sa1/graphics/obj_tiles/4bpp/a0705_f000.png new file mode 100644 index 0000000000..b433f4eb34 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0705_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f000.png b/sa1/graphics/obj_tiles/4bpp/a0706_f000.png new file mode 100644 index 0000000000..e112ad3326 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f001.png b/sa1/graphics/obj_tiles/4bpp/a0706_f001.png new file mode 100644 index 0000000000..61f2963e63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f002.png b/sa1/graphics/obj_tiles/4bpp/a0706_f002.png new file mode 100644 index 0000000000..411a00d859 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f003.png b/sa1/graphics/obj_tiles/4bpp/a0706_f003.png new file mode 100644 index 0000000000..d74fda75c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f004.png b/sa1/graphics/obj_tiles/4bpp/a0706_f004.png new file mode 100644 index 0000000000..a341a04a88 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f005.png b/sa1/graphics/obj_tiles/4bpp/a0706_f005.png new file mode 100644 index 0000000000..85a8b3c074 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f006.png b/sa1/graphics/obj_tiles/4bpp/a0706_f006.png new file mode 100644 index 0000000000..5714352ace Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f007.png b/sa1/graphics/obj_tiles/4bpp/a0706_f007.png new file mode 100644 index 0000000000..406b5356ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f008.png b/sa1/graphics/obj_tiles/4bpp/a0706_f008.png new file mode 100644 index 0000000000..3e76889378 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f009.png b/sa1/graphics/obj_tiles/4bpp/a0706_f009.png new file mode 100644 index 0000000000..e5d1ba1370 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f010.png b/sa1/graphics/obj_tiles/4bpp/a0706_f010.png new file mode 100644 index 0000000000..0430eb1d22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f011.png b/sa1/graphics/obj_tiles/4bpp/a0706_f011.png new file mode 100644 index 0000000000..6de6ebf506 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f012.png b/sa1/graphics/obj_tiles/4bpp/a0706_f012.png new file mode 100644 index 0000000000..aa76f8784b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f013.png b/sa1/graphics/obj_tiles/4bpp/a0706_f013.png new file mode 100644 index 0000000000..0bed21f5b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f014.png b/sa1/graphics/obj_tiles/4bpp/a0706_f014.png new file mode 100644 index 0000000000..0dbf4453bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f015.png b/sa1/graphics/obj_tiles/4bpp/a0706_f015.png new file mode 100644 index 0000000000..99d7e2ed56 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0706_f016.png b/sa1/graphics/obj_tiles/4bpp/a0706_f016.png new file mode 100644 index 0000000000..f53294c93f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0706_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0707_f000.png b/sa1/graphics/obj_tiles/4bpp/a0707_f000.png new file mode 100644 index 0000000000..bf00940324 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0707_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0707_f001.png b/sa1/graphics/obj_tiles/4bpp/a0707_f001.png new file mode 100644 index 0000000000..46e061a331 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0707_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0707_f002.png b/sa1/graphics/obj_tiles/4bpp/a0707_f002.png new file mode 100644 index 0000000000..65b4d18f8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0707_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0707_f003.png b/sa1/graphics/obj_tiles/4bpp/a0707_f003.png new file mode 100644 index 0000000000..cf4dec85fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0707_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0708_f000.png b/sa1/graphics/obj_tiles/4bpp/a0708_f000.png new file mode 100644 index 0000000000..8a4694f722 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0708_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0708_f001.png b/sa1/graphics/obj_tiles/4bpp/a0708_f001.png new file mode 100644 index 0000000000..63342e0a73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0708_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0708_f002.png b/sa1/graphics/obj_tiles/4bpp/a0708_f002.png new file mode 100644 index 0000000000..d9bb67b201 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0708_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0708_f003.png b/sa1/graphics/obj_tiles/4bpp/a0708_f003.png new file mode 100644 index 0000000000..2066078b82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0708_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0709_f000.png b/sa1/graphics/obj_tiles/4bpp/a0709_f000.png new file mode 100644 index 0000000000..f0d6854286 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0709_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0709_f001.png b/sa1/graphics/obj_tiles/4bpp/a0709_f001.png new file mode 100644 index 0000000000..b9887f518b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0709_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0709_f002.png b/sa1/graphics/obj_tiles/4bpp/a0709_f002.png new file mode 100644 index 0000000000..acf3aba2fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0709_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0709_f003.png b/sa1/graphics/obj_tiles/4bpp/a0709_f003.png new file mode 100644 index 0000000000..65158e2568 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0709_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0709_f004.png b/sa1/graphics/obj_tiles/4bpp/a0709_f004.png new file mode 100644 index 0000000000..8be02c6566 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0709_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f000.png b/sa1/graphics/obj_tiles/4bpp/a0710_f000.png new file mode 100644 index 0000000000..600522a99e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f001.png b/sa1/graphics/obj_tiles/4bpp/a0710_f001.png new file mode 100644 index 0000000000..59adf7fb80 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f002.png b/sa1/graphics/obj_tiles/4bpp/a0710_f002.png new file mode 100644 index 0000000000..7bb34ce553 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f003.png b/sa1/graphics/obj_tiles/4bpp/a0710_f003.png new file mode 100644 index 0000000000..3ff0dc91c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f004.png b/sa1/graphics/obj_tiles/4bpp/a0710_f004.png new file mode 100644 index 0000000000..c89d48ffb5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f005.png b/sa1/graphics/obj_tiles/4bpp/a0710_f005.png new file mode 100644 index 0000000000..16a6037b55 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f006.png b/sa1/graphics/obj_tiles/4bpp/a0710_f006.png new file mode 100644 index 0000000000..6ae09918b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f007.png b/sa1/graphics/obj_tiles/4bpp/a0710_f007.png new file mode 100644 index 0000000000..81b110e578 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f008.png b/sa1/graphics/obj_tiles/4bpp/a0710_f008.png new file mode 100644 index 0000000000..d4c4c2840a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0710_f009.png b/sa1/graphics/obj_tiles/4bpp/a0710_f009.png new file mode 100644 index 0000000000..05fd392d7a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0710_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0711_f000.png b/sa1/graphics/obj_tiles/4bpp/a0711_f000.png new file mode 100644 index 0000000000..4212e239e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0711_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0711_f001.png b/sa1/graphics/obj_tiles/4bpp/a0711_f001.png new file mode 100644 index 0000000000..b5229b9d57 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0711_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0712_f000.png b/sa1/graphics/obj_tiles/4bpp/a0712_f000.png new file mode 100644 index 0000000000..0413c47615 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0712_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0713_f000.png b/sa1/graphics/obj_tiles/4bpp/a0713_f000.png new file mode 100644 index 0000000000..4b2c8fc282 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0713_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0713_f001.png b/sa1/graphics/obj_tiles/4bpp/a0713_f001.png new file mode 100644 index 0000000000..5f90537639 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0713_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0713_f002.png b/sa1/graphics/obj_tiles/4bpp/a0713_f002.png new file mode 100644 index 0000000000..6e3d876356 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0713_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0713_f003.png b/sa1/graphics/obj_tiles/4bpp/a0713_f003.png new file mode 100644 index 0000000000..c312c34fec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0713_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0714_f000.png b/sa1/graphics/obj_tiles/4bpp/a0714_f000.png new file mode 100644 index 0000000000..0e33a83755 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0714_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0715_f000.png b/sa1/graphics/obj_tiles/4bpp/a0715_f000.png new file mode 100644 index 0000000000..a5bebcbcac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0715_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0715_f001.png b/sa1/graphics/obj_tiles/4bpp/a0715_f001.png new file mode 100644 index 0000000000..57322eaab6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0715_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0715_f002.png b/sa1/graphics/obj_tiles/4bpp/a0715_f002.png new file mode 100644 index 0000000000..1acb930ead Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0715_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0715_f003.png b/sa1/graphics/obj_tiles/4bpp/a0715_f003.png new file mode 100644 index 0000000000..0ea8b0c846 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0715_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0715_f004.png b/sa1/graphics/obj_tiles/4bpp/a0715_f004.png new file mode 100644 index 0000000000..97c1511a1e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0715_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0716_f000.png b/sa1/graphics/obj_tiles/4bpp/a0716_f000.png new file mode 100644 index 0000000000..a94298d20a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0716_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0717_f000.png b/sa1/graphics/obj_tiles/4bpp/a0717_f000.png new file mode 100644 index 0000000000..b3f35f05ce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0717_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0717_f001.png b/sa1/graphics/obj_tiles/4bpp/a0717_f001.png new file mode 100644 index 0000000000..472d918db2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0717_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0717_f002.png b/sa1/graphics/obj_tiles/4bpp/a0717_f002.png new file mode 100644 index 0000000000..e1cb7aa9d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0717_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0718_f000.png b/sa1/graphics/obj_tiles/4bpp/a0718_f000.png new file mode 100644 index 0000000000..edad468c54 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0718_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0719_f000.png b/sa1/graphics/obj_tiles/4bpp/a0719_f000.png new file mode 100644 index 0000000000..101373b800 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0719_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0719_f001.png b/sa1/graphics/obj_tiles/4bpp/a0719_f001.png new file mode 100644 index 0000000000..0cd7e2c182 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0719_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0719_f002.png b/sa1/graphics/obj_tiles/4bpp/a0719_f002.png new file mode 100644 index 0000000000..88a4ba2de0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0719_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0719_f003.png b/sa1/graphics/obj_tiles/4bpp/a0719_f003.png new file mode 100644 index 0000000000..8ddad5bce9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0719_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0720_f000.png b/sa1/graphics/obj_tiles/4bpp/a0720_f000.png new file mode 100644 index 0000000000..9d7c6a427d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0720_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0721_f000.png b/sa1/graphics/obj_tiles/4bpp/a0721_f000.png new file mode 100644 index 0000000000..818675e5b3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0721_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f000.png b/sa1/graphics/obj_tiles/4bpp/a0722_f000.png new file mode 100644 index 0000000000..55416acb09 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f001.png b/sa1/graphics/obj_tiles/4bpp/a0722_f001.png new file mode 100644 index 0000000000..e26d48ca5e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f002.png b/sa1/graphics/obj_tiles/4bpp/a0722_f002.png new file mode 100644 index 0000000000..f8d3bf9054 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f003.png b/sa1/graphics/obj_tiles/4bpp/a0722_f003.png new file mode 100644 index 0000000000..f06bf68c14 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f004.png b/sa1/graphics/obj_tiles/4bpp/a0722_f004.png new file mode 100644 index 0000000000..3341b9f66d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f005.png b/sa1/graphics/obj_tiles/4bpp/a0722_f005.png new file mode 100644 index 0000000000..e78ecbff06 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f006.png b/sa1/graphics/obj_tiles/4bpp/a0722_f006.png new file mode 100644 index 0000000000..6e7afba9af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f007.png b/sa1/graphics/obj_tiles/4bpp/a0722_f007.png new file mode 100644 index 0000000000..7a817c984e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f008.png b/sa1/graphics/obj_tiles/4bpp/a0722_f008.png new file mode 100644 index 0000000000..854b4e4bd0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f009.png b/sa1/graphics/obj_tiles/4bpp/a0722_f009.png new file mode 100644 index 0000000000..bca8267847 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f010.png b/sa1/graphics/obj_tiles/4bpp/a0722_f010.png new file mode 100644 index 0000000000..94bb73eb85 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f011.png b/sa1/graphics/obj_tiles/4bpp/a0722_f011.png new file mode 100644 index 0000000000..60ebf2d1ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f012.png b/sa1/graphics/obj_tiles/4bpp/a0722_f012.png new file mode 100644 index 0000000000..c44747da99 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f013.png b/sa1/graphics/obj_tiles/4bpp/a0722_f013.png new file mode 100644 index 0000000000..ae98e57ed4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f014.png b/sa1/graphics/obj_tiles/4bpp/a0722_f014.png new file mode 100644 index 0000000000..0b06797b95 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f015.png b/sa1/graphics/obj_tiles/4bpp/a0722_f015.png new file mode 100644 index 0000000000..cbdb0acc65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f016.png b/sa1/graphics/obj_tiles/4bpp/a0722_f016.png new file mode 100644 index 0000000000..87d244196c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f017.png b/sa1/graphics/obj_tiles/4bpp/a0722_f017.png new file mode 100644 index 0000000000..eb2352cc7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f018.png b/sa1/graphics/obj_tiles/4bpp/a0722_f018.png new file mode 100644 index 0000000000..3f13102737 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f019.png b/sa1/graphics/obj_tiles/4bpp/a0722_f019.png new file mode 100644 index 0000000000..3976f16b04 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f020.png b/sa1/graphics/obj_tiles/4bpp/a0722_f020.png new file mode 100644 index 0000000000..045825ed47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0722_f021.png b/sa1/graphics/obj_tiles/4bpp/a0722_f021.png new file mode 100644 index 0000000000..bf33e02079 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0722_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0723_f000.png b/sa1/graphics/obj_tiles/4bpp/a0723_f000.png new file mode 100644 index 0000000000..518d40d4f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0723_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0723_f001.png b/sa1/graphics/obj_tiles/4bpp/a0723_f001.png new file mode 100644 index 0000000000..7706da6ecd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0723_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0723_f002.png b/sa1/graphics/obj_tiles/4bpp/a0723_f002.png new file mode 100644 index 0000000000..c3c054e9f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0723_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0723_f003.png b/sa1/graphics/obj_tiles/4bpp/a0723_f003.png new file mode 100644 index 0000000000..4c844459f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0723_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f000.png b/sa1/graphics/obj_tiles/4bpp/a0724_f000.png new file mode 100644 index 0000000000..af2e51bda5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f001.png b/sa1/graphics/obj_tiles/4bpp/a0724_f001.png new file mode 100644 index 0000000000..d00a3651c4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f002.png b/sa1/graphics/obj_tiles/4bpp/a0724_f002.png new file mode 100644 index 0000000000..349b9e89af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f003.png b/sa1/graphics/obj_tiles/4bpp/a0724_f003.png new file mode 100644 index 0000000000..171179c1dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f004.png b/sa1/graphics/obj_tiles/4bpp/a0724_f004.png new file mode 100644 index 0000000000..bede0c48a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f005.png b/sa1/graphics/obj_tiles/4bpp/a0724_f005.png new file mode 100644 index 0000000000..2632e027d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f006.png b/sa1/graphics/obj_tiles/4bpp/a0724_f006.png new file mode 100644 index 0000000000..0a0c86017b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f007.png b/sa1/graphics/obj_tiles/4bpp/a0724_f007.png new file mode 100644 index 0000000000..9b5f696549 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f008.png b/sa1/graphics/obj_tiles/4bpp/a0724_f008.png new file mode 100644 index 0000000000..8af5fce7d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f009.png b/sa1/graphics/obj_tiles/4bpp/a0724_f009.png new file mode 100644 index 0000000000..b5c3debfda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f010.png b/sa1/graphics/obj_tiles/4bpp/a0724_f010.png new file mode 100644 index 0000000000..de23162abd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f011.png b/sa1/graphics/obj_tiles/4bpp/a0724_f011.png new file mode 100644 index 0000000000..8d22449294 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f012.png b/sa1/graphics/obj_tiles/4bpp/a0724_f012.png new file mode 100644 index 0000000000..b0a990bcbc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f013.png b/sa1/graphics/obj_tiles/4bpp/a0724_f013.png new file mode 100644 index 0000000000..8eda331515 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f014.png b/sa1/graphics/obj_tiles/4bpp/a0724_f014.png new file mode 100644 index 0000000000..0bc30a61f3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f015.png b/sa1/graphics/obj_tiles/4bpp/a0724_f015.png new file mode 100644 index 0000000000..8f2a5dc52b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f016.png b/sa1/graphics/obj_tiles/4bpp/a0724_f016.png new file mode 100644 index 0000000000..17d2662058 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0724_f017.png b/sa1/graphics/obj_tiles/4bpp/a0724_f017.png new file mode 100644 index 0000000000..f27e6f0400 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0724_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0725_f000.png b/sa1/graphics/obj_tiles/4bpp/a0725_f000.png new file mode 100644 index 0000000000..3aa0648271 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0725_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0726_f000.png b/sa1/graphics/obj_tiles/4bpp/a0726_f000.png new file mode 100644 index 0000000000..75805fc30f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0726_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0727_f000.png b/sa1/graphics/obj_tiles/4bpp/a0727_f000.png new file mode 100644 index 0000000000..3d15079252 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0727_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0728_f000.png b/sa1/graphics/obj_tiles/4bpp/a0728_f000.png new file mode 100644 index 0000000000..a4cb19ab4d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0728_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0729_f000.png b/sa1/graphics/obj_tiles/4bpp/a0729_f000.png new file mode 100644 index 0000000000..0fa565de69 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0729_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0730_f000.png b/sa1/graphics/obj_tiles/4bpp/a0730_f000.png new file mode 100644 index 0000000000..f7436e1bf7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0730_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0731_f000.png b/sa1/graphics/obj_tiles/4bpp/a0731_f000.png new file mode 100644 index 0000000000..5c13ece883 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0731_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0731_f001.png b/sa1/graphics/obj_tiles/4bpp/a0731_f001.png new file mode 100644 index 0000000000..580fa87533 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0731_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0731_f002.png b/sa1/graphics/obj_tiles/4bpp/a0731_f002.png new file mode 100644 index 0000000000..75e04667c4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0731_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0731_f003.png b/sa1/graphics/obj_tiles/4bpp/a0731_f003.png new file mode 100644 index 0000000000..752393535f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0731_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0732_f000.png b/sa1/graphics/obj_tiles/4bpp/a0732_f000.png new file mode 100644 index 0000000000..78112660bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0732_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0732_f001.png b/sa1/graphics/obj_tiles/4bpp/a0732_f001.png new file mode 100644 index 0000000000..4df9a338c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0732_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0732_f002.png b/sa1/graphics/obj_tiles/4bpp/a0732_f002.png new file mode 100644 index 0000000000..c4528f9164 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0732_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0732_f003.png b/sa1/graphics/obj_tiles/4bpp/a0732_f003.png new file mode 100644 index 0000000000..30a43e6029 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0732_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0733_f000.png b/sa1/graphics/obj_tiles/4bpp/a0733_f000.png new file mode 100644 index 0000000000..032dd86320 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0733_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0733_f001.png b/sa1/graphics/obj_tiles/4bpp/a0733_f001.png new file mode 100644 index 0000000000..bd25db4203 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0733_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0734_f000.png b/sa1/graphics/obj_tiles/4bpp/a0734_f000.png new file mode 100644 index 0000000000..901d0f66a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0734_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0734_f001.png b/sa1/graphics/obj_tiles/4bpp/a0734_f001.png new file mode 100644 index 0000000000..70e9db794d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0734_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0735_f000.png b/sa1/graphics/obj_tiles/4bpp/a0735_f000.png new file mode 100644 index 0000000000..d98daab86d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0735_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0735_f001.png b/sa1/graphics/obj_tiles/4bpp/a0735_f001.png new file mode 100644 index 0000000000..75be9754d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0735_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0736_f000.png b/sa1/graphics/obj_tiles/4bpp/a0736_f000.png new file mode 100644 index 0000000000..9aaca140f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0736_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0736_f001.png b/sa1/graphics/obj_tiles/4bpp/a0736_f001.png new file mode 100644 index 0000000000..c2a14f942b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0736_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0739_f000.png b/sa1/graphics/obj_tiles/4bpp/a0739_f000.png new file mode 100644 index 0000000000..6d36be6499 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0739_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0739_f001.png b/sa1/graphics/obj_tiles/4bpp/a0739_f001.png new file mode 100644 index 0000000000..c18bcfb53e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0739_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0740_f000.png b/sa1/graphics/obj_tiles/4bpp/a0740_f000.png new file mode 100644 index 0000000000..6f2932eddd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0740_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0740_f001.png b/sa1/graphics/obj_tiles/4bpp/a0740_f001.png new file mode 100644 index 0000000000..8ef1cbef84 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0740_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0740_f002.png b/sa1/graphics/obj_tiles/4bpp/a0740_f002.png new file mode 100644 index 0000000000..52067d4626 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0740_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0740_f003.png b/sa1/graphics/obj_tiles/4bpp/a0740_f003.png new file mode 100644 index 0000000000..ed75ef1975 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0740_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0741_f000.png b/sa1/graphics/obj_tiles/4bpp/a0741_f000.png new file mode 100644 index 0000000000..47493af577 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0741_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0741_f001.png b/sa1/graphics/obj_tiles/4bpp/a0741_f001.png new file mode 100644 index 0000000000..36f8b6a8f6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0741_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0742_f000.png b/sa1/graphics/obj_tiles/4bpp/a0742_f000.png new file mode 100644 index 0000000000..d81b969d67 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0742_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0743_f000.png b/sa1/graphics/obj_tiles/4bpp/a0743_f000.png new file mode 100644 index 0000000000..f5f793d11f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0743_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0744_f000.png b/sa1/graphics/obj_tiles/4bpp/a0744_f000.png new file mode 100644 index 0000000000..3c4c9695f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0744_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0745_f000.png b/sa1/graphics/obj_tiles/4bpp/a0745_f000.png new file mode 100644 index 0000000000..5faee4c2b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0745_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0745_f001.png b/sa1/graphics/obj_tiles/4bpp/a0745_f001.png new file mode 100644 index 0000000000..28baced693 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0745_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0745_f002.png b/sa1/graphics/obj_tiles/4bpp/a0745_f002.png new file mode 100644 index 0000000000..9935bf63b3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0745_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0745_f003.png b/sa1/graphics/obj_tiles/4bpp/a0745_f003.png new file mode 100644 index 0000000000..fab4eb464f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0745_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0745_f004.png b/sa1/graphics/obj_tiles/4bpp/a0745_f004.png new file mode 100644 index 0000000000..4da48a7d6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0745_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f000.png b/sa1/graphics/obj_tiles/4bpp/a0746_f000.png new file mode 100644 index 0000000000..38e10282e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f001.png b/sa1/graphics/obj_tiles/4bpp/a0746_f001.png new file mode 100644 index 0000000000..07e7757766 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f002.png b/sa1/graphics/obj_tiles/4bpp/a0746_f002.png new file mode 100644 index 0000000000..c8ad23576c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f003.png b/sa1/graphics/obj_tiles/4bpp/a0746_f003.png new file mode 100644 index 0000000000..c8cda93baf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f004.png b/sa1/graphics/obj_tiles/4bpp/a0746_f004.png new file mode 100644 index 0000000000..01c6aac8e3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f005.png b/sa1/graphics/obj_tiles/4bpp/a0746_f005.png new file mode 100644 index 0000000000..c03900d85d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f006.png b/sa1/graphics/obj_tiles/4bpp/a0746_f006.png new file mode 100644 index 0000000000..13bc8c30db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0746_f007.png b/sa1/graphics/obj_tiles/4bpp/a0746_f007.png new file mode 100644 index 0000000000..2472a62cb3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0746_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0747_f000.png b/sa1/graphics/obj_tiles/4bpp/a0747_f000.png new file mode 100644 index 0000000000..423f7f8dda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0747_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0747_f001.png b/sa1/graphics/obj_tiles/4bpp/a0747_f001.png new file mode 100644 index 0000000000..c35a36a4d5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0747_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0747_f002.png b/sa1/graphics/obj_tiles/4bpp/a0747_f002.png new file mode 100644 index 0000000000..c10d0b5e60 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0747_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0747_f003.png b/sa1/graphics/obj_tiles/4bpp/a0747_f003.png new file mode 100644 index 0000000000..cdf619f6a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0747_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f000.png b/sa1/graphics/obj_tiles/4bpp/a0748_f000.png new file mode 100644 index 0000000000..f6714ecead Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f001.png b/sa1/graphics/obj_tiles/4bpp/a0748_f001.png new file mode 100644 index 0000000000..aa48a8c720 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f002.png b/sa1/graphics/obj_tiles/4bpp/a0748_f002.png new file mode 100644 index 0000000000..f30a5b3cec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f003.png b/sa1/graphics/obj_tiles/4bpp/a0748_f003.png new file mode 100644 index 0000000000..ce09b7e765 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f004.png b/sa1/graphics/obj_tiles/4bpp/a0748_f004.png new file mode 100644 index 0000000000..d8e87a67ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f005.png b/sa1/graphics/obj_tiles/4bpp/a0748_f005.png new file mode 100644 index 0000000000..bcc396aa33 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f006.png b/sa1/graphics/obj_tiles/4bpp/a0748_f006.png new file mode 100644 index 0000000000..21eda3fdd4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0748_f007.png b/sa1/graphics/obj_tiles/4bpp/a0748_f007.png new file mode 100644 index 0000000000..47cbf6e892 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0748_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f000.png b/sa1/graphics/obj_tiles/4bpp/a0749_f000.png new file mode 100644 index 0000000000..c04ff4ab8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f001.png b/sa1/graphics/obj_tiles/4bpp/a0749_f001.png new file mode 100644 index 0000000000..7d3aba503f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f002.png b/sa1/graphics/obj_tiles/4bpp/a0749_f002.png new file mode 100644 index 0000000000..ff025bd7cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f003.png b/sa1/graphics/obj_tiles/4bpp/a0749_f003.png new file mode 100644 index 0000000000..0934ecbf4c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f004.png b/sa1/graphics/obj_tiles/4bpp/a0749_f004.png new file mode 100644 index 0000000000..ac9e366a5e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f005.png b/sa1/graphics/obj_tiles/4bpp/a0749_f005.png new file mode 100644 index 0000000000..9329ec153c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f006.png b/sa1/graphics/obj_tiles/4bpp/a0749_f006.png new file mode 100644 index 0000000000..99bd94ce29 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0749_f007.png b/sa1/graphics/obj_tiles/4bpp/a0749_f007.png new file mode 100644 index 0000000000..f5a05e4ada Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0749_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0750_f000.png b/sa1/graphics/obj_tiles/4bpp/a0750_f000.png new file mode 100644 index 0000000000..023f3db897 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0750_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0750_f001.png b/sa1/graphics/obj_tiles/4bpp/a0750_f001.png new file mode 100644 index 0000000000..64b816efd6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0750_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0750_f002.png b/sa1/graphics/obj_tiles/4bpp/a0750_f002.png new file mode 100644 index 0000000000..edbcc6726b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0750_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0750_f003.png b/sa1/graphics/obj_tiles/4bpp/a0750_f003.png new file mode 100644 index 0000000000..0064bd0a61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0750_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0750_f004.png b/sa1/graphics/obj_tiles/4bpp/a0750_f004.png new file mode 100644 index 0000000000..a9bf48d3ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0750_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0750_f005.png b/sa1/graphics/obj_tiles/4bpp/a0750_f005.png new file mode 100644 index 0000000000..32277c46f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0750_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f000.png b/sa1/graphics/obj_tiles/4bpp/a0751_f000.png new file mode 100644 index 0000000000..f14551662e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f001.png b/sa1/graphics/obj_tiles/4bpp/a0751_f001.png new file mode 100644 index 0000000000..1bbbd3f8ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f002.png b/sa1/graphics/obj_tiles/4bpp/a0751_f002.png new file mode 100644 index 0000000000..f961021443 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f003.png b/sa1/graphics/obj_tiles/4bpp/a0751_f003.png new file mode 100644 index 0000000000..12ddca0114 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f004.png b/sa1/graphics/obj_tiles/4bpp/a0751_f004.png new file mode 100644 index 0000000000..c9f00451a2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f005.png b/sa1/graphics/obj_tiles/4bpp/a0751_f005.png new file mode 100644 index 0000000000..c6917715d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f006.png b/sa1/graphics/obj_tiles/4bpp/a0751_f006.png new file mode 100644 index 0000000000..e71eca6654 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0751_f007.png b/sa1/graphics/obj_tiles/4bpp/a0751_f007.png new file mode 100644 index 0000000000..e9941c7f9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0751_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f000.png b/sa1/graphics/obj_tiles/4bpp/a0752_f000.png new file mode 100644 index 0000000000..db5fba8404 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f001.png b/sa1/graphics/obj_tiles/4bpp/a0752_f001.png new file mode 100644 index 0000000000..aeec418b0d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f002.png b/sa1/graphics/obj_tiles/4bpp/a0752_f002.png new file mode 100644 index 0000000000..6f91ec8a2d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f003.png b/sa1/graphics/obj_tiles/4bpp/a0752_f003.png new file mode 100644 index 0000000000..37af16f1b6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f004.png b/sa1/graphics/obj_tiles/4bpp/a0752_f004.png new file mode 100644 index 0000000000..5f4c2eca0f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f005.png b/sa1/graphics/obj_tiles/4bpp/a0752_f005.png new file mode 100644 index 0000000000..083b0e448b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f006.png b/sa1/graphics/obj_tiles/4bpp/a0752_f006.png new file mode 100644 index 0000000000..e649c45198 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f007.png b/sa1/graphics/obj_tiles/4bpp/a0752_f007.png new file mode 100644 index 0000000000..68531665f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f008.png b/sa1/graphics/obj_tiles/4bpp/a0752_f008.png new file mode 100644 index 0000000000..4178bc8fe8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f009.png b/sa1/graphics/obj_tiles/4bpp/a0752_f009.png new file mode 100644 index 0000000000..5e6b6c4929 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f010.png b/sa1/graphics/obj_tiles/4bpp/a0752_f010.png new file mode 100644 index 0000000000..d77ea734b5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f011.png b/sa1/graphics/obj_tiles/4bpp/a0752_f011.png new file mode 100644 index 0000000000..7dfb19ecf6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f012.png b/sa1/graphics/obj_tiles/4bpp/a0752_f012.png new file mode 100644 index 0000000000..be471ffa74 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f013.png b/sa1/graphics/obj_tiles/4bpp/a0752_f013.png new file mode 100644 index 0000000000..e14d5aad16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f014.png b/sa1/graphics/obj_tiles/4bpp/a0752_f014.png new file mode 100644 index 0000000000..67f70e56fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f015.png b/sa1/graphics/obj_tiles/4bpp/a0752_f015.png new file mode 100644 index 0000000000..fbb9c5f409 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f016.png b/sa1/graphics/obj_tiles/4bpp/a0752_f016.png new file mode 100644 index 0000000000..9eabe24748 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0752_f017.png b/sa1/graphics/obj_tiles/4bpp/a0752_f017.png new file mode 100644 index 0000000000..7d044174a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0752_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0753_f000.png b/sa1/graphics/obj_tiles/4bpp/a0753_f000.png new file mode 100644 index 0000000000..7014bc7972 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0753_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0753_f001.png b/sa1/graphics/obj_tiles/4bpp/a0753_f001.png new file mode 100644 index 0000000000..6498025f2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0753_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0753_f002.png b/sa1/graphics/obj_tiles/4bpp/a0753_f002.png new file mode 100644 index 0000000000..e480a70cd3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0753_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0753_f003.png b/sa1/graphics/obj_tiles/4bpp/a0753_f003.png new file mode 100644 index 0000000000..6498025f2f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0753_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0754_f000.png b/sa1/graphics/obj_tiles/4bpp/a0754_f000.png new file mode 100644 index 0000000000..04556901c9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0754_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0754_f001.png b/sa1/graphics/obj_tiles/4bpp/a0754_f001.png new file mode 100644 index 0000000000..b2c7cfebf8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0754_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0754_f002.png b/sa1/graphics/obj_tiles/4bpp/a0754_f002.png new file mode 100644 index 0000000000..b11847a6ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0754_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0754_f003.png b/sa1/graphics/obj_tiles/4bpp/a0754_f003.png new file mode 100644 index 0000000000..b2c7cfebf8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0754_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0755_f000.png b/sa1/graphics/obj_tiles/4bpp/a0755_f000.png new file mode 100644 index 0000000000..bc909974bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0755_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0755_f001.png b/sa1/graphics/obj_tiles/4bpp/a0755_f001.png new file mode 100644 index 0000000000..c8a7542a23 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0755_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0755_f002.png b/sa1/graphics/obj_tiles/4bpp/a0755_f002.png new file mode 100644 index 0000000000..4a14f42bce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0755_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0755_f003.png b/sa1/graphics/obj_tiles/4bpp/a0755_f003.png new file mode 100644 index 0000000000..21530e1873 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0755_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0756_f000.png b/sa1/graphics/obj_tiles/4bpp/a0756_f000.png new file mode 100644 index 0000000000..231539ac90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0756_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0756_f001.png b/sa1/graphics/obj_tiles/4bpp/a0756_f001.png new file mode 100644 index 0000000000..bbdd19f832 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0756_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0756_f002.png b/sa1/graphics/obj_tiles/4bpp/a0756_f002.png new file mode 100644 index 0000000000..9f9a5c8590 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0756_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0756_f003.png b/sa1/graphics/obj_tiles/4bpp/a0756_f003.png new file mode 100644 index 0000000000..79b67131cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0756_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0756_f004.png b/sa1/graphics/obj_tiles/4bpp/a0756_f004.png new file mode 100644 index 0000000000..f0c530df5f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0756_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0757_f000.png b/sa1/graphics/obj_tiles/4bpp/a0757_f000.png new file mode 100644 index 0000000000..231539ac90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0757_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0757_f001.png b/sa1/graphics/obj_tiles/4bpp/a0757_f001.png new file mode 100644 index 0000000000..1fcceb0c1e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0757_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0757_f002.png b/sa1/graphics/obj_tiles/4bpp/a0757_f002.png new file mode 100644 index 0000000000..6a075d03de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0757_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0757_f003.png b/sa1/graphics/obj_tiles/4bpp/a0757_f003.png new file mode 100644 index 0000000000..a982d637a9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0757_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0757_f004.png b/sa1/graphics/obj_tiles/4bpp/a0757_f004.png new file mode 100644 index 0000000000..b300d9315e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0757_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0758_f000.png b/sa1/graphics/obj_tiles/4bpp/a0758_f000.png new file mode 100644 index 0000000000..231539ac90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0758_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0758_f001.png b/sa1/graphics/obj_tiles/4bpp/a0758_f001.png new file mode 100644 index 0000000000..95b51c2f65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0758_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0758_f002.png b/sa1/graphics/obj_tiles/4bpp/a0758_f002.png new file mode 100644 index 0000000000..988de94e05 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0758_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0758_f003.png b/sa1/graphics/obj_tiles/4bpp/a0758_f003.png new file mode 100644 index 0000000000..79194ea6d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0758_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0758_f004.png b/sa1/graphics/obj_tiles/4bpp/a0758_f004.png new file mode 100644 index 0000000000..c84a4bd3fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0758_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0759_f000.png b/sa1/graphics/obj_tiles/4bpp/a0759_f000.png new file mode 100644 index 0000000000..f6466e21be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0759_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0759_f001.png b/sa1/graphics/obj_tiles/4bpp/a0759_f001.png new file mode 100644 index 0000000000..2adad7d180 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0759_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0759_f002.png b/sa1/graphics/obj_tiles/4bpp/a0759_f002.png new file mode 100644 index 0000000000..b7fb9b1fd9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0759_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0759_f003.png b/sa1/graphics/obj_tiles/4bpp/a0759_f003.png new file mode 100644 index 0000000000..4f89c11a5d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0759_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0759_f004.png b/sa1/graphics/obj_tiles/4bpp/a0759_f004.png new file mode 100644 index 0000000000..a8344710d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0759_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0760_f000.png b/sa1/graphics/obj_tiles/4bpp/a0760_f000.png new file mode 100644 index 0000000000..fa17705047 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0760_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0760_f001.png b/sa1/graphics/obj_tiles/4bpp/a0760_f001.png new file mode 100644 index 0000000000..631aad44ad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0760_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0760_f002.png b/sa1/graphics/obj_tiles/4bpp/a0760_f002.png new file mode 100644 index 0000000000..243eac786c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0760_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0760_f003.png b/sa1/graphics/obj_tiles/4bpp/a0760_f003.png new file mode 100644 index 0000000000..2b67c0db3f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0760_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0760_f004.png b/sa1/graphics/obj_tiles/4bpp/a0760_f004.png new file mode 100644 index 0000000000..2ddd699b36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0760_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0761_f000.png b/sa1/graphics/obj_tiles/4bpp/a0761_f000.png new file mode 100644 index 0000000000..235029243f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0761_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0761_f001.png b/sa1/graphics/obj_tiles/4bpp/a0761_f001.png new file mode 100644 index 0000000000..f64657f464 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0761_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0761_f002.png b/sa1/graphics/obj_tiles/4bpp/a0761_f002.png new file mode 100644 index 0000000000..243eac786c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0761_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0761_f003.png b/sa1/graphics/obj_tiles/4bpp/a0761_f003.png new file mode 100644 index 0000000000..46535ff8ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0761_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0761_f004.png b/sa1/graphics/obj_tiles/4bpp/a0761_f004.png new file mode 100644 index 0000000000..2ddd699b36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0761_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f000.png b/sa1/graphics/obj_tiles/4bpp/a0762_f000.png new file mode 100644 index 0000000000..22a31fb9c8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f001.png b/sa1/graphics/obj_tiles/4bpp/a0762_f001.png new file mode 100644 index 0000000000..f45854dcfb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f002.png b/sa1/graphics/obj_tiles/4bpp/a0762_f002.png new file mode 100644 index 0000000000..08916ec10e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f003.png b/sa1/graphics/obj_tiles/4bpp/a0762_f003.png new file mode 100644 index 0000000000..fd4e7c4fde Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f004.png b/sa1/graphics/obj_tiles/4bpp/a0762_f004.png new file mode 100644 index 0000000000..230c0a98d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f005.png b/sa1/graphics/obj_tiles/4bpp/a0762_f005.png new file mode 100644 index 0000000000..5a20955f6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f006.png b/sa1/graphics/obj_tiles/4bpp/a0762_f006.png new file mode 100644 index 0000000000..fd3d13b7ec Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0762_f007.png b/sa1/graphics/obj_tiles/4bpp/a0762_f007.png new file mode 100644 index 0000000000..6eb87b4b6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0762_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0763_f000.png b/sa1/graphics/obj_tiles/4bpp/a0763_f000.png new file mode 100644 index 0000000000..af3b325a85 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0763_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0763_f001.png b/sa1/graphics/obj_tiles/4bpp/a0763_f001.png new file mode 100644 index 0000000000..6c7bab96e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0763_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0763_f002.png b/sa1/graphics/obj_tiles/4bpp/a0763_f002.png new file mode 100644 index 0000000000..2085a50dd0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0763_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0763_f003.png b/sa1/graphics/obj_tiles/4bpp/a0763_f003.png new file mode 100644 index 0000000000..27d837902c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0763_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0763_f004.png b/sa1/graphics/obj_tiles/4bpp/a0763_f004.png new file mode 100644 index 0000000000..e775323530 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0763_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0764_f000.png b/sa1/graphics/obj_tiles/4bpp/a0764_f000.png new file mode 100644 index 0000000000..011a9d469e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0764_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0764_f001.png b/sa1/graphics/obj_tiles/4bpp/a0764_f001.png new file mode 100644 index 0000000000..b98b98f9de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0764_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0764_f002.png b/sa1/graphics/obj_tiles/4bpp/a0764_f002.png new file mode 100644 index 0000000000..56d6f1ca62 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0764_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0764_f003.png b/sa1/graphics/obj_tiles/4bpp/a0764_f003.png new file mode 100644 index 0000000000..d080d3c4e5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0764_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0764_f004.png b/sa1/graphics/obj_tiles/4bpp/a0764_f004.png new file mode 100644 index 0000000000..ce6526df0f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0764_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0764_f005.png b/sa1/graphics/obj_tiles/4bpp/a0764_f005.png new file mode 100644 index 0000000000..381dafbe95 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0764_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0765_f000.png b/sa1/graphics/obj_tiles/4bpp/a0765_f000.png new file mode 100644 index 0000000000..8f1296a571 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0765_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0765_f001.png b/sa1/graphics/obj_tiles/4bpp/a0765_f001.png new file mode 100644 index 0000000000..efebae18e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0765_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0765_f002.png b/sa1/graphics/obj_tiles/4bpp/a0765_f002.png new file mode 100644 index 0000000000..0baf465bfb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0765_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0765_f003.png b/sa1/graphics/obj_tiles/4bpp/a0765_f003.png new file mode 100644 index 0000000000..4598566b8b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0765_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0765_f004.png b/sa1/graphics/obj_tiles/4bpp/a0765_f004.png new file mode 100644 index 0000000000..a438fdd18e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0765_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0765_f005.png b/sa1/graphics/obj_tiles/4bpp/a0765_f005.png new file mode 100644 index 0000000000..b4325cc360 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0765_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0765_f006.png b/sa1/graphics/obj_tiles/4bpp/a0765_f006.png new file mode 100644 index 0000000000..ed628f2f20 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0765_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f000.png b/sa1/graphics/obj_tiles/4bpp/a0766_f000.png new file mode 100644 index 0000000000..ff20feca30 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f001.png b/sa1/graphics/obj_tiles/4bpp/a0766_f001.png new file mode 100644 index 0000000000..a7969b033e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f002.png b/sa1/graphics/obj_tiles/4bpp/a0766_f002.png new file mode 100644 index 0000000000..0df18d0cdb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f003.png b/sa1/graphics/obj_tiles/4bpp/a0766_f003.png new file mode 100644 index 0000000000..94de016902 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f004.png b/sa1/graphics/obj_tiles/4bpp/a0766_f004.png new file mode 100644 index 0000000000..61f185f71b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f005.png b/sa1/graphics/obj_tiles/4bpp/a0766_f005.png new file mode 100644 index 0000000000..88f6e3ee8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f006.png b/sa1/graphics/obj_tiles/4bpp/a0766_f006.png new file mode 100644 index 0000000000..7a9a072003 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f007.png b/sa1/graphics/obj_tiles/4bpp/a0766_f007.png new file mode 100644 index 0000000000..e10fa3a050 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f008.png b/sa1/graphics/obj_tiles/4bpp/a0766_f008.png new file mode 100644 index 0000000000..620d78b530 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f009.png b/sa1/graphics/obj_tiles/4bpp/a0766_f009.png new file mode 100644 index 0000000000..d3927a6ecd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f010.png b/sa1/graphics/obj_tiles/4bpp/a0766_f010.png new file mode 100644 index 0000000000..b6d0056631 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0766_f011.png b/sa1/graphics/obj_tiles/4bpp/a0766_f011.png new file mode 100644 index 0000000000..af69890b1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0766_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f000.png b/sa1/graphics/obj_tiles/4bpp/a0767_f000.png new file mode 100644 index 0000000000..cb4f52a828 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f001.png b/sa1/graphics/obj_tiles/4bpp/a0767_f001.png new file mode 100644 index 0000000000..8a3432e098 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f002.png b/sa1/graphics/obj_tiles/4bpp/a0767_f002.png new file mode 100644 index 0000000000..1e49cfb3d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f003.png b/sa1/graphics/obj_tiles/4bpp/a0767_f003.png new file mode 100644 index 0000000000..8c83c9b1fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f004.png b/sa1/graphics/obj_tiles/4bpp/a0767_f004.png new file mode 100644 index 0000000000..93da970e96 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f005.png b/sa1/graphics/obj_tiles/4bpp/a0767_f005.png new file mode 100644 index 0000000000..72b2005633 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f006.png b/sa1/graphics/obj_tiles/4bpp/a0767_f006.png new file mode 100644 index 0000000000..f55dad33e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0767_f007.png b/sa1/graphics/obj_tiles/4bpp/a0767_f007.png new file mode 100644 index 0000000000..c4356eb7a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0767_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f000.png b/sa1/graphics/obj_tiles/4bpp/a0768_f000.png new file mode 100644 index 0000000000..aad65a11b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f001.png b/sa1/graphics/obj_tiles/4bpp/a0768_f001.png new file mode 100644 index 0000000000..a932a58726 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f002.png b/sa1/graphics/obj_tiles/4bpp/a0768_f002.png new file mode 100644 index 0000000000..11987becca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f003.png b/sa1/graphics/obj_tiles/4bpp/a0768_f003.png new file mode 100644 index 0000000000..cbdcee92de Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f004.png b/sa1/graphics/obj_tiles/4bpp/a0768_f004.png new file mode 100644 index 0000000000..e297bfd8bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f005.png b/sa1/graphics/obj_tiles/4bpp/a0768_f005.png new file mode 100644 index 0000000000..8eed1f4948 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f006.png b/sa1/graphics/obj_tiles/4bpp/a0768_f006.png new file mode 100644 index 0000000000..c193fca69e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f007.png b/sa1/graphics/obj_tiles/4bpp/a0768_f007.png new file mode 100644 index 0000000000..8a324a7aa9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f008.png b/sa1/graphics/obj_tiles/4bpp/a0768_f008.png new file mode 100644 index 0000000000..d92917157a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f009.png b/sa1/graphics/obj_tiles/4bpp/a0768_f009.png new file mode 100644 index 0000000000..fcafae50ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f010.png b/sa1/graphics/obj_tiles/4bpp/a0768_f010.png new file mode 100644 index 0000000000..fe9a6e1db2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f011.png b/sa1/graphics/obj_tiles/4bpp/a0768_f011.png new file mode 100644 index 0000000000..71cde328da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f012.png b/sa1/graphics/obj_tiles/4bpp/a0768_f012.png new file mode 100644 index 0000000000..11f83859c1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f013.png b/sa1/graphics/obj_tiles/4bpp/a0768_f013.png new file mode 100644 index 0000000000..695d86ae63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f014.png b/sa1/graphics/obj_tiles/4bpp/a0768_f014.png new file mode 100644 index 0000000000..8504f76092 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f015.png b/sa1/graphics/obj_tiles/4bpp/a0768_f015.png new file mode 100644 index 0000000000..9ef0c25cc2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f016.png b/sa1/graphics/obj_tiles/4bpp/a0768_f016.png new file mode 100644 index 0000000000..3b69c6ddac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f017.png b/sa1/graphics/obj_tiles/4bpp/a0768_f017.png new file mode 100644 index 0000000000..4af40bba6a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f018.png b/sa1/graphics/obj_tiles/4bpp/a0768_f018.png new file mode 100644 index 0000000000..d3d49027c5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f019.png b/sa1/graphics/obj_tiles/4bpp/a0768_f019.png new file mode 100644 index 0000000000..e7df9d3029 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0768_f020.png b/sa1/graphics/obj_tiles/4bpp/a0768_f020.png new file mode 100644 index 0000000000..8060211a42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0768_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0769_f000.png b/sa1/graphics/obj_tiles/4bpp/a0769_f000.png new file mode 100644 index 0000000000..f9b091694f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0769_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0769_f001.png b/sa1/graphics/obj_tiles/4bpp/a0769_f001.png new file mode 100644 index 0000000000..9fa6ede96a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0769_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0769_f002.png b/sa1/graphics/obj_tiles/4bpp/a0769_f002.png new file mode 100644 index 0000000000..568d2404c7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0769_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0769_f003.png b/sa1/graphics/obj_tiles/4bpp/a0769_f003.png new file mode 100644 index 0000000000..65edb5ea21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0769_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0770_f000.png b/sa1/graphics/obj_tiles/4bpp/a0770_f000.png new file mode 100644 index 0000000000..8bcafbba5b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0770_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0770_f001.png b/sa1/graphics/obj_tiles/4bpp/a0770_f001.png new file mode 100644 index 0000000000..b465fffe66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0770_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0770_f002.png b/sa1/graphics/obj_tiles/4bpp/a0770_f002.png new file mode 100644 index 0000000000..0eb927c882 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0770_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0770_f003.png b/sa1/graphics/obj_tiles/4bpp/a0770_f003.png new file mode 100644 index 0000000000..c3c2ef0cab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0770_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0770_f004.png b/sa1/graphics/obj_tiles/4bpp/a0770_f004.png new file mode 100644 index 0000000000..97f694ae4c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0770_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0770_f005.png b/sa1/graphics/obj_tiles/4bpp/a0770_f005.png new file mode 100644 index 0000000000..12b4689552 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0770_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0771_f000.png b/sa1/graphics/obj_tiles/4bpp/a0771_f000.png new file mode 100644 index 0000000000..269674d56b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0771_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0771_f001.png b/sa1/graphics/obj_tiles/4bpp/a0771_f001.png new file mode 100644 index 0000000000..544bd7dd3a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0771_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0771_f002.png b/sa1/graphics/obj_tiles/4bpp/a0771_f002.png new file mode 100644 index 0000000000..c05527fd36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0771_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0771_f003.png b/sa1/graphics/obj_tiles/4bpp/a0771_f003.png new file mode 100644 index 0000000000..1f39b9470a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0771_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0771_f004.png b/sa1/graphics/obj_tiles/4bpp/a0771_f004.png new file mode 100644 index 0000000000..98ff6fce0a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0771_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0771_f005.png b/sa1/graphics/obj_tiles/4bpp/a0771_f005.png new file mode 100644 index 0000000000..68c8b7d3c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0771_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f000.png b/sa1/graphics/obj_tiles/4bpp/a0772_f000.png new file mode 100644 index 0000000000..ff46a8a6a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f001.png b/sa1/graphics/obj_tiles/4bpp/a0772_f001.png new file mode 100644 index 0000000000..93f52b4a59 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f002.png b/sa1/graphics/obj_tiles/4bpp/a0772_f002.png new file mode 100644 index 0000000000..51202451af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f003.png b/sa1/graphics/obj_tiles/4bpp/a0772_f003.png new file mode 100644 index 0000000000..a41165e74c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f004.png b/sa1/graphics/obj_tiles/4bpp/a0772_f004.png new file mode 100644 index 0000000000..3acdb7e532 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f005.png b/sa1/graphics/obj_tiles/4bpp/a0772_f005.png new file mode 100644 index 0000000000..bd8bdd7908 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f006.png b/sa1/graphics/obj_tiles/4bpp/a0772_f006.png new file mode 100644 index 0000000000..c7c119256b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f007.png b/sa1/graphics/obj_tiles/4bpp/a0772_f007.png new file mode 100644 index 0000000000..13fe6cc119 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0772_f008.png b/sa1/graphics/obj_tiles/4bpp/a0772_f008.png new file mode 100644 index 0000000000..ed8eae3b27 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0772_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0773_f000.png b/sa1/graphics/obj_tiles/4bpp/a0773_f000.png new file mode 100644 index 0000000000..fde3268214 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0773_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0773_f001.png b/sa1/graphics/obj_tiles/4bpp/a0773_f001.png new file mode 100644 index 0000000000..229c25b456 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0773_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0773_f002.png b/sa1/graphics/obj_tiles/4bpp/a0773_f002.png new file mode 100644 index 0000000000..744754bb69 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0773_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0773_f003.png b/sa1/graphics/obj_tiles/4bpp/a0773_f003.png new file mode 100644 index 0000000000..14ad90a81e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0773_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0774_f000.png b/sa1/graphics/obj_tiles/4bpp/a0774_f000.png new file mode 100644 index 0000000000..bf619970f5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0774_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0774_f001.png b/sa1/graphics/obj_tiles/4bpp/a0774_f001.png new file mode 100644 index 0000000000..5ee12d5add Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0774_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0774_f002.png b/sa1/graphics/obj_tiles/4bpp/a0774_f002.png new file mode 100644 index 0000000000..a8da9a6a2a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0774_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0774_f003.png b/sa1/graphics/obj_tiles/4bpp/a0774_f003.png new file mode 100644 index 0000000000..bbd8127a7c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0774_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f000.png b/sa1/graphics/obj_tiles/4bpp/a0775_f000.png new file mode 100644 index 0000000000..ff20feca30 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f001.png b/sa1/graphics/obj_tiles/4bpp/a0775_f001.png new file mode 100644 index 0000000000..a7969b033e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f002.png b/sa1/graphics/obj_tiles/4bpp/a0775_f002.png new file mode 100644 index 0000000000..d3927a6ecd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f003.png b/sa1/graphics/obj_tiles/4bpp/a0775_f003.png new file mode 100644 index 0000000000..0df18d0cdb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f004.png b/sa1/graphics/obj_tiles/4bpp/a0775_f004.png new file mode 100644 index 0000000000..61f185f71b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f005.png b/sa1/graphics/obj_tiles/4bpp/a0775_f005.png new file mode 100644 index 0000000000..88f6e3ee8c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f006.png b/sa1/graphics/obj_tiles/4bpp/a0775_f006.png new file mode 100644 index 0000000000..7a9a072003 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f007.png b/sa1/graphics/obj_tiles/4bpp/a0775_f007.png new file mode 100644 index 0000000000..e10fa3a050 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f008.png b/sa1/graphics/obj_tiles/4bpp/a0775_f008.png new file mode 100644 index 0000000000..620d78b530 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f009.png b/sa1/graphics/obj_tiles/4bpp/a0775_f009.png new file mode 100644 index 0000000000..b6d0056631 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0775_f010.png b/sa1/graphics/obj_tiles/4bpp/a0775_f010.png new file mode 100644 index 0000000000..af69890b1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0775_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0777_f000.png b/sa1/graphics/obj_tiles/4bpp/a0777_f000.png new file mode 100644 index 0000000000..07eb6274e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0777_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0777_f001.png b/sa1/graphics/obj_tiles/4bpp/a0777_f001.png new file mode 100644 index 0000000000..6b23f257a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0777_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0777_f002.png b/sa1/graphics/obj_tiles/4bpp/a0777_f002.png new file mode 100644 index 0000000000..c992e263ad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0777_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0777_f003.png b/sa1/graphics/obj_tiles/4bpp/a0777_f003.png new file mode 100644 index 0000000000..22f2dddc73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0777_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0778_f000.png b/sa1/graphics/obj_tiles/4bpp/a0778_f000.png new file mode 100644 index 0000000000..81f48d5e7a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0778_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0778_f001.png b/sa1/graphics/obj_tiles/4bpp/a0778_f001.png new file mode 100644 index 0000000000..5cdc82686a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0778_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0778_f002.png b/sa1/graphics/obj_tiles/4bpp/a0778_f002.png new file mode 100644 index 0000000000..cee9c7ca5d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0778_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0778_f003.png b/sa1/graphics/obj_tiles/4bpp/a0778_f003.png new file mode 100644 index 0000000000..12c5453bc5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0778_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0778_f004.png b/sa1/graphics/obj_tiles/4bpp/a0778_f004.png new file mode 100644 index 0000000000..1b184b16a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0778_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0778_f005.png b/sa1/graphics/obj_tiles/4bpp/a0778_f005.png new file mode 100644 index 0000000000..ead8bc55e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0778_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0779_f000.png b/sa1/graphics/obj_tiles/4bpp/a0779_f000.png new file mode 100644 index 0000000000..e2454ca8cb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0779_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0779_f001.png b/sa1/graphics/obj_tiles/4bpp/a0779_f001.png new file mode 100644 index 0000000000..6494336291 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0779_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0779_f002.png b/sa1/graphics/obj_tiles/4bpp/a0779_f002.png new file mode 100644 index 0000000000..47f450373c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0779_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0779_f003.png b/sa1/graphics/obj_tiles/4bpp/a0779_f003.png new file mode 100644 index 0000000000..6cf8d19012 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0779_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0779_f004.png b/sa1/graphics/obj_tiles/4bpp/a0779_f004.png new file mode 100644 index 0000000000..2822847df5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0779_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0779_f005.png b/sa1/graphics/obj_tiles/4bpp/a0779_f005.png new file mode 100644 index 0000000000..c2ed210f44 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0779_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0780_f000.png b/sa1/graphics/obj_tiles/4bpp/a0780_f000.png new file mode 100644 index 0000000000..48dcaee179 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0780_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0780_f001.png b/sa1/graphics/obj_tiles/4bpp/a0780_f001.png new file mode 100644 index 0000000000..a38ff60fb3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0780_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0781_f000.png b/sa1/graphics/obj_tiles/4bpp/a0781_f000.png new file mode 100644 index 0000000000..68532a0384 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0781_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0781_f001.png b/sa1/graphics/obj_tiles/4bpp/a0781_f001.png new file mode 100644 index 0000000000..dd8ffaabf9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0781_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0781_f002.png b/sa1/graphics/obj_tiles/4bpp/a0781_f002.png new file mode 100644 index 0000000000..0e5f4b4158 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0781_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0781_f003.png b/sa1/graphics/obj_tiles/4bpp/a0781_f003.png new file mode 100644 index 0000000000..585ec9e6d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0781_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0781_f004.png b/sa1/graphics/obj_tiles/4bpp/a0781_f004.png new file mode 100644 index 0000000000..74707af5d9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0781_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0781_f005.png b/sa1/graphics/obj_tiles/4bpp/a0781_f005.png new file mode 100644 index 0000000000..a48515a9a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0781_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0782_f000.png b/sa1/graphics/obj_tiles/4bpp/a0782_f000.png new file mode 100644 index 0000000000..3033307ef5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0782_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0782_f001.png b/sa1/graphics/obj_tiles/4bpp/a0782_f001.png new file mode 100644 index 0000000000..57300263bf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0782_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0782_f002.png b/sa1/graphics/obj_tiles/4bpp/a0782_f002.png new file mode 100644 index 0000000000..be06b6d6be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0782_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0782_f003.png b/sa1/graphics/obj_tiles/4bpp/a0782_f003.png new file mode 100644 index 0000000000..87308fdc16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0782_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0783_f000.png b/sa1/graphics/obj_tiles/4bpp/a0783_f000.png new file mode 100644 index 0000000000..2db3e0f350 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0783_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0784_f000.png b/sa1/graphics/obj_tiles/4bpp/a0784_f000.png new file mode 100644 index 0000000000..b66898cbcf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0784_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0785_f000.png b/sa1/graphics/obj_tiles/4bpp/a0785_f000.png new file mode 100644 index 0000000000..94179924d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0785_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0785_f001.png b/sa1/graphics/obj_tiles/4bpp/a0785_f001.png new file mode 100644 index 0000000000..585c19c52c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0785_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0785_f002.png b/sa1/graphics/obj_tiles/4bpp/a0785_f002.png new file mode 100644 index 0000000000..2e61944d64 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0785_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0786_f000.png b/sa1/graphics/obj_tiles/4bpp/a0786_f000.png new file mode 100644 index 0000000000..ae43f25558 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0786_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0787_f000.png b/sa1/graphics/obj_tiles/4bpp/a0787_f000.png new file mode 100644 index 0000000000..85a4e84bfc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0787_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0788_f000.png b/sa1/graphics/obj_tiles/4bpp/a0788_f000.png new file mode 100644 index 0000000000..e0c5294683 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0788_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0788_f001.png b/sa1/graphics/obj_tiles/4bpp/a0788_f001.png new file mode 100644 index 0000000000..f68fe23b63 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0788_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0788_f002.png b/sa1/graphics/obj_tiles/4bpp/a0788_f002.png new file mode 100644 index 0000000000..d0b63dd58d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0788_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0789_f000.png b/sa1/graphics/obj_tiles/4bpp/a0789_f000.png new file mode 100644 index 0000000000..293af48944 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0789_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0789_f001.png b/sa1/graphics/obj_tiles/4bpp/a0789_f001.png new file mode 100644 index 0000000000..d24e38446e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0789_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0789_f002.png b/sa1/graphics/obj_tiles/4bpp/a0789_f002.png new file mode 100644 index 0000000000..f00b009519 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0789_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0790_f000.png b/sa1/graphics/obj_tiles/4bpp/a0790_f000.png new file mode 100644 index 0000000000..a0160a374b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0790_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0791_f000.png b/sa1/graphics/obj_tiles/4bpp/a0791_f000.png new file mode 100644 index 0000000000..de3d328296 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0791_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0792_f000.png b/sa1/graphics/obj_tiles/4bpp/a0792_f000.png new file mode 100644 index 0000000000..e29fa0a7bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0792_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0793_f000.png b/sa1/graphics/obj_tiles/4bpp/a0793_f000.png new file mode 100644 index 0000000000..7ac4bc954b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0793_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0794_f000.png b/sa1/graphics/obj_tiles/4bpp/a0794_f000.png new file mode 100644 index 0000000000..368feddaf5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0794_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0794_f001.png b/sa1/graphics/obj_tiles/4bpp/a0794_f001.png new file mode 100644 index 0000000000..8452747453 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0794_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0794_f002.png b/sa1/graphics/obj_tiles/4bpp/a0794_f002.png new file mode 100644 index 0000000000..3e0097d1e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0794_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0794_f003.png b/sa1/graphics/obj_tiles/4bpp/a0794_f003.png new file mode 100644 index 0000000000..a00f208b23 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0794_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0794_f004.png b/sa1/graphics/obj_tiles/4bpp/a0794_f004.png new file mode 100644 index 0000000000..8aabc8ccdb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0794_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0794_f005.png b/sa1/graphics/obj_tiles/4bpp/a0794_f005.png new file mode 100644 index 0000000000..9748635b90 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0794_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0795_f000.png b/sa1/graphics/obj_tiles/4bpp/a0795_f000.png new file mode 100644 index 0000000000..bf00940324 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0795_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0795_f001.png b/sa1/graphics/obj_tiles/4bpp/a0795_f001.png new file mode 100644 index 0000000000..46e061a331 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0795_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0795_f002.png b/sa1/graphics/obj_tiles/4bpp/a0795_f002.png new file mode 100644 index 0000000000..65b4d18f8e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0795_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0795_f003.png b/sa1/graphics/obj_tiles/4bpp/a0795_f003.png new file mode 100644 index 0000000000..cf4dec85fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0795_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0796_f000.png b/sa1/graphics/obj_tiles/4bpp/a0796_f000.png new file mode 100644 index 0000000000..8a4694f722 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0796_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0796_f001.png b/sa1/graphics/obj_tiles/4bpp/a0796_f001.png new file mode 100644 index 0000000000..63342e0a73 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0796_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0796_f002.png b/sa1/graphics/obj_tiles/4bpp/a0796_f002.png new file mode 100644 index 0000000000..d9bb67b201 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0796_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0796_f003.png b/sa1/graphics/obj_tiles/4bpp/a0796_f003.png new file mode 100644 index 0000000000..2066078b82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0796_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0797_f000.png b/sa1/graphics/obj_tiles/4bpp/a0797_f000.png new file mode 100644 index 0000000000..80eb5c17f1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0797_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0797_f001.png b/sa1/graphics/obj_tiles/4bpp/a0797_f001.png new file mode 100644 index 0000000000..3b9cea8723 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0797_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0797_f002.png b/sa1/graphics/obj_tiles/4bpp/a0797_f002.png new file mode 100644 index 0000000000..1f9940cab5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0797_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0797_f003.png b/sa1/graphics/obj_tiles/4bpp/a0797_f003.png new file mode 100644 index 0000000000..085e0d9daf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0797_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0797_f004.png b/sa1/graphics/obj_tiles/4bpp/a0797_f004.png new file mode 100644 index 0000000000..71fcd7539e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0797_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0797_f005.png b/sa1/graphics/obj_tiles/4bpp/a0797_f005.png new file mode 100644 index 0000000000..38aadb7142 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0797_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0797_f006.png b/sa1/graphics/obj_tiles/4bpp/a0797_f006.png new file mode 100644 index 0000000000..0e44f1475e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0797_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0798_f000.png b/sa1/graphics/obj_tiles/4bpp/a0798_f000.png new file mode 100644 index 0000000000..615cac8140 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0798_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0798_f001.png b/sa1/graphics/obj_tiles/4bpp/a0798_f001.png new file mode 100644 index 0000000000..643e2c4664 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0798_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0798_f002.png b/sa1/graphics/obj_tiles/4bpp/a0798_f002.png new file mode 100644 index 0000000000..d0bd8c9261 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0798_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0798_f003.png b/sa1/graphics/obj_tiles/4bpp/a0798_f003.png new file mode 100644 index 0000000000..ed5687e533 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0798_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0798_f004.png b/sa1/graphics/obj_tiles/4bpp/a0798_f004.png new file mode 100644 index 0000000000..9c6a15e6ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0798_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0798_f005.png b/sa1/graphics/obj_tiles/4bpp/a0798_f005.png new file mode 100644 index 0000000000..fdbae10c1f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0798_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f000.png b/sa1/graphics/obj_tiles/4bpp/a0799_f000.png new file mode 100644 index 0000000000..1db1742342 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f001.png b/sa1/graphics/obj_tiles/4bpp/a0799_f001.png new file mode 100644 index 0000000000..ea503bbd09 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f002.png b/sa1/graphics/obj_tiles/4bpp/a0799_f002.png new file mode 100644 index 0000000000..ba1b7930c7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f003.png b/sa1/graphics/obj_tiles/4bpp/a0799_f003.png new file mode 100644 index 0000000000..bd709dc12c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f004.png b/sa1/graphics/obj_tiles/4bpp/a0799_f004.png new file mode 100644 index 0000000000..4415d31866 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f005.png b/sa1/graphics/obj_tiles/4bpp/a0799_f005.png new file mode 100644 index 0000000000..bf6c551b70 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f006.png b/sa1/graphics/obj_tiles/4bpp/a0799_f006.png new file mode 100644 index 0000000000..9d567949f4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f007.png b/sa1/graphics/obj_tiles/4bpp/a0799_f007.png new file mode 100644 index 0000000000..c7def0c1fc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f008.png b/sa1/graphics/obj_tiles/4bpp/a0799_f008.png new file mode 100644 index 0000000000..b1a7bb1f11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f009.png b/sa1/graphics/obj_tiles/4bpp/a0799_f009.png new file mode 100644 index 0000000000..e3b8257299 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f010.png b/sa1/graphics/obj_tiles/4bpp/a0799_f010.png new file mode 100644 index 0000000000..0f29295dc1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f011.png b/sa1/graphics/obj_tiles/4bpp/a0799_f011.png new file mode 100644 index 0000000000..d29d4c21ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f012.png b/sa1/graphics/obj_tiles/4bpp/a0799_f012.png new file mode 100644 index 0000000000..0257859ef9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f013.png b/sa1/graphics/obj_tiles/4bpp/a0799_f013.png new file mode 100644 index 0000000000..c0dc53cf5d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f014.png b/sa1/graphics/obj_tiles/4bpp/a0799_f014.png new file mode 100644 index 0000000000..cc72dbab64 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f015.png b/sa1/graphics/obj_tiles/4bpp/a0799_f015.png new file mode 100644 index 0000000000..57a93b7650 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f016.png b/sa1/graphics/obj_tiles/4bpp/a0799_f016.png new file mode 100644 index 0000000000..4c1e091e17 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f017.png b/sa1/graphics/obj_tiles/4bpp/a0799_f017.png new file mode 100644 index 0000000000..9fb1bfe1d0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f018.png b/sa1/graphics/obj_tiles/4bpp/a0799_f018.png new file mode 100644 index 0000000000..a1255feffc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f019.png b/sa1/graphics/obj_tiles/4bpp/a0799_f019.png new file mode 100644 index 0000000000..26e9d1c39e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f020.png b/sa1/graphics/obj_tiles/4bpp/a0799_f020.png new file mode 100644 index 0000000000..bd8689dc0e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f021.png b/sa1/graphics/obj_tiles/4bpp/a0799_f021.png new file mode 100644 index 0000000000..fe931cbfda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f021.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f022.png b/sa1/graphics/obj_tiles/4bpp/a0799_f022.png new file mode 100644 index 0000000000..f535cf7026 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f022.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0799_f023.png b/sa1/graphics/obj_tiles/4bpp/a0799_f023.png new file mode 100644 index 0000000000..8b0460551b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0799_f023.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f000.png b/sa1/graphics/obj_tiles/4bpp/a0800_f000.png new file mode 100644 index 0000000000..769ba58afa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f001.png b/sa1/graphics/obj_tiles/4bpp/a0800_f001.png new file mode 100644 index 0000000000..008fe0d08c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f002.png b/sa1/graphics/obj_tiles/4bpp/a0800_f002.png new file mode 100644 index 0000000000..8f56d41db9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f003.png b/sa1/graphics/obj_tiles/4bpp/a0800_f003.png new file mode 100644 index 0000000000..b269d783b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f004.png b/sa1/graphics/obj_tiles/4bpp/a0800_f004.png new file mode 100644 index 0000000000..12b8512f11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f005.png b/sa1/graphics/obj_tiles/4bpp/a0800_f005.png new file mode 100644 index 0000000000..79098b62f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f006.png b/sa1/graphics/obj_tiles/4bpp/a0800_f006.png new file mode 100644 index 0000000000..d14aa31738 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f007.png b/sa1/graphics/obj_tiles/4bpp/a0800_f007.png new file mode 100644 index 0000000000..4877c22d5e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f008.png b/sa1/graphics/obj_tiles/4bpp/a0800_f008.png new file mode 100644 index 0000000000..defa82e4da Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0800_f009.png b/sa1/graphics/obj_tiles/4bpp/a0800_f009.png new file mode 100644 index 0000000000..1e956b995d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0800_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0801_f000.png b/sa1/graphics/obj_tiles/4bpp/a0801_f000.png new file mode 100644 index 0000000000..08044b3d6d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0801_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0801_f001.png b/sa1/graphics/obj_tiles/4bpp/a0801_f001.png new file mode 100644 index 0000000000..0793a90b64 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0801_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0802_f000.png b/sa1/graphics/obj_tiles/4bpp/a0802_f000.png new file mode 100644 index 0000000000..78b4d2ff1c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0802_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0802_f001.png b/sa1/graphics/obj_tiles/4bpp/a0802_f001.png new file mode 100644 index 0000000000..c2bce71576 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0802_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0802_f002.png b/sa1/graphics/obj_tiles/4bpp/a0802_f002.png new file mode 100644 index 0000000000..9f57d5e56c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0802_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0802_f003.png b/sa1/graphics/obj_tiles/4bpp/a0802_f003.png new file mode 100644 index 0000000000..2267a5c6e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0802_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0802_f004.png b/sa1/graphics/obj_tiles/4bpp/a0802_f004.png new file mode 100644 index 0000000000..9c671a939a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0802_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0805_f000.png b/sa1/graphics/obj_tiles/4bpp/a0805_f000.png new file mode 100644 index 0000000000..af2bfd833a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0805_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0805_f001.png b/sa1/graphics/obj_tiles/4bpp/a0805_f001.png new file mode 100644 index 0000000000..17ba489f24 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0805_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0805_f002.png b/sa1/graphics/obj_tiles/4bpp/a0805_f002.png new file mode 100644 index 0000000000..94eb1eb0f8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0805_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0805_f003.png b/sa1/graphics/obj_tiles/4bpp/a0805_f003.png new file mode 100644 index 0000000000..66f4d370ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0805_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0806_f000.png b/sa1/graphics/obj_tiles/4bpp/a0806_f000.png new file mode 100644 index 0000000000..36cb19ae67 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0806_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0806_f001.png b/sa1/graphics/obj_tiles/4bpp/a0806_f001.png new file mode 100644 index 0000000000..7b67581f93 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0806_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0806_f002.png b/sa1/graphics/obj_tiles/4bpp/a0806_f002.png new file mode 100644 index 0000000000..1e11af2bd8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0806_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f000.png b/sa1/graphics/obj_tiles/4bpp/a0807_f000.png new file mode 100644 index 0000000000..0b46b21a09 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f001.png b/sa1/graphics/obj_tiles/4bpp/a0807_f001.png new file mode 100644 index 0000000000..7e3792c06b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f002.png b/sa1/graphics/obj_tiles/4bpp/a0807_f002.png new file mode 100644 index 0000000000..90058d3d83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f003.png b/sa1/graphics/obj_tiles/4bpp/a0807_f003.png new file mode 100644 index 0000000000..b258dd5356 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f004.png b/sa1/graphics/obj_tiles/4bpp/a0807_f004.png new file mode 100644 index 0000000000..ebcf2f2586 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f005.png b/sa1/graphics/obj_tiles/4bpp/a0807_f005.png new file mode 100644 index 0000000000..eedf64c338 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f006.png b/sa1/graphics/obj_tiles/4bpp/a0807_f006.png new file mode 100644 index 0000000000..3af127b0c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f007.png b/sa1/graphics/obj_tiles/4bpp/a0807_f007.png new file mode 100644 index 0000000000..dac260af50 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0807_f008.png b/sa1/graphics/obj_tiles/4bpp/a0807_f008.png new file mode 100644 index 0000000000..1f9df5f1d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0807_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0808_f000.png b/sa1/graphics/obj_tiles/4bpp/a0808_f000.png new file mode 100644 index 0000000000..dc3a98028c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0808_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0808_f001.png b/sa1/graphics/obj_tiles/4bpp/a0808_f001.png new file mode 100644 index 0000000000..a3fc2abf21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0808_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0808_f002.png b/sa1/graphics/obj_tiles/4bpp/a0808_f002.png new file mode 100644 index 0000000000..70ff2f1784 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0808_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0808_f003.png b/sa1/graphics/obj_tiles/4bpp/a0808_f003.png new file mode 100644 index 0000000000..e5d42629df Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0808_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0808_f004.png b/sa1/graphics/obj_tiles/4bpp/a0808_f004.png new file mode 100644 index 0000000000..eb677069c6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0808_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0809_f000.png b/sa1/graphics/obj_tiles/4bpp/a0809_f000.png new file mode 100644 index 0000000000..5cdd15601c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0809_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0810_f000.png b/sa1/graphics/obj_tiles/4bpp/a0810_f000.png new file mode 100644 index 0000000000..0655e38f30 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0810_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0810_f001.png b/sa1/graphics/obj_tiles/4bpp/a0810_f001.png new file mode 100644 index 0000000000..2429785762 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0810_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0811_f000.png b/sa1/graphics/obj_tiles/4bpp/a0811_f000.png new file mode 100644 index 0000000000..9ec1b57115 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0811_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0812_f000.png b/sa1/graphics/obj_tiles/4bpp/a0812_f000.png new file mode 100644 index 0000000000..11680b3493 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0812_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0812_f001.png b/sa1/graphics/obj_tiles/4bpp/a0812_f001.png new file mode 100644 index 0000000000..c69976a6d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0812_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0812_f002.png b/sa1/graphics/obj_tiles/4bpp/a0812_f002.png new file mode 100644 index 0000000000..736fc3f49d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0812_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0813_f000.png b/sa1/graphics/obj_tiles/4bpp/a0813_f000.png new file mode 100644 index 0000000000..1eae90ec9e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0813_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0813_f001.png b/sa1/graphics/obj_tiles/4bpp/a0813_f001.png new file mode 100644 index 0000000000..fc9d882dcc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0813_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0816_f000.png b/sa1/graphics/obj_tiles/4bpp/a0816_f000.png new file mode 100644 index 0000000000..af88439842 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0816_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0817_f000.png b/sa1/graphics/obj_tiles/4bpp/a0817_f000.png new file mode 100644 index 0000000000..b1dfde9a72 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0817_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0818_f000.png b/sa1/graphics/obj_tiles/4bpp/a0818_f000.png new file mode 100644 index 0000000000..f695768a22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0818_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0819_f000.png b/sa1/graphics/obj_tiles/4bpp/a0819_f000.png new file mode 100644 index 0000000000..a61f1c6d85 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0819_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0820_f000.png b/sa1/graphics/obj_tiles/4bpp/a0820_f000.png new file mode 100644 index 0000000000..75594fcb36 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0820_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0853_f000.png b/sa1/graphics/obj_tiles/4bpp/a0853_f000.png new file mode 100644 index 0000000000..9d7e5c9c0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0853_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0853_f001.png b/sa1/graphics/obj_tiles/4bpp/a0853_f001.png new file mode 100644 index 0000000000..23a5db5d7b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0853_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0853_f002.png b/sa1/graphics/obj_tiles/4bpp/a0853_f002.png new file mode 100644 index 0000000000..71e035a00f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0853_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0853_f003.png b/sa1/graphics/obj_tiles/4bpp/a0853_f003.png new file mode 100644 index 0000000000..bf0c1617a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0853_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0853_f004.png b/sa1/graphics/obj_tiles/4bpp/a0853_f004.png new file mode 100644 index 0000000000..5a4cbeef16 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0853_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0853_f005.png b/sa1/graphics/obj_tiles/4bpp/a0853_f005.png new file mode 100644 index 0000000000..8d6bcf7f3a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0853_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0853_f006.png b/sa1/graphics/obj_tiles/4bpp/a0853_f006.png new file mode 100644 index 0000000000..ee79c8f719 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0853_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f000.png b/sa1/graphics/obj_tiles/4bpp/a0854_f000.png new file mode 100644 index 0000000000..1268c36379 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f001.png b/sa1/graphics/obj_tiles/4bpp/a0854_f001.png new file mode 100644 index 0000000000..d1a79ca8ac Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f002.png b/sa1/graphics/obj_tiles/4bpp/a0854_f002.png new file mode 100644 index 0000000000..9c7fe0ec50 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f003.png b/sa1/graphics/obj_tiles/4bpp/a0854_f003.png new file mode 100644 index 0000000000..f468546ced Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f004.png b/sa1/graphics/obj_tiles/4bpp/a0854_f004.png new file mode 100644 index 0000000000..f3d51ae32d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f005.png b/sa1/graphics/obj_tiles/4bpp/a0854_f005.png new file mode 100644 index 0000000000..d781664ba2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f006.png b/sa1/graphics/obj_tiles/4bpp/a0854_f006.png new file mode 100644 index 0000000000..daf5440a96 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f007.png b/sa1/graphics/obj_tiles/4bpp/a0854_f007.png new file mode 100644 index 0000000000..5ca38b2749 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f008.png b/sa1/graphics/obj_tiles/4bpp/a0854_f008.png new file mode 100644 index 0000000000..1bbf32b373 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f009.png b/sa1/graphics/obj_tiles/4bpp/a0854_f009.png new file mode 100644 index 0000000000..45429a6c2a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f010.png b/sa1/graphics/obj_tiles/4bpp/a0854_f010.png new file mode 100644 index 0000000000..e7ac70de65 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f011.png b/sa1/graphics/obj_tiles/4bpp/a0854_f011.png new file mode 100644 index 0000000000..7bbbf88746 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f012.png b/sa1/graphics/obj_tiles/4bpp/a0854_f012.png new file mode 100644 index 0000000000..e181d493d7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f013.png b/sa1/graphics/obj_tiles/4bpp/a0854_f013.png new file mode 100644 index 0000000000..fb821017a5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0854_f014.png b/sa1/graphics/obj_tiles/4bpp/a0854_f014.png new file mode 100644 index 0000000000..b3a7a52a7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0854_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f000.png b/sa1/graphics/obj_tiles/4bpp/a0855_f000.png new file mode 100644 index 0000000000..2370b2226f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f001.png b/sa1/graphics/obj_tiles/4bpp/a0855_f001.png new file mode 100644 index 0000000000..0f099f20cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f002.png b/sa1/graphics/obj_tiles/4bpp/a0855_f002.png new file mode 100644 index 0000000000..85806aa79a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f003.png b/sa1/graphics/obj_tiles/4bpp/a0855_f003.png new file mode 100644 index 0000000000..0c10642c25 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f004.png b/sa1/graphics/obj_tiles/4bpp/a0855_f004.png new file mode 100644 index 0000000000..ade3ffb4e8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f005.png b/sa1/graphics/obj_tiles/4bpp/a0855_f005.png new file mode 100644 index 0000000000..99f410f195 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f006.png b/sa1/graphics/obj_tiles/4bpp/a0855_f006.png new file mode 100644 index 0000000000..d3c691e3cd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f007.png b/sa1/graphics/obj_tiles/4bpp/a0855_f007.png new file mode 100644 index 0000000000..98767344fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0855_f008.png b/sa1/graphics/obj_tiles/4bpp/a0855_f008.png new file mode 100644 index 0000000000..4cd2aed87c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0855_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0856_f000.png b/sa1/graphics/obj_tiles/4bpp/a0856_f000.png new file mode 100644 index 0000000000..28d5fa55fd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0856_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0856_f001.png b/sa1/graphics/obj_tiles/4bpp/a0856_f001.png new file mode 100644 index 0000000000..de07b4d396 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0856_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0856_f002.png b/sa1/graphics/obj_tiles/4bpp/a0856_f002.png new file mode 100644 index 0000000000..025eb7eb04 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0856_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0856_f003.png b/sa1/graphics/obj_tiles/4bpp/a0856_f003.png new file mode 100644 index 0000000000..e4e6a580af Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0856_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0856_f004.png b/sa1/graphics/obj_tiles/4bpp/a0856_f004.png new file mode 100644 index 0000000000..337eb3ba7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0856_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0857_f000.png b/sa1/graphics/obj_tiles/4bpp/a0857_f000.png new file mode 100644 index 0000000000..ffb09d17ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0857_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0858_f000.png b/sa1/graphics/obj_tiles/4bpp/a0858_f000.png new file mode 100644 index 0000000000..b37820e145 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0858_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0858_f001.png b/sa1/graphics/obj_tiles/4bpp/a0858_f001.png new file mode 100644 index 0000000000..1a7c568d47 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0858_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0858_f002.png b/sa1/graphics/obj_tiles/4bpp/a0858_f002.png new file mode 100644 index 0000000000..3bd183871a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0858_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0858_f003.png b/sa1/graphics/obj_tiles/4bpp/a0858_f003.png new file mode 100644 index 0000000000..77f86922d8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0858_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0859_f000.png b/sa1/graphics/obj_tiles/4bpp/a0859_f000.png new file mode 100644 index 0000000000..f4115d6e26 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0859_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0860_f000.png b/sa1/graphics/obj_tiles/4bpp/a0860_f000.png new file mode 100644 index 0000000000..8f570da805 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0860_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0861_f000.png b/sa1/graphics/obj_tiles/4bpp/a0861_f000.png new file mode 100644 index 0000000000..f63e5331d0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0861_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0861_f001.png b/sa1/graphics/obj_tiles/4bpp/a0861_f001.png new file mode 100644 index 0000000000..dd337abd9a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0861_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0861_f002.png b/sa1/graphics/obj_tiles/4bpp/a0861_f002.png new file mode 100644 index 0000000000..e89446a6c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0861_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0861_f003.png b/sa1/graphics/obj_tiles/4bpp/a0861_f003.png new file mode 100644 index 0000000000..6fe917c19a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0861_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0862_f000.png b/sa1/graphics/obj_tiles/4bpp/a0862_f000.png new file mode 100644 index 0000000000..296ed374e1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0862_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0862_f001.png b/sa1/graphics/obj_tiles/4bpp/a0862_f001.png new file mode 100644 index 0000000000..de1ec009ff Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0862_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0862_f002.png b/sa1/graphics/obj_tiles/4bpp/a0862_f002.png new file mode 100644 index 0000000000..dbfe1753f6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0862_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0862_f003.png b/sa1/graphics/obj_tiles/4bpp/a0862_f003.png new file mode 100644 index 0000000000..927251afb9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0862_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f000.png b/sa1/graphics/obj_tiles/4bpp/a0863_f000.png new file mode 100644 index 0000000000..a2037728ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f001.png b/sa1/graphics/obj_tiles/4bpp/a0863_f001.png new file mode 100644 index 0000000000..722b8b18df Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f002.png b/sa1/graphics/obj_tiles/4bpp/a0863_f002.png new file mode 100644 index 0000000000..a28dfb67db Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f003.png b/sa1/graphics/obj_tiles/4bpp/a0863_f003.png new file mode 100644 index 0000000000..a3c85232bc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f004.png b/sa1/graphics/obj_tiles/4bpp/a0863_f004.png new file mode 100644 index 0000000000..80427931ea Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f005.png b/sa1/graphics/obj_tiles/4bpp/a0863_f005.png new file mode 100644 index 0000000000..d607dc6d09 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f006.png b/sa1/graphics/obj_tiles/4bpp/a0863_f006.png new file mode 100644 index 0000000000..a5d9178721 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f007.png b/sa1/graphics/obj_tiles/4bpp/a0863_f007.png new file mode 100644 index 0000000000..845be41fce Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f008.png b/sa1/graphics/obj_tiles/4bpp/a0863_f008.png new file mode 100644 index 0000000000..2909194992 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f009.png b/sa1/graphics/obj_tiles/4bpp/a0863_f009.png new file mode 100644 index 0000000000..a5f39c828f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f010.png b/sa1/graphics/obj_tiles/4bpp/a0863_f010.png new file mode 100644 index 0000000000..154fda1699 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f011.png b/sa1/graphics/obj_tiles/4bpp/a0863_f011.png new file mode 100644 index 0000000000..c04da7bbc6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f012.png b/sa1/graphics/obj_tiles/4bpp/a0863_f012.png new file mode 100644 index 0000000000..319dfa73bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0863_f013.png b/sa1/graphics/obj_tiles/4bpp/a0863_f013.png new file mode 100644 index 0000000000..f8923c6b43 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0863_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0864_f000.png b/sa1/graphics/obj_tiles/4bpp/a0864_f000.png new file mode 100644 index 0000000000..e3cebb2141 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0864_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0864_f001.png b/sa1/graphics/obj_tiles/4bpp/a0864_f001.png new file mode 100644 index 0000000000..04726f5157 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0864_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0864_f002.png b/sa1/graphics/obj_tiles/4bpp/a0864_f002.png new file mode 100644 index 0000000000..57ebba80aa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0864_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0865_f000.png b/sa1/graphics/obj_tiles/4bpp/a0865_f000.png new file mode 100644 index 0000000000..afa148afa5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0865_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0865_f001.png b/sa1/graphics/obj_tiles/4bpp/a0865_f001.png new file mode 100644 index 0000000000..37d75873ca Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0865_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f000.png b/sa1/graphics/obj_tiles/4bpp/a0866_f000.png new file mode 100644 index 0000000000..53144cbbc5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f001.png b/sa1/graphics/obj_tiles/4bpp/a0866_f001.png new file mode 100644 index 0000000000..5ee42a146c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f002.png b/sa1/graphics/obj_tiles/4bpp/a0866_f002.png new file mode 100644 index 0000000000..646023b001 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f003.png b/sa1/graphics/obj_tiles/4bpp/a0866_f003.png new file mode 100644 index 0000000000..8ff87eaca4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f004.png b/sa1/graphics/obj_tiles/4bpp/a0866_f004.png new file mode 100644 index 0000000000..1d7a08d505 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f005.png b/sa1/graphics/obj_tiles/4bpp/a0866_f005.png new file mode 100644 index 0000000000..2712d91d05 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f006.png b/sa1/graphics/obj_tiles/4bpp/a0866_f006.png new file mode 100644 index 0000000000..0d98b8027f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f007.png b/sa1/graphics/obj_tiles/4bpp/a0866_f007.png new file mode 100644 index 0000000000..23e90724a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f008.png b/sa1/graphics/obj_tiles/4bpp/a0866_f008.png new file mode 100644 index 0000000000..6db8577cda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f009.png b/sa1/graphics/obj_tiles/4bpp/a0866_f009.png new file mode 100644 index 0000000000..400d9acf7e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f010.png b/sa1/graphics/obj_tiles/4bpp/a0866_f010.png new file mode 100644 index 0000000000..60d53e91c5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f011.png b/sa1/graphics/obj_tiles/4bpp/a0866_f011.png new file mode 100644 index 0000000000..bce5f1abde Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f012.png b/sa1/graphics/obj_tiles/4bpp/a0866_f012.png new file mode 100644 index 0000000000..c7e64fec07 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f013.png b/sa1/graphics/obj_tiles/4bpp/a0866_f013.png new file mode 100644 index 0000000000..ffc3b244f9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0866_f014.png b/sa1/graphics/obj_tiles/4bpp/a0866_f014.png new file mode 100644 index 0000000000..a99c1fe02e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0866_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0867_f000.png b/sa1/graphics/obj_tiles/4bpp/a0867_f000.png new file mode 100644 index 0000000000..9d74959cf3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0867_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0868_f000.png b/sa1/graphics/obj_tiles/4bpp/a0868_f000.png new file mode 100644 index 0000000000..9a5ce1c441 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0868_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0868_f001.png b/sa1/graphics/obj_tiles/4bpp/a0868_f001.png new file mode 100644 index 0000000000..d4ad62d126 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0868_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0868_f002.png b/sa1/graphics/obj_tiles/4bpp/a0868_f002.png new file mode 100644 index 0000000000..8ad067b580 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0868_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0869_f000.png b/sa1/graphics/obj_tiles/4bpp/a0869_f000.png new file mode 100644 index 0000000000..41ecbeee07 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0869_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0869_f001.png b/sa1/graphics/obj_tiles/4bpp/a0869_f001.png new file mode 100644 index 0000000000..79ff95e89b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0869_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0869_f002.png b/sa1/graphics/obj_tiles/4bpp/a0869_f002.png new file mode 100644 index 0000000000..1645f0cf22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0869_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0870_f000.png b/sa1/graphics/obj_tiles/4bpp/a0870_f000.png new file mode 100644 index 0000000000..66199ab520 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0870_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0870_f001.png b/sa1/graphics/obj_tiles/4bpp/a0870_f001.png new file mode 100644 index 0000000000..145d037089 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0870_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0870_f002.png b/sa1/graphics/obj_tiles/4bpp/a0870_f002.png new file mode 100644 index 0000000000..8bb1e1c5e6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0870_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0871_f000.png b/sa1/graphics/obj_tiles/4bpp/a0871_f000.png new file mode 100644 index 0000000000..02f1dffcfa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0871_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0872_f000.png b/sa1/graphics/obj_tiles/4bpp/a0872_f000.png new file mode 100644 index 0000000000..abc6a6eadf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0872_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0873_f000.png b/sa1/graphics/obj_tiles/4bpp/a0873_f000.png new file mode 100644 index 0000000000..7d900c4768 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0873_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0874_f000.png b/sa1/graphics/obj_tiles/4bpp/a0874_f000.png new file mode 100644 index 0000000000..cf2b59de76 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0874_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0875_f000.png b/sa1/graphics/obj_tiles/4bpp/a0875_f000.png new file mode 100644 index 0000000000..5019f0bd82 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0875_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0876_f000.png b/sa1/graphics/obj_tiles/4bpp/a0876_f000.png new file mode 100644 index 0000000000..3d2f9f7170 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0876_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0877_f000.png b/sa1/graphics/obj_tiles/4bpp/a0877_f000.png new file mode 100644 index 0000000000..919ffaa9a6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0877_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0877_f001.png b/sa1/graphics/obj_tiles/4bpp/a0877_f001.png new file mode 100644 index 0000000000..9d7218a747 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0877_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0877_f002.png b/sa1/graphics/obj_tiles/4bpp/a0877_f002.png new file mode 100644 index 0000000000..edb61e300b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0877_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0877_f003.png b/sa1/graphics/obj_tiles/4bpp/a0877_f003.png new file mode 100644 index 0000000000..1f6b8483be Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0877_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0878_f000.png b/sa1/graphics/obj_tiles/4bpp/a0878_f000.png new file mode 100644 index 0000000000..a0dd65ab1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0878_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0878_f001.png b/sa1/graphics/obj_tiles/4bpp/a0878_f001.png new file mode 100644 index 0000000000..7c962326a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0878_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0878_f002.png b/sa1/graphics/obj_tiles/4bpp/a0878_f002.png new file mode 100644 index 0000000000..fd1f238743 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0878_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0879_f000.png b/sa1/graphics/obj_tiles/4bpp/a0879_f000.png new file mode 100644 index 0000000000..fe1c239715 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0879_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0879_f001.png b/sa1/graphics/obj_tiles/4bpp/a0879_f001.png new file mode 100644 index 0000000000..e89eedb936 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0879_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0879_f002.png b/sa1/graphics/obj_tiles/4bpp/a0879_f002.png new file mode 100644 index 0000000000..791a02bb66 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0879_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f000.png b/sa1/graphics/obj_tiles/4bpp/a0880_f000.png new file mode 100644 index 0000000000..6024bd4834 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f001.png b/sa1/graphics/obj_tiles/4bpp/a0880_f001.png new file mode 100644 index 0000000000..db439cadd3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f002.png b/sa1/graphics/obj_tiles/4bpp/a0880_f002.png new file mode 100644 index 0000000000..1d9d9829fa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f003.png b/sa1/graphics/obj_tiles/4bpp/a0880_f003.png new file mode 100644 index 0000000000..7253b16e42 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f004.png b/sa1/graphics/obj_tiles/4bpp/a0880_f004.png new file mode 100644 index 0000000000..f319bb3846 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f005.png b/sa1/graphics/obj_tiles/4bpp/a0880_f005.png new file mode 100644 index 0000000000..23686c26b9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f006.png b/sa1/graphics/obj_tiles/4bpp/a0880_f006.png new file mode 100644 index 0000000000..a44509cb61 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f007.png b/sa1/graphics/obj_tiles/4bpp/a0880_f007.png new file mode 100644 index 0000000000..c75e52e88a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f008.png b/sa1/graphics/obj_tiles/4bpp/a0880_f008.png new file mode 100644 index 0000000000..5ac9c1d94b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f009.png b/sa1/graphics/obj_tiles/4bpp/a0880_f009.png new file mode 100644 index 0000000000..736649c32d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f010.png b/sa1/graphics/obj_tiles/4bpp/a0880_f010.png new file mode 100644 index 0000000000..88a4ffceba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f011.png b/sa1/graphics/obj_tiles/4bpp/a0880_f011.png new file mode 100644 index 0000000000..982d96cca7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0880_f012.png b/sa1/graphics/obj_tiles/4bpp/a0880_f012.png new file mode 100644 index 0000000000..23715f41d2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0880_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f000.png b/sa1/graphics/obj_tiles/4bpp/a0881_f000.png new file mode 100644 index 0000000000..8f808e8e00 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f001.png b/sa1/graphics/obj_tiles/4bpp/a0881_f001.png new file mode 100644 index 0000000000..b9245dd661 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f002.png b/sa1/graphics/obj_tiles/4bpp/a0881_f002.png new file mode 100644 index 0000000000..d5e649bc44 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f003.png b/sa1/graphics/obj_tiles/4bpp/a0881_f003.png new file mode 100644 index 0000000000..0858913fdf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f004.png b/sa1/graphics/obj_tiles/4bpp/a0881_f004.png new file mode 100644 index 0000000000..15d4f931cf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f005.png b/sa1/graphics/obj_tiles/4bpp/a0881_f005.png new file mode 100644 index 0000000000..53b12093cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f006.png b/sa1/graphics/obj_tiles/4bpp/a0881_f006.png new file mode 100644 index 0000000000..5ed4d4b853 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f007.png b/sa1/graphics/obj_tiles/4bpp/a0881_f007.png new file mode 100644 index 0000000000..db8e46461c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f008.png b/sa1/graphics/obj_tiles/4bpp/a0881_f008.png new file mode 100644 index 0000000000..b82aed5dd1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f009.png b/sa1/graphics/obj_tiles/4bpp/a0881_f009.png new file mode 100644 index 0000000000..338cecc260 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f010.png b/sa1/graphics/obj_tiles/4bpp/a0881_f010.png new file mode 100644 index 0000000000..744c8d73e9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0881_f011.png b/sa1/graphics/obj_tiles/4bpp/a0881_f011.png new file mode 100644 index 0000000000..4c9bff88b7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0881_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0882_f000.png b/sa1/graphics/obj_tiles/4bpp/a0882_f000.png new file mode 100644 index 0000000000..3e13843f00 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0882_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0882_f001.png b/sa1/graphics/obj_tiles/4bpp/a0882_f001.png new file mode 100644 index 0000000000..10d7879182 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0882_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f000.png b/sa1/graphics/obj_tiles/4bpp/a0883_f000.png new file mode 100644 index 0000000000..500c9a736f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f001.png b/sa1/graphics/obj_tiles/4bpp/a0883_f001.png new file mode 100644 index 0000000000..05c40f9ac4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f002.png b/sa1/graphics/obj_tiles/4bpp/a0883_f002.png new file mode 100644 index 0000000000..383b6b1c68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f003.png b/sa1/graphics/obj_tiles/4bpp/a0883_f003.png new file mode 100644 index 0000000000..e43fd7cc29 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f004.png b/sa1/graphics/obj_tiles/4bpp/a0883_f004.png new file mode 100644 index 0000000000..77251cb579 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f005.png b/sa1/graphics/obj_tiles/4bpp/a0883_f005.png new file mode 100644 index 0000000000..ddef239050 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f006.png b/sa1/graphics/obj_tiles/4bpp/a0883_f006.png new file mode 100644 index 0000000000..ffdbaac1f2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f007.png b/sa1/graphics/obj_tiles/4bpp/a0883_f007.png new file mode 100644 index 0000000000..d08804446a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f008.png b/sa1/graphics/obj_tiles/4bpp/a0883_f008.png new file mode 100644 index 0000000000..02c95f46c3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f009.png b/sa1/graphics/obj_tiles/4bpp/a0883_f009.png new file mode 100644 index 0000000000..a24038686b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f010.png b/sa1/graphics/obj_tiles/4bpp/a0883_f010.png new file mode 100644 index 0000000000..b03ecaeace Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f011.png b/sa1/graphics/obj_tiles/4bpp/a0883_f011.png new file mode 100644 index 0000000000..d1f81ff92b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0883_f012.png b/sa1/graphics/obj_tiles/4bpp/a0883_f012.png new file mode 100644 index 0000000000..d93c6596e0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0883_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0884_f000.png b/sa1/graphics/obj_tiles/4bpp/a0884_f000.png new file mode 100644 index 0000000000..86f96d0d68 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0884_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0884_f001.png b/sa1/graphics/obj_tiles/4bpp/a0884_f001.png new file mode 100644 index 0000000000..5707d9fcf3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0884_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0884_f002.png b/sa1/graphics/obj_tiles/4bpp/a0884_f002.png new file mode 100644 index 0000000000..32b1bcf1fc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0884_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0884_f003.png b/sa1/graphics/obj_tiles/4bpp/a0884_f003.png new file mode 100644 index 0000000000..229ffc2e45 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0884_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0884_f004.png b/sa1/graphics/obj_tiles/4bpp/a0884_f004.png new file mode 100644 index 0000000000..b411b09c31 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0884_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f000.png b/sa1/graphics/obj_tiles/4bpp/a0885_f000.png new file mode 100644 index 0000000000..40a98fe5c0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f001.png b/sa1/graphics/obj_tiles/4bpp/a0885_f001.png new file mode 100644 index 0000000000..c19e3a4142 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f002.png b/sa1/graphics/obj_tiles/4bpp/a0885_f002.png new file mode 100644 index 0000000000..d24b68b996 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f003.png b/sa1/graphics/obj_tiles/4bpp/a0885_f003.png new file mode 100644 index 0000000000..fed212cca1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f004.png b/sa1/graphics/obj_tiles/4bpp/a0885_f004.png new file mode 100644 index 0000000000..963cf95069 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f005.png b/sa1/graphics/obj_tiles/4bpp/a0885_f005.png new file mode 100644 index 0000000000..ae3fc6321b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f006.png b/sa1/graphics/obj_tiles/4bpp/a0885_f006.png new file mode 100644 index 0000000000..4bc9b2efe6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f007.png b/sa1/graphics/obj_tiles/4bpp/a0885_f007.png new file mode 100644 index 0000000000..34cd6d9880 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f008.png b/sa1/graphics/obj_tiles/4bpp/a0885_f008.png new file mode 100644 index 0000000000..75677fc547 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f009.png b/sa1/graphics/obj_tiles/4bpp/a0885_f009.png new file mode 100644 index 0000000000..8cd0d899fb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0885_f010.png b/sa1/graphics/obj_tiles/4bpp/a0885_f010.png new file mode 100644 index 0000000000..2864be8224 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0885_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0886_f000.png b/sa1/graphics/obj_tiles/4bpp/a0886_f000.png new file mode 100644 index 0000000000..864c474718 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0886_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f000.png b/sa1/graphics/obj_tiles/4bpp/a0887_f000.png new file mode 100644 index 0000000000..25994b95bd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f001.png b/sa1/graphics/obj_tiles/4bpp/a0887_f001.png new file mode 100644 index 0000000000..f9437d204e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f002.png b/sa1/graphics/obj_tiles/4bpp/a0887_f002.png new file mode 100644 index 0000000000..84c7ea8d51 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f003.png b/sa1/graphics/obj_tiles/4bpp/a0887_f003.png new file mode 100644 index 0000000000..204ae397cc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f004.png b/sa1/graphics/obj_tiles/4bpp/a0887_f004.png new file mode 100644 index 0000000000..fcc2028f20 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f005.png b/sa1/graphics/obj_tiles/4bpp/a0887_f005.png new file mode 100644 index 0000000000..960b6ecdf5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f006.png b/sa1/graphics/obj_tiles/4bpp/a0887_f006.png new file mode 100644 index 0000000000..a5516ab061 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f007.png b/sa1/graphics/obj_tiles/4bpp/a0887_f007.png new file mode 100644 index 0000000000..3ea5a6fe72 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f008.png b/sa1/graphics/obj_tiles/4bpp/a0887_f008.png new file mode 100644 index 0000000000..4be7fbd2bb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f009.png b/sa1/graphics/obj_tiles/4bpp/a0887_f009.png new file mode 100644 index 0000000000..a01861d88b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f010.png b/sa1/graphics/obj_tiles/4bpp/a0887_f010.png new file mode 100644 index 0000000000..8c4394942c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f011.png b/sa1/graphics/obj_tiles/4bpp/a0887_f011.png new file mode 100644 index 0000000000..bb889818d6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f012.png b/sa1/graphics/obj_tiles/4bpp/a0887_f012.png new file mode 100644 index 0000000000..1f5ac6f322 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f013.png b/sa1/graphics/obj_tiles/4bpp/a0887_f013.png new file mode 100644 index 0000000000..53d186c5cb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f014.png b/sa1/graphics/obj_tiles/4bpp/a0887_f014.png new file mode 100644 index 0000000000..668f0b3c83 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f015.png b/sa1/graphics/obj_tiles/4bpp/a0887_f015.png new file mode 100644 index 0000000000..104cb37acf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f016.png b/sa1/graphics/obj_tiles/4bpp/a0887_f016.png new file mode 100644 index 0000000000..ac9c3d2d19 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f017.png b/sa1/graphics/obj_tiles/4bpp/a0887_f017.png new file mode 100644 index 0000000000..56d68ae90a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0887_f018.png b/sa1/graphics/obj_tiles/4bpp/a0887_f018.png new file mode 100644 index 0000000000..27980d9cf3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0887_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f000.png b/sa1/graphics/obj_tiles/4bpp/a0888_f000.png new file mode 100644 index 0000000000..ef174a25a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f001.png b/sa1/graphics/obj_tiles/4bpp/a0888_f001.png new file mode 100644 index 0000000000..39ffe3fd8f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f002.png b/sa1/graphics/obj_tiles/4bpp/a0888_f002.png new file mode 100644 index 0000000000..1ad4bcd4d8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f003.png b/sa1/graphics/obj_tiles/4bpp/a0888_f003.png new file mode 100644 index 0000000000..471a31aa4a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f004.png b/sa1/graphics/obj_tiles/4bpp/a0888_f004.png new file mode 100644 index 0000000000..ec3e4d9c51 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f005.png b/sa1/graphics/obj_tiles/4bpp/a0888_f005.png new file mode 100644 index 0000000000..ec52c39650 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f006.png b/sa1/graphics/obj_tiles/4bpp/a0888_f006.png new file mode 100644 index 0000000000..6f7e46b695 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f007.png b/sa1/graphics/obj_tiles/4bpp/a0888_f007.png new file mode 100644 index 0000000000..3174807629 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f008.png b/sa1/graphics/obj_tiles/4bpp/a0888_f008.png new file mode 100644 index 0000000000..2ea0df7992 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f009.png b/sa1/graphics/obj_tiles/4bpp/a0888_f009.png new file mode 100644 index 0000000000..790b85b8a1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f010.png b/sa1/graphics/obj_tiles/4bpp/a0888_f010.png new file mode 100644 index 0000000000..22bb6afecc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0888_f011.png b/sa1/graphics/obj_tiles/4bpp/a0888_f011.png new file mode 100644 index 0000000000..c451e04d3a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0888_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0889_f000.png b/sa1/graphics/obj_tiles/4bpp/a0889_f000.png new file mode 100644 index 0000000000..b4124f4e28 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0889_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0890_f000.png b/sa1/graphics/obj_tiles/4bpp/a0890_f000.png new file mode 100644 index 0000000000..0b6e221351 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0890_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f000.png b/sa1/graphics/obj_tiles/4bpp/a0891_f000.png new file mode 100644 index 0000000000..a4d6df4cda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f001.png b/sa1/graphics/obj_tiles/4bpp/a0891_f001.png new file mode 100644 index 0000000000..a312ec7585 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f002.png b/sa1/graphics/obj_tiles/4bpp/a0891_f002.png new file mode 100644 index 0000000000..a9cff5d524 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f003.png b/sa1/graphics/obj_tiles/4bpp/a0891_f003.png new file mode 100644 index 0000000000..9e71389293 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f004.png b/sa1/graphics/obj_tiles/4bpp/a0891_f004.png new file mode 100644 index 0000000000..48103f3a5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f005.png b/sa1/graphics/obj_tiles/4bpp/a0891_f005.png new file mode 100644 index 0000000000..c08a5c628d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f006.png b/sa1/graphics/obj_tiles/4bpp/a0891_f006.png new file mode 100644 index 0000000000..bef88674b0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f007.png b/sa1/graphics/obj_tiles/4bpp/a0891_f007.png new file mode 100644 index 0000000000..3ceb40c936 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f008.png b/sa1/graphics/obj_tiles/4bpp/a0891_f008.png new file mode 100644 index 0000000000..890268c124 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0891_f009.png b/sa1/graphics/obj_tiles/4bpp/a0891_f009.png new file mode 100644 index 0000000000..56b1db471a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0891_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0892_f000.png b/sa1/graphics/obj_tiles/4bpp/a0892_f000.png new file mode 100644 index 0000000000..f39d53e549 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0892_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0892_f001.png b/sa1/graphics/obj_tiles/4bpp/a0892_f001.png new file mode 100644 index 0000000000..1354629602 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0892_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0892_f002.png b/sa1/graphics/obj_tiles/4bpp/a0892_f002.png new file mode 100644 index 0000000000..6e8d843ec9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0892_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0892_f003.png b/sa1/graphics/obj_tiles/4bpp/a0892_f003.png new file mode 100644 index 0000000000..c8c979eb21 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0892_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0893_f000.png b/sa1/graphics/obj_tiles/4bpp/a0893_f000.png new file mode 100644 index 0000000000..13a701e241 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0893_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f000.png b/sa1/graphics/obj_tiles/4bpp/a0894_f000.png new file mode 100644 index 0000000000..bef63fb50c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f001.png b/sa1/graphics/obj_tiles/4bpp/a0894_f001.png new file mode 100644 index 0000000000..ae2d375be8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f002.png b/sa1/graphics/obj_tiles/4bpp/a0894_f002.png new file mode 100644 index 0000000000..4c41ad0d7d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f003.png b/sa1/graphics/obj_tiles/4bpp/a0894_f003.png new file mode 100644 index 0000000000..dd1fe65e22 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f004.png b/sa1/graphics/obj_tiles/4bpp/a0894_f004.png new file mode 100644 index 0000000000..33c1d42510 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f005.png b/sa1/graphics/obj_tiles/4bpp/a0894_f005.png new file mode 100644 index 0000000000..fecc5181a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f006.png b/sa1/graphics/obj_tiles/4bpp/a0894_f006.png new file mode 100644 index 0000000000..9bcc497173 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f007.png b/sa1/graphics/obj_tiles/4bpp/a0894_f007.png new file mode 100644 index 0000000000..77ebdf3999 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0894_f008.png b/sa1/graphics/obj_tiles/4bpp/a0894_f008.png new file mode 100644 index 0000000000..1add5f1f0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0894_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0895_f000.png b/sa1/graphics/obj_tiles/4bpp/a0895_f000.png new file mode 100644 index 0000000000..61698ad1e1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0895_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0895_f001.png b/sa1/graphics/obj_tiles/4bpp/a0895_f001.png new file mode 100644 index 0000000000..335a7deec5 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0895_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f000.png b/sa1/graphics/obj_tiles/4bpp/a0896_f000.png new file mode 100644 index 0000000000..298b59ffc9 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f001.png b/sa1/graphics/obj_tiles/4bpp/a0896_f001.png new file mode 100644 index 0000000000..11a6b5e32a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f002.png b/sa1/graphics/obj_tiles/4bpp/a0896_f002.png new file mode 100644 index 0000000000..2328fb574e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f003.png b/sa1/graphics/obj_tiles/4bpp/a0896_f003.png new file mode 100644 index 0000000000..4ac060328c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f004.png b/sa1/graphics/obj_tiles/4bpp/a0896_f004.png new file mode 100644 index 0000000000..da214947ab Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f005.png b/sa1/graphics/obj_tiles/4bpp/a0896_f005.png new file mode 100644 index 0000000000..2d1366f0e1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f006.png b/sa1/graphics/obj_tiles/4bpp/a0896_f006.png new file mode 100644 index 0000000000..93b3588790 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f007.png b/sa1/graphics/obj_tiles/4bpp/a0896_f007.png new file mode 100644 index 0000000000..5d9ba568c1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f008.png b/sa1/graphics/obj_tiles/4bpp/a0896_f008.png new file mode 100644 index 0000000000..4ce3cf39d1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f009.png b/sa1/graphics/obj_tiles/4bpp/a0896_f009.png new file mode 100644 index 0000000000..546d51609e Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f010.png b/sa1/graphics/obj_tiles/4bpp/a0896_f010.png new file mode 100644 index 0000000000..93de4a2b23 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f011.png b/sa1/graphics/obj_tiles/4bpp/a0896_f011.png new file mode 100644 index 0000000000..d0188d341c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f012.png b/sa1/graphics/obj_tiles/4bpp/a0896_f012.png new file mode 100644 index 0000000000..95acde7680 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0896_f013.png b/sa1/graphics/obj_tiles/4bpp/a0896_f013.png new file mode 100644 index 0000000000..a4ad052845 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0896_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0897_f000.png b/sa1/graphics/obj_tiles/4bpp/a0897_f000.png new file mode 100644 index 0000000000..edc7a308e4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0897_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0897_f001.png b/sa1/graphics/obj_tiles/4bpp/a0897_f001.png new file mode 100644 index 0000000000..12f83b4085 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0897_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0898_f000.png b/sa1/graphics/obj_tiles/4bpp/a0898_f000.png new file mode 100644 index 0000000000..c0541b8995 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0898_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0898_f001.png b/sa1/graphics/obj_tiles/4bpp/a0898_f001.png new file mode 100644 index 0000000000..a3deccda0b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0898_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0898_f002.png b/sa1/graphics/obj_tiles/4bpp/a0898_f002.png new file mode 100644 index 0000000000..6491d3afe4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0898_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0898_f003.png b/sa1/graphics/obj_tiles/4bpp/a0898_f003.png new file mode 100644 index 0000000000..29b2be110b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0898_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f000.png b/sa1/graphics/obj_tiles/4bpp/a0899_f000.png new file mode 100644 index 0000000000..a5b495bb9c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f001.png b/sa1/graphics/obj_tiles/4bpp/a0899_f001.png new file mode 100644 index 0000000000..8485fc9d98 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f002.png b/sa1/graphics/obj_tiles/4bpp/a0899_f002.png new file mode 100644 index 0000000000..0c318a3f5a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f003.png b/sa1/graphics/obj_tiles/4bpp/a0899_f003.png new file mode 100644 index 0000000000..98a854fbe2 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f004.png b/sa1/graphics/obj_tiles/4bpp/a0899_f004.png new file mode 100644 index 0000000000..8320ca264a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f005.png b/sa1/graphics/obj_tiles/4bpp/a0899_f005.png new file mode 100644 index 0000000000..654beb7fc1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f006.png b/sa1/graphics/obj_tiles/4bpp/a0899_f006.png new file mode 100644 index 0000000000..4bc9b2efe6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f007.png b/sa1/graphics/obj_tiles/4bpp/a0899_f007.png new file mode 100644 index 0000000000..91f5f2214f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f008.png b/sa1/graphics/obj_tiles/4bpp/a0899_f008.png new file mode 100644 index 0000000000..4715ac3edd Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f009.png b/sa1/graphics/obj_tiles/4bpp/a0899_f009.png new file mode 100644 index 0000000000..2d99202b11 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0899_f010.png b/sa1/graphics/obj_tiles/4bpp/a0899_f010.png new file mode 100644 index 0000000000..e211011e26 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0899_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0900_f000.png b/sa1/graphics/obj_tiles/4bpp/a0900_f000.png new file mode 100644 index 0000000000..0e7fd8a974 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0900_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0900_f001.png b/sa1/graphics/obj_tiles/4bpp/a0900_f001.png new file mode 100644 index 0000000000..906c9b8df3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0900_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0900_f002.png b/sa1/graphics/obj_tiles/4bpp/a0900_f002.png new file mode 100644 index 0000000000..725495a733 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0900_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0901_f000.png b/sa1/graphics/obj_tiles/4bpp/a0901_f000.png new file mode 100644 index 0000000000..df42331191 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0901_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0901_f001.png b/sa1/graphics/obj_tiles/4bpp/a0901_f001.png new file mode 100644 index 0000000000..b4b6088b5b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0901_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0902_f000.png b/sa1/graphics/obj_tiles/4bpp/a0902_f000.png new file mode 100644 index 0000000000..4c0edb705a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0902_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0902_f001.png b/sa1/graphics/obj_tiles/4bpp/a0902_f001.png new file mode 100644 index 0000000000..61642351ef Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0902_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0902_f002.png b/sa1/graphics/obj_tiles/4bpp/a0902_f002.png new file mode 100644 index 0000000000..0b0a55725d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0902_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0902_f003.png b/sa1/graphics/obj_tiles/4bpp/a0902_f003.png new file mode 100644 index 0000000000..87814cc19b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0902_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0903_f000.png b/sa1/graphics/obj_tiles/4bpp/a0903_f000.png new file mode 100644 index 0000000000..3a69719735 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0903_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0903_f001.png b/sa1/graphics/obj_tiles/4bpp/a0903_f001.png new file mode 100644 index 0000000000..5b878b0189 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0903_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0903_f002.png b/sa1/graphics/obj_tiles/4bpp/a0903_f002.png new file mode 100644 index 0000000000..b4341d4102 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0903_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0903_f003.png b/sa1/graphics/obj_tiles/4bpp/a0903_f003.png new file mode 100644 index 0000000000..19378955e7 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0903_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0904_f000.png b/sa1/graphics/obj_tiles/4bpp/a0904_f000.png new file mode 100644 index 0000000000..fea8d2dfaa Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0904_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0904_f001.png b/sa1/graphics/obj_tiles/4bpp/a0904_f001.png new file mode 100644 index 0000000000..99463fa0ad Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0904_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0904_f002.png b/sa1/graphics/obj_tiles/4bpp/a0904_f002.png new file mode 100644 index 0000000000..2ad5da6c3b Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0904_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0904_f003.png b/sa1/graphics/obj_tiles/4bpp/a0904_f003.png new file mode 100644 index 0000000000..112887be15 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0904_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0904_f004.png b/sa1/graphics/obj_tiles/4bpp/a0904_f004.png new file mode 100644 index 0000000000..b9503e0bcf Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0904_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0904_f005.png b/sa1/graphics/obj_tiles/4bpp/a0904_f005.png new file mode 100644 index 0000000000..1247613bda Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0904_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0904_f006.png b/sa1/graphics/obj_tiles/4bpp/a0904_f006.png new file mode 100644 index 0000000000..b8b73d597f Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0904_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0905_f000.png b/sa1/graphics/obj_tiles/4bpp/a0905_f000.png new file mode 100644 index 0000000000..213aa2886c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0905_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0906_f000.png b/sa1/graphics/obj_tiles/4bpp/a0906_f000.png new file mode 100644 index 0000000000..cae11594ed Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0906_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f000.png b/sa1/graphics/obj_tiles/4bpp/a0907_f000.png new file mode 100644 index 0000000000..f982994146 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f000.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f001.png b/sa1/graphics/obj_tiles/4bpp/a0907_f001.png new file mode 100644 index 0000000000..5eab30dea3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f001.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f002.png b/sa1/graphics/obj_tiles/4bpp/a0907_f002.png new file mode 100644 index 0000000000..873a49982c Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f002.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f003.png b/sa1/graphics/obj_tiles/4bpp/a0907_f003.png new file mode 100644 index 0000000000..a86c6e4427 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f003.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f004.png b/sa1/graphics/obj_tiles/4bpp/a0907_f004.png new file mode 100644 index 0000000000..bd83727538 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f004.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f005.png b/sa1/graphics/obj_tiles/4bpp/a0907_f005.png new file mode 100644 index 0000000000..767b153e1a Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f005.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f006.png b/sa1/graphics/obj_tiles/4bpp/a0907_f006.png new file mode 100644 index 0000000000..b349c644a4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f006.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f007.png b/sa1/graphics/obj_tiles/4bpp/a0907_f007.png new file mode 100644 index 0000000000..6b3fc3e6d4 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f007.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f008.png b/sa1/graphics/obj_tiles/4bpp/a0907_f008.png new file mode 100644 index 0000000000..c3b3f5c5dc Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f008.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f009.png b/sa1/graphics/obj_tiles/4bpp/a0907_f009.png new file mode 100644 index 0000000000..75a794a9a0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f009.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f010.png b/sa1/graphics/obj_tiles/4bpp/a0907_f010.png new file mode 100644 index 0000000000..a2495d6eeb Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f010.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f011.png b/sa1/graphics/obj_tiles/4bpp/a0907_f011.png new file mode 100644 index 0000000000..188fce5d1d Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f011.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f012.png b/sa1/graphics/obj_tiles/4bpp/a0907_f012.png new file mode 100644 index 0000000000..3edfe2b5ba Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f012.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f013.png b/sa1/graphics/obj_tiles/4bpp/a0907_f013.png new file mode 100644 index 0000000000..1ebaa7a7ee Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f013.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f014.png b/sa1/graphics/obj_tiles/4bpp/a0907_f014.png new file mode 100644 index 0000000000..82f00d88a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f014.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f015.png b/sa1/graphics/obj_tiles/4bpp/a0907_f015.png new file mode 100644 index 0000000000..d41df7d033 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f015.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f016.png b/sa1/graphics/obj_tiles/4bpp/a0907_f016.png new file mode 100644 index 0000000000..546c4be7f0 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f016.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f017.png b/sa1/graphics/obj_tiles/4bpp/a0907_f017.png new file mode 100644 index 0000000000..01be3cd9a8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f017.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f018.png b/sa1/graphics/obj_tiles/4bpp/a0907_f018.png new file mode 100644 index 0000000000..b7109526b1 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f018.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f019.png b/sa1/graphics/obj_tiles/4bpp/a0907_f019.png new file mode 100644 index 0000000000..8ff06deaf6 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f019.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f020.png b/sa1/graphics/obj_tiles/4bpp/a0907_f020.png new file mode 100644 index 0000000000..55ced01fc8 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f020.png differ diff --git a/sa1/graphics/obj_tiles/4bpp/a0907_f021.png b/sa1/graphics/obj_tiles/4bpp/a0907_f021.png new file mode 100644 index 0000000000..3583e53561 Binary files /dev/null and b/sa1/graphics/obj_tiles/4bpp/a0907_f021.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0666_f000.png b/sa1/graphics/obj_tiles/8bpp/a0666_f000.png new file mode 100644 index 0000000000..4f98dc62b8 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0666_f000.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0666_f001.png b/sa1/graphics/obj_tiles/8bpp/a0666_f001.png new file mode 100644 index 0000000000..29a0f989ba Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0666_f001.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0737_f000.png b/sa1/graphics/obj_tiles/8bpp/a0737_f000.png new file mode 100644 index 0000000000..c5b7cf6f6e Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0737_f000.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0737_f001.png b/sa1/graphics/obj_tiles/8bpp/a0737_f001.png new file mode 100644 index 0000000000..ca9789ffc6 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0737_f001.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0737_f002.png b/sa1/graphics/obj_tiles/8bpp/a0737_f002.png new file mode 100644 index 0000000000..072a157c68 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0737_f002.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0737_f003.png b/sa1/graphics/obj_tiles/8bpp/a0737_f003.png new file mode 100644 index 0000000000..0e8ba587a7 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0737_f003.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0738_f000.png b/sa1/graphics/obj_tiles/8bpp/a0738_f000.png new file mode 100644 index 0000000000..b779ad6022 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0738_f000.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0738_f001.png b/sa1/graphics/obj_tiles/8bpp/a0738_f001.png new file mode 100644 index 0000000000..b448a41e0c Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0738_f001.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0738_f002.png b/sa1/graphics/obj_tiles/8bpp/a0738_f002.png new file mode 100644 index 0000000000..e2a498e293 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0738_f002.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0738_f003.png b/sa1/graphics/obj_tiles/8bpp/a0738_f003.png new file mode 100644 index 0000000000..eb30b12c25 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0738_f003.png differ diff --git a/sa1/graphics/obj_tiles/8bpp/a0776_f000.png b/sa1/graphics/obj_tiles/8bpp/a0776_f000.png new file mode 100644 index 0000000000..12117094a3 Binary files /dev/null and b/sa1/graphics/obj_tiles/8bpp/a0776_f000.png differ diff --git a/sa1/graphics/obj_tiles_4bpp.inc b/sa1/graphics/obj_tiles_4bpp.inc new file mode 100644 index 0000000000..2f72929490 --- /dev/null +++ b/sa1/graphics/obj_tiles_4bpp.inc @@ -0,0 +1,3974 @@ +.incbin "graphics/obj_tiles/4bpp/a0000_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0000_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0001_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0002_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0002_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0002_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0002_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0002_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0003_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0003_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0003_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0003_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0004_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0005_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0005_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0005_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0005_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0006_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0006_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0007_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0007_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0007_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0007_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0008_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0008_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0008_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0008_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0009_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0009_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0009_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0010_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0011_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0012_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0013_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0014_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0017_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0017_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0018_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0019_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0019_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0019_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0019_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0019_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0021_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0021_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0021_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0021_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0021_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0022_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0023_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0024_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0024_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0024_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0024_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0024_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0024_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0025_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0025_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0025_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0025_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0026_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0027_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0028_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0029_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0029_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0029_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0030_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0031_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0032_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0032_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0032_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0032_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0032_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0032_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0032_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0033_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0033_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0033_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0034_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0035_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0036_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0037_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0038_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0038_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0038_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0038_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0038_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0039_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0039_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0039_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0039_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0040_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0041_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0041_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0041_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0041_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0041_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0042_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0043_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0043_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0043_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0044_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0044_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0044_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0044_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0045_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0049_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0050_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0051_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0051_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0051_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0051_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0052_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0053_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0053_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0053_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0053_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0053_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0053_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0055_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0055_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0055_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0055_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0081_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0081_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0081_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0081_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0082_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0082_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0082_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0082_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0083_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0083_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0083_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0083_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0084_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0084_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0084_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0084_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0085_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0085_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0086_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0086_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0086_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0087_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0087_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0088_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0088_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0088_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0088_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0088_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0089_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0089_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0089_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0089_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0089_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0091_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0091_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0093_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0096_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0096_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0096_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0096_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0097_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0097_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0097_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0098_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0099_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0100_f024.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0101_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0101_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0101_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0101_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0101_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0101_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0102_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0103_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0104_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0105_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0105_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0106_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0106_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0106_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0106_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0107_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0108_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0108_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0108_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0108_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0109_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0110_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0111_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0112_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0113_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0116_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0116_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0117_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0118_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0118_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0118_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0118_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0118_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0120_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0120_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0120_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0120_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0120_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0121_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f024.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f025.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f026.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0122_f027.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0123_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0124_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0124_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0124_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0124_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0125_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0126_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0127_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0128_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0128_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0128_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0129_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0130_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0131_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0132_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0133_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0134_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0135_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0136_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0137_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0137_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0137_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0137_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0137_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0138_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0139_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0140_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0140_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0140_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0140_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0140_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0140_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0141_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0142_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0142_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0142_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0145_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0146_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0146_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0147_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0149_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0155_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0156_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0156_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0157_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0158_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0158_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0158_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0158_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0158_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0158_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0158_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0180_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0180_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0180_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0181_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0181_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0181_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0182_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0182_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0182_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0184_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0184_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0185_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0185_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0185_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0186_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0187_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0187_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0187_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0187_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0187_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0188_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0188_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0188_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0188_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0190_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0190_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0191_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0191_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0191_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0191_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0191_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0192_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0195_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0195_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0195_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0195_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0196_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0196_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0196_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0197_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0198_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0198_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0198_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0198_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0199_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0200_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0201_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0201_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0201_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0202_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0202_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0202_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0202_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0203_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0204_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0205_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0205_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0206_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0206_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0206_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0206_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0207_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0207_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0207_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0207_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0208_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0208_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0208_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0208_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0209_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0210_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0211_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0212_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0213_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0216_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0216_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0217_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0218_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0218_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0218_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0218_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0218_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0220_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0220_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0220_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0220_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0220_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0221_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0222_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0223_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0224_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0224_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0224_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0224_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0225_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0226_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0227_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0228_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0228_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0228_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0229_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0230_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0231_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0231_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0231_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0231_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0231_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0231_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0231_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0232_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0232_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0232_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0233_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0234_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0235_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0236_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0237_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0237_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0237_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0237_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0237_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0238_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0238_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0238_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0238_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0239_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0240_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0240_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0240_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0240_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0240_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0240_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0241_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0242_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0242_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0242_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0245_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0245_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0245_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0245_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0245_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0245_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0246_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0246_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0246_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0246_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0249_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0250_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0260_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0260_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0261_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0261_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0261_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0261_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0262_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0262_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0263_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0264_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0264_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0264_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0265_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0269_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0269_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0269_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0269_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0269_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0269_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0270_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0270_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0271_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0271_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0271_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0271_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0271_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0271_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0280_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0280_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0280_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0280_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0281_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0281_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0281_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0281_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0282_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0282_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0282_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0282_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0284_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0284_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0285_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0285_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0285_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0286_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0286_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0287_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0287_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0287_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0287_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0287_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0288_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0288_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0288_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0288_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0292_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0295_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0295_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0295_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0295_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0296_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0296_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0296_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0297_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0298_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f024.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f025.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f026.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f027.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f028.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f029.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0299_f030.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0300_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0300_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0300_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0300_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0300_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0301_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0301_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0301_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0301_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0301_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0302_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0303_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0303_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0303_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0303_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0303_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0303_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0304_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0304_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0305_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0305_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0305_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0305_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0306_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0306_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0306_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0306_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0307_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0307_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0307_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0307_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0308_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0309_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0310_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0311_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0312_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0315_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0315_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0317_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0317_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0317_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0317_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0319_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0319_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0319_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0319_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0319_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0320_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f024.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f025.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f026.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f027.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f028.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0321_f029.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0322_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0323_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0323_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0323_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0323_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0324_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0325_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0326_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0327_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0327_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0327_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0328_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0329_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0330_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0330_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0330_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0330_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0330_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0330_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0330_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0331_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0331_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0331_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0331_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0331_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0331_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0332_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0333_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0334_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0335_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0336_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0336_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0336_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0336_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0336_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0337_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0337_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0337_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0337_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0338_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0339_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0339_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0339_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0339_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0339_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0339_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0340_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0341_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0341_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0341_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0342_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0342_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0342_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0342_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0343_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0348_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0353_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0373_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0374_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0375_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0376_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0377_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0379_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0379_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0379_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0380_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0380_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0380_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0381_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0381_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0381_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0383_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0383_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0384_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0384_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0384_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0385_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0385_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0386_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0386_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0386_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0387_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0387_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0387_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0387_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0391_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0392_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0392_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0392_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0392_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0393_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0393_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0393_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0394_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0396_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0397_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0397_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0397_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0398_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0399_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0400_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0400_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0400_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0400_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0400_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0400_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0400_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0401_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0401_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0401_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0401_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0401_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0401_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0402_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0402_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0402_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0402_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0403_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0403_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0403_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0403_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0403_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0404_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0404_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0404_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0404_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0404_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0405_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0405_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0405_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0405_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0405_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0405_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0406_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0406_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0406_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0406_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0406_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0406_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0407_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0407_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0407_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0407_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0408_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0409_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0410_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0410_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0411_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0411_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0411_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0411_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0412_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0412_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0412_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0412_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0413_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0413_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0413_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0413_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0413_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0414_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0414_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0415_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0415_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0415_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0415_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0416_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0416_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0416_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0416_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0416_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0417_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0417_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0417_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0417_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0417_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0417_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0418_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0418_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0418_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0418_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0419_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0419_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0420_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0421_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0422_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0422_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0422_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0422_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0422_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0423_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0423_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0423_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0423_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0423_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0424_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0424_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0424_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0425_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0425_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0425_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0425_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0425_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0425_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0426_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0426_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0426_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0426_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0426_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0427_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0428_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0429_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0429_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0430_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0431_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0431_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0431_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0432_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0432_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0432_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0432_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0432_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0433_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0433_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0433_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0433_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0433_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0434_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0434_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0434_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0434_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0435_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0435_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0436_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0436_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0437_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0437_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0437_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0438_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0438_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0438_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0439_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0439_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0439_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0440_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0440_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0440_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0441_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0441_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0441_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0442_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0442_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0442_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0443_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0443_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0443_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0444_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0444_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0444_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0445_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0445_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0445_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0446_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0446_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0446_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0447_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0447_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0447_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0448_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0448_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0448_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0449_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0449_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0449_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0450_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0450_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0450_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0451_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0451_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0451_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0452_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0452_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0452_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0452_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0452_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0452_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0452_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0453_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0453_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0453_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0453_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0453_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0453_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0453_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0454_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0454_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0454_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0454_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0455_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0456_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0457_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0457_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0457_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0457_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0458_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0459_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0460_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0461_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0461_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0461_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0461_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0461_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0461_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0461_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0462_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0463_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0464_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0464_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0464_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0465_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0466_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0467_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0467_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0467_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0467_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0467_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0467_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0467_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0468_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0468_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0468_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0468_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0468_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0469_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0469_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0469_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0469_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0469_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0469_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0470_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0470_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0470_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0470_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0470_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0471_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0472_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0472_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0472_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0473_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0473_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0473_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0474_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0474_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0474_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0475_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0476_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0477_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0478_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0478_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0478_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0478_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0478_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0478_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0479_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0480_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0481_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0482_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0482_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0482_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0482_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0482_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0483_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0483_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0483_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0483_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0483_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0484_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0485_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0486_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0486_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0487_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0487_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0488_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0489_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0490_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0491_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f024.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f025.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f026.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f027.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f028.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f029.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f030.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f031.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f032.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f033.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f034.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f035.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f036.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f037.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f038.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0492_f039.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0493_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0494_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0495_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0496_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0496_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0496_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0496_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0496_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0496_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0497_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0497_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0497_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0497_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0497_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0497_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0498_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0498_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0498_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0498_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0499_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0501_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0501_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0501_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0501_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0501_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0501_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0501_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0502_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0503_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0503_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0503_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0504_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0504_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0505_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0505_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0505_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0505_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0505_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0505_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0505_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0506_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0507_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0508_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0508_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0508_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0508_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0509_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0509_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0509_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0509_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0510_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0511_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0511_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0511_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0512_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0512_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0512_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0513_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0514_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0514_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0515_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0515_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0515_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0515_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0516_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0517_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0518_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0519_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0520_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0521_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0522_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0522_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0522_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0522_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0523_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0524_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0525_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0526_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0526_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0526_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0526_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0526_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0527_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0528_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0529_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0530_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0531_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0532_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0532_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0532_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0532_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0532_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0532_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0532_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0533_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0533_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0534_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0535_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0536_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0537_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0538_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0539_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0540_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0540_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0540_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0540_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0540_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0541_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0542_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0542_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0542_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0542_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0543_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0544_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0545_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0545_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0546_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0546_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0547_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0548_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0549_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0550_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0551_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0552_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0552_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0552_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0553_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0554_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0555_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0556_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0557_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0558_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0558_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0558_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0558_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0559_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0560_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0560_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0561_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0561_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0561_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0562_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0562_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0562_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0563_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0563_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0563_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0564_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0565_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0566_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0567_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0568_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0568_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0568_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0569_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0570_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0570_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0570_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0571_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0571_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0571_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0572_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0572_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0572_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0572_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0572_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0573_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0574_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0575_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0575_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0575_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0576_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0577_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0578_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0579_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0580_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0581_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0581_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0581_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0581_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0582_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0582_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0582_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0582_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0582_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0583_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0584_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0584_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0584_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0584_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0585_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0585_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0585_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0585_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0586_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0586_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0586_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0586_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0587_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0587_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0587_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0587_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0588_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0588_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0588_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0588_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0588_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0588_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0589_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0589_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0589_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0589_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0589_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0589_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0590_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0591_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0592_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0593_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0593_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0593_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0593_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0594_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0595_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0596_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0597_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0597_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0597_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0597_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0598_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0599_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0600_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0601_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0602_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0603_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0603_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0603_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0603_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0604_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0604_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0604_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0604_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0605_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0606_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0607_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0607_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0607_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0608_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0609_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0610_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0610_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0610_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0610_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0610_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0611_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0611_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0611_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0611_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0611_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0612_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0613_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0614_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0615_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0616_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0617_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0618_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0618_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0618_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0618_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0618_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0619_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0620_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0620_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0620_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0620_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0620_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0620_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0621_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0622_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0622_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0622_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0622_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0622_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0623_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0624_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0624_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0624_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0624_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0625_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0625_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0626_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0627_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0627_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0628_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0628_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0628_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0628_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0628_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0628_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0629_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0629_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0629_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0629_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0630_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0631_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0632_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0632_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0632_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0632_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0632_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0632_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0633_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0633_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0634_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0634_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0634_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0634_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0634_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0635_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0635_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0635_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0635_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0635_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0635_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0636_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0636_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0636_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0636_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0637_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0638_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0638_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0639_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0639_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0639_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0639_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0640_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0641_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0641_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0642_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0642_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0642_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0642_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0643_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0644_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0644_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0644_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0644_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0644_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0644_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0645_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0645_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0646_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0646_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0646_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0646_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0646_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0647_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0647_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0647_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0647_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0647_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0647_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0648_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0648_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0648_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0648_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0649_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0650_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0650_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0651_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0651_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0651_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0651_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0652_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0653_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0653_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0654_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0654_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0654_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0654_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0655_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0656_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0656_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0657_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0657_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0657_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0657_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0657_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0657_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0658_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0658_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0658_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0658_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0658_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0658_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0659_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0660_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0661_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0662_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0662_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0662_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0663_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0663_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0664_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0664_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0665_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0665_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0667_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0667_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0667_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0667_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0667_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0668_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0668_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0668_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0668_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0669_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0670_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0671_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0672_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0672_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0672_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0672_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0672_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0673_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0673_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0674_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0675_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0675_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0676_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0677_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0678_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0679_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0679_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0680_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0680_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0680_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0680_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0680_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0681_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0682_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0683_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0683_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0683_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0683_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0683_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0684_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0685_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0685_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0686_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0686_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0686_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0686_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0686_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0687_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0687_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f024.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f025.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0688_f026.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0689_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0689_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0689_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0689_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0690_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0690_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0691_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0691_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0691_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0691_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0691_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0691_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0691_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0692_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0693_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0693_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0693_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0693_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0694_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0695_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0695_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0696_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0696_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0697_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0697_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0698_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0698_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0698_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0698_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0699_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0699_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0699_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0699_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0700_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0701_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0701_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0702_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0702_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0702_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0702_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0702_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0703_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0703_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0703_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0703_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0703_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0704_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0704_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0704_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0704_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0704_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0705_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0706_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0707_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0707_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0707_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0707_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0708_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0708_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0708_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0708_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0709_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0709_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0709_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0709_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0709_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0710_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0711_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0711_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0712_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0713_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0713_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0713_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0713_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0714_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0715_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0715_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0715_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0715_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0715_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0716_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0717_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0717_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0717_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0718_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0719_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0719_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0719_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0719_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0720_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0721_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0722_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0723_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0723_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0723_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0723_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0724_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0725_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0726_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0727_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0728_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0729_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0730_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0731_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0731_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0731_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0731_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0732_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0732_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0732_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0732_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0733_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0733_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0734_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0734_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0735_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0735_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0736_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0736_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0739_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0739_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0740_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0740_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0740_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0740_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0741_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0741_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0742_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0743_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0744_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0745_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0745_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0745_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0745_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0745_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0746_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0747_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0747_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0747_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0747_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0748_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0749_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0750_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0750_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0750_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0750_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0750_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0750_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0751_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0752_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0753_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0753_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0753_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0753_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0754_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0754_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0754_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0754_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0755_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0755_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0755_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0755_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0756_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0756_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0756_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0756_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0756_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0757_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0757_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0757_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0757_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0757_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0758_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0758_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0758_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0758_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0758_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0759_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0759_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0759_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0759_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0759_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0760_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0760_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0760_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0760_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0760_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0761_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0761_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0761_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0761_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0761_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0762_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0763_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0763_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0763_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0763_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0763_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0764_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0764_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0764_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0764_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0764_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0764_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0765_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0765_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0765_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0765_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0765_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0765_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0765_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0766_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0767_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0768_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0769_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0769_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0769_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0769_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0770_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0770_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0770_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0770_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0770_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0770_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0771_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0771_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0771_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0771_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0771_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0771_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0772_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0773_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0773_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0773_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0773_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0774_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0774_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0774_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0774_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0775_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0777_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0777_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0777_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0777_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0778_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0778_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0778_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0778_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0778_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0778_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0779_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0779_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0779_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0779_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0779_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0779_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0780_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0780_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0781_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0781_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0781_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0781_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0781_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0781_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0782_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0782_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0782_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0782_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0783_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0784_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0785_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0785_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0785_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0786_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0787_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0788_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0788_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0788_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0789_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0789_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0789_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0790_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0791_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0792_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0793_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0794_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0794_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0794_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0794_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0794_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0794_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0795_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0795_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0795_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0795_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0796_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0796_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0796_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0796_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0797_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0797_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0797_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0797_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0797_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0797_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0797_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0798_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0798_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0798_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0798_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0798_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0798_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f021.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f022.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0799_f023.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0800_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0801_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0801_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0802_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0802_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0802_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0802_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0802_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0805_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0805_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0805_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0805_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0806_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0806_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0806_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0807_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0808_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0808_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0808_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0808_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0808_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0809_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0810_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0810_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0811_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0812_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0812_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0812_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0813_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0813_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0816_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0817_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0818_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0819_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0820_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0853_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0853_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0853_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0853_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0853_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0853_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0853_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0854_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0855_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0856_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0856_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0856_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0856_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0856_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0857_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0858_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0858_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0858_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0858_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0859_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0860_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0861_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0861_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0861_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0861_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0862_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0862_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0862_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0862_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0863_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0864_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0864_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0864_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0865_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0865_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0866_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0867_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0868_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0868_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0868_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0869_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0869_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0869_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0870_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0870_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0870_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0871_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0872_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0873_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0874_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0875_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0876_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0877_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0877_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0877_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0877_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0878_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0878_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0878_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0879_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0879_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0879_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0880_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0881_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0882_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0882_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0883_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0884_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0884_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0884_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0884_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0884_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0885_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0886_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0887_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0888_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0889_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0890_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0891_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0892_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0892_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0892_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0892_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0893_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0894_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0895_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0895_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0896_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0897_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0897_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0898_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0898_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0898_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0898_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0899_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0900_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0900_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0900_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0901_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0901_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0902_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0902_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0902_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0902_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0903_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0903_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0903_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0903_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0904_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0904_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0904_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0904_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0904_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0904_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0904_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0905_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0906_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f000.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f001.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f002.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f003.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f004.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f005.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f006.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f007.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f008.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f009.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f010.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f011.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f012.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f013.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f014.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f015.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f016.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f017.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f018.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f019.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f020.4bpp" +.incbin "graphics/obj_tiles/4bpp/a0907_f021.4bpp" diff --git a/sa1/graphics/obj_tiles_8bpp.inc b/sa1/graphics/obj_tiles_8bpp.inc new file mode 100644 index 0000000000..242afd173d --- /dev/null +++ b/sa1/graphics/obj_tiles_8bpp.inc @@ -0,0 +1,11 @@ +.incbin "graphics/obj_tiles/8bpp/a0666_f000.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0666_f001.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0737_f000.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0737_f001.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0737_f002.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0737_f003.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0738_f000.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0738_f001.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0738_f002.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0738_f003.8bpp" +.incbin "graphics/obj_tiles/8bpp/a0776_f000.8bpp" diff --git a/sa1/graphics/tilemaps/egg_rocket_clouds/header.c b/sa1/graphics/tilemaps/egg_rocket_clouds/header.c new file mode 100644 index 0000000000..5f7688e138 --- /dev/null +++ b/sa1/graphics/tilemaps/egg_rocket_clouds/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_egg_rocket_clouds[] = INCBIN_U16("graphics/tilemaps/egg_rocket_clouds/palette.gbapal"); +const u8 Tiles_egg_rocket_clouds[] = INCBIN_U8("graphics/tilemaps/egg_rocket_clouds/tiles.4bpp"); +const u8 Tilemap_egg_rocket_clouds[] = INCBIN_U8("graphics/tilemaps/egg_rocket_clouds/tilemap.tilemap2"); + +const Tilemap egg_rocket_clouds = { + .xTiles = 32, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_egg_rocket_clouds, + .tilesSize = sizeof(Tiles_egg_rocket_clouds), + .palette = Palette_egg_rocket_clouds, + .palOffset = 0, + .palLength = sizeof(Palette_egg_rocket_clouds) / sizeof(u16), + .map = (const u16 *)Tilemap_egg_rocket_clouds, +}; diff --git a/sa1/graphics/tilemaps/egg_rocket_clouds/palette.pal b/sa1/graphics/tilemaps/egg_rocket_clouds/palette.pal new file mode 100644 index 0000000000..a954ab0019 --- /dev/null +++ b/sa1/graphics/tilemaps/egg_rocket_clouds/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +139 255 230 +255 255 255 +115 222 189 +197 255 197 +115 197 189 +98 197 255 +123 230 255 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 255 +255 255 255 +230 246 222 +213 230 189 +197 205 156 +49 57 24 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +148 189 131 +123 164 90 +115 222 189 +98 131 74 +115 197 189 +90 115 57 +172 0 131 +222 255 139 +189 222 90 +156 197 74 +139 189 49 +131 156 16 +115 131 8 +106 123 8 +90 106 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/egg_rocket_clouds/tilemap.tilemap2 b/sa1/graphics/tilemaps/egg_rocket_clouds/tilemap.tilemap2 new file mode 100644 index 0000000000..fe528e4f0f Binary files /dev/null and b/sa1/graphics/tilemaps/egg_rocket_clouds/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/egg_rocket_clouds/tiles.png b/sa1/graphics/tilemaps/egg_rocket_clouds/tiles.png new file mode 100644 index 0000000000..69fc75c48b Binary files /dev/null and b/sa1/graphics/tilemaps/egg_rocket_clouds/tiles.png differ diff --git a/sa1/graphics/tilemaps/ice_paradise_snow/header.c b/sa1/graphics/tilemaps/ice_paradise_snow/header.c new file mode 100644 index 0000000000..698378092d --- /dev/null +++ b/sa1/graphics/tilemaps/ice_paradise_snow/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_ice_paradise_snow[] = INCBIN_U16("graphics/tilemaps/ice_paradise_snow/palette.gbapal"); +const u8 Tiles_ice_paradise_snow[] = INCBIN_U8("graphics/tilemaps/ice_paradise_snow/tiles.4bpp"); +const u8 Tilemap_ice_paradise_snow[] = INCBIN_U8("graphics/tilemaps/ice_paradise_snow/tilemap.tilemap2"); + +const Tilemap ice_paradise_snow = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0x140, + .animFrameCount = 8, + .animDelay = 12, + .tiles = Tiles_ice_paradise_snow, + .tilesSize = (u32)sizeof(Tiles_ice_paradise_snow) - (9 * 0x140), + .palette = Palette_ice_paradise_snow, + .palOffset = 0, + .palLength = sizeof(Palette_ice_paradise_snow) / sizeof(u16), + .map = (const u16 *)Tilemap_ice_paradise_snow, +}; diff --git a/sa1/graphics/tilemaps/ice_paradise_snow/palette.pal b/sa1/graphics/tilemaps/ice_paradise_snow/palette.pal new file mode 100644 index 0000000000..1bff6fd18f --- /dev/null +++ b/sa1/graphics/tilemaps/ice_paradise_snow/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 139 213 +172 197 255 +197 213 255 +213 230 255 +238 246 255 +255 255 255 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +205 230 255 +255 197 0 +0 0 0 +255 255 255 +0 139 213 +148 24 0 +115 115 98 +172 24 0 +213 49 0 +255 156 172 +0 0 0 +0 0 0 +8 41 139 +8 41 205 +49 98 255 +57 131 255 +98 156 255 +131 156 255 +172 197 255 +255 255 255 +0 0 0 +0 82 0 +16 115 41 +24 164 49 +98 230 82 +148 238 123 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 82 230 +49 115 238 +98 156 238 +115 213 255 +197 238 255 +255 255 255 +0 139 213 +8 41 139 +148 57 255 +172 82 255 +197 106 246 +222 139 246 +246 164 246 +0 0 0 +0 0 0 +0 0 0 +8 41 139 +49 98 255 +57 131 255 +98 156 255 +172 197 255 +255 255 255 +0 0 0 +8 41 139 +148 57 255 +172 82 255 +197 106 246 +222 139 246 +246 164 246 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 115 156 +0 213 238 +115 180 238 +115 213 255 +197 238 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/ice_paradise_snow/tilemap.tilemap2 b/sa1/graphics/tilemaps/ice_paradise_snow/tilemap.tilemap2 new file mode 100644 index 0000000000..29c6631b1a Binary files /dev/null and b/sa1/graphics/tilemaps/ice_paradise_snow/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/ice_paradise_snow/tiles.png b/sa1/graphics/tilemaps/ice_paradise_snow/tiles.png new file mode 100644 index 0000000000..331bcc2aac Binary files /dev/null and b/sa1/graphics/tilemaps/ice_paradise_snow/tiles.png differ diff --git a/sa1/graphics/tilemaps/intro_created_by_sonic_team/header.c b/sa1/graphics/tilemaps/intro_created_by_sonic_team/header.c new file mode 100644 index 0000000000..88778e662c --- /dev/null +++ b/sa1/graphics/tilemaps/intro_created_by_sonic_team/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_intro_created_by_sonic_team[] = INCBIN_U16("graphics/tilemaps/intro_created_by_sonic_team/palette.gbapal"); +const u8 Tiles_intro_created_by_sonic_team[] = INCBIN_U8("graphics/tilemaps/intro_created_by_sonic_team/tiles.4bpp"); +const u8 Tilemap_intro_created_by_sonic_team[] = INCBIN_U8("graphics/tilemaps/intro_created_by_sonic_team/tilemap.tilemap2"); + +const Tilemap intro_created_by_sonic_team = { + .xTiles = 20, + .yTiles = 10, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_intro_created_by_sonic_team, + .tilesSize = sizeof(Tiles_intro_created_by_sonic_team), + .palette = Palette_intro_created_by_sonic_team, + .palOffset = 0, + .palLength = sizeof(Palette_intro_created_by_sonic_team) / sizeof(u16), + .map = (const u16 *)Tilemap_intro_created_by_sonic_team, +}; diff --git a/sa1/graphics/tilemaps/intro_created_by_sonic_team/palette.pal b/sa1/graphics/tilemaps/intro_created_by_sonic_team/palette.pal new file mode 100644 index 0000000000..def2f867bb --- /dev/null +++ b/sa1/graphics/tilemaps/intro_created_by_sonic_team/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +255 255 255 +0 0 0 +65 65 65 +123 123 123 +156 164 180 +32 65 148 +41 74 156 +65 90 164 +82 106 172 +106 123 180 +131 148 197 +180 189 213 +197 205 230 +222 222 238 +238 238 246 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/intro_created_by_sonic_team/tilemap.tilemap2 b/sa1/graphics/tilemaps/intro_created_by_sonic_team/tilemap.tilemap2 new file mode 100644 index 0000000000..b0edf26622 Binary files /dev/null and b/sa1/graphics/tilemaps/intro_created_by_sonic_team/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/intro_created_by_sonic_team/tiles.png b/sa1/graphics/tilemaps/intro_created_by_sonic_team/tiles.png new file mode 100644 index 0000000000..f2e6b32323 Binary files /dev/null and b/sa1/graphics/tilemaps/intro_created_by_sonic_team/tiles.png differ diff --git a/sa1/graphics/tilemaps/intro_presented_by_sega/header.c b/sa1/graphics/tilemaps/intro_presented_by_sega/header.c new file mode 100644 index 0000000000..e91232fa1b --- /dev/null +++ b/sa1/graphics/tilemaps/intro_presented_by_sega/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_intro_presented_by_sega[] = INCBIN_U16("graphics/tilemaps/intro_presented_by_sega/palette.gbapal"); +const u8 Tiles_intro_presented_by_sega[] = INCBIN_U8("graphics/tilemaps/intro_presented_by_sega/tiles.4bpp"); +const u8 Tilemap_intro_presented_by_sega[] = INCBIN_U8("graphics/tilemaps/intro_presented_by_sega/tilemap.tilemap2"); + +const Tilemap intro_presented_by_sega = { + .xTiles = 20, + .yTiles = 10, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_intro_presented_by_sega, + .tilesSize = sizeof(Tiles_intro_presented_by_sega), + .palette = Palette_intro_presented_by_sega, + .palOffset = 0, + .palLength = sizeof(Palette_intro_presented_by_sega) / sizeof(u16), + .map = (const u16 *)Tilemap_intro_presented_by_sega, +}; diff --git a/sa1/graphics/tilemaps/intro_presented_by_sega/palette.pal b/sa1/graphics/tilemaps/intro_presented_by_sega/palette.pal new file mode 100644 index 0000000000..43d04603c4 --- /dev/null +++ b/sa1/graphics/tilemaps/intro_presented_by_sega/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +255 255 255 +65 65 65 +106 106 106 +156 156 156 +180 180 180 +205 205 205 +0 164 222 +16 164 222 +49 180 230 +90 197 230 +115 205 238 +156 222 246 +189 230 246 +213 238 246 +230 246 255 +246 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/intro_presented_by_sega/tilemap.tilemap2 b/sa1/graphics/tilemaps/intro_presented_by_sega/tilemap.tilemap2 new file mode 100644 index 0000000000..024d506db4 Binary files /dev/null and b/sa1/graphics/tilemaps/intro_presented_by_sega/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/intro_presented_by_sega/tiles.png b/sa1/graphics/tilemaps/intro_presented_by_sega/tiles.png new file mode 100644 index 0000000000..a9ab21619b Binary files /dev/null and b/sa1/graphics/tilemaps/intro_presented_by_sega/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_en/header.c b/sa1/graphics/tilemaps/mp_choose_pak_type_en/header.c new file mode 100644 index 0000000000..18d5dd8457 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_choose_pak_type_en/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_choose_pak_type_en[] = INCBIN_U16("graphics/tilemaps/mp_choose_pak_type_en/palette.gbapal"); +const u8 Tiles_mp_choose_pak_type_en[] = INCBIN_U8("graphics/tilemaps/mp_choose_pak_type_en/tiles.4bpp"); +const u8 Tilemap_mp_choose_pak_type_en[] = INCBIN_U8("graphics/tilemaps/mp_choose_pak_type_en/tilemap.tilemap2"); + +const Tilemap mp_choose_pak_type_en = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_choose_pak_type_en, + .tilesSize = sizeof(Tiles_mp_choose_pak_type_en), + .palette = Palette_mp_choose_pak_type_en, + .palOffset = 0, + .palLength = sizeof(Palette_mp_choose_pak_type_en) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_choose_pak_type_en, +}; diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_en/palette.pal b/sa1/graphics/tilemaps/mp_choose_pak_type_en/palette.pal new file mode 100644 index 0000000000..9373865d4f --- /dev/null +++ b/sa1/graphics/tilemaps/mp_choose_pak_type_en/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +255 255 255 +255 205 189 +255 156 123 +255 98 57 +255 49 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_en/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_choose_pak_type_en/tilemap.tilemap2 new file mode 100644 index 0000000000..9a17738c57 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_choose_pak_type_en/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_en/tiles.png b/sa1/graphics/tilemaps/mp_choose_pak_type_en/tiles.png new file mode 100644 index 0000000000..0462d748a6 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_choose_pak_type_en/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_jp/header.c b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/header.c new file mode 100644 index 0000000000..75170bcc90 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_choose_pak_type_jp[] = INCBIN_U16("graphics/tilemaps/mp_choose_pak_type_jp/palette.gbapal"); +const u8 Tiles_mp_choose_pak_type_jp[] = INCBIN_U8("graphics/tilemaps/mp_choose_pak_type_jp/tiles.4bpp"); +const u8 Tilemap_mp_choose_pak_type_jp[] = INCBIN_U8("graphics/tilemaps/mp_choose_pak_type_jp/tilemap.tilemap2"); + +const Tilemap mp_choose_pak_type_jp = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_choose_pak_type_jp, + .tilesSize = sizeof(Tiles_mp_choose_pak_type_jp), + .palette = Palette_mp_choose_pak_type_jp, + .palOffset = 0, + .palLength = sizeof(Palette_mp_choose_pak_type_jp) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_choose_pak_type_jp, +}; diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_jp/palette.pal b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/palette.pal new file mode 100644 index 0000000000..664eae785c --- /dev/null +++ b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +106 106 106 +255 49 0 +0 156 0 +255 255 255 +255 205 189 +255 156 123 +255 98 57 +255 49 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +65 156 0 +156 156 156 +82 82 82 +65 65 65 +0 0 0 +222 222 255 +189 189 255 +82 82 255 +0 98 255 +0 0 172 +0 139 238 +0 0 222 +0 0 255 +255 255 0 +255 255 255 +0 0 205 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_jp/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/tilemap.tilemap2 new file mode 100644 index 0000000000..c97201ef5d Binary files /dev/null and b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_choose_pak_type_jp/tiles.png b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/tiles.png new file mode 100644 index 0000000000..0a3e2c0012 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_choose_pak_type_jp/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_connection_error/header.c b/sa1/graphics/tilemaps/mp_connection_error/header.c new file mode 100644 index 0000000000..bba1b82435 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_connection_error/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_connection_error[] = INCBIN_U16("graphics/tilemaps/mp_connection_error/palette.gbapal"); +const u8 Tiles_mp_connection_error[] = INCBIN_U8("graphics/tilemaps/mp_connection_error/tiles.4bpp"); +const u8 Tilemap_mp_connection_error[] = INCBIN_U8("graphics/tilemaps/mp_connection_error/tilemap.tilemap2"); + +const Tilemap mp_connection_error = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_connection_error, + .tilesSize = sizeof(Tiles_mp_connection_error), + .palette = Palette_mp_connection_error, + .palOffset = 0, + .palLength = sizeof(Palette_mp_connection_error) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_connection_error, +}; diff --git a/sa1/graphics/tilemaps/mp_connection_error/palette.pal b/sa1/graphics/tilemaps/mp_connection_error/palette.pal new file mode 100644 index 0000000000..549df81713 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_connection_error/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +16 205 222 +74 213 238 +74 222 230 +106 230 238 +131 238 246 +255 148 115 +255 139 98 +255 164 131 +255 189 164 +255 213 197 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_connection_error/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_connection_error/tilemap.tilemap2 new file mode 100644 index 0000000000..871d565cca Binary files /dev/null and b/sa1/graphics/tilemaps/mp_connection_error/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_connection_error/tiles.png b/sa1/graphics/tilemaps/mp_connection_error/tiles.png new file mode 100644 index 0000000000..e3ff052ba3 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_connection_error/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_connection_success/header.c b/sa1/graphics/tilemaps/mp_connection_success/header.c new file mode 100644 index 0000000000..dc62125d40 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_connection_success/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_connection_success[] = INCBIN_U16("graphics/tilemaps/mp_connection_success/palette.gbapal"); +const u8 Tiles_mp_connection_success[] = INCBIN_U8("graphics/tilemaps/mp_connection_success/tiles.4bpp"); +const u8 Tilemap_mp_connection_success[] = INCBIN_U8("graphics/tilemaps/mp_connection_success/tilemap.tilemap2"); + +const Tilemap mp_connection_success = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_connection_success, + .tilesSize = sizeof(Tiles_mp_connection_success), + .palette = Palette_mp_connection_success, + .palOffset = 0, + .palLength = sizeof(Palette_mp_connection_success) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_connection_success, +}; diff --git a/sa1/graphics/tilemaps/mp_connection_success/palette.pal b/sa1/graphics/tilemaps/mp_connection_success/palette.pal new file mode 100644 index 0000000000..549df81713 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_connection_success/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +16 205 222 +74 213 238 +74 222 230 +106 230 238 +131 238 246 +255 148 115 +255 139 98 +255 164 131 +255 189 164 +255 213 197 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_connection_success/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_connection_success/tilemap.tilemap2 new file mode 100644 index 0000000000..a6f1de3e22 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_connection_success/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_connection_success/tiles.png b/sa1/graphics/tilemaps/mp_connection_success/tiles.png new file mode 100644 index 0000000000..c35237b0ea Binary files /dev/null and b/sa1/graphics/tilemaps/mp_connection_success/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_continue_screen/header.c b/sa1/graphics/tilemaps/mp_continue_screen/header.c new file mode 100644 index 0000000000..a9ce9ec898 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_continue_screen/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_continue_screen[] = INCBIN_U16("graphics/tilemaps/mp_continue_screen/palette.gbapal"); +const u8 Tiles_mp_continue_screen[] = INCBIN_U8("graphics/tilemaps/mp_continue_screen/tiles.4bpp"); +const u8 Tilemap_mp_continue_screen[] = INCBIN_U8("graphics/tilemaps/mp_continue_screen/tilemap.tilemap2"); + +const Tilemap mp_continue_screen = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_continue_screen, + .tilesSize = sizeof(Tiles_mp_continue_screen), + .palette = Palette_mp_continue_screen, + .palOffset = 0, + .palLength = sizeof(Palette_mp_continue_screen) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_continue_screen, +}; diff --git a/sa1/graphics/tilemaps/mp_continue_screen/palette.pal b/sa1/graphics/tilemaps/mp_continue_screen/palette.pal new file mode 100644 index 0000000000..c292c523a7 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_continue_screen/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +255 255 255 +255 238 213 +255 222 172 +255 189 82 +255 156 0 +189 115 0 +123 74 0 +255 49 0 +255 49 0 +255 49 0 +255 49 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_continue_screen/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_continue_screen/tilemap.tilemap2 new file mode 100644 index 0000000000..5dac7f69ad Binary files /dev/null and b/sa1/graphics/tilemaps/mp_continue_screen/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_continue_screen/tiles.png b/sa1/graphics/tilemaps/mp_continue_screen/tiles.png new file mode 100644 index 0000000000..056891406d Binary files /dev/null and b/sa1/graphics/tilemaps/mp_continue_screen/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_multipak_player_overview/header.c b/sa1/graphics/tilemaps/mp_multipak_player_overview/header.c new file mode 100644 index 0000000000..bfed8e32a0 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_multipak_player_overview/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_multipak_player_overview[] = INCBIN_U16("graphics/tilemaps/mp_multipak_player_overview/palette.gbapal"); +const u8 Tiles_mp_multipak_player_overview[] = INCBIN_U8("graphics/tilemaps/mp_multipak_player_overview/tiles.4bpp"); +const u8 Tilemap_mp_multipak_player_overview[] = INCBIN_U8("graphics/tilemaps/mp_multipak_player_overview/tilemap.tilemap2"); + +const Tilemap mp_multipak_player_overview = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_multipak_player_overview, + .tilesSize = sizeof(Tiles_mp_multipak_player_overview), + .palette = Palette_mp_multipak_player_overview, + .palOffset = 0, + .palLength = sizeof(Palette_mp_multipak_player_overview) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_multipak_player_overview, +}; diff --git a/sa1/graphics/tilemaps/mp_multipak_player_overview/palette.pal b/sa1/graphics/tilemaps/mp_multipak_player_overview/palette.pal new file mode 100644 index 0000000000..496c3a433a --- /dev/null +++ b/sa1/graphics/tilemaps/mp_multipak_player_overview/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +255 230 172 +255 197 82 +255 164 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +255 189 172 +255 123 82 +255 57 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +180 255 172 +106 255 82 +41 255 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +180 172 255 +106 82 255 +41 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_multipak_player_overview/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_multipak_player_overview/tilemap.tilemap2 new file mode 100644 index 0000000000..2f34998ab3 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_multipak_player_overview/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_multipak_player_overview/tiles.png b/sa1/graphics/tilemaps/mp_multipak_player_overview/tiles.png new file mode 100644 index 0000000000..254312160b Binary files /dev/null and b/sa1/graphics/tilemaps/mp_multipak_player_overview/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/header.c b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/header.c new file mode 100644 index 0000000000..695ca87d9e --- /dev/null +++ b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_singlepak_program_is_being_sent[] = INCBIN_U16("graphics/tilemaps/mp_singlepak_program_is_being_sent/palette.gbapal"); +const u8 Tiles_mp_singlepak_program_is_being_sent[] = INCBIN_U8("graphics/tilemaps/mp_singlepak_program_is_being_sent/tiles.4bpp"); +const u8 Tilemap_mp_singlepak_program_is_being_sent[] = INCBIN_U8("graphics/tilemaps/mp_singlepak_program_is_being_sent/tilemap.tilemap2"); + +const Tilemap mp_singlepak_program_is_being_sent = { + .xTiles = 30, + .yTiles = 27, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_singlepak_program_is_being_sent, + .tilesSize = sizeof(Tiles_mp_singlepak_program_is_being_sent), + .palette = Palette_mp_singlepak_program_is_being_sent, + .palOffset = 0, + .palLength = sizeof(Palette_mp_singlepak_program_is_being_sent) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_singlepak_program_is_being_sent, +}; diff --git a/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/palette.pal b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/palette.pal new file mode 100644 index 0000000000..9dcc565e20 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 115 0 +0 0 0 +255 255 255 +32 32 32 +49 49 49 +65 65 65 +82 82 82 +98 98 98 +115 115 115 +139 139 139 +156 156 156 +172 172 172 +189 189 189 +205 205 205 +222 222 222 +238 238 238 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +255 255 255 +255 238 213 +255 222 172 +255 189 82 +255 156 0 +189 115 0 +123 74 0 +255 49 0 +255 49 0 +255 49 0 +255 49 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/tilemap.tilemap2 new file mode 100644 index 0000000000..3bcc511bb0 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/tiles.png b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/tiles.png new file mode 100644 index 0000000000..bc1e734f47 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_singlepak_program_is_being_sent/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_team_play_screen/header.c b/sa1/graphics/tilemaps/mp_team_play_screen/header.c new file mode 100644 index 0000000000..8f626275ca --- /dev/null +++ b/sa1/graphics/tilemaps/mp_team_play_screen/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_team_play_screen[] = INCBIN_U16("graphics/tilemaps/mp_team_play_screen/palette.gbapal"); +const u8 Tiles_mp_team_play_screen[] = INCBIN_U8("graphics/tilemaps/mp_team_play_screen/tiles.4bpp"); +const u8 Tilemap_mp_team_play_screen[] = INCBIN_U8("graphics/tilemaps/mp_team_play_screen/tilemap.tilemap2"); + +const Tilemap mp_team_play_screen = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_team_play_screen, + .tilesSize = sizeof(Tiles_mp_team_play_screen), + .palette = Palette_mp_team_play_screen, + .palOffset = 0, + .palLength = sizeof(Palette_mp_team_play_screen) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_team_play_screen, +}; diff --git a/sa1/graphics/tilemaps/mp_team_play_screen/palette.pal b/sa1/graphics/tilemaps/mp_team_play_screen/palette.pal new file mode 100644 index 0000000000..0ad6384fb7 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_team_play_screen/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +0 0 255 +57 0 189 +189 0 57 +255 0 0 +148 148 148 +98 98 98 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_team_play_screen/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_team_play_screen/tilemap.tilemap2 new file mode 100644 index 0000000000..a5dfbf6b16 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_team_play_screen/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_team_play_screen/tiles.png b/sa1/graphics/tilemaps/mp_team_play_screen/tiles.png new file mode 100644 index 0000000000..b59e62edc3 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_team_play_screen/tiles.png differ diff --git a/sa1/graphics/tilemaps/mp_vs_background/header.c b/sa1/graphics/tilemaps/mp_vs_background/header.c new file mode 100644 index 0000000000..a0052a8d31 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_vs_background/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_mp_vs_background[] = INCBIN_U16("graphics/tilemaps/mp_vs_background/palette.gbapal"); +const u8 Tiles_mp_vs_background[] = INCBIN_U8("graphics/tilemaps/mp_vs_background/tiles.4bpp"); +const u8 Tilemap_mp_vs_background[] = INCBIN_U8("graphics/tilemaps/mp_vs_background/tilemap.tilemap2"); + +const Tilemap mp_vs_background = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_mp_vs_background, + .tilesSize = sizeof(Tiles_mp_vs_background), + .palette = Palette_mp_vs_background, + .palOffset = 0, + .palLength = sizeof(Palette_mp_vs_background) / sizeof(u16), + .map = (const u16 *)Tilemap_mp_vs_background, +}; diff --git a/sa1/graphics/tilemaps/mp_vs_background/palette.pal b/sa1/graphics/tilemaps/mp_vs_background/palette.pal new file mode 100644 index 0000000000..0ad6384fb7 --- /dev/null +++ b/sa1/graphics/tilemaps/mp_vs_background/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +0 0 255 +57 0 189 +189 0 57 +255 0 0 +148 148 148 +98 98 98 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/mp_vs_background/tilemap.tilemap2 b/sa1/graphics/tilemaps/mp_vs_background/tilemap.tilemap2 new file mode 100644 index 0000000000..5a38fe4992 Binary files /dev/null and b/sa1/graphics/tilemaps/mp_vs_background/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/mp_vs_background/tiles.png b/sa1/graphics/tilemaps/mp_vs_background/tiles.png new file mode 100644 index 0000000000..70a3e3227d Binary files /dev/null and b/sa1/graphics/tilemaps/mp_vs_background/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage/header.c b/sa1/graphics/tilemaps/special_stage/header.c new file mode 100644 index 0000000000..a1bd280802 --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage/header.c @@ -0,0 +1,308 @@ +#include "global.h" +#include "core.h" + +u16 Palette_tilemap_54[] = INCBIN_U16("graphics/tilemaps/special_stage/palette.gbapal"); +u8 Tiles_tilemap_54[] = INCBIN_U8("graphics/tilemaps/special_stage/tiles.4bpp"); +u8 Tilemap_tilemap_54[] = INCBIN_U8("graphics/tilemaps/special_stage/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_0[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_0/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_0[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_0/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_0[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_0/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_1[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_1/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_1[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_1/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_1[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_1/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_2[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_2/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_2[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_2/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_2[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_2/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_3[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_3/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_3[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_3/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_3[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_3/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_4[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_4/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_4[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_4/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_4[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_4/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_5[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_5/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_5[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_5/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_5[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_5/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_6[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_6/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_6[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_6/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_6[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_6/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_7[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_7/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_7[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_7/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_7[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_7/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_8[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_8/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_8[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_8/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_8[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_8/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_9[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_9/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_9[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_9/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_9[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_9/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_10[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_10/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_10[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_10/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_10[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_10/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_11[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_11/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_11[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_11/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_11[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_11/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_12[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_12/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_12[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_12/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_12[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_12/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_13[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_13/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_13[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_13/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_13[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_13/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_14[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_14/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_14[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_14/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_14[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_14/tilemap.tilemap2"); + +u16 Palette_special_stage_bg_frame_15[] = INCBIN_U16("graphics/tilemaps/special_stage_bg_frame_15/palette.gbapal"); +u8 Tiles_special_stage_bg_frame_15[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_15/tiles.4bpp"); +u8 Tilemap_special_stage_bg_frame_15[] = INCBIN_U8("graphics/tilemaps/special_stage_bg_frame_15/tilemap.tilemap2"); + +const Tilemap tilemap_54 = { + .xTiles = 32, + .yTiles = 32, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_54, + .tilesSize = sizeof(Tiles_tilemap_54), + .palette = Palette_tilemap_54, + .palOffset = 32, + .palLength = 16, // sizeof(Palette_tilemap_54) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_54, +}; + +const Tilemap special_stage_bg_frame_0 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_0, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_0), + .palette = Palette_special_stage_bg_frame_0, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_0) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_0, +}; + +const Tilemap special_stage_bg_frame_1 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_1, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_1), + .palette = Palette_special_stage_bg_frame_1, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_1) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_1, +}; + +const Tilemap special_stage_bg_frame_2 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_2, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_2), + .palette = Palette_special_stage_bg_frame_2, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_2) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_2, +}; + +const Tilemap special_stage_bg_frame_3 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_3, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_3), + .palette = Palette_special_stage_bg_frame_3, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_3) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_3, +}; + +const Tilemap special_stage_bg_frame_4 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_4, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_4), + .palette = Palette_special_stage_bg_frame_4, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_4) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_4, +}; + +const Tilemap special_stage_bg_frame_5 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_5, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_5), + .palette = Palette_special_stage_bg_frame_5, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_5) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_5, +}; + +const Tilemap special_stage_bg_frame_6 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_6, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_6), + .palette = Palette_special_stage_bg_frame_6, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_6) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_6, +}; + +const Tilemap special_stage_bg_frame_7 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_7, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_7), + .palette = Palette_special_stage_bg_frame_7, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_7) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_7, +}; + +const Tilemap special_stage_bg_frame_8 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_8, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_8), + .palette = Palette_special_stage_bg_frame_8, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_8) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_8, +}; + +const Tilemap special_stage_bg_frame_9 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_9, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_9), + .palette = Palette_special_stage_bg_frame_9, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_9) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_9, +}; + +const Tilemap special_stage_bg_frame_10 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_10, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_10), + .palette = Palette_special_stage_bg_frame_10, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_10) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_10, +}; + +const Tilemap special_stage_bg_frame_11 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_11, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_11), + .palette = Palette_special_stage_bg_frame_11, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_11) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_11, +}; + +const Tilemap special_stage_bg_frame_12 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_12, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_12), + .palette = Palette_special_stage_bg_frame_12, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_12) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_12, +}; + +const Tilemap special_stage_bg_frame_13 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_13, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_13), + .palette = Palette_special_stage_bg_frame_13, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_13) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_13, +}; + +const Tilemap special_stage_bg_frame_14 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_14, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_14), + .palette = Palette_special_stage_bg_frame_14, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_14) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_14, +}; + +const Tilemap special_stage_bg_frame_15 = { + .xTiles = 19, + .yTiles = 14, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_special_stage_bg_frame_15, + .tilesSize = sizeof(Tiles_special_stage_bg_frame_15), + .palette = Palette_special_stage_bg_frame_15, + .palOffset = 0, + .palLength = 32, // sizeof(Palette_special_stage_bg_frame_15) / sizeof(u16), + .map = (const u16 *)Tilemap_special_stage_bg_frame_15, +}; diff --git a/sa1/graphics/tilemaps/special_stage/palette.pal b/sa1/graphics/tilemaps/special_stage/palette.pal new file mode 100644 index 0000000000..1cbea7bf0f --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +41 156 57 +32 82 172 +123 139 180 +24 57 115 +82 98 123 +0 8 8 +57 74 90 +41 49 57 +139 156 172 +8 8 8 +0 8 0 +205 213 246 +255 255 255 +90 123 164 +41 57 82 +0 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage/tilemap.tilemap2 new file mode 100644 index 0000000000..e37799c3a0 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage/tiles.png b/sa1/graphics/tilemaps/special_stage/tiles.png new file mode 100644 index 0000000000..e5f89916e7 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_0/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_0/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_0/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_0/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_0/tilemap.tilemap2 new file mode 100644 index 0000000000..04bb2ced3f Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_0/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_0/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_0/tiles.png new file mode 100644 index 0000000000..884f85e006 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_0/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_1/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_1/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_1/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_1/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_1/tilemap.tilemap2 new file mode 100644 index 0000000000..091a348860 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_1/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_1/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_1/tiles.png new file mode 100644 index 0000000000..b08c224287 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_1/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_10/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_10/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_10/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_10/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_10/tilemap.tilemap2 new file mode 100644 index 0000000000..e831ee0e19 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_10/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_10/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_10/tiles.png new file mode 100644 index 0000000000..c037479ef4 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_10/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_11/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_11/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_11/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_11/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_11/tilemap.tilemap2 new file mode 100644 index 0000000000..f77e277500 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_11/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_11/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_11/tiles.png new file mode 100644 index 0000000000..7eaf315656 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_11/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_12/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_12/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_12/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_12/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_12/tilemap.tilemap2 new file mode 100644 index 0000000000..ba94042200 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_12/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_12/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_12/tiles.png new file mode 100644 index 0000000000..538c106635 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_12/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_13/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_13/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_13/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_13/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_13/tilemap.tilemap2 new file mode 100644 index 0000000000..4e4a216e26 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_13/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_13/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_13/tiles.png new file mode 100644 index 0000000000..80beb782aa Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_13/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_14/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_14/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_14/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_14/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_14/tilemap.tilemap2 new file mode 100644 index 0000000000..f0b4352abd Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_14/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_14/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_14/tiles.png new file mode 100644 index 0000000000..c0ca3f39bd Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_14/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_15/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_15/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_15/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_15/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_15/tilemap.tilemap2 new file mode 100644 index 0000000000..722f333af1 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_15/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_15/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_15/tiles.png new file mode 100644 index 0000000000..1b9ea09451 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_15/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_2/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_2/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_2/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_2/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_2/tilemap.tilemap2 new file mode 100644 index 0000000000..aedafe45e6 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_2/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_2/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_2/tiles.png new file mode 100644 index 0000000000..9ef6a2e10b Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_2/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_3/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_3/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_3/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_3/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_3/tilemap.tilemap2 new file mode 100644 index 0000000000..55747c2bf8 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_3/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_3/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_3/tiles.png new file mode 100644 index 0000000000..1d73f6ae91 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_3/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_4/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_4/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_4/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_4/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_4/tilemap.tilemap2 new file mode 100644 index 0000000000..45e574bd32 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_4/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_4/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_4/tiles.png new file mode 100644 index 0000000000..10ef5fd87b Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_4/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_5/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_5/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_5/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_5/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_5/tilemap.tilemap2 new file mode 100644 index 0000000000..e0b5b7ec8f Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_5/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_5/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_5/tiles.png new file mode 100644 index 0000000000..a78edd4617 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_5/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_6/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_6/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_6/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_6/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_6/tilemap.tilemap2 new file mode 100644 index 0000000000..dadbd43e86 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_6/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_6/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_6/tiles.png new file mode 100644 index 0000000000..4c115a582d Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_6/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_7/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_7/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_7/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_7/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_7/tilemap.tilemap2 new file mode 100644 index 0000000000..2010b6a6f7 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_7/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_7/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_7/tiles.png new file mode 100644 index 0000000000..8447d1991d Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_7/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_8/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_8/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_8/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_8/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_8/tilemap.tilemap2 new file mode 100644 index 0000000000..7418030cdd Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_8/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_8/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_8/tiles.png new file mode 100644 index 0000000000..17c9d010fb Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_8/tiles.png differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_9/palette.pal b/sa1/graphics/tilemaps/special_stage_bg_frame_9/palette.pal new file mode 100644 index 0000000000..1721aa8ace --- /dev/null +++ b/sa1/graphics/tilemaps/special_stage_bg_frame_9/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +255 0 0 +222 0 8 +189 0 24 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 255 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 0 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +255 255 0 +255 0 0 +213 197 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +230 230 0 +255 0 0 +189 164 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +213 197 0 +255 0 0 +164 131 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +189 164 0 +255 0 0 +139 98 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +164 131 0 +255 0 0 +115 74 0 +255 255 0 +230 230 0 +213 197 0 +189 164 0 +164 131 0 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +139 98 0 +255 255 255 +222 0 8 +189 0 24 +148 0 41 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +189 0 24 +148 0 41 +115 0 57 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +255 255 255 +148 0 41 +115 0 57 +82 0 65 +65 246 123 +65 246 123 +65 246 123 +255 255 255 +156 246 255 +98 205 238 +65 139 213 +32 106 189 +24 65 148 +24 49 106 +16 32 82 +115 74 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 0 0 diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_9/tilemap.tilemap2 b/sa1/graphics/tilemaps/special_stage_bg_frame_9/tilemap.tilemap2 new file mode 100644 index 0000000000..bbd8ecb861 Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_9/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/special_stage_bg_frame_9/tiles.png b/sa1/graphics/tilemaps/special_stage_bg_frame_9/tiles.png new file mode 100644 index 0000000000..982cab53ab Binary files /dev/null and b/sa1/graphics/tilemaps/special_stage_bg_frame_9/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_73/header.c b/sa1/graphics/tilemaps/tilemap_73/header.c new file mode 100644 index 0000000000..16f78136b6 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_73/header.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_73[] = { + 0x8340, 0, 0x9000, 0x2000, 0x421, 0x8c20, 0x2800, 0x1c20, 0x3000, 0xb000, 0xac20, 0x9c40, 0x8842, 0x3802, 0x3022, 0xac40, + 0xb820, 0xb802, 0xb440, 0x65, 0x3423, 0x3860, 0x2082, 0xb061, 0x1084, 0x3c60, 0x3844, 0xe1, 0x4460, 0x3046, 0xaca0, 0x4860, + 0xca6, 0xac83, 0x9ca3, 0xd060, 0x94a5, 0xbc81, 0xd460, 0xb865, 0x14, 0xd860, 0x2c88, 0xc0c0, 0xc8a1, 0x98c6, 0x5c80, 0x15, + 0xe060, 0x28e4, 0xb8c4, 0x17, 0x80ac, 0x18, 0x60a0, 0x4900, 0xd4a2, 0x19, 0x48e3, 0xe0a1, 0x182, 0x28ca, 0x1a, 0x1d08, + 0x38e8, 0xdcc2, 0x2d26, 0x5140, 0x64e1, 0x3d25, 0xa0cd, 0xe502, 0x941c, 0x4d25, 0xa529, 0x5980, 0xe502, 0x910e, 0x145a, 0x201, + 0xe104, 0x5da0, 0xb548, 0x4929, 0x1d4c, 0x2d6b, 0xcd48, 0x9130, 0xe1c0, 0xd185, 0xe06, 0xe945, 0xc16b, 0x318c, 0x71c0, 0xe5e0, + 0x155, 0x20bc, 0x5189, 0x1173, 0x19eb, 0xa18f, 0x6a20, 0x6587, 0xfdc0, 0xd1a9, 0x35ad, 0x7e00, 0x6e40, 0xd9e6, 0x8995, 0xeda7, + 0xa1b1, 0xfe01, 0xe624, 0x39ce, 0x7260, 0x82a6, 0xad39, 0xe1c9, 0xc9cd, 0xe227, 0x7e42, 0x5d6, 0x3179, 0xc1ef, 0xa5f2, 0xf1e9, + 0xee64, 0x620b, 0x7e64, 0xea48, 0x85f8, 0xda0e, 0x1616, 0x4231, 0xf2a4, 0x7e85, 0xf22b, 0xae34, 0xee88, 0xd230, 0x3d9d, 0x7ae3, + 0x639, 0x7ea6, 0x4a52, 0x666d, 0x7ec6, 0x7ec7, 0x726d, 0x5271, 0xf2a9, 0xae56, 0xc1db, 0x4e73, 0xfec7, 0x9f0d, 0x728d, 0x7ee8, + 0xd672, 0x1e3d, 0x7ee8, 0xfee9, 0x3297, 0xee90, 0x1e98, 0xfee9, 0xd694, 0x76ae, 0xfeea, 0x2bc, 0x7f0a, 0x267d, 0x56b5, 0xb2b8, + 0x4e5d, 0x1ada, 0xf6d0, 0x82bf, 0x2a9e, 0x5ed5, 0x7f2d, 0x32fa, 0x82df, 0xdad6, 0xaebe, 0x7b12, 0x82ff, 0xe2f7, 0x7f4f, 0x31f, + 0x5abe, 0xb2de, 0x7b33, 0x831f, 0x3f1b, 0xe317, 0xa73c, 0x133e, 0xb6ff, 0x833f, 0xe718, 0xff52, 0x6339, 0x35f, 0x7f72, 0x7f72, + 0x3b1f, 0x37f, 0x433d, 0xff55, 0xe739, 0x535a, 0xff73, 0x3f3f, 0x837f, 0x39f, 0xa77d, 0xc33f, 0xe71e, 0x7f95, 0xeb5a, 0x3bf, + 0x435f, 0x13bf, 0xff96, 0x3df, 0x6f7b, 0x477f, 0x83df, 0x7fb7, 0x579c, 0x3ff, 0x6f5f, 0x479f, 0x97df, 0x83ff, 0xffb8, 0x739c, + 0xcf9f, 0xffb9, 0x77bd, 0x7fda, 0x779f, 0x63df, 0xffdc, 0x7bde, 0xfbbf, 0x7ffd, 0xfbde, 0x7ffd, 0xebff, 0x7fff, 0xfffe, 0xffff, +}; + +const u8 Tiles_tilemap_73[] = INCBIN_U8("graphics/tilemaps/tilemap_73/tiles.4bpp"); +const u8 Tilemap_tilemap_73[] = INCBIN_U8("graphics/tilemaps/tilemap_73/tilemap.tilemap2"); + +// 0x080BEC98 +const Tilemap tilemap_73 = { + .xTiles = 24, + .yTiles = 10, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_73, + .tilesSize = sizeof(Tiles_tilemap_73), + .palette = Palette_tilemap_73, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_73) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_73, +}; diff --git a/sa1/graphics/tilemaps/tilemap_73/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_73/tilemap.tilemap2 new file mode 100644 index 0000000000..034eb39cda Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_73/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_73/tiles.png b/sa1/graphics/tilemaps/tilemap_73/tiles.png new file mode 100644 index 0000000000..0b7638ffbd Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_73/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_74/header.c b/sa1/graphics/tilemaps/tilemap_74/header.c new file mode 100644 index 0000000000..2f7a0c5e02 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_74/header.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_74[] = { + 0x8340, 0, 0x9000, 0x2000, 0x421, 0x8c20, 0x2800, 0x1c20, 0x3000, 0xb000, 0xac20, 0x9c40, 0x8842, 0x3802, 0x3022, 0xac40, + 0xb820, 0xb802, 0xb440, 0x65, 0x3423, 0x3860, 0x2082, 0xb061, 0x1084, 0x3c60, 0x3844, 0xe1, 0x4460, 0x3046, 0xaca0, 0x4860, + 0xca6, 0xac83, 0x9ca3, 0xd060, 0x94a5, 0xbc81, 0xd460, 0xb865, 0x14, 0xd860, 0x2c88, 0xc0c0, 0xc8a1, 0x98c6, 0x5c80, 0x15, + 0xe060, 0x28e4, 0xb8c4, 0x17, 0x80ac, 0x18, 0x60a0, 0x4900, 0xd4a2, 0x19, 0x48e3, 0xe0a1, 0x182, 0x28ca, 0x1a, 0x1d08, + 0x38e8, 0xdcc2, 0x2d26, 0x5140, 0x64e1, 0x3d25, 0xa0cd, 0xe502, 0x941c, 0x4d25, 0xa529, 0x5980, 0xe502, 0x910e, 0x145a, 0x201, + 0xe104, 0x5da0, 0xb548, 0x4929, 0x1d4c, 0x2d6b, 0xcd48, 0x9130, 0xe1c0, 0xd185, 0xe06, 0xe945, 0xc16b, 0x318c, 0x71c0, 0xe5e0, + 0x155, 0x20bc, 0x5189, 0x1173, 0x19eb, 0xa18f, 0x6a20, 0x6587, 0xfdc0, 0xd1a9, 0x35ad, 0x7e00, 0x6e40, 0xd9e6, 0x8995, 0xeda7, + 0xa1b1, 0xfe01, 0xe624, 0x39ce, 0x7260, 0x82a6, 0xad39, 0xe1c9, 0xc9cd, 0xe227, 0x7e42, 0x5d6, 0x3179, 0xc1ef, 0xa5f2, 0xf1e9, + 0xee64, 0x620b, 0x7e64, 0xea48, 0x85f8, 0xda0e, 0x1616, 0x4231, 0xf2a4, 0x7e85, 0xf22b, 0xae34, 0xee88, 0xd230, 0x3d9d, 0x7ae3, + 0x639, 0x7ea6, 0x4a52, 0x666d, 0x7ec6, 0x7ec7, 0x726d, 0x5271, 0xf2a9, 0xae56, 0xc1db, 0x4e73, 0xfec7, 0x9f0d, 0x728d, 0x7ee8, + 0xd672, 0x1e3d, 0x7ee8, 0xfee9, 0x3297, 0xee90, 0x1e98, 0xfee9, 0xd694, 0x76ae, 0xfeea, 0x2bc, 0x7f0a, 0x267d, 0x56b5, 0xb2b8, + 0x4e5d, 0x1ada, 0xf6d0, 0x82bf, 0x2a9e, 0x5ed5, 0x7f2d, 0x32fa, 0x82df, 0xdad6, 0xaebe, 0x7b12, 0x82ff, 0xe2f7, 0x7f4f, 0x31f, + 0x5abe, 0xb2de, 0x7b33, 0x831f, 0x3f1b, 0xe317, 0xa73c, 0x133e, 0xb6ff, 0x833f, 0xe718, 0xff52, 0x6339, 0x35f, 0x7f72, 0x7f72, + 0x3b1f, 0x37f, 0x433d, 0xff55, 0xe739, 0x535a, 0xff73, 0x3f3f, 0x837f, 0x39f, 0xa77d, 0xc33f, 0xe71e, 0x7f95, 0xeb5a, 0x3bf, + 0x435f, 0x13bf, 0xff96, 0x3df, 0x6f7b, 0x477f, 0x83df, 0x7fb7, 0x579c, 0x3ff, 0x6f5f, 0x479f, 0x97df, 0x83ff, 0xffb8, 0x739c, + 0xcf9f, 0xffb9, 0x77bd, 0x7fda, 0x779f, 0x63df, 0xffdc, 0x7bde, 0xfbbf, 0x7ffd, 0xfbde, 0x7ffd, 0xebff, 0x7fff, 0xfffe, 0xffff, +}; + +const u8 Tiles_tilemap_74[] = INCBIN_U8("graphics/tilemaps/tilemap_74/tiles.4bpp"); +const u8 Tilemap_tilemap_74[] = INCBIN_U8("graphics/tilemaps/tilemap_74/tilemap.tilemap2"); + +const Tilemap tilemap_74 = { + .xTiles = 24, + .yTiles = 10, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_74, + .tilesSize = sizeof(Tiles_tilemap_74), + .palette = Palette_tilemap_74, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_74) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_74, +}; diff --git a/sa1/graphics/tilemaps/tilemap_74/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_74/tilemap.tilemap2 new file mode 100644 index 0000000000..f6c255791a Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_74/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_74/tiles.png b/sa1/graphics/tilemaps/tilemap_74/tiles.png new file mode 100644 index 0000000000..53ded814c8 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_74/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_75/header.c b/sa1/graphics/tilemaps/tilemap_75/header.c new file mode 100644 index 0000000000..7d871e0b28 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_75/header.c @@ -0,0 +1,38 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_75[] = { + 0x8340, 0, 0x9000, 0x2000, 0x421, 0x8c20, 0x2800, 0x1c20, 0x3000, 0xb000, 0xac20, 0x9c40, 0x8842, 0x3802, 0x3022, 0xac40, + 0xb820, 0xb802, 0xb440, 0x65, 0x3423, 0x3860, 0x2082, 0xb061, 0x1084, 0x3c60, 0x3844, 0xe1, 0x4460, 0x3046, 0xaca0, 0x4860, + 0xca6, 0xac83, 0x9ca3, 0xd060, 0x94a5, 0xbc81, 0xd460, 0xb865, 0x14, 0xd860, 0x2c88, 0xc0c0, 0xc8a1, 0x98c6, 0x5c80, 0x15, + 0xe060, 0x28e4, 0xb8c4, 0x17, 0x80ac, 0x18, 0x60a0, 0x4900, 0xd4a2, 0x19, 0x48e3, 0xe0a1, 0x182, 0x28ca, 0x1a, 0x1d08, + 0x38e8, 0xdcc2, 0x2d26, 0x5140, 0x64e1, 0x3d25, 0xa0cd, 0xe502, 0x941c, 0x4d25, 0xa529, 0x5980, 0xe502, 0x910e, 0x145a, 0x201, + 0xe104, 0x5da0, 0xb548, 0x4929, 0x1d4c, 0x2d6b, 0xcd48, 0x9130, 0xe1c0, 0xd185, 0xe06, 0xe945, 0xc16b, 0x318c, 0x71c0, 0xe5e0, + 0x155, 0x20bc, 0x5189, 0x1173, 0x19eb, 0xa18f, 0x6a20, 0x6587, 0xfdc0, 0xd1a9, 0x35ad, 0x7e00, 0x6e40, 0xd9e6, 0x8995, 0xeda7, + 0xa1b1, 0xfe01, 0xe624, 0x39ce, 0x7260, 0x82a6, 0xad39, 0xe1c9, 0xc9cd, 0xe227, 0x7e42, 0x5d6, 0x3179, 0xc1ef, 0xa5f2, 0xf1e9, + 0xee64, 0x620b, 0x7e64, 0xea48, 0x85f8, 0xda0e, 0x1616, 0x4231, 0xf2a4, 0x7e85, 0xf22b, 0xae34, 0xee88, 0xd230, 0x3d9d, 0x7ae3, + 0x639, 0x7ea6, 0x4a52, 0x666d, 0x7ec6, 0x7ec7, 0x726d, 0x5271, 0xf2a9, 0xae56, 0xc1db, 0x4e73, 0xfec7, 0x9f0d, 0x728d, 0x7ee8, + 0xd672, 0x1e3d, 0x7ee8, 0xfee9, 0x3297, 0xee90, 0x1e98, 0xfee9, 0xd694, 0x76ae, 0xfeea, 0x2bc, 0x7f0a, 0x267d, 0x56b5, 0xb2b8, + 0x4e5d, 0x1ada, 0xf6d0, 0x82bf, 0x2a9e, 0x5ed5, 0x7f2d, 0x32fa, 0x82df, 0xdad6, 0xaebe, 0x7b12, 0x82ff, 0xe2f7, 0x7f4f, 0x31f, + 0x5abe, 0xb2de, 0x7b33, 0x831f, 0x3f1b, 0xe317, 0xa73c, 0x133e, 0xb6ff, 0x833f, 0xe718, 0xff52, 0x6339, 0x35f, 0x7f72, 0x7f72, + 0x3b1f, 0x37f, 0x433d, 0xff55, 0xe739, 0x535a, 0xff73, 0x3f3f, 0x837f, 0x39f, 0xa77d, 0xc33f, 0xe71e, 0x7f95, 0xeb5a, 0x3bf, + 0x435f, 0x13bf, 0xff96, 0x3df, 0x6f7b, 0x477f, 0x83df, 0x7fb7, 0x579c, 0x3ff, 0x6f5f, 0x479f, 0x97df, 0x83ff, 0xffb8, 0x739c, + 0xcf9f, 0xffb9, 0x77bd, 0x7fda, 0x779f, 0x63df, 0xffdc, 0x7bde, 0xfbbf, 0x7ffd, 0xfbde, 0x7ffd, 0xebff, 0x7fff, 0xfffe, 0xffff, +}; + +const u8 Tiles_tilemap_75[] = INCBIN_U8("graphics/tilemaps/tilemap_75/tiles.4bpp"); +const u8 Tilemap_tilemap_75[] = INCBIN_U8("graphics/tilemaps/tilemap_75/tilemap.tilemap2"); + +const Tilemap tilemap_75 = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_75, + .tilesSize = sizeof(Tiles_tilemap_75), + .palette = Palette_tilemap_75, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_75) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_75, +}; diff --git a/sa1/graphics/tilemaps/tilemap_75/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_75/tilemap.tilemap2 new file mode 100644 index 0000000000..08fbe21a20 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_75/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_75/tiles.png b/sa1/graphics/tilemaps/tilemap_75/tiles.png new file mode 100644 index 0000000000..8a283ac71f Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_75/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_84/header.c b/sa1/graphics/tilemaps/tilemap_84/header.c new file mode 100644 index 0000000000..c2eb4c76a1 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_84/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_84[] = INCBIN_U16("graphics/tilemaps/tilemap_84/palette.gbapal"); +const u8 Tiles_tilemap_84[] = INCBIN_U8("graphics/tilemaps/tilemap_84/tiles.4bpp"); +const u8 Tilemap_tilemap_84[] = INCBIN_U8("graphics/tilemaps/tilemap_84/tilemap.tilemap2"); + +const Tilemap tilemap_84 = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_84, + .tilesSize = sizeof(Tiles_tilemap_84), + .palette = Palette_tilemap_84, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_84) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_84, +}; diff --git a/sa1/graphics/tilemaps/tilemap_84/palette.pal b/sa1/graphics/tilemaps/tilemap_84/palette.pal new file mode 100644 index 0000000000..9373865d4f --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_84/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +255 255 255 +255 205 189 +255 156 123 +255 98 57 +255 49 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 diff --git a/sa1/graphics/tilemaps/tilemap_84/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_84/tilemap.tilemap2 new file mode 100644 index 0000000000..cc0e85a0fb Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_84/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_84/tiles.png b/sa1/graphics/tilemaps/tilemap_84/tiles.png new file mode 100644 index 0000000000..a342858156 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_84/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_85/header.c b/sa1/graphics/tilemaps/tilemap_85/header.c new file mode 100644 index 0000000000..7c0b577c67 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_85/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_85[] = INCBIN_U16("graphics/tilemaps/tilemap_85/palette.gbapal"); +const u8 Tiles_tilemap_85[] = INCBIN_U8("graphics/tilemaps/tilemap_85/tiles.4bpp"); +const u8 Tilemap_tilemap_85[] = INCBIN_U8("graphics/tilemaps/tilemap_85/tilemap.tilemap2"); + +const Tilemap tilemap_85 = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_85, + .tilesSize = sizeof(Tiles_tilemap_85), + .palette = Palette_tilemap_85, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_85) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_85, +}; diff --git a/sa1/graphics/tilemaps/tilemap_85/palette.pal b/sa1/graphics/tilemaps/tilemap_85/palette.pal new file mode 100644 index 0000000000..0c3131392e --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_85/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 255 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 156 0 +255 255 255 +255 205 189 +255 156 123 +255 98 57 +255 49 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +0 255 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 diff --git a/sa1/graphics/tilemaps/tilemap_85/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_85/tilemap.tilemap2 new file mode 100644 index 0000000000..c452a3a3a5 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_85/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_85/tiles.png b/sa1/graphics/tilemaps/tilemap_85/tiles.png new file mode 100644 index 0000000000..78d1a7d513 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_85/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_89/header.c b/sa1/graphics/tilemaps/tilemap_89/header.c new file mode 100644 index 0000000000..7109c2c977 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_89/header.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_89[] = INCBIN_U16("graphics/tilemaps/tilemap_89/palette.gbapal"); +const u8 Tiles_tilemap_89[] = INCBIN_U8("graphics/tilemaps/tilemap_89/tiles.4bpp"); +const u8 Tilemap_tilemap_89[] = INCBIN_U8("graphics/tilemaps/tilemap_89/tilemap.tilemap2"); + +const Tilemap tilemap_89 = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_89, + .tilesSize = sizeof(Tiles_tilemap_89), + .palette = Palette_tilemap_89, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_89) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_89, +}; diff --git a/sa1/graphics/tilemaps/tilemap_89/palette.pal b/sa1/graphics/tilemaps/tilemap_89/palette.pal new file mode 100644 index 0000000000..8d065124c8 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_89/palette.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 238 213 +255 222 172 +255 189 82 +255 156 0 +189 115 0 +123 74 0 +255 49 0 +255 49 0 +255 49 0 +255 49 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 diff --git a/sa1/graphics/tilemaps/tilemap_89/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_89/tilemap.tilemap2 new file mode 100644 index 0000000000..58ac9dabc3 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_89/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_89/tiles.png b/sa1/graphics/tilemaps/tilemap_89/tiles.png new file mode 100644 index 0000000000..e83fecec63 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_89/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_1/header.c b/sa1/graphics/tilemaps/tilemap_unused_mp_1/header.c new file mode 100644 index 0000000000..51483d48c4 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_1/header.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_unused_mp_1[] = INCBIN_U16("graphics/tilemaps/tilemap_unused_mp_1/palette.gbapal"); +const u8 Tiles_tilemap_unused_mp_1[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_1/tiles.4bpp"); +const u8 Tilemap_tilemap_unused_mp_1[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_1/tilemap.tilemap2"); + +// 0x080D55C0 +const Tilemap tilemap_unused_mp_1 = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_unused_mp_1, + .tilesSize = sizeof(Tiles_tilemap_unused_mp_1), + .palette = Palette_tilemap_unused_mp_1, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_unused_mp_1) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_unused_mp_1, +}; diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_1/palette.pal b/sa1/graphics/tilemaps/tilemap_unused_mp_1/palette.pal new file mode 100644 index 0000000000..8345d1eedd --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_1/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 156 0 +255 255 255 +255 238 213 +255 222 172 +255 189 82 +255 156 0 +189 115 0 +123 74 0 +255 49 0 +255 49 0 +255 49 0 +255 49 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_1/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_unused_mp_1/tilemap.tilemap2 new file mode 100644 index 0000000000..79d3bac559 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_1/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_1/tiles.png b/sa1/graphics/tilemaps/tilemap_unused_mp_1/tiles.png new file mode 100644 index 0000000000..7017183297 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_1/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_2/header.c b/sa1/graphics/tilemaps/tilemap_unused_mp_2/header.c new file mode 100644 index 0000000000..7cc69051bd --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_2/header.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_unused_mp_2[] = INCBIN_U16("graphics/tilemaps/tilemap_unused_mp_2/palette.gbapal"); +const u8 Tiles_tilemap_unused_mp_2[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_2/tiles.4bpp"); +const u8 Tilemap_tilemap_unused_mp_2[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_2/tilemap.tilemap2"); + +// 0x080D648C +const Tilemap tilemap_unused_mp_2 = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_unused_mp_2, + .tilesSize = sizeof(Tiles_tilemap_unused_mp_2), + .palette = Palette_tilemap_unused_mp_2, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_unused_mp_2) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_unused_mp_2, +}; diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_2/palette.pal b/sa1/graphics/tilemaps/tilemap_unused_mp_2/palette.pal new file mode 100644 index 0000000000..8345d1eedd --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_2/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 156 0 +255 255 255 +255 238 213 +255 222 172 +255 189 82 +255 156 0 +189 115 0 +123 74 0 +255 49 0 +255 49 0 +255 49 0 +255 49 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_2/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_unused_mp_2/tilemap.tilemap2 new file mode 100644 index 0000000000..2be20dda7c Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_2/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_2/tiles.png b/sa1/graphics/tilemaps/tilemap_unused_mp_2/tiles.png new file mode 100644 index 0000000000..06060ef996 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_2/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_3/header.c b/sa1/graphics/tilemaps/tilemap_unused_mp_3/header.c new file mode 100644 index 0000000000..d3f617e550 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_3/header.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_unused_mp_3[] = INCBIN_U16("graphics/tilemaps/tilemap_unused_mp_3/palette.gbapal"); +const u8 Tiles_tilemap_unused_mp_3[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_3/tiles.4bpp"); +const u8 Tilemap_tilemap_unused_mp_3[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_3/tilemap.tilemap2"); + +// 0x080D6F58 +const Tilemap tilemap_unused_mp_3 = { + .xTiles = 30, + .yTiles = 20, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_unused_mp_3, + .tilesSize = sizeof(Tiles_tilemap_unused_mp_3), + .palette = Palette_tilemap_unused_mp_3, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_unused_mp_3) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_unused_mp_3, +}; diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_3/palette.pal b/sa1/graphics/tilemaps/tilemap_unused_mp_3/palette.pal new file mode 100644 index 0000000000..8345d1eedd --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_3/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 156 0 +255 255 255 +255 238 213 +255 222 172 +255 189 82 +255 156 0 +189 115 0 +123 74 0 +255 49 0 +255 49 0 +255 49 0 +255 49 0 +238 238 238 +222 222 222 +106 106 106 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_3/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_unused_mp_3/tilemap.tilemap2 new file mode 100644 index 0000000000..bfa477c646 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_3/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_3/tiles.png b/sa1/graphics/tilemaps/tilemap_unused_mp_3/tiles.png new file mode 100644 index 0000000000..5aea830129 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_3/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_4/header.c b/sa1/graphics/tilemaps/tilemap_unused_mp_4/header.c new file mode 100644 index 0000000000..552a31ad05 --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_4/header.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_unused_mp_4[] = INCBIN_U16("graphics/tilemaps/tilemap_unused_mp_4/palette.gbapal"); +const u8 Tiles_tilemap_unused_mp_4[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_4/tiles.4bpp"); +const u8 Tilemap_tilemap_unused_mp_4[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_4/tilemap.tilemap2"); + +// 0x080D74A0 +const Tilemap tilemap_unused_mp_4 = { + .xTiles = 30, + .yTiles = 5, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_unused_mp_4, + .tilesSize = sizeof(Tiles_tilemap_unused_mp_4), + .palette = Palette_tilemap_unused_mp_4, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_unused_mp_4) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_unused_mp_4, +}; diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_4/palette.pal b/sa1/graphics/tilemaps/tilemap_unused_mp_4/palette.pal new file mode 100644 index 0000000000..95c73fddde --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_4/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 0 82 +0 0 172 +0 0 255 +82 82 255 +164 172 255 +205 213 255 +255 255 255 +189 189 189 +106 106 106 +0 0 0 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +82 41 0 +172 90 0 +255 131 0 +255 172 82 +255 213 172 +255 238 213 +255 255 255 +189 189 189 +106 106 106 +0 0 0 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +82 0 0 +172 0 0 +255 0 0 +255 82 82 +255 172 172 +255 213 213 +255 255 255 +189 189 189 +106 106 106 +0 0 0 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +82 0 41 +172 0 90 +255 0 139 +255 82 180 +255 172 222 +255 213 238 +255 255 255 +189 189 189 +106 106 106 +0 0 0 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +41 41 41 +82 82 82 +131 131 131 +115 115 115 +98 98 98 +90 90 90 +65 65 65 +189 189 189 +106 106 106 +0 0 0 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 +0 189 49 diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_4/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_unused_mp_4/tilemap.tilemap2 new file mode 100644 index 0000000000..28cdb172b4 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_4/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_4/tiles.png b/sa1/graphics/tilemaps/tilemap_unused_mp_4/tiles.png new file mode 100644 index 0000000000..34fa51c16d Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_4/tiles.png differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/header.c b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/header.c new file mode 100644 index 0000000000..b52c1cc22a --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/header.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "core.h" + +const u16 Palette_tilemap_unused_mp_player_bar[] = INCBIN_U16("graphics/tilemaps/tilemap_unused_mp_player_bar/palette.gbapal"); +const u8 Tiles_tilemap_unused_mp_player_bar[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_player_bar/tiles.4bpp"); +const u8 Tilemap_tilemap_unused_mp_player_bar[] = INCBIN_U8("graphics/tilemaps/tilemap_unused_mp_player_bar/tilemap.tilemap2"); + +// 0x080D4AF4 +const Tilemap tilemap_unused_mp_player_bar = { + .xTiles = 30, + .yTiles = 5, + .animTileSize = 0, + .animFrameCount = 0, + .animDelay = 0, + .tiles = Tiles_tilemap_unused_mp_player_bar, + .tilesSize = sizeof(Tiles_tilemap_unused_mp_player_bar), + .palette = Palette_tilemap_unused_mp_player_bar, + .palOffset = 0, + .palLength = sizeof(Palette_tilemap_unused_mp_player_bar) / sizeof(u16), + .map = (const u16 *)Tilemap_tilemap_unused_mp_player_bar, +}; diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/palette.pal b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/palette.pal new file mode 100644 index 0000000000..496c3a433a --- /dev/null +++ b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/palette.pal @@ -0,0 +1,259 @@ +JASC-PAL +0100 +256 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +255 230 172 +255 197 82 +255 164 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +255 189 172 +255 123 82 +255 57 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +180 255 172 +106 255 82 +41 255 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +189 189 189 +213 213 213 +238 238 238 +255 255 255 +180 172 255 +106 82 255 +41 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/tilemap.tilemap2 b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/tilemap.tilemap2 new file mode 100644 index 0000000000..41abd906bc Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/tilemap.tilemap2 differ diff --git a/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/tiles.png b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/tiles.png new file mode 100644 index 0000000000..4030b60d34 Binary files /dev/null and b/sa1/graphics/tilemaps/tilemap_unused_mp_player_bar/tiles.png differ diff --git a/sa1/graphics/tilesets/debug_ascii/debug_ascii.png b/sa1/graphics/tilesets/debug_ascii/debug_ascii.png new file mode 100644 index 0000000000..0be3a392c0 Binary files /dev/null and b/sa1/graphics/tilesets/debug_ascii/debug_ascii.png differ diff --git a/sa1/graphics/ui/character_select/Arrow.pal b/sa1/graphics/ui/character_select/Arrow.pal new file mode 100644 index 0000000000..b183efd365 --- /dev/null +++ b/sa1/graphics/ui/character_select/Arrow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 189 0 +0 0 0 +32 65 0 +16 16 16 +98 189 0 +255 255 255 +205 205 205 +238 238 255 +82 82 82 +255 16 16 +189 16 0 +0 49 255 +0 16 189 +255 123 0 +255 255 0 +0 0 0 diff --git a/sa1/graphics/ui/character_select/Arrow.png b/sa1/graphics/ui/character_select/Arrow.png new file mode 100644 index 0000000000..132d09ce6c Binary files /dev/null and b/sa1/graphics/ui/character_select/Arrow.png differ diff --git a/sa1/graphics/ui/character_select/BlackBox.pal b/sa1/graphics/ui/character_select/BlackBox.pal new file mode 100644 index 0000000000..b183efd365 --- /dev/null +++ b/sa1/graphics/ui/character_select/BlackBox.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 189 0 +0 0 0 +32 65 0 +16 16 16 +98 189 0 +255 255 255 +205 205 205 +238 238 255 +82 82 82 +255 16 16 +189 16 0 +0 49 255 +0 16 189 +255 123 0 +255 255 0 +0 0 0 diff --git a/sa1/graphics/ui/character_select/BlackBox.png b/sa1/graphics/ui/character_select/BlackBox.png new file mode 100644 index 0000000000..cc3fefbf68 Binary files /dev/null and b/sa1/graphics/ui/character_select/BlackBox.png differ diff --git a/sa1/graphics/ui/character_select/BlackBox2.pal b/sa1/graphics/ui/character_select/BlackBox2.pal new file mode 100644 index 0000000000..f55f6f4333 --- /dev/null +++ b/sa1/graphics/ui/character_select/BlackBox2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 246 0 +255 205 0 +255 180 32 +246 156 65 +213 123 74 +172 98 65 +131 65 65 +90 32 57 +0 0 0 +213 213 213 +238 238 238 +57 57 57 +255 49 0 diff --git a/sa1/graphics/ui/character_select/BlackBox2.png b/sa1/graphics/ui/character_select/BlackBox2.png new file mode 100644 index 0000000000..7ec46afbed Binary files /dev/null and b/sa1/graphics/ui/character_select/BlackBox2.png differ diff --git a/sa1/graphics/ui/character_select/Names.pal b/sa1/graphics/ui/character_select/Names.pal new file mode 100644 index 0000000000..b183efd365 --- /dev/null +++ b/sa1/graphics/ui/character_select/Names.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 189 0 +0 0 0 +32 65 0 +16 16 16 +98 189 0 +255 255 255 +205 205 205 +238 238 255 +82 82 82 +255 16 16 +189 16 0 +0 49 255 +0 16 189 +255 123 0 +255 255 0 +0 0 0 diff --git a/sa1/graphics/ui/character_select/Names.png b/sa1/graphics/ui/character_select/Names.png new file mode 100644 index 0000000000..d5f362bca3 Binary files /dev/null and b/sa1/graphics/ui/character_select/Names.png differ diff --git a/sa1/graphics/ui/character_select/OK.pal b/sa1/graphics/ui/character_select/OK.pal new file mode 100644 index 0000000000..b183efd365 --- /dev/null +++ b/sa1/graphics/ui/character_select/OK.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 189 0 +0 0 0 +32 65 0 +16 16 16 +98 189 0 +255 255 255 +205 205 205 +238 238 255 +82 82 82 +255 16 16 +189 16 0 +0 49 255 +0 16 189 +255 123 0 +255 255 0 +0 0 0 diff --git a/sa1/graphics/ui/character_select/OK.png b/sa1/graphics/ui/character_select/OK.png new file mode 100644 index 0000000000..6efbc9b806 Binary files /dev/null and b/sa1/graphics/ui/character_select/OK.png differ diff --git a/sa1/graphics/ui/character_select/SelectACharacter.pal b/sa1/graphics/ui/character_select/SelectACharacter.pal new file mode 100644 index 0000000000..a0dbc5f554 --- /dev/null +++ b/sa1/graphics/ui/character_select/SelectACharacter.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 189 0 +0 0 0 +32 65 0 +16 16 16 +98 189 0 +255 255 255 +205 205 205 +238 238 255 +82 82 82 +255 65 0 +189 16 0 +0 49 255 +0 16 189 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/ui/character_select/SelectACharacter.png b/sa1/graphics/ui/character_select/SelectACharacter.png new file mode 100644 index 0000000000..c0c44be7f2 Binary files /dev/null and b/sa1/graphics/ui/character_select/SelectACharacter.png differ diff --git a/sa1/graphics/ui/character_select/ZigZag.pal b/sa1/graphics/ui/character_select/ZigZag.pal new file mode 100644 index 0000000000..eda5b58b89 --- /dev/null +++ b/sa1/graphics/ui/character_select/ZigZag.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +0 49 98 +0 16 189 +0 0 255 +82 65 0 +172 156 0 +255 222 0 +82 16 0 +172 32 0 +255 49 0 +98 32 49 +205 82 115 +255 139 172 +0 0 0 +255 255 255 +255 0 0 diff --git a/sa1/graphics/ui/character_select/ZigZag.png b/sa1/graphics/ui/character_select/ZigZag.png new file mode 100644 index 0000000000..2803c42096 Binary files /dev/null and b/sa1/graphics/ui/character_select/ZigZag.png differ diff --git a/sa1/graphics/ui/icon_lives/Amy.pal b/sa1/graphics/ui/icon_lives/Amy.pal new file mode 100644 index 0000000000..481a489b92 --- /dev/null +++ b/sa1/graphics/ui/icon_lives/Amy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +172 205 222 +238 65 156 +255 156 189 +189 32 82 +0 172 0 +115 115 115 +156 156 156 +156 82 0 +255 172 82 +172 0 0 +255 0 0 +0 0 0 +255 255 255 +255 255 156 +255 255 0 diff --git a/sa1/graphics/ui/icon_lives/Amy.png b/sa1/graphics/ui/icon_lives/Amy.png new file mode 100644 index 0000000000..20d8970335 Binary files /dev/null and b/sa1/graphics/ui/icon_lives/Amy.png differ diff --git a/sa1/graphics/ui/icon_lives/Knuckles.pal b/sa1/graphics/ui/icon_lives/Knuckles.pal new file mode 100644 index 0000000000..1c6c88849c --- /dev/null +++ b/sa1/graphics/ui/icon_lives/Knuckles.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 164 +180 180 180 +189 0 0 +255 32 0 +115 0 0 +32 65 255 +255 255 156 +255 222 0 +156 82 0 +255 172 82 +0 172 16 +115 255 0 +32 32 32 +255 255 255 +115 115 115 +255 156 0 diff --git a/sa1/graphics/ui/icon_lives/Knuckles.png b/sa1/graphics/ui/icon_lives/Knuckles.png new file mode 100644 index 0000000000..bb1c09316d Binary files /dev/null and b/sa1/graphics/ui/icon_lives/Knuckles.png differ diff --git a/sa1/graphics/ui/icon_lives/Sonic.pal b/sa1/graphics/ui/icon_lives/Sonic.pal new file mode 100644 index 0000000000..f0487bd289 --- /dev/null +++ b/sa1/graphics/ui/icon_lives/Sonic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +180 180 180 +0 32 156 +0 65 238 +0 0 98 +0 156 0 +255 255 156 +255 222 0 +156 82 16 +255 172 82 +172 0 0 +255 32 32 +32 32 32 +255 255 255 +115 115 115 +0 156 255 diff --git a/sa1/graphics/ui/icon_lives/Sonic.png b/sa1/graphics/ui/icon_lives/Sonic.png new file mode 100644 index 0000000000..7c1675b315 Binary files /dev/null and b/sa1/graphics/ui/icon_lives/Sonic.png differ diff --git a/sa1/graphics/ui/icon_lives/Tails.pal b/sa1/graphics/ui/icon_lives/Tails.pal new file mode 100644 index 0000000000..0d16b0fb01 --- /dev/null +++ b/sa1/graphics/ui/icon_lives/Tails.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 49 +255 0 255 +238 139 32 +255 189 32 +189 82 16 +172 205 222 +0 156 255 +32 65 255 +156 156 156 +115 115 115 +172 0 0 +255 32 32 +16 16 16 +255 255 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/ui/icon_lives/Tails.png b/sa1/graphics/ui/icon_lives/Tails.png new file mode 100644 index 0000000000..72649cb071 Binary files /dev/null and b/sa1/graphics/ui/icon_lives/Tails.png differ diff --git a/sa1/graphics/ui/icon_ring/HudRing.pal b/sa1/graphics/ui/icon_ring/HudRing.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/icon_ring/HudRing.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/icon_ring/HudRing.png b/sa1/graphics/ui/icon_ring/HudRing.png new file mode 100644 index 0000000000..f2bb2b82d1 Binary files /dev/null and b/sa1/graphics/ui/icon_ring/HudRing.png differ diff --git a/sa1/graphics/ui/options_overlays/Characters.pal b/sa1/graphics/ui/options_overlays/Characters.pal new file mode 100644 index 0000000000..2cf5b1039f --- /dev/null +++ b/sa1/graphics/ui/options_overlays/Characters.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +65 156 0 +156 156 156 +82 82 82 +65 65 65 +0 0 0 +222 222 255 +189 189 255 +82 82 255 +0 98 255 +0 0 172 +0 139 238 +0 0 222 +0 0 255 +255 255 0 +255 255 255 +0 0 205 diff --git a/sa1/graphics/ui/options_overlays/Characters.png b/sa1/graphics/ui/options_overlays/Characters.png new file mode 100644 index 0000000000..5a36d0f617 Binary files /dev/null and b/sa1/graphics/ui/options_overlays/Characters.png differ diff --git a/sa1/graphics/ui/options_overlays/Cursors.pal b/sa1/graphics/ui/options_overlays/Cursors.pal new file mode 100644 index 0000000000..8962d6e0b9 --- /dev/null +++ b/sa1/graphics/ui/options_overlays/Cursors.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +65 156 0 +156 156 156 +82 82 82 +65 65 65 +0 0 0 +222 222 255 +189 189 255 +82 82 255 +0 98 255 +0 0 172 +0 139 238 +0 0 222 +0 0 255 +255 255 255 +255 255 255 +0 0 205 diff --git a/sa1/graphics/ui/options_overlays/Cursors.png b/sa1/graphics/ui/options_overlays/Cursors.png new file mode 100644 index 0000000000..f2960d92f2 Binary files /dev/null and b/sa1/graphics/ui/options_overlays/Cursors.png differ diff --git a/sa1/graphics/ui/options_overlays/EnterName.pal b/sa1/graphics/ui/options_overlays/EnterName.pal new file mode 100644 index 0000000000..827c1359ef --- /dev/null +++ b/sa1/graphics/ui/options_overlays/EnterName.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +65 156 0 +156 156 156 +82 82 82 +65 65 65 +0 0 0 +222 222 255 +189 189 255 +82 82 255 +0 131 255 +0 24 189 +0 164 238 +0 65 222 +0 90 255 +255 255 0 +255 255 255 +0 49 213 diff --git a/sa1/graphics/ui/options_overlays/EnterName.png b/sa1/graphics/ui/options_overlays/EnterName.png new file mode 100644 index 0000000000..99e49fb51c Binary files /dev/null and b/sa1/graphics/ui/options_overlays/EnterName.png differ diff --git a/sa1/graphics/ui/options_overlays/RedCorner.pal b/sa1/graphics/ui/options_overlays/RedCorner.pal new file mode 100644 index 0000000000..a591f8e224 --- /dev/null +++ b/sa1/graphics/ui/options_overlays/RedCorner.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +65 156 0 +255 255 255 +255 82 98 +205 0 0 +205 0 0 +222 222 255 +189 189 255 +82 82 255 +0 98 255 +0 0 172 +0 139 238 +0 0 222 +0 0 255 +255 255 0 +255 255 255 +0 0 205 diff --git a/sa1/graphics/ui/options_overlays/RedCorner.png b/sa1/graphics/ui/options_overlays/RedCorner.png new file mode 100644 index 0000000000..7b66e260b1 Binary files /dev/null and b/sa1/graphics/ui/options_overlays/RedCorner.png differ diff --git a/sa1/graphics/ui/sound_test/Background.pal b/sa1/graphics/ui/sound_test/Background.pal new file mode 100644 index 0000000000..3edac3496a --- /dev/null +++ b/sa1/graphics/ui/sound_test/Background.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +213 255 0 +189 246 0 +164 238 0 +131 230 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/ui/sound_test/Background.png b/sa1/graphics/ui/sound_test/Background.png new file mode 100644 index 0000000000..401efb8c23 Binary files /dev/null and b/sa1/graphics/ui/sound_test/Background.png differ diff --git a/sa1/graphics/ui/sound_test/Box2.pal b/sa1/graphics/ui/sound_test/Box2.pal new file mode 100644 index 0000000000..e05beb0bf0 --- /dev/null +++ b/sa1/graphics/ui/sound_test/Box2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 49 0 +255 156 0 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +213 123 0 +238 148 0 +90 49 0 +255 49 0 diff --git a/sa1/graphics/ui/sound_test/Box2.png b/sa1/graphics/ui/sound_test/Box2.png new file mode 100644 index 0000000000..0eeabf2daf Binary files /dev/null and b/sa1/graphics/ui/sound_test/Box2.png differ diff --git a/sa1/graphics/ui/sound_test/Box3.pal b/sa1/graphics/ui/sound_test/Box3.pal new file mode 100644 index 0000000000..16f11baee3 --- /dev/null +++ b/sa1/graphics/ui/sound_test/Box3.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 180 156 +0 0 0 +82 57 32 +123 98 57 +156 123 74 +180 156 98 +197 180 139 +222 205 180 +172 139 82 +197 180 139 +222 205 180 +189 164 123 +230 222 197 +255 255 255 +230 222 197 +82 57 32 diff --git a/sa1/graphics/ui/sound_test/Box3.png b/sa1/graphics/ui/sound_test/Box3.png new file mode 100644 index 0000000000..6360b94dca Binary files /dev/null and b/sa1/graphics/ui/sound_test/Box3.png differ diff --git a/sa1/graphics/ui/sound_test/Box4.pal b/sa1/graphics/ui/sound_test/Box4.pal new file mode 100644 index 0000000000..15499622ea --- /dev/null +++ b/sa1/graphics/ui/sound_test/Box4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 180 156 +0 0 0 +156 0 0 +205 0 0 +255 0 0 +255 131 0 +255 189 0 +255 255 0 +238 139 74 +255 180 90 +255 222 148 +172 172 172 +222 222 222 +255 255 255 +255 255 156 +65 65 65 diff --git a/sa1/graphics/ui/sound_test/Box4.png b/sa1/graphics/ui/sound_test/Box4.png new file mode 100644 index 0000000000..989abc5e36 Binary files /dev/null and b/sa1/graphics/ui/sound_test/Box4.png differ diff --git a/sa1/graphics/ui/special_stage/46.pal b/sa1/graphics/ui/special_stage/46.pal new file mode 100644 index 0000000000..a9450dce2d --- /dev/null +++ b/sa1/graphics/ui/special_stage/46.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 205 0 +115 115 115 +255 255 255 +172 49 0 +255 139 82 +255 65 0 +222 49 0 +255 255 0 +189 255 65 +98 139 255 +82 32 238 +238 156 0 +0 0 0 +189 189 189 +0 0 172 +49 205 255 diff --git a/sa1/graphics/ui/special_stage/46.png b/sa1/graphics/ui/special_stage/46.png new file mode 100644 index 0000000000..cd09f0afca Binary files /dev/null and b/sa1/graphics/ui/special_stage/46.png differ diff --git a/sa1/graphics/ui/special_stage/53.pal b/sa1/graphics/ui/special_stage/53.pal new file mode 100644 index 0000000000..cf958c49ac --- /dev/null +++ b/sa1/graphics/ui/special_stage/53.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 156 65 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 255 255 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/special_stage/53.png b/sa1/graphics/ui/special_stage/53.png new file mode 100644 index 0000000000..5b087adede Binary files /dev/null and b/sa1/graphics/ui/special_stage/53.png differ diff --git a/sa1/graphics/ui/special_stage/ChaosEmerald.pal b/sa1/graphics/ui/special_stage/ChaosEmerald.pal new file mode 100644 index 0000000000..3a3aef91a4 --- /dev/null +++ b/sa1/graphics/ui/special_stage/ChaosEmerald.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +106 0 0 +156 0 0 +205 0 0 +255 57 0 +255 172 164 +255 255 255 +0 0 189 +0 32 222 +0 82 230 +0 139 255 +0 213 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/ui/special_stage/ChaosEmerald.png b/sa1/graphics/ui/special_stage/ChaosEmerald.png new file mode 100644 index 0000000000..1a7611db2c Binary files /dev/null and b/sa1/graphics/ui/special_stage/ChaosEmerald.png differ diff --git a/sa1/graphics/ui/special_stage/TextGotAChaosEmerald.pal b/sa1/graphics/ui/special_stage/TextGotAChaosEmerald.pal new file mode 100644 index 0000000000..cf958c49ac --- /dev/null +++ b/sa1/graphics/ui/special_stage/TextGotAChaosEmerald.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 156 65 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 255 255 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/special_stage/TextGotAChaosEmerald.png b/sa1/graphics/ui/special_stage/TextGotAChaosEmerald.png new file mode 100644 index 0000000000..a889530202 Binary files /dev/null and b/sa1/graphics/ui/special_stage/TextGotAChaosEmerald.png differ diff --git a/sa1/graphics/ui/special_stage/TextGotRings0.pal b/sa1/graphics/ui/special_stage/TextGotRings0.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/special_stage/TextGotRings0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/special_stage/TextGotRings0.png b/sa1/graphics/ui/special_stage/TextGotRings0.png new file mode 100644 index 0000000000..1a4e8a621e Binary files /dev/null and b/sa1/graphics/ui/special_stage/TextGotRings0.png differ diff --git a/sa1/graphics/ui/special_stage/TextGotRings1.pal b/sa1/graphics/ui/special_stage/TextGotRings1.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/special_stage/TextGotRings1.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/special_stage/TextGotRings1.png b/sa1/graphics/ui/special_stage/TextGotRings1.png new file mode 100644 index 0000000000..1c006073b8 Binary files /dev/null and b/sa1/graphics/ui/special_stage/TextGotRings1.png differ diff --git a/sa1/graphics/ui/special_stage/TextGotRings2.pal b/sa1/graphics/ui/special_stage/TextGotRings2.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/special_stage/TextGotRings2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/special_stage/TextGotRings2.png b/sa1/graphics/ui/special_stage/TextGotRings2.png new file mode 100644 index 0000000000..2d9723ddf9 Binary files /dev/null and b/sa1/graphics/ui/special_stage/TextGotRings2.png differ diff --git a/sa1/graphics/ui/special_stage/TextSpecialStage.pal b/sa1/graphics/ui/special_stage/TextSpecialStage.pal new file mode 100644 index 0000000000..f7df0515c5 --- /dev/null +++ b/sa1/graphics/ui/special_stage/TextSpecialStage.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 189 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/special_stage/TextSpecialStage.png b/sa1/graphics/ui/special_stage/TextSpecialStage.png new file mode 100644 index 0000000000..fd9caacbe5 Binary files /dev/null and b/sa1/graphics/ui/special_stage/TextSpecialStage.png differ diff --git a/sa1/graphics/ui/special_stage/TextStart.pal b/sa1/graphics/ui/special_stage/TextStart.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/special_stage/TextStart.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/special_stage/TextStart.png b/sa1/graphics/ui/special_stage/TextStart.png new file mode 100644 index 0000000000..2481e3dd83 Binary files /dev/null and b/sa1/graphics/ui/special_stage/TextStart.png differ diff --git a/sa1/graphics/ui/stage_intro/Amy.pal b/sa1/graphics/ui/stage_intro/Amy.pal new file mode 100644 index 0000000000..8ea3694ae9 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/Amy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +255 0 0 +255 131 172 +255 255 255 +0 49 98 +0 24 180 +0 0 255 +0 0 0 +82 16 0 +172 32 0 +255 57 0 +82 74 0 +172 148 0 +255 222 0 +98 41 49 +197 82 115 diff --git a/sa1/graphics/ui/stage_intro/Amy.png b/sa1/graphics/ui/stage_intro/Amy.png new file mode 100644 index 0000000000..c1bbf18178 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/Amy.png differ diff --git a/sa1/graphics/ui/stage_intro/AngelIslandZone.pal b/sa1/graphics/ui/stage_intro/AngelIslandZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/AngelIslandZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/AngelIslandZone.png b/sa1/graphics/ui/stage_intro/AngelIslandZone.png new file mode 100644 index 0000000000..f8b9ca45db Binary files /dev/null and b/sa1/graphics/ui/stage_intro/AngelIslandZone.png differ diff --git a/sa1/graphics/ui/stage_intro/CasinoParadiseZone.pal b/sa1/graphics/ui/stage_intro/CasinoParadiseZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/CasinoParadiseZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/CasinoParadiseZone.png b/sa1/graphics/ui/stage_intro/CasinoParadiseZone.png new file mode 100644 index 0000000000..d839cf2918 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/CasinoParadiseZone.png differ diff --git a/sa1/graphics/ui/stage_intro/CosmicAngelZone.pal b/sa1/graphics/ui/stage_intro/CosmicAngelZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/CosmicAngelZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/CosmicAngelZone.png b/sa1/graphics/ui/stage_intro/CosmicAngelZone.png new file mode 100644 index 0000000000..6524d00d19 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/CosmicAngelZone.png differ diff --git a/sa1/graphics/ui/stage_intro/EggRocketZone.pal b/sa1/graphics/ui/stage_intro/EggRocketZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/EggRocketZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/EggRocketZone.png b/sa1/graphics/ui/stage_intro/EggRocketZone.png new file mode 100644 index 0000000000..d9b37f8633 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/EggRocketZone.png differ diff --git a/sa1/graphics/ui/stage_intro/FactoryChaoGarden.pal b/sa1/graphics/ui/stage_intro/FactoryChaoGarden.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/FactoryChaoGarden.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/FactoryChaoGarden.png b/sa1/graphics/ui/stage_intro/FactoryChaoGarden.png new file mode 100644 index 0000000000..074df3ae86 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/FactoryChaoGarden.png differ diff --git a/sa1/graphics/ui/stage_intro/ForestChaoGarden.pal b/sa1/graphics/ui/stage_intro/ForestChaoGarden.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/ForestChaoGarden.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/ForestChaoGarden.png b/sa1/graphics/ui/stage_intro/ForestChaoGarden.png new file mode 100644 index 0000000000..48ac40a08e Binary files /dev/null and b/sa1/graphics/ui/stage_intro/ForestChaoGarden.png differ diff --git a/sa1/graphics/ui/stage_intro/IceMountainZone.pal b/sa1/graphics/ui/stage_intro/IceMountainZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/IceMountainZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/IceMountainZone.png b/sa1/graphics/ui/stage_intro/IceMountainZone.png new file mode 100644 index 0000000000..e4fe439b87 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/IceMountainZone.png differ diff --git a/sa1/graphics/ui/stage_intro/Japanese0.pal b/sa1/graphics/ui/stage_intro/Japanese0.pal new file mode 100644 index 0000000000..bcf180d6e3 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/Japanese0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 246 0 +255 205 0 +255 180 32 +246 156 65 +213 123 74 +172 98 65 +131 65 65 +90 32 57 +0 0 0 +255 255 255 +255 255 0 +255 49 0 +255 164 115 diff --git a/sa1/graphics/ui/stage_intro/Japanese0.png b/sa1/graphics/ui/stage_intro/Japanese0.png new file mode 100644 index 0000000000..b168784491 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/Japanese0.png differ diff --git a/sa1/graphics/ui/stage_intro/Japanese1.pal b/sa1/graphics/ui/stage_intro/Japanese1.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/stage_intro/Japanese1.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/Japanese1.png b/sa1/graphics/ui/stage_intro/Japanese1.png new file mode 100644 index 0000000000..f59fc7907c Binary files /dev/null and b/sa1/graphics/ui/stage_intro/Japanese1.png differ diff --git a/sa1/graphics/ui/stage_intro/Knuckles.pal b/sa1/graphics/ui/stage_intro/Knuckles.pal new file mode 100644 index 0000000000..8ea3694ae9 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/Knuckles.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +255 0 0 +255 131 172 +255 255 255 +0 49 98 +0 24 180 +0 0 255 +0 0 0 +82 16 0 +172 32 0 +255 57 0 +82 74 0 +172 148 0 +255 222 0 +98 41 49 +197 82 115 diff --git a/sa1/graphics/ui/stage_intro/Knuckles.png b/sa1/graphics/ui/stage_intro/Knuckles.png new file mode 100644 index 0000000000..59ce693198 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/Knuckles.png differ diff --git a/sa1/graphics/ui/stage_intro/NeoGreenHillZone.pal b/sa1/graphics/ui/stage_intro/NeoGreenHillZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/NeoGreenHillZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/NeoGreenHillZone.png b/sa1/graphics/ui/stage_intro/NeoGreenHillZone.png new file mode 100644 index 0000000000..d905ad4654 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/NeoGreenHillZone.png differ diff --git a/sa1/graphics/ui/stage_intro/PinballChaoGarden.pal b/sa1/graphics/ui/stage_intro/PinballChaoGarden.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/PinballChaoGarden.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/PinballChaoGarden.png b/sa1/graphics/ui/stage_intro/PinballChaoGarden.png new file mode 100644 index 0000000000..61604b264e Binary files /dev/null and b/sa1/graphics/ui/stage_intro/PinballChaoGarden.png differ diff --git a/sa1/graphics/ui/stage_intro/SecretBaseZone.pal b/sa1/graphics/ui/stage_intro/SecretBaseZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/SecretBaseZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/SecretBaseZone.png b/sa1/graphics/ui/stage_intro/SecretBaseZone.png new file mode 100644 index 0000000000..b893094890 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/SecretBaseZone.png differ diff --git a/sa1/graphics/ui/stage_intro/Sonic.pal b/sa1/graphics/ui/stage_intro/Sonic.pal new file mode 100644 index 0000000000..8ea3694ae9 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/Sonic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +255 0 0 +255 131 172 +255 255 255 +0 49 98 +0 24 180 +0 0 255 +0 0 0 +82 16 0 +172 32 0 +255 57 0 +82 74 0 +172 148 0 +255 222 0 +98 41 49 +197 82 115 diff --git a/sa1/graphics/ui/stage_intro/Sonic.png b/sa1/graphics/ui/stage_intro/Sonic.png new file mode 100644 index 0000000000..e53d14c99d Binary files /dev/null and b/sa1/graphics/ui/stage_intro/Sonic.png differ diff --git a/sa1/graphics/ui/stage_intro/SpaceChaoGarden.pal b/sa1/graphics/ui/stage_intro/SpaceChaoGarden.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/SpaceChaoGarden.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/SpaceChaoGarden.png b/sa1/graphics/ui/stage_intro/SpaceChaoGarden.png new file mode 100644 index 0000000000..6edc445ac3 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/SpaceChaoGarden.png differ diff --git a/sa1/graphics/ui/stage_intro/Tails.pal b/sa1/graphics/ui/stage_intro/Tails.pal new file mode 100644 index 0000000000..8ea3694ae9 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/Tails.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +255 0 0 +255 131 172 +255 255 255 +0 49 98 +0 24 180 +0 0 255 +0 0 0 +82 16 0 +172 32 0 +255 57 0 +82 74 0 +172 148 0 +255 222 0 +98 41 49 +197 82 115 diff --git a/sa1/graphics/ui/stage_intro/Tails.png b/sa1/graphics/ui/stage_intro/Tails.png new file mode 100644 index 0000000000..89557fb791 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/Tails.png differ diff --git a/sa1/graphics/ui/stage_intro/TheMoonZone.pal b/sa1/graphics/ui/stage_intro/TheMoonZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/TheMoonZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/TheMoonZone.png b/sa1/graphics/ui/stage_intro/TheMoonZone.png new file mode 100644 index 0000000000..0094e4f16e Binary files /dev/null and b/sa1/graphics/ui/stage_intro/TheMoonZone.png differ diff --git a/sa1/graphics/ui/stage_intro/XZone.pal b/sa1/graphics/ui/stage_intro/XZone.pal new file mode 100644 index 0000000000..1792e42616 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/XZone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +139 255 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_intro/XZone.png b/sa1/graphics/ui/stage_intro/XZone.png new file mode 100644 index 0000000000..f9759e75a2 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/XZone.png differ diff --git a/sa1/graphics/ui/stage_intro/char_names.pal b/sa1/graphics/ui/stage_intro/char_names.pal new file mode 100644 index 0000000000..8ea3694ae9 --- /dev/null +++ b/sa1/graphics/ui/stage_intro/char_names.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +255 0 0 +255 131 172 +255 255 255 +0 49 98 +0 24 180 +0 0 255 +0 0 0 +82 16 0 +172 32 0 +255 57 0 +82 74 0 +172 148 0 +255 222 0 +98 41 49 +197 82 115 diff --git a/sa1/graphics/ui/stage_intro/char_names.png b/sa1/graphics/ui/stage_intro/char_names.png new file mode 100644 index 0000000000..b8deb04173 Binary files /dev/null and b/sa1/graphics/ui/stage_intro/char_names.png differ diff --git a/sa1/graphics/ui/stage_result/Act12.pal b/sa1/graphics/ui/stage_result/Act12.pal new file mode 100644 index 0000000000..bcf180d6e3 --- /dev/null +++ b/sa1/graphics/ui/stage_result/Act12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 246 0 +255 205 0 +255 180 32 +246 156 65 +213 123 74 +172 98 65 +131 65 65 +90 32 57 +0 0 0 +255 255 255 +255 255 0 +255 49 0 +255 164 115 diff --git a/sa1/graphics/ui/stage_result/Act12.png b/sa1/graphics/ui/stage_result/Act12.png new file mode 100644 index 0000000000..6289dc81c6 Binary files /dev/null and b/sa1/graphics/ui/stage_result/Act12.png differ diff --git a/sa1/graphics/ui/stage_result/Amy.pal b/sa1/graphics/ui/stage_result/Amy.pal new file mode 100644 index 0000000000..105209db4a --- /dev/null +++ b/sa1/graphics/ui/stage_result/Amy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +0 0 0 +255 156 189 +238 65 156 +189 32 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/ui/stage_result/Amy.png b/sa1/graphics/ui/stage_result/Amy.png new file mode 100644 index 0000000000..4ffc85ee77 Binary files /dev/null and b/sa1/graphics/ui/stage_result/Amy.png differ diff --git a/sa1/graphics/ui/stage_result/GotThroughTexts.pal b/sa1/graphics/ui/stage_result/GotThroughTexts.pal new file mode 100644 index 0000000000..ecf6bd0d61 --- /dev/null +++ b/sa1/graphics/ui/stage_result/GotThroughTexts.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 255 255 +238 238 238 +222 222 222 +255 255 0 +255 205 0 +172 98 65 +0 0 0 +255 0 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/ui/stage_result/GotThroughTexts.png b/sa1/graphics/ui/stage_result/GotThroughTexts.png new file mode 100644 index 0000000000..81f7e75a2b Binary files /dev/null and b/sa1/graphics/ui/stage_result/GotThroughTexts.png differ diff --git a/sa1/graphics/ui/stage_result/HeadlineBack.pal b/sa1/graphics/ui/stage_result/HeadlineBack.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/stage_result/HeadlineBack.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_result/HeadlineBack.png b/sa1/graphics/ui/stage_result/HeadlineBack.png new file mode 100644 index 0000000000..0c5e07dbab Binary files /dev/null and b/sa1/graphics/ui/stage_result/HeadlineBack.png differ diff --git a/sa1/graphics/ui/stage_result/Knuckles.pal b/sa1/graphics/ui/stage_result/Knuckles.pal new file mode 100644 index 0000000000..b4bc763564 --- /dev/null +++ b/sa1/graphics/ui/stage_result/Knuckles.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +0 0 0 +255 32 0 +189 0 0 +115 0 0 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/ui/stage_result/Knuckles.png b/sa1/graphics/ui/stage_result/Knuckles.png new file mode 100644 index 0000000000..c45fbbca70 Binary files /dev/null and b/sa1/graphics/ui/stage_result/Knuckles.png differ diff --git a/sa1/graphics/ui/stage_result/Sonic.pal b/sa1/graphics/ui/stage_result/Sonic.pal new file mode 100644 index 0000000000..7836939a74 --- /dev/null +++ b/sa1/graphics/ui/stage_result/Sonic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +0 0 0 +0 65 238 +0 32 156 +0 0 98 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/ui/stage_result/Sonic.png b/sa1/graphics/ui/stage_result/Sonic.png new file mode 100644 index 0000000000..3eb1ccc2ef Binary files /dev/null and b/sa1/graphics/ui/stage_result/Sonic.png differ diff --git a/sa1/graphics/ui/stage_result/Tails.pal b/sa1/graphics/ui/stage_result/Tails.pal new file mode 100644 index 0000000000..345c35b22c --- /dev/null +++ b/sa1/graphics/ui/stage_result/Tails.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 0 +0 0 0 +255 189 32 +238 139 32 +172 65 0 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/sa1/graphics/ui/stage_result/Tails.png b/sa1/graphics/ui/stage_result/Tails.png new file mode 100644 index 0000000000..58359c5f93 Binary files /dev/null and b/sa1/graphics/ui/stage_result/Tails.png differ diff --git a/sa1/graphics/ui/stage_ui/AsciiChars.pal b/sa1/graphics/ui/stage_ui/AsciiChars.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/stage_ui/AsciiChars.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_ui/AsciiChars.png b/sa1/graphics/ui/stage_ui/AsciiChars.png new file mode 100644 index 0000000000..36ec389705 Binary files /dev/null and b/sa1/graphics/ui/stage_ui/AsciiChars.png differ diff --git a/sa1/graphics/ui/stage_ui/OK.pal b/sa1/graphics/ui/stage_ui/OK.pal new file mode 100644 index 0000000000..3ef29f658b --- /dev/null +++ b/sa1/graphics/ui/stage_ui/OK.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/stage_ui/OK.png b/sa1/graphics/ui/stage_ui/OK.png new file mode 100644 index 0000000000..8624273ffe Binary files /dev/null and b/sa1/graphics/ui/stage_ui/OK.png differ diff --git a/sa1/graphics/ui/stage_ui/TimerDigits.pal b/sa1/graphics/ui/stage_ui/TimerDigits.pal new file mode 100644 index 0000000000..f55f6f4333 --- /dev/null +++ b/sa1/graphics/ui/stage_ui/TimerDigits.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 246 0 +255 205 0 +255 180 32 +246 156 65 +213 123 74 +172 98 65 +131 65 65 +90 32 57 +0 0 0 +213 213 213 +238 238 238 +57 57 57 +255 49 0 diff --git a/sa1/graphics/ui/stage_ui/TimerDigits.png b/sa1/graphics/ui/stage_ui/TimerDigits.png new file mode 100644 index 0000000000..03ae30456e Binary files /dev/null and b/sa1/graphics/ui/stage_ui/TimerDigits.png differ diff --git a/sa1/graphics/ui/unknown/Transparent0.pal b/sa1/graphics/ui/unknown/Transparent0.pal new file mode 100644 index 0000000000..3a3aef91a4 --- /dev/null +++ b/sa1/graphics/ui/unknown/Transparent0.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +106 0 0 +156 0 0 +205 0 0 +255 57 0 +255 172 164 +255 255 255 +0 0 189 +0 32 222 +0 82 230 +0 139 255 +0 213 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/ui/unknown/Transparent0.png b/sa1/graphics/ui/unknown/Transparent0.png new file mode 100644 index 0000000000..ddc4cec333 Binary files /dev/null and b/sa1/graphics/ui/unknown/Transparent0.png differ diff --git a/sa1/graphics/ui/unknown/Transparent1.pal b/sa1/graphics/ui/unknown/Transparent1.pal new file mode 100644 index 0000000000..cdc58975ac --- /dev/null +++ b/sa1/graphics/ui/unknown/Transparent1.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +106 74 0 +156 115 0 +205 156 0 +255 205 0 +255 255 98 +255 255 255 +0 98 0 +0 139 0 +0 180 0 +0 222 0 +123 238 123 +255 255 255 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/ui/unknown/Transparent1.png b/sa1/graphics/ui/unknown/Transparent1.png new file mode 100644 index 0000000000..657cb096e3 Binary files /dev/null and b/sa1/graphics/ui/unknown/Transparent1.png differ diff --git a/sa1/graphics/ui/unknown/Transparent2.pal b/sa1/graphics/ui/unknown/Transparent2.pal new file mode 100644 index 0000000000..7fdb184ec1 --- /dev/null +++ b/sa1/graphics/ui/unknown/Transparent2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +65 90 98 +115 123 131 +148 156 164 +189 189 189 +230 230 230 +255 255 255 +0 106 197 +0 148 222 +0 172 238 +0 205 255 +123 255 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/ui/unknown/Transparent2.png b/sa1/graphics/ui/unknown/Transparent2.png new file mode 100644 index 0000000000..9438454349 Binary files /dev/null and b/sa1/graphics/ui/unknown/Transparent2.png differ diff --git a/sa1/graphics/ui/unknown/Transparent3.pal b/sa1/graphics/ui/unknown/Transparent3.pal new file mode 100644 index 0000000000..5c9f6beaf6 --- /dev/null +++ b/sa1/graphics/ui/unknown/Transparent3.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 180 57 +98 0 106 +148 0 156 +197 0 205 +255 0 255 +255 189 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/sa1/graphics/ui/unknown/Transparent3.png b/sa1/graphics/ui/unknown/Transparent3.png new file mode 100644 index 0000000000..b759cbd84c Binary files /dev/null and b/sa1/graphics/ui/unknown/Transparent3.png differ diff --git a/sa1/graphics/ui/unknown/Transparent4.pal b/sa1/graphics/ui/unknown/Transparent4.pal new file mode 100644 index 0000000000..fb3e82b3ca --- /dev/null +++ b/sa1/graphics/ui/unknown/Transparent4.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 255 +255 255 156 +255 255 255 +238 238 238 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +222 222 222 +238 238 238 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/unknown/Transparent4.png b/sa1/graphics/ui/unknown/Transparent4.png new file mode 100644 index 0000000000..185317d999 Binary files /dev/null and b/sa1/graphics/ui/unknown/Transparent4.png differ diff --git a/sa1/graphics/ui/unknown/Transparent5.pal b/sa1/graphics/ui/unknown/Transparent5.pal new file mode 100644 index 0000000000..ef47b18d6a --- /dev/null +++ b/sa1/graphics/ui/unknown/Transparent5.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 156 0 +255 255 0 +255 255 156 +255 255 0 +255 205 0 +255 189 32 +255 156 65 +222 115 65 +172 98 65 +139 65 65 +82 32 49 +0 0 0 +255 205 0 +255 255 0 +49 49 49 +255 49 0 diff --git a/sa1/graphics/ui/unknown/Transparent5.png b/sa1/graphics/ui/unknown/Transparent5.png new file mode 100644 index 0000000000..0d8e971c44 Binary files /dev/null and b/sa1/graphics/ui/unknown/Transparent5.png differ diff --git a/sa1/include/anim_sizes.h b/sa1/include/anim_sizes.h new file mode 100644 index 0000000000..0024249ada --- /dev/null +++ b/sa1/include/anim_sizes.h @@ -0,0 +1,1214 @@ +#ifndef GUARD_ANIM_SIZES_H +#define GUARD_ANIM_SIZES_H + +// TODO: Auto-generate this file +#define MAX_TILES(_animName) ((_animName##_WIDTH / 8) * (_animName##_HEIGHT / 8)) +#define MAX_TILES_VARIANT(_animName, _variant) ((_animName##_VAR##_variant##_WIDTH / 8) * (_animName##_VAR##_variant##_HEIGHT / 8)) +#define ALLOC_TILES(_animName) VramMalloc(((_animName##_WIDTH / 8) * (_animName##_HEIGHT / 8))) +#define ALLOC_TILES_VARIANT(_animName, _variant) \ + VramMalloc(((_animName##_VAR##_variant##_WIDTH / 8) * (_animName##_VAR##_variant##_HEIGHT / 8))) + +#if (GAME == GAME_SA1) +// 005 +#define SA1_ANIM_SONIC_RUN_WIDTH 64 +#define SA1_ANIM_SONIC_RUN_HEIGHT 64 + +// 39/138/... +#define SA1_CHAR_ANIM_MARBLE_TRACK_WIDTH 64 +#define SA1_CHAR_ANIM_MARBLE_TRACK_HEIGHT 64 + +// 50/149/... +#define SA1_CHAR_ANIM_50_WIDTH 32 +#define SA1_CHAR_ANIM_50_HEIGHT 32 + +// 250 +#define SA1_ANIM_KNUCKLES_UPPERCUT_WIDTH 32 +#define SA1_ANIM_KNUCKLES_UPPERCUT_HEIGHT 48 + +// 400 +#define SA1_ANIM_SUPER_SONIC_DASH_WIDTH 64 +#define SA1_ANIM_SUPER_SONIC_DASH_HEIGHT 40 + +// 401 +#define SA1_ANIM_KIKI_WIDTH 32 +#define SA1_ANIM_KIKI_HEIGHT 40 + +// 403 +#define SA1_ANIM_BUZZER_WIDTH 32 +#define SA1_ANIM_BUZZER_HEIGHT 40 + +// 404 +#define SA1_ANIM_GAMIGAMI_WIDTH 48 +#define SA1_ANIM_GAMIGAMI_HEIGHT 40 + +// 405 +#define SA1_ANIM_RHINOTANK_WIDTH 40 +#define SA1_ANIM_RHINOTANK_HEIGHT 32 + +// 406 +#define SA1_ANIM_KEROKERO_WIDTH 40 +#define SA1_ANIM_KEROKERO_HEIGHT 32 + +// 411 +#define SA1_ANIM_SENBON_WIDTH 32 +#define SA1_ANIM_SENBON_HEIGHT 32 + +// 410 +#define SA1_ANIM_GAMIGAMI_PROJ_WIDTH 16 +#define SA1_ANIM_GAMIGAMI_PROJ_HEIGHT 16 + +// 412 +#define SA1_ANIM_TENTOU_WIDTH 24 +#define SA1_ANIM_TENTOU_HEIGHT 16 + +// 413 +#define SA1_ANIM_FIREBALL_WIDTH (32 / 2) +#define SA1_ANIM_FIREBALL_HEIGHT 32 + +// 415 +#define SA1_ANIM_HANABII_WIDTH 32 +#define SA1_ANIM_HANABII_HEIGHT 40 + +// 416 +#define SA1_ANIM_HANABII_FIREWORK_WIDTH 32 +#define SA1_ANIM_HANABII_FIREWORK_HEIGHT 32 + +// 417 +#define SA1_ANIM_SLOT_WIDTH 24 +#define SA1_ANIM_SLOT_HEIGHT 40 + +// 418 +#define SA1_ANIM_PIERROT_WIDTH 48 +#define SA1_ANIM_PIERROT_HEIGHT 48 + +// 419 +#define SA1_ANIM_HANABII_PROJ_WIDTH 16 +#define SA1_ANIM_HANABII_PROJ_HEIGHT 16 + +// 420 +#define SA1_ANIM_SLOT_PROJ_WIDTH 16 +#define SA1_ANIM_SLOT_PROJ_HEIGHT 16 + +// 421 +#define SA1_ANIM_YUKIMARU_PROJ_WIDTH 8 +#define SA1_ANIM_YUKIMARU_PROJ_HEIGHT 8 + +// 422 +#define SA1_ANIM_YUKIMARU_WIDTH (32 / 2) +#define SA1_ANIM_YUKIMARU_HEIGHT 32 + +// 423 +#define SA1_ANIM_YUKIMARU_SIDEWAYS_WIDTH 32 +#define SA1_ANIM_YUKIMARU_SIDEWAYS_HEIGHT (32 / 2) + +// 424 +#define SA1_ANIM_DRISAME_WIDTH 40 +#define SA1_ANIM_DRISAME_HEIGHT 16 + +// 425 +#define SA1_ANIM_KURAA_WIDTH 24 +#define SA1_ANIM_KURAA_HEIGHT 40 + +// 426 +#define SA1_ANIM_PEN_WIDTH 16 +#define SA1_ANIM_PEN_HEIGHT 24 + +// 430 +#define SA1_ANIM_LEON_WIDTH 64 +#define SA1_ANIM_LEON_HEIGHT 24 + +// 431 +#define SA1_ANIM_WAMU_WIDTH 16 +#define SA1_ANIM_WAMU_HEIGHT 16 + +// 432 +#define SA1_ANIM_MIRROR_WIDTH 40 +#define SA1_ANIM_MIRROR_HEIGHT 32 + +// 433 +#define SA1_ANIM_OCT_WIDTH (32 / 2) +#define SA1_ANIM_OCT_HEIGHT 32 + +// 434 +#define SA1_ANIM_MOLE_WIDTH 32 +#define SA1_ANIM_MOLE_HEIGHT 32 + +// 452 +#define SA1_ANIM_CHECKPOINT_WIDTH 24 +#define SA1_ANIM_CHECKPOINT_HEIGHT 48 + +// 453 +#define SA1_ANIM_GOAL_WIDTH 48 +#define SA1_ANIM_GOAL_HEIGHT 48 + +// 454 +#define SA1_ANIM_SPIKES_WIDTH 32 +#define SA1_ANIM_SPIKES_HEIGHT 32 + +// 455 +#define SA1_ANIM_SPRING_WIDTH 32 +#define SA1_ANIM_SPRING_HEIGHT 32 + +// 458 +#define SA1_ANIM_ROCK_WIDTH 48 +#define SA1_ANIM_ROCK_HEIGHT 32 + +// 459 +#define SA1_ANIM_ROCK_DEBRIS_S_WIDTH 8 +#define SA1_ANIM_ROCK_DEBRIS_S_HEIGHT 8 + +// 460 +#define SA1_ANIM_ROCK_DEBRIS_L_WIDTH 16 +#define SA1_ANIM_ROCK_DEBRIS_L_HEIGHT 16 + +// 461 +#define SA1_ANIM_TRAMPOLINE1_WIDTH 48 +#define SA1_ANIM_TRAMPOLINE1_HEIGHT 32 + +// 462 +#define SA1_ANIM_BOUNCE_BLOCK_1_WIDTH 32 +#define SA1_ANIM_BOUNCE_BLOCK_1_HEIGHT 24 + +// 467 +#define SA1_ANIM_SHRUBBERY_WIDTH 32 +#define SA1_ANIM_SHRUBBERY_HEIGHT 32 + +// 468 +#define SA1_ANIM_BOUNCY_BAR_WIDTH 32 +#define SA1_ANIM_BOUNCY_BAR_HEIGHT 24 + +// 469 +#define SA1_ANIM_RED_FLAG_V_WIDTH 24 +#define SA1_ANIM_RED_FLAG_V_HEIGHT 32 + +// 470 +#define SA1_ANIM_RED_FLAG_H_WIDTH 24 +#define SA1_ANIM_RED_FLAG_H_HEIGHT 32 + +// 473 +#define SA1_ANIM_WATER_BRIDGE_SPLASH_WIDTH 56 +#define SA1_ANIM_WATER_BRIDGE_SPLASH_HEIGHT 56 + +// 474 +#define SA1_ANIM_WATER_SLIDE_SPLASH_WIDTH 48 +#define SA1_ANIM_WATER_SLIDE_SPLASH_HEIGHT 24 + +// 479 +#define SA1_ANIM_BALLOON_BLUE_WIDTH 24 +#define SA1_ANIM_BALLOON_BLUE_HEIGHT 48 + +// 478 +#define SA1_ANIM_FLIPPER_WIDTH 48 +#define SA1_ANIM_FLIPPER_HEIGHT 32 +#define SA1_ANIM_FLIPPER_VAR0_WIDTH 48 +#define SA1_ANIM_FLIPPER_VAR0_HEIGHT 24 +#define SA1_ANIM_FLIPPER_VAR1_WIDTH 48 +#define SA1_ANIM_FLIPPER_VAR1_HEIGHT 32 +#define SA1_ANIM_FLIPPER_VAR2_WIDTH 24 +#define SA1_ANIM_FLIPPER_VAR2_HEIGHT 48 +#define SA1_ANIM_FLIPPER_VAR3_WIDTH 40 +#define SA1_ANIM_FLIPPER_VAR3_HEIGHT 48 + +// 482 +#define SA1_ANIM_FIREWORKS_WIDTH 24 +#define SA1_ANIM_FIREWORKS_HEIGHT 24 + +// 484 +#define SA1_ANIM_BUMPER_BIG_WIDTH 48 +#define SA1_ANIM_BUMPER_BIG_HEIGHT 40 + +// 489 +#define SA1_ANIM_SHIP_SWING_SEGMENT_WIDTH 8 +#define SA1_ANIM_SHIP_SWING_SEGMENT_HEIGHT 8 + +// 490 +#define SA1_ANIM_SHIP_SWING_HOOK_WIDTH 24 +#define SA1_ANIM_SHIP_SWING_HOOK_HEIGHT 24 + +// 491 +#define SA1_ANIM_SHIP_SWING_WIDTH (96 / 2) +#define SA1_ANIM_SHIP_SWING_HEIGHT 40 + +// 492 +#define SA1_ANIM_SEGA_SONIC_LETTERS_WIDTH 32 +#define SA1_ANIM_SEGA_SONIC_LETTERS_HEIGHT 32 + +// 483 +#define SA1_ANIM_FIREWORKS_SMALL_WIDTH 16 +#define SA1_ANIM_FIREWORKS_SMALL_HEIGHT 16 + +// 495 +#define SA1_ANIM_PLATFORM_HORZ_3_WIDTH 48 +#define SA1_ANIM_PLATFORM_HORZ_3_HEIGHT 24 + +// 496 +#define SA1_ANIM_PANEL_GATE_SIDEWAYS_WIDTH 16 +#define SA1_ANIM_PANEL_GATE_SIDEWAYS_HEIGHT 32 + +// 497 +#define SA1_ANIM_PANEL_GATE_UPDOWN_WIDTH 32 +#define SA1_ANIM_PANEL_GATE_UPDOWN_HEIGHT 16 + +// 498 +#define SA1_ANIM_CRANE_CLAW_2_WIDTH 48 +#define SA1_ANIM_CRANE_CLAW_2_HEIGHT 40 +#define SA1_ANIM_CRANE_CLAW_2_VAR3_WIDTH 8 +#define SA1_ANIM_CRANE_CLAW_2_VAR3_HEIGHT 24 + +// 501 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR0_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR0_HEIGHT 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR1_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR1_HEIGHT 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR2_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR2_HEIGHT 16 + +// 503 +#define SA1_ANIM_ANCHOR_HANDLES_WIDTH 8 +#define SA1_ANIM_ANCHOR_HANDLES_HEIGHT 8 + +// 504 +#define SA1_ANIM_HOOK_RAIL_2_WIDTH 32 +#define SA1_ANIM_HOOK_RAIL_2_HEIGHT 32 +#define SA1_ANIM_HOOK_RAIL_2_VAR0_WIDTH 16 +#define SA1_ANIM_HOOK_RAIL_2_VAR0_HEIGHT 24 +#define SA1_ANIM_HOOK_RAIL_2_VAR1_WIDTH 32 +#define SA1_ANIM_HOOK_RAIL_2_VAR1_HEIGHT 32 + +// 505 +#define SA1_ANIM_TRAMPOLINE2_WIDTH 48 +#define SA1_ANIM_TRAMPOLINE2_HEIGHT 40 + +// 508 +#define SA1_ANIM_CONVEYOR_BELT_2_WIDE_WIDTH 96 +#define SA1_ANIM_CONVEYOR_BELT_2_WIDE_HEIGHT 24 + +// 509 +#define SA1_ANIM_CONVEYOR_BELT_2_SLIM_WIDTH 72 +#define SA1_ANIM_CONVEYOR_BELT_2_SLIM_HEIGHT 24 + +// 510 +#define SA1_ANIM_IRON_BALL_WIDTH 48 +#define SA1_ANIM_IRON_BALL_HEIGHT 48 + +// 511 +#define SA1_ANIM_TORCH6_1_WIDTH 16 +#define SA1_ANIM_TORCH6_1_HEIGHT 16 + +// 512 +#define SA1_ANIM_TORCH6_2_WIDTH 32 +#define SA1_ANIM_TORCH6_2_HEIGHT 16 + +// 515 +#define SA1_ANIM_PROPELLER_WIDTH 144 +#define SA1_ANIM_PROPELLER_HEIGHT 24 + +// 516 +#define SA1_ANIM_SPIKED_BARREL_WIDTH 48 +#define SA1_ANIM_SPIKED_BARREL_HEIGHT 40 + +// 529 +#define SA1_ANIM_SKATING_STONE_4_WIDTH 48 +#define SA1_ANIM_SKATING_STONE_4_HEIGHT 32 + +// 534 +#define SA1_ANIM_SECURITY_GATE_WIDTH 16 +#define SA1_ANIM_SECURITY_GATE_HEIGHT 48 + +// 541 +#define SA1_ANIM_IRON_BALL_5_WIDTH 48 +#define SA1_ANIM_IRON_BALL_5_HEIGHT 48 + +// 542 +#define SA1_ANIM_RUN_WHEEL_HEIGHT 32 +#define SA1_ANIM_RUN_WHEEL_WIDTH 32 + +// 545 +#define SA1_ANIM_LIFT_VAR0_WIDTH 8 +#define SA1_ANIM_LIFT_VAR0_HEIGHT 32 +#define SA1_ANIM_LIFT_VAR1_WIDTH 24 +#define SA1_ANIM_LIFT_VAR1_HEIGHT 24 + +// 547 +#define SA1_ANIM_SKATING_STONE_WIDTH 48 +#define SA1_ANIM_SKATING_STONE_HEIGHT 32 + +// 548 +#define SA1_ANIM_SKATING_STONE_DEBRIS_L_WIDTH 32 +#define SA1_ANIM_SKATING_STONE_DEBRIS_L_HEIGHT 32 + +// 549 +#define SA1_ANIM_SKATING_STONE_DEBRIS_S_WIDTH 8 +#define SA1_ANIM_SKATING_STONE_DEBRIS_S_HEIGHT 8 + +// 558 +#define SA1_ANIM_TORCH5_WIDTH 24 +#define SA1_ANIM_TORCH5_HEIGHT 40 + +// 558 +#define SA1_ANIM_BREAKABLE_WALL_1_WIDTH 32 +#define SA1_ANIM_BREAKABLE_WALL_1_HEIGHT 64 + +// 564 +#define SA1_ANIM_DEBRIS_A_WIDTH 8 +#define SA1_ANIM_DEBRIS_A_HEIGHT 8 + +// 564 +#define SA1_ANIM_DEBRIS_B_WIDTH 8 +#define SA1_ANIM_DEBRIS_B_HEIGHT 16 + +// 566 +#define SA1_ANIM_DEBRIS_C_WIDTH 8 +#define SA1_ANIM_DEBRIS_C_HEIGHT 8 + +// 567 +#define SA1_ANIM_STEAM_EXHAUST_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_HEIGHT 48 + +// 569 +#define SA1_ANIM_HOOK_RAIL_3_WIDTH 16 +#define SA1_ANIM_HOOK_RAIL_3_HEIGHT 24 + +// 572 +#define SA1_ANIM_SPECIAL_SPRING_WIDTH 32 +#define SA1_ANIM_SPECIAL_SPRING_HEIGHT 48 + +// 573 +#define SA1_ANIM_DRISAME_ICEBLOCK_WIDTH 56 +#define SA1_ANIM_DRISAME_ICEBLOCK_HEIGHT 32 + +// 574 +#define SA1_ANIM_FALLING_BRICK_XZONE_WIDTH 16 +#define SA1_ANIM_FALLING_BRICK_XZONE_HEIGHT 24 + +// 579 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_LARGE_WIDTH 16 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_LARGE_HEIGHT 16 + +// 579 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_SMALL_WIDTH 8 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_SMALL_HEIGHT 8 + +// 584 +#define SA1_ANIM_PIPE_ENTER_6_1_V_WIDTH 56 +#define SA1_ANIM_PIPE_ENTER_6_1_V_HEIGHT 80 + +// 585 +#define SA1_ANIM_PIPE_EXIT_6_1_V_WIDTH 56 +#define SA1_ANIM_PIPE_EXIT_6_1_V_HEIGHT 80 + +// 586 +#define SA1_ANIM_PIPE_ENTER_6_1_H_WIDTH 80 +#define SA1_ANIM_PIPE_ENTER_6_1_H_HEIGHT 56 + +// 587 +#define SA1_ANIM_PIPE_EXIT_6_1_H_WIDTH 56 +#define SA1_ANIM_PIPE_EXIT_6_1_H_HEIGHT 80 + +// 588 +#define SA1_ANIM_PIPE_GATE_2_H_WIDTH 80 +#define SA1_ANIM_PIPE_GATE_2_H_HEIGHT 56 + +// 589 +#define SA1_ANIM_PIPE_GATE_2_V_WIDTH 56 +#define SA1_ANIM_PIPE_GATE_2_V_HEIGHT 80 + +// 590 +#define SA1_ANIM_PIPE_ENTER_6_2_H_WIDTH 104 +#define SA1_ANIM_PIPE_ENTER_6_2_H_HEIGHT 56 + +// 591 +#define SA1_ANIM_PIPE_ENTER_6_2_V_WIDTH 56 +#define SA1_ANIM_PIPE_ENTER_6_2_V_HEIGHT 88 + +// 592 +#define SA1_ANIM_AIR_MAZE_CORNER_WIDTH 32 +#define SA1_ANIM_AIR_MAZE_CORNER_HEIGHT 32 + +// 603 +#define SA1_ANIM_CONVEYOR_BELT_6_SLIM_WIDTH 72 +#define SA1_ANIM_CONVEYOR_BELT_6_SLIM_HEIGHT 24 + +// 604 +#define SA1_ANIM_CONVEYOR_BELT_6_WIDE_WIDTH 96 +#define SA1_ANIM_CONVEYOR_BELT_6_WIDE_HEIGHT 24 + +// 670 +#define SA1_ANIM_EXTRA_BOSS_CAPSULE_WIDTH 32 +#define SA1_ANIM_EXTRA_BOSS_CAPSULE_HEIGHT 16 + +// 671 +#define SA1_ANIM_EXTRA_BOSS_CAPSULE_PART_WIDTH 16 +#define SA1_ANIM_EXTRA_BOSS_CAPSULE_PART_HEIGHT 16 + +// 672 +#define SA1_ANIM_EXTRA_BOSS_LASER_WIDTH 16 +#define SA1_ANIM_EXTRA_BOSS_LASER_HEIGHT 96 + +// 705 +#define SA1_ANIM_ITEMBOX_WIDTH 32 +#define SA1_ANIM_ITEMBOX_HEIGHT 32 + +// 706 +#define SA1_ANIM_ITEMBOX_TYPE_WIDTH 16 +#define SA1_ANIM_ITEMBOX_TYPE_HEIGHT 16 + +// 709 +#define SA1_ANIM_SCORE_WIDTH 16 +#define SA1_ANIM_SCORE_HEIGHT 8 + +// 715 +#define SA1_ANIM_GAME_OVER_WIDTH 64 +#define SA1_ANIM_GAME_OVER_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR0_WIDTH 64 // GAME +#define SA1_ANIM_GAME_OVER_VAR0_HEIGHT 64 + +#define SA1_ANIM_GAME_OVER_VAR1_WIDTH 64 // OVER +#define SA1_ANIM_GAME_OVER_VAR1_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR2_WIDTH 64 // CONTI +#define SA1_ANIM_GAME_OVER_VAR2_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR3_WIDTH 64 // NUE? +#define SA1_ANIM_GAME_OVER_VAR3_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR4_WIDTH 64 // TIME +#define SA1_ANIM_GAME_OVER_VAR4_HEIGHT 64 + +// 718 +#define SA1_ANIM_PAUSE_WIDTH 80 +#define SA1_ANIM_PAUSE_HEIGHT 16 + +// 719 +#define SA1_ANIM_WARNING_WIDTH 32 +#define SA1_ANIM_WARNING_HEIGHT 32 +#define SA1_ANIM_WARNING_VAR0_WIDTH 32 +#define SA1_ANIM_WARNING_VAR0_HEIGHT 32 +#define SA1_ANIM_WARNING_VAR1_WIDTH 32 +#define SA1_ANIM_WARNING_VAR1_HEIGHT 32 +#define SA1_ANIM_WARNING_VAR2_WIDTH 32 +#define SA1_ANIM_WARNING_VAR2_HEIGHT 32 + +// 720 +#define SA1_ANIM_PAUSE_BACKGROUND_WIDTH 96 +#define SA1_ANIM_PAUSE_BACKGROUND_HEIGHT 32 + +// 721 +#define SA1_ANIM_DEMO_PLAY_WIDTH 24 +#define SA1_ANIM_DEMO_PLAY_HEIGHT 8 + +// 749 +#define SA1_ANIM_GRIND_EFFECT_WIDTH 32 +#define SA1_ANIM_GRIND_EFFECT_HEIGHT 32 + +// 750 +#define SA1_ANIM_SHIELD_NORMAL_WIDTH 48 +#define SA1_ANIM_SHIELD_NORMAL_HEIGHT 48 + +// 751 +#define SA1_ANIM_SHIELD_MAGNETIC_WIDTH 48 +#define SA1_ANIM_SHIELD_MAGNETIC_HEIGHT 48 + +// 752 +#define SA1_ANIM_INVINCIBILITY_WIDTH 48 +#define SA1_ANIM_INVINCIBILITY_HEIGHT 48 +#define SA1_ANIM_INVINCIBILITY_VAR0_WIDTH 48 +#define SA1_ANIM_INVINCIBILITY_VAR0_HEIGHT 48 +#define SA1_ANIM_INVINCIBILITY_VAR1_WIDTH 24 +#define SA1_ANIM_INVINCIBILITY_VAR1_HEIGHT 24 + +// 775 +#define SA1_ANIM_SUPER_SONIC_SPARKLE_WIDTH 16 +#define SA1_ANIM_SUPER_SONIC_SPARKLE_HEIGHT 16 + +// 778 +#define SA1_ANIM_TAILS_TAIL_SWIPE_WIDTH 40 +#define SA1_ANIM_TAILS_TAIL_SWIPE_HEIGHT 24 + +// 778 +#define SA1_ANIM_PRESS_START_MSG_JP_WIDTH 184 +#define SA1_ANIM_PRESS_START_MSG_JP_HEIGHT 16 + +// 779 +#define SA1_ANIM_PRESS_START_MSG_EN_WIDTH 32 +#define SA1_ANIM_PRESS_START_MSG_EN_HEIGHT 32 + +// 781 +#define SA1_ANIM_DROWN_COUNTDOWN_WIDTH 16 +#define SA1_ANIM_DROWN_COUNTDOWN_HEIGHT 16 + +// 782 +#define SA1_ANIM_KNUCKLES_FLOAT_SPLASH_WIDTH 32 +#define SA1_ANIM_KNUCKLES_FLOAT_SPLASH_HEIGHT 16 + +// 794 +#define SA1_ANIM_CONFUSION_WIDTH 32 +#define SA1_ANIM_CONFUSION_HEIGHT 16 + +// 809 +#define SA1_ANIM_PAUSE_BACKGROUND_TA_WIDTH 128 +#define SA1_ANIM_PAUSE_BACKGROUND_TA_HEIGHT 48 + +// 810 +#define SA1_ANIM_PAUSE_TA_WIDTH 128 +#define SA1_ANIM_PAUSE_TA_HEIGHT 32 +#define SA1_ANIM_PAUSE_TA_VAR0_WIDTH 80 +#define SA1_ANIM_PAUSE_TA_VAR0_HEIGHT 32 +#define SA1_ANIM_PAUSE_TA_VAR1_WIDTH 128 +#define SA1_ANIM_PAUSE_TA_VAR1_HEIGHT 32 + +// 906 +#define SA1_ANIM_CRUMBLE_PLATFORM_WIDTH 64 +#define SA1_ANIM_CRUMBLE_PLATFORM_HEIGHT 32 + +#elif (GAME == GAME_SA2) +#elif (GAME == GAME_SA3) +// 858 +#define ANIM_CHAOMAP_EMERALD_WIDTH 24 +#define ANIM_CHAOMAP_EMERALD_HEIGHT 16 + +// 840 +#define ANIM_ANIMAL_WIDTH 16 +#define ANIM_ANIMAL_HEIGHT 16 + +// 866 +#define ANIM_SPRING_WIDTH 32 +#define ANIM_SPRING_HEIGHT 40 + +// 866 +#define ANIM_DASH_RING_WIDTH 48 +#define ANIM_DASH_RING_HEIGHT 48 +#define ANIM_DASH_RING_VAR0_WIDTH 16 +#define ANIM_DASH_RING_VAR0_HEIGHT 48 +#define ANIM_DASH_RING_VAR1_WIDTH 8 +#define ANIM_DASH_RING_VAR1_HEIGHT 48 +#define ANIM_DASH_RING_VAR2_WIDTH 48 +#define ANIM_DASH_RING_VAR2_HEIGHT 16 +#define ANIM_DASH_RING_VAR3_WIDTH 48 +#define ANIM_DASH_RING_VAR3_HEIGHT 8 +#define ANIM_DASH_RING_VAR4_WIDTH 48 +#define ANIM_DASH_RING_VAR4_HEIGHT 48 +#define ANIM_DASH_RING_VAR5_WIDTH 40 +#define ANIM_DASH_RING_VAR5_HEIGHT 40 + +// 869 +#define ANIM_SPIKES_WIDTH 32 +#define ANIM_SPIKES_HEIGHT 32 + +// 870 +#define ANIM_RAMP_WIDTH 40 +#define ANIM_RAMP_HEIGHT 32 +#define ANIM_RAMP_VAR0_WIDTH 40 +#define ANIM_RAMP_VAR0_HEIGHT 32 +#define ANIM_RAMP_VAR1_WIDTH 40 +#define ANIM_RAMP_VAR1_HEIGHT 24 + +// 872 +#define ANIM_ZONE_WARP_WIDTH 48 +#define ANIM_ZONE_WARP_HEIGHT 32 + +// 873 +#define ANIM_BOUNCY_BAR_WIDTH 32 +#define ANIM_BOUNCY_BAR_HEIGHT 24 + +// 874 +#define ANIM_ROTATING_HANDLE_WIDTH 24 +#define ANIM_ROTATING_HANDLE_HEIGHT 24 + +// 875 +#define ANIM_CHECKPOINT_WIDTH 24 +#define ANIM_CHECKPOINT_HEIGHT 48 +#define ANIM_CHECKPOINT_VAR0_WIDTH 16 +#define ANIM_CHECKPOINT_VAR0_HEIGHT 48 +#define ANIM_CHECKPOINT_VAR1_WIDTH 24 +#define ANIM_CHECKPOINT_VAR1_HEIGHT 48 + +// 876 +#define ANIM_LIFT_WIDTH 8 +#define ANIM_LIFT_HEIGHT 24 +#define ANIM_LIFT_VAR0_WIDTH 8 +#define ANIM_LIFT_VAR0_HEIGHT 24 +#define ANIM_LIFT_VAR1_WIDTH 8 +#define ANIM_LIFT_VAR1_HEIGHT 8 +#define ANIM_LIFT_VAR2_WIDTH 24 +#define ANIM_LIFT_VAR2_HEIGHT 16 + +// 877 +#define ANIM_PLATFORM_CRUMBLING_1_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_1_HEIGHT 32 + +// 878 +#define ANIM_TRAMPOLINE_WIDTH 48 +#define ANIM_TRAMPOLINE_HEIGHT 32 + +// 878 +#define ANIM_BUTTON_BLUE_WIDTH 24 +#define ANIM_BUTTON_BLUE_HEIGHT 24 + +// 880 +#define ANIM_BUTTON_SPRING_1_VAR0_WIDTH 32 +#define ANIM_BUTTON_SPRING_1_VAR0_HEIGHT 40 +#define ANIM_BUTTON_SPRING_1_VAR5_WIDTH 40 +#define ANIM_BUTTON_SPRING_1_VAR5_HEIGHT 24 +#define ANIM_BUTTON_SPRING_1_VAR10_WIDTH 32 +#define ANIM_BUTTON_SPRING_1_VAR10_HEIGHT 32 +#define ANIM_BUTTON_SPRING_1_VAR15_WIDTH 24 +#define ANIM_BUTTON_SPRING_1_VAR15_HEIGHT 24 + +// 882 +#define ANIM_DECO_ROCK_WIDTH 48 +#define ANIM_DECO_ROCK_HEIGHT 32 + +// 883 +#define ANIM_FLAT_SPRING_WIDTH 32 +#define ANIM_FLAT_SPRING_HEIGHT 32 + +// 884 +#define ANIM_PLATFORM_RAISING_WHEEL_WIDTH 32 +#define ANIM_PLATFORM_RAISING_WHEEL_HEIGHT 24 +#define ANIM_PLATFORM_RAISING_WHEEL_PLATFORM_WIDTH 24 +#define ANIM_PLATFORM_RAISING_WHEEL_PLATFORM_HEIGHT 24 + +// 886 +#define ANIM_ACCORDION_SPRING_2_WIDTH 32 +#define ANIM_ACCORDION_SPRING_2_HEIGHT 24 + +// 889 +#define ANIM_PLATFORM_2_WIDTH 48 +#define ANIM_PLATFORM_2_HEIGHT 24 + +// 886 +#define ANIM_PLATFORM_CRUMBLING_2_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_2_HEIGHT 24 + +// 898 +#define ANIM_PLATFORM_ON_A_PATH_3_WIDTH 56 +#define ANIM_PLATFORM_ON_A_PATH_3_HEIGHT 24 + +// 891 +#define ANIM_BUNGEE_CORD_WIDTH 8 +#define ANIM_BUNGEE_CORD_HEIGHT 8 +#define ANIM_BUNGEE_CORD_VAR0_WIDTH 8 +#define ANIM_BUNGEE_CORD_VAR0_HEIGHT 8 + +// 892 +#define ANIM_SUNSET_BRIDGE_WIDTH 24 +#define ANIM_SUNSET_BRIDGE_HEIGHT 32 + +// 893 +#define ANIM_PLATFORM_2_2_WIDTH 48 +#define ANIM_PLATFORM_2_2_HEIGHT 16 +#define ANIM_PLATFORM_2_2_VAR0_WIDTH 48 +#define ANIM_PLATFORM_2_2_VAR0_HEIGHT 16 + +// 894 +#define ANIM_WAGGLE_COIL_WIDTH 48 +#define ANIM_WAGGLE_COIL_HEIGHT 56 + +// 900 +#define ANIM_PLATFORM_3_0_WIDTH (48 / 2) +#define ANIM_PLATFORM_3_0_HEIGHT 24 + +// 901 +#define ANIM_SUCTION_3_VERTICAL_WIDTH 24 +#define ANIM_SUCTION_3_VERTICAL_HEIGHT 56 + +// 902 +#define ANIM_SUCTION_3_HORIZONTAL_WIDTH 56 +#define ANIM_SUCTION_3_HORIZONTAL_HEIGHT 24 + +// 903 +#define ANIM_DEATH_CRUSHER_SPIKED_WIDTH 24 +#define ANIM_DEATH_CRUSHER_SPIKED_HEIGHT 80 + +// 904 +#define ANIM_DEATH_CRUSHER_NO_LED_WIDTH 24 +#define ANIM_DEATH_CRUSHER_NO_LED_HEIGHT 48 + +// 905 +#define ANIM_DEATH_CRUSHER_WIDTH 24 +#define ANIM_DEATH_CRUSHER_HEIGHT 48 + +// 907 +#define ANIM_PLATFORM_CRUMBLING_3_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_3_HEIGHT 48 + +// 908 - x-mirrored +#define ANIM_PROPELLER_BUTTON_PLATFORM_WIDTH (64 / 2) +#define ANIM_PROPELLER_BUTTON_PLATFORM_HEIGHT 48 + +// 910 +#define ANIM_WATER_CANNON_WIDTH 32 +#define ANIM_WATER_CANNON_HEIGHT 48 + +// 911 +#define ANIM_FACTORY_RING_WIDTH 48 +#define ANIM_FACTORY_RING_HEIGHT 48 + +// 912 +#define ANIM_SPECIAL_SPRING_WIDTH 32 +#define ANIM_SPECIAL_SPRING_HEIGHT 48 + +// 913 +#define ANIM_BONUS_UFO_WIDTH 24 +#define ANIM_BONUS_UFO_HEIGHT 48 + +// 914 +#define ANIM_BONUS_UFO_RAY_WIDTH 24 +#define ANIM_BONUS_UFO_RAY_HEIGHT 56 + +// 915 +#define ANIM_ROCKET_WIDTH 48 +#define ANIM_ROCKET_HEIGHT 48 +#define ANIM_ROCKET_VAR0_WIDTH 16 +#define ANIM_ROCKET_VAR0_HEIGHT 8 +#define ANIM_ROCKET_VAR1_WIDTH 16 +#define ANIM_ROCKET_VAR1_HEIGHT 8 +#define ANIM_ROCKET_VAR2_WIDTH 8 +#define ANIM_ROCKET_VAR2_HEIGHT 8 +#define ANIM_ROCKET_VAR3_WIDTH 8 +#define ANIM_ROCKET_VAR3_HEIGHT 8 +#define ANIM_ROCKET_VAR4_WIDTH 8 +#define ANIM_ROCKET_VAR4_HEIGHT 8 +#define ANIM_ROCKET_VAR5_WIDTH 8 +#define ANIM_ROCKET_VAR5_HEIGHT 8 +#define ANIM_ROCKET_VAR6_WIDTH 8 +#define ANIM_ROCKET_VAR6_HEIGHT 8 + +// 916 +#define ANIM_FERRIS_WHEEL_HEIGHT 8 +#define ANIM_FERRIS_WHEEL_WIDTH 8 +#define ANIM_FERRIS_WHEEL_VAR0_HEIGHT 8 +#define ANIM_FERRIS_WHEEL_VAR0_WIDTH 8 +#define ANIM_FERRIS_WHEEL_VAR1_HEIGHT 8 +#define ANIM_FERRIS_WHEEL_VAR1_WIDTH 8 + +// 917 +#define ANIM_TOY_BALLOON_WIDTH 32 +#define ANIM_TOY_BALLOON_HEIGHT 48 + +// 918 (x-mirrored) +#define ANIM_SPRING_IN_A_BOX_WIDTH (64 / 2) +#define ANIM_SPRING_IN_A_BOX_HEIGHT 64 + +// 919 +#define ANIM_PANDA_CART_WIDTH 48 +#define ANIM_PANDA_CART_HEIGHT 40 + +// 920 +#define ANIM_PENDULUM_WIDTH 40 +#define ANIM_PENDULUM_HEIGHT 40 +#define ANIM_PENDULUM_VAR0_WIDTH 40 +#define ANIM_PENDULUM_VAR0_HEIGHT 40 +#define ANIM_PENDULUM_VAR1_WIDTH 8 +#define ANIM_PENDULUM_VAR1_HEIGHT 8 + +// 921 (x-mirrored) +#define ANIM_PLATFORM_SPIKED_WIDTH 32 +#define ANIM_PLATFORM_SPIKED_HEIGHT 48 + +// 922 +#define ANIM_ICE_SPIKE_WIDTH 32 +#define ANIM_ICE_SPIKE_HEIGHT 32 + +// 923 +#define ANIM_ICE_LAUNCHER_WIDTH 48 +#define ANIM_ICE_LAUNCHER_HEIGHT 64 + +// 924 +#define ANIM_WINDUP_BLOCK_WIDTH 24 +#define ANIM_WINDUP_BLOCK_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR0_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR0_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR1_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR1_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR2_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR2_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR3_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR3_HEIGHT 24 + +// 925 +#define ANIM_MINECART_WIDTH 64 +#define ANIM_MINECART_HEIGHT 64 +#define ANIM_MINECART_VAR0_WIDTH 64 +#define ANIM_MINECART_VAR0_HEIGHT 64 +#define ANIM_MINECART_VAR1_WIDTH 64 +#define ANIM_MINECART_VAR1_HEIGHT 64 +#define ANIM_MINECART_VAR2_WIDTH 16 +#define ANIM_MINECART_VAR2_HEIGHT 16 +#define ANIM_MINECART_VAR3_WIDTH 8 +#define ANIM_MINECART_VAR3_HEIGHT 8 +#define ANIM_MINECART_VAR4_WIDTH 8 +#define ANIM_MINECART_VAR4_HEIGHT 8 + +// 926 +#define ANIM_AIR_BUBBLES_WIDTH 24 +#define ANIM_AIR_BUBBLES_HEIGHT 24 +#define ANIM_AIR_BUBBLES_VAR0_WIDTH 24 +#define ANIM_AIR_BUBBLES_VAR0_HEIGHT 24 +#define ANIM_AIR_BUBBLES_VAR1_WIDTH 8 +#define ANIM_AIR_BUBBLES_VAR1_HEIGHT 8 +#define ANIM_AIR_BUBBLES_VAR2_WIDTH 24 +#define ANIM_AIR_BUBBLES_VAR2_HEIGHT 24 + +// 927 +#define ANIM_ATTACHED_PLATFORM_WIDTH 48 +#define ANIM_ATTACHED_PLATFORM_HEIGHT 16 +#define ANIM_ATTACHED_PLATFORM_VAR0_WIDTH 48 +#define ANIM_ATTACHED_PLATFORM_VAR0_HEIGHT 16 +#define ANIM_ATTACHED_PLATFORM_VAR1_WIDTH 16 +#define ANIM_ATTACHED_PLATFORM_VAR1_HEIGHT 16 +#define ANIM_ATTACHED_PLATFORM_VAR2_WIDTH 8 +#define ANIM_ATTACHED_PLATFORM_VAR2_HEIGHT 8 + +// 929 +#define ANIM_BOULDER_WIDTH 40 +#define ANIM_BOULDER_HEIGHT 40 +#define ANIM_BOULDER_VAR0_WIDTH 40 +#define ANIM_BOULDER_VAR0_HEIGHT 40 +#define ANIM_BOULDER_VAR1_WIDTH 16 +#define ANIM_BOULDER_VAR1_HEIGHT 16 +#define ANIM_BOULDER_VAR2_WIDTH 8 +#define ANIM_BOULDER_VAR2_HEIGHT 8 + +// 931 +#define ANIM_UFO_PLATFORM_WIDTH 48 +#define ANIM_UFO_PLATFORM_HEIGHT 24 + +// 930 +#define ANIM_CLOSING_WALL_WIDTH 72 +#define ANIM_CLOSING_WALL_HEIGHT 24 + +// 933 +#define ANIM_FALL_PLATFORM_CA_WIDTH 48 +#define ANIM_FALL_PLATFORM_CA_HEIGHT 16 + +// 934 +#define ANIM_WATER_CANNON_SPLASH_WIDTH 48 +#define ANIM_WATER_CANNON_SPLASH_HEIGHT 40 + +// 935 +#define ANIM_PLATFORM_CRUMBLING_7_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_7_HEIGHT 40 + +// 936 +#define ANIM_SPRING_6_WIDTH 24 +#define ANIM_SPRING_6_HEIGHT 40 + +// 938 +#define ANIM_PLATFORM_CRUMBLING_6_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_6_HEIGHT 24 + +// 939 +#define ANIM_SPRING_PLATFORM_6_WIDTH 24 +#define ANIM_SPRING_PLATFORM_6_HEIGHT 64 + +// 940 +#define ANIM_MAZE_WIDTH 48 +#define ANIM_MAZE_HEIGHT 64 +#define ANIM_MAZE_VAR0_WIDTH 48 +#define ANIM_MAZE_VAR0_HEIGHT 64 +#define ANIM_MAZE_VAR1_WIDTH 48 +#define ANIM_MAZE_VAR1_HEIGHT 64 +#define ANIM_MAZE_VAR2_WIDTH 48 +#define ANIM_MAZE_VAR2_HEIGHT 64 +#define ANIM_MAZE_VAR3_WIDTH 64 +#define ANIM_MAZE_VAR3_HEIGHT 48 +#define ANIM_MAZE_VAR4_WIDTH 64 +#define ANIM_MAZE_VAR4_HEIGHT 48 +#define ANIM_MAZE_VAR5_WIDTH 64 +#define ANIM_MAZE_VAR5_HEIGHT 48 +#define ANIM_MAZE_VAR6_WIDTH 24 +#define ANIM_MAZE_VAR6_HEIGHT 24 +#define ANIM_MAZE_VAR7_WIDTH 48 +#define ANIM_MAZE_VAR7_HEIGHT 56 +#define ANIM_MAZE_VAR8_WIDTH 56 +#define ANIM_MAZE_VAR8_HEIGHT 48 + +// 942 +#define ANIM_PLATFORM_ON_A_PATH_6_WIDTH 56 +#define ANIM_PLATFORM_ON_A_PATH_6_HEIGHT 24 + +// 945 +#define ANIM_MUD_FX_WIDTH 48 +#define ANIM_MUD_FX_HEIGHT 24 +#define ANIM_MUD_FX_CHAOS_ANGEL_WIDTH 48 +#define ANIM_MUD_FX_CHAOS_ANGEL_HEIGHT 24 + +// 948 +#define ANIM_GOAL_RING_WIDTH 24 +#define ANIM_GOAL_RING_HEIGHT 24 +#define ANIM_GOAL_RING_VAR8_WIDTH 24 // Sparkle effect +#define ANIM_GOAL_RING_VAR8_HEIGHT 16 + +// 949 +#define ANIM_SUCTION_VERTICAL_WIDTH 24 +#define ANIM_SUCTION_VERTICAL_HEIGHT 56 + +// 950 +#define ANIM_SUCTION_HORIZONTAL_WIDTH 56 +#define ANIM_SUCTION_HORIZONTAL_HEIGHT 24 + +// 951 +#define ANIM_PLATFORM_CRUMBLING_4_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_4_HEIGHT 24 + +// 952 +#define ANIM_PLATFORM_CRUMBLING_5_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_5_HEIGHT 32 + +// 955 +#define ANIM_SUCTION_STREAM_HORIZONTAL_WIDTH 24 +#define ANIM_SUCTION_STREAM_HORIZONTAL_HEIGHT 56 + +// 956 +#define ANIM_SUCTION_STREAM_VERTICAL_WIDTH 56 +#define ANIM_SUCTION_STREAM_VERTICAL_HEIGHT 24 + +// 969 +#define ANIM_WINDUP_BLOCK_7_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR0_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_VAR0_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR1_WIDTH 8 +#define ANIM_WINDUP_BLOCK_7_VAR1_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR2_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_VAR2_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR3_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_VAR3_HEIGHT 8 + +// 976 +#define ANIM_TOY_BALLOON_POPPED_WIDTH 32 +#define ANIM_TOY_BALLOON_POPPED_HEIGHT 48 + +// 976 +#define ANIM_OMOCHAO0_WIDTH 24 +#define ANIM_OMOCHAO0_HEIGHT 24 + +// 977 +#define ANIM_OMOCHAO1_WIDTH 24 +#define ANIM_OMOCHAO1_HEIGHT 24 + +// 978 +#define ANIM_OMOCHAO2_WIDTH 24 +#define ANIM_OMOCHAO2_HEIGHT 24 + +// 979 +#define ANIM_OMOCHAO3_WIDTH 24 +#define ANIM_OMOCHAO3_HEIGHT 24 + +// 980 +#define ANIM_OMOCHAO4_WIDTH 24 +#define ANIM_OMOCHAO4_HEIGHT 24 + +// 981 +#define ANIM_OMOCHAO5_WIDTH 24 +#define ANIM_OMOCHAO5_HEIGHT 24 + +// 983 +#define ANIM_ACT_RING_WIDTH 32 +#define ANIM_ACT_RING_HEIGHT 32 +#define ANIM_ACT_RING_VAR0_WIDTH 32 +#define ANIM_ACT_RING_VAR0_HEIGHT 32 +#define ANIM_ACT_RING_VAR1_WIDTH 32 +#define ANIM_ACT_RING_VAR1_HEIGHT 32 +#define ANIM_ACT_RING_VAR2_WIDTH 32 +#define ANIM_ACT_RING_VAR2_HEIGHT 32 +// "Crown" signalling completion +#define ANIM_ACT_RING_VAR3_WIDTH 24 +#define ANIM_ACT_RING_VAR3_HEIGHT 16 + +// 984 +#define ANIM_SPRING_PLATFORM_4_WIDTH 24 +#define ANIM_SPRING_PLATFORM_4_HEIGHT 64 + +// 986 +#define ANIM_SLOW_LIFT_7_WIDTH (112 / 2) +#define ANIM_SLOW_LIFT_7_HEIGHT 24 + +// 987 +#define ANIM_SPRING_4_WIDTH 32 +#define ANIM_SPRING_4_HEIGHT 40 + +// 995 +#define ANIM_BUTTON_SPRING_6_VAR0_WIDTH 32 +#define ANIM_BUTTON_SPRING_6_VAR0_HEIGHT 40 +#define ANIM_BUTTON_SPRING_6_VAR5_WIDTH 40 +#define ANIM_BUTTON_SPRING_6_VAR5_HEIGHT 24 +#define ANIM_BUTTON_SPRING_6_VAR10_WIDTH 32 +#define ANIM_BUTTON_SPRING_6_VAR10_HEIGHT 32 + +// 997 +#define ANIM_PLATFORM_BONUS_WIDTH 48 +#define ANIM_PLATFORM_BONUS_HEIGHT 48 +#define ANIM_PLATFORM_BONUS_VAR0_WIDTH 48 +#define ANIM_PLATFORM_BONUS_VAR0_HEIGHT 48 +#define ANIM_PLATFORM_BONUS_VAR1_WIDTH 48 +#define ANIM_PLATFORM_BONUS_VAR1_HEIGHT 24 + +// 1004 +#define ANIM_CHAO_SITTING_WIDTH 32 +#define ANIM_CHAO_SITTING_HEIGHT 32 + +// 1042 +#define ANIM_UI_PROMPT_BUTTON_WIDTH 16 +#define ANIM_UI_PROMPT_BUTTON_HEIGHT 16 + +// 1059 +#define ANIM_BONUS_UI_TIMER_DIGITS_WIDTH 8 +#define ANIM_BONUS_UI_TIMER_DIGITS_HEIGHT 16 + +// 1063 +#define ANIM_BONUS_UI_FLOWER_WIDTH 16 +#define ANIM_BONUS_UI_FLOWER_HEIGHT 24 + +// 1064 +#define ANIM_BONUS_UI_BAR_WIDTH 16 +#define ANIM_BONUS_UI_BAR_HEIGHT 16 + +// 1065 +#define ANIM_BONUS_UI_X_WIDTH 48 +#define ANIM_BONUS_UI_X_HEIGHT 32 +#define ANIM_BONUS_UI_X_VAR0_WIDTH 16 +#define ANIM_BONUS_UI_X_VAR0_HEIGHT 16 +#define ANIM_BONUS_UI_X_VAR1_WIDTH 48 +#define ANIM_BONUS_UI_X_VAR1_HEIGHT 32 + +// 1154 +#define ANIM_BONUS_CAPSULE_WIDTH 56 +#define ANIM_BONUS_CAPSULE_HEIGHT 72 + +// 1155 +#define ANIM_BONUS_CAPSULE_POINTS_WIDTH 24 +#define ANIM_BONUS_CAPSULE_POINTS_HEIGHT 24 + +// 1156 +#define ANIM_BONUS_CAPSULE_SWITCH_WIDTH 24 +#define ANIM_BONUS_CAPSULE_SWITCH_HEIGHT 16 + +// 1160 +#define ANIM_BONUS_UI_SCORE_WIDTH 32 +#define ANIM_BONUS_UI_SCORE_HEIGHT 16 + +// Enemies +// 1166 +#define ANIM_SPINNER_WIDTH 48 +#define ANIM_SPINNER_HEIGHT 32 + +// 1168 +#define ANIM_CONDOR_WIDTH 48 +#define ANIM_CONDOR_HEIGHT 40 + +// 1168 +#define ANIM_AKATENTO_WIDTH 32 +#define ANIM_AKATENTO_HEIGHT 24 + +// 1169 +#define ANIM_AOTENTO_WIDTH 32 +#define ANIM_AOTENTO_HEIGHT 32 + +// 1171 +#define ANIM_APE_WIDTH 40 +#define ANIM_APE_HEIGHT 32 +#define ANIM_APE_VAR2_WIDTH 16 +#define ANIM_APE_VAR2_HEIGHT 16 + +// 1172 +#define ANIM_APE_PROJ_WIDTH 16 +#define ANIM_APE_PROJ_HEIGHT 16 + +// 1173 +#define ANIM_FROG_WIDTH 32 +#define ANIM_FROG_HEIGHT 48 + +// 1174 +#define ANIM_MINIMOLE_WIDTH 48 +#define ANIM_MINIMOLE_HEIGHT 24 +#define ANIM_MINIMOLE_VAR0_WIDTH 48 +#define ANIM_MINIMOLE_VAR0_HEIGHT 24 +#define ANIM_MINIMOLE_VAR1_WIDTH 32 +#define ANIM_MINIMOLE_VAR1_HEIGHT 8 + +// 1175 +#define ANIM_BUZZER_WIDTH 48 +#define ANIM_BUZZER_HEIGHT 32 + +// 1176 +#define ANIM_BUZZER_PROJ_WIDTH 16 +#define ANIM_BUZZER_PROJ_HEIGHT 16 + +// 1178 +#define ANIM_TAKKON_WIDTH 32 +#define ANIM_TAKKON_HEIGHT 48 + +// 1177 +#define ANIM_JOUSUN_WIDTH 40 +#define ANIM_JOUSUN_HEIGHT 32 + +// 1180 +#define ANIM_TAKKON_PROJ_WIDTH 24 +#define ANIM_TAKKON_PROJ_HEIGHT 24 +#define ANIM_TAKKON_PROJ_VAR0_WIDTH 8 +#define ANIM_TAKKON_PROJ_VAR0_HEIGHT 24 +#define ANIM_TAKKON_PROJ_VAR4_WIDTH 24 +#define ANIM_TAKKON_PROJ_VAR4_HEIGHT 24 + +// 1182 +#define ANIM_GAOGAO_WIDTH 32 +#define ANIM_GAOGAO_HEIGHT 32 + +// 1187 +#define ANIM_GINPE_WIDTH 24 +#define ANIM_GINPE_HEIGHT 32 + +// 1187 +#define ANIM_GINPE_PROJ_WIDTH 8 +#define ANIM_GINPE_PROJ_HEIGHT 8 + +// 1191 +#define ANIM_YADOKK_WIDTH 32 +#define ANIM_YADOKK_HEIGHT 32 +#define ANIM_YADOKK_VAR2_WIDTH 32 +#define ANIM_YADOKK_VAR2_HEIGHT 32 + +// 1315 +#define ANIM_ITEM_BOX_TYPE_WIDTH 16 +#define ANIM_ITEM_BOX_TYPE_HEIGHT 16 + +// 1316 +#define ANIM_ITEM_BOX_WIDTH 32 +#define ANIM_ITEM_BOX_HEIGHT 32 + +// 1338 +#define ANIM_ITEM_BOX_CLOUD_EFFECT_WIDTH 32 +#define ANIM_ITEM_BOX_CLOUD_EFFECT_HEIGHT 32 + +// 1139 +#define ANIM_CONDOR_PROJ_EXPLOSION_WIDTH 32 +#define ANIM_CONDOR_PROJ_EXPLOSION_HEIGHT 32 + +// 1344 +#define ANIM_ICE_SHIVER_WIDTH 16 +#define ANIM_ICE_SHIVER_HEIGHT 16 + +// 1348 +#define ANIM_SPECIAL_KEY_WIDTH 32 +#define ANIM_SPECIAL_KEY_HEIGHT 32 + +// 1423 +#define ANIM_LIFE_ICONS_WIDTH 16 +#define ANIM_LIFE_ICONS_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR0_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR0_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR1_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR1_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR2_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR2_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR3_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR3_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR4_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR4_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR5_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR5_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR6_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR6_HEIGHT 16 +#endif + +#endif // GUARD_ANIM_SIZES_H diff --git a/sa1/include/animation_commands.h b/sa1/include/animation_commands.h new file mode 100644 index 0000000000..8a4ad12c30 --- /dev/null +++ b/sa1/include/animation_commands.h @@ -0,0 +1,122 @@ +#ifndef GUARD_ANIMATION_COMMANDS_H +#define GUARD_ANIMATION_COMMANDS_H + +#include "global.h" +#include "sprite.h" + +#define AnimCommandSizeInWords(_structType) ((sizeof(_structType)) / sizeof(s32)) + +typedef AnimCmdResult (*AnimationCommandFunc)(void *cursor, Sprite *sprite); + +typedef struct { + /* 0x00 */ s32 cmdId; // -2 + + // Note(Jace): This needs to be signed, since a + // negative value infers that it's using 8bit-colors + /* 0x04 */ s32 tileIndex; + + /* 0x08 */ u32 numTilesToCopy; +} ACmd_GetTiles; + +typedef struct { + /* 0x00 */ s32 cmdId; // -2 + + /* 0x04 */ s32 palId; + /* 0x06 */ u16 numColors; + /* 0x08 */ u16 insertOffset; +} ACmd_GetPalette; + +typedef struct { + /* 0x00 */ s32 cmdId; // -3 + + /* 0x04 */ s32 offset; +} ACmd_JumpBack; + +typedef struct { + /* 0x00 */ s32 cmdId; // -4 +} ACmd_4; + +typedef struct { + /* 0x00 */ s32 cmdId; // -5 + + /* 0x04 */ u16 songId; +} ACmd_PlaySoundEffect; + +// TODO: param types unknown +typedef struct { + /* 0x00 */ s32 cmdId; // -6 + + /* 0x04 */ Hitbox hitbox; +} ACmd_Hitbox; + +typedef struct { + /* 0x00 */ s32 cmdId; // -7 + + /* 0x04 */ u16 x; + /* 0x06 */ u16 y; +} ACmd_TranslateSprite; + +typedef struct { + /* 0x00 */ s32 cmdId; // -8 + + /* 0x04 */ s32 unk4; + /* 0x08 */ s32 unk8; +} ACmd_8; + +typedef struct { + /* 0x00 */ s32 cmdId; // -9 + + /* 0x04 */ AnimId animId; + /* 0x08 */ u16 variant; +} ACmd_SetIdAndVariant; + +typedef struct { + /* 0x00 */ s32 cmdId; // -10 + + /* 0x04 */ s32 unk4; + /* 0x08 */ s32 unk8; + /* 0x0C */ s32 unkC; +} ACmd_10; + +typedef struct { + /* 0x00 */ s32 cmdId; // -11 + + /* 0x04 */ s32 priority; +} ACmd_SetSpritePriority; + +typedef struct { + /* 0x00 */ s32 cmdId; // -12 + + /* 0x04 */ s32 orderIndex; +} ACmd_SetOamOrder; + +typedef struct { + // number of frames this will be displayed + s32 delay; + + // frameId of this animation that should be displayed + s32 index; +} ACmd_ShowFrame; + +typedef union { + s32 id; + + ACmd_GetTiles tiles; + ACmd_GetPalette pal; + ACmd_JumpBack jump; + ACmd_4 end; + ACmd_PlaySoundEffect sfx; + ACmd_Hitbox _6; + ACmd_TranslateSprite translate; + ACmd_8 _8; + ACmd_SetIdAndVariant setAnimId; + ACmd_10 _10; + ACmd_SetSpritePriority _11; + ACmd_SetOamOrder setOamOrder; + + ACmd_ShowFrame show; +} ACmd; + +u32 Base10DigitsToHexNibbles(u16 num); + +#endif // GUARD_ANIMATION_COMMANDS_H diff --git a/sa1/include/animation_commands_bg.h b/sa1/include/animation_commands_bg.h new file mode 100644 index 0000000000..d53d71d5d1 --- /dev/null +++ b/sa1/include/animation_commands_bg.h @@ -0,0 +1,15 @@ +#ifndef GUARD_ANIMATION_COMMANDS_EXTRA_H +#define GUARD_ANIMATION_COMMANDS_EXTRA_H + +#include "gba/types.h" +#include "sprite.h" + +/* Copy-pasted from SA2 on January 15th, 2024 */ + +void UpdateBgAnimationTiles(Background *); + +s32 RenderText(void *dest, const void *font, u16 x, u16 y, u8 bg, const char *text, u8 palette); + +void numToTileIndices(u8 *digits, u16 number); + +#endif // GUARD_ANIMATION_COMMANDS_EXTRA_H diff --git a/sa1/include/bg_triangles.h b/sa1/include/bg_triangles.h new file mode 100644 index 0000000000..d265f935a3 --- /dev/null +++ b/sa1/include/bg_triangles.h @@ -0,0 +1,34 @@ +#ifndef GUARD_SPRITE_4_H +#define GUARD_SPRITE_4_H + +typedef struct { +#if !WIDESCREEN_HACK + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +#else + u16 unk0; + u16 unk1; + u16 unk2; + u16 unk3; + u16 unk4; + u16 unk5; + u16 unk6; + u16 unk7; +#endif +} TriParam1; + +extern void SA2_LABEL(sub_8006DB4)(u8 bg, TriParam1 *arg1, s32 unused, s32 arg3); +extern void SA2_LABEL(sub_800724C)(u8 bg, TriParam1 *param1); +extern void SA2_LABEL(sub_80075D0)(u8 bg, int_vcount param1, int_vcount param2, s16 param3, s16 param4, u16 param5); +extern void SA2_LABEL(sub_8007738)(u8 bg, int_vcount minY, int_vcount maxY, u16 param3, u8 param4, u8 param5, u16 param6, u8 param7, + u8 param8, s16 param9, s16 param10); +extern void SA2_LABEL(sub_8007858)(u8 param0, int_vcount minY, int_vcount maxY, u16 param3, u16 param4); +extern void SA2_LABEL(sub_80078D4)(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 offsetOdd); +void SA2_LABEL(sub_8007958)(u8 bg, int_vcount minY, int_vcount maxY, s16 param3, s8 param4, u16 param5, u16 param6); +#endif diff --git a/sa1/include/color.h b/sa1/include/color.h new file mode 100644 index 0000000000..784eaf7e18 --- /dev/null +++ b/sa1/include/color.h @@ -0,0 +1,49 @@ +#ifndef GUARD_COLOR_H +#define GUARD_COLOR_H + +// TODO: Full RGB in SA1 +#if PLATFORM_GBA || (GAME == GAME_SA1) || (RENDERER == RENDERER_SOFTWARE) +// ABGR_1555 +typedef uint16_t ColorRaw; +typedef union Color { + struct { + uint16_t r : 5; + uint16_t g : 5; + uint16_t b : 5; + uint16_t a : 1; + } split; + + ColorRaw raw; +} Color; + +#else +// RGBA_8888 +typedef uint32_t ColorRaw; +typedef union Color { + struct { + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t a; + } split; + + ColorRaw raw; +} Color; +#endif + +// NOTE: RGB16() is used in SA1 in some places for matching, +// so we can't have one single macro. :( +#define RGB16(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) +#define RGB16_REV(r, g, b) (((b) << 10) | ((g) << 5) | (r)) + +#define RGB_BLACK RGB16_REV(0, 0, 0) +#define RGB_WHITE RGB16_REV(31, 31, 31) +#define RGB_RED RGB16_REV(31, 0, 0) +#define RGB_GREEN RGB16_REV(0, 31, 0) +#define RGB_BLUE RGB16_REV(0, 0, 31) +#define RGB_YELLOW RGB16_REV(31, 31, 0) +#define RGB_MAGENTA RGB16_REV(31, 0, 31) +#define RGB_CYAN RGB16_REV(0, 31, 31) +#define RGB_WHITEALPHA (RGB_WHITE | 0x8000) + +#endif // GUARD_COLOR_H \ No newline at end of file diff --git a/sa1/include/config.h b/sa1/include/config.h new file mode 100644 index 0000000000..47c62c4768 --- /dev/null +++ b/sa1/include/config.h @@ -0,0 +1,52 @@ +#ifndef GUARD_SA1_CONFIG_H +#define GUARD_SA1_CONFIG_H + +/* TODO: Generate config.h in nob */ + +#define GAME_SA1 1 +#define GAME_SA2 2 +#define GAME_SA3 3 +#define GAME_KATAM 4 + +#define ENGINE_1 1 +#define ENGINE_2 2 +#define ENGINE_3 3 +#define ENGINE_4 4 + +// TODO: Define this in Makefile through a compiler macro? +#define GAME GAME_SA1 + +// TODO: Do SA1 and SA2 use the same engine ver? +// TODO: Do SA3 and KATAM use the same engine ver? +#define ENGINE GAME + +// TODO: Put somewhere else? +#if PLATFORM_GBA +#define USE_NEW_DMA 0 +#else +#define USE_NEW_DMA 1 +#endif + +#ifndef TAS_TESTING +#define TAS_TESTING 0 +#endif + +#define TAS_INPUT_LOGGING 0 + +#ifndef HEADLESS +#define HEADLESS 0 +#endif + +#define TAS_TESTING_WIDESCREEN_HACK 1 + +#define RENDERER_SOFTWARE 0 +#define RENDERER_OPENGL 1 +#define RENDERER_COUNT 2 +#if PLATFORM_WIN32 && !PLATFORM_SDL +// TODO: Only win32 for now +#define RENDERER RENDERER_OPENGL +#else +#define RENDERER RENDERER_SOFTWARE +#endif + +#endif // GUARD_SA1_CONFIG_H diff --git a/sa1/include/constants/anim_commands.h b/sa1/include/constants/anim_commands.h new file mode 100644 index 0000000000..284bc7dde6 --- /dev/null +++ b/sa1/include/constants/anim_commands.h @@ -0,0 +1,52 @@ +#ifndef GUARD_CONST_ANIM_COMMANDS_H +#define GUARD_CONST_ANIM_COMMANDS_H + +#define ANIM_CMD__TILES -1 +#define ANIM_CMD__PALETTE -2 +#define ANIM_CMD__JUMP_BACK -3 +#define ANIM_CMD__END -4 +#define ANIM_CMD__PLAY_SOUND -5 +#define ANIM_CMD__HITBOX -6 +#define ANIM_CMD__TRANSLATE -7 +#define ANIM_CMD__8 -8 +#define ANIM_CMD__CHANGE_ANIM -9 +#define ANIM_CMD__10 -10 +#define ANIM_CMD__SET_PRIORITY -11 +#define ANIM_CMD__12 -12 +#define ANIM_CMD__SHOW_FRAME -13 + +#define NUM_ANIMATION_TABLE_ENTRIES 1133 + +#define TILES(index, count) ANIM_CMD__TILES, index, count, +#define PALETTE(num, count, offset) ANIM_CMD__PALETTE, num, (((u16)count << 0) | ((u16)offset << 16)), +#define JUMP_BACK(offset) ANIM_CMD__JUMP_BACK, offset, +#define END() ANIM_CMD__END, +#define PLAY_SOUND(id) ANIM_CMD__PLAY_SOUND, id, +#define HITBOX(index, left, top, right, bottom) \ + ANIM_CMD__HITBOX, index, (((left & 0xFF) << 0) | ((top & 0xFF) << 8) | ((right & 0xFF) << 16) | ((bottom & 0xFF) << 24)), +#define TRANSLATE(x, y) ANIM_CMD__TRANSLATE, (((u16)x << 0) | ((u16)y << 16)), +#define CMD_8(a, b) ANIM_CMD__8, a, b, +#define CHANGE_ANIM(anim, variant) ANIM_CMD__CHANGE_ANIM, (((u16)anim << 0) | ((u16)variant << 16)), +#define CMD_10(a, b, c) ANIM_CMD__10, a, b, c, +#define SET_PRIORITY(prio) ANIM_CMD__SET_PRIORITY, prio, +#define CMD_12(a) ANIM_CMD__12, a, +#define SHOW_FRAME(duration, frameId) duration, frameId, + +#ifdef M2C +// M2C: #undef directives get removed (manully, beforehand), thus the macros would be re-defined +// Also apparently it just ignores the __BYTE_ORDER__ check? +#else +#if (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#undef PALETTE +#undef HITBOX +#undef TRANSLATE +#undef CHANGE_ANIM +#define PALETTE(num, count, offset) ANIM_CMD__PALETTE, num, (((u16)count << 16) | ((u16)offset << 0)), +#define HITBOX(index, left, top, right, bottom) \ + ANIM_CMD__HITBOX, index, (((left & 0xFF) << 24) | ((top & 0xFF) << 16) | ((right & 0xFF) << 8) | ((bottom & 0xFF) << 0)), +#define TRANSLATE(x, y) ANIM_CMD__TRANSLATE, (((u16)x << 16) | ((u16)y << 0)), +#define CHANGE_ANIM(anim, variant) ANIM_CMD__CHANGE_ANIM, (((u16)anim << 16) | ((u16)variant << 0)), +#endif +#endif + +#endif \ No newline at end of file diff --git a/sa1/include/constants/anim_sizes.h b/sa1/include/constants/anim_sizes.h new file mode 100644 index 0000000000..19952a366f --- /dev/null +++ b/sa1/include/constants/anim_sizes.h @@ -0,0 +1,1574 @@ +#ifndef GUARD_ANIM_SIZES_H +#define GUARD_ANIM_SIZES_H + +// TODO: Auto-generate this file +#define MAX_TILES(_animName) ((_animName##_WIDTH / 8) * (_animName##_HEIGHT / 8)) +#define MAX_TILES_VARIANT(_animName, _variant) ((_animName##_VAR##_variant##_WIDTH / 8) * (_animName##_VAR##_variant##_HEIGHT / 8)) +#define ALLOC_TILES(_animName) VramMalloc(((_animName##_WIDTH / 8) * (_animName##_HEIGHT / 8))) +#define ALLOC_TILES_VARIANT(_animName, _variant) \ + VramMalloc(((_animName##_VAR##_variant##_WIDTH / 8) * (_animName##_VAR##_variant##_HEIGHT / 8))) + +#if (GAME == GAME_SA1) +// 005 +#define SA1_ANIM_SONIC_RUN_WIDTH 64 +#define SA1_ANIM_SONIC_RUN_HEIGHT 64 + +// 39/138/... +#define SA1_CHAR_ANIM_MARBLE_TRACK_WIDTH 64 +#define SA1_CHAR_ANIM_MARBLE_TRACK_HEIGHT 64 + +// 50/149/... +#define SA1_CHAR_ANIM_50_WIDTH 32 +#define SA1_CHAR_ANIM_50_HEIGHT 32 + +// 250 +#define SA1_ANIM_KNUCKLES_UPPERCUT_WIDTH 32 +#define SA1_ANIM_KNUCKLES_UPPERCUT_HEIGHT 48 + +// 400 +#define SA1_ANIM_SUPER_SONIC_DASH_WIDTH 64 +#define SA1_ANIM_SUPER_SONIC_DASH_HEIGHT 40 + +// 401 +#define SA1_ANIM_KIKI_WIDTH 32 +#define SA1_ANIM_KIKI_HEIGHT 40 + +// 403 +#define SA1_ANIM_BUZZER_WIDTH 32 +#define SA1_ANIM_BUZZER_HEIGHT 40 + +// 404 +#define SA1_ANIM_GAMIGAMI_WIDTH 48 +#define SA1_ANIM_GAMIGAMI_HEIGHT 40 + +// 405 +#define SA1_ANIM_RHINOTANK_WIDTH 40 +#define SA1_ANIM_RHINOTANK_HEIGHT 32 + +// 406 +#define SA1_ANIM_KEROKERO_WIDTH 40 +#define SA1_ANIM_KEROKERO_HEIGHT 32 + +// 411 +#define SA1_ANIM_SENBON_WIDTH 32 +#define SA1_ANIM_SENBON_HEIGHT 32 + +// 410 +#define SA1_ANIM_GAMIGAMI_PROJ_WIDTH 16 +#define SA1_ANIM_GAMIGAMI_PROJ_HEIGHT 16 + +// 412 +#define SA1_ANIM_TENTOU_WIDTH 24 +#define SA1_ANIM_TENTOU_HEIGHT 16 + +// 413 +#define SA1_ANIM_FIREBALL_WIDTH (32 / 2) +#define SA1_ANIM_FIREBALL_HEIGHT 32 + +// 415 +#define SA1_ANIM_HANABII_WIDTH 32 +#define SA1_ANIM_HANABII_HEIGHT 40 + +// 416 +#define SA1_ANIM_HANABII_FIREWORK_WIDTH 32 +#define SA1_ANIM_HANABII_FIREWORK_HEIGHT 32 + +// 417 +#define SA1_ANIM_SLOT_WIDTH 24 +#define SA1_ANIM_SLOT_HEIGHT 40 + +// 418 +#define SA1_ANIM_PIERROT_WIDTH 48 +#define SA1_ANIM_PIERROT_HEIGHT 48 + +// 419 +#define SA1_ANIM_HANABII_PROJ_WIDTH 16 +#define SA1_ANIM_HANABII_PROJ_HEIGHT 16 + +// 420 +#define SA1_ANIM_SLOT_PROJ_WIDTH 16 +#define SA1_ANIM_SLOT_PROJ_HEIGHT 16 + +// 421 +#define SA1_ANIM_YUKIMARU_PROJ_WIDTH 8 +#define SA1_ANIM_YUKIMARU_PROJ_HEIGHT 8 + +// 422 +#define SA1_ANIM_YUKIMARU_WIDTH (32 / 2) +#define SA1_ANIM_YUKIMARU_HEIGHT 32 + +// 423 +#define SA1_ANIM_YUKIMARU_SIDEWAYS_WIDTH 32 +#define SA1_ANIM_YUKIMARU_SIDEWAYS_HEIGHT (32 / 2) + +// 424 +#define SA1_ANIM_DRISAME_WIDTH 40 +#define SA1_ANIM_DRISAME_HEIGHT 16 + +// 425 +#define SA1_ANIM_KURAA_WIDTH 24 +#define SA1_ANIM_KURAA_HEIGHT 40 + +// 426 +#define SA1_ANIM_PEN_WIDTH 16 +#define SA1_ANIM_PEN_HEIGHT 24 + +// 430 +#define SA1_ANIM_LEON_WIDTH 64 +#define SA1_ANIM_LEON_HEIGHT 24 + +// 431 +#define SA1_ANIM_WAMU_WIDTH 16 +#define SA1_ANIM_WAMU_HEIGHT 16 + +// 432 +#define SA1_ANIM_MIRROR_WIDTH 40 +#define SA1_ANIM_MIRROR_HEIGHT 32 + +// 433 +#define SA1_ANIM_OCT_WIDTH (32 / 2) +#define SA1_ANIM_OCT_HEIGHT 32 + +// 434 +#define SA1_ANIM_MOLE_WIDTH 32 +#define SA1_ANIM_MOLE_HEIGHT 32 + +// 452 +#define SA1_ANIM_CHECKPOINT_WIDTH 24 +#define SA1_ANIM_CHECKPOINT_HEIGHT 48 + +// 453 +#define SA1_ANIM_GOAL_WIDTH 48 +#define SA1_ANIM_GOAL_HEIGHT 48 + +// 454 +#define SA1_ANIM_SPIKES_WIDTH 32 +#define SA1_ANIM_SPIKES_HEIGHT 32 + +// 455 +#define SA1_ANIM_SPRING_WIDTH 32 +#define SA1_ANIM_SPRING_HEIGHT 32 + +// 457 +#define SA1_ANIM_FALLING_BOULDER_WIDTH 32 +#define SA1_ANIM_FALLING_BOULDER_HEIGHT 32 + +// 458 +#define SA1_ANIM_ROCK_WIDTH 48 +#define SA1_ANIM_ROCK_HEIGHT 32 + +// 459 +#define SA1_ANIM_ROCK_DEBRIS_S_WIDTH 8 +#define SA1_ANIM_ROCK_DEBRIS_S_HEIGHT 8 + +// 460 +#define SA1_ANIM_ROCK_DEBRIS_L_WIDTH 16 +#define SA1_ANIM_ROCK_DEBRIS_L_HEIGHT 16 + +// 461 +#define SA1_ANIM_TRAMPOLINE1_WIDTH 48 +#define SA1_ANIM_TRAMPOLINE1_HEIGHT 32 + +// 462 +#define SA1_ANIM_BOUNCE_BLOCK_1_WIDTH 32 +#define SA1_ANIM_BOUNCE_BLOCK_1_HEIGHT 24 + +// 463 +#define SA1_ANIM_PLATFORM_HORZ_1_WIDTH 48 +#define SA1_ANIM_PLATFORM_HORZ_1_HEIGHT 24 + +// 464 +#define SA1_ANIM_WATER_SPLASH_WIDTH 48 +#define SA1_ANIM_WATER_SPLASH_HEIGHT 24 + +// 467 +#define SA1_ANIM_SHRUBBERY_WIDTH 32 +#define SA1_ANIM_SHRUBBERY_HEIGHT 32 + +// 468 +#define SA1_ANIM_BOUNCY_BAR_WIDTH 32 +#define SA1_ANIM_BOUNCY_BAR_HEIGHT 24 + +// 469 +#define SA1_ANIM_RED_FLAG_V_WIDTH 24 +#define SA1_ANIM_RED_FLAG_V_HEIGHT 32 + +// 470 +#define SA1_ANIM_RED_FLAG_H_WIDTH 24 +#define SA1_ANIM_RED_FLAG_H_HEIGHT 32 + +// 471 +#define SA1_ANIM_BOOSTER_WIDTH 32 +#define SA1_ANIM_BOOSTER_HEIGHT 16 +#define SA1_ANIM_BOOSTER_VAR2_WIDTH 32 +#define SA1_ANIM_BOOSTER_VAR2_HEIGHT 24 + +// 471 +#define SA1_ANIM_BOOSTER_VERT_WIDTH 16 +#define SA1_ANIM_BOOSTER_VERT_HEIGHT 32 + +// 473 +#define SA1_ANIM_WATER_BRIDGE_SPLASH_WIDTH 56 +#define SA1_ANIM_WATER_BRIDGE_SPLASH_HEIGHT 56 + +// 474 +#define SA1_ANIM_WATER_SLIDE_SPLASH_WIDTH 48 +#define SA1_ANIM_WATER_SLIDE_SPLASH_HEIGHT 24 + +// 479 +#define SA1_ANIM_BALLOON_BLUE_WIDTH 24 +#define SA1_ANIM_BALLOON_BLUE_HEIGHT 48 + +// 478 +#define SA1_ANIM_FLIPPER_WIDTH 48 +#define SA1_ANIM_FLIPPER_HEIGHT 32 +#define SA1_ANIM_FLIPPER_VAR0_WIDTH 48 +#define SA1_ANIM_FLIPPER_VAR0_HEIGHT 24 +#define SA1_ANIM_FLIPPER_VAR1_WIDTH 48 +#define SA1_ANIM_FLIPPER_VAR1_HEIGHT 32 +#define SA1_ANIM_FLIPPER_VAR2_WIDTH 24 +#define SA1_ANIM_FLIPPER_VAR2_HEIGHT 48 +#define SA1_ANIM_FLIPPER_VAR3_WIDTH 40 +#define SA1_ANIM_FLIPPER_VAR3_HEIGHT 48 + +// 482 +#define SA1_ANIM_FIREWORKS_WIDTH 24 +#define SA1_ANIM_FIREWORKS_HEIGHT 24 + +// 483 +#define SA1_ANIM_FIREWORKS_SMALL_WIDTH 16 +#define SA1_ANIM_FIREWORKS_SMALL_HEIGHT 16 + +// 484 +#define SA1_ANIM_BUMPER_BIG_WIDTH 48 +#define SA1_ANIM_BUMPER_BIG_HEIGHT 40 + +// 486 +#define SA1_ANIM_BOWL_3_WIDTH 96 +#define SA1_ANIM_BOWL_3_HEIGHT 40 + +// 487 +#define SA1_ANIM_CAROUSEL_WIDTH 96 +#define SA1_ANIM_CAROUSEL_HEIGHT 40 + +// 488 +#define SA1_ANIM_MARBLE_TRACK_EXIT_WIDTH 32 +#define SA1_ANIM_MARBLE_TRACK_EXIT_HEIGHT 32 + +// 489 +#define SA1_ANIM_SHIP_SWING_SEGMENT_WIDTH 8 +#define SA1_ANIM_SHIP_SWING_SEGMENT_HEIGHT 8 + +// 490 +#define SA1_ANIM_SHIP_SWING_HOOK_WIDTH 24 +#define SA1_ANIM_SHIP_SWING_HOOK_HEIGHT 24 + +// 491 +#define SA1_ANIM_SHIP_SWING_WIDTH (96 / 2) +#define SA1_ANIM_SHIP_SWING_HEIGHT 40 + +// 492 +#define SA1_ANIM_SEGA_SONIC_LETTERS_WIDTH 32 +#define SA1_ANIM_SEGA_SONIC_LETTERS_HEIGHT 32 + +// 493 +#define SA1_ANIM_BARREL_OF_DOOM_MINI_WIDTH 32 +#define SA1_ANIM_BARREL_OF_DOOM_MINI_HEIGHT 40 + +// 494 +#define SA1_ANIM_PLATFORM_SQU_3_WIDTH 48 +#define SA1_ANIM_PLATFORM_SQU_3_HEIGHT 48 + +// 495 +#define SA1_ANIM_PLATFORM_HORZ_3_WIDTH 48 +#define SA1_ANIM_PLATFORM_HORZ_3_HEIGHT 24 + +// 496 +#define SA1_ANIM_PANEL_GATE_SIDEWAYS_WIDTH 16 +#define SA1_ANIM_PANEL_GATE_SIDEWAYS_HEIGHT 32 + +// 497 +#define SA1_ANIM_PANEL_GATE_UPDOWN_WIDTH 32 +#define SA1_ANIM_PANEL_GATE_UPDOWN_HEIGHT 16 + +// 498 +#define SA1_ANIM_CRANE_CLAW_2_WIDTH 48 +#define SA1_ANIM_CRANE_CLAW_2_HEIGHT 40 +#define SA1_ANIM_CRANE_CLAW_2_VAR3_WIDTH 8 +#define SA1_ANIM_CRANE_CLAW_2_VAR3_HEIGHT 24 + +// 501 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR0_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR0_HEIGHT 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR1_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR1_HEIGHT 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR2_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_LID_VAR2_HEIGHT 16 + +// 503 +#define SA1_ANIM_ANCHOR_HANDLES_WIDTH 8 +#define SA1_ANIM_ANCHOR_HANDLES_HEIGHT 8 +#define SA1_ANIM_ANCHOR_HANDLES_VAR0_WIDTH 8 +#define SA1_ANIM_ANCHOR_HANDLES_VAR0_HEIGHT 8 +#define SA1_ANIM_ANCHOR_HANDLES_VAR1_WIDTH 8 +#define SA1_ANIM_ANCHOR_HANDLES_VAR1_HEIGHT 8 +#define SA1_ANIM_ANCHOR_HANDLES_VAR2_WIDTH 8 +#define SA1_ANIM_ANCHOR_HANDLES_VAR2_HEIGHT 8 + +// 504 +#define SA1_ANIM_HOOK_RAIL_2_WIDTH 32 +#define SA1_ANIM_HOOK_RAIL_2_HEIGHT 32 +#define SA1_ANIM_HOOK_RAIL_2_VAR0_WIDTH 16 +#define SA1_ANIM_HOOK_RAIL_2_VAR0_HEIGHT 24 +#define SA1_ANIM_HOOK_RAIL_2_VAR1_WIDTH 32 +#define SA1_ANIM_HOOK_RAIL_2_VAR1_HEIGHT 32 + +// 505 +#define SA1_ANIM_TRAMPOLINE2_WIDTH 48 +#define SA1_ANIM_TRAMPOLINE2_HEIGHT 40 + +// 506 +#define SA1_ANIM_PLATFORM_HORZ_2_WIDTH 48 +#define SA1_ANIM_PLATFORM_HORZ_2_HEIGHT 24 + +// 508 +#define SA1_ANIM_CONVEYOR_BELT_2_WIDE_WIDTH 96 +#define SA1_ANIM_CONVEYOR_BELT_2_WIDE_HEIGHT 24 + +// 509 +#define SA1_ANIM_CONVEYOR_BELT_2_SLIM_WIDTH 72 +#define SA1_ANIM_CONVEYOR_BELT_2_SLIM_HEIGHT 24 + +// 510 +#define SA1_ANIM_IRON_BALL_WIDTH 48 +#define SA1_ANIM_IRON_BALL_HEIGHT 48 + +// 511 +#define SA1_ANIM_TORCH6_1_WIDTH 16 +#define SA1_ANIM_TORCH6_1_HEIGHT 16 + +// 512 +#define SA1_ANIM_TORCH6_2_WIDTH 32 +#define SA1_ANIM_TORCH6_2_HEIGHT 16 + +// 515 +#define SA1_ANIM_PROPELLER_WIDTH 144 +#define SA1_ANIM_PROPELLER_HEIGHT 24 + +// 516 +#define SA1_ANIM_SPIKED_BARREL_WIDTH 48 +#define SA1_ANIM_SPIKED_BARREL_HEIGHT 40 + +// 517 +#define SA1_ANIM_PLATFORM_HORZ_6_1_WIDTH 48 +#define SA1_ANIM_PLATFORM_HORZ_6_1_HEIGHT 24 + +// 518 +#define SA1_ANIM_PLATFORM_SQU_6_1_WIDTH 48 +#define SA1_ANIM_PLATFORM_SQU_6_1_HEIGHT 48 + +// 519 +#define SA1_ANIM_PLATFORM_LONG_6_1_WIDTH 80 +#define SA1_ANIM_PLATFORM_LONG_6_1_HEIGHT 32 + +// 521 +#define SA1_ANIM_PLATFORM_SPIKED_3_WIDTH 32 +#define SA1_ANIM_PLATFORM_SPIKED_3_HEIGHT 40 + +// 522 +#define SA1_ANIM_BLUE_FLIPPER_WIDTH 32 +#define SA1_ANIM_BLUE_FLIPPER_HEIGHT 32 + +// 523 +#define SA1_ANIM_PLATFORM_HORZ_4_WIDTH 48 +#define SA1_ANIM_PLATFORM_HORZ_4_HEIGHT 24 + +// 524 +#define SA1_ANIM_PLATFORM_SQU_4_WIDTH 48 +#define SA1_ANIM_PLATFORM_SQU_4_HEIGHT 48 + +// 525 +#define SA1_ANIM_PLATFORM_HORZ_4_PURPLE_WIDTH 48 +#define SA1_ANIM_PLATFORM_HORZ_4_PURPLE_HEIGHT 24 + +// 526 +#define SA1_ANIM_SPRING_PLATFORM_4_WIDTH 32 +#define SA1_ANIM_SPRING_PLATFORM_4_HEIGHT 56 + +// 528 +#define SA1_ANIM_PLATFORM_SQU_4_PURPLE_WIDTH 48 +#define SA1_ANIM_PLATFORM_SQU_4_PURPLE_HEIGHT 40 + +// 529 +#define SA1_ANIM_SKATING_STONE_4_WIDTH 48 +#define SA1_ANIM_SKATING_STONE_4_HEIGHT 32 + +// 534 +#define SA1_ANIM_SECURITY_GATE_WIDTH 16 +#define SA1_ANIM_SECURITY_GATE_HEIGHT 48 + +// 532 +#define SA1_ANIM_AIR_BUBBLES_WIDTH 24 +#define SA1_ANIM_AIR_BUBBLES_HEIGHT 24 + +// 533 +#define SA1_ANIM_MINIBUBBLES_WIDTH 16 +#define SA1_ANIM_MINIBUBBLES_HEIGHT 16 + +// 536 +#define SA1_ANIM_PLATFORM_LONG_V_5_WIDTH 32 +#define SA1_ANIM_PLATFORM_LONG_V_5_HEIGHT 80 + +// 537 +#define SA1_ANIM_PLATFORM_LONG_H_5_WIDTH 80 +#define SA1_ANIM_PLATFORM_LONG_H_5_HEIGHT 32 + +// 538 +#define SA1_ANIM_PLATFORM_SPIKED_5_UP_WIDTH 48 +#define SA1_ANIM_PLATFORM_SPIKED_5_UP_HEIGHT 48 + +// 539 +#define SA1_ANIM_PLATFORM_SPIKED_5_DOWN_WIDTH 48 +#define SA1_ANIM_PLATFORM_SPIKED_5_DOWN_HEIGHT 48 + +// 540 +#define SA1_ANIM_SPRING_PLATFORM_5_WIDTH 32 +#define SA1_ANIM_SPRING_PLATFORM_5_HEIGHT 56 + +// 541 +#define SA1_ANIM_IRON_BALL_5_WIDTH 48 +#define SA1_ANIM_IRON_BALL_5_HEIGHT 48 + +// 542 +#define SA1_ANIM_RUN_WHEEL_HEIGHT 32 +#define SA1_ANIM_RUN_WHEEL_WIDTH 32 + +// 544 +#define SA1_ANIM_PLATFORM_SQU_ARROW_WIDTH 40 +#define SA1_ANIM_PLATFORM_SQU_ARROW_HEIGHT 40 + +// 545 +#define SA1_ANIM_LIFT_VAR0_WIDTH 8 +#define SA1_ANIM_LIFT_VAR0_HEIGHT 32 +#define SA1_ANIM_LIFT_VAR1_WIDTH 24 +#define SA1_ANIM_LIFT_VAR1_HEIGHT 24 + +// 547 +#define SA1_ANIM_SKATING_STONE_WIDTH 48 +#define SA1_ANIM_SKATING_STONE_HEIGHT 32 + +// 548 +#define SA1_ANIM_SKATING_STONE_DEBRIS_L_WIDTH 32 +#define SA1_ANIM_SKATING_STONE_DEBRIS_L_HEIGHT 32 + +// 549 +#define SA1_ANIM_SKATING_STONE_DEBRIS_S_WIDTH 8 +#define SA1_ANIM_SKATING_STONE_DEBRIS_S_HEIGHT 8 + +// 553 +#define SA1_ANIM_SKATING_STONE_DEBRIS_4_L_WIDTH 64 +#define SA1_ANIM_SKATING_STONE_DEBRIS_4_L_HEIGHT 64 + +// 554 +#define SA1_ANIM_SKATING_STONE_DEBRIS_4_S_WIDTH 8 +#define SA1_ANIM_SKATING_STONE_DEBRIS_4_S_HEIGHT 8 + +// 555 +#define SA1_ANIM_ICE_BLOCK_WIDTH 40 +#define SA1_ANIM_ICE_BLOCK_HEIGHT 40 + +// 556 +#define SA1_ANIM_ICE_BLOCK_SHARDS_L_WIDTH 64 +#define SA1_ANIM_ICE_BLOCK_SHARDS_L_HEIGHT 64 + +// 557 +#define SA1_ANIM_ICE_BLOCK_SHARDS_S_WIDTH 16 +#define SA1_ANIM_ICE_BLOCK_SHARDS_S_HEIGHT 16 + +// 558 +#define SA1_ANIM_TORCH5_WIDTH 24 +#define SA1_ANIM_TORCH5_HEIGHT 40 + +// 558 +#define SA1_ANIM_BREAKABLE_WALL_1_WIDTH 32 +#define SA1_ANIM_BREAKABLE_WALL_1_HEIGHT 64 + +// 560 +#define SA1_ANIM_PLATFORM_LAVA_SPURT_WIDTH 32 +#define SA1_ANIM_PLATFORM_LAVA_SPURT_HEIGHT 32 + +// 561 +#define SA1_ANIM_PLATFORM_LAVA_WIDTH 32 +#define SA1_ANIM_PLATFORM_LAVA_HEIGHT 8 + +// 564 +#define SA1_ANIM_DEBRIS_A_WIDTH 8 +#define SA1_ANIM_DEBRIS_A_HEIGHT 8 + +// 565 +#define SA1_ANIM_DEBRIS_B_WIDTH 8 +#define SA1_ANIM_DEBRIS_B_HEIGHT 16 + +// 566 +#define SA1_ANIM_DEBRIS_C_WIDTH 8 +#define SA1_ANIM_DEBRIS_C_HEIGHT 8 + +// 567 +#define SA1_ANIM_STEAM_EXHAUST_WIDTH 32 +#define SA1_ANIM_STEAM_EXHAUST_HEIGHT 48 + +// 569 +#define SA1_ANIM_HOOK_RAIL_3_WIDTH 16 +#define SA1_ANIM_HOOK_RAIL_3_HEIGHT 24 + +// 570 +#define SA1_ANIM_BOOSTER_STEEP_CLOCKWISE_WIDTH 32 +#define SA1_ANIM_BOOSTER_STEEP_CLOCKWISE_HEIGHT 24 + +// 571 +#define SA1_ANIM_BOOSTER_STEEP_COUNTER_CLOCKWISE_WIDTH 32 +#define SA1_ANIM_BOOSTER_STEEP_COUNTER_CLOCKWISE_HEIGHT 24 + +// 572 +#define SA1_ANIM_SPECIAL_SPRING_WIDTH 32 +#define SA1_ANIM_SPECIAL_SPRING_HEIGHT 48 + +// 573 +#define SA1_ANIM_DRISAME_ICEBLOCK_WIDTH 56 +#define SA1_ANIM_DRISAME_ICEBLOCK_HEIGHT 32 + +// 574 +#define SA1_ANIM_FALLING_BRICK_XZONE_WIDTH 16 +#define SA1_ANIM_FALLING_BRICK_XZONE_HEIGHT 24 + +// 575 +#define SA1_ANIM_BOSS_CAPSULE_LARGE_WIDTH 72 +#define SA1_ANIM_BOSS_CAPSULE_LARGE_HEIGHT 72 + +// 576 +#define SA1_ANIM_BOSS_CAPSULE_SWITCH_WIDTH 24 +#define SA1_ANIM_BOSS_CAPSULE_SWITCH_HEIGHT 16 + +// 577 +#define SA1_ANIM_BOSS_CAPSULE_SHELL_WIDTH 64 +#define SA1_ANIM_BOSS_CAPSULE_SHELL_HEIGHT 64 + +// 578 +#define SA1_ANIM_BOSS_CAPSULE_SMALL_WIDTH 64 +#define SA1_ANIM_BOSS_CAPSULE_SMALL_HEIGHT 64 + +// 579 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_LARGE_WIDTH 16 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_LARGE_HEIGHT 16 + +// 579 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_SMALL_WIDTH 8 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_SMALL_HEIGHT 8 + +// 582 +#define SA1_ANIM_SPRING_PLATFORM_6_WIDTH 32 +#define SA1_ANIM_SPRING_PLATFORM_6_HEIGHT 56 + +// 583 +#define SA1_ANIM_CAROUSEL_POLE_WIDTH 16 +#define SA1_ANIM_CAROUSEL_POLE_HEIGHT 40 + +// 584 +#define SA1_ANIM_PIPE_ENTER_6_1_V_WIDTH 56 +#define SA1_ANIM_PIPE_ENTER_6_1_V_HEIGHT 80 + +// 585 +#define SA1_ANIM_PIPE_EXIT_6_1_V_WIDTH 56 +#define SA1_ANIM_PIPE_EXIT_6_1_V_HEIGHT 80 + +// 586 +#define SA1_ANIM_PIPE_ENTER_6_1_H_WIDTH 80 +#define SA1_ANIM_PIPE_ENTER_6_1_H_HEIGHT 56 + +// 587 +#define SA1_ANIM_PIPE_EXIT_6_1_H_WIDTH 56 +#define SA1_ANIM_PIPE_EXIT_6_1_H_HEIGHT 80 + +// 588 +#define SA1_ANIM_PIPE_GATE_2_H_WIDTH 80 +#define SA1_ANIM_PIPE_GATE_2_H_HEIGHT 56 + +// 589 +#define SA1_ANIM_PIPE_GATE_2_V_WIDTH 56 +#define SA1_ANIM_PIPE_GATE_2_V_HEIGHT 80 + +// 590 +#define SA1_ANIM_PIPE_ENTER_6_2_H_WIDTH 104 +#define SA1_ANIM_PIPE_ENTER_6_2_H_HEIGHT 56 + +// 591 +#define SA1_ANIM_PIPE_ENTER_6_2_V_WIDTH 56 +#define SA1_ANIM_PIPE_ENTER_6_2_V_HEIGHT 88 + +// 592 +#define SA1_ANIM_AIR_MAZE_CORNER_WIDTH 32 +#define SA1_ANIM_AIR_MAZE_CORNER_HEIGHT 32 + +// 593 +#define SA1_ANIM_EGG_BALL_PIPES_WIDTH 56 +#define SA1_ANIM_EGG_BALL_PIPES_HEIGHT 32 + +// 599 +#define SA1_ANIM_PLATFORM_SQU_6_2_WIDTH 48 +#define SA1_ANIM_PLATFORM_SQU_6_2_HEIGHT 48 + +// 600 +#define SA1_ANIM_PLATFORM_LONG_6_2_WIDTH 80 +#define SA1_ANIM_PLATFORM_LONG_6_2_HEIGHT 32 + +// 603 +#define SA1_ANIM_CONVEYOR_BELT_6_SLIM_WIDTH 72 +#define SA1_ANIM_CONVEYOR_BELT_6_SLIM_HEIGHT 24 + +// 604 +#define SA1_ANIM_CONVEYOR_BELT_6_WIDE_WIDTH 96 +#define SA1_ANIM_CONVEYOR_BELT_6_WIDE_HEIGHT 24 + +// 607 +#define SA1_ANIM_BOSS_1_BODY_WIDTH 80 +#define SA1_ANIM_BOSS_1_BODY_HEIGHT 56 + +// 608 +#define SA1_ANIM_BOSS_1_HAMMER_SEGMENT_WIDTH 16 +#define SA1_ANIM_BOSS_1_HAMMER_SEGMENT_HEIGHT 16 + +// 609 +#define SA1_ANIM_BOSS_1_HAMMER_WIDTH 64 +#define SA1_ANIM_BOSS_1_HAMMER_HEIGHT 64 + +// 610 +#define SA1_ANIM_BOSS_1_EGGMAN_WIDTH 32 +#define SA1_ANIM_BOSS_1_EGGMAN_HEIGHT 16 + +// 612 +#define SA1_ANIM_BOSS_1_BODY_NO_BELT_WIDTH 64 +#define SA1_ANIM_BOSS_1_BODY_NO_BELT_HEIGHT 56 + +// 618 +#define SA1_ANIM_BOSS_2_EGGMAN_WIDTH 32 +#define SA1_ANIM_BOSS_2_EGGMAN_HEIGHT 16 + +// 620 +#define SA1_ANIM_BOSS_2_WIDTH 48 +#define SA1_ANIM_BOSS_2_HEIGHT 72 + +// 622 +#define SA1_ANIM_BOSS_3_EGGMAN_WIDTH 32 +#define SA1_ANIM_BOSS_3_EGGMAN_HEIGHT 16 + +// 624 +#define SA1_ANIM_BOSS_3_MOBILE_WIDTH 48 +#define SA1_ANIM_BOSS_3_MOBILE_HEIGHT 48 + +// 625 +#define SA1_ANIM_BOSS_3_SPIKE_BALL_WIDTH 48 +#define SA1_ANIM_BOSS_3_SPIKE_BALL_HEIGHT 48 + +// 656 +#define SA1_ANIM_BOSS_5_ROCKET_WIDTH 64 +#define SA1_ANIM_BOSS_5_ROCKET_HEIGHT 64 + +// 658 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_WIDTH 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_HEIGHT 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR0_WIDTH 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR0_HEIGHT 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR1_WIDTH 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR1_HEIGHT 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR2_WIDTH 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR2_HEIGHT 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR3_WIDTH 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR3_HEIGHT 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR4_WIDTH 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR4_HEIGHT 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR5_WIDTH 32 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS_VAR5_HEIGHT 32 + +// 659 +#define SA1_ANIM_BOSS_6_SEGMENT_WIDTH 32 +#define SA1_ANIM_BOSS_6_SEGMENT_HEIGHT 32 + +// 664 +#define SA1_ANIM_BOSS_6_PROJ_WIDTH 16 +#define SA1_ANIM_BOSS_6_PROJ_HEIGHT 16 + +// 665 +#define SA1_ANIM_BOSS_XTRA_HEAD_WIDTH 64 +#define SA1_ANIM_BOSS_XTRA_HEAD_HEIGHT 64 + +// 670 +#define SA1_ANIM_BOSS_XTRA_CAPSULE_WIDTH 32 +#define SA1_ANIM_BOSS_XTRA_CAPSULE_HEIGHT 16 + +// 671 +#define SA1_ANIM_BOSS_XTRA_CAPSULE_PART_WIDTH 16 +#define SA1_ANIM_BOSS_XTRA_CAPSULE_PART_HEIGHT 16 + +// 672 +#define SA1_ANIM_BOSS_XTRA_LASER_WIDTH 16 +#define SA1_ANIM_BOSS_XTRA_LASER_HEIGHT 96 + +// 679 +#define SA1_ANIM_BOSS_X2_DRILL_WIDTH 32 +#define SA1_ANIM_BOSS_X2_DRILL_HEIGHT 32 + +// 680 +#define SA1_ANIM_BOSS_X2_EGGMAN_WIDTH 32 +#define SA1_ANIM_BOSS_X2_EGGMAN_HEIGHT 16 + +// 681 +#define SA1_ANIM_BOSS_X2_WHEEL_WIDTH 32 +#define SA1_ANIM_BOSS_X2_WHEEL_HEIGHT 32 + +// 682 +#define SA1_ANIM_BOSS_X2_EGGDRILLSTER_WIDTH 72 +#define SA1_ANIM_BOSS_X2_EGGDRILLSTER_HEIGHT 48 + +// 683 +#define SA1_ANIM_BOSS_X1_DECO 16 +#define SA1_ANIM_BOSS_X1_DECO 16 + +// 684 +#define SA1_ANIM_BOSS_X1_EGGMOBILE_WIDTH 48 +#define SA1_ANIM_BOSS_X1_EGGMOBILE_HEIGHT 40 + +// 685 +#define SA1_ANIM_BOSS_X1_BALL_WIDTH 32 +#define SA1_ANIM_BOSS_X1_BALL_HEIGHT 32 + +// 686 +#define SA1_ANIM_BOSS_X1_EGGMAN_WIDTH 32 +#define SA1_ANIM_BOSS_X1_EGGMAN_HEIGHT 16 + +// 687 +#define SA1_ANIM_EGGX_BODY_WIDTH 48 +#define SA1_ANIM_EGGX_BODY_HEIGHT 56 + +// 690 +#define SA1_ANIM_EGGX_BALL_WIDTH 16 +#define SA1_ANIM_EGGX_BALL_HEIGHT 16 + +// 691 +#define SA1_ANIM_EGGX_EGGMAN_WIDTH 32 +#define SA1_ANIM_EGGX_EGGMAN_HEIGHT 24 + +// 693 +#define SA1_ANIM_EGGMOBILE_WIDTH 48 +#define SA1_ANIM_EGGMOBILE_HEIGHT 40 + +// 694 +#define SA1_ANIM_EGGMAN_WIDTH 32 +#define SA1_ANIM_EGGMAN_HEIGHT 24 + +// 698 +#define SA1_ANIM_CHAO_SHOCKED_WIDTH 32 +#define SA1_ANIM_CHAO_SHOCKED_HEIGHT 32 + +// 699 +#define SA1_ANIM_CHAO_HOVER_SIDE_WIDTH 32 +#define SA1_ANIM_CHAO_HOVER_SIDE_HEIGHT 32 + +// 700 +#define SA1_ANIM_CHAO_FACE_FORWARD_WIDTH 32 +#define SA1_ANIM_CHAO_FACE_FORWARD_HEIGHT 32 + +// 701 +#define SA1_ANIM_CHAO_FACE_DIAGONAL_L_WIDTH 32 +#define SA1_ANIM_CHAO_FACE_DIAGONAL_L_HEIGHT 32 + +// 702 +#define SA1_ANIM_CHAO_FACE_DIAGONAL_R_WIDTH 32 +#define SA1_ANIM_CHAO_FACE_DIAGONAL_R_HEIGHT 32 + +// 703 +#define SA1_ANIM_CHAO_TURN_HEIGHT 32 +#define SA1_ANIM_CHAO_TURN_WIDTH 32 + +// 704 +#define SA1_ANIM_CHAO_SITTING_WIDTH 32 +#define SA1_ANIM_CHAO_SITTING_HEIGHT 32 + +// 705 +#define SA1_ANIM_ITEMBOX_WIDTH 32 +#define SA1_ANIM_ITEMBOX_HEIGHT 32 + +// 706 +#define SA1_ANIM_ITEMBOX_TYPE_WIDTH 16 +#define SA1_ANIM_ITEMBOX_TYPE_HEIGHT 16 + +// 709 +#define SA1_ANIM_SCORE_WIDTH 16 +#define SA1_ANIM_SCORE_HEIGHT 8 + +// 715 +#define SA1_ANIM_GAME_OVER_WIDTH 64 +#define SA1_ANIM_GAME_OVER_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR0_WIDTH 64 // GAME +#define SA1_ANIM_GAME_OVER_VAR0_HEIGHT 64 + +#define SA1_ANIM_GAME_OVER_VAR1_WIDTH 64 // OVER +#define SA1_ANIM_GAME_OVER_VAR1_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR2_WIDTH 64 // CONTI +#define SA1_ANIM_GAME_OVER_VAR2_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR3_WIDTH 64 // NUE? +#define SA1_ANIM_GAME_OVER_VAR3_HEIGHT 64 +#define SA1_ANIM_GAME_OVER_VAR4_WIDTH 56 // TIME +#define SA1_ANIM_GAME_OVER_VAR4_HEIGHT 16 + +// 718 +#define SA1_ANIM_PAUSE_WIDTH 80 +#define SA1_ANIM_PAUSE_HEIGHT 16 + +// 719 +#define SA1_ANIM_WARNING_WIDTH 32 +#define SA1_ANIM_WARNING_HEIGHT 32 +#define SA1_ANIM_WARNING_VAR0_WIDTH 32 +#define SA1_ANIM_WARNING_VAR0_HEIGHT 32 +#define SA1_ANIM_WARNING_VAR1_WIDTH 32 +#define SA1_ANIM_WARNING_VAR1_HEIGHT 32 +#define SA1_ANIM_WARNING_VAR2_WIDTH 32 +#define SA1_ANIM_WARNING_VAR2_HEIGHT 32 + +// 720 +#define SA1_ANIM_PAUSE_BACKGROUND_WIDTH 96 +#define SA1_ANIM_PAUSE_BACKGROUND_HEIGHT 32 + +// 721 +#define SA1_ANIM_DEMO_PLAY_WIDTH 24 +#define SA1_ANIM_DEMO_PLAY_HEIGHT 8 + +// 749 +#define SA1_ANIM_GRIND_EFFECT_WIDTH 32 +#define SA1_ANIM_GRIND_EFFECT_HEIGHT 32 + +// 750 +#define SA1_ANIM_SHIELD_NORMAL_WIDTH 48 +#define SA1_ANIM_SHIELD_NORMAL_HEIGHT 48 + +// 751 +#define SA1_ANIM_SHIELD_MAGNETIC_WIDTH 48 +#define SA1_ANIM_SHIELD_MAGNETIC_HEIGHT 48 + +// 752 +#define SA1_ANIM_INVINCIBILITY_WIDTH 48 +#define SA1_ANIM_INVINCIBILITY_HEIGHT 48 +#define SA1_ANIM_INVINCIBILITY_VAR0_WIDTH 48 +#define SA1_ANIM_INVINCIBILITY_VAR0_HEIGHT 48 +#define SA1_ANIM_INVINCIBILITY_VAR1_WIDTH 24 +#define SA1_ANIM_INVINCIBILITY_VAR1_HEIGHT 24 + +// 775 +#define SA1_ANIM_SUPER_SONIC_SPARKLE_WIDTH 16 +#define SA1_ANIM_SUPER_SONIC_SPARKLE_HEIGHT 16 + +// 778 +#define SA1_ANIM_TAILS_TAIL_SWIPE_WIDTH 40 +#define SA1_ANIM_TAILS_TAIL_SWIPE_HEIGHT 24 + +// 778 +#define SA1_ANIM_PRESS_START_MSG_JP_WIDTH 184 +#define SA1_ANIM_PRESS_START_MSG_JP_HEIGHT 16 + +// 779 +#define SA1_ANIM_PRESS_START_MSG_EN_WIDTH 32 +#define SA1_ANIM_PRESS_START_MSG_EN_HEIGHT 32 + +// 780 +#define SA1_ANIM_TITLE_COPYRIGHT_WIDTH 24 +#define SA1_ANIM_TITLE_COPYRIGHT_HEIGHT 240 + +// 781 +#define SA1_ANIM_DROWN_COUNTDOWN_WIDTH 16 +#define SA1_ANIM_DROWN_COUNTDOWN_HEIGHT 16 + +// 782 +#define SA1_ANIM_KNUCKLES_FLOAT_SPLASH_WIDTH 32 +#define SA1_ANIM_KNUCKLES_FLOAT_SPLASH_HEIGHT 16 + +// 794 +#define SA1_ANIM_CONFUSION_WIDTH 32 +#define SA1_ANIM_CONFUSION_HEIGHT 16 + +// 809 +#define SA1_ANIM_PAUSE_BACKGROUND_TA_WIDTH 128 +#define SA1_ANIM_PAUSE_BACKGROUND_TA_HEIGHT 48 + +// 810 +#define SA1_ANIM_PAUSE_TA_WIDTH 128 +#define SA1_ANIM_PAUSE_TA_HEIGHT 32 +#define SA1_ANIM_PAUSE_TA_VAR0_WIDTH 80 +#define SA1_ANIM_PAUSE_TA_VAR0_HEIGHT 32 +#define SA1_ANIM_PAUSE_TA_VAR1_WIDTH 128 +#define SA1_ANIM_PAUSE_TA_VAR1_HEIGHT 32 + +// 857 +#define SA1_ANIM_MENU_CURSOR_WIDTH 16 +#define SA1_ANIM_MENU_CURSOR_HEIGHT 16 + +// 879 +#define SA1_ANIM_ONLY_CHAO_MSGBOX_WIDTH 208 +#define SA1_ANIM_ONLY_CHAO_MSGBOX_HEIGHT 40 + +// 906 +#define SA1_ANIM_CRUMBLE_PLATFORM_WIDTH 64 +#define SA1_ANIM_CRUMBLE_PLATFORM_HEIGHT 32 + +#elif (GAME == GAME_SA2) +#elif (GAME == GAME_SA3) +// 858 +#define ANIM_CHAOMAP_EMERALD_WIDTH 24 +#define ANIM_CHAOMAP_EMERALD_HEIGHT 16 + +// 840 +#define ANIM_ANIMAL_WIDTH 16 +#define ANIM_ANIMAL_HEIGHT 16 + +// 866 +#define ANIM_SPRING_WIDTH 32 +#define ANIM_SPRING_HEIGHT 40 + +// 866 +#define ANIM_DASH_RING_WIDTH 48 +#define ANIM_DASH_RING_HEIGHT 48 +#define ANIM_DASH_RING_VAR0_WIDTH 16 +#define ANIM_DASH_RING_VAR0_HEIGHT 48 +#define ANIM_DASH_RING_VAR1_WIDTH 8 +#define ANIM_DASH_RING_VAR1_HEIGHT 48 +#define ANIM_DASH_RING_VAR2_WIDTH 48 +#define ANIM_DASH_RING_VAR2_HEIGHT 16 +#define ANIM_DASH_RING_VAR3_WIDTH 48 +#define ANIM_DASH_RING_VAR3_HEIGHT 8 +#define ANIM_DASH_RING_VAR4_WIDTH 48 +#define ANIM_DASH_RING_VAR4_HEIGHT 48 +#define ANIM_DASH_RING_VAR5_WIDTH 40 +#define ANIM_DASH_RING_VAR5_HEIGHT 40 + +// 869 +#define ANIM_SPIKES_WIDTH 32 +#define ANIM_SPIKES_HEIGHT 32 + +// 870 +#define ANIM_RAMP_WIDTH 40 +#define ANIM_RAMP_HEIGHT 32 +#define ANIM_RAMP_VAR0_WIDTH 40 +#define ANIM_RAMP_VAR0_HEIGHT 32 +#define ANIM_RAMP_VAR1_WIDTH 40 +#define ANIM_RAMP_VAR1_HEIGHT 24 + +// 872 +#define ANIM_ZONE_WARP_WIDTH 48 +#define ANIM_ZONE_WARP_HEIGHT 32 + +// 873 +#define ANIM_BOUNCY_BAR_WIDTH 32 +#define ANIM_BOUNCY_BAR_HEIGHT 24 + +// 874 +#define ANIM_ROTATING_HANDLE_WIDTH 24 +#define ANIM_ROTATING_HANDLE_HEIGHT 24 + +// 875 +#define ANIM_CHECKPOINT_WIDTH 24 +#define ANIM_CHECKPOINT_HEIGHT 48 +#define ANIM_CHECKPOINT_VAR0_WIDTH 16 +#define ANIM_CHECKPOINT_VAR0_HEIGHT 48 +#define ANIM_CHECKPOINT_VAR1_WIDTH 24 +#define ANIM_CHECKPOINT_VAR1_HEIGHT 48 + +// 876 +#define ANIM_LIFT_WIDTH 8 +#define ANIM_LIFT_HEIGHT 24 +#define ANIM_LIFT_VAR0_WIDTH 8 +#define ANIM_LIFT_VAR0_HEIGHT 24 +#define ANIM_LIFT_VAR1_WIDTH 8 +#define ANIM_LIFT_VAR1_HEIGHT 8 +#define ANIM_LIFT_VAR2_WIDTH 24 +#define ANIM_LIFT_VAR2_HEIGHT 16 + +// 877 +#define ANIM_PLATFORM_CRUMBLING_1_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_1_HEIGHT 32 + +// 878 +#define ANIM_TRAMPOLINE_WIDTH 48 +#define ANIM_TRAMPOLINE_HEIGHT 32 + +// 878 +#define ANIM_BUTTON_BLUE_WIDTH 24 +#define ANIM_BUTTON_BLUE_HEIGHT 24 + +// 880 +#define ANIM_BUTTON_SPRING_1_VAR0_WIDTH 32 +#define ANIM_BUTTON_SPRING_1_VAR0_HEIGHT 40 +#define ANIM_BUTTON_SPRING_1_VAR5_WIDTH 40 +#define ANIM_BUTTON_SPRING_1_VAR5_HEIGHT 24 +#define ANIM_BUTTON_SPRING_1_VAR10_WIDTH 32 +#define ANIM_BUTTON_SPRING_1_VAR10_HEIGHT 32 +#define ANIM_BUTTON_SPRING_1_VAR15_WIDTH 24 +#define ANIM_BUTTON_SPRING_1_VAR15_HEIGHT 24 + +// 882 +#define ANIM_DECO_ROCK_WIDTH 48 +#define ANIM_DECO_ROCK_HEIGHT 32 + +// 883 +#define ANIM_FLAT_SPRING_WIDTH 32 +#define ANIM_FLAT_SPRING_HEIGHT 32 + +// 884 +#define ANIM_PLATFORM_RAISING_WHEEL_WIDTH 32 +#define ANIM_PLATFORM_RAISING_WHEEL_HEIGHT 24 +#define ANIM_PLATFORM_RAISING_WHEEL_PLATFORM_WIDTH 24 +#define ANIM_PLATFORM_RAISING_WHEEL_PLATFORM_HEIGHT 24 + +// 886 +#define ANIM_ACCORDION_SPRING_2_WIDTH 32 +#define ANIM_ACCORDION_SPRING_2_HEIGHT 24 + +// 889 +#define ANIM_PLATFORM_2_WIDTH 48 +#define ANIM_PLATFORM_2_HEIGHT 24 + +// 886 +#define ANIM_PLATFORM_CRUMBLING_2_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_2_HEIGHT 24 + +// 898 +#define ANIM_PLATFORM_ON_A_PATH_3_WIDTH 56 +#define ANIM_PLATFORM_ON_A_PATH_3_HEIGHT 24 + +// 891 +#define ANIM_BUNGEE_CORD_WIDTH 8 +#define ANIM_BUNGEE_CORD_HEIGHT 8 +#define ANIM_BUNGEE_CORD_VAR0_WIDTH 8 +#define ANIM_BUNGEE_CORD_VAR0_HEIGHT 8 + +// 892 +#define ANIM_SUNSET_BRIDGE_WIDTH 24 +#define ANIM_SUNSET_BRIDGE_HEIGHT 32 + +// 893 +#define ANIM_PLATFORM_2_2_WIDTH 48 +#define ANIM_PLATFORM_2_2_HEIGHT 16 +#define ANIM_PLATFORM_2_2_VAR0_WIDTH 48 +#define ANIM_PLATFORM_2_2_VAR0_HEIGHT 16 + +// 894 +#define ANIM_WAGGLE_COIL_WIDTH 48 +#define ANIM_WAGGLE_COIL_HEIGHT 56 + +// 900 +#define ANIM_PLATFORM_3_0_WIDTH (48 / 2) +#define ANIM_PLATFORM_3_0_HEIGHT 24 + +// 901 +#define ANIM_SUCTION_3_VERTICAL_WIDTH 24 +#define ANIM_SUCTION_3_VERTICAL_HEIGHT 56 + +// 902 +#define ANIM_SUCTION_3_HORIZONTAL_WIDTH 56 +#define ANIM_SUCTION_3_HORIZONTAL_HEIGHT 24 + +// 903 +#define ANIM_DEATH_CRUSHER_SPIKED_WIDTH 24 +#define ANIM_DEATH_CRUSHER_SPIKED_HEIGHT 80 + +// 904 +#define ANIM_DEATH_CRUSHER_NO_LED_WIDTH 24 +#define ANIM_DEATH_CRUSHER_NO_LED_HEIGHT 48 + +// 905 +#define ANIM_DEATH_CRUSHER_WIDTH 24 +#define ANIM_DEATH_CRUSHER_HEIGHT 48 + +// 907 +#define ANIM_PLATFORM_CRUMBLING_3_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_3_HEIGHT 48 + +// 908 - x-mirrored +#define ANIM_PROPELLER_BUTTON_PLATFORM_WIDTH (64 / 2) +#define ANIM_PROPELLER_BUTTON_PLATFORM_HEIGHT 48 + +// 910 +#define ANIM_WATER_CANNON_WIDTH 32 +#define ANIM_WATER_CANNON_HEIGHT 48 + +// 911 +#define ANIM_FACTORY_RING_WIDTH 48 +#define ANIM_FACTORY_RING_HEIGHT 48 + +// 912 +#define ANIM_SPECIAL_SPRING_WIDTH 32 +#define ANIM_SPECIAL_SPRING_HEIGHT 48 + +// 913 +#define ANIM_BONUS_UFO_WIDTH 24 +#define ANIM_BONUS_UFO_HEIGHT 48 + +// 914 +#define ANIM_BONUS_UFO_RAY_WIDTH 24 +#define ANIM_BONUS_UFO_RAY_HEIGHT 56 + +// 915 +#define ANIM_ROCKET_WIDTH 48 +#define ANIM_ROCKET_HEIGHT 48 +#define ANIM_ROCKET_VAR0_WIDTH 16 +#define ANIM_ROCKET_VAR0_HEIGHT 8 +#define ANIM_ROCKET_VAR1_WIDTH 16 +#define ANIM_ROCKET_VAR1_HEIGHT 8 +#define ANIM_ROCKET_VAR2_WIDTH 8 +#define ANIM_ROCKET_VAR2_HEIGHT 8 +#define ANIM_ROCKET_VAR3_WIDTH 8 +#define ANIM_ROCKET_VAR3_HEIGHT 8 +#define ANIM_ROCKET_VAR4_WIDTH 8 +#define ANIM_ROCKET_VAR4_HEIGHT 8 +#define ANIM_ROCKET_VAR5_WIDTH 8 +#define ANIM_ROCKET_VAR5_HEIGHT 8 +#define ANIM_ROCKET_VAR6_WIDTH 8 +#define ANIM_ROCKET_VAR6_HEIGHT 8 + +// 916 +#define ANIM_FERRIS_WHEEL_HEIGHT 8 +#define ANIM_FERRIS_WHEEL_WIDTH 8 +#define ANIM_FERRIS_WHEEL_VAR0_HEIGHT 8 +#define ANIM_FERRIS_WHEEL_VAR0_WIDTH 8 +#define ANIM_FERRIS_WHEEL_VAR1_HEIGHT 8 +#define ANIM_FERRIS_WHEEL_VAR1_WIDTH 8 + +// 917 +#define ANIM_TOY_BALLOON_WIDTH 32 +#define ANIM_TOY_BALLOON_HEIGHT 48 + +// 918 (x-mirrored) +#define ANIM_SPRING_IN_A_BOX_WIDTH (64 / 2) +#define ANIM_SPRING_IN_A_BOX_HEIGHT 64 + +// 919 +#define ANIM_PANDA_CART_WIDTH 48 +#define ANIM_PANDA_CART_HEIGHT 40 + +// 920 +#define ANIM_PENDULUM_WIDTH 40 +#define ANIM_PENDULUM_HEIGHT 40 +#define ANIM_PENDULUM_VAR0_WIDTH 40 +#define ANIM_PENDULUM_VAR0_HEIGHT 40 +#define ANIM_PENDULUM_VAR1_WIDTH 8 +#define ANIM_PENDULUM_VAR1_HEIGHT 8 + +// 921 (x-mirrored) +#define ANIM_PLATFORM_SPIKED_WIDTH 32 +#define ANIM_PLATFORM_SPIKED_HEIGHT 48 + +// 922 +#define ANIM_ICE_SPIKE_WIDTH 32 +#define ANIM_ICE_SPIKE_HEIGHT 32 + +// 923 +#define ANIM_ICE_LAUNCHER_WIDTH 48 +#define ANIM_ICE_LAUNCHER_HEIGHT 64 + +// 924 +#define ANIM_WINDUP_BLOCK_WIDTH 24 +#define ANIM_WINDUP_BLOCK_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR0_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR0_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR1_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR1_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR2_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR2_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_VAR3_WIDTH 24 +#define ANIM_WINDUP_BLOCK_VAR3_HEIGHT 24 + +// 925 +#define ANIM_MINECART_WIDTH 64 +#define ANIM_MINECART_HEIGHT 64 +#define ANIM_MINECART_VAR0_WIDTH 64 +#define ANIM_MINECART_VAR0_HEIGHT 64 +#define ANIM_MINECART_VAR1_WIDTH 64 +#define ANIM_MINECART_VAR1_HEIGHT 64 +#define ANIM_MINECART_VAR2_WIDTH 16 +#define ANIM_MINECART_VAR2_HEIGHT 16 +#define ANIM_MINECART_VAR3_WIDTH 8 +#define ANIM_MINECART_VAR3_HEIGHT 8 +#define ANIM_MINECART_VAR4_WIDTH 8 +#define ANIM_MINECART_VAR4_HEIGHT 8 + +// 926 +#define ANIM_AIR_BUBBLES_WIDTH 24 +#define ANIM_AIR_BUBBLES_HEIGHT 24 +#define ANIM_AIR_BUBBLES_VAR0_WIDTH 24 +#define ANIM_AIR_BUBBLES_VAR0_HEIGHT 24 +#define ANIM_AIR_BUBBLES_VAR1_WIDTH 8 +#define ANIM_AIR_BUBBLES_VAR1_HEIGHT 8 +#define ANIM_AIR_BUBBLES_VAR2_WIDTH 24 +#define ANIM_AIR_BUBBLES_VAR2_HEIGHT 24 + +// 927 +#define ANIM_ATTACHED_PLATFORM_WIDTH 48 +#define ANIM_ATTACHED_PLATFORM_HEIGHT 16 +#define ANIM_ATTACHED_PLATFORM_VAR0_WIDTH 48 +#define ANIM_ATTACHED_PLATFORM_VAR0_HEIGHT 16 +#define ANIM_ATTACHED_PLATFORM_VAR1_WIDTH 16 +#define ANIM_ATTACHED_PLATFORM_VAR1_HEIGHT 16 +#define ANIM_ATTACHED_PLATFORM_VAR2_WIDTH 8 +#define ANIM_ATTACHED_PLATFORM_VAR2_HEIGHT 8 + +// 929 +#define ANIM_BOULDER_WIDTH 40 +#define ANIM_BOULDER_HEIGHT 40 +#define ANIM_BOULDER_VAR0_WIDTH 40 +#define ANIM_BOULDER_VAR0_HEIGHT 40 +#define ANIM_BOULDER_VAR1_WIDTH 16 +#define ANIM_BOULDER_VAR1_HEIGHT 16 +#define ANIM_BOULDER_VAR2_WIDTH 8 +#define ANIM_BOULDER_VAR2_HEIGHT 8 + +// 931 +#define ANIM_UFO_PLATFORM_WIDTH 48 +#define ANIM_UFO_PLATFORM_HEIGHT 24 + +// 930 +#define ANIM_CLOSING_WALL_WIDTH 72 +#define ANIM_CLOSING_WALL_HEIGHT 24 + +// 933 +#define ANIM_FALL_PLATFORM_CA_WIDTH 48 +#define ANIM_FALL_PLATFORM_CA_HEIGHT 16 + +// 934 +#define ANIM_WATER_CANNON_SPLASH_WIDTH 48 +#define ANIM_WATER_CANNON_SPLASH_HEIGHT 40 + +// 935 +#define ANIM_PLATFORM_CRUMBLING_7_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_7_HEIGHT 40 + +// 936 +#define ANIM_SPRING_6_WIDTH 24 +#define ANIM_SPRING_6_HEIGHT 40 + +// 938 +#define ANIM_PLATFORM_CRUMBLING_6_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_6_HEIGHT 24 + +// 939 +#define ANIM_SPRING_PLATFORM_6_WIDTH 24 +#define ANIM_SPRING_PLATFORM_6_HEIGHT 64 + +// 940 +#define ANIM_MAZE_WIDTH 48 +#define ANIM_MAZE_HEIGHT 64 +#define ANIM_MAZE_VAR0_WIDTH 48 +#define ANIM_MAZE_VAR0_HEIGHT 64 +#define ANIM_MAZE_VAR1_WIDTH 48 +#define ANIM_MAZE_VAR1_HEIGHT 64 +#define ANIM_MAZE_VAR2_WIDTH 48 +#define ANIM_MAZE_VAR2_HEIGHT 64 +#define ANIM_MAZE_VAR3_WIDTH 64 +#define ANIM_MAZE_VAR3_HEIGHT 48 +#define ANIM_MAZE_VAR4_WIDTH 64 +#define ANIM_MAZE_VAR4_HEIGHT 48 +#define ANIM_MAZE_VAR5_WIDTH 64 +#define ANIM_MAZE_VAR5_HEIGHT 48 +#define ANIM_MAZE_VAR6_WIDTH 24 +#define ANIM_MAZE_VAR6_HEIGHT 24 +#define ANIM_MAZE_VAR7_WIDTH 48 +#define ANIM_MAZE_VAR7_HEIGHT 56 +#define ANIM_MAZE_VAR8_WIDTH 56 +#define ANIM_MAZE_VAR8_HEIGHT 48 + +// 942 +#define ANIM_PLATFORM_ON_A_PATH_6_WIDTH 56 +#define ANIM_PLATFORM_ON_A_PATH_6_HEIGHT 24 + +// 945 +#define ANIM_MUD_FX_WIDTH 48 +#define ANIM_MUD_FX_HEIGHT 24 +#define ANIM_MUD_FX_CHAOS_ANGEL_WIDTH 48 +#define ANIM_MUD_FX_CHAOS_ANGEL_HEIGHT 24 + +// 948 +#define ANIM_GOAL_RING_WIDTH 24 +#define ANIM_GOAL_RING_HEIGHT 24 +#define ANIM_GOAL_RING_VAR8_WIDTH 24 // Sparkle effect +#define ANIM_GOAL_RING_VAR8_HEIGHT 16 + +// 949 +#define ANIM_SUCTION_VERTICAL_WIDTH 24 +#define ANIM_SUCTION_VERTICAL_HEIGHT 56 + +// 950 +#define ANIM_SUCTION_HORIZONTAL_WIDTH 56 +#define ANIM_SUCTION_HORIZONTAL_HEIGHT 24 + +// 951 +#define ANIM_PLATFORM_CRUMBLING_4_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_4_HEIGHT 24 + +// 952 +#define ANIM_PLATFORM_CRUMBLING_5_WIDTH 48 +#define ANIM_PLATFORM_CRUMBLING_5_HEIGHT 32 + +// 955 +#define ANIM_SUCTION_STREAM_HORIZONTAL_WIDTH 24 +#define ANIM_SUCTION_STREAM_HORIZONTAL_HEIGHT 56 + +// 956 +#define ANIM_SUCTION_STREAM_VERTICAL_WIDTH 56 +#define ANIM_SUCTION_STREAM_VERTICAL_HEIGHT 24 + +// 969 +#define ANIM_WINDUP_BLOCK_7_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR0_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_VAR0_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR1_WIDTH 8 +#define ANIM_WINDUP_BLOCK_7_VAR1_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR2_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_VAR2_HEIGHT 24 +#define ANIM_WINDUP_BLOCK_7_VAR3_WIDTH 24 +#define ANIM_WINDUP_BLOCK_7_VAR3_HEIGHT 8 + +// 976 +#define ANIM_TOY_BALLOON_POPPED_WIDTH 32 +#define ANIM_TOY_BALLOON_POPPED_HEIGHT 48 + +// 976 +#define ANIM_OMOCHAO0_WIDTH 24 +#define ANIM_OMOCHAO0_HEIGHT 24 + +// 977 +#define ANIM_OMOCHAO1_WIDTH 24 +#define ANIM_OMOCHAO1_HEIGHT 24 + +// 978 +#define ANIM_OMOCHAO2_WIDTH 24 +#define ANIM_OMOCHAO2_HEIGHT 24 + +// 979 +#define ANIM_OMOCHAO3_WIDTH 24 +#define ANIM_OMOCHAO3_HEIGHT 24 + +// 980 +#define ANIM_OMOCHAO4_WIDTH 24 +#define ANIM_OMOCHAO4_HEIGHT 24 + +// 981 +#define ANIM_OMOCHAO5_WIDTH 24 +#define ANIM_OMOCHAO5_HEIGHT 24 + +// 983 +#define ANIM_ACT_RING_WIDTH 32 +#define ANIM_ACT_RING_HEIGHT 32 +#define ANIM_ACT_RING_VAR0_WIDTH 32 +#define ANIM_ACT_RING_VAR0_HEIGHT 32 +#define ANIM_ACT_RING_VAR1_WIDTH 32 +#define ANIM_ACT_RING_VAR1_HEIGHT 32 +#define ANIM_ACT_RING_VAR2_WIDTH 32 +#define ANIM_ACT_RING_VAR2_HEIGHT 32 +// "Crown" signalling completion +#define ANIM_ACT_RING_VAR3_WIDTH 24 +#define ANIM_ACT_RING_VAR3_HEIGHT 16 + +// 984 +#define ANIM_SPRING_PLATFORM_4_WIDTH 24 +#define ANIM_SPRING_PLATFORM_4_HEIGHT 64 + +// 986 +#define ANIM_SLOW_LIFT_7_WIDTH (112 / 2) +#define ANIM_SLOW_LIFT_7_HEIGHT 24 + +// 987 +#define ANIM_SPRING_4_WIDTH 32 +#define ANIM_SPRING_4_HEIGHT 40 + +// 995 +#define ANIM_BUTTON_SPRING_6_VAR0_WIDTH 32 +#define ANIM_BUTTON_SPRING_6_VAR0_HEIGHT 40 +#define ANIM_BUTTON_SPRING_6_VAR5_WIDTH 40 +#define ANIM_BUTTON_SPRING_6_VAR5_HEIGHT 24 +#define ANIM_BUTTON_SPRING_6_VAR10_WIDTH 32 +#define ANIM_BUTTON_SPRING_6_VAR10_HEIGHT 32 + +// 997 +#define ANIM_PLATFORM_BONUS_WIDTH 48 +#define ANIM_PLATFORM_BONUS_HEIGHT 48 +#define ANIM_PLATFORM_BONUS_VAR0_WIDTH 48 +#define ANIM_PLATFORM_BONUS_VAR0_HEIGHT 48 +#define ANIM_PLATFORM_BONUS_VAR1_WIDTH 48 +#define ANIM_PLATFORM_BONUS_VAR1_HEIGHT 24 + +// 1004 +#define ANIM_CHAO_SITTING_WIDTH 32 +#define ANIM_CHAO_SITTING_HEIGHT 32 + +// 1042 +#define ANIM_UI_PROMPT_BUTTON_WIDTH 16 +#define ANIM_UI_PROMPT_BUTTON_HEIGHT 16 + +// 1059 +#define ANIM_BONUS_UI_TIMER_DIGITS_WIDTH 8 +#define ANIM_BONUS_UI_TIMER_DIGITS_HEIGHT 16 + +// 1063 +#define ANIM_BONUS_UI_FLOWER_WIDTH 16 +#define ANIM_BONUS_UI_FLOWER_HEIGHT 24 + +// 1064 +#define ANIM_BONUS_UI_BAR_WIDTH 16 +#define ANIM_BONUS_UI_BAR_HEIGHT 16 + +// 1065 +#define ANIM_BONUS_UI_X_WIDTH 48 +#define ANIM_BONUS_UI_X_HEIGHT 32 +#define ANIM_BONUS_UI_X_VAR0_WIDTH 16 +#define ANIM_BONUS_UI_X_VAR0_HEIGHT 16 +#define ANIM_BONUS_UI_X_VAR1_WIDTH 48 +#define ANIM_BONUS_UI_X_VAR1_HEIGHT 32 + +// 1154 +#define ANIM_BONUS_CAPSULE_WIDTH 56 +#define ANIM_BONUS_CAPSULE_HEIGHT 72 + +// 1155 +#define ANIM_BONUS_CAPSULE_POINTS_WIDTH 24 +#define ANIM_BONUS_CAPSULE_POINTS_HEIGHT 24 + +// 1156 +#define ANIM_BONUS_CAPSULE_SWITCH_WIDTH 24 +#define ANIM_BONUS_CAPSULE_SWITCH_HEIGHT 16 + +// 1160 +#define ANIM_BONUS_UI_SCORE_WIDTH 32 +#define ANIM_BONUS_UI_SCORE_HEIGHT 16 + +// Enemies +// 1166 +#define ANIM_SPINNER_WIDTH 48 +#define ANIM_SPINNER_HEIGHT 32 + +// 1168 +#define ANIM_CONDOR_WIDTH 48 +#define ANIM_CONDOR_HEIGHT 40 + +// 1168 +#define ANIM_AKATENTO_WIDTH 32 +#define ANIM_AKATENTO_HEIGHT 24 + +// 1169 +#define ANIM_AOTENTO_WIDTH 32 +#define ANIM_AOTENTO_HEIGHT 32 + +// 1171 +#define ANIM_APE_WIDTH 40 +#define ANIM_APE_HEIGHT 32 +#define ANIM_APE_VAR2_WIDTH 16 +#define ANIM_APE_VAR2_HEIGHT 16 + +// 1172 +#define ANIM_APE_PROJ_WIDTH 16 +#define ANIM_APE_PROJ_HEIGHT 16 + +// 1173 +#define ANIM_FROG_WIDTH 32 +#define ANIM_FROG_HEIGHT 48 + +// 1174 +#define ANIM_MINIMOLE_WIDTH 48 +#define ANIM_MINIMOLE_HEIGHT 24 +#define ANIM_MINIMOLE_VAR0_WIDTH 48 +#define ANIM_MINIMOLE_VAR0_HEIGHT 24 +#define ANIM_MINIMOLE_VAR1_WIDTH 32 +#define ANIM_MINIMOLE_VAR1_HEIGHT 8 + +// 1175 +#define ANIM_BUZZER_WIDTH 48 +#define ANIM_BUZZER_HEIGHT 32 + +// 1176 +#define ANIM_BUZZER_PROJ_WIDTH 16 +#define ANIM_BUZZER_PROJ_HEIGHT 16 + +// 1178 +#define ANIM_TAKKON_WIDTH 32 +#define ANIM_TAKKON_HEIGHT 48 + +// 1177 +#define ANIM_JOUSUN_WIDTH 40 +#define ANIM_JOUSUN_HEIGHT 32 + +// 1180 +#define ANIM_TAKKON_PROJ_WIDTH 24 +#define ANIM_TAKKON_PROJ_HEIGHT 24 +#define ANIM_TAKKON_PROJ_VAR0_WIDTH 8 +#define ANIM_TAKKON_PROJ_VAR0_HEIGHT 24 +#define ANIM_TAKKON_PROJ_VAR4_WIDTH 24 +#define ANIM_TAKKON_PROJ_VAR4_HEIGHT 24 + +// 1182 +#define ANIM_GAOGAO_WIDTH 32 +#define ANIM_GAOGAO_HEIGHT 32 + +// 1187 +#define ANIM_GINPE_WIDTH 24 +#define ANIM_GINPE_HEIGHT 32 + +// 1187 +#define ANIM_GINPE_PROJ_WIDTH 8 +#define ANIM_GINPE_PROJ_HEIGHT 8 + +// 1191 +#define ANIM_YADOKK_WIDTH 32 +#define ANIM_YADOKK_HEIGHT 32 +#define ANIM_YADOKK_VAR2_WIDTH 32 +#define ANIM_YADOKK_VAR2_HEIGHT 32 + +// 1315 +#define ANIM_ITEM_BOX_TYPE_WIDTH 16 +#define ANIM_ITEM_BOX_TYPE_HEIGHT 16 + +// 1316 +#define ANIM_ITEM_BOX_WIDTH 32 +#define ANIM_ITEM_BOX_HEIGHT 32 + +// 1338 +#define ANIM_ITEM_BOX_CLOUD_EFFECT_WIDTH 32 +#define ANIM_ITEM_BOX_CLOUD_EFFECT_HEIGHT 32 + +// 1139 +#define ANIM_CONDOR_PROJ_EXPLOSION_WIDTH 32 +#define ANIM_CONDOR_PROJ_EXPLOSION_HEIGHT 32 + +// 1344 +#define ANIM_ICE_SHIVER_WIDTH 16 +#define ANIM_ICE_SHIVER_HEIGHT 16 + +// 1348 +#define ANIM_SPECIAL_KEY_WIDTH 32 +#define ANIM_SPECIAL_KEY_HEIGHT 32 + +// 1423 +#define ANIM_LIFE_ICONS_WIDTH 16 +#define ANIM_LIFE_ICONS_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR0_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR0_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR1_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR1_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR2_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR2_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR3_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR3_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR4_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR4_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR5_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR5_HEIGHT 16 +#define ANIM_LIFE_ICONS_VAR6_WIDTH 16 +#define ANIM_LIFE_ICONS_VAR6_HEIGHT 16 +#endif + +#endif // GUARD_ANIM_SIZES_H diff --git a/sa1/include/constants/animations.h b/sa1/include/constants/animations.h new file mode 100644 index 0000000000..32cd724e32 --- /dev/null +++ b/sa1/include/constants/animations.h @@ -0,0 +1,493 @@ +#ifndef GUARD_ANIMATIONS_SA1_H +#define GUARD_ANIMATIONS_SA1_H + +/* Collection of animation indices for Sonic Advance 1. + * - By JaceCear + */ +#include "constants/anim_sizes.h" + +// "x_PROJ" means "projectile belonging to x" + +#define SA1_ANIM_SONIC_IDLE 0 +#define SA1_ANIM_TAILS_IDLE 99 +#define SA1_ANIM_KNUCKLES_IDLE 199 +#define SA1_ANIM_AMY_IDLE 298 + +#define SA1_ANIM_TAILS_SPIN_ATTACK 107 + +#define SA1_CHAR_ANIM_1 1 +#define SA1_CHAR_ANIM_WALK 4 +#define SA1_CHAR_ANIM_RUN 5 +#define SA1_CHAR_ANIM_SPIN_ATTACK 8 +#define SA1_CHAR_ANIM_20 20 +#define SA1_CHAR_ANIM_21 21 +#define SA1_CHAR_ANIM_22 22 +#define SA1_CHAR_ANIM_23 23 +#define SA1_CHAR_ANIM_24 24 +#define SA1_CHAR_ANIM_25 25 +#define SA1_CHAR_ANIM_26 26 +#define SA1_CHAR_ANIM_27 27 +#define SA1_CHAR_ANIM_28 28 +#define SA1_CHAR_ANIM_29 29 +#define SA1_CHAR_ANIM_MARBLE_TRACK 39 +#define SA1_CHAR_ANIM_GRINDING 44 +#define SA1_CHAR_ANIM_50 50 +#define SA1_CHAR_ANIM_BOOSTLESS_ATTACK 51 +#define SA1_CHAR_ANIM_ATTACK 52 +#define SA1_CHAR_ANIM_SA2_19 56 +#define SA1_CHAR_ANIM_56 56 +#define SA1_CHAR_ANIM_57 57 +#define SA1_CHAR_ANIM_58 58 +#define SA1_CHAR_ANIM_59 59 +#define SA1_CHAR_ANIM_60 60 +#define SA1_CHAR_ANIM_61 61 +#define SA1_CHAR_ANIM_62 62 +#define SA1_CHAR_ANIM_63 63 +#define SA1_CHAR_ANIM_64 64 +#define SA1_CHAR_ANIM_65 65 + +#define SA1_NUM_PLAYER_CHAR_ANIMATIONS (99) // TODO: Don't use constant here +#define SA1_ANIM_CHAR(character, anim) ((SA1_CHAR_ANIM_##anim) + CHARACTER_##character * SA1_NUM_PLAYER_CHAR_ANIMATIONS) + +#define SA1_ANIM_KNUCKLES_UPPERCUT 250 + +#define SA1_CHAR_ANIM_AMY_LEAP 374 // Spin Dash equiv. + +#define SA1_ANIM_SUPER_SONIC_TRANSFORM 398 +#define SA1_ANIM_SUPER_SONIC_MOVE 399 +#define SA1_ANIM_SUPER_SONIC_DASH 400 + +// Enemies +#define SA1_ANIM_KIKI 401 +#define SA1_ANIM_KIKI_PROJ_EXPLOSION 402 +#define SA1_ANIM_BUZZER 403 +#define SA1_ANIM_GAMIGAMI 404 +#define SA1_ANIM_RHINOTANK 405 +#define SA1_ANIM_KEROKERO 406 +// Defeating enemies / opening item boxes +#define SA1_ANIM_DUST_CLOUD 407 +#define SA1_ANIM_KIKI_PROJ 408 + +#define SA1_ANIM_BUZZER_PROJ 409 +#define SA1_ANIM_GAMIGAMI_PROJ 410 // TODO: shared? +#define SA1_ANIM_SENBON 411 +#define SA1_ANIM_TENTOU 412 +#define SA1_ANIM_FIREBALL 413 +#define SA1_ANIM_FIREBALL_PROJ 414 +#define SA1_ANIM_HANABII 415 +#define SA1_ANIM_HANABII_FIREWORK 416 +#define SA1_ANIM_SLOT 417 +#define SA1_ANIM_PIERROT 418 +#define SA1_ANIM_HANABII_PROJ 419 +#define SA1_ANIM_SLOT_PROJ 420 +#define SA1_ANIM_YUKIMARU_PROJ 421 +#define SA1_ANIM_YUKIMARU 422 +#define SA1_ANIM_YUKIMARU_SIDEWAYS 423 +#define SA1_ANIM_DRISAME 424 +#define SA1_ANIM_KURAA 425 +#define SA1_ANIM_PEN 426 +#define SA1_ANIM_PEN_PROJ_1 427 +#define SA1_ANIM_PEN_PROJ_2 428 +#define SA1_ANIM_PEN_PROJ_3 429 +#define SA1_ANIM_LEON 430 +#define SA1_ANIM_WAMU 431 +#define SA1_ANIM_MIRROR 432 +#define SA1_ANIM_OCT 433 +#define SA1_ANIM_MOLE 434 +#define SA1_ANIM_MIRROR_PROJ 435 +#define SA1_ANIM_OCT_PROJ 436 + +// Animals +#define SA1_ANIM_ANIMAL_SEAL 437 +#define SA1_ANIM_ANIMAL_GORILLA 438 +#define SA1_ANIM_ANIMAL_PEACOCK 439 +#define SA1_ANIM_ANIMAL_LION 440 +#define SA1_ANIM_ANIMAL_MOLE 441 +#define SA1_ANIM_ANIMAL_PARROT 442 +#define SA1_ANIM_ANIMAL_PENGUIN 443 +#define SA1_ANIM_ANIMAL_RABBIT 444 +#define SA1_ANIM_ANIMAL_SEA_OTTER 445 +#define SA1_ANIM_ANIMAL_DEER 446 +#define SA1_ANIM_ANIMAL_SKUNK 447 +#define SA1_ANIM_ANIMAL_ROBIN 448 +#define SA1_ANIM_ANIMAL_KANGAROO 449 +#define SA1_ANIM_ANIMAL_KOALA 450 +#define SA1_ANIM_ANIMAL_ELEPHANT 451 + +// Interactables +#define SA1_ANIM_CHECKPOINT 452 +#define SA1_ANIM_GOAL 453 +#define SA1_ANIM_SPIKES 454 +#define SA1_ANIM_SPRING 455 + +#define SA1_ANIM_FALLING_BOULDER 457 +#define SA1_ANIM_ROCK 458 +#define SA1_ANIM_ROCK_DEBRIS_S 459 +#define SA1_ANIM_ROCK_DEBRIS_L 460 +#define SA1_ANIM_TRAMPOLINE1 461 +#define SA1_ANIM_BOUNCE_BLOCK_1 462 +#define SA1_ANIM_PLATFORM_HORZ_1 463 +#define SA1_ANIM_WATER_SPLASH 464 + +#define SA1_ANIM_SHRUBBERY 467 +#define SA1_ANIM_BOUNCY_BAR 468 +#define SA1_ANIM_RED_FLAG_V 469 +#define SA1_ANIM_RED_FLAG_H 470 +#define SA1_ANIM_BOOSTER 471 +#define SA1_ANIM_BOOSTER_VERT 472 +#define SA1_ANIM_WATER_BRIDGE_SPLASH 473 +#define SA1_ANIM_WATER_SLIDE_SPLASH 474 +#define SA1_ANIM_BUMPER_RIGHTANG 475 +#define SA1_ANIM_BUMPER_TRI_H 476 +#define SA1_ANIM_BUMPER_TRI_V 477 +#define SA1_ANIM_FLIPPER 478 +#define SA1_ANIM_BALLOON_BLUE 479 +#define SA1_ANIM_BALLOON_RED 480 +#define SA1_ANIM_BALLOON_YELLOW 481 +#define SA1_ANIM_FIREWORKS 482 // Casino Paradise BG +#define SA1_ANIM_FIREWORKS_SMALL 483 +#define SA1_ANIM_BUMPER_BIG 484 +#define SA1_ANIM_BUMPER_ROUND 485 +#define SA1_ANIM_BOWL_3 486 +#define SA1_ANIM_CAROUSEL 487 +#define SA1_ANIM_MARBLE_TRACK_EXIT 488 +#define SA1_ANIM_SHIP_SWING_SEGMENT 489 +#define SA1_ANIM_SHIP_SWING_HOOK 490 +#define SA1_ANIM_SHIP_SWING 491 +#define SA1_ANIM_SEGA_SONIC_LETTERS 492 +#define SA1_ANIM_BARREL_OF_DOOM_MINI 493 +#define SA1_ANIM_PLATFORM_SQU_3 494 +#define SA1_ANIM_PLATFORM_HORZ_3 495 +#define SA1_ANIM_PANEL_GATE_SIDEWAYS 496 +#define SA1_ANIM_PANEL_GATE_UPDOWN 497 +#define SA1_ANIM_CRANE_CLAW_2 498 +#define SA1_ANIM_BOUNCE_BLOCK_2 499 +#define SA1_ANIM_CRANE_CLAW_2_2 500 +#define SA1_ANIM_STEAM_EXHAUST_LID 501 +#define SA1_ANIM_CRUMBLE_PLATFORM_2_3 502 +#define SA1_ANIM_ANCHOR_HANDLES 503 +#define SA1_ANIM_HOOK_RAIL_2 504 // Variants: 0 = Rail, 1 = Anchor +#define SA1_ANIM_TRAMPOLINE2 505 +#define SA1_ANIM_PLATFORM_HORZ_2 506 +#define SA1_ANIM_BOUNCE_BLOCK_2_1 507 +#define SA1_ANIM_CONVEYOR_BELT_2_WIDE 508 +#define SA1_ANIM_CONVEYOR_BELT_2_SLIM 509 +#define SA1_ANIM_IRON_BALL 510 +#define SA1_ANIM_TORCH6_1 511 +#define SA1_ANIM_TORCH6_2 512 +#define SA1_ANIM_CRUMBLE_PLATFORM_6_1 513 + +#define SA1_ANIM_PROPELLER 515 +#define SA1_ANIM_SPIKED_BARREL 516 +#define SA1_ANIM_PLATFORM_HORZ_6_1 517 +#define SA1_ANIM_PLATFORM_SQU_6_1 518 +#define SA1_ANIM_PLATFORM_LONG_6_1 519 + +#define SA1_ANIM_PLATFORM_SPIKED_3 521 +#define SA1_ANIM_BLUE_FLIPPER 522 +#define SA1_ANIM_PLATFORM_HORZ_4 523 +#define SA1_ANIM_PLATFORM_SQU_4 524 +#define SA1_ANIM_PLATFORM_HORZ_4_PURPLE 525 +#define SA1_ANIM_SPRING_PLATFORM_4 526 +#define SA1_ANIM_CRUMBLE_PLATFORM_4 527 +#define SA1_ANIM_PLATFORM_SQU_4_PURPLE 528 +#define SA1_ANIM_SKATING_STONE_4 529 +#define SA1_ANIM_FERRIS_WHEEL_HOOK 530 +#define SA1_ANIM_FERRIS_WHEEL_SEGMENT 531 +#define SA1_ANIM_AIR_BUBBLES 532 +#define SA1_ANIM_MINIBUBBLES 533 +#define SA1_ANIM_SECURITY_GATE 534 +#define SA1_ANIM_PLATFORM_HORZ_5 535 +#define SA1_ANIM_PLATFORM_LONG_V_5 536 +#define SA1_ANIM_PLATFORM_LONG_H_5 537 +#define SA1_ANIM_PLATFORM_SPIKED_5_UP 538 +#define SA1_ANIM_PLATFORM_SPIKED_5_DOWN 539 +#define SA1_ANIM_SPRING_PLATFORM_5 540 +#define SA1_ANIM_IRON_BALL_5 541 +#define SA1_ANIM_RUN_WHEEL 542 +#define SA1_ANIM_BOUNCE_BLOCK_5 543 +#define SA1_ANIM_PLATFORM_SQU_ARROW 544 +#define SA1_ANIM_LIFT 545 +#define SA1_ANIM_BOWL_5 546 +#define SA1_ANIM_SKATING_STONE 547 +#define SA1_ANIM_SKATING_STONE_DEBRIS_L 548 +#define SA1_ANIM_SKATING_STONE_DEBRIS_S 549 + +#define SA1_ANIM_CRUMBLE_PLATFORM_5 551 +#define SA1_ANIM_WATER_SPLASH_5 552 +#define SA1_ANIM_SKATING_STONE_DEBRIS_4_L 553 +#define SA1_ANIM_SKATING_STONE_DEBRIS_4_S 554 +#define SA1_ANIM_ICE_BLOCK 555 +#define SA1_ANIM_ICE_BLOCK_SHARDS_L 556 +#define SA1_ANIM_ICE_BLOCK_SHARDS_S 557 +#define SA1_ANIM_TORCH5 558 +#define SA1_ANIM_BREAKABLE_WALL_1 559 +#define SA1_ANIM_PLATFORM_LAVA_SPURT 560 +#define SA1_ANIM_PLATFORM_LAVA 561 +#define SA1_ANIM_ICE_SLIDE_SPLASH 562 +#define SA1_ANIM_WATER_SURFACE 563 +#define SA1_ANIM_DEBRIS_A 564 +#define SA1_ANIM_DEBRIS_B 565 +#define SA1_ANIM_DEBRIS_C 566 +#define SA1_ANIM_STEAM_EXHAUST 567 // Version without lid (with lid: SA1_ANIM_STEAM_EXHAUST_LID) +#define SA1_ANIM_MUD_SLIDE_SPLASH 568 +#define SA1_ANIM_HOOK_RAIL_3 569 +#define SA1_ANIM_BOOSTER_STEEP_CLOCKWISE 570 +#define SA1_ANIM_BOOSTER_STEEP_COUNTER_CLOCKWISE 571 +#define SA1_ANIM_SPECIAL_SPRING 572 +#define SA1_ANIM_DRISAME_ICEBLOCK 573 +#define SA1_ANIM_FALLING_BRICK_XZONE 574 +#define SA1_ANIM_BOSS_CAPSULE_LARGE 575 +#define SA1_ANIM_BOSS_CAPSULE_SWITCH 576 +#define SA1_ANIM_BOSS_CAPSULE_SHELL 577 +#define SA1_ANIM_BOSS_CAPSULE_SMALL 578 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_LARGE 579 +#define SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_SMALL 580 +#define SA1_ANIM_WATER_FALL_HIT_SURFACE 581 +#define SA1_ANIM_SPRING_PLATFORM_6 582 +#define SA1_ANIM_CAROUSEL_POLE 583 + +// 584 +#define SA1_ANIM_PIPE_ENTER_6_1_V 584 +#define SA1_ANIM_PIPE_EXIT_6_1_V 585 +#define SA1_ANIM_PIPE_ENTER_6_1_H 586 +#define SA1_ANIM_PIPE_EXIT_6_1_H 587 +#define SA1_ANIM_PIPE_ENTER_H 588 +#define SA1_ANIM_PIPE_GATE_2_H 588 +#define SA1_ANIM_PIPE_ENTER_V 589 +#define SA1_ANIM_PIPE_GATE_2_V 589 +#define SA1_ANIM_PIPE_ENTER_6_2_H 590 +#define SA1_ANIM_PIPE_ENTER_6_2_V 591 +#define SA1_ANIM_AIR_MAZE_CORNER 592 +#define SA1_ANIM_MAZE_AIR_CORNER 592 +#define SA1_ANIM_EGG_BALL_PIPES 593 + +#define SA1_ANIM_PLATFORM_HORZ_6_2 598 +#define SA1_ANIM_PLATFORM_SQU_6_2 599 +#define SA1_ANIM_PLATFORM_LONG_6_2 600 +#define SA1_ANIM_BOUNCE_BLOCK_6_2 601 +#define SA1_ANIM_CRUMBLE_PLATFORM_6_2 602 +#define SA1_ANIM_CONVEYOR_BELT_6_SLIM 603 +#define SA1_ANIM_CONVEYOR_BELT_6_WIDE 604 +#define SA1_ANIM_PLATFORM_HORZ_7_1 605 +#define SA1_ANIM_CHAO_HUNT_COUNTER_BACKDROP 606 +#define SA1_ANIM_BOSS_1_BODY 607 +#define SA1_ANIM_BOSS_1_HAMMER_SEGMENT 608 +#define SA1_ANIM_BOSS_1_HAMMER 609 +#define SA1_ANIM_BOSS_1_EGGMAN 610 +#define SA1_ANIM_BOSS_1_EXPLOSION 611 +#define SA1_ANIM_BOSS_1_BODY_NO_BELT 612 +#define SA1_ANIM_BOSS_1_BELT_FRONT_L 613 +#define SA1_ANIM_BOSS_1_BELT_FRONT_R 614 +#define SA1_ANIM_BOSS_1_BELT_BACK_L 615 +#define SA1_ANIM_BOSS_1_BELT_BACK_R 616 +#define SA1_ANIM_BOSS_2_BASE 617 +#define SA1_ANIM_BOSS_2_EGGMAN 618 +#define SA1_ANIM_BOSS_2_SPRING 619 +#define SA1_ANIM_BOSS_2 620 +#define SA1_ANIM_BOSS_2_NO_SPRING 621 +#define SA1_ANIM_BOSS_3_EGGMAN 622 +#define SA1_ANIM_BOSS_3_STAR_DISC 623 +#define SA1_ANIM_BOSS_3_MOBILE 624 +#define SA1_ANIM_BOSS_3_SPIKE_BALL 625 +#define SA1_ANIM_BOSS_4_BODY 626 +#define SA1_ANIM_BOSS_4_DRILL4 627 +#define SA1_ANIM_BOSS_4 628 +#define SA1_ANIM_BOSS_4_EGGMAN 629 +#define SA1_ANIM_BOSS_4_ICICLE 630 +#define SA1_ANIM_BOSS_5_PHASE1_ACTIVATE 631 +#define SA1_ANIM_BOSS_5_PHASE1_IDLE 632 +#define SA1_ANIM_BOSS_5_PHASE1_TURN 633 +#define SA1_ANIM_BOSS_5_PHASE1_HIT 634 +#define SA1_ANIM_BOSS_5_PHASE1_GROUND 635 +#define SA1_ANIM_BOSS_5_PHASE1_SPIN 636 +#define SA1_ANIM_BOSS_5_PHASE1_SPINDASH 637 +#define SA1_ANIM_BOSS_5_PHASE1_GLIDE 638 +#define SA1_ANIM_BOSS_5_PHASE1_GLIDE_TURN 639 +#define SA1_ANIM_BOSS_5_PHASE1_LAND 640 +#define SA1_ANIM_BOSS_5_PHASE1_FACEPLANT 641 +#define SA1_ANIM_BOSS_5_PHASE1_COVER 642 +#define SA1_ANIM_BOSS_5_PHASE1_PUNCH 643 +#define SA1_ANIM_BOSS_5_PHASE2_IDLE 644 +#define SA1_ANIM_BOSS_5_PHASE2_TURN 645 +#define SA1_ANIM_BOSS_5_PHASE2_HIT 646 +#define SA1_ANIM_BOSS_5_PHASE2_GROUND 647 +#define SA1_ANIM_BOSS_5_PHASE2_SPIN 648 +#define SA1_ANIM_BOSS_5_PHASE2_SPINDASH 649 +#define SA1_ANIM_BOSS_5_PHASE2_GLIDE 650 +#define SA1_ANIM_BOSS_5_PHASE2_GLIDE_TURN 651 +#define SA1_ANIM_BOSS_5_PHASE2_LAND 652 +#define SA1_ANIM_BOSS_5_PHASE2_FACEPLANT 653 +#define SA1_ANIM_BOSS_5_PHASE2_COVER 654 +#define SA1_ANIM_BOSS_5_PHASE2_LAUNCH_ROCKET 655 +#define SA1_ANIM_BOSS_5_PHASE2_ROCKET 656 +#define SA1_ANIM_BOSS_5_PHASE2_DEFEATED 657 +#define SA1_ANIM_BOSS_5_PHASE2_PARTS 658 +#define SA1_ANIM_BOSS_6_SEGMENT 659 +#define SA1_ANIM_BOSS_6_EGGMAN 660 +#define SA1_ANIM_BOSS_6_SPIKE 661 +#define SA1_ANIM_BOSS_6_BODY 662 +#define SA1_ANIM_BOSS_6_LASER 663 +#define SA1_ANIM_BOSS_6_PROJ 664 +#define SA1_ANIM_BOSS_XTRA_HEAD 665 +#define SA1_ANIM_BOSS_XTRA_PALETTE 666 +#define SA1_ANIM_BOSS_XTRA_HIP 667 +#define SA1_ANIM_BOSS_XTRA_PROPULSION 668 +#define SA1_ANIM_BOSS_XTRA_BEARING 669 +#define SA1_ANIM_BOSS_XTRA_CAPSULE 670 +#define SA1_ANIM_BOSS_XTRA_CAPSULE_PART 671 +#define SA1_ANIM_BOSS_XTRA_LASER 672 +#define SA1_ANIM_BOSS_XTRA_ARM 673 +#define SA1_ANIM_BOSS_XTRA_ARM_BEARING 674 +#define SA1_ANIM_BOSS_XTRA_LIGHT_CHARGE 675 +#define SA1_ANIM_BOSS_XTRA_ROCK0 676 +#define SA1_ANIM_BOSS_XTRA_ROCK1 677 +#define SA1_ANIM_BOSS_XTRA_ROCK2 678 +#define SA1_ANIM_BOSS_X2_DRILL 679 +#define SA1_ANIM_BOSS_X2_EGGMAN 680 +#define SA1_ANIM_BOSS_X2_WHEEL 681 +#define SA1_ANIM_BOSS_X2_EGGDRILLSTER 682 +#define SA1_ANIM_BOSS_X1_EGGMOBILE_DECO 683 +#define SA1_ANIM_BOSS_X1_EGGMOBILE 684 +#define SA1_ANIM_BOSS_X1_BALL 685 +#define SA1_ANIM_BOSS_X1_EGGMAN 686 +#define SA1_ANIM_EGGX_BODY 687 +#define SA1_ANIM_EGGX_ROTARY 688 +#define SA1_ANIM_EGGX_HAND 689 +#define SA1_ANIM_EGGX_BALL 690 +#define SA1_ANIM_EGGX_EGGMAN 691 +#define SA1_ANIM_EGGMOBILE 693 +#define SA1_ANIM_EGGMAN 694 + +#define SA1_ANIM_CHAO_SHOCKED 698 +#define SA1_ANIM_CHAO_HOVER_SIDE 699 +#define SA1_ANIM_CHAO_FACE_FORWARD 700 +#define SA1_ANIM_CHAO_FACE_DIAGONAL_L 701 +#define SA1_ANIM_CHAO_FACE_DIAGONAL_R 702 +#define SA1_ANIM_CHAO_TURN 703 +#define SA1_ANIM_CHAO_SITTING 704 +#define SA1_ANIM_ITEMBOX 705 +#define SA1_ANIM_ITEMBOX_TYPE 706 +#define SA1_ANIM_RING 707 +#define SA1_ANIM_RING_COLLECT_EFFECT 708 +#define SA1_ANIM_SCORE 709 + +#define SA1_ANIM_COLLECT_RINGS_COUNTER_BACKDROP 714 +#define SA1_ANIM_GAME_OVER 715 +#define SA1_ANIM_NEO_GREEN_HILL_ZONE_OLD 716 +#define SA1_ANIM_TO_BE_CONTINUED 717 +#define SA1_ANIM_PAUSE 718 +#define SA1_ANIM_WARNING 719 +#define SA1_ANIM_PAUSE_BACKGROUND 720 +#define SA1_ANIM_DEMO_PLAY 721 +#define SA1_ANIM_INTRO_CHARACTERS 722 +#define SA1_ANIM_CHAR_SELECT_BG 723 +#define SA1_ANIM_ZONE_SELECT_ACTS 724 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_1 725 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_2 726 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_3 727 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_FINAL 728 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_EXTRA 729 +#define SA1_ANIM_CHAR_SELECT_NOT_SELECTABLE 730 +#define SA1_ANIM_FINAL_CUTSCENE_SPARKLE_A 731 +#define SA1_ANIM_FINAL_CUTSCENE_SPARKLE_B 732 +#define SA1_ANIM_FINAL_CUTSCENE_ART_A 733 +#define SA1_ANIM_FINAL_CUTSCENE_ART_B 734 +#define SA1_ANIM_FINAL_CUTSCENE_TORNADO_FRONT 735 +#define SA1_ANIM_FINAL_CUTSCENE_TORNADO_SIDE 736 + +#define SA1_ANIM_GET_THE_CHAOS_EMERALDS_EGGMAN 739 +#define SA1_ANIM_CREDITS_COMPANY_LOGOS 740 +#define SA1_ANIM_CREDITS_COPYRIGHT 741 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_4 742 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_5 743 +#define SA1_ANIM_ZONE_SELECT_THUMBNAIL_6 744 +#define SA1_ANIM_ARROW_UP 745 +#define SA1_ANIM_SPINDASH_DUST_EFFECT 746 +#define SA1_ANIM_SPINDASH_DUST_EFFECT_BIG 747 +#define SA1_ANIM_SMALL_DUST_PARTICLE 748 +#define SA1_ANIM_GRIND_EFFECT 749 +#define SA1_ANIM_SHIELD_NORMAL 750 +#define SA1_ANIM_SHIELD_MAGNETIC 751 +#define SA1_ANIM_INVINCIBILITY 752 +#define SA1_ANIM_BUBBLES_SMALL 753 +#define SA1_ANIM_BUBBLES_GROUP 754 + +#define SA1_ANIM_HEART 759 +#define SA1_ANIM_INDICATOR_SONIC 767 + +#define SA1_ANIM_INTRO_SILHOUETTES 769 +#define SA1_ANIM_INTRO_TEXTS_SONIC 770 +#define SA1_ANIM_INTRO_TEXTS_TAILS 771 +#define SA1_ANIM_INTRO_TEXTS_KNUCKLES 772 +#define SA1_ANIM_INTRO_TEXTS_AMY 773 +#define SA1_ANIM_INTRO_EMERALD 774 +#define SA1_ANIM_SUPER_SONIC_SPARKLE 775 +#define SA1_ANIM_TAILS_TAIL_SWIPE 777 +#define SA1_ANIM_PRESS_START_MSG_JP 778 +#define SA1_ANIM_PRESS_START_MSG_EN 779 +#define SA1_ANIM_TITLE_COPYRIGHT 780 +#define SA1_ANIM_DROWN_COUNTDOWN 781 +#define SA1_ANIM_KNUCKLES_FLOAT_SPLASH 782 +#define SA1_ANIM_A_FEW_DAYS_LATER_EN 783 + +#define SA1_ANIM_A_FEW_DAYS_LATER_JP 786 + +#define SA1_ANIM_SOME_CLOUD_XS 790 +#define SA1_ANIM_SOME_CLOUD_S 791 +#define SA1_ANIM_SOME_CLOUD_M 792 +#define SA1_ANIM_SOME_CLOUD_L 793 +#define SA1_ANIM_CONFUSION 794 +#define SA1_ANIM_RING_2 795 + +#define SA1_END_CUTSCENE_PILOT_FACE 805 + +#define SA1_ANIM_PAUSE_BACKGROUND_TA 809 +#define SA1_ANIM_PAUSE_TA 810 +#define SA1_ANIM_SP_STAGE_WELCOME 811 +#define SA1_ANIM_SP_STAGE_FEEDBACK_MESSAGES 812 +#define SA1_ANIM_SP_STAGE_PLAYER_SPEECH 813 + +#define SA1_ANIM_LOAD_PALETTE_423 852 +#define SA1_ANIM_SOUNDTEST_AMY_BYE 853 +#define SA1_ANIM_SOUNDTEST_AMY_IDLE 854 +#define SA1_ANIM_SOUNDTEST_AMY_SHAKE 855 +#define SA1_ANIM_SOUNDTEST_AMY_KISS 856 +#define SA1_ANIM_MENU_CURSOR 857 + +#define SA1_ANIM_OPTS_BLACK_RECT 860 + +#define SA1_ANIM_OPTS_PLDAT_LANG_EN 864 +#define SA1_ANIM_OPTS_PLDAT_LANG_JP 865 + +#define SA1_ANIM_VS_RECORD_TEXTS_EN 868 +#define SA1_ANIM_VS_RECORD_TEXTS_JP 869 + +#define SA1_ANIM_ONLY_CHAO_MSGBOX 879 + +#define SA1_ANIM_MP_CHAR_NAME 881 +#define SA1_ANIM_MP_ACT_MSG_EN 884 +#define SA1_ANIM_MP_PLAYER_MSG_EN 885 +#define SA1_ANIM_MP_CHAO_ERROR 886 +#define SA1_ANIM_MP_CHAO_AVATAR 887 +#define SA1_ANIM_MP_CHAO_SEARCHING 888 +#define SA1_ANIM_MP_CHAO_CONNECTED 889 +#define SA1_ANIM_MP_PRESS_START_EN 890 +#define SA1_ANIM_MP_OUTCOME_MESSAGES_EN 891 +#define SA1_ANIM_MP_OUTCOME_MESSAGES_JP 892 +#define SA1_ANIM_MP_PRESS_START_JP 893 + +#define SA1_ANIM_MP_SINGLE_PAK_RESULTS_ROUND 896 +#define SA1_ANIM_MP_GAME_PAK_MODE_EN 897 + +#define SA1_ANIM_MP_PLAYER_MSG_JP 899 + +#define SA1_ANIM_MP_SINGLE_PAK_RESULTS_CUMULATIVE 900 +#define SA1_ANIM_MP_GAME_PAK_MODE_JP 901 + +#define SA1_ANIM_VS_RESULT 904 +#define SA1_ANIM_VS_MENU_WAIT 905 +#define SA1_ANIM_CRUMBLE_PLATFORM_1 906 +#define SA1_ANIM_MP_TIMER_DIGITS 907 + +#endif // GUARD_ANIMATIONS_SA1_H diff --git a/sa1/include/constants/char_states.h b/sa1/include/constants/char_states.h new file mode 100644 index 0000000000..70f317c33a --- /dev/null +++ b/sa1/include/constants/char_states.h @@ -0,0 +1,119 @@ +#ifndef GUARD_SA1_CHAR_STATES_H +#define GUARD_SA1_CHAR_STATES_H + +/* The values in here are used for Player.charState! + They are used to determine the next behavior (and Player.anim/Player.variant in most instances). + Some are shared between characters (CHARSTATE_xyz) +*/ + +#define CHARSTATE_INVALID -1 +#define CHARSTATE_IDLE 0 +#define CHARSTATE_DEAD 1 +#define CHARSTATE_CROUCH 2 +#define CHARSTATE_3 3 // Look-down state? +#define CHARSTATE_WALK_A 4 +#define CHARSTATE_SPINATTACK 5 +#define CHARSTATE_SPINDASH 6 +#define CHARSTATE_7 7 +#define CHARSTATE_8 8 +#define CHARSTATE_BRAKE 9 +#define CHARSTATE_LOOK_UP 10 +#define CHARSTATE_11 11 +#define CHARSTATE_12 12 +#define CHARSTATE_13 13 +#define CHARSTATE_14 14 +#define CHARSTATE_15 15 +#define CHARSTATE_16 16 +#define CHARSTATE_17 17 +#define CHARSTATE_18 18 +#define CHARSTATE_19 19 +#define CHARSTATE_RAIL_EXTRA_JUMP 20 +#define CHARSTATE_SPRING_B 21 +#define CHARSTATE_22 22 +#define CHARSTATE_BOUNCE 23 +#define CHARSTATE_24 24 // Halfpipe run? +#define CHARSTATE_25 25 // Halfpipe run? +#define CHARSTATE_26 26 // Halfpipe run? +#define CHARSTATE_27 27 +#define CHARSTATE_28 28 + +#if (GAME == GAME_SA1) +#define CHARSTATE_HIT_AIR 15 +#define CHARSTATE_ACT_CLEAR_B 29 // unchecked +#else +#define CHARSTATE_HIT_AIR 20 +#define CHARSTATE_ACT_CLEAR_B 29 +#endif + +#define CHARSTATE_30 30 +#define CHARSTATE_31 31 +#define CHARSTATE_32 32 +#define CHARSTATE_33 33 +#define CHARSTATE_34 34 +#define CHARSTATE_35 35 +#define CHARSTATE_36 36 +#define CHARSTATE_37 37 +#define CHARSTATE_38 38 +#define CHARSTATE_39 39 // react to Mecha Knuckles? +#define CHARSTATE_40 40 +#define CHARSTATE_41 41 +#define CHARSTATE_AMY_SA1_JUMP 42 +#define CHARSTATE_43 43 +#define CHARSTATE_AIR_DASH 44 +#define CHARSTATE_45 45 +#define CHARSTATE_46 46 +#define CHARSTATE_47 47 +#define CHARSTATE_48 48 +#define CHARSTATE_49 49 +#define CHARSTATE_50 50 + +#define CHARSTATE_FLYING 53 +#define CHARSTATE_54 54 +#define CHARSTATE_FLY_EXHAUSTED 55 +#define CHARSTATE_56 56 +#define CHARSTATE_SWIMMING 57 +#define CHARSTATE_58 58 +#define CHARSTATE_59 59 +#define CHARSTATE_GROUND_ATTACK 60 + +// NOTE: Inferred from CHARSTATE_KNUCKLES_GLIDE in SA2_LABEL(sub_8022318) +#define CHARSTATE_KNUCKLES_GLIDE 62 +#define CHARSTATE_63 63 +#define CHARSTATE_64 64 +#define CHARSTATE_65 65 +#define CHARSTATE_66 66 +#define CHARSTATE_67 67 +#define CHARSTATE_68 68 +#define CHARSTATE_69 69 +#define CHARSTATE_70 70 +#define CHARSTATE_71 71 +#define CHARSTATE_72 72 +#define CHARSTATE_73 73 +#define CHARSTATE_74 74 +#define CHARSTATE_75 75 +#define CHARSTATE_76 76 +#define CHARSTATE_77 77 +#define CHARSTATE_78 78 +#define CHARSTATE_79 79 +#define CHARSTATE_80 80 +#define CHARSTATE_KNUCKLES_SWIM 81 +#define CHARSTATE_KNUCKLES_FLOAT 82 +#define CHARSTATE_83 83 +#define CHARSTATE_84 84 +#define CHARSTATE_85 85 +#define CHARSTATE_86 86 +#define CHARSTATE_87 87 +#define CHARSTATE_88 88 +#define CHARSTATE_89 89 +#define CHARSTATE_90 90 +#define CHARSTATE_91 91 +#define CHARSTATE_92 92 +#define CHARSTATE_93 93 + +#if (GAME == GAME_SA1) +#define CHARSTATE_SHARED_COUNT 43 +#elif (GAME == GAME_SA2) +#define CHARSTATE_SHARED_COUNT 80 +#endif + +#endif // GUARD_SA1_CHAR_STATES_H \ No newline at end of file diff --git a/sa1/include/constants/characters.h b/sa1/include/constants/characters.h new file mode 100644 index 0000000000..353b344a3c --- /dev/null +++ b/sa1/include/constants/characters.h @@ -0,0 +1,39 @@ +#ifndef GUARD_CONSTANTS_CHARACTERS_H +#define GUARD_CONSTANTS_CHARACTERS_H + +#if 01 +typedef enum { + CHARACTER_SONIC, +#if (GAME >= GAME_SA2) + CHARACTER_CREAM, +#endif + CHARACTER_TAILS, + CHARACTER_KNUCKLES, + CHARACTER_AMY, + + NUM_CHARACTERS +} ECharacters; +#else +// TODO: Right now these have to be defined like this for BriBaSA_ex to work. +// Obviously this shall change! +#define CHARACTER_SONIC 0 +#define CHARACTER_TAILS 1 +#define CHARACTER_KNUCKLES 2 +#define CHARACTER_AMY 3 +#define NUM_CHARACTERS 4 +#endif + +// NOTE: Put this after NUM_CHARACTERS, to allow BriBaSA_ex to parse this file properly. +// Naming it CHARACTER_ before NUM_CHARACTERS confuses it. +#define CHARACTER_SHARED_ANIM 0 + +#define CHARACTER_BIT(character) (1 << (character)) + +#if (GAME == GAME_SA1) +#define PARTNER_CHARACTER CHARACTER_TAILS +#elif (GAME == GAME_SA2) +#define MAIN_CHARACTERS \ + (CHARACTER_BIT(CHARACTER_SONIC) | CHARACTER_BIT(CHARACTER_CREAM) | CHARACTER_BIT(CHARACTER_TAILS) | CHARACTER_BIT(CHARACTER_KNUCKLES)) +#endif + +#endif diff --git a/sa1/include/constants/enemies.h b/sa1/include/constants/enemies.h new file mode 100644 index 0000000000..5cf94231e9 --- /dev/null +++ b/sa1/include/constants/enemies.h @@ -0,0 +1,37 @@ +#ifndef GUARD_CONSTANTS_ENEMIES_H +#define GUARD_CONSTANTS_ENEMIES_H + +#define ENEMY__KIKI 0 +#define ENEMY__BUZZER 1 +#define ENEMY__GAMIGAMI 2 +#define ENEMY__RHINOTANK 3 +#define ENEMY__KEROKERO 4 +#define ENEMY__SENBON 5 +#define ENEMY__TENTOU 6 +#define ENEMY__FIREBALL 7 +#define ENEMY__HANABII 8 +#define ENEMY__SLOT 9 +#define ENEMY__PIERROT 10 +#define ENEMY__LEON 11 +#define ENEMY__MIRROR 12 +#define ENEMY__WAMU 13 +#define ENEMY__OCT 14 +#define ENEMY__MOLE 15 +#define ENEMY__YUKIMARU 16 +#define ENEMY__YUKIMARU_SIDEWAYS 17 +#define ENEMY__DRISAME 18 +#define ENEMY__KURAA 19 +#define ENEMY__PEN 20 +#define ENEMY__BOSS_1_INTRO 21 +#define ENEMY__EGG_HAMMER_TANK 22 +#define ENEMY__EGG_PRESS 23 +#define ENEMY__EGG_BALL 24 +#define ENEMY__EGG_SPIDER 25 +#define ENEMY__MECHA_KNUCKLES 26 +#define ENEMY__EGG_SNAKE 27 +#define ENEMY__EGG_WRECKER 28 +#define ENEMY__EGG_DRILLSTER 29 +#define ENEMY__EGG_X 30 +#define ENEMY__SUPER_EGG_ROBOT 31 + +#endif // GUARD_CONSTANTS_ENEMIES_H \ No newline at end of file diff --git a/sa1/include/constants/interactables.h b/sa1/include/constants/interactables.h new file mode 100644 index 0000000000..a4b1f69d9f --- /dev/null +++ b/sa1/include/constants/interactables.h @@ -0,0 +1,123 @@ +#ifndef GUARD_CONSTANTS_INTERACTABLES_H +#define GUARD_CONSTANTS_INTERACTABLES_H + +#define IA__STAGE_GOAL 0 +#define IA__SPIKES__NORMAL_UP 1 +#define IA__SPIKES__NORMAL_DOWN 2 +#define IA__SPIKES__NORMAL_LEFT 3 +#define IA__SPIKES__NORMAL_RIGHT 4 +#define IA__SPIKES__HIDING_UP 5 +#define IA__SPIKES__HIDING_DOWN 6 +#define IA__CHECKPOINT 7 +#define IA__SPRING__UP 8 +#define IA__SPRING__DOWN 9 +#define IA__SPRING__LEFT 10 +#define IA__SPRING__RIGHT 11 +#define IA__SPRING__BIG_UPLEFT 12 +#define IA__SPRING__BIG_UPRIGHT 13 +#define IA__SPRING__SMALL_UPLEFT 14 +#define IA__SPRING__SMALL_UPRIGHT 15 +#define IA__DECORATION 16 +#define IA__TOGGLE_PLAYER_LAYER__FRONT 17 +#define IA__TOGGLE_PLAYER_LAYER__BACK 18 +#define IA__GRIND_RAIL__START 19 +#define IA__GRIND_RAIL__END 20 +#define IA__PLATFORM_THIN 21 +#define IA__PLATFORM_THIN__FALLING 22 +#define IA__TRAMPOLINE 23 +#define IA__PLATFORM_CRUMBLING 24 +#define IA__BOUNCE_BLOCK 25 +#define IA__INCLINE_RAMP 26 +#define IA__WATERFALL 27 +#define IA__HALFPIPE__START 28 +#define IA__HALFPIPE__END 29 +#define IA__SHRUBBERY 30 +#define IA__BOOSTER 31 +#define IA__BOOSTER__SLIGHT_LEFT 32 +#define IA__BOOSTER__SLIGHT_RIGHT 33 +#define IA__IA034 34 +#define IA__MINILOOP_BASE 35 +#define IA__MINILOOP_START_BOOST 36 +#define IA__MINILOOP_EXIT 37 +#define IA__MINILOOP_ENTRANCE 38 +#define IA__IA039 39 +#define IA__WATER_BRIDGE 40 +#define IA__TOGGLE__TO_BE_CONTINUED 41 +#define IA__RED_FLAG 42 +#define IA__IA043 43 +#define IA__WALL_POLE__LEFT 44 +#define IA__WALL_POLE__RIGHT 45 +#define IA__FORCED_ICE_SLIDE 46 +#define IA__BOOSTER__WALL 47 +#define IA__BUMPER__HEXAGON 48 +#define IA__BUMPER_ROUND__LINEAR 49 +#define IA__BUMPER_ROUND__CIRCULAR 50 +#define IA__BUMPER_TRI__HORIZONTAL 51 +#define IA__BUMPER_TRI__VERTICAL 52 +#define IA__BUMPER_TRI__BIG 53 +#define IA__FLIPPER 54 +#define IA__PLATFORM_SQUARE 55 +#define IA__FLIPPER__VERTICAL 56 +#define IA__BARREL_OF_DOOM_MINI 57 +#define IA__SEGA_SONIC_LETTER 58 +#define IA__PARTY_BALLOON 59 +#define IA__SHIP_SWING 60 +#define IA__PLATFORM_SPIKED 61 +#define IA__BOWL 62 +#define IA__PANEL_GATE__VERTICAL 63 +#define IA__PANEL_GATE__HORIZONTAL 64 +#define IA__MARBLE_TRACK__DIR 65 +#define IA__MARBLE_TRACK__UNK 66 +#define IA__MARBLE_TRACK__ENTRANCE 67 +#define IA__MARBLE_TRACK__EXIT 68 +#define IA__CONVEYOR_BELT 69 +#define IA__TOGGLE__PLAYER_VISIBILITY 70 +#define IA__WALL_BUMPER 71 +#define IA__TELEPORT_ORB 72 +#define IA__FLIPPER_SMALL_BLUE 73 +#define IA__CAROUSEL 74 +#define IA__HOOK_RAIL 75 +#define IA__SWINGING_HOOK 76 +#define IA__SECURITY_GATE 77 +#define IA__SWING_ROPE 78 +#define IA__STEAM_EXHAUST 79 +#define IA__CRANE_CLAW 80 +#define IA__MOVING_SPRING 81 +#define IA__IRON_BALL 82 +#define IA__HANG_BAR 83 +#define IA__SKATING_STONE 84 +#define IA__IA085 85 +#define IA__RUN_WHEEL 86 +#define IA__TORCH 87 +#define IA__LIFT 88 +#define IA__IA089 89 +#define IA__TOGGLE__PLAYER_FLOAT 90 +#define IA__FERRIS_WHEEL 91 +#define IA__BOULDER_SPAWNER 92 +#define IA__SPIKED_BARREL 93 +#define IA__AIR_BUBBLES 94 +#define IA__ICE_BLOCK 95 +#define IA__IA096 96 +#define IA__IA097 97 +#define IA__UNDERWATER_LAVA_PLATFORM 98 +#define IA__IA099 99 +#define IA__BOOSTER_STEEP 100 +#define IA__BOOSTER_STEEP_2 101 +#define IA__SPECIAL_SPRING 102 +#define IA__SPIKED_BARREL__CHAOHUNT 103 +#define IA__SMALL_FALL_BLOCK 104 +#define IA__LAVA 105 +#define IA__TRACK 106 +#define IA__IA107 107 +#define IA__SPRING__HIDING 108 +#define IA__TOGGLE_GRAVITY 109 +#define IA__PIPE_ENTRANCE 110 +#define IA__PIPE_EXIT 111 +#define IA__TRACK_AIR_CORNER 112 +#define IA__IA113 113 +#define IA__BREAKABLE_WALL 114 +#define IA__ITEMBOX_CHAOHUNT 115 + +#define IA__MP_TOGGLE_PLAYER_LAYER__FRONT 12 // Used in GAME_MODE_MULTI_PLAYER_COLLECT_RINGS +#define IA__MP_TOGGLE_PLAYER_LAYER__BACK 13 // Used in GAME_MODE_MULTI_PLAYER_COLLECT_RINGS +#endif // GUARD_CONSTANTS_INTERACTABLES_H diff --git a/sa1/include/constants/items.h b/sa1/include/constants/items.h new file mode 100644 index 0000000000..17e4ecd545 --- /dev/null +++ b/sa1/include/constants/items.h @@ -0,0 +1,25 @@ +#ifndef GUARD_CONSTANTS_ITEMS_H +#define GUARD_CONSTANTS_ITEMS_H + +#define ITEM__ONE_UP 0 +#define ITEM__SHIELD 1 +#define ITEM__SHIELD_MAGNETIC 2 +#define ITEM__INVINCIBILITY 3 +#define ITEM__SPEED_UP 4 +#define ITEM__RINGS_RANDOM 5 +#define ITEM__RINGS_5 6 +#define ITEM__RINGS_10 7 +#define ITEM__MP_8 8 +#define ITEM__MP_9 9 +#define ITEM__MP_10 10 + +#if (GAME == GAME_SA1) +#define ITEM__COUNT 11 +#else +#define ITEM__MP_11 11 +#define ITEM__MP_12 12 + +#define ITEM__COUNT 13 +#endif + +#endif // GUARD_CONSTANTS_ITEMS_H \ No newline at end of file diff --git a/sa1/include/constants/move_states.h b/sa1/include/constants/move_states.h new file mode 100644 index 0000000000..3b0d63f80d --- /dev/null +++ b/sa1/include/constants/move_states.h @@ -0,0 +1,46 @@ +#ifndef GUARD_MOVESTATES_H +#define GUARD_MOVESTATES_H + +// NOTE(Jace): Movestates are different across games. + +/* Many from Sonic Advance 2 */ +#define MOVESTATE_FACING_LEFT 0x00000001 +#define MOVESTATE_IN_AIR 0x00000002 +#define MOVESTATE_4 0x00000004 +#define MOVESTATE_JUMPING (MOVESTATE_IN_AIR | MOVESTATE_4) +#define MOVESTATE_STOOD_ON_OBJ 0x00000008 +#define MOVESTATE_FLIP_WITH_MOVE_DIR 0x00000010 +#define MOVESTATE_20 0x00000020 +#define MOVESTATE_IN_WATER 0x00000040 +#define MOVESTATE_DEAD 0x00000080 +#define MOVESTATE_100 0x00000100 +#define MOVESTATE_200 0x00000200 +#define MOVESTATE_400 0x00000400 +#define MOVESTATE_SPINDASH 0x00000400 +#define MOVESTATE_800 0x00000800 // SA2: MOVESTATE_ICE_SLIDE +#define MOVESTATE_1000 0x00001000 +#define MOVESTATE_2000 0x00002000 +#define MOVESTATE_4000 0x00004000 +#define MOVESTATE_8000 0x00008000 +#define MOVESTATE_10000 0x00010000 +#define MOVESTATE_20000 0x00020000 +#define MOVESTATE_40000 0x00040000 +#define MOVESTATE_80000 0x00080000 +#define MOVESTATE_100000 0x00100000 // visibility? +#define MOVESTATE_IGNORE_INPUT 0x00200000 // does not ignore Start-Button +#define MOVESTATE_IA_OVERRIDE 0x00400000 +#define MOVESTATE_800000 0x00800000 +#define MOVESTATE_1000000 0x01000000 +#if (GAME == GAME_SA1) +#define MOVESTATE_2000000 0x02000000 +#elif (GAME == GAME_SA2) +#define MOVESTATE_BOOST_EFFECT_ON 0x02000000 +#endif +#define MOVESTATE_4000000 0x04000000 +#define MOVESTATE_GOAL_REACHED 0x08000000 +#define MOVESTATE_10000000 0x10000000 +#define MOVESTATE_SOME_ATTACK 0x20000000 +#define MOVESTATE_IN_SCRIPTED 0x40000000 // Player speed/pos are currently handled by an Interactable +#define MOVESTATE_80000000 0x80000000 + +#endif // GUARD_MOVESTATES_H \ No newline at end of file diff --git a/sa1/include/constants/mp_map_interactables.h b/sa1/include/constants/mp_map_interactables.h new file mode 100644 index 0000000000..e15ec5b3a3 --- /dev/null +++ b/sa1/include/constants/mp_map_interactables.h @@ -0,0 +1,24 @@ +#ifndef GUARD_CONSTANTS_MP_MAP_INTERACTABLES_H +#define GUARD_CONSTANTS_MP_MAP_INTERACTABLES_H + +// Used for the Single Pak, "Collect Rings" stage +#define IA__MP_IA000 0 // => IA001 +#define IA__MP_IA001 1 // => IA002 +#define IA__MP_IA002 2 // => IA003 +#define IA__MP_IA003 3 // => IA003 +#define IA__MP_IA004 4 // => IA001 +#define IA__MP_IA005 5 // => IA002 +#define IA__MP_IA006 6 // => IA008 +#define IA__MP_IA007 7 // => IA009 +#define IA__MP_IA008 8 // => IA010 +#define IA__MP_IA009 9 // => IA010 +#define IA__MP_IA010 10 // => IA012 +#define IA__MP_IA011 11 // => IA012 +#define IA__MP_TOGGLE_PLAYER_LAYER__FRONT 12 +#define IA__MP_TOGGLE_PLAYER_LAYER__BACK 13 +#define IA__MP_IA014 14 // => IA021 +#define IA__MP_IA015 15 // => IA022 +#define IA__MP_IA016 16 // => IA040 +#define IA__MP_IA017 17 // => IA115 + +#endif // GUARD_CONSTANTS_MP_MAP_INTERACTABLES_H diff --git a/sa1/include/constants/player_transitions.h b/sa1/include/constants/player_transitions.h new file mode 100644 index 0000000000..1568a3d408 --- /dev/null +++ b/sa1/include/constants/player_transitions.h @@ -0,0 +1,44 @@ +#ifndef GUARD_PLAYER_TRANSITIONS_H +#define GUARD_PLAYER_TRANSITIONS_H + +// 0x07 = Set in Egg Utopia - Launcher +// 0x0A = Player cleared the stage (only for Acts, not Bosses?) +// 0x0B = Something Grinding +// 0x0C = Something Grinding +// 0x0D = Something Grinding +// 0x16 = Set in IA Ramp +// 0x17 = Used in Interactable_044 +// 0x18 = Dash Ring Object +// 0x1C = Set by IA ClearPipe_End if data[1] is 0 + +#define PLTRANS_NONE 0 +#define PLTRANS_PT1 1 +#define PLTRANS_PT2 2 +#define PLTRANS_PT3 3 +#define PLTRANS_PT4 4 +#define PLTRANS_PT5 5 +#define PLTRANS_PT6 6 +#define PLTRANS_PT7 7 +#define PLTRANS_PT8 8 +#define PLTRANS_PT9 9 +#define PLTRANS_PT10 10 +#define PLTRANS_PT11 11 +#define PLTRANS_PT12 12 +#define PLTRANS_PT13 13 +#define PLTRANS_SPRING_UP 14 +#define PLTRANS_SPRING_DOWN 15 +#define PLTRANS_SPRING_LEFT 16 +#define PLTRANS_SPRING_RIGHT 17 +#define PLTRANS_SPRING_UP_LEFT 18 +#define PLTRANS_SPRING_UP_RIGHT 19 +#define PLTRANS_SPRING_DOWN_LEFT 20 +#define PLTRANS_SPRING_DOWN_RIGHT 21 +#define PLTRANS_PT22 22 +#define PLTRANS_PT23 23 +#define PLTRANS_PT24 24 +#define PLTRANS_PT25 25 +#define PLTRANS_PT26 26 +#define PLTRANS_PT27 27 +#define PLTRANS_PT28 28 + +#endif // GUARD_PLAYER_TRANSITIONS_H \ No newline at end of file diff --git a/sa1/include/constants/sa2_char_states.h b/sa1/include/constants/sa2_char_states.h new file mode 100644 index 0000000000..e44e75a3bf --- /dev/null +++ b/sa1/include/constants/sa2_char_states.h @@ -0,0 +1,135 @@ +#ifndef GUARD_SA2_CHAR_STATES_H +#define GUARD_SA2_CHAR_STATES_H + +/* The values in here are used for Player.charState! + They are used to determine the next behavior (and Player.anim/Player.variant in most instances). + Some are shared between characters (CHARSTATE_xyz) +*/ + +#if (GAME == GAME_SA2) +#define CHARSTATE_INVALID -1 +#define CHARSTATE_IDLE 0 +#define CHARSTATE_TAUNT 1 +#define CHARSTATE_CROUCH 2 +#define CHARSTATE_SPIN_DASH 3 +#define CHARSTATE_SPIN_ATTACK 4 +#define CHARSTATE_TURN_SLOW 5 +#define CHARSTATE_TURN_AFTER_BRAKE 6 +#define CHARSTATE_BRAKE 7 +#define CHARSTATE_BRAKE_GOAL 8 +#define CHARSTATE_WALK_A 9 +#define CHARSTATE_JUMP_1 10 +#define CHARSTATE_JUMP_2 11 +#define CHARSTATE_HIT_GROUND 12 +#define CHARSTATE_FALLING_VULNERABLE_A 13 +#define CHARSTATE_FALLING_VULNERABLE_B 14 +#define CHARSTATE_BOOSTLESS_ATTACK 15 +#define CHARSTATE_AIR_ATTACK 16 +#define CHARSTATE_BOOST_ATTACK 17 +#define CHARSTATE_SOME_ATTACK 18 +#define CHARSTATE_SOME_OTHER_ATTACK 19 +#if (GAME == GAME_SA1) +#define CHARSTATE_HIT_AIR 15 +#else +#define CHARSTATE_HIT_AIR 20 +#endif +#define CHARSTATE_HIT_STUNNED 21 +#define CHARSTATE_DEAD 22 +#define CHARSTATE_UNUSED_A 23 +#define CHARSTATE_UNUSED_B 24 +#define CHARSTATE_GOAL_BRAKE_A 25 +#define CHARSTATE_GOAL_BRAKE_B 26 +#define CHARSTATE_GOAL_BRAKE_C 27 +#define CHARSTATE_ACT_CLEAR_A 28 +#define CHARSTATE_ACT_CLEAR_B 29 +#define CHARSTATE_ACT_CLEAR_C 30 +#define CHARSTATE_UNUSED_C 31 +#define CHARSTATE_ACT_CLEAR_TIME_ATTACK_OR_BOSS 32 +#define CHARSTATE_TRICK_UP 33 +#define CHARSTATE_TRICK_FORWARD 34 +#define CHARSTATE_TRICK_BACKWARD 35 +#define CHARSTATE_TRICK_DOWN 36 +#define CHARSTATE_SPRING_MUSIC_PLANT 37 +#define CHARSTATE_SPRING_B 38 +#define CHARSTATE_SPRING_C 39 +#define CHARSTATE_RAMP_AND_DASHRING 40 +#define CHARSTATE_GRINDING 41 +#define CHARSTATE_GRINDING_SONIC_AMY_JUMP_OFF 42 +#define CHARSTATE_GRAVITY_FLIP_UNUSED 43 +#define CHARSTATE_IN_WHIRLWIND 44 +#define CHARSTATE_GRABBING_HANDLE_A 45 +#define CHARSTATE_GRABBING_HANDLE_B 46 +#define CHARSTATE_IN_CORKSCREW 47 +#define CHARSTATE_IN_CORKSCREW_3D_RUNNING_DOWN 48 +#define CHARSTATE_IN_CORKSCREW_3D_RUNNING_UP 49 +#define CHARSTATE_CURLED_IN_AIR 50 +#define CHARSTATE_WINDUP_STICK_UPWARDS 51 +#define CHARSTATE_WINDUP_STICK_DOWNWARDS 52 +#define CHARSTATE_WINDUP_STICK_SINGLE_TURN_UP 53 +#define CHARSTATE_WINDUP_STICK_SINGLE_TURN_DOWN 54 +#define CHARSTATE_HANGING 55 // both for HookRail and Crane +#define CHARSTATE_TURNAROUND_BAR 56 +#define CHARSTATE_NOTE_BLOCK 57 +#define CHARSTATE_FLUTE_EXHAUST 58 +#define CHARSTATE_WALLRUN_INIT 59 +#define CHARSTATE_WALLRUN_TO_WALL 60 +#define CHARSTATE_WALLRUN_ON_WALL 61 +#define CHARSTATE_ICE_SLIDE 62 +#define CHARSTATE_WALK_B 63 +#define CHARSTATE_LAUNCHER_IN_CART 64 +#define CHARSTATE_LAUNCHER_IN_AIR 65 +#define CHARSTATE_POLE 66 +#define CHARSTATE_CUTSCENE_LOOK_UP_FRAME_0 67 +#define CHARSTATE_CUTSCENE_LOOK_UP_FRAME_1 68 +#define CHARSTATE_CUTSCENE_LOOK_UP_FRAME_2 69 +#define CHARSTATE_CUTSCENE_LOOK_UP_FRAME_3 70 +#define CHARSTATE_UNUSED_D 71 +#define CHARSTATE_UNUSED_E 72 +#define CHARSTATE_UNUSED_F 73 +#define CHARSTATE_UNUSED_G 74 +#define CHARSTATE_UNUSED_H 75 +#define CHARSTATE_UNUSED_I 76 +#define CHARSTATE_UNUSED_J 77 +#define CHARSTATE_UNUSED_K 78 +#define CHARSTATE_UNUSED_L 79 +#define CHARSTATE_SHARED_COUNT 80 + +#define CHARSTATE_SONIC_FORWARD_THRUST CHARSTATE_SHARED_COUNT +#define CHARSTATE_SONIC_CATCHING_CREAM 81 +#define CHARSTATE_SONIC_CAUGHT_CREAM 82 +#define CHARSTATE_CREAM_FLYING 83 +#define CHARSTATE_CREAM_FLYING_TURNING 84 +#define CHARSTATE_CREAM_FLYING_TIRED 85 +#define CHARSTATE_CREAM_ANIM_20 86 +#define CHARSTATE_CREAM_CHAO_ATTACK 87 +#define CHARSTATE_TAILS_FLYING 88 +#define CHARSTATE_TAILS_FLYING_TURNING 89 +#define CHARSTATE_TAILS_FLYING_TIRED 90 +#define CHARSTATE_TAILS_ANIM_19 91 +#define CHARSTATE_KNUCKLES_GLIDE 92 +#define CHARSTATE_KNUCKLES_GLIDE_FALL 93 +#define CHARSTATE_KNUCKLES_GLIDE_FALL_HIT 94 +#define CHARSTATE_KNUCKLES_GLIDE_IMPACT 95 +#define CHARSTATE_KNUCKLES_GLIDE_TURN_FRAME_A 96 +#define CHARSTATE_KNUCKLES_GLIDE_TURN_FRAME_B 97 +#define CHARSTATE_KNUCKLES_GLIDE_TURN_FRAME_C 98 +#define CHARSTATE_KNUCKLES_GLIDE_TURN_FRAME_D 99 +#define CHARSTATE_KNUCKLES_GLIDE_GRAB_WALL 100 +#define CHARSTATE_KNUCKLES_CLIMB_A 101 +#define CHARSTATE_KNUCKLES_CLIMB_B 102 +#define CHARSTATE_KNUCKLES_CLIMB_C 103 +#define CHARSTATE_KNUCKLES_CLIMB_D 104 +#define CHARSTATE_KNUCKLES_CLIMB_E 105 +#define CHARSTATE_KNUCKLES_DRILL_CLAW_INIT 106 +#define CHARSTATE_KNUCKLES_DRILL_CLAW_MAIN 107 +#define CHARSTATE_KNUCKLES_DRILL_CLAW_GROUND 108 +#define CHARSTATE_AMY_SA1_JUMP 109 +#define CHARSTATE_UNUSED_M 110 +#define CHARSTATE_AMY_HAMMER_ATTACK 111 +#define CHARSTATE_AMY_SA1_HAMMER_ATTACK 112 +#define CHARSTATE_UNUSED_N 113 +#define CHARSTATE_AMY_MID_AIR_HAMMER_SWIRL 114 // might be SA1 version? +#define CHARSTATE_COUNT 115 +#endif + +#endif // GUARD_SA2_CHAR_STATES_H \ No newline at end of file diff --git a/sa1/include/constants/songs.h b/sa1/include/constants/songs.h new file mode 100644 index 0000000000..b16cd58f42 --- /dev/null +++ b/sa1/include/constants/songs.h @@ -0,0 +1,196 @@ +#ifndef GUARD_CONSTANTS_SONGS_H +#define GUARD_CONSTANTS_SONGS_H + +// 000 +#define MUS_INTRO 1 +#define MUS_TITLE_FANFARE 2 +#define MUS_CHARACTER_SELECTION 3 +#define MUS_COURSE_SELECTION 4 +#define MUS_VS_PLEASE_WAIT 5 +#define MUS_006 6 +#define MUS_007 7 +#define MUS_008 8 +#define MUS_009 9 +#define MUS_VS_RECORD 10 +#define MUS_OPTIONS 11 // Scrap Brain Zone remix +#define MUS_NEO_GREEN_HILL__ACT_1 12 +#define MUS_NEO_GREEN_HILL__ACT_2 13 +#define MUS_SECRET_BASE__ACT_1 14 +#define MUS_SECRET_BASE__ACT_2 15 +#define MUS_CASINO_PARADISE__ACT_1 16 +#define MUS_CASINO_PARADISE__ACT_2 17 +#define MUS_ICE_MOUNTAIN__ACT_1 18 +#define MUS_ICE_MOUNTAIN__ACT_2 19 +#define MUS_ANGEL_ISLAND__ACT_1 20 +#define MUS_ANGEL_ISLAND__ACT_2 21 +#define MUS_EGG_ROCKET 22 +#define MUS_COSMIC_ANGEL 23 +#define MUS_X_ZONE 24 +#define MUS_FINAL_BOSS 25 +#define MUS_EXTRA_BOSS 26 +#define MUS_DROWNING 27 +#define MUS_INVINCIBILITY 28 +#define MUS_BOSS_FIGHT 29 +#define MUS_BOSS_INTRO 30 +#define MUS_BOSS_MECHA_KNUCKLES 31 +#define MUS_BOSS_EGG_SNAKE 32 +#define MUS_ACT_CLEAR 33 +#define MUS_BOSS_CLEAR 34 +#define MUS_FINAL_CLEAR 35 +#define MUS_EXTRA_CLEAR 36 +#define MUS_GAME_OVER 37 +#define MUS_CUTSCENE_TORNADO_RESCUE 38 +#define MUS_CUTSCENE_A_FEW_DAYS_LATER 39 +#define MUS_STAFF_CREDITS 40 +#define MUS_SPECIAL_STAGE_INTRO 41 +#define MUS_SPECIAL_STAGE 42 +#define MUS_SP_STAGE_TRICK 43 +#define MUS_SPECIAL_STAGE_CLEAR 44 +#define MUS_CHAOS_EMERALD 45 +#define MUS_SPECIAL_STAGE_RESULT_LOSE 46 +#define MUS_047 47 +#define MUS_PLAYER_DATA 48 // Star Light Zone remix +#define MUS_BOSS_EGG_WRECKER 49 +#define MUS_BOSS_EGG_DRILLSTER 50 +#define MUS_051 51 +#define MUS_VS_SCORE_OVERVIEW 52 +#define MUS_VS_RING_RUSH_MODE 53 +#define MUS_VS_RESULT 54 + +/* 055 - 101: Dummies */ + +#define SE_RING 102 +#define SE_SHIFT 103 +#define SE_SUCCESS 104 +#define SE_ABORT 105 +#define SE_SELECT 106 +#define SE_RETURN 107 +#define SE_MENU_CURSOR_MOVE 108 +#define SE_SPIN_ATTACK 109 +#define SE_SPINDASH_RELEASE 110 +#define SE_SONIC_SKID_ATTACK 111 +#define SE_SONIC_MIDAIR_SOMERSAULT 112 +#define SE_SONIC_INSTA_SHIELD 113 +#define SE_GRINDING 114 +#define SE_BRAKE 115 +#define SE_JUMP 116 +#define SE_RING_COPY 117 +#define SE_RINGS_LOST 118 +#define SE_LIFE_LOST 119 +#define SE_TAILS_PROPELLER_FLYING 120 +#define SE_TAILS_TAIL_SWIPE 121 +#define SE_122 122 +#define SE_123 123 +#define SE_124 124 +#define SE_125 125 +#define SE_126 126 +#define SE_127 127 +#define SE_128 128 +#define SE_129 129 +#define SE_AMY_SUPER_HAMMER_ATTACK 130 +#define SE_AMY_HAMMER_SWIRL 131 +#define SE_132 132 +#define SE_AMY_ROLLS 133 +#define SE_AMY_GRINDING 134 +#define SE_GOAL 135 +#define SE_136 136 +#define SE_137 137 +#define SE_ITEM_BOX 138 +#define SE_TIMER 139 // Almost Time Up / Extra Boss Rings low +#define SE_STAGE_RESULT_COUNTER 140 +#define SE_STAGE_RESULT_COUNTER_DONE 141 +#define SE_PAUSE 142 +#define SE_BOSS_HIT 143 +#define SE_EXPLOSION 144 +#define SE_IMPACT 145 // Boss 1 Hammer hits ground +#define SE_146 146 +#define SE_147 147 +#define SE_148 148 +#define SE_149 149 +#define SE_150 150 +#define SE_151 151 +#define SE_152 152 +#define SE_153 153 +#define SE_154 154 +#define SE_155 155 +#define SE_156 156 +#define SE_157 157 +#define SE_158 158 +#define SE_159 159 +#define SE_160 160 +#define SE_KNOCK_TEAMMATE 161 +#define SE_KNOCK_OPPONENT 162 // also EXTRA_BOSS_LASER +#define SE_CHAO_HUH 163 +#define SE_164 164 +// 165 +#define SE_TIME_UP 166 +#define SE_ITEM_BOX_2 167 +#define SE_ACTIVATE_SHIELD 168 +#define SE_CHECKPOINT 169 +#define SE_SPRING 170 +#define SE_171 171 +#define SE_BOOSTER 172 +#define SE_173 173 +#define SE_POLE 175 +#define SE_CRUMBLING_PLATFORM 173 +#define SE_TRAMPOLINE 176 +#define SE_WATER_BRIDGE_SPLASH 177 +#define SE_SHRUBBERY 178 +#define SE_179 179 +#define SE_HOOK_RAIL 180 +#define SE_LIFT 181 +#define SE_LAVA_PLATFORM_SPURT 182 +#define SE_BUMPER_A 183 +#define SE_BUMPER_B 184 +#define SE_PANEL_GATE 185 +// 186 +// 187 +#define SE_188 188 +#define SE_BALLOON_POP 189 +#define SE_WATERFALL_SURFACE_HIT 190 +#define SE_AIR_BUBBLE 191 +#define SE_DROWNED 192 +#define SE_193 193 +#define SE_194 194 +#define SE_195 195 +#define SE_196 196 +// 197 +#define SE_198 198 +#define SE_199 199 +#define SE_200 200 +#define SE_201 201 +#define SE_202 202 +#define SE_203 203 +#define SE_204 204 +#define SE_205 205 +#define SE_BOWL 206 +#define SE_BOWL_2 207 +#define SE_BOWL_3 208 +#define SE_CAROUSEL_A 209 +#define SE_CAROUSEL_B 210 +#define SE_CAROUSEL_C 211 +#define SE_RUN_WHEEL_A 212 +#define SE_RUN_WHEEL_B 213 +#define SE_RUN_WHEEL_C 214 +#define SE_215 215 +#define SE_216 216 +#define SE_217 217 +#define SE_218 218 +#define SE_219 219 +#define SE_220 220 +#define SE_221 221 +#define SE_222 222 +#define SE_223 223 +#define SE_224 224 + +/* 225 - 300: Dummies */ + +#define SE_301 301 +#define SE_302 302 +#define SE_VS_MULTIPAK_CONN_CLOSE 303 +#define SE_VS_MULTIPAK_ROUND_OVER 304 +#define SE_305 305 +#define SE_306 306 +#define MUS_1_UP 307 + +#endif diff --git a/sa1/include/constants/text.h b/sa1/include/constants/text.h new file mode 100644 index 0000000000..f07ade0bd4 --- /dev/null +++ b/sa1/include/constants/text.h @@ -0,0 +1,33 @@ +#define NUM_LANGUAGES 6 + +#define UILANG_JAPANESE 0 +#define UILANG_ENGLISH 1 +#define UILANG_COUNT 2 +#define UILANG_DEFAULT UILANG_ENGLISH + +#define LANG_DEFAULT 0 +#define LANG_JAPANESE 1 +#define LANG_ENGLISH 2 +#define LANG_GERMAN 3 +#define LANG_FRENCH 4 +#define LANG_SPANISH 5 +#define LANG_ITALIAN 6 + +#define LanguageIndex(lang) (lang - 1) + +#define TextElementOffset(lang, elementsPerLang, element) (element + ((lang) * (elementsPerLang))) +#define TextElementOffsetAlt(lang, elementsPerLang, element) (((lang) * (elementsPerLang)) + element) + +// TODO: move these to a better place + +#define TextElementAlt(elementsPerLang, lang, element, a, b) \ + [(lang) * (elementsPerLang) + (element - 1)] = { .numTiles = (a), .anim = (b), .variant = (element) } +#define TextElement(elementsPerLang, lang, element, a, b) \ + [TextElementOffset(lang, elementsPerLang, element)] = { .numTiles = (a), .anim = (b), .variant = (element) } + +#define TextElementAlt2(lang, element, a, b) [lang] = { .numTiles = (a), .anim = (b), .variant = (element) } +#define TextElementAlt3(element, a, b) [element] = { .numTiles = (a), .anim = (b), .variant = (element) } +#define TextElementAlt4(_variant, _numTiles, _anim) \ + { \ + .numTiles = (_numTiles), .anim = (_anim), .variant = (_variant) \ + } diff --git a/sa1/include/constants/tilemaps.h b/sa1/include/constants/tilemaps.h new file mode 100644 index 0000000000..d865db7767 --- /dev/null +++ b/sa1/include/constants/tilemaps.h @@ -0,0 +1,46 @@ +#ifndef GUARD_TILEMAPS +#define GUARD_TILEMAPS + +// NOTE: * 0-53 are MapHeaders +#define TM_LEVEL_METATILES_0(level) (((level)*3) + 0) +#define TM_LEVEL_METATILES_1(level) (((level)*3) + 1) +#define TM_LEVEL_BG(level) (((level)*3) + 2) + +#define TM_TILEMAP_54 54 +#define TM_SPECIAL_STAGE_BG_FRAME_0 55 +#define TM_SPECIAL_STAGE_BG_FRAME_1 56 +#define TM_SPECIAL_STAGE_BG_FRAME_2 57 +#define TM_SPECIAL_STAGE_BG_FRAME_3 58 +#define TM_SPECIAL_STAGE_BG_FRAME_4 59 +#define TM_SPECIAL_STAGE_BG_FRAME_5 60 +#define TM_SPECIAL_STAGE_BG_FRAME_6 61 +#define TM_SPECIAL_STAGE_BG_FRAME_7 62 +#define TM_SPECIAL_STAGE_BG_FRAME_8 63 +#define TM_SPECIAL_STAGE_BG_FRAME_9 64 +#define TM_SPECIAL_STAGE_BG_FRAME_10 65 +#define TM_SPECIAL_STAGE_BG_FRAME_11 66 +#define TM_SPECIAL_STAGE_BG_FRAME_12 67 +#define TM_SPECIAL_STAGE_BG_FRAME_13 68 +#define TM_SPECIAL_STAGE_BG_FRAME_14 69 +#define TM_SPECIAL_STAGE_BG_FRAME_15 70 +#define TM_ICE_PARADISE_SNOW 71 +#define TM_EGG_ROCKET_CLOUDS 72 +#define TM_SA1_TITLE_LOGO_JP 73 +#define TM_SA1_TITLE_LOGO_EN 74 +#define TM_SA1_TITLE_BG 75 +#define TM_MP_CHOOSE_PAK_TYPE_JP 76 +#define TM_MP_CHOOSE_PAK_TYPE_EN 77 +#define TM_MP_CONNECTION_SUCCESS 78 +#define TM_MP_CONNECTION_ERROR 79 +#define TM_MP_CONTINUE_SCREEN 80 +#define TM_MP_TEAM_PLAY_SCREEN 81 +#define TM_MP_VS_BACKGROUND 82 +#define TM_MP_SINGLEPAK_PROGRAM_IS_BEING_SENT 83 +#define TM_VS_MODE_SELECT_JP 84 +#define TM_VS_MODE_SELECT 85 +#define TM_INTRO_PRESENTED_BY_SEGA 86 +#define TM_INTRO_CREATED_BY_SONIC_TEAM 87 +#define TM_MP_MULTIPAK_PLAYER_OVERVIEW 88 +#define TM_TILEMAP_89 89 + +#endif // GUARD_TILEMAPS \ No newline at end of file diff --git a/sa1/include/constants/ui_graphics.h b/sa1/include/constants/ui_graphics.h new file mode 100644 index 0000000000..3130b450a6 --- /dev/null +++ b/sa1/include/constants/ui_graphics.h @@ -0,0 +1,134 @@ +#ifndef GUARD_SA1_UI_GRAPHICS_H +#define GUARD_SA1_UI_GRAPHICS_H + +#define UIGFX_ASCII_CHARS 0 +#define UIGFX_UI_ICON_SONIC 1 +#define UIGFX_UI_ICON_TAILS 2 +#define UIGFX_UI_ICON_KNUCKLES 3 +#define UIGFX_UI_ICON_AMY 4 +#define UIGFX_UI_ICON_RING 5 +#define UIGFX_STGINTRO_ZIGZAG_SONIC 6 +#define UIGFX_STGINTRO_ZIGZAG_TAILS 7 +#define UIGFX_STGINTRO_ZIGZAG_KNUCKLES 8 +#define UIGFX_STGINTRO_ZIGZAG_AMY 9 +#define UIGFX_STGINTRO_CHAR_NAMES 10 +#define UIGFX_STGRESULT_SONIC 11 +#define UIGFX_STGRESULT_TAILS 12 +#define UIGFX_STGRESULT_KNUCKLES 13 +#define UIGFX_STGRESULT_AMY 14 +#define UIGFX_STGRESULT_ACT12 15 +#define UIGFX_STGRESULT_HEADLINE_BACK 16 +#define UIGFX_STGNAMES_JP_0 17 +#define UIGFX_18 18 +#define UIGFX_STGNAME_1 19 +#define UIGFX_STGNAME_2 20 +#define UIGFX_STGNAME_3 21 +#define UIGFX_STGNAME_4 22 +#define UIGFX_STGNAME_5 23 +#define UIGFX_STGNAME_6 24 +#define UIGFX_STGNAME_7 25 +#define UIGFX_26 26 +#define UIGFX_27 27 +#define UIGFX_28 28 +#define UIGFX_29 29 +#define UIGFX_30 30 +#define UIGFX_31 31 +#define UIGFX_TIMER_DIGITS 32 +#define UIGFX_OK 33 +#define UIGFX_34 34 +#define UIGFX_35 35 +#define UIGFX_36 36 +#define UIGFX_37 37 +#define UIGFX_38 38 +#define UIGFX_39 39 +#define UIGFX_40 40 +#define UIGFX_41 41 +#define UIGFX_42 42 +#define UIGFX_43 43 +#define UIGFX_CHAR_SELECT_OK 44 +#define UIGFX_CHAR_SELECT_BLACK_BOX_2 45 +#define UIGFX_CHAR_SP_STAGE_RINGS_BG 46 +#define UIGFX_47 47 +#define UIGFX_48 48 +#define UIGFX_49 49 +#define UIGFX_50 50 +#define UIGFX_51 51 +#define UIGFX_52 52 +#define UIGFX_53 53 +#define UIGFX_54 54 +#define UIGFX_55 55 +#define UIGFX_56 56 +#define UIGFX_57 57 +#define UIGFX_58 58 +#define UIGFX_59 59 +#define UIGFX_60 60 +#define UIGFX_61 61 +#define UIGFX_62 62 +#define UIGFX_63 63 +#define UIGFX_64 64 +#define UIGFX_65 65 +#define UIGFX_66 66 +#define UIGFX_67 67 +#define UIGFX_68 68 +#define UIGFX_69 69 +#define UIGFX_70 70 +#define UIGFX_71 71 +#define UIGFX_72 72 +#define UIGFX_73 73 +#define UIGFX_74 74 +#define UIGFX_75 75 +#define UIGFX_76 76 +#define UIGFX_77 77 +#define UIGFX_78 78 +#define UIGFX_79 79 +#define UIGFX_80 80 +#define UIGFX_81 81 +#define UIGFX_82 82 +#define UIGFX_83 83 +#define UIGFX_84 84 +#define UIGFX_85 85 +#define UIGFX_86 86 +#define UIGFX_87 87 +#define UIGFX_88 88 +#define UIGFX_89 89 +#define UIGFX_90 90 +#define UIGFX_91 91 +#define UIGFX_92 92 +#define UIGFX_93 93 +#define UIGFX_94 94 +#define UIGFX_95 95 +#define UIGFX_96 96 +#define UIGFX_97 97 +#define UIGFX_98 98 +#define UIGFX_99 99 +#define UIGFX_100 100 +#define UIGFX_101 101 +#define UIGFX_102 102 +#define UIGFX_103 103 +#define UIGFX_104 104 +#define UIGFX_105 105 +#define UIGFX_106 106 +#define UIGFX_107 107 +#define UIGFX_108 108 +#define UIGFX_109 109 +#define UIGFX_110 110 +#define UIGFX_111 111 +#define UIGFX_112 112 +#define UIGFX_113 113 +#define UIGFX_114 114 +#define UIGFX_115 115 +#define UIGFX_116 116 +#define UIGFX_117 117 +#define UIGFX_118 118 +#define UIGFX_119 119 +#define UIGFX_120 120 +#define UIGFX_121 121 +#define UIGFX_122 122 +#define UIGFX_123 123 +#define UIGFX_124 124 +#define UIGFX_125 125 +#define UIGFX_126 126 +#define UIGFX_127 127 +#define UIGFX_OPTIONS 128 + +#endif // GUARD_SA1_UI_GRAPHICS_H \ No newline at end of file diff --git a/sa1/include/constants/vram_hardcoded.h b/sa1/include/constants/vram_hardcoded.h new file mode 100644 index 0000000000..5dc56633b4 --- /dev/null +++ b/sa1/include/constants/vram_hardcoded.h @@ -0,0 +1,58 @@ +#ifndef GUARD_VRAM_HARDCODED_H +#define GUARD_VRAM_HARDCODED_H + +#if (GAME == GAME_SA1) +#define VRAM_RESERVED_TO_BE_CONTINUED ((void *)OBJ_VRAM0 + 0x0000) +#define VRAM_RESERVED_STAFF_CREDITS_A ((void *)OBJ_VRAM0 + 0x0400) +#define VRAM_RESERVED_UI_DIGITS_A ((void *)OBJ_VRAM0 + 0x0800) +#define VRAM_RESERVED_STGINTRO_CHAR_NAME ((void *)OBJ_VRAM0 + 0x0800) +#define VRAM_RESERVED_UI_DIGITS_B ((void *)OBJ_VRAM0 + 0x0880) +#define VRAM_RESERVED_UI_DIGITS_C ((void *)OBJ_VRAM0 + 0x0A80) +#define VRAM_RESERVED_UI_DIGITS_D ((void *)OBJ_VRAM0 + 0x0D40) +#define VRAM_RESERVED_STAFF_CREDITS_B ((void *)OBJ_VRAM0 + 0x4000) +#define VRAM_RESERVED_STAFF_CREDITS_C ((void *)OBJ_VRAM0 + 0x6000) +#define VRAM_RESERVED_UI_DIGITS_E ((void *)OBJ_VRAM0 + 0x75E0) +#define VRAM_RESERVED_UI_DIGITS_F ((void *)OBJ_VRAM0 + 0x78A0) +#define VRAM_RESERVED_UI_DIGITS_G ((void *)OBJ_VRAM0 + 0x7BE0) +#define VRAM_RESERVED_DUST_EFFECT_BRAKING ((void *)OBJ_VRAM0 + 0x2100) +#define VRAM_RESERVED_BOSS_EGGMOBILE (void *)(OBJ_VRAM0 + 0x2580) +#define VRAM_RESERVED_BOSS_XTRA_CAPSULE (void *)(OBJ_VRAM0 + 0x2580) +#define VRAM_RESERVED_EN_FIREBALL_SPARK (void *)(OBJ_VRAM0 + 0x2580) +#define VRAM_RESERVED_EN_KIKI_PROJ (void *)(OBJ_VRAM0 + 0x2580) +#define VRAM_RESERVED_EN_MIRROR_PROJ (void *)(OBJ_VRAM0 + 0x2580) +#define VRAM_RESERVED_EN_YUKIMARU_PROJ (void *)(OBJ_VRAM0 + 0x2580) +#define VRAM_RESERVED_EN_PEN_MK1_PROJ (void *)(OBJ_VRAM0 + 0x25A0) +#define VRAM_RESERVED_EN_PEN_MK1_PROJ2 (void *)(OBJ_VRAM0 + 0x2600) +#define VRAM_RESERVED_EN_PEN_MK1_PROJ3 (void *)(OBJ_VRAM0 + 0x2620) +#define VRAM_RESERVED_EN_BUZZER_PROJ (void *)(OBJ_VRAM0 + 0x2600) +#define VRAM_RESERVED_EN_OCT_PROJ (void *)(OBJ_VRAM0 + 0x2600) +#define VRAM_RESERVED_EN_SLOT_PROJ (void *)(OBJ_VRAM0 + 0x2600) +#define VRAM_RESERVED_SPIKES ((void *)OBJ_VRAM0 + 0x1B00) +#define VRAM_RESERVED_EN_GAMIGAMI_PROJ (void *)(OBJ_VRAM0 + 0x2620) +#define VRAM_RESERVED_WATER_SURFACE (void *)(OBJ_VRAM0 + 0x2660) +#define VRAM_RESERVED_TRACK_AIR_CORNER (void *)(OBJ_VRAM0 + 0x2680) +#define VRAM_RESERVED_EN_SLOT_PROJ2 (void *)(OBJ_VRAM0 + 0x2680) +#define RESERVED_INDICATOR_TILES_VRAM (void *)(OBJ_VRAM0 + 0x2500) +#define VRAM_RESERVED_BUBBLES_SMALL (void *)(OBJ_VRAM0 + 0x2A20) +#define VRAM_RESERVED_BUBBLES_GROUP (void *)(OBJ_VRAM0 + 0x2AA0) +#define VRAM_RESERVED_BUMPER_TRI_BIG ((void *)OBJ_VRAM0 + 0x26A0) +#define VRAM_RESERVED_BUMPER_TRI ((void *)OBJ_VRAM0 + 0x2B20) +#define VRAM_RESERVED_BUMPER_TRI_2 ((void *)OBJ_VRAM0 + 0x2CA0) +#define VRAM_RESERVED_BUMPER ((void *)OBJ_VRAM0 + 0x2E20) +#define VRAM_RESERVED_EGGMAN ((void *)OBJ_VRAM0 + 0x2E40) +#define VRAM_RESERVED_BOSS_XTRA_ARM (void *)(OBJ_VRAM0 + 0x2600) +#define VRAM_RESERVED_BOSS_XTRA_BEARING (void *)(OBJ_VRAM0 + 0x2E00) +#define VRAM_RESERVED_BOSS_XTRA_ROCK0 (void *)(OBJ_VRAM0 + 0x2E80) +#define VRAM_RESERVED_FERRIS_WHEEL_HOOK (void *)(OBJ_VRAM0 + 0x3020) +#define VRAM_RESERVED_FERRIS_WHEEL_SEGMENT (void *)(OBJ_VRAM0 + 0x30A0) +#define VRAM_RESERVED_BOSS_XTRA_ROCK1 (void *)(OBJ_VRAM0 + 0x3080) +#define VRAM_RESERVED_BOSS_XTRA_ROCK2 (void *)(OBJ_VRAM0 + 0x3100) +#elif (GAME == GAME_SA2) +#define VRAM_RESERVED_DUST_EFFECT_BRAKING ((void *)OBJ_VRAM0 + 0x2300) +#define RESERVED_INDICATOR_TILES_VRAM (void *)(OBJ_VRAM0 + 0x2700) +#define VRAM_RESERVED_WATER_SURFACE (void *)(OBJ_VRAM0 + 0x2980) +#define VRAM_RESERVED_BUBBLES_SMALL (void *)(OBJ_VRAM0 + 0x2A40) +#define VRAM_RESERVED_BUBBLES_GROUP (void *)(OBJ_VRAM0 + 0x2AC0) +#endif + +#endif // GUARD_VRAM_HARDCODED_H diff --git a/sa1/include/constants/zones.h b/sa1/include/constants/zones.h new file mode 100644 index 0000000000..1c93a6fd07 --- /dev/null +++ b/sa1/include/constants/zones.h @@ -0,0 +1,98 @@ +#ifndef GUARD_ZONES_H +#define GUARD_ZONES_H + +#define ZONE_1 0 +#define ZONE_2 1 +#define ZONE_3 2 +#define ZONE_4 3 +#define ZONE_5 4 +#define ZONE_6 5 +#define ZONE_7 6 +#if (GAME == GAME_SA1) +#define ZONE_FINAL ZONE_7 +#else +#define ZONE_FINAL 7 +#define ZONE_UNUSED 8 +#endif + +#define ACT_1 0 +#define ACT_2 1 +#if (GAME == GAME_SA1) +#define ACT_BOSS ACT_2 +#elif (GAME == GAME_SA2) +#define ACT_BOSS 2 +#define ACT_UNUSED 3 +#elif (GAME == GAME_SA3) +#define ACT_BOSS 7 +#endif + +#if (GAME == GAME_SA1) +#define ACT_X_ZONE ACT_1 +#define ACT_THE_MOON ACT_2 +#define ACT_CHAO_HUNT_A (NUM_LEVEL_IDS_SP + 0) +#define ACT_CHAO_HUNT_B (NUM_LEVEL_IDS_SP + 1) +#define ACT_CHAO_HUNT_C (NUM_LEVEL_IDS_SP + 2) +#define ACT_CHAO_HUNT_D (NUM_LEVEL_IDS_SP + 3) +#elif (GAME == GAME_SA2) +#define ACT_XX_FINAL_ZONE ACT_1 +#define ACT_TRUE_AREA_53 ACT_2 +#endif + +#if (GAME == GAME_SA1) +#define NUM_COURSE_ZONES 7 +#define NUM_ANIMAL_ZONES 6 // # of zones where animals are trapped inside enemies +#define NUM_TIME_ATTACK_ZONES 6 +#define ACTS_PER_ZONE 2 +#define ACT_SLOTS_PER_ZONE (ACTS_PER_ZONE) +#elif (GAME == GAME_SA2) +#define NUM_COURSE_ZONES 7 +#define NUM_ANIMAL_ZONES 7 // # of zones where animals are trapped inside enemies +#define NUM_TIME_ATTACK_ZONES NUM_COURSE_ZONES +#define ACTS_PER_ZONE 3 +#define ACT_SLOTS_PER_ZONE (ACTS_PER_ZONE + 1) +#endif + +#define LEVEL_INDEX(zone, act) ((zone)*ACT_SLOTS_PER_ZONE) + (act) +#define ACT_INDEX(lvl) ((lvl) & (ACT_SLOTS_PER_ZONE - 1)) + +#if (GAME == GAME_SA1) +#define NUM_LEVEL_IDS_SP 14 +#define NUM_LEVEL_IDS_MP 4 +#define NUM_LEVEL_IDS 18 +#elif (GAME == GAME_SA2) +#define NUM_LEVEL_IDS 34 +#endif + +#if (GAME == GAME_SA1) +#define LEVEL_TO_ZONE(level) ((level) >> 1) +#elif (GAME == GAME_SA2) +#define LEVEL_TO_ZONE(level) ((level) >> 2) +#elif (GAME == GAME_SA3) +#define LEVEL_TO_ZONE(level) ((level) / 10u) +#endif +// ((((level) / (ACTS_PER_ZONE + 1)) * 2) | ((level) & 1)) +#define LEVEL_TO_COURSE_INDEX(level) ((((level) / ACT_SLOTS_PER_ZONE) << 0x19 >> 0x18) | ((level)&1)) +#define COURSE_LEVEL_TO_COURSE_INDEX(level) (((level) >> 1) + ((level)&1)) + +#define COURSE_INDEX(zone, act) (LEVEL_TO_COURSE_INDEX(LEVEL_INDEX(zone, act))) + +#define CHAOS_EMERALD(zone) (1 << (zone)) +#define ALL_ZONE_CHAOS_EMERALDS \ + (CHAOS_EMERALD(ZONE_1) | CHAOS_EMERALD(ZONE_2) | CHAOS_EMERALD(ZONE_3) | CHAOS_EMERALD(ZONE_4) | CHAOS_EMERALD(ZONE_5) \ + | CHAOS_EMERALD(ZONE_6) | CHAOS_EMERALD(ZONE_7)) + +#define CHAOS_EMERALDS_COMPLETED CHAOS_EMERALD(7) + +#define IS_BOSS_STAGE(lvl) ((ACT_INDEX(lvl) == ACT_BOSS) || (IS_FINAL_STAGE(lvl) && (gUnknown_030054B0 == 0)) || (IS_EXTRA_STAGE(lvl))) + +#define IS_FINAL_STAGE(lvl) ((lvl) == LEVEL_INDEX(ZONE_FINAL, ACT_X_ZONE)) +#define IS_EXTRA_STAGE(lvl) ((lvl) == LEVEL_INDEX(ZONE_FINAL, ACT_THE_MOON)) +#define IS_FINAL_OR_EXTRA_STAGE(lvl) ((IS_FINAL_STAGE(lvl)) || (IS_EXTRA_STAGE(lvl))) + +#define TIME(minutes, seconds) (int)(((minutes * 60.) + seconds) * GBA_FRAMES_PER_SECOND) +#define TIMER_WARNING_BEGIN (TIME(0, 20)) +#define MAX_COURSE_TIME (TIME(10, 0)) + +#define SPECIAL_STAGE_REQUIRED_SP_RING_COUNT 7 + +#endif // GUARD_ZONES_H diff --git a/sa1/include/core.h b/sa1/include/core.h new file mode 100644 index 0000000000..b4f8e8bcc9 --- /dev/null +++ b/sa1/include/core.h @@ -0,0 +1,385 @@ +#ifndef GUARD_MAIN_H +#define GUARD_MAIN_H + +#if !GEN_CTX +#include // memcpy +#endif + +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "tilemap.h" +#include "input_recorder.h" +#include "data/sprite_data.h" +#include "animation_commands.h" + +struct MultiSioData_0_0 { + // id + u16 unk0; + // value + u8 unk2; + + u8 unk3; + u32 unk4; + u16 unk8[3]; + u8 unkE; + u8 unkF; + u32 unk10; +}; + +struct MultiSioData_0_1 { + // id + u16 unk0; + // value + u8 unk2; + + u8 unk3; + + u16 unk4; + u16 unk6; + + u16 unk8[3]; + u8 unkE; + u8 unkF; + u32 unk10; +}; +struct MultiSioData_0_2 { + // id + u8 unk0; + u8 filler1; + // value + u8 unk2; + + u8 unk3; + + u16 unk4; + u16 unk6; + + u16 unk8[3]; + u8 unkE; + u8 unkF; + u32 unk10; +}; + +struct MultiSioData_0_3 { + // id + u16 unk0; + // value + u8 unk2; + + u8 unk3; + + u16 unk4; + u16 unk6; + + u32 unk8; + u16 unkC; + u8 unkE; + u8 unkF; + u32 unk10; +}; + +struct MultiSioData_0_4 { + // id + u16 unk0; + // value + s16 x; + s16 y; + u16 unk6; + u16 unk8; + u8 unkA; + u8 unkB; + u8 unkC; + u8 unkD; + + // TODO: all values from unkE onwards appear to be 'RoomEvent' types? + // This seems to apply to all 'MultiSioData_X_X' types? + u8 unkE; + u8 numRings; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; +}; + +struct MultiSioData_0_5 { + // id + u16 unk0; + // value + s16 x; + s16 y; + + u8 filler3[0x9]; + u8 sioId; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; +}; + +union MultiSioData { + struct MultiSioData_0_0 pat0; + struct MultiSioData_0_1 pat1; + struct MultiSioData_0_2 pat2; + struct MultiSioData_0_3 pat3; + struct MultiSioData_0_4 pat4; + struct MultiSioData_0_5 pat5; +}; /* size = MULTI_SIO_BLOCK_SIZE */ + +// TODO: Have we defined this somewhere else already? +#define MAP_LAYER_COUNT 2 + +#if (GAME == GAME_SA1) +typedef u16 collPxDim_t; +#else +typedef u32 collPxDim_t; +#endif + +// Thanks @MainMemory_ for figuring out how collision is stored! +typedef struct Collision { + /* 0x00 */ const s8 *height_map; + /* 0x04 */ const u8 *tile_rotation; + /* 0x08 */ const u16 *metatiles; + /* 0x0C */ const MetatileIndexType *map[MAP_LAYER_COUNT]; + /* 0x14 */ const u16 *flags; + /* 0x18 */ u16 levelX, levelY; + /* 0x1C */ collPxDim_t pxWidth, pxHeight; + + // unk20/unk22 are not in SA1 +} Collision; + +struct Unk_03003674_1_Sub { + u16 unk0, unk2, unk4, unk6; + s16 unk8, unkA; +}; /* size = 0xC */ + +struct Unk_03003674_1_Full { + struct Unk_03003674_1_Sub sub; + u32 unkC; +}; /* size = 0x10 */ + +union Unk_03003674_1 { + const struct Unk_03003674_1_Sub *sub; + const struct Unk_03003674_1_Full *full; +}; + +struct Unk_03003674 { + const union Unk_03003674_0 *const *unk0; + const union Unk_03003674_1 *unk4; + const u16 *const *unk8; + const void *unkC; + const void *unk10; + const void *unk14; + const s32 *unk18; +}; /* size = 0x1C */ + +// No idea why this exists when there is a +// better random number generator in the math +// module +#define PseudoRandom32() \ + ({ \ + gPseudoRandom = (gPseudoRandom * 0x196225) + 0x3C6EF35F; \ + gPseudoRandom; \ + }) + +#define MultiplayerPseudoRandom32() \ + ({ \ + gMultiplayerPseudoRandom = (gMultiplayerPseudoRandom * 0x196225) + 0x3C6EF35F; \ + gMultiplayerPseudoRandom; \ + }) +#define PseudoRandBetween(min, max) ((PseudoRandom32() & ((-min) + (max))) + (min)) + +extern u32 gFlags; +extern u32 gFlagsPreVBlank; + +extern u32 gFrameCount; + +#define INTR_INDEX_SIO 0 +#define INTR_INDEX_VBLANK 1 +#define INTR_INDEX_HBLANK 2 +#define INTR_INDEX_VCOUNT 3 +#define INTR_INDEX_TIMER0 4 +#define INTR_INDEX_TIMER1 5 +#define INTR_INDEX_TIMER2 6 +#define INTR_INDEX_DMA0 7 +#define INTR_INDEX_DMA1 8 +#define INTR_INDEX_DMA2 9 +#define INTR_INDEX_DMA3 10 +#define INTR_INDEX_KEYPAD 11 +#define INTR_INDEX_GAMEPAK 12 +extern IntrFunc gIntrTable[16]; +extern IntrFunc const gIntrTableTemplate[14]; +extern u32 gIntrMainBuf[0x80]; + +extern struct Task *gCurTask; +extern struct Task gTasks[MAX_TASK_NUM]; +extern struct Task *gTaskPtrs[MAX_TASK_NUM]; +extern struct Task *gNextTask; +extern struct Task gEmptyTask; +extern s32 gNumTasks; + +extern u16 gInput; +extern u16 gPrevInput; +extern u16 gPhysicalInput; +extern u16 gReleasedKeys; +extern u16 gRepeatedKeys; +extern u16 gPressedKeys; +extern u8 gKeysFirstRepeatIntervals[10]; +extern u8 gRepeatedKeysTestCounter[10]; +extern u8 gKeysContinuedRepeatIntervals[10]; + +extern const u8 *gInputPlaybackData; +extern struct InputRecorder gInputRecorder; +extern u16 *gInputRecorderTapeBuffer; + +extern union MultiSioData gMultiSioSend; +extern union MultiSioData gMultiSioRecv[4]; +extern u32 gMultiSioStatusFlags; +extern bool8 gMultiSioEnabled; + +extern HBlankIntrFunc gHBlankIntrs[4]; +extern HBlankIntrFunc gHBlankCallbacks[4]; +extern u8 gNumHBlankCallbacks; +extern u8 gNumHBlankIntrs; + +extern void *gVramHeapStartAddr; +extern u16 gVramHeapMaxTileSlots; +extern u16 gVramHeapState[256]; + +extern bool8 gExecSoundMain; + +extern u16 gDispCnt; + +#define WINREG_WIN0H 0 +#define WINREG_WIN1H 1 +#define WINREG_WIN0V 2 +#define WINREG_WIN1V 3 +#define WINREG_WININ 4 +#define WINREG_WINOUT 5 + +// TODO: Use these everywhere in SA1! +#define PALETTE_LEN_4BPP 16u +#define GET_PALETTE_COLOR_OBJ(_paletteId, _colorId) gObjPalette[(_paletteId)*PALETTE_LEN_4BPP + (_colorId)] +#define GET_PALETTE_COLOR_BG(_paletteId, _colorId) gBgPalette[(_paletteId)*PALETTE_LEN_4BPP + (_colorId)] +#define SET_PALETTE_COLOR_OBJ(_paletteId, _colorId, _color) GET_PALETTE_COLOR_OBJ(_paletteId, _colorId) = (_color); +#define SET_PALETTE_COLOR_BG(_paletteId, _colorId, _color) GET_PALETTE_COLOR_BG(_paletteId, _colorId) = (_color); + +extern winreg_t gWinRegs[6]; +extern struct BlendRegs gBldRegs; +extern BgAffineReg gBgAffineRegs[NUM_AFFINE_BACKGROUNDS]; +extern u16 gObjPalette[OBJ_PLTT_SIZE / sizeof(u16)]; +extern u16 gBgPalette[BG_PLTT_SIZE / sizeof(u16)]; +extern u16 gBgCntRegs[4]; + +// TODO: Turn this into a struct-array? +// [4]{s16 x, s16 y} +extern s16 gBgScrollRegs[NUM_BACKGROUNDS][2]; + +extern OamData gOamMallocBuffer[OAM_ENTRY_COUNT]; +extern OamData gOamBuffer[OAM_ENTRY_COUNT]; + +// NOTE(Jace): This could be u16[2][DISPLAY_HEIGHT][2] (or unsigned Vec2_16?) +extern int_vcount gBgOffsetsBuffer[2][DISPLAY_HEIGHT][4]; +extern Background *gBackgroundsCopyQueue[16]; + +// This is used to buffer the xy-shift for each background scanline +extern void *gBgOffsetsHBlankPrimary; + +extern u16 SA2_LABEL(gUnknown_030017F0); +extern Vec2_16 gSpriteOffset; +extern u8 gOamMallocOrders_StartIndex[32]; +extern IntrFunc gVBlankCallbacks[4]; + +extern u8 gOamFreeIndex; +extern u16 SA2_LABEL(gUnknown_03001944); +extern u8 gNumVBlankIntrs; +extern s16 SA2_LABEL(gUnknown_0300194C); + +extern Tilemap **gTilemapsRef; +extern u8 gBgSprites_Unknown2[4][4]; +extern u8 gBgSprites_Unknown1[16]; + +#define LOG_GRAPHICS_QUEUE !TRUE +#if (!PLATFORM_GBA && LOG_GRAPHICS_QUEUE) +#define GFX_QUEUE_LOG_ADD(gfx) \ + printf("GFX %d: src 0x%p, dst 0x%p, size 0x%04X\n", gVramGraphicsCopyQueueIndex, (gfx)->src, \ + (void *)((intptr_t)(gfx)->dest - (intptr_t)VRAM), (gfx)->size); +#else +#define GFX_QUEUE_LOG_ADD(gfx) +#endif +extern struct GraphicsData *gVramGraphicsCopyQueue[32]; +extern u8 gVramGraphicsCopyQueueIndex; +// Because the graphics in the queue only get copied if +// (gVramGraphicsCopyCursor != gVramGraphicsCopyQueueIndex), +// just making them equal will pause the queue. +#define PAUSE_GRAPHICS_QUEUE() gVramGraphicsCopyCursor = gVramGraphicsCopyQueueIndex; + +#define INC_GRAPHICS_QUEUE_CURSOR(cursor) cursor = (cursor + 1) % ARRAY_COUNT(gVramGraphicsCopyQueue); + +#if PORTABLE +// On the GBA we use a fixed heap to allocate memory +// but on other OS's we malloc and free memory which +// the graphics queue may be referring to. Instead we +// make a separate copy of the graphics queue with the +// pointers we need to copy so that a race condition +// happens where sprite has been freed but the copy +// has not happened we don't get invalid memory access +extern struct GraphicsData gVramGraphicsCopyQueueBuffer[32]; +#define ADD_TO_GRAPHICS_QUEUE(gfx) \ + memcpy(&gVramGraphicsCopyQueueBuffer[gVramGraphicsCopyQueueIndex], gfx, sizeof(struct GraphicsData)); \ + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = &gVramGraphicsCopyQueueBuffer[gVramGraphicsCopyQueueIndex]; \ + /* Log has to happen before gVramGraphicsCopyQueueIndex increment */ \ + GFX_QUEUE_LOG_ADD(gfx) \ + INC_GRAPHICS_QUEUE_CURSOR(gVramGraphicsCopyQueueIndex); +#else +#define ADD_TO_GRAPHICS_QUEUE(gfx) \ + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; \ + /* Log has to happen before gVramGraphicsCopyQueueIndex increment */ \ + GFX_QUEUE_LOG_ADD(gfx) \ + INC_GRAPHICS_QUEUE_CURSOR(gVramGraphicsCopyQueueIndex); +#endif + +#define PAUSE_BACKGROUNDS_QUEUE() gBackgroundsCopyQueueCursor = gBackgroundsCopyQueueIndex; + +#define INC_BACKGROUNDS_QUEUE_CURSOR(cursor) cursor = (cursor + 1) % ARRAY_COUNT(gBackgroundsCopyQueue); + +#define ADD_TO_BACKGROUNDS_QUEUE(_bg) \ + gBackgroundsCopyQueue[gBackgroundsCopyQueueIndex] = _bg; \ + INC_BACKGROUNDS_QUEUE_CURSOR(gBackgroundsCopyQueueIndex); + +extern void *gBgOffsetsHBlankSecondary; +extern void *sa2__gUnknown_030022C0; +#if (GAME == GAME_SA2) +extern s16 gMosaicReg; +extern u8 gUnknown_030026F4; +#endif +extern s16 SA2_LABEL(gUnknown_03002820); +extern u8 gVCountSetting; +extern void *gHBlankCopyTarget; +extern u8 gBackgroundsCopyQueueIndex; +extern u8 gHBlankCopySize; +extern u16 SA2_LABEL(gUnknown_03002A8C); +//// When paused, the previously-active OAM elements get moved to the end +//// of the OAM. This is the index of the first currently-inactive element +extern u8 gOamFirstPausedIndex; +extern u8 gBackgroundsCopyQueueCursor; +extern Sprite *gBgSprites[16]; +extern u8 gNumVBlankCallbacks; +extern void *gBgOffsetsPrimary; +extern u16 SA2_LABEL(gUnknown_03004D58); +extern u8 gVramGraphicsCopyCursor; +extern u8 gOamMallocOrders_EndIndex[0x20]; +extern u8 gBgSpritesCount; +extern u16 SA2_LABEL(gUnknown_03005394); +extern u16 SA2_LABEL(gUnknown_03005398); +extern IntrFunc gVBlankIntrs[4]; +extern s32 gPseudoRandom; +extern u8 gOamMallocCopiedOrder[128]; +extern struct MultiBootParam gMultiBootParam; + +extern const struct SpriteTables *gRefSpriteTables; + +void EngineInit(void); +void EngineMainLoop(void); + +#endif diff --git a/sa1/include/data/recordings.h b/sa1/include/data/recordings.h new file mode 100644 index 0000000000..0cd6aa2d4b --- /dev/null +++ b/sa1/include/data/recordings.h @@ -0,0 +1,8 @@ +#ifndef GUARD_RECORDINGS_H +#define GUARD_RECORDINGS_H + +// Has to be extern or compiler complains about alignment? Bit +// confused +extern const u8 *const gDemoRecordings[]; + +#endif // GUARD_RECORDINGS_H diff --git a/sa1/include/data/sprite_data.h b/sa1/include/data/sprite_data.h new file mode 100644 index 0000000000..7a259c61e8 --- /dev/null +++ b/sa1/include/data/sprite_data.h @@ -0,0 +1,26 @@ +#ifndef GUARD_DATA_ANIMATIONS_H +#define GUARD_DATA_ANIMATIONS_H + +#include "gba/types.h" +#include "animation_commands.h" +#include "sprite.h" + +#define NUM_SPRITE_ANIMATIONS 908 + +extern s32 **const gAnimations[NUM_SPRITE_ANIMATIONS]; +extern const SpriteOffset *const gSpriteDimensions[NUM_SPRITE_ANIMATIONS]; +extern const OamDataShort *const gSpriteOamData[NUM_SPRITE_ANIMATIONS]; +extern const u16 gSpritePalettes[]; + +struct SpriteTables { + /* 0x00 */ const ACmd **const *animations; + /* 0x04 */ const SpriteOffset *const *dimensions; + /* 0x08 */ const u16 **const oamData; + /* 0x0C */ const u16 *const palettes; + /* 0x10 */ const u8 *const tiles_4bpp; + /* 0x14 */ const u8 *const tiles_8bpp; +}; + +extern const struct SpriteTables *gRefSpriteTables; + +#endif \ No newline at end of file diff --git a/sa1/include/data/sprite_tables.h b/sa1/include/data/sprite_tables.h new file mode 100644 index 0000000000..55660e6f59 --- /dev/null +++ b/sa1/include/data/sprite_tables.h @@ -0,0 +1,8 @@ +#ifndef GUARD_SPRITE_TABLES_H +#define GUARD_SPRITE_TABLES_H + +#include "core.h" + +extern const struct SpriteTables gSpriteTables; + +#endif diff --git a/sa1/include/data/tileset_debug_ascii.h b/sa1/include/data/tileset_debug_ascii.h new file mode 100644 index 0000000000..711332dc34 --- /dev/null +++ b/sa1/include/data/tileset_debug_ascii.h @@ -0,0 +1,8 @@ +#ifndef GUARD_TILESET_DEBUG_ASCII_H +#define GUARD_TILESET_DEBUG_ASCII_H + +#include "gba/types.h" + +extern const u8 Tileset_DebugAscii[]; + +#endif // GUARD_TILESET_DEBUG_ASCII_H diff --git a/sa1/include/data/ui_graphics.h b/sa1/include/data/ui_graphics.h new file mode 100644 index 0000000000..e425f88202 --- /dev/null +++ b/sa1/include/data/ui_graphics.h @@ -0,0 +1,219 @@ +#ifndef SA1_UI_GRAPHICS_H +#define SA1_UI_GRAPHICS_H +#include "global.h" + +#include "constants/ui_graphics.h" + +/* This file was created using './scripts/extract_ui_graphics_data.py'. + If you want to change a name or some other property, + please change it in there and run the script again, + so that they are adjusted in all auto-generated files! */ + +typedef struct UiGraphics { + const u8 *tiles; + const u16 *palette; + s32 unk8; + s32 unkC; + s32 unk10; + s32 unk14; + s32 unk18; +} UiGraphics; + +extern const UiGraphics gUiGraphics[]; + +extern const u8 gUiGraphicsAsciiChars[]; +extern const u16 gUiPaletteAsciiChars[]; + +extern const u8 gUiGraphics1UpIconSonic[]; +extern const u16 gUiPalette1UpIconSonic[]; + +extern const u8 gUiGraphics1UpIconTails[]; +extern const u16 gUiPalette1UpIconTails[]; + +extern const u8 gUiGraphics1UpIconKnuckles[]; +extern const u16 gUiPalette1UpIconKnuckles[]; + +extern const u8 gUiGraphics1UpIconAmy[]; +extern const u16 gUiPalette1UpIconAmy[]; + +extern const u8 gUiGraphicsHudRing[]; +extern const u16 gUiPaletteHudRing[]; + +extern const u8 gUiGraphicsStageIntroSonic[]; +extern const u16 gUiPaletteStageIntroSonic[]; + +extern const u8 gUiGraphicsStageIntroTails[]; +extern const u16 gUiPaletteStageIntroTails[]; + +extern const u8 gUiGraphicsStageIntroKnuckles[]; +extern const u16 gUiPaletteStageIntroKnuckles[]; + +extern const u8 gUiGraphicsStageIntroAmy[]; +extern const u16 gUiPaletteStageIntroAmy[]; + +extern const u8 gUiGraphicsStageIntrochar_names[]; +extern const u16 gUiPaletteStageIntrochar_names[]; + +extern const u8 gUiGraphicsStageResultSonic[]; +extern const u16 gUiPaletteStageResultSonic[]; + +extern const u8 gUiGraphicsStageResultTails[]; +extern const u16 gUiPaletteStageResultTails[]; + +extern const u8 gUiGraphicsStageResultKnuckles[]; +extern const u16 gUiPaletteStageResultKnuckles[]; + +extern const u8 gUiGraphicsStageResultAmy[]; +extern const u16 gUiPaletteStageResultAmy[]; + +extern const u8 gUiGraphicsStageResultAct12[]; +extern const u16 gUiPaletteStageResultAct12[]; + +extern const u8 gUiGraphicsStageResultHeadlineBack[]; +extern const u16 gUiPaletteStageResultHeadlineBack[]; + +extern const u8 gUiGraphicsStageNamesJapanese0[]; +extern const u16 gUiPaletteStageNamesJapanese0[]; + +extern const u8 gUiGraphicsStageNamesJapanese1[]; +extern const u16 gUiPaletteStageNamesJapanese1[]; + +extern const u8 gUiGraphicsStageNameNeoGreenHillZone[]; +extern const u16 gUiPaletteStageNameNeoGreenHillZone[]; + +extern const u8 gUiGraphicsStageNameSecretBaseZone[]; +extern const u16 gUiPaletteStageNameSecretBaseZone[]; + +extern const u8 gUiGraphicsStageNameCasinoParadiseZone[]; +extern const u16 gUiPaletteStageNameCasinoParadiseZone[]; + +extern const u8 gUiGraphicsStageNameIceMountainZone[]; +extern const u16 gUiPaletteStageNameIceMountainZone[]; + +extern const u8 gUiGraphicsStageNameAngelIslandZone[]; +extern const u16 gUiPaletteStageNameAngelIslandZone[]; + +extern const u8 gUiGraphicsStageNameEggRocketZone[]; +extern const u16 gUiPaletteStageNameEggRocketZone[]; + +extern const u8 gUiGraphicsStageNameCosmicAngelZone[]; +extern const u16 gUiPaletteStageNameCosmicAngelZone[]; + +extern const u8 gUiGraphicsStageNameXZone[]; +extern const u16 gUiPaletteStageNameXZone[]; + +extern const u8 gUiGraphicsStageNameTheMoonZone[]; +extern const u16 gUiPaletteStageNameTheMoonZone[]; + +extern const u8 gUiGraphicsStageNameForestChaoGarden[]; +extern const u16 gUiPaletteStageNameForestChaoGarden[]; + +extern const u8 gUiGraphicsStageNameFactoryChaoGarden[]; +extern const u16 gUiPaletteStageNameFactoryChaoGarden[]; + +extern const u8 gUiGraphicsStageNamePinballChaoGarden[]; +extern const u16 gUiPaletteStageNamePinballChaoGarden[]; + +extern const u8 gUiGraphicsStageNameSpaceChaoGarden[]; +extern const u16 gUiPaletteStageNameSpaceChaoGarden[]; + +extern const u8 gUiGraphicsTimerDigits[]; +extern const u16 gUiPaletteTimerDigits[]; + +extern const u8 gUiGraphicsOK[]; +extern const u16 gUiPaletteOK[]; + +extern const u8 gUiGraphicsGotThroughTexts[]; +extern const u16 gUiPaletteGotThroughTexts[]; + +extern const u8 gUiGraphicsOverlayEnterName[]; +extern const u16 gUiPaletteOverlayEnterName[]; + +extern const u8 gUiGraphicsOverlayCharacters[]; +extern const u16 gUiPaletteOverlayCharacters[]; + +extern const u8 gUiGraphicsOverlayRedCorner[]; +extern const u16 gUiPaletteOverlayRedCorner[]; + +extern const u8 gUiGraphicsOverlayCursors[]; +extern const u16 gUiPaletteOverlayCursors[]; + +extern const u8 gUiGraphicsCharSelectZigZag[]; +extern const u16 gUiPaletteCharSelectZigZag[]; + +extern const u8 gUiGraphicsCharSelectArrow[]; +extern const u16 gUiPaletteCharSelectArrow[]; + +extern const u8 gUiGraphicsCharSelectNames[]; +extern const u16 gUiPaletteCharSelectNames[]; + +extern const u8 gUiGraphicsCharSelectSelectACharacter[]; +extern const u16 gUiPaletteCharSelectSelectACharacter[]; + +extern const u8 gUiGraphicsCharSelectBlackBox[]; +extern const u16 gUiPaletteCharSelectBlackBox[]; + +extern const u8 gUiGraphicsCharSelectOK[]; +extern const u16 gUiPaletteCharSelectOK[]; + +extern const u8 gUiGraphicsCharSelectBlackBox2[]; +extern const u16 gUiPaletteCharSelectBlackBox2[]; + +extern const u8 gUiGraphicsSpecialStage46[]; +extern const u16 gUiPaletteSpecialStage46[]; + +extern const u8 gUiGraphicsSpecialStageTextGotRings0[]; +extern const u16 gUiPaletteSpecialStageTextGotRings0[]; + +extern const u8 gUiGraphicsSpecialStageTextGotRings1[]; +extern const u16 gUiPaletteSpecialStageTextGotRings1[]; + +extern const u8 gUiGraphicsSpecialStageTextGotRings2[]; +extern const u16 gUiPaletteSpecialStageTextGotRings2[]; + +extern const u8 gUiGraphicsSpecialStageTextStart[]; +extern const u16 gUiPaletteSpecialStageTextStart[]; + +extern const u8 gUiGraphicsSpecialStageTextGotAChaosEmerald[]; +extern const u16 gUiPaletteSpecialStageTextGotAChaosEmerald[]; + +extern const u8 gUiGraphicsSpecialStageTextSpecialStage[]; +extern const u16 gUiPaletteSpecialStageTextSpecialStage[]; + +extern const u8 gUiGraphicsSpecialStage53[]; +extern const u16 gUiPaletteSpecialStage53[]; + +extern const u8 gUiGraphicsSpecialStageChaosEmerald[]; +extern const u16 gUiPaletteSpecialStageChaosEmerald[]; + +extern const u8 gUiGraphicsTransparent0[]; +extern const u16 gUiPaletteTransparent0[]; + +extern const u8 gUiGraphicsTransparent1[]; +extern const u16 gUiPaletteTransparent1[]; + +extern const u8 gUiGraphicsTransparent2[]; +extern const u16 gUiPaletteTransparent2[]; + +extern const u8 gUiGraphicsTransparent3[]; +extern const u16 gUiPaletteTransparent3[]; + +extern const u8 gUiGraphicsTransparent4[]; +extern const u16 gUiPaletteTransparent4[]; + +extern const u8 gUiGraphicsTransparent5[]; +extern const u16 gUiPaletteTransparent5[]; + +extern const u8 gUiGraphicsSoundTestBackground[]; +extern const u16 gUiPaletteSoundTestBackground[]; + +extern const u8 gUiGraphicsSoundTestBox2[]; +extern const u16 gUiPaletteSoundTestBox2[]; + +extern const u8 gUiGraphicsSoundTestBox3[]; +extern const u16 gUiPaletteSoundTestBox3[]; + +extern const u8 gUiGraphicsSoundTestBox4[]; +extern const u16 gUiPaletteSoundTestBox4[]; + +#endif // SA1_UI_GRAPHICS_H diff --git a/sa1/include/flags.h b/sa1/include/flags.h new file mode 100644 index 0000000000..8d1f0b3568 --- /dev/null +++ b/sa1/include/flags.h @@ -0,0 +1,25 @@ +#ifndef GUARD_FLAGS_H +#define GUARD_FLAGS_H + +#include "global.h" + +// used by 'animCmd_GetPalette_COPY' (0x08004314 in SA2) +#define FLAGS_UPDATE_BACKGROUND_PALETTES 0x1 +#define FLAGS_UPDATE_SPRITE_PALETTES 0x2 +#define FLAGS_EXECUTE_HBLANK_COPY 0x4 +#define FLAGS_EXECUTE_HBLANK_CALLBACKS 0x8 +#define FLAGS_EXECUTE_VBLANK_CALLBACKS 0x10 +#define FLAGS_20 0x20 +#define FLAGS_40 0x40 +#define FLAGS_80 0x80 +#define FLAGS_NO_FLASH_MEMORY 0x100 +#define FLAGS_200 0x200 +#define FLAGS_PAUSE_GAME 0x400 +#define FLAGS_800 0x800 +#define FLAGS_SKIP_INTRO 0x1000 +#define FLAGS_4000 0x4000 +#define FLAGS_8000 0x8000 + +extern u32 gFlags; + +#endif diff --git a/sa1/include/game/amy_attack_heart_effect.h b/sa1/include/game/amy_attack_heart_effect.h new file mode 100644 index 0000000000..6284a01fca --- /dev/null +++ b/sa1/include/game/amy_attack_heart_effect.h @@ -0,0 +1,17 @@ +#ifndef GUARD_AMY_ATTACK_HEART_EFFECT_H +#define GUARD_AMY_ATTACK_HEART_EFFECT_H + +#define AMY_ATTACK_HEART_SPRITE_COUNT 4 +#define AMY_HEART_PATTERN_HAMMER_ATTACK 0 +#define AMY_HEART_PATTERN_B 1 +#define AMY_HEART_PATTERN_C 2 +#define AMY_HEART_PATTERN_STOP_N_SLAM 3 +#define AMY_HEART_PATTERN_COUNT 4 + +#if (GAME == GAME_SA1) +extern void CreateAmyAttackHeartEffect(void); +#elif (GAME == GAME_SA2) +extern void CreateAmyAttackHeartEffect(u16 kind); +#endif + +#endif diff --git a/sa1/include/game/assets/compressed/entities.h b/sa1/include/game/assets/compressed/entities.h new file mode 100644 index 0000000000..ded549b7cd --- /dev/null +++ b/sa1/include/game/assets/compressed/entities.h @@ -0,0 +1,125 @@ +#ifndef GUARD_DATA_ENTITIES_H +#define GUARD_DATA_ENTITIES_H +#include "global.h" + +extern const u8 zone1_act1_rings[]; +extern const u8 zone1_act1_enemies[]; +extern const u8 zone1_act1_itemboxes[]; +extern const u8 zone1_act1_interactables[]; + +extern const u8 zone1_act2_rings[]; +extern const u8 zone1_act2_enemies[]; +extern const u8 zone1_act2_itemboxes[]; +extern const u8 zone1_act2_interactables[]; + +extern const u8 zone1_boss_rings[]; +extern const u8 zone1_boss_enemies[]; +extern const u8 zone1_boss_itemboxes[]; +extern const u8 zone1_boss_interactables[]; + +extern const u8 zone2_act1_rings[]; +extern const u8 zone2_act1_enemies[]; +extern const u8 zone2_act1_itemboxes[]; +extern const u8 zone2_act1_interactables[]; + +extern const u8 zone2_act2_rings[]; +extern const u8 zone2_act2_enemies[]; +extern const u8 zone2_act2_itemboxes[]; +extern const u8 zone2_act2_interactables[]; + +extern const u8 zone2_boss_rings[]; +extern const u8 zone2_boss_enemies[]; +extern const u8 zone2_boss_itemboxes[]; +extern const u8 zone2_boss_interactables[]; + +extern const u8 zone3_act1_rings[]; +extern const u8 zone3_act1_enemies[]; +extern const u8 zone3_act1_itemboxes[]; +extern const u8 zone3_act1_interactables[]; + +extern const u8 zone3_act2_rings[]; +extern const u8 zone3_act2_enemies[]; +extern const u8 zone3_act2_itemboxes[]; +extern const u8 zone3_act2_interactables[]; + +extern const u8 zone3_boss_rings[]; +extern const u8 zone3_boss_enemies[]; +extern const u8 zone3_boss_itemboxes[]; +extern const u8 zone3_boss_interactables[]; + +extern const u8 zone4_act1_rings[]; +extern const u8 zone4_act1_enemies[]; +extern const u8 zone4_act1_itemboxes[]; +extern const u8 zone4_act1_interactables[]; + +extern const u8 zone4_act2_rings[]; +extern const u8 zone4_act2_enemies[]; +extern const u8 zone4_act2_itemboxes[]; +extern const u8 zone4_act2_interactables[]; + +extern const u8 zone4_boss_rings[]; +extern const u8 zone4_boss_enemies[]; +extern const u8 zone4_boss_itemboxes[]; +extern const u8 zone4_boss_interactables[]; + +extern const u8 zone5_act1_rings[]; +extern const u8 zone5_act1_enemies[]; +extern const u8 zone5_act1_itemboxes[]; +extern const u8 zone5_act1_interactables[]; + +extern const u8 zone5_act2_rings[]; +extern const u8 zone5_act2_enemies[]; +extern const u8 zone5_act2_itemboxes[]; +extern const u8 zone5_act2_interactables[]; + +extern const u8 zone5_boss_rings[]; +extern const u8 zone5_boss_enemies[]; +extern const u8 zone5_boss_itemboxes[]; +extern const u8 zone5_boss_interactables[]; + +extern const u8 zone6_act1_rings[]; +extern const u8 zone6_act1_enemies[]; +extern const u8 zone6_act1_itemboxes[]; +extern const u8 zone6_act1_interactables[]; + +extern const u8 zone6_act2_rings[]; +extern const u8 zone6_act2_enemies[]; +extern const u8 zone6_act2_itemboxes[]; +extern const u8 zone6_act2_interactables[]; + +extern const u8 zone6_boss_rings[]; +extern const u8 zone6_boss_enemies[]; +extern const u8 zone6_boss_itemboxes[]; +extern const u8 zone6_boss_interactables[]; + +extern const u8 zone7_act1_rings[]; +extern const u8 zone7_act1_enemies[]; +extern const u8 zone7_act1_itemboxes[]; +extern const u8 zone7_act1_interactables[]; + +extern const u8 zone7_act2_rings[]; +extern const u8 zone7_act2_enemies[]; +extern const u8 zone7_act2_itemboxes[]; +extern const u8 zone7_act2_interactables[]; + +extern const u8 zone7_boss_rings[]; +extern const u8 zone7_boss_enemies[]; +extern const u8 zone7_boss_itemboxes[]; +extern const u8 zone7_boss_interactables[]; + +extern const u8 zone8_act1_rings[]; +extern const u8 zone8_act1_enemies[]; +extern const u8 zone8_act1_itemboxes[]; +extern const u8 zone8_act1_interactables[]; + +extern const u8 zone8_act2_rings[]; +extern const u8 zone8_act2_enemies[]; +extern const u8 zone8_act2_itemboxes[]; +extern const u8 zone8_act2_interactables[]; + +extern const u8 zone8_boss_rings[]; +extern const u8 zone8_boss_enemies[]; +extern const u8 zone8_boss_itemboxes[]; +extern const u8 zone8_boss_interactables[]; + +#endif // GUARD_DATA_ENTITIES_H diff --git a/sa1/include/game/assets/compressed/roms.h b/sa1/include/game/assets/compressed/roms.h new file mode 100644 index 0000000000..b001706b25 --- /dev/null +++ b/sa1/include/game/assets/compressed/roms.h @@ -0,0 +1,8 @@ +#ifndef GUARD_COMPRESSED_ROMS_H +#define GUARD_COMPRESSED_ROMS_H + +#include "global.h" + +extern const u8 gMultiBootProgram_TinyChaoGarden[]; + +#endif // GUARD_COMPRESSED_ROMS_H diff --git a/sa1/include/game/character_select.h b/sa1/include/game/character_select.h new file mode 100644 index 0000000000..7fa79550f8 --- /dev/null +++ b/sa1/include/game/character_select.h @@ -0,0 +1,12 @@ +#ifndef GUARD_CHARACTER_SELECT_H +#define GUARD_CHARACTER_SELECT_H + +#include "global.h" + +#if (GAME == GAME_SA1) +void CreateCharacterSelectionScreen(u8 selectedCharacter); +#elif (GAME == GAME_SA2) +void CreateCharacterSelectionScreen(u8 selectedCharacter, bool8 allUnlocked); +#endif + +#endif // GUARD_CHARACTER_SELECT_H diff --git a/sa1/include/game/collect_chaos_emeralds_msg.h b/sa1/include/game/collect_chaos_emeralds_msg.h new file mode 100644 index 0000000000..2bedbe1f4a --- /dev/null +++ b/sa1/include/game/collect_chaos_emeralds_msg.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SA1_COLLECT_CHAOS_EMERALDS_H +#define GUARD_SA1_COLLECT_CHAOS_EMERALDS_H + +void CreateGetAllChaosEmeraldsMessage(void); + +#endif // GUARD_SA1_COLLECT_CHAOS_EMERALDS_H \ No newline at end of file diff --git a/sa1/include/game/course_select.h b/sa1/include/game/course_select.h new file mode 100644 index 0000000000..06319e6d5b --- /dev/null +++ b/sa1/include/game/course_select.h @@ -0,0 +1,19 @@ +#ifndef GUARD_COURSE_SELECT_H +#define GUARD_COURSE_SELECT_H + +#include "global.h" + +#if (GAME == GAME_SA1) + +void CreateCourseSelect(u8 param0); + +#elif (GAME == GAME_SA2) +// CreateCourseSelectionScreen +void CreateCourseSelectionScreen(u8 currentLevel, u8 maxLevel, u8 cutScenes); + +#define COURSE_SELECT_CUT_SCENE_NONE 0 +#define CUT_SCENE_UNLOCK_NEXT_COURSE 1 +#define CUT_SCENE_UNLOCK_TRUE_AREA_53 2 +#endif + +#endif diff --git a/sa1/include/game/credits.h b/sa1/include/game/credits.h new file mode 100644 index 0000000000..a92c067c65 --- /dev/null +++ b/sa1/include/game/credits.h @@ -0,0 +1,18 @@ +#ifndef GUARD_SA1_CREDITS_H +#define GUARD_SA1_CREDITS_H + +typedef struct CreditsString { + unsigned char length; + unsigned char unk1; + signed char unk2; + char name[25 + 1]; + char padding[3]; +} CreditsString; + +extern void CreateStaffCredits(); +extern void CreateCongratulationsAnimation(); + +#define NUM_ENTRIES 334 +extern const CreditsString sCreditsEntries[NUM_ENTRIES]; + +#endif // GUARD_SA1_CREDITS_H diff --git a/sa1/include/game/dummy_task.h b/sa1/include/game/dummy_task.h new file mode 100644 index 0000000000..82c17c268c --- /dev/null +++ b/sa1/include/game/dummy_task.h @@ -0,0 +1,11 @@ +#ifndef GUARD_DUMMY_TASK_H +#define GUARD_DUMMY_TASK_H + +#include "global.h" + +void CreateDummyTask(void); + +// Some sort of unused task variable +extern struct Task *gDummyTask; + +#endif diff --git a/sa1/include/game/egg_rocket_transitions.h b/sa1/include/game/egg_rocket_transitions.h new file mode 100644 index 0000000000..31f0138855 --- /dev/null +++ b/sa1/include/game/egg_rocket_transitions.h @@ -0,0 +1,9 @@ +#ifndef GUARD_EGG_ROCKET_TRANSITIONS_H +#define GUARD_EGG_ROCKET_TRANSITIONS_H + +#include "game/sa1_sa2_shared/camera.h" // for CamCoord + +void CreateEggRocketLaunchScreenShakeEffect(void); +void CreateEggRocketStageSeparation(CamCoord worldY); + +#endif // GUARD_EGG_ROCKET_TRANSITIONS_H \ No newline at end of file diff --git a/sa1/include/game/enemies/boss_xtra_super_egg_robo.h b/sa1/include/game/enemies/boss_xtra_super_egg_robo.h new file mode 100644 index 0000000000..6de2787ea9 --- /dev/null +++ b/sa1/include/game/enemies/boss_xtra_super_egg_robo.h @@ -0,0 +1,69 @@ +#ifndef GUARD_ENEMY_BOSS_SUPER_EGG_ROBO_H +#define GUARD_ENEMY_BOSS_SUPER_EGG_ROBO_H + +#include "sprite.h" +#include "game/entity.h" +#include "game/some_task_manager.h" + +/* Used in SuperEggRobo.unk58 */ +#define SER_FLAG__2 0x2 +#define SER_FLAG__80 0x80 +#define SER_FLAG__400000 0x400000 + +#define SER_NUM_PARTS 18 + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite unusedSprite; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s32 qUnk48; + /* 0x4C */ s16 qUnk4C; + /* 0x4E */ s16 qUnk4E; + /* 0x50 */ s16 qUnk50; + /* 0x52 */ s16 qUnk52; + /* 0x54 */ s16 qUnk54; + /* 0x54 */ s16 qUnk56; + /* 0x58 */ u32 flags58; + /* 0x58 */ s32 unk5C; + /* 0x58 */ s32 unk60; + /* 0x58 */ s32 qUnk64; + /* 0x6F */ s8 unk68; + /* 0x6F */ s8 unk69; + /* 0x6F */ s8 unk6A; + /* 0x6F */ s8 unk6B; + /* 0x5C */ s16 unk6C; + /* 0x6F */ s8 unk6E; + /* 0x6F */ s8 unk6F; +} SuperEggRobo; /* 0x70 */ + +typedef struct ExtraBossTaskData { + SuperEggRobo *boss; + SomeTaskManager_7C *parts[SER_NUM_PARTS]; +} ExtraBossTaskData; + +extern ExtraBossTaskData gExtraBossTaskData; + +#define CAPSULE_STATE__CAPTURED +1 +#define CAPSULE_STATE__MOVING 0 +#define CAPSULE_STATE__DESTROYED -1 + +typedef s32 CapsuleState; + +typedef struct { + /* 0x00 */ s8 pid; + /* 0x04 */ u32 unk4; // TODO: Check the type! +} player_0_Task; /* size: 0x8 */ + +typedef struct { + /* 0x00 */ player_0_Task unk0; + /* 0x08 */ s32 unk8; // counter of some kind + /* 0x0C */ s32 qXs[16]; + /* 0x0C */ s32 qYs[16]; +} MaybeSuperSonic; /* size: 0x8C */ + +s32 ExtraBoss__CapsuleGetCaptureState(SomeTaskManager_7C *mgr, Sprite *s, SuperEggRobo *extraBoss, Player *p); + +#define EXTRA_BOSS__INITIAL_RING_COUNT 50 + +#endif // GUARD_ENEMY_BOSS_SUPER_EGG_ROBO_H \ No newline at end of file diff --git a/sa1/include/game/enemies/bosses_shared.h b/sa1/include/game/enemies/bosses_shared.h new file mode 100644 index 0000000000..607b626354 --- /dev/null +++ b/sa1/include/game/enemies/bosses_shared.h @@ -0,0 +1,25 @@ +#ifndef GUARD_SA1_BOSSES_SHARED_H +#define GUARD_SA1_BOSSES_SHARED_H + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ SpriteTransform transform; + /* 0x3C */ s16 unk3C; + /* 0x3E */ s16 unk3E; + /* 0x48 */ u16 unk40; + /* 0x48 */ s16 unk42; + /* 0x44 */ s16 qUnk44; + /* 0x46 */ s16 qUnk46; + /* 0x48 */ s16 unk48; +} Strc_sub_80168F0; /* 0x4C */ + +void CreateBossCapsule(s16, s16); + +void CreatePostBossEggMobile(CamCoord worldX, CamCoord worldY); + +struct Task *sub_80168F0(CamCoord worldX, CamCoord worldY, u16 numTiles, AnimId anim, u8 variant); // -> Strc_sub_80168F0 +struct Task *Bosses_SetCamBounds(CamCoord minY, CamCoord maxY, CamCoord minX, CamCoord maxX); +struct Task *CreatePreBossCameraPan(s16 yMin, s16 yMax); +struct Task *sub_8017540(s32 param0, s32 param1); // -> NutsAndBolts +struct Task *sub_8016D80(CamCoord worldX, CamCoord worldY, AnimId anim, u8 variant); +#endif // GUARD_SA1_BOSSES_SHARED_H \ No newline at end of file diff --git a/sa1/include/game/entity.h b/sa1/include/game/entity.h new file mode 100644 index 0000000000..041a9a7354 --- /dev/null +++ b/sa1/include/game/entity.h @@ -0,0 +1,234 @@ +#ifndef GUARD_INTERACTABLE_H +#define GUARD_INTERACTABLE_H + +#include "gba/defines.h" +#include "gba/types.h" +#include "sprite.h" + +#include "game/sa1_sa2_shared/globals.h" +//#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" + +//#include "game/stage/terrain_collision.h" +//#include "game/player_callbacks.h" +//#include "game/stage/player.h" +#include "game/stage/camera.h" + +#define ENTITY_DATA_SIZE_SA1 4 +#define ENTITY_DATA_SIZE_SA2 4 +#define ENTITY_DATA_SIZE_SA3 5 +#define ENTITY_DATA_SIZE ENTITY_DATA_SIZE_SA1 + +PACKED(MapEntity, { + /* 0x00 */ u8 x; // While an enemy is active, x gets repurposed as a "state" + // (e.g. indicating that it's active) + /* 0x01 */ u8 y; + /* 0x02 */ u8 index; + + union { + /* 0x03 */ + s8 sData[ENTITY_DATA_SIZE]; + u8 uData[ENTITY_DATA_SIZE]; + } d; +}); + +PACKED(MapEntity_Itembox, { + /* 0x00 */ u8 x; // While an enemy is active, x gets repurposed as a "state" + // (e.g. indicating that it's active) + /* 0x01 */ u8 y; + /* 0x02 */ u8 index; +}); + +PACKED(MapEntity_Ring, { + /* 0x00 */ u8 x; // While an enemy is active, x gets repurposed as a "state" + // (e.g. indicating that it's active) + /* 0x01 */ u8 y; +}); + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ u16 regionX; + /* 0x06 */ u16 regionY; + /* 0x08 */ u8 meX; + /* 0x09 */ u8 id; +} SpriteBase; + +// TODO maybe(?): Integrate this with every enemy +typedef struct { + SpriteBase base; + Sprite s; +} EnemyBase; + +u32 sub_800CDBC(Sprite *, s32, s32, Player *); + +u32 Coll_Player_Entity_Intersection(Sprite *s, CamCoord x, CamCoord y, Player *p); + +// After a MapEntity is initialized, its x-value in the layout-data gets set to -2. +// TODO: +// Find out whether casting these to u8 can work while still matching! +#define MAP_ENTITY_STATE_ARRAY_END (-1) +#define MAP_ENTITY_STATE_INITIALIZED (-2) +#define MAP_ENTITY_STATE_MINUS_THREE (-3) + +#define SET_MAP_ENTITY_INITIALIZED_SIMPLE(mapEnt) (mapEnt)->x = MAP_ENTITY_STATE_INITIALIZED; + +// TODO: Find a way to simplify/remove this macro! +#define SET_MAP_ENTITY_INITIALIZED(mapEnt) \ + { \ + s32 negativeTwo; \ + s16 forMatching; \ + negativeTwo = MAP_ENTITY_STATE_INITIALIZED; \ + forMatching = negativeTwo; \ + mapEnt->x = forMatching; \ + } + +#define SET_MAP_ENTITY_NOT_INITIALIZED(mapEnt, initialX) \ + { \ + mapEnt->x = initialX; \ + } + +// Used by Enemies that do not appear in EASY-mode +#define DIFFICULTY_LEVEL_IS_NOT_EASY (gGameMode == GAME_MODE_TIME_ATTACK || gDifficultyLevel != DIFFICULTY_EASY) + +// Used for bosses +#define DIFFICULTY_BOSS_IS_NOT_NORMAL (gDifficultyLevel != DIFFICULTY_NORMAL && gGameMode != GAME_MODE_BOSS_TIME_ATTACK) + +#define DIFFICULTY_LEVEL_IS_NOT_EASY_AND_ZONE_IS_NOT_1 \ + (gGameMode == GAME_MODE_TIME_ATTACK || gCurrentLevel > 3 || gDifficultyLevel != DIFFICULTY_EASY) + +#define ENEMY_SET_SPAWN_POS_STATIC(_enemy, _mapEntity) \ + _enemy->spawnX = Q(TO_WORLD_POS(_mapEntity->x, spriteRegionX)); \ + _enemy->spawnY = Q(TO_WORLD_POS(_mapEntity->y, spriteRegionY)); + +#define ENEMY_SET_SPAWN_POS_FLYING(_enemy, _mapEntity) \ + ENEMY_SET_SPAWN_POS_STATIC(_enemy, _mapEntity); \ + _enemy->offsetX = 0; \ + _enemy->offsetY = 0; + +#define ENEMY_SET_SPAWN_POS_GROUND(_enemy, _mapEntity) \ + ENEMY_SET_SPAWN_POS_STATIC(_enemy, _mapEntity); \ + _enemy->offsetX = 0; \ + _enemy->offsetY = Q(sub_801F07C(I(_enemy->spawnY), I(_enemy->spawnX), _enemy->clampParam, 8, NULL, sub_801EE64)); + +#if (GAME == GAME_SA1) +#define ENEMY_UPDATE_EX_RAW(_s, _posX, _posY, code_insert) \ + { code_insert }; \ + UpdateSpriteAnimation(_s); \ + DisplaySprite(_s); +#else +#define ENEMY_UPDATE_EX_RAW(_s, _posX, _posY, code_insert) \ + Player_UpdateHomingPosition(_posX, _posY); \ + { code_insert }; \ + UpdateSpriteAnimation(_s); \ + DisplaySprite(_s); +#endif + +#define ENEMY_UPDATE_EX(_s, _posX, _posY, code_insert) ENEMY_UPDATE_EX_RAW(_s, QS(_posX), QS(_posY), code_insert); + +#define ENEMY_UPDATE(_s, _posX, _posY) ENEMY_UPDATE_EX(_s, _posX, _posY, {}); + +#define ENEMY_UPDATE_POSITION_RAW(_enemy, _sprite, _posX, _posY, _offsetX, _offsetY) \ + _posX = I(_enemy->spawnX + _offsetX); \ + _posY = I(_enemy->spawnY + _offsetY); \ + _sprite->x = _posX - gCamera.x; \ + _sprite->y = _posY - gCamera.y; + +#define ENEMY_UPDATE_POSITION(_enemy, _sprite, _posX, _posY) \ + ENEMY_UPDATE_POSITION_RAW(_enemy, _sprite, _posX, _posY, _enemy->offsetX, _enemy->offsetY) + +#define ENEMY_UPDATE_POSITION_STATIC(_enemy, _sprite, _posX, _posY) ENEMY_UPDATE_POSITION_RAW(_enemy, _sprite, _posX, _posY, 0, 0) + +#define ENEMY_TURN_TO_PLAYER(_posX, s) \ + if (gPlayer.x < _posX) { \ + SPRITE_FLAG_CLEAR(s, X_FLIP); \ + } else { \ + SPRITE_FLAG_SET(s, X_FLIP); \ + } + +#define ENEMY_TURN_AROUND(_s) \ + if (_s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { \ + SPRITE_FLAG_CLEAR(_s, X_FLIP); \ + } else { \ + SPRITE_FLAG_SET(_s, X_FLIP); \ + } + +#define ENEMY_CROSSED_LEFT_BORDER(_enemy, _mapEntity) ((I(_enemy->offsetX) <= _mapEntity->d.sData[0] * TILE_WIDTH)) + +#define ENEMY_CROSSED_RIGHT_BORDER(_enemy, _mapEntity) \ + ((I(_enemy->offsetX) >= (_mapEntity->d.sData[0] * TILE_WIDTH + _mapEntity->d.uData[2] * TILE_WIDTH))) + +#define ENEMY_CROSSED_TOP_BORDER_RAW(_enemy, _mapEntity, _offsetY) ((_offsetY <= _mapEntity->d.sData[1] * TILE_WIDTH)) + +#define ENEMY_CROSSED_TOP_BORDER(_enemy, _mapEntity) ENEMY_CROSSED_TOP_BORDER_RAW(_enemy, _mapEntity, I(_enemy->offsetY)) + +#define ENEMY_CROSSED_BOTTOM_BORDER_RAW(_enemy, _mapEntity, _offsetY) \ + ((_offsetY >= (_mapEntity->d.sData[1] * TILE_WIDTH + _mapEntity->d.uData[3] * TILE_WIDTH))) + +#define ENEMY_CROSSED_BOTTOM_BORDER(_enemy, _mapEntity) ENEMY_CROSSED_BOTTOM_BORDER_RAW(_enemy, _mapEntity, I(_enemy->offsetY)) + +#define ENEMY_CLAMP_TO_GROUND_INNER(_enemy, _unknownBool, _task) \ + sub_801F100(I(_enemy->spawnY + _enemy->offsetY), I(_enemy->spawnX + _enemy->offsetX), _unknownBool, 8, _task); + +#define ENEMY_CLAMP_TO_GROUND_INNER_X_FIRST(_enemy, _unknownBool) \ + sub_801F100(I(_enemy->spawnX + _enemy->offsetX), I(_enemy->spawnY + _enemy->offsetY), _unknownBool, 8, sub_801EC3C); + +#define ENEMY_CLAMP_TO_GROUND_RAW(_enemy, _unknownBool, _p) \ + { \ + s32 delta \ + = sub_801F07C(I(_enemy->spawnY + _enemy->offsetY), I(_enemy->spawnX + _enemy->offsetX), _unknownBool, 8, _p, sub_801EE64); \ + \ + if (delta < 0) { \ + _enemy->offsetY += Q(delta); \ + delta = ENEMY_CLAMP_TO_GROUND_INNER(_enemy, _unknownBool, sub_801EC3C); \ + } \ + \ + if (delta > 0) { \ + _enemy->offsetY += Q(delta); \ + } \ + } + +#define ENEMY_CLAMP_TO_GROUND(_enemy, _unknownBool) ENEMY_CLAMP_TO_GROUND_RAW(_enemy, _unknownBool, NULL) + +#define ENEMY_CLAMP_TO_GROUND_2(_enemy, _unknownBool) \ + { \ + s32 delta \ + = sub_801F07C(I(_enemy->spawnY + _enemy->offsetY), I(_enemy->spawnX + _enemy->offsetX), _unknownBool, -8, NULL, sub_801EE64); \ + \ + if (delta < 0) { \ + _enemy->offsetY -= Q(delta); \ + delta = ENEMY_CLAMP_TO_GROUND_INNER(_enemy, _unknownBool, sub_801EC3C); \ + } \ + \ + if (delta > 0) { \ + _enemy->offsetY -= Q(delta); \ + } \ + } + +#define ENEMY_DESTROY_IF_PLAYER_HIT(_s, _pos) \ + if (Coll_Player_Enemy_Attack(_s, _pos.x, _pos.y, 0) == TRUE) { \ + TaskDestroy(gCurTask); \ + return; \ + } + +#define ENEMY_DESTROY_IF_PLAYER_HIT_2(_s, _pos) \ + if (Coll_Player_Enemy_Attack(_s, _pos.x, _pos.y, 0)) { \ + TaskDestroy(gCurTask); \ + return; \ + } + +#define ENEMY_DESTROY_IF_OUT_OF_CAM_RANGE(_enemy, _mapEntity, _sprite) \ + if (IS_OUT_OF_CAM_RANGE(_sprite->x, _sprite->y)) { \ + SET_MAP_ENTITY_NOT_INITIALIZED(_mapEntity, _enemy->base.meX); \ + TaskDestroy(gCurTask); \ + return; \ + } + +#define ENEMY_DESTROY_IF_OFFSCREEN_RAW(_enemy, _mapEntity, _sprite, _posX, _posY) \ + if (IS_OUT_OF_DISPLAY_RANGE(_posX, _posY)) { \ + ENEMY_DESTROY_IF_OUT_OF_CAM_RANGE(_enemy, _mapEntity, _sprite); \ + } + +#define ENEMY_DESTROY_IF_OFFSCREEN(_enemy, _mapEntity, _sprite) \ + ENEMY_DESTROY_IF_OFFSCREEN_RAW(_enemy, _mapEntity, _sprite, I(_enemy->spawnX), I(_enemy->spawnY)) + +#endif // GUARD_INTERACTABLE_H diff --git a/sa1/include/game/gTask_03006240.h b/sa1/include/game/gTask_03006240.h new file mode 100644 index 0000000000..1d1488a413 --- /dev/null +++ b/sa1/include/game/gTask_03006240.h @@ -0,0 +1,102 @@ +#ifndef GUARD_gTask_03006240 +#define GUARD_gTask_03006240 + +#include "task.h" +#include "game/game_over.h" + +// TODO: Seems like this task is Game Over-related? + +// UI, OAM-related? +typedef struct Strc0 { + /* 0x000 */ s32 unk0; // tilenum (OAM) + /* 0x004 */ s32 unk4; + /* 0x008 */ u8 unk8; + /* 0x009 */ u8 unk9; + /* 0x00A */ u8 unkA; + /* 0x00B */ u8 unkB; +} Strc0; + +typedef struct Strc_80528AC { + /* 0x00 */ struct Strc0 unk0; + /* 0x0C */ u8 *vramC; + /* 0x10 */ const u8 *layout; + /* 0x14 */ const u8 *tiles; + /* 0x18 */ s32 tilesSize; // in bytes + /* 0x1C */ s32 layoutSize; + /* 0x20 */ const u16 *palette; + /* 0x24 */ u32 paletteSize; + /* 0x28 */ u8 unk28; // destination palID ? + /* 0x29 */ u8 unk29; // backgroundID? + /* 0x2A */ u8 unk2A; // flags - 0x1: freed?, 0x4: copy palette, 0x8: active? + /* 0x2B */ u8 unk2B; + /* 0x2C */ u8 uiGfxID; +} Strc_80528AC; /* size: 0x30 */ + +typedef struct Strc_8055C50 { + /* 0x00 */ void *vram0; + /* 0x04 */ void *vram4; + /* 0x08 */ void *vram8; +} Strc_8055C50; + +typedef struct Strc_8052C84 { + /* 0x00 */ u16 unk0; // TODO: qX? + /* 0x02 */ u16 unk2; // TODO: qY? + /* 0x04 */ s16 unk4; // TODO: angle + /* 0x06 */ u16 unk6; // TODO: affineIndex + /* 0x08 */ u16 unk8; + /* 0x0A */ u16 unkA; + /* 0x0C */ u16 unkC; + /* 0x0E */ s16 byteCount; + /* 0x10 */ u16 unk10; + /* 0x12 */ u16 unk12; + /* 0x14 */ u8 filler14[2]; + /* 0x16 */ u8 unk16; +} Strc_8052C84; /* size: 0x18 */ // <- GameOverB struct? + +extern struct Task *gTask_03006240; + +struct GfxSubstruct { + struct GfxSubstruct *next; + + GraphicsData graphics; + // void *rom; + // void *vram; + // u8 fillerC[4]; +}; + +struct Strc_30063F0 { + struct Strc_30063F0 *next; + u8 unk4[10]; + s32 unk10; + s32 unk14; + u32 unk18; // bgID? + u32 unk1C; + u8 unk20; +}; /* 0x30 ?? */ + +typedef struct { + /* 0x000 */ struct Strc0 unk0[10]; // TODO: might be more in this array? + /* 0x078 */ u8 filler78[0xF0]; + /* 0x168 */ struct GfxSubstruct *first; + /* 0x16C */ struct GfxSubstruct gfxList[16]; // last entry empty? + /* 0x26C */ u8 filler26C[0xE0]; +} Task_3006240; /* 0x34C */ + +struct Strc_3006250 { + struct Strc_3006250 *next; + u8 unk4[0x20]; +}; /* 0x24 */ + +void sub_80535C8(struct Strc0 *inTask, u8 param1); + +void sub_80535FC(void); +IwramData UiGfxStackInit(void); +GraphicsData *UiGfxStackPop(void); +void sub_80528AC(Strc_80528AC *strc); +// TODO: Is this the correct module? +void sub_8052C84(const char *param0, Strc_8052C84 *param1); +void sub_8052F78(const char *param0, struct GameOverB *strc); +void sub_80530CC(const char *param0, struct GameOverB *param1); +void sub_8055C50(Strc_8055C50 *param0); + +#endif // GUARD_gTask_03006240 \ No newline at end of file diff --git a/sa1/include/game/game.h b/sa1/include/game/game.h new file mode 100644 index 0000000000..1d5e6edc61 --- /dev/null +++ b/sa1/include/game/game.h @@ -0,0 +1,8 @@ +#ifndef GUARD_GAME_H +#define GUARD_GAME_H + +#include "global.h" + +void GameInit(void); + +#endif // GUARD_GAME_H diff --git a/sa1/include/game/game_over.h b/sa1/include/game/game_over.h new file mode 100644 index 0000000000..de1508a60b --- /dev/null +++ b/sa1/include/game/game_over.h @@ -0,0 +1,87 @@ +#ifndef GUARD_GAME_OVER_H +#define GUARD_GAME_OVER_H + +#include "global.h" + +enum ELostLifeCause { + OVER_CAUSE_ZERO_LIVES = 0x1, + OVER_CAUSE_TIME_UP = 0x2, +}; + +#ifndef NON_MATCHING +typedef u8 LostLifeCause; +#else +typedef enum ELostLifeCause LostLifeCause; +#endif + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ u8 filler30[0xC]; + /* 0x3C */ Sprite s2; + /* 0x6C */ u8 filler6C[0xC]; + /* 0x78 */ u32 frames; + /* 0x7C */ u32 lostLifeCause; + /* 0x80 */ u8 unk80; +} GameOverScreen; + +// TODO: Appears to be a shared, UI-related struct? +typedef struct GameOverB { + /* 0x00 */ u8 unk0; + /* 0x01 */ u8 unk1; + /* 0x02 */ u8 unk2; + /* 0x03 */ u8 unk3; + /* 0x04 */ u8 unk4; + /* 0x05 */ u8 unk5; + /* 0x06 */ u8 unk6; + /* 0x07 */ u8 unk7; + /* 0x08 */ u16 unk8; + /* 0x0A */ s16 qUnkA; // NOTE: Actually a Y-value it looks like? + /* 0x0C */ s16 unkC; + /* 0x0E */ s16 unkE; // String/Data length? + /* 0x10 */ u16 unk10; + /* 0x12 */ u16 unk12; // variant? + /* 0x14 */ u16 unk14; + /* 0x16 */ u8 unk16; + /* 0x17 */ u8 unk17; +} GameOverB; /* 0x18 */ + +// Exclusive to game_over.c +typedef struct { + /* 0x00 */ GameOverB unk0; + /* 0x18 */ u32 unk18; + /* 0x1C */ void *vram1C; +} GameOverB0; /* 0x20 */ + +typedef struct { + /* 0x00 */ s16 unk0; + /* 0x02 */ s16 unk2; + /* 0x04 */ s16 unk4; + /* 0x06 */ s16 unk6; + /* 0x08 */ s16 unk8; + /* 0x0A */ u8 unkA; + /* 0x0B */ u8 unkB; +} StrcUi_805423C; /* size: ??? */ + +typedef struct GameOverC { + /* 0x00 */ StrcUi_805423C unk0; + /* 0x0C */ void *unkC; + /* 0x10 */ void *unk10; + /* 0x14 */ void *unk14; + /* 0x18 */ u32 unk18; +} GameOverC; /* 0x1C */ + +typedef struct GameOverD { + /* 0x00 */ u8 filler0[0x18]; + /* 0x18 */ GameOverScreen *unk18; + /* 0x1C */ GameOverB0 *unk1C; + /* 0x20 */ GameOverC *unk20; + /* 0x24 */ u32 unk24; + /* 0x28 */ u16 unk28; + /* 0x26 */ u8 filler2A[0x2]; + /* 0x2C */ void *vram2C; + /* 0x30 */ void *vram30; +} GameOverD; /* 0x34 */ + +void CreateGameOverScreen(LostLifeCause lostLifeCause); + +#endif diff --git a/sa1/include/game/heart_particles_effect.h b/sa1/include/game/heart_particles_effect.h new file mode 100644 index 0000000000..8c196176e7 --- /dev/null +++ b/sa1/include/game/heart_particles_effect.h @@ -0,0 +1,6 @@ +#ifndef GUARD_UNKNOWN_OBJECT_6998_H +#define GUARD_UNKNOWN_OBJECT_6998_H + +void CreateHeartParticles(void); + +#endif // GUARD_UNKNOWN_OBJECT_6998_H diff --git a/sa1/include/game/interactables/party_balloon.h b/sa1/include/game/interactables/party_balloon.h new file mode 100644 index 0000000000..5f1a85f6de --- /dev/null +++ b/sa1/include/game/interactables/party_balloon.h @@ -0,0 +1,20 @@ +#ifndef GUARD_SA1_IA_PARTY_BALLOON_H +#define GUARD_SA1_IA_PARTY_BALLOON_H + +#include "core.h" +#include "game/entity.h" + +typedef enum EPartyBallonColors { + PBCOLOR_BLUE, + PBCOLOR_RED, + PBCOLOR_YELLOW, +} EPartyBallonColors; + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 unk3C; + /* 0x40 */ u8 unk40; +} PartyBalloon; + +#endif // GUARD_SA1_IA_PARTY_BALLOON_H diff --git a/sa1/include/game/multiboot/collect_rings/results.h b/sa1/include/game/multiboot/collect_rings/results.h new file mode 100644 index 0000000000..da3c550d83 --- /dev/null +++ b/sa1/include/game/multiboot/collect_rings/results.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MULTIPLAYER_SINGLEPAK_RESULTS_H +#define GUARD_MULTIPLAYER_SINGLEPAK_RESULTS_H + +#include "global.h" + +void CreateMultiplayerSinglePakResultsScreen(u32 a); + +#endif // GUARD_MULTIPLAYER_SINGLEPAK_RESULTS_H diff --git a/sa1/include/game/multiboot/collect_rings/time_display.h b/sa1/include/game/multiboot/collect_rings/time_display.h new file mode 100644 index 0000000000..489caee8a3 --- /dev/null +++ b/sa1/include/game/multiboot/collect_rings/time_display.h @@ -0,0 +1,11 @@ +#ifndef GUARD_COLLECT_RINGS_TIME_DISPLAY_H +#define GUARD_COLLECT_RINGS_TIME_DISPLAY_H + +#include "global.h" + +// Some timer difference +extern u32 gUnknown_03005B6C; + +void CreateCollectRingsTimeDisplay(void); + +#endif // GUARD_COLLECT_RINGS_TIME_DISPLAY_H diff --git a/sa1/include/game/multiboot/connection.h b/sa1/include/game/multiboot/connection.h new file mode 100644 index 0000000000..5a97e6ea7c --- /dev/null +++ b/sa1/include/game/multiboot/connection.h @@ -0,0 +1,20 @@ +#ifndef GUARD_MULTIPLAYER_SINGLEPAK_CONNECTION_H +#define GUARD_MULTIPLAYER_SINGLEPAK_CONNECTION_H + +#include "global.h" + +#if (GAME == GAME_SA1) +#define COMM_DATA(val) (val) +#define MP_LANGUAGE LOADED_SAVE->uiLanguage +#define UNK_GFX_SIZE 0x1C0 +#elif (GAME == GAME_SA2) +#define COMM_DATA(val) ((val) | 0x4000) +#define MP_LANGUAGE gMultiplayerLanguage +#define UNK_GFX_SIZE 0x180 +#endif + +void SA2_LABEL(sub_8081200)(void); +void StartSinglePakConnect(void); +void ShowSinglePakResults(void); + +#endif // GUARD_MULTIPLAYER_SINGLEPAK_CONNECTION_H diff --git a/sa1/include/game/multiplayer/chao.h b/sa1/include/game/multiplayer/chao.h new file mode 100644 index 0000000000..4c11ea6e2c --- /dev/null +++ b/sa1/include/game/multiplayer/chao.h @@ -0,0 +1,14 @@ +#ifndef GUARD_SA1_CHAO_H +#define GUARD_SA1_CHAO_H + +#define NUM_MP_CHAO 3 + +// Task -> ChaoTask +extern struct Task *gChaoTasks[NUM_MP_CHAO]; + +typedef struct { + u8 filler[0x41]; + u8 unk41; +} ChaoTask; + +#endif // GUARD_SA1_CHAO_H \ No newline at end of file diff --git a/sa1/include/game/multiplayer/communication_outcome.h b/sa1/include/game/multiplayer/communication_outcome.h new file mode 100644 index 0000000000..884a931d60 --- /dev/null +++ b/sa1/include/game/multiplayer/communication_outcome.h @@ -0,0 +1,11 @@ +#ifndef GUARD_MULTIPLAYER_COMMUNICATION_OUTCOME_H +#define GUARD_MULTIPLAYER_COMMUNICATION_OUTCOME_H + +#include "global.h" + +#define OUTCOME_CONNECTION_SUCCESS 0 +#define OUTCOME_CONNECTION_ERROR 1 + +void CreateMultipackOutcomeScreen(u8 outcome); + +#endif // GUARD_MULTIPLAYER_COMMUNICATION_OUTCOME_H diff --git a/sa1/include/game/multiplayer/finish.h b/sa1/include/game/multiplayer/finish.h new file mode 100644 index 0000000000..9dbdb26815 --- /dev/null +++ b/sa1/include/game/multiplayer/finish.h @@ -0,0 +1,9 @@ +#ifndef GUARD_MULTIPLAYER_FINISH_H +#define GUARD_MULTIPLAYER_FINISH_H + +#include "global.h" + +void CreateMultiplayerFinishResult(u8 sioId, u8 count); +void CreateMultiplayerFinishHandler(void); + +#endif // GUARD_MULTIPLAYER_FINISH_H diff --git a/sa1/include/game/multiplayer/hud.h b/sa1/include/game/multiplayer/hud.h new file mode 100644 index 0000000000..ee7f83a1ef --- /dev/null +++ b/sa1/include/game/multiplayer/hud.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MULTIPLAYER_HUD_H +#define GUARD_MULTIPLAYER_HUD_H + +#if (GAME == GAME_SA1) +void CreateChaoHuntHUD(void); +#endif + +#endif // GUARD_MULTIPLAYER_HUD_H diff --git a/sa1/include/game/multiplayer/indicators.h b/sa1/include/game/multiplayer/indicators.h new file mode 100644 index 0000000000..425aaa8fe3 --- /dev/null +++ b/sa1/include/game/multiplayer/indicators.h @@ -0,0 +1,9 @@ +#ifndef GUARD_SA2_MULTIPLAYER_INDICATORS_H +#define GUARD_SA2_MULTIPLAYER_INDICATORS_H + +#include "global.h" + +extern void CreateSelfPositionIndicator(void); +extern void CreateOpponentPositionIndicator(u8 sid); + +#endif // GUARD_SA2_MULTIPLAYER_INDICATORS_H diff --git a/sa1/include/game/multiplayer/mode_select.h b/sa1/include/game/multiplayer/mode_select.h new file mode 100644 index 0000000000..e06904ac60 --- /dev/null +++ b/sa1/include/game/multiplayer/mode_select.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MULTIPLAYER_MODE_SELECT_H +#define GUARD_MULTIPLAYER_MODE_SELECT_H + +#include "global.h" + +void CreateMultiplayerModeSelectScreen(void); + +#endif // GUARD_MULTIPLAYER_MODE_SELECT_H diff --git a/sa1/include/game/multiplayer/mp_attack_1_effect.h b/sa1/include/game/multiplayer/mp_attack_1_effect.h new file mode 100644 index 0000000000..259cacb038 --- /dev/null +++ b/sa1/include/game/multiplayer/mp_attack_1_effect.h @@ -0,0 +1,11 @@ +#ifndef GUARD_MULTIPLAYER_ATTACK_1_EFFECT_H +#define GUARD_MULTIPLAYER_ATTACK_1_EFFECT_H + +#include "global.h" + +void CreateMPAttackEffect(void); + +extern s32 gUnused_03005B78; +extern bool8 gShouldSpawnMPAttackEffect; + +#endif // GUARD_MULTIPLAYER_ATTACK_1_EFFECT_H diff --git a/sa1/include/game/multiplayer/mp_player.h b/sa1/include/game/multiplayer/mp_player.h new file mode 100644 index 0000000000..29629718cf --- /dev/null +++ b/sa1/include/game/multiplayer/mp_player.h @@ -0,0 +1,42 @@ +#ifndef GUARD_MULTIPLAYER_MP_PLAYER_H +#define GUARD_MULTIPLAYER_MP_PLAYER_H + +#include "global.h" +#include "sprite.h" + +typedef struct { + // TODO: Verify that this is Sprite! + // (Used in Task_Item_Invincibility @ 0x0802AC60) + Sprite s; + Hitbox reserved; + + SpriteTransform transform; + s32 unk44; + s32 unk48; + u32 unk4C; +#if (GAME == GAME_SA1) + Vec2_16 pos; +#elif (GAME == GAME_SA2) + Vec2_16 qPos; +#endif + u16 unk54; + u8 unk56; + u8 unk57; + s8 unk58[4]; + u32 unk5C; // flags? + u8 unk60; + u8 unk61; + u16 unk62; + u8 unk64; + s16 unk66; + s16 unk68; + u16 unk6A; +} MultiplayerPlayer; /* size: 0x6C */ + +void CreateMultiplayerPlayer(u8); + +void sub_8018818(void); + +extern u8 gUnknown_0300583C; + +#endif diff --git a/sa1/include/game/multiplayer/multipak_connection.h b/sa1/include/game/multiplayer/multipak_connection.h new file mode 100644 index 0000000000..fd255af4a4 --- /dev/null +++ b/sa1/include/game/multiplayer/multipak_connection.h @@ -0,0 +1,37 @@ +#ifndef GUARD_MULTIPLAYER_MULTIPAK_CONNECTION_H +#define GUARD_MULTIPLAYER_MULTIPAK_CONNECTION_H + +#include "global.h" +#include "core.h" +#include "multi_sio.h" + +extern u8 gMultiplayerUnlockedCharacters; +extern u8 gMultiplayerConnections; +extern u8 gMultiplayerUnlockedLevels; + +void StartMultiPakConnect(void); +void LinkCommunicationError(void); + +// TOOD: MultiSioHeartBeat +#define MultiPakHeartbeat() \ + ({ \ + if (IS_MULTI_PLAYER) { \ + u32 i; \ + for (i = 0; i < MULTI_SIO_PLAYERS_MAX && GetBit(gMultiplayerConnections, i); i++) { \ + if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i))) { \ + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4) { \ + TasksDestroyAll(); \ + PAUSE_BACKGROUNDS_QUEUE(); \ + gBgSpritesCount = 0; \ + PAUSE_GRAPHICS_QUEUE(); \ + LinkCommunicationError(); \ + return; \ + } \ + } else { \ + gMultiplayerMissingHeartbeats[i] = 0; \ + } \ + } \ + } \ + }) + +#endif // GUARD_MULTIPLAYER_MULTIPAK_CONNECTION_H diff --git a/sa1/include/game/multiplayer/multiplayer_event_mgr.h b/sa1/include/game/multiplayer/multiplayer_event_mgr.h new file mode 100644 index 0000000000..78774f3f26 --- /dev/null +++ b/sa1/include/game/multiplayer/multiplayer_event_mgr.h @@ -0,0 +1,121 @@ + + +#ifndef GUARD_MULTIPLAYER_EVENT_MGR_H +#define GUARD_MULTIPLAYER_EVENT_MGR_H + +#include "global.h" +#include "core.h" // for MultiSioData + +#include "game/sa1_sa2_shared/globals.h" + +// RoomEvent types +#if (GAME == GAME_SA1) +#define ROOMEVENT_TYPE_NONE 0 +#define ROOMEVENT_TYPE_PLATFORM_CHANGE 1 +#define ROOMEVENT_TYPE_ITEMBOX_BREAK 2 +#define ROOMEVENT_TYPE_ENEMY_DESTROYED 3 +#define ROOMEVENT_TYPE_PLAYER_RING_LOSS 4 +#define ROOMEVENT_TYPE_MYSTERY_ITEMBOX_BREAK 5 +#define ROOMEVENT_TYPE_ITEMEFFECT_APPLIED 6 +#define ROOMEVENT_TYPE_REACHED_STAGE_GOAL 7 +#define ROOMEVENT_TYPE_8 8 +#define ROOMEVENT_TYPE_CHAO_COLLECTED 9 +#elif (GAME == GAME_SA2) +#define ROOMEVENT_TYPE_NONE 0 +#define ROOMEVENT_TYPE_PLATFORM_CHANGE 1 +#define ROOMEVENT_TYPE_ITEMBOX_BREAK 2 +#define ROOMEVENT_TYPE_ENEMY_DESTROYED 3 +#define ROOMEVENT_TYPE_PLAYER_RING_LOSS 4 +#define ROOMEVENT_TYPE_MYSTERY_ITEMBOX_BREAK 5 +#define ROOMEVENT_TYPE_ITEMEFFECT_APPLIED 6 +#define ROOMEVENT_TYPE_REACHED_STAGE_GOAL 7 +#define ROOMEVENT_TYPE_UNKNOWN 8 +#endif + +// RoomEvent variable structs +typedef struct { + ROOMEVENT_BASE; + + u8 x; + u8 y; + u8 id; + u8 action; +} RoomEvent_PlatformChange; + +typedef struct { + ROOMEVENT_BASE; + + u8 x; + u8 y; + u8 id; +} RoomEvent_ItemBoxBreak; + +typedef struct { + ROOMEVENT_BASE; + + u8 x; + u8 y; + u8 id; +} RoomEvent_EnemyDestroy; + +typedef struct { + ROOMEVENT_BASE; + + u8 ringCount; +} RoomEvent_RingLoss; + +typedef struct { + ROOMEVENT_BASE; + + u8 x; + u8 y; + u8 id; + u8 unk4; +} RoomEvent_MysteryItemBoxBreak; + +typedef struct { + ROOMEVENT_BASE; + u8 x; + u8 y; +} RoomEvent_GoalReached; + +typedef struct { + ROOMEVENT_BASE; + u8 effect; + u8 targetPlayer; +} RoomEvent_ItemEffect; + +typedef struct { + ROOMEVENT_BASE; + u8 x; // regionX truncated + u8 y; // regionY truncated + u8 id; + u8 unk4; +} RoomEvent_BalloonPopped; + +typedef struct { + ROOMEVENT_BASE; + u8 id1; + u8 id2; +} RoomEvent_ChaoCollected; + +typedef struct { + ROOMEVENT_BASE; + u8 unk1; + u8 unk2; +} RoomEvent_Unknown; + +struct Task *CreateMultiplayerReceiveEventMgr(void); +struct Task *CreateMultiplayerSendEventMgr(void); + +void ReceiveRoomEvent_PlatformChange(union MultiSioData *, u8); +void ReceiveRoomEvent_ItemBoxBreak(union MultiSioData *, u8); +void ReceiveRoomEvent_EnemyDestroyed(union MultiSioData *, u8); +void ReceiveRoomEvent_PlayerRingLoss(union MultiSioData *, u8); +void ReceiveRoomEvent_MysteryItemBoxBreak(union MultiSioData *, u8); +void ReceiveRoomEvent_8(union MultiSioData *, u8); + +// Creates and sends a room event for multiplayer +void *CreateRoomEvent(void); + +#endif // GUARD_MULTIPLAYER_EVENT_MGR_H diff --git a/sa1/include/game/multiplayer/player_unk_2.h b/sa1/include/game/multiplayer/player_unk_2.h new file mode 100644 index 0000000000..3f33e49584 --- /dev/null +++ b/sa1/include/game/multiplayer/player_unk_2.h @@ -0,0 +1,19 @@ + + +#ifndef GUARD_MULTIPLAYER_PLAYER_UNK_2_H +#define GUARD_MULTIPLAYER_PLAYER_UNK_2_H + +#include "global.h" + +// Copies of BG control regs for Multiplayer(?) +typedef struct { + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +} MultiPlayerBgCtrlRegs; /* size: 8 */ +extern MultiPlayerBgCtrlRegs *gMPAttackEffect2Regs; + +void sub_801A384(void); + +#endif // GUARD_MULTIPLAYER_PLAYER_UNK_2_H diff --git a/sa1/include/game/multiplayer/results.h b/sa1/include/game/multiplayer/results.h new file mode 100644 index 0000000000..4843781385 --- /dev/null +++ b/sa1/include/game/multiplayer/results.h @@ -0,0 +1,12 @@ +#ifndef GUARD_MULTIPLAYER_RESULTS_H +#define GUARD_MULTIPLAYER_RESULTS_H + +#include "global.h" + +// TODO: possibly the wrong way around +#define MULTIPLAYER_RESULTS_MODE_CHARACTER_SELECTION 0 +#define MULTIPLAYER_RESULTS_MODE_COURSE_COMPLETE 1 + +void CreateMultiplayerResultsScreen(u8 mode); + +#endif // GUARD_MULTIPLAYER_RESULTS_H diff --git a/sa1/include/game/multiplayer/team_play.h b/sa1/include/game/multiplayer/team_play.h new file mode 100644 index 0000000000..c6c696e961 --- /dev/null +++ b/sa1/include/game/multiplayer/team_play.h @@ -0,0 +1,8 @@ +#ifndef GUARD_MULTIPLAYER_TEAMPLAY_H +#define GUARD_MULTIPLAYER_TEAMPLAY_H + +#include "global.h" + +void CreateMultiplayerTeamPlayScreen(void); + +#endif // GUARD_MULTIPLAYER_TEAMPLAY_H diff --git a/sa1/include/game/multiplayer/unk_0.h b/sa1/include/game/multiplayer/unk_0.h new file mode 100644 index 0000000000..14862f453f --- /dev/null +++ b/sa1/include/game/multiplayer/unk_0.h @@ -0,0 +1,13 @@ +#ifndef GUARD_SA1_MP_UNK_0_H +#define GUARD_SA1_MP_UNK_0_H + +typedef struct UnkMP0 { + u16 unk0; + s16 unk2; + u16 unk4; + u8 unk6; +} UnkMP0; + +struct Task *sub_801C704(void); // -> UnkMP0 + +#endif // GUARD_SA1_MP_UNK_0_H \ No newline at end of file diff --git a/sa1/include/game/multiplayer/unk_1.h b/sa1/include/game/multiplayer/unk_1.h new file mode 100644 index 0000000000..08a0b24e9a --- /dev/null +++ b/sa1/include/game/multiplayer/unk_1.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SA1_MP_UNK_1_H +#define GUARD_SA1_MP_UNK_1_H + +void sub_801C9D8(void); + +#endif // GUARD_SA1_MP_UNK_1_H \ No newline at end of file diff --git a/sa1/include/game/mystery_itembox.h b/sa1/include/game/mystery_itembox.h new file mode 100644 index 0000000000..ce58607e14 --- /dev/null +++ b/sa1/include/game/mystery_itembox.h @@ -0,0 +1,9 @@ +#ifndef GUARD_MYSTERY_ITEM_BOX_H +#define GUARD_MYSTERY_ITEM_BOX_H + +#include "global.h" +#include "game/entity.h" + +void CreateEntity_MysteryItemBox(MapEntity *ia, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY); + +#endif // GUARD_MYSTERY_ITEM_BOX_H diff --git a/sa1/include/game/nuts_and_bolts_task.h b/sa1/include/game/nuts_and_bolts_task.h new file mode 100644 index 0000000000..ca70e4c957 --- /dev/null +++ b/sa1/include/game/nuts_and_bolts_task.h @@ -0,0 +1,25 @@ +#ifndef GUARD_SA1_NUTS_AND_BOLTS_TASK_H +#define GUARD_SA1_NUTS_AND_BOLTS_TASK_H + +#include "core.h" + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s32 qUnk30; + /* 0x34 */ s32 qUnk34; + /* 0x38 */ s16 qUnk38; + /* 0x3A */ s16 qUnk3A; + /* 0x3C */ u16 qUnk3C; + /* 0x3E */ s16 qUnk3E; + /* 0x40 */ u16 qUnk40; // TODO: qUnk40 not a Q()? +} NutsAndBolts; + +extern struct Task *CreateNutsAndBoltsTask(u16 taskFlags, void *vramTiles, u16 anim, u8 variant, TaskDestructor dtor); +extern void Task_NutsAndBolts(void); +extern void TaskDestructor_NutsAndBolts(struct Task *t); + +extern const u16 gUnknown_080BB41C[8]; +extern const u8 gUnknown_080BB42C[8]; +extern const u8 gUnknown_080BB434[8]; + +#endif // GUARD_SA1_NUTS_AND_BOLTS_TASK_H diff --git a/sa1/include/game/options_screen.h b/sa1/include/game/options_screen.h new file mode 100644 index 0000000000..09ce02dc9f --- /dev/null +++ b/sa1/include/game/options_screen.h @@ -0,0 +1,125 @@ +#ifndef GUARD_OPTION_SCREEN_H +#define GUARD_OPTION_SCREEN_H + +#include "global.h" +#include "config.h" +#include "game/game_over.h" +#include "game/save.h" +#include "sprite.h" +#include "constants/text.h" + +#if (GAME == GAME_SA1) + +#define NUM_LANGSCRN_SPRITES_TYPE_1 6 +#define NUM_LANGSCRN_SPRITES_TYPE_2 3 +#define NUM_LANGSCRN_SPRITES (NUM_LANGSCRN_SPRITES_TYPE_1 + NUM_LANGSCRN_SPRITES_TYPE_2) + +typedef struct { + /* 0x000 */ Background bg; + /* 0x040 */ Sprite sprites[NUM_LANGSCRN_SPRITES]; + /* 0x1F0 */ Sprite spr1F0; +#ifndef NON_MATCHING + /* 0x220 */ Sprite sprUnused; +#endif + /* 0x250 */ Sprite spr250; + /* 0x280 */ StrcUi_805423C unk280; + /* 0x28C */ u8 unk28C; + /* 0x28D */ s8 unk28D; +} EditLanguageScreen; /* 0x290 */ + +void CreateEditLanguageScreen(bool8 param0); +void CreateOptionsMenu(void); +#elif (GAME == GAME_SA2) +//#include "game/stage/player_controls.h" +//#include "game/stage/screen_fade.h" + +#define RENDER_TARGET_SCREEN 0 +#define RENDER_TARGET_SUB_MENU 1 + +#define NEW_PROFILE_NAME_MULTIPLAYER 0 +#define NEW_PROFILE_NAME_START_GAME 1 + +#define NUM_OPTIONS_MENU_ITEMS 8 + +#define OPTIONS_SCREEN_STATE_ACTIVE 0 +#define OPTIONS_SCREEN_STATE_SUB_MENU_OPEN 1 +#define OPTIONS_SCREEN_STATE_SUB_MENU_SCREEN_OPEN 2 + +struct OptionsScreenProfileData { + // playerName + u16 playerName[MAX_PLAYER_NAME_LENGTH]; + + struct TimeRecords timeRecords; + struct MultiplayerScore multiplayerScores[10]; + + u8 multiplayerWins; + u8 multiplayerLoses; + u8 multiplayerDraws; + + struct ButtonConfig buttonConfig; +} OptionsScreenProfileData; + +// OptionsScreen +struct OptionsScreen { + // profileData + OptionsScreenProfileData profileData; + + u8 unusedUnk358; + u8 difficultyLevel; + u8 timeLimitDisabled; + + // language + u8 language; + + bool8 soundTestUnlocked; + + u8 bossTimeAttackUnlocked; + u8 unk35E; + + s16 subMenuXPos; + s16 unk362; + Background background; + Background subMenuBackground; + Sprite title; + Sprite menuItems[NUM_OPTIONS_MENU_ITEMS]; + + Sprite metaItems[4]; + + Sprite playerNameDisplay[6]; + ScreenFade unk774; + s8 menuCursor; + s8 prevCursorPosition; + s8 initialSubMenuCursorPosition; + s8 subMenuAnimFrame; + s8 state; +}; /* size 0x788 */ + +extern void *gProfileScreenNextVramAddress; +extern void *gProfileScreenSubMenuNextVramAddress; + +extern const u16 gUnknown_080D95A4[16]; +extern const u16 gUnknown_080D95C4[2]; +extern const u16 gUnknown_080D95C8[5]; + +extern const u16 gUnknown_080D95D2[2]; +extern const u16 gUnknown_080D95D6[4][2]; + +#define ResetProfileScreensVram() \ + ({ \ + gProfileScreenNextVramAddress = (void *)OBJ_VRAM0; \ + gProfileScreenSubMenuNextVramAddress = NULL; \ + }) + +#define ResetProfileScreensSubMenuVram() ({ gProfileScreenSubMenuNextVramAddress = NULL; }) + +// TODO: Rename to CreateOptionsMenu in SA2. +void CreateOptionsScreen(u16); +void CreateTimeAttackLevelSelectScreen(bool16 isBossView, s16 selectedCharacter, s8 currentLevel); +void CreateNewProfileScreen(void); +void CreateNewProfileNameScreen(s16 mode); + +void sub_806A568(Sprite *obj, s8 target, u32 size, u16 c, u32 assetId, s16 xPos, s16 yPos, u16 oamOrder, u8 variant, u8 palId); +void OptionsInitBackground(Background *unk2400, u32 a, u32 b, u8 tilemapId, u16 d, u16 e, u16 f, u8 g, u16 scrollX, u16 scrollY); +#endif + +#endif // GUARD_OPTION_SCREEN_H diff --git a/sa1/include/game/parameters/characters.h b/sa1/include/game/parameters/characters.h new file mode 100644 index 0000000000..15d23a6338 --- /dev/null +++ b/sa1/include/game/parameters/characters.h @@ -0,0 +1,51 @@ +#ifndef GUARD_PARAMETERS_CHARACTERS_H +#define GUARD_PARAMETERS_CHARACTERS_H + +#include "constants/zones.h" + +/* NOTE: Copied from SA2! */ + +// TODO: Be consistent about whether these are Q() or I() values! +// +// TODO: We should consider making these defaults per-second values, instead of per-frame values! + +/*** Common ***/ +#define PLAYER_FLYING_END_GRAVITY (0.033) // = (8. / 256.) +#define PLAYER_GRAVITY (42.0 / 256.0) +#define PLAYER_GRAVITY_UNDER_WATER (12.0 / 256.0) + +#define PLAYER_POST_GOAL_RUN_SPEED (4.5) + +#define PLAYER_JUMP_HEIGHT (4.875) +#define PLAYER_JUMP_HEIGHT_UNDER_WATER (2.625) +#define PLAYER_RAIL_JUMP_HEIGHT PLAYER_JUMP_HEIGHT +#define PLAYER_RAIL_EXTRA_JUMP_HEIGHT (7.0) + +#define PLAYER_MAX_NOT_HELD_JUMP_FORCE (3.0) +#define PLAYER_MAX_NOT_HELD_JUMP_FORCE_UNDER_WATER (1.5) + +#define PLAYER_FLOATING_UPDRAFT (104. / 256.) +#define PLAYER_MAX_FLOATING_SPEED (2.25) + +// NOTE: Equal in SA1 and SA2! +#define PLAYER_INVULNERABLE_DURATION TIME(0, 2) +#define PLAYER_INVINCIBLE_DURATION TIME(0, 20) +#define PLAYER_SPEED_UP_DURATION TIME(0, 20) +#define PLAYER_SPEED_UP_MUSIC_TEMPO Q(2.0) + +#define PLAYER_AIR_SPEED_MAX 15.0 + +/*** Tricks ***/ +#define TRICK__STOP_N_SLAM__DROP_SPEED Q(0.21875) + +/*** Cream ***/ +#define CREAM_FLYING_DURATION TIME(0, 4) + +/*** Tails ***/ +// NOTE: Unlike Cream, Tails does fly for 8 seconds, but his initial value gets set to 4. +// For some reason they lower his timer only every 2nd frame (in PlayerCB_8012C2C), +// instead of using a bigger value from the get-go, even though they gave him a +// 4-byte timer. +#define TAILS_FLYING_DURATION (TIME(0, 8) / 2) + +#endif // GUARD_PARAMETERS_CHARACTERS_H \ No newline at end of file diff --git a/sa1/include/game/parameters/stage.h b/sa1/include/game/parameters/stage.h new file mode 100644 index 0000000000..82792c3d26 --- /dev/null +++ b/sa1/include/game/parameters/stage.h @@ -0,0 +1,14 @@ +#ifndef GUARD_PARAMETERS_STAGE_H +#define GUARD_PARAMETERS_STAGE_H + +#define INITIAL_WATERLEVEL_ZONE_4_ACT_1 1546 +#define INITIAL_WATERLEVEL_ZONE_4_ACT_2 1664 + +#define SPOTLIGHT_DESPAWN_X0 1368 +#define SPOTLIGHT_DESPAWN_X1 1488 + +#define EGG_ROCKET_LAUNCH_MIN_X 1058 +#define EGG_ROCKET_BOOSTER_DEPART_MAX_Y 5568 +#define EGG_ROCKET_MIDDLE_DEPART_MAX_Y 3264 + +#endif // GUARD_PARAMETERS_STAGE_H diff --git a/sa1/include/game/sa1_sa2_shared/camera.h b/sa1/include/game/sa1_sa2_shared/camera.h new file mode 100644 index 0000000000..395e9594ad --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/camera.h @@ -0,0 +1,138 @@ +#ifndef GUARD_SAKIT_CAMERA_H +#define GUARD_SAKIT_CAMERA_H + +#include "core.h" +#include "config.h" + +#if ((GAME == GAME_SA1) || (PORTABLE)) +typedef s16 CamCoord; +#else +typedef s32 CamCoord; +#endif + +#define TILE_WIDTH 8 +#define CAM_REGION_WIDTH 256 +#define TILES_PER_METATILE_AXIS 12 +#define METATILE_DIM (TILES_PER_METATILE_AXIS * TILE_WIDTH) + +#define TO_WORLD_POS(pos, region) ((pos)*TILE_WIDTH + (region)*CAM_REGION_WIDTH) +#define TO_WORLD_POS_INV(pos, region) ((region)*CAM_REGION_WIDTH + (pos)*TILE_WIDTH) + +#define CAM_BOUND_X ((DISPLAY_WIDTH) + (CAM_REGION_WIDTH)) +#define CAM_BOUND_Y ((DISPLAY_HEIGHT) + ((CAM_REGION_WIDTH) / 2)) + +typedef void (*BgUpdate)(s32, s32); + +#define CAM_MODE_SPECTATOR 4 + +// NOTE: This was copy-pasted from SA2. +// There are type differences for members +typedef struct Camera { + /* 0x00|0x04 */ CamCoord x; // TODO: might this be unsigned actually? + /* 0x02|0x04 */ CamCoord y; // TODO: might this be unsigned actually? +#if (GAME == GAME_SA1) + /* 0x04 */ s16 SA2_LABEL(unk8); + /* 0x06 */ s16 SA2_LABEL(unkC); + /* 0x08 */ CamCoord SA2_LABEL(unk10); + /* 0x0A */ CamCoord SA2_LABEL(unk14); + /* 0x0C */ s16 shiftX; + /* 0x0E */ s16 shiftY; + /* 0x10 */ s16 SA2_LABEL(unk20); + /* 0x12 */ s16 SA2_LABEL(unk24); + + // TODO: Why are X/Y swapped? + // Did they make this a matrix or sth.? + // (Used to calc min/max cam pos in UpdateCamera()) + /* 0x14 */ s16 minY; + /* 0x16 */ s16 maxY; + /* 0x18 */ s16 minX; + /* 0x1A */ s16 maxX; + /* 0x1C */ s16 SA2_LABEL(unk40); + /* 0x1E */ s16 SA2_LABEL(unk44); + /* 0x20 */ s16 SA2_LABEL(unk48); + /* 0x22 */ s16 SA2_LABEL(unk4C); + /* 0x24 */ u16 unk24; + /* 0x26 */ u16 SA2_LABEL(unk50); + /* 0x28 */ u16 SA2_LABEL(unk52); + /* 0x2A */ u16 SA2_LABEL(unk54); + /* 0x2C */ BgUpdate fnBgUpdate; + /* 0x30 */ struct Task *movementTask; + /* 0x34 */ s16 shakeOffsetX; + /* 0x36 */ s16 shakeOffsetY; + /* 0x38 */ s16 SA2_LABEL(unk64); + /* 0x3A */ u8 spectatorTarget; + /* 0x3B */ u8 filler3B[0x2]; +#elif (GAME == GAME_SA2) + /* 0x08 */ s32 unk8; + /* 0x0C */ s32 unkC; + /* 0x10 */ s32 unk10; + /* 0x14 */ s32 unk14; + /* 0x18 */ s32 shiftX; + /* 0x1C */ s32 shiftY; + /* 0x20 */ s32 unk20; + /* 0x24 */ s32 unk24; + + // TODO: Why are X/Y swapped? + // Did they make this a matrix or sth.? + // (Used to calc min/max cam pos in UpdateCamera()) + /* 0x28 */ s32 minY; + /* 0x2c */ s32 maxY; + /* 0x30 */ s32 minX; + /* 0x34 */ s32 maxX; + + /* 0x38 */ s32 dx; + /* 0x3c */ s32 dy; + /* 0x40 */ s16 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ s32 unk48; + /* 0x4c */ s32 unk4C; + + // 0x4 = spectator + // mode + /* 0x50 */ u16 unk50; + + /* 0x52 */ u16 unk52; + /* 0x54 */ u16 unk54; + /* 0x56 */ s16 unk56; + /* 0x58 */ BgUpdate fnBgUpdate; + /* 0x5C */ struct Task *movementTask; + /* 0x60 */ s16 shakeOffsetX; + /* 0x62 */ s16 shakeOffsetY; + /* 0x64 */ s16 unk64; + /* 0x66 */ u8 spectatorTarget; +#endif +} Camera; /* size 0x80(in SA2) */ + +extern struct Camera gCamera; + +// TODO: Merge all these into one! +#define IS_OUT_OF_RANGE_2(x, y, radiusX, radiusY) \ + ((x < -(radiusX)) || (x > DISPLAY_WIDTH + (radiusX)) || (y < -(radiusY)) || (y > DISPLAY_HEIGHT + (radiusY))) + +// No idea on this one +#define IS_OUT_OF_RANGE_3(x, y, radiusX, radiusY) \ + ((x < -(radiusX)) || (x > DISPLAY_WIDTH + (radiusX)) || ((y) + (radiusY) < 0) || (y > DISPLAY_HEIGHT + (radiusY))) + +// TODO: Merge all these into one! +#define IS_OUT_OF_RANGE_(UNUSED, x, y, radius) IS_OUT_OF_RANGE_2(x, y, radius, radius) + +#define IS_OUT_OF_RANGE_OLD(castType, x, y, dim) \ + (((castType)(x + (dim / 2)) > DISPLAY_WIDTH + dim) || (y + (dim / 2) < 0) || (y > DISPLAY_HEIGHT + (dim / 2))) + +#define IS_OUT_OF_RANGE IS_OUT_OF_RANGE_OLD + +// @NOTE/INVESTIGATE: Some places match with u16, some with u32, +// but u16 is more common, so it's the default. +#define IS_OUT_OF_CAM_RANGE(_x, _y) IS_OUT_OF_RANGE(u16, _x, _y, CAM_REGION_WIDTH) +#define IS_OUT_OF_CAM_RANGE_TYPED(castType, _x, _y) IS_OUT_OF_RANGE(castType, _x, _y, CAM_REGION_WIDTH) + +#define IS_OUT_OF_DISPLAY_RANGE(_x, _y) \ + ((_x) > gCamera.x + (DISPLAY_WIDTH + (CAM_REGION_WIDTH / 2)) || (_x) < gCamera.x - (CAM_REGION_WIDTH / 2) \ + || (_y) > gCamera.y + CAM_BOUND_Y || (_y) < gCamera.y - (CAM_REGION_WIDTH / 2)) + +// TODO: Remove macro and replace calls of it with 'IS_OUT_OF_RANGE' once rewritten. +#define IS_OUT_OF_GRAV_TRIGGER_RANGE(x, y) IS_OUT_OF_RANGE_(u16, x, y, (CAM_REGION_WIDTH / 2)) + +#define IS_OUT_OF_LOOP_TRIGGER_RANGE(x, y) IS_OUT_OF_RANGE_3(x, y, (CAM_REGION_WIDTH / 2), (CAM_REGION_WIDTH / 2)) + +#endif // GUARD_SAKIT_CAMERA_H diff --git a/sa1/include/game/sa1_sa2_shared/collect_ring_effect.h b/sa1/include/game/sa1_sa2_shared/collect_ring_effect.h new file mode 100644 index 0000000000..73eebd9b9b --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/collect_ring_effect.h @@ -0,0 +1,8 @@ +#ifndef GUARD_COLLECT_RING_EFFECT_H +#define GUARD_COLLECT_RING_EFFECT_H + +#include "gba/types.h" + +void CreateCollectRingEffect(s16 x, s16 y); + +#endif // GUARD_COLLECT_RING_EFFECT_H diff --git a/sa1/include/game/sa1_sa2_shared/collision.h b/sa1/include/game/sa1_sa2_shared/collision.h new file mode 100644 index 0000000000..66472ff090 --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/collision.h @@ -0,0 +1,86 @@ +#ifndef GUARD_STAGE_ENTITIES_0_H +#define GUARD_STAGE_ENTITIES_0_H + +#include "core.h" +#include "rect.h" +#include "game/sa1_sa2_shared/camera.h" // for CamCoord +#include "game/sa1_sa2_shared/player.h" + +#define COLL_NONE 0 +#define COLL_FLAG_1 0x00000001 +#define COLL_FLAG_2 0x00000002 +#define COLL_FLAG_4 0x00000004 +#define COLL_FLAG_8 0x00000008 +#define COLL_FLAG_10 0x00000010 +#define COLL_FLAG_20 0x00000020 +#define COLL_FLAG_40 0x00000040 +#define COLL_FLAG_80 0x00000080 +#define COLL_FLAG_10000 0x00010000 +#define COLL_FLAG_20000 0x00020000 +#define COLL_FLAG_40000 0x00040000 +#define COLL_FLAG_80000 0x00080000 +#define COLL_FLAG_100000 0x00100000 + +// TODO: Ensure these are correct! +typedef enum EHit { + HIT_NONE = 0, + HIT_ENEMY = 1, + HIT_PLAYER = 2, +} EHit; + +// SA1, MP Player +s32 sub_80097E4(Sprite *s, CamCoord x, CamCoord y, s16 qSpeedX, s16 qSpeedY, u8 layer, u8 arg6); + +#if (GAME == GAME_SA1) +u32 Coll_Player_Entity_RectIntersection(Sprite *s, s16 sx, s16 sy, Player *p, struct Rect8 *rectPlayer); +#elif (GAME == GAME_SA2) +u32 Coll_Player_Entity_RectIntersection(Sprite *s, s32 sx, s32 sy, Player *p, struct Rect8 *rectPlayer); +#endif + +// param4 might be hitbox index? +u32 Coll_Player_Gate(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p, u32 param4); + +u32 Coll_Player_PlatformCrumbling(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +bool32 Coll_Player_Projectile(Sprite *s, CamCoord screenX, CamCoord screenY); // might be in SA2? +u32 sub_800C0E0(Sprite *s, CamCoord screenX, CamCoord screenY, Player *p); +u32 sub_800C394(Sprite *s, CamCoord screenX, CamCoord screenY, Player *p); + +// TODO: Include header this belongs to +u32 sub_800C944(Sprite *, s32, s32); + +bool32 sub_800C204(Sprite *, s32, s32, s16, Player *, s16); +bool32 sub_800C320(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p); +bool32 sub_800CA20(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p); +bool32 IsColliding_Cheese(Sprite *sprTarget, s32 sx, s32 sy, s16 hbIndex, Player *p); +u32 SA2_LABEL(sub_800DA4C)(Sprite *opponent, s16 oppX, s16 oppY, UNUSED s32 param3, UNUSED s32 param4, u8 layer); + +bool32 Coll_DamagePlayer(Player *); +void Collision_AdjustPlayerSpeed(Player *); + +u32 sub_80096B0(Sprite *s, CamCoord x, CamCoord y, Player *p); +bool32 Coll_AmyHammer_Spring(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +u32 Coll_Player_Spring_Sideways(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +u32 Coll_Player_Itembox(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +u32 Coll_Player_SkatingStone(Sprite *, CamCoord x, CamCoord y, Player *); +u32 sub_800C1E8(Sprite *inSprite, Rect8 rectB, s16 sx, s16 sy, Player *p); +EHit sub_800C2B8(Sprite *s, s16 sx, s16 sy, Player *p); +bool32 sub_800C934(Sprite *s, s32 x, s32 y, Rect8 *rectPlayer, u32 UNUSED param4, Player *p, u32 *moveState); +bool32 sub_800CBBC(Sprite *s, s32 x, s32 y, Rect8 *rectPlayer, u32 UNUSED param4, Player *p, u32 *param6); +u32 sub_800CCB8(Sprite *, s32 x, s32 y, Player *); +EHit Coll_Player_Boss(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +EHit Coll_Player_Boss_1(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +EHit Coll_Player_Bosses_2_6(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +EHit sub_800BF10(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +EHit sub_800BFEC(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); +u32 sub_800CE94(Sprite *s, s32 sx, s32 sy, struct Rect8 *param3, Player *p); +bool32 SA2_LABEL(sub_800DD54)(Player *p); +bool32 SA2_LABEL(sub_800DE44)(Player *p); +u32 SA2_LABEL(sub_800D0A0)(Sprite *s, s16 worldX, s16 worldY, s16 qSpeedX, s16 qSpeedY, u8 layer, u32 arg6); + +#if (GAME == GAME_SA1) +bool32 Coll_Player_Enemy_Attack(Sprite *s, CamCoord worldX, CamCoord worldY); +#elif (GAME == GAME_SA2) +bool32 Coll_Player_Enemy_Attack(Sprite *s, CamCoord worldX, CamCoord worldY, u8 hbIndex); + +#endif +#endif // GUARD_STAGE_ENTITIES_0_H diff --git a/sa1/include/game/sa1_sa2_shared/demo_manager.h b/sa1/include/game/sa1_sa2_shared/demo_manager.h new file mode 100644 index 0000000000..17187a59ed --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/demo_manager.h @@ -0,0 +1,9 @@ +#ifndef GUARD_STAGE_DEMO_MANAGER_H +#define GUARD_STAGE_DEMO_MANAGER_H + +#include "global.h" +#include "data/recordings.h" + +void CreateDemoManager(void); + +#endif diff --git a/sa1/include/game/sa1_sa2_shared/dust_cloud.h b/sa1/include/game/sa1_sa2_shared/dust_cloud.h new file mode 100644 index 0000000000..a7945944eb --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/dust_cloud.h @@ -0,0 +1,6 @@ +#ifndef GUARD_GAME_DUST_CLOUD_H +#define GUARD_GAME_DUST_CLOUD_H + +void CreateDustCloud(s16 x, s16 y); + +#endif // GUARD_GAME_DUST_CLOUD_H \ No newline at end of file diff --git a/sa1/include/game/sa1_sa2_shared/entities_manager.h b/sa1/include/game/sa1_sa2_shared/entities_manager.h new file mode 100644 index 0000000000..86cac2f7f2 --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/entities_manager.h @@ -0,0 +1,48 @@ +#ifndef GUARD_STAGE_ENTITIES_MANAGER_H +#define GUARD_STAGE_ENTITIES_MANAGER_H + +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/camera.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; +} EntityShared; + +typedef struct { + /* 0x00 */ u32 uncompSize; // unsigned Q_24_8 + /* 0x04 */ u32 h_regionCount; + /* 0x08 */ u32 v_regionCount; + /* 0x0C */ u32 offsets[0]; // (h*v) * sizeof(u32) + + /* *** Data the offsets point to goes here *** + * - each different per type + * - Array per region: + * - IAs / Enemies: X/Y Pos, Type, 4 data bytes (5 in SA3) + * - Rings have X/Y position + * - Itemboxes have X/Y Pos and Type */ +} MapData; /* Unknown size */ + +typedef struct { + /* 0x00|0x00 */ MapData *interactables; + /* 0x04|0x04 */ MapData *items; + /* 0x08|0x08 */ MapData *enemies; + /* 0x0C|0x0C */ CamCoord prevCamX; + /* 0x0E|0x10 */ CamCoord prevCamY; + /* 0x10|0x14 */ u8 SA2_LABEL(unk14); +#if (GAME == GAME_SA2) + /* 0x18|0x18 */ struct Task *preInit; +#endif +} EntitiesManager; +extern struct Task *gEntitiesManagerTask; + +void CreateStageEntitiesManager(void); + +void CreateEnemyDefeatScoreAndManageLives(s16 x, s16 y); + +void TaskDestructor_EntityShared(struct Task *); + +#endif diff --git a/sa1/include/game/sa1_sa2_shared/globals.h b/sa1/include/game/sa1_sa2_shared/globals.h new file mode 100644 index 0000000000..eca79b2646 --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/globals.h @@ -0,0 +1,307 @@ +#ifndef GUARD_SAKIT_GLOBALS_H +#define GUARD_SAKIT_GLOBALS_H + +#include "multi_sio.h" +#include "core.h" + +#define GAME_MODE_SINGLE_PLAYER 0 +#define GAME_MODE_TIME_ATTACK 1 + +#define GAME_MODE_MULTI_PLAYER 3 +#if (GAME == GAME_SA1) +#define GAME_MODE_RACE 2 +#define GAME_MODE_CHAO_HUNT 4 +#define GAME_MODE_TEAM_PLAY 5 +#define GAME_MODE_MULTI_PLAYER_COLLECT_RINGS 6 +#elif (GAME == GAME_SA2) +#define GAME_MODE_BOSS_TIME_ATTACK 2 +#define GAME_MODE_TEAM_PLAY 4 +#define GAME_MODE_MULTI_PLAYER_COLLECT_RINGS 5 +#endif + +// TODO: Improve this name +#define IS_MP_OR_TEAM_PLAY ((gGameMode == GAME_MODE_MULTI_PLAYER) || (gGameMode == GAME_MODE_TEAM_PLAY)) + +#if (GAME == GAME_SA1) +#define IS_SINGLE_PLAYER ((gGameMode == GAME_MODE_SINGLE_PLAYER) || (gGameMode == GAME_MODE_TIME_ATTACK)) +#elif (GAME == GAME_SA2) +#define IS_SINGLE_PLAYER \ + ((gGameMode == GAME_MODE_SINGLE_PLAYER) || (gGameMode == GAME_MODE_TIME_ATTACK) || (gGameMode == GAME_MODE_BOSS_TIME_ATTACK)) +#endif + +#if (GAME == GAME_SA1) +#define GAME_MODE_IS_TIME_ATTACK (gGameMode == GAME_MODE_TIME_ATTACK) +#elif (GAME == GAME_SA2) +#define GAME_MODE_IS_TIME_ATTACK (gGameMode == GAME_MODE_TIME_ATTACK || gGameMode == GAME_MODE_BOSS_TIME_ATTACK) +#endif + +#if (GAME == GAME_SA1) +#define GAME_MODE_REQUIRES_ITEM_RNG \ + ((gGameMode != GAME_MODE_SINGLE_PLAYER) && (gGameMode != GAME_MODE_TIME_ATTACK) && (gGameMode != GAME_MODE_RACE) \ + && (gGameMode != GAME_MODE_MULTI_PLAYER)) +#elif (GAME == GAME_SA2) +#define GAME_MODE_REQUIRES_ITEM_RNG (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) +) +#endif + +#define IS_MULTI_PLAYER (!(IS_SINGLE_PLAYER)) + +#define STAGE_FLAG__CLEAR 0x0000 +#define STAGE_FLAG__ACT_START 0x0001 // Turns timer off, likely other effects? +#define STAGE_FLAG__2 0x0002 +#define STAGE_FLAG__TIMER_REVERSED 0x0004 // Timer gets lower on every tick, and player loses life on 0:00:00. +#define STAGE_FLAG__10 0x0010 +#define STAGE_FLAG__DISABLE_PAUSE_MENU 0x0020 +#define STAGE_FLAG__DEMO_RUNNING 0x0040 // TODO: Check accuracy of name +#define STAGE_FLAG__GRAVITY_INVERTED 0x0080 +#define STAGE_FLAG__100 0x0100 // Set during stage's "loading screen" +#define STAGE_FLAG__TURN_OFF_TIMER 0x0200 +#define STAGE_FLAG__TURN_OFF_HUD 0x0400 + +#define DIFFICULTY_NORMAL 0 +#define DIFFICULTY_EASY 1 + +#define MAX_PLAYER_NAME_LENGTH 6 + +#define GRAVITY_IS_INVERTED (gStageFlags & STAGE_FLAG__GRAVITY_INVERTED) + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u16 fadeoutSpeed; +} MusicManagerState; /* size: 8 */ + +typedef struct { + s32 squarePlayerDistance; + u16 angle; +} HomingTarget; + +// Common RoomEvent variables +#define ROOMEVENT_BASE u8 type + +// RoomEvent opaque struct +// See 'multiplayer_event_mgr.h' for more information on this +typedef struct { + ROOMEVENT_BASE; + + u8 opaque[7]; +} RoomEvent; /* 0x8 */ + +#define CHEESE_DISTANCE_MAX 200 +typedef struct { + /* 0x00 */ s32 squarePlayerDistance; + /* 0x04 */ struct Task *task; +} CheeseTarget; /* size: unknown (but >= 0x8?) */ + +// Incomplete +extern u8 gDemoPlayCounter; + +#if (GAME == GAME_SA1) +extern u16 ALIGNED(4) gSpecialStageReturnX; +#endif + +extern u8 gGameMode; + +extern s8 gCurrentLevel; +extern s8 gSelectedCharacter; +#if (GAME == GAME_SA1) +// NOTE: Treat gTailsEnabled as bool8, it just does not match unsigned +extern s8 gTailsEnabled; +extern s8 gNumSingleplayerCharacters; +#define NUM_SINGLEPLAYER_CHARS_MAX 2 +#endif + +extern u8 gMultiplayerLanguage; +extern s8 gMultiplayerCurrentLevel; + +// Sometimes loaded as s16, but as u16 most of the time. +// If you encounter it being loaded as s16, please cast it. +extern u16 gRingCount; + +extern MusicManagerState gMusicManagerState; + +// Time that is being used to score the player (or in Time Attack) +extern u32 gCourseTime; + +// Collected Special Rings in current stage? +extern u8 gSpecialRingCount; + +// TODO: Types not checked yet! +extern s32 gUnknown_030054E0; +#if (GAME == GAME_SA2) +extern s32 gUnknown_030054FC; +#endif + +extern u16 gBossCameraClampYLower; +extern u16 gBossCameraClampYUpper; +extern u8 gRandomItemBox; +#if (GAME == GAME_SA1) +extern u16 gSpecialStageCollectedRings; +extern u16 gUnknown_0300507C; +#endif +extern u8 sa2__gUnknown_030053E0; + +extern s8 sa2__gUnknown_0300543C; +extern struct Task *gEntitiesManagerTask; + +extern u8 gDestroySpotlights; + +extern u8 gRoomEventQueueSendPos; + +// "Extra State" (see above #defines for states) +// TODO: Find better name. Put somewhere else? +extern u16 gStageFlags; +extern u16 sa2__gUnknown_0300544C; + +extern u8 gDifficultyLevel; + +extern s8 gTrappedAnimalVariant; + +extern u8 gBossIndex; // TODO: Rename to gLastCheckpointIndex? (SA1 AND SA2!) +extern u8 gUnknown_030054F8; + +// Incremented by 1 every frame if the game is not paused. +// Starts before the stage-timer that is used for scores does. +extern u32 gStageTime; +extern u32 gMPStageStartFrameCount; + +extern u32 gCheckpointTime; // Checkpoint timer? + +extern u8 gRoomEventQueueWritePos; + +extern u8 gBossRingsRespawnCount; +extern bool8 gBossRingsShallRespawn; +extern bool8 gUnknown_030055BC; + +extern struct Task *gMultiplayerPlayerTasks[4]; +extern s8 gMultiplayerCharacters[4]; +extern s8 gMultiplayerRanks[4]; +extern u8 sa2__gUnknown_030054B8; + +extern u8 gMultiplayerMissingHeartbeats[4]; +extern u8 gActiveCollectRingEffectCount; + +extern u8 gMultiplayerUnlockedCharacters; + +#if (GAME == GAME_SA1) +extern u16 ALIGNED(4) gSpecialStageReturnY; +#elif (GAME == GAME_SA2) +u8 gMultiplayerUnlockedLevels; +#endif + +extern u32 gMultiplayerIds[MULTI_SIO_PLAYERS_MAX]; +extern u16 gMultiplayerNames[MULTI_SIO_PLAYERS_MAX][MAX_PLAYER_NAME_LENGTH]; + +extern u32 gMultiplayerPseudoRandom; + +extern s32 gLevelScore; +extern u8 gNumLives; +extern u8 SA2_LABEL(gUnknown_030054B0); + +extern HomingTarget gHomingTarget; + +extern u8 gMultiplayerConnections; + +// Only set after the player passed it, used to determine extra score +extern s32 gStageGoalX; + +extern u8 gMPRingCollectWins[4]; +extern u8 gMultiplayerCharRings[MULTI_SIO_PLAYERS_MAX]; + +extern RoomEvent gRoomEventQueue[16]; + +extern CheeseTarget gCheeseTarget; + +extern u8 gUnknown_030055D0[4]; + +#if 0 +extern u8 gNewInputCountersIndex; +extern u8 gNewInputCounters[128]; +#else + +struct InputCounters { + u8 unk0, unk1, unk2, unk3; +}; + +extern u8 gNewInputCountersIndex; +extern struct InputCounters gNewInputCounters[32]; +#endif + +extern u8 gUnknown_030055D8; + +#if (GAME == GAME_SA1) && !defined(BUG_FIX) +// NOTE: gNumLives is u8, so without the bounds-check, +// which SA1 did not have, 255 would overflow to 0. +// During regular gameplay you would not get that many 1UPs, though. +#define LIVES_BOUND_CHECK_A(lives) (lives) +#define LIVES_BOUND_CHECK_B(lives) (lives) +#define NEW_LIVE_COUNT(_type, _varname, _inc) (gNumLives += 1) + +#define BOUND_CHK_VARNAME gNumLives +#else +#define LIVES_BOUND_CHECK_A(lives) \ + ({ \ + if ((lives) > 255) \ + (lives) = 255; \ + gNumLives = (lives); \ + }) + +#define LIVES_BOUND_CHECK_B(lives) \ + ({ \ + if (lives > 255) { \ + gNumLives = 255; \ + } else { \ + gNumLives = lives; \ + } \ + }) + +#define NEW_LIVE_COUNT(_type, _varname, _inc) \ + _type _varname = divResA - divResB; \ + _varname += _inc; + +#define BOUND_CHK_VARNAME lives +#endif + +#define INCREMENT_SCORE_BASE(_inc, restartMusic, BoundCheck) \ + { \ + s32 divResA, divResB; \ + s32 oldScore = gLevelScore; \ + gLevelScore += _inc; \ + \ + divResA = Div(gLevelScore, 50000); \ + divResB = Div(oldScore, 50000); \ + \ + if ((divResA != divResB) && (gGameMode == GAME_MODE_SINGLE_PLAYER)) { \ + NEW_LIVE_COUNT(u16, BOUND_CHK_VARNAME, gNumLives); \ + BoundCheck(BOUND_CHK_VARNAME); \ + \ + if (restartMusic) \ + gMusicManagerState.unk3 = 0x10 | 0x0; \ + } \ + } + +#define INCREMENT_SCORE_A(_inc) INCREMENT_SCORE_BASE(_inc, FALSE, LIVES_BOUND_CHECK_A) +#define INCREMENT_SCORE(_inc) INCREMENT_SCORE_BASE(_inc, TRUE, LIVES_BOUND_CHECK_A) +#define INCREMENT_SCORE_B(_inc) INCREMENT_SCORE_BASE(_inc, TRUE, LIVES_BOUND_CHECK_B) + +#define INCREMENT_RINGS(_inc) \ + { \ + s32 prevLives, newLives; \ + u16 oldRings = gRingCount; \ + gRingCount = oldRings + (_inc); \ + if (!(IS_EXTRA_STAGE(gCurrentLevel))) { \ + newLives = Div(gRingCount, 100); \ + prevLives = Div(oldRings, 100); \ + if ((newLives != prevLives) && (gGameMode == GAME_MODE_SINGLE_PLAYER)) { \ + u16 lives = gNumLives + 1; \ + gNumLives = LIVES_BOUND_CHECK_A(lives); \ + gMusicManagerState.unk3 = 0x10 | 0x0; \ + } \ + } \ + } + +#endif // GUARD_SAKIT_GLOBALS_H diff --git a/sa1/include/game/sa1_sa2_shared/input_buffer.h b/sa1/include/game/sa1_sa2_shared/input_buffer.h new file mode 100644 index 0000000000..69300e6b67 --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/input_buffer.h @@ -0,0 +1,17 @@ +#ifndef GUARD_SA2_INPUT_BUFFER +#define GUARD_SA2_INPUT_BUFFER + +#include "game/sa1_sa2_shared/player.h" + +void SA2_LABEL(sub_800E0C0)(u16 param0, u16 param1); +void SA2_LABEL(sub_800DF8C)(Player *p); + +extern const u8 *SA2_LABEL(unk_8C87198)[3]; +extern const u8 *SA2_LABEL(unk_8C871A4)[3]; +extern const u8 *SA2_LABEL(unk_8C871B0)[3]; +extern const u8 *SA2_LABEL(unk_8C871BC)[3]; +extern const u8 *SA2_LABEL(unk_8C871C8)[3]; + +#define INPUTBUF_NULL_PTR ((void *)((intptr_t)-1)) + +#endif // GUARD_SA2_INPUT_BUFFER diff --git a/sa1/include/game/sa1_sa2_shared/itembox.h b/sa1/include/game/sa1_sa2_shared/itembox.h new file mode 100644 index 0000000000..36ea77841a --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/itembox.h @@ -0,0 +1,12 @@ + +#ifndef GUARD_STAGE_ITEM_BOX_H +#define GUARD_STAGE_ITEM_BOX_H + +#include "global.h" +#include "game/entity.h" + +void CreateEntity_ItemBox(MapEntity *, u16, u16, u8); + +extern const s8 ItemBox_RingAmountTable[]; + +#endif // GUARD_STAGE_ITEM_BOX_H diff --git a/sa1/include/game/sa1_sa2_shared/music_manager.h b/sa1/include/game/sa1_sa2_shared/music_manager.h new file mode 100644 index 0000000000..4f55435c3c --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/music_manager.h @@ -0,0 +1,10 @@ +#ifndef GUARD_STAGE_MUSIC_MANAGER_H +#define GUARD_STAGE_MUSIC_MANAGER_H + +#include "global.h" + +void CreateStageMusicManager(void); + +extern const u16 gLevelSongs[]; + +#endif diff --git a/sa1/include/game/sa1_sa2_shared/palette_loader.h b/sa1/include/game/sa1_sa2_shared/palette_loader.h new file mode 100644 index 0000000000..9ed6006e7a --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/palette_loader.h @@ -0,0 +1,10 @@ +#ifndef GUARD_STAGE_PALETTE_LOADER_H +#define GUARD_STAGE_PALETTE_LOADER_H + +#include "global.h" +#include "task.h" +#include "sprite.h" + +struct Task *CreatePaletteLoaderTask(u16 priority, AnimId anim, u8 variant, TaskDestructor dtor); + +#endif diff --git a/sa1/include/game/sa1_sa2_shared/pause_menu.h b/sa1/include/game/sa1_sa2_shared/pause_menu.h new file mode 100644 index 0000000000..6cd5f64407 --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/pause_menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_STAGE_PAUSE_MENU_H +#define GUARD_STAGE_PAUSE_MENU_H + +void CreatePauseMenu(void); + +#endif // GUARD_STAGE_PAUSE_MENU_H \ No newline at end of file diff --git a/sa1/include/game/sa1_sa2_shared/player.h b/sa1/include/game/sa1_sa2_shared/player.h new file mode 100644 index 0000000000..4fbebeda5e --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/player.h @@ -0,0 +1,223 @@ +#ifndef GUARD_SAKIT_PLAYER_H +#define GUARD_SAKIT_PLAYER_H + +#include "core.h" +#include "constants/characters.h" // for NUM_CHARACTERS +#include "constants/move_states.h" + +#define PLAYER_IS_ALIVE (!(gPlayer.moveState & MOVESTATE_DEAD)) +#define IS_ALIVE(player) (!((player)->moveState & MOVESTATE_DEAD)) + +#define PLAYER_ON_SPRITE(p, s) (((p).moveState & MOVESTATE_STOOD_ON_OBJ) && ((p).stoodObj == (s))) +#define PLAYER_I_ON_SPRITE(i, s) ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == (s))) + +typedef struct { + /*0x00 */ SpriteTransform transform; + /*0x0C */ Sprite s; + /*0x3C */ Hitbox reserved; // TODO: Likely 3 hitboxes (Player, Action, Shield)? +} PlayerSpriteInfo; /* size: 0x4C */ + +// extern PlayerSpriteInfo gPlayerLimbsPSI; +extern PlayerSpriteInfo gPlayerBodyPSI; +extern PlayerSpriteInfo gPartnerBodyPSI; + +// Declared beforehand because it's used inside Player struct +struct Player; +typedef void (*PlayerCallback)(struct Player *); + +// TODO: Better name. +// This is used for an apparent around the value Cream uses for flying duration +typedef struct { + /* 0x80|0xAC */ u8 flags; + /* 0x81|0xAD */ s8 SA2_LABEL(unkAD); + /* 0x82|0xAE */ u16 SA2_LABEL(unkAE); + /* 0x84|0xB0 */ u16 SA2_LABEL(unkB0); +} SonicFlags; + +#if (GAME == GAME_SA2) +typedef struct { + /* 0x80|0xAC */ s16 flyingDuration; + /* 0x82|0xAE */ u16 SA2_LABEL(unkAE); + /* 0x93|0xB0 */ s8 SA2_LABEL(unkB0); +} CreamFlags; +#endif + +typedef struct { + /* 0x80|0xAC */ u8 flags; + /* 0x81|0xAD */ s8 shift; + /* 0x82|0xAE */ s8 SA2_LABEL(unkAE); + /* 0x83|0xAF */ s8 SA2_LABEL(unkAF); + + // NOTE: For some reason this is a 4-byte value, while Cream's is a 2-byte + /* 0x84|0xB0 */ s32 flyingDuration; +} TailsFlags; + +typedef struct { + /* 0x80|0xAC */ u8 flags; + /* 0x81|0xAD */ s8 shift; // TODO: Name + /* 0x82|0xAE */ s8 SA2_LABEL(unkAE); +} KnucklesFlags; + +typedef struct { + /* 0xAC */ u8 flags; +} AmyFlags; + +#define PLAYER_ITEM_EFFECT__NONE 0x00 +#define PLAYER_ITEM_EFFECT__SHIELD_NORMAL 0x01 +#define PLAYER_ITEM_EFFECT__INVINCIBILITY 0x02 +#define PLAYER_ITEM_EFFECT__SPEED_UP 0x04 +#define PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC 0x08 +#define PLAYER_ITEM_EFFECT__MP_SLOW_DOWN 0x10 +#define PLAYER_ITEM_EFFECT__20 0x20 +#define PLAYER_ITEM_EFFECT__CONFUSION 0x40 +#define PLAYER_ITEM_EFFECT__TELEPORT 0x80 // The name doesn't seem right... + +#define HAS_SHIELD(p) ((p)->itemEffect & (PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC | PLAYER_ITEM_EFFECT__SHIELD_NORMAL)) + +// Confusion +#define PLAYER_ITEM_EFFECT__40 0x40 + +// Teleport in SA2... Grinding in SA1? +#define PLAYER_ITEM_EFFECT__80 0x80 + +#define PLAYER_LAYER__FRONT 0x00 +#define PLAYER_LAYER__BACK 0x01 +#define PLAYER_LAYER__MASK 0x01 +#define PLAYER_LAYER__80 0x80 + +#define PLAYER_1 0 +#define PLAYER_2 1 +#define PLAYER_3 2 +#define PLAYER_4 3 + +#if (GAME == GAME_SA1) + +#ifndef NON_MATCHING +// Previously called GET_SP_PLAYER_V0/GET_SP_PLAYER_V1 +#define PLAYER_V0(index) ((index == 0) ? gPlayer : gPartner) +#define PLAYER(index) (((index) != 0) ? gPartner : gPlayer) + +#define PLAYER_SPR_INFO(index) ((index != 0) ? gPartnerBodyPSI : gPlayerBodyPSI) +#else +// Modern GCC does not accept the pointerless macro as l-value, +// but even though agbcc does, it generates non-matching code, so we have to account for that. +#define PLAYER_V0(index) (*(((index) == 0) ? &gPlayer : &gPartner)) +#define PLAYER(index) (*(((index) != 0) ? &gPartner : &gPlayer)) + +#define PLAYER_SPR_INFO(index) (*((index != 0) ? &gPartnerBodyPSI : &gPlayerBodyPSI)) +#endif + +#define PLAYER_SPR_INFO_HITBOX(index, hbIndex) \ + ((index != 0) ? (&gPartnerBodyPSI.s.hitboxes[hbIndex]) : (&gPlayerBodyPSI.s.hitboxes[hbIndex])) + +#elif (GAME == GAME_SA2) +// NOTE: Ignores index, in SA2 you only ever have 1 player char in single player mode +#define GET_SP_PLAYER_V0(index) (&gPlayer) +#define GET_SP_PLAYER_V1(index) (&gPlayer) +#elif (GAME == GAME_SA3) +#define GET_SP_PLAYER_V0(index) ((index == PLAYER_1) ? &gPlayers[gStageData.playerIndex] : &gPlayers[p->charFlags.partnerIndex]) +#define GET_SP_PLAYER_V1(index) ((index != PLAYER_1) ? &gPlayers[p->charFlags.partnerIndex] : &gPlayers[gStageData.playerIndex]) +#endif + +typedef struct Player { + /* 0x00 */ s32 qWorldX; + /* 0x04 */ s32 qWorldY; + /* 0x08 */ s16 qSpeedAirX; + /* 0x0A */ s16 qSpeedAirY; + /* 0x0C */ s16 qSpeedGround; + /* 0x0E */ s8 spriteOffsetX; + /* 0x0F */ s8 spriteOffsetY; + + // set/compare to values in "include/constants/move_states.h" + /* 0x10 */ u32 moveState; + /* 0x14 */ u8 rotation; + /* 0x15 */ u8 SA2_LABEL(unk25); + /* 0x16 */ s16 qSpindashAccel; + /* 0x18 */ u8 SA2_LABEL(unk28); + /* 0x19 */ u8 SA2_LABEL(unk29); + /* 0x1A */ s16 SA2_LABEL(unk2A); + /* 0x1C */ s16 timerInvulnerability; + /* 0x1E */ s16 timerInvincibility; + /* 0x20 */ s16 timerSpeedup; // Also used for the MP slowdown item + /* 0x22 */ u16 timerConfusion; + /* 0x24 */ u16 timer24; + /* 0x26 */ u8 itemEffect; + /* 0x27 */ u8 layer; // TODO: Double-Check the name! + /* 0x28 */ Sprite *stoodObj; // TODO: Change name! + /* 0x2C */ s32 maxSpeed; // TODO: Rename qMaxSpeed,SA2 has 'maxSpeed' and 'topSpeed', which is this? + /* 0x30 */ s32 acceleration; // TODO: Rename qAcceletation + /* 0x34 */ s32 deceleration; // TODO: Rename qDeceletation + /* 0x38 */ u16 heldInput; + /* 0x3A */ u16 frameInput; + /* 0x3C */ s8 playerID; + /* 0x3D */ s8 SA2_LABEL(unk61); + /* 0x3E */ s8 SA2_LABEL(unk62); + /* 0x3F */ s8 SA2_LABEL(unk63); + /* 0x40 */ s8 charState; + /* 0x41 */ s8 prevCharState; + /* 0x42 */ u16 anim; + /* 0x44 */ u16 variant; + /* 0x46 */ s16 SA2_LABEL(unk72); + /* 0x48 */ s16 checkPointX; // TODO: Make their type CamCoord ? + /* 0x4A */ s16 checkPointY; // TODO: Make their type CamCoord ? + /* 0x4C */ u32 checkpointTime; + + // TODO: Could these be a matrix? + /* 0x50 */ u16 SA2_LABEL(unk7C); + /* 0x52 */ u16 SA2_LABEL(unk7E); + /* 0x54 */ s16 SA2_LABEL(unk80); + /* 0x56 */ s16 SA2_LABEL(unk82); + + /* 0x58 */ s8 defeatScoreIndex; + /* 0x59 */ s8 character; + /* 0x5A */ s8 secondsUntilDrown; + /* 0x5B */ s8 framesUntilDrownCountDecrement; + /* 0x5C */ s8 SA2_LABEL(unk88); + /* 0x5D */ u8 filler5D[0x3]; + + /* 0x60 */ struct Task *spriteTask; + /* 0x64 */ PlayerSpriteInfo *spriteInfoBody; // for character sprites + /* 0x68 */ PlayerSpriteInfo *spriteInfoLimbs; // SpriteInfo for Tails' tails / Cream's ears, when rolling + +#ifdef BUG_FIX + // NOTE: There's a copy in player.c's 'InitializePlayer' that + // copies via a (u32 *) to unk99. + // + // Since it is offset originally, platforms only writing words + // aligned (or crash when trying to write to an odd pointer) will + // not have the memory initialized properly. + // + // Ironically this is a non-crashing bug on GBA as well. + /* 0x6C */ s8 ALIGNED(4) SA2_LABEL(unk99)[16]; + /* 0x7C */ u8 SA2_LABEL(unk98); // Multiplayer var. TODO: check sign! +#else + /* 0x6C */ u8 SA2_LABEL(unk98); // Multiplayer var. TODO: check sign! + /* 0x6D */ s8 SA2_LABEL(unk99)[16]; +#endif + + /* 0x7D */ u8 filler7D[0x3]; + + union { + SonicFlags sf; +#if (GAME == GAME_SA2) + CreamFlags cf; +#endif + TailsFlags tf; + KnucklesFlags kf; + AmyFlags af; + } w; + + /* 0x88 */ u8 filler88[0x8]; +} Player; + +extern s32 sa2__sub_8022F58(u8 param0, Player *p); + +extern Player gPlayer; +#if (GAME == GAME_SA1) +// "Cheat Code" Tails +extern Player gPartner; +#endif + +extern const AnimId gPlayerCharacterIdleAnims[NUM_CHARACTERS]; + +#endif // GUARD_SAKIT_PLAYER_H diff --git a/sa1/include/game/sa1_sa2_shared/ring.h b/sa1/include/game/sa1_sa2_shared/ring.h new file mode 100644 index 0000000000..ac4578523b --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/ring.h @@ -0,0 +1,6 @@ +#ifndef GUARD_STAGE_RING_H +#define GUARD_STAGE_RING_H + +extern void CreateMagneticRing(s16 x, s16 y); + +#endif // GUARD_STAGE_RING_H \ No newline at end of file diff --git a/sa1/include/game/sa1_sa2_shared/rings_manager.h b/sa1/include/game/sa1_sa2_shared/rings_manager.h new file mode 100644 index 0000000000..5882a4299a --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/rings_manager.h @@ -0,0 +1,36 @@ +#ifndef GUARD_RINGS_MANAGER_H +#define GUARD_RINGS_MANAGER_H + +#include "global.h" +#include "rect.h" +#include "constants/zones.h" + +#define MP_COLLECT_RINGS_COMPRESSED_POS_DATA ((u8 **)(EWRAM_START + 0x33008)) +#define MP_COLLECT_RINGS_COMPRESSED_SIZE (u8 **)(EWRAM_START + 0x3300C) +#define MP_COLLECT_RINGS_BUFFER (u8 *)(EWRAM_START + 0x3F000) + +#if (GAME == GAME_SA1) +#define RESERVED_RING_TILES_VRAM (void *)(OBJ_VRAM0 + 0x1D00) +#define RESERVED_RING_EFFECT_TILES_VRAM (void *)(OBJ_VRAM0 + 0x1F00) +#elif (GAME == GAME_SA2) +#define RESERVED_RING_TILES_VRAM (void *)(OBJ_VRAM0 + 0x1F00) +#define RESERVED_RING_EFFECT_TILES_VRAM (void *)(OBJ_VRAM0 + 0x2100) +#endif + +#define RECT_TOUCHING_RING(posX, posY, ringIntX, ringIntY, rect) \ + ((((ringIntX - TILE_WIDTH) <= RECT_LEFT((posX), rect) && (ringIntX + TILE_WIDTH) >= RECT_LEFT((posX), rect)) \ + || ((ringIntX - TILE_WIDTH) >= RECT_LEFT((posX), rect) && RECT_RIGHT((posX), rect) >= (ringIntX - TILE_WIDTH))) \ + && ((((ringIntY - (TILE_WIDTH * 2)) <= RECT_TOP((posY), rect) && ringIntY >= RECT_TOP((posY), rect)) \ + || ((ringIntY - (TILE_WIDTH * 2)) >= RECT_TOP((posY), rect) && RECT_BOTTOM((posY), rect) >= (ringIntY - (TILE_WIDTH * 2)))))) + +#define HB_TOUCHING_RING(posX, posY, ringIntX, ringIntY, hb) \ + ((((ringIntX - TILE_WIDTH) <= HB_LEFT((posX), hb) && (ringIntX + TILE_WIDTH) >= HB_LEFT((posX), hb)) \ + || ((ringIntX - TILE_WIDTH) >= HB_LEFT((posX), hb) && HB_RIGHT((posX), hb) >= (ringIntX - TILE_WIDTH))) \ + && ((((ringIntY - (TILE_WIDTH * 2)) <= HB_TOP((posY), hb) && ringIntY >= HB_TOP((posY), hb)) \ + || ((ringIntY - (TILE_WIDTH * 2)) >= HB_TOP((posY), hb) && HB_BOTTOM((posY), hb) >= (ringIntY - (TILE_WIDTH * 2)))))) + +extern const u8 *const gSpritePosData_rings[NUM_LEVEL_IDS]; + +void CreateStageRingsManager(void); + +#endif // GUARD_RINGS_MANAGER_H \ No newline at end of file diff --git a/sa1/include/game/sa1_sa2_shared/spot_light_beam_task.h b/sa1/include/game/sa1_sa2_shared/spot_light_beam_task.h new file mode 100644 index 0000000000..002bd15618 --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/spot_light_beam_task.h @@ -0,0 +1,17 @@ +#ifndef GUARD_STAGE_UNK_TASK_H +#define GUARD_STAGE_UNK_TASK_H + +// Declared in header because it's used outside the module +typedef struct { + s16 unk0; + u16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + u8 bg; + u8 unkB; +} SpotlightBeam; /* size: 0xC */ + +struct Task *CreateSpotlightBeamTask(void); + +#endif // GUARD_STAGE_UNK_TASK_H \ No newline at end of file diff --git a/sa1/include/game/sa1_sa2_shared/spot_lights_manager.h b/sa1/include/game/sa1_sa2_shared/spot_lights_manager.h new file mode 100644 index 0000000000..b93124740c --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/spot_lights_manager.h @@ -0,0 +1,7 @@ +#ifndef GUARD_SA1_SPOT_LIGHTS_H +#define GUARD_SA1_SPOT_LIGHTS_H + +// Return value tells, whether or not spot lights were created by the function call +extern bool32 CreateSpotlightsManager(void); + +#endif // GUARD_SA1_SPOT_LIGHTS_H \ No newline at end of file diff --git a/sa1/include/game/sa1_sa2_shared/unused_level_select.h b/sa1/include/game/sa1_sa2_shared/unused_level_select.h new file mode 100644 index 0000000000..4d0a58692b --- /dev/null +++ b/sa1/include/game/sa1_sa2_shared/unused_level_select.h @@ -0,0 +1,6 @@ +#ifndef GUARD_UNUSED_LEVEL_SELECT +#define GUARD_UNUSED_LEVEL_SELECT + +void CreateUnusedLevelSelect(void); + +#endif diff --git a/sa1/include/game/save.h b/sa1/include/game/save.h new file mode 100644 index 0000000000..3177ce586d --- /dev/null +++ b/sa1/include/game/save.h @@ -0,0 +1,164 @@ +#ifndef GUARD_SAVE_H +#define GUARD_SAVE_H + +#include "global.h" + +#include "game/sa1_sa2_shared/globals.h" + +//#include "game/stage/player_controls.h" +#include "constants/zones.h" +#include "constants/characters.h" + +#define PLAYER_NAME_END_CHAR 0xFFFF + +#define NUM_MULTIPLAYER_SCORES 10 +#define MAX_MULTIPLAYER_SCORE 99 + +#define TIME_RECORDS_PER_COURSE 3 + +#if (GAME == GAME_SA1) +typedef u8 PlayerNameChar; +typedef u32 TimeRecord; +#elif (GAME == GAME_SA2) +typedef u16 PlayerNameChar; +typedef u16 TimeRecord; +#endif + +#if (GAME == GAME_SA1) +struct TimeRecords { + TimeRecord table[NUM_CHARACTERS][NUM_LEVEL_IDS][TIME_RECORDS_PER_COURSE]; +}; + +// This is split off because of some code accessing the data as an array. +// Modern compilers don't like that (for good reason!) +typedef struct MultiplayerScoreDataSplit { + // TODO/NOTE: Only 6 chars are displayed, but the string is treated 8-char wide + PlayerNameChar playerName[MAX_PLAYER_NAME_LENGTH + 2]; + + u8 wins; + u8 losses; + u8 draws; +} MultiplayerScoreDataSplit; + +typedef union { + MultiplayerScoreDataSplit split; + u8 raw[sizeof(MultiplayerScoreDataSplit)]; +} MultiplayerScoreData; + +struct MultiplayerScore { + u32 playerId; + MultiplayerScoreData data; +}; + +#define NUM_TIME_RECORD_ROWS (NUM_TIME_ATTACK_ZONES * ACTS_PER_ZONE * NUM_CHARACTERS * TIME_RECORDS_PER_COURSE) + +#define BTNCONFIG_NORMAL 0 +#define BTNCONFIG_REVERSE 1 + +typedef struct SaveGame { + /* 0x000 */ u32 security; // Save Sector Magic Number + /* 0x004 */ s32 unk4; + /* 0x008 */ u16 unlockedLevels[NUM_CHARACTERS]; + /* 0x010 */ PlayerNameChar playerName[MAX_PLAYER_NAME_LENGTH + 2]; + /* 0x018 */ u8 difficultyLevel; + /* 0x019 */ u8 uiLanguage; + /* 0x01A */ u8 language; + /* 0x01B */ u8 timeLimitDisabled; + /* 0x01C */ u8 btnConfig; + /* 0x01D */ u8 chaosEmeralds; + /* 0x020 */ struct TimeRecords timeRecords; + /* 0x380 */ struct MultiplayerScore multiplayerScores[NUM_MULTIPLAYER_SCORES]; + /* 0x420 */ u32 unk420; + /* 0x424 */ u8 unk424; + /* 0x425 */ u8 unk425; + /* 0x426 */ u8 unk426; + /* 0x427 */ u8 unk427; + /* 0x428 */ u32 score; + /* 0x42C */ u32 checksum; +} SaveGame; /* 0x430 */ + +// NOTE: Not a pointer in SA1! +extern struct SaveGame gLoadedSaveGame; +#elif (GAME == GAME_SA2) +struct TimeRecords { + TimeRecord table[NUM_CHARACTERS][NUM_TIME_ATTACK_ZONES][ACTS_PER_ZONE][TIME_RECORDS_PER_COURSE]; +}; + +#define NUM_TIME_RECORD_ROWS (NUM_TIME_ATTACK_ZONES * ACTS_PER_ZONE * NUM_CHARACTERS * TIME_RECORDS_PER_COURSE) + +struct MultiplayerScore { + u32 playerId; + PlayerNameChar playerName[MAX_PLAYER_NAME_LENGTH]; + + bool8 slotFilled; + + u8 wins; + u8 losses; + u8 draws; +}; + +typedef struct SaveGame { + /* 0x000 */ u32 id; + + /* 0x004 */ u8 difficultyLevel; + /* 0x005 */ bool8 timeLimitDisabled; + /* 0x006 */ u8 language; + + /* 0x007 */ u8 unlockedLevels[NUM_CHARACTERS]; + /* 0x00C */ u8 chaosEmeralds[NUM_CHARACTERS]; + + /* 0x011 */ bool8 soundTestUnlocked; + /* 0x012 */ bool8 bossTimeAttackUnlocked; + + /* 0x013 */ u8 unlockedCharacters; + /* 0x014 */ bool8 chaoGardenUnlocked; + + /* 0x015 */ bool8 completedCharacters[NUM_CHARACTERS]; + + /* 0x01A */ u8 extraZoneStatus; + /* 0x01B */ bool8 extraEndingCreditsPlayed; + + /* 0x01C */ u8 multiplayerWins; + /* 0x01D */ u8 multiplayerLoses; + /* 0x01E */ u8 multiplayerDraws; + + /* 0x020 */ PlayerNameChar playerName[MAX_PLAYER_NAME_LENGTH]; + + /* 0x02C */ struct ButtonConfig buttonConfig; + /* 0x034 */ struct TimeRecords timeRecords; + /* 0x2AC */ struct MultiplayerScore multiplayerScores[NUM_MULTIPLAYER_SCORES]; + /* 0x374 */ u32 score; +} SaveGame; + +extern struct SaveGame *gLoadedSaveGame; +#endif + +#if (GAME == GAME_SA1) +#define LOADED_SAVE (&gLoadedSaveGame) +#elif (GAME == GAME_SA2) +#define LOADED_SAVE (gLoadedSaveGame) +#endif + +#define MULTIPLAYER_RESULT_WIN 0 +#define MULTIPLAYER_RESULT_LOSS 1 +#define MULTIPLAYER_RESULT_DRAW 2 + +void InsertMultiplayerProfile(u32 playerId, u16 *name); +void RecordOwnMultiplayerResult(s16 result); +void RecordMultiplayerResult(u32 id, u16 *name, s16 result); + +bool32 RegisterTimeRecord(TimeRecord newRecord); + +void SaveInit(void); +#if (GAME == GAME_SA1) +bool32 SaveGameExists(void); +u16 WriteSaveGame(void); +#else +bool16 SaveGameExists(void); +bool32 WriteSaveGame(void); +#endif +s16 NewSaveGame(void); +s16 LoadSaveGame(void); +void LoadCompletedSaveGame(void); + +#endif diff --git a/sa1/include/game/some_task_manager.h b/sa1/include/game/some_task_manager.h new file mode 100644 index 0000000000..7b742ec310 --- /dev/null +++ b/sa1/include/game/some_task_manager.h @@ -0,0 +1,49 @@ +#ifndef GUARD_SOME_TASK_MANAGER_H +#define GUARD_SOME_TASK_MANAGER_H + +typedef struct GfxInfo { + TileInfoBitfield tileInfo; + u8 *vram; +} GfxInfo; + +struct SomeTaskManager_7C; +typedef struct { + /* 0x00 */ s16 unk0; + /* 0x02 */ u8 unk2; + /* 0x03 */ u8 unk3; + /* 0x04 */ s32 unk4; + /* 0x08 */ struct SomeTaskManager_7C *unk8; + /* 0x0C */ SpriteTransform transform; + /* 0x18 */ Sprite s; + /* 0x48 */ Hitbox reserved; + /* 0x50 */ s32 qUnk50; + /* 0x54 */ s32 qUnk54; + /* 0x58 */ s16 qUnk58; + /* 0x5A */ s16 qUnk5A; + /* 0x5C */ u16 qUnk5C; + /* 0x5E */ u16 qUnk5E; +} SomeTaskManager_60; /* 0x60 */ + +typedef struct SomeTaskManager_7C { + /* 0x00 */ SomeTaskManager_60 unk0; + /* 0x60 */ u32 unk60; + /* 0x64 */ s32 unk64; + /* 0x68 */ s32 unk68; + /* 0x6C */ s32 unk6C; + /* 0x70 */ u16 unk70; + /* 0x72 */ s16 unk72; + /* 0x74 */ u16 unk74; + /* 0x76 */ u16 unk76; + /* 0x78 */ u8 filler78[0x4]; +} SomeTaskManager_7C; /* 0x7C */ + +void sub_804CFA0(SomeTaskManager_60 *taskData); +bool32 sub_804CFE0(u16 *param0, u16 param1, u16 param2); +s32 GetAirDashDirection(s32 n); +void sub_804D13C(u16 param0); +struct Task *CreateSomeTaskManager_60_Task(GfxInfo *gfx, TaskMain proc, TaskDestructor dtor); // -> SomeTaskManager_60 +struct Task *CreateSomeTaskManager_7C_Task(GfxInfo *gfx, TaskMain proc, TaskDestructor dtor); // -> SomeTaskManager_7C +void TaskDestructor_SomeTaskManager_60_Common(struct Task *t); +extern ALIGNED(16) u16 gUnknown_030060F0[64]; + +#endif // GUARD_SOME_TASK_MANAGER_H \ No newline at end of file diff --git a/sa1/include/game/special_stage/main.h b/sa1/include/game/special_stage/main.h new file mode 100644 index 0000000000..68d1bb9690 --- /dev/null +++ b/sa1/include/game/special_stage/main.h @@ -0,0 +1,12 @@ +#ifndef GUARD_SA1_SPECIAL_STAGE_H +#define GUARD_SA1_SPECIAL_STAGE_H + +extern u16 gSpecialStageCollectedRings; +extern u16 gSpecialStageTargetRings; // TODO: another ring counter... +extern u8 gUnknown_03005730; // TODO: is this u8 or s8? +extern void CreateTempSoundTask(u16 songId); +extern void CreateSpStageTrickSoundTask(u16 expectedSongId, u16 resumeSongId); +extern void CreateSpecialStage(); // SA2: has 2 params +extern void CreateSpecialStageIntro(); + +#endif // GUARD_SA1_SPECIAL_STAGE_H \ No newline at end of file diff --git a/sa1/include/game/stage/backgrounds/zone_3.h b/sa1/include/game/stage/backgrounds/zone_3.h new file mode 100644 index 0000000000..612c7f1314 --- /dev/null +++ b/sa1/include/game/stage/backgrounds/zone_3.h @@ -0,0 +1,21 @@ +#ifndef GUARD_GAME_STAGE_BG_ZONE3_H +#define GUARD_GAME_STAGE_BG_ZONE3_H + +#include "gba/types.h" +#include "sprite.h" + +typedef struct { + /* 0x00 */ s32 qWorldX; + /* 0x04 */ s32 qWorldY; + /* 0x08 */ u8 filler08[0x10]; + /* 0x18 */ Sprite s; +} CasinoParadiseFirework; + +extern const TileInfoFirework gTileInfoZone3Fireworks[2]; + +extern void CreateStageBg_Zone5(void); +extern void StageBgUpdate_Zone5Acts12(s32 x, s32 y); +extern struct Task *SpawnCasinoFireworkMP(s16 x, s16 y, s32 fireworkType); +extern void Task_UpdateFireworkAnimation(void); + +#endif // GUARD_GAME_STAGE_BG_ZONE3_H \ No newline at end of file diff --git a/sa1/include/game/stage/backgrounds/zone_5.h b/sa1/include/game/stage/backgrounds/zone_5.h new file mode 100644 index 0000000000..8208e1437b --- /dev/null +++ b/sa1/include/game/stage/backgrounds/zone_5.h @@ -0,0 +1,9 @@ +#ifndef GUARD_GAME_STAGE_BG_ZONE5_H +#define GUARD_GAME_STAGE_BG_ZONE5_H + +#include "gba/types.h" + +extern void CreateStageBg_Zone5(void); +extern void StageBgUpdate_Zone5Acts12(s32 x, s32 y); + +#endif // GUARD_GAME_STAGE_BG_ZONE5_H \ No newline at end of file diff --git a/sa1/include/game/stage/backgrounds/zone_6.h b/sa1/include/game/stage/backgrounds/zone_6.h new file mode 100644 index 0000000000..c32221bb4d --- /dev/null +++ b/sa1/include/game/stage/backgrounds/zone_6.h @@ -0,0 +1,8 @@ +#ifndef GUARD_GAME_STAGE_BG_ZONE6_H +#define GUARD_GAME_STAGE_BG_ZONE6_H + +#include "gba/types.h" + +extern void HBlankCallback_803FA1C(int_vcount line); + +#endif // GUARD_GAME_STAGE_BG_ZONE6_H \ No newline at end of file diff --git a/sa1/include/game/stage/camera.h b/sa1/include/game/stage/camera.h new file mode 100644 index 0000000000..e3ae1860cd --- /dev/null +++ b/sa1/include/game/stage/camera.h @@ -0,0 +1,47 @@ +#ifndef GUARD_GAME_STAGE_CAMERA_H +#define GUARD_GAME_STAGE_CAMERA_H + +#include "global.h" +#include "core.h" + +#include "game/sa1_sa2_shared/camera.h" + +#define CAMBG_MAP_FRONT_LAYER 0 +#define CAMBG_MAP_BACK_LAYER 1 +#define CAMBG_BACK_A_LAYER 2 +#define CAMBG_BACK_B_LAYER 3 + +#if !WIDESCREEN_HACK +#define CAM_SCREENBASE_BACK_A 28 +#define CAM_SCREENBASE_BACK_B 29 +#define CAM_SCREENBASE_BACK_C 26 +#define CAM_SCREENBASE_MAP_FRONT 30 +#define CAM_SCREENBASE_MAP_BACK 31 +#else +#define CAM_SCREENBASE_BACK_A 48 +#define CAM_SCREENBASE_BACK_B 50 +#define CAM_SCREENBASE_BACK_C 58 +#define CAM_SCREENBASE_MAP_FRONT 52 +#define CAM_SCREENBASE_MAP_BACK 56 +#endif + +struct Backgrounds { + Background unk0; + Background unk40; + Background unk80; + Background unkC0; +}; + +extern const Background gStageCameraBgTemplates[4]; + +void InitCamera(u32); +void UpdateCamera(void); +void DestroyCameraMovementTask(void); + +extern const Collision *gRefCollision; + +extern const u16 gUnknown_080D5964[][2]; + +extern struct Backgrounds gStageBackgroundsRam; + +#endif // GUARD_GAME_STAGE_CAMERA_H diff --git a/sa1/include/game/stage/dust_effect_braking.h b/sa1/include/game/stage/dust_effect_braking.h new file mode 100644 index 0000000000..fb010dfcae --- /dev/null +++ b/sa1/include/game/stage/dust_effect_braking.h @@ -0,0 +1,26 @@ +#ifndef GUARD_BRAKE_DUST_CLOUD_H +#define GUARD_BRAKE_DUST_CLOUD_H + +#include "core.h" + +struct Task *CreateBrakingDustEffect(s32, s32); // -> BrakeDustEffect +void CreateBrakingDustEffectRelatedTask(void); +void DestroyBrakingDustEffectRelatedTask(void); + +typedef struct { + /* 0x00 */ u16 x; + /* 0x02 */ u16 y; + /* 0x04 */ u16 unk4; + /* 0x06 */ u16 unk6; + /* 0x08 */ Sprite s; +} BrakeDustEffect; + +typedef struct { + s8 unk0; + u8 filler1[3]; + struct Task *t; // -> BrakeDustEffect +} DustEffectBraking; + +extern DustEffectBraking gDustEffectBrakingTask; + +#endif // GUARD_BRAKE_DUST_CLOUD_H diff --git a/sa1/include/game/stage/dust_effect_spindash.h b/sa1/include/game/stage/dust_effect_spindash.h new file mode 100644 index 0000000000..9129683ab1 --- /dev/null +++ b/sa1/include/game/stage/dust_effect_spindash.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SPINDASH_DUST_CLOUD +#define GUARD_SPINDASH_DUST_CLOUD + +struct Task *CreateSpindashDustEffect(); + +#endif // GUARD_SPINDASH_DUST_CLOUD \ No newline at end of file diff --git a/sa1/include/game/stage/extra_stage.h b/sa1/include/game/stage/extra_stage.h new file mode 100644 index 0000000000..50d82a5b7b --- /dev/null +++ b/sa1/include/game/stage/extra_stage.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SA1_EXTRA_STAGE_H +#define GUARD_SA1_EXTRA_STAGE_H + +extern void CreateExtraStageResults(); + +#endif // GUARD_SA1_EXTRA_STAGE_H diff --git a/sa1/include/game/stage/grind_effect_1.h b/sa1/include/game/stage/grind_effect_1.h new file mode 100644 index 0000000000..8c23222c43 --- /dev/null +++ b/sa1/include/game/stage/grind_effect_1.h @@ -0,0 +1,8 @@ +#ifndef GUARD_GRIND_EFFECT_1_H +#define GUARD_GRIND_EFFECT_1_H + +#include "task.h" + +struct Task *CreateGrindEffect(void); + +#endif // GUARD_GRIND_EFFECT_1_H \ No newline at end of file diff --git a/sa1/include/game/stage/item_tasks.h b/sa1/include/game/stage/item_tasks.h new file mode 100644 index 0000000000..6f445e9d2e --- /dev/null +++ b/sa1/include/game/stage/item_tasks.h @@ -0,0 +1,12 @@ +#ifndef GUARD_GAME_ITEM_TASKS_H +#define GUARD_GAME_ITEM_TASKS_H + +#include "gba/types.h" +#include "task.h" + +extern struct Task *CreateItemTask_Shield_Normal(s8); +extern struct Task *CreateItemTask_Invincibility(s8); +extern struct Task *CreateItemTask_Shield_Magnetic(s8); +extern struct Task *CreateItemTask_Confusion(s8); + +#endif // GUARD_GAME_ITEM_TASKS_H \ No newline at end of file diff --git a/sa1/include/game/stage/mp_sprite_task.h b/sa1/include/game/stage/mp_sprite_task.h new file mode 100644 index 0000000000..13b1954307 --- /dev/null +++ b/sa1/include/game/stage/mp_sprite_task.h @@ -0,0 +1,35 @@ +#ifndef GUARD_GAME_2_H +#define GUARD_GAME_2_H + +#include "global.h" +#include "sprite.h" + +typedef struct { + /* 0x00 */ s32 x; + /* 0x04 */ s32 y; + /* 0x08 */ s16 unk8; + /* 0x0A */ s16 unkA; + /* 0x0C */ u8 fillerC[0x4]; + /* 0x10 */ s16 unk10; + /* 0x12 */ u16 unk12; + /* 0x14 */ u16 unk14; +#if (GAME == GAME_SA1) + /* 0x16 */ u8 mpPlayerID; +#elif (GAME == GAME_SA2) + /* 0x16 */ AnimId playerAnim; + /* 0x18 */ u16 playerVariant; + /* 0x1A */ u8 mpPlayerID; +#endif + /* 0x18|0x1C */ Sprite s; + /* 0x48|0x4C */ SpriteTransform transform; +} MultiplayerSpriteTask; /* size: 0x58 */ + +extern struct Task *CreateMultiplayerSpriteTask(s16 x, s16 y, u8 param2, s8 param3, TaskMain main, TaskDestructor dtor); +extern void TaskDestructor_MultiplayerSpriteTask(struct Task *); + +void CreateGrindEffect2(void); + +extern struct Task *CreateStageGoalBonusPointsAnim(s32, s32, u16); +extern void Task_UpdateMpSpriteTaskSprite(void); + +#endif // GUARD_GAME_2_H \ No newline at end of file diff --git a/sa1/include/game/stage/player.h b/sa1/include/game/stage/player.h new file mode 100644 index 0000000000..9db30ba253 --- /dev/null +++ b/sa1/include/game/stage/player.h @@ -0,0 +1,111 @@ +#ifndef GUARD_STAGE_PLAYER_H +#define GUARD_STAGE_PLAYER_H + +// TODO: Merge this file with this one!!! +#include "game/sa1_sa2_shared/player.h" + +// TODO: merge these +#include "constants/characters.h" +//#include "game/parameters/characters.h" + +// In SA2 tricks stop all characters when the buttons are pressed. +// Set this to TRUE to behave more like SA3. +#define DISABLE_TRICK_AIR_WAIT !TRUE + +// Actual type of 'type8029A28' currently unknown, rename once it is +typedef s32 type8029A28; + +void Player_SetMovestate_IsInScriptedSequence(void); +void Player_ClearMovestate_IsInScriptedSequence(void); + +void InitializePlayer(Player *p); +bool32 Player_Spindash(Player *p); +void DestroyPlayerTasks(Player *player); +void Player_TransitionCancelFlyingAndBoost(Player *p); +void Player_HandleSpriteYOffsetChange(Player *, s32); +void SA2_LABEL(sub_8022190)(Player *p); +void SA2_LABEL(sub_8022318)(Player *p); +void SA2_LABEL(sub_8022838)(Player *p); +void SA2_LABEL(sub_8022D6C)(Player *p); +void SA2_LABEL(sub_80231C0)(Player *p); +void sub_8023260(Player *); +void SA2_LABEL(sub_80232D0)(Player *p); +void sub_80232D0(Player *); +void Player_AirInputControls(Player *); +void Player_TouchGround(Player *p); +void Player_80261D8(Player *p); +void sub_8027EF0(Player *p); +void sub_8028204(Player *p); +void sub_80282EC(Player *p); +void sub_80283C4(Player *p); +void SA2_LABEL(sub_8029C84)(Player *p); +void SA2_LABEL(sub_8029CA0)(Player *p); +void SA2_LABEL(sub_8029D14)(Player *p); +void SA2_LABEL(sub_8029ED8)(Player *p); +void sub_8029FA4(Player *p); +void sub_804A8A8(s32 qX, s32 qY, s32 param2); + +void Player_DisableInputAndBossTimer(void); +void Player_DisableInputAndBossTimer_FinalBoss(void); + +void Player_8043DDC(Player *p); // SA1 addr +bool32 Player_8044250(Player *p); // SA1 addr +void Player_8044670(Player *p); // SA1 addr +void Player_8044750(Player *p); +void Player_8044F7C(Player *p); // SA1 addr +void Player_80470AC(Player *p); // SA1 addr +void sub_80472B8(Player *p); // SA1 addr +void Player_804726C(Player *p); // SA1 addr +void Player_8047224(Player *p); // SA1 addr +void Player_8047280(Player *p); // SA1 addr +void sub_8047714(Player *p); // SA1 addr +void Player_UpdatePosition(Player *p); +void PlayerFn_Cmd_UpdateAirFallSpeed(Player *p); + +// NOTE: Proc type should be the same as SetStageSpawnPosInternal! +void SetStageSpawnPos(u32 character, u32 level, u32 p2, Player *player); +void CallSetStageSpawnPos(u32 character, u32 level, u32 p2, Player *p); + +#if (GAME == GAME_SA1) +// Task -> (MultiplayerSpriteTask *) +struct Task *Player_Tails_InitGfxMarbleTrack(Player *p); +#endif + +void SA2_LABEL(sub_8021BE0)(Player *p); +s32 SA2_LABEL(sub_8029B88)(Player *player, u8 *p1, int *out); +s32 SA2_LABEL(sub_8029AC0)(Player *player, u8 *p1, s32 *out); +s32 SA2_LABEL(sub_8029B0C)(Player *player, u8 *p1, s32 *out); + +type8029A28 SA2_LABEL(sub_8029A28)(Player *player, u8 *p1, type8029A28 *out); +type8029A28 SA2_LABEL(sub_8029A74)(Player *player, u8 *p1, type8029A28 *out); + +bool32 Player_TryJump(Player *); +bool32 Player_TryAttack(Player *); + +#define GET_CHARACTER_ANIM(player) (player->anim - gPlayerCharacterIdleAnims[player->character]) + +#define PLAYERFN_SET(proc) gPlayer.callback = proc; +#define PLAYERFN_CALL(proc, player) proc(player); +#define PLAYERFN_SET_AND_CALL(proc, player) \ + { \ + PLAYERFN_SET(proc); \ + PLAYERFN_CALL(proc, player); \ + } + +#define PLAYERFN_SET_SHIFT_OFFSETS(player, x, y) \ + { \ + (player)->spriteOffsetX = x; \ + (player)->spriteOffsetY = y; \ + } +#define PLAYERFN_CHANGE_SHIFT_OFFSETS(player, x, y) \ + { \ + Player_HandleSpriteYOffsetChange(player, y); \ + PLAYERFN_SET_SHIFT_OFFSETS(player, x, y) \ + } + +// TODO: This is unaligned in-ROM. +// Can we somehow change this to be using a struct instead? +extern const u16 sCharStateAnimInfo[][2]; +extern const AnimId gPlayerCharacterIdleAnims[NUM_CHARACTERS]; + +#endif // GUARD_STAGE_PLAYER_H diff --git a/sa1/include/game/stage/player_controls.h b/sa1/include/game/stage/player_controls.h new file mode 100644 index 0000000000..09375b3f7d --- /dev/null +++ b/sa1/include/game/stage/player_controls.h @@ -0,0 +1,16 @@ +#ifndef GUARD_PLAYER_CONTROLS_H +#define GUARD_PLAYER_CONTROLS_H + +#include "global.h" + +struct ButtonConfig { + u16 jump; + u16 attack; + u16 trick; +}; + +extern struct ButtonConfig gPlayerControls; + +void SetPlayerControls(u16 jump, u16 attack, u16 trick); + +#endif // GUARD_PLAYER_CONTROLS_H diff --git a/sa1/include/game/stage/player_sonic.h b/sa1/include/game/stage/player_sonic.h new file mode 100644 index 0000000000..e15733c21e --- /dev/null +++ b/sa1/include/game/stage/player_sonic.h @@ -0,0 +1,6 @@ +#ifndef GUARD_STAGE_PLAYER_SONIC_H +#define GUARD_STAGE_PLAYER_SONIC_H + +void Player_Sonic_InitInstaShield(Player *p); + +#endif // GUARD_STAGE_PLAYER_SONIC_H diff --git a/sa1/include/game/stage/player_super_sonic.h b/sa1/include/game/stage/player_super_sonic.h new file mode 100644 index 0000000000..10c5c3da0d --- /dev/null +++ b/sa1/include/game/stage/player_super_sonic.h @@ -0,0 +1,11 @@ +#ifndef GUARD_STAGE_PLAYER_SUPER_SONIC_H +#define GUARD_STAGE_PLAYER_SUPER_SONIC_H + +#include "game/enemies/boss_xtra_super_egg_robo.h" + +void Task_8049898(void); +void sub_804A1B8(Player *p); // Called when Super Sonic is initialized + +#define EXTRA_BOSS__INITIAL_RING_COUNT 50 + +#endif // GUARD_STAGE_PLAYER_SUPER_SONIC_H diff --git a/sa1/include/game/stage/player_tails.h b/sa1/include/game/stage/player_tails.h new file mode 100644 index 0000000000..92e018e046 --- /dev/null +++ b/sa1/include/game/stage/player_tails.h @@ -0,0 +1,7 @@ +#ifndef GUARD_STAGE_PLAYER_TAILS_H +#define GUARD_STAGE_PLAYER_TAILS_H + +void Player_Tails_InitFlying(Player *p); +struct Task *Player_Tails_InitGfxMarbleTrack(Player *p); + +#endif // GUARD_STAGE_PLAYER_TAILS_H diff --git a/sa1/include/game/stage/results.h b/sa1/include/game/stage/results.h new file mode 100644 index 0000000000..acd0c3233a --- /dev/null +++ b/sa1/include/game/stage/results.h @@ -0,0 +1,32 @@ +#ifndef GUARD_STAGE_RESULTS_H +#define GUARD_STAGE_RESULTS_H + +#include "global.h" +#include "sprite.h" +#include "screen_fade.h" + +typedef struct { + /* 0x00 */ ScreenFade fade; + /* 0x0C */ Sprite title[3]; + /* 0x9C */ Sprite sprScores[3]; + /* 0x12C */ Sprite separator; + /* 0x15C */ u32 timeBonusScore; + /* 0x160 */ u32 ringBonusScore; + /* 0x164 */ u32 spRingBonusScore; + /* 0x168 */ s32 counter; // frames since task started + /* 0x16C */ s32 unk16C; +} StageResultsBase; /* size: 0x174 */ + +#if (GAME == GAME_SA1) +u32 CreateStageResults(u32, u32); +#elif (GAME == GAME_SA2) +u16 CreateStageResults(u32, u16, u8); +#endif +void StageResults_AnimateSeparator(void); +void StageResults_AnimateTitle(void); + +extern const u16 gAnimsGotThroughZoneAndActNames[][3]; +extern const u16 gStageResultsHeadlineTexts[][3]; +extern const u16 gAnimsGotThroughCharacterNames[][3]; + +#endif // GUARD_STAGE_RESULTS_H diff --git a/sa1/include/game/stage/rings_scatter.h b/sa1/include/game/stage/rings_scatter.h new file mode 100644 index 0000000000..c063e89788 --- /dev/null +++ b/sa1/include/game/stage/rings_scatter.h @@ -0,0 +1,49 @@ +#ifndef GUARD_SA2_RINGS_SCATTER_H +#define GUARD_SA2_RINGS_SCATTER_H + +#if (GAME == GAME_SA1) +#define MAX_SCATTERING_RINGS_COUNT_SP 48 +#define MAX_SCATTERING_RINGS_COUNT_MP 32 +#elif (GAME == GAME_SA2) +#define MAX_SCATTERING_RINGS_COUNT_SP 32 +#define MAX_SCATTERING_RINGS_COUNT_MP 16 +#endif + +#if (GAME == GAME_SA1) +#define UNK10_CONDITION 1 +#elif (GAME == GAME_SA2) +#define UNK10_CONDITION !(ring->unk10 & 0x7) +#endif + +typedef struct { + /* 0x00 */ s32 x; + /* 0x04 */ s32 y; + /* 0x08 */ s16 velX; + /* 0x0A */ s16 velY; + /* 0x0C */ u16 unkC; + /* 0x0E */ s16 unkE; +#if (GAME == GAME_SA2) + /* 0x10 */ u16 unk10; +#endif +} ScatterRing; /* size: 0x14 */ + +typedef struct { + /* 0x000|0x000 */ Sprite sprRing; + /* 0x030|0x030 */ ScatterRing rings[MAX_SCATTERING_RINGS_COUNT_SP]; + /* 0x330|0x2B0 */ u32 sa2__unk2B0; + /* 0x334|0x2B4 */ u16 sa2__unk2B4; + /* 0x336|0x2B6 */ u16 sa2__unk2B6; +} RingsScatter; /* size: 0x2B8 */ + +extern struct Task *gRingsScatterTask; // -> RingsScatter + +void InitPlayerHitRingsScatter(void); +void DestroyRingsScatterTask(void); + +void InitScatteringRings(s32 x, s32 y, s32 numRings); + +#if (GAME == GAME_SA1) +void InitScatteringRings_ExtraBossCapsule(s32 x, s32 y, s32 numRings); +#endif + +#endif // GUARD_SA2_RINGS_SCATTER_H diff --git a/sa1/include/game/stage/screen_fade.h b/sa1/include/game/stage/screen_fade.h new file mode 100644 index 0000000000..8cc6073127 --- /dev/null +++ b/sa1/include/game/stage/screen_fade.h @@ -0,0 +1,45 @@ +#ifndef GUARD_SCREEN_TRANSITION_H +#define GUARD_SCREEN_TRANSITION_H + +#include "global.h" + +#define SCREEN_FADE_USE_WINDOW_0 0 +#define SCREEN_FADE_USE_WINDOW_1 1 + +#define SCREEN_FADE_FLAG_DARKEN (0 << 0) +#define SCREEN_FADE_FLAG_LIGHTEN (1 << 0) +#define SCREEN_FADE_FLAG_2 (1 << 1) +#define SCREEN_FADE_FLAG_FF00 0xFF00 + +#define SCREEN_FADE_RUNNING 0 +#define SCREEN_FADE_COMPLETE 1 + +// NOTE: The GBA's internal brightness coefficient (BLDY) +// only has a range of 0 to 16, +// representing 0/16 to 16/16 of brightness. +// Any value above 16 will just cap out at 16/16. +#define SCREEN_FADE_BLEND_MAX 32 + +typedef struct { + // TODO: Is this a bool16? + /* 0x00 */ s16 window; + /* 0x02 */ s16 flags; + + // ((flags & 0x1) == TRANSITION_LIGHTEN) => + // Q_8_8( 0) = Dark + // Q_8_8(32) = Light + // + // ((flags & 0x1) TRANSITION_DARKEN) => + // Q_8_8( 0) = Light + // Q_8_8(32) = Dark + /* 0x04 */ s16 brightness; + /* 0x06 */ s16 speed; + /* 0x08 */ s16 bldCnt; + /* 0x0A */ s16 bldAlpha; +} ScreenFade; + +// Some sort of fade transition function? +extern u8 UpdateScreenFade(ScreenFade *); +void SA2_LABEL(sub_802D5A0)(ScreenFade *fade); + +#endif // GUARD_SCREEN_TRANSITION_H diff --git a/sa1/include/game/stage/screen_shake.h b/sa1/include/game/stage/screen_shake.h new file mode 100644 index 0000000000..a4886c5772 --- /dev/null +++ b/sa1/include/game/stage/screen_shake.h @@ -0,0 +1,16 @@ +#ifndef GUARD_SCREEN_SHAKE_H +#define GUARD_SCREEN_SHAKE_H + +#include "global.h" +#include "task.h" + +struct Task *CreateScreenShake(u32 p0, u32 p1, u32 p2, u32 p3, u32 flags); + +#define SCREENSHAKE_FACTOR_POSITIVE 0x1 +#define SCREENSHAKE_FACTOR_NEGATIVE 0x2 +#define SCREENSHAKE_FACTOR_MASK 0x3 +#define SCREENSHAKE_RANDOM_VALUE 0x10 +#define SCREENSHAKE_HORIZONTAL 0x40 +#define SCREENSHAKE_VERTICAL 0x80 + +#endif // GUARD_SCREEN_SHAKE_H \ No newline at end of file diff --git a/sa1/include/game/stage/spawn_positions.h b/sa1/include/game/stage/spawn_positions.h new file mode 100644 index 0000000000..b18c97aca8 --- /dev/null +++ b/sa1/include/game/stage/spawn_positions.h @@ -0,0 +1,14 @@ +#ifndef GUARD_STAGE_DATA_H +#define GUARD_STAGE_DATA_H + +#include "global.h" +#include "constants/zones.h" + +extern const s16 gSpawnPositions[NUM_LEVEL_IDS_SP][2]; +extern const s16 gSpawnPositions_Modes_4_and_5[NUM_LEVEL_IDS_MP][MULTI_SIO_PLAYERS_MAX][2]; +extern const Vec2_32 gCheckpointPositions[]; + +extern const Vec2_32 SA2_LABEL(gUnknown_080D650C)[]; +extern const Vec2_32 SA2_LABEL(gUnknown_080D661C)[]; + +#endif diff --git a/sa1/include/game/stage/stage.h b/sa1/include/game/stage/stage.h new file mode 100644 index 0000000000..db2284981c --- /dev/null +++ b/sa1/include/game/stage/stage.h @@ -0,0 +1,20 @@ +#ifndef GUARD_STAGE_H +#define GUARD_STAGE_H + +#include "global.h" +#include "core.h" +#include "constants/zones.h" + +void ApplyGameStageSettings(void); +void GameStageStart(void); +void CreateGameStage(void); +void GoToNextLevel(void); + +void HandleLifeLost(void); +void HandleDeath(void); + +void ApplyGameStageSettings(void); + +extern struct Task *gGameStageTask; + +#endif // GUARD_STAGE_H \ No newline at end of file diff --git a/sa1/include/game/stage/terrain_collision.h b/sa1/include/game/stage/terrain_collision.h new file mode 100644 index 0000000000..555830c7b3 --- /dev/null +++ b/sa1/include/game/stage/terrain_collision.h @@ -0,0 +1,25 @@ +#ifndef GUARD_STAGE_COLLISION_H +#define GUARD_STAGE_COLLISION_H + +#include "global.h" +#include "core.h" + +typedef s32 (*Func801F100)(s32, s32, s32); +s32 SA2_LABEL(sub_801EB44)(s32, s32, s32); +s32 SA2_LABEL(sub_801EC3C)(s32, s32, s32); + +typedef s32 (*Func801F07C)(s32, s32, s32, u8 *); +s32 SA2_LABEL(sub_801ED24)(s32, s32, s32, u8 *); +s32 SA2_LABEL(sub_801EE64)(s32, s32, s32, u8 *); +s32 SA2_LABEL(sub_801F07C)(s32, s32, s32, s32, u8 *, Func801F07C); + +// ground collision clamp functions +s32 SA2_LABEL(sub_801E4E4)(s32, s32, s32, s32, u8 *, Func801F07C); +s32 SA2_LABEL(sub_801E6D4)(s32, s32, s32, s32, u8 *, Func801F07C); + +void SA2_LABEL(sub_801F044)(void); +s32 SA2_LABEL(sub_801F100)(s32, s32, s32, s32, Func801F100); + +extern const Collision *const gCollisionTable[]; + +#endif // GUARD_STAGE_COLLISION_H diff --git a/sa1/include/game/stage/tilemap_table.h b/sa1/include/game/stage/tilemap_table.h new file mode 100644 index 0000000000..5868847489 --- /dev/null +++ b/sa1/include/game/stage/tilemap_table.h @@ -0,0 +1,8 @@ +#ifndef GUARD_TILEMAP_TABLE_H +#define GUARD_TILEMAP_TABLE_H + +#include "tilemap.h" + +extern const Tilemap *const gTilemaps[]; + +#endif // GUARD_TILEMAP_TABLE_H diff --git a/sa1/include/game/stage/trapped_animals.h b/sa1/include/game/stage/trapped_animals.h new file mode 100644 index 0000000000..6e1df99d46 --- /dev/null +++ b/sa1/include/game/stage/trapped_animals.h @@ -0,0 +1,8 @@ +#ifndef GUARD_TRAPPED_ANIMALS_H +#define GUARD_TRAPPED_ANIMALS_H + +#include "global.h" + +void CreateTrappedAnimal(s16 x, s16 y); + +#endif diff --git a/sa1/include/game/stage/ui.h b/sa1/include/game/stage/ui.h new file mode 100644 index 0000000000..6c86ec1ee3 --- /dev/null +++ b/sa1/include/game/stage/ui.h @@ -0,0 +1,113 @@ +#ifndef GUARD_SA1_GAME_STAGE_UI_H +#define GUARD_SA1_GAME_STAGE_UI_H + +#include "gba/types.h" // for bool32 +#include "game/game_over.h" +#include "game/gTask_03006240.h" // Strc_8052C84 * + +/* NOTE: This header is much more complicated than it needs to be. + It originated from splitting a "UI" module, + which wasn't one module after all, but the parts called functions that have shared + struct pointers as parameters. +*/ + +bool8 sub_805423C(StrcUi_805423C *param0); +void sub_80543A4(StrcUi_805423C *param0); + +#define UI_OAM_ORDER_INDEX 1 + +#define UI_DIGIT(_digit) ((_digit) + 32) +#define FROM_UI_DIGIT(_digit) ((_digit)-32) + +typedef struct { + u8 unk0[3]; + u8 unk3; + u8 filler4[4]; + u8 unk9; + u8 unkA; + u8 unkB; +} StageUI_10; + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +} StageUI_20; + +typedef struct { + /* 0x00 */ u8 digitsRings[3]; + /* 0x03 */ u8 filler3[0x5]; + /* 0x08 */ s16 unk8; + /* 0x0A */ s16 unkA; + /* 0x0C */ s16 unkC; + /* 0x0E */ s16 unkE; + /* 0x10 */ StageUI_10 unk10; + /* 0x1C */ u8 filler1C[0x4]; + /* 0x20 */ StageUI_20 unk20; + /* 0x28 */ u8 filler28[0x8]; + /* 0x30 */ u8 digitLives; + /* 0x31 */ u8 filler31[0xF]; + /* 0x40 */ u16 unk40; + /* 0x31 */ u8 filler42[0x2]; + /* 0x44 */ u16 ringCount; + /* 0x46 */ u8 filler46[0x2]; + /* 0x48 */ u16 unk48; + /* 0x4A */ u8 filler4A[0x2]; + /* 0x4C */ s16 unk4C; + /* 0x4E */ u8 filler4E[0x2]; +} StageUI; /* 0x50 */ + +typedef struct { + // TODO: Seems like this (until incl. unk16?) is GameOverB? + GameOverB unk0; + + s16 unk18; + u16 unk1A; + void *unk1C; + bool8 unk20; + u8 unk21; +} Strc_Ui_24; + +typedef struct { + /* 0x00 */ StrcUi_805423C unk0; + /* 0x0C */ struct Task *taskC; // -> Strc_Ui_24 + /* 0x10 */ struct Task *task10; // -> Strc_Ui_24 + /* 0x14 */ struct Task *task14; // -> Strc_Ui_24 + /* 0x18 */ struct Task *task18; // -> Strc_Ui_24 + /* 0x1C */ struct Task *task1C; // -> Strc_Ui_24 + /* 0x20 */ struct Task *task20; // -> Strc_Ui_24 + /* 0x24 */ s16 unk24; + /* 0x26 */ bool8 unk26; + /* 0x27 */ u8 unk27; +} Strc_Ui_28; + +typedef struct { + void *vram0; + void *vram4; + void *vram8; + void *vramC; + void *vram10; + struct Task *task14; + struct Task *task18; + struct Task *task1C; + struct Task *task20; + struct Task *task24; +} StrcStack; + +void LoadStageIntroGraphics(StrcStack *param0); +void sub_804A5D8(s32 x, s32 y); + +void CreateStageUI(void); +void CreateSpecialStageUI(void); + +// TODO: Maybe param1 is actually (GameOverB *) ? +void sub_8052E40(u8 *param0, Strc_8052C84 *param1); +void sub_80538BC(void); +bool32 sub_80549FC(void); + +#endif // GUARD_SA1_GAME_STAGE_UI_H \ No newline at end of file diff --git a/sa1/include/game/stage/underwater_effects.h b/sa1/include/game/stage/underwater_effects.h new file mode 100644 index 0000000000..8541322ce9 --- /dev/null +++ b/sa1/include/game/stage/underwater_effects.h @@ -0,0 +1,16 @@ +#ifndef GUARD_UNDERWATER_EFFECTS_H +#define GUARD_UNDERWATER_EFFECTS_H + +#include "core.h" +#include "game/sa1_sa2_shared/player.h" + +extern void sub_804C40C(void); + +struct Task *SpawnDrowningCountdownNum(Player *p, s32 countdown); +struct Task *SpawnAirBubbles(s32 p0, s32 p1, s32 p2, s32 p3); +struct Task *SpawnBubblesAfterDrowning(Player *p); +bool32 RandomlySpawnAirBubbles(Player *p); + +extern u8 gSmallAirBubbleCount; + +#endif // GUARD_UNDERWATER_EFFECTS_H diff --git a/sa1/include/game/time_attack/lobby.h b/sa1/include/game/time_attack/lobby.h new file mode 100644 index 0000000000..09e75d3871 --- /dev/null +++ b/sa1/include/game/time_attack/lobby.h @@ -0,0 +1,8 @@ +#ifndef GUARD_TIME_ATTACK_LOBBY_H +#define GUARD_TIME_ATTACK_LOBBY_H + +#include "global.h" + +void CreateTimeAttackLobbyScreen(void); + +#endif // GUARD_TIME_ATTACK_LOBBY_H diff --git a/sa1/include/game/time_attack/menu.h b/sa1/include/game/time_attack/menu.h new file mode 100644 index 0000000000..aee619951e --- /dev/null +++ b/sa1/include/game/time_attack/menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SA1_TIME_ATTACK_MENU_H +#define GUARD_SA1_TIME_ATTACK_MENU_H + +void CreateTimeAttackMenu(void); + +#endif // GUARD_SA1_TIME_ATTACK_MENU_H diff --git a/sa1/include/game/time_attack/results.h b/sa1/include/game/time_attack/results.h new file mode 100644 index 0000000000..00bc8047c5 --- /dev/null +++ b/sa1/include/game/time_attack/results.h @@ -0,0 +1,8 @@ +#ifndef GUARD_TIME_ATTACK_RESULTS_H +#define GUARD_TIME_ATTACK_RESULTS_H + +#include "global.h" + +u32 CreateTimeAttackResults(u32 finishTime); + +#endif // GUARD_TIME_ATTACK_RESULTS_H diff --git a/sa1/include/game/time_over.h b/sa1/include/game/time_over.h new file mode 100644 index 0000000000..45af96ced8 --- /dev/null +++ b/sa1/include/game/time_over.h @@ -0,0 +1,6 @@ +#ifndef GUARD_SA1_TIME_OVER_H +#define GUARD_SA1_TIME_OVER_H + +void CreateTimeOver(); + +#endif // GUARD_SA1_TIME_OVER_H diff --git a/sa1/include/game/title_screen.h b/sa1/include/game/title_screen.h new file mode 100644 index 0000000000..e6b55af6e0 --- /dev/null +++ b/sa1/include/game/title_screen.h @@ -0,0 +1,35 @@ +#ifndef GUARD_INTRO_H +#define GUARD_INTRO_H + +#include "global.h" +#include "sprite.h" + +// TODO: not sure why these were shared from here, may +// not be +#if (GAME == GAME_SA1) +extern const AnimId gPressStartTiles[2]; +#elif (GAME == GAME_SA2) +extern const TileInfo gPressStartTiles[]; +#endif + +#if (GAME == GAME_SA1) +void CreateTitleScreen(bool32 playMusic); +void CreateSegaLogo(void); +void CreateMainMenu(u32 param0); +void LoadTinyChaoGarden(void); + +#define TITLESCREEN_PARAM__BOOT_SILENT 0 +#define TITLESCREEN_PARAM__PLAY_MUSIC 1 +#elif (GAME == GAME_SA2) +void CreateTitleScreen(void); +void CreateTitleScreenAndSkipIntro(void); +// CreateTitleScreenAtPlayModeMenu +void CreateTitleScreenAtPlayModeMenu(void); +// CreateTitleScreenSkipToPlayModeMenu +void CreateTitleScreenAtSinglePlayerMenu(void); + +#define TITLESCREEN_PARAM__BOOT_SILENT /* empty */ +#define TITLESCREEN_PARAM__PLAY_MUSIC /* empty */ +#endif + +#endif diff --git a/sa1/include/game/water_effects.h b/sa1/include/game/water_effects.h new file mode 100644 index 0000000000..7cead89b15 --- /dev/null +++ b/sa1/include/game/water_effects.h @@ -0,0 +1,58 @@ +#ifndef GUARD_WATER_EFFECT_H +#define GUARD_WATER_EFFECT_H + +#include "core.h" + +#if (GAME == GAME_SA1) +#define HAS_RUN_ON_WATER FALSE +#elif (GAME >= GAME_SA2) +#define HAS_RUN_ON_WATER TRUE +#endif + +#ifdef M2C +// M2C: Empty structs are not supported. +#else +typedef struct { +#if (GAME == GAME_SA2) + u16 pal[32][16]; +#endif +} WaterData; +#endif + +typedef struct { +#if (GAME == GAME_SA1) +#ifdef BUG_FIX + /* 0x00 */ bool8 isActive; +#endif + /* 0x00 */ u8 SA2_LABEL(unk1); + /* 0x01 */ u8 SA2_LABEL(unk2); +#elif (GAME == GAME_SA2) + /* 0x00 */ bool8 isActive; + /* 0x01 */ u8 unk1; + /* 0x02 */ u8 unk2; + /* 0x03 */ u8 unk3; +#endif + /* 0x02|0x04 */ s16 currentWaterLevel; + /* 0x04|0x06 */ s16 targetWaterLevel; + /* 0x08|0x08 */ u32 unk8; + /* 0x0C|0x0C */ u32 mask; + + // Additional "palette memory", statically alloced in SA1! + /* 0x10 */ struct Task *t; /* size: SA1: 0x00, SA2: 0x400 */ + /* 0x14 */ Sprite s; +} Water; + +extern Water gWater; + +#if (GAME == GAME_SA2) +void InitWaterPalettes(void); +#endif + +#if (HAS_RUN_ON_WATER) +void CreateRunOnWaterEffect(void); +#endif // HAS_RUN_ON_WATER + +struct Task *CreateWaterfallSurfaceHitEffect(s32 x, s32 y); +void LoadPalette423Anim(void); + +#endif // GUARD_WATER_EFFECT_H diff --git a/sa1/include/gba/.clang-format b/sa1/include/gba/.clang-format new file mode 100644 index 0000000000..f54a540f5c --- /dev/null +++ b/sa1/include/gba/.clang-format @@ -0,0 +1,4 @@ +--- +DisableFormat: true +SortIncludes: Never +... diff --git a/sa1/include/gba/cpuset_macros.h b/sa1/include/gba/cpuset_macros.h new file mode 100644 index 0000000000..2cd6ab7c4e --- /dev/null +++ b/sa1/include/gba/cpuset_macros.h @@ -0,0 +1,32 @@ +#ifndef GUARD_GBA_CPUSET_MACROS_H +#define GUARD_GBA_CPUSET_MACROS_H + +#define CPU_FILL(value, dest, size, bit) \ +{ \ + vu##bit tmp = (vu##bit)(value); \ + CpuSet((void *)&tmp, \ + dest, \ + CPU_SET_##bit##BIT | CPU_SET_SRC_FIXED | ((size)/(bit/8) & 0x1FFFFF)); \ +} + +#define CpuFill16(value, dest, size) CPU_FILL(value, dest, size, 16) +#define CpuFill32(value, dest, size) CPU_FILL(value, dest, size, 32) + +#define CPU_COPY(src, dest, size, bit) CpuSet(src, dest, CPU_SET_##bit##BIT | ((size)/(bit/8) & 0x1FFFFF)) + +#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16) +#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32) + +#define CpuFastFill(value, dest, size) \ +{ \ + volatile uintptr_t tmp = (volatile uintptr_t)(value); \ + CpuFastSet((void *)&tmp, \ + dest, \ + CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \ +} + +#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size)) + +#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF)) + +#endif // GUARD_GBA_CPUSET_MACROS_H diff --git a/sa1/include/gba/defines.h b/sa1/include/gba/defines.h new file mode 100644 index 0000000000..bfbe033825 --- /dev/null +++ b/sa1/include/gba/defines.h @@ -0,0 +1,166 @@ +#ifndef GUARD_GBA_DEFINES +#define GUARD_GBA_DEFINES + +#ifndef GEN_CTX +#include +#include // for uint16_t +#endif +#include "color.h" + +#define TRUE 1 +#define FALSE 0 + +#if !PORTABLE +#define IWRAM_DATA __attribute__((section("iwram_data"))) +#define EWRAM_DATA __attribute__((section("ewram_data"))) +#else +#define IWRAM_DATA +#define EWRAM_DATA +#endif + +// TODO: Move these elsewhere? +// #ifdef __GNUC__ +#define NAKED __attribute__((naked)) +#define UNUSED __attribute__((unused)) +//#define PACKED __attribute__((packed)) +#define ALIGNED(n) __attribute__((aligned(n))) +// #endif + +#define EWRAM_SIZE 0x40000 +#define IWRAM_SIZE 0x7E00 +#define PLTT_SIZE 0x400 +#define BG_PLTT_SIZE 0x200 +#define OBJ_PLTT_SIZE 0x200 +#define VRAM_SIZE 0x18000 +#define BG_VRAM_SIZE 0x10000 +// The size of OBJ_VRAM0_SIZE depends on the "Mode" of the graphics hardware. +// The data is interpreted differently by the hardware in each mode. +#define OBJ_VRAM0_SIZE 0x8000 +#define OBJ_VRAM1_SIZE 0x4000 +#define OAM_ENTRY_COUNT 128 +#if PORTABLE +// NOTE: Used in gba/types.h, so they have to be defined before the #include +#if defined(__PSP__) +// PSP: Use GBA-native resolution, SDL scales to 480x272 +#define DISPLAY_WIDTH 240 +#define DISPLAY_HEIGHT 160 +#elif defined(__PS2__) +// Runs at 60fps with the "fast draw" +#define DISPLAY_WIDTH 320 +#define DISPLAY_HEIGHT 180 +#else +#define DISPLAY_WIDTH 426 +#define DISPLAY_HEIGHT 240 +#endif + +// NOTE: We shouldn't consider WIDESCREEN_HACK a permanent thing. +// This hack should best be removed once there's a "native" platform layer. +#if ((DISPLAY_WIDTH >= 256) || (DISPLAY_HEIGHT >= 256)) +#undef VRAM_SIZE +#define VRAM_SIZE (0x18000 + (0x800 * (12))) +#define WIDESCREEN_HACK TRUE +#define EXTENDED_OAM !TRUE // TODO: re-enable once rendering works properly +#else +#define WIDESCREEN_HACK FALSE +#define EXTENDED_OAM !TRUE +#endif +extern uint8_t VRAM[VRAM_SIZE]; + +#if !EXTENDED_OAM +//#include "gba/types.h" +// TODO: Fix #define OAM_SIZE (OAM_ENTRY_COUNT*sizeof(OamData)) +#define OAM_SIZE (OAM_ENTRY_COUNT*8) +#else // EXTENDED_OAM +#define OAM_SIZE (OAM_ENTRY_COUNT*0xC) +#endif +extern struct SoundMixerState *SOUND_INFO_PTR; +extern uint16_t INTR_CHECK; +extern void (*INTR_VECTOR)(void); + +extern uint8_t EWRAM_START[EWRAM_SIZE]; +extern uint8_t IWRAM_START[IWRAM_SIZE]; +extern ColorRaw PLTT[PLTT_SIZE/sizeof(uint16_t)]; +#define BG_PLTT ((ColorRaw*)&PLTT[0]) +#define OBJ_PLTT ((ColorRaw*)&PLTT[BG_PLTT_SIZE/sizeof(uint16_t)]) +extern uint8_t OAM[OAM_SIZE]; + +#define BG_VRAM &VRAM[0] +#define BG_CHAR_ADDR(n) (((u8*)BG_VRAM) + (0x4000 * (n))) +#define BG_CHAR_ADDR_FROM_BGCNT(bg) (BG_VRAM + ((gBgCntRegs[bg] & BGCNT_CHARBASE(0x3)) << 12)) +#define BG_SCREEN_ADDR(n) (((u8*)BG_VRAM) + (0x800 * (n))) +#define BG_TILE_ADDR(n) (((u8*)BG_VRAM) + (0x80 * (n))) + +#define OBJ_VRAM0 &VRAM[0x10000] +#define OBJ_VRAM1 &VRAM[0x14000] + +#define OBJ_VRAM_TOTAL_SIZE (VRAM_SIZE - BG_VRAM_SIZE) +#else +#define DISPLAY_WIDTH 240 +#define DISPLAY_HEIGHT 160 + +// NOTE(Jace): I tried replacing these altogether, +// but that resulted in a nonmatching ROM +// (see notes above) +#define SOUND_INFO_PTR (*(struct SoundMixerState **)0x3007FF0) +#define INTR_CHECK (*(u16 *)0x3007FF8) +#define INTR_VECTOR (*(void **)0x3007FFC) + +#define EWRAM_START 0x02000000 +#define IWRAM_START 0x03000000 + +#define PLTT 0x5000000 +#define BG_PLTT ((u16 *)(PLTT)) +#define OBJ_PLTT ((u16 *)(PLTT + BG_PLTT_SIZE)) + +#define VRAM 0x6000000 + +#define BG_VRAM VRAM +#define BG_CHAR_ADDR(n) (BG_VRAM + ((n) << 14)) +#define BG_CHAR_ADDR_FROM_BGCNT(bg) ((u8*)BG_VRAM + ((gBgCntRegs[bg] & BGCNT_CHARBASE(0x3)) << 12)) +// TODO: Maybe rename BG_SCREEN_ADDR +#define BG_SCREEN_ADDR(n) (BG_VRAM + (0x800 * (n))) +#define BG_TILE_ADDR(n) (BG_VRAM + (0x80 * (n))) + +// text-mode BG +#define OBJ_VRAM0 (u8*)(VRAM + 0x10000) + +// bitmap-mode BG +#define OBJ_VRAM1 (u8*)(VRAM + 0x14000) + +#define OAM 0x7000000 +#define OAM_SIZE (OAM_ENTRY_COUNT*sizeof(OamData)) + +#define OBJ_VRAM_TOTAL_SIZE (VRAM_SIZE - BG_VRAM_SIZE) +#endif + +#define DISPLAY_CENTER_X (DISPLAY_WIDTH / 2) +#define DISPLAY_CENTER_Y (DISPLAY_HEIGHT / 2) + +#if WIDESCREEN_HACK +#define WIN_REG_SIZE 4 +#define WIN_RANGE(a, b) (((a) << 16) | (b)) +#define WIN_GET_LOWER(win_reg) (((win_reg) & 0xFFFF0000) >> 16) +#define WIN_GET_HIGHER(win_reg) (((win_reg) & 0x0000FFFF) >> 0) +typedef uint32_t winreg_t; +#else +#define WIN_REG_SIZE 2 +#define WIN_RANGE(a, b) (((a) << 8) | (b)) +#define WIN_GET_LOWER(win_reg) (((win_reg) & 0xFF00) >> 8) +#define WIN_GET_HIGHER(win_reg) (((win_reg) & 0x00FF) >> 0) +typedef uint16_t winreg_t; +#endif + +#define TILE_SIZE_4BPP 32 +#define TILE_SIZE_8BPP 64 + +// NOTE/TODO: Maybe this should somewhere else? +// NOTE: This appears to not match when using pointers, but with integers it's fine. +// uintptr_t should always be defined to be as big as a pointer, so there should be no issues. +#define GET_TILE_NUM_COMMON(vramPtr, tileSize) (((uintptr_t)(vramPtr) - (uintptr_t)OBJ_VRAM0) / (tileSize)) +#define GET_TILE_NUM(vramPtr) GET_TILE_NUM_COMMON((vramPtr), TILE_SIZE_4BPP) + +#define TOTAL_OBJ_TILE_COUNT 1024 + +#define SYSTEM_CLOCK (16 * 1024 * 1024) // System Clock + +#endif // GUARD_GBA_DEFINES diff --git a/sa1/include/gba/dma_macros.h b/sa1/include/gba/dma_macros.h new file mode 100644 index 0000000000..b6480f27d4 --- /dev/null +++ b/sa1/include/gba/dma_macros.h @@ -0,0 +1,239 @@ +#ifndef GUARD_GBA_DMA_MACROS_H +#define GUARD_GBA_DMA_MACROS_H + +#include "config.h" + +#if PLATFORM_GBA +#define DmaSet(dmaNum, src, dest, control) \ +{ \ + vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum##SAD; \ + dmaRegs[0] = (vu32)(src); \ + dmaRegs[1] = (vu32)(dest); \ + dmaRegs[2] = (vu32)(control); \ + dmaRegs[2]; \ +} +#else +extern void DmaSet(int dmaNum, const void *src, void *dest, u32 control); +#endif // PLATFORM_GBA + +#if PLATFORM_GBA +#define DMA_FILL(dmaNum, value, dest, size, bit) \ +{ \ + vu##bit tmp = (vu##bit)(value); \ + DmaSet(dmaNum, \ + &tmp, \ + dest, \ + (u32)((DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 \ + | ((size)/(bit/8)))); \ +} +#else +#define DMA_FILL(dmaNum, value, dest, size, bit) \ +{ \ + u##bit tmp = (u##bit)(value); \ + DmaSet(dmaNum, \ + &tmp, \ + dest, \ + (u32)((DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_FIXED | DMA_DEST_INC) << 16 \ + | ((size)/(bit/8)))); \ +} +#endif + +#define DmaFill16(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 16) +#define DmaFill32(dmaNum, value, dest, size) DMA_FILL(dmaNum, value, dest, size, 32) + +// Note that the DMA clear macros cause the DMA control value to be calculated +// at runtime rather than compile time. The size is divided by the DMA transfer +// unit size (2 or 4 bytes) and then combined with the DMA control flags using a +// bitwise OR operation. + +#define DMA_CLEAR(dmaNum, dest, size, bit) \ +{ \ + vu##bit *_dest = (vu##bit *)(dest); \ + u32 _size = size; \ + DmaFill##bit(dmaNum, 0, _dest, _size); \ +} + +#define DmaClear16(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 16) +#define DmaClear32(dmaNum, dest, size) DMA_CLEAR(dmaNum, dest, size, 32) + +#define DMA_COPY(dmaNum, src, dest, size, bit) \ + DmaSet(dmaNum, \ + src, \ + dest, \ + (u32)((DMA_ENABLE | DMA_START_NOW | DMA_##bit##BIT | DMA_SRC_INC | DMA_DEST_INC) << 16 \ + | ((size)/(bit/8)))) + +#define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16) +#define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32) + +#if PLATFORM_GBA +#define DmaStop(dmaNum) \ +{ \ + vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum##SAD; \ + dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \ + dmaRegs[5] &= ~DMA_ENABLE; \ + dmaRegs[5]; \ +} +// Used in SA1, stage.c +#define SlowDmaStop(dmaNum) \ +{ \ + vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum##SAD; \ + dmaRegs[5] &= ~(DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); \ + dmaRegs[5]; \ + dmaRegs[5] &= ~DMA_ENABLE; \ + dmaRegs[5]; \ + dmaRegs[5]; \ +} +#else +extern void DmaStop(int dmaNum); +static inline void SlowDmaStop(int dmaNum) { DmaStop(dmaNum); } +#endif + +#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \ +{ \ + const void *_src = src; \ + void *_dest = (void *)(dest); \ + u32 _size = size; \ + while (1) \ + { \ + DmaCopy##bit(dmaNum, _src, _dest, (block)); \ + _src += (block); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaCopy##bit(dmaNum, _src, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaClearLarge(dmaNum, dest, size, block, bit) \ +{ \ + void *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16) +#define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32) + +#define DmaClearLarge16(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 16) +#define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32) + +#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \ +{ \ + const void *_src = src; \ + void *_dest = (void *)(dest); \ + u32 _size = size; \ + DmaCopy##bit(dmaNum, _src, _dest, _size); \ +} + +#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16) +#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32) + +#define DmaFillLarge(dmaNum, fillval, dest, size, block, bit) \ +{ \ + void *_dest = (void *)(dest); \ + u32 _size = (u32)(size); \ + while (1) \ + { \ + DmaFill##bit(dmaNum, fillval, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, fillval, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaFill16Large(dmaNum, fillval, dest, size, block) DmaFillLarge(dmaNum, fillval, dest, size, block, 16) +#define DmaFill32Large(dmaNum, fillval, dest, size, block) DmaFillLarge(dmaNum, fillval, dest, size, block, 32) + +#define DmaFillDefvars(dmaNum, fillval, dest, size, bit) \ +{ \ + void *_dest = (void *)(dest); \ + u32 _size = (u##bit)(size); \ + DmaFill##bit(dmaNum, fillval, _dest, _size); \ +} + +#define DmaFill16Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 16) +#define DmaFill32Defvars(dmaNum, fillval, dest, size) DmaFillDefvars(dmaNum, fillval, dest, size, 32) + +#if PLATFORM_GBA +#define DmaWait(dmaNum) \ +{ \ + vu32 *dmaRegs = (vu32 *)REG_ADDR_DMA##dmaNum##SAD; \ + while (dmaRegs[2] & (DMA_ENABLE << 16)) \ + ; \ +} +#else +extern void DmaWait(int dmaNum); +#endif + +// from pokeemerald +// Maximum amount of data we will transfer in one operation +#define MAX_DMA_BLOCK_SIZE 0x1000 + +#define MAX_DMA_REQUESTS 128 + +#define DMA_REQUEST_COPY32 1 +#define DMA_REQUEST_FILL32 2 +#define DMA_REQUEST_COPY16 3 +#define DMA_REQUEST_FILL16 4 + +#define Dma3CopyLarge_(src, dest, size, bit) \ +{ \ + const void *_src = src; \ + void *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + if (_size <= MAX_DMA_BLOCK_SIZE) \ + { \ + DmaCopy##bit(3, _src, _dest, _size); \ + break; \ + } \ + DmaCopy##bit(3, _src, _dest, MAX_DMA_BLOCK_SIZE); \ + _src += MAX_DMA_BLOCK_SIZE; \ + _dest += MAX_DMA_BLOCK_SIZE; \ + _size -= MAX_DMA_BLOCK_SIZE; \ + } \ +} + +#define Dma3CopyLarge16_(src, dest, size) Dma3CopyLarge_(src, dest, size, 16) +#define Dma3CopyLarge32_(src, dest, size) Dma3CopyLarge_(src, dest, size, 32) + +#define Dma3FillLarge_(value, dest, size, bit) \ +{ \ + void *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + if (_size <= MAX_DMA_BLOCK_SIZE) \ + { \ + DmaFill##bit(3, value, _dest, _size); \ + break; \ + } \ + DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \ + _dest += MAX_DMA_BLOCK_SIZE; \ + _size -= MAX_DMA_BLOCK_SIZE; \ + } \ +} + +#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16) +#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32) + +#endif // GUARD_GBA_DMA_MACROS_H diff --git a/sa1/include/gba/gba.h b/sa1/include/gba/gba.h new file mode 100644 index 0000000000..349344031f --- /dev/null +++ b/sa1/include/gba/gba.h @@ -0,0 +1,12 @@ +#ifndef GUARD_GBA_GBA_H +#define GUARD_GBA_GBA_H + +#include "gba/defines.h" +#include "gba/io_reg.h" +#include "gba/types.h" +#include "gba/multiboot.h" +#include "gba/syscall.h" +#include "gba/macro.h" +#include "gba/isagbprint.h" + +#endif // GUARD_GBA_GBA_H diff --git a/sa1/include/gba/io_reg.h b/sa1/include/gba/io_reg.h new file mode 100644 index 0000000000..237fec0767 --- /dev/null +++ b/sa1/include/gba/io_reg.h @@ -0,0 +1,824 @@ +#ifndef GUARD_GBA_IO_REG_H +#define GUARD_GBA_IO_REG_H + +#if !GEN_CTX +#include +#endif + +#define IO_SIZE 0x400 +#if !PORTABLE +#define REG_BASE 0x4000000 // I/O register base address +#else +// TODO: Needs to be u8 because of the address macros +extern unsigned char REG_BASE[IO_SIZE]; +#endif + +// I/O register offsets + +#define REG_OFFSET_DISPCNT 0x0 +#define REG_OFFSET_DISPSTAT 0x4 +#define REG_OFFSET_VCOUNT 0x6 +#define REG_OFFSET_BG0CNT 0x8 +#define REG_OFFSET_BG1CNT 0xa +#define REG_OFFSET_BG2CNT 0xc +#define REG_OFFSET_BG3CNT 0xe +#define REG_OFFSET_BG0HOFS 0x10 +#define REG_OFFSET_BG0VOFS 0x12 +#define REG_OFFSET_BG1HOFS 0x14 +#define REG_OFFSET_BG1VOFS 0x16 +#define REG_OFFSET_BG2HOFS 0x18 +#define REG_OFFSET_BG2VOFS 0x1a +#define REG_OFFSET_BG3HOFS 0x1c +#define REG_OFFSET_BG3VOFS 0x1e +#define REG_OFFSET_BG2PA 0x20 +#define REG_OFFSET_BG2PB 0x22 +#define REG_OFFSET_BG2PC 0x24 +#define REG_OFFSET_BG2PD 0x26 +#define REG_OFFSET_BG2X 0x28 +#define REG_OFFSET_BG2X_L 0x28 +#define REG_OFFSET_BG2X_H 0x2a +#define REG_OFFSET_BG2Y 0x2c +#define REG_OFFSET_BG2Y_L 0x2c +#define REG_OFFSET_BG2Y_H 0x2e +#define REG_OFFSET_BG3PA 0x30 +#define REG_OFFSET_BG3PB 0x32 +#define REG_OFFSET_BG3PC 0x34 +#define REG_OFFSET_BG3PD 0x36 +#define REG_OFFSET_BG3X 0x38 +#define REG_OFFSET_BG3X_L 0x38 +#define REG_OFFSET_BG3X_H 0x3a +#define REG_OFFSET_BG3Y 0x3c +#define REG_OFFSET_BG3Y_L 0x3c +#define REG_OFFSET_BG3Y_H 0x3e + +#define REG_OFFSET_WIN 0x40 + +#define REG_OFFSET_WIN0H (REG_OFFSET_WIN + sizeof(winreg_t) * 0) +#define REG_OFFSET_WIN1H (REG_OFFSET_WIN + sizeof(winreg_t) * 1) +#define REG_OFFSET_WIN0V (REG_OFFSET_WIN + sizeof(winreg_t) * 2) +#define REG_OFFSET_WIN1V (REG_OFFSET_WIN + sizeof(winreg_t) * 3) +#define REG_OFFSET_WININ (REG_OFFSET_WIN + sizeof(winreg_t) * 4) +#define REG_OFFSET_WINOUT (REG_OFFSET_WIN + sizeof(winreg_t) * 5) + +#define REG_OFFSET_WIN_END (REG_OFFSET_WIN + sizeof(winreg_t) * 6) + +#define REG_OFFSET_MOSAIC REG_OFFSET_WIN_END // 0x4C +#define REG_OFFSET_BLDCNT (REG_OFFSET_MOSAIC + 4) // 0x50 +#define REG_OFFSET_BLDALPHA (REG_OFFSET_BLDCNT + 2) // 0x52 +#define REG_OFFSET_BLDY (REG_OFFSET_BLDALPHA + 2) // 0x54 + +// Starts at 10 after BLDY (0x60 on the GBA) +#define REG_OFFSET_SOUND REG_OFFSET_BLDY + 2 + 10 // 0x60 + +#define REG_OFFSET_SOUND1CNT_L REG_OFFSET_SOUND + 0x0 +#define REG_OFFSET_NR10 REG_OFFSET_SOUND + 0x0 +#define REG_OFFSET_SOUND1CNT_H REG_OFFSET_SOUND + 0x2 +#define REG_OFFSET_NR11 REG_OFFSET_SOUND + 0x2 +#define REG_OFFSET_NR12 REG_OFFSET_SOUND + 0x3 +#define REG_OFFSET_SOUND1CNT_X REG_OFFSET_SOUND + 0x4 +#define REG_OFFSET_NR13 REG_OFFSET_SOUND + 0x4 +#define REG_OFFSET_NR14 REG_OFFSET_SOUND + 0x5 +#define REG_OFFSET_SOUND2CNT_L REG_OFFSET_SOUND + 0x8 +#define REG_OFFSET_NR21 REG_OFFSET_SOUND + 0x8 +#define REG_OFFSET_NR22 REG_OFFSET_SOUND + 0x9 +#define REG_OFFSET_SOUND2CNT_H REG_OFFSET_SOUND + 0xC +#define REG_OFFSET_NR23 REG_OFFSET_SOUND + 0xC +#define REG_OFFSET_NR24 REG_OFFSET_SOUND + 0xD +#define REG_OFFSET_SOUND3CNT_L REG_OFFSET_SOUND + 0x10 +#define REG_OFFSET_NR30 REG_OFFSET_SOUND + 0x10 +#define REG_OFFSET_SOUND3CNT_H REG_OFFSET_SOUND + 0x12 +#define REG_OFFSET_NR31 REG_OFFSET_SOUND + 0x12 +#define REG_OFFSET_NR32 REG_OFFSET_SOUND + 0x13 +#define REG_OFFSET_SOUND3CNT_X REG_OFFSET_SOUND + 0x14 +#define REG_OFFSET_NR33 REG_OFFSET_SOUND + 0x14 +#define REG_OFFSET_NR34 REG_OFFSET_SOUND + 0x15 +#define REG_OFFSET_SOUND4CNT_L REG_OFFSET_SOUND + 0x18 +#define REG_OFFSET_NR41 REG_OFFSET_SOUND + 0x18 +#define REG_OFFSET_NR42 REG_OFFSET_SOUND + 0x19 +#define REG_OFFSET_SOUND4CNT_H REG_OFFSET_SOUND + 0x1c +#define REG_OFFSET_NR43 REG_OFFSET_SOUND + 0x1c +#define REG_OFFSET_NR44 REG_OFFSET_SOUND + 0x1d +#define REG_OFFSET_SOUNDCNT_L REG_OFFSET_SOUND + 0x20 +#define REG_OFFSET_NR50 REG_OFFSET_SOUND + 0x20 +#define REG_OFFSET_NR51 REG_OFFSET_SOUND + 0x21 +#define REG_OFFSET_SOUNDCNT_H REG_OFFSET_SOUND + 0x22 +#define REG_OFFSET_SOUNDCNT_X REG_OFFSET_SOUND + 0x24 +#define REG_OFFSET_NR52 REG_OFFSET_SOUND + 0x24 +#define REG_OFFSET_SOUNDBIAS REG_OFFSET_SOUND + 0x28 +#define REG_OFFSET_SOUNDBIAS_L REG_OFFSET_SOUND + 0x28 +#define REG_OFFSET_SOUNDBIAS_H REG_OFFSET_SOUND + 0x29 +#define REG_OFFSET_WAVE_RAM0 REG_OFFSET_SOUND + 0x30 +#define REG_OFFSET_WAVE_RAM1 REG_OFFSET_SOUND + 0x34 +#define REG_OFFSET_WAVE_RAM2 REG_OFFSET_SOUND + 0x38 +#define REG_OFFSET_WAVE_RAM3 REG_OFFSET_SOUND + 0x3c +#define REG_OFFSET_FIFO_A REG_OFFSET_SOUND + 0x40 +#define REG_OFFSET_FIFO_B REG_OFFSET_SOUND + 0x44 + +#define REG_OFFSET_DMA REG_OFFSET_SOUND + 0x50 +#if !USE_NEW_DMA +#define REG_OFFSET_DMA0SAD REG_OFFSET_DMA +#define REG_OFFSET_DMA0DAD 0xb4 +#define REG_OFFSET_DMA0CNT 0xb8 +#define REG_OFFSET_DMA0CNT_L 0xb8 +#define REG_OFFSET_DMA0CNT_H 0xba +#define REG_OFFSET_DMA1SAD 0xbc +#define REG_OFFSET_DMA1DAD 0xc0 +#define REG_OFFSET_DMA1CNT 0xc4 +#define REG_OFFSET_DMA1CNT_L 0xc4 +#define REG_OFFSET_DMA1CNT_H 0xc6 +#define REG_OFFSET_DMA2SAD 0xc8 +#define REG_OFFSET_DMA2DAD 0xcc +#define REG_OFFSET_DMA2CNT 0xd0 +#define REG_OFFSET_DMA2CNT_L 0xd0 +#define REG_OFFSET_DMA2CNT_H 0xd2 +#define REG_OFFSET_DMA3SAD 0xd4 +#define REG_OFFSET_DMA3DAD 0xd8 +#define REG_OFFSET_DMA3CNT 0xdc +#define REG_OFFSET_DMA3CNT_L 0xdc +#define REG_OFFSET_DMA3CNT_H 0xde +#else +// To fit this into the same memory footprint on 64bit, +// We need to put the control registers behind the pointers to avoid padding. +#define REG_OFFSET_DMA0SAD REG_OFFSET_DMA +#define REG_OFFSET_DMA1SAD (REG_OFFSET_DMA0SAD + sizeof(uintptr_t)) +#define REG_OFFSET_DMA2SAD (REG_OFFSET_DMA1SAD + sizeof(uintptr_t)) +#define REG_OFFSET_DMA3SAD (REG_OFFSET_DMA2SAD + sizeof(uintptr_t)) +#define REG_OFFSET_DMA0DAD (REG_OFFSET_DMA3SAD + sizeof(uintptr_t)) +#define REG_OFFSET_DMA1DAD (REG_OFFSET_DMA0DAD + sizeof(uintptr_t)) +#define REG_OFFSET_DMA2DAD (REG_OFFSET_DMA1DAD + sizeof(uintptr_t)) +#define REG_OFFSET_DMA3DAD (REG_OFFSET_DMA2DAD + sizeof(uintptr_t)) + +#define REG_OFFSET_DMA0CNT (REG_OFFSET_DMA3DAD + sizeof(uintptr_t)) +#define REG_OFFSET_DMA0CNT_L (REG_OFFSET_DMA0CNT + 0) +#define REG_OFFSET_DMA0CNT_H (REG_OFFSET_DMA0CNT_L + sizeof(uint16_t)) +#define REG_OFFSET_DMA1CNT (REG_OFFSET_DMA0CNT_H + sizeof(uint16_t)) +#define REG_OFFSET_DMA1CNT_L (REG_OFFSET_DMA1CNT + 0) +#define REG_OFFSET_DMA1CNT_H (REG_OFFSET_DMA1CNT_L + sizeof(uint16_t)) +#define REG_OFFSET_DMA2CNT (REG_OFFSET_DMA1CNT_H + sizeof(uint16_t)) +#define REG_OFFSET_DMA2CNT_L (REG_OFFSET_DMA2CNT + 0) +#define REG_OFFSET_DMA2CNT_H (REG_OFFSET_DMA2CNT_L + sizeof(uint16_t)) +#define REG_OFFSET_DMA3CNT (REG_OFFSET_DMA2CNT_H + sizeof(uint16_t)) +#define REG_OFFSET_DMA3CNT_L (REG_OFFSET_DMA3CNT + 0) +#define REG_OFFSET_DMA3CNT_H (REG_OFFSET_DMA3CNT_L + sizeof(uint16_t)) +#endif + +#define REG_OFFSET_TMCNT 0x100 +#define REG_OFFSET_TMCNT_L 0x100 +#define REG_OFFSET_TMCNT_H 0x102 +#define REG_OFFSET_TM0CNT 0x100 +#define REG_OFFSET_TM0CNT_L 0x100 +#define REG_OFFSET_TM0CNT_H 0x102 +#define REG_OFFSET_TM1CNT 0x104 +#define REG_OFFSET_TM1CNT_L 0x104 +#define REG_OFFSET_TM1CNT_H 0x106 +#define REG_OFFSET_TM2CNT 0x108 +#define REG_OFFSET_TM2CNT_L 0x108 +#define REG_OFFSET_TM2CNT_H 0x10a +#define REG_OFFSET_TM3CNT 0x10c +#define REG_OFFSET_TM3CNT_L 0x10c +#define REG_OFFSET_TM3CNT_H 0x10e + +#define REG_OFFSET_SIOCNT 0x128 +#define REG_OFFSET_SIODATA8 0x12a +#define REG_OFFSET_SIODATA32 0x120 +#define REG_OFFSET_SIOMLT_SEND 0x12a +#define REG_OFFSET_SIOMLT_RECV 0x120 +#define REG_OFFSET_SIOMULTI0 0x120 +#define REG_OFFSET_SIOMULTI1 0x122 +#define REG_OFFSET_SIOMULTI2 0x124 +#define REG_OFFSET_SIOMULTI3 0x126 + +#define REG_OFFSET_KEYINPUT 0x130 +#define REG_OFFSET_KEYCNT 0x132 + +#define REG_OFFSET_RCNT 0x134 + +#define REG_OFFSET_JOYCNT 0x140 +#define REG_OFFSET_JOYSTAT 0x158 +#define REG_OFFSET_JOY_RECV 0x150 +#define REG_OFFSET_JOY_RECV_L 0x150 +#define REG_OFFSET_JOY_RECV_H 0x152 +#define REG_OFFSET_JOY_TRANS 0x154 +#define REG_OFFSET_JOY_TRANS_L 0x154 +#define REG_OFFSET_JOY_TRANS_H 0x156 + +#define REG_OFFSET_IME 0x208 +#define REG_OFFSET_IE 0x200 +#define REG_OFFSET_IF 0x202 + +#define REG_OFFSET_WAITCNT 0x204 + +// I/O register addresses + +#define REG_ADDR_DISPCNT (REG_BASE + REG_OFFSET_DISPCNT) +#define REG_ADDR_DISPSTAT (REG_BASE + REG_OFFSET_DISPSTAT) +#define REG_ADDR_VCOUNT (REG_BASE + REG_OFFSET_VCOUNT) +#define REG_ADDR_BG0CNT (REG_BASE + REG_OFFSET_BG0CNT) +#define REG_ADDR_BG1CNT (REG_BASE + REG_OFFSET_BG1CNT) +#define REG_ADDR_BG2CNT (REG_BASE + REG_OFFSET_BG2CNT) +#define REG_ADDR_BG3CNT (REG_BASE + REG_OFFSET_BG3CNT) +#define REG_ADDR_BG0HOFS (REG_BASE + REG_OFFSET_BG0HOFS) +#define REG_ADDR_BG0VOFS (REG_BASE + REG_OFFSET_BG0VOFS) +#define REG_ADDR_BG1HOFS (REG_BASE + REG_OFFSET_BG1HOFS) +#define REG_ADDR_BG1VOFS (REG_BASE + REG_OFFSET_BG1VOFS) +#define REG_ADDR_BG2HOFS (REG_BASE + REG_OFFSET_BG2HOFS) +#define REG_ADDR_BG2VOFS (REG_BASE + REG_OFFSET_BG2VOFS) +#define REG_ADDR_BG3HOFS (REG_BASE + REG_OFFSET_BG3HOFS) +#define REG_ADDR_BG3VOFS (REG_BASE + REG_OFFSET_BG3VOFS) +#define REG_ADDR_BG2PA (REG_BASE + REG_OFFSET_BG2PA) +#define REG_ADDR_BG2PB (REG_BASE + REG_OFFSET_BG2PB) +#define REG_ADDR_BG2PC (REG_BASE + REG_OFFSET_BG2PC) +#define REG_ADDR_BG2PD (REG_BASE + REG_OFFSET_BG2PD) +#define REG_ADDR_BG2X (REG_BASE + REG_OFFSET_BG2X) +#define REG_ADDR_BG2X_L (REG_BASE + REG_OFFSET_BG2X_L) +#define REG_ADDR_BG2X_H (REG_BASE + REG_OFFSET_BG2X_H) +#define REG_ADDR_BG2Y (REG_BASE + REG_OFFSET_BG2Y) +#define REG_ADDR_BG2Y_L (REG_BASE + REG_OFFSET_BG2Y_L) +#define REG_ADDR_BG2Y_H (REG_BASE + REG_OFFSET_BG2Y_H) +#define REG_ADDR_BG3PA (REG_BASE + REG_OFFSET_BG3PA) +#define REG_ADDR_BG3PB (REG_BASE + REG_OFFSET_BG3PB) +#define REG_ADDR_BG3PC (REG_BASE + REG_OFFSET_BG3PC) +#define REG_ADDR_BG3PD (REG_BASE + REG_OFFSET_BG3PD) +#define REG_ADDR_BG3X (REG_BASE + REG_OFFSET_BG3X) +#define REG_ADDR_BG3X_L (REG_BASE + REG_OFFSET_BG3X_L) +#define REG_ADDR_BG3X_H (REG_BASE + REG_OFFSET_BG3X_H) +#define REG_ADDR_BG3Y (REG_BASE + REG_OFFSET_BG3Y) +#define REG_ADDR_BG3Y_L (REG_BASE + REG_OFFSET_BG3Y_L) +#define REG_ADDR_BG3Y_H (REG_BASE + REG_OFFSET_BG3Y_H) +#define REG_ADDR_WIN0H (REG_BASE + REG_OFFSET_WIN0H) +#define REG_ADDR_WIN1H (REG_BASE + REG_OFFSET_WIN1H) +#define REG_ADDR_WIN0V (REG_BASE + REG_OFFSET_WIN0V) +#define REG_ADDR_WIN1V (REG_BASE + REG_OFFSET_WIN1V) +#define REG_ADDR_WININ (REG_BASE + REG_OFFSET_WININ) +#define REG_ADDR_WINOUT (REG_BASE + REG_OFFSET_WINOUT) +#define REG_ADDR_MOSAIC (REG_BASE + REG_OFFSET_MOSAIC) +#define REG_ADDR_BLDCNT (REG_BASE + REG_OFFSET_BLDCNT) +#define REG_ADDR_BLDALPHA (REG_BASE + REG_OFFSET_BLDALPHA) +#define REG_ADDR_BLDY (REG_BASE + REG_OFFSET_BLDY) + +#define REG_ADDR_SOUND1CNT_L (REG_BASE + REG_OFFSET_SOUND1CNT_L) +#define REG_ADDR_NR10 (REG_BASE + REG_OFFSET_NR10) +#define REG_ADDR_SOUND1CNT_H (REG_BASE + REG_OFFSET_SOUND1CNT_H) +#define REG_ADDR_NR11 (REG_BASE + REG_OFFSET_NR11) +#define REG_ADDR_NR12 (REG_BASE + REG_OFFSET_NR12) +#define REG_ADDR_SOUND1CNT_X (REG_BASE + REG_OFFSET_SOUND1CNT_X) +#define REG_ADDR_NR13 (REG_BASE + REG_OFFSET_NR13) +#define REG_ADDR_NR14 (REG_BASE + REG_OFFSET_NR14) +#define REG_ADDR_SOUND2CNT_L (REG_BASE + REG_OFFSET_SOUND2CNT_L) +#define REG_ADDR_NR21 (REG_BASE + REG_OFFSET_NR21) +#define REG_ADDR_NR22 (REG_BASE + REG_OFFSET_NR22) +#define REG_ADDR_SOUND2CNT_H (REG_BASE + REG_OFFSET_SOUND2CNT_H) +#define REG_ADDR_NR23 (REG_BASE + REG_OFFSET_NR23) +#define REG_ADDR_NR24 (REG_BASE + REG_OFFSET_NR24) +#define REG_ADDR_SOUND3CNT_L (REG_BASE + REG_OFFSET_SOUND3CNT_L) +#define REG_ADDR_NR30 (REG_BASE + REG_OFFSET_NR30) +#define REG_ADDR_SOUND3CNT_H (REG_BASE + REG_OFFSET_SOUND3CNT_H) +#define REG_ADDR_NR31 (REG_BASE + REG_OFFSET_NR31) +#define REG_ADDR_NR32 (REG_BASE + REG_OFFSET_NR32) +#define REG_ADDR_SOUND3CNT_X (REG_BASE + REG_OFFSET_SOUND3CNT_X) +#define REG_ADDR_NR33 (REG_BASE + REG_OFFSET_NR33) +#define REG_ADDR_NR34 (REG_BASE + REG_OFFSET_NR34) +#define REG_ADDR_SOUND4CNT_L (REG_BASE + REG_OFFSET_SOUND4CNT_L) +#define REG_ADDR_NR41 (REG_BASE + REG_OFFSET_NR41) +#define REG_ADDR_NR42 (REG_BASE + REG_OFFSET_NR42) +#define REG_ADDR_SOUND4CNT_H (REG_BASE + REG_OFFSET_SOUND4CNT_H) +#define REG_ADDR_NR43 (REG_BASE + REG_OFFSET_NR43) +#define REG_ADDR_NR44 (REG_BASE + REG_OFFSET_NR44) +#define REG_ADDR_SOUNDCNT_L (REG_BASE + REG_OFFSET_SOUNDCNT_L) +#define REG_ADDR_NR50 (REG_BASE + REG_OFFSET_NR50) +#define REG_ADDR_NR51 (REG_BASE + REG_OFFSET_NR51) +#define REG_ADDR_SOUNDCNT_H (REG_BASE + REG_OFFSET_SOUNDCNT_H) +#define REG_ADDR_SOUNDCNT_X (REG_BASE + REG_OFFSET_SOUNDCNT_X) +#define REG_ADDR_NR52 (REG_BASE + REG_OFFSET_NR52) +#define REG_ADDR_SOUNDBIAS (REG_BASE + REG_OFFSET_SOUNDBIAS) +#define REG_ADDR_SOUNDBIAS_L (REG_BASE + REG_OFFSET_SOUNDBIAS_L) +#define REG_ADDR_SOUNDBIAS_H (REG_BASE + REG_OFFSET_SOUNDBIAS_H) +#define REG_ADDR_WAVE_RAM0 (REG_BASE + REG_OFFSET_WAVE_RAM0) +#define REG_ADDR_WAVE_RAM1 (REG_BASE + REG_OFFSET_WAVE_RAM1) +#define REG_ADDR_WAVE_RAM2 (REG_BASE + REG_OFFSET_WAVE_RAM2) +#define REG_ADDR_WAVE_RAM3 (REG_BASE + REG_OFFSET_WAVE_RAM3) +#define REG_ADDR_FIFO_A (REG_BASE + REG_OFFSET_FIFO_A) +#define REG_ADDR_FIFO_B (REG_BASE + REG_OFFSET_FIFO_B) + +#define REG_ADDR_DMA0SAD (REG_BASE + REG_OFFSET_DMA0SAD) +#define REG_ADDR_DMA0DAD (REG_BASE + REG_OFFSET_DMA0DAD) +#define REG_ADDR_DMA0CNT (REG_BASE + REG_OFFSET_DMA0CNT) +#define REG_ADDR_DMA0CNT_L (REG_BASE + REG_OFFSET_DMA0CNT_L) +#define REG_ADDR_DMA0CNT_H (REG_BASE + REG_OFFSET_DMA0CNT_H) +#define REG_ADDR_DMA1SAD (REG_BASE + REG_OFFSET_DMA1SAD) +#define REG_ADDR_DMA1DAD (REG_BASE + REG_OFFSET_DMA1DAD) +#define REG_ADDR_DMA1CNT (REG_BASE + REG_OFFSET_DMA1CNT) +#define REG_ADDR_DMA1CNT_L (REG_BASE + REG_OFFSET_DMA1CNT_L) +#define REG_ADDR_DMA1CNT_H (REG_BASE + REG_OFFSET_DMA1CNT_H) +#define REG_ADDR_DMA2SAD (REG_BASE + REG_OFFSET_DMA2SAD) +#define REG_ADDR_DMA2DAD (REG_BASE + REG_OFFSET_DMA2DAD) +#define REG_ADDR_DMA2CNT (REG_BASE + REG_OFFSET_DMA2CNT) +#define REG_ADDR_DMA2CNT_L (REG_BASE + REG_OFFSET_DMA2CNT_L) +#define REG_ADDR_DMA2CNT_H (REG_BASE + REG_OFFSET_DMA2CNT_H) +#define REG_ADDR_DMA3SAD (REG_BASE + REG_OFFSET_DMA3SAD) +#define REG_ADDR_DMA3DAD (REG_BASE + REG_OFFSET_DMA3DAD) +#define REG_ADDR_DMA3CNT (REG_BASE + REG_OFFSET_DMA3CNT) +#define REG_ADDR_DMA3CNT_L (REG_BASE + REG_OFFSET_DMA3CNT_L) +#define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H) + +#define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT) +#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L) +#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H) +#define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT) +#define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L) +#define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H) +#define REG_ADDR_TM1CNT (REG_BASE + REG_OFFSET_TM1CNT) +#define REG_ADDR_TM1CNT_L (REG_BASE + REG_OFFSET_TM1CNT_L) +#define REG_ADDR_TM1CNT_H (REG_BASE + REG_OFFSET_TM1CNT_H) +#define REG_ADDR_TM2CNT (REG_BASE + REG_OFFSET_TM2CNT) +#define REG_ADDR_TM2CNT_L (REG_BASE + REG_OFFSET_TM2CNT_L) +#define REG_ADDR_TM2CNT_H (REG_BASE + REG_OFFSET_TM2CNT_H) +#define REG_ADDR_TM3CNT (REG_BASE + REG_OFFSET_TM3CNT) +#define REG_ADDR_TM3CNT_L (REG_BASE + REG_OFFSET_TM3CNT_L) +#define REG_ADDR_TM3CNT_H (REG_BASE + REG_OFFSET_TM3CNT_H) + +#define REG_ADDR_SIOCNT (REG_BASE + REG_OFFSET_SIOCNT) +#define REG_ADDR_SIODATA8 (REG_BASE + REG_OFFSET_SIODATA8) +#define REG_ADDR_SIODATA32 (REG_BASE + REG_OFFSET_SIODATA32) +#define REG_ADDR_SIOMLT_SEND (REG_BASE + REG_OFFSET_SIOMLT_SEND) +#define REG_ADDR_SIOMLT_RECV (REG_BASE + REG_OFFSET_SIOMLT_RECV) +#define REG_ADDR_SIOMULTI0 (REG_BASE + REG_OFFSET_SIOMULTI0) +#define REG_ADDR_SIOMULTI1 (REG_BASE + REG_OFFSET_SIOMULTI1) +#define REG_ADDR_SIOMULTI2 (REG_BASE + REG_OFFSET_SIOMULTI2) +#define REG_ADDR_SIOMULTI3 (REG_BASE + REG_OFFSET_SIOMULTI3) + +#define REG_ADDR_KEYINPUT (REG_BASE + REG_OFFSET_KEYINPUT) +#define REG_ADDR_KEYCNT (REG_BASE + REG_OFFSET_KEYCNT) + +#define REG_ADDR_RCNT (REG_BASE + REG_OFFSET_RCNT) + +#define REG_ADDR_JOYCNT (REG_BASE + REG_OFFSET_JOYCNT) +#define REG_ADDR_JOYSTAT (REG_BASE + REG_OFFSET_JOYSTAT) +#define REG_ADDR_JOY_RECV (REG_BASE + REG_OFFSET_JOY_RECV) +#define REG_ADDR_JOY_RECV_L (REG_BASE + REG_OFFSET_JOY_RECV_L) +#define REG_ADDR_JOY_RECV_H (REG_BASE + REG_OFFSET_JOY_RECV_H) +#define REG_ADDR_JOY_TRANS (REG_BASE + REG_OFFSET_JOY_TRANS) +#define REG_ADDR_JOY_TRANS_L (REG_BASE + REG_OFFSET_JOY_TRANS_L) +#define REG_ADDR_JOY_TRANS_H (REG_BASE + REG_OFFSET_JOY_TRANS_H) + +#define REG_ADDR_IME (REG_BASE + REG_OFFSET_IME) +#define REG_ADDR_IE (REG_BASE + REG_OFFSET_IE) +#define REG_ADDR_IF (REG_BASE + REG_OFFSET_IF) + +#define REG_ADDR_WAITCNT (REG_BASE + REG_OFFSET_WAITCNT) + +// I/O registers + +#define REG_DISPCNT (*(vu16 *)REG_ADDR_DISPCNT) +#define REG_DISPSTAT (*(vu16 *)REG_ADDR_DISPSTAT) +#define REG_VCOUNT (*(vu16 *)REG_ADDR_VCOUNT) +#define REG_BG0CNT (*(vu16 *)REG_ADDR_BG0CNT) +#define REG_BG1CNT (*(vu16 *)REG_ADDR_BG1CNT) +#define REG_BG2CNT (*(vu16 *)REG_ADDR_BG2CNT) +#define REG_BG3CNT (*(vu16 *)REG_ADDR_BG3CNT) +#define REG_BG0HOFS (*(vu16 *)REG_ADDR_BG0HOFS) +#define REG_BG0VOFS (*(vu16 *)REG_ADDR_BG0VOFS) +#define REG_BG1HOFS (*(vu16 *)REG_ADDR_BG1HOFS) +#define REG_BG1VOFS (*(vu16 *)REG_ADDR_BG1VOFS) +#define REG_BG2HOFS (*(vu16 *)REG_ADDR_BG2HOFS) +#define REG_BG2VOFS (*(vu16 *)REG_ADDR_BG2VOFS) +#define REG_BG3HOFS (*(vu16 *)REG_ADDR_BG3HOFS) +#define REG_BG3VOFS (*(vu16 *)REG_ADDR_BG3VOFS) +#define REG_BG2PA (*(vu16 *)REG_ADDR_BG2PA) +#define REG_BG2PB (*(vu16 *)REG_ADDR_BG2PB) +#define REG_BG2PC (*(vu16 *)REG_ADDR_BG2PC) +#define REG_BG2PD (*(vu16 *)REG_ADDR_BG2PD) +#define REG_BG2X (*(vu32 *)REG_ADDR_BG2X) +#define REG_BG2X_L (*(vu16 *)REG_ADDR_BG2X_L) +#define REG_BG2X_H (*(vu16 *)REG_ADDR_BG2X_H) +#define REG_BG2Y (*(vu32 *)REG_ADDR_BG2Y) +#define REG_BG2Y_L (*(vu16 *)REG_ADDR_BG2Y_L) +#define REG_BG2Y_H (*(vu16 *)REG_ADDR_BG2Y_H) +#define REG_BG3PA (*(vu16 *)REG_ADDR_BG3PA) +#define REG_BG3PB (*(vu16 *)REG_ADDR_BG3PB) +#define REG_BG3PC (*(vu16 *)REG_ADDR_BG3PC) +#define REG_BG3PD (*(vu16 *)REG_ADDR_BG3PD) +#define REG_BG3X (*(vu32 *)REG_ADDR_BG3X) +#define REG_BG3X_L (*(vu16 *)REG_ADDR_BG3X_L) +#define REG_BG3X_H (*(vu16 *)REG_ADDR_BG3X_H) +#define REG_BG3Y (*(vu32 *)REG_ADDR_BG3Y) +#define REG_BG3Y_L (*(vu16 *)REG_ADDR_BG3Y_L) +#define REG_BG3Y_H (*(vu16 *)REG_ADDR_BG3Y_H) +#define REG_WIN0H (*(volatile winreg_t *)REG_ADDR_WIN0H) +#define REG_WIN1H (*(volatile winreg_t *)REG_ADDR_WIN1H) +#define REG_WIN0V (*(volatile winreg_t *)REG_ADDR_WIN0V) +#define REG_WIN1V (*(volatile winreg_t *)REG_ADDR_WIN1V) +#define REG_WININ (*(volatile winreg_t *)REG_ADDR_WININ) +#define REG_WINOUT (*(volatile winreg_t *)REG_ADDR_WINOUT) +#define REG_MOSAIC (*(vu16 *)REG_ADDR_MOSAIC) +#define REG_BLDCNT (*(vu16 *)REG_ADDR_BLDCNT) +#define REG_BLDALPHA (*(vu16 *)REG_ADDR_BLDALPHA) +#define REG_BLDY (*(vu16 *)REG_ADDR_BLDY) + +#define REG_SOUND1CNT_L (*(vu16 *)REG_ADDR_SOUND1CNT_L) +#define REG_NR10 (*(vu8 *)REG_ADDR_NR10) +#define REG_SOUND1CNT_H (*(vu16 *)REG_ADDR_SOUND1CNT_H) +#define REG_NR11 (*(vu8 *)REG_ADDR_NR11) +#define REG_NR12 (*(vu8 *)REG_ADDR_NR12) +#define REG_SOUND1CNT_X (*(vu16 *)REG_ADDR_SOUND1CNT_X) +#define REG_NR13 (*(vu8 *)REG_ADDR_NR13) +#define REG_NR14 (*(vu8 *)REG_ADDR_NR14) +#define REG_SOUND2CNT_L (*(vu16 *)REG_ADDR_SOUND2CNT_L) +#define REG_NR21 (*(vu8 *)REG_ADDR_NR21) +#define REG_NR22 (*(vu8 *)REG_ADDR_NR22) +#define REG_SOUND2CNT_H (*(vu16 *)REG_ADDR_SOUND2CNT_H) +#define REG_NR23 (*(vu8 *)REG_ADDR_NR23) +#define REG_NR24 (*(vu8 *)REG_ADDR_NR24) +#define REG_SOUND3CNT_L (*(vu16 *)REG_ADDR_SOUND3CNT_L) +#define REG_NR30 (*(vu8 *)REG_ADDR_NR30) +#define REG_SOUND3CNT_H (*(vu16 *)REG_ADDR_SOUND3CNT_H) +#define REG_NR31 (*(vu8 *)REG_ADDR_NR31) +#define REG_NR32 (*(vu8 *)REG_ADDR_NR32) +#define REG_SOUND3CNT_X (*(vu16 *)REG_ADDR_SOUND3CNT_X) +#define REG_NR33 (*(vu8 *)REG_ADDR_NR33) +#define REG_NR34 (*(vu8 *)REG_ADDR_NR34) +#define REG_SOUND4CNT_L (*(vu16 *)REG_ADDR_SOUND4CNT_L) +#define REG_NR41 (*(vu8 *)REG_ADDR_NR41) +#define REG_NR42 (*(vu8 *)REG_ADDR_NR42) +#define REG_SOUND4CNT_H (*(vu16 *)REG_ADDR_SOUND4CNT_H) +#define REG_NR43 (*(vu8 *)REG_ADDR_NR43) +#define REG_NR44 (*(vu8 *)REG_ADDR_NR44) +#define REG_SOUNDCNT_L (*(vu16 *)REG_ADDR_SOUNDCNT_L) +#define REG_NR50 (*(vu8 *)REG_ADDR_NR50) +#define REG_NR51 (*(vu8 *)REG_ADDR_NR51) +#define REG_SOUNDCNT_H (*(vu16 *)REG_ADDR_SOUNDCNT_H) +#define REG_SOUNDCNT_X (*(vu16 *)REG_ADDR_SOUNDCNT_X) +#define REG_NR52 (*(vu8 *)REG_ADDR_NR52) +#define REG_SOUNDBIAS (*(vu16 *)REG_ADDR_SOUNDBIAS) +#define REG_SOUNDBIAS_L (*(vu8 *)REG_ADDR_SOUNDBIAS_L) +#define REG_SOUNDBIAS_H (*(vu8 *)REG_ADDR_SOUNDBIAS_H) +#define REG_WAVE_RAM0 (*(vu32 *)REG_ADDR_WAVE_RAM0) +#define REG_WAVE_RAM1 (*(vu32 *)REG_ADDR_WAVE_RAM1) +#define REG_WAVE_RAM2 (*(vu32 *)REG_ADDR_WAVE_RAM2) +#define REG_WAVE_RAM3 (*(vu32 *)REG_ADDR_WAVE_RAM3) +#define REG_FIFO_A (*(vu32 *)REG_ADDR_FIFO_A) +#define REG_FIFO_B (*(vu32 *)REG_ADDR_FIFO_B) + +#define REG_DMA0SAD (*(volatile uintptr_t *)REG_ADDR_DMA0SAD) +#define REG_DMA0DAD (*(volatile uintptr_t *)REG_ADDR_DMA0DAD) +#define REG_DMA0CNT (*(vu32 *)REG_ADDR_DMA0CNT) +#define REG_DMA0CNT_L (*(vu16 *)REG_ADDR_DMA0CNT_L) +#define REG_DMA0CNT_H (*(vu16 *)REG_ADDR_DMA0CNT_H) + +#define REG_DMA1SAD (*(volatile uintptr_t *)REG_ADDR_DMA1SAD) +#define REG_DMA1DAD (*(volatile uintptr_t *)REG_ADDR_DMA1DAD) +#define REG_DMA1CNT (*(vu32 *)REG_ADDR_DMA1CNT) +#define REG_DMA1CNT_L (*(vu16 *)REG_ADDR_DMA1CNT_L) +#define REG_DMA1CNT_H (*(vu16 *)REG_ADDR_DMA1CNT_H) + +#define REG_DMA2SAD (*(volatile uintptr_t *)REG_ADDR_DMA2SAD) +#define REG_DMA2DAD (*(volatile uintptr_t *)REG_ADDR_DMA2DAD) +#define REG_DMA2CNT (*(vu32 *)REG_ADDR_DMA2CNT) +#define REG_DMA2CNT_L (*(vu16 *)REG_ADDR_DMA2CNT_L) +#define REG_DMA2CNT_H (*(vu16 *)REG_ADDR_DMA2CNT_H) + +#define REG_DMA3SAD (*(volatile uintptr_t *)REG_ADDR_DMA3SAD) +#define REG_DMA3DAD (*(volatile uintptr_t *)REG_ADDR_DMA3DAD) +#define REG_DMA3CNT (*(vu32 *)REG_ADDR_DMA3CNT) +#define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L) +#define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H) + +#define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4))) +#define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT) +#define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L) +#define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H) +#define REG_TM1CNT (*(vu32 *)REG_ADDR_TM1CNT) +#define REG_TM1CNT_L (*(vu16 *)REG_ADDR_TM1CNT_L) +#define REG_TM1CNT_H (*(vu16 *)REG_ADDR_TM1CNT_H) +#define REG_TM2CNT (*(vu32 *)REG_ADDR_TM2CNT) +#define REG_TM2CNT_L (*(vu16 *)REG_ADDR_TM2CNT_L) +#define REG_TM2CNT_H (*(vu16 *)REG_ADDR_TM2CNT_H) +#define REG_TM3CNT (*(vu32 *)REG_ADDR_TM3CNT) +#define REG_TM3CNT_L (*(vu16 *)REG_ADDR_TM3CNT_L) +#define REG_TM3CNT_H (*(vu16 *)REG_ADDR_TM3CNT_H) + +#define REG_SIOCNT (*(vu16 *)REG_ADDR_SIOCNT) +#define REG_SIOCNT_32 (*(vu32 *)REG_ADDR_SIOCNT) +#define REG_SIODATA8 (*(vu16 *)REG_ADDR_SIODATA8) +#define REG_SIODATA32 (*(vu32 *)REG_ADDR_SIODATA32) +#define REG_SIOMLT_SEND (*(vu16 *)REG_ADDR_SIOMLT_SEND) +#define REG_SIOMLT_RECV (*(vu64 *)REG_ADDR_SIOMLT_RECV) +#define REG_SIOMULTI0 (*(vu16 *)REG_ADDR_SIOMULTI0) +#define REG_SIOMULTI1 (*(vu16 *)REG_ADDR_SIOMULTI1) +#define REG_SIOMULTI2 (*(vu16 *)REG_ADDR_SIOMULTI2) +#define REG_SIOMULTI3 (*(vu16 *)REG_ADDR_SIOMULTI3) + +#define REG_KEYINPUT (*(vu16 *)REG_ADDR_KEYINPUT) +#define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT) + +#define REG_RCNT (*(vu16 *)REG_ADDR_RCNT) + +#define REG_IME (*(vu16 *)REG_ADDR_IME) +#define REG_IE (*(vu16 *)REG_ADDR_IE) +#define REG_IF (*(vu16 *)REG_ADDR_IF) + +#define REG_WAITCNT (*(vu16 *)REG_ADDR_WAITCNT) + +// I/O register fields + +// DISPCNT +#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text +#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off +#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine +#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color +#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette +#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color +#define DISPCNT_OBJ_1D_MAP 0x0040 +#define DISPCNT_FORCED_BLANK 0x0080 +#define DISPCNT_BG0_ON 0x0100 +#define DISPCNT_BG1_ON 0x0200 +#define DISPCNT_BG2_ON 0x0400 +#define DISPCNT_BG3_ON 0x0800 +#define DISPCNT_BG_ALL_ON 0x0F00 +#define DISPCNT_OBJ_ON 0x1000 +#define DISPCNT_WIN0_ON 0x2000 +#define DISPCNT_WIN1_ON 0x4000 +#define DISPCNT_OBJWIN_ON 0x8000 + +// DISPSTAT +#define DISPSTAT_VBLANK 0x0001 // in V-Blank +#define DISPSTAT_HBLANK 0x0002 // in H-Blank +#define DISPSTAT_VCOUNT 0x0004 // V-Count match +#define DISPSTAT_VBLANK_INTR 0x0008 // V-Blank interrupt enabled +#define DISPSTAT_HBLANK_INTR 0x0010 // H-Blank interrupt enabled +#define DISPSTAT_VCOUNT_INTR 0x0020 // V-Count interrupt enabled + +// BGCNT +// Values 0 - 3. Lower priority BGs will be drawn on top of higher priority BGs. +#define BGCNT_PRIORITY(n) (n) +// Values 0 - 3. Base block for tile pixel data. +// Target pointer: BG_CHAR_ADDR(n) +#define BGCNT_CHARBASE(n) ((n) << 2) +#define BGCNT_MOSAIC 0x0040 +#define BGCNT_16COLOR 0x0000 // 4 bits per pixel +#define BGCNT_256COLOR 0x0080 // 8 bits per pixel +#define BGCNT_SCREENBASE(n) ((n) << 8) // Values 0 - 31. Base block for tile map. +#if !WIDESCREEN_HACK +#define BGCNT_SCREENBASE_MASK 0x1F00 +#else +// Luckily BGCNT_WRAP is not used with text-mode backgrounds, which stage maps are. +#define BGCNT_SCREENBASE_MASK 0x3F00 +#endif +#define BGCNT_WRAP 0x2000 // Only affects affine BGs. Text BGs wrap by default. +#define BGCNT_TXT256x256 0x0000 // Internal screen size size of text mode BG in pixels. +#define BGCNT_TXT512x256 0x4000 +#define BGCNT_TXT256x512 0x8000 +#define BGCNT_TXT512x512 0xC000 +#define BGCNT_AFF128x128 0x0000 // Internal screen size size of affine mode BG in pixels. +#define BGCNT_AFF256x256 0x4000 +#define BGCNT_AFF512x512 0x8000 +#define BGCNT_AFF1024x1024 0xC000 +#define BGCNT_TXTAFF_MASK 0xC000 + +// WININ/OUT +#define WININ_WIN0_BG0 (1 << 0) +#define WININ_WIN0_BG1 (1 << 1) +#define WININ_WIN0_BG2 (1 << 2) +#define WININ_WIN0_BG3 (1 << 3) +#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3) +#define WININ_WIN0_OBJ (1 << 4) +#define WININ_WIN0_CLR (1 << 5) +#define WININ_WIN0_ALL (WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR) +#define WININ_WIN1_BG0 (1 << 8) +#define WININ_WIN1_BG1 (1 << 9) +#define WININ_WIN1_BG2 (1 << 10) +#define WININ_WIN1_BG3 (1 << 11) +#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3) +#define WININ_WIN1_OBJ (1 << 12) +#define WININ_WIN1_CLR (1 << 13) +#define WININ_WIN1_ALL (WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR) + +#define WINOUT_WIN01_BG0 (1 << 0) +#define WINOUT_WIN01_BG1 (1 << 1) +#define WINOUT_WIN01_BG2 (1 << 2) +#define WINOUT_WIN01_BG3 (1 << 3) +#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3) +#define WINOUT_WIN01_OBJ (1 << 4) +#define WINOUT_WIN01_CLR (1 << 5) +#define WINOUT_WIN01_ALL (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR) +#define WINOUT_WINOBJ_BG0 (1 << 8) +#define WINOUT_WINOBJ_BG1 (1 << 9) +#define WINOUT_WINOBJ_BG2 (1 << 10) +#define WINOUT_WINOBJ_BG3 (1 << 11) +#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3) +#define WINOUT_WINOBJ_OBJ (1 << 12) +#define WINOUT_WINOBJ_CLR (1 << 13) +#define WINOUT_WINOBJ_ALL (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR) + +// BLDCNT +// Bits 0-5 select layers for the 1st target +#define BLDCNT_TGT1_BG0 (1 << 0) +#define BLDCNT_TGT1_BG1 (1 << 1) +#define BLDCNT_TGT1_BG2 (1 << 2) +#define BLDCNT_TGT1_BG3 (1 << 3) +#define BLDCNT_TGT1_OBJ (1 << 4) +#define BLDCNT_TGT1_BD (1 << 5) +#define BLDCNT_TGT1_ALL (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD) +// Bits 6-7 select the special effect +#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect +#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA) +#define BLDCNT_EFFECT_LIGHTEN (2 << 6) // 1st target becomes whiter (controlled by BLDY) +#define BLDCNT_EFFECT_DARKEN (3 << 6) // 1st target becomes blacker (controlled by BLDY) +// Bits 8-13 select layers for the 2nd target +#define BLDCNT_TGT2_BG0 (1 << 8) +#define BLDCNT_TGT2_BG1 (1 << 9) +#define BLDCNT_TGT2_BG2 (1 << 10) +#define BLDCNT_TGT2_BG3 (1 << 11) +#define BLDCNT_TGT2_OBJ (1 << 12) +#define BLDCNT_TGT2_BD (1 << 13) +#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD) + +// BLDALPHA +#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) + +// SOUNDCNT_H +#define SOUND_CGB_MIX_QUARTER 0x0000 +#define SOUND_CGB_MIX_HALF 0x0001 +#define SOUND_CGB_MIX_FULL 0x0002 +#define SOUND_A_MIX_HALF 0x0000 +#define SOUND_A_MIX_FULL 0x0004 +#define SOUND_B_MIX_HALF 0x0000 +#define SOUND_B_MIX_FULL 0x0008 +#define SOUND_ALL_MIX_FULL 0x000E +#define SOUND_A_RIGHT_OUTPUT 0x0100 +#define SOUND_A_LEFT_OUTPUT 0x0200 +#define SOUND_A_TIMER_0 0x0000 +#define SOUND_A_TIMER_1 0x0400 +#define SOUND_A_FIFO_RESET 0x0800 +#define SOUND_B_RIGHT_OUTPUT 0x1000 +#define SOUND_B_LEFT_OUTPUT 0x2000 +#define SOUND_B_TIMER_0 0x0000 +#define SOUND_B_TIMER_1 0x4000 +#define SOUND_B_FIFO_RESET 0x8000 + +// SOUNDCNT_X +#define SOUND_1_ON 0x0001 +#define SOUND_2_ON 0x0002 +#define SOUND_3_ON 0x0004 +#define SOUND_4_ON 0x0008 +#define SOUND_MASTER_ENABLE 0x0080 + +// DMA +#define DMA_DEST_INC 0x0000 +#define DMA_DEST_DEC 0x0020 +#define DMA_DEST_FIXED 0x0040 +#define DMA_DEST_RELOAD 0x0060 +#define DMA_SRC_INC 0x0000 +#define DMA_SRC_DEC 0x0080 +#define DMA_SRC_FIXED 0x0100 +#define DMA_REPEAT 0x0200 +#define DMA_16BIT 0x0000 +#define DMA_32BIT 0x0400 +#define DMA_DREQ_ON 0x0800 +#define DMA_START_NOW 0x0000 +#define DMA_START_VBLANK 0x1000 +#define DMA_START_HBLANK 0x2000 +#define DMA_START_SPECIAL 0x3000 +#define DMA_START_MASK 0x3000 +#define DMA_INTR_ENABLE 0x4000 +#define DMA_ENABLE 0x8000 + +// timer +#define TIMER_1CLK 0x00 +#define TIMER_64CLK 0x01 +#define TIMER_256CLK 0x02 +#define TIMER_1024CLK 0x03 +#define TIMER_INTR_ENABLE 0x40 +#define TIMER_ENABLE 0x80 + +// serial +// serial +#define SIO_ID 0x0030 // Communication ID + +#define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode +#define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode +#define SIO_MULTI_MODE 0x2000 // Multi-player communication mode +#define SIO_UART_MODE 0x3000 // UART communication mode + +#define SIO_SCK_OUT 0x0000 // Select external clock +#define SIO_SCK_IN 0x0001 // Select internal clock +#define SIO_IN_SCK_256K 0x0000 // Select internal clock 256KHz +#define SIO_IN_SCK_2M 0x0002 // Select 2MHz +#define SIO_ACK_RECV 0x0004 // Request transfer +#define SIO_ACK_SEND 0x0008 // Enable transfer +#define SIO_9600_BPS 0x0000 // baud rate 9600 bps +#define SIO_38400_BPS 0x0001 // 38400 bps +#define SIO_57600_BPS 0x0002 // 57600 bps +#define SIO_115200_BPS 0x0003 // 115200 bps + +#define SIO_MULTI_CONNECT 0x0004 // Connecting multi-play communication +#define SIO_MULTI_DISCONNECT 0x0000 // Disconnect +#define SIO_MULTI_PARENT 0x0008 // Multi-play communication Connect master +#define SIO_MULTI_CHILD 0x0000 // Connect slave +#define SIO_MULTI_SI 0x0004 // Multi-play communication SI terminal +#define SIO_MULTI_SD 0x0008 // SD terminal +#define SIO_MULTI_BUSY 0x0080 // Multi-play communicating +#define SIO_CTS_ENABLE 0x0004 // Enable UART send enable signal +#define SIO_UART_7BIT 0x0000 // UART communication data length 7 bit +#define SIO_UART_8BIT 0x0080 // 8 bit + +#define SIO_ERROR 0x0040 // Detect error +#define SIO_START 0x0080 // Start transfer +#define SIO_ENABLE 0x0080 // Enable SIO + +#define SIO_PARITY_ENABLE 0x0200 // Enable parity +#define SIO_PARITY_EVEN 0x0000 // Even parity +#define SIO_PARITY_ODD 0x0008 // Odd parity +#define SIO_TRANS_ENABLE 0x0400 // Enable transmitter +#define SIO_TRANS_DATA_FULL 0x0010 // Transmitted data full +#define SIO_RECV_ENABLE 0x0800 // Enable receiver +#define SIO_RECV_DATA_EMPTY 0x0020 // No data received +#define SIO_INTR_ENABLE 0x4000 // Enable interrupt request + +#define SIO_MULTI_SI_SHIFT 2 +#define SIO_MULTI_SI_MASK 0x1 +#define SIO_MULTI_DI_SHIFT 3 +#define SIO_MULTI_DI_MASK 0x1 + +// keys +#define A_BUTTON 0x0001 +#define B_BUTTON 0x0002 +#define SELECT_BUTTON 0x0004 +#define START_BUTTON 0x0008 +#define DPAD_RIGHT 0x0010 +#define DPAD_LEFT 0x0020 +#define DPAD_UP 0x0040 +#define DPAD_DOWN 0x0080 +#define R_BUTTON 0x0100 +#define L_BUTTON 0x0200 +#define KEYS_MASK 0x03FF +#define KEY_INTR_ENABLE 0x0400 +#define KEY_OR_INTR 0x0000 +#define KEY_AND_INTR 0x8000 +#define DPAD_ANY 0x00F0 +#define DPAD_SIDEWAYS (DPAD_LEFT | DPAD_RIGHT) +#define DPAD_VERTICAL (DPAD_DOWN | DPAD_UP) +#define JOY_EXCL_DPAD 0x030F + +// interrupt flags +#define INTR_FLAG_VBLANK (1 << 0) +#define INTR_FLAG_HBLANK (1 << 1) +#define INTR_FLAG_VCOUNT (1 << 2) +#define INTR_FLAG_TIMER0 (1 << 3) +#define INTR_FLAG_TIMER1 (1 << 4) +#define INTR_FLAG_TIMER2 (1 << 5) +#define INTR_FLAG_TIMER3 (1 << 6) +#define INTR_FLAG_SERIAL (1 << 7) +#define INTR_FLAG_DMA0 (1 << 8) +#define INTR_FLAG_DMA1 (1 << 9) +#define INTR_FLAG_DMA2 (1 << 10) +#define INTR_FLAG_DMA3 (1 << 11) +#define INTR_FLAG_KEYPAD (1 << 12) +#define INTR_FLAG_GAMEPAK (1 << 13) + +// WAITCNT +#define WAITCNT_SRAM_4 (0 << 0) +#define WAITCNT_SRAM_3 (1 << 0) +#define WAITCNT_SRAM_2 (2 << 0) +#define WAITCNT_SRAM_8 (3 << 0) +#define WAITCNT_SRAM_MASK (3 << 0) + +#define WAITCNT_WS0_N_4 (0 << 2) +#define WAITCNT_WS0_N_3 (1 << 2) +#define WAITCNT_WS0_N_2 (2 << 2) +#define WAITCNT_WS0_N_8 (3 << 2) +#define WAITCNT_WS0_N_MASK (3 << 2) + +#define WAITCNT_WS0_S_2 (0 << 4) +#define WAITCNT_WS0_S_1 (1 << 4) + +#define WAITCNT_WS1_N_4 (0 << 5) +#define WAITCNT_WS1_N_3 (1 << 5) +#define WAITCNT_WS1_N_2 (2 << 5) +#define WAITCNT_WS1_N_8 (3 << 5) +#define WAITCNT_WS1_N_MASK (3 << 5) + +#define WAITCNT_WS1_S_4 (0 << 7) +#define WAITCNT_WS1_S_1 (1 << 7) + +#define WAITCNT_WS2_N_4 (0 << 8) +#define WAITCNT_WS2_N_3 (1 << 8) +#define WAITCNT_WS2_N_2 (2 << 8) +#define WAITCNT_WS2_N_8 (3 << 8) +#define WAITCNT_WS2_N_MASK (3 << 8) + +#define WAITCNT_WS2_S_8 (0 << 10) +#define WAITCNT_WS2_S_1 (1 << 10) + +#define WAITCNT_PHI_OUT_NONE (0 << 11) +#define WAITCNT_PHI_OUT_4MHZ (1 << 11) +#define WAITCNT_PHI_OUT_8MHZ (2 << 11) +#define WAITCNT_PHI_OUT_16MHZ (3 << 11) +#define WAITCNT_PHI_OUT_MASK (3 << 11) + +#define WAITCNT_PREFETCH_ENABLE (1 << 14) + +#define WAITCNT_AGB (0 << 15) +#define WAITCNT_CGB (1 << 15) + +#endif // GUARD_GBA_IO_REG_H diff --git a/sa1/include/gba/isagbprint.h b/sa1/include/gba/isagbprint.h new file mode 100644 index 0000000000..c5eb456c3f --- /dev/null +++ b/sa1/include/gba/isagbprint.h @@ -0,0 +1,50 @@ +#ifndef GUARD_GBA_ISAGBPRINT_H +#define GUARD_GBA_ISAGBPRINT_H + +#ifdef NDEBUG +#define AGBPrintInit() +#define AGBPutc(cChr) +#define AGBPrint(pBuf) +#define AGBPrintf(pBuf, ...) +#define AGBPrintFlush1Block() +#define AGBPrintFlush() +#define AGBAssert(pFile, nLine, pExpression, nStopProgram) +#else +void AGBPrintInit(void); +void AGBPutc(const char cChr); +void AGBPrint(const char *pBuf); +void AGBPrintf(const char *pBuf, ...); +void AGBPrintFlush1Block(void); +void AGBPrintFlush(void); +void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram); +#endif + +#undef AGB_ASSERT +#ifdef NDEBUG +#define AGB_ASSERT(exp) +#else +#define AGB_ASSERT(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 1); +#endif + +#undef AGB_WARNING +#ifdef NDEBUG +#define AGB_WARNING(exp) +#else +#define AGB_WARNING(exp) (exp) ? ((void*)0) : AGBAssert(__FILE__, __LINE__, #exp, 0); +#endif + +// for matching purposes + +#ifdef NDEBUG +#define AGB_ASSERT_EX(exp, file, line) +#else +#define AGB_ASSERT_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 1); +#endif + +#ifdef NDEBUG +#define AGB_WARNING_EX(exp, file, line) +#else +#define AGB_WARNING_EX(exp, file, line) (exp) ? ((void*)0) : AGBAssert(file, line, #exp, 0); +#endif + +#endif // GUARD_GBA_ISAGBPRINT_H diff --git a/sa1/include/gba/macro.h b/sa1/include/gba/macro.h new file mode 100644 index 0000000000..4c13f86fb8 --- /dev/null +++ b/sa1/include/gba/macro.h @@ -0,0 +1,7 @@ +#ifndef GUARD_GBA_MACRO_H +#define GUARD_GBA_MACRO_H + +#include "gba/cpuset_macros.h" +#include "gba/dma_macros.h" + +#endif // GUARD_GBA_MACRO_H diff --git a/sa1/include/gba/multiboot.h b/sa1/include/gba/multiboot.h new file mode 100644 index 0000000000..e88b43a191 --- /dev/null +++ b/sa1/include/gba/multiboot.h @@ -0,0 +1,55 @@ +#ifndef GUARD_GBA_MULTIBOOT_H +#define GUARD_GBA_MULTIBOOT_H + +#define MULTIBOOT_NCHILD 3 // Maximum number of slaves +#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size +#define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size +#define MULTIBOOT_SEND_SIZE_MAX 0x40000 // Maximum transmission size + +struct MultiBootParam +{ + u32 system_work[5]; + u8 handshake_data; + u8 padding; + u16 handshake_timeout; + u8 probe_count; + u8 client_data[MULTIBOOT_NCHILD]; + u8 palette_data; + u8 response_bit; + u8 client_bit; + u8 reserved1; + u8 *boot_srcp; + u8 *boot_endp; + u8 *masterp; + u8 *reserved2[MULTIBOOT_NCHILD]; + u32 system_work2[4]; + u8 sendflag; + u8 probe_target_bit; + u8 check_wait; + u8 server_type; +}; + +#define MULTIBOOT_ERROR_04 0x04 +#define MULTIBOOT_ERROR_08 0x08 +#define MULTIBOOT_ERROR_0c 0x0c +#define MULTIBOOT_ERROR_40 0x40 +#define MULTIBOOT_ERROR_44 0x44 +#define MULTIBOOT_ERROR_48 0x48 +#define MULTIBOOT_ERROR_4c 0x4c +#define MULTIBOOT_ERROR_80 0x80 +#define MULTIBOOT_ERROR_84 0x84 +#define MULTIBOOT_ERROR_88 0x88 +#define MULTIBOOT_ERROR_8c 0x8c +#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50 +#define MULTIBOOT_ERROR_NO_DLREADY 0x60 +#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70 +#define MULTIBOOT_ERROR_HANDSHAKE_FAILURE 0x71 + +#define MULTIBOOT_CONNECTION_CHECK_WAIT 15 + +#define MULTIBOOT_SERVER_TYPE_NORMAL 0 +#define MULTIBOOT_SERVER_TYPE_QUICK 1 + +#define MULTIBOOT_HANDSHAKE_TIMEOUT 400 + +#endif // GUARD_GBA_MULTIBOOT_H diff --git a/sa1/include/gba/syscall.h b/sa1/include/gba/syscall.h new file mode 100644 index 0000000000..1f50ad8b8a --- /dev/null +++ b/sa1/include/gba/syscall.h @@ -0,0 +1,76 @@ +#ifndef GUARD_GBA_SYSCALL_H +#define GUARD_GBA_SYSCALL_H + +#define RESET_EWRAM 0x01 +#define RESET_IWRAM 0x02 +#define RESET_PALETTE 0x04 +#define RESET_VRAM 0x08 +#define RESET_OAM 0x10 +#define RESET_SIO_REGS 0x20 +#define RESET_SOUND_REGS 0x40 +#define RESET_REGS 0x80 +#define RESET_ALL 0xFF + +typedef struct { + u32 srcLength : 16; // in bytes + u32 srcWidth : 8; // in bits + u32 dstWidth : 8; // in bits +} BitUnPackData; + +void SoftReset(u32 resetFlags); +void SoftResetExram(u32 resetFlags); + +void RegisterRamReset(u32 resetFlags); + +void VBlankIntrWait(void); + +u16 Sqrt(u32 num); + +u16 ArcTan2(s16 x, s16 y); + +#define CPU_SET_SRC_FIXED 0x01000000 +#define CPU_SET_16BIT 0x00000000 +#define CPU_SET_32BIT 0x04000000 + +void CpuSet(const void *src, void *dest, u32 control); + +#define CPU_FAST_SET_SRC_FIXED 0x01000000 + +void CpuFastSet(const void *src, void *dest, u32 control); + +void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count); + +void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset); + +void LZ77UnCompWram(const void *src, void *dest); + +void LZ77UnCompVram(const void *src, void *dest); + +void RLUnCompWram(const void *src, void *dest); + +void RLUnCompVram(const void *src, void *dest); + +int MultiBoot(struct MultiBootParam *mp); + + +#if PLATFORM_GBA +s32 Div(s32 num, s32 denom); +s32 DivArm(s32 denom, s32 num); +s32 Mod(s32 num, s32 denom); +s32 ModArm(s32 denom, s32 num); +#else +// New GCC doesn't like us calling a function 'Mod', so we'll just inline them all. +// Also it is VERY important to also cast 'denom' to s32 on 64bit architectures, +// otherwise 'num' might be interpreted as a s64, without being properly cast as one, +// leading to a signed s32 value getting divided like an unsigned one. +#define Div(num, denom) ({((denom) != 0) ? ((s32)(num) / (s32)(denom)) : 0;}) +#define Mod(num, denom) ({((denom) != 0) ? ((s32)(num) % (s32)(denom)) : 0;}) +#define DivArm(denom, num) ({((denom) != 0) ? ((s32)(num) / (s32)(denom)) : 0;}) +#define ModArm(denom, num) ({((denom) != 0) ? ((s32)(num) % (s32)(denom)) : 0;}) +#endif + +void SoundBiasReset(void); + +void SoundBiasSet(void); + +#endif // GUARD_GBA_SYSCALL_H diff --git a/sa1/include/gba/types.h b/sa1/include/gba/types.h new file mode 100644 index 0000000000..72e721ad7b --- /dev/null +++ b/sa1/include/gba/types.h @@ -0,0 +1,459 @@ +#ifndef GUARD_GBA_TYPES_H +#define GUARD_GBA_TYPES_H + +#include "gba/defines.h" // for int_vcount (TODO) + +#if !GEN_CTX +#include +#endif + +#if defined(_MSC_VER) +#define PACKED(name, struct_body) \ + __pragma(pack(push, 1)) typedef struct struct_body name; \ + __pragma(pack(pop)) +#else +// NOTE: Please make sure NOT to add a ; to the end +// of the structs you enclose with this macro. +// PACKED(struct test { char a; int b; }); - good +// PACKED(struct test { char a; int b; };); - bad +#define PACKED(name, struct_body) \ + typedef struct __attribute__((packed)) name struct_body name; +#endif + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef int8_t s8; +typedef int16_t s16; +typedef int32_t s32; +typedef int64_t s64; + +#if (GAME == GAME_SA1) +typedef u8 MetatileIndexType; +#else +typedef u16 MetatileIndexType; +#endif + +// If the DISPLAY_HEIGHT was >255, scanline effects would break, +// so we have to make this variable bigger. +// (u16 should be plenty for screen coordinates, right?) +#if !defined(DISPLAY_HEIGHT) +#error DISPLAY_HEIGHT not defined. +#endif +/// TODO: Technically this should only be #if (DISPLAY_HEIGHT > 255), +// we should probably replace uses of int_vcount with a different type where a high DISPLAY_WIDTH necessitates u16. +#if ((DISPLAY_WIDTH > 255) || (DISPLAY_HEIGHT > 255)) +typedef u16 int_vcount; +#else +typedef u8 int_vcount; +#endif + +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; + +typedef u8 bool8; +typedef u16 bool16; +typedef u32 bool32; + +struct BgCnt +{ + u16 priority:2; + u16 charBaseBlock:2; + u16 dummy:2; + u16 mosaic:1; + u16 palettes:1; + u16 screenBaseBlock:5; + u16 areaOverflowMode:1; + u16 screenSize:2; +}; +typedef volatile struct BgCnt vBgCnt; + +struct PlttData +{ + u16 r:5; // red + u16 g:5; // green + u16 b:5; // blue + u16 unused_15:1; +}; + +// NOTE: Inside the ROM the OAM data used for layouting +// is stored without an affine parameter, which makes sense +// since they're relatively unrelated and affine values are +// usually generated during runtime, anyway. +// That's what this variation of 'OamData' is for, +// as well using this to determine the size for some DMAs to gOamBuffer. +// TODO: Somehow this does not work by #include-ing main.h and using PACKED(); +// TODO: EXTENDED_OAM is not yet functional +#if !EXTENDED_OAM +PACKED(OamDataShort, { + /*0x00*/ + u32 y : 8; + + /*0x01*/ + u32 affineMode : 2; // 0x100, 0x200 -> 0x300 + u32 objMode : 2; // 0x400, 0x800 -> 0xC00 + u32 mosaic : 1; // 0x1000 + u32 bpp : 1; // 0x2000 + u32 shape : 2; // 0x4000, 0x8000 -> 0xC000 + + /*0x02*/ + u32 x : 9; + u32 matrixNum : 5; // bits 3/4 are h-flip/v-flip if not in affine mode + u32 size : 2; // 0x4000, 0x8000 -> 0xC000 + + /*0x04*/ + u16 tileNum : 10; // 0x3FF + u16 priority : 2; // 0x400, 0x800 -> 0xC00 + u16 paletteNum : 4; +}); /* size: 0x6 (important to not be 0x8, see comment above struct!) */ + +typedef union { + struct { + /*0x00*/ u32 y:8; + /*0x01*/ u32 affineMode:2; // 0x100, 0x200 -> 0x400 + u32 objMode:2; // 0x400, 0x800 -> 0xC00 + u32 mosaic:1; // 0x1000 + u32 bpp:1; // 0x2000 + u32 shape:2; // 0x4000, 0x8000 -> 0xC000 + + /*0x02*/ u32 x:9; + u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode + u32 size:2; // 0x4000, 0x8000 -> 0xC000 + + /*0x04*/ u16 tileNum:10; // 0x3FF + u16 priority:2; // 0x400, 0x800 -> 0xC00 + u16 paletteNum:4; + + /*0x06*/ u16 fractional:8; + u16 integer:7; + u16 sign:1; + } split; + + struct { + u16 attr0; + u16 attr1; + u16 attr2; + u16 affineParam; + } all; + + u16 raw[4]; +} OamData; + +#define OAM_GET_X(oamEntry) ((oamEntry)->all.attr1 & 0x1FF) +#define OAM_INIT_X(oamEntry, value, flip) (oamEntry)->all.attr1 = (((value) & 0x1FF) | ((flip) ? 0x1000 : 0)); +#define OAM_SET_X(oamEntry, value) { \ + u32 v; \ + (oamEntry)->all.attr1 &= ~0x1FF; \ + v = (value); \ + (oamEntry)->all.attr1 += v & 0x1FF; \ +} + +#define OAM_GET_Y(oamEntry) (oamEntry)->all.attr0 & 0xFF +#define OAM_INIT_Y(oamEntry, value) (oamEntry)->all.attr0 = (value) & 0xFF +#define OAM_SET_Y(oamEntry, value) { \ + u32 v; \ + (oamEntry)->all.attr0 &= ~0xFF; \ + v = (value); \ + (oamEntry)->all.attr0 += v & 0xFF; \ +} +#define OAM_SET_AFFINE_MODE(oamEntry, value) { \ + u32 v; \ + (oamEntry)->all.attr0 &= ~0x3; \ + v = (value); \ + (oamEntry)->all.attr0 |= v; \ +} + +#define OAM_DATA_SIZE_AFFINE 8 +#define OAM_DATA_SIZE_NO_AFFINE 6 + +#define OAM_DATA_COUNT_AFFINE (OAM_DATA_SIZE_AFFINE / sizeof(short)) +#define OAM_DATA_COUNT_NO_AFFINE (OAM_DATA_SIZE_NO_AFFINE / sizeof(short)) + +#else +PACKED(OamDataShort, { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + + /* 0x04 */ u32 affineMode:2; // 0x1, 0x2 -> 0x4 + u32 objMode:2; // 0x4, 0x8 -> 0xC + u32 mosaic:1; // 0x10 + u32 bpp:1; // 0x20 + u32 shape:2; // 0x40, 0x80 -> 0xC0 + + /* 0x05 */ u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode + u32 size:2; // 0x4000, 0x8000 -> 0xC000u32 + u32 padding:17; // NOTE: Padding MUST be here for some platforms not to break + + /* 0x08 */ u16 tileNum:10; // 0x3FF + u16 priority:2; // 0x400, 0x800 -> 0xC00 + u16 paletteNum:4; + +}); /* size: 0x6 (important to not be 0x8, see comment above struct!) */ + +typedef union { + struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + + /* 0x04 */ u32 affineMode:2; // 0x1, 0x2 -> 0x4 + u32 objMode:2; // 0x4, 0x8 -> 0xC + u32 mosaic:1; // 0x10 + u32 bpp:1; // 0x20 + u32 shape:2; // 0x40, 0x80 -> 0xC0 + + /* 0x05 */ u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode + u32 size:2; // 0x4000, 0x8000 -> 0xC000 + u32 padding:17; // NOTE: Padding MUST be here for some platforms not to break + + /* 0x08 */ u16 tileNum:10; // 0x3FF + u16 priority:2; // 0x400, 0x800 -> 0xC00 + u16 paletteNum:4; + + /* 0x0A */ u16 fractional:8; + u16 integer:7; + u16 sign:1; + } split; + + struct { + s16 x; + s16 y; + u16 attr0; + u16 attr1; + u16 attr2; + u16 affineParam; + } all; + + u16 raw[6]; +} OamData; + +#define OAM_GET_X(oamEntry) (oamEntry)->x +#define OAM_INIT_X(oamEntry, value, flip) \ + (oamEntry)->split.x = (value); \ + (oamEntry)->split.matrixNum = ((flip) ? 0x08 : 0); +#define OAM_SET_X(oamEntry, value) { \ + (oamEntry)->split.x = (value); \ +} + +#define OAM_GET_Y(oamEntry) (oamEntry)->split.y +#define OAM_INIT_Y(oamEntry, value) (oamEntry)->split.y = (value); +#define OAM_SET_Y(oamEntry, value) (oamEntry)->split.y = (value); +#define OAM_SET_AFFINE_MODE(oamEntry, value) { \ + (oamEntry)->split.affineMode = (value); \ +} + +#define OAM_DATA_SIZE_AFFINE 12 +#define OAM_DATA_SIZE_NO_AFFINE 10 + +#define OAM_DATA_COUNT_AFFINE (OAM_DATA_SIZE_AFFINE / sizeof(short)) +#define OAM_DATA_COUNT_NO_AFFINE (OAM_DATA_SIZE_NO_AFFINE / sizeof(short)) + +#endif + +#define ST_OAM_HFLIP 0x08 +#define ST_OAM_VFLIP 0x10 +#define ST_OAM_MNUM_FLIP_MASK 0x18 + +#define ST_OAM_OBJ_NORMAL 0 +#define ST_OAM_OBJ_BLEND 1 +#define ST_OAM_OBJ_WINDOW 2 + +#define ST_OAM_AFFINE_OFF 0 +#define ST_OAM_AFFINE_NORMAL 1 +#define ST_OAM_AFFINE_ERASE 2 +#define ST_OAM_AFFINE_DOUBLE 3 + +#define ST_OAM_AFFINE_ON_MASK 1 +#define ST_OAM_AFFINE_DOUBLE_MASK 2 + +#define ST_OAM_4BPP 0 +#define ST_OAM_8BPP 1 + +#define ST_OAM_SQUARE 0 +#define ST_OAM_H_RECTANGLE 1 +#define ST_OAM_V_RECTANGLE 2 + +#define ST_OAM_SIZE_0 0 +#define ST_OAM_SIZE_1 1 +#define ST_OAM_SIZE_2 2 +#define ST_OAM_SIZE_3 3 + +#define SPRITE_SIZE_8x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_SQUARE)) +#define SPRITE_SIZE_16x16 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_SQUARE)) +#define SPRITE_SIZE_32x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_SQUARE)) +#define SPRITE_SIZE_64x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_SQUARE)) + +#define SPRITE_SIZE_16x8 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_H_RECTANGLE)) +#define SPRITE_SIZE_32x8 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_H_RECTANGLE)) +#define SPRITE_SIZE_32x16 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_H_RECTANGLE)) +#define SPRITE_SIZE_64x32 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_H_RECTANGLE)) + +#define SPRITE_SIZE_8x16 ((ST_OAM_SIZE_0 << 2) | (ST_OAM_V_RECTANGLE)) +#define SPRITE_SIZE_8x32 ((ST_OAM_SIZE_1 << 2) | (ST_OAM_V_RECTANGLE)) +#define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE)) +#define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE)) + +#define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03) +#define SPRITE_SHAPE(dim) (SPRITE_SIZE_##dim & 0x03) + +struct BgAffineSrcData +{ + s32 texX; + s32 texY; + s16 scrX; + s16 scrY; + s16 sx; + s16 sy; + u16 alpha; +}; + +struct BgAffineDstData +{ + s16 pa; + s16 pb; + s16 pc; + s16 pd; + s32 dx; + s32 dy; +}; + +struct ObjAffineSrcData +{ + s16 xScale; + s16 yScale; + u16 rotation; +}; + +// Normal SIO Control Structure +struct SioNormalCnt +{ + u16 sck_I_O:1; // Clock I/O Select + u16 sck:1; // Internal Clock Select + u16 ackRecv:1; // Transfer Enable Flag Receive + u16 ackSend:1; // Transfer Enable Flag Send + u16 unused_6_4:3; + u16 enable:1; // SIO Enable + u16 unused_11_8:4; + u16 mode:2; // Communication Mode Select + u16 ifEnable:1; // Interrupt Request Enable + u16 unused_15:1; + u8 data; // Data + u8 unused_31_24; +}; + +#define ST_SIO_8BIT_MODE 0 // Normal 8-bit communication mode +#define ST_SIO_32BIT_MODE 1 // Normal 32-bit communication mode + +#define ST_SIO_SCK_OUT 0 // Select external clock +#define ST_SIO_SCK_IN 1 // Select internal clock +#define ST_SIO_IN_SCK_256K 0 // Select internal clock 256KHz +#define ST_SIO_IN_SCK_2M 1 // Select 2MHz + +// Multi-player SIO Control Structure +struct SioMultiCnt +{ + u16 baudRate:2; // baud rate + u16 si:1; // SI terminal + u16 sd:1; // SD terminal + u16 id:2; // ID + u16 error:1; // error flag + u16 enable:1; // SIO enable + u16 unused_11_8:4; + u16 mode:2; // communication mode (should equal 2) + u16 ifEnable:1; // IRQ enable + u16 unused_15:1; + u16 data; // data +}; + +#define ST_SIO_MULTI_MODE 2 // Multi-play communication mode + +#define ST_SIO_9600_BPS 0 // Baud rate 9600 bps +#define ST_SIO_38400_BPS 1 // 38400 bps +#define ST_SIO_57600_BPS 2 // 57600 bps +#define ST_SIO_115200_BPS 3 // 115200 bps +#define ST_SIO_MULTI_PARENT 1 // Multi-play communication Connect master +#define ST_SIO_MULTI_CHILD 0 // Connect slave + +// UART - SIO Control Structure +struct SioUartCnt +{ + u16 baudRate:2; // Baud Rate + u16 ctsEnable:1; // Send Signal Enable + u16 paritySelect:1; // Parity Even/Odd + u16 transDataFull:1; // Transmit Data Full + u16 recvDataEmpty:1; // Receive Data Empty + u16 error:1; // Error Detect + u16 length:1; // Data Length + u16 fifoEnable:1; // FIFO Enable + u16 parityEnable:1; // Parity Enable + u16 transEnable:1; // Transmitter Enable + u16 recvEnable:1; // Receiver Enable + u16 mode:2; // Communication Mode Select + u16 ifEnable:1; // Interrupt Request Enable + u16 unused_15:1; + u8 data; // Data + u8 unused_31_24; +}; + +#define ST_SIO_UART_MODE 3 // UART communication mode + +#define ST_SIO_UART_7BIT 0 // UART communication data length 7 bits +#define ST_SIO_UART_8BIT 1 // 8 bits +#define ST_SIO_PARITY_EVEN 0 // Even parity +#define ST_SIO_PARITY_ODD 1 // Odd parity + +// JOY Bus Communication Control Structure +struct JoyCnt +{ + u8 ifReset:1; // JOY Bus Reset Interrupt Request + u8 ifRecv:1; // JOY Bus Received Interrupt Request + u8 ifSend:1; // JOY Bus Sent Interrupt Request + u8 unused_5_3:3; + u8 ifEnable:1; // Interrupt Request Enable + u8 unused_7:1; +}; + +// JOY Bus Communication Status Structure +struct JoyStat +{ + u8 unused_0:1; + u8 recv:1; // Receive Status + u8 unused_2:1; + u8 send:1; // Send Status + u8 flags:2; // General Flag + u8 unused_7_6:2; +}; + +// General Input/Output Control Structure +struct RCnt +{ + u8 sc:1; // Data + u8 sd:1; + u8 si:1; + u8 so:1; + u8 sc_i_o:1; // I/O Select + u8 sd_i_o:1; + u8 si_i_o:1; + u8 so_i_o:1; + u8 ifEnable:1; // Interrupt Request Enable + u8 unused_13_9:5; + u8 sioModeMaster:2; // SIO Mode Master +}; + +#define ST_R_SIO_MASTER_MODE 0 // SIO master mode +#define ST_R_DIRECT_MODE 2 // General input/output communication mode +#define ST_R_JOY_MODE 3 // JOY communication mode + +#define ST_R_IN 0 // Select input +#define ST_R_OUT 1 // Select output + +#endif // GUARD_GBA_TYPES_H diff --git a/sa1/include/global.h b/sa1/include/global.h new file mode 100644 index 0000000000..e59f0f6551 --- /dev/null +++ b/sa1/include/global.h @@ -0,0 +1,353 @@ +#ifndef GUARD_GLOBAL_H +#define GUARD_GLOBAL_H + +#include "config.h" +#include "gba/gba.h" + +#if PLATFORM_GBA +#define ENABLE_AUDIO TRUE +#else +#define ENABLE_AUDIO TRUE +#define ENABLE_VRAM_VIEW !TRUE +#endif + +#define CONST_DATA __attribute__((section(".data"))) + +// #include "types.h" +// #include "variables.h" + +#if !PLATFORM_GBA +#ifdef _WIN32 +void *Platform_malloc(size_t numBytes); +void Platform_free(void *ptr); +#define malloc(numBytes) Platform_malloc(numBytes) +#define calloc(count, size) Platform_malloc(count *size) +#define free(numBytes) Platform_free(numBytes) +#endif +#endif + +#define SIO_MULTI_CNT ((volatile struct SioMultiCnt *)REG_ADDR_SIOCNT) + +typedef void (*VoidFn)(void); + +// helper macros + +// This macro is only needed while SA2 still has variables called gUnknown_XXXXXXX left +#if ((GAME == GAME_SA1) || (GAME == GAME_SA3)) +#define SA2_LABEL(_label) sa2__##_label +#else +#define SA2_LABEL(_label) _label +#endif + +#if (PORTABLE) +#define BUG_FIX + +#if !(defined NON_MATCHING) +#define NON_MATCHING 1 +#endif +#elif (DEBUG) +#define NON_MATCHING 1 +#endif + +#ifdef NON_MATCHING +#define ASM_FUNC(path, decl) +#define TEMP_FIX 1 +#else +#define ASM_FUNC(path, decl) \ + NAKED decl { asm(".include " #path); } +#define TEMP_FIX 0 +#endif + +#ifdef NON_MATCHING +#define NONMATCH(path, decl) decl +#define END_NONMATCH +#else +#define NONMATCH(path, decl) \ + NAKED decl \ + { \ + asm(".include " #path); \ + if (0) +#define END_NONMATCH } +#endif + +/// IDE support +#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__INTELLISENSE__) +// We define these when using certain IDEs to fool preproc +#define _(x) (x) +#define __(x) (x) +#define INCBIN(...) \ + { \ + 0 \ + } +#define INCBIN_U8 INCBIN +#define INCBIN_U16 INCBIN +#define INCBIN_U32 INCBIN +#define INCBIN_S8 INCBIN +#define INCBIN_S16 INCBIN +#define INCBIN_S32 INCBIN +#endif // IDE support + +#if (GAME == GAME_SA1) +#define INCBIN_MAP INCBIN_U8 +#else +#define INCBIN_MAP INCBIN_U16 +#endif + +// Use STR() to turn the macro's *content* into a string +#define STR_(x) #x +#define STR(x) STR_(x) + +// NOTE: This has to be kept as-is. +// If casted it to be signed, +// dataIndex = (dataIndex + 1) % ARRAY_COUNT(data) +// wouldn't match. +#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) + +// Converts a number to Q8.8 fixed-point format +#define Q_8_8(n) ((s16)((n)*256)) + +// Converts a number to Q16.16 fixed-point format (<< 0x10) +#define Q_16_16(n) ((s32)((n)*0x10000)) + +// Converts a number to Q4.12 fixed-point format +#define Q_4_12(n) ((s16)((n)*4096)) + +// Converts a number to Q2.14 fixed-point format +#define Q_2_14(n) ((s16)((n)*0x4000)) + +// Converts a number to Q20.12 fixed-point format +#define Q_20_12(n) ((s32)((n)*4096)) + +// Converts a number to Q24.8 fixed-point format +#define Q_24_8(n) ((s32)((n)*256)) +#define Q_24_8_FRAC(n) ((u8)(n)) + +// This may be the "real" version as we are seeing better matches with +// it in some cases +#define Q_24_8_NEW(n) ((s32)((n) << 8)) + +// Converts a Q8.8 fixed-point format number to a regular integer +#define Q_8_8_TO_INT(n) ((int)((n) >> 8)) + +// Converts a Q4.12 fixed-point format number to a regular integer +#define Q_4_12_TO_INT(n) ((int)((n) >> 12)) + +// Converts a Q2.12 fixed-point format number to a regular integer +#define Q_2_14_TO_INT(n) ((int)((n) >> 14)) + +// Converts a Q24.8 fixed-point format number to a regular integer +#define Q_24_8_TO_INT(n) ((int)((n) >> 8)) + +// Converts a Q20.12 fixed-point format number to a regular integer +#define Q_20_12_TO_INT(n) ((int)((n) >> 12)) + +// Converts a Q16.16 fixed-point format number to a regular integer +#define Q_16_16_TO_INT(n) ((int)((n) >> 0x10)) + +// Converts a Q2.12 fixed-point format number to a Q24.8 fixed point number +#define Q_2_14_TO_Q_24_8(n) ((int)((n) >> 6)) + +// Multiplies two Q values +#define Q_MUL(qValA, qValB) ((qValA * qValB) >> 8) +#define Q_MUL_NEG(qValA, qValB) (-(qValA * qValB) >> 8) +#define Q_SQUARE(qVal) Q_MUL(qVal, qVal) +#define Q_DIV(qValA, qValB) Div((qValA << 8), qValB) +#define Q_DIV2(qValA, qValB) ((qValA << 8) / qValB) +#define Q_MUL_Q_F32(qVal, floatVal) Q_MUL(qVal, Q(floatVal)) + +/* + * Aliases for common macros + */ + +// Converts a number to Q24.8 fixed-point format +#define Q(n) Q_24_8(n) + +// Converts a number to Q24.8 fixed-point format +#define QS(n) Q_24_8_NEW(n) + +// Converts a Q24.8 fixed-point format number to a regular integer +#define I(n) Q_24_8_TO_INT(n) + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +#define CLAMP(value, min, max) \ + ({ \ + s32 clamped; \ + if ((value) < (min)) { \ + clamped = (min); \ + } else { \ + clamped = (value) > (max) ? (max) : (value); \ + } \ + clamped; \ + }) + +#define CLAMP_T(type, value, min, max) \ + ({ \ + type clamped; \ + if ((value) >= (min)) { \ + clamped = (value) > (max) ? (max) : (value); \ + } else { \ + clamped = (min); \ + } \ + clamped; \ + }) + +#define CLAMP_16(value, min, max) CLAMP_T(s16, value, min, max) +#define CLAMP_32(value, min, max) CLAMP_T(s32, value, min, max) + +#define CLAMP_INLINE(var, min, max) \ + ({ \ + if ((var) < (min)) { \ + var = (min); \ + } else if ((var) > (max)) { \ + var = (max); \ + } \ + }) + +#define CLAMP_INLINE_NO_ELSE(var, min, max) \ + ({ \ + if ((var) < (min)) { \ + var = (min); \ + } \ + \ + if ((var) > (max)) { \ + var = (max); \ + } \ + }) + +#define CLAMP_INLINE2(var, min, max) \ + ({ \ + if ((var) > (max)) { \ + var = (max); \ + } else if ((var) < (min)) { \ + var = (min); \ + } \ + }) + +// TODO: Check whether ABS() can be replaced by ABS2! +#define ABS(aValue) ((aValue) >= 0 ? (aValue) : -(aValue)) +#define ABS2(aValue) ((aValue) < 0 ? -(aValue) : (aValue)) + +#define RECT_DISTANCE(aXA, aYA, aXB, aYB) (ABS((aXA) - (aXB)) + ABS((aYA) - (aYB))) + +#define BitValue(y) (1 << (y)) +#define CheckBit(x, y) ((x) & (BitValue(y))) +#define GetBit(x, y) (((x) >> (y)) & 1) +#define SetBit(x, y) (x) |= BitValue(y) +#define SetSoleBit(x, y) (x) = BitValue(y) +#define ClearBit(x, y) (x) &= ~BitValue(y) + +// TODO: Use instrinsics for these, on platforms that support it! +// Like GetFirstSetBitIndex, but an external iterator can be passed. +#define GetFirstSetBitIndexExt(value, max, it) \ + ({ \ + s32 res; \ + \ + for (it = 0; it < (max); it++) { \ + if (GetBit(value, it)) { \ + break; \ + } \ + } \ + \ + res = it; \ + }) + +// Get the index to the first set bit in a given value. +#define GetFirstSetBitIndex(value, max) \ + ({ \ + s16 bit; \ + \ + bit = GetFirstSetBitIndexExt(value, max, bit); \ + }) + +// Like GetFirstSetBitIndex, but expects input value to only have 1 bit set. +#define GetSoleSetBitIndex(value, max) \ + ({ \ + s16 bit; \ + \ + for (bit = 0; bit < (max); bit++) { \ + if ((value) == (1 << bit)) { \ + break; \ + } \ + } \ + \ + bit; \ + }) + +// 60 is not exactly true as the GBA's FPS, but it's what they went +// with for the calculation +#define GBA_FRAMES_PER_SECOND 60 + +// TODO: fix casts here(?) +#define XOR_SWAP(a, b) \ + a ^= (u8)b; \ + b ^= (u8)a; \ + a = ((u8)b ^ (u8)a); + +#define XOR_SWAP_WORD(a, b) \ + a ^= b; \ + b ^= a; \ + a = (b ^ a); + +// TODO: fix casts here +#define SWAP_AND_NEGATE(a, b) \ + a ^= (u8)b; \ + b ^= (u8)a; \ + a = ((u8)b ^ (u8)a) * -1; \ + b = (u8)b * -1; + +#define NEGATE(var) \ + ({ \ + s32 temp = var; \ + var = -temp; \ + }) +#define DIRECT_NEGATE(var) (var = -var;) + +#define HALVE(var) (var = (var >> 1)) + +typedef struct { + s16 x; + s16 y; +} Vec2_16; + +typedef struct { + s32 x; + s32 y; +} Vec2_32; + +typedef struct { + u8 reserved : 4; + u8 compressedType : 4; + u32 size : 24; + void *data; +} RLCompressed; + +struct BlendRegs { + u16 bldCnt; + u16 bldAlpha; + u16 bldY; +}; + +// TODO: Should this be in a GBA-specific header file? +#define NUM_AFFINE_BACKGROUNDS 2 +#define NUM_BACKGROUNDS 4 + +// Values to be passed top the affine registers +// (used by BG2/BG3 in affine screen modes) +typedef struct { + /* 0x00 */ u16 pa, pb, pc, pd; + /* 0x08 */ u32 x, y; +} BgAffineReg; + +// TODO: Find better place for this +typedef void (*HBlankIntrFunc)(int_vcount vcount); +typedef void (*IntrFunc)(void); +typedef bool32 (*VBlankFunc)(void); + +extern void *iwram_end; +extern void *ewram_end; + +extern void *rom_footer; + +#endif // GUARD_GLOBAL_H diff --git a/sa1/include/input_recorder.h b/sa1/include/input_recorder.h new file mode 100644 index 0000000000..314784258f --- /dev/null +++ b/sa1/include/input_recorder.h @@ -0,0 +1,24 @@ +#ifndef GUARD_INPUT_RECORDER_H +#define GUARD_INPUT_RECORDER_H + +#include "global.h" + +#define RECORDER_DISABLED 0 +#define RECORDER_RECORD 1 + +// Maybe `RECORDER_PLAY` +#define RECORDER_PLAYBACK 2 + +struct InputRecorder { + /* 0x00 */ s32 playbackHead; + /* 0x04 */ s32 recordHead; + /* 0x08 */ u8 mode; +}; + +void InputRecorderResetRecordHead(void); +void InputRecorderResetPlaybackHead(void); +void InputRecorderLoadTape(void); +u16 InputRecorderRead(void); +void InputRecorderWrite(u16); + +#endif // INPUT_RECORDER_H diff --git a/sa1/include/lib/agb_flash/agb_flash.h b/sa1/include/lib/agb_flash/agb_flash.h new file mode 100644 index 0000000000..27223d4e10 --- /dev/null +++ b/sa1/include/lib/agb_flash/agb_flash.h @@ -0,0 +1,13 @@ + +#ifndef GUARD_AGB_FLASH_512k_H +#define GUARD_AGB_FLASH_512k_H + +#include "global.h" + +u16 IdentifyFlash(void); +void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size); +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n); +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); +extern u16 (*EraseFlashSector)(u16); + +#endif // GUARD_AGB_FLASH_512k_H diff --git a/sa1/include/lib/agb_flash/flash_internal.h b/sa1/include/lib/agb_flash/flash_internal.h new file mode 100644 index 0000000000..efe16cee9b --- /dev/null +++ b/sa1/include/lib/agb_flash/flash_internal.h @@ -0,0 +1,105 @@ +#ifndef GUARD_GBA_FLASH_INTERNAL_H +#define GUARD_GBA_FLASH_INTERNAL_H + +#if (GAME == GAME_SA1) +// It seems like the launch SDK had a way different +// version of this library than later ones, so we use this +// to make it match. +#define AGBFLASH_USE_V126 1 +#endif + +#define FLASH_ROM_SIZE_1M 131072 // 1 megabit ROM +#define SECTORS_PER_BANK 16 + +#if !PORTABLE +#define FLASH_BASE ((u8 *)0xE000000) +#else +extern u8 FLASH_BASE[FLASH_ROM_SIZE_1M * SECTORS_PER_BANK]; +#endif + +#define FLASH_WRITE(addr, data) ((*(vu8 *)(FLASH_BASE + (addr))) = (data)) + +struct FlashSector { + u32 size; + u8 shift; + u16 count; + u16 top; +}; + +struct FlashType { + u32 romSize; + struct FlashSector sector; + u16 wait[2]; // game pak bus read/write wait + + // TODO: add support for anonymous unions/structs if possible + union { + struct { + u8 makerId; + u8 deviceId; + } separate; + u16 joined; + } ids; +}; + +struct FlashSetupInfo { + u16 (*programFlashSector)(u16, void *); + u16 (*eraseFlashChip)(void); + u16 (*eraseFlashSector)(u16); + u16 (*WaitForFlashWrite)(u8, u8 *, u8); + const u16 *maxTime; + struct FlashType type; +}; + +extern u16 gFlashNumRemainingBytes; + +extern u16 (*ProgramFlashSector)(u16, void *); +extern u16 (*EraseFlashChip)(void); +extern u16 (*EraseFlashSector)(u16); +extern const struct FlashType *gFlash; + +// extern u8 gFlashTimeoutFlag; +// extern u8 (*PollFlashStatus)(u8 *); + +extern u16 (*WaitForFlashWrite)(u8, u8 *, u8); + +extern const struct FlashSetupInfo LE39FW512; +extern const struct FlashSetupInfo AT29LV512; +extern const struct FlashSetupInfo MN63F805MNP; +extern const struct FlashSetupInfo MX29L512; +extern const struct FlashSetupInfo DefaultFlash512K; + +// extern const struct FlashSetupInfo MX29L010; +// extern const struct FlashSetupInfo LE26FV10N1TS; +// extern const struct FlashSetupInfo DefaultFlash1M; + +void SwitchFlashBank(u8 bankNum); +u16 ReadFlashId(void); +void StartFlashTimer(u8 phase); +void SetReadFlash1(u16 *dest); +void StopFlashTimer(void); +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)); +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src); +void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size); +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n); + +u16 WaitForFlashWrite512K_Common(u8 phase, u8 *addr, u8 lastData); +u16 WaitForFlashWrite_Common(u8 phase, u8 *addr, u8 lastData); + +u16 ProgramByte(u8 *src, u8 *dest); + +u16 EraseFlashChip_LE(void); +u16 EraseFlashChip_AT(void); +u16 EraseFlashSector_LE(u16 sectorNum); +u16 EraseFlashSector_AT(u16 sectorNum); +u16 ProgramFlashSector_LE(u16 sectorNum, void *src); +u16 ProgramFlashSector_MX(u16 sectorNum, void *src); +u16 ProgramFlashSector_AT(u16 sectorNum, void *src); + +// agb_flash_1m +u16 IdentifyFlash(void); + +/* Manufacturers and chips */ +#define MANUFACTURER_ATMEL 0x1F +#define CHIP_ATMEL_AT29LV512 0x3D + +#endif // GUARD_GBA_FLASH_INTERNAL_H diff --git a/sa1/include/lib/m4a/m4a.h b/sa1/include/lib/m4a/m4a.h new file mode 100644 index 0000000000..81985904c3 --- /dev/null +++ b/sa1/include/lib/m4a/m4a.h @@ -0,0 +1,40 @@ +#ifndef GUARD_M4A_H +#define GUARD_M4A_H + +#include "lib/m4a/m4a_internal.h" + +extern struct SoundMixerState gSoundInfo; + +extern struct MP2KPlayerState gMPlayInfo_BGM; +extern struct MP2KPlayerState gMPlayInfo_SE1; +extern struct MP2KPlayerState gMPlayInfo_SE2; +extern struct MP2KPlayerState gMPlayInfo_SE3; + +void m4aSoundVSync(void); + +void m4aSoundInit(void); +void m4aSoundMain(void); +void m4aSongNumStart(u16); +void m4aSongNumStartOrChange(u16); +void m4aSongNumStartOrContinue(u16); +void m4aSongNumStop(u16 n); +void m4aMPlayAllStop(void); +void m4aMPlayAllContinue(void); +void m4aMPlayContinue(struct MP2KPlayerState *mplayInfo); +void m4aMPlayFadeOut(struct MP2KPlayerState *mplayInfo, u16 speed); +void m4aMPlayFadeOutTemporarily(struct MP2KPlayerState *mplayInfo, u16 speed); +void m4aMPlayFadeIn(struct MP2KPlayerState *mplayInfo, u16 speed); +void m4aMPlayImmInit(struct MP2KPlayerState *mplayInfo); + +void m4aMPlayTempoControl(struct MP2KPlayerState *mplayInfo, u16 tempo); +void m4aMPlayVolumeControl(struct MP2KPlayerState *mplayInfo, u16 trackBits, u16 volume); +void m4aMPlayPitchControl(struct MP2KPlayerState *mplayInfo, u16 trackBits, s16 pitch); +void m4aMPlayPanpotControl(struct MP2KPlayerState *mplayInfo, u16 trackBits, s8 pan); + +#define IS_ACTIVE_SONG(music_player_ID, song_ID) (gMPlayTable[music_player_ID].info->songHeader == gSongTable[song_ID].header) +#define MUSIC_PLAYER_BGM 0 +#define MUSIC_PLAYER_SE1 1 +#define MUSIC_PLAYER_SE2 2 +#define MUSIC_PLAYER_SE3 3 + +#endif // GUARD_M4A_H diff --git a/sa1/include/lib/m4a/m4a_internal.h b/sa1/include/lib/m4a/m4a_internal.h new file mode 100644 index 0000000000..8af057aee1 --- /dev/null +++ b/sa1/include/lib/m4a/m4a_internal.h @@ -0,0 +1,477 @@ +#ifndef GUARD_GBA_M4A_INTERNAL_H +#define GUARD_GBA_M4A_INTERNAL_H + +#include "gba/gba.h" + +// ASCII encoding of 'Smsh' in reverse +// This is presumably short for SMASH, the developer of MKS4AGB. +#define ID_NUMBER 0x68736D53 + +#define C_V 0x40 // center value for PAN, BEND, and TUNE + +#define SOUND_MODE_REVERB_VAL 0x0000007F +#define SOUND_MODE_REVERB_SET 0x00000080 +#define SOUND_MODE_MAXCHN 0x00000F00 +#define SOUND_MODE_MAXCHN_SHIFT 8 +#define SOUND_MODE_MASVOL 0x0000F000 +#define SOUND_MODE_MASVOL_SHIFT 12 +#define SOUND_MODE_FREQ_05734 0x00010000 +#define SOUND_MODE_FREQ_07884 0x00020000 +#define SOUND_MODE_FREQ_10512 0x00030000 +#define SOUND_MODE_FREQ_13379 0x00040000 +#define SOUND_MODE_FREQ_15768 0x00050000 +#define SOUND_MODE_FREQ_18157 0x00060000 +#define SOUND_MODE_FREQ_21024 0x00070000 +#define SOUND_MODE_FREQ_26758 0x00080000 +#define SOUND_MODE_FREQ_31536 0x00090000 +#define SOUND_MODE_FREQ_36314 0x000A0000 +#define SOUND_MODE_FREQ_40137 0x000B0000 +#define SOUND_MODE_FREQ_42048 0x000C0000 +#define SOUND_MODE_FREQ 0x000F0000 +#define SOUND_MODE_FREQ_SHIFT 16 +#define SOUND_MODE_DA_BIT_9 0x00800000 +#define SOUND_MODE_DA_BIT_8 0x00900000 +#define SOUND_MODE_DA_BIT_7 0x00A00000 +#define SOUND_MODE_DA_BIT_6 0x00B00000 +#define SOUND_MODE_DA_BIT 0x00B00000 +#define SOUND_MODE_DA_BIT_SHIFT 20 + +#if COLLECT_RINGS_ROM +#define DEFAULT_SOUND_MODE (SOUND_MODE_DA_BIT_8 | SOUND_MODE_FREQ_07884 | (15 << SOUND_MODE_MASVOL_SHIFT) | (4 << SOUND_MODE_MAXCHN_SHIFT)) +#else +#if (ENGINE == ENGINE_3) +#define DEFAULT_SOUND_MODE (SOUND_MODE_DA_BIT_8 | SOUND_MODE_FREQ_10512 | (10 << SOUND_MODE_MASVOL_SHIFT) | (6 << SOUND_MODE_MAXCHN_SHIFT)) +#else +#define DEFAULT_SOUND_MODE (SOUND_MODE_DA_BIT_8 | SOUND_MODE_FREQ_10512 | (15 << SOUND_MODE_MASVOL_SHIFT) | (5 << SOUND_MODE_MAXCHN_SHIFT)) +#endif +#endif + +#define TONEDATA_TYPE_CGB 0x07 +#define TONEDATA_TYPE_FIX 0x08 +#define TONEDATA_TYPE_SPL 0x40 // key split +#define TONEDATA_TYPE_RHY 0x80 // rhythm + +#define TONEDATA_P_S_PAN 0xc0 +#define TONEDATA_P_S_PAM TONEDATA_P_S_PAN + +#define SOUND_CHANNEL_SF_START 0x80 +#define SOUND_CHANNEL_SF_STOP 0x40 +#define SOUND_CHANNEL_SF_LOOP 0x10 +#define SOUND_CHANNEL_SF_IEC 0x04 +#define SOUND_CHANNEL_SF_ENV 0x03 +#define SOUND_CHANNEL_SF_ENV_ATTACK 0x03 +#define SOUND_CHANNEL_SF_ENV_DECAY 0x02 +#define SOUND_CHANNEL_SF_ENV_SUSTAIN 0x01 +#define SOUND_CHANNEL_SF_ENV_RELEASE 0x00 +#define SOUND_CHANNEL_SF_ON (SOUND_CHANNEL_SF_START | SOUND_CHANNEL_SF_STOP | SOUND_CHANNEL_SF_IEC | SOUND_CHANNEL_SF_ENV) + +#define CGB_CHANNEL_MO_PIT 0x02 +#define CGB_CHANNEL_MO_VOL 0x01 + +#define CGB_NRx2_ENV_DIR_DEC 0x00 +#define CGB_NRx2_ENV_DIR_INC 0x08 + +#define MPT_FLG_VOLSET 0x01 +#define MPT_FLG_VOLCHG 0x03 +#define MPT_FLG_PITSET 0x04 +#define MPT_FLG_PITCHG 0x0C +#define MPT_FLG_START 0x40 +#define MPT_FLG_EXIST 0x80 + +#define MUSICPLAYER_STATUS_TRACK 0x0000ffff +#define MUSICPLAYER_STATUS_PAUSE 0x80000000 + +#define MAX_MUSICPLAYER_TRACKS 16 + +#define TRACKS_ALL 0xFFFF + +#define TEMPORARY_FADE 0x0001 +#define FADE_IN 0x0002 +#define FADE_VOL_MAX 64 +#define FADE_VOL_SHIFT 2 + +#define MAX_DIRECTSOUND_CHANNELS 12 + +#if PLATFORM_GBA +#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer +#else +#define PCM_DMA_BUF_SIZE 4907 // size of Direct Sound buffer +#endif + +#if PLATFORM_GBA +#define NUM_MUSIC_PLAYERS ((u16)gNumMusicPlayers) +#define NUM_MUSIC_PLAYERS_STATIC 4 // @HACK because of how gNumMusicPlayers was defined to match +#define MAX_LINES ((u32)gMaxLines) +#else +#define NUM_MUSIC_PLAYERS 4 +#define NUM_MUSIC_PLAYERS_STATIC NUM_MUSIC_PLAYERS +#define MAX_LINES 0 +#endif + +struct MP2KTrack; +struct MP2KPlayerState; + +typedef void (*MP2KEventNoteFunc)(u8, struct MP2KPlayerState *, struct MP2KTrack *); +typedef void (*MP2KEventFunc)(struct MP2KPlayerState *, struct MP2KTrack *); +typedef void (*CgbSoundFunc)(void); +typedef void (*CgbOscOffFunc)(u8); +typedef u32 (*MidiKeyToCgbFreqFunc)(u8, u8, u8); +typedef void (*ExtVolPitFunc)(void); +typedef void (*MPlayMainFunc)(struct MP2KPlayerState *); + +struct MixerSource { + u8 status; + u8 type; + u8 rightVol; + u8 leftVol; + + union { + struct { + u8 attack; + u8 decay; + u8 sustain; + u8 release; + u8 key; + u8 envelopeVol; + + u8 envelopeGoal; + u8 envelopeCtr; + + u8 echoVol; + u8 echoLen; + u8 padding1; + u8 padding2; + u8 gateTime; + u8 untransposedKey; + u8 velocity; + u8 priority; + u8 rhythmPan; + u8 padding3; + u8 padding4; + u8 padding5; + + u8 padding6; + u8 sustainGoal; + u8 nrx4; + u8 pan; + + u8 panMask; + u8 cgbStatus; + u8 length; + u8 sweep; + + u32 freq; + } cgb; + struct { + u8 attack; + u8 decay; + u8 sustain; + u8 release; + u8 key; + u8 envelopeVol; + + u8 envelopeVolR; + u8 envelopeVolL; + + u8 echoVol; + u8 echoLen; + u8 padding1; + u8 padding2; + u8 gateTime; + u8 untransposedKey; + u8 velocity; + u8 priority; + u8 rhythmPan; + u8 padding3; + u8 padding4; + u8 padding5; + + u32 ct; + float fw; + + u32 freq; + } sound; + } data; + + void *wav; // The next piece of data to be loading + void *current; // The working pointer from wav + + struct MP2KTrack *track; + struct MixerSource *prev; + struct MixerSource *next; + u32 padding7; // d4 + u32 blockCount; // bdpcm block count +}; + +struct SoundMixerState { + // This field is normally equal to ID_NUMBER but it is set to other + // values during sensitive operations for locking purposes. + u32 lockStatus; + + vu8 dmaCounter; + + // Direct Sound + u8 reverb; + u8 numChans; + u8 masterVol; + u8 freqOption; + + u8 extensionFlags; + u8 cgbCounter15; // periodically counts from 14 down to 0 (15 states) + u8 framesPerDmaCycle; // number of V-blanks per PCM DMA + u8 maxScanlines; + u8 gap[3]; + s32 samplesPerFrame; + s32 sampleRate; +#if PLATFORM_GBA + s32 sampleRateReciprocal; +#else + float sampleRateReciprocal; +#endif + struct MixerSource *cgbChans; + MPlayMainFunc MPlayMainHead; + struct MP2KPlayerState *musicPlayerHead; + CgbSoundFunc CgbSound; + CgbOscOffFunc CgbOscOff; + MidiKeyToCgbFreqFunc MidiKeyToCgbFreq; + void **MPlayJumpTable; + MP2KEventNoteFunc plynote; + ExtVolPitFunc ExtVolPit; + void *reserved2; + void *reserved3; + void *reversed4; + void *reserved5; + struct MixerSource chans[MAX_DIRECTSOUND_CHANNELS]; +#if PLATFORM_GBA + s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2]; +#else + float pcmBuffer[PCM_DMA_BUF_SIZE * 2]; +#endif +}; + +struct MP2KVoiceGroup { + u8 type; + u8 drumKey; + u8 cgbLength; + u8 pan_sweep; // pan or sweep (compatible sound ch. 1) + union { + struct { + struct WaveData *wav; + u8 attack; + u8 decay; + u8 sustain; + u8 release; + } sound; + struct { + struct MP2KVoiceGroup *group; + u8 *keySplitTable; + } keySplit; + } data; +}; + +struct WaveData { + u16 type; + u16 status; + + u32 freq; + u32 loopStart; + u32 size; // number of samples + s8 data[1]; // samples +}; + +struct MP2KSongHeader { + u8 trackCount; + u8 blockCount; + u8 priority; + u8 reverb; + struct MP2KVoiceGroup *voicegroup; + u8 *part[1]; +}; + +struct MP2KTrack { + u8 status; + u8 wait; + u8 patternLevel; + u8 repeatCount; + u8 gateTime; // 0 if TIE + u8 key; + u8 velocity; + u8 runningStatus; + s8 keyShiftCalculated; // Calculated by TrkVolPitSet using fields below. Units: semitones + u8 pitchCalculated; // Calculated by TrkVolPitSet using fields below. Units: 256ths of a semitone + s8 keyShift; // Units: semitones + s8 keyShiftPublic; // Units: semitones + s8 tune; // Units: 64ths of a semitone + u8 pitchPublic; // Units: 256ths of a semitone + s8 bend; // Units: (bendRange / 64)ths of a semitone + u8 bendRange; + u8 volRightCalculated; + u8 volLeftCalculated; + u8 vol; + u8 volPublic; // Used both for fades and MPlayVolumeControl + s8 pan; + s8 panPublic; + s8 modCalculated; // Pitch units: 16ths of a semitone + u8 modDepth; + u8 modType; + u8 lfoSpeed; + u8 lfoSpeedCounter; + u8 lfoDelay; + u8 lfoDelayCounter; + u8 priority; + u8 echoVolume; + u8 echoLength; + + struct MixerSource *chan; + struct MP2KVoiceGroup voicegroup; + + u8 gap[10]; + u16 unk_3A; + u32 unk_3C; + u8 *cmdPtr; + u8 *patternStack[3]; +}; + +struct MP2KPlayerState { + struct MP2KSongHeader *songHeader; + u32 status; + u8 trackCount; + u8 priority; + u8 cmd; + bool8 checkSongPriority; + u32 clock; + u8 padding[8]; + u8 *memAccArea; + u16 tempoRawBPM; // 150 initially... this doesn't seem right but whatever + u16 tempoScale; // 0x100 initially + u16 tempoInterval; // 150 initially + u16 tempoCounter; + u16 fadeInterval; + u16 fadeCounter; + u16 fadeOV; + struct MP2KTrack *tracks; + struct MP2KVoiceGroup *voicegroup; + u32 lockStatus; + MPlayMainFunc nextPlayerFunc; + struct MP2KPlayerState *nextPlayer; +}; + +struct MusicPlayer { + struct MP2KPlayerState *info; + struct MP2KTrack *track; + u8 numTracks; + u16 unk_A; +}; + +struct Song { + struct MP2KSongHeader *header; + u16 ms; + u16 me; +}; + +typedef void (*XcmdFunc)(struct MP2KPlayerState *, struct MP2KTrack *); + +extern char SoundMainRAM[]; +extern u8 gMPlayMemAccArea[]; +extern void *gMPlayJumpTable[]; +extern struct MixerSource gCgbChans[]; + +extern const struct MusicPlayer gMPlayTable[NUM_MUSIC_PLAYERS_STATIC]; +extern const struct Song gSongTable[]; +extern const XcmdFunc gXcmdTable[]; + +extern const u8 gClockTable[]; +extern const u8 gScaleTable[]; +extern const u32 gFreqTable[]; +extern const u16 gPcmSamplesPerVBlankTable[]; +extern void *const gMPlayJumpTableTemplate[]; + +extern const u8 gCgbScaleTable[]; +extern const s16 gCgbFreqTable[]; +extern const u8 gNoiseTable[]; +extern const u8 gCgb3Vol[]; + +#if PLATFORM_GBA +extern char gNumMusicPlayers[]; +extern char gMaxLines[]; +#endif + +u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust); +u32 umul3232H32(u32 multiplier, u32 multiplicand); +void SoundMain(void); +void SoundMainBTM(void *ptr); +void TrackStop(struct MP2KPlayerState *player, struct MP2KTrack *track); +void MP2KPlayerMain(struct MP2KPlayerState *); + +void ClearChain(struct MixerSource *chan); +void MP2KClearChain(struct MixerSource *chan); + +void MPlayContinue(struct MP2KPlayerState *mplayInfo); +void MPlayStart(struct MP2KPlayerState *mplayInfo, struct MP2KSongHeader *songHeader); +void MPlayStop(struct MP2KPlayerState *mplayInfo); +void FadeOutBody(struct MP2KPlayerState *mplayInfo); +void TrkVolPitSet(struct MP2KPlayerState *mplayInfo, struct MP2KTrack *track); +void MPlayFadeOut(struct MP2KPlayerState *mplayInfo, u16 speed); +void Clear64byte(void *addr); +void SoundInit(struct SoundMixerState *soundInfo); +void MPlayExtender(struct MixerSource *cgbChans); +void m4aSoundMode(u32 mode); +void MPlayOpen(struct MP2KPlayerState *mplayInfo, struct MP2KTrack *tracks, u8 trackCount); +void CgbSound(void); +void CgbOscOff(u8); +void CgbModVol(struct MixerSource *chan); +u32 MidiKeyToCgbFreq(u8, u8, u8); +void MPlayJumpTableCopy(void **mplayJumpTable); +void SampleFreqSet(u32 freq); +void m4aSoundVSyncOn(void); +void m4aSoundVSyncOff(void); + +void m4aMPlayTempoControl(struct MP2KPlayerState *mplayInfo, u16 tempo); +void m4aMPlayVolumeControl(struct MP2KPlayerState *mplayInfo, u16 trackBits, u16 volume); +void m4aMPlayPitchControl(struct MP2KPlayerState *mplayInfo, u16 trackBits, s16 pitch); +void m4aMPlayPanpotControl(struct MP2KPlayerState *mplayInfo, u16 trackBits, s8 pan); +void ClearModM(struct MP2KTrack *track); +void m4aMPlayModDepthSet(struct MP2KPlayerState *mplayInfo, u16 trackBits, u8 modDepth); +void m4aMPlayLFOSpeedSet(struct MP2KPlayerState *mplayInfo, u16 trackBits, u8 lfoSpeed); + +// sound command handler functions +void MP2K_event_fine(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_goto(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_patt(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_pend(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_rept(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_memacc(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_prio(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_tempo(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_keysh(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_voice(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_vol(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_pan(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_bend(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_bendr(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_lfos(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_lfodl(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_mod(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_modt(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_tune(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_port(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xcmd(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_endtie(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_nxx(u8 clock, struct MP2KPlayerState *, struct MP2KTrack *); + +// extended sound command handler functions +void MP2K_event_xxx(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xwave(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xtype(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xatta(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xdeca(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xsust(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xrele(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xiecv(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xiecl(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xleng(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xswee(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xcmd_0C(struct MP2KPlayerState *, struct MP2KTrack *); +void MP2K_event_xcmd_0D(struct MP2KPlayerState *, struct MP2KTrack *); + +#endif // GUARD_GBA_M4A_INTERNAL_H diff --git a/sa1/include/malloc_ewram.h b/sa1/include/malloc_ewram.h new file mode 100644 index 0000000000..58de2d36bf --- /dev/null +++ b/sa1/include/malloc_ewram.h @@ -0,0 +1,18 @@ +#ifndef GUARD_MALLOC_EWRAM_H +#define GUARD_MALLOC_EWRAM_H + +#include "global.h" + +struct EwramNode { + /* 0x0 */ struct EwramNode *next; // Heap is implemented as a forward list. + /* 0x4 */ s32 state; // It records how much space is corresponding + // to this node. When you want to mark it as + // occupied/busy, negate it. + /* 0x8 */ u8 space[0]; // space for general purposes +}; + +void EwramInitHeap(void); +void *EwramMalloc(u32); +void EwramFree(void *); + +#endif // GUARD_MALLOC_EWRAM_H diff --git a/sa1/include/malloc_vram.h b/sa1/include/malloc_vram.h new file mode 100644 index 0000000000..7abb11b90a --- /dev/null +++ b/sa1/include/malloc_vram.h @@ -0,0 +1,22 @@ +#ifndef GUARD_MALLOC_VRAM_H +#define GUARD_MALLOC_VRAM_H + +#include "global.h" + +#define VRAM_HEAP_SEGMENT_SIZE 0x80 +#define VRAM_TILE_SLOTS_PER_SEGMENT (VRAM_HEAP_SEGMENT_SIZE / TILE_SIZE_4BPP) + +// TODO: Find out where these numbers come from +#if (ENGINE == ENGINE_1) +#define VRAM_TILE_SEGMENTS 156 +#define VRAM_HEAP_TILE_COUNT 112 +#elif (ENGINE == ENGINE_2) +#define VRAM_TILE_SEGMENTS 140 +#define VRAM_HEAP_TILE_COUNT 48 +#endif + +void *VramMalloc(u32); +void VramResetHeapState(void); +void VramFree(void *); + +#endif // GUARD_MALLOC_VRAM_H diff --git a/sa1/include/multi_boot.h b/sa1/include/multi_boot.h new file mode 100644 index 0000000000..5d1dd8934b --- /dev/null +++ b/sa1/include/multi_boot.h @@ -0,0 +1,135 @@ +#ifndef GUARD_MULTI_BOOT_H +#define GUARD_MULTI_BOOT_H + +#include "global.h" + +/* From MASTER_INFO to MASTER_START_DL are upper values. + * From MASTER_REQUEST_CRC to MASTER_VERIFY_CRC are lower values + * (Upper=0) + */ +#define MULTIBOOT_MASTER_INFO 0x62 +#define MULTIBOOT_CLIENT_INFO 0x72 +#define MULTIBOOT_MASTER_START_PROBE 0x61 +#define MULTIBOOT_MASTER_REQUEST_DLREADY 0x63 +#define MULTIBOOT_CLIENT_DLREADY 0x73 +#define MULTIBOOT_MASTER_START_DL 0x64 +#define MULTIBOOT_MASTER_REQUEST_CRC 0x65 +#define MULTIBOOT_CLIENT_CALC_CRC 0x74 +#define MULTIBOOT_CLIENT_CRCREADY 0x75 +#define MULTIBOOT_MASTER_VERIFY_CRC 0x66 + +/*------------------------------------------------------------------*/ +/* Initialize Multi-play Boot */ +/*------------------------------------------------------------------*/ + +extern void MultiBootInit(struct MultiBootParam *mp); + +//* Sets serial communication mode as multi-play mode. +//* Basically, SIO_INTR_FLAG of IE is cleared, however it is +// acceptable to use SIO interrupt. +// +//* does not set mp -> masterp. +// Make sure to set up before calling this initialization function. + +/*------------------------------------------------------------------*/ +/* Multi-play Boot Main */ +/*------------------------------------------------------------------*/ + +extern s32 MultiBootMain(struct MultiBootParam *mp); + +//* Basically, call it once per frame. +// However, if there is a wait long enough, it is acceptable to call +// it multiple times per frame. The safe length of wait time depends +// on the application. (It is necessary to make the wait longer than +// the time it takes to process the interrupts of long period of +// time, including V-Blank interrupts.) +// +//* Returns 0 in normal completion. +// +//* Returns 0 when transfer ends (successfully) and a value of +// MultiBootCheckComplete() other than 0. +// +//* Once it is in the transfer end status, it simply returns 0 +// immediately. +// In order to cancel this status, call MultiBootInit(). +// It is acceptable to call MultiBootStartProbe() or +// MultiBootStartMaster(), however, they are internally calling +// MultiBootInit(). + +/*------------------------------------------------------------------*/ +/* Starts Client Recognition */ +/*------------------------------------------------------------------*/ + +extern void MultiBootStartProbe(struct MultiBootParam *mp); + +// After calling this, the client's recognition processing is done +// with // MultiBootMain(). Call after verifying mp -> +// probe_count is 0. + +/*------------------------------------------------------------------*/ +/* Starts Transfer from Master Server */ +/*------------------------------------------------------------------*/ + +extern void MultiBootStartMaster(struct MultiBootParam *mp, const u8 *srcp, s32 length, u8 palette_color, s8 palette_speed); + +//* Among the units connected by multi-play communication cable, only +// those units with game pak inserted +// can become master server. +// +// srcp Pointer for the program that you want to boot +// (requires 4-byte alignment) +// For clients, it is downloaded immediately after +// the header. +// length Transfer byte count of program. +// MULTIBOOT_SEND_SIZE_MIN (0x100) bytes or more and +// MULTIBOOT_SEND_SIZE_MAX (0x40000) bytes or less. +// "palette_color" and "palette_speed" are palette flash parameters +// of client while loading. palette_color uses 0 to 6 to specify the +// basic palettes (7 types) With "palette_speed", it flashes in +// reversal order from -4 to -1 (-4 being the fastest) and it flashes +// in normal from +1 to +4 (+4 being the fastest) Palette is fixed +// (no flash) at 0. Do not specify any values other than listed +// above. + +/*------------------------------------------------------------------*/ +/* Check Transfer Completion */ +/*------------------------------------------------------------------*/ + +extern s32 MultiBootCheckComplete(struct MultiBootParam *mp); + +//* Check if transfer has completed. +// +//* Returns a value other than 0 if transfer has completed +//(successfully). +// Returns 0 if it is still recognizing, has not started transfer, or +// transfer has failed. +// +//* Calling any one of MultiBootInit(), MultiBootStartProbe() or +// MultiBootStartMaster() +// cancels the transfer completion status. + +/* magic value below aren't documented in SDK header */ + +/* probe_count */ + +#define MULTIBOOT_REQ_PREP_REC 0x0 +#define MULTIBOOT_REQ_START_REC 0x1 +#define MULTIBOOT_REQ_PROC_REC 0x2 + +#define MULTIBOOT_REC_COMPLETE 0xc4 + +#define MULTIBOOT_REQ_TX_CHECK 0xd0 +#define MULTIBOOT_REQ_TX_START 0xd1 + +#define MULTIBOOT_REQ_HANDSHAKE_START 0xe0 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_1 0xe1 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_2 0xe2 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_3 0xe3 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_4 0xe4 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_5 0xe5 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_6 0xe6 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_7 0xe7 +#define MULTIBOOT_REQ_HANDSHAKE_HEADER_CHECK_8 0xe8 +#define MULTIBOOT_HANDSHAKE_SUCCESS 0xe9 + +#endif // GUARD_MULTI_BOOT_H diff --git a/sa1/include/multi_sio.h b/sa1/include/multi_sio.h new file mode 100644 index 0000000000..7010eacbd0 --- /dev/null +++ b/sa1/include/multi_sio.h @@ -0,0 +1,279 @@ +#ifndef GUARD_MULTI_SIO_H +#define GUARD_MULTI_SIO_H + +#include "global.h" + +// Optimize the following settings based on the software +// specifications + +#define MULTI_SIO_BLOCK_SIZE 20 // Communication Data Block Size (Max. 24 Bytes) + +#define MULTI_SIO_PLAYERS_MAX 4 // Maximum Number of Players + +#define MULTI_SIO_SYNC_DATA 0xfefe // Synchronized Data (0x0000/0xfffa~0xffff prohibited) + +// Comment out if no space in CPU internal Work RAM +#define MULTI_SIO_DI_FUNC_FAST // SIO Interrupt Prohibit Function High + // Speed Flag (CPU Internal RAM + // Execution) + +// Update if maximum delay for communication interrupt is larger than +// following. +#define MULTI_SIO_INTR_DELAY_MAX 2000 // Communication Interrupt Allowed Delay Clocks + +#ifdef MULTI_SIO_DI_FUNC_FAST +#define MULTI_SIO_INTR_CLOCK_MAX 400 // Communication Interrupt Processing Maximum Clocks +#else +#define MULTI_SIO_INTR_CLOCK_MAX 1000 +#endif + +#define MULTI_SIO_1P_SEND_CLOCKS 3000 // Communication Time for 1 unit + +#if MULTI_SIO_PLAYERS_MAX == 4 +#define MULTI_SIO_START_BIT_WAIT 0 // Start Bit Wait Time +#else +#define MULTI_SIO_START_BIT_WAIT 512 +#endif + +// During development set NDEBUG to undefined and value below to 0, +// define with last check and confirm operation with changed to 600. +// (Even if increase setting the communication interval increases, but +// processing doesn't slow). +//#define NDEBUG // Can define with +// Makefile (MakefileDemo) +#ifdef NDEBUG +#define MULTI_SIO_INTR_MARGIN 600 // Communication Interrupt Error Guarantee Value +#else +#define MULTI_SIO_INTR_MARGIN 0 +#endif + +#define MULTI_SIO_BAUD_RATE 115200 // Baud Rate +#define MULTI_SIO_BAUD_RATE_NO SIO_115200_BPS // Baud Rate No. + +#define MULTI_SIO_TIMER_NO 3 // Timer No. +#define MULTI_SIO_TIMER_INTR_FLAG (INTR_FLAG_TIMER0 << MULTI_SIO_TIMER_NO) + +#define REG_MULTI_SIO_TIMER (*(vu32 *)(REG_ADDR_TMCNT + (MULTI_SIO_TIMER_NO * 4))) +#define REG_MULTI_SIO_TIMER_L (*(vu16 *)(REG_ADDR_TMCNT_L + (MULTI_SIO_TIMER_NO * 4))) +#define REG_MULTI_SIO_TIMER_H (*(vu16 *)(REG_ADDR_TMCNT_H + (MULTI_SIO_TIMER_NO * 4))) +// Timer Register + +// Timer count number is calculated from communication data block +// size. +#define MULTI_SIO_TIMER_COUNT_TMP (SYSTEM_CLOCK / 60 / ((2 + 4 + MULTI_SIO_BLOCK_SIZE + 6) / (16 / 8))) +// Timer Count Temporary Value +#define MULTI_SIO_TIMER_COUNT_MIN \ + (MULTI_SIO_1P_SEND_CLOCKS * MULTI_SIO_PLAYERS_MAX + MULTI_SIO_START_BIT_WAIT + MULTI_SIO_INTR_MARGIN + MULTI_SIO_INTR_DELAY_MAX \ + + MULTI_SIO_INTR_CLOCK_MAX) +// Timer Count Minimum Value +#define MULTI_SIO_TIMER_COUNT_MAX 0x10000 // Timer Count Maximum Value +#define MULTI_SIO_TIMER_COUNT (MULTI_SIO_TIMER_COUNT_MAX - MULTI_SIO_TIMER_COUNT_TMP) +// Timer Count +// Timer Count Setting Error +#if MULTI_SIO_TIMER_COUNT_TMP < MULTI_SIO_TIMER_COUNT_MIN +#error MULTI_SIO_TIMER_COUNT is too short, +#error because MULTI_SIO_BLOCK_SIZE or MULTI_SIO_INTR_DELAY_MAX is too large. +#elif MULTI_SIO_TIMER_COUNT_TMP > MULTI_SIO_TIMER_COUNT_MAX +#error MULTI_SIO_TIMER_COUNT is too long. +#endif + +// Multi-play Communication Packet Structure +struct MultiSioPacket { + u8 frameCounter; // Frame Counter + u8 recvErrorFlags : 4; // Receive Error Flag + u8 loadRequest : 1; // Load Request + u8 downloadSuccessFlag : 1; // Download Success Flag + u8 loadSuccessFlag : 1; // Load Success + u8 reserved_0 : 1; // Reserved + u16 checkSum; // Checksum + u16 data[MULTI_SIO_BLOCK_SIZE / 2]; // Communication Data + u16 overrunCatch[2]; // Overrun Protect Area +}; + +// Multi-play Communication Work Area Structure +struct MultiSioArea { + u8 type; // Connection (Master/Slave) + u8 state; // Communication Function State + u8 connectedFlags; // Connection History Flag + u8 recvSuccessFlags; // Receive Success Flag + + u8 syncRecvFlag[4]; // Receive Confirmation Flag + + u8 downloadSuccessFlags : 4; // Download Success Flag + u8 loadEnable : 1; // Enable Load + u8 loadRequest : 1; // Load Request + u8 loadSuccessFlag : 1; // Load Success + u8 startFlag : 1; // Communication Start Flag + + u8 hardError; // Hard error + u8 recvFlagsAvailableCounter; // Receiving success flag validation + // counter + + u8 sendFrameCounter; // Send Frame Counter + u8 recvFrameCounter[4][2]; // Receive Frame Counter + + s32 sendBufCounter; // Send Buffer Counter + s32 recvBufCounter[4]; // Receive Buffer Counter + + u16 *nextSendBufp; // Send Buffer Pointer + u16 *currentSendBufp; + u16 *currentRecvBufp[4]; // Receive Buffer Pointer + u16 *lastRecvBufp[4]; + u16 *recvCheckBufp[4]; + + struct MultiSioPacket sendBuf[2]; // Send Buffer (Double Buffer) + struct MultiSioPacket recvBuf[MULTI_SIO_PLAYERS_MAX][3]; + // Receive Buffer (Triple Buffer) +}; + +extern u32 gMultiSioRecvFuncBuf[0x40 / 4]; // Receive Data/Check Buffer Change + // Routine RAM Execution Buffer +extern u32 gMultiSioIntrFuncBuf[0x120 / 4]; // Interrupt Routine RAM Execution Buffer + +extern struct MultiSioArea gMultiSioArea; // Multi-play Communication Work Area + +/*------------------------------------------------------------------*/ +/* Multi-play Communication Initialization */ +/*------------------------------------------------------------------*/ + +extern void MultiSioInit(u32 connectedFlags); + +//* Set serial communication mode to multi-play mode. +//* Initialize register and buffer. +//* Arguments: +// u32 connectedFlags Set appropriate flag if a unit recognized +// as connected + +/*------------------------------------------------------------------*/ +/* Start Multi-play Communication */ +/*------------------------------------------------------------------*/ + +void MultiSioStart(void); + +//* If following master recognition set flag to start send. +//* If slave or prior to master recognition do nothing. + +/*------------------------------------------------------------------*/ +/* Stop Multi-play Communication */ +/*------------------------------------------------------------------*/ + +void MultiSioStop(void); + +//* Stop Communication + +/*------------------------------------------------------------------*/ +/* Multi-play Communication Main */ +/*------------------------------------------------------------------*/ + +extern u32 MultiSioMain(void *sendp, void *recvp, u32 loadRequest); + +//* First determine if master or slave. If master recognized, +// initialize +// timer. +//* Call MultiSioSendDataSet() and set send data. +//* Call MultiSioRecvDataCheck() and check if normal receive done, +// and copy receive data to Recvp. +// +//* Set so called with as close a timing as possible within 1 frame. +//* Safer not to send data that matches flag data (SIO_SYNC_DATA) +// prior +// to connection determination. +// +//* Arguments: +// void *sendp User Send Buffer Pointer +// void *recvp User Receive Buffer Pointer +// u32 loadRequest Load Request + +//* Return Value: + +#define MULTI_SIO_RECV_ID_MASK 0x000f // Receive success flag +#define MULTI_SIO_CONNECTED_ID_MASK 0x0f00 // Connection history flag + +#define MULTI_SIO_RECV_ID_SHIFT 0 +#define MULTI_SIO_CONNECTED_ID_SHIFT 8 + +#define MULTI_SIO_RECV_ID0 0x0001 // Receive success flag Master +#define MULTI_SIO_RECV_ID1 0x0002 // Slave 1 +#define MULTI_SIO_RECV_ID2 0x0004 // Slave 2 +#define MULTI_SIO_RECV_ID3 0x0008 // Slave 3 +#define MULTI_SIO_LD_ENABLE 0x0010 // Enable load +#define MULTI_SIO_LD_REQUEST 0x0020 // Load request +#define MULTI_SIO_LD_SUCCESS 0x0040 // Load success +#define MULTI_SIO_TYPE 0x0080 // Connection (Master/Slave) +#define MULTI_SIO_PARENT 0x0080 // Connect Master +#define MULTI_SIO_CHILD 0x0000 // Connect Slave +#define MULTI_SIO_CONNECTED_ID0 0x0100 // Connection history flag Master +#define MULTI_SIO_CONNECTED_ID1 0x0200 // Slave 1 +#define MULTI_SIO_CONNECTED_ID2 0x0400 // Slave 2 +#define MULTI_SIO_CONNECTED_ID3 0x0800 // Slave 3 +#define MULTI_SIO_HARD_ERROR 0x1000 // Hard error +#define MULTI_SIO_ID_OVER_ERROR 0x2000 // ID over error +#define MULTI_SIO_RECV_FLAGS_AVAILABLE 0x8000 // Validate receive success flag + +#define MULTI_SIO_RECV_ID(x) (0x0001 << (x)) +#define MULTI_SIO_CONNECTED_ID(x) (0x0100 << (x)) + +#define MULTI_SIO_ALL_CONNECTED \ + (MULTI_SIO_CONNECTED_ID(0) | MULTI_SIO_CONNECTED_ID(1) | MULTI_SIO_CONNECTED_ID(2) | MULTI_SIO_CONNECTED_ID(3)) + +// Return Value Structure +struct MultiSioReturn { + u32 recvSuccessFlags : 4; // Receive success flag + u32 loadEnable : 1; // Enable load + u32 loadRequest : 1; // Load request + u32 loadSuccessFlag : 1; // Load success + u32 type : 1; // Connection (master/slave) + u32 connectedFlags : 4; // Connection history flag + u32 hardError : 1; // Hard error + u32 idOverError : 1; // ID over error + u32 reserved : 1; // Reservation + u32 recvFlagsAvailable : 1; // Validate receive success flag +}; + +/*------------------------------------------------------------------*/ +/* Multi-play Communication Interrupt */ +/*------------------------------------------------------------------*/ + +extern void MultiSioIntr(void); + +//* During communication interrupt, store receive data from each unit +// in each receive buffer and set the send buffer data to the +// register. +//* If master, reset timer and restart send. +// +//* Program so slave is called with communication interrupt and master +// is called with timer interrupt. +//* Adjust setting so 1 packet (Except for OverRunCatch[]) can be +// transfered with 1 frame. + +/*------------------------------------------------------------------*/ +/* Set Send Data */ +/*------------------------------------------------------------------*/ + +extern void MultiSioSendDataSet(void *sendp, u32 loadReq); + +//* Set the user send buffer data to send buffer. +// +//* Called from MultiSioMain(). +//* Not necessary to call directly. +// +//* Arguments: +// void *sendp User Send Buffer Pointer +// u32 loadReq Load Request + +/*------------------------------------------------------------------*/ +/* Check Receive Data */ +/*------------------------------------------------------------------*/ + +extern u32 MultiSioRecvDataCheck(void *recvp); + +//* Check if receive done normally. If normal, copy the receive data +// to the user receive buffer. +// +//* Called from MultiSioMain(). +//* Do not need to call directly. +// +//* Arguments: +// void *recvp User Receive Buffer Pointer + +#endif // GUARD_MULTI_SIO_H diff --git a/sa1/include/platform/ext/gbagfx/LICENSE b/sa1/include/platform/ext/gbagfx/LICENSE new file mode 100644 index 0000000000..b66bf81c0f --- /dev/null +++ b/sa1/include/platform/ext/gbagfx/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 YamaArashi + +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. diff --git a/sa1/include/platform/ext/gbagfx/global.h b/sa1/include/platform/ext/gbagfx/global.h new file mode 100644 index 0000000000..f49fdcceb3 --- /dev/null +++ b/sa1/include/platform/ext/gbagfx/global.h @@ -0,0 +1,33 @@ +// Copyright (c) 2015 YamaArashi + +#ifndef GLOBAL_H +#define GLOBAL_H + +#include +#include + +#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof((arr)[0])) + +#ifdef _MSC_VER + +#define FATAL_ERROR(format, ...) \ +do { \ + fprintf(stderr, format, __VA_ARGS__); \ + exit(1); \ +} while (0) + +#define UNUSED + +#else + +#define FATAL_ERROR(format, ...) \ +do { \ + fprintf(stderr, format, ##__VA_ARGS__); \ + exit(1); \ +} while (0) + +#define UNUSED __attribute__((__unused__)) + +#endif // _MSC_VER + +#endif // GLOBAL_H diff --git a/sa1/include/platform/ext/gbagfx/lz.h b/sa1/include/platform/ext/gbagfx/lz.h new file mode 100644 index 0000000000..a1d8a5e6ba --- /dev/null +++ b/sa1/include/platform/ext/gbagfx/lz.h @@ -0,0 +1,11 @@ +// Copyright (c) 2015 YamaArashi + +#ifndef LZ_H +#define LZ_H + +unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize); +unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance); + +void LZDecompressUnsafe(unsigned char *src, unsigned char *dest, int *uncompressedSize); + +#endif // LZ_H diff --git a/sa1/include/platform/ext/gbagfx/rl.h b/sa1/include/platform/ext/gbagfx/rl.h new file mode 100644 index 0000000000..8049c6357f --- /dev/null +++ b/sa1/include/platform/ext/gbagfx/rl.h @@ -0,0 +1,11 @@ +// Copyright (c) 2016 YamaArashi + +#ifndef RL_H +#define RL_H + +unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize); +unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize); + +void RLDecompressUnsafe(unsigned char *src, unsigned char *dest, int *uncompressedSize); + +#endif // RL_H diff --git a/sa1/include/platform/platform.h b/sa1/include/platform/platform.h new file mode 100644 index 0000000000..0a44b8f1ff --- /dev/null +++ b/sa1/include/platform/platform.h @@ -0,0 +1,26 @@ +#ifndef GUARD_SA2_PLATFORM_H +#define GUARD_SA2_PLATFORM_H + +#include "gba/types.h" + +/* NOTE: + * "Unsafe" versions included for compatibility. + * This is just here so if someone accidentally calls + * LZUnCompWram, LZUnCompVram, RLUnCompWram orRLUnCompVram, it doesn't fail. + * + * Please do NOT call them directly if you know the size of the compressed data! + * Use Platform_LZDecompress and Platform_RLDecompress instead, and also + * make sure to call Platform_LZFree, Platform_RLFree once the data is not needed + * anymore. + */ +#define ENABLE_RL_LZ_LOGGING 1 +extern unsigned char *Platform_LZDecompress(unsigned char *src, int srcSize); +extern unsigned char *Platform_RLDecompress(unsigned char *src, int srcSize); +extern void Platform_LZFree(unsigned char *dest); +extern void Platform_RLFree(unsigned char *dest); +extern void Platform_LZDecompressUnsafe(unsigned char *src, unsigned char *dest); +extern void Platform_RLDecompressUnsafe(unsigned char *src, unsigned char *dest); + +extern void Platform_QueueAudio(const void *data, u32 numBytes); + +#endif // GUARD_SA2_PLATFORM_H diff --git a/sa1/include/platform/shared/audio/README.txt b/sa1/include/platform/shared/audio/README.txt new file mode 100644 index 0000000000..11d4506a3e --- /dev/null +++ b/sa1/include/platform/shared/audio/README.txt @@ -0,0 +1,4 @@ +The source code in this folder is from: +https://github.com/Kurausukun/pokeemerald/tree/pc_port + +Thanks to camthesaxman, Kurausukun, Pidgey and NT_x86 for allowing us to use the code! diff --git a/sa1/include/platform/shared/audio/cgb_audio.h b/sa1/include/platform/shared/audio/cgb_audio.h new file mode 100644 index 0000000000..65dd77a91e --- /dev/null +++ b/sa1/include/platform/shared/audio/cgb_audio.h @@ -0,0 +1,36 @@ +#ifndef CGB_AUDIO_H +#define CGB_AUDIO_H + +#include "lib/m4a/m4a_internal.h" + +struct AudioCGB { + u16 ch1Freq; + u8 ch1SweepCounter; + u8 ch1SweepCounterI; + bool8 ch1SweepDir; + u8 ch1SweepShift; + u8 Vol[4]; + u8 VolI[4]; + u8 Len[4]; + u8 LenI[4]; + bool8 LenOn[4]; + u8 EnvCounter[4]; + u8 EnvCounterI[4]; + bool8 EnvDir[4]; + bool8 DAC[4]; + float WAVRAM[32]; + u16 ch4LFSR[2]; + float outBuffer[PCM_DMA_BUF_SIZE * 2]; +}; + +void cgb_audio_init(u32 rate); +void cgb_set_sweep(u8 sweep); +void cgb_set_wavram(); +void cgb_toggle_length(u8 channel, bool8 state); +void cgb_set_length(u8 channel, u8 length); +void cgb_set_envelope(u8 channel, u8 envelope); +void cgb_trigger_note(u8 channel); +void cgb_audio_generate(u16 samplesPerFrame); +float *cgb_get_buffer(); + +#endif diff --git a/sa1/include/platform/shared/audio/cgb_tables.h b/sa1/include/platform/shared/audio/cgb_tables.h new file mode 100644 index 0000000000..0966471aea --- /dev/null +++ b/sa1/include/platform/shared/audio/cgb_tables.h @@ -0,0 +1,2100 @@ +#ifndef CGB_TABLES_H +#define CGB_TABLES_H + +const int16_t PU0[32] + = { 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + +const int16_t PU1[32] + = { 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + +const int16_t PU2[32] = { 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1 }; + +const int16_t PU3[32] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1 }; + +int16_t WAV[32] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1 }; + +const float freqTable[2048] = { 32, + 32.0156326331216, + 32.0312805474096, + 32.0469437652812, + 32.0626223091976, + 32.0783162016642, + 32.0940254652302, + 32.109750122489, + 32.1254901960784, + 32.1412457086807, + 32.1570166830226, + 32.1728031418753, + 32.188605108055, + 32.2044226044226, + 32.220255653884, + 32.2361042793901, + 32.251968503937, + 32.2678483505662, + 32.2837438423645, + 32.2996550024643, + 32.3155818540434, + 32.3315244203256, + 32.3474827245805, + 32.3634567901235, + 32.3794466403162, + 32.3954522985665, + 32.4114737883284, + 32.4275111331024, + 32.4435643564356, + 32.4596334819217, + 32.4757185332012, + 32.4918195339613, + 32.5079365079365, + 32.5240694789082, + 32.5402184707051, + 32.5563835072032, + 32.572564612326, + 32.5887618100448, + 32.6049751243781, + 32.6212045793927, + 32.6374501992032, + 32.6537120079721, + 32.6699900299103, + 32.6862842892768, + 32.7025948103792, + 32.7189216175736, + 32.7352647352647, + 32.751624187906, + 32.768, + 32.784392196098, + 32.8008008008008, + 32.8172258387581, + 32.8336673346693, + 32.8501253132832, + 32.8665997993982, + 32.8830908178625, + 32.8995983935743, + 32.9161225514817, + 32.9326633165829, + 32.9492207139266, + 32.9657947686117, + 32.9823855057876, + 32.9989929506546, + 33.0156171284635, + 33.0322580645161, + 33.0489157841654, + 33.0655903128153, + 33.0822816759213, + 33.0989898989899, + 33.1157150075796, + 33.1324570273003, + 33.1492159838139, + 33.165991902834, + 33.1827848101266, + 33.1995947315096, + 33.2164216928535, + 33.2332657200811, + 33.2501268391679, + 33.2670050761421, + 33.2839004570848, + 33.3008130081301, + 33.3177427554652, + 33.3346897253306, + 33.3516539440204, + 33.3686354378819, + 33.3856342333164, + 33.4026503567788, + 33.4196838347782, + 33.4367346938776, + 33.4538029606942, + 33.4708886618999, + 33.4879918242207, + 33.5051124744376, + 33.5222506393862, + 33.539406345957, + 33.5565796210957, + 33.5737704918033, + 33.5909789851358, + 33.6082051282051, + 33.6254489481786, + 33.6427104722793, + 33.6599897277863, + 33.6772867420349, + 33.6946015424164, + 33.7119341563786, + 33.7292846114256, + 33.7466529351184, + 33.7640391550747, + 33.7814432989691, + 33.7988653945333, + 33.8163054695562, + 33.8337635518844, + 33.8512396694215, + 33.8687338501292, + 33.8862461220269, + 33.9037765131919, + 33.9213250517598, + 33.9388917659244, + 33.9564766839378, + 33.9740798341109, + 33.9917012448133, + 34.0093409444733, + 34.0269989615784, + 34.0446753246753, + 34.0623700623701, + 34.0800832033281, + 34.0978147762747, + 34.1155648099948, + 34.1333333333333, + 34.1511203751954, + 34.1689259645464, + 34.1867501304121, + 34.2045929018789, + 34.222454308094, + 34.2403343782654, + 34.2582331416623, + 34.2761506276151, + 34.2940868655154, + 34.3120418848168, + 34.330015715034, + 34.3480083857442, + 34.3660199265863, + 34.3840503672613, + 34.4020997375328, + 34.4201680672269, + 34.4382553862323, + 34.4563617245005, + 34.4744871120463, + 34.4926315789474, + 34.5107951553449, + 34.5289778714436, + 34.5471797575119, + 34.5654008438819, + 34.5836411609499, + 34.6019007391763, + 34.6201796090861, + 34.6384778012685, + 34.6567953463776, + 34.6751322751323, + 34.6934886183166, + 34.7118644067797, + 34.7302596714361, + 34.7486744432662, + 34.7671087533156, + 34.7855626326964, + 34.8040361125863, + 34.8225292242295, + 34.8410419989367, + 34.8595744680851, + 34.8781266631187, + 34.8966986155485, + 34.9152903569526, + 34.9339019189765, + 34.9525333333333, + 34.9711846318036, + 34.989855846236, + 35.008547008547, + 35.0272581507215, + 35.0459893048128, + 35.0647405029427, + 35.0835117773019, + 35.10230316015, + 35.1211146838156, + 35.1399463806971, + 35.1587982832618, + 35.1776704240472, + 35.1965628356606, + 35.2154755507792, + 35.2344086021505, + 35.2533620225928, + 35.2723358449946, + 35.2913301023156, + 35.3103448275862, + 35.3293800539084, + 35.3484358144552, + 35.3675121424717, + 35.3866090712743, + 35.4057266342518, + 35.4248648648649, + 35.4440237966468, + 35.4632034632035, + 35.4824038982133, + 35.501625135428, + 35.5208672086721, + 35.5401301518438, + 35.5594139989148, + 35.5787187839305, + 35.5980445410103, + 35.6173913043478, + 35.636759108211, + 35.6561479869423, + 35.6755579749592, + 35.6949891067538, + 35.7144414168937, + 35.7339149400218, + 35.7534097108565, + 35.7729257641921, + 35.792463134899, + 35.8120218579235, + 35.8316019682887, + 35.8512035010941, + 35.8708264915161, + 35.8904709748083, + 35.9101369863014, + 35.9298245614035, + 35.9495337356007, + 35.9692645444566, + 35.9890170236134, + 36.0087912087912, + 36.0285871357889, + 36.048404840484, + 36.0682443588332, + 36.0881057268722, + 36.1079889807162, + 36.1278941565601, + 36.1478212906784, + 36.167770419426, + 36.187741579238, + 36.2077348066298, + 36.2277501381979, + 36.2477876106195, + 36.267847260653, + 36.2879291251384, + 36.3080332409972, + 36.3281596452328, + 36.3483083749307, + 36.3684794672586, + 36.388672959467, + 36.4088888888889, + 36.4291272929405, + 36.4493882091212, + 36.4696716750139, + 36.4899777282851, + 36.5103064066852, + 36.5306577480491, + 36.5510317902956, + 36.5714285714286, + 36.5918481295366, + 36.6122905027933, + 36.6327557294578, + 36.6532438478747, + 36.6737548964745, + 36.6942889137738, + 36.7148459383753, + 36.7354260089686, + 36.7560291643298, + 36.7766554433221, + 36.7973048848961, + 36.8179775280899, + 36.8386734120292, + 36.859392575928, + 36.8801350590884, + 36.9009009009009, + 36.9216901408451, + 36.9425028184893, + 36.9633389734913, + 36.9841986455982, + 37.0050818746471, + 37.025988700565, + 37.0469191633691, + 37.0678733031674, + 37.0888511601585, + 37.1098527746319, + 37.1308781869688, + 37.1519274376417, + 37.173000567215, + 37.1940976163451, + 37.2152186257808, + 37.2363636363636, + 37.2575326890279, + 37.2787258248009, + 37.2999430848036, + 37.3211845102506, + 37.3424501424501, + 37.363740022805, + 37.3850541928123, + 37.4063926940639, + 37.4277555682467, + 37.4491428571429, + 37.4705546026301, + 37.4919908466819, + 37.5134516313681, + 37.5349369988545, + 37.556446991404, + 37.5779816513761, + 37.5995410212278, + 37.6211251435132, + 37.6427340608845, + 37.664367816092, + 37.6860264519839, + 37.7077100115075, + 37.7294185377087, + 37.7511520737327, + 37.7729106628242, + 37.7946943483276, + 37.8165031736872, + 37.838337182448, + 37.8601964182553, + 37.8820809248555, + 37.903990746096, + 37.9259259259259, + 37.9478865083961, + 37.9698725376593, + 37.991884057971, + 38.0139211136891, + 38.0359837492745, + 38.0580720092915, + 38.0801859384079, + 38.1023255813953, + 38.1244909831297, + 38.1466821885914, + 38.1688992428655, + 38.1911421911422, + 38.2134110787172, + 38.2357059509918, + 38.2580268534734, + 38.2803738317757, + 38.3027469316189, + 38.3251461988304, + 38.3475716793446, + 38.3700234192037, + 38.3925014645577, + 38.4150058616647, + 38.4375366568915, + 38.4600938967136, + 38.4826776277158, + 38.5052878965922, + 38.527924750147, + 38.5505882352941, + 38.5732783990583, + 38.5959952885748, + 38.6187389510902, + 38.6415094339623, + 38.6643067846608, + 38.6871310507674, + 38.7099822799764, + 38.7328605200946, + 38.755765819042, + 38.7786982248521, + 38.801657785672, + 38.824644549763, + 38.8476585655009, + 38.870699881376, + 38.8937685459941, + 38.916864608076, + 38.9399881164587, + 38.9631391200951, + 38.9863176680547, + 39.0095238095238, + 39.0327575938058, + 39.0560190703218, + 39.0793082886106, + 39.1026252983294, + 39.1259701492537, + 39.1493428912784, + 39.1727435744172, + 39.1961722488038, + 39.2196289646918, + 39.2431137724551, + 39.2666267225884, + 39.2901678657074, + 39.3137372525495, + 39.3373349339736, + 39.360960960961, + 39.3846153846154, + 39.4082982561636, + 39.4320096269555, + 39.4557495484648, + 39.4795180722892, + 39.5033152501507, + 39.5271411338963, + 39.5509957754979, + 39.5748792270531, + 39.5987915407855, + 39.6227327690447, + 39.6467029643073, + 39.6707021791768, + 39.694730466384, + 39.7187878787879, + 39.7428744693754, + 39.7669902912621, + 39.7911353976928, + 39.8153098420413, + 39.8395136778115, + 39.8637469586375, + 39.8880097382836, + 39.9123020706455, + 39.9366240097502, + 39.9609756097561, + 39.9853569249542, + 40.009768009768, + 40.0342089187538, + 40.0586797066015, + 40.0831804281346, + 40.1077111383109, + 40.1322718922229, + 40.156862745098, + 40.1814837522992, + 40.2061349693252, + 40.2308164518109, + 40.2555282555283, + 40.280270436386, + 40.3050430504305, + 40.3298461538462, + 40.3546798029557, + 40.3795440542206, + 40.4044389642417, + 40.4293645897594, + 40.4543209876543, + 40.4793082149475, + 40.504326328801, + 40.5293753865182, + 40.5544554455446, + 40.5795665634675, + 40.6047087980174, + 40.6298822070676, + 40.6550868486352, + 40.6803227808814, + 40.7055900621118, + 40.7308887507769, + 40.7562189054726, + 40.7815805849409, + 40.8069738480697, + 40.8323987538941, + 40.857855361596, + 40.8833437305053, + 40.9088639200999, + 40.9344159900062, + 40.96, + 40.9856160100063, + 41.0112640801001, + 41.0369442705072, + 41.062656641604, + 41.0884012539185, + 41.1141781681305, + 41.1399874450722, + 41.1658291457287, + 41.1917033312382, + 41.2176100628931, + 41.2435494021397, + 41.2695214105793, + 41.2955261499685, + 41.3215636822194, + 41.3476340694006, + 41.3737373737374, + 41.3998736576121, + 41.4260429835651, + 41.4522454142948, + 41.4784810126582, + 41.504749841672, + 41.531051964512, + 41.5573874445149, + 41.5837563451777, + 41.6101587301587, + 41.6365946632783, + 41.6630642085188, + 41.6895674300254, + 41.7161043921069, + 41.7426751592357, + 41.7692797960484, + 41.7959183673469, + 41.8225909380983, + 41.8492975734355, + 41.8760383386582, + 41.9028132992327, + 41.9296225207934, + 41.9564660691421, + 41.9833440102498, + 42.0102564102564, + 42.0372033354715, + 42.0641848523748, + 42.0912010276172, + 42.1182519280206, + 42.1453376205788, + 42.1724581724582, + 42.1996136509981, + 42.2268041237113, + 42.254029658285, + 42.2812903225807, + 42.3085861846352, + 42.3359173126615, + 42.3632837750485, + 42.3906856403622, + 42.4181229773463, + 42.4455958549223, + 42.4731043421905, + 42.5006485084306, + 42.5282284231019, + 42.5558441558442, + 42.5834957764782, + 42.6111833550065, + 42.6389069616135, + 42.6666666666667, + 42.6944625407166, + 42.722294654498, + 42.7501630789302, + 42.7780678851175, + 42.8060091443501, + 42.8339869281046, + 42.8620013080445, + 42.890052356021, + 42.9181401440733, + 42.9462647444299, + 42.9744262295082, + 43.002624671916, + 43.0308601444517, + 43.0591327201051, + 43.0874424720579, + 43.1157894736842, + 43.1441737985517, + 43.1725955204216, + 43.2010547132498, + 43.2295514511873, + 43.2580858085809, + 43.2866578599736, + 43.3152676801057, + 43.3439153439153, + 43.3726009265387, + 43.4013245033113, + 43.4300861497681, + 43.4588859416446, + 43.4877239548772, + 43.5166002656043, + 43.5455149501661, + 43.5744680851064, + 43.6034597471723, + 43.6324900133156, + 43.6615589606929, + 43.6906666666667, + 43.7198132088059, + 43.7489986648865, + 43.7782231128925, + 43.807486631016, + 43.8367892976589, + 43.8661311914324, + 43.8955123911587, + 43.9249329758713, + 43.9543930248156, + 43.9838926174497, + 44.0134318334453, + 44.0430107526882, + 44.0726294552791, + 44.1022880215343, + 44.1319865319865, + 44.1617250673855, + 44.1915037086986, + 44.221322537112, + 44.2511816340311, + 44.2810810810811, + 44.3110209601082, + 44.34100135318, + 44.3710223425863, + 44.4010840108401, + 44.431186440678, + 44.4613297150611, + 44.4915139171758, + 44.5217391304348, + 44.5520054384772, + 44.5823129251701, + 44.6126616746086, + 44.6430517711172, + 44.6734832992502, + 44.7039563437926, + 44.7344709897611, + 44.7650273224044, + 44.7956254272044, + 44.8262653898769, + 44.8569472963724, + 44.8876712328767, + 44.9184372858122, + 44.9492455418381, + 44.9800960878518, + 45.010989010989, + 45.0419243986254, + 45.0729023383769, + 45.1039229181005, + 45.1349862258953, + 45.1660923501034, + 45.1972413793103, + 45.2284334023465, + 45.2596685082873, + 45.2909467864547, + 45.3222683264177, + 45.3536332179931, + 45.3850415512465, + 45.4164934164934, + 45.4479889042996, + 45.4795281054823, + 45.5111111111111, + 45.5427380125087, + 45.5744089012517, + 45.6061238691719, + 45.6378830083566, + 45.6696864111498, + 45.7015341701534, + 45.7334263782275, + 45.7653631284916, + 45.7973445143256, + 45.8293706293706, + 45.8614415675297, + 45.8935574229692, + 45.9257182901191, + 45.9579242636746, + 45.9901754385965, + 46.0224719101124, + 46.0548137737175, + 46.0872011251758, + 46.1196340605208, + 46.1521126760563, + 46.184637068358, + 46.2172073342736, + 46.2498235709245, + 46.2824858757062, + 46.3151943462898, + 46.3479490806223, + 46.3807501769285, + 46.4135977337111, + 46.446491849752, + 46.4794326241135, + 46.5124201561391, + 46.5454545454545, + 46.5785358919687, + 46.6116642958748, + 46.6448398576513, + 46.6780626780627, + 46.7113328581611, + 46.7446504992867, + 46.7780157030692, + 46.8114285714286, + 46.8448892065761, + 46.8783977110157, + 46.9119541875447, + 46.945558739255, + 46.9792114695341, + 47.012912482066, + 47.0466618808327, + 47.0804597701149, + 47.1143062544932, + 47.1482014388489, + 47.1821454283657, + 47.2161383285303, + 47.2501802451334, + 47.2842712842713, + 47.3184115523466, + 47.3526011560694, + 47.3868402024584, + 47.4211287988423, + 47.4554670528602, + 47.4898550724638, + 47.5242929659173, + 47.5587808417997, + 47.5933188090051, + 47.6279069767442, + 47.6625454545455, + 47.6972343522562, + 47.7319737800437, + 47.7667638483965, + 47.8016046681255, + 47.836496350365, + 47.8714390065741, + 47.906432748538, + 47.9414776883687, + 47.9765739385066, + 48.0117216117216, + 48.0469208211144, + 48.0821716801174, + 48.1174743024963, + 48.1528288023512, + 48.1882352941176, + 48.2236938925681, + 48.259204712813, + 48.2947678703021, + 48.330383480826, + 48.3660516605166, + 48.4017725258493, + 48.4375461936438, + 48.4733727810651, + 48.5092524056255, + 48.5451851851852, + 48.581171237954, + 48.6172106824926, + 48.6533036377134, + 48.6894502228826, + 48.7256505576208, + 48.7619047619048, + 48.7982129560685, + 48.8345752608048, + 48.8709917971663, + 48.9074626865672, + 48.9439880507842, + 48.9805680119582, + 49.0172026925954, + 49.0538922155689, + 49.0906367041199, + 49.1274362818591, + 49.1642910727682, + 49.2012012012012, + 49.2381667918858, + 49.2751879699248, + 49.3122648607976, + 49.3493975903615, + 49.3865862848531, + 49.4238310708899, + 49.4611320754717, + 49.4984894259819, + 49.535903250189, + 49.5733736762481, + 49.6109008327025, + 49.6484848484849, + 49.6861258529189, + 49.7238239757208, + 49.7615793470008, + 49.7993920972644, + 49.8372623574145, + 49.8751902587519, + 49.9131759329779, + 49.9512195121951, + 49.9893211289092, + 50.0274809160305, + 50.0656990068755, + 50.1039755351682, + 50.1423106350421, + 50.1807044410413, + 50.2191570881226, + 50.2576687116564, + 50.296239447429, + 50.3348694316436, + 50.3735588009224, + 50.4123076923077, + 50.451116243264, + 50.4899845916795, + 50.5289128758674, + 50.5679012345679, + 50.6069498069498, + 50.6460587326121, + 50.6852281515855, + 50.7244582043344, + 50.7637490317583, + 50.8031007751938, + 50.8425135764158, + 50.8819875776397, + 50.9215229215229, + 50.9611197511664, + 51.0007782101167, + 51.0404984423676, + 51.0802805923617, + 51.1201248049922, + 51.160031225605, + 51.2, + 51.2400312744331, + 51.2801251956182, + 51.3202819107283, + 51.3605015673981, + 51.4007843137255, + 51.4411302982732, + 51.4815396700707, + 51.5220125786164, + 51.5625491738788, + 51.6031496062992, + 51.6438140267928, + 51.6845425867508, + 51.7253354380426, + 51.7661927330174, + 51.8071146245059, + 51.8481012658228, + 51.889152810768, + 51.9302694136292, + 51.9714512291832, + 52.0126984126984, + 52.0540111199365, + 52.0953895071542, + 52.1368337311058, + 52.1783439490446, + 52.2199203187251, + 52.2615629984051, + 52.3032721468476, + 52.3450479233227, + 52.3868904876099, + 52.4288, + 52.470776621297, + 52.5128205128205, + 52.5549318364074, + 52.5971107544141, + 52.6393574297189, + 52.6816720257235, + 52.7240547063556, + 52.7665056360709, + 52.809024979855, + 52.8516129032258, + 52.8942695722357, + 52.9369951534734, + 52.9797898140663, + 53.0226537216829, + 53.0655870445344, + 53.1085899513776, + 53.1516626115166, + 53.1948051948052, + 53.2380178716491, + 53.2813008130081, + 53.3246541903987, + 53.3680781758958, + 53.4115729421353, + 53.4551386623165, + 53.4987755102041, + 53.5424836601307, + 53.5862632869992, + 53.6301145662848, + 53.6740376740377, + 53.7180327868852, + 53.7621000820345, + 53.8062397372742, + 53.8504519309778, + 53.8947368421053, + 53.9390946502058, + 53.9835255354201, + 54.0280296784831, + 54.0726072607261, + 54.1172584640793, + 54.1619834710744, + 54.206782464847, + 54.2516556291391, + 54.2966031483016, + 54.3416252072969, + 54.3867219917012, + 54.4318936877076, + 54.477140482128, + 54.522462562396, + 54.5678601165695, + 54.6133333333333, + 54.6588824020017, + 54.7045075125209, + 54.750208855472, + 54.7959866220736, + 54.8418410041841, + 54.8877721943049, + 54.9337803855826, + 54.9798657718121, + 55.0260285474391, + 55.072268907563, + 55.1185870479394, + 55.1649831649832, + 55.2114574557709, + 55.2580101180438, + 55.304641350211, + 55.3513513513514, + 55.3981403212172, + 55.4450084602369, + 55.4919559695174, + 55.5389830508475, + 55.5860899067006, + 55.6332767402377, + 55.6805437553101, + 55.7278911564626, + 55.7753191489362, + 55.8228279386712, + 55.8704177323103, + 55.9180887372014, + 55.9658411614005, + 56.0136752136752, + 56.0615911035073, + 56.1095890410959, + 56.1576692373608, + 56.2058319039451, + 56.2540772532189, + 56.3024054982818, + 56.3508168529665, + 56.3993115318417, + 56.4478897502153, + 56.4965517241379, + 56.5452976704055, + 56.594127806563, + 56.6430423509075, + 56.6920415224914, + 56.7411255411255, + 56.790294627383, + 56.8395490026019, + 56.8888888888889, + 56.9383145091225, + 56.9878260869565, + 57.0374238468233, + 57.0871080139373, + 57.1368788142982, + 57.1867364746946, + 57.2366812227074, + 57.2867132867133, + 57.336832895888, + 57.3870402802102, + 57.4373356704645, + 57.4877192982456, + 57.5381913959614, + 57.5887521968366, + 57.6394019349165, + 57.6901408450704, + 57.7409691629956, + 57.7918871252205, + 57.8428949691086, + 57.8939929328622, + 57.9451812555261, + 57.9964601769912, + 58.0478299379982, + 58.0992907801418, + 58.150842945874, + 58.202486678508, + 58.2542222222222, + 58.3060498220641, + 58.3579697239537, + 58.4099821746881, + 58.4620874219447, + 58.5142857142857, + 58.5665773011618, + 58.6189624329159, + 58.6714413607878, + 58.7240143369176, + 58.7766816143498, + 58.8294434470377, + 58.8823000898473, + 58.9352517985612, + 58.988298829883, + 59.0414414414414, + 59.0946798917944, + 59.1480144404332, + 59.2014453477868, + 59.254972875226, + 59.3085972850679, + 59.3623188405797, + 59.4161378059837, + 59.470054446461, + 59.5240690281562, + 59.5781818181818, + 59.6323930846224, + 59.6867030965392, + 59.7411121239745, + 59.7956204379562, + 59.8502283105023, + 59.9049360146252, + 59.9597438243367, + 60.014652014652, + 60.0696608615949, + 60.1247706422018, + 60.1799816345271, + 60.2352941176471, + 60.2907083716651, + 60.3462246777164, + 60.4018433179724, + 60.4575645756458, + 60.5133887349954, + 60.5693160813309, + 60.6253469010176, + 60.6814814814815, + 60.7377201112141, + 60.7940630797774, + 60.8505106778087, + 60.907063197026, + 60.9637209302326, + 61.0204841713222, + 61.0773532152843, + 61.134328358209, + 61.1914098972923, + 61.2485981308411, + 61.3058933582788, + 61.3632958801498, + 61.4208059981256, + 61.4784240150094, + 61.5361502347418, + 61.593984962406, + 61.6519285042333, + 61.7099811676083, + 61.7681432610745, + 61.8264150943396, + 61.8847969782814, + 61.9432892249527, + 62.0018921475875, + 62.0606060606061, + 62.1194312796209, + 62.1783681214421, + 62.2374169040836, + 62.2965779467681, + 62.3558515699334, + 62.4152380952381, + 62.4747378455672, + 62.5343511450382, + 62.5940783190067, + 62.6539196940727, + 62.7138755980861, + 62.7739463601533, + 62.8341323106424, + 62.89443378119, + 62.954851104707, + 63.0153846153846, + 63.0760346487007, + 63.1368015414258, + 63.1976856316297, + 63.2586872586873, + 63.319806763285, + 63.3810444874275, + 63.4424007744434, + 63.5038759689923, + 63.5654704170708, + 63.6271844660194, + 63.6890184645287, + 63.7509727626459, + 63.8130477117819, + 63.8752436647174, + 63.9375609756098, + 64, + 64.0625610948192, + 64.1252446183953, + 64.1880509304603, + 64.2509803921569, + 64.3140333660451, + 64.37721021611, + 64.440511307768, + 64.503937007874, + 64.5674876847291, + 64.6311637080868, + 64.6949654491609, + 64.7588932806324, + 64.8229475766568, + 64.8871287128713, + 64.9514370664024, + 65.015873015873, + 65.0804369414101, + 65.1451292246521, + 65.2099502487562, + 65.2749003984064, + 65.3399800598205, + 65.4051896207585, + 65.4705294705295, + 65.536, + 65.6016016016016, + 65.6673346693387, + 65.7331995987964, + 65.7991967871486, + 65.8653266331658, + 65.9315895372234, + 65.9979859013092, + 66.0645161290323, + 66.1311806256307, + 66.1979797979798, + 66.2649140546006, + 66.331983805668, + 66.3991894630193, + 66.4665314401623, + 66.5340101522843, + 66.6016260162602, + 66.6693794506612, + 66.7372708757637, + 66.8053007135576, + 66.8734693877551, + 66.9417773237998, + 67.0102249488753, + 67.078812691914, + 67.1475409836066, + 67.2164102564103, + 67.2854209445585, + 67.3545734840699, + 67.4238683127572, + 67.4933058702369, + 67.5628865979382, + 67.6326109391125, + 67.702479338843, + 67.7724922440538, + 67.8426501035197, + 67.9129533678757, + 67.9834024896266, + 68.0539979231568, + 68.1247401247401, + 68.1956295525494, + 68.2666666666667, + 68.3378519290928, + 68.4091858037578, + 68.4806687565308, + 68.5523012552301, + 68.6240837696335, + 68.6960167714885, + 68.7681007345226, + 68.8403361344538, + 68.9127234490011, + 68.9852631578947, + 69.0579557428872, + 69.1308016877637, + 69.2038014783527, + 69.276955602537, + 69.3502645502646, + 69.4237288135593, + 69.4973488865324, + 69.5711252653928, + 69.6450584484591, + 69.7191489361702, + 69.7933972310969, + 69.8678038379531, + 69.9423692636073, + 70.017094017094, + 70.0919786096257, + 70.1670235546039, + 70.2422293676313, + 70.3175965665236, + 70.3931256713212, + 70.4688172043011, + 70.5446716899892, + 70.6206896551724, + 70.6968716289105, + 70.7732181425486, + 70.8497297297297, + 70.9264069264069, + 71.0032502708559, + 71.0802603036876, + 71.157437567861, + 71.2347826086957, + 71.3122959738847, + 71.3899782135076, + 71.4678298800436, + 71.5458515283843, + 71.624043715847, + 71.7024070021882, + 71.7809419496166, + 71.859649122807, + 71.9385290889133, + 72.0175824175824, + 72.0968096809681, + 72.1762114537445, + 72.2557883131202, + 72.3355408388521, + 72.4154696132597, + 72.4955752212389, + 72.5758582502769, + 72.6563192904656, + 72.7369589345172, + 72.8177777777778, + 72.8987764182425, + 72.9799554565702, + 73.0613154960981, + 73.1428571428571, + 73.2245810055866, + 73.3064876957494, + 73.3885778275476, + 73.4708520179372, + 73.5533108866442, + 73.6359550561798, + 73.718785151856, + 73.8018018018018, + 73.8850056369786, + 73.9683972911964, + 74.0519774011299, + 74.1357466063348, + 74.2197055492639, + 74.3038548752835, + 74.3881952326901, + 74.4727272727273, + 74.5574516496018, + 74.6423690205011, + 74.72748004561, + 74.8127853881279, + 74.8982857142857, + 74.9839816933639, + 75.0698739977091, + 75.1559633027523, + 75.2422502870264, + 75.3287356321839, + 75.415420023015, + 75.5023041474654, + 75.5893886966551, + 75.6766743648961, + 75.764161849711, + 75.8518518518518, + 75.9397450753187, + 76.0278422273782, + 76.116144018583, + 76.2046511627907, + 76.2933643771828, + 76.3822843822844, + 76.4714119019837, + 76.5607476635514, + 76.6502923976608, + 76.7400468384075, + 76.8300117233294, + 76.9201877934272, + 77.0105757931845, + 77.1011764705882, + 77.1919905771496, + 77.2830188679245, + 77.3742621015348, + 77.4657210401891, + 77.5573964497041, + 77.6492890995261, + 77.7413997627521, + 77.833729216152, + 77.9262782401902, + 78.0190476190476, + 78.1120381406436, + 78.2052505966587, + 78.2986857825568, + 78.3923444976077, + 78.4862275449102, + 78.5803357314149, + 78.6746698679472, + 78.7692307692308, + 78.864019253911, + 78.9590361445783, + 79.0542822677925, + 79.1497584541063, + 79.2454655380895, + 79.3414043583535, + 79.4375757575758, + 79.5339805825243, + 79.6306196840826, + 79.7274939172749, + 79.8246041412911, + 79.9219512195122, + 80.019536019536, + 80.1173594132029, + 80.2154222766218, + 80.3137254901961, + 80.4122699386503, + 80.5110565110565, + 80.610086100861, + 80.7093596059113, + 80.8088779284834, + 80.9086419753086, + 81.008652657602, + 81.1089108910891, + 81.2094175960347, + 81.3101736972705, + 81.4111801242236, + 81.5124378109453, + 81.6139476961395, + 81.715710723192, + 81.8177278401998, + 81.92, + 82.0225281602002, + 82.125313283208, + 82.228356336261, + 82.3316582914573, + 82.4352201257862, + 82.5390428211587, + 82.6431273644388, + 82.7474747474748, + 82.8520859671302, + 82.9569620253165, + 83.0621039290241, + 83.1675126903553, + 83.2731893265565, + 83.3791348600509, + 83.4853503184713, + 83.5918367346939, + 83.698595146871, + 83.8056265984655, + 83.9129321382842, + 84.0205128205128, + 84.1283697047497, + 84.2365038560411, + 84.3449163449163, + 84.4536082474227, + 84.5625806451613, + 84.671834625323, + 84.7813712807245, + 84.8911917098446, + 85.0012970168612, + 85.1116883116883, + 85.222366710013, + 85.3333333333333, + 85.4445893089961, + 85.556135770235, + 85.6679738562091, + 85.7801047120419, + 85.8925294888598, + 86.005249343832, + 86.1182654402102, + 86.2315789473684, + 86.3451910408432, + 86.4591029023747, + 86.5733157199472, + 86.6878306878307, + 86.8026490066225, + 86.9177718832891, + 87.0332005312085, + 87.1489361702128, + 87.2649800266312, + 87.3813333333333, + 87.497997329773, + 87.6149732620321, + 87.7322623828648, + 87.8498659517426, + 87.9677852348993, + 88.0860215053763, + 88.2045760430686, + 88.3234501347709, + 88.442645074224, + 88.5621621621622, + 88.68200270636, + 88.8021680216802, + 88.9226594301221, + 89.0434782608696, + 89.1646258503401, + 89.2861035422343, + 89.4079126875853, + 89.5300546448087, + 89.6525307797538, + 89.7753424657534, + 89.8984910836763, + 90.021978021978, + 90.1458046767538, + 90.2699724517906, + 90.3944827586207, + 90.5193370165746, + 90.6445366528354, + 90.7700831024931, + 90.8959778085992, + 91.0222222222222, + 91.1488178025035, + 91.2757660167131, + 91.4030683403068, + 91.5307262569833, + 91.6587412587413, + 91.7871148459384, + 91.9158485273492, + 92.0449438202247, + 92.1744022503516, + 92.3042253521127, + 92.4344146685472, + 92.5649717514124, + 92.6958981612447, + 92.8271954674221, + 92.958865248227, + 93.0909090909091, + 93.2233285917497, + 93.3561253561254, + 93.4893009985735, + 93.6228571428572, + 93.7567954220315, + 93.89111747851, + 94.025824964132, + 94.1609195402299, + 94.2964028776978, + 94.4322766570605, + 94.5685425685426, + 94.7052023121387, + 94.8422575976845, + 94.9797101449275, + 95.1175616835994, + 95.2558139534884, + 95.3944687045124, + 95.533527696793, + 95.6729927007299, + 95.812865497076, + 95.9531478770132, + 96.0938416422287, + 96.2349486049927, + 96.3764705882353, + 96.5184094256259, + 96.6607669616519, + 96.8035450516987, + 96.9467455621302, + 97.0903703703704, + 97.2344213649852, + 97.3789004457652, + 97.5238095238095, + 97.6691505216095, + 97.8149253731343, + 97.9611360239163, + 98.1077844311377, + 98.2548725637181, + 98.4024024024024, + 98.5503759398496, + 98.6987951807229, + 98.8476621417798, + 98.9969788519637, + 99.1467473524962, + 99.2969696969697, + 99.4476479514416, + 99.5987841945289, + 99.7503805175038, + 99.9024390243902, + 100.054961832061, + 100.207951070336, + 100.361408882083, + 100.515337423313, + 100.669738863287, + 100.824615384615, + 100.979969183359, + 101.135802469136, + 101.292117465224, + 101.448916408669, + 101.606201550388, + 101.76397515528, + 101.922239502333, + 102.080996884735, + 102.240249609984, + 102.4, + 102.560250391236, + 102.721003134796, + 102.882260596546, + 103.044025157233, + 103.206299212598, + 103.369085173502, + 103.532385466035, + 103.696202531646, + 103.860538827258, + 104.025396825397, + 104.190779014308, + 104.356687898089, + 104.52312599681, + 104.690095846645, + 104.8576, + 105.025641025641, + 105.194221508828, + 105.363344051447, + 105.533011272142, + 105.703225806452, + 105.873990306947, + 106.045307443366, + 106.217179902755, + 106.38961038961, + 106.562601626016, + 106.736156351792, + 106.910277324633, + 107.084967320261, + 107.26022913257, + 107.436065573771, + 107.612479474548, + 107.789473684211, + 107.96705107084, + 108.145214521452, + 108.323966942149, + 108.503311258278, + 108.683250414594, + 108.863787375415, + 109.044925124792, + 109.226666666667, + 109.409015025042, + 109.591973244147, + 109.77554438861, + 109.959731543624, + 110.144537815126, + 110.329966329966, + 110.516020236088, + 110.702702702703, + 110.890016920474, + 111.077966101695, + 111.266553480475, + 111.455782312925, + 111.645655877342, + 111.836177474403, + 112.02735042735, + 112.219178082192, + 112.41166380789, + 112.604810996564, + 112.798623063683, + 112.993103448276, + 113.188255613126, + 113.384083044983, + 113.580589254766, + 113.777777777778, + 113.975652173913, + 114.174216027875, + 114.373472949389, + 114.573426573427, + 114.77408056042, + 114.975438596491, + 115.177504393673, + 115.380281690141, + 115.583774250441, + 115.787985865724, + 115.992920353982, + 116.198581560284, + 116.404973357016, + 116.612099644128, + 116.819964349376, + 117.028571428571, + 117.237924865832, + 117.448028673835, + 117.658886894075, + 117.870503597122, + 118.082882882883, + 118.296028880866, + 118.509945750452, + 118.724637681159, + 118.940108892922, + 119.156363636364, + 119.373406193078, + 119.591240875912, + 119.80987202925, + 120.029304029304, + 120.249541284404, + 120.470588235294, + 120.692449355433, + 120.915129151292, + 121.138632162662, + 121.362962962963, + 121.588126159555, + 121.814126394052, + 122.040968342644, + 122.268656716418, + 122.497196261682, + 122.7265917603, + 122.956848030019, + 123.187969924812, + 123.419962335217, + 123.652830188679, + 123.886578449906, + 124.121212121212, + 124.356736242884, + 124.593155893536, + 124.830476190476, + 125.068702290076, + 125.307839388145, + 125.547892720307, + 125.78886756238, + 126.030769230769, + 126.273603082852, + 126.517374517375, + 126.762088974855, + 127.007751937985, + 127.254368932039, + 127.501945525292, + 127.750487329435, + 128, + 128.250489236791, + 128.501960784314, + 128.75442043222, + 129.007874015748, + 129.262327416174, + 129.517786561265, + 129.774257425743, + 130.031746031746, + 130.290258449304, + 130.549800796813, + 130.810379241517, + 131.072, + 131.334669338677, + 131.598393574297, + 131.863179074447, + 132.129032258065, + 132.39595959596, + 132.663967611336, + 132.933062880325, + 133.20325203252, + 133.474541751527, + 133.74693877551, + 134.020449897751, + 134.295081967213, + 134.570841889117, + 134.847736625514, + 135.125773195876, + 135.404958677686, + 135.685300207039, + 135.966804979253, + 136.24948024948, + 136.533333333333, + 136.818371607516, + 137.10460251046, + 137.392033542977, + 137.680672268908, + 137.970526315789, + 138.261603375527, + 138.553911205074, + 138.847457627119, + 139.142250530786, + 139.43829787234, + 139.735607675906, + 140.034188034188, + 140.334047109208, + 140.635193133047, + 140.937634408602, + 141.241379310345, + 141.546436285097, + 141.852813852814, + 142.160520607375, + 142.469565217391, + 142.779956427015, + 143.091703056769, + 143.404814004376, + 143.719298245614, + 144.035164835165, + 144.352422907489, + 144.671081677704, + 144.991150442478, + 145.312638580931, + 145.635555555556, + 145.95991091314, + 146.285714285714, + 146.612975391499, + 146.941704035874, + 147.27191011236, + 147.603603603604, + 147.936794582393, + 148.27149321267, + 148.607709750567, + 148.945454545455, + 149.284738041002, + 149.625570776256, + 149.967963386728, + 150.311926605505, + 150.657471264368, + 151.004608294931, + 151.353348729792, + 151.703703703704, + 152.055684454756, + 152.409302325581, + 152.764568764569, + 153.121495327103, + 153.480093676815, + 153.840375586854, + 154.202352941176, + 154.566037735849, + 154.931442080378, + 155.298578199052, + 155.667458432304, + 156.038095238095, + 156.410501193317, + 156.784688995215, + 157.16067146283, + 157.538461538462, + 157.918072289157, + 158.299516908213, + 158.682808716707, + 159.067961165049, + 159.45498783455, + 159.843902439024, + 160.234718826406, + 160.627450980392, + 161.022113022113, + 161.418719211823, + 161.817283950617, + 162.217821782178, + 162.620347394541, + 163.024875621891, + 163.431421446384, + 163.84, + 164.250626566416, + 164.663316582915, + 165.078085642317, + 165.49494949495, + 165.913924050633, + 166.335025380711, + 166.758269720102, + 167.183673469388, + 167.611253196931, + 168.041025641026, + 168.473007712082, + 168.907216494845, + 169.343669250646, + 169.782383419689, + 170.223376623377, + 170.666666666667, + 171.11227154047, + 171.560209424084, + 172.010498687664, + 172.463157894737, + 172.918205804749, + 173.375661375661, + 173.835543766578, + 174.297872340426, + 174.762666666667, + 175.229946524064, + 175.699731903485, + 176.172043010753, + 176.646900269542, + 177.124324324324, + 177.60433604336, + 178.086956521739, + 178.572207084469, + 179.060109289618, + 179.550684931507, + 180.043956043956, + 180.539944903581, + 181.038674033149, + 181.540166204986, + 182.044444444444, + 182.551532033426, + 183.061452513966, + 183.574229691877, + 184.089887640449, + 184.608450704225, + 185.129943502825, + 185.654390934844, + 186.181818181818, + 186.712250712251, + 187.245714285714, + 187.78223495702, + 188.32183908046, + 188.864553314121, + 189.410404624277, + 189.959420289855, + 190.511627906977, + 191.067055393586, + 191.625730994152, + 192.187683284457, + 192.752941176471, + 193.321533923304, + 193.89349112426, + 194.46884272997, + 195.047619047619, + 195.629850746269, + 196.215568862275, + 196.804804804805, + 197.397590361446, + 197.993957703928, + 198.593939393939, + 199.197568389058, + 199.804878048781, + 200.415902140673, + 201.030674846626, + 201.649230769231, + 202.271604938272, + 202.897832817337, + 203.527950310559, + 204.16199376947, + 204.8, + 205.442006269592, + 206.088050314465, + 206.738170347003, + 207.392405063291, + 208.050793650794, + 208.713375796178, + 209.380191693291, + 210.051282051282, + 210.726688102894, + 211.406451612903, + 212.090614886731, + 212.779220779221, + 213.472312703583, + 214.169934640523, + 214.872131147541, + 215.578947368421, + 216.290429042904, + 217.006622516556, + 217.727574750831, + 218.453333333333, + 219.183946488294, + 219.919463087248, + 220.659932659933, + 221.405405405405, + 222.15593220339, + 222.91156462585, + 223.672354948805, + 224.438356164384, + 225.209621993127, + 225.986206896552, + 226.768166089965, + 227.555555555556, + 228.348432055749, + 229.146853146853, + 229.950877192982, + 230.760563380282, + 231.575971731449, + 232.397163120567, + 233.224199288256, + 234.057142857143, + 234.89605734767, + 235.741007194245, + 236.592057761733, + 237.449275362319, + 238.312727272727, + 239.182481751825, + 240.058608058608, + 240.941176470588, + 241.830258302583, + 242.725925925926, + 243.628252788104, + 244.537313432836, + 245.453183520599, + 246.375939849624, + 247.305660377358, + 248.242424242424, + 249.186311787072, + 250.137404580153, + 251.095785440613, + 252.061538461538, + 253.034749034749, + 254.015503875969, + 255.003891050584, + 256, + 257.003921568627, + 258.015748031496, + 259.03557312253, + 260.063492063492, + 261.099601593625, + 262.144, + 263.196787148594, + 264.258064516129, + 265.327935222672, + 266.406504065041, + 267.49387755102, + 268.590163934426, + 269.695473251029, + 270.809917355372, + 271.933609958506, + 273.066666666667, + 274.20920502092, + 275.361344537815, + 276.523206751055, + 277.694915254237, + 278.876595744681, + 280.068376068376, + 281.270386266094, + 282.48275862069, + 283.705627705628, + 284.939130434783, + 286.183406113537, + 287.438596491228, + 288.704845814978, + 289.982300884956, + 291.271111111111, + 292.571428571429, + 293.883408071749, + 295.207207207207, + 296.542986425339, + 297.890909090909, + 299.251141552511, + 300.623853211009, + 302.009216589862, + 303.407407407407, + 304.818604651163, + 306.242990654206, + 307.680751173709, + 309.132075471698, + 310.597156398104, + 312.07619047619, + 313.569377990431, + 315.076923076923, + 316.599033816425, + 318.135922330097, + 319.687804878049, + 321.254901960784, + 322.837438423645, + 324.435643564356, + 326.049751243781, + 327.68, + 329.326633165829, + 330.989898989899, + 332.670050761421, + 334.367346938775, + 336.082051282051, + 337.814432989691, + 339.564766839378, + 341.333333333333, + 343.120418848168, + 344.926315789474, + 346.751322751323, + 348.595744680851, + 350.459893048128, + 352.344086021505, + 354.248648648649, + 356.173913043478, + 358.120218579235, + 360.087912087912, + 362.077348066298, + 364.088888888889, + 366.122905027933, + 368.179775280899, + 370.25988700565, + 372.363636363636, + 374.491428571429, + 376.64367816092, + 378.820809248555, + 381.023255813953, + 383.251461988304, + 385.505882352941, + 387.786982248521, + 390.095238095238, + 392.431137724551, + 394.795180722892, + 397.187878787879, + 399.609756097561, + 402.061349693252, + 404.543209876543, + 407.055900621118, + 409.6, + 412.176100628931, + 414.784810126582, + 417.426751592357, + 420.102564102564, + 422.812903225807, + 425.558441558442, + 428.339869281046, + 431.157894736842, + 434.013245033113, + 436.906666666667, + 439.838926174497, + 442.810810810811, + 445.823129251701, + 448.876712328767, + 451.972413793103, + 455.111111111111, + 458.293706293706, + 461.521126760563, + 464.794326241135, + 468.114285714286, + 471.482014388489, + 474.898550724638, + 478.36496350365, + 481.882352941176, + 485.451851851852, + 489.074626865672, + 492.751879699248, + 496.484848484849, + 500.274809160305, + 504.123076923077, + 508.031007751938, + 512, + 516.031496062992, + 520.126984126984, + 524.288, + 528.516129032258, + 532.813008130081, + 537.180327868852, + 541.619834710744, + 546.133333333333, + 550.72268907563, + 555.389830508475, + 560.136752136752, + 564.965517241379, + 569.878260869565, + 574.877192982456, + 579.964601769912, + 585.142857142857, + 590.414414414414, + 595.781818181818, + 601.247706422018, + 606.814814814815, + 612.485981308411, + 618.264150943396, + 624.152380952381, + 630.153846153846, + 636.271844660194, + 642.509803921569, + 648.871287128713, + 655.36, + 661.979797979798, + 668.734693877551, + 675.628865979381, + 682.666666666667, + 689.852631578947, + 697.191489361702, + 704.688172043011, + 712.347826086956, + 720.175824175824, + 728.177777777778, + 736.359550561798, + 744.727272727273, + 753.287356321839, + 762.046511627907, + 771.011764705882, + 780.190476190476, + 789.590361445783, + 799.219512195122, + 809.086419753086, + 819.2, + 829.569620253165, + 840.205128205128, + 851.116883116883, + 862.315789473684, + 873.813333333333, + 885.621621621622, + 897.753424657534, + 910.222222222222, + 923.042253521127, + 936.228571428571, + 949.797101449275, + 963.764705882353, + 978.149253731343, + 992.969696969697, + 1008.24615384615, + 1024, + 1040.25396825397, + 1057.03225806452, + 1074.36065573771, + 1092.26666666667, + 1110.77966101695, + 1129.93103448276, + 1149.75438596491, + 1170.28571428571, + 1191.56363636364, + 1213.62962962963, + 1236.52830188679, + 1260.30769230769, + 1285.01960784314, + 1310.72, + 1337.4693877551, + 1365.33333333333, + 1394.3829787234, + 1424.69565217391, + 1456.35555555556, + 1489.45454545455, + 1524.09302325581, + 1560.38095238095, + 1598.43902439024, + 1638.4, + 1680.41025641026, + 1724.63157894737, + 1771.24324324324, + 1820.44444444444, + 1872.45714285714, + 1927.52941176471, + 1985.93939393939, + 2048, + 2114.06451612903, + 2184.53333333333, + 2259.86206896552, + 2340.57142857143, + 2427.25925925926, + 2520.61538461538, + 2621.44, + 2730.66666666667, + 2849.39130434783, + 2978.90909090909, + 3120.7619047619, + 3276.8, + 3449.26315789474, + 3640.88888888889, + 3855.05882352941, + 4096, + 4369.06666666667, + 4681.14285714286, + 5041.23076923077, + 5461.33333333333, + 5957.81818181818, + 6553.6, + 7281.77777777778, + 8192, + 9362.28571428571, + 10922.6666666667, + 13107.2, + 16384, + 21845.3333333333, + 32768, + 65536 }; + +const float freqTableNSE[256] = { + 524288, 262144, 131072, 87381.3333333333, 65536, 52428.8, 43690.6666666667, 37449.1428571429, + 524288, 262144, 131072, 87381.3333333333, 65536, 52428.8, 43690.6666666667, 37449.1428571429, + 262144, 131072, 65536, 43690.6666666667, 32768, 26214.4, 21845.3333333333, 18724.5714285714, + 262144, 131072, 65536, 43690.6666666667, 32768, 26214.4, 21845.3333333333, 18724.5714285714, + 131072, 65536, 32768, 21845.3333333333, 16384, 13107.2, 10922.6666666667, 9362.28571428571, + 131072, 65536, 32768, 21845.3333333333, 16384, 13107.2, 10922.6666666667, 9362.28571428571, + 65536, 32768, 16384, 10922.6666666667, 8192, 6553.6, 5461.33333333333, 4681.14285714286, + 65536, 32768, 16384, 10922.6666666667, 8192, 6553.6, 5461.33333333333, 4681.14285714286, + 32768, 16384, 8192, 5461.33333333333, 4096, 3276.8, 2730.66666666667, 2340.57142857143, + 32768, 16384, 8192, 5461.33333333333, 4096, 3276.8, 2730.66666666667, 2340.57142857143, + 16384, 8192, 4096, 2730.66666666667, 2048, 1638.4, 1365.33333333333, 1170.28571428571, + 16384, 8192, 4096, 2730.66666666667, 2048, 1638.4, 1365.33333333333, 1170.28571428571, + 8192, 4096, 2048, 1365.33333333333, 1024, 819.2, 682.666666666667, 585.142857142857, + 8192, 4096, 2048, 1365.33333333333, 1024, 819.2, 682.666666666667, 585.142857142857, + 4096, 2048, 1024, 682.666666666667, 512, 409.6, 341.333333333333, 292.571428571429, + 4096, 2048, 1024, 682.666666666667, 512, 409.6, 341.333333333333, 292.571428571429, + 2048, 1024, 512, 341.333333333333, 256, 204.8, 170.666666666667, 146.285714285714, + 2048, 1024, 512, 341.333333333333, 256, 204.8, 170.666666666667, 146.285714285714, + 1024, 512, 256, 170.666666666667, 128, 102.4, 85.3333333333333, 73.1428571428571, + 1024, 512, 256, 170.666666666667, 128, 102.4, 85.3333333333333, 73.1428571428571, + 512, 256, 128, 85.3333333333333, 64, 51.2, 42.6666666666667, 36.5714285714286, + 512, 256, 128, 85.3333333333333, 64, 51.2, 42.6666666666667, 36.5714285714286, + 256, 128, 64, 42.6666666666667, 32, 25.6, 21.3333333333333, 18.2857142857143, + 256, 128, 64, 42.6666666666667, 32, 25.6, 21.3333333333333, 18.2857142857143, + 128, 64, 32, 21.3333333333333, 16, 12.8, 10.6666666666667, 9.14285714285714, + 128, 64, 32, 21.3333333333333, 16, 12.8, 10.6666666666667, 9.14285714285714, + 64, 32, 16, 10.6666666666667, 8, 6.4, 5.33333333333333, 4.57142857142857, + 64, 32, 16, 10.6666666666667, 8, 6.4, 5.33333333333333, 4.57142857142857, + 32, 16, 8, 5.33333333333333, 4, 3.2, 2.66666666666667, 2.28571428571429, + 32, 16, 8, 5.33333333333333, 4, 3.2, 2.66666666666667, 2.28571428571429, + 16, 8, 4, 2.66666666666667, 2, 1.6, 1.33333333333333, 1.14285714285714, + 16, 8, 4, 2.66666666666667, 2, 1.6, 1.33333333333333, 1.14285714285714, +}; + +#endif diff --git a/sa1/include/platform/shared/dma.h b/sa1/include/platform/shared/dma.h new file mode 100644 index 0000000000..d45b07121b --- /dev/null +++ b/sa1/include/platform/shared/dma.h @@ -0,0 +1,30 @@ +#ifndef GUARD_PLATFORM_SHARED_DMA_H +#define GUARD_PLATFORM_SHARED_DMA_H + +#define DMA_DEST_MASK 0x0060 +#define DMA_SRC_MASK 0x0180 + +#define DMA_COUNT 4 + +typedef struct DMATransfer { + union { + const void *src; + const u16 *src16; + const u32 *src32; + }; + union { + void *dst; + vu16 *dst16; + vu32 *dst32; + }; + u32 size; + u16 control; +} DMATransfer; + +extern struct DMATransfer DMAList[DMA_COUNT]; + +typedef enum { DMA_NOW, DMA_VBLANK, DMA_HBLANK, DMA_SPECIAL } DmaStartTypes; + +void RunDMAs(DmaStartTypes type); + +#endif // GUARD_PLATFORM_SHARED_DMA_H \ No newline at end of file diff --git a/sa1/include/platform/shared/input.h b/sa1/include/platform/shared/input.h new file mode 100644 index 0000000000..7d1866e551 --- /dev/null +++ b/sa1/include/platform/shared/input.h @@ -0,0 +1,13 @@ +#ifndef GUARD_PLATFORM_SHARED_INPUT_H +#define GUARD_PLATFORM_SHARED_INPUT_H + +typedef u32 SharedKeys; + +#define KEY_SPEEDUP (1 << 16) +#define SPEEDUP_SCALE 5.0f + +#ifdef _WIN32 +SharedKeys GetXInputKeys(); +#endif // _WIN32 + +#endif // GUARD_PLATFORM_SHARED_INPUT_H diff --git a/sa1/include/platform/shared/opengl.h b/sa1/include/platform/shared/opengl.h new file mode 100644 index 0000000000..dc643c216e --- /dev/null +++ b/sa1/include/platform/shared/opengl.h @@ -0,0 +1,10 @@ +#ifndef GUARD_PLATFORM_SHARED_OPENGL_H +#define GUARD_PLATFORM_SHARED_OPENGL_H + +#include "sprite.h" // for Sprite + +void OpenGL_OnInit(); +void OpenGL_DisplaySprite(Sprite *sprite, u8 oamPaletteNum); +void OpenGL_Render(void *tempBufferPixels, int windowWidth, int windowHeight); + +#endif // GUARD_PLATFORM_SHARED_OPENGL_H diff --git a/sa1/include/rect.h b/sa1/include/rect.h new file mode 100644 index 0000000000..3993006ccc --- /dev/null +++ b/sa1/include/rect.h @@ -0,0 +1,76 @@ +#ifndef GUARD_RECT_H +#define GUARD_RECT_H + +typedef struct Rect8 { + /* 0x00 */ s8 left; + /* 0x01 */ s8 top; + /* 0x02 */ s8 right; + /* 0x03 */ s8 bottom; +} Rect8; + +// TODO: Maybe the integer- and FP-macros can be merged somehow? + +/* Rect collision checks using integer values */ +#define RECT_WIDTH(hb) ((hb)->right - (hb)->left) +#define RECT_HEIGHT(hb) ((hb)->bottom - (hb)->top) +#define RECT_LEFT(x, hb) ((x) + (hb)->left) +#define RECT_RIGHT(x, hb) (RECT_LEFT(x, hb) + RECT_WIDTH(hb)) +#define RECT_TOP(y, hb) ((y) + (hb)->top) +#define RECT_BOTTOM(y, hb) (RECT_TOP(y, hb) + RECT_HEIGHT(hb)) + +#define RECT_COLLISION_A_X(x0, hb0, x1, hb1) (RECT_LEFT(x0, hb0) <= RECT_LEFT(x1, hb1) && RECT_RIGHT(x0, hb0) >= RECT_LEFT(x1, hb1)) +#define RECT_COLLISION_B_X(x0, hb0, x1, hb1) (RECT_LEFT(x0, hb0) >= RECT_LEFT(x1, hb1) && RECT_RIGHT(x1, hb1) >= RECT_LEFT(x0, hb0)) +#define RECT_COLLISION_A_Y(y0, hb0, y1, hb1) (RECT_TOP((y0), hb0) <= RECT_TOP((y1), hb1) && RECT_BOTTOM((y0), hb0) >= RECT_TOP((y1), hb1)) +#define RECT_COLLISION_B_Y(y0, hb0, y1, hb1) (RECT_TOP((y0), hb0) >= RECT_TOP((y1), hb1) && RECT_BOTTOM((y1), hb1) >= RECT_TOP((y0), hb0)) + +#define RECT_COLLISION_X(x0, hb0, x1, hb1) (RECT_COLLISION_A_X(x0, hb0, x1, hb1) || RECT_COLLISION_B_X(x0, hb0, x1, hb1)) +#define RECT_COLLISION_Y(y0, hb0, y1, hb1) (RECT_COLLISION_A_Y(y0, hb0, y1, hb1) || RECT_COLLISION_B_Y(y0, hb0, y1, hb1)) + +#define RECT_COLLISION(x0, y0, hb0, x1, y1, hb1) (RECT_COLLISION_X(x0, hb0, x1, hb1) && RECT_COLLISION_Y(y0, hb0, y1, hb1)) + +/* Rect collision checks using Fixed-point values */ +#define Q_RECT_WIDTH(hb) QS(RECT_WIDTH(hb)) +#define Q_RECT_HEIGHT(hb) QS(RECT_HEIGHT(hb)) +#define Q_RECT_LEFT(x, hb) ((x) + Q((hb)->left)) +#define Q_RECT_LEFT2(x, hb) QS((hb)->left + (x)) +#define Q_RECT_RIGHT(x, hb) (Q_RECT_LEFT(x, hb) + Q_RECT_WIDTH(hb)) +#define Q_RECT_RIGHT2(x, hb) (Q_RECT_LEFT2(x, hb) + Q_RECT_WIDTH(hb)) +#define Q_RECT_TOP(y, hb) (((y) + Q((hb)->top))) +#define Q_RECT_TOP2(y, hb) QS(((hb)->top) + (y)) +#define Q_RECT_BOTTOM(y, hb) (Q_RECT_TOP(y, hb) + Q_RECT_HEIGHT(hb)) +#define Q_RECT_BOTTOM2(y, hb) (Q_RECT_TOP2(y, hb) + Q_RECT_HEIGHT(hb)) + +#define Q_RECT_COLLISION_A_X(x0, hb0, x1, hb1) \ + (Q_RECT_LEFT2(x0, hb0) <= Q_RECT_LEFT(x1, hb1) && Q_RECT_RIGHT2(x0, hb0) >= Q_RECT_LEFT(x1, hb1)) +#define Q_RECT_COLLISION_B_X(x0, hb0, x1, hb1) \ + (Q_RECT_LEFT2(x0, hb0) >= Q_RECT_LEFT(x1, hb1) && Q_RECT_RIGHT(x1, hb1) >= Q_RECT_LEFT2(x0, hb0)) +#define Q_RECT_COLLISION_A_Y(y0, hb0, y1, hb1) \ + (Q_RECT_TOP2((y0), hb0) <= Q_RECT_TOP((y1), hb1) && Q_RECT_BOTTOM2((y0), hb0) >= Q_RECT_TOP((y1), hb1)) +#define Q_RECT_COLLISION_B_Y(y0, hb0, y1, hb1) \ + (Q_RECT_TOP2((y0), hb0) >= Q_RECT_TOP((y1), hb1) && Q_RECT_BOTTOM((y1), hb1) >= Q_RECT_TOP2((y0), hb0)) + +#define Q_RECT_COLLISION_X(x0, hb0, x1, hb1) (Q_RECT_COLLISION_A_X(x0, hb0, x1, hb1) || Q_RECT_COLLISION_B_X(x0, hb0, x1, hb1)) +#define Q_RECT_COLLISION_Y(y0, hb0, y1, hb1) (Q_RECT_COLLISION_A_Y(y0, hb0, y1, hb1) || Q_RECT_COLLISION_B_Y(y0, hb0, y1, hb1)) + +#define RECT_COLLISION_2(x0, y0, hb0, x1, y1, hb1) (Q_RECT_COLLISION_X(x0, hb0, x1, hb1) && Q_RECT_COLLISION_Y(y0, hb0, y1, hb1)) + +/* Rect collision checks using integer values + Clones of the RECT_ ,macros that access values directly */ +#define HB_WIDTH(hb) ((hb).right - (hb).left) +#define HB_HEIGHT(hb) ((hb).bottom - (hb).top) +#define HB_LEFT(x, hb) ((x) + hb.left) +#define HB_RIGHT(x, hb) (HB_LEFT((x), (hb)) + HB_WIDTH(hb)) +#define HB_TOP(y, hb) ((y) + hb.top) +#define HB_BOTTOM(y, hb) (HB_TOP(y, hb) + HB_HEIGHT(hb)) + +#define HB_COLLISION_A_X(x0, hb0, x1, hb1) (HB_LEFT(x0, hb0) <= HB_LEFT(x1, hb1) && HB_RIGHT(x0, hb0) >= HB_LEFT(x1, hb1)) +#define HB_COLLISION_B_X(x0, hb0, x1, hb1) (HB_LEFT(x0, hb0) >= HB_LEFT(x1, hb1) && HB_RIGHT(x1, hb1) >= HB_LEFT(x0, hb0)) +#define HB_COLLISION_A_Y(y0, hb0, y1, hb1) (HB_TOP((y0), hb0) <= HB_TOP((y1), hb1) && HB_BOTTOM((y0), hb0) >= HB_TOP((y1), hb1)) +#define HB_COLLISION_B_Y(y0, hb0, y1, hb1) (HB_TOP((y0), hb0) >= HB_TOP((y1), hb1) && HB_BOTTOM((y1), hb1) >= HB_TOP((y0), hb0)) + +#define HB_COLLISION_X(x0, hb0, x1, hb1) (HB_COLLISION_A_X(x0, hb0, x1, hb1) || HB_COLLISION_B_X(x0, hb0, x1, hb1)) +#define HB_COLLISION_Y(y0, hb0, y1, hb1) (HB_COLLISION_A_Y(y0, hb0, y1, hb1) || HB_COLLISION_B_Y(y0, hb0, y1, hb1)) + +#define HB_COLLISION(x0, y0, hb0, x1, y1, hb1) (HB_COLLISION_X(x0, hb0, x1, hb1) && HB_COLLISION_Y(y0, hb0, y1, hb1)) + +#endif // GUARD_RECT_H \ No newline at end of file diff --git a/sa1/include/sio32_multi_load.h b/sa1/include/sio32_multi_load.h new file mode 100644 index 0000000000..ccfacc1f29 --- /dev/null +++ b/sa1/include/sio32_multi_load.h @@ -0,0 +1,153 @@ +#ifndef GUARD_SIO32_MULTI_LOAD_H +#define GUARD_SIO32_MULTI_LOAD_H + +#include "multi_sio.h" + +// Optimize the following settings based on the software +// specifications + +#define SIO32ML_BLOCK_SIZE 0x8000 + +// Update if maximum delay for communication interrupt is larger than +// following. +#define SIO32ML_INTR_DELAY_MAX 1000 // Communication Interrupt Allowed Delay Clocks + +#define SIO32ML_INTR_CLOCK_MAX 256 // Communication Interrupt Processing Maximum Clocks + +#define SIO32ML_SYNC_DATA \ + 0xfefefefe // Synchronized Data (0x00000000and 0xffffffff + // prohibited) + +#define SIO32ML_SYSTEM_CLOCK (16 * 1024 * 1024) // System Clock +#define SIO32ML_SHIFT_CLOCK (256 * 1024) // Shift Clock +#define SIO32ML_LINE_CLOCKS 1232 // Line Clocks + +// Comment out if no space in CPU internal Work RAM +#ifdef MULTI_SIO_DI_FUNC_FAST +// #define SIO32ML_DI_FUNC_FAST // SIO Interrupt +// Prohibit Function High Speed Flag (CPU Internal RAM Execution) +#endif + +#define SIO32ML_TIMER_NO 3 // Timer No. +#define SIO32ML_TIMER_INTR_FLAG (INTR_FLAG_TIMER0 << SIO32ML_TIMER_NO) +// Timer Interrupt Flag + +#define REG_SIO32ML_TIMER (*(vu32 *)(REG_ADDR_TMCNT + (SIO32ML_TIMER_NO * 4))) +#define REG_SIO32ML_TIMER_L (*(vu16 *)(REG_ADDR_TMCNT_L + (SIO32ML_TIMER_NO * 4))) +#define REG_SIO32ML_TIMER_H (*(vu16 *)(REG_ADDR_TMCNT_H + (SIO32ML_TIMER_NO * 4))) +// Timer Register + +// Timer count temporary value is calculated from communication data +// block size. +#define SIO32ML_TIMER_COUNT_TMP (SIO32ML_SYSTEM_CLOCK / SIO32ML_SHIFT_CLOCK * 32 + SIO32ML_INTR_DELAY_MAX + SIO32ML_INTR_CLOCK_MAX) +// Timer Count Temporary Value +#define SIO32ML_TIMER_COUNT_MAX 0x10000 // Timer Count Maximum Value +#define SIO32ML_TIMER_COUNT \ + ((SIO32ML_TIMER_COUNT_TMP > SIO32ML_TIMER_COUNT_MAX) ? SIO32ML_TIMER_COUNT_MAX - SIO32ML_TIMER_COUNT_MAX \ + : SIO32ML_TIMER_COUNT_MAX - SIO32ML_TIMER_COUNT_TMP) +// Timer Count + +// Load timeout frames is calculated from above values. +#define SIO32ML_MODE_WAIT_FRAMES 6 // SIO Mode Switch Wait Frames +#define SIO32ML_LD_TIMEOUT_FRAMES \ + (((SIO32ML_TIMER_COUNT_MAX - SIO32ML_TIMER_COUNT + SIO32ML_INTR_DELAY_MAX + SIO32ML_INTR_CLOCK_MAX) * (SIO32ML_BLOCK_SIZE / 4)) \ + / (SIO32ML_LINE_CLOCKS * 228) \ + + SIO32ML_MODE_WAIT_FRAMES + 2) +// Load timeout frames + +// 32bit Serial Communication Multi-load Work Area Structure +struct Sio32MultiLoadArea { + u8 type; // Connection (Master/Slave) + u8 state; // Communication Function State + u8 frameCounter; // Frame Counter + u8 downloadSuccessFlag; // Download Success Flag + + u32 *datap; // Data Pointer + s32 dataCounter; // Data Counter + + u32 checkSum; // Checksum + u32 checkSumTmp; + s32 checkSumCounter; // Checksum Counter +}; + +extern struct Sio32MultiLoadArea gSio32MultiLoadArea; // 32bit Serial Communication + // Multi-load Work Area + +/*------------------------------------------------------------------*/ +/* 32bit Serial Communication Multi-load Intialization */ +/*------------------------------------------------------------------*/ + +extern void Sio32MultiLoadInit(u32 type, void *datap); + +//* Initialize register and buffer. +//* To avoid problem with shift clock synchronization set master to +// 256Kbps +// 32 bit serial communication mode first. +// +//* 2Mbps communication with a cable is not guaranteed so do not set +// up. +//* Set already connection already determined with multi-play +// communication +// to Type. +//* Do not pass VRAM address to Datap during display. +// May fail with checksum of stored data. +// Copy to VRAM after storing to work RAM once. +// After this, possible overwrite program data to work RAM. +// +//* Arguments: +// u32 type Connection (Master = Not 0/ Slave = 0) +// void *datap Data Pointer (Master = Send Data/ Slave= Receive +// Buffer) + +/*------------------------------------------------------------------*/ +/* 32bit Serial Communication Multi-load Main */ +/*------------------------------------------------------------------*/ + +extern u32 Sio32MultiLoadMain(u32 *progressCounterp); + +//* After 1 frame wait, set the slave to 256Kbps 32bit serial +// communication +// mode. Also, until the slave's SIO mode is determined the waits and +// then communication is started. +//* Slave successively calculates receive data checksum, and checks +// when +// receive complete. +//* If receive is not completed at time when should be, end receive +// forcibly. +//* After communication ends prohibit communication interrupts, and +// return +// to multi-play communication mode. +// +//* Arguments: +// u32 *progressCounterp Progress Counter Pointer +// (Disabled when 0 specified) +//* Return Value: +// During communication = 0/ End = Not 0 + +/*------------------------------------------------------------------*/ +/* 32bit Serial Communication Multi-load Interrupt Routine */ +/*------------------------------------------------------------------*/ + +extern void Sio32MultiLoadIntr(void); + +//* Master does only send and slave only receive. +//* Master resets timer during send. +//* Slave stores receive data in order to receive buffer during +// communication interrupt. +// Lastly it stores checksum to work area. +// +//* Program so slave is called with communication interrupt and master +// is called with timer interrupt. +//* Data is passed with pipeline operation so delayed with slave with +// large ID and then received. Therefore at a minimum need to send +// two (8 Bytes) extra times. +// +//* Example: +// ID 0 1 2 3 +// Data 0 -> 0 -> 0 -> 0 +// 1 -> 0 -> 0 -> 0 +// 2 -> 1 -> 0 -> 0 +// 3 -> 2 -> 1 -> 0 +// 4 -> 3 -> 2 -> 1 + +#endif // GUARD_SIO32_MULTI_LOAD_H diff --git a/sa1/include/sprite.h b/sa1/include/sprite.h new file mode 100644 index 0000000000..7500e387df --- /dev/null +++ b/sa1/include/sprite.h @@ -0,0 +1,435 @@ +#ifndef GUARD_SPRITE_H +#define GUARD_SPRITE_H + +#include "global.h" +#include "rect.h" + +// Version: January 10th, 2024 + +typedef u16 AnimId; + +typedef struct GraphicsData { + /* 0x00 */ const void *src; + /* 0x04 */ void *dest; + /* 0x08 */ u16 size; + /* 0x0A */ AnimId anim; +} GraphicsData; + +// TODO: Put this somewhere else! (or is this already somewhere?) +#define TileMask_Index (0x3FF) +#define TileMask_FlipX (1 << 10) +#define TileMask_FlipY (1 << 11) +#define TileMask_FlipXY (TileMask_FlipX | TileMask_FlipY) +#define TileMask_Palette (TileMask_FlipX | TileMask_FlipY) + +#define BACKGROUND_FLAGS_BG_ID(id) (id) +#define BACKGROUND_FLAGS_MASK_BG_ID 0x3 +#define BACKGROUND_FLAG_4 0x4 +#define BACKGROUND_DISABLE_TILESET_UPDATE 0x8 +#define BACKGROUND_DISABLE_PALETTE_UPDATE 0x10 +#define BACKGROUND_FLAG_20 0x20 +#define BACKGROUND_FLAG_IS_LEVEL_MAP 0x40 +#define BACKGROUND_FLAG_80 0x80 +#define BACKGROUND_FLAG_100 0x100 +#define BACKGROUND_UPDATE_ANIMATIONS 0x200 +#define BACKGROUND_FLAG_400 0x400 +#define BACKGROUND_FLAG_800 0x800 + +// TODO: potentially rename these. For now, all we know is +// that they are used in the same functions which handles +// bg sprites +#define INIT_BG_SPRITES_LAYER_32(index) \ + ({ \ + gBgSprites_Unknown1[(index)] = 0; \ + gBgSprites_Unknown2[(index)][0] = 0; \ + gBgSprites_Unknown2[(index)][1] = 0; \ + gBgSprites_Unknown2[(index)][2] = 255; \ + gBgSprites_Unknown2[(index)][3] = 32; \ + }); + +#define INIT_BG_SPRITES_LAYER_64(index) \ + ({ \ + gBgSprites_Unknown1[(index)] = 0; \ + gBgSprites_Unknown2[(index)][0] = 0; \ + gBgSprites_Unknown2[(index)][1] = 0; \ + gBgSprites_Unknown2[(index)][2] = 255; \ + gBgSprites_Unknown2[(index)][3] = 64; \ + }) + +#define INIT_BG_SPRITES_LAYER_128(index) \ + ({ \ + gBgSprites_Unknown1[(index)] = 0; \ + gBgSprites_Unknown2[(index)][0] = 0; \ + gBgSprites_Unknown2[(index)][1] = 0; \ + gBgSprites_Unknown2[(index)][2] = 255; \ + gBgSprites_Unknown2[(index)][3] = 128; \ + }) + +typedef struct { + /* 0x00 */ struct GraphicsData graphics; + + // 'tilesVram' points to tile-index array in VRAM, telling the GBA which tiles to + // draw on this BG + // + // (!!! Data likely different depending on type of Background (Affine vs. Text). !!!) + // + // Data-Structure (16 bits): MSB > PPPPYXTTTTTTTTTT < LSB + // P = Palette Index + // Y = Y-Flip + // X = X-Flip + // T = Tile-Index + // + // NOTE: It does NOT point to the tileset! + /* 0x0C */ u16 *layoutVram; + + // Stage-Map: Metatiles + // Common Tilemaps: Tilemap-Tiles + /* 0x10 */ const u16 *layout; + + // Tile-count on each axis + // - Stage maps: should be 12 (# per metatile) + // - Common Tilemaps: should be .targetTilesX/Y + /* 0x14 */ u16 xTiles; + /* 0x16 */ u16 yTiles; + + /* 0x18 */ u16 unk18; + /* 0x1A */ u16 unk1A; + /* 0x1C */ u16 tilemapId; + /* 0x1E */ u16 unk1E; + + /* 0x20 */ u16 unk20; + /* 0x22 */ u16 unk22; + /* 0x24 */ u16 unk24; + + /* Tile-Dimensions for the rendering target */ + /* - Stage maps: DISPLAY_WIDTH/_HEIGHT + 1*TILE_WIDTH */ + /* - Common Tilemaps: full image dimensions */ + /* 0x26 */ u16 targetTilesX; + /* 0x28 */ u16 targetTilesY; + + /* 0x2A */ u8 paletteOffset; + /* 0x2B */ u8 animFrameCounter; + /* 0x2C */ u8 animDelayCounter; + + /* 0x2E */ u16 flags; + + // apparently NOT signed? + /* 0x30 */ u16 scrollX; + /* 0x32 */ u16 scrollY; + /* 0x34 */ u16 prevScrollX; + /* 0x36 */ u16 prevScrollY; + + /* Only used by stage maps (they are encoded as Tilemaps) */ + /* 0x38 */ const MetatileIndexType *metatileMap; + /* 0x3C */ u16 mapWidth; + /* 0x3E */ u16 mapHeight; +} Background; /* size = 0x40 */ + +typedef struct { +#if (ENGINE >= ENGINE_3) + // In SA3 flip-bits are integrated into the oamIndex. + // X-Flip: Bit 14 + // Y-Flip: Bit 15 + /* 0x00 */ u16 oamIndex; +#else + /* 0x00 */ u8 flip; + + // every animation has an associated oamData pointer, oamIndex starts at + // 0 for every new animation and ends at variantCount-1 + /* 0x01 */ u8 oamIndex; +#endif + + // some sprite frames consist of multiple images (of the same size + // as GBA's Object Attribute Memory, e.g. 8x8, 8x32, 32x64, ...) + /* 0x02 */ u16 numSubframes; + + // In pixels + /* 0x04 */ u16 width; + // In pixels + /* 0x06 */ u16 height; + + /* 0x08 */ s16 offsetX; + /* 0x0A */ s16 offsetY; +} SpriteOffset; + +// TODO: Verify "(in)active" name +#define HITBOX_STATE_INACTIVE -1 +#define HITBOX_IS_ACTIVE(hb) ((hb).index != HITBOX_STATE_INACTIVE) + +typedef struct { + // index: -1 on init; lower 4 bits = index (in anim-cmds) + /* 0x00 */ s32 index; + /* 0x04 */ Rect8 b; +} Hitbox; + +#define SPRITE_ANIM_SPEED(speed) ((int)((float)(speed)*0x10)) +#define SPRITE_OAM_ORDER(index) ((index) << 6) +#define GET_SPRITE_OAM_ORDER(s) ((((s)->oamFlags) & 0x7C0) >> 6) + +typedef struct { + /* 0x00 */ struct GraphicsData graphics; + /* 0x0C */ const SpriteOffset *dimensions; + + // Bitfield description from KATAM decomp + /* 0x10 */ u32 frameFlags; // bit 0-4: affine-index / rotscale param selection + // bit 5: rotscale enable + // bit 6: rotscale double-size + // bit 7-8: obj mode + // bit 9 + // bit 10 X-Flip + // bit 11 Y-Flip + // bit 12-13: priority + // bit 14 + // bit 15-16: Background ID + // bit 17 + // bit 18 + // bit 19-25(?) + // bit 26 + // bit 27-29(?) + // bit 30 + // bit 31 + + /* 0x14 */ u16 animCursor; + + /* 0x16 */ s16 x; + /* 0x18 */ s16 y; + + /* 0x1A */ u16 oamFlags; // bit 6-10: OAM order index + + /* 0x1C */ s16 qAnimDelay; // Q_8_8, in frames + /* 0x1E */ u16 prevAnim; + /* 0x20 */ u8 variant; + /* 0x21 */ u8 prevVariant; + + // 0x08 = 0.5x, 0x10 = 1.0x, 0x20 = 2.0x ... + /* 0x22 */ u8 animSpeed; + + /* 0x23 */ u8 oamBaseIndex; + /* 0x24 */ u8 numSubFrames; + /* 0x25 */ u8 palId; + /* 0x28 */ Hitbox hitboxes[1]; +} Sprite /* size = 0x30 */; + +// TODO: Unify Sprite with variable hitbox count through a macro +typedef struct { + Sprite s; + Hitbox hb1; +} Sprite2; + +// TODO: Unify Sprite with variable hitbox count through a macro +typedef struct { + Sprite s; + Hitbox hb1; + Hitbox hb2; +} Sprite3; + +typedef struct { + /* 0x00 */ u16 rotation; + /* 0x02 */ s16 qScaleX; + /* 0x04 */ s16 qScaleY; + /* 0x06 */ s16 x; + /* 0x08 */ s16 y; +} SpriteTransform; /* size 0xA */ + +typedef struct { + /* 0x00 */ s16 unk0[4]; + /* 0x08 */ s16 qDirX; + /* 0x0A */ s16 qDirY; + + /* 0x0C */ s16 unkC[2]; + + /* 0x10 */ s32 posX; + /* 0x14 */ s32 posY; + + /* 0x18 */ s16 unk18[2][2]; + /* 0x20 */ u16 affineIndex; +} UnkSpriteStruct; + +typedef struct { + /* 0x00 */ u32 numTiles; + /* 0x04 */ AnimId anim; + /* 0x06 */ u8 variant; +} TileInfo; + +// NOTE: (Only?) used by by src/game/bosses/final_intro.c +typedef struct { + /* 0x00 */ void *tiles; + /* 0x04 */ AnimId anim; + /* 0x06 */ u8 variant; +} TileInfoPtr; + +PACKED(TileInfo16, { + /* 0x00 */ u16 numTiles; + /* 0x02 */ AnimId anim; + /* 0x04 */ u16 variant; +}); + +#if (ENGINE == ENGINE_1) +typedef struct { + u32 anim : 16; + u32 variant : 8; + u32 size : 8; +} TileInfoBitfield; + +// Used in the background code of Casino Paradise +// TODO: Rename TileInfoFirework! +typedef struct { + /* 0x00 */ AnimId anim; + /* 0x04 */ u8 variant; + /* 0x06 */ u8 numTiles; +} TileInfoFirework; + +typedef struct { + AnimId anim; + u16 variant; +} TileInfoBarrel; +#endif + +extern const u8 gOamShapesSizes[12][2]; + +typedef enum { + ACMD_RESULT__ANIM_CHANGED = -1, + ACMD_RESULT__ENDED = 0, + ACMD_RESULT__RUNNING = +1, +} AnimCmdResult; + +AnimCmdResult UpdateSpriteAnimation(Sprite *); + +void DisplaySprite(Sprite *); +void DrawBackground(Background *); +bool32 SA2_LABEL(sub_8002B20)(void); +bool32 SA2_LABEL(sub_80039E4)(void); +bool32 SA2_LABEL(sub_8004010)(void); +void ProcessOamBuffers(void); +OamData *OamMalloc(u8 order); + +void TransformSprite(Sprite *, SpriteTransform *); +// NOTE: Not actually unused in SA1. TODO: Align name with SA2! +void UnusedTransform(Sprite *, SpriteTransform *); +void SA2_LABEL(sub_8004E14)(Sprite *, SpriteTransform *); + +void SA2_LABEL(sub_8003EE4)(u16 p0, s16 p1, s16 p2, s16 p3, s16 p4, s16 p5, s16 p6, BgAffineReg *affine); +void SA2_LABEL(sub_8006228)(u8 p0, u8 p1, u8 p2, u8 p3, u8 p4, u8 p5); +void SA2_LABEL(sub_80064A8)(u8 p0, u8 p1, u8 p2, u8 p3, u8 p4, u8 p5); + +s32 UpdateSpriteAnimation_BG(Sprite *); +void DisplaySprite_BG(Sprite *); +void SA2_LABEL(sub_80047A0)(u16 angle, s16 p1, s16 p2, u16 affineIndex); + +s16 SA2_LABEL(sub_8004418)(s16 x, s16 y); +void numToASCII(u8 digits[5], u16 number); + +#if ((GAME == GAME_SA1) || (GAME == GAME_SA2)) +#define GET_SPRITE_ANIM(s) ((s)->graphics.anim) +#else +#define GET_SPRITE_ANIM(s) ((s)->anim) +#endif + +#define SpriteShouldUpdate(sprite) (((sprite)->prevVariant != (sprite)->variant) || ((sprite)->prevAnim != (sprite)->graphics.anim)) + +#define SPRITE_INIT_ANIM_IF_CHANGED(_sprite) \ + if (SpriteShouldUpdate(_sprite)) { \ + (_sprite)->graphics.size = 0; \ + (_sprite)->prevVariant = (_sprite)->variant; \ + (_sprite)->prevAnim = (_sprite)->graphics.anim; \ + (_sprite)->animCursor = 0; \ + (_sprite)->qAnimDelay = 0; \ + SPRITE_FLAG_CLEAR(_sprite, ANIM_OVER); \ + } + +#define SPRITE_INIT_ANIM(_sprite, _anim, _variant, _order) \ + _sprite->graphics.anim = _anim; \ + _sprite->variant = _variant; \ + _sprite->oamFlags = SPRITE_OAM_ORDER(_order); \ + _sprite->graphics.size = 0; + +#define SPRITE_INIT_SCRIPT(_sprite, _speed) \ + _sprite->animCursor = 0; \ + _sprite->qAnimDelay = Q(0); \ + _sprite->prevVariant = -1; \ + _sprite->animSpeed = SPRITE_ANIM_SPEED(_speed); \ + _sprite->palId = 0; \ + _sprite->hitboxes[0].index = HITBOX_STATE_INACTIVE; + +#define SPRITE_INIT_ANIM_AND_SCRIPT(_sprite, _anim, _variant, _order) \ + SPRITE_INIT_ANIM(_sprite, _anim, _variant, _order); \ + SPRITE_INIT_SCRIPT(_sprite, 1.0); + +#define SPRITE_INIT_WITH_POS(_sprite, _numTiles, _anim, _variant, _order, _priority) \ + _sprite->graphics.dest = VramMalloc(_numTiles); \ + SPRITE_INIT_ANIM(_sprite, _anim, _variant, _order); \ + _sprite->x = 0; \ + _sprite->y = 0; \ + SPRITE_INIT_SCRIPT(_sprite, 1.0) \ + _sprite->frameFlags = SPRITE_FLAG(PRIORITY, _priority); + +#define SPRITE_INIT_WITHOUT_VRAM(_sprite, _anim, _variant, _order, _priority, _flags) \ + SPRITE_INIT_ANIM_AND_SCRIPT(_sprite, _anim, _variant, _order); \ + _sprite->frameFlags = (SPRITE_FLAG(PRIORITY, _priority) | (_flags)); + +#define SPRITE_INIT_WITHOUT_ANIM_OR_VRAM(_sprite, _order, _priority, _flags) \ + _sprite->oamFlags = SPRITE_OAM_ORDER(_order); \ + _sprite->graphics.size = 0; \ + SPRITE_INIT_SCRIPT(_sprite, 1.0); \ + _sprite->frameFlags = (SPRITE_FLAG(PRIORITY, _priority) | (_flags)); + +#define SPRITE_INIT_FLAGS(_sprite, _numTiles, _anim, _variant, _order, _priority, _flags) \ + _sprite->graphics.dest = VramMalloc(_numTiles); \ + SPRITE_INIT_WITHOUT_VRAM(_sprite, _anim, _variant, _order, _priority, _flags); + +#define SPRITE_INIT(_sprite, _numTiles, _anim, _variant, _order, _priority) \ + SPRITE_INIT_FLAGS(_sprite, _numTiles, _anim, _variant, _order, _priority, 0) + +#define SF_SHIFT(name) (SPRITE_FLAG_SHIFT_##name) + +#define SPRITE_FLAG(flagName, value) ((value) << SF_SHIFT(flagName)) + +#define SPRITE_FLAG_GET(sprite, flagName) (((sprite)->frameFlags & (SPRITE_FLAG_MASK_##flagName)) >> (SF_SHIFT(flagName))) + +#define SPRITE_FLAG_CLEAR(sprite, flagName) (sprite)->frameFlags &= ~(SPRITE_FLAG_MASK_##flagName) + +#define SPRITE_FLAG_SET(sprite, flagName) (sprite)->frameFlags |= (SPRITE_FLAG_MASK_##flagName) + +#define SPRITE_FLAG_FLIP(sprite, flagName) (sprite)->frameFlags ^= (SPRITE_FLAG_MASK_##flagName) + +#define SPRITE_FLAG_SET_VALUE(sprite, flagName, value) (sprite)->frameFlags |= SPRITE_FLAG(flagName, value) + +#define SPRITE_FLAG_ENABLE_ROTATION(value) \ + (SPRITE_FLAG(ROT_SCALE, value) | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE) + +#define SPRITE_FLAG_SHIFT_ROT_SCALE 0 +#define SPRITE_FLAG_SHIFT_ROT_SCALE_ENABLE 5 +#define SPRITE_FLAG_SHIFT_ROT_SCALE_DOUBLE_SIZE 6 +#define SPRITE_FLAG_SHIFT_OBJ_MODE 7 +#define SPRITE_FLAG_SHIFT_MOSAIC 9 +#define SPRITE_FLAG_SHIFT_X_FLIP 10 +#define SPRITE_FLAG_SHIFT_Y_FLIP 11 +#define SPRITE_FLAG_SHIFT_PRIORITY 12 +#define SPRITE_FLAG_SHIFT_ANIM_OVER 14 +#define SPRITE_FLAG_SHIFT_BG_ID 15 +#define SPRITE_FLAG_SHIFT_17 17 +#define SPRITE_FLAG_SHIFT_18 18 +#define SPRITE_FLAG_SHIFT_19 19 +#define SPRITE_FLAG_SHIFT_26 26 +#define SPRITE_FLAG_SHIFT_30 30 +#define SPRITE_FLAG_SHIFT_31 31 + +#define SPRITE_FLAG_MASK_ROT_SCALE SPRITE_FLAG(ROT_SCALE, 0x1F) // 0x1F +#define SPRITE_FLAG_MASK_ROT_SCALE_ENABLE SPRITE_FLAG(ROT_SCALE_ENABLE, 1) // 0x20 +#define SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) // 0x40 + +#define SPRITE_FLAG_MASK_OBJ_MODE SPRITE_FLAG(OBJ_MODE, 3) // 0x180 +#define SPRITE_FLAG_MASK_MOSAIC SPRITE_FLAG(MOSAIC, 1) // 0x200 +#define SPRITE_FLAG_MASK_X_FLIP SPRITE_FLAG(X_FLIP, 1) // 0x400 +#define SPRITE_FLAG_MASK_Y_FLIP SPRITE_FLAG(Y_FLIP, 1) // 0x800 +#define SPRITE_FLAG_MASK_PRIORITY SPRITE_FLAG(PRIORITY, 3) // 0x3000 +#define SPRITE_FLAG_MASK_ANIM_OVER SPRITE_FLAG(ANIM_OVER, 1) +#define SPRITE_FLAG_MASK_BG_ID SPRITE_FLAG(BG_ID, 3) +#define SPRITE_FLAG_GLOBAL_OFFSET SPRITE_FLAG(17, 1) +#define SPRITE_FLAG_MASK_18 SPRITE_FLAG(18, 1) // 0x40000 +#define SPRITE_FLAG_MASK_19 SPRITE_FLAG(19, 1) +#define SPRITE_FLAG_MASK_26 SPRITE_FLAG(26, 1) +#define SPRITE_FLAG_MASK_30 SPRITE_FLAG(30, 1) +#define SPRITE_FLAG_MASK_31 SPRITE_FLAG(31, 1) + +#endif diff --git a/sa1/include/task.h b/sa1/include/task.h new file mode 100644 index 0000000000..96c17b6d2c --- /dev/null +++ b/sa1/include/task.h @@ -0,0 +1,147 @@ +#ifndef GUARD_TASK_H +#define GUARD_TASK_H + +#include "global.h" + +struct Task; + +typedef void (*TaskMain)(void); +typedef void (*TaskDestructor)(struct Task *); + +// The task system uses the GBA's unique memory layout to halve the size of pointers. +// Other platforms need to have the same logical behavior, but done differently. +#if PLATFORM_GBA +typedef u16 TaskPtr; + +// Mainly used to silence (void* -> u16) warnings +typedef u32 TaskPtr32; + +#define TASK_PTR(taskRef) (IWRAM_START + (taskRef)) +#define TASK_IS_NULL(taskp) ((taskp) == (void *)IWRAM_START) + +typedef u16 IwramData; +#define CLEAR_TASK_MEMORY_ON_DESTROY FALSE +#else +typedef struct Task *TaskPtr; +typedef TaskPtr TaskPtr32; + +#define TASK_PTR(taskRef) (taskRef) +#define TASK_IS_NULL(task) ((task) == NULL) + +typedef void *IwramData; + +#if !DEBUG && !TAS_TESTING +#define ENABLE_TASK_LOGGING !TRUE +#else +#define ENABLE_TASK_LOGGING TRUE +#endif // !DEBUG && !TAS_TESTING + +#define CLEAR_TASK_MEMORY_ON_DESTROY TRUE +#endif // PLATFORM_GBA + +#define TASK_IS_NOT_NULL(taskp) !TASK_IS_NULL(taskp) + +#define MAX_TASK_NUM 128 + +#define TASK_INACTIVE 0x0001 +#define TASK_DESTROY_DISABLED 0x0002 +#define TASK_x0004 0x0004 +#define TASK_USE_EWRAM 0x0010 + +#define USE_SA2_TASK_SYSTEM (GAME == GAME_SA2) + +typedef struct Task { + /* 0x00 */ TaskPtr parent; + /* 0x02 */ TaskPtr prev; + /* 0x04 */ TaskPtr next; + /* 0x06 */ IwramData data; +#if PORTABLE + u32 dataSize; +#endif // PORTABLE + /* 0x08 */ TaskMain main; + /* 0x0C */ TaskDestructor dtor; + /* 0x10 */ u16 priority; // priority? + /* 0x12 */ u16 flags; // 0x1 = active + // 0x2 = ??? + // 0x10 = use ewram for struct +#if USE_SA2_TASK_SYSTEM + /* 0x14 */ u8 unk14; + /* 0x15 */ u8 unk15; + /* 0x16 */ u16 unk16; + /* 0x18 */ u16 unk18; +#endif // USE_SA2_TASK_SYSTEM + +#if ENABLE_TASK_LOGGING + const char *name; +#endif +} Task; + +#if PLATFORM_GBA +typedef u16 IwramNodePtr; +typedef u32 IwramNodePtr32; +#else +struct IwramNode; + +typedef struct IwramNode *IwramNodePtr; +typedef IwramNodePtr IwramNodePtr32; +#endif // PLATFORM_GBA + +#define IWRAM_PTR(ptr) TASK_PTR(ptr) + +struct IwramNode { + IwramNodePtr next; + s16 state; + + u8 ALIGNED(sizeof(void *)) space[0]; +}; + +#define TASK_DATA(taskp) (void *)TASK_PTR((taskp)->data) +#define TASK_PARENT(taskp) (struct Task *)TASK_PTR((taskp)->parent) +#define TASK_NEXT(taskp) (struct Task *)TASK_PTR((taskp)->next) +#define TasksDestroyAll() TasksDestroyInPriorityRange(0, 0xFFFF) + +#define TASK_HEAP_SIZE ((0x881) * sizeof(uintptr_t)) + +// NOTE: DO NOT USE, unless ABSOLUTELY necessary for matching!!! +#define TASK_GET_MEMBER(_taskType, _task, _memberType, _memberName) \ + *(_memberType *)((unsigned char *)TASK_DATA(_task) + offsetof(_taskType, _memberName)) +#define TASK_SET_MEMBER(_taskType, _task, _memberType, _memberName, _value) \ + TASK_GET_MEMBER(_taskType, _task, _memberType, _memberName) = (_value); + +extern struct Task gTasks[MAX_TASK_NUM]; +extern struct Task gEmptyTask; +extern struct Task *gTaskPtrs[MAX_TASK_NUM]; +extern s32 gNumTasks; +#if (ENGINE == ENGINE_3) +extern struct Task *gNextTaskToCheckForDestruction; +#endif +extern struct Task *gNextTask; +extern struct Task *gCurTask; +extern u8 gIwramHeap[TASK_HEAP_SIZE]; + +u32 TasksInit(void); +void TasksExec(void); + +#if ENABLE_TASK_LOGGING +#include + +struct Task *TaskCreate(TaskMain taskMain, u16 structSize, u16 priority, u16 flags, TaskDestructor taskDestructor, const char *name); + +// The printout is split so we can still read the input, even if TaskCreate crashes. +#define TaskCreate(taskMain, structSize, priority, flags, taskDestructor) \ + ({ \ + printf("New '%s' (0x%X, %p) ", #taskMain, (u32)structSize, taskMain); \ + struct Task *tt = TaskCreate(taskMain, structSize, priority, flags, taskDestructor, #taskMain); \ + printf("at %p\n", tt); \ + tt; \ + }) +#else +struct Task *TaskCreate(TaskMain taskMain, u16 structSize, u16 priority, u16 flags, TaskDestructor taskDestructor); +#endif // ENABLE_TASK_LOGGING + +void TaskDestroy(struct Task *); +void *IwramMalloc(u16); +void IwramFree(void *p); +void TasksDestroyInPriorityRange(u16, u16); + +#endif // GUARD_TASK_H diff --git a/sa1/include/tilemap.h b/sa1/include/tilemap.h new file mode 100644 index 0000000000..4bb4a00705 --- /dev/null +++ b/sa1/include/tilemap.h @@ -0,0 +1,46 @@ +#ifndef GUARD_TILEMAP_H +#define GUARD_TILEMAP_H + +#define TILE_MASK_INDEX 0x03FF +#define TILE_MASK_X_FLIP 0x0400 +#define TILE_MASK_Y_FLIP 0x0800 +#define TILE_MASK_PALETTE 0xF000 + +// TODO: This should be the type of Collision::metatiles, if that matches anywhere... +typedef struct { +#ifdef M2C + // M2C: Empty structs are not supported. + u16 tile; +#else + u16 index : 10; + u16 xFlip : 1; + u16 yFlip : 1; + u16 pal : 4; +#endif +} Tile; + +typedef struct { + /* 0x00 */ u16 xTiles; + /* 0x02 */ u16 yTiles; + /* 0x04 */ u16 animTileSize; + /* 0x06 */ u8 animFrameCount; + /* 0x07 */ u8 animDelay; + /* 0x08 */ const u8 *tiles; + /* 0x0C */ u32 tilesSize; + /* 0x10 */ const u16 *palette; + /* 0x14 */ u16 palOffset; + /* 0x16 */ u16 palLength; + + // Can be u8* in some instances + // map = metatiles, when using with non-background map layers + /* 0x18 */ const u16 *map; +} Tilemap; /* size = 0x1C */ + +struct MapHeader { + /* 0x00 */ Tilemap tileset; + /* 0x1C */ const MetatileIndexType *metatileMap; + /* 0x20 */ u16 mapWidth; // in Metatiles + /* 0x22 */ u16 mapHeight; // in Metatiles +}; + +#endif // GUARD_TILEMAP_H \ No newline at end of file diff --git a/sa1/include/trig.h b/sa1/include/trig.h new file mode 100644 index 0000000000..87bafb305c --- /dev/null +++ b/sa1/include/trig.h @@ -0,0 +1,33 @@ +#ifndef GUARD_TRIG_H +#define GUARD_TRIG_H + +#include "global.h" + +extern const s16 gSineTable[1280]; + +#define SIN_PERIOD 1024 + +#define CLAMP_SIN_PERIOD(val) \ + ({ \ + s16 clamped = (val) & (SIN_PERIOD - 1); \ + clamped; \ + }) + +#define ONE_CYCLE (SIN_PERIOD - 1) + +#define SIN(radAngle) (gSineTable[(radAngle)]) +#define COS(radAngle) (gSineTable[(radAngle) + 256]) + +#define SIN_24_8(radAngle) Q_2_14_TO_Q_24_8(SIN(radAngle)) +#define COS_24_8(radAngle) Q_2_14_TO_Q_24_8(COS(radAngle)) + +#define DEG_TO_SIN(deg) ((int)((((double)(deg)) / 360.0) * (ONE_CYCLE + 1))) + +// NOTE: Returns a Q_24_8! +#define SIN_DEG(degrees) Q_2_14_TO_Q_24_8(gSineTable[DEG_TO_SIN(degrees)]) +#define COS_DEG(degrees) Q_2_14_TO_Q_24_8(gSineTable[DEG_TO_SIN(degrees) + 256]) + +#define SQUARE(v) ((v) * (v)) +#define CUBE(v) ((v) * (v) * (v)) + +#endif // GUARD_TRIG_H diff --git a/sa1/ldscript.txt b/sa1/ldscript.txt new file mode 100644 index 0000000000..ceefb7bd38 --- /dev/null +++ b/sa1/ldscript.txt @@ -0,0 +1,624 @@ +/* Hack for matching? */ +gNumMusicPlayers = 4; +gMaxLines = 0; + +SECTIONS { + . = 0x8000000; + ROM : + ALIGN(4) { + /* Engine */ + sa2/src/rom_header.o(.text); + sa2/src/crt0.o(.text); + sa2/src/multi_sio_asm.o(.text); + data/rom_header_old.o(.text); + sa2/src/core.o(.text); + sa2/src/main.o(.text); + sa2/src/task.o(.text); + sa2/src/background.o(.text); + sa2/src/sprite.o(.text); + sa2/src/bg_triangles.o(.text); + sa2/src/malloc_ewram.o(.text); + sa2/src/malloc_vram.o(.text); + sa2/src/multi_sio.o(.text); + sa2/src/multi_boot.o(.text); + sa2/src/sio32_multi_load.o(.text); + + /* Game */ + src/game/sa1_sa2_shared/rings_manager.o(.text); + src/game/sa1_sa2_shared/entities_manager.o(.text); + src/game/sa1_sa2_shared/collision_0.o(.text); + src/game/sa1_sa2_shared/collision.o(.text); + src/game/sa1_sa2_shared/palette_loader.o(.text); + src/game/title_screen.o(.text); + src/game/sa1_sa2_shared/unused_level_select.o(.text); + src/game/multiplayer/mode_select.o(.text); + src/game/multiplayer/mode_select_2.o(.text); + src/game/time_attack/menu.o(.text); + src/game/options_menu.o(.text); + src/game/player_data_menu.o(.text); + src/game/sa1_sa2_shared/spot_light_beam_task.o(.text); + src/game/to_be_continued_screen.o(.text); + src/game/sa1_sa2_shared/enemy_defeat_score.o(.text); + src/game/sa1_sa2_shared/demo_manager.o(.text); + src/game/save.o(.text); + src/game/sa1_sa2_shared/unused_flash_task.o(.text); + src/game/multiplayer/mp_player.o(.text); + src/game/multiplayer/indicators.o(.text); + src/game/enemies/bosses_egg_mobile.o(.text); + src/game/enemies/bosses_misc.o(.text); + src/game/nuts_and_bolts_task.o(.text); + src/game/sa1_sa2_shared/spot_lights_manager.o(.text); + src/game/multiplayer/multiplayer_event_mgr.o(.text); + src/game/multiplayer/multiplayer_event_recv_mgr.o(.text); + src/game/multiplayer/results.o(.text); + src/game/multiplayer/results_b.o(.text); + src/game/multiplayer/finish.o(.text); + src/game/sa1_sa2_shared/pause_menu.o(.text); + src/game/multiplayer/results_2.o(.text); + src/game/multiplayer/hud.o(.text); + src/game/mystery_itembox.o(.text); + src/game/multiplayer/unk_0.o(.text); + src/game/multiplayer/unk_1.o(.text); + src/game/enemies/kiki.o(.text); + src/game/enemies/buzzer.o(.text); + src/game/sa1_sa2_shared/collect_ring_effect.o(.text); + src/game/sa1_sa2_shared/itembox.o(.text); + src/game/interactables/stage_goal.o(.text); + src/game/sa1_sa2_shared/dust_cloud.o(.text); + src/game/interactables/spikes.o(.text); + src/game/interactables/checkpoint.o(.text); + src/game/interactables/spring.o(.text); + src/game/interactables/decoration.o(.text); + src/game/interactables/toggle_player_layer.o(.text); + src/game/interactables/grind_rail.o(.text); + src/game/interactables/platform_thin.o(.text); + src/game/sa1_sa2_shared/magnetic_ring.o(.text); + src/game/interactables/platform_crumbling.o(.text); + src/game/interactables/fadein_to_be_continued.o(.text); + src/game/special_stage/temporary_sound_play_task.o(.text); + src/game/enemies/boss_1_egg_hammer_tank.o(.text); + src/game/interactables/breakable_wall.o(.text); + src/game/mp_chao.o(.text); + src/game/egg_rocket_transitions.o(.text); + src/game/special_stage/main.o(.text); + src/game/enemies/boss_2_egg_press.o(.text); + src/game/enemies/boss_3_egg_ball.o(.text); + src/game/enemies/boss_4_egg_spider.o(.text); + src/game/enemies/boss_6_egg_snake.o(.text); + src/game/enemies/boss_x1_egg_wrecker.o(.text); + src/game/enemies/boss_x2_egg_drillster.o(.text); + src/game/enemies/boss_x3_egg_x.o(.text); + + src/game/multiplayer/chao_message.o(.text); + src/game/multiplayer/communication_outcome.o(.text); + src/game/amy_attack_heart_effect.o(.text); + src/game/sa1_sa2_shared/music_manager.o(.text); + src/game/game.o(.text); + src/game/dummy_task.o(.text); + src/game/stage/stage.o(.text); + src/game/stage/camera.o(.text); + src/game/stage/backgrounds/zone_1.o(.text); + src/game/stage/backgrounds/zone_2_interior.o(.text); + src/game/stage/backgrounds/zone_3.o(.text); + src/game/stage/backgrounds/zone_4.o(.text); + src/game/stage/backgrounds/zone_6.o(.text); + src/game/stage/backgrounds/zone_7_act_2.o(.text); + src/game/stage/camera_destroy.o(.text); + src/game/stage/backgrounds/zone_4_init.o(.text); + src/game/stage/backgrounds/zone_5_init.o(.text); + src/game/stage/backgrounds/zone_7_act_1.o(.text); + src/game/stage/backgrounds/zone_7_act_2_init.o(.text); + src/game/stage/backgrounds/zone_2.o(.text); + src/game/stage/backgrounds/zone_5.o(.text); + src/game/stage/backgrounds/zone_3_firework.o(.text); + src/game/stage/backgrounds/zone_6_hblank.o(.text); + src/game/stage/terrain_collision.o(.text); + src/game/stage/mp_sprite_task.o(.text); + src/game/stage/dust_effect_braking.o(.text); + src/game/stage/dust_effect_spindash.o(.text); + src/game/stage/grind_effect_1.o(.text); + src/game/stage/rings_scatter.o(.text); + src/game/stage/player.o(.text); + src/game/stage/player_sonic.o(.text); + src/game/stage/player_tails.o(.text); + src/game/stage/player_knuckles.o(.text); + src/game/stage/player_amy.o(.text); + src/game/stage/player_super_sonic.o(.text); + src/game/stage/item_tasks.o(.text); + src/game/stage/underwater_effects.o(.text); + src/game/water_effects.o(.text); + src/game/stage/screen_shake.o(.text); + sa2/src/input_recorder.o(.text); + src/game/some_task_manager.o(.text); + src/game/interactables/half_pipe.o(.text); + src/game/interactables/034.o(.text); + src/game/interactables/mini_loop_boost.o(.text); + src/game/interactables/water_bridge.o(.text); + src/game/interactables/water_bridge_splash.o(.text); + src/game/interactables/mini_loop.o(.text); + src/game/interactables/039.o(.text); + src/game/enemies/boss_5_mecha_knuckles.o(.text); + src/game/enemies/boss_xtra_super_egg_robot.o(.text); + src/game/stage/ui_rendering.o(.text); + src/game/stage/ui.o(.text); + src/game/stage/trapped_animals.o(.text); + src/game/stage/ui_z.o(.text); + src/game/game_over.o(.text); + src/game/stage/results.o(.text); + src/game/player_name_input_menu.o(.text); + src/game/character_select.o(.text); + src/game/time_over.o(.text); + src/game/special_stage/game_2_0.o(.text); + src/game/game_2_1.o(.text); + src/game/staff_credits.o(.text); + src/game/sound_test.o(.text); + src/game/vs_record.o(.text); + src/game/time_attack_record.o(.text); + src/game/course_select.o(.text); + src/game/game_2_3.o(.text); + src/game/intro_animation.o(.text); + src/game/extra_stage_results.o(.text); + src/game/special_stage/intro.o(.text); + src/game/collect_chaos_emeralds_msg.o(.text); + src/game/time_attack/results.o(.text); + src/game/time_attack/lobby.o(.text); + src/game/edit_language_screen.o(.text); + src/game/multiplayer/continue_screen.o(.text); + src/game/time_attack/records.o(.text); + + src/game/enemies/gamigami.o(.text); + src/game/enemies/rhinotank.o(.text); + src/game/enemies/kerokero.o(.text); + src/game/enemies/hanabii.o(.text); + src/game/enemies/pierrot.o(.text); + src/game/enemies/slot.o(.text); + src/game/enemies/leon.o(.text); + src/game/enemies/wamu.o(.text); + src/game/enemies/mirror.o(.text); + src/game/enemies/oct.o(.text); + src/game/enemies/senbon.o(.text); + src/game/enemies/fireball.o(.text); + src/game/enemies/mole.o(.text); + src/game/enemies/yukimaru.o(.text); + src/game/enemies/drisame.o(.text); + src/game/enemies/kuraa.o(.text); + src/game/enemies/pen_mk1.o(.text); + src/game/enemies/tentou.o(.text); + + src/game/interactables/trampoline.o(.text); + src/game/interactables/bounce_block.o(.text); + src/game/interactables/incline_ramp.o(.text); + src/game/interactables/waterfall.o(.text); + src/game/interactables/shrubbery.o(.text); + src/game/interactables/booster.o(.text); + src/game/interactables/red_flag_and_pole.o(.text); + src/game/interactables/forced_slide.o(.text); + src/game/interactables/bumpers.o(.text); + src/game/interactables/flippers.o(.text); + src/game/interactables/platform_square.o(.text); + src/game/interactables/sega_sonic_letters.o(.text); + src/game/interactables/party_balloon.o(.text); + src/game/interactables/ship_swing.o(.text); + src/game/interactables/platform_spiked.o(.text); + src/game/interactables/bowl.o(.text); + src/game/interactables/panel_gate.o(.text); + src/game/interactables/marble_track.o(.text); + src/game/interactables/conveyor_belt_movement.o(.text); + src/game/interactables/toggle_player_visibility.o(.text); + src/game/interactables/wall_bumper.o(.text); + src/game/interactables/teleport_orb.o(.text); + src/game/interactables/flipper_small_blue.o(.text); + src/game/interactables/carousel.o(.text); + src/game/interactables/hook_rail.o(.text); + src/game/interactables/swinging_hook.o(.text); + src/game/interactables/security_gate.o(.text); + src/game/interactables/swing_rope.o(.text); + src/game/interactables/steam_exhaust.o(.text); + src/game/interactables/crane_claw_and_lift.o(.text); + src/game/interactables/moving_spring.o(.text); + src/game/interactables/iron_ball.o(.text); + src/game/interactables/hang_bar.o(.text); + src/game/interactables/skating_stone.o(.text); + src/game/interactables/platforms_085_089.o(.text); + src/game/interactables/run_wheel.o(.text); + src/game/interactables/torch.o(.text); + src/game/interactables/toggle_player_float.o(.text); + src/game/interactables/ferris_wheel.o(.text); + src/game/interactables/boulder_spawner.o(.text); + src/game/interactables/spiked_barrel.o(.text); + src/game/interactables/air_bubbles.o(.text); + src/game/interactables/ice_block.o(.text); + src/game/interactables/096.o(.text); + src/game/interactables/updraft.o(.text); + src/game/interactables/underwater_lava_platform.o(.text); + src/game/interactables/conveyor_belt_object.o(.text); + src/game/interactables/special_spring.o(.text); + src/game/interactables/propeller.o(.text); + src/game/interactables/small_fall_block.o(.text); + src/game/interactables/lava.o(.text); + src/game/interactables/track.o(.text); + src/game/interactables/107.o(.text); + src/game/interactables/spring_hiding.o(.text); + src/game/interactables/toggle_gravity.o(.text); + src/game/interactables/pipe.o(.text); + src/game/interactables/maze_air_corner.o(.text); + src/game/interactables/113.o(.text); + + /* Libs */ + sa2/src/lib/m4a/m4a0.o(.text); + sa2/src/lib/m4a/m4a.o(.text); + src/lib/agb_flash/agb_flash.o(.text); + sa2/src/lib/agb_flash/agb_flash_le_512k.o(.text); + sa2/src/lib/agb_flash/agb_flash_mx_512k.o(.text); + sa2/src/lib/agb_flash/agb_flash_at_512k.o(.text); + + *libagbsyscall.a:ArcTan2.o(.text); + *libagbsyscall.a:CpuFastSet.o(.text); + *libagbsyscall.a:CpuSet.o(.text); + *libagbsyscall.a:Div.o(.text); + *libagbsyscall.a:Mod.o(.text); + *libagbsyscall.a:LZ77UnCompWram.o(.text); + *libagbsyscall.a:MultiBoot.o(.text); + *libagbsyscall.a:RLUnCompWram.o(.text); + *libagbsyscall.a:SoftReset.o(.text); + *libagbsyscall.a:Sqrt.o(.text); + *libagbsyscall.a:VBlankIntrWait.o(.text); + *libagbsyscall.a:SoftResetExram.o(.text); + + *libgcc.a:_call_via_rX.o(.text); + *libgcc.a:_divdi3.o(.text); + *libgcc.a:_divsi3.o(.text); + *libgcc.a:_dvmd_tls.o(.text); + *libgcc.a:_modsi3.o(.text); + *libgcc.a:_udivsi3.o(.text); + *libgcc.a:_umodsi3.o(.text); + *libgcc.a:dp-bit.o(.text); + *libgcc.a:fp-bit.o(.text); + *libgcc.a:_lshrdi3.o(.text); + *libgcc.a:_muldi3.o(.text); + *libgcc.a:_negdi2.o(.text); + *libgcc.a:_udivsi3.o(.text); + *libc.a:memcpy.o(.text); + *libc.a:memset.o(.text); + + /* Data */ + + sa2/src/core.o(.rodata); + sa2/src/background.o(.rodata); + sa2/src/trig.o(.rodata); + sa2/src/sprite.o(.rodata); + sa2/src/bg_triangles.o(.rodata); + sa2/src/multi_sio.o(.rodata); + sa2/src/sio32_multi_load.o(.rodata); + src/data/tileset_debug_ascii.o(.rodata); + src/game/save.o(.rodata); + data/chao_garden.o(.rodata); + src/data/entity_tables.o(.rodata); + src/game/sa1_sa2_shared/entities_manager.o(.rodata); + src/game/sa1_sa2_shared/itembox.o(.rodata); + src/game/title_screen.o(.rodata); + src/game/sa1_sa2_shared/unused_level_select.o(.rodata); + src/game/multiplayer/mode_select.o(.rodata); + src/game/time_attack/menu.o(.rodata); + src/game/options_menu.o(.rodata); + src/game/player_data_menu.o(.rodata); + src/game/sa1_sa2_shared/unused_flash_task.o(.rodata); + data/data_0_1_2.o(.rodata); + src/game/multiplayer/multiplayer_event_mgr.o(.rodata); + src/game/multiplayer/results_b.o(.rodata); + src/game/multiplayer/results.o(.rodata); + src/game/multiplayer/finish.o(.rodata); + src/game/multiboot/collect_rings/time_display.o(.rodata); + src/game/mystery_itembox.o(.rodata); + src/game/interactables/spring.o(.rodata); + src/game/interactables/platform_thin.o(.rodata); + src/game/interactables/platform_crumbling.o(.rodata); + data/data_0_1_4.o(.rodata); + src/game/mp_chao.o(.rodata); + src/data/tilemap_data_0.o(.rodata); + src/data/sprite_tables.o(.rodata); + src/data/animations/animations.o(.rodata); + src/data/animations/animation_table.o(.data); + src/data/sprite_dimensions.o(.rodata); + src/data/oam_data.o(.rodata); + src/data/obj_palettes.o(.rodata); + data/obj_gfx.o(.rodata); + src/game/special_stage/main.o(.rodata); + data/data_0_2.o(.rodata); + src/data/tilemaps_special_stage.o(.rodata); + src/data/tilemaps_special_stage.o(.data); + data/data_0_3.o(.rodata); + src/data/tilemap_data_2.o(.rodata); + data/data_0_3_2.o(.rodata); + src/game/multiplayer/communication_outcome.o(.rodata); + src/game/amy_attack_heart_effect.o(.rodata); + src/game/sa1_sa2_shared/music_manager.o(.rodata); + src/game/stage/stage.o(.rodata); + src/game/stage/camera.o(.rodata); + src/data/tilemap_table.o(.rodata); + src/game/stage/terrain_collision.o(.rodata); + data/data_0_4.o(.rodata); + src/game/enemies/boss_5_mecha_knuckles.o(.rodata); + src/game/enemies/boss_xtra_super_egg_robot.o(.rodata); + src/data/tilemap_data_3.o(.rodata); + data/data_0_5_0.o(.rodata); + src/data/ui_graphics_data.o(.rodata); + data/data_0_5.o(.rodata); + src/data/ui_graphics_table.o(.rodata); + src/game/stage/trapped_animals.o(.rodata); + data/data_0_5_2.o(.rodata); + src/game/character_select.o(.rodata); + src/game/special_stage/game_2_0.o(.rodata); + src/game/game_2_1.o(.rodata); + src/game/staff_credits.o(.rodata); + src/data/credits.o(.rodata); + data/data_sound_test.o(.rodata); + src/game/sound_test.o(.rodata); + data/data_0_6.o(.rodata); + src/game/course_select.o(.rodata); + src/game/game_2_3.o(.rodata); + src/game/intro_animation.o(.rodata); + data/data_0_6_0.o(.rodata); + src/game/time_attack/results.o(.rodata); + data/data_0_6_1.o(.rodata); + src/game/time_attack/records.o(.rodata); + data/data_0_6_2.o(.rodata); + src/game/enemies/kerokero.o(.rodata); + src/game/enemies/drisame.o(.rodata); + data/data_0_7.o(.rodata); + src/game/interactables/red_flag_and_pole.o(.rodata); + src/game/interactables/forced_slide.o(.rodata); + src/game/interactables/sega_sonic_letters.o(.rodata); + src/game/interactables/bowl.o(.rodata); + src/game/interactables/hang_bar.o(.rodata); + src/game/interactables/platforms_085_089.o(.rodata); + src/game/interactables/ferris_wheel.o(.rodata); + src/game/interactables/spiked_barrel.o(.rodata); + src/game/interactables/air_bubbles.o(.rodata); + src/data/entities.o(.rodata); + sa2/src/lib/m4a/m4a_tables.o(.rodata); + data/sound_data.o(.rodata); + sound/songs/song001.o(.rodata); + sound/songs/midi/song002.o(.rodata); + sound/songs/midi/song003.o(.rodata); + sound/songs/midi/song004.o(.rodata); + sound/songs/midi/song005.o(.rodata); + sound/songs/midi/song006.o(.rodata); + sound/songs/midi/song007.o(.rodata); + sound/songs/midi/song008.o(.rodata); + sound/songs/midi/song009.o(.rodata); + sound/songs/midi/song010.o(.rodata); + sound/songs/midi/song011.o(.rodata); + sound/songs/midi/song012.o(.rodata); + sound/songs/midi/song013.o(.rodata); + sound/songs/midi/song014.o(.rodata); + sound/songs/midi/song015.o(.rodata); + sound/songs/midi/song016.o(.rodata); + sound/songs/song017.o(.rodata); + sound/songs/midi/song018.o(.rodata); + sound/songs/midi/song019.o(.rodata); + sound/songs/song020.o(.rodata); + sound/songs/midi/song021.o(.rodata); + sound/songs/midi/song022.o(.rodata); + sound/songs/midi/song023.o(.rodata); + sound/songs/midi/song024.o(.rodata); + sound/songs/midi/song025.o(.rodata); + sound/songs/midi/song026.o(.rodata); + sound/songs/midi/song027.o(.rodata); + sound/songs/midi/song028.o(.rodata); + sound/songs/midi/song029.o(.rodata); + sound/songs/song030.o(.rodata); + sound/songs/midi/song031.o(.rodata); + sound/songs/midi/song032.o(.rodata); + sound/songs/midi/song033.o(.rodata); + sound/songs/midi/song034.o(.rodata); + sound/songs/midi/song035.o(.rodata); + sound/songs/midi/song036.o(.rodata); + sound/songs/midi/song037.o(.rodata); + sound/songs/midi/song038.o(.rodata); + sound/songs/song039.o(.rodata); + sound/songs/song040.o(.rodata); + sound/songs/midi/song041.o(.rodata); + sound/songs/midi/song042.o(.rodata); + sound/songs/midi/mus_sp_stage_trick.o(.rodata); + sound/songs/midi/song044.o(.rodata); + sound/songs/midi/song045.o(.rodata); + sound/songs/midi/song046.o(.rodata); + sound/songs/midi/song047.o(.rodata); + sound/songs/midi/song048.o(.rodata); + sound/songs/midi/song049.o(.rodata); + sound/songs/midi/song050.o(.rodata); + sound/songs/midi/song051.o(.rodata); + sound/songs/midi/song052.o(.rodata); + sound/songs/midi/song053.o(.rodata); + sound/songs/midi/song054.o(.rodata); + sound/songs/midi/song102.o(.rodata); + sound/songs/midi/song103.o(.rodata); + sound/songs/midi/song104.o(.rodata); + sound/songs/midi/song105.o(.rodata); + sound/songs/midi/song106.o(.rodata); + sound/songs/midi/song107.o(.rodata); + sound/songs/midi/song108.o(.rodata); + sound/songs/midi/song109.o(.rodata); + sound/songs/midi/song110.o(.rodata); + sound/songs/midi/song111.o(.rodata); + sound/songs/midi/song112.o(.rodata); + sound/songs/midi/song113.o(.rodata); + sound/songs/midi/song114.o(.rodata); + sound/songs/midi/song115.o(.rodata); + sound/songs/midi/song116.o(.rodata); + sound/songs/midi/se_ring_copy.o(.rodata); + sound/songs/midi/song118.o(.rodata); + sound/songs/midi/song119.o(.rodata); + sound/songs/midi/song120.o(.rodata); + sound/songs/midi/song121.o(.rodata); + sound/songs/midi/song122.o(.rodata); + sound/songs/midi/song123.o(.rodata); + sound/songs/midi/song124.o(.rodata); + sound/songs/midi/song125.o(.rodata); + sound/songs/midi/song126.o(.rodata); + sound/songs/midi/song127.o(.rodata); + sound/songs/midi/song128.o(.rodata); + sound/songs/midi/song129.o(.rodata); + sound/songs/midi/song130.o(.rodata); + sound/songs/midi/song131.o(.rodata); + sound/songs/midi/song132.o(.rodata); + sound/songs/midi/song133.o(.rodata); + sound/songs/midi/song134.o(.rodata); + sound/songs/midi/song135.o(.rodata); + sound/songs/midi/song136.o(.rodata); + sound/songs/midi/song137.o(.rodata); + sound/songs/midi/song138.o(.rodata); + sound/songs/midi/song139.o(.rodata); + sound/songs/midi/song140.o(.rodata); + sound/songs/midi/song141.o(.rodata); + sound/songs/midi/song142.o(.rodata); + sound/songs/midi/song143.o(.rodata); + sound/songs/midi/song144.o(.rodata); + sound/songs/midi/song145.o(.rodata); + sound/songs/midi/song146.o(.rodata); + sound/songs/midi/song147.o(.rodata); + sound/songs/midi/song148.o(.rodata); + sound/songs/midi/song149.o(.rodata); + sound/songs/midi/song150.o(.rodata); + sound/songs/midi/song151.o(.rodata); + sound/songs/midi/song152.o(.rodata); + sound/songs/midi/song153.o(.rodata); + sound/songs/midi/song154.o(.rodata); + sound/songs/midi/song155.o(.rodata); + sound/songs/midi/song156.o(.rodata); + sound/songs/midi/song157.o(.rodata); + sound/songs/midi/song158.o(.rodata); + sound/songs/midi/song159.o(.rodata); + sound/songs/midi/song160.o(.rodata); + sound/songs/midi/song161.o(.rodata); + sound/songs/midi/song162.o(.rodata); + sound/songs/midi/song163.o(.rodata); + sound/songs/midi/song164.o(.rodata); + sound/songs/midi/song166.o(.rodata); + sound/songs/midi/song167.o(.rodata); + sound/songs/midi/song168.o(.rodata); + sound/songs/midi/song169.o(.rodata); + sound/songs/midi/song170.o(.rodata); + sound/songs/midi/song171.o(.rodata); + sound/songs/midi/song172.o(.rodata); + sound/songs/midi/song173.o(.rodata); + sound/songs/midi/song174.o(.rodata); + sound/songs/midi/song175.o(.rodata); + sound/songs/midi/song176.o(.rodata); + sound/songs/midi/song177.o(.rodata); + sound/songs/midi/song178.o(.rodata); + sound/songs/midi/song179.o(.rodata); + sound/songs/midi/song180.o(.rodata); + sound/songs/midi/song181.o(.rodata); + sound/songs/midi/song182.o(.rodata); + sound/songs/midi/song183.o(.rodata); + sound/songs/midi/song184.o(.rodata); + sound/songs/midi/song185.o(.rodata); + sound/songs/midi/song188.o(.rodata); + sound/songs/midi/song189.o(.rodata); + sound/songs/midi/song190.o(.rodata); + sound/songs/midi/song191.o(.rodata); + sound/songs/midi/song192.o(.rodata); + sound/songs/midi/song193.o(.rodata); + sound/songs/midi/song194.o(.rodata); + sound/songs/midi/song195.o(.rodata); + sound/songs/midi/song196.o(.rodata); + sound/songs/midi/song198.o(.rodata); + sound/songs/midi/song199.o(.rodata); + sound/songs/midi/song200.o(.rodata); + sound/songs/midi/song201.o(.rodata); + sound/songs/midi/song202.o(.rodata); + sound/songs/midi/song203.o(.rodata); + sound/songs/midi/song204.o(.rodata); + sound/songs/midi/song205.o(.rodata); + sound/songs/midi/song206.o(.rodata); + sound/songs/midi/song207.o(.rodata); + sound/songs/midi/song208.o(.rodata); + sound/songs/midi/song209.o(.rodata); + sound/songs/midi/song210.o(.rodata); + sound/songs/midi/song211.o(.rodata); + sound/songs/midi/song212.o(.rodata); + sound/songs/midi/song213.o(.rodata); + sound/songs/midi/song214.o(.rodata); + sound/songs/midi/song215.o(.rodata); + sound/songs/midi/song216.o(.rodata); + sound/songs/midi/song217.o(.rodata); + sound/songs/midi/song218.o(.rodata); + sound/songs/midi/song219.o(.rodata); + sound/songs/midi/song220.o(.rodata); + sound/songs/midi/song221.o(.rodata); + sound/songs/midi/song222.o(.rodata); + sound/songs/midi/song223.o(.rodata); + sound/songs/midi/song224.o(.rodata); + sound/songs/midi/song301.o(.rodata); + sound/songs/midi/song302.o(.rodata); + sound/songs/midi/song303.o(.rodata); + sound/songs/midi/song304.o(.rodata); + sound/songs/midi/song305.o(.rodata); + sound/songs/midi/song306.o(.rodata); + sound/songs/midi/song307.o(.rodata); + + src/lib/agb_flash/agb_flash.o(.rodata); + sa2/src/lib/agb_flash/agb_flash_le_512k.o(.rodata); + sa2/src/lib/agb_flash/agb_flash_mx_512k.o(.rodata); + sa2/src/lib/agb_flash/agb_flash_at_512k.o(.rodata); + data/data1.o(.rodata); + src/game/multiplayer/unk_0.o(.rodata); + data/data1_1.o(.rodata); + data/build_info.o(.rodata); + } = 0 + + . = 0x2000000; + EWRAM (NOLOAD) : + ALIGN(4) { + sa2/src/lib/m4a/m4a.o(ewram_data); + sa2/src/malloc_ewram.o(ewram_data); + ewram_end = .; + + . = 0x00033000; gUnknown_02033000 = .; + . = 0x00033004; gUnknown_02033004 = .; + . = 0x00033008; gUnknown_02033008 = .; + . = 0x0003300C; gUnknown_0203300C = .; + . = 0x0003B000; gUnknown_0203B000 = .; + . = 0x0003F000; gUnknown_0203F000 = .; + } + + . = 0x03000000; + IWRAM (NOLOAD) : + ALIGN(4) + { + INCLUDE "../../../sym_iwram.txt" + } + + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + + /* Discard everything not specifically mentioned above. */ + /DISCARD/ : + { + *(*); + } +} diff --git a/sa1/sa1.sha1 b/sa1/sa1.sha1 new file mode 100644 index 0000000000..1975de51bd --- /dev/null +++ b/sa1/sa1.sha1 @@ -0,0 +1 @@ +eb00f101af23d728075ac2117e27ecd8a4b4c3e9 sa1.gba diff --git a/sa1/scripts/disasm.cfg b/sa1/scripts/disasm.cfg new file mode 100644 index 0000000000..e53ccdaedf --- /dev/null +++ b/sa1/scripts/disasm.cfg @@ -0,0 +1,2222 @@ +arm_func 0x08000000 sub_8000000 +arm_func 0x080000c0 sub_80000C0 +thumb_func 0x080003ec sub_80003EC +thumb_func 0x0800089c sub_800089C +thumb_func 0x08000980 sub_8000980 +thumb_func 0x08000c54 sub_8000C54 +thumb_func 0x08000d34 sub_8000D34 +thumb_func 0x08000f44 sub_8000F44 +thumb_func 0x0800116c sub_800116C +thumb_func 0x08001224 sub_8001224 +thumb_func 0x08001314 sub_8001314 +thumb_func 0x080013f8 sub_80013F8 +thumb_func 0x08001494 sub_8001494 +thumb_func 0x080014a8 TasksInit +thumb_func 0x08001588 sub_8001588 +thumb_func 0x08001620 sub_8001620 +thumb_func 0x080016ac sub_80016AC +thumb_func 0x08001780 sub_8001780 +thumb_func 0x080017e8 sub_80017E8 +thumb_func 0x08001864 sub_8001864 +thumb_func 0x08001930 sub_8001930 +thumb_func 0x08001954 sub_8001954 +thumb_func 0x080019c0 sub_80019C0 +thumb_func 0x08001aa4 sub_8001AA4 +thumb_func 0x08001ac8 sub_8001AC8 +thumb_func 0x08002570 sub_8002570 +thumb_func 0x08002580 sub_8002580 +thumb_func 0x0800258c sub_800258C +thumb_func 0x0800258e sub_800258E +thumb_func 0x080025b0 sub_80025B0 +thumb_func 0x08002658 sub_8002658 +thumb_func 0x080027e4 sub_80027E4 +thumb_func 0x08002888 sub_8002888 +thumb_func 0x08002958 sub_8002958 +thumb_func 0x08002e58 sub_8002E58 +thumb_func 0x08002f84 sub_8002F84 +thumb_func 0x080031e8 sub_80031E8 +thumb_func 0x08003288 sub_8003288 +thumb_func 0x0800338c sub_800338C +thumb_func 0x0800344c sub_800344C +thumb_func 0x0800348c sub_800348C +thumb_func 0x080034cc sub_80034CC +thumb_func 0x08003660 sub_8003660 +thumb_func 0x08003710 sub_8003710 +thumb_func 0x080037d0 sub_80037D0 +thumb_func 0x08003a2c sub_8003A2C +thumb_func 0x08003d84 sub_8003D84 +thumb_func 0x08004158 sub_8004158 +thumb_func 0x08004454 sub_8004454 +thumb_func 0x080047fc sub_80047FC +thumb_func 0x08004894 sub_8004894 +thumb_func 0x08004a84 sub_8004A84 +thumb_func 0x08004b9c sub_8004B9C +thumb_func 0x08004efc sub_8004EFC +thumb_func 0x08005170 sub_8005170 +thumb_func 0x080053f0 sub_80053F0 +thumb_func 0x08005674 sub_8005674 +thumb_func 0x08005cfc sub_8005CFC +thumb_func 0x08006194 sub_8006194 +thumb_func 0x08006518 sub_8006518 +thumb_func 0x08006680 sub_8006680 +thumb_func 0x080067a0 sub_80067A0 +thumb_func 0x0800681c sub_800681C +thumb_func 0x080068a0 sub_80068A0 +thumb_func 0x08006a74 sub_8006A74 +thumb_func 0x08006a88 sub_8006A88 +thumb_func 0x08006ae8 sub_8006AE8 +thumb_func 0x08006b54 sub_8006B54 +thumb_func 0x08006c0c sub_8006C0C +thumb_func 0x08006c34 sub_8006C34 +thumb_func 0x08006c60 MultiSioInit +thumb_func 0x08006d54 sub_8006D54 +thumb_func 0x08006e6c sub_8006E6C +thumb_func 0x08006f3c sub_8006F3C +thumb_func 0x080070a8 sub_80070A8 +thumb_func 0x080070c0 sub_80070C0 +thumb_func 0x08007110 sub_8007110 +thumb_func 0x0800762c sub_800762C +thumb_func 0x080076a4 sub_80076A4 +thumb_func 0x080076f8 sub_80076F8 +thumb_func 0x08007838 sub_8007838 +thumb_func 0x08007954 sub_8007954 +thumb_func 0x08007990 sub_8007990 +thumb_func 0x080079a0 sub_80079A0 +thumb_func 0x080079e8 sub_80079E8 +thumb_func 0x08007bcc sub_8007BCC +thumb_func 0x08007c94 sub_8007C94 +thumb_func 0x08007d30 sub_8007D30 +thumb_func 0x08007e3c sub_8007E3C +thumb_func 0x08008744 sub_8008744 +thumb_func 0x08008784 sub_8008784 +thumb_func 0x080088a8 sub_80088A8 +thumb_func 0x08008cec sub_8008CEC +thumb_func 0x080095b4 sub_80095B4 +thumb_func 0x080095cc sub_80095CC +thumb_func 0x080096b0 sub_80096B0 +thumb_func 0x080097e4 sub_80097E4 +thumb_func 0x0800a372 sub_800A372 +thumb_func 0x0800a378 sub_800A378 +thumb_func 0x0800a390 sub_800A390 +thumb_func 0x0800a392 sub_800A392 +thumb_func 0x0800a3a8 sub_800A3A8 +thumb_func 0x0800a6a4 sub_800A6A4 +thumb_func 0x0800a768 sub_800A768 +thumb_func 0x0800a850 sub_800A850 +thumb_func 0x0800abec sub_800ABEC +thumb_func 0x0800afdc sub_800AFDC +thumb_func 0x0800b1d4 sub_800B1D4 +thumb_func 0x0800b2bc sub_800B2BC +thumb_func 0x0800b4f8 sub_800B4F8 +thumb_func 0x0800b798 sub_800B798 +thumb_func 0x0800b8b4 sub_800B8B4 +thumb_func 0x0800ba5c sub_800BA5C +thumb_func 0x0800bcbc sub_800BCBC +thumb_func 0x0800bf10 sub_800BF10 +thumb_func 0x0800bfec sub_800BFEC +thumb_func 0x0800c0e0 sub_800C0E0 +thumb_func 0x0800c1e8 sub_800C1E8 +thumb_func 0x0800c2b8 sub_800C2B8 +thumb_func 0x0800c394 sub_800C394 +thumb_func 0x0800c558 sub_800C558 +thumb_func 0x0800c714 sub_800C714 +thumb_func 0x0800c760 sub_800C760 +thumb_func 0x0800c848 sub_800C848 +thumb_func 0x0800c934 sub_800C934 +thumb_func 0x0800cbbc sub_800CBBC +thumb_func 0x0800ce34 sub_800CE34 +thumb_func 0x0800cf04 sub_800CF04 +thumb_func 0x0800cf90 sub_800CF90 +thumb_func 0x0800cfb8 sub_800CFB8 +thumb_func 0x0800d098 sub_800D098 +thumb_func 0x0800d11c sub_800D11C +thumb_func 0x0800d198 sub_800D198 +thumb_func 0x0800d268 sub_800D268 +thumb_func 0x0800d364 sub_800D364 +thumb_func 0x0800d3c4 sub_800D3C4 +thumb_func 0x0800d40c sub_800D40C +thumb_func 0x0800d434 sub_800D434 +thumb_func 0x0800d450 sub_800D450 +thumb_func 0x0800d498 sub_800D498 +thumb_func 0x0800d4b0 sub_800D4B0 +thumb_func 0x0800d4e0 sub_800D4E0 +thumb_func 0x0800d71c sub_800D71C +thumb_func 0x0800d7ec sub_800D7EC +thumb_func 0x0800d878 sub_800D878 +thumb_func 0x0800d8fc sub_800D8FC +thumb_func 0x0800db6c sub_800DB6C +thumb_func 0x0800dcfc sub_800DCFC +thumb_func 0x0800de44 sub_800DE44 +thumb_func 0x0800dee4 sub_800DEE4 +thumb_func 0x0800df88 sub_800DF88 +thumb_func 0x0800e008 sub_800E008 +thumb_func 0x0800e020 sub_800E020 +thumb_func 0x0800e044 sub_800E044 +thumb_func 0x0800e060 sub_800E060 +thumb_func 0x0800e0c4 sub_800E0C4 +thumb_func 0x0800e128 sub_800E128 +thumb_func 0x0800e220 sub_800E220 +thumb_func 0x0800e34c sub_800E34C +thumb_func 0x0800e470 sub_800E470 +thumb_func 0x0800e648 sub_800E648 +thumb_func 0x0800e798 sub_800E798 +thumb_func 0x0800e868 sub_800E868 +thumb_func 0x0800e934 sub_800E934 +thumb_func 0x0800eb4c sub_800EB4C +thumb_func 0x0800f058 sub_800F058 +thumb_func 0x0800f318 sub_800F318 +thumb_func 0x0800f5f0 sub_800F5F0 +thumb_func 0x0800f9bc sub_800F9BC +thumb_func 0x0800fbf8 sub_800FBF8 +thumb_func 0x0800fcfc sub_800FCFC +thumb_func 0x0800fd9c sub_800FD9C +thumb_func 0x0800feb0 sub_800FEB0 +thumb_func 0x0800fef4 sub_800FEF4 +thumb_func 0x0800ff38 sub_800FF38 +thumb_func 0x0800ff68 sub_800FF68 +thumb_func 0x0800ff94 sub_800FF94 +thumb_func 0x0800ffe0 sub_800FFE0 +thumb_func 0x08010020 sub_8010020 +thumb_func 0x08010048 sub_8010048 +thumb_func 0x08010060 sub_8010060 +thumb_func 0x080100a8 sub_80100A8 +thumb_func 0x080102a8 sub_80102A8 +thumb_func 0x080103c4 sub_80103C4 +thumb_func 0x08010580 sub_8010580 +thumb_func 0x080105d4 sub_80105D4 +thumb_func 0x080105f8 sub_80105F8 +thumb_func 0x0801061c sub_801061C +thumb_func 0x08010b6c sub_8010B6C +thumb_func 0x08010cb4 sub_8010CB4 +thumb_func 0x08010e90 sub_8010E90 +thumb_func 0x08010f00 sub_8010F00 +thumb_func 0x08010f70 sub_8010F70 +thumb_func 0x08010fdc sub_8010FDC +thumb_func 0x0801104c sub_801104C +thumb_func 0x08011104 sub_8011104 +thumb_func 0x0801123c sub_801123C +thumb_func 0x080114a0 sub_80114A0 +thumb_func 0x0801166c sub_801166C +thumb_func 0x08011684 sub_8011684 +thumb_func 0x080116a0 sub_80116A0 +thumb_func 0x080116d8 sub_80116D8 +thumb_func 0x0801171c sub_801171C +thumb_func 0x08011738 sub_8011738 +thumb_func 0x0801176c sub_801176C +thumb_func 0x080117a8 sub_80117A8 +thumb_func 0x08011b7c sub_8011B7C +thumb_func 0x08011c94 sub_8011C94 +thumb_func 0x08011d88 sub_8011D88 +thumb_func 0x08011da0 sub_8011DA0 +thumb_func 0x08011db8 sub_8011DB8 +thumb_func 0x08011e08 sub_8011E08 +thumb_func 0x08011e54 sub_8011E54 +thumb_func 0x080122e4 sub_80122E4 +thumb_func 0x080123e4 sub_80123E4 +thumb_func 0x080124c4 sub_80124C4 +thumb_func 0x0801252c sub_801252C +thumb_func 0x080125c0 sub_80125C0 +thumb_func 0x080126b4 sub_80126B4 +thumb_func 0x08012728 sub_8012728 +thumb_func 0x080127dc sub_80127DC +thumb_func 0x08012848 sub_8012848 +thumb_func 0x080128c0 sub_80128C0 +thumb_func 0x08012a38 sub_8012A38 +thumb_func 0x08012ba8 sub_8012BA8 +thumb_func 0x08012ca8 sub_8012CA8 +thumb_func 0x08012d98 sub_8012D98 +thumb_func 0x08012ea4 sub_8012EA4 +thumb_func 0x08012f6c sub_8012F6C +thumb_func 0x08012fc4 sub_8012FC4 +thumb_func 0x08012fe8 sub_8012FE8 +thumb_func 0x08013078 sub_8013078 +thumb_func 0x080130bc sub_80130BC +thumb_func 0x080130f0 sub_80130F0 +thumb_func 0x08013400 sub_8013400 +thumb_func 0x08013df0 sub_8013DF0 +thumb_func 0x08014144 sub_8014144 +thumb_func 0x0801473c sub_801473C +thumb_func 0x08014d0c sub_8014D0C +thumb_func 0x08015024 sub_8015024 +thumb_func 0x080151ac sub_80151AC +thumb_func 0x080152c8 sub_80152C8 +thumb_func 0x08015674 sub_8015674 +thumb_func 0x08015754 sub_8015754 +thumb_func 0x080157a8 sub_80157A8 +thumb_func 0x08015810 sub_8015810 +thumb_func 0x080158d4 sub_80158D4 +thumb_func 0x08015c5c sub_8015C5C +thumb_func 0x08015d88 sub_8015D88 +thumb_func 0x08015f60 sub_8015F60 +thumb_func 0x08015ffc sub_8015FFC +thumb_func 0x0801615c sub_801615C +thumb_func 0x0801623c sub_801623C +thumb_func 0x08016490 sub_8016490 +thumb_func 0x08016650 sub_8016650 +thumb_func 0x0801685c sub_801685C +thumb_func 0x080168f0 sub_80168F0 +thumb_func 0x08016a14 sub_8016A14 +thumb_func 0x08016b6c sub_8016B6C +thumb_func 0x08016d80 sub_8016D80 +thumb_func 0x08016e54 sub_8016E54 +thumb_func 0x08016f44 sub_8016F44 +thumb_func 0x08017054 sub_8017054 +thumb_func 0x080171bc sub_80171BC +thumb_func 0x08017244 sub_8017244 +thumb_func 0x080172cc sub_80172CC +thumb_func 0x08017400 sub_8017400 +thumb_func 0x0801749c sub_801749C +thumb_func 0x080174dc sub_80174DC +thumb_func 0x08017540 sub_8017540 +thumb_func 0x080175d8 sub_80175D8 +thumb_func 0x0801766c sub_801766C +thumb_func 0x0801769c sub_801769C +thumb_func 0x08017750 sub_8017750 +thumb_func 0x08017800 sub_8017800 +thumb_func 0x0801796c sub_801796C +thumb_func 0x08017a30 sub_8017A30 +thumb_func 0x08017b54 sub_8017B54 +thumb_func 0x08017c04 sub_8017C04 +thumb_func 0x08017f10 sub_8017F10 +thumb_func 0x080181f8 sub_80181F8 +thumb_func 0x0801827c sub_801827C +thumb_func 0x080182fc sub_80182FC +thumb_func 0x08018318 sub_8018318 +thumb_func 0x08018380 sub_8018380 +thumb_func 0x080183d4 sub_80183D4 +thumb_func 0x08018538 sub_8018538 +thumb_func 0x0801874c sub_801874C +thumb_func 0x08018ae0 sub_8018AE0 +thumb_func 0x08018ecc sub_8018ECC +thumb_func 0x08019348 sub_8019348 +thumb_func 0x080196fc sub_80196FC +thumb_func 0x08019c14 sub_8019C14 +thumb_func 0x08019db0 sub_8019DB0 +thumb_func 0x0801a1a4 sub_801A1A4 +thumb_func 0x0801a38c sub_801A38C +thumb_func 0x0801a574 sub_801A574 +thumb_func 0x0801a728 sub_801A728 +thumb_func 0x0801a794 sub_801A794 +thumb_func 0x0801ab34 sub_801AB34 +thumb_func 0x0801b06c sub_801B06C +thumb_func 0x0801b0b8 sub_801B0B8 +thumb_func 0x0801b1b4 sub_801B1B4 +thumb_func 0x0801b574 sub_801B574 +thumb_func 0x0801b6f4 sub_801B6F4 +thumb_func 0x0801bacc sub_801BACC +thumb_func 0x0801bcc4 sub_801BCC4 +thumb_func 0x0801bd64 sub_801BD64 +thumb_func 0x0801c130 sub_801C130 +thumb_func 0x0801c2fc sub_801C2FC +thumb_func 0x0801c3a0 sub_801C3A0 +thumb_func 0x0801c420 sub_801C420 +thumb_func 0x0801c4ec sub_801C4EC +thumb_func 0x0801c5c4 sub_801C5C4 +thumb_func 0x0801c69c sub_801C69C +thumb_func 0x0801c704 sub_801C704 +thumb_func 0x0801c770 sub_801C770 +thumb_func 0x0801c810 sub_801C810 +thumb_func 0x0801c8d4 sub_801C8D4 +thumb_func 0x0801c9d8 sub_801C9D8 +thumb_func 0x0801cb80 sub_801CB80 +thumb_func 0x0801cd80 sub_801CD80 +thumb_func 0x0801cf08 sub_801CF08 +thumb_func 0x0801d0cc sub_801D0CC +thumb_func 0x0801d200 sub_801D200 +thumb_func 0x0801d34c sub_801D34C +thumb_func 0x0801d3dc sub_801D3DC +thumb_func 0x0801d4fc sub_801D4FC +thumb_func 0x0801d680 sub_801D680 +thumb_func 0x0801d7f8 sub_801D7F8 +thumb_func 0x0801d8e4 sub_801D8E4 +thumb_func 0x0801d9f0 sub_801D9F0 +thumb_func 0x0801da88 sub_801DA88 +thumb_func 0x0801db40 sub_801DB40 +thumb_func 0x0801dc84 sub_801DC84 +thumb_func 0x0801ddec sub_801DDEC +thumb_func 0x0801e034 sub_801E034 +thumb_func 0x0801e190 sub_801E190 +thumb_func 0x0801e2c0 sub_801E2C0 +thumb_func 0x0801e3dc sub_801E3DC +thumb_func 0x0801e46c sub_801E46C +thumb_func 0x0801e59c sub_801E59C +thumb_func 0x0801e608 sub_801E608 +thumb_func 0x0801e7c8 sub_801E7C8 +thumb_func 0x0801ec28 sub_801EC28 +thumb_func 0x0801f044 sub_801F044 +thumb_func 0x0801f0e8 sub_801F0E8 +thumb_func 0x0801f180 sub_801F180 +thumb_func 0x0801f298 sub_801F298 +thumb_func 0x0801f680 sub_801F680 +thumb_func 0x0801fa28 sub_801FA28 +thumb_func 0x0801fab8 sub_801FAB8 +thumb_func 0x0801fe00 sub_801FE00 +thumb_func 0x0801fe84 sub_801FE84 +thumb_func 0x0801fed0 sub_801FED0 +thumb_func 0x0801ff70 sub_801FF70 +thumb_func 0x0801ffc4 sub_801FFC4 +thumb_func 0x080200b0 sub_80200B0 +thumb_func 0x08020190 sub_8020190 +thumb_func 0x0802035c sub_802035C +thumb_func 0x08020528 sub_8020528 +thumb_func 0x08020644 sub_8020644 +thumb_func 0x08020958 sub_8020958 +thumb_func 0x08020a4c sub_8020A4C +thumb_func 0x08020b4c sub_8020B4C +thumb_func 0x08020c44 sub_8020C44 +thumb_func 0x08020d44 sub_8020D44 +thumb_func 0x08020e98 sub_8020E98 +thumb_func 0x08020f2c sub_8020F2C +thumb_func 0x08021208 sub_8021208 +thumb_func 0x080214ec sub_80214EC +thumb_func 0x08021608 sub_8021608 +thumb_func 0x08021838 sub_8021838 +thumb_func 0x08021908 sub_8021908 +thumb_func 0x080219a0 sub_80219A0 +thumb_func 0x08021ae4 sub_8021AE4 +thumb_func 0x08021ca0 sub_8021CA0 +thumb_func 0x08021d94 sub_8021D94 +thumb_func 0x08021f50 sub_8021F50 +thumb_func 0x080220fc sub_80220FC +thumb_func 0x080221a8 sub_80221A8 +thumb_func 0x08022354 sub_8022354 +thumb_func 0x08022400 sub_8022400 +thumb_func 0x08022500 sub_8022500 +thumb_func 0x08022594 sub_8022594 +thumb_func 0x08022640 sub_8022640 +thumb_func 0x08022804 sub_8022804 +thumb_func 0x080228d0 sub_80228D0 +thumb_func 0x08022ab4 sub_8022AB4 +thumb_func 0x08022e14 sub_8022E14 +thumb_func 0x08023180 sub_8023180 +thumb_func 0x0802326c sub_802326C +thumb_func 0x080234d0 sub_80234D0 +thumb_func 0x08023698 sub_8023698 +thumb_func 0x080238fc sub_80238FC +thumb_func 0x08023aa4 sub_8023AA4 +thumb_func 0x08023b08 sub_8023B08 +thumb_func 0x08023c88 sub_8023C88 +thumb_func 0x08023ed0 sub_8023ED0 +thumb_func 0x08023efc sub_8023EFC +thumb_func 0x08023f30 sub_8023F30 +thumb_func 0x08023f94 sub_8023F94 +thumb_func 0x08023ff8 sub_8023FF8 +thumb_func 0x0802417c sub_802417C +thumb_func 0x08024448 sub_8024448 +thumb_func 0x08024574 sub_8024574 +thumb_func 0x0802473c sub_802473C +thumb_func 0x0802492c sub_802492C +thumb_func 0x08024b30 sub_8024B30 +thumb_func 0x08024bc8 sub_8024BC8 +thumb_func 0x08024d8c sub_8024D8C +thumb_func 0x08024ea0 sub_8024EA0 +thumb_func 0x08025400 sub_8025400 +thumb_func 0x080255f0 sub_80255F0 +thumb_func 0x08025714 sub_8025714 +thumb_func 0x08025754 sub_8025754 +thumb_func 0x080257a0 sub_80257A0 +thumb_func 0x080258ac sub_80258AC +thumb_func 0x08025920 sub_8025920 +thumb_func 0x08025980 sub_8025980 +thumb_func 0x080259f0 sub_80259F0 +thumb_func 0x08025be0 sub_8025BE0 +thumb_func 0x08025cc4 sub_8025CC4 +thumb_func 0x08025d80 sub_8025D80 +thumb_func 0x08025e6c sub_8025E6C +thumb_func 0x0802611c sub_802611C +thumb_func 0x080264c8 sub_80264C8 +thumb_func 0x08026c44 sub_8026C44 +thumb_func 0x08026ed0 sub_8026ED0 +thumb_func 0x08027100 sub_8027100 +thumb_func 0x080271e4 sub_80271E4 +thumb_func 0x080272d0 sub_80272D0 +thumb_func 0x080273e4 sub_80273E4 +thumb_func 0x080274ac sub_80274AC +thumb_func 0x08027600 sub_8027600 +thumb_func 0x08027714 sub_8027714 +thumb_func 0x08027918 sub_8027918 +thumb_func 0x08027970 sub_8027970 +thumb_func 0x08027a84 sub_8027A84 +thumb_func 0x08028034 sub_8028034 +thumb_func 0x0802816c sub_802816C +thumb_func 0x08028388 sub_8028388 +thumb_func 0x08028518 sub_8028518 +thumb_func 0x080286b0 sub_80286B0 +thumb_func 0x0802888c sub_802888C +thumb_func 0x08028910 sub_8028910 +thumb_func 0x08028a1c sub_8028A1C +thumb_func 0x08028aac sub_8028AAC +thumb_func 0x08028c84 sub_8028C84 +thumb_func 0x08028ce4 sub_8028CE4 +thumb_func 0x08028f20 sub_8028F20 +thumb_func 0x08029070 sub_8029070 +thumb_func 0x08029194 sub_8029194 +thumb_func 0x080294a8 sub_80294A8 +thumb_func 0x080297e8 sub_80297E8 +thumb_func 0x08029860 sub_8029860 +thumb_func 0x080298c0 sub_80298C0 +thumb_func 0x08029908 sub_8029908 +thumb_func 0x080299b0 sub_80299B0 +thumb_func 0x08029a50 sub_8029A50 +thumb_func 0x08029ac4 sub_8029AC4 +thumb_func 0x08029b74 sub_8029B74 +thumb_func 0x08029cdc sub_8029CDC +thumb_func 0x08029e0c sub_8029E0C +thumb_func 0x08029ea8 sub_8029EA8 +thumb_func 0x08029f30 sub_8029F30 +thumb_func 0x08029fa4 sub_8029FA4 +thumb_func 0x0802a068 sub_802A068 +thumb_func 0x0802a134 sub_802A134 +thumb_func 0x0802a248 sub_802A248 +thumb_func 0x0802a4c4 sub_802A4C4 +thumb_func 0x0802a560 sub_802A560 +thumb_func 0x0802a688 sub_802A688 +thumb_func 0x0802a890 sub_802A890 +thumb_func 0x0802a988 sub_802A988 +thumb_func 0x0802aa48 sub_802AA48 +thumb_func 0x0802aaf0 sub_802AAF0 +thumb_func 0x0802aba0 sub_802ABA0 +thumb_func 0x0802ac50 sub_802AC50 +thumb_func 0x0802acf0 sub_802ACF0 +thumb_func 0x0802ad9c sub_802AD9C +thumb_func 0x0802ae40 sub_802AE40 +thumb_func 0x0802b008 sub_802B008 +thumb_func 0x0802b07c sub_802B07C +thumb_func 0x0802b18c sub_802B18C +thumb_func 0x0802b214 sub_802B214 +thumb_func 0x0802b3e4 sub_802B3E4 +thumb_func 0x0802b5dc sub_802B5DC +thumb_func 0x0802b66c sub_802B66C +thumb_func 0x0802b884 sub_802B884 +thumb_func 0x0802bbf0 sub_802BBF0 +thumb_func 0x0802bc6c sub_802BC6C +thumb_func 0x0802be0c sub_802BE0C +thumb_func 0x0802bedc sub_802BEDC +thumb_func 0x0802c04c sub_802C04C +thumb_func 0x0802c0cc sub_802C0CC +thumb_func 0x0802c2dc sub_802C2DC +thumb_func 0x0802c488 sub_802C488 +thumb_func 0x0802c56c sub_802C56C +thumb_func 0x0802c6c4 sub_802C6C4 +thumb_func 0x0802c89c sub_802C89C +thumb_func 0x0802c934 sub_802C934 +thumb_func 0x0802ca90 sub_802CA90 +thumb_func 0x0802d158 sub_802D158 +thumb_func 0x0802d190 sub_802D190 +thumb_func 0x0802d1d8 sub_802D1D8 +thumb_func 0x0802d20c sub_802D20C +thumb_func 0x0802d238 sub_802D238 +thumb_func 0x0802d2f4 sub_802D2F4 +thumb_func 0x0802d37c sub_802D37C +thumb_func 0x0802d3e4 sub_802D3E4 +thumb_func 0x0802d450 sub_802D450 +thumb_func 0x0802d464 sub_802D464 +thumb_func 0x0802d4c4 sub_802D4C4 +thumb_func 0x0802d508 sub_802D508 +thumb_func 0x0802d560 sub_802D560 +thumb_func 0x0802d58c sub_802D58C +thumb_func 0x0802d5ec sub_802D5EC +thumb_func 0x0802d66c sub_802D66C +thumb_func 0x0802d680 sub_802D680 +thumb_func 0x0802d748 sub_802D748 +thumb_func 0x0802d870 sub_802D870 +thumb_func 0x0802d908 sub_802D908 +thumb_func 0x0802d960 sub_802D960 +thumb_func 0x0802db4c sub_802DB4C +thumb_func 0x0802dc3c sub_802DC3C +thumb_func 0x0802ddcc sub_802DDCC +thumb_func 0x0802defc sub_802DEFC +thumb_func 0x0802e130 sub_802E130 +thumb_func 0x0802e290 sub_802E290 +thumb_func 0x0802e3dc sub_802E3DC +thumb_func 0x0802e500 sub_802E500 +thumb_func 0x0802e714 sub_802E714 +thumb_func 0x0802e868 sub_802E868 +thumb_func 0x0802ea8c sub_802EA8C +thumb_func 0x0802ecfc sub_802ECFC +thumb_func 0x0802ef94 sub_802EF94 +thumb_func 0x0802f0d0 sub_802F0D0 +thumb_func 0x0802f168 sub_802F168 +thumb_func 0x0802f4a8 sub_802F4A8 +thumb_func 0x0802f56c sub_802F56C +thumb_func 0x0802f644 sub_802F644 +thumb_func 0x0802f804 sub_802F804 +thumb_func 0x0802f9f8 sub_802F9F8 +thumb_func 0x0802fb2c sub_802FB2C +thumb_func 0x0802fc14 sub_802FC14 +thumb_func 0x0802fe88 sub_802FE88 +thumb_func 0x08030120 sub_8030120 +thumb_func 0x0803020c sub_803020C +thumb_func 0x08030364 sub_8030364 +thumb_func 0x08030414 sub_8030414 +thumb_func 0x0803053c sub_803053C +thumb_func 0x080305a0 sub_80305A0 +thumb_func 0x08030778 sub_8030778 +thumb_func 0x080308a4 sub_80308A4 +thumb_func 0x080309cc sub_80309CC +thumb_func 0x08030a60 sub_8030A60 +thumb_func 0x08030ca4 sub_8030CA4 +thumb_func 0x08030ee4 sub_8030EE4 +thumb_func 0x080311d4 sub_80311D4 +thumb_func 0x08031480 sub_8031480 +thumb_func 0x0803170c sub_803170C +thumb_func 0x08031998 sub_8031998 +thumb_func 0x08031ab4 sub_8031AB4 +thumb_func 0x08031d88 sub_8031D88 +thumb_func 0x08031ed0 sub_8031ED0 +thumb_func 0x08031f74 sub_8031F74 +thumb_func 0x08031fc8 sub_8031FC8 +thumb_func 0x080321c0 sub_80321C0 +thumb_func 0x08032370 sub_8032370 +thumb_func 0x080327c4 sub_80327C4 +thumb_func 0x08032af8 sub_8032AF8 +thumb_func 0x08032d44 sub_8032D44 +thumb_func 0x08032f58 sub_8032F58 +thumb_func 0x0803330c sub_803330C +thumb_func 0x0803341c sub_803341C +thumb_func 0x08033480 sub_8033480 +thumb_func 0x080335c0 sub_80335C0 +thumb_func 0x08033730 sub_8033730 +thumb_func 0x08033878 sub_8033878 +thumb_func 0x08033924 sub_8033924 +thumb_func 0x080339bc sub_80339BC +thumb_func 0x08033aa0 sub_8033AA0 +thumb_func 0x08034098 sub_8034098 +thumb_func 0x080342a0 sub_80342A0 +thumb_func 0x080343e0 sub_80343E0 +thumb_func 0x08034478 sub_8034478 +thumb_func 0x08034644 sub_8034644 +thumb_func 0x08034718 sub_8034718 +thumb_func 0x0803491c sub_803491C +thumb_func 0x08034b7c sub_8034B7C +thumb_func 0x08034ca0 sub_8034CA0 +thumb_func 0x08034ee0 sub_8034EE0 +thumb_func 0x08035010 sub_8035010 +thumb_func 0x08035354 sub_8035354 +thumb_func 0x0803540c sub_803540C +thumb_func 0x080354f4 sub_80354F4 +thumb_func 0x08035588 sub_8035588 +thumb_func 0x08035768 sub_8035768 +thumb_func 0x0803582c sub_803582C +thumb_func 0x0803596c sub_803596C +thumb_func 0x08035aac sub_8035AAC +thumb_func 0x08035b44 sub_8035B44 +thumb_func 0x08035d18 sub_8035D18 +thumb_func 0x08035dd4 sub_8035DD4 +thumb_func 0x08035f70 sub_8035F70 +thumb_func 0x08036150 sub_8036150 +thumb_func 0x0803623c sub_803623C +thumb_func 0x08036478 sub_8036478 +thumb_func 0x080365ac sub_80365AC +thumb_func 0x0803673c sub_803673C +thumb_func 0x08036810 sub_8036810 +thumb_func 0x08036994 sub_8036994 +thumb_func 0x08036b94 sub_8036B94 +thumb_func 0x08036cf4 sub_8036CF4 +thumb_func 0x08036e20 sub_8036E20 +thumb_func 0x08036f9c sub_8036F9C +thumb_func 0x080370b4 sub_80370B4 +thumb_func 0x0803711c sub_803711C +thumb_func 0x080373fc sub_80373FC +thumb_func 0x0803753c sub_803753C +thumb_func 0x0803775c sub_803775C +thumb_func 0x0803803c sub_803803C +thumb_func 0x08038154 sub_8038154 +thumb_func 0x08038420 sub_8038420 +thumb_func 0x08038554 sub_8038554 +thumb_func 0x0803891c sub_803891C +thumb_func 0x08038b38 sub_8038B38 +thumb_func 0x08038bc8 sub_8038BC8 +thumb_func 0x08038c20 sub_8038C20 +thumb_func 0x08038d2c sub_8038D2C +thumb_func 0x08038e34 sub_8038E34 +thumb_func 0x08038f04 sub_8038F04 +thumb_func 0x08039074 sub_8039074 +thumb_func 0x08039108 sub_8039108 +thumb_func 0x0803918c sub_803918C +thumb_func 0x08039264 sub_8039264 +thumb_func 0x0803967c sub_803967C +thumb_func 0x080397a8 sub_80397A8 +thumb_func 0x08039940 sub_8039940 +thumb_func 0x08039a64 sub_8039A64 +thumb_func 0x0803a170 sub_803A170 +thumb_func 0x0803a1d8 sub_803A1D8 +thumb_func 0x0803a46c sub_803A46C +thumb_func 0x0803a54c sub_803A54C +thumb_func 0x0803a594 sub_803A594 +thumb_func 0x0803a950 sub_803A950 +thumb_func 0x0803ab60 sub_803AB60 +thumb_func 0x0803b534 sub_803B534 +thumb_func 0x0803b55e sub_803B55E +thumb_func 0x0803bc64 sub_803BC64 +thumb_func 0x0803be0c sub_803BE0C +thumb_func 0x0803beb8 sub_803BEB8 +thumb_func 0x0803bfe8 sub_803BFE8 +thumb_func 0x0803c130 sub_803C130 +thumb_func 0x0803c1ac sub_803C1AC +thumb_func 0x0803c3e0 sub_803C3E0 +thumb_func 0x0803c5a8 sub_803C5A8 +thumb_func 0x0803c648 sub_803C648 +thumb_func 0x0803c784 sub_803C784 +thumb_func 0x0803cb48 sub_803CB48 +thumb_func 0x0803cb7c sub_803CB7C +thumb_func 0x0803cbc0 sub_803CBC0 +thumb_func 0x0803cd34 sub_803CD34 +thumb_func 0x0803ce00 sub_803CE00 +thumb_func 0x0803ce2c sub_803CE2C +thumb_func 0x0803ce54 sub_803CE54 +thumb_func 0x0803cf9c sub_803CF9C +thumb_func 0x0803d290 sub_803D290 +thumb_func 0x0803d590 sub_803D590 +thumb_func 0x0803d66c sub_803D66C +thumb_func 0x0803d724 sub_803D724 +thumb_func 0x0803dbd4 sub_803DBD4 +thumb_func 0x0803dc48 sub_803DC48 +thumb_func 0x0803dc84 sub_803DC84 +thumb_func 0x0803e094 sub_803E094 +thumb_func 0x0803e0e4 sub_803E0E4 +thumb_func 0x0803e410 sub_803E410 +thumb_func 0x0803e6c4 sub_803E6C4 +thumb_func 0x0803e78c sub_803E78C +thumb_func 0x0803e878 sub_803E878 +thumb_func 0x0803ea24 sub_803EA24 +thumb_func 0x0803eac0 sub_803EAC0 +thumb_func 0x0803ed84 sub_803ED84 +thumb_func 0x0803ee84 sub_803EE84 +thumb_func 0x0803f400 sub_803F400 +thumb_func 0x0803f52c sub_803F52C +thumb_func 0x0803f644 sub_803F644 +thumb_func 0x0803f65c sub_803F65C +thumb_func 0x0803f714 sub_803F714 +thumb_func 0x0803f770 sub_803F770 +thumb_func 0x0803f7a8 sub_803F7A8 +thumb_func 0x0803f8a0 sub_803F8A0 +thumb_func 0x0803f8c0 sub_803F8C0 +thumb_func 0x0803fa74 sub_803FA74 +thumb_func 0x0803fc64 sub_803FC64 +thumb_func 0x0803fd5c sub_803FD5C +thumb_func 0x0803fe44 sub_803FE44 +thumb_func 0x080400b4 sub_80400B4 +thumb_func 0x08040160 sub_8040160 +thumb_func 0x08040198 sub_8040198 +thumb_func 0x0804021c sub_804021C +thumb_func 0x080403dc sub_80403DC +thumb_func 0x080404a0 sub_80404A0 +thumb_func 0x08040570 sub_8040570 +thumb_func 0x080405e4 sub_80405E4 +thumb_func 0x0804061c sub_804061C +thumb_func 0x08040648 sub_8040648 +thumb_func 0x080406cc sub_80406CC +thumb_func 0x080407bc sub_80407BC +thumb_func 0x080408c0 sub_80408C0 +thumb_func 0x08040944 sub_8040944 +thumb_func 0x080409f8 sub_80409F8 +thumb_func 0x08040b10 sub_8040B10 +thumb_func 0x08040c1c sub_8040C1C +thumb_func 0x08040d5c sub_8040D5C +thumb_func 0x08041188 sub_8041188 +thumb_func 0x080415f4 sub_80415F4 +thumb_func 0x08041adc sub_8041ADC +thumb_func 0x08041fc8 sub_8041FC8 +thumb_func 0x08041fe0 sub_8041FE0 +thumb_func 0x08042000 sub_8042000 +thumb_func 0x0804202c sub_804202C +thumb_func 0x08042104 sub_8042104 +thumb_func 0x080421ac sub_80421AC +thumb_func 0x0804221c sub_804221C +thumb_func 0x08042428 sub_8042428 +thumb_func 0x080425c4 sub_80425C4 +thumb_func 0x0804269c sub_804269C +thumb_func 0x08042770 sub_8042770 +thumb_func 0x08042848 sub_8042848 +thumb_func 0x08042900 sub_8042900 +thumb_func 0x08042a68 sub_8042A68 +thumb_func 0x08042b90 sub_8042B90 +thumb_func 0x08042cec sub_8042CEC +thumb_func 0x08042e3c sub_8042E3C +thumb_func 0x08042ec4 sub_8042EC4 +thumb_func 0x08042f6c sub_8042F6C +thumb_func 0x08043088 sub_8043088 +thumb_func 0x08043194 sub_8043194 +thumb_func 0x080432b8 sub_80432B8 +thumb_func 0x080433dc sub_80433DC +thumb_func 0x08043460 sub_8043460 +thumb_func 0x08043578 sub_8043578 +thumb_func 0x08043688 sub_8043688 +thumb_func 0x08043798 sub_8043798 +thumb_func 0x080438a0 sub_80438A0 +thumb_func 0x08043970 sub_8043970 +thumb_func 0x08043a2c sub_8043A2C +thumb_func 0x08043ad8 sub_8043AD8 +thumb_func 0x08043ba8 sub_8043BA8 +thumb_func 0x08043c98 sub_8043C98 +thumb_func 0x08043d40 sub_8043D40 +thumb_func 0x08043ddc sub_8043DDC +thumb_func 0x08043ec0 sub_8043EC0 +thumb_func 0x080440a4 sub_80440A4 +thumb_func 0x08044250 sub_8044250 +thumb_func 0x08044434 sub_8044434 +thumb_func 0x080445a0 sub_80445A0 +thumb_func 0x08044670 sub_8044670 +thumb_func 0x08044750 sub_8044750 +thumb_func 0x080447d8 sub_80447D8 +thumb_func 0x080448d0 sub_80448D0 +thumb_func 0x080449d8 sub_80449D8 +thumb_func 0x08044a6c sub_8044A6C +thumb_func 0x08044d74 sub_8044D74 +thumb_func 0x08044e48 sub_8044E48 +thumb_func 0x08044f7c sub_8044F7C +thumb_func 0x0804516c sub_804516C +thumb_func 0x0804521c sub_804521C +thumb_func 0x08045304 sub_8045304 +thumb_func 0x0804571c sub_804571C +thumb_func 0x0804597c sub_804597C +thumb_func 0x08045b38 sub_8045B38 +thumb_func 0x08045cfc sub_8045CFC +thumb_func 0x08045df0 sub_8045DF0 +thumb_func 0x08046008 sub_8046008 +thumb_func 0x080462fc sub_80462FC +thumb_func 0x08046af4 sub_8046AF4 +thumb_func 0x08046cb8 sub_8046CB8 +thumb_func 0x08046cc4 sub_8046CC4 +thumb_func 0x08046cec sub_8046CEC +thumb_func 0x08046d50 sub_8046D50 +thumb_func 0x08046d9c sub_8046D9C +thumb_func 0x08046de8 sub_8046DE8 +thumb_func 0x08046e34 sub_8046E34 +thumb_func 0x08046e80 sub_8046E80 +thumb_func 0x08046eb0 sub_8046EB0 +thumb_func 0x08046ee0 sub_8046EE0 +thumb_func 0x08046fac sub_8046FAC +thumb_func 0x08047018 sub_8047018 +thumb_func 0x080470ac sub_80470AC +thumb_func 0x080470e8 sub_80470E8 +thumb_func 0x08047134 sub_8047134 +thumb_func 0x080471d4 sub_80471D4 +thumb_func 0x08047224 sub_8047224 +thumb_func 0x0804726c sub_804726C +thumb_func 0x08047280 sub_8047280 +thumb_func 0x080472ac sub_80472AC +thumb_func 0x080472b8 sub_80472B8 +thumb_func 0x080473ac sub_80473AC +thumb_func 0x08047508 sub_8047508 +thumb_func 0x0804756c sub_804756C +thumb_func 0x080475fc sub_80475FC +thumb_func 0x08047668 sub_8047668 +thumb_func 0x08047714 sub_8047714 +thumb_func 0x08047774 sub_8047774 +thumb_func 0x0804780c sub_804780C +thumb_func 0x080478e0 sub_80478E0 +thumb_func 0x0804792c sub_804792C +thumb_func 0x08047990 sub_8047990 +thumb_func 0x08047a3c sub_8047A3C +thumb_func 0x08047b04 sub_8047B04 +thumb_func 0x08047ba0 sub_8047BA0 +thumb_func 0x08047d04 sub_8047D04 +thumb_func 0x08047e18 sub_8047E18 +thumb_func 0x08047e94 sub_8047E94 +thumb_func 0x08047f2c sub_8047F2C +thumb_func 0x08048024 sub_8048024 +thumb_func 0x08048060 sub_8048060 +thumb_func 0x080480c4 sub_80480C4 +thumb_func 0x08048110 sub_8048110 +thumb_func 0x08048148 sub_8048148 +thumb_func 0x080481b8 sub_80481B8 +thumb_func 0x08048230 sub_8048230 +thumb_func 0x080484cc sub_80484CC +thumb_func 0x08048524 sub_8048524 +thumb_func 0x080485cc sub_80485CC +thumb_func 0x08048650 sub_8048650 +thumb_func 0x080486e8 sub_80486E8 +thumb_func 0x08048980 sub_8048980 +thumb_func 0x08048adc sub_8048ADC +thumb_func 0x08048b38 sub_8048B38 +thumb_func 0x08048c3c sub_8048C3C +thumb_func 0x08048cb0 sub_8048CB0 +thumb_func 0x08048d74 sub_8048D74 +thumb_func 0x08048e34 sub_8048E34 +thumb_func 0x08049000 sub_8049000 +thumb_func 0x080491c4 sub_80491C4 +thumb_func 0x08049284 sub_8049284 +thumb_func 0x080492e4 sub_80492E4 +thumb_func 0x08049370 sub_8049370 +thumb_func 0x0804948c sub_804948C +thumb_func 0x080494e8 sub_80494E8 +thumb_func 0x080495f0 sub_80495F0 +thumb_func 0x080497ac sub_80497AC +thumb_func 0x08049854 sub_8049854 +thumb_func 0x08049898 sub_8049898 +thumb_func 0x080499cc sub_80499CC +thumb_func 0x08049a34 sub_8049A34 +thumb_func 0x08049ab8 sub_8049AB8 +thumb_func 0x08049bac sub_8049BAC +thumb_func 0x08049c0c sub_8049C0C +thumb_func 0x08049d7c sub_8049D7C +thumb_func 0x08049e3c sub_8049E3C +thumb_func 0x08049fd0 sub_8049FD0 +thumb_func 0x0804a0b8 sub_804A0B8 +thumb_func 0x0804a1b8 sub_804A1B8 +thumb_func 0x0804a20c sub_804A20C +thumb_func 0x0804a254 sub_804A254 +thumb_func 0x0804a278 sub_804A278 +thumb_func 0x0804a2fc sub_804A2FC +thumb_func 0x0804a37c sub_804A37C +thumb_func 0x0804a498 sub_804A498 +thumb_func 0x0804a54c sub_804A54C +thumb_func 0x0804a5d8 sub_804A5D8 +thumb_func 0x0804a71c sub_804A71C +thumb_func 0x0804a830 sub_804A830 +thumb_func 0x0804a848 sub_804A848 +thumb_func 0x0804a854 sub_804A854 +thumb_func 0x0804a8a8 sub_804A8A8 +thumb_func 0x0804aac4 sub_804AAC4 +thumb_func 0x0804ac4c sub_804AC4C +thumb_func 0x0804ad0c sub_804AD0C +thumb_func 0x0804ae14 sub_804AE14 +thumb_func 0x0804af00 sub_804AF00 +thumb_func 0x0804afcc sub_804AFCC +thumb_func 0x0804b0d8 sub_804B0D8 +thumb_func 0x0804b1fc sub_804B1FC +thumb_func 0x0804b2bc sub_804B2BC +thumb_func 0x0804b32c sub_804B32C +thumb_func 0x0804b370 sub_804B370 +thumb_func 0x0804b420 sub_804B420 +thumb_func 0x0804b570 sub_804B570 +thumb_func 0x0804b5cc sub_804B5CC +thumb_func 0x0804b678 sub_804B678 +thumb_func 0x0804b71c sub_804B71C +thumb_func 0x0804b7c8 sub_804B7C8 +thumb_func 0x0804b86c sub_804B86C +thumb_func 0x0804b994 sub_804B994 +thumb_func 0x0804babc sub_804BABC +thumb_func 0x0804bb98 sub_804BB98 +thumb_func 0x0804bd70 sub_804BD70 +thumb_func 0x0804be7c sub_804BE7C +thumb_func 0x0804bf70 sub_804BF70 +thumb_func 0x0804c02c sub_804C02C +thumb_func 0x0804c12c sub_804C12C +thumb_func 0x0804c1c0 sub_804C1C0 +thumb_func 0x0804c2e8 sub_804C2E8 +thumb_func 0x0804c3cc sub_804C3CC +thumb_func 0x0804c40c sub_804C40C +thumb_func 0x0804c598 sub_804C598 +thumb_func 0x0804c5d8 sub_804C5D8 +thumb_func 0x0804c668 sub_804C668 +thumb_func 0x0804c894 sub_804C894 +thumb_func 0x0804c8ac sub_804C8AC +thumb_func 0x0804ca60 sub_804CA60 +thumb_func 0x0804cb20 sub_804CB20 +thumb_func 0x0804cc14 sub_804CC14 +thumb_func 0x0804ccac sub_804CCAC +thumb_func 0x0804cd00 sub_804CD00 +thumb_func 0x0804cd2c sub_804CD2C +thumb_func 0x0804cd80 sub_804CD80 +thumb_func 0x0804cdf8 sub_804CDF8 +thumb_func 0x0804cedc sub_804CEDC +thumb_func 0x0804cf1c sub_804CF1C +thumb_func 0x0804cf5c sub_804CF5C +thumb_func 0x0804cf88 sub_804CF88 +thumb_func 0x0804cfa0 sub_804CFA0 +thumb_func 0x0804cfe0 sub_804CFE0 +thumb_func 0x0804d02c sub_804D02C +thumb_func 0x0804d060 sub_804D060 +thumb_func 0x0804d13c sub_804D13C +thumb_func 0x0804d178 sub_804D178 +thumb_func 0x0804d308 sub_804D308 +thumb_func 0x0804d4a0 sub_804D4A0 +thumb_func 0x0804d600 sub_804D600 +thumb_func 0x0804d698 sub_804D698 +thumb_func 0x0804d730 sub_804D730 +thumb_func 0x0804d860 sub_804D860 +thumb_func 0x0804d8e8 sub_804D8E8 +thumb_func 0x0804d9f4 sub_804D9F4 +thumb_func 0x0804da7c sub_804DA7C +thumb_func 0x0804db78 sub_804DB78 +thumb_func 0x0804dddc sub_804DDDC +thumb_func 0x0804deb8 sub_804DEB8 +thumb_func 0x0804df50 sub_804DF50 +thumb_func 0x0804e028 sub_804E028 +thumb_func 0x0804e110 sub_804E110 +thumb_func 0x0804e198 sub_804E198 +thumb_func 0x0804e220 sub_804E220 +thumb_func 0x0804e304 sub_804E304 +thumb_func 0x0804e38c sub_804E38C +thumb_func 0x0804e474 sub_804E474 +thumb_func 0x0804e4fc sub_804E4FC +thumb_func 0x0804e594 sub_804E594 +thumb_func 0x0804e8d4 sub_804E8D4 +thumb_func 0x0804eb04 sub_804EB04 +thumb_func 0x0804eb90 sub_804EB90 +thumb_func 0x0804ec60 sub_804EC60 +thumb_func 0x0804ed80 sub_804ED80 +thumb_func 0x0804ee20 sub_804EE20 +thumb_func 0x0804eea8 sub_804EEA8 +thumb_func 0x0804ef18 sub_804EF18 +thumb_func 0x0804efa0 sub_804EFA0 +thumb_func 0x0804f020 sub_804F020 +thumb_func 0x0804f09c sub_804F09C +thumb_func 0x0804f1d4 sub_804F1D4 +thumb_func 0x0804f4bc sub_804F4BC +thumb_func 0x0804f630 sub_804F630 +thumb_func 0x0804f7f4 sub_804F7F4 +thumb_func 0x0804f9b0 sub_804F9B0 +thumb_func 0x0804fa08 sub_804FA08 +thumb_func 0x0804fa70 sub_804FA70 +thumb_func 0x0804fa9c sub_804FA9C +thumb_func 0x0804fac8 sub_804FAC8 +thumb_func 0x0804fb30 sub_804FB30 +thumb_func 0x0804fb7c sub_804FB7C +thumb_func 0x0804fba8 sub_804FBA8 +thumb_func 0x0804fbe4 sub_804FBE4 +thumb_func 0x0804fc28 sub_804FC28 +thumb_func 0x0804fc78 sub_804FC78 +thumb_func 0x0804fca4 sub_804FCA4 +thumb_func 0x0804fcec sub_804FCEC +thumb_func 0x0804fd54 sub_804FD54 +thumb_func 0x0804fdd4 sub_804FDD4 +thumb_func 0x0804fe54 sub_804FE54 +thumb_func 0x08050194 sub_8050194 +thumb_func 0x080504dc sub_80504DC +thumb_func 0x08050888 sub_8050888 +thumb_func 0x080518e8 sub_80518E8 +thumb_func 0x080519e8 sub_80519E8 +thumb_func 0x08051c44 sub_8051C44 +thumb_func 0x08051e38 sub_8051E38 +thumb_func 0x080520b8 sub_80520B8 +thumb_func 0x08052150 sub_8052150 +thumb_func 0x08052340 sub_8052340 +thumb_func 0x080523d4 sub_80523D4 +thumb_func 0x080523f8 sub_80523F8 +thumb_func 0x08052424 sub_8052424 +thumb_func 0x08052468 sub_8052468 +thumb_func 0x08052474 sub_8052474 +thumb_func 0x080524f0 sub_80524F0 +thumb_func 0x08052578 sub_8052578 +thumb_func 0x080525e0 sub_80525E0 +thumb_func 0x0805265c sub_805265C +thumb_func 0x080526c4 sub_80526C4 +thumb_func 0x08052724 sub_8052724 +thumb_func 0x08052780 sub_8052780 +thumb_func 0x080527dc sub_80527DC +thumb_func 0x08052838 sub_8052838 +thumb_func 0x080528ac sub_80528AC +thumb_func 0x08052aa4 sub_8052AA4 +thumb_func 0x08052b84 sub_8052B84 +thumb_func 0x08052c84 sub_8052C84 +thumb_func 0x08052d64 sub_8052D64 +thumb_func 0x08052e40 sub_8052E40 +thumb_func 0x08052ef0 sub_8052EF0 +thumb_func 0x08052f78 sub_8052F78 +thumb_func 0x080530cc sub_80530CC +thumb_func 0x0805321c sub_805321C +thumb_func 0x08053370 sub_8053370 +thumb_func 0x0805345c sub_805345C +thumb_func 0x08053520 sub_8053520 +thumb_func 0x080535c8 sub_80535C8 +thumb_func 0x080535fc sub_80535FC +thumb_func 0x08053674 sub_8053674 +thumb_func 0x080536b0 sub_80536B0 +thumb_func 0x080536e4 sub_80536E4 +thumb_func 0x080538bc sub_80538BC +thumb_func 0x08053a90 sub_8053A90 +thumb_func 0x08053bac sub_8053BAC +thumb_func 0x08053d18 sub_8053D18 +thumb_func 0x08054068 sub_8054068 +thumb_func 0x080541a4 sub_80541A4 +thumb_func 0x080541f0 sub_80541F0 +thumb_func 0x0805423c sub_805423C +thumb_func 0x080543a4 sub_80543A4 +thumb_func 0x08054494 sub_8054494 +thumb_func 0x08054540 sub_8054540 +thumb_func 0x0805463c sub_805463C +thumb_func 0x080546f8 sub_80546F8 +thumb_func 0x080547dc sub_80547DC +thumb_func 0x0805488c sub_805488C +thumb_func 0x08054954 sub_8054954 +thumb_func 0x080549fc sub_80549FC +thumb_func 0x08054a80 sub_8054A80 +thumb_func 0x080550f8 sub_80550F8 +thumb_func 0x08055458 sub_8055458 +thumb_func 0x08055730 sub_8055730 +thumb_func 0x08055798 sub_8055798 +thumb_func 0x08055904 sub_8055904 +thumb_func 0x08055998 sub_8055998 +thumb_func 0x08055aa0 sub_8055AA0 +thumb_func 0x08055b18 sub_8055B18 +thumb_func 0x08055c50 sub_8055C50 +thumb_func 0x08055dd0 sub_8055DD0 +thumb_func 0x08056084 sub_8056084 +thumb_func 0x08056100 sub_8056100 +thumb_func 0x0805618c sub_805618C +thumb_func 0x08056218 sub_8056218 +thumb_func 0x08056348 sub_8056348 +thumb_func 0x0805648c sub_805648C +thumb_func 0x080565c4 sub_80565C4 +thumb_func 0x08056714 sub_8056714 +thumb_func 0x0805676c sub_805676C +thumb_func 0x08056970 sub_8056970 +thumb_func 0x08056ac8 sub_8056AC8 +thumb_func 0x08056ce0 sub_8056CE0 +thumb_func 0x08056d30 sub_8056D30 +thumb_func 0x08056d80 sub_8056D80 +thumb_func 0x08056dd0 sub_8056DD0 +thumb_func 0x08056e64 sub_8056E64 +thumb_func 0x08056ec4 sub_8056EC4 +thumb_func 0x08056f1c sub_8056F1C +thumb_func 0x08056f80 sub_8056F80 +thumb_func 0x08056fd0 sub_8056FD0 +thumb_func 0x08056fe4 sub_8056FE4 +thumb_func 0x080573d4 sub_80573D4 +thumb_func 0x08057888 sub_8057888 +thumb_func 0x08057c3c sub_8057C3C +thumb_func 0x08057d30 sub_8057D30 +thumb_func 0x08058360 sub_8058360 +thumb_func 0x08058830 sub_8058830 +thumb_func 0x080595dc sub_80595DC +thumb_func 0x080597dc sub_80597DC +thumb_func 0x08059f9c sub_8059F9C +thumb_func 0x0805a060 sub_805A060 +thumb_func 0x0805a54c sub_805A54C +thumb_func 0x0805a798 sub_805A798 +thumb_func 0x0805a9a4 sub_805A9A4 +thumb_func 0x0805aaf8 sub_805AAF8 +thumb_func 0x0805ac00 sub_805AC00 +thumb_func 0x0805acd8 sub_805ACD8 +thumb_func 0x0805adf0 sub_805ADF0 +thumb_func 0x0805ae84 sub_805AE84 +thumb_func 0x0805af24 sub_805AF24 +thumb_func 0x0805afc4 sub_805AFC4 +thumb_func 0x0805b11c sub_805B11C +thumb_func 0x0805b1e0 sub_805B1E0 +thumb_func 0x0805b324 sub_805B324 +thumb_func 0x0805b52c sub_805B52C +thumb_func 0x0805b694 sub_805B694 +thumb_func 0x0805b7e4 sub_805B7E4 +thumb_func 0x0805b858 sub_805B858 +thumb_func 0x0805b880 sub_805B880 +thumb_func 0x0805b8c0 sub_805B8C0 +thumb_func 0x0805b930 sub_805B930 +thumb_func 0x0805b984 sub_805B984 +thumb_func 0x0805b9e8 sub_805B9E8 +thumb_func 0x0805bb48 sub_805BB48 +thumb_func 0x0805bc00 sub_805BC00 +thumb_func 0x0805bc94 sub_805BC94 +thumb_func 0x0805c448 sub_805C448 +thumb_func 0x0805c594 sub_805C594 +thumb_func 0x0805c6b0 sub_805C6B0 +thumb_func 0x0805c740 sub_805C740 +thumb_func 0x0805c83c sub_805C83C +thumb_func 0x0805c900 sub_805C900 +thumb_func 0x0805c994 sub_805C994 +thumb_func 0x0805d048 sub_805D048 +thumb_func 0x0805d4f0 sub_805D4F0 +thumb_func 0x0805d720 sub_805D720 +thumb_func 0x0805d81c sub_805D81C +thumb_func 0x0805d8ec sub_805D8EC +thumb_func 0x0805d9e4 sub_805D9E4 +thumb_func 0x0805db04 sub_805DB04 +thumb_func 0x0805dbf0 sub_805DBF0 +thumb_func 0x0805dd10 sub_805DD10 +thumb_func 0x0805de0c sub_805DE0C +thumb_func 0x0805df2c sub_805DF2C +thumb_func 0x0805e018 sub_805E018 +thumb_func 0x0805e1e8 sub_805E1E8 +thumb_func 0x0805e400 sub_805E400 +thumb_func 0x0805e698 sub_805E698 +thumb_func 0x0805e888 sub_805E888 +thumb_func 0x0805e9b4 sub_805E9B4 +thumb_func 0x0805eae8 sub_805EAE8 +thumb_func 0x0805f288 sub_805F288 +thumb_func 0x0805f950 sub_805F950 +thumb_func 0x0805fad4 sub_805FAD4 +thumb_func 0x0805fc88 sub_805FC88 +thumb_func 0x0805fd54 sub_805FD54 +thumb_func 0x0805fdb0 sub_805FDB0 +thumb_func 0x0805fde4 sub_805FDE4 +thumb_func 0x0805fe48 sub_805FE48 +thumb_func 0x0805feac sub_805FEAC +thumb_func 0x08060088 sub_8060088 +thumb_func 0x0806012c sub_806012C +thumb_func 0x080604ec sub_80604EC +thumb_func 0x0806070c sub_806070C +thumb_func 0x08060874 sub_8060874 +thumb_func 0x08060c88 sub_8060C88 +thumb_func 0x08060dac sub_8060DAC +thumb_func 0x08061144 sub_8061144 +thumb_func 0x080613d0 sub_80613D0 +thumb_func 0x08061480 sub_8061480 +thumb_func 0x08061894 sub_8061894 +thumb_func 0x08061948 sub_8061948 +thumb_func 0x08061e84 sub_8061E84 +thumb_func 0x08062140 sub_8062140 +thumb_func 0x08062540 sub_8062540 +thumb_func 0x080628a4 sub_80628A4 +thumb_func 0x08062a80 sub_8062A80 +thumb_func 0x08062b38 sub_8062B38 +thumb_func 0x08062c28 sub_8062C28 +thumb_func 0x08062cb4 sub_8062CB4 +thumb_func 0x08062e18 sub_8062E18 +thumb_func 0x08062edc sub_8062EDC +thumb_func 0x08062f90 sub_8062F90 +thumb_func 0x080631e8 sub_80631E8 +thumb_func 0x080632b4 sub_80632B4 +thumb_func 0x080634ec sub_80634EC +thumb_func 0x08063638 sub_8063638 +thumb_func 0x08063824 sub_8063824 +thumb_func 0x080638b0 sub_80638B0 +thumb_func 0x08063918 sub_8063918 +thumb_func 0x08063b8c sub_8063B8C +thumb_func 0x08063c4c sub_8063C4C +thumb_func 0x08063d0c sub_8063D0C +thumb_func 0x08063dcc sub_8063DCC +thumb_func 0x08063e8c sub_8063E8C +thumb_func 0x080640c8 sub_80640C8 +thumb_func 0x08064fa0 sub_8064FA0 +thumb_func 0x08064ff8 sub_8064FF8 +thumb_func 0x08065058 sub_8065058 +thumb_func 0x0806515c sub_806515C +thumb_func 0x08065258 sub_8065258 +thumb_func 0x08065444 sub_8065444 +thumb_func 0x0806562c sub_806562C +thumb_func 0x080656a4 sub_80656A4 +thumb_func 0x0806571c sub_806571C +thumb_func 0x08065794 sub_8065794 +thumb_func 0x08065884 sub_8065884 +thumb_func 0x08065f5c sub_8065F5C +thumb_func 0x080661a8 sub_80661A8 +thumb_func 0x080662d0 sub_80662D0 +thumb_func 0x0806636c sub_806636C +thumb_func 0x080663ec sub_80663EC +thumb_func 0x08066478 sub_8066478 +thumb_func 0x08066520 sub_8066520 +thumb_func 0x08066628 sub_8066628 +thumb_func 0x080666e0 sub_80666E0 +thumb_func 0x08066768 sub_8066768 +thumb_func 0x080669a0 sub_80669A0 +thumb_func 0x08066a5c sub_8066A5C +thumb_func 0x08066acc sub_8066ACC +thumb_func 0x08066ba4 sub_8066BA4 +thumb_func 0x08066c78 sub_8066C78 +thumb_func 0x08066d64 sub_8066D64 +thumb_func 0x08066df4 sub_8066DF4 +thumb_func 0x08066e34 sub_8066E34 +thumb_func 0x08066ebc sub_8066EBC +thumb_func 0x08066f14 sub_8066F14 +thumb_func 0x08066f30 sub_8066F30 +thumb_func 0x08066f90 sub_8066F90 +thumb_func 0x08066fdc sub_8066FDC +thumb_func 0x08067020 sub_8067020 +thumb_func 0x08067084 sub_8067084 +thumb_func 0x080670f8 sub_80670F8 +thumb_func 0x080677c4 sub_80677C4 +thumb_func 0x08067824 sub_8067824 +thumb_func 0x08067928 sub_8067928 +thumb_func 0x080679e4 sub_80679E4 +thumb_func 0x08067b9c sub_8067B9C +thumb_func 0x08067c24 sub_8067C24 +thumb_func 0x08067e68 sub_8067E68 +thumb_func 0x08067f9c sub_8067F9C +thumb_func 0x08068004 sub_8068004 +thumb_func 0x0806806c sub_806806C +thumb_func 0x08068148 sub_8068148 +thumb_func 0x08068214 sub_8068214 +thumb_func 0x08068360 sub_8068360 +thumb_func 0x080683d8 sub_80683D8 +thumb_func 0x080684b4 sub_80684B4 +thumb_func 0x080684f4 sub_80684F4 +thumb_func 0x080685c8 sub_80685C8 +thumb_func 0x08068688 sub_8068688 +thumb_func 0x080688e4 sub_80688E4 +thumb_func 0x08068948 sub_8068948 +thumb_func 0x08068b10 sub_8068B10 +thumb_func 0x08068bb0 sub_8068BB0 +thumb_func 0x08068c98 sub_8068C98 +thumb_func 0x08068cd4 sub_8068CD4 +thumb_func 0x08068d0c sub_8068D0C +thumb_func 0x08069100 sub_8069100 +thumb_func 0x08069464 sub_8069464 +thumb_func 0x080694e8 sub_80694E8 +thumb_func 0x080695e8 sub_80695E8 +thumb_func 0x08069634 sub_8069634 +thumb_func 0x0806968c sub_806968C +thumb_func 0x08069710 sub_8069710 +thumb_func 0x080698f4 sub_80698F4 +thumb_func 0x08069964 sub_8069964 +thumb_func 0x08069994 sub_8069994 +thumb_func 0x08069c94 sub_8069C94 +thumb_func 0x08069ee4 sub_8069EE4 +thumb_func 0x08069fdc sub_8069FDC +thumb_func 0x0806a02c sub_806A02C +thumb_func 0x0806a150 sub_806A150 +thumb_func 0x0806a1a4 sub_806A1A4 +thumb_func 0x0806a400 sub_806A400 +thumb_func 0x0806a508 sub_806A508 +thumb_func 0x0806a5bc sub_806A5BC +thumb_func 0x0806a66c sub_806A66C +thumb_func 0x0806a6dc sub_806A6DC +thumb_func 0x0806aa44 sub_806AA44 +thumb_func 0x0806abd4 sub_806ABD4 +thumb_func 0x0806ad44 sub_806AD44 +thumb_func 0x0806af04 sub_806AF04 +thumb_func 0x0806afa4 sub_806AFA4 +thumb_func 0x0806b290 sub_806B290 +thumb_func 0x0806b534 sub_806B534 +thumb_func 0x0806b5a4 sub_806B5A4 +thumb_func 0x0806b670 sub_806B670 +thumb_func 0x0806b81c sub_806B81C +thumb_func 0x0806bbc0 sub_806BBC0 +thumb_func 0x0806bd24 sub_806BD24 +thumb_func 0x0806bdc4 sub_806BDC4 +thumb_func 0x0806bf04 sub_806BF04 +thumb_func 0x0806bf78 sub_806BF78 +thumb_func 0x0806c0c0 sub_806C0C0 +thumb_func 0x0806c2a4 sub_806C2A4 +thumb_func 0x0806c43c sub_806C43C +thumb_func 0x0806c510 sub_806C510 +thumb_func 0x0806c6d0 sub_806C6D0 +thumb_func 0x0806c9a0 sub_806C9A0 +thumb_func 0x0806cbd0 sub_806CBD0 +thumb_func 0x0806cd2c sub_806CD2C +thumb_func 0x0806ce68 sub_806CE68 +thumb_func 0x0806d124 sub_806D124 +thumb_func 0x0806d2b8 sub_806D2B8 +thumb_func 0x0806d4c8 sub_806D4C8 +thumb_func 0x0806d5e8 sub_806D5E8 +thumb_func 0x0806d804 sub_806D804 +thumb_func 0x0806d9ac sub_806D9AC +thumb_func 0x0806da80 sub_806DA80 +thumb_func 0x0806db60 sub_806DB60 +thumb_func 0x0806dc70 sub_806DC70 +thumb_func 0x0806dd80 sub_806DD80 +thumb_func 0x0806e064 sub_806E064 +thumb_func 0x0806e190 sub_806E190 +thumb_func 0x0806e374 sub_806E374 +thumb_func 0x0806e4e0 sub_806E4E0 +thumb_func 0x0806e590 sub_806E590 +thumb_func 0x0806e7e0 sub_806E7E0 +thumb_func 0x0806e990 sub_806E990 +thumb_func 0x0806eab8 sub_806EAB8 +thumb_func 0x0806ed3c sub_806ED3C +thumb_func 0x0806eea4 sub_806EEA4 +thumb_func 0x0806f0e0 sub_806F0E0 +thumb_func 0x0806f2f0 sub_806F2F0 +thumb_func 0x0806fab0 sub_806FAB0 +thumb_func 0x0806fbdc sub_806FBDC +thumb_func 0x0806fe2c sub_806FE2C +thumb_func 0x0806ffa8 sub_806FFA8 +thumb_func 0x08070044 sub_8070044 +thumb_func 0x080701f4 sub_80701F4 +thumb_func 0x0807033c sub_807033C +thumb_func 0x0807051c sub_807051C +thumb_func 0x080706f0 sub_80706F0 +thumb_func 0x0807085c sub_807085C +thumb_func 0x0807090c sub_807090C +thumb_func 0x08070acc sub_8070ACC +thumb_func 0x08070cb4 sub_8070CB4 +thumb_func 0x08070e94 sub_8070E94 +thumb_func 0x0807101c sub_807101C +thumb_func 0x08071160 sub_8071160 +thumb_func 0x08071288 sub_8071288 +thumb_func 0x08071344 sub_8071344 +thumb_func 0x08071440 sub_8071440 +thumb_func 0x08071558 sub_8071558 +thumb_func 0x08071640 sub_8071640 +thumb_func 0x08071734 sub_8071734 +thumb_func 0x080719b8 sub_80719B8 +thumb_func 0x08071bfc sub_8071BFC +thumb_func 0x08071ddc sub_8071DDC +thumb_func 0x08071e8c sub_8071E8C +thumb_func 0x08071f44 sub_8071F44 +thumb_func 0x08072188 sub_8072188 +thumb_func 0x080723c0 sub_80723C0 +thumb_func 0x08072578 sub_8072578 +thumb_func 0x080727b4 sub_80727B4 +thumb_func 0x08072964 sub_8072964 +thumb_func 0x08072a1c sub_8072A1C +thumb_func 0x08072ad0 sub_8072AD0 +thumb_func 0x08072be0 sub_8072BE0 +thumb_func 0x08072e68 sub_8072E68 +thumb_func 0x08072f7c sub_8072F7C +thumb_func 0x08073270 sub_8073270 +thumb_func 0x08073364 sub_8073364 +thumb_func 0x08073608 sub_8073608 +thumb_func 0x080737a8 sub_80737A8 +thumb_func 0x08073998 sub_8073998 +thumb_func 0x08073ac0 sub_8073AC0 +thumb_func 0x08073cc4 sub_8073CC4 +thumb_func 0x08073e94 sub_8073E94 +thumb_func 0x08073f84 sub_8073F84 +thumb_func 0x080741e8 sub_80741E8 +thumb_func 0x080742e0 sub_80742E0 +thumb_func 0x08074510 sub_8074510 +thumb_func 0x0807473c sub_807473C +thumb_func 0x08074928 sub_8074928 +thumb_func 0x08074b80 sub_8074B80 +thumb_func 0x08074c50 sub_8074C50 +thumb_func 0x08074cfc sub_8074CFC +thumb_func 0x08074e10 sub_8074E10 +thumb_func 0x08074ecc sub_8074ECC +thumb_func 0x08074fb0 sub_8074FB0 +thumb_func 0x080750c0 sub_80750C0 +thumb_func 0x080751d8 sub_80751D8 +thumb_func 0x080752a4 sub_80752A4 +thumb_func 0x080753d0 sub_80753D0 +thumb_func 0x0807561c sub_807561C +thumb_func 0x08075a84 sub_8075A84 +thumb_func 0x08075af0 sub_8075AF0 +thumb_func 0x08075c08 sub_8075C08 +thumb_func 0x08075efc sub_8075EFC +thumb_func 0x08076524 sub_8076524 +thumb_func 0x08076730 sub_8076730 +thumb_func 0x08076810 sub_8076810 +thumb_func 0x08076940 sub_8076940 +thumb_func 0x08076a4c sub_8076A4C +thumb_func 0x08076b58 sub_8076B58 +thumb_func 0x08076c64 sub_8076C64 +thumb_func 0x08076d70 sub_8076D70 +thumb_func 0x08076e7c sub_8076E7C +thumb_func 0x08076f88 sub_8076F88 +thumb_func 0x08077550 sub_8077550 +thumb_func 0x08077674 sub_8077674 +thumb_func 0x08077760 sub_8077760 +thumb_func 0x08077918 sub_8077918 +thumb_func 0x080779ec sub_80779EC +thumb_func 0x08077b24 sub_8077B24 +thumb_func 0x08077c5c sub_8077C5C +thumb_func 0x08077e9c sub_8077E9C +thumb_func 0x08077fa4 sub_8077FA4 +thumb_func 0x080780b4 sub_80780B4 +thumb_func 0x080781e4 sub_80781E4 +thumb_func 0x0807834c sub_807834C +thumb_func 0x0807847c sub_807847C +thumb_func 0x080789c4 sub_80789C4 +thumb_func 0x08078af4 sub_8078AF4 +thumb_func 0x08078c34 sub_8078C34 +thumb_func 0x08078da4 sub_8078DA4 +thumb_func 0x08079124 sub_8079124 +thumb_func 0x08079298 sub_8079298 +thumb_func 0x08079414 sub_8079414 +thumb_func 0x080795c4 sub_80795C4 +thumb_func 0x08079948 sub_8079948 +thumb_func 0x08079a98 sub_8079A98 +thumb_func 0x08079c64 sub_8079C64 +thumb_func 0x08079e78 sub_8079E78 +thumb_func 0x0807a1d0 sub_807A1D0 +thumb_func 0x0807a2f8 sub_807A2F8 +thumb_func 0x0807a424 sub_807A424 +thumb_func 0x0807a564 sub_807A564 +thumb_func 0x0807a660 sub_807A660 +thumb_func 0x0807a8c4 sub_807A8C4 +thumb_func 0x0807aa28 sub_807AA28 +thumb_func 0x0807ab14 sub_807AB14 +thumb_func 0x0807ac7c sub_807AC7C +thumb_func 0x0807b0a0 sub_807B0A0 +thumb_func 0x0807b434 sub_807B434 +thumb_func 0x0807b45a sub_807B45A +thumb_func 0x0807bc64 sub_807BC64 +thumb_func 0x0807bca0 sub_807BCA0 +thumb_func 0x0807be28 sub_807BE28 +thumb_func 0x0807c948 sub_807C948 +thumb_func 0x0807c966 sub_807C966 +thumb_func 0x0807c970 sub_807C970 +thumb_func 0x0807c9ce sub_807C9CE +thumb_func 0x0807ca5a sub_807CA5A +thumb_func 0x0807cbf4 sub_807CBF4 +thumb_func 0x0807ccfc sub_807CCFC +thumb_func 0x0807d0b0 sub_807D0B0 +thumb_func 0x0807d190 sub_807D190 +thumb_func 0x0807d3e8 sub_807D3E8 +thumb_func 0x0807d4ec sub_807D4EC +thumb_func 0x0807e168 sub_807E168 +thumb_func 0x0807e16a sub_807E16A +thumb_func 0x0807e2de sub_807E2DE +thumb_func 0x0807e388 sub_807E388 +thumb_func 0x0807e488 sub_807E488 +thumb_func 0x0807e914 sub_807E914 +thumb_func 0x0807ea84 sub_807EA84 +thumb_func 0x0807ebd8 sub_807EBD8 +thumb_func 0x0807ee34 sub_807EE34 +thumb_func 0x0807ef48 sub_807EF48 +thumb_func 0x0807f224 sub_807F224 +thumb_func 0x0807f2ec sub_807F2EC +thumb_func 0x0807f4f0 sub_807F4F0 +thumb_func 0x0807fb2c sub_807FB2C +thumb_func 0x0807fc1c sub_807FC1C +thumb_func 0x08080520 sub_8080520 +thumb_func 0x080805c8 sub_80805C8 +thumb_func 0x08080730 sub_8080730 +thumb_func 0x08080864 sub_8080864 +thumb_func 0x08080b78 sub_8080B78 +thumb_func 0x08081288 sub_8081288 +thumb_func 0x080813f0 sub_80813F0 +thumb_func 0x08081500 sub_8081500 +thumb_func 0x080815f8 sub_80815F8 +thumb_func 0x08081800 sub_8081800 +thumb_func 0x08081910 sub_8081910 +thumb_func 0x08081a08 sub_8081A08 +thumb_func 0x08081c04 sub_8081C04 +thumb_func 0x08081f50 sub_8081F50 +thumb_func 0x080821ac sub_80821AC +thumb_func 0x08082258 sub_8082258 +thumb_func 0x08082880 sub_8082880 +thumb_func 0x08082948 sub_8082948 +thumb_func 0x08083020 sub_8083020 +thumb_func 0x080836c8 sub_80836C8 +thumb_func 0x080837f0 sub_80837F0 +thumb_func 0x08083e74 sub_8083E74 +thumb_func 0x08084184 sub_8084184 +thumb_func 0x08084330 sub_8084330 +thumb_func 0x080843b8 sub_80843B8 +thumb_func 0x08084554 sub_8084554 +thumb_func 0x080845c8 sub_80845C8 +thumb_func 0x080848b8 sub_80848B8 +thumb_func 0x08084924 sub_8084924 +thumb_func 0x080849d0 sub_80849D0 +thumb_func 0x08084efc sub_8084EFC +thumb_func 0x08085568 sub_8085568 +thumb_func 0x08085700 sub_8085700 +thumb_func 0x08085bac sub_8085BAC +thumb_func 0x080865c4 sub_80865C4 +thumb_func 0x08086710 sub_8086710 +thumb_func 0x08087104 sub_8087104 +thumb_func 0x080871a4 sub_80871A4 +thumb_func 0x0808768c sub_808768C +thumb_func 0x08087938 sub_8087938 +thumb_func 0x08088468 sub_8088468 +thumb_func 0x080885bc sub_80885BC +thumb_func 0x080886c4 sub_80886C4 +thumb_func 0x08088824 sub_8088824 +thumb_func 0x08088fe8 sub_8088FE8 +thumb_func 0x08089068 sub_8089068 +thumb_func 0x080891c8 sub_80891C8 +thumb_func 0x08089504 sub_8089504 +thumb_func 0x08089a30 sub_8089A30 +thumb_func 0x08089bf0 sub_8089BF0 +thumb_func 0x08089de0 sub_8089DE0 +thumb_func 0x08089fb4 sub_8089FB4 +thumb_func 0x0808a1b4 sub_808A1B4 +thumb_func 0x0808a394 sub_808A394 +thumb_func 0x0808a4b4 sub_808A4B4 +thumb_func 0x0808a78c sub_808A78C +thumb_func 0x0808a900 sub_808A900 +thumb_func 0x0808aa60 sub_808AA60 +thumb_func 0x0808ac48 sub_808AC48 +thumb_func 0x0808ae60 sub_808AE60 +thumb_func 0x0808b064 sub_808B064 +thumb_func 0x0808b270 sub_808B270 +thumb_func 0x0808b7a0 sub_808B7A0 +thumb_func 0x0808bb44 sub_808BB44 +thumb_func 0x0808bc90 sub_808BC90 +thumb_func 0x0808be08 sub_808BE08 +thumb_func 0x0808c038 sub_808C038 +thumb_func 0x0808c748 sub_808C748 +thumb_func 0x0808c7b4 sub_808C7B4 +thumb_func 0x0808c920 sub_808C920 +thumb_func 0x0808d9e4 sub_808D9E4 +thumb_func 0x0808db9c sub_808DB9C +thumb_func 0x0808de50 sub_808DE50 +thumb_func 0x0808dfe0 sub_808DFE0 +thumb_func 0x0808e4f4 sub_808E4F4 +thumb_func 0x0808e77c sub_808E77C +thumb_func 0x0808e8a0 sub_808E8A0 +thumb_func 0x0808ea80 sub_808EA80 +thumb_func 0x0808ec84 sub_808EC84 +thumb_func 0x0808f0c8 sub_808F0C8 +thumb_func 0x0808f1ec sub_808F1EC +thumb_func 0x0808f288 sub_808F288 +thumb_func 0x0808f710 sub_808F710 +thumb_func 0x0808f7a4 sub_808F7A4 +thumb_func 0x0808f9ac sub_808F9AC +thumb_func 0x0808fe70 sub_808FE70 +thumb_func 0x08090028 sub_8090028 +thumb_func 0x08090334 sub_8090334 +thumb_func 0x080904f8 sub_80904F8 +thumb_func 0x08090740 sub_8090740 +thumb_func 0x080907dc sub_80907DC +thumb_func 0x0809096c sub_809096C +thumb_func 0x08090e04 sub_8090E04 +thumb_func 0x08090f08 sub_8090F08 +thumb_func 0x08091034 sub_8091034 +thumb_func 0x08091118 sub_8091118 +thumb_func 0x0809141c sub_809141C +thumb_func 0x080914f8 sub_80914F8 +thumb_func 0x080915f0 sub_80915F0 +thumb_func 0x08091700 sub_8091700 +thumb_func 0x080917f0 sub_80917F0 +thumb_func 0x08091a78 sub_8091A78 +thumb_func 0x08091c40 sub_8091C40 +thumb_func 0x08091e88 sub_8091E88 +thumb_func 0x0809221c sub_809221C +thumb_func 0x080923e8 sub_80923E8 +thumb_func 0x08092454 sub_8092454 +thumb_func 0x08092564 sub_8092564 +thumb_func 0x08092600 sub_8092600 +thumb_func 0x08092760 sub_8092760 +thumb_func 0x080929a0 sub_80929A0 +thumb_func 0x08092f30 sub_8092F30 +thumb_func 0x080930e0 sub_80930E0 +thumb_func 0x080931c0 sub_80931C0 +thumb_func 0x080932bc sub_80932BC +thumb_func 0x080934f4 sub_80934F4 +thumb_func 0x08093718 sub_8093718 +thumb_func 0x0809380c sub_809380C +thumb_func 0x080938a8 sub_80938A8 +thumb_func 0x080939b0 sub_80939B0 +thumb_func 0x08093b88 sub_8093B88 +thumb_func 0x08093d88 sub_8093D88 +thumb_func 0x08093f60 sub_8093F60 +thumb_func 0x08094194 sub_8094194 +thumb_func 0x08094234 sub_8094234 +thumb_func 0x08094308 sub_8094308 +thumb_func 0x080949b8 sub_80949B8 +thumb_func 0x08094a4c sub_8094A4C +thumb_func 0x08094fd0 sub_8094FD0 +thumb_func 0x080950c4 sub_80950C4 +thumb_func 0x08095158 sub_8095158 +thumb_func 0x08095224 sub_8095224 +thumb_func 0x0809549c sub_809549C +thumb_func 0x08095678 sub_8095678 +thumb_func 0x0809570c sub_809570C +thumb_func 0x080959ac sub_80959AC +thumb_func 0x08095e90 sub_8095E90 +thumb_func 0x08096128 sub_8096128 +thumb_func 0x080963a0 sub_80963A0 +thumb_func 0x08096724 sub_8096724 +thumb_func 0x080968b4 sub_80968B4 +thumb_func 0x080969c8 sub_80969C8 +thumb_func 0x08096d2c sub_8096D2C +thumb_func 0x08096d98 sub_8096D98 +thumb_func 0x08096da8 sub_8096DA8 +thumb_func 0x080971ca sub_80971CA +thumb_func 0x080971e8 sub_80971E8 +thumb_func 0x08097208 sub_8097208 +thumb_func 0x08097238 sub_8097238 +thumb_func 0x08097250 sub_8097250 +thumb_func 0x08097252 sub_8097252 +thumb_func 0x0809726c sub_809726C +thumb_func 0x0809726e sub_809726E +thumb_func 0x080972c8 sub_80972C8 +thumb_func 0x080973fc sub_80973FC +thumb_func 0x080976a0 sub_80976A0 +thumb_func 0x080976b0 sub_80976B0 +thumb_func 0x080976f4 sub_80976F4 +thumb_func 0x08097724 sub_8097724 +thumb_func 0x08097964 sub_8097964 +thumb_func 0x08097980 sub_8097980 +thumb_func 0x080979b4 sub_80979B4 +thumb_func 0x08097a1c sub_8097A1C +thumb_func 0x08097a38 sub_8097A38 +thumb_func 0x08097a58 m4aSoundInit +thumb_func 0x08097ad0 sub_8097AD0 +thumb_func 0x08097adc sub_8097ADC +thumb_func 0x08097b08 sub_8097B08 +thumb_func 0x08097b54 sub_8097B54 +thumb_func 0x08097ba8 sub_8097BA8 +thumb_func 0x08097c10 sub_8097C10 +thumb_func 0x08097c3c sub_8097C3C +thumb_func 0x08097c48 sub_8097C48 +thumb_func 0x08097c74 sub_8097C74 +thumb_func 0x08097ca4 sub_8097CA4 +thumb_func 0x08097ccc sub_8097CCC +thumb_func 0x08097d14 sub_8097D14 +thumb_func 0x08097e30 sub_8097E30 +thumb_func 0x08097e44 sub_8097E44 +thumb_func 0x08097e58 sub_8097E58 +thumb_func 0x08097f50 sub_8097F50 +thumb_func 0x08097ff4 m4aSoundMode +thumb_func 0x0809808c sub_809808C +thumb_func 0x080980e0 sub_80980E0 +thumb_func 0x0809815c sub_809815C +thumb_func 0x08098198 sub_8098198 +thumb_func 0x08098210 sub_8098210 +thumb_func 0x080982f4 sub_80982F4 +thumb_func 0x08098334 sub_8098334 +thumb_func 0x080983fc sub_80983FC +thumb_func 0x08098558 sub_8098558 +thumb_func 0x080985a8 sub_80985A8 +thumb_func 0x08098610 sub_8098610 +thumb_func 0x08098a5c sub_8098A5C +thumb_func 0x08098a84 sub_8098A84 +thumb_func 0x08098aec sub_8098AEC +thumb_func 0x08098b60 sub_8098B60 +thumb_func 0x08098bc8 sub_8098BC8 +thumb_func 0x08098be8 sub_8098BE8 +thumb_func 0x08098c5c sub_8098C5C +thumb_func 0x08098cd0 sub_8098CD0 +thumb_func 0x08098e28 sub_8098E28 +thumb_func 0x08098e48 sub_8098E48 +thumb_func 0x08098e5c sub_8098E5C +thumb_func 0x08098f4c sub_8098F4C +thumb_func 0x08098fe4 IdentifyFlash +thumb_func 0x0809909c SetFlashTimerIntr +thumb_func 0x080990d4 sub_80990D4 +thumb_func 0x0809917c sub_809917C +thumb_func 0x080991c4 sub_80991C4 +thumb_func 0x080991fc sub_80991FC +thumb_func 0x080992ac sub_80992AC +thumb_func 0x08099358 sub_8099358 +thumb_func 0x080993cc sub_80993CC +thumb_func 0x08099440 sub_8099440 +thumb_func 0x08099484 sub_8099484 +thumb_func 0x080994cc sub_80994CC +thumb_func 0x08099540 sub_8099540 +thumb_func 0x080995dc sub_80995DC +thumb_func 0x08099614 sub_8099614 +thumb_func 0x0809975c sub_809975C +thumb_func 0x08099774 sub_8099774 +thumb_func 0x08099818 sub_8099818 +thumb_func 0x08099888 sub_8099888 +thumb_func 0x0809990c sub_809990C +thumb_func 0x08099998 sub_8099998 +thumb_func 0x08099a10 sub_8099A10 +thumb_func 0x08099ad0 sub_8099AD0 +thumb_func 0x08099ad4 sub_8099AD4 +thumb_func 0x08099ad8 sub_8099AD8 +thumb_func 0x08099adc sub_8099ADC +thumb_func 0x08099ae0 sub_8099AE0 +thumb_func 0x08099ae8 sub_8099AE8 +thumb_func 0x08099aec sub_8099AEC +thumb_func 0x08099af4 sub_8099AF4 +thumb_func 0x08099af8 sub_8099AF8 +thumb_func 0x08099b10 sub_8099B10 +thumb_func 0x08099b14 sub_8099B14 +thumb_func 0x08099b1c sub_8099B1C +thumb_func 0x08099b3c sub_8099B3C +thumb_func 0x08099b40 sub_8099B40 +thumb_func 0x08099b44 sub_8099B44 +thumb_func 0x08099b48 sub_8099B48 +thumb_func 0x08099b4c sub_8099B4C +thumb_func 0x08099b50 sub_8099B50 +thumb_func 0x08099b58 sub_8099B58 +thumb_func 0x08099b78 sub_8099B78 +thumb_func 0x08099c0c sub_8099C0C +thumb_func 0x08099c10 sub_8099C10 +thumb_func 0x08099ce0 sub_8099CE0 +thumb_func 0x08099d58 sub_8099D58 +thumb_func 0x08099e18 sub_8099E18 +thumb_func 0x08099f60 sub_8099F60 +thumb_func 0x0809a038 sub_809A038 +thumb_func 0x0809a2a4 sub_809A2A4 +thumb_func 0x0809a2d4 sub_809A2D4 +thumb_func 0x0809a30c sub_809A30C +thumb_func 0x0809a5b4 sub_809A5B4 +thumb_func 0x0809a73c sub_809A73C +thumb_func 0x0809a83c sub_809A83C +thumb_func 0x0809a868 sub_809A868 +thumb_func 0x0809a8b4 sub_809A8B4 +thumb_func 0x0809a900 sub_809A900 +thumb_func 0x0809a94c sub_809A94C +thumb_func 0x0809a998 sub_809A998 +thumb_func 0x0809a9e4 sub_809A9E4 +thumb_func 0x0809aa30 sub_809AA30 +thumb_func 0x0809aaac sub_809AAAC +thumb_func 0x0809ab20 sub_809AB20 +thumb_func 0x0809ab48 sub_809AB48 +thumb_func 0x0809abb4 sub_809ABB4 +thumb_func 0x0809ac6c sub_809AC6C +thumb_func 0x0809ace8 sub_809ACE8 +thumb_func 0x0809ae64 sub_809AE64 +thumb_func 0x0809ae90 sub_809AE90 +thumb_func 0x0809aec4 sub_809AEC4 +thumb_func 0x0809b028 sub_809B028 +thumb_func 0x0809b114 sub_809B114 +thumb_func 0x0809b1f8 sub_809B1F8 +thumb_func 0x0809b220 sub_809B220 +thumb_func 0x0809b268 sub_809B268 +thumb_func 0x0809b2b0 sub_809B2B0 +thumb_func 0x0809b2f8 sub_809B2F8 +thumb_func 0x0809b340 sub_809B340 +thumb_func 0x0809b388 sub_809B388 +thumb_func 0x0809b3d0 sub_809B3D0 +thumb_func 0x0809b430 sub_809B430 +thumb_func 0x0809b498 sub_809B498 +thumb_func 0x0809b4bc sub_809B4BC +thumb_func 0x0809b4d4 sub_809B4D4 +thumb_func 0x0809b500 sub_809B500 +thumb_func 0x0809b534 sub_809B534 +thumb_func 0x0809b5a4 sub_809B5A4 +thumb_func 0x0809b5bc sub_809B5BC +thumb_func 0x0809b61c sub_809B61C + +arm_func 0x080000FC sub_80000FC + +thumb_func 0x08001364 sub_8001364 +thumb_func 0x080019B4 sub_80019B4 +thumb_func 0x08002778 sub_8002778 +thumb_func 0x080032F4 sub_80032F4 +thumb_func 0x080035F4 sub_80035F4 +thumb_func 0x08004AF0 sub_8004AF0 +thumb_func 0x08006950 sub_8006950 +thumb_func 0x0800876C sub_800876C +thumb_func 0x08009670 sub_8009670 +thumb_func 0x0800CE98 sub_800CE98 +thumb_func 0x0800D3E0 sub_800D3E0 +thumb_func 0x0800E404 sub_800E404 +thumb_func 0x080115D4 sub_80115D4 +thumb_func 0x080116BC sub_80116BC +thumb_func 0x08011DD0 sub_8011DD0 +thumb_func 0x080122D0 sub_80122D0 +thumb_func 0x080128AC sub_80128AC +thumb_func 0x08012C34 sub_8012C34 +thumb_func 0x08015728 sub_8015728 +thumb_func 0x08015E6C sub_8015E6C +thumb_func 0x08017334 sub_8017334 +thumb_func 0x080175A8 sub_80175A8 +thumb_func 0x08017658 sub_8017658 +thumb_func 0x080177EC sub_80177EC +thumb_func 0x080178C0 sub_80178C0 +thumb_func 0x080179F4 sub_80179F4 +thumb_func 0x08018428 sub_8018428 +thumb_func 0x08019D18 sub_8019D18 +thumb_func 0x0801A110 sub_801A110 +thumb_func 0x0801A6B8 sub_801A6B8 +thumb_func 0x0801AE88 sub_801AE88 +thumb_func 0x0801B500 sub_801B500 +thumb_func 0x0801BAA0 sub_801BAA0 +thumb_func 0x0801C6E8 sub_801C6E8 +thumb_func 0x0801C980 sub_801C980 +thumb_func 0x0801D3C8 sub_801D3C8 +thumb_func 0x0801DC70 sub_801DC70 +thumb_func 0x0801F164 sub_801F164 +thumb_func 0x0801FDA0 sub_801FDA0 +thumb_func 0x080214D8 sub_80214D8 +thumb_func 0x08021BC0 sub_8021BC0 +thumb_func 0x08021E70 sub_8021E70 +thumb_func 0x08022068 sub_8022068 +thumb_func 0x080222C0 sub_80222C0 +thumb_func 0x0802316C sub_802316C +thumb_func 0x080238E0 sub_80238E0 +thumb_func 0x08024B1C sub_8024B1C +thumb_func 0x08025008 sub_8025008 +thumb_func 0x080255DC sub_80255DC +thumb_func 0x080256D4 sub_80256D4 +thumb_func 0x08025884 sub_8025884 +thumb_func 0x08025F3C sub_8025F3C +thumb_func 0x0802784C sub_802784C +thumb_func 0x08027948 sub_8027948 +thumb_func 0x08027D88 sub_8027D88 +thumb_func 0x08028C70 sub_8028C70 +thumb_func 0x0802C224 sub_802C224 +thumb_func 0x0802D274 sub_802D274 +thumb_func 0x0802D33C sub_802D33C +thumb_func 0x0802D578 sub_802D578 +thumb_func 0x0802D6B4 sub_802D6B4 +thumb_func 0x0802EF08 sub_802EF08 +thumb_func 0x08030724 sub_8030724 +thumb_func 0x08030814 sub_8030814 +thumb_func 0x08031CB4 sub_8031CB4 +thumb_func 0x08034208 sub_8034208 +thumb_func 0x080352C0 sub_80352C0 +thumb_func 0x080357FC sub_80357FC +thumb_func 0x080358C8 sub_80358C8 +thumb_func 0x08036CC4 sub_8036CC4 +thumb_func 0x08036D90 sub_8036D90 +thumb_func 0x080371C8 sub_80371C8 +thumb_func 0x0803A2F8 sub_803A2F8 +thumb_func 0x0803A530 sub_803A530 +thumb_func 0x0803A5D0 sub_803A5D0 +thumb_func 0x0803B570 sub_803B570 +thumb_func 0x0803C184 sub_803C184 +thumb_func 0x0803C93C sub_803C93C +thumb_func 0x0803CE44 sub_803CE44 +thumb_func 0x0803D888 sub_803D888 +thumb_func 0x0803DCCC sub_803DCCC +thumb_func 0x0803F6C4 sub_803F6C4 +thumb_func 0x0803F808 sub_803F808 +thumb_func 0x0803F920 sub_803F920 +thumb_func 0x0803FF84 sub_803FF84 +thumb_func 0x08040278 sub_8040278 +thumb_func 0x08040488 sub_8040488 +thumb_func 0x08040638 sub_8040638 +thumb_func 0x080408AC sub_80408AC +thumb_func 0x080409E4 sub_80409E4 +thumb_func 0x08042020 sub_8042020 +thumb_func 0x08045418 sub_8045418 +thumb_func 0x08045AD8 sub_8045AD8 +thumb_func 0x08046FE8 sub_8046FE8 +thumb_func 0x08047064 sub_8047064 +thumb_func 0x08047150 sub_8047150 +thumb_func 0x08047328 sub_8047328 +thumb_func 0x0804784C sub_804784C +thumb_func 0x08047FA0 sub_8047FA0 +thumb_func 0x080490E8 sub_80490E8 +thumb_func 0x08049208 sub_8049208 +thumb_func 0x08049348 sub_8049348 +thumb_func 0x0804A2B8 sub_804A2B8 +thumb_func 0x0804A320 sub_804A320 +thumb_func 0x0804A3B8 sub_804A3B8 +thumb_func 0x0804BE68 sub_804BE68 +thumb_func 0x0804C3FC sub_804C3FC +thumb_func 0x0804C910 sub_804C910 +thumb_func 0x0804CC68 sub_804CC68 +thumb_func 0x0804CD5C sub_804CD5C +thumb_func 0x0804CFC0 sub_804CFC0 +thumb_func 0x0804D100 sub_804D100 +thumb_func 0x0804DDC4 sub_804DDC4 +thumb_func 0x0804DF38 sub_804DF38 +thumb_func 0x0804F73C sub_804F73C +thumb_func 0x0804F834 sub_804F834 +thumb_func 0x0804FA38 sub_804FA38 +thumb_func 0x0804FAF0 sub_804FAF0 +thumb_func 0x0804FB5C sub_804FB5C +thumb_func 0x0804FDB8 sub_804FDB8 +thumb_func 0x0804FE20 sub_804FE20 +thumb_func 0x08050A88 sub_8050A88 +thumb_func 0x0805202C sub_805202C +thumb_func 0x080523C0 sub_80523C0 +thumb_func 0x080536D4 sub_80536D4 +thumb_func 0x08054A28 sub_8054A28 +thumb_func 0x08055C38 sub_8055C38 +thumb_func 0x08056CB4 sub_8056CB4 +thumb_func 0x08056E24 sub_8056E24 +thumb_func 0x08056F30 sub_8056F30 +thumb_func 0x08056FA0 sub_8056FA0 +thumb_func 0x08057B74 sub_8057B74 +thumb_func 0x0805803C sub_805803C +thumb_func 0x0805BC60 sub_805BC60 +thumb_func 0x0805D684 sub_805D684 +thumb_func 0x0805E758 sub_805E758 +thumb_func 0x0805FF0C sub_805FF0C +thumb_func 0x0806182C sub_806182C +thumb_func 0x080629E8 sub_80629E8 +thumb_func 0x08064244 sub_8064244 +thumb_func 0x08065328 sub_8065328 +thumb_func 0x08065538 sub_8065538 +thumb_func 0x08065810 sub_8065810 +thumb_func 0x08066DC8 sub_8066DC8 +thumb_func 0x08066E58 sub_8066E58 +thumb_func 0x08067050 sub_8067050 +thumb_func 0x08067B14 sub_8067B14 +thumb_func 0x08067F38 sub_8067F38 +thumb_func 0x08068448 sub_8068448 +thumb_func 0x08068538 sub_8068538 +thumb_func 0x08068620 sub_8068620 +thumb_func 0x08068A78 sub_8068A78 +thumb_func 0x080693D0 sub_80693D0 +thumb_func 0x0806954C sub_806954C +thumb_func 0x08069E50 sub_8069E50 +thumb_func 0x0806A124 sub_806A124 +thumb_func 0x0806A680 sub_806A680 +thumb_func 0x0806AF58 sub_806AF58 +thumb_func 0x0806B620 sub_806B620 +thumb_func 0x0806BF38 sub_806BF38 +thumb_func 0x0806C5A8 sub_806C5A8 +thumb_func 0x0806DC5C sub_806DC5C +thumb_func 0x0806FA84 sub_806FA84 +thumb_func 0x080700D4 sub_80700D4 +thumb_func 0x080709A0 sub_80709A0 +thumb_func 0x080713E8 sub_80713E8 +thumb_func 0x080717BC sub_80717BC +thumb_func 0x08071F28 sub_8071F28 +thumb_func 0x08072AB4 sub_8072AB4 +thumb_func 0x080734C0 sub_80734C0 +thumb_func 0x08074364 sub_8074364 +thumb_func 0x08074CE8 sub_8074CE8 +thumb_func 0x080750AC sub_80750AC +thumb_func 0x08075608 sub_8075608 +thumb_func 0x0807650C sub_807650C +thumb_func 0x0807689C sub_807689C +thumb_func 0x0807753C sub_807753C +thumb_func 0x08077D1C sub_8077D1C +thumb_func 0x08078338 sub_8078338 +thumb_func 0x080789B0 sub_80789B0 +thumb_func 0x08079110 sub_8079110 +thumb_func 0x0807A7C8 sub_807A7C8 +thumb_func 0x0807BDC4 sub_807BDC4 +thumb_func 0x0807BE4C sub_807BE4C +thumb_func 0x0807CB28 sub_807CB28 +thumb_func 0x0807D17C sub_807D17C +thumb_func 0x0807EA70 sub_807EA70 +thumb_func 0x0807EE20 sub_807EE20 +thumb_func 0x0807F2D8 sub_807F2D8 +thumb_func 0x0807F968 sub_807F968 +thumb_func 0x0808071C sub_808071C +thumb_func 0x080813DC sub_80813DC +thumb_func 0x08082198 sub_8082198 +thumb_func 0x08082ED8 sub_8082ED8 +thumb_func 0x080836B4 sub_80836B4 +thumb_func 0x08083E60 sub_8083E60 +thumb_func 0x08085038 sub_8085038 +thumb_func 0x08086420 sub_8086420 +thumb_func 0x08086884 sub_8086884 +thumb_func 0x0808730C sub_808730C +thumb_func 0x08088368 sub_8088368 +thumb_func 0x08088810 sub_8088810 +thumb_func 0x08089A14 sub_8089A14 +thumb_func 0x0808A5F0 sub_808A5F0 +thumb_func 0x0808B230 sub_808B230 +thumb_func 0x0808B428 sub_808B428 +thumb_func 0x0808BC7C sub_808BC7C +thumb_func 0x0808C024 sub_808C024 +thumb_func 0x0808CC68 sub_808CC68 +thumb_func 0x0808DE18 sub_808DE18 +thumb_func 0x0808E398 sub_808E398 +thumb_func 0x0808E768 sub_808E768 +thumb_func 0x0808F0B4 sub_808F0B4 +thumb_func 0x0808F274 sub_808F274 +thumb_func 0x0808FE5C sub_808FE5C +thumb_func 0x080907AC sub_80907AC +thumb_func 0x08090DF0 sub_8090DF0 +thumb_func 0x080916C8 sub_80916C8 +thumb_func 0x08092200 sub_8092200 +thumb_func 0x080925EC sub_80925EC +thumb_func 0x08092F14 sub_8092F14 +thumb_func 0x080931AC sub_80931AC +thumb_func 0x08093704 sub_8093704 +thumb_func 0x08093894 sub_8093894 +thumb_func 0x08093F4C sub_8093F4C +thumb_func 0x08095488 sub_8095488 +thumb_func 0x08095D28 sub_8095D28 +thumb_func 0x08096104 sub_8096104 +thumb_func 0x0809656C sub_809656C +thumb_func 0x08096890 sub_8096890 +thumb_func 0x08096B20 sub_8096B20 +thumb_func 0x08096E2C sub_8096E2C +thumb_func 0x080971CC sub_80971CC +thumb_func 0x08097298 sub_8097298 +thumb_func 0x080972F8 sub_80972F8 +thumb_func 0x08097448 sub_8097448 +thumb_func 0x08097924 sub_8097924 +thumb_func 0x0809798C sub_809798C +thumb_func 0x08097BDC sub_8097BDC +thumb_func 0x08097C84 sub_8097C84 +thumb_func 0x080984B0 sub_80984B0 +thumb_func 0x08098EA4 sub_8098EA4 +thumb_func 0x08099078 sub_8099078 +thumb_func 0x08099288 sub_8099288 +thumb_func 0x08099328 sub_8099328 +thumb_func 0x08099738 sub_8099738 +thumb_func 0x08099B5C sub_8099B5C +thumb_func 0x0809AB70 sub_809AB70 + +thumb_func 0x08001370 sub_8001370 +thumb_func 0x08003300 sub_8003300 +thumb_func 0x08004AFC sub_8004AFC +thumb_func 0x08006A08 sub_8006A08 +thumb_func 0x08009684 sub_8009684 +thumb_func 0x08012C70 sub_8012C70 +thumb_func 0x080175C4 sub_80175C4 +thumb_func 0x08018440 sub_8018440 +thumb_func 0x08019D9C sub_8019D9C +thumb_func 0x0801A70C sub_801A70C +thumb_func 0x0801C9AC sub_801C9AC +thumb_func 0x08025190 sub_8025190 +thumb_func 0x08025898 sub_8025898 +thumb_func 0x08027868 sub_8027868 +thumb_func 0x0802795C sub_802795C +thumb_func 0x08028020 sub_8028020 +thumb_func 0x0802D2A8 sub_802D2A8 +thumb_func 0x0802D6FC sub_802D6FC +thumb_func 0x0802EF24 sub_802EF24 +thumb_func 0x08030740 sub_8030740 +thumb_func 0x08030850 sub_8030850 +thumb_func 0x08031CD0 sub_8031CD0 +thumb_func 0x08034224 sub_8034224 +thumb_func 0x08035818 sub_8035818 +thumb_func 0x08035904 sub_8035904 +thumb_func 0x08036CE0 sub_8036CE0 +thumb_func 0x08036DCC sub_8036DCC +thumb_func 0x0803A5EC sub_803A5EC +thumb_func 0x0803B7AC sub_803B7AC +thumb_func 0x0803C198 sub_803C198 +thumb_func 0x0803C974 sub_803C974 +thumb_func 0x0803CE48 sub_803CE48 +thumb_func 0x0803D940 sub_803D940 +thumb_func 0x0803DD00 sub_803DD00 +thumb_func 0x0803F700 sub_803F700 +thumb_func 0x0803F854 sub_803F854 +thumb_func 0x0803F92C sub_803F92C +thumb_func 0x0804550C sub_804550C +thumb_func 0x08047088 sub_8047088 +thumb_func 0x08047190 sub_8047190 +thumb_func 0x08047354 sub_8047354 +thumb_func 0x08047890 sub_8047890 +thumb_func 0x08047FE4 sub_8047FE4 +thumb_func 0x0804A354 sub_804A354 +thumb_func 0x0804A3C0 sub_804A3C0 +thumb_func 0x0804C960 sub_804C960 +thumb_func 0x0804CC94 sub_804CC94 +thumb_func 0x0804CD60 sub_804CD60 +thumb_func 0x0804F760 sub_804F760 +thumb_func 0x0804F860 sub_804F860 +thumb_func 0x0804FA54 sub_804FA54 +thumb_func 0x0804FB10 sub_804FB10 +thumb_func 0x0804FE3C sub_804FE3C +thumb_func 0x08050FB4 sub_8050FB4 +thumb_func 0x080536D8 sub_80536D8 +thumb_func 0x08054A54 sub_8054A54 +thumb_func 0x08056F54 sub_8056F54 +thumb_func 0x08058344 sub_8058344 +thumb_func 0x0805FF38 sub_805FF38 +thumb_func 0x08061830 sub_8061830 +thumb_func 0x080645E4 sub_80645E4 +thumb_func 0x08065814 sub_8065814 +thumb_func 0x08066DCC sub_8066DCC +thumb_func 0x08066E5C sub_8066E5C +thumb_func 0x08067054 sub_8067054 +thumb_func 0x0806844C sub_806844C +thumb_func 0x0806853C sub_806853C +thumb_func 0x08068624 sub_8068624 +thumb_func 0x08069550 sub_8069550 +thumb_func 0x0806A68C sub_806A68C +thumb_func 0x080734E4 sub_80734E4 +thumb_func 0x0807692C sub_807692C +thumb_func 0x0807F98C sub_807F98C +thumb_func 0x08085554 sub_8085554 +thumb_func 0x080865A8 sub_80865A8 +thumb_func 0x08086B4C sub_8086B4C +thumb_func 0x080875C4 sub_80875C4 +thumb_func 0x0808838C sub_808838C +thumb_func 0x0808B254 sub_808B254 +thumb_func 0x0808B5AC sub_808B5AC +thumb_func 0x0808DE34 sub_808DE34 +thumb_func 0x080907C0 sub_80907C0 +thumb_func 0x080916DC sub_80916DC +thumb_func 0x080971D0 sub_80971D0 +thumb_func 0x080972B4 sub_80972B4 +thumb_func 0x08097304 sub_8097304 +thumb_func 0x080979A0 sub_80979A0 +thumb_func 0x08098EB8 sub_8098EB8 +thumb_func 0x08099B60 sub_8099B60 + +thumb_func 0x08001380 sub_8001380 +thumb_func 0x08003310 sub_8003310 +thumb_func 0x08004B0C sub_8004B0C +thumb_func 0x08018490 sub_8018490 +thumb_func 0x0801C9C0 sub_801C9C0 +thumb_func 0x080278C8 sub_80278C8 +thumb_func 0x0802D2BC sub_802D2BC +thumb_func 0x0802EF60 sub_802EF60 +thumb_func 0x08030754 sub_8030754 +thumb_func 0x08030870 sub_8030870 +thumb_func 0x08031D0C sub_8031D0C +thumb_func 0x08034238 sub_8034238 +thumb_func 0x08035938 sub_8035938 +thumb_func 0x08036DEC sub_8036DEC +thumb_func 0x0803A600 sub_803A600 +thumb_func 0x0803B944 sub_803B944 +thumb_func 0x0803D9F8 sub_803D9F8 +thumb_func 0x0803DD78 sub_803DD78 +thumb_func 0x0803F968 sub_803F968 +thumb_func 0x0804A35C sub_804A35C +thumb_func 0x0804C9D4 sub_804C9D4 +thumb_func 0x0804CCA0 sub_804CCA0 +thumb_func 0x0804F788 sub_804F788 +thumb_func 0x0804F888 sub_804F888 +thumb_func 0x08051344 sub_8051344 +thumb_func 0x080648D4 sub_80648D4 +thumb_func 0x08066DD0 sub_8066DD0 +thumb_func 0x0806856C sub_806856C +thumb_func 0x08068628 sub_8068628 +thumb_func 0x08069598 sub_8069598 +thumb_func 0x0806A698 sub_806A698 +thumb_func 0x08086CC0 sub_8086CC0 +thumb_func 0x08087678 sub_8087678 +thumb_func 0x08097318 sub_8097318 +thumb_func 0x08098ECC sub_8098ECC +thumb_func 0x08099B64 sub_8099B64 + +thumb_func 0x08001390 sub_8001390 +thumb_func 0x08003324 sub_8003324 +thumb_func 0x08004B20 sub_8004B20 +thumb_func 0x080184D0 sub_80184D0 +thumb_func 0x08031D54 sub_8031D54 +thumb_func 0x0803424C sub_803424C +thumb_func 0x0803A614 sub_803A614 +thumb_func 0x0803BAD4 sub_803BAD4 +thumb_func 0x0803DB2C sub_803DB2C +thumb_func 0x0803DDBC sub_803DDBC +thumb_func 0x0803F9A8 sub_803F9A8 +thumb_func 0x0804F78C sub_804F78C +thumb_func 0x0804F8D4 sub_804F8D4 +thumb_func 0x08051604 sub_8051604 +thumb_func 0x08064BB4 sub_8064BB4 +thumb_func 0x08068570 sub_8068570 +thumb_func 0x0806862C sub_806862C +thumb_func 0x0806959C sub_806959C +thumb_func 0x08087054 sub_8087054 +thumb_func 0x0809732C sub_809732C +thumb_func 0x08098EE0 sub_8098EE0 +thumb_func 0x08099B68 sub_8099B68 + +thumb_func 0x080013A0 sub_80013A0 +thumb_func 0x08003340 sub_8003340 +thumb_func 0x08004B3C sub_8004B3C +thumb_func 0x0803426C sub_803426C +thumb_func 0x0803A650 sub_803A650 +thumb_func 0x0803DE00 sub_803DE00 +thumb_func 0x0803FA1C sub_803FA1C +thumb_func 0x0804F790 sub_804F790 +thumb_func 0x0804F8D8 sub_804F8D8 +thumb_func 0x08064E84 sub_8064E84 +thumb_func 0x0809735C sub_809735C +thumb_func 0x08098EF4 sub_8098EF4 +thumb_func 0x08099B6C sub_8099B6C + +thumb_func 0x080013B0 sub_80013B0 +thumb_func 0x0800334C sub_800334C +thumb_func 0x08004B48 sub_8004B48 +thumb_func 0x0803A6EC sub_803A6EC +thumb_func 0x0803DE44 sub_803DE44 +thumb_func 0x0804F7B0 sub_804F7B0 +thumb_func 0x0804F8DC sub_804F8DC +thumb_func 0x08097370 sub_8097370 +thumb_func 0x08098F08 sub_8098F08 +thumb_func 0x08099B70 sub_8099B70 + +thumb_func 0x080013BC sub_80013BC +thumb_func 0x0800336C sub_800336C +thumb_func 0x08004B68 sub_8004B68 +thumb_func 0x0803A7D4 sub_803A7D4 +thumb_func 0x0803DE88 sub_803DE88 +thumb_func 0x0804F7B4 sub_804F7B4 +thumb_func 0x0804F934 sub_804F934 +thumb_func 0x08097384 sub_8097384 +thumb_func 0x08098F14 sub_8098F14 + +thumb_func 0x080013C8 sub_80013C8 +thumb_func 0x08003374 sub_8003374 +thumb_func 0x08004B70 sub_8004B70 +thumb_func 0x0803A870 sub_803A870 +thumb_func 0x0803DEA8 sub_803DEA8 +thumb_func 0x0804F7C0 sub_804F7C0 +thumb_func 0x0804F95C sub_804F95C +thumb_func 0x08097398 sub_8097398 +thumb_func 0x08098F20 sub_8098F20 + +thumb_func 0x080013D4 sub_80013D4 +thumb_func 0x08003380 sub_8003380 +thumb_func 0x08004B8C sub_8004B8C +thumb_func 0x0803A8AC sub_803A8AC +thumb_func 0x0803DEC8 sub_803DEC8 +thumb_func 0x0804F7C4 sub_804F7C4 +thumb_func 0x0804F984 sub_804F984 +thumb_func 0x080973AC sub_80973AC +thumb_func 0x08098F34 sub_8098F34 + +thumb_func 0x080013E4 sub_80013E4 +thumb_func 0x0803A8CC sub_803A8CC +thumb_func 0x0803DF58 sub_803DF58 +thumb_func 0x0804F7C8 sub_804F7C8 +thumb_func 0x0804F990 sub_804F990 +thumb_func 0x080973B8 sub_80973B8 + +thumb_func 0x0803A900 sub_803A900 +thumb_func 0x0803DF64 sub_803DF64 +thumb_func 0x0804F7CC sub_804F7CC +thumb_func 0x080973D0 sub_80973D0 + +thumb_func 0x0803DF70 sub_803DF70 +thumb_func 0x0804F7D0 sub_804F7D0 +thumb_func 0x080973E4 sub_80973E4 + +thumb_func 0x0803DFC0 sub_803DFC0 +thumb_func 0x0804F7DC sub_804F7DC + +thumb_func 0x0803E004 sub_803E004 +thumb_func 0x0804F7E8 sub_804F7E8 + +arm_func 0x080001CC sub_80001CC + +arm_func 0x0800020C sub_800020C + diff --git a/sa1/scripts/extract_credits_data.py b/sa1/scripts/extract_credits_data.py new file mode 100644 index 0000000000..4ad06d3dc3 --- /dev/null +++ b/sa1/scripts/extract_credits_data.py @@ -0,0 +1,72 @@ +rom_start = 0x08000000 +#credits_start = 0x086815B4 # US ROM +#credits_end = 0x08683F74 # US ROM +credits_start = 0x086886B8 # EU ROM +credits_end = 0x0868B078 # EU ROM + +num_entries = int((credits_end - credits_start) / 0x20) + +escape_chars = ['\\', '\/', '"'] + +def get_entry_name(rom): + # 25 is a fixed size + # Empty entries contain 25 ' ' characters, others are filled with ' ' at the end. + # Noticably lines that contain "" have two less ' ' and instead fill space using '\x000'. + # Maybe it's a small bug in Dimps' / SEGA's conversion tool? + entry_name = rom.read(25) + + result = "\"" + + for char_hex in entry_name: + if char_hex == 0: + result += "\\x000" + else: + char = str(f"{char_hex:c}") + if char in escape_chars: + result += "\\" + result += char + result += "\"" + + return result + +def convert_entries(rom, lines): + i = 0 + while i < num_entries: + length = rom.read(1)[0] + unk1 = rom.read(1)[0] + unk2 = rom.read(1)[0] + lines.append(" ") # no linebreak! + entry = ["{", + f" { str(length) },", + f" { str(unk1) },", + f" { str(unk2) },", + " ", get_entry_name(rom), "," + " {" + f" { str(rom.read(2)[1]) }," # skip C-String null-terminator + f" { str(rom.read(1)[0]) }," + f" { str(rom.read(1)[0]) }" + " } " + "},\n"] + for line in entry: + lines.append(line) + i += 1 + + return lines + +with open("baserom_sa1.gba", "rb") as rom, \ + open("src/data/credits.c", "w") as credits_c: + rom.seek(credits_start - rom_start) + + print("Printing ", num_entries, " entries") + + lines = [] + lines.append("#include \"game/credits.h\"\n") + lines.append("\n") + lines.append(f"#define NUM_ENTRIES {num_entries}\n") + lines.append("\n") + lines.append("const CreditsString sCreditsEntries[NUM_ENTRIES] = ") + lines.append("{\n") + lines = convert_entries(rom, lines) + lines.append("};\n") + + credits_c.writelines(lines) diff --git a/sa1/scripts/extract_rom_data.py b/sa1/scripts/extract_rom_data.py new file mode 100644 index 0000000000..064ce4de0d --- /dev/null +++ b/sa1/scripts/extract_rom_data.py @@ -0,0 +1,59 @@ +rom_start = 0x08000000 +end_of_code = 0x0809B670 +end_of_data = 0x087ff04B + +addresses = set() + +with open('asm/code.s') as code: + for line in code.readlines(): + line = line.strip() + if ".4byte 0x08" in line: + address = int(line.split("0x0")[1], 16) + if address >= end_of_code and address < end_of_data: + addresses.add(address) + +addresses_with_size = [] +sorted_addresses = sorted(addresses) + +def upper_addr(addr): + return "0x" + hex(addr).split('0x')[1].upper() + +def format_memory_addr(addr): + return "0x0" + hex(addr).split("0x")[1].upper() + +def to_var_name(addr): + without_hex = addr.split("0x")[1] + return f"gUnknown_{without_hex}" + + +for i in range(len(sorted_addresses)): + address = sorted_addresses[i] + if i + 1 < len(sorted_addresses): + next_address = sorted_addresses[i + 1] + else: + next_address = end_of_data + + addresses_with_size.append((address, format_memory_addr(address), upper_addr(next_address - address))) + +summed = 0 + +with open("data/new_data.s", "w") as data_file: + data_file.write(' .section .rodata\n') + data_file.write('\n') + for raw_addr, addr, size in addresses_with_size: + summed += int(size, 16) + var = to_var_name(addr) + data_file.write(f""" .global {var} +{var}: + .incbin "data/baserom_sa1.gba", 0x{f"{(raw_addr - rom_start):08x}".upper()}, {size} + +""") + +print(hex(summed)) +with open("asm/new_code.s", "w") as new_rom: + existing_code = "".join(open("asm/code.s").readlines()) + for _, addr, __ in addresses_with_size: + var = to_var_name(addr) + existing_code = existing_code.replace(addr, to_var_name(addr)) + + new_rom.write(existing_code) diff --git a/sa1/scripts/extract_rom_sym.py b/sa1/scripts/extract_rom_sym.py new file mode 100644 index 0000000000..6046d3abcf --- /dev/null +++ b/sa1/scripts/extract_rom_sym.py @@ -0,0 +1,43 @@ +ewram_syms = {} +iwram_syms = {} + +replace = {} + +# because of the task system, any pointers below this are probably +# task related, we can worry about anything which is left later +min_iwram = 0x30004B0 + +with open("asm/code.s") as code_file: + for line in code_file.readlines(): + line = line.strip() + if "0x030" in line and ":" not in line: + addr = line.split("0x03")[1].split(" ")[0] + if int(f"0x03{addr}", 16) >= min_iwram: + iwram_syms[f"0x00{addr}"] = f"gUnknown_03{addr}" + replace[f"0x03{addr}"] = f"gUnknown_03{addr}" + + if "0x020" in line and ":" not in line: + addr = line.split("0x02")[1].split(" ")[0] + ewram_syms[f"0x00{addr}"] = f"gUnknown_02{addr}" + replace[f"0x02{addr}"] = f"gUnknown_02{addr}" + + code_file.seek(0) + code_content = code_file.read() + + for addr, sym in replace.items(): + code_content = code_content.replace(addr, sym) + + with open("asm/new_code.s", "w") as new_code: + new_code.write(code_content) + + with open("sym_iwram.txt", "w") as iwram_sym_file: + keys = sorted(iwram_syms.keys()) + for addr in keys: + sym = iwram_syms[addr] + iwram_sym_file.write(f". = {addr}; {sym} = .;\n") + + with open("sym_ewram.txt", "w") as ewram_sym_file: + keys = sorted(ewram_syms.keys()) + for addr in keys: + sym = ewram_syms[addr] + ewram_sym_file.write(f". = {addr}; {sym} = .;\n") diff --git a/sa1/scripts/extract_ui_graphics_data.py b/sa1/scripts/extract_ui_graphics_data.py new file mode 100644 index 0000000000..feaf7bd7b7 --- /dev/null +++ b/sa1/scripts/extract_ui_graphics_data.py @@ -0,0 +1,293 @@ +import os, sys + +rom_start = 0x08000000 +rom_end = 0x08800000 # SA1 is only 8MB! + +#graphic_table_start = ??? # US ROM +graphic_table_start = 0x08687B3C # EU ROM +graphic_table_end = 0 + +table_entry_count = 0 +table_entry_size = 0x1C + +graphic_offsets = [] +palette_offsets = [] + +autogen_disclaimer = f"""This file was created using './{sys.argv[0]}'. + If you want to change a name or some other property, + please change it in there and run the script again, + so that they are adjusted in all auto-generated files!""" + +def graphic_entry_address(index): + return (graphic_table_start + (index * table_entry_size)) + +def tiledata_label(named): + return f"gUiGraphics{named.infix}{named.name}" + +def palette_label(named): + return f"gUiPalette{named.infix}{named.name}" + +class Graphic: + def __init__(self, index, folder, infix, name, width): + self.index = index # in-game index + self.infix = infix # infix for C labels + self.name = name # name for files and C labels + self.width = width # image width in pixels (keep it multiple of 8!) + + if (len(folder) == 0): + address = graphic_entry_address(index) + self.folder = f"_{address:X}" + else: + self.folder = folder + +# index, folder, label infix, name, width +graphic_names = [ + Graphic( 0, "stage_ui", "", "AsciiChars", 8), + Graphic( 1, "icon_lives", "1UpIcon", "Sonic", 16), + Graphic( 2, "icon_lives", "1UpIcon", "Tails", 16), + Graphic( 3, "icon_lives", "1UpIcon", "Knuckles", 16), + Graphic( 4, "icon_lives", "1UpIcon", "Amy", 16), + Graphic( 5, "icon_ring", "", "HudRing", 32), + Graphic( 6, "stage_intro", "StageIntro", "Sonic", 32), + Graphic( 7, "stage_intro", "StageIntro", "Tails", 32), + Graphic( 8, "stage_intro", "StageIntro", "Knuckles", 32), + Graphic( 9, "stage_intro", "StageIntro", "Amy", 32), + Graphic(10, "stage_intro", "StageIntro", "char_names", 32), + Graphic(11, "stage_result", "StageResult", "Sonic", 32), + Graphic(12, "stage_result", "StageResult", "Tails", 32), + Graphic(13, "stage_result", "StageResult", "Knuckles", 32), + Graphic(14, "stage_result", "StageResult", "Amy", 32), + Graphic(15, "stage_result", "StageResult", "Act12", 8), + Graphic(16, "stage_result", "StageResult", "HeadlineBack", 32), + Graphic(17, "stage_intro", "StageNames", "Japanese0", 8), + Graphic(18, "stage_intro", "StageNames", "Japanese1", 8), + Graphic(19, "stage_intro", "StageName", "NeoGreenHillZone", 32), + Graphic(20, "stage_intro", "StageName", "SecretBaseZone", 32), + Graphic(21, "stage_intro", "StageName", "CasinoParadiseZone", 32), + Graphic(22, "stage_intro", "StageName", "IceMountainZone", 32), + Graphic(23, "stage_intro", "StageName", "AngelIslandZone", 32), + Graphic(24, "stage_intro", "StageName", "EggRocketZone", 32), + Graphic(25, "stage_intro", "StageName", "CosmicAngelZone", 32), + Graphic(26, "stage_intro", "StageName", "XZone", 32), + Graphic(27, "stage_intro", "StageName", "TheMoonZone", 32), + Graphic(28, "stage_intro", "StageName", "ForestChaoGarden", 32), + Graphic(29, "stage_intro", "StageName", "FactoryChaoGarden", 32), + Graphic(30, "stage_intro", "StageName", "PinballChaoGarden", 32), + Graphic(31, "stage_intro", "StageName", "SpaceChaoGarden", 32), + Graphic(32, "stage_ui", "", "TimerDigits", 16), + Graphic(33, "stage_ui", "", "OK", 32), + Graphic(34, "stage_result", "", "GotThroughTexts", 32), + Graphic(35, "options_overlays", "Overlay", "EnterName", 256), + Graphic(36, "options_overlays", "Overlay", "Characters", 160), + Graphic(37, "options_overlays", "Overlay", "RedCorner", 8), + Graphic(38, "options_overlays", "Overlay", "Cursors", 16), + Graphic(39, "character_select", "CharSelect", "ZigZag", 32), + Graphic(40, "character_select", "CharSelect", "Arrow", 32), + Graphic(41, "character_select", "CharSelect", "Names", 32), + Graphic(42, "character_select", "CharSelect", "SelectACharacter", 32), + Graphic(43, "character_select", "CharSelect", "BlackBox", 32), + Graphic(44, "character_select", "CharSelect", "OK", 32), + Graphic(45, "character_select", "CharSelect", "BlackBox2", 32), + Graphic(46, "special_stage", "SpecialStage", "46", 64), + Graphic(47, "special_stage", "SpecialStage", "TextGotRings0", 32), + Graphic(48, "special_stage", "SpecialStage", "TextGotRings1", 32), + Graphic(49, "special_stage", "SpecialStage", "TextGotRings2", 32), + Graphic(50, "special_stage", "SpecialStage", "TextStart", 32), + Graphic(51, "special_stage", "SpecialStage", "TextGotAChaosEmerald", 32), + Graphic(52, "special_stage", "SpecialStage", "TextSpecialStage", 32), + Graphic(53, "special_stage", "SpecialStage", "53", 32), + Graphic(54, "special_stage", "SpecialStage", "ChaosEmerald", 32), + Graphic(55, "unknown", "", "Transparent0", 8), + Graphic(56, "unknown", "", "Transparent1", 8), + Graphic(57, "unknown", "", "Transparent2", 8), + Graphic(58, "unknown", "", "Transparent3", 8), + Graphic(59, "unknown", "", "Transparent4", 8), + Graphic(60, "unknown", "", "Transparent5", 8), + Graphic(61, "sound_test", "SoundTest", "Background", 64), + Graphic(62, "sound_test", "SoundTest", "Box2", 8), + Graphic(63, "sound_test", "SoundTest", "Box3", 8), + Graphic(64, "sound_test", "SoundTest", "Box4", 8), +] + +# Create LUT named -> game-index +graphic_names_lut = [] +for named in graphic_names: + graphic_names_lut.append(named.index) + + +graphic_ctype = "UiGraphics" +graphic_cstruct = """ +typedef struct """ + graphic_ctype + """ { + const u8 *tiles; + const u16 *palette; + s32 unk8; + s32 unkC; + s32 unk10; + s32 unk14; + s32 unk18; +} """ + graphic_ctype + """; + +"""; + + +def is_gba_pointer(value): + return ((value >= rom_start) and (value < rom_end)) + +def read32(rom): + word_bytes = rom.read(4) + word = ((word_bytes[3] << 24) | (word_bytes[2] << 16) | (word_bytes[1] << 8) | (word_bytes[0] << 0)) + return word + +def find_table_end_ptr(rom): + graphic_base_offset = (graphic_table_start - rom_start) + entry_valid = True + num_entries = 0 + + while (entry_valid): + rom.seek(graphic_base_offset + (num_entries * table_entry_size)) + graphic_ptr = read32(rom) + palette_ptr = read32(rom) + + if (is_gba_pointer(graphic_ptr) and is_gba_pointer(palette_ptr)): + # cache offsets to data and palettes + graphic_offsets.append(graphic_ptr - rom_start) + palette_offsets.append(palette_ptr - rom_start) + num_entries += 1 + else: + entry_valid = False + + # Add "one past last" offset, to streamline calculating the data size + graphic_offsets.append(palette_ptr - rom_start + 0x20) + + return (graphic_table_start + num_entries * table_entry_size), num_entries + +def get_named_graphic(index): + named = {} + + for named_entry in graphic_names: + if (named_entry.index == index): + named = named_entry + break + + return named + +def fill_graphic_names_table_with_unnamed(): + i = 0 + while(i < table_entry_count): + if not (i in graphic_names_lut): + address = graphic_entry_address(i) + graphic_names.append(Graphic(i, "", f"_0{address:X}", "gfx", 8)) + i += 1 + +header_path = "data/ui_graphics.h"; +def write_header(ui_graphics_h): + header_guard = "SA1_UI_GRAPHICS_H"; + ui_graphics_h.write(f"#ifndef {header_guard}\n") + ui_graphics_h.write(f"#define {header_guard}\n") + ui_graphics_h.write("#include \"global.h\"\n") + ui_graphics_h.write(f"\n/* {autogen_disclaimer} */\n") + ui_graphics_h.write(graphic_cstruct) + + for named in graphic_names: + ui_graphics_h.write(f"extern const u8 {tiledata_label(named)}[];\n") + ui_graphics_h.write(f"extern const u16 {palette_label(named)}[];\n\n") + + ui_graphics_h.write(f"#endif // {header_guard}\n") + +def write_graphic_data(rom, graphic_data_c): + graphic_data_c.write("#include \"global.h\"\n") + graphic_data_c.write(f"#include \"{header_path}\"\n") + graphic_data_c.write(f"\n/* {autogen_disclaimer} */\n\n") + + i = 0 + base_export_path = "graphics/ui/" + try: + os.mkdir(base_export_path) + except FileExistsError: + # silently ignore "file exists" error + pass + + while(i < table_entry_count): + named = get_named_graphic(i) + + if (named.folder[0] == '_'): + graphic_folder_path = f"{base_export_path}{named.index}{named.folder}/" + else: + graphic_folder_path = f"{base_export_path}{named.folder}/" + + try: + os.mkdir(graphic_folder_path) + except FileExistsError: + # silently ignore "file exists" error + pass + + file_base = f"{graphic_folder_path}{named.name}" + with open(file_base + ".4bpp", "wb") as graphic_bin, \ + open(file_base + ".gbapal", "wb") as palette_bin: + graphic_bin_size = palette_offsets[i] - graphic_offsets[i] + palette_bin_size = 32 # graphic_offsets[i + 1] - palette_offsets[i] + + # Export binary data + print(file_base) + rom.seek(graphic_offsets[i]) + graphic_bin.write(rom.read(graphic_bin_size)) + rom.seek(palette_offsets[i]) + palette_bin.write(rom.read(palette_bin_size)) + + # Convert exported binary data to .PNG / .PAL + flags = f"-object -palette {file_base}.gbapal -width {named.width / 8}" + os.system(f"tools/gbagfx/gbagfx {file_base}.4bpp {file_base}.png {flags}") + os.system(f"tools/gbagfx/gbagfx {file_base}.gbapal {file_base}.pal") + os.system(f"rm {file_base}.4bpp {file_base}.gbapal") + + graphic_data_c.write(f"// {i} - 0x08{graphic_offsets[i]:X} | 0x08{palette_offsets[i]:X}\n") + graphic_data_c.write(f"const u8 {tiledata_label(named)}[] = INCBIN_U8(\"{file_base}.4bpp\");\n") + graphic_data_c.write(f"const u16 {palette_label(named)}[] = INCBIN_U16(\"{file_base}.gbapal\");\n\n") + + i += 1 + +def write_graphic_table(rom, graphic_table_c): + #print("LUT:", graphic_names_lut) + + graphic_table_c.write(f"\n/* {autogen_disclaimer} */\n\n") + graphic_table_c.write(f"// 0x{graphic_table_start:X} -> 0x{graphic_table_end:X}\n") + graphic_table_c.write(f"const {graphic_ctype} gUiGraphics[] = {{\n") + i = 0 + + table_base = (graphic_table_start - rom_start) + while(i < table_entry_count): + named = get_named_graphic(i) + + # Set ROM offset, skip pointers (2 * 4 bytes) + entry_offset = table_base + (i * table_entry_size) + rom.seek(entry_offset + (2 * 4)) + + graphic_table_c.write(" {\n") + graphic_table_c.write(f" // {i} - 0x08{entry_offset:X}\n") + graphic_table_c.write(f" .tiles = {tiledata_label(named)},\n") + graphic_table_c.write(f" .palette = {palette_label(named)},\n") + graphic_table_c.write(f" .unk8 = {read32(rom)},\n") + graphic_table_c.write(f" .unkC = {read32(rom)},\n") + graphic_table_c.write(f" .unk10 = {read32(rom)},\n") + graphic_table_c.write(f" .unk14 = {read32(rom)},\n") + graphic_table_c.write(f" .unk18 = {read32(rom)},\n") + graphic_table_c.write(" },\n") + i += 1 + graphic_table_c.write("};\n") + +with open("baserom_sa1.gba", "rb") as rom, \ + open("include/" + header_path, "w") as ui_graphics_h, \ + open("src/data/ui_graphics_data.c", "w") as graphic_data_c, \ + open("src/data/ui_graphics_table.c", "w") as graphic_table_c: + graphic_table_end, table_entry_count = find_table_end_ptr(rom) + + graphic_table_c.write("#include \"global.h\"\n") + graphic_table_c.write(f"#include \"{header_path}\"\n") + + fill_graphic_names_table_with_unnamed() + + # Print data file + write_graphic_data(rom, graphic_data_c) + write_graphic_table(rom, graphic_table_c) + + write_header(ui_graphics_h) diff --git a/sa1/scripts/progress.py b/sa1/scripts/progress.py new file mode 100644 index 0000000000..43b7d8b45a --- /dev/null +++ b/sa1/scripts/progress.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python3 + +import argparse +import json +import git +import os +import re + +def collect_non_matching_funcs(): + result = [] + for root, dirs, files in os.walk('src'): + for file in files: + if file.endswith('.c'): + with open(os.path.join(root, file), 'r') as f: + data = f.read() + lines = data.split("\n") + for i in range(len(lines)): + line = lines[i] + if "NONMATCH" in line: + # if "unused_" in line.lower(): + # continue + matcher = r'(NONMATCH|ASM_FUNC)\(".*",\W*\w*\W*(\w*).*\)' + match = re.findall(matcher, line) + if match: + result.append(match[0]) + else: + if i < len(lines) - 1: + line = lines[i + 1] + match = re.findall(r'\W*\w*\W*(\w*).*\)', line) + if match: + result.append(('NONMATCH', match[0])) + return result + + +def parse_map(non_matching_funcs, map_file): + src = 0 + asm = 0 + src_data = 0 + data = 0 + non_matching = 0 + + with open(map_file, 'r') as map: + # Skip to the linker script section + line = map.readline() + while not line.startswith('Linker script and memory map'): + line = map.readline() + while not line.lower().startswith('rom'): + line = map.readline() + if not line: + raise Exception('Reached end of map without rom keyword') + + prev_symbol = None + prev_addr = 0 + for line in map: + if line.startswith(' .'): + arr = line.split() + section = arr[0] + size = int(arr[2], 16) + filepath = arr[3] + if filepath.startswith('build'): + # build/*/(asm|data|sound|src|...)/*/ + # ^ ^ ^ + # 0 1 2 3 + dir = filepath.split("/")[2] + else: + # (asm|data|sound|src|...)/*/ + # ^ + # 0 1 + dir = filepath.split('/')[0] + + if section == '.text': + if dir == 'src': + src += size + elif dir == 'asm': + if filepath.find("asm/src/") != -1 or filepath.find("asm/lib/") != -1: + src += size + else: + asm += size + elif dir == 'data': + # scripts + src_data += size + elif dir == '..': + # libc + src += size + elif section == '.rodata': + if dir == 'src': + src_data += size + elif dir == 'data': + data += size + + elif line.startswith(' '): + arr = line.split() + if len(arr) == 2 and arr[1] != '': # It is actually a symbol + + if prev_symbol in non_matching_funcs: + # non_matching_funcs.remove(prev_symbol) + # Calculate the length for non matching function + non_matching += int(arr[0], 16) - prev_addr + + prev_symbol = arr[1] + prev_addr = int(arr[0], 16) + elif line.strip() == '': + # End of linker script section + break + + src -= non_matching + asm += non_matching + + return (src, asm, src_data, data) + + +def main(): + parser = argparse.ArgumentParser() + + parser = argparse.ArgumentParser(description="Computes current progress throughout the whole project.") + parser.add_argument("format", nargs="?", default="text", choices=["text", "csv", "shield-json"]) + parser.add_argument("-m", "--matching", dest='matching', action='store_true', + help="Output matching progress instead of decompilation progress") + parser.add_argument("-f", "--file", dest='map_file', default="sa1.map") + args = parser.parse_args() + + matching = args.matching + + non_matching_funcs = [] + funcs = collect_non_matching_funcs() + if matching: + # Remove all non matching funcs from count + non_matching_funcs = [x[1] for x in funcs] + else: + # Only remove ASM_FUNC functions from count + for func in funcs: + if func[0] == 'ASM_FUNC': + non_matching_funcs.append(func[1]) + + (src, asm, src_data, data) = parse_map(non_matching_funcs, args.map_file) + + total = src + asm + data_total = src_data + data + + src_percent = 100 * src / total + asm_percent = 100 * asm / total + + src_data_percent = 100 * src_data / data_total + data_percent = 100 * data / data_total + + + if args.format == 'csv': + version = 2 + git_object = git.Repo(search_parent_directories=True).head.object + timestamp = str(git_object.committed_date) + git_hash = git_object.hexsha + + csv_list = [str(version), timestamp, git_hash, str(src), + str(total), str(src_data), str(data_total)] + + print(','.join(csv_list)) + + elif args.format == 'shield-json': + # https://shields.io/endpoint + print(json.dumps({ + "schemaVersion": 1, + "label": "progress" if not args.matching else "matching", + "message": f"{src_percent:.3g}%", + "color": 'yellow' if src_percent < 100 else "green", + })) + + elif args.format == 'text': + adjective = "decompiled" if not args.matching else "matched" + + print("src: {:>9} / {:>8} total bytes {:<10} {:>9.4f}%".format(src, total, adjective, round(src_percent, 4))) + # print() + print("data: {:>9} / {:>8} total bytes analysed {:>9.4f}%".format(src_data, data_total, round(src_data_percent, 4))) + + else: + print("Unknown format argument: " + args.format) + + +if __name__ == '__main__': + main() diff --git a/sa1/scripts/sonicn.cfg b/sa1/scripts/sonicn.cfg new file mode 100644 index 0000000000..c2e475d377 --- /dev/null +++ b/sa1/scripts/sonicn.cfg @@ -0,0 +1,2341 @@ +# Sonic N v1.0.1 - 2903EPO +# +# sonicn.app +# SHA-256: 0x6b0894c0b5171e6ce16a2f67e6c096231a62252cd4a377b3bc536ef9aaf79e26 +# +# Code Binary is located at 0x7C in sonicn.app and +# needs to be exported for addresses to line up. +# +# List is incomplete + +# Global-Context-Var-Offsets inside context +# data_label 0x00000098 IO / REG_BASE / REG_DISPCNT +# data_label 0x00000798 VRAM +# data_label 0x00039958 gFlags +# data_label 0x0003995C gFlagsPreVBlank +# data_label 0x00039960 gCurTask +# data_label 0x00039964 gNextTask +# data_label 0x00039968 gTaskPtrs +# data_label 0x0003A57C gNumTasks +# data_label 0x0003C790 gRefSpriteTables @ SA2: 0x03002794 +# data_label 0x0003D566 gDispCnt +# data_label 0x0003D568 gBgCntRegs +# data_label 0x0003D5A0 gUnknown_03002280 (u8 [4][4]) +# data_label 0x0003D5B0 gUnknown_03004D80 (u8 [4][4]) +# data_label 0x0003D5C4 gUnknown_030026F4 in SA2 +# data_label 0x0003DC94 gUnknown_03004D50 +# data_label 0x0003DC95 gUnknown_03001948 +# data_label 0x0003DCB9 gMultiSioSend +# data_label 0x0003DCCD gMultiSioRecv +# data_label 0x0003DD24 gMultiSioEnabled +# data_label 0x0003F148 gCurrentLevel +# data_label 0x0003E5F0 gCamera +# data_label 0x0003F585 gGameMode + +# Functions +# arm_func 0x10000000 sub_10000000 # Calls a func that returns 0 +arm_func 0x10000004 sub_10000004 +arm_func 0x10000038 sub_10000038 +arm_func 0x10000054 sub_10000054 +arm_func 0x10000070 sub_10000070 +arm_func 0x1000008C sub_1000008C +arm_func 0x100000E4 sub_100000E4 +arm_func 0x10000100 sub_10000100 +arm_func 0x10000218 sub_10000218 +arm_func 0x10000234 sub_10000234 +arm_func 0x1000044C sub_1000044C +arm_func 0x10000494 sub_10000494 +arm_func 0x100004E4 sub_100004E4 +arm_func 0x10000530 sub_10000530 +arm_func 0x10000A94 sub_10000A94 +arm_func 0x10000BA0 sub_10000BA0 +arm_func 0x10000C8C sub_10000C8C +arm_func 0x10000D98 sub_10000D98 +arm_func 0x10000E80 sub_10000E80 +arm_func 0x10000FB8 sub_10000FB8 +arm_func 0x100010A0 sub_100010A0 +arm_func 0x100011D8 sub_100011D8 +arm_func 0x1000124C sub_1000124C +arm_func 0x100012FC sub_100012FC +arm_func 0x100013B8 sub_100013B8 +arm_func 0x10001468 sub_10001468 +arm_func 0x10001524 sub_10001524 +arm_func 0x100015D0 sub_100015D0 +arm_func 0x100016A0 sub_100016A0 +arm_func 0x1000174C sub_1000174C +arm_func 0x1000181C sub_1000181C +arm_func 0x10001850 sub_10001850 +arm_func 0x1000194C sub_1000194C +arm_func 0x10001A78 sub_10001A78 +arm_func 0x100020BC sub_100020BC +arm_func 0x10002700 sub_10002700 +arm_func 0x10002960 sub_10002960 +arm_func 0x10002BC0 sub_10002BC0 +arm_func 0x10002BC4 nullsub_10002BC4 +arm_func 0x10002BC8 nullsub_10002BC8 +arm_func 0x10002BCC nullsub_10002BCC +arm_func 0x10002BD0 nullsub_10002BD0 +arm_func 0x10002BD4 sub_10002BD4 +arm_func 0x10002C98 sub_10002C98 +arm_func 0x10002DCC sub_10002DCC +arm_func 0x10002E2C sub_10002E2C +arm_func 0x10002E7C sub_10002E7C +arm_func 0x10002F0C sub_10002F0C +arm_func 0x10003100 sub_10003100 +arm_func 0x10003108 sub_10003108 +arm_func 0x10003110 sub_10003110 +arm_func 0x10003118 sub_10003118 +arm_func 0x10003120 sub_10003120 +arm_func 0x100031B0 sub_100031B0 +arm_func 0x100031C4 sub_100031C4 +arm_func 0x10003248 sub_10003248 +arm_func 0x100040B8 sub_100040B8 +arm_func 0x10004108 sub_10004108 +arm_func 0x10004138 sub_10004138 +arm_func 0x10004144 sub_10004144 +arm_func 0x10004144 sub_10004144 +arm_func 0x100041D8 sub_100041D8 +arm_func 0x100043E4 sub_100043E4 +arm_func 0x10004498 sub_10004498 +arm_func 0x10004508 sub_10004508 +arm_func 0x10004544 sub_10004544 +arm_func 0x100047C8 sub_100047C8 +arm_func 0x10009080 sub_10009080 +arm_func 0x1000923C sub_1000923C +arm_func 0x10009250 sub_10009250 +arm_func 0x10009350 sub_10009350 +arm_func 0x100093D4 sub_100093D4 +arm_func 0x100096F8 sub_100096F8 +arm_func 0x1000A0C4 sub_1000A0C4 +arm_func 0x1000A378 sub_1000A378 +arm_func 0x1000A39C sub_1000A39C +arm_func 0x1000A3D0 sub_1000A3D0 +arm_func 0x1000A51C sub_1000A51C +arm_func 0x1000A72C sub_1000A72C +arm_func 0x1000A830 EwramInitHeap +arm_func 0x1000A850 EwramMalloc +arm_func 0x1000A8EC EwramFree +arm_func 0x1000A9A0 sub_1000A9A0 +arm_func 0x1000A9A4 GameMain # prev. AgbMain? +arm_func 0x1000A9C8 EngineInit +arm_func 0x1000B050 EngineLoop +arm_func 0x1000B188 UpdateScreenDma +arm_func 0x1000B58C ClearOamBufferDma +arm_func 0x1000B6D8 UpdateScreenCpuSet +arm_func 0x1000B9E8 ClearOamBufferCpuSet +arm_func 0x1000BAD0 VBlankIntrWait +arm_func 0x1000BCB4 HBlankIntr +arm_func 0x1000BD34 VCountIntr +arm_func 0x1000BD48 sub_1000BD48 +arm_func 0x1000BD5C sub_1000BD5C +arm_func 0x1000BD70 sub_1000BD70 +arm_func 0x1000BD84 sub_1000BD84 +arm_func 0x1000BD98 sub_1000BD98 +arm_func 0x1000BDAC sub_1000BDAC +arm_func 0x1000BDC0 sub_1000BDC0 +arm_func 0x1000BDD4 KeypadIntr +arm_func 0x1000BDE8 GamepakIntr +arm_func 0x1000BDFC DummyFunc +arm_func 0x1000BE00 sub_1000BE00 # Extended ProcessVramGraphicsCopyQueue +arm_func 0x1000C09C GetInput +arm_func 0x1000C248 sub_1000C248 +arm_func 0x1000C390 sub_1000C390 +arm_func 0x1000C3D4 sub_1000C3D4 +arm_func 0x1000C434 sub_1000C434 +arm_func 0x1000C448 sub_1000C448 +arm_func 0x1000C45C sub_1000C45C +arm_func 0x1000C4EC sub_1000C4EC +arm_func 0x1000C4F0 sub_1000C4F0 +arm_func 0x1000C534 sub_1000C534 +arm_func 0x1000C57C sub_1000C57C +arm_func 0x1000C5C4 sub_1000C5C4 +arm_func 0x1000C760 sub_1000C760 +arm_func 0x1000C9F0 sub_1000C9F0 # SA2: sub_8002B20 +arm_func 0x1000DD04 sub_1000DD04 +arm_func 0x1000DE24 sub_1000DE24 +arm_func 0x1000E0DC sub_1000E0DC +arm_func 0x1000E3F4 sub_1000E3F4 +arm_func 0x1000E570 sub_1000E570 # SA2: sub_80039E4 +arm_func 0x1000ED2C sub_1000ED2C +arm_func 0x1000EF04 sub_1000EF04 +arm_func 0x1000EFCC sub_1000EFCC # SA2: sub_8004010 +arm_func 0x1000F31C sub_1000F31C +arm_func 0x1000F3C4 UpdateSpriteAnimation +arm_func 0x1000F67C animCmd_GetTiles +arm_func 0x1000F6F4 animCmd_GetPalette +arm_func 0x1000F7A4 animCmd_JumpBack +arm_func 0x1000F7BC animCmd_End +arm_func 0x1000F7D0 animCmd_PlaySoundEffect +arm_func 0x1000F7F4 animCmd_AddHitbox +arm_func 0x1000F8EC animCmd_TranslateSprite +arm_func 0x1000F920 animCmd_8 +arm_func 0x1000F934 animCmd_SetIdAndVariant +arm_func 0x1000F970 animCmd_10 +arm_func 0x1000F984 animCmd_SetSpritePriority +arm_func 0x1000F9B0 animCmd_SetOamOrder +arm_func 0x1000F9D0 sub_1000F9D0 +arm_func 0x1000FAEC sub_1000FAEC +arm_func 0x1000FECC sub_1000FECC +arm_func 0x10010558 sub_10010558 +arm_func 0x10010CD8 DisplaySprite +arm_func 0x1001110C sub_1001110C +arm_func 0x10011658 OamMalloc +arm_func 0x1001174C CopyOamBufferToOam + +# Task module +arm_func 0x10011A3C TasksInit +arm_func 0x10011C58 TaskGetNextSlot +arm_func 0x10011C90 TaskCreate # differs from SA1 +arm_func 0x10011E7C TasksDestroyInPriorityRange +arm_func 0x10011F80 TaskDestroy +arm_func 0x10012178 TasksExec +arm_func 0x100127E4 sub_100127E4 +arm_func 0x10012D5C sub_10012D5C +arm_func 0x10012F48 TaskMainDummy1 +arm_func 0x10012F4C TaskMainDummy2 +arm_func 0x10012F50 TaskMainDummy3 + +arm_func 0x10012F54 sub_10012F54 +arm_func 0x100130E0 sub_100130E0 +arm_func 0x10013630 sub_10013630 +arm_func 0x10013714 sub_10013714 +arm_func 0x1001380C sub_1001380C +arm_func 0x100138EC sub_100138EC +arm_func 0x10013CC4 sub_10013CC4 +arm_func 0x100140B8 sub_100140B8 +arm_func 0x100144AC sub_100144AC +arm_func 0x10014EA0 sub_10014EA0 +arm_func 0x100155C8 sub_100155C8 +arm_func 0x10015AD4 sub_10015AD4 +arm_func 0x10015BD4 sub_10015BD4 +arm_func 0x10015DB0 sub_10015DB0 +arm_func 0x10015E5C sub_10015E5C +arm_func 0x10015E90 VramMalloc +arm_func 0x10015FE0 sub_10015FE0 +arm_func 0x10016028 sub_10016028 +arm_func 0x1001602C sub_1001602C +arm_func 0x10016034 sub_10016034 +arm_func 0x1001603C sub_1001603C +arm_func 0x10016040 sub_10016040 +arm_func 0x10016044 sub_10016044 +arm_func 0x1001604C sub_1001604C +arm_func 0x10016054 sub_10016054 +arm_func 0x10016058 sub_10016058 +arm_func 0x1001605C sub_1001605C +arm_func 0x10016060 sub_10016060 +arm_func 0x10016064 sub_10016064 +arm_func 0x10016068 MultiSioMain +arm_func 0x10016070 sub_10016070 +arm_func 0x10016074 sub_10016074 +arm_func 0x1001607C sub_1001607C +arm_func 0x10016080 sub_10016080 +arm_func 0x100161D4 sub_100161D4 +arm_func 0x10016234 sub_10016234 +arm_func 0x10016388 sub_10016388 +arm_func 0x10016390 sub_10016390 +arm_func 0x10016398 sub_10016398 +arm_func 0x1001639C sub_1001639C +arm_func 0x100163A4 sub_100163A4 +arm_func 0x100163A8 sub_100163A8 +arm_func 0x100163B8 sub_100163B8 +arm_func 0x100163BC sub_100163BC +arm_func 0x100163FC sub_100163FC +arm_func 0x10016578 sub_10016578 +arm_func 0x10016610 sub_10016610 +arm_func 0x1001662C sub_1001662C +arm_func 0x10016644 sub_10016644 +arm_func 0x10016760 sub_10016760 +arm_func 0x10016858 sub_10016858 +arm_func 0x10016C2C sub_10016C2C +arm_func 0x10016DE4 sub_10016DE4 +arm_func 0x10016DE8 sub_10016DE8 +arm_func 0x10016DEC sub_10016DEC +arm_func 0x10016DF0 sub_10016DF0 +arm_func 0x10016DF8 sub_10016DF8 +arm_func 0x10016DFC sub_10016DFC +arm_func 0x10016E00 sub_10016E00 +arm_func 0x10016E24 sub_10016E24 +arm_func 0x10016E38 sub_10016E38 +arm_func 0x10016E90 sub_10016E90 +arm_func 0x10016EEC sub_10016EEC +arm_func 0x10016F00 sub_10016F00 +arm_func 0x10016F14 sub_10016F14 +arm_func 0x1001703C sub_1001703C +arm_func 0x100170B0 BigGameInitMaybe +arm_func 0x10017FD4 sub_10017FD4 +arm_func 0x1001823C sub_1001823C +arm_func 0x10018334 sub_10018334 +arm_func 0x100187D0 sub_100187D0 +arm_func 0x10018B4C sub_10018B4C +arm_func 0x10018BA8 sub_10018BA8 +arm_func 0x10018CF0 sub_10018CF0 +arm_func 0x10018D14 sub_10018D14 +arm_func 0x10018D8C sub_10018D8C +arm_func 0x10018DA0 sub_10018DA0 +arm_func 0x10019124 PlaySong # Input: R0 = ctx, R1 = songId +arm_func 0x100191A0 sub_100191A0 +arm_func 0x10019200 sub_10019200 +arm_func 0x10019268 sub_10019268 +arm_func 0x10019280 sub_10019280 +arm_func 0x100192A4 sub_100192A4 +arm_func 0x100192CC sub_100192CC +arm_func 0x100192FC sub_100192FC +arm_func 0x10019314 sub_10019314 +arm_func 0x100193A0 sub_100193A0 +arm_func 0x100193D8 sub_100193D8 +arm_func 0x10019408 sub_10019408 +arm_func 0x10019410 sub_10019410 +arm_func 0x10019424 sub_10019424 +arm_func 0x10019514 sub_10019514 +arm_func 0x10019688 sub_10019688 +arm_func 0x100196C0 sub_100196C0 +arm_func 0x100196FC sub_100196FC +arm_func 0x10019738 sub_10019738 +arm_func 0x10019774 sub_10019774 +arm_func 0x1001984C sub_1001984C +arm_func 0x10019AE4 sub_10019AE4 +arm_func 0x10019BC0 sub_10019BC0 +arm_func 0x10019C30 sub_10019C30 +arm_func 0x10019C84 sub_10019C84 +arm_func 0x10019C88 sub_10019C88 +arm_func 0x10019CAC sub_10019CAC +arm_func 0x10019E50 sub_10019E50 +arm_func 0x10019EDC sub_10019EDC +arm_func 0x10019F44 sub_10019F44 +arm_func 0x1001A038 sub_1001A038 +arm_func 0x1001A0BC sub_1001A0BC +arm_func 0x1001A128 sub_1001A128 +arm_func 0x1001A3F8 sub_1001A3F8 +arm_func 0x1001A45C sub_1001A45C +arm_func 0x1001A55C Task_1001A55C +arm_func 0x1001A774 Task_1001A774 +arm_func 0x1001A9F8 TaskDestructor_1001A9F8 +arm_func 0x1001AA70 sub_1001AA70 +arm_func 0x1001AB8C sub_1001AB8C +arm_func 0x1001AD64 sub_1001AD64 +arm_func 0x1001AE8C sub_1001AE8C +arm_func 0x1001B054 sub_1001B054 +arm_func 0x1001B174 sub_1001B174 +arm_func 0x1001B31C sub_1001B31C +arm_func 0x1001B40C sub_1001B40C +arm_func 0x1001B5B0 sub_1001B5B0 +arm_func 0x1001B71C sub_1001B71C +arm_func 0x1001B794 sub_1001B794 +arm_func 0x1001B7BC sub_1001B7BC +arm_func 0x1001B8BC sub_1001B8BC +arm_func 0x1001B950 sub_1001B950 +arm_func 0x1001BCD8 sub_1001BCD8 +arm_func 0x1001BCDC sub_1001BCDC +arm_func 0x1001BCE0 sub_1001BCE0 +arm_func 0x1001BCE4 sub_1001BCE4 +arm_func 0x1001BCE8 sub_1001BCE8 +arm_func 0x1001BCEC sub_1001BCEC +arm_func 0x1001BCF0 sub_1001BCF0 +arm_func 0x1001BCF4 sub_1001BCF4 +arm_func 0x1001BDD8 sub_1001BDD8 +arm_func 0x1001BF1C sub_1001BF1C +arm_func 0x1001C088 sub_1001C088 +arm_func 0x1001C1AC sub_1001C1AC +arm_func 0x1001C1F8 sub_1001C1F8 +arm_func 0x1001C20C sub_1001C20C +arm_func 0x1001C230 sub_1001C230 +arm_func 0x1001C378 sub_1001C378 +arm_func 0x1001C4D8 sub_1001C4D8 +arm_func 0x1001C634 sub_1001C634 +arm_func 0x1001C77C sub_1001C77C +arm_func 0x1001C8FC sub_1001C8FC +arm_func 0x1001CA5C sub_1001CA5C +arm_func 0x1001CE40 sub_1001CE40 +arm_func 0x1001D188 sub_1001D188 +arm_func 0x1001D4F8 sub_1001D4F8 +arm_func 0x1001D608 sub_1001D608 +arm_func 0x1001D660 sub_1001D660 +arm_func 0x1001D7B0 sub_1001D7B0 +arm_func 0x1001D9F0 sub_1001D9F0 +arm_func 0x1001DA28 sub_1001DA28 +arm_func 0x1001DABC sub_1001DABC +arm_func 0x1001DF28 sub_1001DF28 +arm_func 0x1001E048 sub_1001E048 +arm_func 0x1001E150 sub_1001E150 +arm_func 0x1001E33C sub_1001E33C +arm_func 0x1001E470 sub_1001E470 +arm_func 0x1001E6D8 sub_1001E6D8 +arm_func 0x1001E710 sub_1001E710 +arm_func 0x1001E844 sub_1001E844 +arm_func 0x1001EA54 sub_1001EA54 +arm_func 0x1001EB50 sub_1001EB50 +arm_func 0x1001ED4C sub_1001ED4C +arm_func 0x1001EE74 sub_1001EE74 +arm_func 0x1001EFAC sub_1001EFAC +arm_func 0x1001F088 sub_1001F088 +arm_func 0x1001F0E0 sub_1001F0E0 +arm_func 0x1001F240 sub_1001F240 +arm_func 0x1001F26C sub_1001F26C +arm_func 0x1001F280 sub_1001F280 +arm_func 0x1001F284 sub_1001F284 +arm_func 0x1001F378 sub_1001F378 +arm_func 0x1001F380 sub_1001F380 +arm_func 0x1001F384 sub_1001F384 +arm_func 0x1001F388 sub_1001F388 +arm_func 0x1001F38C sub_1001F38C +arm_func 0x1001F390 sub_1001F390 +arm_func 0x1001F394 sub_1001F394 +arm_func 0x1001F398 sub_1001F398 +arm_func 0x1001F39C sub_1001F39C +arm_func 0x1001F3A4 sub_1001F3A4 +arm_func 0x1001F3A8 sub_1001F3A8 +arm_func 0x1001F3AC sub_1001F3AC +arm_func 0x1001F3B0 sub_1001F3B0 +arm_func 0x1001F3B4 sub_1001F3B4 +arm_func 0x1001F3B8 sub_1001F3B8 +arm_func 0x1001F3BC sub_1001F3BC +arm_func 0x1001F3C0 sub_1001F3C0 +arm_func 0x1001F3C4 sub_1001F3C4 +arm_func 0x1001F3C8 sub_1001F3C8 +arm_func 0x1001F3CC sub_1001F3CC +arm_func 0x1001F3D0 sub_1001F3D0 +arm_func 0x1001F3D4 sub_1001F3D4 +arm_func 0x1001F3D8 sub_1001F3D8 +arm_func 0x1001F3DC sub_1001F3DC +arm_func 0x1001F3E0 sub_1001F3E0 +arm_func 0x1001F3E4 sub_1001F3E4 +arm_func 0x1001F3E8 sub_1001F3E8 +arm_func 0x1001F3EC sub_1001F3EC +arm_func 0x1001F3F0 sub_1001F3F0 +arm_func 0x1001F3F4 sub_1001F3F4 +arm_func 0x1001F3F8 sub_1001F3F8 +arm_func 0x1001F3FC sub_1001F3FC +arm_func 0x1001F400 sub_1001F400 +arm_func 0x1001F404 sub_1001F404 +arm_func 0x1001FEFC sub_1001FFEC +arm_func 0x1001FFCC Task_1001FFCC +arm_func 0x1001FFD0 sub_1001FFD0 +arm_func 0x1002015C sub_1002015C +arm_func 0x10020968 sub_10020968 +arm_func 0x10020D10 sub_10020D10 +arm_func 0x1002105C sub_1002105C +arm_func 0x100212D8 sub_100212D8 +arm_func 0x10021560 sub_10021560 +arm_func 0x100215CC sub_100215CC +arm_func 0x100217A4 sub_100217A4 +arm_func 0x100219BC sub_100219BC +arm_func 0x10021AD4 sub_10021AD4 +arm_func 0x10021C00 sub_10021C00 +arm_func 0x10021D64 sub_10021D64 +arm_func 0x10021F3C sub_10021F3C +arm_func 0x10021FCC sub_10021FCC +arm_func 0x1002212C sub_1002212C +arm_func 0x100222E4 sub_100222E4 +arm_func 0x100225F8 sub_100225F8 +arm_func 0x100226C4 sub_100226C4 +arm_func 0x100228F0 sub_100228F0 +arm_func 0x10022ADC sub_10022ADC +arm_func 0x10022B90 sub_10022B90 +arm_func 0x10022C7C sub_10022C7C +arm_func 0x10022F9C sub_10022F9C +arm_func 0x100232D0 sub_100232D0 +arm_func 0x100233D0 sub_100233D0 +arm_func 0x10023B54 Task_10023B54 +arm_func 0x10023D40 sub_10023D40 +arm_func 0x10023D78 sub_10023D78 +arm_func 0x1002431C sub_1002431C +arm_func 0x10024C88 sub_10024C88 +arm_func 0x100252C8 sub_100252C8 +arm_func 0x10025328 sub_10025328 +arm_func 0x100254C0 sub_100254C0 +arm_func 0x10025890 sub_10025890 +arm_func 0x10025E28 sub_10025E28 +arm_func 0x10026398 sub_10026398 +arm_func 0x1002653C sub_1002653C +arm_func 0x10026704 sub_10026704 +arm_func 0x10026BA4 sub_10026BA4 +arm_func 0x10027098 sub_10027098 +arm_func 0x100274A4 sub_100274A4 +arm_func 0x1002751C sub_1002751C +arm_func 0x1002779C sub_1002779C +arm_func 0x10027834 sub_10027834 +arm_func 0x100278F0 sub_100278F0 +arm_func 0x10027998 sub_10027998 +arm_func 0x10027A5C sub_10027A5C +arm_func 0x10027AC0 CreateDustCloud +arm_func 0x10027B98 Task_DustCloud +arm_func 0x10027C74 sub_10027C74 +arm_func 0x10027E3C sub_10027E3C +arm_func 0x10027EAC sub_10027EAC +arm_func 0x10028044 sub_10028044 +arm_func 0x10028198 sub_10028198 +arm_func 0x10028318 sub_10028318 +arm_func 0x10028368 sub_10028368 +arm_func 0x10028500 sub_10028500 +arm_func 0x1002852C sub_1002852C +arm_func 0x100287D4 sub_100287D4 +arm_func 0x100288B8 sub_100288B8 +arm_func 0x100289F4 sub_100289F4 +arm_func 0x10028A54 sub_10028A54 +arm_func 0x100294C8 sub_100294C8 +arm_func 0x100294CC sub_100294CC +arm_func 0x100298FC sub_100298FC +arm_func 0x10029BFC sub_10029BFC +arm_func 0x10029D84 sub_10029D84 +arm_func 0x10029ED0 sub_10029ED0 +arm_func 0x1002A064 sub_1002A064 +arm_func 0x1002A214 sub_1002A214 +arm_func 0x1002A518 sub_1002A518 +arm_func 0x1002A57C sub_1002A57C +arm_func 0x1002A6C4 sub_1002A6C4 +arm_func 0x1002A758 sub_1002A758 +arm_func 0x1002A844 sub_1002A844 +arm_func 0x1002ABCC sub_1002ABCC +arm_func 0x1002AC30 sub_1002AC30 +arm_func 0x1002AC58 sub_1002AC58 +arm_func 0x1002AD2C sub_1002AD2C +arm_func 0x1002ADEC sub_1002ADEC +arm_func 0x1002AF60 sub_1002AF60 +arm_func 0x1002AFA0 sub_1002AFA0 +arm_func 0x1002B074 sub_1002B074 +arm_func 0x1002B120 sub_1002B120 +arm_func 0x1002B1B0 sub_1002B1B0 +arm_func 0x1002B278 sub_1002B278 +arm_func 0x1002B3CC sub_1002B3CC +arm_func 0x1002B518 sub_1002B518 +arm_func 0x1002B59C sub_1002B59C +arm_func 0x1002B5C4 sub_1002B5C4 +arm_func 0x1002B630 sub_1002B630 +arm_func 0x1002B6F8 sub_1002B6F8 +arm_func 0x1002B890 sub_1002B890 +arm_func 0x1002B894 sub_1002B894 +arm_func 0x1002B9A0 sub_1002B9A0 + + +# Bosses +# Boss 1 +arm_func 0x1002B9A8 CreateEntity_EggHammerTank_Intro @ 021 Boss 1 Intro +arm_func 0x1002BC14 sub_1002BC14 +arm_func 0x1002BE28 sub_1002BE28 +arm_func 0x1002BF60 sub_1002BF60 +arm_func 0x1002C0B8 sub_1002C0B8 +arm_func 0x1002C24C sub_1002C24C +arm_func 0x1002C2A4 CreateEntity_EggHammerTank @ 022 Boss 1 +arm_func 0x1002C550 Task_EggHammerTankMain +arm_func 0x1002C610 sub_1002C610 +arm_func 0x1002CB14 sub_1002CB14 +arm_func 0x1002D59C sub_1002D59C +arm_func 0x1002DA1C sub_1002DA1C +arm_func 0x1002DE04 TaskDestructor_EggHammerTank +arm_func 0x1002DEB0 CreateEHTArm +arm_func 0x1002E008 Task_EHTArm +arm_func 0x1002E0C0 Task_1002E0C0 +arm_func 0x1002E270 Task_1002E270 +arm_func 0x1002E4EC TaskDestructor_EHTArm +arm_func 0x1002E524 CreateEHTHammer +arm_func 0x1002E67C Task_EHTHammerMain +arm_func 0x1002E90C sub_1002E90C +arm_func 0x1002EB48 sub_1002EB48 +arm_func 0x1002EDC8 TaskDestructor_EHTHammer + +# Boss 2 +arm_func 0x1002EE00 sub_1002EE00 +arm_func 0x1002EFB8 sub_1002EFB8 +arm_func 0x1002F0CC sub_1002F0CC +arm_func 0x1002F134 sub_1002F134 +arm_func 0x1002F1FC sub_1002F1FC +arm_func 0x1002F288 CreateEntity_EggPress @ 023 Boss 2 +arm_func 0x1002F508 Task_EggPress +arm_func 0x1002F658 sub_1002F658 +arm_func 0x1002F878 sub_1002F878 +arm_func 0x1002FA14 sub_1002FA14 +arm_func 0x1002FCBC sub_1002FCBC +arm_func 0x1002FE3C sub_1002FE3C +arm_func 0x1002FFB8 sub_1002FFB8 +arm_func 0x10030100 sub_10030100 +arm_func 0x1003039C sub_1003039C +arm_func 0x10030514 sub_10030514 +arm_func 0x100307D0 sub_100307D0 +arm_func 0x10030C10 sub_10030C10 +arm_func 0x10030FA8 TaskDestructor_EggPress + +# Boss 3 +arm_func 0x10031000 sub_10031000 +arm_func 0x100311B4 sub_100311B4 +arm_func 0x10031308 sub_10031308 +arm_func 0x1003141C sub_1003141C +arm_func 0x10031484 sub_10031484 +arm_func 0x10031508 sub_10031508 +arm_func 0x10031594 CreateEntity_EggBall @ 024 Boss 3 +arm_func 0x10031A2C Task_EggBallSetup +arm_func 0x10031B7C sub_10031B7C +arm_func 0x10031CC4 sub_10031CC4 +arm_func 0x10031F28 Task_10031F28 +arm_func 0x100321B4 sub_100321B4 +arm_func 0x100328AC sub_100328AC +arm_func 0x10032CF0 TaskDestructor_EggBallSetup +arm_func 0x10032D48 Task_10032D48 +arm_func 0x10032EF4 Task_10032EF4 +arm_func 0x10033090 Task_10033090 +arm_func 0x10033234 Task_10033234 +arm_func 0x10033488 TaskDestructor_10033488 +arm_func 0x100334C0 Task_100334C0 +arm_func 0x10033558 Task_10033558 +arm_func 0x100337A8 TaskDestructor_100337A8 + +# Boss 4 +arm_func 0x100337EC sub_100337EC +arm_func 0x10033990 sub_10033990 +arm_func 0x10033AA4 sub_10033AA4 +arm_func 0x10033B0C sub_10033B0C +arm_func 0x10033BAC sub_10033BAC +arm_func 0x10033C38 CreateEntity_EggSpider @ 025 Boss 4 +arm_func 0x10034004 Task_10034004 +arm_func 0x100342DC sub_100342DC +arm_func 0x10034EBC sub_10034EBC +arm_func 0x100352C0 TaskDestructor_100352C0 +arm_func 0x10035318 sub_10035318 +arm_func 0x100354F8 Task_100354F8 + +# Boss 5 +arm_func 0x100358A0 CreateEntity_MechaKnuckles @ 026 Boss 5 +arm_func 0x10035A18 sub_10035A18 +arm_func 0x10035A70 sub_10035A70 +arm_func 0x100365A4 sub_100365A4 +arm_func 0x10036698 sub_10036698 +arm_func 0x100367B0 sub_100367B0 +arm_func 0x100367E4 sub_100367E4 +arm_func 0x100368D0 sub_100368D0 +arm_func 0x1003691C sub_1003691C +arm_func 0x10036A34 sub_10036A34 +arm_func 0x10036A38 sub_10036A38 +arm_func 0x10036A48 sub_10036A48 +arm_func 0x10036A4C sub_10036A4C +arm_func 0x10036A68 sub_10036A68 +arm_func 0x10036A90 sub_10036A90 +arm_func 0x10036B08 sub_10036B08 +arm_func 0x10036B0C sub_10036B0C +arm_func 0x10036B54 sub_10036B54 +arm_func 0x10036B5C sub_10036B5C +arm_func 0x10036B78 sub_10036B78 +arm_func 0x10036B7C sub_10036B7C +arm_func 0x10036C38 sub_10036C38 +arm_func 0x10036C3C sub_10036C3C +arm_func 0x10036C58 sub_10036C58 +arm_func 0x10036C5C sub_10036C5C +arm_func 0x10036C90 sub_10036C90 +arm_func 0x10036C94 sub_10036C94 +arm_func 0x10036CC8 sub_10036CC8 +arm_func 0x10036CD0 sub_10036CD0 +arm_func 0x10036CF8 sub_10036CF8 +arm_func 0x10036D00 sub_10036D00 +arm_func 0x10036D1C sub_10036D1C +arm_func 0x10036D20 sub_10036D20 +arm_func 0x10036D3C sub_10036D3C +arm_func 0x10036D40 sub_10036D40 +arm_func 0x10036D74 sub_10036D74 +arm_func 0x10036D78 sub_10036D78 +arm_func 0x10036D94 sub_10036D94 +arm_func 0x10036E00 sub_10036E00 +arm_func 0x10036E34 sub_10036E34 +arm_func 0x10036E78 sub_10036E78 +arm_func 0x10036EB4 sub_10036EB4 +arm_func 0x10036EE0 sub_10036EE0 +arm_func 0x10036F34 sub_10036F34 +arm_func 0x10036FAC sub_10036FAC +arm_func 0x10037004 sub_10037004 +arm_func 0x10037008 sub_10037008 +arm_func 0x10037044 sub_10037044 +arm_func 0x10037048 sub_10037048 +arm_func 0x100370CC sub_100370CC +arm_func 0x10037154 sub_10037154 +arm_func 0x10037208 sub_10037208 +arm_func 0x10037234 sub_10037234 +arm_func 0x100372E8 sub_100372E8 +arm_func 0x10037314 sub_10037314 +arm_func 0x100373B0 sub_100373B0 +arm_func 0x1003756C sub_1003756C +arm_func 0x10037AB0 sub_10037AB0 +arm_func 0x10037B08 sub_10037B08 +arm_func 0x10037DBC sub_10037DBC +arm_func 0x10037FD0 sub_10037FD0 +arm_func 0x10038008 sub_10038008 + +arm_func 0x10038494 CreateEntity_EggSnake @ 027 Boss 6 +arm_func 0x10038710 sub_10038710 +arm_func 0x10038954 sub_10038954 +arm_func 0x1003970C sub_1003970C +arm_func 0x100399B0 sub_100399B0 +arm_func 0x10039F4C sub_10039F4C +arm_func 0x10039FA4 sub_10039FA4 +arm_func 0x1003A0F0 sub_1003A0F0 +arm_func 0x1003A1F8 sub_1003A1F8 +arm_func 0x1003A3F4 sub_1003A3F4 +arm_func 0x1003A42C sub_1003A42C +arm_func 0x1003A680 sub_1003A680 +arm_func 0x1003A8F8 sub_1003A8F8 +arm_func 0x1003AA18 sub_1003AA18 +arm_func 0x1003AA18 sub_1003AA18 +arm_func 0x1003ACB8 sub_1003ACB8 +arm_func 0x1003B838 sub_1003B838 +arm_func 0x1003B870 Task_1003B870 + +# Extra Boss +arm_func 0x1003BAEC CreateEntity_SuperEggRobot @ 031 Extra Boss +arm_func 0x1003BC04 sub_1003BC04 +arm_func 0x1003BC68 sub_1003BC68 +arm_func 0x1003D434 sub_1003D434 +arm_func 0x1003D710 sub_1003D710 +arm_func 0x1003DE74 sub_1003DE74 +arm_func 0x1003E43C sub_1003E43C +arm_func 0x1003E870 sub_1003E870 +arm_func 0x1003ECDC sub_1003ECDC +arm_func 0x1003EE98 sub_1003EE98 +arm_func 0x1003F244 sub_1003F244 +arm_func 0x1003F53C sub_1003F53C +arm_func 0x1003F834 sub_1003F834 +arm_func 0x1003F91C sub_1003F91C + +# Sonic 1 Boss +arm_func 0x100403D4 CreateEntity_EggWrecker @ 028 Boss Egg Wrecker (Green Hill) +arm_func 0x10040608 sub_10040608 +arm_func 0x100407DC sub_100407DC +arm_func 0x10040A40 sub_10040A40 +arm_func 0x100411B0 sub_100411B0 +arm_func 0x10041208 sub_10041208 +arm_func 0x10041850 Task_10041850 +arm_func 0x100419DC sub_100419DC +arm_func 0x10041B80 sub_10041B80 +arm_func 0x10041D50 sub_10041D50 +arm_func 0x10041ED0 sub_10041ED0 +arm_func 0x1004211C sub_1004211C +arm_func 0x10042280 TaskDestructor_10042280 + +# Sonic 2 Boss +arm_func 0x100422B8 sub_100422B8 +arm_func 0x1004284C CreateEntity_EggDrillster @ 029 Boss Egg Drillster (Emerald Hill) +arm_func 0x10042AAC sub_10042AAC +arm_func 0x10042C3C sub_10042C3C +arm_func 0x10042E00 sub_10042E00 +arm_func 0x100434CC sub_100434CC +arm_func 0x10043524 sub_10043524 +arm_func 0x10043994 sub_10043994 +arm_func 0x10043B14 sub_10043B14 +arm_func 0x10043DD4 Task_10043DD4 +arm_func 0x1004403C sub_1004403C +arm_func 0x100441D8 TaskDestructor_100441D8 + +arm_func 0x10044210 sub_10044210 +arm_func 0x10044264 sub_10044264 +arm_func 0x100444B4 sub_100444B4 +arm_func 0x10044608 sub_10044608 +arm_func 0x10044758 sub_10044758 +arm_func 0x100448AC sub_100448AC +arm_func 0x10044AAC sub_10044AAC +arm_func 0x10044B5C sub_10044B5C +arm_func 0x10044BC4 sub_10044BC4 +arm_func 0x10044C48 sub_10044C48 +arm_func 0x10044CD4 sub_10044CD4 +arm_func 0x10044E00 CreateEntity_EggX @ 030 Final Boss +arm_func 0x100450E0 sub_100450E0 +arm_func 0x10045318 sub_10045318 +arm_func 0x100455AC sub_100455AC + +arm_func 0x100466A0 sub_100466A0 +arm_func 0x100466F8 sub_100466F8 +arm_func 0x10046A5C sub_10046A5C + +arm_func 0x1004714C sub_1004714C +arm_func 0x10047654 sub_10047654 +arm_func 0x10047720 sub_10047720 +arm_func 0x10047848 sub_10047848 +arm_func 0x10047970 sub_10047970 +arm_func 0x10047AEC sub_10047AEC +arm_func 0x10047C98 sub_10047C98 +arm_func 0x10047D58 sub_10047D58 +arm_func 0x10047E08 sub_10047E08 +arm_func 0x10047E90 sub_10047E90 +arm_func 0x10047F8C sub_10047F8C +arm_func 0x10048410 sub_10048410 +arm_func 0x10048468 sub_10048468 +arm_func 0x10048660 sub_10048660 +arm_func 0x1004886C sub_1004886C +arm_func 0x10048A10 sub_10048A10 +arm_func 0x10049824 sub_10049824 +arm_func 0x10049B14 sub_10049B14 +arm_func 0x10049CA4 sub_10049CA4 +arm_func 0x10049CDC sub_10049CDC + +# Enemies +arm_func 0x10049D14 CreateEntity_Drisame @ 018 Drisame +arm_func 0x10049E90 sub_10049E90 +arm_func 0x1004A384 sub_1004A384 +arm_func 0x1004A580 sub_1004A580 +arm_func 0x1004A8DC sub_1004A8DC +arm_func 0x1004AAB8 sub_1004AAB8 +arm_func 0x1004ACE4 sub_1004ACE4 +arm_func 0x1004AD48 CreateEntity_GamiGami @ 002 GamiGami +arm_func 0x1004AEE0 sub_1004AEE0 +arm_func 0x1004B214 sub_1004B214 +arm_func 0x1004B660 sub_1004B660 +arm_func 0x1004B7B8 CreateEntity_Hanabii @ 008 Hanabii +arm_func 0x1004B90C sub_1004B90C +arm_func 0x1004BC98 sub_1004BC98 +arm_func 0x1004C0A0 sub_1004C0A0 +arm_func 0x1004C244 sub_1004C244 +arm_func 0x1004C3F8 sub_1004C3F8 +arm_func 0x1004C430 CreateEntity_Oct @ 014 Oct +arm_func 0x1004C584 Task_OctMain +arm_func 0x1004C7D4 sub_1004C7D4 +arm_func 0x1004CAE8 sub_1004CAE8 +arm_func 0x1004CE3C sub_1004CE3C +arm_func 0x1004D1CC sub_1004D1CC +arm_func 0x1004D314 CreateEntity_Fireball @ 007 Fireball +arm_func 0x1004D3B4 Task_FireballMain +arm_func 0x1004D684 sub_1004D684 +arm_func 0x1004D914 sub_1004D914 +arm_func 0x1004DB60 sub_1004DB60 +arm_func 0x1004DCBC sub_1004DCBC +arm_func 0x1004DE2C CreateEntity_KeroKero @ 004 KeroKero +arm_func 0x1004DF90 sub_1004DF90 +arm_func 0x1004E3B8 sub_1004E3B8 +arm_func 0x1004E670 sub_1004E670 +arm_func 0x1004E9E4 CreateEntity_Kiki @ 000 Kiki +arm_func 0x1004EB34 sub_1004EB34 +arm_func 0x1004ED60 sub_1004ED60 +arm_func 0x1004F12C sub_1004F12C +arm_func 0x1004F390 sub_1004F390 +arm_func 0x1004F4CC sub_1004F4CC +arm_func 0x1004F608 sub_1004F608 +arm_func 0x1004F7F4 sub_1004F7F4 +arm_func 0x1004F82C CreateEntity_Kuraa @ 019 Kuraa +arm_func 0x1004F980 sub_1004F980 +arm_func 0x1004FC34 sub_1004FC34 +arm_func 0x1004FF88 CreateEntity_Mirror @ 012 Mirror +arm_func 0x10050104 sub_10050104 +arm_func 0x100504C8 sub_100504C8 +arm_func 0x1005086C sub_1005086C +arm_func 0x100509AC CreateEntity_Mole @ 015 Mole +arm_func 0x10050B20 sub_10050B20 +arm_func 0x10050CD8 sub_10050CD8 +arm_func 0x10050EAC sub_10050EAC +arm_func 0x10050FD4 CreateEntity_PenMk1 @ 020 Pen +arm_func 0x10051158 sub_10051158 +arm_func 0x100514B8 sub_100514B8 +arm_func 0x1005197C sub_1005197C +arm_func 0x10051ECC sub_10051ECC +arm_func 0x10052024 CreateEntity_Pierrot @ 010 Pierrot +arm_func 0x10052170 Task_Pierrot +arm_func 0x100526B0 CreateEntity_Leon @ 011 Leon +arm_func 0x10052830 sub_10052830 +arm_func 0x10052C44 sub_10052C44 +arm_func 0x10052EBC sub_10052EBC +arm_func 0x10053260 CreateEntity_Rhinotank @ 003 Rhinotank +arm_func 0x100533B8 sub_100533B8 +arm_func 0x10053850 sub_10053850 +arm_func 0x10053C24 sub_10053C24 +arm_func 0x10053E98 CreateEntity_Senbon @ 005 Senbon +arm_func 0x1005401C sub_1005401C +arm_func 0x10054340 sub_10054340 +arm_func 0x10054684 CreateEntity_Buzzer @ 001 Buzzer +arm_func 0x10054840 sub_10054840 +arm_func 0x10054C0C sub_10054C0C +arm_func 0x10054E8C sub_10054E8C +arm_func 0x10055254 sub_10055254 +arm_func 0x100553B0 CreateEntity_Slot @ 009 Slot +arm_func 0x10055538 sub_10055538 +arm_func 0x1005588C sub_1005588C +arm_func 0x10055BE0 sub_10055BE0 +arm_func 0x10055F78 sub_10055F78 +arm_func 0x10056290 CreateEntity_Tentou @ 006 Tentou +arm_func 0x1005647C sub_1005647C +arm_func 0x10056860 sub_10056860 +arm_func 0x10056BEC sub_10056BEC +arm_func 0x1005715C sub_1005715C +arm_func 0x100572B4 sub_100572B4 +arm_func 0x100572EC CreateEntity_Wamu @ 013 Wamu +arm_func 0x100575DC sub_100575DC +arm_func 0x1005827C sub_1005827C +arm_func 0x100582E0 CreateEntity_Yukimaru_Wall @ 017 Yukimaru on a wall +arm_func 0x10058550 sub_10058550 +arm_func 0x100588E8 sub_100588E8 +arm_func 0x10058BC8 sub_10058BC8 +arm_func 0x10058F60 sub_10058F60 +arm_func 0x10059368 sub_10059368 +arm_func 0x100594B8 sub_100594B8 +arm_func 0x10059510 CreateEntity_Yukimaru @ 016 Yukimaru + +arm_func 0x10059748 sub_10059748 +arm_func 0x10059AE0 sub_10059AE0 +arm_func 0x10059F20 sub_10059F20 +arm_func 0x1005A080 sub_1005A080 +arm_func 0x1005A0D8 sub_1005A0D8 +arm_func 0x1005AAA0 sub_1005AAA0 +arm_func 0x1005AB44 sub_1005AB44 +arm_func 0x1005ABD8 sub_1005ABD8 +arm_func 0x1005ABDC sub_1005ABDC +arm_func 0x1005ADA8 sub_1005ADA8 +arm_func 0x1005AF30 sub_1005AF30 +arm_func 0x1005B1F4 sub_1005B1F4 +arm_func 0x1005B334 sub_1005B334 +arm_func 0x1005B474 sub_1005B474 +arm_func 0x1005B888 sub_1005B888 +arm_func 0x1005BA94 sub_1005BA94 +arm_func 0x1005BBC4 sub_1005BBC4 +arm_func 0x1005BC34 sub_1005BC34 +arm_func 0x1005BC5C sub_1005BC5C +arm_func 0x1005BD0C sub_1005BD0C +arm_func 0x1005BDC0 sub_1005BDC0 +arm_func 0x1005BE7C sub_1005BE7C +arm_func 0x1005BF3C sub_1005BF3C +arm_func 0x1005C0CC sub_1005C0CC +arm_func 0x1005C0D0 sub_1005C0D0 +arm_func 0x1005C20C sub_1005C20C +arm_func 0x1005C210 sub_1005C210 +arm_func 0x1005C45C sub_1005C45C +arm_func 0x1005C460 sub_1005C460 +arm_func 0x1005C524 sub_1005C524 +arm_func 0x1005C528 sub_1005C528 +arm_func 0x1005C60C sub_1005C60C +arm_func 0x1005C6D0 sub_1005C6D0 +arm_func 0x1005C760 sub_1005C760 +arm_func 0x1005C82C sub_1005C82C +arm_func 0x1005C8D8 sub_1005C8D8 +arm_func 0x1005CAF0 sub_1005CAF0 +arm_func 0x1005CBB0 sub_1005CBB0 +arm_func 0x1005CCD0 sub_1005CCD0 +arm_func 0x1005CE74 sub_1005CE74 +arm_func 0x1005CFB4 sub_1005CFB4 +arm_func 0x1005D110 sub_1005D110 +arm_func 0x1005D25C sub_1005D25C +arm_func 0x1005D410 sub_1005D410 +arm_func 0x1005D5B0 sub_1005D5B0 +arm_func 0x1005D734 sub_1005D734 +arm_func 0x1005D748 sub_1005D748 +arm_func 0x1005D7E4 sub_1005D7E4 +arm_func 0x1005D940 sub_1005D940 +arm_func 0x1005DA54 sub_1005DA54 +arm_func 0x1005DA6C sub_1005DA6C +arm_func 0x1005DB7C sub_1005DB7C +arm_func 0x1005E088 sub_1005E088 +arm_func 0x1005E26C sub_1005E26C +arm_func 0x1005E2B8 sub_1005E2B8 +arm_func 0x1005E36C sub_1005E36C +arm_func 0x1005F21C sub_1005F21C +arm_func 0x1005F64C sub_1005F64C +arm_func 0x1005F8D0 sub_1005F8D0 +arm_func 0x1005FB60 sub_1005FB60 + +arm_func 0x1006028C sub_1006028C +arm_func 0x10060410 sub_10060410 +arm_func 0x10060590 sub_10060590 +arm_func 0x10060770 sub_10060770 +arm_func 0x10060948 sub_10060948 +arm_func 0x100609FC sub_100609FC +arm_func 0x10060ABC sub_10060ABC +arm_func 0x10060E80 sub_10060E80 +arm_func 0x10061114 sub_10061114 +arm_func 0x1006132C sub_1006132C +arm_func 0x1006160C sub_1006160C +arm_func 0x100616C8 sub_100616C8 +arm_func 0x10061E18 sub_10061E18 +arm_func 0x10061E1C sub_10061E1C +arm_func 0x10061FE8 sub_10061FE8 +arm_func 0x100620C8 sub_100620C8 +arm_func 0x100624EC sub_100624EC +arm_func 0x1006272C sub_1006272C +arm_func 0x10062748 sub_10062748 +arm_func 0x10062764 sub_10062764 +arm_func 0x10062790 sub_10062790 +arm_func 0x100627A4 sub_100627A4 +arm_func 0x10062F74 sub_10062F74 +arm_func 0x10063768 sub_10063768 +arm_func 0x10064100 sub_10064100 + + +arm_func 0x100650B4 sub_100650B4 +arm_func 0x10065188 sub_10065188 +arm_func 0x100652C4 sub_100652C4 +arm_func 0x10065380 sub_10065380 +arm_func 0x10065534 sub_10065534 +arm_func 0x100656D8 sub_100656D8 +arm_func 0x10065814 sub_10065814 +arm_func 0x100662C0 sub_100662C0 +arm_func 0x10066420 sub_10066420 +arm_func 0x10066424 sub_10066424 +arm_func 0x10066438 sub_10066438 +arm_func 0x10066500 sub_10066500 +arm_func 0x10066C98 sub_10066C98 +arm_func 0x10066CFC sub_10066CFC +arm_func 0x10067238 sub_10067238 +arm_func 0x1006755C sub_1006755C +arm_func 0x100675BC sub_100675BC +arm_func 0x10067680 sub_10067680 +arm_func 0x100676FC sub_100676FC +arm_func 0x10067778 sub_10067778 +arm_func 0x100678C0 sub_100678C0 +arm_func 0x10067A08 sub_10067A08 +arm_func 0x10067A84 sub_10067A84 +arm_func 0x10067AFC sub_10067AFC +arm_func 0x10067B3C sub_10067B3C +arm_func 0x10067B7C sub_10067B7C +arm_func 0x10067D90 sub_10067D90 +arm_func 0x10067E94 sub_10067E94 +arm_func 0x10067E9C sub_10067E9C +arm_func 0x10067EA4 sub_10067EA4 +arm_func 0x10067F34 sub_10067F34 +arm_func 0x10067FB0 sub_10067FB0 +arm_func 0x100680DC sub_100680DC +arm_func 0x100681E0 sub_100681E0 +arm_func 0x10068270 sub_10068270 +arm_func 0x100682C8 sub_100682C8 +arm_func 0x10068A08 sub_10068A08 +arm_func 0x10068AEC sub_10068AEC +arm_func 0x10068BF0 sub_10068BF0 +arm_func 0x10068D20 sub_10068D20 +arm_func 0x10068F40 sub_10068F40 +arm_func 0x100691CC sub_100691CC +arm_func 0x100693F4 sub_100693F4 +arm_func 0x10069668 sub_10069668 +arm_func 0x100696FC sub_100696FC +arm_func 0x100697A8 sub_100697A8 +arm_func 0x10069854 sub_10069854 +arm_func 0x1006990C sub_1006990C +arm_func 0x100699CC sub_100699CC +arm_func 0x10069A60 sub_10069A60 +arm_func 0x10069B30 sub_10069B30 +arm_func 0x10069B44 sub_10069B44 +arm_func 0x10069BA8 sub_10069BA8 +arm_func 0x10069C20 sub_10069C20 +arm_func 0x10069D10 sub_10069D10 +arm_func 0x10069D6C sub_10069D6C +arm_func 0x10069DF0 sub_10069DF0 +arm_func 0x1006A1B8 sub_1006A1B8 +arm_func 0x1006A454 sub_1006A454 +arm_func 0x1006A468 sub_1006A468 +arm_func 0x1006A5C8 sub_1006A5C8 +arm_func 0x1006A64C sub_1006A64C + +# Only function referencing table of CreateEntity_ funcs +arm_func 0x1006A838 sub_1006A838 + +# Only function referencing table of Enemy creation funcs +arm_func 0x1006A978 sub_1006A978 + +arm_func 0x1006AAB8 sub_1006AAB8 +arm_func 0x1006B0E0 sub_1006B0E0 +arm_func 0x1006BEB4 sub_1006BEB4 + +# Used by multiple IAs: IceBlock, Decoration, Checkpoint, StageGoal, ... +# and many Enemies. +arm_func 0x1006BF2C TaskDestructor_EntitiesCommon +arm_func 0x1006BF64 sub_1006BF64 + + +# Interactables +arm_func 0x1006c064 CreateEntity_CraneClaw @ 080 +arm_func 0x1006C230 sub_1006C230 +arm_func 0x1006C5AC sub_1006C5AC +arm_func 0x1006C8F0 sub_1006C8F0 +arm_func 0x1006CC7C sub_1006CC7C +arm_func 0x1006CFB4 sub_1006CFB4 +arm_func 0x1006D1CC sub_1006D1CC +arm_func 0x1006D440 sub_1006D440 +arm_func 0x1006D738 sub_1006D738 +arm_func 0x1006D9E0 CreateEntity_Lift @ 088 +arm_func 0x1006DB60 sub_1006DB60 +arm_func 0x1006DEBC sub_1006DEBC +arm_func 0x1006E24C sub_1006E24C +arm_func 0x1006E58C sub_1006E58C +arm_func 0x1006E89C sub_1006E89C +arm_func 0x1006E900 sub_1006E900 +arm_func 0x1006e958 CreateEntity_BumperRound_LinearMov @ 049 +arm_func 0x1006EB3C sub_1006EB3C +arm_func 0x1006EE1C sub_1006EE1C +arm_func 0x1006f3f4 CreateEntity_Spring_Normal_Up @ 008 +arm_func 0x1006F58C sub_1006F58C +arm_func 0x1006F6F0 sub_1006F6F0 +arm_func 0x1006f87c CreateEntity_Spring_Normal_Down @ 009 +arm_func 0x1006F9B8 sub_1006F9B8 +arm_func 0x1006FB1C sub_1006FB1C +arm_func 0x1006fca8 CreateEntity_Spring_Horizontal @ 010 - Left +arm_func 0x1006fca8 CreateEntity_Spring_Horizontal @ 011 - Right +arm_func 0x1006FE24 sub_1006FE24 +arm_func 0x1006FF50 sub_1006FF50 +arm_func 0x100700a8 CreateEntity_Spring_Big_Up @ 012 - Up-Left +arm_func 0x100700a8 CreateEntity_Spring_Big_Up @ 013 - Up-Right +arm_func 0x10070224 sub_10070224 +arm_func 0x10070350 sub_10070350 +arm_func 0x100704a8 CreateEntity_Spring_Small_Up @ 014 - Up-Left +arm_func 0x100704a8 CreateEntity_Spring_Small_Up @ 015 - Up-Right +arm_func 0x100705F8 sub_100705F8 +arm_func 0x10070724 sub_10070724 +arm_func 0x1007087C sub_1007087C +arm_func 0x100708B4 sub_100708B4 +arm_func 0x10070B84 sub_10070B84 +arm_func 0x10070CC0 sub_10070CC0 +arm_func 0x10070F80 sub_10070F80 +arm_func 0x100719ec CreateEntity_MovingSpring @ 081 Moving Spring +arm_func 0x10071C3C sub_10071C3C +arm_func 0x10071F28 sub_10071F28 +arm_func 0x10072294 sub_10072294 +arm_func 0x100727d0 CreateEntity_HalfPipeStart @ 028 +arm_func 0x100728b8 CreateEntity_HalfPipeEnd @ 029 +arm_func 0x100729A0 sub_100729A0 +arm_func 0x10072C20 sub_10072C20 +arm_func 0x100730c4 CreateEntity_WallBumper @ 071 +arm_func 0x1007316C sub_1007316C +arm_func 0x10073428 CreateEntity_BumperTriHorizontal @ 051 +arm_func 0x1007357c CreateEntity_BumperTriVertical @ 052 +arm_func 0x100736d8 CreateEntity_BumperTriBig @ 053 +arm_func 0x10073848 sub_10073848 +arm_func 0x10073A48 sub_10073A48 +arm_func 0x10073CF0 sub_10073CF0 +arm_func 0x10073EF0 sub_10073EF0 +arm_func 0x100741A0 sub_100741A0 +arm_func 0x10074390 sub_10074390 +arm_func 0x10075174 CreateEntity_PartyBalloon @ 059 +arm_func 0x100752FC sub_100752FC +arm_func 0x1007561C sub_1007561C +arm_func 0x1007575C sub_1007575C +arm_func 0x10075794 CreateEntity_ConveyorBelt @ 069 Also used for snow in Ice Paradise +arm_func 0x10075874 sub_10075874 +arm_func 0x10075B8C sub_10075B8C +arm_func 0x10075d7c CreateEntity_Interactable099 @ 099 +arm_func 0x10075FE4 sub_10075FE4 +arm_func 0x10076170 sub_10076170 +arm_func 0x100761a8 CreateEntity_PlatformCrumbling @ 024 +arm_func 0x10076328 sub_10076328 +arm_func 0x100765C0 sub_100765C0 +arm_func 0x100768A4 sub_100768A4 +arm_func 0x10076C58 sub_10076C58 +arm_func 0x10076F4C sub_10076F4C +arm_func 0x10076f84 CreateEntity_AirBubbles @ 094 +arm_func 0x100770C8 sub_100770C8 +arm_func 0x10077414 sub_10077414 +arm_func 0x10077774 sub_10077774 +arm_func 0x10077A70 sub_10077A70 +arm_func 0x10077C18 sub_10077C18 +arm_func 0x10077C50 sub_10077C50 +arm_func 0x10077c94 CreateEntity_Lava @ 105 +arm_func 0x10077F38 sub_10077F38 +arm_func 0x100782ec CreateEntity_Booster @ 031 +arm_func 0x10078438 CreateEntity_Booster_SlightLeft @ 032 +arm_func 0x10078588 CreateEntity_Booster_SlightRight @ 033 +arm_func 0x100786d8 CreateEntity_Booster_Wall @ 047 +arm_func 0x10078818 CreateEntity_Booster_Steep @ 100 +arm_func 0x10078964 CreateEntity_Booster_Steep2 @ 101 +arm_func 0x10078AB0 sub_10078AB0 +arm_func 0x10078E90 sub_10078E90 +arm_func 0x10078ec8 CreateEntity_Platform_Square @ 055 +arm_func 0x1007920C sub_1007920C +arm_func 0x1007a148 CreateEntity_BarrelOfDoomMini @ 057 +arm_func 0x1007aa44 CreateEntity_SEGA_SONIC_Letter @ 058 +arm_func 0x1007A294 sub_1007A294 +arm_func 0x1007A7CC sub_1007A7CC +arm_func 0x1007A804 sub_1007A804 +arm_func 0x1007ABE4 sub_1007ABE4 +arm_func 0x1007AF44 sub_1007AF44 +arm_func 0x1007af7c CreateEntity_PanelGate_Vertical @ 063 +arm_func 0x1007B0C4 sub_1007B0C4 +arm_func 0x1007B274 sub_1007B274 +arm_func 0x1007b548 CreateEntity_PanelGate_Horizontal @ 064 +arm_func 0x1007B69C sub_1007B69C +arm_func 0x1007B84C sub_1007B84C +arm_func 0x1007BB24 sub_1007BB24 +arm_func 0x1007BB5C sub_1007BB5C +arm_func 0x1007bf4c CreateEntity_Interactable085 @ 085 +arm_func 0x1007C180 sub_1007C180 +arm_func 0x1007c630 CreateEntity_Interactable089 @ 089 +arm_func 0x1007C804 sub_1007C804 +arm_func 0x1007CB50 sub_1007CB50 +arm_func 0x1007cb88 CreateEntity_Interactable034 @ 034 +arm_func 0x1007CC70 sub_1007CC70 +arm_func 0x1007ce74 CreateEntity_MiniLoop_Base @ 035 +arm_func 0x1007CF5C sub_1007CF5C +arm_func 0x1007d128 CreateEntity_Interactable039 @ 039 +arm_func 0x1007D210 sub_1007D210 +arm_func 0x1007d3a4 CreateEntity_MarbleTrack_Unk @ 066 +arm_func 0x1007D488 sub_1007D488 +arm_func 0x1007d9f8 CreateEntity_SpikedBarrel_ChaoHunt @ 103 +arm_func 0x1007DB28 sub_1007DB28 +arm_func 0x1007DC50 sub_1007DC50 +arm_func 0x1007dc88 CreateEntity_UnderwaterLavaPlatform @ 098 +arm_func 0x1007DDFC sub_1007DDFC +arm_func 0x1007E180 sub_1007E180 +arm_func 0x1007E69C sub_1007E69C +arm_func 0x1007e6f4 CreateEntity_Flipper @ 054 +arm_func 0x1007E84C sub_1007E84C +arm_func 0x1007F304 sub_1007F304 +arm_func 0x1007f478 CreateEntity_Flipper_Vertical @ 056 +arm_func 0x1007F5B8 sub_1007F5B8 +arm_func 0x1007F99C sub_1007F99C +arm_func 0x1007FB14 sub_1007FB14 +arm_func 0x1007fb4c CreateEntity_WaterBridge @ 040 +arm_func 0x1007FCA0 sub_1007FCA0 +arm_func 0x10080074 sub_10080074 +arm_func 0x100800ac CreateEntity_WaterBridgeSplash @ 043 +arm_func 0x100801C0 sub_100801C0 +arm_func 0x100802F0 sub_100802F0 +arm_func 0x10080328 CreateEntity_Carousel @ 074 +arm_func 0x100804E4 sub_100804E4 +arm_func 0x1008099C sub_1008099C +arm_func 0x10081344 sub_10081344 +arm_func 0x100815BC sub_100815BC +arm_func 0x10081614 CreateEntity_SmallFallBlock @ 104 (X-Zone) +arm_func 0x1008175C sub_1008175C +arm_func 0x10081AD4 sub_10081AD4 +arm_func 0x10081E8C sub_10081E8C +arm_func 0x1008220C sub_1008220C +arm_func 0x10082244 CreateEntity_SwingingHook @ 076 +arm_func 0x1008263C sub_1008263C +arm_func 0x10083194 sub_10083194 +arm_func 0x100831f8 CreateEntity_Interactable109 @ 109 +arm_func 0x100832E4 sub_100832E4 +arm_func 0x10083688 CreateEntity_GrindRail_Start @ 019 +arm_func 0x100837B4 sub_100837B4 +arm_func 0x10083ae8 CreateEntity_GrindRail_End @ 020 +arm_func 0x10083C14 Task_GrindRail_End +arm_func 0x10083FEC sub_10083FEC +arm_func 0x1008405C sub_1008405C +arm_func 0x100840ec CreateEntity_Spikes_Up @ 001 +arm_func 0x10084224 CreateEntity_Spikes_Down @ 002 +arm_func 0x10084358 Task_Spikes_Up +arm_func 0x100845E0 sub_100845E0 +arm_func 0x10084868 CreateEntity_Spikes_Horizontal @ 003 - Left +arm_func 0x10084868 CreateEntity_Spikes_Horizontal @ 004 - Right +arm_func 0x100849EC sub_100849EC +arm_func 0x10084dbc CreateEntity_Spikes_HidingUp @ 005 +arm_func 0x10084EE8 sub_10084EE8 +arm_func 0x10085098 CreateEntity_Spikes_HidingDown @ 006 +arm_func 0x100851C4 sub_100851C4 +arm_func 0x10085374 sub_10085374 +arm_func 0x100853AC sub_100853AC +arm_func 0x10085674 sub_10085674 +arm_func 0x10085A38 sub_10085A38 +arm_func 0x10085dd8 CreateEntity_Platform_Spiked @ 061 +arm_func 0x10086038 sub_10086038 +arm_func 0x10086A60 sub_10086A60 +arm_func 0x10086cbc CreateEntity_BumperHexagon @ 048 +arm_func 0x10086E58 sub_10086E58 +arm_func 0x100870CC sub_100870CC +arm_func 0x1008736C sub_1008736C +arm_func 0x100873A4 sub_100873A4 +arm_func 0x10087630 CreateEntity_InclineRamp @ 026 +arm_func 0x10087798 sub_10087798 +arm_func 0x10087be0 CreateEntity_IceBlock @ 095 +arm_func 0x10087D14 sub_10087D14 +arm_func 0x1008839C sub_1008839C +arm_func 0x100887E4 sub_100887E4 +arm_func 0x1008883C sub_1008883C +arm_func 0x10088ccc CreateEntity_IronBall @ 082 +arm_func 0x10088ED8 sub_10088ED8 +arm_func 0x10089230 sub_10089230 +arm_func 0x10089268 CreateEntity_HangBar @ 083 +arm_func 0x10089310 sub_10089310 +arm_func 0x100898bc CreateEntity_BounceBlock @ 025 +arm_func 0x10089A2C sub_10089A2C +arm_func 0x10089B98 sub_10089B98 +arm_func 0x10089D88 sub_10089D88 +arm_func 0x10089DC0 sub_10089DC0 +arm_func 0x10089f4c CreateEntity_Decoration @ 016 +arm_func 0x1008A080 sub_1008A080 +arm_func 0x1008A514 sub_1008A514 +arm_func 0x1008A764 sub_1008A764 +arm_func 0x1008ABAC sub_1008ABAC +arm_func 0x1008ac04 CreateEntity_HookRail @ 075 Hook-Rail +arm_func 0x1008ADF0 Task_HookRail +arm_func 0x1008B0F0 sub_1008B0F0 +arm_func 0x1008B610 sub_1008B610 +arm_func 0x1008B910 sub_1008B910 +arm_func 0x1008BF54 sub_1008BF54 +arm_func 0x1008C0B4 sub_1008C0B4 +arm_func 0x1008C210 sub_1008C210 +arm_func 0x1008C500 sub_1008C500 +arm_func 0x1008C9D4 sub_1008C9D4 +arm_func 0x1008CB34 TaskDestructor_HookRail +arm_func 0x1008cb6c CreateEntity_Shrubbery @ 030 +arm_func 0x1008CC38 sub_1008CC38 +arm_func 0x1008CED4 sub_1008CED4 +arm_func 0x1008CFF0 sub_1008CFF0 +arm_func 0x1008D104 sub_1008D104 +arm_func 0x1008d13c CreateEntity_Checkpoint @ 007 +arm_func 0x1008D2CC sub_1008D2CC +arm_func 0x1008D658 sub_1008D658 +arm_func 0x1008D7D0 sub_1008D7D0 +arm_func 0x1008d910 CreateEntity_MiniLoop_StartBoost @ 036 +arm_func 0x1008d9f8 CreateEntity_MiniLoop_Exit @ 037 +arm_func 0x1008DAE0 sub_1008DAE0 +arm_func 0x1008DC64 sub_1008DC64 +arm_func 0x1008ddf8 CreateEntity_MarbleTrack_Dir @ 065 +arm_func 0x1008DF0C sub_1008DF0C +arm_func 0x1008e4a4 CreateEntity_SwingRope @ 078 +arm_func 0x1008E57C Task_SwingRope +arm_func 0x1008ec80 CreateEntity_Interactable113 @ 113 +arm_func 0x1008ED28 sub_1008ED28 +arm_func 0x1008efa8 CreateEntity_StageGoal @ 000 +arm_func 0x1008F12C sub_1008F12C +arm_func 0x1008F824 sub_1008F824 +arm_func 0x1008F8AC sub_1008F8AC +arm_func 0x1008FE74 sub_1008FE74 +arm_func 0x1008FF70 sub_1008FF70 +arm_func 0x1009044C sub_1009044C +arm_func 0x10090508 sub_10090508 +arm_func 0x100905f0 CreateEntity_Track @ 106 +arm_func 0x100906F4 Task_Track +arm_func 0x10090c90 CreateEntity_TrackAirCorner @ 112 +arm_func 0x10090DF4 sub_10090DF4 +arm_func 0x10090fb8 CreateEntity_PipeEntrance @ 110 +arm_func 0x10091358 sub_10091358 +arm_func 0x10091744 sub_10091744 +arm_func 0x10091974 sub_10091974 +arm_func 0x10091CC4 sub_10091CC4 +arm_func 0x10091d08 CreateEntity_PipeExit @ 111 +arm_func 0x10092074 sub_10092074 +arm_func 0x10092324 sub_10092324 +arm_func 0x100925CC sub_100925CC +arm_func 0x100927F4 sub_100927F4 +arm_func 0x10092838 CreateEntity_RedFlag @ 042 +arm_func 0x10092998 sub_10092998 +arm_func 0x10092B60 sub_10092B60 +arm_func 0x10092E0C sub_10092E0C +arm_func 0x10092f74 CreateEntity_WallPole_Left @ 044 +arm_func 0x1009310c CreateEntity_WallPole_Right @ 045 +arm_func 0x100932A4 sub_100932A4 +arm_func 0x10093420 sub_10093420 +arm_func 0x100936AC sub_100936AC +arm_func 0x10093854 sub_10093854 +arm_func 0x1009388C sub_1009388C +arm_func 0x100939F8 sub_100939F8 +arm_func 0x10093B5C sub_10093B5C +arm_func 0x10093d14 CreateEntity_MarbleTrack_Entrance @ 067 +arm_func 0x10093E74 sub_10093E74 +arm_func 0x100944C8 sub_100944C8 +arm_func 0x10094500 CreateEntity_Flipper_SmallBlue @ 073 +arm_func 0x100946D0 sub_100946D0 +arm_func 0x10094C44 sub_10094C44 +arm_func 0x10094c7c CreateEntity_MarbleTrack_Exit @ 068 +arm_func 0x10094DE0 sub_10094DE0 +arm_func 0x1009537C sub_1009537C +arm_func 0x100953b4 CreateEntity_MiniLoop_Entrance @ 038 +arm_func 0x1009549C sub_1009549C +arm_func 0x10095634 CreateEntity_Toggle_PlayerLayer @ 017 +arm_func 0x10095634 CreateEntity_Toggle_PlayerLayer @ 018 +arm_func 0x10095760 sub_10095760 +arm_func 0x10095a18 CreateEntity_RunWheel @ 086 +arm_func 0x10095B80 sub_10095B80 +arm_func 0x10095E60 sub_10095E60 +arm_func 0x10096180 sub_10096180 +arm_func 0x100967D8 sub_100967D8 +arm_func 0x10096810 CreateEntity_BumperRound_CircularMov@ 050 +arm_func 0x100969AC sub_100969AC +arm_func 0x10096D00 sub_10096D00 +arm_func 0x100970A8 sub_100970A8 +arm_func 0x10097358 CreateEntity_FerrisWheel @ 091 +arm_func 0x100975E0 Task_FerrisWheel +arm_func 0x10097C70 TaskDestructor_FerrisWheel +arm_func 0x10097ca8 CreateEntity_Toggle_PlayerVisibility@ 070 (data[0]: 0 = Visible, 1 = Invisible) +arm_func 0x10097D54 Task_Toggle_PlayerVisibility +arm_func 0x10097f64 CreateEntity_SecurityGate @ 077 +arm_func 0x100980A8 sub_100980A8 +arm_func 0x10098308 sub_10098308 +arm_func 0x100984EC sub_100984EC +arm_func 0x1009873C sub_1009873C +arm_func 0x10098774 CreateEntity_PlatformThin @ 021 +arm_func 0x1009899C sub_1009899C +arm_func 0x10098e98 CreateEntity_PlatformThin_Falling @ 022 +arm_func 0x1009903C Task_PlatformThin_Falling +arm_func 0x10099390 sub_10099390 +arm_func 0x10099734 sub_10099734 +arm_func 0x10099B00 sub_10099B00 +arm_func 0x10099b38 CreateEntity_ShipSwing @ 060 +arm_func 0x10099D68 Task_ShipSwing +arm_func 0x1009A3C0 sub_1009A3C0 +arm_func 0x1009a424 CreateEntity_SpecialSpring @ 102 +arm_func 0x1009A580 Task_SpecialSpring +arm_func 0x1009A95C Task_1009A95C +arm_func 0x1009ACF4 sub_1009ACF4 +arm_func 0x1009ad2c CreateEntity_Interactable096 @ 096 +arm_func 0x1009ADD4 Task_Interactable096 +arm_func 0x1009aff8 CreateEntity_Interactable107 @ 107 +arm_func 0x1009B0DC sub_1009B0DC +arm_func 0x1009b664 CreateEntity_SteamExhaust @ 079 +arm_func 0x1009B7D8 sub_1009B7D8 +arm_func 0x1009BBDC sub_1009BBDC +arm_func 0x1009C0B4 sub_1009C0B4 +arm_func 0x1009c10c CreateEntity_BoulderSpawner @ 092 +arm_func 0x1009C1B4 sub_1009C1B4 +arm_func 0x1009C44C sub_1009C44C +arm_func 0x1009C90C sub_1009C90C +arm_func 0x1009CB38 sub_1009CB38 +arm_func 0x1009CF80 sub_1009CF80 +arm_func 0x1009CFB8 sub_1009CFB8 +arm_func 0x1009d010 CreateEntity_SkatingStone @ 084 +arm_func 0x1009D1BC sub_1009D1BC +arm_func 0x1009D530 sub_1009D530 +arm_func 0x1009E39C sub_1009E39C +arm_func 0x1009E678 sub_1009E678 +arm_func 0x1009EAE0 sub_1009EAE0 +arm_func 0x1009EB38 sub_1009EB38 +arm_func 0x1009eb90 CreateEntity_Torch @ 087 (Cosmic Angel: Antigravity field elements) +arm_func 0x1009ED24 sub_1009ED24 +arm_func 0x1009EE4C sub_1009EE4C +arm_func 0x1009ee84 CreateEntity_Waterfall @ 027 (Only particles, used for "Sand Falls" as well) +arm_func 0x1009F20C sub_1009F20C +arm_func 0x1009F878 sub_1009F878 +arm_func 0x100A0180 sub_100A0180 +arm_func 0x100a01b8 CreateEntity_Bowl @ 062 +arm_func 0x100A034C sub_100A034C +arm_func 0x100A074C sub_100A074C +arm_func 0x100A1018 sub_100A1018 +arm_func 0x100A126C sub_100A126C +arm_func 0x100a12a4 CreateEntity_ToBeContinuedText @ 041 +arm_func 0x100A133C sub_100A133C +arm_func 0x100A152C sub_100A152C +arm_func 0x100A15D0 sub_100A15D0 +arm_func 0x100a1634 CreateEntity_SpikedBarrel @ 093 +arm_func 0x100A1834 sub_100A1834 +arm_func 0x100A1F70 sub_100A1F70 +arm_func 0x100a1fa8 CreateEntity_Trampoline @ 023 +arm_func 0x100A2160 sub_100A2160 +arm_func 0x100A22C0 sub_100A22C0 +arm_func 0x100A2454 sub_100A2454 +arm_func 0x100A248C sub_100A248C +arm_func 0x100a25e0 CreateEntity_Spring_Hiding @ 108 +arm_func 0x100A271C sub_100A271C +arm_func 0x100A2868 sub_100A2868 +arm_func 0x100A2A08 sub_100A2A08 +arm_func 0x100A2A40 sub_100A2A40 +arm_func 0x100a2c38 CreateEntity_BreakableWall @ 114 +arm_func 0x100A2DB8 sub_100A2DB8 +arm_func 0x100A3194 sub_100A3194 +arm_func 0x100A35AC sub_100A35AC +arm_func 0x100a35e4 CreateEntity_TeleportOrb @ 072 (Casino Paradise) +arm_func 0x100A36C4 sub_100A36C4 +arm_func 0x100a3c30 CreateEntity_ForcedIceSlide @ 046 +arm_func 0x100A3DC0 sub_100A3DC0 +arm_func 0x100A42FC sub_100A42FC +arm_func 0x100a4334 CreateEntity_PlayerFloat @ 090 (data[0]: 0 = Whirlwind, 1 = Antigravity) +arm_func 0x100A454C sub_100A454C +arm_func 0x100a4c6c CreateEntity_Interactable097 @ 097 +arm_func 0x100A4DF0 sub_100A4DF0 + + + + +arm_func 0x100A4F18 sub_100A4F18 +arm_func 0x100A4F50 sub_100A4F50 +arm_func 0x100A5024 sub_100A5024 +arm_func 0x100A5138 sub_100A5138 +arm_func 0x100A5170 sub_100A5170 +arm_func 0x100A53A0 sub_100A53A0 +arm_func 0x100A53F8 sub_100A53F8 +arm_func 0x100A5AE0 sub_100A5AE0 +arm_func 0x100A6044 sub_100A6044 +arm_func 0x100A614C sub_100A614C +arm_func 0x100A6228 sub_100A6228 +arm_func 0x100A62C8 sub_100A62C8 +arm_func 0x100A6350 sub_100A6350 +arm_func 0x100A67A0 sub_100A67A0 +arm_func 0x100A6978 sub_100A6978 +arm_func 0x100A6A60 sub_100A6A60 +arm_func 0x100A6DEC sub_100A6DEC +arm_func 0x100A6DF0 sub_100A6DF0 +arm_func 0x100A6E54 sub_100A6E54 +arm_func 0x100A703C sub_100A703C +arm_func 0x100A70CC sub_100A70CC +arm_func 0x100A70F8 sub_100A70F8 +arm_func 0x100A7124 sub_100A7124 +arm_func 0x100A72D0 sub_100A72D0 +arm_func 0x100A72D4 sub_100A72D4 +arm_func 0x100A7348 sub_100A7348 +arm_func 0x100A74A4 sub_100A74A4 +arm_func 0x100A75D0 sub_100A75D0 +arm_func 0x100A7828 sub_100A7828 +arm_func 0x100A78AC sub_100A78AC +arm_func 0x100A7904 sub_100A7904 +arm_func 0x100A79B8 sub_100A79B8 +arm_func 0x100A7B14 sub_100A7B14 +arm_func 0x100A7BD0 sub_100A7BD0 +arm_func 0x100A7C50 sub_100A7C50 +arm_func 0x100A7F5C sub_100A7F5C +arm_func 0x100A811C sub_100A811C +arm_func 0x100A820C sub_100A820C +arm_func 0x100A839C sub_100A839C +arm_func 0x100A8410 GameInit +arm_func 0x100A8690 sub_100A8690 +arm_func 0x100A87F4 sub_100A87F4 +arm_func 0x100A8840 sub_100A8840 +arm_func 0x100A886C Task_100A886C +arm_func 0x100A8880 TaskDestructor_100A8880 +arm_func 0x100A8884 sub_100A8884 +arm_func 0x100A8EE0 sub_100A8EE0 +arm_func 0x100A8F04 sub_100A8F04 +arm_func 0x100A8F4C sub_100A8F4C +arm_func 0x100A8FA8 sub_100A8FA8 +arm_func 0x100A96C0 sub_100A96C0 +arm_func 0x100A9734 sub_100A9734 +arm_func 0x100A97F4 sub_100A97F4 +arm_func 0x100A9990 sub_100A9990 +arm_func 0x100A9A44 sub_100A9A44 +arm_func 0x100A9A84 sub_100A9A84 +arm_func 0x100A9D10 sub_100A9D10 +arm_func 0x100A9E28 sub_100A9E28 +arm_func 0x100A9EFC sub_100A9EFC +arm_func 0x100AA2B8 sub_100AA2B8 +arm_func 0x100AA360 sub_100AA360 +arm_func 0x100AA4F0 sub_100AA4F0 +arm_func 0x100AA598 sub_100AA598 +arm_func 0x100AA630 sub_100AA630 +arm_func 0x100AA6A4 sub_100AA6A4 +arm_func 0x100AAF64 sub_100AAF64 +arm_func 0x100AB138 sub_100AB138 +arm_func 0x100AB1EC sub_100AB1EC +arm_func 0x100AB258 sub_100AB258 +arm_func 0x100AB264 sub_100AB264 +arm_func 0x100AB2A8 sub_100AB2A8 +arm_func 0x100AB474 sub_100AB474 +arm_func 0x100AB518 sub_100AB518 +arm_func 0x100AB6D8 sub_100AB6D8 +arm_func 0x100AB734 sub_100AB734 +arm_func 0x100AC040 sub_100AC040 +arm_func 0x100AF68C sub_100AF68C +arm_func 0x100AF950 sub_100AF950 +arm_func 0x100AF954 sub_100AF954 +arm_func 0x100AF958 sub_100AF958 +arm_func 0x100AF95C sub_100AF95C +arm_func 0x100AF960 sub_100AF960 +arm_func 0x100AF964 sub_100AF964 +arm_func 0x100AF968 sub_100AF968 +arm_func 0x100AF96C sub_100AF96C +arm_func 0x100af970 CreateEntity_ItemBox_ChaoHunt @ 115 +arm_func 0x100AF974 sub_100AF974 +arm_func 0x100AF978 sub_100AF978 +arm_func 0x100AF97C sub_100AF97C +arm_func 0x100AF980 sub_100AF980 +arm_func 0x100AF984 sub_100AF984 +arm_func 0x100AF988 sub_100AF988 +arm_func 0x100AF98C sub_100AF98C +arm_func 0x100AF990 sub_100AF990 +arm_func 0x100AF994 sub_100AF994 +arm_func 0x100AF998 sub_100AF998 +arm_func 0x100AF99C sub_100AF99C +arm_func 0x100AF9A0 sub_100AF9A0 +arm_func 0x100AF9A4 sub_100AF9A4 +arm_func 0x100AF9A8 sub_100AF9A8 +arm_func 0x100AF9AC sub_100AF9AC +arm_func 0x100AF9B0 sub_100AF9B0 +arm_func 0x100AF9B4 sub_100AF9B4 +arm_func 0x100AF9B8 sub_100AF9B8 +arm_func 0x100AF9BC sub_100AF9BC +arm_func 0x100AF9C4 sub_100AF9C4 +arm_func 0x100AF9CC sub_100AF9CC +arm_func 0x100AF9D0 sub_100AF9D0 +arm_func 0x100AF9D4 sub_100AF9D4 +arm_func 0x100AF9D8 sub_100AF9D8 +arm_func 0x100AF9E0 sub_100AF9E0 +arm_func 0x100AF9E8 sub_100AF9E8 +arm_func 0x100AF9EC sub_100AF9EC +arm_func 0x100AF9F4 sub_100AF9F4 +arm_func 0x100AF9F8 sub_100AF9F8 +arm_func 0x100AF9FC sub_100AF9FC +arm_func 0x100AFA00 sub_100AFA00 +arm_func 0x100AFA04 sub_100AFA04 +arm_func 0x100AFA08 sub_100AFA08 +arm_func 0x100AFA0C sub_100AFA0C +arm_func 0x100AFA10 sub_100AFA10 +arm_func 0x100AFA14 sub_100AFA14 +arm_func 0x100AFA18 sub_100AFA18 +arm_func 0x100AFA1C sub_100AFA1C +arm_func 0x100AFA20 sub_100AFA20 +arm_func 0x100AFE3C sub_100AFE3C +arm_func 0x100AFF34 sub_100AFF34 +arm_func 0x100B002C sub_100B002C +arm_func 0x100B0128 sub_100B0128 +arm_func 0x100B0224 sub_100B0224 +arm_func 0x100B0540 sub_100B0540 +arm_func 0x100B0838 sub_100B0838 +arm_func 0x100B0F08 sub_100B0F08 +arm_func 0x100B1420 sub_100B1420 +arm_func 0x100B1918 sub_100B1918 +arm_func 0x100B1DF0 sub_100B1DF0 +arm_func 0x100B2028 sub_100B2028 +arm_func 0x100B20DC sub_100B20DC +arm_func 0x100B21A0 sub_100B21A0 +arm_func 0x100B21A4 sub_100B21A4 +arm_func 0x100B2280 sub_100B2280 +arm_func 0x100B2458 sub_100B2458 +arm_func 0x100B2624 sub_100B2624 +arm_func 0x100B2790 sub_100B2790 +arm_func 0x100B2950 sub_100B2950 +arm_func 0x100B2B00 sub_100B2B00 +arm_func 0x100B2C98 sub_100B2C98 +arm_func 0x100B2DB0 sub_100B2DB0 +arm_func 0x100B2EC8 sub_100B2EC8 +arm_func 0x100B2FE0 sub_100B2FE0 +arm_func 0x100B3108 sub_100B3108 +arm_func 0x100B3834 sub_100B3834 +arm_func 0x100B3A58 sub_100B3A58 +arm_func 0x100B3D98 sub_100B3D98 +arm_func 0x100B3DC4 sub_100B3DC4 +arm_func 0x100B3DE0 sub_100B3DE0 +arm_func 0x100B3EB8 sub_100B3EB8 +arm_func 0x100B3ED4 sub_100B3ED4 +arm_func 0x100B3FAC sub_100B3FAC +arm_func 0x100B3FE4 sub_100B3FE4 +arm_func 0x100B4000 Task_100B4000 +arm_func 0x100B40D8 sub_100B40D8 +arm_func 0x100B413C sub_100B413C +arm_func 0x100B4214 sub_100B4214 +arm_func 0x100B4380 Task_100B4380 +arm_func 0x100B461C Task_100B461C +arm_func 0x100B48FC Task_100B48FC +arm_func 0x100B4988 Task_100B4988 +arm_func 0x100B4A24 Task_100B4A24 +arm_func 0x100B4A94 TaskDestructor_100B4A94 +arm_func 0x100B4B68 sub_100B4B68 +arm_func 0x100B4D0C sub_100B4D0C +arm_func 0x100B4D60 sub_100B4D60 +arm_func 0x100B500C sub_100B500C +arm_func 0x100B506C sub_100B506C +arm_func 0x100B5580 sub_100B5580 +arm_func 0x100B5744 sub_100B5744 +arm_func 0x100B58B8 sub_100B58B8 +arm_func 0x100B58E4 sub_100B58E4 +arm_func 0x100B5910 sub_100B5910 +arm_func 0x100B593C sub_100B593C +arm_func 0x100B59B0 sub_100B59B0 +arm_func 0x100B5BB4 sub_100B5BB4 +arm_func 0x100B5CE8 sub_100B5CE8 +arm_func 0x100B5E80 sub_100B5E80 +arm_func 0x100B5F14 sub_100B5F14 +arm_func 0x100B606C sub_100B606C +arm_func 0x100B62C8 sub_100B62C8 +arm_func 0x100B64B0 sub_100B64B0 +arm_func 0x100B6698 sub_100B6698 +arm_func 0x100B6888 sub_100B6888 +arm_func 0x100B6910 sub_100B6910 +arm_func 0x100B69FC sub_100B69FC + +arm_func 0x100B6C5C sub_100B6C5C +arm_func 0x100B6C9C sub_100B6C9C +arm_func 0x100B6D2C sub_100B6D2C +arm_func 0x100BAF68 sub_100BAF68 +arm_func 0x100BB028 sub_100BB028 +arm_func 0x100BB4AC sub_100BB4AC +arm_func 0x100BB5B0 sub_100BB5B0 +arm_func 0x100BB75C sub_100BB75C +arm_func 0x100BBA08 sub_100BBA08 +arm_func 0x100BBB08 sub_100BBB08 +arm_func 0x100BBC48 sub_100BBC48 +arm_func 0x100BBEA8 sub_100BBEA8 +arm_func 0x100BBF80 sub_100BBF80 +arm_func 0x100BC290 sub_100BC290 +arm_func 0x100BC590 sub_100BC590 +arm_func 0x100BC6C0 sub_100BC6C0 +arm_func 0x100BC770 sub_100BC770 +arm_func 0x100BCA10 sub_100BCA10 +arm_func 0x100BCB68 sub_100BCB68 +arm_func 0x100BCE7C sub_100BCE7C +arm_func 0x100BD26C sub_100BD26C +arm_func 0x100BDD24 sub_100BDD24 +arm_func 0x100BE028 sub_100BE028 +arm_func 0x100BE074 sub_100BE074 +arm_func 0x100BE15C sub_100BE15C +arm_func 0x100BE230 sub_100BE230 +arm_func 0x100BE348 sub_100BE348 +arm_func 0x100BE454 sub_100BE454 +arm_func 0x100BE61C sub_100BE61C +arm_func 0x100BE7DC sub_100BE7DC +arm_func 0x100BE958 sub_100BE958 +arm_func 0x100BEC94 sub_100BEC94 +arm_func 0x100BEE18 sub_100BEE18 +arm_func 0x100BEE50 sub_100BEE50 +arm_func 0x100BEF40 sub_100BEF40 +arm_func 0x100BF1B4 sub_100BF1B4 +arm_func 0x100BF1EC sub_100BF1EC +arm_func 0x100BF240 sub_100BF240 +arm_func 0x100BF294 sub_100BF294 +arm_func 0x100BF370 sub_100BF370 +arm_func 0x100BF46C sub_100BF46C +arm_func 0x100BF4A4 sub_100BF4A4 +arm_func 0x100BF5B8 sub_100BF5B8 +arm_func 0x100BF6CC sub_100BF6CC +arm_func 0x100BF884 sub_100BF884 +arm_func 0x100C0C78 sub_100C0C78 +arm_func 0x100C10E4 sub_100C10E4 +arm_func 0x100C11F8 sub_100C11F8 +arm_func 0x100C127C sub_100C127C +arm_func 0x100C130C sub_100C130C +arm_func 0x100C1444 sub_100C1444 +arm_func 0x100C1978 sub_100C1978 +arm_func 0x100C1ED8 sub_100C1ED8 +arm_func 0x100C219C sub_100C219C +arm_func 0x100C22E4 sub_100C22E4 +arm_func 0x100C25B4 sub_100C25B4 +arm_func 0x100C29A0 sub_100C29A0 +arm_func 0x100C2B08 sub_100C2B08 +arm_func 0x100C2D60 sub_100C2D60 +arm_func 0x100C33E0 sub_100C33E0 +arm_func 0x100C3518 sub_100C3518 +arm_func 0x100C3674 sub_100C3674 +arm_func 0x100C37F4 sub_100C37F4 +arm_func 0x100C3934 sub_100C3934 +arm_func 0x100C3A68 sub_100C3A68 +arm_func 0x100C3D00 sub_100C3D00 +arm_func 0x100C3FAC sub_100C3FAC +arm_func 0x100C4038 sub_100C4038 +arm_func 0x100C41B4 sub_100C41B4 +arm_func 0x100C4338 sub_100C4338 +arm_func 0x100C46E0 sub_100C46E0 +arm_func 0x100C4A78 sub_100C4A78 +arm_func 0x100C4B8C sub_100C4B8C +arm_func 0x100C4C80 sub_100C4C80 +arm_func 0x100C4E40 sub_100C4E40 +arm_func 0x100C5E1C sub_100C5E1C +arm_func 0x100C5E54 sub_100C5E54 +arm_func 0x100C5F30 sub_100C5F30 +arm_func 0x100C62C0 sub_100C62C0 +arm_func 0x100C639C sub_100C639C +arm_func 0x100C68CC sub_100C68CC +arm_func 0x100C6E58 sub_100C6E58 +arm_func 0x100C7548 sub_100C7548 +arm_func 0x100C7C74 sub_100C7C74 +arm_func 0x100C7D44 sub_100C7D44 +arm_func 0x100C7DF0 sub_100C7DF0 +arm_func 0x100C7EDC sub_100C7EDC +arm_func 0x100C7FB0 sub_100C7FB0 +arm_func 0x100C8024 sub_100C8024 +arm_func 0x100C8104 sub_100C8104 +arm_func 0x100C817C sub_100C817C +arm_func 0x100C81FC sub_100C81FC +arm_func 0x100C8294 sub_100C8294 +arm_func 0x100C8300 sub_100C8300 +arm_func 0x100C838C sub_100C838C +arm_func 0x100C8470 sub_100C8470 +arm_func 0x100C852C sub_100C852C +arm_func 0x100C85C0 sub_100C85C0 +arm_func 0x100C85C4 sub_100C85C4 +arm_func 0x100C864C sub_100C864C +arm_func 0x100C86D0 sub_100C86D0 +arm_func 0x100C875C sub_100C8810 +arm_func 0x100C8810 sub_100C8810 +arm_func 0x100C8968 sub_100C8968 +arm_func 0x100C9570 sub_100C9570 +arm_func 0x100C9604 sub_100C9604 +arm_func 0x100C96B4 sub_100C96B4 +arm_func 0x100C9F38 sub_100C9F38 +arm_func 0x100C9F98 sub_100C9F98 +arm_func 0x100CA204 sub_100CA204 +arm_func 0x100CA5A4 sub_100CA5A4 +arm_func 0x100CA64C sub_100CA64C +arm_func 0x100CA728 sub_100CA728 +arm_func 0x100CA7CC sub_100CA7CC +arm_func 0x100CA900 sub_100CA900 +arm_func 0x100CA9D4 sub_100CA9D4 +arm_func 0x100CAB5C sub_100CAB5C +arm_func 0x100CACE4 sub_100CACE4 +arm_func 0x100CAD1C sub_100CAD1C +arm_func 0x100CADCC sub_100CADCC +arm_func 0x100CB644 sub_100CB644 +arm_func 0x100CB66C sub_100CB66C +arm_func 0x100CB6FC sub_100CB6FC +arm_func 0x100CB7AC sub_100CB7AC +arm_func 0x100CB874 sub_100CB874 +arm_func 0x100CB8AC sub_100CB8AC +arm_func 0x100CBA38 sub_100CBA38 +arm_func 0x100CBA74 sub_100CBA74 +arm_func 0x100CBA98 sub_100CBA98 +arm_func 0x100CBB14 sub_100CBB14 +arm_func 0x100CBB28 sub_100CBB28 +arm_func 0x100CBC5C Task_100CBC5C +arm_func 0x100CBC9C sub_100CBC9C +arm_func 0x100CBCF8 Task_100CBCF8 +arm_func 0x100CBD34 Task_100CBD34 +arm_func 0x100CBD84 Task_100CBD84 +arm_func 0x100CBEA4 sub_100CBEA4 +arm_func 0x100CBF78 sub_100CBF78 +arm_func 0x100CBFC8 sub_100CBFC8 +arm_func 0x100CC104 sub_100CC104 +arm_func 0x100CC518 sub_100CC518 +arm_func 0x100CC530 sub_100CC530 +arm_func 0x100CC598 sub_100CC598 +arm_func 0x100CC7F4 sub_100CC7F4 +arm_func 0x100CC890 sub_100CC890 +arm_func 0x100CC944 sub_100CC944 +arm_func 0x100CCA00 sub_100CCA00 +arm_func 0x100CCAA0 sub_100CCAA0 +arm_func 0x100CCB84 sub_100CCB84 +arm_func 0x100CCBD4 sub_100CCBD4 +arm_func 0x100CCD70 sub_100CCD70 +arm_func 0x100CCF00 sub_100CCF00 +arm_func 0x100CD458 sub_100CD458 +arm_func 0x100CD53C sub_100CD53C +arm_func 0x100CD708 sub_100CD708 +arm_func 0x100CD70C sub_100CD70C +arm_func 0x100CDA8C sub_100CDA8C +arm_func 0x100CDC24 sub_100CDC24 +arm_func 0x100CDD4C sub_100CDD4C +arm_func 0x100CDE68 sub_100CDE68 +arm_func 0x100CDF8C sub_100CDF8C +arm_func 0x100CE090 sub_100CE090 +arm_func 0x100CE180 sub_100CE180 +arm_func 0x100CE27C sub_100CE27C +arm_func 0x100CE364 sub_100CE364 +arm_func 0x100CE5F4 sub_100CE5F4 +arm_func 0x100CE6A4 sub_100CE6A4 +arm_func 0x100CE854 sub_100CE854 +arm_func 0x100CE934 sub_100CE934 +arm_func 0x100CEB78 sub_100CEB78 +arm_func 0x100CEC34 sub_100CEC34 +arm_func 0x100CECB0 sub_100CECB0 +arm_func 0x100CF0B8 sub_100CF0B8 +arm_func 0x100CF178 sub_100CF178 + +arm_func 0x100CFFAC sub_100CFFAC +arm_func 0x100D0168 sub_100D0168 +arm_func 0x100D0234 sub_100D0234 +arm_func 0x100D031C sub_100D031C +arm_func 0x100D0330 sub_100D0330 +arm_func 0x100D0430 sub_100D0430 +arm_func 0x100D0538 sub_100D0538 +arm_func 0x100D0738 sub_100D0738 +arm_func 0x100D0878 sub_100D0878 +arm_func 0x100D0A38 sub_100D0A38 +arm_func 0x100D0B7C sub_100D0B7C +arm_func 0x100D0D14 sub_100D0D14 +arm_func 0x100D0DAC sub_100D0DAC +arm_func 0x100D0FCC sub_100D0FCC +arm_func 0x100D10C0 sub_100D10C0 +arm_func 0x100D1160 sub_100D1160 +arm_func 0x100D1340 sub_100D1340 +arm_func 0x100D1C74 sub_100D1C74 +arm_func 0x100D1CAC sub_100D1CAC +arm_func 0x100D1CB4 sub_100D1CB4 +arm_func 0x100D1DA8 sub_100D1DA8 +arm_func 0x100D2544 sub_100D2544 +arm_func 0x100D2E64 sub_100D2E64 +arm_func 0x100D32A0 sub_100D32A0 +arm_func 0x100D32A4 sub_100D32A4 +arm_func 0x100D33EC sub_100D33EC +arm_func 0x100D362C sub_100D362C +arm_func 0x100D37C8 sub_100D37C8 +arm_func 0x100D39B4 sub_100D39B4 +arm_func 0x100D3BD8 sub_100D3BD8 +arm_func 0x100D3DB4 sub_100D3BD4 +arm_func 0x100D3FD8 sub_100D3FD8 +arm_func 0x100D41E0 sub_100D41E0 +arm_func 0x100D440C sub_100D440C +arm_func 0x100D45E8 sub_100D45E8 +arm_func 0x100D48C8 sub_100D48C8 +arm_func 0x100D4D00 sub_100D4D00 +arm_func 0x100D4D98 sub_100D4D98 +arm_func 0x100D5038 sub_100D5038 +arm_func 0x100D5180 sub_100D5180 +arm_func 0x100D5208 sub_100D5208 +arm_func 0x100D5324 sub_100D5324 +arm_func 0x100D54B4 sub_100D54B4 +arm_func 0x100D553C sub_100D553C +arm_func 0x100D5C10 sub_100D5C10 +arm_func 0x100D5D18 sub_100D5D18 +arm_func 0x100D6244 sub_100D6244 +arm_func 0x100D6248 sub_100D6248 +arm_func 0x100D62E0 sub_100D62E0 +arm_func 0x100D63DC sub_100D63DC +arm_func 0x100D64D4 sub_100D64D4 +arm_func 0x100D64D8 sub_100D64D8 +arm_func 0x100D6578 sub_100D6578 +arm_func 0x100D6618 sub_100D6618 +arm_func 0x100D66D8 sub_100D66D8 +arm_func 0x100D7328 sub_100D7328 +arm_func 0x100D7604 sub_100D7604 +arm_func 0x100D78D4 sub_100D78D4 +arm_func 0x100D78D8 sub_100D78D8 +arm_func 0x100D7A0C sub_100D7A0C +arm_func 0x100D7D7C sub_100D7D7C +arm_func 0x100D7FCC sub_100D7FCC +arm_func 0x100D81B0 sub_100D81B0 +arm_func 0x100D860C sub_100D860C +arm_func 0x100D87D4 sub_100D87D4 +arm_func 0x100D87D8 sub_100D87D8 +arm_func 0x100D89A0 sub_100D89A0 +arm_func 0x100D8B9C sub_100D8B9C +arm_func 0x100D8C98 sub_100D8C98 +arm_func 0x100D9498 sub_100D9498 +arm_func 0x100D949C sub_100D949C +arm_func 0x100D9908 sub_100D9908 +arm_func 0x100DA050 sub_100DA050 +arm_func 0x100DA6E0 sub_100DA6E0 +arm_func 0x100DA8D8 sub_100DA8D8 +arm_func 0x100DAA00 sub_100DAA00 +arm_func 0x100DAB18 sub_100DAB18 +arm_func 0x100DAC84 sub_100DAC84 +arm_func 0x100DAD84 sub_100DAD84 +arm_func 0x100DAFD4 sub_100DAFD4 +arm_func 0x100DB144 sub_100DB144 +arm_func 0x100DB998 sub_100DB998 +arm_func 0x100DBFE4 sub_100DBFE4 +arm_func 0x100DC5A8 sub_100DC5A8 +arm_func 0x100DC5C4 sub_100DC5C4 +arm_func 0x100DC6AC sub_100DC6AC +arm_func 0x100DC91C sub_100DC91C +arm_func 0x100DCAA8 sub_100DCAA8 +arm_func 0x100DCD14 sub_100DCD14 +arm_func 0x100DCE34 sub_100DCE34 +arm_func 0x100DD08C sub_100DD08C +arm_func 0x100DD0C4 sub_100DD0C4 +arm_func 0x100DD128 sub_100DD128 +arm_func 0x100DD184 sub_100DD184 +arm_func 0x100DD2A8 sub_100DD2A8 + +# Used by multiple different procs (CreateEntity_EggSpider, ...) +arm_func 0x100DD47C Task_100DD47C + +arm_func 0x100DD4DC sub_100DD4DC +arm_func 0x100DD534 sub_100DD534 +arm_func 0x100DD600 sub_100DD600 +arm_func 0x100DD624 sub_100DD624 +arm_func 0x100DD9DC sub_100DD9DC +arm_func 0x100DDA88 sub_100DDA88 +arm_func 0x100DDB50 sub_100DDB50 +arm_func 0x100DDC14 sub_100DDC14 +arm_func 0x100DDC88 sub_100DDC88 +arm_func 0x100DDDD0 sub_100DDDD0 +arm_func 0x100DDEEC sub_100DDEEC +arm_func 0x100DDF44 sub_100DDF44 +arm_func 0x100DDFAC sub_100DDFAC +arm_func 0x100DDFF8 sub_100DDFF8 +arm_func 0x100DE0D8 sub_100DE0D8 +arm_func 0x100DE190 sub_100DE190 +arm_func 0x100DE210 sub_100DE210 +arm_func 0x100DE288 sub_100DE288 +arm_func 0x100DE2E0 sub_100DE2E0 +arm_func 0x100DE39C sub_100DE39C +arm_func 0x100DE548 sub_100DE548 +arm_func 0x100DE61C sub_100DE61C +arm_func 0x100DE9E4 sub_100DE9E4 +arm_func 0x100DED28 sub_100DED28 +arm_func 0x100DEE2C sub_100DEE2C +arm_func 0x100DF00C sub_100DF00C +arm_func 0x100DF0B8 sub_100DF0B8 +arm_func 0x100DF208 sub_100DF208 +arm_func 0x100DF26C sub_100DF26C +arm_func 0x100DF4DC sub_100DF4DC +arm_func 0x100DF66C sub_100DF66C +arm_func 0x100DF910 sub_100DF910 +arm_func 0x100DF950 sub_100DF950 +arm_func 0x100DF990 sub_100DF990 +arm_func 0x100DFA30 sub_100DFA30 +arm_func 0x100DFC80 sub_100DFC80 +arm_func 0x100DFE04 sub_100DFE04 +arm_func 0x100DFE20 sub_100DFE20 +arm_func 0x100DFEE0 sub_100DFEE0 +arm_func 0x100DFF5C sub_100DFF5C +arm_func 0x100E00EC sub_100E00EC +arm_func 0x100E05E8 sub_100E05E8 +arm_func 0x100E05EC sub_100E05EC +arm_func 0x100E0B10 sub_100E0B10 +arm_func 0x100E108C sub_100E108C +arm_func 0x100E113C sub_100E113C +arm_func 0x100E12FC sub_100E12FC +arm_func 0x100E1888 sub_100E1888 +arm_func 0x100E1AF4 sub_100E1AF4 +arm_func 0x100E1C3C sub_100E1C3C +arm_func 0x100E1C94 sub_100E1C94 +arm_func 0x100E1E58 sub_100E1E58 +arm_func 0x100E1ED4 sub_100E1ED4 +arm_func 0x100E2294 sub_100E2294 +arm_func 0x100E2410 sub_100E2410 +arm_func 0x100E2518 sub_100E2518 +arm_func 0x100E261C sub_100E261C +arm_func 0x100E2770 sub_100E2770 +arm_func 0x100E27C4 sub_100E27C4 +arm_func 0x100E2828 sub_100E2828 +arm_func 0x100E2C6C sub_100E2C6C +arm_func 0x100E2EE8 sub_100E2EE8 +arm_func 0x100E2F14 sub_100E2F14 +arm_func 0x100E3140 sub_100E3140 +arm_func 0x100E32AC sub_100E32AC +arm_func 0x100E33F0 sub_100E33F0 +arm_func 0x100E3488 sub_100E3488 +arm_func 0x100E361C sub_100E361C +arm_func 0x100E37C0 sub_100E37C0 +arm_func 0x100E38A8 sub_100E38A8 +arm_func 0x100E39C0 sub_100E39C0 +arm_func 0x100E39C4 sub_100E39C4 +arm_func 0x100E3B4C sub_100E3B4C +arm_func 0x100E3C90 sub_100E3C90 +arm_func 0x100E3C94 sub_100E3C94 + +arm_func 0x100E40A4 sub_100E40A4 +arm_func 0x100E4254 sub_100E4254 +arm_func 0x100E4268 sub_100E4268 +arm_func 0x100E4270 sub_100E4270 +arm_func 0x100E4278 sub_100E4278 +arm_func 0x100E4398 sub_100E4398 +arm_func 0x100E44B8 sub_100E44B8 +arm_func 0x100E4538 sub_100E4538 +arm_func 0x100E453C sub_100E453C +arm_func 0x100E4540 sub_100E4540 +arm_func 0x100E4544 sub_100E4544 +arm_func 0x100E4548 sub_100E4548 +arm_func 0x100E454C sub_100E454C +arm_func 0x100E4550 sub_100E4550 +arm_func 0x100E4554 sub_100E4554 +arm_func 0x100E4558 sub_100E4558 +arm_func 0x100E455C sub_100E455C +arm_func 0x100E4560 sub_100E4560 +arm_func 0x100E4564 sub_100E4564 +arm_func 0x100E4568 sub_100E4568 +arm_func 0x100E456C sub_100E456C +arm_func 0x100E4570 sub_100E4570 +arm_func 0x100E4574 sub_100E4574 +arm_func 0x100E4578 sub_100E4578 +arm_func 0x100E457C sub_100E457C +arm_func 0x100E4580 sub_100E4580 +arm_func 0x100E4584 sub_100E4584 +arm_func 0x100E4588 sub_100E4588 +arm_func 0x100E458C sub_100E458C +arm_func 0x100E4590 sub_100E4590 +arm_func 0x100E4594 sub_100E4594 +arm_func 0x100E4598 sub_100E4598 +arm_func 0x100E459C sub_100E459C +arm_func 0x100E45A0 sub_100E45A0 +arm_func 0x100E45A4 sub_100E45A4 +arm_func 0x100E45A8 sub_100E45A8 +arm_func 0x100E45AC sub_100E45AC +arm_func 0x100E45B0 sub_100E45B0 +arm_func 0x100E45B4 sub_100E45B4 +arm_func 0x100E45B8 sub_100E45B8 +arm_func 0x100E45BC sub_100E45BC +arm_func 0x100E45C0 sub_100E45C0 +arm_func 0x100E45C4 sub_100E45C4 +arm_func 0x100E45C8 sub_100E45C8 +arm_func 0x100E45CC sub_100E45CC +arm_func 0x100E45D0 sub_100E45D0 +arm_func 0x100E45D4 sub_100E45D4 +arm_func 0x100E45D8 sub_100E45D8 +arm_func 0x100E45DC sub_100E45DC +arm_func 0x100E45E0 sub_100E45E0 +arm_func 0x100E45E4 sub_100E45E4 + +arm_func 0x100E4834 sub_100E4834 +arm_func 0x100E4940 sub_100E4940 +arm_func 0x100E4944 sub_100E4944 +arm_func 0x100E4948 sub_100E4948 +arm_func 0x100E494C sub_100E494C +arm_func 0x100E45D8 sub_100E45D8 +arm_func 0x100E45DC sub_100E45DC +arm_func 0x100E45E0 sub_100E45E0 +arm_func 0x100E45E4 sub_100E45E4 +arm_func 0x100E4834 sub_100E4834 +arm_func 0x100E4D10 sub_100E4D10 +arm_func 0x100E4D74 sub_100E4D74 +arm_func 0x100E5328 sub_100E5328 +arm_func 0x100E584C sub_100E584C +arm_func 0x100E5B3C sub_100E5B3C +arm_func 0x100E5C30 sub_100E5C30 +arm_func 0x100E5CF4 sub_100E5CF4 +arm_func 0x100E5ED8 sub_100E5ED8 +arm_func 0x100E6414 sub_100E6414 +arm_func 0x100E65EC sub_100E65EC +arm_func 0x100E67C8 sub_100E67C8 +arm_func 0x100E693C sub_100E693C + +arm_func 0x100E6A90 sub_100E6A90 +arm_func 0x100E6B74 sub_100E6B74 +arm_func 0x100E6D90 sub_100E6D90 +arm_func 0x100E6F98 sub_100E6F98 +arm_func 0x100E7114 CallGameLoop +arm_func 0x100E719C sub_100E719C +arm_func 0x100E7248 sub_100E7248 +arm_func 0x100E72DC sub_100E72DC + +arm_func 0x100E7DB8 sub_100E7DB8 +arm_func 0x100E7F04 sub_100E7F04 + +arm_func 0x100E84D4 sub_100E84D4 + +arm_func 0x100E8AD0 sub_100E8AD0 +arm_func 0x100E8BEC sub_100E8BEC + +arm_func 0x100EB704 sub_100EB704 +arm_func 0x100EB708 sub_100EB708 +arm_func 0x100EB7C0 sub_100EB7C0 +arm_func 0x100EB7C4 sub_100EB7C4 +arm_func 0x100EB7F0 sub_100EB7F0 +arm_func 0x100EB7F8 CpuFill + +# Params are SAT-R CPU_COPY macro (last param: 16/32 bits) +arm_func 0x100EB830 CpuCopy + +# Maybe an emulation of the GBA behavior? +arm_func 0x100EB868 DmaFill +arm_func 0x100EB8E8 DmaCopy +arm_func 0x100EBD40 SomeVramGraphicsCopyQueueHandling + +arm_func 0x100EBE60 sub_100EBE60 +arm_func 0x100EBFE0 sub_100EBFE0 +arm_func 0x100EC14C sub_100EC14C +arm_func 0x100EC154 sub_100EC154 +arm_func 0x100EC17C sub_100EC17C +arm_func 0x100EC184 sub_100EC184 +arm_func 0x100EC18C sub_100EC18C +arm_func 0x100EC194 sub_100EC194 + +# On GBA m4aSoundMain was called instead +arm_func 0x100EC1E0 SoundMain +arm_func 0x100EC1F0 sub_100EC1F0 +arm_func 0x100EC1F4 old_m4aSongNumStart + + +arm_func 0x100EC290 sub_100EC290 +arm_func 0x100EC294 sub_100EC294 +arm_func 0x100EC298 sub_100EC298 +arm_func 0x100EC29C sub_100EC29C +arm_func 0x100EC2A8 sub_100EC2A8 +arm_func 0x100EC2AC sub_100EC2AC +arm_func 0x100EC2B0 sub_100EC2B0 +arm_func 0x100EC2B4 sub_100EC2B4 +arm_func 0x100EC2B8 sub_100EC2B8 +arm_func 0x100EC2BC sub_100EC2BC +arm_func 0x100EC2C0 sub_100EC2C0 +arm_func 0x100EC2C4 sub_100EC2C4 +arm_func 0x100EC2C8 sub_100EC2C8 +arm_func 0x100EC2D8 sub_100EC2D8 +arm_func 0x100EC2E4 sub_100EC2E4 +arm_func 0x100EC2E8 sub_100EC2E8 +arm_func 0x100EC2EC sub_100EC2EC + +arm_func 0x100EC26C sub_100EC26C +arm_func 0x100EC270 sub_100EC270 + +# These just call VBlankIntrWait. (@ 0x1000BAD0) +# This is BAD for cache misses. (as the address says, lol) +arm_func 0x100EC2F0 CallVBlankIntrWaitCopy +arm_func 0x100EC2F4 CallVBlankIntrWait + +arm_func 0x100EC2F8 CallDiv +arm_func 0x100EC30C sub_100EC30C +arm_func 0x100EC31C CallMod +arm_func 0x100EC328 sub_100EC328 +arm_func 0x100EC330 sub_100EC330 +arm_func 0x100EC36C sub_100EC36C +arm_func 0x100EC374 sub_100EC374 +arm_func 0x100EC450 sub_100EC450 +arm_func 0x100EC454 sub_100EC454 +arm_func 0x100EC458 sub_100EC458 +arm_func 0x100EC45C sub_100EC45C +arm_func 0x100EC460 sub_100EC460 +arm_func 0x100EC468 sub_100EC468 +arm_func 0x100EC46C sub_100EC46C +arm_func 0x100EC4B4 sub_100EC4B4 +arm_func 0x100EC4B8 sub_100EC4B8 +arm_func 0x100EC4BC sub_100EC4BC +arm_func 0x100EC4C0 sub_100EC4C0 +arm_func 0x100EC4C4 sub_100EC4C4 +arm_func 0x100EC4C8 sub_100EC4C8 +arm_func 0x100EC4CC sub_100EC4CC +arm_func 0x100EC4D0 sub_100EC4D0 +arm_func 0x100EC4D4 sub_100EC4D4 +arm_func 0x100EC4D8 sub_100EC4D8 +arm_func 0x100EC4DC sub_100EC4DC +arm_func 0x100EC4E0 sub_100EC4E0 +arm_func 0x100EC4E4 sub_100EC4E4 +arm_func 0x100EC4E8 sub_100EC4E8 +arm_func 0x100EC4F0 sub_100EC4F0 + +arm_func 0x100EC578 sub_100EC578 + +arm_func 0x100EC658 sub_100EC658 +arm_func 0x100EC758 sub_100EC758 +arm_func 0x100EC768 sub_100EC768 +arm_func 0x100EC778 sub_100EC778 + +arm_func 0x100EC828 sub_100EC828 + +arm_func 0x100EC8A8 sub_100EC8A8 +arm_func 0x100EC8B8 sub_100EC8B8 +arm_func 0x100EC8C8 sub_100EC8C8 +arm_func 0x100EC8D8 sub_100EC8D8 +arm_func 0x100EC908 sub_100EC908 +arm_func 0x100EC918 sub_100EC918 +arm_func 0x100EC928 sub_100EC928 +arm_func 0x100EC938 sub_100EC938 +arm_func 0x100EC948 sub_100EC948 +arm_func 0x100EC958 sub_100EC958 +arm_func 0x100EC968 sub_100EC968 +arm_func 0x100EC978 sub_100EC978 +arm_func 0x100EC988 sub_100EC988 +arm_func 0x100EC998 sub_100EC998 +arm_func 0x100EC9A8 sub_100EC9A8 +arm_func 0x100EC9B8 sub_100EC9B8 +arm_func 0x100EC9C8 sub_100EC9C8 +arm_func 0x100EC9D8 sub_100EC9D8 +arm_func 0x100EC9E8 sub_100EC9E8 +arm_func 0x100EC9F8 sub_100EC9F8 +arm_func 0x100ECA08 sub_100ECA08 +arm_func 0x100ECA18 sub_100ECA18 +arm_func 0x100ECA28 sub_100ECA28 +arm_func 0x100ECA38 sub_100ECA38 +arm_func 0x100ECA48 sub_100ECA48 +arm_func 0x100ECA58 sub_100ECA58 +arm_func 0x100ECA68 sub_100ECA68 +arm_func 0x100ECA78 sub_100ECA78 +arm_func 0x100ECA88 sub_100ECA88 +arm_func 0x100ECA98 sub_100ECA98 +arm_func 0x100ECAA8 sub_100ECAA8 +arm_func 0x100ECAB8 sub_100ECAB8 +arm_func 0x100ECAC8 sub_100ECAC8 +arm_func 0x100ECAD8 sub_100ECAD8 +arm_func 0x100ECAE8 sub_100ECAE8 +arm_func 0x100ECAF8 sub_100ECAF8 +arm_func 0x100ECB08 sub_100ECB08 +arm_func 0x100ECB18 sub_100ECB18 +arm_func 0x100ECB28 sub_100ECB28 +arm_func 0x100ECB38 sub_100ECB38 +arm_func 0x100ECB48 sub_100ECB48 +arm_func 0x100ECB58 sub_100ECB58 +arm_func 0x100ECB68 sub_100ECB68 +arm_func 0x100ECB78 sub_100ECB78 +arm_func 0x100ECB88 sub_100ECB88 +arm_func 0x100ECB98 sub_100ECB98 +arm_func 0x100ECBA8 sub_100ECBA8 +arm_func 0x100ECBB8 sub_100ECBB8 +arm_func 0x100ECBC8 sub_100ECBC8 +arm_func 0x100ECBD8 sub_100ECBD8 +arm_func 0x100ECBE8 sub_100ECBE8 +arm_func 0x100ECBF8 sub_100ECBF8 +arm_func 0x100ECC08 sub_100ECC08 +arm_func 0x100ECC18 sub_100ECC18 +arm_func 0x100ECC28 sub_100ECC28 +arm_func 0x100ECC38 sub_100ECC38 +arm_func 0x100ECC48 sub_100ECC48 +arm_func 0x100ECC58 sub_100ECC58 +arm_func 0x100ECC68 sub_100ECC68 +arm_func 0x100ECC78 sub_100ECC78 +arm_func 0x100ECC88 sub_100ECC88 +arm_func 0x100ECC98 sub_100ECC98 +arm_func 0x100ECCA8 sub_100ECCA8 +arm_func 0x100ECCB8 sub_100ECCB8 +arm_func 0x100ECCC8 sub_100ECCC8 +arm_func 0x100ECCD8 sub_100ECCD8 +arm_func 0x100ECCE8 sub_100ECCE8 +arm_func 0x100ECCF8 sub_100ECCF8 +arm_func 0x100ECD08 sub_100ECD08 +arm_func 0x100ECD18 sub_100ECD18 +arm_func 0x100ECD28 sub_100ECD28 +arm_func 0x100ECD38 sub_100ECD38 +arm_func 0x100ECD48 sub_100ECD48 +arm_func 0x100ECD58 sub_100ECD58 +arm_func 0x100ECD68 sub_100ECD68 +arm_func 0x100ECD78 sub_100ECD78 +arm_func 0x100ECD88 sub_100ECD88 +arm_func 0x100ECD98 sub_100ECD98 +arm_func 0x100ECDA8 sub_100ECDA8 +arm_func 0x100ECDB8 sub_100ECDB8 +arm_func 0x100ECDC8 sub_100ECDC8 +arm_func 0x100ECDD8 sub_100ECDD8 +arm_func 0x100ECDE8 sub_100ECDE8 +arm_func 0x100ECDF8 sub_100ECDF8 +arm_func 0x100ECE08 sub_100ECE08 +arm_func 0x100ECE18 sub_100ECE18 +arm_func 0x100ECE28 sub_100ECE28 +arm_func 0x100ECE38 sub_100ECE38 +arm_func 0x100ECE48 sub_100ECE48 +arm_func 0x100ECE58 sub_100ECE58 +arm_func 0x100ECE68 sub_100ECE68 +arm_func 0x100ECE78 sub_100ECE78 +arm_func 0x100ECE88 sub_100ECE88 +arm_func 0x100ECE98 sub_100ECE98 +arm_func 0x100ECEA8 sub_100ECEA8 +arm_func 0x100ECEB8 sub_100ECEB8 +arm_func 0x100ECEC8 sub_100ECEC8 +arm_func 0x100ECED8 sub_100ECED8 +arm_func 0x100ECEE8 sub_100ECEE8 +arm_func 0x100ECEF8 sub_100ECEF8 +arm_func 0x100ECF08 sub_100ECF08 +arm_func 0x100ECF18 sub_100ECF18 +arm_func 0x100ECF28 sub_100ECF28 +arm_func 0x100ECF38 sub_100ECF38 +arm_func 0x100ECF48 sub_100ECF48 +arm_func 0x100ECF58 sub_100ECF58 +arm_func 0x100ECF68 sub_100ECF68 +arm_func 0x100ECF78 sub_100ECF78 +arm_func 0x100ECF88 sub_100ECF88 +arm_func 0x100ECF98 sub_100ECF98 +arm_func 0x100ECFA8 sub_100ECFA8 +arm_func 0x100ECFB8 sub_100ECFB8 +arm_func 0x100ECFC8 sub_100ECFC8 +arm_func 0x100ECFD8 sub_100ECFD8 +arm_func 0x100ECFE8 sub_100ECFE8 +arm_func 0x100ECFF8 sub_100ECFF8 +arm_func 0x100ED008 sub_100ED008 +arm_func 0x100ED018 sub_100ED018 +arm_func 0x100ED028 sub_100ED028 +arm_func 0x100ED038 sub_100ED038 +arm_func 0x100ED048 sub_100ED048 +arm_func 0x100ED058 sub_100ED058 +arm_func 0x100ED068 sub_100ED068 +arm_func 0x100ED078 sub_100ED078 +arm_func 0x100ED088 sub_100ED088 +arm_func 0x100ED098 sub_100ED098 +arm_func 0x100ED0A8 sub_100ED0A8 +arm_func 0x100ED0B8 sub_100ED0B8 +arm_func 0x100ED0C8 sub_100ED0C8 +arm_func 0x100ED0D8 sub_100ED0D8 +arm_func 0x100ED0E8 sub_100ED0E8 +arm_func 0x100ED0F8 sub_100ED0F8 +arm_func 0x100ED108 sub_100ED108 +arm_func 0x100ED118 sub_100ED118 +arm_func 0x100ED128 sub_100ED128 +arm_func 0x100ED138 sub_100ED138 +arm_func 0x100ED148 sub_100ED148 +arm_func 0x100ED158 sub_100ED158 +arm_func 0x100ED168 sub_100ED168 +arm_func 0x100ED178 sub_100ED178 +arm_func 0x100ED188 sub_100ED188 +arm_func 0x100ED198 sub_100ED198 +arm_func 0x100ED1A8 sub_100ED1A8 +arm_func 0x100ED1B8 sub_100ED1B8 +arm_func 0x100ED1C8 sub_100ED1C8 +arm_func 0x100ED1D8 sub_100ED1D8 +arm_func 0x100ED1E8 sub_100ED1E8 +arm_func 0x100ED1F8 sub_100ED1F8 +arm_func 0x100ED208 sub_100ED208 +arm_func 0x100ED218 sub_100ED218 +arm_func 0x100ED228 sub_100ED228 +arm_func 0x100ED238 sub_100ED238 +arm_func 0x100ED248 sub_100ED248 +arm_func 0x100ED258 sub_100ED258 +arm_func 0x100ED25C sub_100ED25C +arm_func 0x100ED260 sub_100ED260 +arm_func 0x100ED264 sub_100ED264 +arm_func 0x100ED26C sub_100ED26C +arm_func 0x100ED274 sub_100ED274 +arm_func 0x100ED27C sub_100ED27C +arm_func 0x100ED284 sub_100ED284 +arm_func 0x100ED28C sub_100ED28C +arm_func 0x100ED294 sub_100ED294 +arm_func 0x100ED29C sub_100ED29C +arm_func 0x100ED2A4 sub_100ED2A4 +arm_func 0x100ED2AC sub_100ED2AC +arm_func 0x100ED2B4 sub_100ED2B4 +arm_func 0x100ED2BC sub_100ED2BC +arm_func 0x100ED2C4 sub_100ED2C4 +arm_func 0x100ED2CC sub_100ED2CC +arm_func 0x100ED2D4 sub_100ED2D4 + +data_label 0x100ED2DC gUnknown_100ED2DC + +# jump_table 0x100ED2EC 908 # gAnimations +data_label 0x100ED2EC gAnimations +data_label 0x10116748 gObjTiles_4bpp # null-pointer +data_label 0x1011674C gObjTiles_8bpp # null-pointer +data_label 0x10116750 gSpriteDimensions + +data_label 0x10123A5C gSpriteTables + +# jump_table 0x10123A74 908 # gSpriteOamData +data_label 0x10123A74 gSpriteOamData +data_label 0x10133550 gSpritePalettes +data_label 0x10137A40 sVblankFuncs # core.c + + +# jump_table 0x1013DD24 116 # gSpriteInits_Interactables +# jump_table 0x1013DEF4 21 # gSpriteInits_Enemies diff --git a/sa1/scripts/sound/SoundDumper.cs b/sa1/scripts/sound/SoundDumper.cs new file mode 100644 index 0000000000..d030decbc5 --- /dev/null +++ b/sa1/scripts/sound/SoundDumper.cs @@ -0,0 +1,1177 @@ +// Adapted from https://gist.github.com/Normmatt/e00ea0c5da509568959bde52754f213e +// Key split table is supported in https://gist.github.com/Normmatt/f4e768f0e1c30dea3835098db744297a, but I don't need it here :) + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace dump_sound +{ + class SoundDumper + { + static int MPlayTableAdr = 0x086DD760; + static int NumMPlayers = 4; + static int SongTableAdr = 0x086DD790; + static int NumSongs = 308; + + static int VoiceGroupEndAdr = 0x086DD664; + static int KeySplitEndAdr = 0x086DD6D0; + + static SortedDictionary soundInfo = new SortedDictionary(); + static byte[] rom; + static List voicegroups = new List(); + static List keysplits = new List(); + static List offsets = new List(); + + static Dictionary MML = new Dictionary() + { + {0x80, "W00" }, + {0x81, "W01" }, + {0x82, "W02" }, + {0x83, "W03" }, + {0x84, "W04" }, + {0x85, "W05" }, + {0x86, "W06" }, + {0x87, "W07" }, + {0x88, "W08" }, + {0x89, "W09" }, + {0x8A, "W10" }, + {0x8B, "W11" }, + {0x8C, "W12" }, + {0x8D, "W13" }, + {0x8E, "W14" }, + {0x8F, "W15" }, + {0x90, "W16" }, + {0x91, "W17" }, + {0x92, "W18" }, + {0x93, "W19" }, + {0x94, "W20" }, + {0x95, "W21" }, + {0x96, "W22" }, + {0x97, "W23" }, + {0x98, "W24" }, + {0x99, "W28" }, + {0x9A, "W30" }, + {0x9B, "W32" }, + {0x9C, "W36" }, + {0x9D, "W40" }, + {0x9E, "W42" }, + {0x9F, "W44" }, + {0xA0, "W48" }, + {0xA1, "W52" }, + {0xA2, "W54" }, + {0xA3, "W56" }, + {0xA4, "W60" }, + {0xA5, "W64" }, + {0xA6, "W66" }, + {0xA7, "W68" }, + {0xA8, "W72" }, + {0xA9, "W76" }, + {0xAA, "W78" }, + {0xAB, "W80" }, + {0xAC, "W84" }, + {0xAD, "W88" }, + {0xAE, "W90" }, + {0xAF, "W92" }, + {0xB0, "W96" }, + {0xB1, "FINE" }, + {0xB2, "GOTO" }, + {0xB3, "PATT" }, + {0xB4, "PEND" }, + {0xB5, "REPT" }, + {0xB9, "MEMACC" }, + {0xBA, "PRIO" }, + {0xBB, "TEMPO" }, + {0xBC, "KEYSH" }, + {0xBD, "VOICE" }, + {0xBE, "VOL" }, + {0xBF, "PAN" }, + {0xC0, "BEND" }, + {0xC1, "BENDR" }, + {0xC2, "LFOS" }, + {0xC3, "LFODL" }, + {0xC4, "MOD" }, + {0xC5, "MODT" }, + {0xC8, "TUNE" }, + {0xCD, "XCMD" }, + {0x08, "xIECV" }, + {0x09, "xIECL" }, + {0xCE, "EOT" }, + {0xCF, "TIE" }, + {0xD0, "N01" }, + {0xD1, "N02" }, + {0xD2, "N03" }, + {0xD3, "N04" }, + {0xD4, "N05" }, + {0xD5, "N06" }, + {0xD6, "N07" }, + {0xD7, "N08" }, + {0xD8, "N09" }, + {0xD9, "N10" }, + {0xDA, "N11" }, + {0xDB, "N12" }, + {0xDC, "N13" }, + {0xDD, "N14" }, + {0xDE, "N15" }, + {0xDF, "N16" }, + {0xE0, "N17" }, + {0xE1, "N18" }, + {0xE2, "N19" }, + {0xE3, "N20" }, + {0xE4, "N21" }, + {0xE5, "N22" }, + {0xE6, "N23" }, + {0xE7, "N24" }, + {0xE8, "N28" }, + {0xE9, "N30" }, + {0xEA, "N32" }, + {0xEB, "N36" }, + {0xEC, "N40" }, + {0xED, "N42" }, + {0xEE, "N44" }, + {0xEF, "N48" }, + {0xF0, "N52" }, + {0xF1, "N54" }, + {0xF2, "N56" }, + {0xF3, "N60" }, + {0xF4, "N64" }, + {0xF5, "N66" }, + {0xF6, "N68" }, + {0xF7, "N72" }, + {0xF8, "N76" }, + {0xF9, "N78" }, + {0xFA, "N80" }, + {0xFB, "N84" }, + {0xFC, "N88" }, + {0xFD, "N90" }, + {0xFE, "N92" }, + {0xFF, "N96" }, + }; + + static string[] MemSet = + { + "mem_set", + "mem_add", + "mem_sub", + "mem_mem_set", + "mem_mem_add", + "mem_mem_sub", + "mem_beq", + "mem_bne", + "mem_bhi", + "mem_bhs", + "mem_bls", + "mem_blo", + "mem_mem_beq", + "mem_mem_bne", + "mem_mem_bhi", + "mem_mem_bhs", + "mem_mem_bls", + "mem_mem_blo", + }; + + static string[] Keys = + { + "CnM2", + "CsM2", + "DnM2", + "DsM2", + "EnM2", + "FnM2", + "FsM2", + "GnM2", + "GsM2", + "AnM2", + "AsM2", + "BnM2", + "CnM1", + "CsM1", + "DnM1", + "DsM1", + "EnM1", + "FnM1", + "FsM1", + "GnM1", + "GsM1", + "AnM1", + "AsM1", + "BnM1", + "Cn0", + "Cs0", + "Dn0", + "Ds0", + "En0", + "Fn0", + "Fs0", + "Gn0", + "Gs0", + "An0", + "As0", + "Bn0", + "Cn1", + "Cs1", + "Dn1", + "Ds1", + "En1", + "Fn1", + "Fs1", + "Gn1", + "Gs1", + "An1", + "As1", + "Bn1", + "Cn2", + "Cs2", + "Dn2", + "Ds2", + "En2", + "Fn2", + "Fs2", + "Gn2", + "Gs2", + "An2", + "As2", + "Bn2", + "Cn3", + "Cs3", + "Dn3", + "Ds3", + "En3", + "Fn3", + "Fs3", + "Gn3", + "Gs3", + "An3", + "As3", + "Bn3", + "Cn4", + "Cs4", + "Dn4", + "Ds4", + "En4", + "Fn4", + "Fs4", + "Gn4", + "Gs4", + "An4", + "As4", + "Bn4", + "Cn5", + "Cs5", + "Dn5", + "Ds5", + "En5", + "Fn5", + "Fs5", + "Gn5", + "Gs5", + "An5", + "As5", + "Bn5", + "Cn6", + "Cs6", + "Dn6", + "Ds6", + "En6", + "Fn6", + "Fs6", + "Gn6", + "Gs6", + "An6", + "As6", + "Bn6", + "Cn7", + "Cs7", + "Dn7", + "Ds7", + "En7", + "Fn7", + "Fs7", + "Gn7", + "Gs7", + "An7", + "As7", + "Bn7", + "Cn8", + "Cs8", + "Dn8", + "Ds8", + "En8", + "Fn8", + "Fs8", + "Gn8", + }; + + static Dictionary SongsWithTrackAlignment = new Dictionary() + { + {"song785", true}, + {"song805", true}, + {"song806", true}, + {"song807", true}, + {"song811", true}, + {"song815", true}, + {"song816", true}, + {"song962", true}, + }; + + static byte ReadU8(int ofs) + { + if (ofs > 0x08000000) + ofs -= 0x08000000; + + return rom[ofs]; + } + + static ushort ReadU16(int ofs) + { + if (ofs > 0x08000000) + ofs -= 0x08000000; + + return BitConverter.ToUInt16(rom, ofs); + } + + static int ReadU32(int ofs) + { + if (ofs > 0x08000000) + ofs -= 0x08000000; + + return BitConverter.ToInt32(rom, ofs); + } + + static string PrintMPlayTable(int ofs) + { + if(!offsets.Contains(ofs)) offsets.Add(ofs); + var sb = new StringBuilder(); + + sb.Append("\t.align 2\n"); + sb.AppendFormat("\t.global gMPlayTable\n"); + sb.AppendFormat("gMPlayTable:\t@ 0x{0:X8}\n", ofs); + for (int i = 0; i < NumMPlayers; i++) + { + var playInfo = ReadU32(ofs + 0); + var trackInfo = ReadU32(ofs + 4); + var unk1 = ReadU8(ofs + 8); + var unk2 = ReadU16(ofs + 10); + sb.AppendFormat("\tmusic_player gUnknown_{0:X8}, gUnknown_{1:X8}, {2}, {3}\n", playInfo, trackInfo, unk1, unk2); + ofs += 12; + } + + return sb.ToString(); + } + + static void DumpProgrammableWaveSample(int ofs, int len) + { + if(!offsets.Contains(ofs)) offsets.Add(ofs); + if (soundInfo.ContainsKey(ofs)) return; + + var sb = new StringBuilder(); + var filename = String.Format("{0:X8}.pcm", ofs); + var outfilename = String.Format("sound/programmable_wave_samples/{0}", filename); + + sb.Append("\t.align 2\n"); + sb.AppendFormat("\t.global ProgrammableWaveData_{0:X7}\n", ofs); + sb.AppendFormat("ProgrammableWaveData_{0:X7}:\n", ofs); + sb.AppendFormat("\t.incbin \"sound/programmable_wave_samples/{0}\"\n", filename); + soundInfo.Add(ofs, sb.ToString()); + + Directory.CreateDirectory("sound/programmable_wave_samples/"); + + byte[] data = new byte[len]; + + if (ofs > 0x08000000) + ofs -= 0x08000000; + + Array.Copy(rom, ofs, data, 0, data.Length); + + File.WriteAllBytes(outfilename, data); + } + + static void DumpDirectSoundSample(int ofs) + { + if (ofs == 0) return; + if(!offsets.Contains(ofs)) offsets.Add(ofs); + if (soundInfo.ContainsKey(ofs)) return; + + var sb = new StringBuilder(); + var filename = String.Format("{0:X8}.bin", ofs); + var outfilename = String.Format("sound/direct_sound_samples/{0}", filename); + + sb.Append("\t.align 2\n"); + sb.AppendFormat("\t.global gUnknown_{0:X8}\n", ofs); + sb.AppendFormat("gUnknown_{0:X8}:\n", ofs); + sb.AppendFormat("\t.incbin \"sound/direct_sound_samples/{0}\"\n", filename); + soundInfo.Add(ofs, sb.ToString()); + + Directory.CreateDirectory("sound/direct_sound_samples/"); + + var type = ReadU16(ofs + 0); + var status = ReadU16(ofs + 2); + var freq = ReadU32(ofs + 4); + var loopStart = ReadU32(ofs + 8); + var size = ReadU32(ofs + 12); + byte[] data = new byte[size + 0x10 + 1]; + + if (ofs > 0x08000000) + ofs -= 0x08000000; + Array.Copy(rom, ofs, data, 0, data.Length); + + File.WriteAllBytes(outfilename, data); + } + + static string PrintVoiceGroup(int ofs, int len, int id) + { + if(!offsets.Contains(ofs)) offsets.Add(ofs); + + var sb = new StringBuilder(); + var filename = String.Format("voicegroup{0:d3}.inc", id); + var outfilename = String.Format("sound/voicegroups/{0}", filename); + + sb.Append("\t.align 2\n"); + sb.AppendFormat("\t@********************** Voicegroup **********************@\n\n"); + sb.AppendFormat("\t.global voicegroup{0:d3}\n", id); + sb.AppendFormat("voicegroup{0:d3}:\t@ 0x{1:X8}\n", id, ofs); + + int i = 0; + while (i < len) + { + int tOfs = ofs + i; + var type = ReadU8(ofs + i++); + Debug.WriteLine("WTF 0x{0:X8} type=0x{1:X2}", tOfs, type); + switch (type) + { + case 0x00: //voice_directsound + case 0x08: //voice_directsound_no_resample + case 0x10: //voice_directsound_alt + { + //base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release + var base_midi_key = ReadU8(ofs + i); + i += 2; + var pan = ReadU8(ofs + i) & 0x7F; + i++; + var sample_data_pointer = ReadU32(ofs + i); + i += 4; + var attack = ReadU8(ofs + i++); + var decay = ReadU8(ofs + i++); + var sustain = ReadU8(ofs + i++); + var release = ReadU8(ofs + i++); + + DumpDirectSoundSample(sample_data_pointer); + + switch (type) + { + case 0x00: //voice_directsound + sb.AppendFormat("\tvoice_directsound {0}, {1}, gUnknown_{2:X8}, {3}, {4}, {5}, {6}\t@{7:X8}\n", base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release, tOfs); + break; + case 0x08: //voice_directsound_no_resample + sb.AppendFormat("\tvoice_directsound_no_resample {0}, {1}, gUnknown_{2:X8}, {3}, {4}, {5}, {6}\t@{7:X8}\n", base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release, tOfs); + break; + case 0x10: //voice_directsound_alt + sb.AppendFormat("\tvoice_directsound_alt {0}, {1}, gUnknown_{2:X8}, {3}, {4}, {5}, {6}\t@{7:X8}\n", base_midi_key, pan, sample_data_pointer, attack, decay, sustain, release, tOfs); + break; + } + } + break; + case 0x01: //voice_square_1 + case 0x09: //voice_square_1_alt + { + //sweep, duty_cycle, attack, decay, sustain, release + i++; + i++; + var sweep = ReadU8(ofs + i++); + var duty_cycle = ReadU8(ofs + i++); + i++; + i++; + i++; + var attack = ReadU8(ofs + i++); + var decay = ReadU8(ofs + i++); + var sustain = ReadU8(ofs + i++); + var release = ReadU8(ofs + i++); + + switch (type) + { + case 0x01: //voice_square_1 + sb.AppendFormat("\tvoice_square_1 {0}, {1}, {2}, {3}, {4}, {5}\t@{6:X8}\n", sweep, duty_cycle, attack, decay, sustain, release, tOfs); + break; + case 0x09: //voice_square_1_alt + sb.AppendFormat("\tvoice_square_1_alt {0}, {1}, {2}, {3}, {4}, {5}\t@{6:X8}\n", sweep, duty_cycle, attack, decay, sustain, release, tOfs); + break; + } + } + break; + case 0x02: //voice_square_2 + case 0x0A: //voice_square_2_alt + { + // duty_cycle, attack, decay, sustain, release + i++; + i++; + i++; + var duty_cycle = ReadU8(ofs + i++); + i++; + i++; + i++; + var attack = ReadU8(ofs + i++); + var decay = ReadU8(ofs + i++); + var sustain = ReadU8(ofs + i++); + var release = ReadU8(ofs + i++); + + switch (type) + { + case 0x02: //voice_square_2 + sb.AppendFormat("\tvoice_square_2 {0}, {1}, {2}, {3}, {4}\t@{5:X8}\n", duty_cycle, attack, decay, sustain, release, tOfs); + break; + case 0x0A: //voice_square_2_alt + sb.AppendFormat("\tvoice_square_2_alt {0}, {1}, {2}, {3}, {4}\t@{5:X8}\n", duty_cycle, attack, decay, sustain, release, tOfs); + break; + } + } + break; + case 0x03: //voice_programmable_wave + case 0x0B: //voice_programmable_wave_alt + { + //wave_samples_pointer, attack, decay, sustain, release + i++; + i++; + i++; + var wave_samples_pointer = ReadU32(ofs + i); + i += 4; + var attack = ReadU8(ofs + i++); + var decay = ReadU8(ofs + i++); + var sustain = ReadU8(ofs + i++); + var release = ReadU8(ofs + i++); + + DumpProgrammableWaveSample(wave_samples_pointer, 16); + + switch (type) + { + case 0x03: //voice_square_2 + sb.AppendFormat("\tvoice_programmable_wave ProgrammableWaveData_{0:X7}, {1}, {2}, {3}, {4}\t@{5:X8}\n", wave_samples_pointer, attack, decay, sustain, release, tOfs); + break; + case 0x0B: //voice_square_2_alt + sb.AppendFormat("\tvoice_programmable_wave_alt ProgrammableWaveData_{0:X7}, {1}, {2}, {3}, {4}\t@{5:X8}\n", wave_samples_pointer, attack, decay, sustain, release, tOfs); + break; + } + } + break; + case 0x04: //voice_noise + case 0x0C: //voice_noise_alt + { + // duty_cycle, attack, decay, sustain, release + var unk1 = ReadU8(ofs + i++); + var unk2 = ReadU8(ofs + i++); + var unk3 = ReadU8(ofs + i++); + var period = ReadU8(ofs + i++); + i++; + i++; + i++; + var attack = ReadU8(ofs + i++); + var decay = ReadU8(ofs + i++); + var sustain = ReadU8(ofs + i++); + var release = ReadU8(ofs + i++); + + switch (type) + { + case 0x04: //voice_noise + sb.AppendFormat("\tvoice_noise {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}\t@{8:X8}\n", unk1, unk2, unk3, period, attack, decay, sustain, release, tOfs); + break; + case 0x0C: //voice_noise_alt + sb.AppendFormat("\tvoice_noise_alt {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}\t@{8:X8}\n", unk1, unk2, unk3, period, attack, decay, sustain, release, tOfs); + break; + } + } + break; + case 0x40: //voice_keysplit + { + //voice_group_pointer, keysplit_table_pointer + i++; + i++; + i++; + var voice_group_pointer = ReadU32(ofs + i); + i += 4; + var keysplit_table_pointer = ReadU32(ofs + i); + i += 4; + + if (!offsets.Contains(voice_group_pointer)) offsets.Add(voice_group_pointer); + if (!offsets.Contains(keysplit_table_pointer)) offsets.Add(keysplit_table_pointer); + + if (!voicegroups.Contains(voice_group_pointer)) + voicegroups.Add(voice_group_pointer); + if (!keysplits.Contains(keysplit_table_pointer)) + keysplits.Add(keysplit_table_pointer); + + sb.AppendFormat("\tvoice_keysplit voicegroup{0:d3}, KeySplitTable{1:d3}\t@{2:X8}\n", voicegroups.IndexOf(voice_group_pointer), keysplits.IndexOf(keysplit_table_pointer), tOfs); + } + break; + case 0x80: //voice_keysplit_all + { + //voice_group_pointer + i++; + i++; + i++; + var voice_group_pointer = ReadU32(ofs + i); + i += 4; + i += 4; + + if (!offsets.Contains(voice_group_pointer)) offsets.Add(voice_group_pointer); + + if (!voicegroups.Contains(voice_group_pointer)) + voicegroups.Add(voice_group_pointer); + + sb.AppendFormat("\tvoice_keysplit_all voicegroup{0:d3}\t@{1:X8}\n", voicegroups.IndexOf(voice_group_pointer), tOfs); + } + break; + default: + throw new Exception("FUCK!"); + break; + } + } + + + Directory.CreateDirectory("sound/voicegroups/"); + File.WriteAllText(outfilename, sb.ToString()); + + return sb.ToString(); + } + + static string PrintSongTrack(int idx, int ofs, int len, int song_ofs, string name) + { + if(!offsets.Contains(ofs)) offsets.Add(ofs); + var sb = new StringBuilder(); + + sb.AppendFormat("\n\t@********************** Track {0} **********************@\n\n", idx); + if (idx == 1 || SongsWithTrackAlignment.ContainsKey(name)) + { + sb.Append("\t.align 2\n"); + } + sb.AppendFormat("\t.global {0}_{1}\n", name, idx); + sb.AppendFormat("{0}_{1}:\t@ 0x{2:X8}\n", name, idx, ofs); + + var localLabels = new Dictionary(); + + var localLabelId = 0; + + for (int i = 0; i < len; i++) + { + //TODO: Make this print nicer? + var cmd = ReadU8(ofs + i); + switch (cmd) + { + case 0xB2: //GOTO + case 0xB3: //PATT + case 0xB5: //REPT + { + if (cmd == 0xB5) + { + i++; + } + var adr = ReadU32(ofs + i + 1); + if (!localLabels.ContainsKey(adr)) + { + localLabelId++; + localLabels.Add(adr, string.Format("{0}_{1}_{2}", name, idx, localLabelId)); + } + i += 4; + break; + } + default: + break; + } + } + + byte prev = 0; + var fine = false; + for (int i = 0; i < len && !fine; i++) + { + var cmd = ReadU8(ofs + i); + + if (localLabels.ContainsKey(ofs + i)) + sb.AppendFormat("{0}:\n", localLabels[ofs + i]); + + sb.Append("\t.byte\t"); + + var cmdName = ""; + if (cmd >= 0x80) + { + cmdName = MML[cmd]; + } + if (cmd < 0x80 && prev > 0) + { + cmd = prev; + i--; + } + + switch (cmd) + { + case 0xCE: // EOT + case 0xCF: // TIE + case 0xD0: // N01 + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xF0: + case 0xF1: + case 0xF2: + case 0xF3: + case 0xF4: + case 0xF5: + case 0xF6: + case 0xF7: + case 0xF8: + case 0xF9: + case 0xFA: + case 0xFB: + case 0xFC: + case 0xFD: + case 0xFE: + case 0xFF: // N96 + { + sb.AppendFormat("\t{0}\t", cmdName); + var key = ReadU8(ofs + i + 1); + if (key < 0x80) + { + if (cmdName.Length > 0) + { + sb.Append(", "); + } + sb.Append(Keys[key]); + i++; + } + var velo = ReadU8(ofs + i + 1); + if (cmd > 0xCE && velo < 0x80) + { + sb.AppendFormat(", v{0:d3}", velo); + i++; + } + var gtp = ReadU8(ofs + i + 1); + if (cmd > 0xCF && gtp < 0x80) + { + sb.AppendFormat(", {0}", gtp); + i++; + } + prev = cmd; + break; + } + case 0xB9: // MEMACC (unused in Fire Emblem 8) + { + var mem_set = ReadU8(ofs + i + 1); + var adr = ReadU8(ofs + i + 2); + var dat = ReadU8(ofs + i + 3); + sb.AppendFormat("MEMACC\t, {0}\t, 0x{1:X2}, {2}", MemSet[mem_set], adr, dat); + i += 3; + if (mem_set > 5) + { + var dest = ReadU8(ofs + i + 1); + sb.AppendFormat("\n\t\t.word\t0x{0:X8}", dest); + i += 4; + } + break; + } + case 0xCD: // XCMD + { + sb.AppendFormat("\t{0}\t", cmdName); + var xIECX = ReadU8(ofs + i + 1); + if (cmdName.Length > 0) + { + sb.Append(", "); + } + sb.Append(MML[xIECX]); + i++; + prev = cmd; + break; + } + case 0xB2: //GOTO + case 0xB3: //PATT + case 0xB5: //REPT + { + sb.AppendFormat("{0}\t", cmdName); + if (cmd == 0xB5) + { + var count = ReadU8(ofs + i + 1); + sb.AppendFormat(", {0}", count); + i++; + } + var adr = ReadU32(ofs + i + 1); + sb.AppendFormat("\n\t\t.word\t{0}", localLabels[adr]); + i += 4; + break; + } + case 0x80: // W00 + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: // W96 + case 0xB1: // FINE + case 0xB4: // PEND + { + sb.Append(cmdName); + if (cmd == 0xB1) + { + fine = true; + } + break; + } + case 0xBA: // PRIO + case 0xBB: // TEMPO + case 0xBC: // KEYSH + case 0xC2: // LFOS + case 0xC3: // LFODL + case 0xC5: // MODT + { + sb.AppendFormat("{0}\t", cmdName); + var arg = ReadU8(ofs + i + 1); + if (cmdName.Length > 0) + { + sb.Append(", "); + } + sb.AppendFormat("{0}", arg); + i++; + break; + } + case 0xBD: // VOICE + case 0xBE: // VOL + case 0xBF: // PAN + case 0xC0: // BEND + case 0xC1: // BENDR + case 0xC4: // MOD + case 0xC8: // TUNE + { + var arg = ReadU8(ofs + i + 1); + var argStr = String.Format("{0}", arg); + if (cmd == 0xBF || cmd == 0xC0 || cmd == 0xC8) + { + argStr = "c_v"; + if (arg > 64) + { + argStr = String.Format("{0}+{1}", argStr, arg - 64); + } + if (arg < 64) + { + argStr = String.Format("{0}-{1}", argStr, 64 - arg); + } + } + if (cmd == 0xBE) + { + argStr = String.Format("v{0:d3}", arg); + } + sb.AppendFormat("{0}\t",cmdName); + if (cmdName.Length > 0) + { + sb.Append(", "); + } + sb.Append(argStr); + i++; + prev = cmd; + break; + } + default: + { + //sb.AppendFormat("0x{0:X2}", cmd); + //break; + throw new Exception("Invalid cmd!"); + } + } + + sb.Append("\n"); + } + + return sb.ToString(); + } + + static string PrintSong(int ofs, int id) + { + if(!offsets.Contains(ofs)) offsets.Add(ofs); + var sb = new StringBuilder(); + var sbt = new StringBuilder(); + var currName = String.Format("song{0:d3}", id); + var realName = currName; + if (soundInfo.ContainsKey(ofs)) + { + int pos = soundInfo[ofs].IndexOf(".global song"); + realName = soundInfo[ofs].Substring(pos + 8, 7); + } + var filename = String.Format("{0}.s", realName); + var outfilename = String.Format("sound/songs/{0}", filename); + + sbt.Append("\t.include \"MPlayDef.s\"\n\n"); + sbt.Append("\t.section .rodata\n"); + + sb.Append("\n\t.align 2\n"); + sb.AppendFormat("\t.global {0}\n", realName); + sb.AppendFormat("{0}:\t@ 0x{1:X8}\n", realName, ofs); + + var trackCount = ReadU8(ofs + 0); + var blockCount = ReadU8(ofs + 1); + var priority = ReadU8(ofs + 2); + var reverb = ReadU8(ofs + 3); + var tone = ReadU32(ofs + 4); + + sb.AppendFormat("\t.byte\t{0}\t\t@ trackCount\n", trackCount); + sb.AppendFormat("\t.byte\t{0}\t\t@ blockCount\n", blockCount); + sb.AppendFormat("\t.byte\t{0}\t\t@ priority\n", priority); + sb.AppendFormat("\t.byte\t{0}\t\t@ reverb\n\n", reverb); + if (id > 0) + { + if (!soundInfo.ContainsKey(tone) || !soundInfo[tone].Contains(".global voicegroup")) + { + sb.AppendFormat("\t.word\tgUnknown_{0:X8}\t\t@ voicegroup/tone\n\n", tone); + } + else + { + int pos = soundInfo[tone].IndexOf(".global voicegroup"); + sb.AppendFormat("\t.word\t{0}\t\t@ voicegroup/tone\n\n", soundInfo[tone].Substring(pos + 8, 13)); + } + } + + /*if (!soundInfo.ContainsKey(tone)) + soundInfo.Add(tone, PrintVoiceGroup(tone, VoiceGroupLen));*/ + if (trackCount > 0 && !voicegroups.Contains(tone)) + voicegroups.Add(tone); + + for (int i = 0; i < trackCount; i++) + { + var part = ReadU32(ofs + 8 + (4 * i)); + int nextpart; + + if (i + 1 >= trackCount) + { + //TODO: Is this a safe assumption? + nextpart = ofs; + } + else + { + nextpart = ReadU32(ofs + 8 + (4 * (i + 1))); + } + + sb.AppendFormat("\t.word\t{0}_{1}\t\t@ track\n", realName, i + 1); + + var st = PrintSongTrack(i + 1, part, nextpart - part, ofs, realName); + sbt.Append(st); + if (!soundInfo.ContainsKey(part)) + soundInfo.Add(part, st); + } + + if (String.Compare(realName, currName) == 0) + { + // int[] goodSongs = { + // 114, 228, 244, 273, 282, + // 286, 296, 222, 231, 259, + // 280, 283, 288, 224, 237, + // 270, 281, 285, 290 + // }; + int[] goodSongs = { + 23 + }; + + if (goodSongs.Contains(id) || true) { + Directory.CreateDirectory("sound/songs/"); + File.WriteAllText(outfilename, sbt.ToString() + sb.ToString()); + } + } + + return sbt.ToString() + sb.ToString(); + } + + static string PrintSongTable(int ofs) + { + if(!offsets.Contains(ofs)) offsets.Add(ofs); + var sb = new StringBuilder(); + + sb.Append("\t.align 2\n"); + sb.AppendFormat("\t.global gSongTable\n"); + sb.AppendFormat("gSongTable:\t@ 0x{0:X8}\n", ofs); + for (int i = 0; i < NumSongs; i++) + { + var header = ReadU32(ofs + 0); + var ms = ReadU16(ofs + 4); + var me = ReadU16(ofs + 6); + + //todo rip song + if (!soundInfo.ContainsKey(header)) + soundInfo.Add(header, PrintSong(header, i)); + else + soundInfo[header] = PrintSong(header, i); + + int pos = soundInfo[header].IndexOf(".global song"); + sb.AppendFormat("\tsong {0}, {1}, {2}\n", soundInfo[header].Substring(pos + 8, 7), ms, me); + + ofs += 8; + } + + return sb.ToString(); + } + + static string PrintKeySplit(int ofs, int len) + { + if (!offsets.Contains(ofs)) offsets.Add(ofs); + var sb = new StringBuilder(); + + sb.Append("\t.align 2\n"); + sb.AppendFormat("\t@********************** KeySplit **********************@\n\n"); + sb.AppendFormat("\t.global KeySplitTable{0:d3}\n", keysplits.IndexOf(ofs)); + sb.AppendFormat("KeySplitTable{0:d3}:\t@ 0x{0:X8}\n", keysplits.IndexOf(ofs), ofs); + + int i = 0; + while (i < len) + { + var val = ReadU8(ofs + i++); + sb.AppendFormat("\t.byte\t{0}\n", val); + } + + return sb.ToString(); + } + + static void Main(string[] args) + { + rom = File.ReadAllBytes("baserom_sa1.gba"); + + soundInfo.Add(MPlayTableAdr, PrintMPlayTable(MPlayTableAdr)); + PrintSongTable(SongTableAdr); + + voicegroups.Add(VoiceGroupEndAdr); + voicegroups.Sort(); + for (int i = 0; i < voicegroups.Count - 1; i++) + { + int start = voicegroups[i]; + int end = voicegroups[i + 1]; + PrintVoiceGroup(start, end - start, i); + } + + voicegroups.Sort(); + for (int i = 0; i < voicegroups.Count - 1; i++) + { + int start = voicegroups[i]; + int end = voicegroups[i + 1]; + soundInfo.Add(start, PrintVoiceGroup(start, end - start, i)); + } + + //Sort all offsets + keysplits.Sort(); + offsets.Sort(); + var lastKetSplitAdr = keysplits[keysplits.Count - 1]; + var keySplitEndAdr = 0; + for (int i = 0; i < offsets.Count; i++) + { + if ((offsets[i] > lastKetSplitAdr)) + { + keySplitEndAdr = offsets[i]; + break; + } + + } + + keysplits.Add(keySplitEndAdr); + //keysplits.Add(KeySplitEndAdr); + keysplits.Sort(); + for (int i = 0; i < keysplits.Count - 1; i++) + { + int start = keysplits[i]; + int end = keysplits[i + 1]; + soundInfo.Add(start, PrintKeySplit(start, end - start)); + } + + soundInfo.Add(SongTableAdr, PrintSongTable(SongTableAdr)); + + var sb = new StringBuilder(); + string prev = "songxxx"; + foreach (var adr in soundInfo) + { + if (adr.Value.Contains(".global voicegroup")) + { + int pos = adr.Value.IndexOf(".global voicegroup"); + sb.AppendFormat(".include \"sound/voicegroups/{0}.inc\"\n", adr.Value.Substring(pos + 8, 13)); + continue; + } + + if (adr.Value.Contains(".global song")) + { + int pos = adr.Value.IndexOf(".global song"); + string curr = adr.Value.Substring(pos + 8, 7); + if (String.Compare(curr, prev) != 0) { + sb.AppendFormat(".include \"sound/songs/{0}.inc\"\n", curr); + prev = curr; + } + continue; + } + sb.Append(adr.Value); + sb.Append("\n"); + } + + File.WriteAllText("sound.s", sb.ToString()); + } + } +} diff --git a/sa1/scripts/sound/add_global_voicegroups.py b/sa1/scripts/sound/add_global_voicegroups.py new file mode 100644 index 0000000000..28637f93d4 --- /dev/null +++ b/sa1/scripts/sound/add_global_voicegroups.py @@ -0,0 +1,17 @@ +import os + +for file_name in os.listdir("voicegroups"): + with open("voicegroups/" + file_name) as vg_file: + contents = "".join(vg_file.readlines()) + if ".global" in contents: + continue + + contents = \ + contents.replace( + " .align 2\n", + " .align 2\n" + + f" .global {file_name.split('.')[0]}\n" + ) + + with open("voicegroups/" + file_name, 'w') as write_file: + write_file.write(contents) diff --git a/sa1/scripts/sound/edit_time_signature.py b/sa1/scripts/sound/edit_time_signature.py new file mode 100644 index 0000000000..9da5570369 --- /dev/null +++ b/sa1/scripts/sound/edit_time_signature.py @@ -0,0 +1,29 @@ +import py_midicsv as pm +import sys + +matched_signatures = { + "song0405": "5/4", + "song0406": "13/4" +} + + +data = pm.midi_to_csv(f'sound/songs/midi/{sys.argv[1]}.mid') + +for i in range(len(data)): + line = data[i] + + if 'Time_signature' in line: + print(line) + new_data = line.split(', ') + + # Set the time signature + new_data[3] = sys.argv[2] + new_data[4] = str(int(sys.argv[3]) // 2) + + data[i] = ", ".join(new_data) + +midi_object = pm.csv_to_midi(data) + +with open(f'sound/songs/midi/{sys.argv[1]}.mid', "wb") as output_file: + midi_writer = pm.FileWriter(output_file) + midi_writer.write(midi_object) diff --git a/sa1/scripts/sound/extract_non_matching_songs.py b/sa1/scripts/sound/extract_non_matching_songs.py new file mode 100644 index 0000000000..f90b3e2a51 --- /dev/null +++ b/sa1/scripts/sound/extract_non_matching_songs.py @@ -0,0 +1,33 @@ +ids = [ 9, 13, 14, 15, 16 ] +exclude = [1,2,3,4,5,6,7] + +header = """ + .align 2 + @********************** Track 1 **********************@ +""" + +with open('songs_reference_data.inc') as songs: + data = "".join(songs.readlines()) + + for section in data.split(header): + if " .global" not in section: + continue + + section_song_name = section.split(" .global ")[1].split("_1")[0] + print(section_song_name) + + no_process = False + for id in exclude: + id_song_name = f"song{id:04d}" + if section_song_name == id_song_name: + no_process = True + break + + if no_process: + continue + + with open("songs/" + section_song_name + ".s", "w") as f_song: + f_song.write('\t.include "MPlayDef.s"\n') + f_song.write("\t.section .rodata") + f_song.write(header) + f_song.write(section) diff --git a/sa1/scripts/sound/extract_songs_info.py b/sa1/scripts/sound/extract_songs_info.py new file mode 100644 index 0000000000..bb05d983fd --- /dev/null +++ b/sa1/scripts/sound/extract_songs_info.py @@ -0,0 +1,302 @@ +from io import BufferedReader +import struct + +song_nums_to_names = { + # "song0001": "mus_intro", + # "song0002": "mus_title_fanfare", + # "song0106": "se_select", + # "song0107": "se_return", + # "song0108": "se_menu_cursor_move" +} + +song_volumes = { + 'song0001': 120, + 'song0002': 115, + 'song0003': 120, + 'song0004': 108, + 'song0005': 110, + # Not writing initial volume on track 7 + 'song0006': 105, + 'song0007': 108, + 'song0008': 108, + 'song0009': 61, + 'song0010': 115, + 'song0011': 111, + 'song0012': 110, + 'song0013': 127, + 'song0014': 110, + 'song0015': 110, + 'song0016': 110, + 'song0017': 110, + 'song0018': 110, + 'song0019': 105, + 'song0020': 110, + 'song0021': 110, + 'song0022': 110, + 'song0023': 110, + 'song0024': 110, + 'song0025': 110, + 'song0026': 110, + 'song0027': 90, + 'song0028': 115, + 'song0029': 115, + 'song0030': 115, + 'song0031': 115, + 'song0032': 115, + 'song0033': 103, + 'song0034': 117, + 'song0035': 110, + # Not writing initial volume on track 9 + 'song0036': 100, + 'song0037': 120, + 'song0038': 120, + 'song0039': 127, + 'song0040': 127, + 'song0041': 115, + 'song0042': 115, + 'song0043': 115, + 'song0044': 120, + 'song0045': 85, + 'song0046': 92, + 'song0047': 100, + 'song0048': 103, + 'song0049': 118, + 'song0050': 105, + 'song0051': 110, + 'song0052': 105, + 'song0053': 105, + 'song0054': 105, + 'song0102': 100, + 'song0103': 120, + 'song0104': 120, + 'song0105': 120, + 'song0106': 90, + 'song0107': 90, + 'song0108': 90, + 'song0109': 110, + 'song0110': 75, + 'song0111': 120, + 'song0112': 120, + 'song0113': 75, + 'song0114': 100, + 'song0115': 75, + 'song0116': 75, + 'song0117': 100, + 'song0118': 127, + 'song0119': 127, + 'song0120': 127, + 'song0121': 107, + 'song0122': 127, + 'song0123': 127, + 'song0124': 107, + 'song0125': 100, + 'song0126': 110, + 'song0127': 120, + 'song0128': 120, + 'song0129': 120, + 'song0130': 120, + 'song0131': 120, + 'song0132': 110, + 'song0133': 105, + 'song0134': 110, + 'song0135': 120, + 'song0136': 110, + 'song0137': 107, + 'song0138': 127, + 'song0139': 70, + 'song0140': 90, + 'song0141': 120, + 'song0142': 110, + 'song0143': 120, + 'song0144': 120, + 'song0145': 120, + 'song0146': 64, + 'song0147': 120, + 'song0148': 120, + 'song0149': 120, + 'song0150': 120, + 'song0151': 120, + 'song0152': 120, + 'song0153': 120, + 'song0154': 86, + 'song0155': 74, + 'song0156': 120, + 'song0157': 120, + 'song0158': 120, + 'song0159': 120, + 'song0160': 120, + 'song0161': 120, + 'song0162': 114, + 'song0163': 120, + 'song0164': 120, + 'song0166': 89, + 'song0167': 127, + 'song0168': 100, + 'song0169': 90, + 'song0170': 120, + 'song0171': 90, + 'song0172': 90, + 'song0173': 90, + 'song0174': 90, + 'song0175': 88, + 'song0176': 88, + 'song0177': 90, + 'song0178': 55, + 'song0179': 90, + 'song0180': 90, + 'song0181': 90, + 'song0182': 90, + 'song0183': 90, + 'song0184': 90, + 'song0185': 88, + 'song0188': 90, + 'song0189': 90, + 'song0190': 90, + 'song0191': 90, + 'song0192': 90, + 'song0193': 90, + 'song0194': 90, + 'song0195': 90, + 'song0196': 90, + 'song0198': 90, + 'song0199': 90, + 'song0200': 90, + 'song0201': 90, + 'song0202': 100, + 'song0203': 88, + 'song0204': 90, + 'song0205': 90, + 'song0206': 85, + 'song0207': 85, + 'song0208': 85, + 'song0209': 90, + 'song0210': 90, + 'song0211': 90, + 'song0212': 72, + 'song0213': 72, + 'song0214': 72, + 'song0215': 120, + 'song0216': 120, + 'song0217': 120, + 'song0218': 120, + 'song0219': 120, + 'song0220': 120, + 'song0221': 120, + 'song0222': 120, + 'song0223': 120, + 'song0224': 120, + 'song0301': 77, + 'song0302': 77, + 'song0303': 77, + 'song0304': 105, + 'song0305': 110, + 'song0306': 110, + 'song0307': 120, +} + +tone_to_vg = { + '86DB8AC': "voicegroup000", + '86DBCFC': "voicegroup001", + '86DBEAC': "voicegroup002", + '86DC128': "voicegroup003", + '86DC29C': "voicegroup004", + '86DC488': "voicegroup005", + '86DCA88': "voicegroup006", + '86DD088': "voicegroup007", +} + +play_table_addr = 0x086dd760 +num_players = 4 +song_table_addr = play_table_addr + (num_players * 12) +num_songs = 307 + +def addr_to_offset(addr): + if (addr > 0x08000000): + return addr - 0x08000000 + return addr + +def read_u8(rom: BufferedReader): + return struct.unpack('B', rom.read(1))[0] + +def read_u16(rom: BufferedReader): + return struct.unpack('H', rom.read(2))[0] + +def read_u32(rom: BufferedReader): + return struct.unpack('I', rom.read(4))[0] + + +def peek_bytes(rom: BufferedReader, num): + offset = rom.tell() + + peek = [] + for i in range(num): + peek.append(read_u8(rom)) + + rom.seek(offset) + return peek + + +def extract_song_compiler_config(data: BufferedReader, name: str): + block_count = read_u8(data) + priority = read_u8(data) + reverb = read_u8(data) + tone_addr = read_u32(data) + + vg = tone_to_vg[hex(tone_addr).split('0x')[1].upper()] + vg_id = int(vg.replace('voicegroup', '')) + + vol = song_volumes[name] + real_name = song_nums_to_names[name] if name in song_nums_to_names else name + + return f""" +$(MID_SUBDIR)/{real_name}.s: %.s: %.mid + $(MID) $< $@ -E -R{"$(STD_REVERB)" if reverb == 128 else reverb} -G{vg_id} {f"-P{priority}" if priority else ""} -V{vol} + """ + +def extract_from_song_table(rom: BufferedReader): + song_addr_to_name = {} + song_files = [] + + with open("new_songs.inc", "w") as f_song_table: + with open('new_songs.mk', "w") as f_songs_config: + f_song_table.write("\t.align 2\n") + f_song_table.write("\t.global gSongTable\n") + song_table_addr = hex(rom.tell() + 0x08000000).split("0x")[1] + f_song_table.write(f"gSongTable:\t@ 0x0{song_table_addr.upper()}\n") + + for song_num in range(num_songs): + song_addr = read_u32(rom) + ms = read_u16(rom) + me = read_u16(rom) + + + if song_addr not in song_addr_to_name: + song_name = f"song{song_num:04d}" + song_addr_to_name[song_addr] = song_name + + curr_offset = rom.tell() + + rom.seek(addr_to_offset(song_addr)) + track_count = read_u8(rom) + + if track_count != 0: + f_songs_config.write(extract_song_compiler_config(rom, song_name)) + song_files.append(f"build/sa2/sound/songs/midi/{song_name}.o(.rodata);") + else: + song_addr_to_name[song_addr] = "dummy_song_header" + + rom.seek(curr_offset) + + f_song_table.write(f"\tsong {song_addr_to_name[song_addr]}, {ms}, {me}\n") + + if "dummy_song_header" in list(song_addr_to_name.values()): + f_song_table.write("\n\t.align 2\n") + f_song_table.write("dummy_song_header:\n") + f_song_table.write("\t.byte 0, 0, 0, 0\n") + + print(song_addr_to_name) + print("\n".join(song_files)) + +with open('baserom_sa1.gba', 'rb') as rom: + rom.seek(addr_to_offset(song_table_addr)) + extract_from_song_table(rom) diff --git a/sa1/scripts/sound/extract_songs_info_chao_garden.py b/sa1/scripts/sound/extract_songs_info_chao_garden.py new file mode 100644 index 0000000000..afe75dc199 --- /dev/null +++ b/sa1/scripts/sound/extract_songs_info_chao_garden.py @@ -0,0 +1,143 @@ +from io import BufferedReader +import struct + +song_nums_to_names = { + "song0001": "song0001", + "song0002": "song0002", + "song0106": "song0106", + "song0107": "song0107", + "song0108": "song0108" +} + +song_volumes = { + "song0001": 100, + "song0002": 120, + "song0004": 100, + "song0011": 85, + "song0012": 70, + "song0013": 66, + "song0014": 100, + "song0015": 80, + "song0016": 90, + "song0017": 68, + "song0018": 80, + "song0019": 95, + "song0020": 95, + "song0021": 95, + "song0022": 95, + "song0023": 115, + "song0024": 95, + "song0025": 95, + "song0026": 105, + "song0027": 95, + "song0028": 105, + "song0029": 70, + "song0030": 95, + "song0031": 127, + "song0032": 70, + "song0033": 127, + "song0034": 95, + "song0035": 100, + "song0036": 105, +} + +tone_to_vg = { + '2019D30': 'voicegroup000', + '201A180': 'voicegroup001', +} + +play_table_addr = 0x0201A474 +num_players = 4 +song_table_addr = 0x0201A4A4 +num_songs = 37 + +def addr_to_offset(addr): + if (addr > 0x02000000): + return addr - 0x02000000 + return addr + +def read_u8(rom: BufferedReader): + return struct.unpack('B', rom.read(1))[0] + +def read_u16(rom: BufferedReader): + return struct.unpack('H', rom.read(2))[0] + +def read_u32(rom: BufferedReader): + return struct.unpack('I', rom.read(4))[0] + + +def peek_bytes(rom: BufferedReader, num): + offset = rom.tell() + + peek = [] + for i in range(num): + peek.append(read_u8(rom)) + + rom.seek(offset) + return peek + + +def extract_song_compiler_config(data: BufferedReader, name: str): + block_count = read_u8(data) + priority = read_u8(data) + reverb = read_u8(data) + tone_addr = read_u32(data) + + vg = tone_to_vg[hex(tone_addr).split('0x')[1].upper()] + vg_id = int(vg.replace('voicegroup', '')) + + vol = song_volumes[name] + real_name = song_nums_to_names[name] if name in song_nums_to_names else name + + return f""" +$(MID_SUBDIR)/{real_name}.s: %.s: % + $(MID) $< $@ -E -R{"$(STD_REVERB)" if reverb == 128 else reverb} -G{vg_id} {f"-P{priority}" if priority else ""} -V{vol} + """ + +def extract_from_song_table(rom: BufferedReader): + song_addr_to_name = {} + song_files = [] + + with open("new_songs.inc", "w") as f_song_table: + with open('new_songs.mk', "w") as f_songs_config: + f_song_table.write("\t.align 2\n") + f_song_table.write("\t.global gSongTable\n") + song_table_addr = hex(rom.tell() + 0x08000000).split("0x")[1] + f_song_table.write(f"gSongTable:\t@ 0x0{song_table_addr.upper()}\n") + + for song_num in range(num_songs): + song_addr = read_u32(rom) + ms = read_u16(rom) + me = read_u16(rom) + + + if song_addr not in song_addr_to_name: + song_name = f"song{song_num:04d}" + song_addr_to_name[song_addr] = song_name + + curr_offset = rom.tell() + + rom.seek(addr_to_offset(song_addr)) + track_count = read_u8(rom) + + if track_count != 0: + f_songs_config.write(extract_song_compiler_config(rom, song_name)) + song_files.append(f"build/mb_chao_garden/sound/songs/midi/{song_name}.o(.rodata);") + else: + song_addr_to_name[song_addr] = "dummy_song_header" + + rom.seek(curr_offset) + + f_song_table.write(f"\tsong {song_addr_to_name[song_addr]}, {ms}, {me}\n") + + if "dummy_song_header" in list(song_addr_to_name.values()): + f_song_table.write("\n\t.align 2\n") + f_song_table.write("dummy_song_header:\n") + f_song_table.write("\t.byte 0, 0, 0, 0\n") + + print(song_addr_to_name) + print("\n".join(song_files)) + +with open('data/rom_data.bin', 'rb') as rom: + rom.seek(addr_to_offset(song_table_addr)) + extract_from_song_table(rom) diff --git a/sa1/scripts/sound/extract_sound_samples.py b/sa1/scripts/sound/extract_sound_samples.py new file mode 100644 index 0000000000..9009de22df --- /dev/null +++ b/sa1/scripts/sound/extract_sound_samples.py @@ -0,0 +1,8 @@ +import os + +directory = "sound/direct_sound_samples" +for filename in os.listdir(directory): + if filename.endswith('.bin'): + filepath = directory + "/" + filename + print('Extracting', filepath) + os.system('./tools/aif2pcm/aif2pcm ' + filepath) diff --git a/sa1/scripts/sound/extract_voicegroups.py b/sa1/scripts/sound/extract_voicegroups.py new file mode 100644 index 0000000000..a52eb16149 --- /dev/null +++ b/sa1/scripts/sound/extract_voicegroups.py @@ -0,0 +1,56 @@ +def remove_comment(vg): + new_vg_lines = [] + for line in vg.split('\n'): + if len(line) > 0 and "Voicegroup" not in line: + new_vg_lines.append(line) + + return "\n".join(new_vg_lines) + +def replace_ids(contents, ids_map): + for old_id in ids_map: + contents = contents.replace(old_id, ids_map[old_id]) + + return contents + +def get_id(vg): + for line in vg.split('\n'): + if ":" in line: + return line.split(':')[0] + return None + +id_num = 0 + +def get_new_id(): + global id_num + + name = f"voicegroup{id_num:03d}" + id_num += 1 + + return name + +vg_map = {} + +new_vgs = [] + +with open("voice_groups.inc") as whole_file: + data = "".join(whole_file.readlines()) + for section in data.split(".align 2")[1:]: + vg = "\n".join((section.split('.global')[1].split('\n')[1:])) + vg = " .align 2\n" + remove_comment(vg) + + vg_map[get_id(vg)] = get_new_id() + new_vgs.append(vg) + +with open("songs.inc") as songs_file: + songsdata = "".join(songs_file.readlines()) + + with open('new_songs.inc', 'w') as new_songs_file: + new_songs_file.write(replace_ids(songsdata, vg_map)) + +for vg in new_vgs: + with open(f"voicegroups/{vg_map[get_id(vg)]}.inc", 'w') as new_file: + new_file.write(replace_ids(vg, vg_map)) + +with open('new_voicegroups.inc', 'w') as vgs_file: + new_content = "".join(map(lambda val: f".include \"sound/voicegroups/{val}.inc\"\n", vg_map.values())) + vgs_file.write(new_content) diff --git a/sa1/scripts/sound/fix_song_names.py b/sa1/scripts/sound/fix_song_names.py new file mode 100644 index 0000000000..d46ced300e --- /dev/null +++ b/sa1/scripts/sound/fix_song_names.py @@ -0,0 +1,7 @@ +import os + +for song in os.listdir('sound/songs/midi/non_matching'): + new_song = song.replace("song0", "song") + print(song, new_song) + os.rename('sound/songs/midi/non_matching/' + song, 'sound/songs/midi/non_matching/' + new_song) + diff --git a/sa1/scripts/sound/generate_vg_mapping.py b/sa1/scripts/sound/generate_vg_mapping.py new file mode 100644 index 0000000000..829ea71148 --- /dev/null +++ b/sa1/scripts/sound/generate_vg_mapping.py @@ -0,0 +1,12 @@ +import os + +mapping = {} + +for name in os.listdir('voicegroups'): + with open('voicegroups/' + name) as vg_file: + id = name.split('.')[0] + for line in vg_file.readlines(): + if line.startswith(id): + mapping[line.split('@')[1].strip().split('0x0')[1]] = id + +print(mapping) diff --git a/sa1/scripts/sound/match_next_midi.py b/sa1/scripts/sound/match_next_midi.py new file mode 100644 index 0000000000..14f5f80a69 --- /dev/null +++ b/sa1/scripts/sound/match_next_midi.py @@ -0,0 +1,51 @@ +import os +import sys + +skipped = [] + +SONGS_DIR = 'sound/songs' +NON_MATCHED_MIDIS = 'sound/songs/midi/non_matching' +MATCHED_MIDIS = 'sound/songs/midi' +LDSCRIPT = 'ldscript.txt' + +to_match = reversed(sorted(map(lambda s: s.split('.s')[0], filter(lambda f: f.endswith('.s') , os.listdir(SONGS_DIR))))) + +for next_song in to_match: + if next_song in skipped: + print(f"skipping {next_song}") + continue + + if not next_song: + print("None left!") + sys.exit(1) + + print(f"matching {next_song}") + os.remove(SONGS_DIR + "/" + next_song + ".s") + os.rename(NON_MATCHED_MIDIS + "/" + next_song + ".mid", MATCHED_MIDIS + "/" + next_song + ".mid") + + ldscript_data = "" + with open(LDSCRIPT) as ldscript: + ldscript_data = "".join(ldscript.readlines()) + + ldscript_data = ldscript_data.replace("sound/songs/" + next_song + ".o", "sound/songs/midi/" + next_song + ".o") + + with open(LDSCRIPT, "w") as ldscript: + ldscript.write(ldscript_data) + + print('Cleaning build') + try: os.remove("sa1.elf") + except: pass + try: os.remove("sa1.gba") + except: pass + try: os.removedirs("build/gba/sa1/sound") + except: pass + + print('Verifying build') + error = os.system("make -j8") + if not error: + print('success!') + os.system('git add -A') + else: + print('fail, reverting') + os.system('git checkout -- sound ldscript.txt') + os.system('git clean -f >/dev/null 2>&1') diff --git a/sa1/scripts/sound/match_next_midi_chao_garden.py b/sa1/scripts/sound/match_next_midi_chao_garden.py new file mode 100644 index 0000000000..2fae1747e0 --- /dev/null +++ b/sa1/scripts/sound/match_next_midi_chao_garden.py @@ -0,0 +1,46 @@ +import os +import sys + +skipped = [] + +SONGS_DIR = 'sound/songs' +NON_MATCHED_MIDIS = 'sound/songs/midi/non_matching' +MATCHED_MIDIS = 'sound/songs/midi' +LDSCRIPT = 'ldscript.txt' + +to_match = reversed(sorted(map(lambda s: s.split('.s')[0], filter(lambda f: f.endswith('.s') , os.listdir(SONGS_DIR))))) + +for next_song in to_match: + if next_song in skipped: + print(f"skipping {next_song}") + continue + + if not next_song: + print("None left!") + sys.exit(1) + + print(f"matching {next_song}") + os.remove(SONGS_DIR + "/" + next_song + ".s") + os.rename(NON_MATCHED_MIDIS + "/" + next_song + ".mid", MATCHED_MIDIS + "/" + next_song + ".mid") + + ldscript_data = "" + with open(LDSCRIPT) as ldscript: + ldscript_data = "".join(ldscript.readlines()) + + ldscript_data = ldscript_data.replace("build/mb_chao_garden/sound/songs/" + next_song + ".o", "build/mb_chao_garden/sound/songs/midi/" + next_song + ".o") + + with open(LDSCRIPT, "w") as ldscript: + ldscript.write(ldscript_data) + + print('Cleaning build') + os.system('make tidy >/dev/null 2>&1') + + print('Verifying build') + error = os.system("make >/dev/null 2>&1") + if not error: + print('success!') + os.system('git add -A') + else: + print('fail, reverting') + os.system('git checkout -- sound ldscript.txt') + os.system('git clean -f >/dev/null 2>&1') diff --git a/sa1/scripts/sound/match_songs_to_song_ids.py b/sa1/scripts/sound/match_songs_to_song_ids.py new file mode 100644 index 0000000000..1a504db30d --- /dev/null +++ b/sa1/scripts/sound/match_songs_to_song_ids.py @@ -0,0 +1,19 @@ +mapping = {145579812: 'dummy_song_header', 147144256: 'mus_intro', 147145052: 'mus_title_fanfare', 147145824: 'song0003', 147147448: 'song0004', 147149476: 'song0005', 147151220: 'song0006', 147153268: 'song0007', 147156600: 'song0009', 147161612: 'song0013', 147166296: 'song0014', 147169800: 'song0015', 147174524: 'song0016', 147179212: 'song0017', 147185048: 'song0018', 147192076: 'song0019', 147203868: 'song0020', 147208392: 'song0021', 147213604: 'song0022', 147220952: 'song0023', 147233316: 'song0024', 147237820: 'song0025', 147241516: 'song0026', 147243580: 'song0027', 147248364: 'song0028', 147250428: 'song0029', 147250876: 'song0031', 147256512: 'song0032', 147258428: 'song0033', 147271688: 'song0034', 147276304: 'song0035', 147279676: 'song0036', 147282964: 'song0037', 147284780: 'song0038', 147285244: 'song0041', 147287800: 'song0042', 147292784: 'song0043', 147300464: 'song0044', 147303816: 'song0045', 147305520: 'song0046', 147308360: 'song0048', 147311752: 'song0049', 147312076: 'song0050', 147315236: 'song0051', 147316984: 'song0052', 147317232: 'song0053', 147317672: 'song0054', 147319004: 'song0055', 147319360: 'song0056', 147319752: 'song0057', 147323016: 'song0058', 147323908: 'song0059', 147324916: 'song0061', 147326332: 'song0064', 147328100: 'song0066', 147328152: 'song0102', 147328228: 'song0103', 147328276: 'song0104', 147328316: 'song0105', 147328356: 'se_select', 147328392: 'se_return', 147328424: 'se_menu_cursor_move', 147328456: 'song0109', 147328660: 'song0110', 147328696: 'song0111', 147328796: 'song0112', 147328964: 'song0113', 147329024: 'song0114', 147329116: 'song0115', 147329192: 'song0116', 147329220: 'song0117', 147329248: 'song0118', 147329284: 'song0119', 147329388: 'song0120', 147329424: 'song0121', 147329648: 'song0125', 147329872: 'song0126', 147330116: 'song0127', 147330144: 'song0128', 147330172: 'song0129', 147330288: 'song0131', 147330320: 'song0135', 147330412: 'song0138', 147330456: 'song0139', 147330488: 'song0140', 147330520: 'song0141', 147330564: 'song0142', 147330772: 'song0143', 147330808: 'song0144', 147331016: 'song0145', 147331100: 'song0146', 147331132: 'song0147', 147331208: 'song0148', 147331304: 'song0149', 147331396: 'song0150', 147331440: 'song0151', 147331480: 'song0152', 147331556: 'song0153', 147331672: 'song0154', 147331896: 'song0155', 147332076: 'song0156', 147332144: 'song0157', 147332228: 'song0158', 147332260: 'song0159', 147332292: 'song0160', 147332324: 'song0161', 147332356: 'song0162', 147332388: 'song0163', 147332420: 'song0164', 147332452: 'song0165', 147332484: 'song0166', 147332516: 'song0167', 147332548: 'song0168', 147332732: 'song0169', 147332916: 'song0170', 147332944: 'song0201', 147332972: 'song0202', 147333000: 'song0203', 147333028: 'song0204', 147333056: 'song0205', 147333084: 'song0206', 147333112: 'song0208', 147333140: 'song0209', 147333168: 'song0210', 147333196: 'song0211', 147333224: 'song0212', 147333372: 'song0213', 147333532: 'song0214', 147333680: 'song0215', 147333848: 'song0216', 147333940: 'song0217', 147334008: 'song0218', 147334056: 'song0219', 147334092: 'song0220', 147334256: 'song0221', 147334316: 'song0222', 147334452: 'song0223', 147334500: 'song0224', 147334760: 'song0225', 147334876: 'song0226', 147335004: 'song0227', 147335052: 'song0228', 147335080: 'song0229', 147335244: 'song0230', 147335292: 'song0231', 147335800: 'song0232', 147335964: 'song0234', 147336176: 'song0235', 147336476: 'song0236', 147336608: 'song0237', 147336644: 'song0238', 147336744: 'song0239', 147336968: 'song0241', 147337176: 'song0242', 147337212: 'song0243', 147337336: 'song0244', 147337380: 'song0245', 147337472: 'song0246', 147337772: 'song0248', 147337808: 'song0249', 147337924: 'song0250', 147337960: 'song0251', 147338116: 'song0252', 147338256: 'song0253', 147338360: 'song0254', 147338400: 'song0255', 147338484: 'song0256', 147338592: 'song0257', 147338820: 'song0258', 147338868: 'song0259', 147338976: 'song0260', 147339056: 'song0261', 147339140: 'song0262', 147339304: 'song0263', 147339492: 'song0264', 147339704: 'song0265', 147339788: 'song0266', 147339824: 'song0267', 147339960: 'song0268', 147340140: 'song0269', 147340276: 'song0270', 147340456: 'song0271', 147340568: 'song0272', 147340752: 'song0273', 147340812: 'song0274', 147340948: 'song0275', 147341172: 'song0276', 147341400: 'song0277', 147341484: 'song0278', 147341668: 'song0279', 147341856: 'song0280', 147341904: 'song0281', 147341948: 'song0282', 147342136: 'song0283', 147342320: 'song0284', 147342456: 'song0285', 147342536: 'song0286', 147342700: 'song0287', 147342804: 'song0288', 147342860: 'song0289', 147343048: 'song0290', 147343148: 'song0291', 147343420: 'song0292', 147343560: 'song0293', 147343696: 'song0294', 147343732: 'song0295', 147343808: 'song0296', 147343912: 'song0297', 147343948: 'song0298', 147343984: 'song0300', 147344020: 'song0301', 147344056: 'song0302', 147344092: 'song0303', 147344128: 'song0304', 147344164: 'song0305', 147344200: 'song0306', 147344236: 'song0307', 147344272: 'song0308', 147344308: 'song0309', 147344344: 'song0310', 147344380: 'song0311', 147344416: 'song0312', 147344452: 'song0313', 147344488: 'song0314', 147344524: 'song0315', 147344560: 'song0316', 147344596: 'song0317', 147344632: 'song0318', 147344668: 'song0319', 147344712: 'song0320', 147344748: 'song0321', 147344812: 'song0322', 147344868: 'song0323', 147344904: 'song0324', 147344940: 'song0325', 147344976: 'song0326', 147345012: 'song0327', 147345048: 'song0328', 147345084: 'song0329', 147345112: 'song0331', 147345140: 'song0332', 147345296: 'song0333', 147345548: 'song0401', 147346032: 'song0402', 147346688: 'song0403', 147347224: 'song0404', 147347632: 'song0405', 147348556: 'song0406', 147348864: 'song0407', 147349596: 'song0408', 147350012: 'song0410', 147350544: 'song0411', 147350700: 'song0412', 147350912: 'song0413', 147351040: 'song0414', 147351800: 'song0415', 147352140: 'song0504', 147352628: 'song0505', 147352980: 'song0506'} + + +all_data = "" +with open("songs.inc") as songs_file: + all_data = "".join(songs_file.readlines()) + target = len(mapping.values()) + num = 1 + for addr in mapping: + name = mapping[addr] + hex_addr = hex(addr).split("0x")[1] + formatted_addr = f"gUnknown_0{hex_addr.upper()}" + all_data = all_data.replace(formatted_addr, name) + + print(f"{num}/{target}") + num += 1 + +with open("songs.inc", "w") as songs_file: + songs_file.write(all_data) diff --git a/sa1/scripts/sound/match_to_samples.py b/sa1/scripts/sound/match_to_samples.py new file mode 100644 index 0000000000..8f9c511de5 --- /dev/null +++ b/sa1/scripts/sound/match_to_samples.py @@ -0,0 +1,21 @@ +import hashlib +import os +import codecs + +# Can be used to match direct sound samples to sample +# files (so we can name). Atm can't find any samples which match +# using checksums + +def file_as_bytes(file): + with file: + return file.read() + +f_list = sorted(filter(lambda f: f.endswith('.aif') , os.listdir("direct_sound_samples"))) +f_list_samples = sorted(filter(lambda f: f.endswith('.aif') , os.listdir("samples"))) + +checksums = dict([(fname, str(codecs.encode(hashlib.md5(file_as_bytes(open("direct_sound_samples/" + fname, 'rb'))).digest(), 'hex'))) for fname in f_list]) +checksum_samples = dict([(str(codecs.encode(hashlib.md5(file_as_bytes(open("samples/" + fname, 'rb'))).digest(), 'hex')), fname) for fname in f_list_samples]) + +for orig_sample in checksums: + if checksums[orig_sample] in checksum_samples: + print(orig_sample, checksum_samples[checksums[orig_sample]]) diff --git a/sa1/scripts/sound/name_direct_sound_samples.py b/sa1/scripts/sound/name_direct_sound_samples.py new file mode 100644 index 0000000000..dc9e309d28 --- /dev/null +++ b/sa1/scripts/sound/name_direct_sound_samples.py @@ -0,0 +1,56 @@ +import os + +name_mappings = {} +id_mappings = {} + +i = 1 + +direct_sound_table_data = "" +with open(f"direct_sound_data.inc") as f_direct_sound_table: + direct_sound_table_data = "".join(f_direct_sound_table.readlines()) + +for sound_sample in sorted(os.listdir('direct_sound_samples')): + if not sound_sample.endswith('.aif'): + continue + + if not sound_sample.startswith('08'): + print(f"skipping {sound_sample}") + continue + + current_id = sound_sample.split('.')[0] + new_id = f"unknown_{i:03d}" + current_name = f"gUnknown_{current_id}" + new_name = f"DirectSoundWaveData_{i}" + + print(current_id, new_id, current_name, new_name) + + # Remove the global reference + direct_sound_table_data = direct_sound_table_data.replace(f" .global {current_name}\n", "") + + direct_sound_table_data = direct_sound_table_data.replace(current_name, new_name) + direct_sound_table_data = direct_sound_table_data.replace(current_id, new_id) + + name_mappings[current_name] = new_name + id_mappings[current_id] = new_id + + i += 1 + +# print(direct_sound_table_data) + +with open(f"direct_sound_data.inc", 'w') as f_direct_sound_table: + f_direct_sound_table.write(direct_sound_table_data) + +for current_id in id_mappings: + os.rename(f'direct_sound_samples/{current_id}.aif', f'direct_sound_samples/{id_mappings[current_id]}.aif') + +for vg_file in os.listdir('voicegroups'): + vg_data = "" + + with open('voicegroups/' + vg_file) as f_vg: + vg_data = "".join(f_vg.readlines()) + + for current_name in name_mappings: + vg_data = vg_data.replace(current_name, name_mappings[current_name]) + + with open('voicegroups/' + vg_file, 'w') as f_vg: + f_vg.write(vg_data) diff --git a/sa1/scripts/sound/name_programmable_wave_data.py b/sa1/scripts/sound/name_programmable_wave_data.py new file mode 100644 index 0000000000..38cbb87993 --- /dev/null +++ b/sa1/scripts/sound/name_programmable_wave_data.py @@ -0,0 +1,46 @@ +import os + +name_mappings = {} +id_mappings = {} + +i = 1 + +wave_data_table = "" +with open(f"programmable_wave_data.inc") as wave_table: + wave_data_table = "".join(wave_table.readlines()) + + +for pcm_file in sorted(os.listdir('programmable_wave_samples')): + current_id = pcm_file.split('.')[0] + new_id = f"{i:02d}" + current_name = f"gUnknown_{current_id}" + new_name = f"ProgrammableWaveData_{i}" + + print(current_id, new_id, current_name, new_name) + + wave_data_table = wave_data_table.replace(f" .global {current_name}\n", "") + wave_data_table = wave_data_table.replace(current_name, new_name) + wave_data_table = wave_data_table.replace(current_id, new_id) + + name_mappings[current_name] = new_name + id_mappings[current_id] = new_id + + i += 1 + +with open(f"programmable_wave_data.inc", 'w') as wave_table: + wave_table.write(wave_data_table) + +for current_id in id_mappings: + os.rename(f'programmable_wave_samples/{current_id}.pcm', f'programmable_wave_samples/{id_mappings[current_id]}.pcm') + +for vg_file in os.listdir('voicegroups'): + vg_data = "" + + with open('voicegroups/' + vg_file) as f_vg: + vg_data = "".join(f_vg.readlines()) + + for current_name in name_mappings: + vg_data = vg_data.replace(current_name, name_mappings[current_name]) + + with open('voicegroups/' + vg_file, 'w') as f_vg: + f_vg.write(vg_data) diff --git a/sa1/scripts/sound/name_songs.py b/sa1/scripts/sound/name_songs.py new file mode 100644 index 0000000000..fff04df7cc --- /dev/null +++ b/sa1/scripts/sound/name_songs.py @@ -0,0 +1,57 @@ +import os + +ldscript_contents = "" +songs_mk_contents = "" + +with open("ldscript.txt") as ldscript: + ldscript_contents = "".join(ldscript.readlines()) + +with open("songs.mk") as songs_mk: + songs_mk_contents = "".join(songs_mk.readlines()) + +with open("sound/song_table.inc") as song_table: + song_table_contents = "".join(song_table.readlines()) + +with open("include/constants/songs.h") as songs_header: + for line in songs_header.readlines(): + if not line.startswith("#define"): + continue + + line = line.strip() + # strip comments + line = line.split(' //')[0] + segments = line.split(' ') + if len(segments) < 3: + continue + + _, name, number = line.split(' ') + name = name.lower() + number = int(number) + + new_midi_name = f"{name}.mid" + old_midi_name = f"song{number:04}.mid" + + matched = False + if old_midi_name in os.listdir('sound/songs/midi/'): + matched = True + os.rename(f"sound/songs/midi/{old_midi_name}", f"sound/songs/midi/{new_midi_name}") + + if old_midi_name.replace('.mid', ".s") in os.listdir('sound/songs/'): + matched = True + os.rename(f"sound/songs/{old_midi_name.replace('.mid', '.s')}", f"sound/songs/{new_midi_name.replace('.mid', '.s')}") + + if matched: + ldscript_contents = ldscript_contents.replace(old_midi_name.replace('.mid', ".o"), new_midi_name.replace('.mid', ".o")) + songs_mk_contents = songs_mk_contents.replace(old_midi_name.replace('.mid', ".s"), new_midi_name.replace('.mid', ".s")) + song_table_contents = song_table_contents.replace(old_midi_name.replace('.mid', ""), new_midi_name.replace('.mid', "")) + else: + print("Unmatched", name, number) + +with open("ldscript.txt", "w") as ldscript: + ldscript.write(ldscript_contents) + +with open("songs.mk", "w") as songs_mk: + songs_mk.write(songs_mk_contents) + +with open("sound/song_table.inc", "w") as song_table: + song_table.write(song_table_contents) diff --git a/sa1/scripts/sound/update_unmatched_songs.py b/sa1/scripts/sound/update_unmatched_songs.py new file mode 100644 index 0000000000..c02ebfb681 --- /dev/null +++ b/sa1/scripts/sound/update_unmatched_songs.py @@ -0,0 +1,45 @@ +import os + +tone_to_vg = { + '8AD1544': 'voicegroup013', + '8ACF510': 'voicegroup007', + '8ACF384': 'voicegroup006', + '8AD1160': 'voicegroup012', + '8ACEBD4': 'voicegroup004', + '8AD0710': 'voicegroup010', + '8AD0D10': 'voicegroup011', + '8ACED90': 'voicegroup005', + '8ACE3A0': 'voicegroup001', + '8AD1F94': 'voicegroup015', + '8AD1B44': 'voicegroup014', + '8ACDF50': 'voicegroup000', + '8AD2108': 'voicegroup016', + '8ACE550': 'voicegroup002', + '8ACE784': 'voicegroup003', + '8AD2558': 'voicegroup017', + '8AD2ABC': 'voicegroup019', + '8AD2948': 'voicegroup018', + '8AD42BC': 'voicegroup023', + '8ACFB10': 'voicegroup008', + '8AD30BC': 'voicegroup020', + '8AD36BC': 'voicegroup021', + '8AD0110': 'voicegroup009', + '8AD3CBC': 'voicegroup022', + '8AD470C': 'voicegroup024' +} + +for song_file in os.listdir('songs'): + if not song_file.endswith('.s'): + continue + + print("sound/songs/" + song_file) + + data = "" + with open('songs/' + song_file) as f_song: + data = "".join(f_song.readlines()) + + for addr in tone_to_vg: + data = data.replace(f"gUnknown_0{addr}", tone_to_vg[addr]) + + with open('songs/' + song_file, "w") as f_song: + f_song.write(data) diff --git a/sa1/songs.mk b/sa1/songs.mk new file mode 100644 index 0000000000..638af72771 --- /dev/null +++ b/sa1/songs.mk @@ -0,0 +1,549 @@ +STD_REVERB = 0 + +$(MID_BUILDDIR)/%.o: $(MID_SUBDIR)/%.s + @echo "$(AS) -I sound -o $@ $<" + @$(PREPROC) $< $(PLATFORM) "" | $(CPP) $(CPPFLAGS) - | $(AS) $(ASFLAGS) -o $@ - + + # Voicegroup (-G) 003 in SA2! +$(MID_SUBDIR)/se_ring_copy.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V100 + +$(MID_SUBDIR)/song001.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V120 + +$(MID_SUBDIR)/song002.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V115 + +$(MID_SUBDIR)/song003.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V120 + +$(MID_SUBDIR)/song004.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V108 + +$(MID_SUBDIR)/song005.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V110 + +$(MID_SUBDIR)/song006.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V105 + +$(MID_SUBDIR)/song007.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V108 + +$(MID_SUBDIR)/song008.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V108 + +$(MID_SUBDIR)/song009.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V61 + +$(MID_SUBDIR)/song010.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V115 + +$(MID_SUBDIR)/song011.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V111 + +$(MID_SUBDIR)/song012.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song013.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V127 + +$(MID_SUBDIR)/song014.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song015.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song016.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song017.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song018.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V110 + +$(MID_SUBDIR)/song019.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V105 + +$(MID_SUBDIR)/song020.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V110 + +$(MID_SUBDIR)/song021.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V110 + +$(MID_SUBDIR)/song022.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V110 + +$(MID_SUBDIR)/song023.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V110 + +$(MID_SUBDIR)/song024.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song025.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song026.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V110 + +$(MID_SUBDIR)/song027.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V90 + +$(MID_SUBDIR)/song028.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -V115 + +$(MID_SUBDIR)/song029.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V115 + +$(MID_SUBDIR)/song030.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V115 + +$(MID_SUBDIR)/song031.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V115 + +$(MID_SUBDIR)/song032.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V115 + +$(MID_SUBDIR)/song033.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V103 + +$(MID_SUBDIR)/song034.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -V117 + +$(MID_SUBDIR)/song035.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V110 + +$(MID_SUBDIR)/song036.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V100 + +$(MID_SUBDIR)/song037.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V120 + +$(MID_SUBDIR)/song038.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V120 + +$(MID_SUBDIR)/song039.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V127 + +$(MID_SUBDIR)/song040.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R178 -G0 -V127 + +$(MID_SUBDIR)/song041.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V115 + +$(MID_SUBDIR)/song042.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V115 + +$(MID_SUBDIR)/mus_sp_stage_trick.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V115 + +$(MID_SUBDIR)/song044.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V120 + +$(MID_SUBDIR)/song045.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V85 + +$(MID_SUBDIR)/song046.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V92 + +$(MID_SUBDIR)/song047.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V100 + +$(MID_SUBDIR)/song048.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V103 + +$(MID_SUBDIR)/song049.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -V118 + +$(MID_SUBDIR)/song050.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V105 + +$(MID_SUBDIR)/song051.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V110 + +$(MID_SUBDIR)/song052.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V105 + +$(MID_SUBDIR)/song053.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V105 + +$(MID_SUBDIR)/song054.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V105 + +$(MID_SUBDIR)/song102.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V100 + +$(MID_SUBDIR)/song103.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song104.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song105.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song106.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song107.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song108.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song109.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V110 + +$(MID_SUBDIR)/song110.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V75 + +$(MID_SUBDIR)/song111.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song112.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song113.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V75 + +$(MID_SUBDIR)/song114.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V100 + +$(MID_SUBDIR)/song115.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V75 + +$(MID_SUBDIR)/song116.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V75 + +$(MID_SUBDIR)/song117.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V100 + +$(MID_SUBDIR)/song118.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V127 + +$(MID_SUBDIR)/song119.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V127 + +$(MID_SUBDIR)/song120.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V127 + +$(MID_SUBDIR)/song121.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V107 + +$(MID_SUBDIR)/song122.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V127 + +$(MID_SUBDIR)/song123.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V127 + +$(MID_SUBDIR)/song124.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V107 + +$(MID_SUBDIR)/song125.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V100 + +$(MID_SUBDIR)/song126.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V110 + +$(MID_SUBDIR)/song127.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song128.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song129.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song130.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song131.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song132.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V110 + +$(MID_SUBDIR)/song133.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V105 + +$(MID_SUBDIR)/song134.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V110 + +$(MID_SUBDIR)/song135.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V120 + +$(MID_SUBDIR)/song136.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V110 + +$(MID_SUBDIR)/song137.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V107 + +$(MID_SUBDIR)/song138.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V127 + +$(MID_SUBDIR)/song139.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V70 + +$(MID_SUBDIR)/song140.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song141.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V120 + +$(MID_SUBDIR)/song142.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V110 + +$(MID_SUBDIR)/song143.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song144.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song145.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song146.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V64 + +$(MID_SUBDIR)/song147.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song148.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song149.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song150.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song151.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song152.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song153.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song154.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -P20 -V86 + +$(MID_SUBDIR)/song155.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -P20 -V74 + +$(MID_SUBDIR)/song156.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song157.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song158.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song159.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song160.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song161.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song162.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V114 + +$(MID_SUBDIR)/song163.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song164.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song166.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V89 + +$(MID_SUBDIR)/song167.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V127 + +$(MID_SUBDIR)/song168.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V100 + +$(MID_SUBDIR)/song169.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song170.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V120 + +$(MID_SUBDIR)/song171.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song172.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song173.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song174.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song175.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V88 + +$(MID_SUBDIR)/song176.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V88 + +$(MID_SUBDIR)/song177.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song178.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V55 + +$(MID_SUBDIR)/song179.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song180.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song181.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song182.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song183.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song184.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song185.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V88 + +$(MID_SUBDIR)/song188.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song189.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song190.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song191.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song192.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song193.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song194.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song195.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song196.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song198.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song199.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song200.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song201.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song202.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G4 -P20 -V100 + +$(MID_SUBDIR)/song203.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V88 + +$(MID_SUBDIR)/song204.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song205.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -P20 -V90 + +$(MID_SUBDIR)/song206.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V85 + +$(MID_SUBDIR)/song207.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V85 + +$(MID_SUBDIR)/song208.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V85 + +$(MID_SUBDIR)/song209.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song210.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song211.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V90 + +$(MID_SUBDIR)/song212.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V72 + +$(MID_SUBDIR)/song213.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V72 + +$(MID_SUBDIR)/song214.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V72 + +$(MID_SUBDIR)/song215.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song216.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song217.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song218.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song219.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song220.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song221.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song222.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song223.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song224.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G5 -P20 -V120 + +$(MID_SUBDIR)/song301.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V77 + +$(MID_SUBDIR)/song302.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V77 + +$(MID_SUBDIR)/song303.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V77 + +$(MID_SUBDIR)/song304.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V105 + +$(MID_SUBDIR)/song305.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V110 + +$(MID_SUBDIR)/song306.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G7 -V110 + +$(MID_SUBDIR)/song307.s: %.s: %.mid + $(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G0 -V120 diff --git a/sa1/sound/MPlayDef.s b/sa1/sound/MPlayDef.s new file mode 100644 index 0000000000..95a788e85e --- /dev/null +++ b/sa1/sound/MPlayDef.s @@ -0,0 +1,430 @@ + .equ W00, 0x80 @ WAIT + .equ W01, W00+1 @ + .equ W02, W00+2 @ + .equ W03, W00+3 @ + .equ W04, W00+4 @ + .equ W05, W00+5 @ + .equ W06, W00+6 @ + .equ W07, W00+7 @ + .equ W08, W00+8 @ + .equ W09, W00+9 @ + .equ W10, W00+10 @ + .equ W11, W00+11 @ + .equ W12, W00+12 @ + .equ W13, W00+13 @ + .equ W14, W00+14 @ + .equ W15, W00+15 @ + .equ W16, W00+16 @ + .equ W17, W00+17 @ + .equ W18, W00+18 @ + .equ W19, W00+19 @ + .equ W20, W00+20 @ + .equ W21, W00+21 @ + .equ W22, W00+22 @ + .equ W23, W00+23 @ + .equ W24, W00+24 @ + .equ W28, W00+25 @ + .equ W30, W00+26 @ + .equ W32, W00+27 @ + .equ W36, W00+28 @ + .equ W40, W00+29 @ + .equ W42, W00+30 @ + .equ W44, W00+31 @ + .equ W48, W00+32 @ + .equ W52, W00+33 @ + .equ W54, W00+34 @ + .equ W56, W00+35 @ + .equ W60, W00+36 @ + .equ W64, W00+37 @ + .equ W66, W00+38 @ + .equ W68, W00+39 @ + .equ W72, W00+40 @ + .equ W76, W00+41 @ + .equ W78, W00+42 @ + .equ W80, W00+43 @ + .equ W84, W00+44 @ + .equ W88, W00+45 @ + .equ W90, W00+46 @ + .equ W92, W00+47 @ + .equ W96, W00+48 @ + + .equ FINE, 0xb1 @ fine + .equ GOTO, 0xb2 @ goto + .equ PATT, 0xb3 @ pattern play + .equ PEND, 0xb4 @ pattern end + .equ REPT, 0xb5 @ repeat + .equ MEMACC, 0xb9 @ memacc op adr dat ***lib + .equ PRIO, 0xba @ priority + .equ TEMPO, 0xbb @ tempo (BPM/2) + .equ KEYSH, 0xbc @ key shift + .equ VOICE, 0xbd @ voice # + .equ VOL, 0xbe @ volume + .equ PAN, 0xbf @ panpot (c_v+??) + .equ BEND, 0xc0 @ pitch bend (c_v+??) + .equ BENDR, 0xc1 @ bend range + .equ LFOS, 0xc2 @ LFO speed + .equ LFODL, 0xc3 @ LFO delay + .equ MOD, 0xc4 @ modulation depth + .equ MODT, 0xc5 @ modulation type + .equ TUNE, 0xc8 @ micro tuning (c_v+??) + + .equ XCMD, 0xcd @ extend command ***lib + .equ xIECV, 0x08 @ imi.echo vol ***lib + .equ xIECL, 0x09 @ imi.echo len ***lib + + .equ EOT, 0xce @ End of Tie + .equ TIE, 0xcf @ + .equ N01, TIE+1 @ NOTE + .equ N02, N01+1 @ + .equ N03, N01+2 @ + .equ N04, N01+3 @ + .equ N05, N01+4 @ + .equ N06, N01+5 @ + .equ N07, N01+6 @ + .equ N08, N01+7 @ + .equ N09, N01+8 @ + .equ N10, N01+9 @ + .equ N11, N01+10 @ + .equ N12, N01+11 @ + .equ N13, N01+12 @ + .equ N14, N01+13 @ + .equ N15, N01+14 @ + .equ N16, N01+15 @ + .equ N17, N01+16 @ + .equ N18, N01+17 @ + .equ N19, N01+18 @ + .equ N20, N01+19 @ + .equ N21, N01+20 @ + .equ N22, N01+21 @ + .equ N23, N01+22 @ + .equ N24, N01+23 @ + .equ N28, N01+24 @ + .equ N30, N01+25 @ + .equ N32, N01+26 @ + .equ N36, N01+27 @ + .equ N40, N01+28 @ + .equ N42, N01+29 @ + .equ N44, N01+30 @ + .equ N48, N01+31 @ + .equ N52, N01+32 @ + .equ N54, N01+33 @ + .equ N56, N01+34 @ + .equ N60, N01+35 @ + .equ N64, N01+36 @ + .equ N66, N01+37 @ + .equ N68, N01+38 @ + .equ N72, N01+39 @ + .equ N76, N01+40 @ + .equ N78, N01+41 @ + .equ N80, N01+42 @ + .equ N84, N01+43 @ + .equ N88, N01+44 @ + .equ N90, N01+45 @ + .equ N92, N01+46 @ + .equ N96, N01+47 @ + +@ maximum value for volume + + .equ mxv, 0x7F @ + +@ center value of PAN, BEND, TUNE + + .equ c_v, 0x40 @ -64 ~ +63 + +@ note for N??, TIE, EOT + + .equ CnM2, 0 @ + .equ CsM2, 1 @ + .equ DnM2, 2 @ + .equ DsM2, 3 @ + .equ EnM2, 4 @ + .equ FnM2, 5 @ + .equ FsM2, 6 @ + .equ GnM2, 7 @ + .equ GsM2, 8 @ + .equ AnM2, 9 @ + .equ AsM2, 10 @ + .equ BnM2, 11 @ + .equ CnM1, 12 @ + .equ CsM1, 13 @ + .equ DnM1, 14 @ + .equ DsM1, 15 @ + .equ EnM1, 16 @ + .equ FnM1, 17 @ + .equ FsM1, 18 @ + .equ GnM1, 19 @ + .equ GsM1, 20 @ + .equ AnM1, 21 @ + .equ AsM1, 22 @ + .equ BnM1, 23 @ + .equ Cn0, 24 @ + .equ Cs0, 25 @ + .equ Dn0, 26 @ + .equ Ds0, 27 @ + .equ En0, 28 @ + .equ Fn0, 29 @ + .equ Fs0, 30 @ + .equ Gn0, 31 @ + .equ Gs0, 32 @ + .equ An0, 33 @ + .equ As0, 34 @ + .equ Bn0, 35 @ + .equ Cn1, 36 @ + .equ Cs1, 37 @ + .equ Dn1, 38 @ + .equ Ds1, 39 @ + .equ En1, 40 @ + .equ Fn1, 41 @ + .equ Fs1, 42 @ + .equ Gn1, 43 @ + .equ Gs1, 44 @ + .equ An1, 45 @ + .equ As1, 46 @ + .equ Bn1, 47 @ + .equ Cn2, 48 @ + .equ Cs2, 49 @ + .equ Dn2, 50 @ + .equ Ds2, 51 @ + .equ En2, 52 @ + .equ Fn2, 53 @ + .equ Fs2, 54 @ + .equ Gn2, 55 @ + .equ Gs2, 56 @ + .equ An2, 57 @ + .equ As2, 58 @ + .equ Bn2, 59 @ + .equ Cn3, 60 @ + .equ Cs3, 61 @ + .equ Dn3, 62 @ + .equ Ds3, 63 @ + .equ En3, 64 @ + .equ Fn3, 65 @ + .equ Fs3, 66 @ + .equ Gn3, 67 @ + .equ Gs3, 68 @ + .equ An3, 69 @ 440Hz + .equ As3, 70 @ + .equ Bn3, 71 @ + .equ Cn4, 72 @ + .equ Cs4, 73 @ + .equ Dn4, 74 @ + .equ Ds4, 75 @ + .equ En4, 76 @ + .equ Fn4, 77 @ + .equ Fs4, 78 @ + .equ Gn4, 79 @ + .equ Gs4, 80 @ + .equ An4, 81 @ + .equ As4, 82 @ + .equ Bn4, 83 @ + .equ Cn5, 84 @ + .equ Cs5, 85 @ + .equ Dn5, 86 @ + .equ Ds5, 87 @ + .equ En5, 88 @ + .equ Fn5, 89 @ + .equ Fs5, 90 @ + .equ Gn5, 91 @ + .equ Gs5, 92 @ + .equ An5, 93 @ + .equ As5, 94 @ + .equ Bn5, 95 @ + .equ Cn6, 96 @ + .equ Cs6, 97 @ + .equ Dn6, 98 @ + .equ Ds6, 99 @ + .equ En6, 100 @ + .equ Fn6, 101 @ + .equ Fs6, 102 @ + .equ Gn6, 103 @ + .equ Gs6, 104 @ + .equ An6, 105 @ + .equ As6, 106 @ + .equ Bn6, 107 @ + .equ Cn7, 108 @ + .equ Cs7, 109 @ + .equ Dn7, 110 @ + .equ Ds7, 111 @ + .equ En7, 112 @ + .equ Fn7, 113 @ + .equ Fs7, 114 @ + .equ Gn7, 115 @ + .equ Gs7, 116 @ + .equ An7, 117 @ + .equ As7, 118 @ + .equ Bn7, 119 @ + .equ Cn8, 120 @ + .equ Cs8, 121 @ + .equ Dn8, 122 @ + .equ Ds8, 123 @ + .equ En8, 124 @ + .equ Fn8, 125 @ + .equ Fs8, 126 @ + .equ Gn8, 127 @ + +@ velocity + + .equ v000, 0 @ + .equ v001, 1 @ + .equ v002, 2 @ + .equ v003, 3 @ + .equ v004, 4 @ + .equ v005, 5 @ + .equ v006, 6 @ + .equ v007, 7 @ + .equ v008, 8 @ + .equ v009, 9 @ + .equ v010, 10 @ + .equ v011, 11 @ + .equ v012, 12 @ + .equ v013, 13 @ + .equ v014, 14 @ + .equ v015, 15 @ + .equ v016, 16 @ + .equ v017, 17 @ + .equ v018, 18 @ + .equ v019, 19 @ + .equ v020, 20 @ + .equ v021, 21 @ + .equ v022, 22 @ + .equ v023, 23 @ + .equ v024, 24 @ + .equ v025, 25 @ + .equ v026, 26 @ + .equ v027, 27 @ + .equ v028, 28 @ + .equ v029, 29 @ + .equ v030, 30 @ + .equ v031, 31 @ + .equ v032, 32 @ + .equ v033, 33 @ + .equ v034, 34 @ + .equ v035, 35 @ + .equ v036, 36 @ + .equ v037, 37 @ + .equ v038, 38 @ + .equ v039, 39 @ + .equ v040, 40 @ + .equ v041, 41 @ + .equ v042, 42 @ + .equ v043, 43 @ + .equ v044, 44 @ + .equ v045, 45 @ + .equ v046, 46 @ + .equ v047, 47 @ + .equ v048, 48 @ + .equ v049, 49 @ + .equ v050, 50 @ + .equ v051, 51 @ + .equ v052, 52 @ + .equ v053, 53 @ + .equ v054, 54 @ + .equ v055, 55 @ + .equ v056, 56 @ + .equ v057, 57 @ + .equ v058, 58 @ + .equ v059, 59 @ + .equ v060, 60 @ + .equ v061, 61 @ + .equ v062, 62 @ + .equ v063, 63 @ + .equ v064, 64 @ + .equ v065, 65 @ + .equ v066, 66 @ + .equ v067, 67 @ + .equ v068, 68 @ + .equ v069, 69 @ + .equ v070, 70 @ + .equ v071, 71 @ + .equ v072, 72 @ + .equ v073, 73 @ + .equ v074, 74 @ + .equ v075, 75 @ + .equ v076, 76 @ + .equ v077, 77 @ + .equ v078, 78 @ + .equ v079, 79 @ + .equ v080, 80 @ + .equ v081, 81 @ + .equ v082, 82 @ + .equ v083, 83 @ + .equ v084, 84 @ + .equ v085, 85 @ + .equ v086, 86 @ + .equ v087, 87 @ + .equ v088, 88 @ + .equ v089, 89 @ + .equ v090, 90 @ + .equ v091, 91 @ + .equ v092, 92 @ + .equ v093, 93 @ + .equ v094, 94 @ + .equ v095, 95 @ + .equ v096, 96 @ + .equ v097, 97 @ + .equ v098, 98 @ + .equ v099, 99 @ + .equ v100, 100 @ + .equ v101, 101 @ + .equ v102, 102 @ + .equ v103, 103 @ + .equ v104, 104 @ + .equ v105, 105 @ + .equ v106, 106 @ + .equ v107, 107 @ + .equ v108, 108 @ + .equ v109, 109 @ + .equ v110, 110 @ + .equ v111, 111 @ + .equ v112, 112 @ + .equ v113, 113 @ + .equ v114, 114 @ + .equ v115, 115 @ + .equ v116, 116 @ + .equ v117, 117 @ + .equ v118, 118 @ + .equ v119, 119 @ + .equ v120, 120 @ + .equ v121, 121 @ + .equ v122, 122 @ + .equ v123, 123 @ + .equ v124, 124 @ + .equ v125, 125 @ + .equ v126, 126 @ + .equ v127, 127 @ + +@ exact gate time parameter for N?? + + .equ gtp1, 1 @ + .equ gtp2, 2 @ + .equ gtp3, 3 @ + +@ parameter of MODT + + .equ mod_vib,0 @ vibrate + .equ mod_tre,1 @ tremolo + .equ mod_pan,2 @ auto-panpot + +@ parameter of MEMACC + + .equ mem_set,0 @ + .equ mem_add,1 @ + .equ mem_sub,2 @ + .equ mem_mem_set,3 @ + .equ mem_mem_add,4 @ + .equ mem_mem_sub,5 @ + .equ mem_beq,6 @ + .equ mem_bne,7 @ + .equ mem_bhi,8 @ + .equ mem_bhs,9 @ + .equ mem_bls,10 @ + .equ mem_blo,11 @ + .equ mem_mem_beq,12 @ + .equ mem_mem_bne,13 @ + .equ mem_mem_bhi,14 @ + .equ mem_mem_bhs,15 @ + .equ mem_mem_bls,16 @ + .equ mem_mem_blo,17 @ + + .equ reverb_set,0x80 @ SOUND_MODE_REVERB_SET + .equ PAM, PAN @ diff --git a/sa1/sound/direct_sound_data.inc b/sa1/sound/direct_sound_data.inc new file mode 100644 index 0000000000..a091aea0b9 --- /dev/null +++ b/sa1/sound/direct_sound_data.inc @@ -0,0 +1,754 @@ + mAlignWord + .global gUnknown_086DE134 +gUnknown_086DE134: + .incbin "sound/direct_sound_samples/086DE134.bin" + + mAlignWord + .global gUnknown_086DF608 +gUnknown_086DF608: + .incbin "sound/direct_sound_samples/086DF608.bin" + + mAlignWord + .global gUnknown_086E0A1C +gUnknown_086E0A1C: + .incbin "sound/direct_sound_samples/086E0A1C.bin" + + mAlignWord + .global gUnknown_086E134C +gUnknown_086E134C: + .incbin "sound/direct_sound_samples/086E134C.bin" + + mAlignWord + .global gUnknown_086E1ABC +gUnknown_086E1ABC: + .incbin "sound/direct_sound_samples/086E1ABC.bin" + + mAlignWord + .global gUnknown_086E33B0 +gUnknown_086E33B0: + .incbin "sound/direct_sound_samples/086E33B0.bin" + + mAlignWord + .global gUnknown_086E64DC +gUnknown_086E64DC: + .incbin "sound/direct_sound_samples/086E64DC.bin" + + mAlignWord + .global gUnknown_086E6B24 +gUnknown_086E6B24: + .incbin "sound/direct_sound_samples/086E6B24.bin" + + mAlignWord + .global gUnknown_086EA218 +gUnknown_086EA218: + .incbin "sound/direct_sound_samples/086EA218.bin" + + mAlignWord + .global gUnknown_086ED1F4 +gUnknown_086ED1F4: + .incbin "sound/direct_sound_samples/086ED1F4.bin" + + mAlignWord + .global gUnknown_086F0138 +gUnknown_086F0138: + .incbin "sound/direct_sound_samples/086F0138.bin" + + mAlignWord + .global gUnknown_086F1AC0 +gUnknown_086F1AC0: + .incbin "sound/direct_sound_samples/086F1AC0.bin" + + mAlignWord + .global gUnknown_086F1DC0 +gUnknown_086F1DC0: + .incbin "sound/direct_sound_samples/086F1DC0.bin" + + mAlignWord + .global gUnknown_086F2994 +gUnknown_086F2994: + .incbin "sound/direct_sound_samples/086F2994.bin" + + mAlignWord + .global gUnknown_086F5578 +gUnknown_086F5578: + .incbin "sound/direct_sound_samples/086F5578.bin" + + mAlignWord + .global gUnknown_086F836C +gUnknown_086F836C: + .incbin "sound/direct_sound_samples/086F836C.bin" + + mAlignWord + .global gUnknown_086FA790 +gUnknown_086FA790: + .incbin "sound/direct_sound_samples/086FA790.bin" + + mAlignWord + .global gUnknown_086FAEA4 +gUnknown_086FAEA4: + .incbin "sound/direct_sound_samples/086FAEA4.bin" + + mAlignWord + .global gUnknown_086FBBD4 +gUnknown_086FBBD4: + .incbin "sound/direct_sound_samples/086FBBD4.bin" + + mAlignWord + .global gUnknown_086FE150 +gUnknown_086FE150: + .incbin "sound/direct_sound_samples/086FE150.bin" + + mAlignWord + .global gUnknown_086FE7E4 +gUnknown_086FE7E4: + .incbin "sound/direct_sound_samples/086FE7E4.bin" + + mAlignWord + .global gUnknown_086FF18C +gUnknown_086FF18C: + .incbin "sound/direct_sound_samples/086FF18C.bin" + + mAlignWord + .global gUnknown_0870224C +gUnknown_0870224C: + .incbin "sound/direct_sound_samples/0870224C.bin" + + mAlignWord + .global gUnknown_08702F60 +gUnknown_08702F60: + .incbin "sound/direct_sound_samples/08702F60.bin" + + mAlignWord + .global gUnknown_0870613C +gUnknown_0870613C: + .incbin "sound/direct_sound_samples/0870613C.bin" + + mAlignWord + .global gUnknown_08708210 +gUnknown_08708210: + .incbin "sound/direct_sound_samples/08708210.bin" + + mAlignWord + .global gUnknown_0870A724 +gUnknown_0870A724: + .incbin "sound/direct_sound_samples/0870A724.bin" + + mAlignWord + .global gUnknown_0870CA4C +gUnknown_0870CA4C: + .incbin "sound/direct_sound_samples/0870CA4C.bin" + + mAlignWord + .global gUnknown_0870D7EC +gUnknown_0870D7EC: + .incbin "sound/direct_sound_samples/0870D7EC.bin" + + mAlignWord + .global gUnknown_0870DC84 +gUnknown_0870DC84: + .incbin "sound/direct_sound_samples/0870DC84.bin" + + mAlignWord + .global gUnknown_0870E60C +gUnknown_0870E60C: + .incbin "sound/direct_sound_samples/0870E60C.bin" + + mAlignWord + .global gUnknown_0870EA00 +gUnknown_0870EA00: + .incbin "sound/direct_sound_samples/0870EA00.bin" + + mAlignWord + .global gUnknown_0870EE50 +gUnknown_0870EE50: + .incbin "sound/direct_sound_samples/0870EE50.bin" + + mAlignWord + .global gUnknown_0870F254 +gUnknown_0870F254: + .incbin "sound/direct_sound_samples/0870F254.bin" + + mAlignWord + .global gUnknown_0870FBC0 +gUnknown_0870FBC0: + .incbin "sound/direct_sound_samples/0870FBC0.bin" + + mAlignWord + .global gUnknown_0870FFA0 +gUnknown_0870FFA0: + .incbin "sound/direct_sound_samples/0870FFA0.bin" + + mAlignWord + .global gUnknown_087103F8 +gUnknown_087103F8: + .incbin "sound/direct_sound_samples/087103F8.bin" + + mAlignWord + .global gUnknown_08710D74 +gUnknown_08710D74: + .incbin "sound/direct_sound_samples/08710D74.bin" + + mAlignWord + .global gUnknown_087111D4 +gUnknown_087111D4: + .incbin "sound/direct_sound_samples/087111D4.bin" + + mAlignWord + .global gUnknown_08711640 +gUnknown_08711640: + .incbin "sound/direct_sound_samples/08711640.bin" + + mAlignWord + .global gUnknown_08711ACC +gUnknown_08711ACC: + .incbin "sound/direct_sound_samples/08711ACC.bin" + + mAlignWord + .global gUnknown_087123F8 +gUnknown_087123F8: + .incbin "sound/direct_sound_samples/087123F8.bin" + + mAlignWord + .global gUnknown_08712950 +gUnknown_08712950: + .incbin "sound/direct_sound_samples/08712950.bin" + + mAlignWord + .global gUnknown_08712DB8 +gUnknown_08712DB8: + .incbin "sound/direct_sound_samples/08712DB8.bin" + + mAlignWord + .global gUnknown_0871375C +gUnknown_0871375C: + .incbin "sound/direct_sound_samples/0871375C.bin" + + mAlignWord + .global gUnknown_0871AED4 +gUnknown_0871AED4: + .incbin "sound/direct_sound_samples/0871AED4.bin" + + mAlignWord + .global spectrasonics__symphony_of_voices__partition_d__big_chord__big_min__c4_r +spectrasonics__symphony_of_voices__partition_d__big_chord__big_min__c4_r: + .incbin "sound/direct_sound_samples/spectrasonics__symphony_of_voices__partition_d__big_chord__big_min__c4_r.bin" + + mAlignWord + .global gUnknown_0871EF30 +gUnknown_0871EF30: + .incbin "sound/direct_sound_samples/0871EF30.bin" + + mAlignWord + .global gUnknown_08727348 +gUnknown_08727348: + .incbin "sound/direct_sound_samples/08727348.bin" + + mAlignWord + .global gUnknown_0872CF68 +gUnknown_0872CF68: + .incbin "sound/direct_sound_samples/0872CF68.bin" + + mAlignWord + .global gUnknown_0872E77C +gUnknown_0872E77C: + .incbin "sound/direct_sound_samples/0872E77C.bin" + + mAlignWord + .global gUnknown_08730340 +gUnknown_08730340: + .incbin "sound/direct_sound_samples/08730340.bin" + + mAlignWord + .global gUnknown_08730BF0 +gUnknown_08730BF0: + .incbin "sound/direct_sound_samples/08730BF0.bin" + + mAlignWord + .global gUnknown_08731868 +gUnknown_08731868: + .incbin "sound/direct_sound_samples/08731868.bin" + + mAlignWord + .global gUnknown_08732A00 +gUnknown_08732A00: + .incbin "sound/direct_sound_samples/08732A00.bin" + + mAlignWord + .global gUnknown_08733304 +gUnknown_08733304: + .incbin "sound/direct_sound_samples/08733304.bin" + + mAlignWord + .global gUnknown_08733D74 +gUnknown_08733D74: + .incbin "sound/direct_sound_samples/08733D74.bin" + + mAlignWord + .global gUnknown_08737EB4 +gUnknown_08737EB4: + .incbin "sound/direct_sound_samples/08737EB4.bin" + + mAlignWord + .global gUnknown_0873BCBC +gUnknown_0873BCBC: + .incbin "sound/direct_sound_samples/0873BCBC.bin" + + mAlignWord + .global gUnknown_0873C470 +gUnknown_0873C470: + .incbin "sound/direct_sound_samples/0873C470.bin" + + mAlignWord + .global gUnknown_0873CC80 +gUnknown_0873CC80: + .incbin "sound/direct_sound_samples/0873CC80.bin" + + mAlignWord + .global gUnknown_0873D430 +gUnknown_0873D430: + .incbin "sound/direct_sound_samples/0873D430.bin" + + mAlignWord + .global gUnknown_0873DF74 +gUnknown_0873DF74: + .incbin "sound/direct_sound_samples/0873DF74.bin" + + mAlignWord + .global gUnknown_0873ECE8 +gUnknown_0873ECE8: + .incbin "sound/direct_sound_samples/0873ECE8.bin" + + mAlignWord + .global gUnknown_0873F1C0 +gUnknown_0873F1C0: + .incbin "sound/direct_sound_samples/0873F1C0.bin" + + mAlignWord + .global gUnknown_0873F654 +gUnknown_0873F654: + .incbin "sound/direct_sound_samples/0873F654.bin" + + mAlignWord + .global gUnknown_0873FAB8 +gUnknown_0873FAB8: + .incbin "sound/direct_sound_samples/0873FAB8.bin" + + mAlignWord + .global gUnknown_0873FF64 +gUnknown_0873FF64: + .incbin "sound/direct_sound_samples/0873FF64.bin" + + mAlignWord + .global gUnknown_087403FC +gUnknown_087403FC: + .incbin "sound/direct_sound_samples/087403FC.bin" + + mAlignWord + .global gUnknown_08740854 +gUnknown_08740854: + .incbin "sound/direct_sound_samples/08740854.bin" + + mAlignWord + .global gUnknown_08740D00 +gUnknown_08740D00: + .incbin "sound/direct_sound_samples/08740D00.bin" + + mAlignWord + .global gUnknown_08741248 +gUnknown_08741248: + .incbin "sound/direct_sound_samples/08741248.bin" + + mAlignWord + .global gUnknown_08741694 +gUnknown_08741694: + .incbin "sound/direct_sound_samples/08741694.bin" + + mAlignWord + .global gUnknown_08741B00 +gUnknown_08741B00: + .incbin "sound/direct_sound_samples/08741B00.bin" + + mAlignWord + .global gUnknown_0874216C +gUnknown_0874216C: + .incbin "sound/direct_sound_samples/0874216C.bin" + + mAlignWord + .global gUnknown_087424D8 +gUnknown_087424D8: + .incbin "sound/direct_sound_samples/087424D8.bin" + + mAlignWord + .global gUnknown_0874267C +gUnknown_0874267C: + .incbin "sound/direct_sound_samples/0874267C.bin" + + mAlignWord + .global gUnknown_08742E90 +gUnknown_08742E90: + .incbin "sound/direct_sound_samples/08742E90.bin" + + mAlignWord + .global gUnknown_087432F0 +gUnknown_087432F0: + .incbin "sound/direct_sound_samples/087432F0.bin" + + mAlignWord + .global gUnknown_087436FC +gUnknown_087436FC: + .incbin "sound/direct_sound_samples/087436FC.bin" + + mAlignWord + .global gUnknown_08743BEC +gUnknown_08743BEC: + .incbin "sound/direct_sound_samples/08743BEC.bin" + + mAlignWord + .global gUnknown_0874408C +gUnknown_0874408C: + .incbin "sound/direct_sound_samples/0874408C.bin" + + mAlignWord + .global gUnknown_087444B4 +gUnknown_087444B4: + .incbin "sound/direct_sound_samples/087444B4.bin" + + mAlignWord + .global gUnknown_087449BC +gUnknown_087449BC: + .incbin "sound/direct_sound_samples/087449BC.bin" + + mAlignWord + .global gUnknown_0874621C +gUnknown_0874621C: + .incbin "sound/direct_sound_samples/0874621C.bin" + + mAlignWord + .global gUnknown_08746C04 +gUnknown_08746C04: + .incbin "sound/direct_sound_samples/08746C04.bin" + + mAlignWord + .global gUnknown_08747908 +gUnknown_08747908: + .incbin "sound/direct_sound_samples/08747908.bin" + + mAlignWord + .global gUnknown_08747D18 +gUnknown_08747D18: + .incbin "sound/direct_sound_samples/08747D18.bin" + + mAlignWord + .global gUnknown_08748108 +gUnknown_08748108: + .incbin "sound/direct_sound_samples/08748108.bin" + + mAlignWord + .global gUnknown_08748BD8 +gUnknown_08748BD8: + .incbin "sound/direct_sound_samples/08748BD8.bin" + + mAlignWord + .global gUnknown_087493A4 +gUnknown_087493A4: + .incbin "sound/direct_sound_samples/087493A4.bin" + + mAlignWord + .global gUnknown_08749864 +gUnknown_08749864: + .incbin "sound/direct_sound_samples/08749864.bin" + + mAlignWord + .global gUnknown_08749D20 +gUnknown_08749D20: + .incbin "sound/direct_sound_samples/08749D20.bin" + + mAlignWord + .global gUnknown_0874A750 +gUnknown_0874A750: + .incbin "sound/direct_sound_samples/0874A750.bin" + + mAlignWord + .global gUnknown_0874AAF8 +gUnknown_0874AAF8: + .incbin "sound/direct_sound_samples/0874AAF8.bin" + + mAlignWord + .global gUnknown_0874B5D0 +gUnknown_0874B5D0: + .incbin "sound/direct_sound_samples/0874B5D0.bin" + + mAlignWord + .global gUnknown_0874B844 +gUnknown_0874B844: + .incbin "sound/direct_sound_samples/0874B844.bin" + + mAlignWord + .global gUnknown_0874CAFC +gUnknown_0874CAFC: + .incbin "sound/direct_sound_samples/0874CAFC.bin" + + mAlignWord + .global gUnknown_0874D4D0 +gUnknown_0874D4D0: + .incbin "sound/direct_sound_samples/0874D4D0.bin" + + mAlignWord + .global gUnknown_0874DDCC +gUnknown_0874DDCC: + .incbin "sound/direct_sound_samples/0874DDCC.bin" + + mAlignWord + .global gUnknown_0874E228 +gUnknown_0874E228: + .incbin "sound/direct_sound_samples/0874E228.bin" + + mAlignWord + .global gUnknown_0874E6D0 +gUnknown_0874E6D0: + .incbin "sound/direct_sound_samples/0874E6D0.bin" + + mAlignWord + .global gUnknown_08753AEC +gUnknown_08753AEC: + .incbin "sound/direct_sound_samples/08753AEC.bin" + + mAlignWord + .global gUnknown_08758BB4 +gUnknown_08758BB4: + .incbin "sound/direct_sound_samples/08758BB4.bin" + + mAlignWord + .global gUnknown_0875A76C +gUnknown_0875A76C: + .incbin "sound/direct_sound_samples/0875A76C.bin" + + mAlignWord + .global gUnknown_0875E854 +gUnknown_0875E854: + .incbin "sound/direct_sound_samples/0875E854.bin" + + mAlignWord + .global gUnknown_087634B0 +gUnknown_087634B0: + .incbin "sound/direct_sound_samples/087634B0.bin" + + mAlignWord + .global gUnknown_08763F44 +gUnknown_08763F44: + .incbin "sound/direct_sound_samples/08763F44.bin" + + mAlignWord + .global gUnknown_087644B8 +gUnknown_087644B8: + .incbin "sound/direct_sound_samples/087644B8.bin" + + mAlignWord + .global gUnknown_08764A24 +gUnknown_08764A24: + .incbin "sound/direct_sound_samples/08764A24.bin" + + mAlignWord + .global gUnknown_08764EC8 +gUnknown_08764EC8: + .incbin "sound/direct_sound_samples/08764EC8.bin" + + mAlignWord + .global gUnknown_08765524 +gUnknown_08765524: + .incbin "sound/direct_sound_samples/08765524.bin" + + mAlignWord + .global gUnknown_08765FF0 +gUnknown_08765FF0: + .incbin "sound/direct_sound_samples/08765FF0.bin" + + mAlignWord + .global gUnknown_087665C8 +gUnknown_087665C8: + .incbin "sound/direct_sound_samples/087665C8.bin" + + mAlignWord + .global gUnknown_08766AE4 +gUnknown_08766AE4: + .incbin "sound/direct_sound_samples/08766AE4.bin" + + mAlignWord + .global gUnknown_0876701C +gUnknown_0876701C: + .incbin "sound/direct_sound_samples/0876701C.bin" + + mAlignWord + .global gUnknown_08767588 +gUnknown_08767588: + .incbin "sound/direct_sound_samples/08767588.bin" + + mAlignWord + .global gUnknown_08767A20 +gUnknown_08767A20: + .incbin "sound/direct_sound_samples/08767A20.bin" + + mAlignWord + .global gUnknown_08768070 +gUnknown_08768070: + .incbin "sound/direct_sound_samples/08768070.bin" + + mAlignWord + .global gUnknown_08768BA0 +gUnknown_08768BA0: + .incbin "sound/direct_sound_samples/08768BA0.bin" + + mAlignWord + .global gUnknown_087692C0 +gUnknown_087692C0: + .incbin "sound/direct_sound_samples/087692C0.bin" + + mAlignWord + .global gUnknown_0876995C +gUnknown_0876995C: + .incbin "sound/direct_sound_samples/0876995C.bin" + + mAlignWord + .global gUnknown_0876A058 +gUnknown_0876A058: + .incbin "sound/direct_sound_samples/0876A058.bin" + + mAlignWord + .global gUnknown_0876A7E8 +gUnknown_0876A7E8: + .incbin "sound/direct_sound_samples/0876A7E8.bin" + + mAlignWord + .global gUnknown_0876AE6C +gUnknown_0876AE6C: + .incbin "sound/direct_sound_samples/0876AE6C.bin" + + mAlignWord + .global gUnknown_0876B5CC +gUnknown_0876B5CC: + .incbin "sound/direct_sound_samples/0876B5CC.bin" + + mAlignWord + .global gUnknown_0876BCBC +gUnknown_0876BCBC: + .incbin "sound/direct_sound_samples/0876BCBC.bin" + + mAlignWord + .global gUnknown_0876C1C4 +gUnknown_0876C1C4: + .incbin "sound/direct_sound_samples/0876C1C4.bin" + + mAlignWord + .global gUnknown_0876C974 +gUnknown_0876C974: + .incbin "sound/direct_sound_samples/0876C974.bin" + + mAlignWord + .global gUnknown_0876D0E8 +gUnknown_0876D0E8: + .incbin "sound/direct_sound_samples/0876D0E8.bin" + + mAlignWord + .global gUnknown_0876D79C +gUnknown_0876D79C: + .incbin "sound/direct_sound_samples/0876D79C.bin" + + mAlignWord + .global gUnknown_0876DF8C +gUnknown_0876DF8C: + .incbin "sound/direct_sound_samples/0876DF8C.bin" + + mAlignWord + .global gUnknown_0876E614 +gUnknown_0876E614: + .incbin "sound/direct_sound_samples/0876E614.bin" + + mAlignWord + .global gUnknown_0876ED88 +gUnknown_0876ED88: + .incbin "sound/direct_sound_samples/0876ED88.bin" + + mAlignWord + .global gUnknown_0876F47C +gUnknown_0876F47C: + .incbin "sound/direct_sound_samples/0876F47C.bin" + + mAlignWord + .global gUnknown_0876FB20 +gUnknown_0876FB20: + .incbin "sound/direct_sound_samples/0876FB20.bin" + + mAlignWord + .global gUnknown_08771CC4 +gUnknown_08771CC4: + .incbin "sound/direct_sound_samples/08771CC4.bin" + + mAlignWord + .global gUnknown_08773848 +gUnknown_08773848: + .incbin "sound/direct_sound_samples/08773848.bin" + + mAlignWord + .global gUnknown_08775640 +gUnknown_08775640: + .incbin "sound/direct_sound_samples/08775640.bin" + + mAlignWord + .global gUnknown_08775E7C +gUnknown_08775E7C: + .incbin "sound/direct_sound_samples/08775E7C.bin" + + mAlignWord + .global gUnknown_08778D48 +gUnknown_08778D48: + .incbin "sound/direct_sound_samples/08778D48.bin" + + mAlignWord + .global gUnknown_08779EDC +gUnknown_08779EDC: + .incbin "sound/direct_sound_samples/08779EDC.bin" + + mAlignWord + .global gUnknown_0877AD00 +gUnknown_0877AD00: + .incbin "sound/direct_sound_samples/0877AD00.bin" + + mAlignWord + .global gUnknown_0877B9A0 +gUnknown_0877B9A0: + .incbin "sound/direct_sound_samples/0877B9A0.bin" + + mAlignWord + .global gUnknown_0877CF24 +gUnknown_0877CF24: + .incbin "sound/direct_sound_samples/0877CF24.bin" + + mAlignWord + .global gUnknown_0877F2A4 +gUnknown_0877F2A4: + .incbin "sound/direct_sound_samples/0877F2A4.bin" + + mAlignWord + .global gUnknown_0878306C +gUnknown_0878306C: + .incbin "sound/direct_sound_samples/0878306C.bin" + + mAlignWord + .global gUnknown_08789214 +gUnknown_08789214: + .incbin "sound/direct_sound_samples/08789214.bin" + + mAlignWord + .global gUnknown_0878D964 +gUnknown_0878D964: + .incbin "sound/direct_sound_samples/0878D964.bin" + + mAlignWord + .global gUnknown_0878FAAC +gUnknown_0878FAAC: + .incbin "sound/direct_sound_samples/0878FAAC.bin" + + mAlignWord + .global gUnknown_08797224 +gUnknown_08797224: + .incbin "sound/direct_sound_samples/08797224.bin" diff --git a/sa1/sound/direct_sound_samples/086DE134.aif b/sa1/sound/direct_sound_samples/086DE134.aif new file mode 100644 index 0000000000..374c82d6f3 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086DE134.aif differ diff --git a/sa1/sound/direct_sound_samples/086DF608.aif b/sa1/sound/direct_sound_samples/086DF608.aif new file mode 100644 index 0000000000..446c9a255c Binary files /dev/null and b/sa1/sound/direct_sound_samples/086DF608.aif differ diff --git a/sa1/sound/direct_sound_samples/086E0A1C.aif b/sa1/sound/direct_sound_samples/086E0A1C.aif new file mode 100644 index 0000000000..9a8b929c34 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086E0A1C.aif differ diff --git a/sa1/sound/direct_sound_samples/086E134C.aif b/sa1/sound/direct_sound_samples/086E134C.aif new file mode 100644 index 0000000000..03a633c4b7 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086E134C.aif differ diff --git a/sa1/sound/direct_sound_samples/086E1ABC.aif b/sa1/sound/direct_sound_samples/086E1ABC.aif new file mode 100644 index 0000000000..2d7545f21f Binary files /dev/null and b/sa1/sound/direct_sound_samples/086E1ABC.aif differ diff --git a/sa1/sound/direct_sound_samples/086E33B0.aif b/sa1/sound/direct_sound_samples/086E33B0.aif new file mode 100644 index 0000000000..54091eb7b9 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086E33B0.aif differ diff --git a/sa1/sound/direct_sound_samples/086E64DC.aif b/sa1/sound/direct_sound_samples/086E64DC.aif new file mode 100644 index 0000000000..8a0de82c2c Binary files /dev/null and b/sa1/sound/direct_sound_samples/086E64DC.aif differ diff --git a/sa1/sound/direct_sound_samples/086E6B24.aif b/sa1/sound/direct_sound_samples/086E6B24.aif new file mode 100644 index 0000000000..7bac699edc Binary files /dev/null and b/sa1/sound/direct_sound_samples/086E6B24.aif differ diff --git a/sa1/sound/direct_sound_samples/086EA218.aif b/sa1/sound/direct_sound_samples/086EA218.aif new file mode 100644 index 0000000000..26228d60a2 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086EA218.aif differ diff --git a/sa1/sound/direct_sound_samples/086ED1F4.aif b/sa1/sound/direct_sound_samples/086ED1F4.aif new file mode 100644 index 0000000000..0f865a4a85 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086ED1F4.aif differ diff --git a/sa1/sound/direct_sound_samples/086F0138.aif b/sa1/sound/direct_sound_samples/086F0138.aif new file mode 100644 index 0000000000..eb417c53cc Binary files /dev/null and b/sa1/sound/direct_sound_samples/086F0138.aif differ diff --git a/sa1/sound/direct_sound_samples/086F1AC0.aif b/sa1/sound/direct_sound_samples/086F1AC0.aif new file mode 100644 index 0000000000..b1dc993f3a Binary files /dev/null and b/sa1/sound/direct_sound_samples/086F1AC0.aif differ diff --git a/sa1/sound/direct_sound_samples/086F1DC0.aif b/sa1/sound/direct_sound_samples/086F1DC0.aif new file mode 100644 index 0000000000..e488e75a6d Binary files /dev/null and b/sa1/sound/direct_sound_samples/086F1DC0.aif differ diff --git a/sa1/sound/direct_sound_samples/086F2994.aif b/sa1/sound/direct_sound_samples/086F2994.aif new file mode 100644 index 0000000000..32a44395ea Binary files /dev/null and b/sa1/sound/direct_sound_samples/086F2994.aif differ diff --git a/sa1/sound/direct_sound_samples/086F5578.aif b/sa1/sound/direct_sound_samples/086F5578.aif new file mode 100644 index 0000000000..27d5b19938 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086F5578.aif differ diff --git a/sa1/sound/direct_sound_samples/086F836C.aif b/sa1/sound/direct_sound_samples/086F836C.aif new file mode 100644 index 0000000000..36c32d2c84 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086F836C.aif differ diff --git a/sa1/sound/direct_sound_samples/086FA790.aif b/sa1/sound/direct_sound_samples/086FA790.aif new file mode 100644 index 0000000000..032915854f Binary files /dev/null and b/sa1/sound/direct_sound_samples/086FA790.aif differ diff --git a/sa1/sound/direct_sound_samples/086FAEA4.aif b/sa1/sound/direct_sound_samples/086FAEA4.aif new file mode 100644 index 0000000000..15262ec166 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086FAEA4.aif differ diff --git a/sa1/sound/direct_sound_samples/086FBBD4.aif b/sa1/sound/direct_sound_samples/086FBBD4.aif new file mode 100644 index 0000000000..09ff6278b4 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086FBBD4.aif differ diff --git a/sa1/sound/direct_sound_samples/086FE150.aif b/sa1/sound/direct_sound_samples/086FE150.aif new file mode 100644 index 0000000000..c788588204 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086FE150.aif differ diff --git a/sa1/sound/direct_sound_samples/086FE7E4.aif b/sa1/sound/direct_sound_samples/086FE7E4.aif new file mode 100644 index 0000000000..40c4e48b09 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086FE7E4.aif differ diff --git a/sa1/sound/direct_sound_samples/086FF18C.aif b/sa1/sound/direct_sound_samples/086FF18C.aif new file mode 100644 index 0000000000..750ebff156 Binary files /dev/null and b/sa1/sound/direct_sound_samples/086FF18C.aif differ diff --git a/sa1/sound/direct_sound_samples/0870224C.aif b/sa1/sound/direct_sound_samples/0870224C.aif new file mode 100644 index 0000000000..691b200c68 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870224C.aif differ diff --git a/sa1/sound/direct_sound_samples/08702F60.aif b/sa1/sound/direct_sound_samples/08702F60.aif new file mode 100644 index 0000000000..d49b587977 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08702F60.aif differ diff --git a/sa1/sound/direct_sound_samples/0870613C.aif b/sa1/sound/direct_sound_samples/0870613C.aif new file mode 100644 index 0000000000..af23586596 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870613C.aif differ diff --git a/sa1/sound/direct_sound_samples/08708210.aif b/sa1/sound/direct_sound_samples/08708210.aif new file mode 100644 index 0000000000..3345fc4a90 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08708210.aif differ diff --git a/sa1/sound/direct_sound_samples/0870A724.aif b/sa1/sound/direct_sound_samples/0870A724.aif new file mode 100644 index 0000000000..34df1a1453 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870A724.aif differ diff --git a/sa1/sound/direct_sound_samples/0870CA4C.aif b/sa1/sound/direct_sound_samples/0870CA4C.aif new file mode 100644 index 0000000000..ffaa0c2d2a Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870CA4C.aif differ diff --git a/sa1/sound/direct_sound_samples/0870D7EC.aif b/sa1/sound/direct_sound_samples/0870D7EC.aif new file mode 100644 index 0000000000..b25196bb7c Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870D7EC.aif differ diff --git a/sa1/sound/direct_sound_samples/0870DC84.aif b/sa1/sound/direct_sound_samples/0870DC84.aif new file mode 100644 index 0000000000..f7ae7127ed Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870DC84.aif differ diff --git a/sa1/sound/direct_sound_samples/0870E60C.aif b/sa1/sound/direct_sound_samples/0870E60C.aif new file mode 100644 index 0000000000..f100a39498 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870E60C.aif differ diff --git a/sa1/sound/direct_sound_samples/0870EA00.aif b/sa1/sound/direct_sound_samples/0870EA00.aif new file mode 100644 index 0000000000..edbc812003 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870EA00.aif differ diff --git a/sa1/sound/direct_sound_samples/0870EE50.aif b/sa1/sound/direct_sound_samples/0870EE50.aif new file mode 100644 index 0000000000..ea9aec4b88 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870EE50.aif differ diff --git a/sa1/sound/direct_sound_samples/0870F254.aif b/sa1/sound/direct_sound_samples/0870F254.aif new file mode 100644 index 0000000000..8c148ffcde Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870F254.aif differ diff --git a/sa1/sound/direct_sound_samples/0870FBC0.aif b/sa1/sound/direct_sound_samples/0870FBC0.aif new file mode 100644 index 0000000000..016ffa55e3 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870FBC0.aif differ diff --git a/sa1/sound/direct_sound_samples/0870FFA0.aif b/sa1/sound/direct_sound_samples/0870FFA0.aif new file mode 100644 index 0000000000..001cc80a04 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0870FFA0.aif differ diff --git a/sa1/sound/direct_sound_samples/087103F8.aif b/sa1/sound/direct_sound_samples/087103F8.aif new file mode 100644 index 0000000000..68a29cbb62 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087103F8.aif differ diff --git a/sa1/sound/direct_sound_samples/08710D74.aif b/sa1/sound/direct_sound_samples/08710D74.aif new file mode 100644 index 0000000000..50c1dedcea Binary files /dev/null and b/sa1/sound/direct_sound_samples/08710D74.aif differ diff --git a/sa1/sound/direct_sound_samples/087111D4.aif b/sa1/sound/direct_sound_samples/087111D4.aif new file mode 100644 index 0000000000..988794ddf0 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087111D4.aif differ diff --git a/sa1/sound/direct_sound_samples/08711640.aif b/sa1/sound/direct_sound_samples/08711640.aif new file mode 100644 index 0000000000..e21dc7fd3b Binary files /dev/null and b/sa1/sound/direct_sound_samples/08711640.aif differ diff --git a/sa1/sound/direct_sound_samples/08711ACC.aif b/sa1/sound/direct_sound_samples/08711ACC.aif new file mode 100644 index 0000000000..13cd19614a Binary files /dev/null and b/sa1/sound/direct_sound_samples/08711ACC.aif differ diff --git a/sa1/sound/direct_sound_samples/087123F8.aif b/sa1/sound/direct_sound_samples/087123F8.aif new file mode 100644 index 0000000000..f9272c65b0 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087123F8.aif differ diff --git a/sa1/sound/direct_sound_samples/08712950.aif b/sa1/sound/direct_sound_samples/08712950.aif new file mode 100644 index 0000000000..3c5d561be3 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08712950.aif differ diff --git a/sa1/sound/direct_sound_samples/08712DB8.aif b/sa1/sound/direct_sound_samples/08712DB8.aif new file mode 100644 index 0000000000..d6a33509c5 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08712DB8.aif differ diff --git a/sa1/sound/direct_sound_samples/0871375C.aif b/sa1/sound/direct_sound_samples/0871375C.aif new file mode 100644 index 0000000000..63fc620863 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0871375C.aif differ diff --git a/sa1/sound/direct_sound_samples/0871AED4.aif b/sa1/sound/direct_sound_samples/0871AED4.aif new file mode 100644 index 0000000000..f52df804ea Binary files /dev/null and b/sa1/sound/direct_sound_samples/0871AED4.aif differ diff --git a/sa1/sound/direct_sound_samples/0871EF30.aif b/sa1/sound/direct_sound_samples/0871EF30.aif new file mode 100644 index 0000000000..ee744e6766 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0871EF30.aif differ diff --git a/sa1/sound/direct_sound_samples/08727348.aif b/sa1/sound/direct_sound_samples/08727348.aif new file mode 100644 index 0000000000..c1c42bd67d Binary files /dev/null and b/sa1/sound/direct_sound_samples/08727348.aif differ diff --git a/sa1/sound/direct_sound_samples/0872CF68.aif b/sa1/sound/direct_sound_samples/0872CF68.aif new file mode 100644 index 0000000000..16927d3e14 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0872CF68.aif differ diff --git a/sa1/sound/direct_sound_samples/0872E77C.aif b/sa1/sound/direct_sound_samples/0872E77C.aif new file mode 100644 index 0000000000..2439508e73 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0872E77C.aif differ diff --git a/sa1/sound/direct_sound_samples/08730340.aif b/sa1/sound/direct_sound_samples/08730340.aif new file mode 100644 index 0000000000..4b703b3257 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08730340.aif differ diff --git a/sa1/sound/direct_sound_samples/08730BF0.aif b/sa1/sound/direct_sound_samples/08730BF0.aif new file mode 100644 index 0000000000..254e6e3e33 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08730BF0.aif differ diff --git a/sa1/sound/direct_sound_samples/08731868.aif b/sa1/sound/direct_sound_samples/08731868.aif new file mode 100644 index 0000000000..818238aa99 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08731868.aif differ diff --git a/sa1/sound/direct_sound_samples/08732A00.aif b/sa1/sound/direct_sound_samples/08732A00.aif new file mode 100644 index 0000000000..a0446b1549 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08732A00.aif differ diff --git a/sa1/sound/direct_sound_samples/08733304.aif b/sa1/sound/direct_sound_samples/08733304.aif new file mode 100644 index 0000000000..642f0deeb3 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08733304.aif differ diff --git a/sa1/sound/direct_sound_samples/08733D74.aif b/sa1/sound/direct_sound_samples/08733D74.aif new file mode 100644 index 0000000000..67f6e0c6d1 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08733D74.aif differ diff --git a/sa1/sound/direct_sound_samples/08737EB4.aif b/sa1/sound/direct_sound_samples/08737EB4.aif new file mode 100644 index 0000000000..7af4ee8860 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08737EB4.aif differ diff --git a/sa1/sound/direct_sound_samples/0873BCBC.aif b/sa1/sound/direct_sound_samples/0873BCBC.aif new file mode 100644 index 0000000000..526f47f808 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873BCBC.aif differ diff --git a/sa1/sound/direct_sound_samples/0873C470.aif b/sa1/sound/direct_sound_samples/0873C470.aif new file mode 100644 index 0000000000..052252cda8 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873C470.aif differ diff --git a/sa1/sound/direct_sound_samples/0873CC80.aif b/sa1/sound/direct_sound_samples/0873CC80.aif new file mode 100644 index 0000000000..7c530070b4 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873CC80.aif differ diff --git a/sa1/sound/direct_sound_samples/0873D430.aif b/sa1/sound/direct_sound_samples/0873D430.aif new file mode 100644 index 0000000000..0beb784988 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873D430.aif differ diff --git a/sa1/sound/direct_sound_samples/0873DF74.aif b/sa1/sound/direct_sound_samples/0873DF74.aif new file mode 100644 index 0000000000..0a3123e6bf Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873DF74.aif differ diff --git a/sa1/sound/direct_sound_samples/0873ECE8.aif b/sa1/sound/direct_sound_samples/0873ECE8.aif new file mode 100644 index 0000000000..d14e25007c Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873ECE8.aif differ diff --git a/sa1/sound/direct_sound_samples/0873F1C0.aif b/sa1/sound/direct_sound_samples/0873F1C0.aif new file mode 100644 index 0000000000..269599b79d Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873F1C0.aif differ diff --git a/sa1/sound/direct_sound_samples/0873F654.aif b/sa1/sound/direct_sound_samples/0873F654.aif new file mode 100644 index 0000000000..3cdcc30088 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873F654.aif differ diff --git a/sa1/sound/direct_sound_samples/0873FAB8.aif b/sa1/sound/direct_sound_samples/0873FAB8.aif new file mode 100644 index 0000000000..4853a6d976 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873FAB8.aif differ diff --git a/sa1/sound/direct_sound_samples/0873FF64.aif b/sa1/sound/direct_sound_samples/0873FF64.aif new file mode 100644 index 0000000000..862b2cc289 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0873FF64.aif differ diff --git a/sa1/sound/direct_sound_samples/087403FC.aif b/sa1/sound/direct_sound_samples/087403FC.aif new file mode 100644 index 0000000000..8c1bc24216 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087403FC.aif differ diff --git a/sa1/sound/direct_sound_samples/08740854.aif b/sa1/sound/direct_sound_samples/08740854.aif new file mode 100644 index 0000000000..715692e965 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08740854.aif differ diff --git a/sa1/sound/direct_sound_samples/08740D00.aif b/sa1/sound/direct_sound_samples/08740D00.aif new file mode 100644 index 0000000000..83fcf29c91 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08740D00.aif differ diff --git a/sa1/sound/direct_sound_samples/08741248.aif b/sa1/sound/direct_sound_samples/08741248.aif new file mode 100644 index 0000000000..cc8b611568 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08741248.aif differ diff --git a/sa1/sound/direct_sound_samples/08741694.aif b/sa1/sound/direct_sound_samples/08741694.aif new file mode 100644 index 0000000000..ee8b53e220 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08741694.aif differ diff --git a/sa1/sound/direct_sound_samples/08741B00.aif b/sa1/sound/direct_sound_samples/08741B00.aif new file mode 100644 index 0000000000..a256d4ebef Binary files /dev/null and b/sa1/sound/direct_sound_samples/08741B00.aif differ diff --git a/sa1/sound/direct_sound_samples/0874216C.aif b/sa1/sound/direct_sound_samples/0874216C.aif new file mode 100644 index 0000000000..75c8293466 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874216C.aif differ diff --git a/sa1/sound/direct_sound_samples/087424D8.aif b/sa1/sound/direct_sound_samples/087424D8.aif new file mode 100644 index 0000000000..fba8877592 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087424D8.aif differ diff --git a/sa1/sound/direct_sound_samples/0874267C.aif b/sa1/sound/direct_sound_samples/0874267C.aif new file mode 100644 index 0000000000..04f191fc2b Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874267C.aif differ diff --git a/sa1/sound/direct_sound_samples/08742E90.aif b/sa1/sound/direct_sound_samples/08742E90.aif new file mode 100644 index 0000000000..58d872db9e Binary files /dev/null and b/sa1/sound/direct_sound_samples/08742E90.aif differ diff --git a/sa1/sound/direct_sound_samples/087432F0.aif b/sa1/sound/direct_sound_samples/087432F0.aif new file mode 100644 index 0000000000..2df06dbe86 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087432F0.aif differ diff --git a/sa1/sound/direct_sound_samples/087436FC.aif b/sa1/sound/direct_sound_samples/087436FC.aif new file mode 100644 index 0000000000..cf222d1df7 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087436FC.aif differ diff --git a/sa1/sound/direct_sound_samples/08743BEC.aif b/sa1/sound/direct_sound_samples/08743BEC.aif new file mode 100644 index 0000000000..f05fb062c1 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08743BEC.aif differ diff --git a/sa1/sound/direct_sound_samples/0874408C.aif b/sa1/sound/direct_sound_samples/0874408C.aif new file mode 100644 index 0000000000..11a90424a0 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874408C.aif differ diff --git a/sa1/sound/direct_sound_samples/087444B4.aif b/sa1/sound/direct_sound_samples/087444B4.aif new file mode 100644 index 0000000000..7243304c8e Binary files /dev/null and b/sa1/sound/direct_sound_samples/087444B4.aif differ diff --git a/sa1/sound/direct_sound_samples/087449BC.aif b/sa1/sound/direct_sound_samples/087449BC.aif new file mode 100644 index 0000000000..134d803d1a Binary files /dev/null and b/sa1/sound/direct_sound_samples/087449BC.aif differ diff --git a/sa1/sound/direct_sound_samples/0874621C.aif b/sa1/sound/direct_sound_samples/0874621C.aif new file mode 100644 index 0000000000..d7b0cfebd4 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874621C.aif differ diff --git a/sa1/sound/direct_sound_samples/08746C04.aif b/sa1/sound/direct_sound_samples/08746C04.aif new file mode 100644 index 0000000000..13a2a90496 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08746C04.aif differ diff --git a/sa1/sound/direct_sound_samples/08747908.aif b/sa1/sound/direct_sound_samples/08747908.aif new file mode 100644 index 0000000000..4bf24b4d6a Binary files /dev/null and b/sa1/sound/direct_sound_samples/08747908.aif differ diff --git a/sa1/sound/direct_sound_samples/08747D18.aif b/sa1/sound/direct_sound_samples/08747D18.aif new file mode 100644 index 0000000000..1a353e8b3e Binary files /dev/null and b/sa1/sound/direct_sound_samples/08747D18.aif differ diff --git a/sa1/sound/direct_sound_samples/08748108.aif b/sa1/sound/direct_sound_samples/08748108.aif new file mode 100644 index 0000000000..3d5aef78f4 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08748108.aif differ diff --git a/sa1/sound/direct_sound_samples/08748BD8.aif b/sa1/sound/direct_sound_samples/08748BD8.aif new file mode 100644 index 0000000000..4d11d0bb98 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08748BD8.aif differ diff --git a/sa1/sound/direct_sound_samples/087493A4.aif b/sa1/sound/direct_sound_samples/087493A4.aif new file mode 100644 index 0000000000..6c53fc99b8 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087493A4.aif differ diff --git a/sa1/sound/direct_sound_samples/08749864.aif b/sa1/sound/direct_sound_samples/08749864.aif new file mode 100644 index 0000000000..2b5456068e Binary files /dev/null and b/sa1/sound/direct_sound_samples/08749864.aif differ diff --git a/sa1/sound/direct_sound_samples/08749D20.aif b/sa1/sound/direct_sound_samples/08749D20.aif new file mode 100644 index 0000000000..0d118bf9a5 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08749D20.aif differ diff --git a/sa1/sound/direct_sound_samples/0874A750.aif b/sa1/sound/direct_sound_samples/0874A750.aif new file mode 100644 index 0000000000..569d1e1c69 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874A750.aif differ diff --git a/sa1/sound/direct_sound_samples/0874AAF8.aif b/sa1/sound/direct_sound_samples/0874AAF8.aif new file mode 100644 index 0000000000..009a782beb Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874AAF8.aif differ diff --git a/sa1/sound/direct_sound_samples/0874B5D0.aif b/sa1/sound/direct_sound_samples/0874B5D0.aif new file mode 100644 index 0000000000..ea06ea2d0d Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874B5D0.aif differ diff --git a/sa1/sound/direct_sound_samples/0874B844.aif b/sa1/sound/direct_sound_samples/0874B844.aif new file mode 100644 index 0000000000..24946d6764 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874B844.aif differ diff --git a/sa1/sound/direct_sound_samples/0874CAFC.aif b/sa1/sound/direct_sound_samples/0874CAFC.aif new file mode 100644 index 0000000000..c679f8a982 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874CAFC.aif differ diff --git a/sa1/sound/direct_sound_samples/0874D4D0.aif b/sa1/sound/direct_sound_samples/0874D4D0.aif new file mode 100644 index 0000000000..f476dd5667 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874D4D0.aif differ diff --git a/sa1/sound/direct_sound_samples/0874DDCC.aif b/sa1/sound/direct_sound_samples/0874DDCC.aif new file mode 100644 index 0000000000..90d4e9ef7f Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874DDCC.aif differ diff --git a/sa1/sound/direct_sound_samples/0874E228.aif b/sa1/sound/direct_sound_samples/0874E228.aif new file mode 100644 index 0000000000..93a517827d Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874E228.aif differ diff --git a/sa1/sound/direct_sound_samples/0874E6D0.aif b/sa1/sound/direct_sound_samples/0874E6D0.aif new file mode 100644 index 0000000000..af16064b45 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0874E6D0.aif differ diff --git a/sa1/sound/direct_sound_samples/08753AEC.aif b/sa1/sound/direct_sound_samples/08753AEC.aif new file mode 100644 index 0000000000..a9702cd583 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08753AEC.aif differ diff --git a/sa1/sound/direct_sound_samples/08758BB4.aif b/sa1/sound/direct_sound_samples/08758BB4.aif new file mode 100644 index 0000000000..d5209d6b71 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08758BB4.aif differ diff --git a/sa1/sound/direct_sound_samples/0875A76C.aif b/sa1/sound/direct_sound_samples/0875A76C.aif new file mode 100644 index 0000000000..83667af246 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0875A76C.aif differ diff --git a/sa1/sound/direct_sound_samples/0875E854.aif b/sa1/sound/direct_sound_samples/0875E854.aif new file mode 100644 index 0000000000..fa83447793 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0875E854.aif differ diff --git a/sa1/sound/direct_sound_samples/087634B0.aif b/sa1/sound/direct_sound_samples/087634B0.aif new file mode 100644 index 0000000000..b10e4eab32 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087634B0.aif differ diff --git a/sa1/sound/direct_sound_samples/08763F44.aif b/sa1/sound/direct_sound_samples/08763F44.aif new file mode 100644 index 0000000000..ace862d95f Binary files /dev/null and b/sa1/sound/direct_sound_samples/08763F44.aif differ diff --git a/sa1/sound/direct_sound_samples/087644B8.aif b/sa1/sound/direct_sound_samples/087644B8.aif new file mode 100644 index 0000000000..7e9259220c Binary files /dev/null and b/sa1/sound/direct_sound_samples/087644B8.aif differ diff --git a/sa1/sound/direct_sound_samples/08764A24.aif b/sa1/sound/direct_sound_samples/08764A24.aif new file mode 100644 index 0000000000..5dec9c2b8c Binary files /dev/null and b/sa1/sound/direct_sound_samples/08764A24.aif differ diff --git a/sa1/sound/direct_sound_samples/08764EC8.aif b/sa1/sound/direct_sound_samples/08764EC8.aif new file mode 100644 index 0000000000..c46c803c93 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08764EC8.aif differ diff --git a/sa1/sound/direct_sound_samples/08765524.aif b/sa1/sound/direct_sound_samples/08765524.aif new file mode 100644 index 0000000000..3ac99feaab Binary files /dev/null and b/sa1/sound/direct_sound_samples/08765524.aif differ diff --git a/sa1/sound/direct_sound_samples/08765FF0.aif b/sa1/sound/direct_sound_samples/08765FF0.aif new file mode 100644 index 0000000000..99c9b46e86 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08765FF0.aif differ diff --git a/sa1/sound/direct_sound_samples/087665C8.aif b/sa1/sound/direct_sound_samples/087665C8.aif new file mode 100644 index 0000000000..52e8c40dcc Binary files /dev/null and b/sa1/sound/direct_sound_samples/087665C8.aif differ diff --git a/sa1/sound/direct_sound_samples/08766AE4.aif b/sa1/sound/direct_sound_samples/08766AE4.aif new file mode 100644 index 0000000000..4d544d20f2 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08766AE4.aif differ diff --git a/sa1/sound/direct_sound_samples/0876701C.aif b/sa1/sound/direct_sound_samples/0876701C.aif new file mode 100644 index 0000000000..1a3d6e3f83 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876701C.aif differ diff --git a/sa1/sound/direct_sound_samples/08767588.aif b/sa1/sound/direct_sound_samples/08767588.aif new file mode 100644 index 0000000000..9a1f309be4 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08767588.aif differ diff --git a/sa1/sound/direct_sound_samples/08767A20.aif b/sa1/sound/direct_sound_samples/08767A20.aif new file mode 100644 index 0000000000..692740ec14 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08767A20.aif differ diff --git a/sa1/sound/direct_sound_samples/08768070.aif b/sa1/sound/direct_sound_samples/08768070.aif new file mode 100644 index 0000000000..8c40dc9e28 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08768070.aif differ diff --git a/sa1/sound/direct_sound_samples/08768BA0.aif b/sa1/sound/direct_sound_samples/08768BA0.aif new file mode 100644 index 0000000000..4f19411944 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08768BA0.aif differ diff --git a/sa1/sound/direct_sound_samples/087692C0.aif b/sa1/sound/direct_sound_samples/087692C0.aif new file mode 100644 index 0000000000..94aa296464 Binary files /dev/null and b/sa1/sound/direct_sound_samples/087692C0.aif differ diff --git a/sa1/sound/direct_sound_samples/0876995C.aif b/sa1/sound/direct_sound_samples/0876995C.aif new file mode 100644 index 0000000000..6a6bb42371 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876995C.aif differ diff --git a/sa1/sound/direct_sound_samples/0876A058.aif b/sa1/sound/direct_sound_samples/0876A058.aif new file mode 100644 index 0000000000..c4464fd3a9 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876A058.aif differ diff --git a/sa1/sound/direct_sound_samples/0876A7E8.aif b/sa1/sound/direct_sound_samples/0876A7E8.aif new file mode 100644 index 0000000000..1b2ca1b9fe Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876A7E8.aif differ diff --git a/sa1/sound/direct_sound_samples/0876AE6C.aif b/sa1/sound/direct_sound_samples/0876AE6C.aif new file mode 100644 index 0000000000..de183fe136 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876AE6C.aif differ diff --git a/sa1/sound/direct_sound_samples/0876B5CC.aif b/sa1/sound/direct_sound_samples/0876B5CC.aif new file mode 100644 index 0000000000..427a4dbc5e Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876B5CC.aif differ diff --git a/sa1/sound/direct_sound_samples/0876BCBC.aif b/sa1/sound/direct_sound_samples/0876BCBC.aif new file mode 100644 index 0000000000..2455ed3d33 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876BCBC.aif differ diff --git a/sa1/sound/direct_sound_samples/0876C1C4.aif b/sa1/sound/direct_sound_samples/0876C1C4.aif new file mode 100644 index 0000000000..abd84d22d9 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876C1C4.aif differ diff --git a/sa1/sound/direct_sound_samples/0876C974.aif b/sa1/sound/direct_sound_samples/0876C974.aif new file mode 100644 index 0000000000..0929750606 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876C974.aif differ diff --git a/sa1/sound/direct_sound_samples/0876D0E8.aif b/sa1/sound/direct_sound_samples/0876D0E8.aif new file mode 100644 index 0000000000..1842e15670 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876D0E8.aif differ diff --git a/sa1/sound/direct_sound_samples/0876D79C.aif b/sa1/sound/direct_sound_samples/0876D79C.aif new file mode 100644 index 0000000000..0da6ea7ec6 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876D79C.aif differ diff --git a/sa1/sound/direct_sound_samples/0876DF8C.aif b/sa1/sound/direct_sound_samples/0876DF8C.aif new file mode 100644 index 0000000000..8ddc6d5cd2 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876DF8C.aif differ diff --git a/sa1/sound/direct_sound_samples/0876E614.aif b/sa1/sound/direct_sound_samples/0876E614.aif new file mode 100644 index 0000000000..3a723a769e Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876E614.aif differ diff --git a/sa1/sound/direct_sound_samples/0876ED88.aif b/sa1/sound/direct_sound_samples/0876ED88.aif new file mode 100644 index 0000000000..da1f7e2f30 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876ED88.aif differ diff --git a/sa1/sound/direct_sound_samples/0876F47C.aif b/sa1/sound/direct_sound_samples/0876F47C.aif new file mode 100644 index 0000000000..ab7e00e91b Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876F47C.aif differ diff --git a/sa1/sound/direct_sound_samples/0876FB20.aif b/sa1/sound/direct_sound_samples/0876FB20.aif new file mode 100644 index 0000000000..86f733f3cf Binary files /dev/null and b/sa1/sound/direct_sound_samples/0876FB20.aif differ diff --git a/sa1/sound/direct_sound_samples/08771CC4.aif b/sa1/sound/direct_sound_samples/08771CC4.aif new file mode 100644 index 0000000000..42e09213d1 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08771CC4.aif differ diff --git a/sa1/sound/direct_sound_samples/08773848.aif b/sa1/sound/direct_sound_samples/08773848.aif new file mode 100644 index 0000000000..8827bd1e1c Binary files /dev/null and b/sa1/sound/direct_sound_samples/08773848.aif differ diff --git a/sa1/sound/direct_sound_samples/08775640.aif b/sa1/sound/direct_sound_samples/08775640.aif new file mode 100644 index 0000000000..e2594c989a Binary files /dev/null and b/sa1/sound/direct_sound_samples/08775640.aif differ diff --git a/sa1/sound/direct_sound_samples/08775E7C.aif b/sa1/sound/direct_sound_samples/08775E7C.aif new file mode 100644 index 0000000000..f2cb716c81 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08775E7C.aif differ diff --git a/sa1/sound/direct_sound_samples/08778D48.aif b/sa1/sound/direct_sound_samples/08778D48.aif new file mode 100644 index 0000000000..abff1e745a Binary files /dev/null and b/sa1/sound/direct_sound_samples/08778D48.aif differ diff --git a/sa1/sound/direct_sound_samples/08779EDC.aif b/sa1/sound/direct_sound_samples/08779EDC.aif new file mode 100644 index 0000000000..20d89360b3 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08779EDC.aif differ diff --git a/sa1/sound/direct_sound_samples/0877AD00.aif b/sa1/sound/direct_sound_samples/0877AD00.aif new file mode 100644 index 0000000000..262ee51bae Binary files /dev/null and b/sa1/sound/direct_sound_samples/0877AD00.aif differ diff --git a/sa1/sound/direct_sound_samples/0877B9A0.aif b/sa1/sound/direct_sound_samples/0877B9A0.aif new file mode 100644 index 0000000000..024ed9d017 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0877B9A0.aif differ diff --git a/sa1/sound/direct_sound_samples/0877CF24.aif b/sa1/sound/direct_sound_samples/0877CF24.aif new file mode 100644 index 0000000000..bd52604639 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0877CF24.aif differ diff --git a/sa1/sound/direct_sound_samples/0877F2A4.aif b/sa1/sound/direct_sound_samples/0877F2A4.aif new file mode 100644 index 0000000000..d56d07a6ca Binary files /dev/null and b/sa1/sound/direct_sound_samples/0877F2A4.aif differ diff --git a/sa1/sound/direct_sound_samples/0878306C.aif b/sa1/sound/direct_sound_samples/0878306C.aif new file mode 100644 index 0000000000..d1313a1819 Binary files /dev/null and b/sa1/sound/direct_sound_samples/0878306C.aif differ diff --git a/sa1/sound/direct_sound_samples/08789214.aif b/sa1/sound/direct_sound_samples/08789214.aif new file mode 100644 index 0000000000..7e75e9c74b Binary files /dev/null and b/sa1/sound/direct_sound_samples/08789214.aif differ diff --git a/sa1/sound/direct_sound_samples/0878D964.aif b/sa1/sound/direct_sound_samples/0878D964.aif new file mode 100644 index 0000000000..47e3c89aaf Binary files /dev/null and b/sa1/sound/direct_sound_samples/0878D964.aif differ diff --git a/sa1/sound/direct_sound_samples/0878FAAC.aif b/sa1/sound/direct_sound_samples/0878FAAC.aif new file mode 100644 index 0000000000..995817b69e Binary files /dev/null and b/sa1/sound/direct_sound_samples/0878FAAC.aif differ diff --git a/sa1/sound/direct_sound_samples/08797224.aif b/sa1/sound/direct_sound_samples/08797224.aif new file mode 100644 index 0000000000..63e9416cd9 Binary files /dev/null and b/sa1/sound/direct_sound_samples/08797224.aif differ diff --git a/sa1/sound/direct_sound_samples/spectrasonics__symphony_of_voices__partition_d__big_chord__big_min__c4_r.aif b/sa1/sound/direct_sound_samples/spectrasonics__symphony_of_voices__partition_d__big_chord__big_min__c4_r.aif new file mode 100644 index 0000000000..1b37d631f6 Binary files /dev/null and b/sa1/sound/direct_sound_samples/spectrasonics__symphony_of_voices__partition_d__big_chord__big_min__c4_r.aif differ diff --git a/sa1/sound/keysplit_tables.inc b/sa1/sound/keysplit_tables.inc new file mode 100644 index 0000000000..d59d99b255 --- /dev/null +++ b/sa1/sound/keysplit_tables.inc @@ -0,0 +1,96 @@ +@ From pret: +@ Due to the way mks4agb (tool) works, key split table labels can +@ appear before the actual start of the key split table data. If you look at +@ the first keysplit table (KeySplitTable1), you'll notice it's offset backwards +@ by 18 bytes (not in SA2!). This is because the key split tables don't map instruments +@ for the entire note range (0-127)--they only map subsets, and the upper +@ and lower ranges aren't necessarily 0 or 127. +@ +@ For example if a key split table maps an note range of 10-20, then the key +@ split table label will be offset 10 bytes before the actual key split data +@ begins. Therefore, the notes naturally map to the key split table without +@ any extra offset calculation. + + mAlignWord + @********************** KeySplit **********************@ + +#if (defined(__aarch64__) || defined(__x86_64__)) +.set MP2KVoiceGroup_size, 0x18 +#else +.set MP2KVoiceGroup_size, 0xC +#endif + + .global KeySplitTable1 +.set KeySplitTable1, . - (3 * MP2KVoiceGroup_size) @ 0x00000000 + .byte 25 + .byte 26 + .byte 27 + .byte 28 + .byte 29 + .byte 0 + .byte 0 + .byte 30 + .byte 31 + .byte 32 + .byte 33 + .byte 34 + .byte 35 + .byte 36 + .byte 37 + .byte 38 + .byte 39 + .byte 40 + .byte 41 + .byte 42 + .byte 43 + .byte 44 + .byte 45 + .byte 46 + .byte 47 + .byte 56 + .byte 57 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 48 + .byte 49 + .byte 50 + .byte 51 + .byte 52 + .byte 53 + .byte 54 + .byte 55 + .byte 58 + .byte 59 + .byte 60 + .byte 0 + .byte 61 + .byte 62 + .byte 63 + .byte 64 + .byte 65 + .byte 0 + .byte 75 + .byte 76 + .byte 77 + .byte 78 + .byte 79 + .byte 80 + .byte 81 + .byte 82 + .byte 83 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 diff --git a/sa1/sound/music_player_table.inc b/sa1/sound/music_player_table.inc new file mode 100644 index 0000000000..25730fab14 --- /dev/null +++ b/sa1/sound/music_player_table.inc @@ -0,0 +1,17 @@ +.equiv NUM_TRACKS_BGM, 16 +.equiv NUM_TRACKS_SE1, 16 +.equiv NUM_TRACKS_SE2, 16 +.equiv NUM_TRACKS_SE3, 16 + + mSectionRodata + + mAlignWord + .global C_DECL(gMPlayTable) +C_DECL(gMPlayTable): + music_player C_DECL(gMPlayInfo_BGM), C_DECL(gMPlayTrack_BGM), NUM_TRACKS_BGM, 0 +mAlignWord + music_player C_DECL(gMPlayInfo_SE1), C_DECL(gMPlayTrack_SE1), NUM_TRACKS_SE1, 0 +mAlignWord + music_player C_DECL(gMPlayInfo_SE2), C_DECL(gMPlayTrack_SE2), NUM_TRACKS_SE2, 0 +mAlignWord + music_player C_DECL(gMPlayInfo_SE3), C_DECL(gMPlayTrack_SE3), NUM_TRACKS_SE3, 0 diff --git a/sa1/sound/programmable_wave_data.inc b/sa1/sound/programmable_wave_data.inc new file mode 100644 index 0000000000..954613f0ec --- /dev/null +++ b/sa1/sound/programmable_wave_data.inc @@ -0,0 +1,44 @@ + mAlignWord + .global ProgrammableWaveData_86DD6D0 +ProgrammableWaveData_86DD6D0: + .incbin "sound/programmable_wave_samples/086DD6D0.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD6E0 +ProgrammableWaveData_86DD6E0: + .incbin "sound/programmable_wave_samples/086DD6E0.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD6F0 +ProgrammableWaveData_86DD6F0: + .incbin "sound/programmable_wave_samples/086DD6F0.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD700 +ProgrammableWaveData_86DD700: + .incbin "sound/programmable_wave_samples/086DD700.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD710 +ProgrammableWaveData_86DD710: + .incbin "sound/programmable_wave_samples/086DD710.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD720 +ProgrammableWaveData_86DD720: + .incbin "sound/programmable_wave_samples/086DD720.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD730 +ProgrammableWaveData_86DD730: + .incbin "sound/programmable_wave_samples/086DD730.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD740 +ProgrammableWaveData_86DD740: + .incbin "sound/programmable_wave_samples/086DD740.pcm" + + mAlignWord + .global ProgrammableWaveData_86DD750 +ProgrammableWaveData_86DD750: + .incbin "sound/programmable_wave_samples/086DD750.pcm" diff --git a/sa1/sound/programmable_wave_samples/086DD6D0.pcm b/sa1/sound/programmable_wave_samples/086DD6D0.pcm new file mode 100644 index 0000000000..553e99bc8f Binary files /dev/null and b/sa1/sound/programmable_wave_samples/086DD6D0.pcm differ diff --git a/sa1/sound/programmable_wave_samples/086DD6E0.pcm b/sa1/sound/programmable_wave_samples/086DD6E0.pcm new file mode 100644 index 0000000000..d79c8eed5b --- /dev/null +++ b/sa1/sound/programmable_wave_samples/086DD6E0.pcm @@ -0,0 +1 @@ +#Eg‰«Íïþܺ˜vT2 \ No newline at end of file diff --git a/sa1/sound/programmable_wave_samples/086DD6F0.pcm b/sa1/sound/programmable_wave_samples/086DD6F0.pcm new file mode 100644 index 0000000000..d19ebafe44 Binary files /dev/null and b/sa1/sound/programmable_wave_samples/086DD6F0.pcm differ diff --git a/sa1/sound/programmable_wave_samples/086DD700.pcm b/sa1/sound/programmable_wave_samples/086DD700.pcm new file mode 100644 index 0000000000..93a7986544 --- /dev/null +++ b/sa1/sound/programmable_wave_samples/086DD700.pcm @@ -0,0 +1 @@ +þܺ™ˆˆˆˆwwwwfT2 \ No newline at end of file diff --git a/sa1/sound/programmable_wave_samples/086DD710.pcm b/sa1/sound/programmable_wave_samples/086DD710.pcm new file mode 100644 index 0000000000..46ba2f1954 Binary files /dev/null and b/sa1/sound/programmable_wave_samples/086DD710.pcm differ diff --git a/sa1/sound/programmable_wave_samples/086DD720.pcm b/sa1/sound/programmable_wave_samples/086DD720.pcm new file mode 100644 index 0000000000..6f3ee57a8e Binary files /dev/null and b/sa1/sound/programmable_wave_samples/086DD720.pcm differ diff --git a/sa1/sound/programmable_wave_samples/086DD730.pcm b/sa1/sound/programmable_wave_samples/086DD730.pcm new file mode 100644 index 0000000000..2584b93e7d Binary files /dev/null and b/sa1/sound/programmable_wave_samples/086DD730.pcm differ diff --git a/sa1/sound/programmable_wave_samples/086DD740.pcm b/sa1/sound/programmable_wave_samples/086DD740.pcm new file mode 100644 index 0000000000..919625001d Binary files /dev/null and b/sa1/sound/programmable_wave_samples/086DD740.pcm differ diff --git a/sa1/sound/programmable_wave_samples/086DD750.pcm b/sa1/sound/programmable_wave_samples/086DD750.pcm new file mode 100644 index 0000000000..0f00ddced1 --- /dev/null +++ b/sa1/sound/programmable_wave_samples/086DD750.pcm @@ -0,0 +1 @@ +íþý¼¬ƒB@GV…‹Þ \ No newline at end of file diff --git a/sa1/sound/song_table.inc b/sa1/sound/song_table.inc new file mode 100644 index 0000000000..1f93a2b410 --- /dev/null +++ b/sa1/sound/song_table.inc @@ -0,0 +1,625 @@ + mAlignWord + .global C_DECL(gSongTable) +C_DECL(gSongTable): @ 0x086DD790 + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(song001), 0, 0 +mAlignWord + song C_DECL(song002), 0, 0 +mAlignWord + song C_DECL(song003), 0, 0 +mAlignWord + song C_DECL(song004), 0, 0 +mAlignWord + song C_DECL(song005), 0, 0 +mAlignWord + song C_DECL(song006), 0, 0 +mAlignWord + song C_DECL(song007), 0, 0 +mAlignWord + song C_DECL(song008), 0, 0 +mAlignWord + song C_DECL(song009), 0, 0 +mAlignWord + song C_DECL(song010), 0, 0 +mAlignWord + song C_DECL(song011), 0, 0 +mAlignWord + song C_DECL(song012), 0, 0 +mAlignWord + song C_DECL(song013), 0, 0 +mAlignWord + song C_DECL(song014), 0, 0 +mAlignWord + song C_DECL(song015), 0, 0 +mAlignWord + song C_DECL(song016), 0, 0 +mAlignWord + song C_DECL(song017), 0, 0 +mAlignWord + song C_DECL(song018), 0, 0 +mAlignWord + song C_DECL(song019), 0, 0 +mAlignWord + song C_DECL(song020), 0, 0 +mAlignWord + song C_DECL(song021), 0, 0 +mAlignWord + song C_DECL(song022), 0, 0 +mAlignWord + song C_DECL(song023), 0, 0 +mAlignWord + song C_DECL(song024), 0, 0 +mAlignWord + song C_DECL(song025), 0, 0 +mAlignWord + song C_DECL(song026), 0, 0 +mAlignWord + song C_DECL(song027), 0, 0 +mAlignWord + song C_DECL(song028), 0, 0 +mAlignWord + song C_DECL(song029), 0, 0 +mAlignWord + song C_DECL(song030), 0, 0 +mAlignWord + song C_DECL(song031), 0, 0 +mAlignWord + song C_DECL(song032), 0, 0 +mAlignWord + song C_DECL(song033), 0, 0 +mAlignWord + song C_DECL(song034), 0, 0 +mAlignWord + song C_DECL(song035), 0, 0 +mAlignWord + song C_DECL(song036), 0, 0 +mAlignWord + song C_DECL(song037), 0, 0 +mAlignWord + song C_DECL(song038), 1, 1 +mAlignWord + song C_DECL(song039), 1, 1 +mAlignWord + song C_DECL(song040), 1, 1 +mAlignWord + song C_DECL(song041), 0, 0 +mAlignWord + song C_DECL(song042), 0, 0 +mAlignWord + song C_DECL(mus_sp_stage_trick), 0, 0 +mAlignWord + song C_DECL(song044), 0, 0 +mAlignWord + song C_DECL(song045), 0, 0 +mAlignWord + song C_DECL(song046), 0, 0 +mAlignWord + song C_DECL(song047), 0, 0 +mAlignWord + song C_DECL(song048), 0, 0 +mAlignWord + song C_DECL(song049), 0, 0 +mAlignWord + song C_DECL(song050), 0, 0 +mAlignWord + song C_DECL(song051), 0, 0 +mAlignWord + song C_DECL(song052), 0, 0 +mAlignWord + song C_DECL(song053), 0, 0 +mAlignWord + song C_DECL(song054), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(song102), 3, 3 +mAlignWord + song C_DECL(song103), 3, 3 +mAlignWord + song C_DECL(song104), 3, 3 +mAlignWord + song C_DECL(song105), 3, 3 +mAlignWord + song C_DECL(song106), 2, 2 +mAlignWord + song C_DECL(song107), 2, 2 +mAlignWord + song C_DECL(song108), 2, 2 +mAlignWord + song C_DECL(song109), 3, 3 +mAlignWord + song C_DECL(song110), 2, 2 +mAlignWord + song C_DECL(song111), 3, 3 +mAlignWord + song C_DECL(song112), 3, 3 +mAlignWord + song C_DECL(song113), 2, 2 +mAlignWord + song C_DECL(song114), 2, 2 +mAlignWord + song C_DECL(song115), 2, 2 +mAlignWord + song C_DECL(song116), 2, 2 +mAlignWord + song C_DECL(se_ring_copy), 3, 3 +mAlignWord + song C_DECL(song118), 3, 3 +mAlignWord + song C_DECL(song119), 2, 2 +mAlignWord + song C_DECL(song120), 3, 3 +mAlignWord + song C_DECL(song121), 3, 3 +mAlignWord + song C_DECL(song122), 3, 3 +mAlignWord + song C_DECL(song123), 3, 3 +mAlignWord + song C_DECL(song124), 3, 3 +mAlignWord + song C_DECL(song125), 3, 3 +mAlignWord + song C_DECL(song126), 3, 3 +mAlignWord + song C_DECL(song127), 3, 3 +mAlignWord + song C_DECL(song128), 3, 3 +mAlignWord + song C_DECL(song129), 3, 3 +mAlignWord + song C_DECL(song130), 3, 3 +mAlignWord + song C_DECL(song131), 3, 3 +mAlignWord + song C_DECL(song132), 3, 3 +mAlignWord + song C_DECL(song133), 3, 3 +mAlignWord + song C_DECL(song134), 3, 3 +mAlignWord + song C_DECL(song135), 3, 3 +mAlignWord + song C_DECL(song136), 3, 3 +mAlignWord + song C_DECL(song137), 3, 3 +mAlignWord + song C_DECL(song138), 2, 2 +mAlignWord + song C_DECL(song139), 2, 2 +mAlignWord + song C_DECL(song140), 2, 2 +mAlignWord + song C_DECL(song141), 3, 3 +mAlignWord + song C_DECL(song142), 3, 3 +mAlignWord + song C_DECL(song143), 1, 1 +mAlignWord + song C_DECL(song144), 3, 3 +mAlignWord + song C_DECL(song145), 3, 3 +mAlignWord + song C_DECL(song146), 3, 3 +mAlignWord + song C_DECL(song147), 3, 3 +mAlignWord + song C_DECL(song148), 3, 3 +mAlignWord + song C_DECL(song149), 3, 3 +mAlignWord + song C_DECL(song150), 3, 3 +mAlignWord + song C_DECL(song151), 3, 3 +mAlignWord + song C_DECL(song152), 3, 3 +mAlignWord + song C_DECL(song153), 3, 3 +mAlignWord + song C_DECL(song154), 3, 3 +mAlignWord + song C_DECL(song155), 3, 3 +mAlignWord + song C_DECL(song156), 3, 3 +mAlignWord + song C_DECL(song157), 3, 3 +mAlignWord + song C_DECL(song158), 3, 3 +mAlignWord + song C_DECL(song159), 3, 3 +mAlignWord + song C_DECL(song160), 3, 3 +mAlignWord + song C_DECL(song161), 3, 3 +mAlignWord + song C_DECL(song162), 3, 3 +mAlignWord + song C_DECL(song163), 3, 3 +mAlignWord + song C_DECL(song164), 3, 3 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(song166), 3, 3 +mAlignWord + song C_DECL(song167), 2, 2 +mAlignWord + song C_DECL(song168), 2, 2 +mAlignWord + song C_DECL(song169), 2, 2 +mAlignWord + song C_DECL(song170), 2, 2 +mAlignWord + song C_DECL(song171), 2, 2 +mAlignWord + song C_DECL(song172), 2, 2 +mAlignWord + song C_DECL(song173), 2, 2 +mAlignWord + song C_DECL(song174), 2, 2 +mAlignWord + song C_DECL(song175), 2, 2 +mAlignWord + song C_DECL(song176), 2, 2 +mAlignWord + song C_DECL(song177), 2, 2 +mAlignWord + song C_DECL(song178), 2, 2 +mAlignWord + song C_DECL(song179), 2, 2 +mAlignWord + song C_DECL(song180), 2, 2 +mAlignWord + song C_DECL(song181), 2, 2 +mAlignWord + song C_DECL(song182), 2, 2 +mAlignWord + song C_DECL(song183), 2, 2 +mAlignWord + song C_DECL(song184), 2, 2 +mAlignWord + song C_DECL(song185), 2, 2 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(song188), 2, 2 +mAlignWord + song C_DECL(song189), 2, 2 +mAlignWord + song C_DECL(song190), 2, 2 +mAlignWord + song C_DECL(song191), 2, 2 +mAlignWord + song C_DECL(song192), 2, 2 +mAlignWord + song C_DECL(song193), 2, 2 +mAlignWord + song C_DECL(song194), 2, 2 +mAlignWord + song C_DECL(song195), 2, 2 +mAlignWord + song C_DECL(song196), 2, 2 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(song198), 2, 2 +mAlignWord + song C_DECL(song199), 2, 2 +mAlignWord + song C_DECL(song200), 2, 2 +mAlignWord + song C_DECL(song201), 2, 2 +mAlignWord + song C_DECL(song202), 2, 2 +mAlignWord + song C_DECL(song203), 2, 2 +mAlignWord + song C_DECL(song204), 2, 2 +mAlignWord + song C_DECL(song205), 2, 2 +mAlignWord + song C_DECL(song206), 2, 2 +mAlignWord + song C_DECL(song207), 2, 2 +mAlignWord + song C_DECL(song208), 2, 2 +mAlignWord + song C_DECL(song209), 2, 2 +mAlignWord + song C_DECL(song210), 2, 2 +mAlignWord + song C_DECL(song211), 2, 2 +mAlignWord + song C_DECL(song212), 2, 2 +mAlignWord + song C_DECL(song213), 2, 2 +mAlignWord + song C_DECL(song214), 2, 2 +mAlignWord + song C_DECL(song215), 3, 3 +mAlignWord + song C_DECL(song216), 3, 3 +mAlignWord + song C_DECL(song217), 3, 3 +mAlignWord + song C_DECL(song218), 3, 3 +mAlignWord + song C_DECL(song219), 3, 3 +mAlignWord + song C_DECL(song220), 3, 3 +mAlignWord + song C_DECL(song221), 3, 3 +mAlignWord + song C_DECL(song222), 3, 3 +mAlignWord + song C_DECL(song223), 3, 3 +mAlignWord + song C_DECL(song224), 3, 3 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(dummy_song_header), 0, 0 +mAlignWord + song C_DECL(song301), 0, 0 +mAlignWord + song C_DECL(song302), 0, 0 +mAlignWord + song C_DECL(song303), 0, 0 +mAlignWord + song C_DECL(song304), 0, 0 +mAlignWord + song C_DECL(song305), 0, 0 +mAlignWord + song C_DECL(song306), 0, 0 +mAlignWord + song C_DECL(song307), 0, 0 + + mAlignWord +C_DECL(dummy_song_header): @ 0x086DE130 + .byte 0 @ trackCount + .byte 0 @ blockCount + .byte 0 @ priority + .byte 0 @ reverb diff --git a/sa1/sound/songs/midi/mus_sp_stage_trick.mid b/sa1/sound/songs/midi/mus_sp_stage_trick.mid new file mode 100644 index 0000000000..67f0cb3e73 Binary files /dev/null and b/sa1/sound/songs/midi/mus_sp_stage_trick.mid differ diff --git a/sa1/sound/songs/midi/non_matching/song001.mid b/sa1/sound/songs/midi/non_matching/song001.mid new file mode 100755 index 0000000000..e539058000 Binary files /dev/null and b/sa1/sound/songs/midi/non_matching/song001.mid differ diff --git a/sa1/sound/songs/midi/non_matching/song017.mid b/sa1/sound/songs/midi/non_matching/song017.mid new file mode 100755 index 0000000000..23151619ff Binary files /dev/null and b/sa1/sound/songs/midi/non_matching/song017.mid differ diff --git a/sa1/sound/songs/midi/non_matching/song020.mid b/sa1/sound/songs/midi/non_matching/song020.mid new file mode 100755 index 0000000000..f0cdd3cec5 Binary files /dev/null and b/sa1/sound/songs/midi/non_matching/song020.mid differ diff --git a/sa1/sound/songs/midi/non_matching/song030.mid b/sa1/sound/songs/midi/non_matching/song030.mid new file mode 100755 index 0000000000..1edd66d192 Binary files /dev/null and b/sa1/sound/songs/midi/non_matching/song030.mid differ diff --git a/sa1/sound/songs/midi/non_matching/song039.mid b/sa1/sound/songs/midi/non_matching/song039.mid new file mode 100755 index 0000000000..f524486e5a Binary files /dev/null and b/sa1/sound/songs/midi/non_matching/song039.mid differ diff --git a/sa1/sound/songs/midi/non_matching/song040.mid b/sa1/sound/songs/midi/non_matching/song040.mid new file mode 100755 index 0000000000..6ff1026bba Binary files /dev/null and b/sa1/sound/songs/midi/non_matching/song040.mid differ diff --git a/sa1/sound/songs/midi/se_ring_copy.mid b/sa1/sound/songs/midi/se_ring_copy.mid new file mode 100644 index 0000000000..441990298f Binary files /dev/null and b/sa1/sound/songs/midi/se_ring_copy.mid differ diff --git a/sa1/sound/songs/midi/song002.mid b/sa1/sound/songs/midi/song002.mid new file mode 100755 index 0000000000..d096e4190f Binary files /dev/null and b/sa1/sound/songs/midi/song002.mid differ diff --git a/sa1/sound/songs/midi/song003.mid b/sa1/sound/songs/midi/song003.mid new file mode 100755 index 0000000000..a3410151b9 Binary files /dev/null and b/sa1/sound/songs/midi/song003.mid differ diff --git a/sa1/sound/songs/midi/song004.mid b/sa1/sound/songs/midi/song004.mid new file mode 100755 index 0000000000..51690b95b7 Binary files /dev/null and b/sa1/sound/songs/midi/song004.mid differ diff --git a/sa1/sound/songs/midi/song005.mid b/sa1/sound/songs/midi/song005.mid new file mode 100755 index 0000000000..510f4e378c Binary files /dev/null and b/sa1/sound/songs/midi/song005.mid differ diff --git a/sa1/sound/songs/midi/song006.mid b/sa1/sound/songs/midi/song006.mid new file mode 100755 index 0000000000..e8056f3d1c Binary files /dev/null and b/sa1/sound/songs/midi/song006.mid differ diff --git a/sa1/sound/songs/midi/song007.mid b/sa1/sound/songs/midi/song007.mid new file mode 100755 index 0000000000..cf4e2a7e3b Binary files /dev/null and b/sa1/sound/songs/midi/song007.mid differ diff --git a/sa1/sound/songs/midi/song008.mid b/sa1/sound/songs/midi/song008.mid new file mode 100755 index 0000000000..7372d15854 Binary files /dev/null and b/sa1/sound/songs/midi/song008.mid differ diff --git a/sa1/sound/songs/midi/song009.mid b/sa1/sound/songs/midi/song009.mid new file mode 100755 index 0000000000..8787fbdfbd Binary files /dev/null and b/sa1/sound/songs/midi/song009.mid differ diff --git a/sa1/sound/songs/midi/song010.mid b/sa1/sound/songs/midi/song010.mid new file mode 100755 index 0000000000..acad672169 Binary files /dev/null and b/sa1/sound/songs/midi/song010.mid differ diff --git a/sa1/sound/songs/midi/song011.mid b/sa1/sound/songs/midi/song011.mid new file mode 100755 index 0000000000..918bcfdfb3 Binary files /dev/null and b/sa1/sound/songs/midi/song011.mid differ diff --git a/sa1/sound/songs/midi/song012.mid b/sa1/sound/songs/midi/song012.mid new file mode 100755 index 0000000000..a30c601d26 Binary files /dev/null and b/sa1/sound/songs/midi/song012.mid differ diff --git a/sa1/sound/songs/midi/song013.mid b/sa1/sound/songs/midi/song013.mid new file mode 100755 index 0000000000..0b6d4051b1 Binary files /dev/null and b/sa1/sound/songs/midi/song013.mid differ diff --git a/sa1/sound/songs/midi/song014.mid b/sa1/sound/songs/midi/song014.mid new file mode 100755 index 0000000000..7c915b5835 Binary files /dev/null and b/sa1/sound/songs/midi/song014.mid differ diff --git a/sa1/sound/songs/midi/song015.mid b/sa1/sound/songs/midi/song015.mid new file mode 100755 index 0000000000..8b20dd421d Binary files /dev/null and b/sa1/sound/songs/midi/song015.mid differ diff --git a/sa1/sound/songs/midi/song016.mid b/sa1/sound/songs/midi/song016.mid new file mode 100755 index 0000000000..6c5fb43ed0 Binary files /dev/null and b/sa1/sound/songs/midi/song016.mid differ diff --git a/sa1/sound/songs/midi/song018.mid b/sa1/sound/songs/midi/song018.mid new file mode 100755 index 0000000000..79ab4a0058 Binary files /dev/null and b/sa1/sound/songs/midi/song018.mid differ diff --git a/sa1/sound/songs/midi/song019.mid b/sa1/sound/songs/midi/song019.mid new file mode 100755 index 0000000000..4591bddb5a Binary files /dev/null and b/sa1/sound/songs/midi/song019.mid differ diff --git a/sa1/sound/songs/midi/song021.mid b/sa1/sound/songs/midi/song021.mid new file mode 100755 index 0000000000..1cf113cb32 Binary files /dev/null and b/sa1/sound/songs/midi/song021.mid differ diff --git a/sa1/sound/songs/midi/song022.mid b/sa1/sound/songs/midi/song022.mid new file mode 100755 index 0000000000..e885f69b76 Binary files /dev/null and b/sa1/sound/songs/midi/song022.mid differ diff --git a/sa1/sound/songs/midi/song023.mid b/sa1/sound/songs/midi/song023.mid new file mode 100755 index 0000000000..22b8452955 Binary files /dev/null and b/sa1/sound/songs/midi/song023.mid differ diff --git a/sa1/sound/songs/midi/song024.mid b/sa1/sound/songs/midi/song024.mid new file mode 100755 index 0000000000..1582c15766 Binary files /dev/null and b/sa1/sound/songs/midi/song024.mid differ diff --git a/sa1/sound/songs/midi/song025.mid b/sa1/sound/songs/midi/song025.mid new file mode 100755 index 0000000000..9f77ccb1a4 Binary files /dev/null and b/sa1/sound/songs/midi/song025.mid differ diff --git a/sa1/sound/songs/midi/song026.mid b/sa1/sound/songs/midi/song026.mid new file mode 100755 index 0000000000..99cbae6afb Binary files /dev/null and b/sa1/sound/songs/midi/song026.mid differ diff --git a/sa1/sound/songs/midi/song027.mid b/sa1/sound/songs/midi/song027.mid new file mode 100755 index 0000000000..08144c1b9e Binary files /dev/null and b/sa1/sound/songs/midi/song027.mid differ diff --git a/sa1/sound/songs/midi/song028.mid b/sa1/sound/songs/midi/song028.mid new file mode 100755 index 0000000000..19f55aee03 Binary files /dev/null and b/sa1/sound/songs/midi/song028.mid differ diff --git a/sa1/sound/songs/midi/song029.mid b/sa1/sound/songs/midi/song029.mid new file mode 100755 index 0000000000..449afd8582 Binary files /dev/null and b/sa1/sound/songs/midi/song029.mid differ diff --git a/sa1/sound/songs/midi/song031.mid b/sa1/sound/songs/midi/song031.mid new file mode 100755 index 0000000000..3c6c91c3db Binary files /dev/null and b/sa1/sound/songs/midi/song031.mid differ diff --git a/sa1/sound/songs/midi/song032.mid b/sa1/sound/songs/midi/song032.mid new file mode 100755 index 0000000000..495e66cf45 Binary files /dev/null and b/sa1/sound/songs/midi/song032.mid differ diff --git a/sa1/sound/songs/midi/song033.mid b/sa1/sound/songs/midi/song033.mid new file mode 100755 index 0000000000..a32cb100cd Binary files /dev/null and b/sa1/sound/songs/midi/song033.mid differ diff --git a/sa1/sound/songs/midi/song034.mid b/sa1/sound/songs/midi/song034.mid new file mode 100755 index 0000000000..41796d92e3 Binary files /dev/null and b/sa1/sound/songs/midi/song034.mid differ diff --git a/sa1/sound/songs/midi/song035.mid b/sa1/sound/songs/midi/song035.mid new file mode 100755 index 0000000000..0f61df44da Binary files /dev/null and b/sa1/sound/songs/midi/song035.mid differ diff --git a/sa1/sound/songs/midi/song036.mid b/sa1/sound/songs/midi/song036.mid new file mode 100755 index 0000000000..026be80f92 Binary files /dev/null and b/sa1/sound/songs/midi/song036.mid differ diff --git a/sa1/sound/songs/midi/song037.mid b/sa1/sound/songs/midi/song037.mid new file mode 100755 index 0000000000..6e4c88cc8e Binary files /dev/null and b/sa1/sound/songs/midi/song037.mid differ diff --git a/sa1/sound/songs/midi/song038.mid b/sa1/sound/songs/midi/song038.mid new file mode 100755 index 0000000000..8f14816bd7 Binary files /dev/null and b/sa1/sound/songs/midi/song038.mid differ diff --git a/sa1/sound/songs/midi/song041.mid b/sa1/sound/songs/midi/song041.mid new file mode 100755 index 0000000000..e38dde61f0 Binary files /dev/null and b/sa1/sound/songs/midi/song041.mid differ diff --git a/sa1/sound/songs/midi/song042.mid b/sa1/sound/songs/midi/song042.mid new file mode 100755 index 0000000000..c878c683a6 Binary files /dev/null and b/sa1/sound/songs/midi/song042.mid differ diff --git a/sa1/sound/songs/midi/song044.mid b/sa1/sound/songs/midi/song044.mid new file mode 100755 index 0000000000..182a041623 Binary files /dev/null and b/sa1/sound/songs/midi/song044.mid differ diff --git a/sa1/sound/songs/midi/song045.mid b/sa1/sound/songs/midi/song045.mid new file mode 100755 index 0000000000..e109dff74b Binary files /dev/null and b/sa1/sound/songs/midi/song045.mid differ diff --git a/sa1/sound/songs/midi/song046.mid b/sa1/sound/songs/midi/song046.mid new file mode 100755 index 0000000000..f4b573915e Binary files /dev/null and b/sa1/sound/songs/midi/song046.mid differ diff --git a/sa1/sound/songs/midi/song047.mid b/sa1/sound/songs/midi/song047.mid new file mode 100755 index 0000000000..04e8646efc Binary files /dev/null and b/sa1/sound/songs/midi/song047.mid differ diff --git a/sa1/sound/songs/midi/song048.mid b/sa1/sound/songs/midi/song048.mid new file mode 100755 index 0000000000..ed702ff28b Binary files /dev/null and b/sa1/sound/songs/midi/song048.mid differ diff --git a/sa1/sound/songs/midi/song049.mid b/sa1/sound/songs/midi/song049.mid new file mode 100755 index 0000000000..bd298550ee Binary files /dev/null and b/sa1/sound/songs/midi/song049.mid differ diff --git a/sa1/sound/songs/midi/song050.mid b/sa1/sound/songs/midi/song050.mid new file mode 100755 index 0000000000..deba76444d Binary files /dev/null and b/sa1/sound/songs/midi/song050.mid differ diff --git a/sa1/sound/songs/midi/song051.mid b/sa1/sound/songs/midi/song051.mid new file mode 100755 index 0000000000..915cf82a83 Binary files /dev/null and b/sa1/sound/songs/midi/song051.mid differ diff --git a/sa1/sound/songs/midi/song052.mid b/sa1/sound/songs/midi/song052.mid new file mode 100755 index 0000000000..d179568fd3 Binary files /dev/null and b/sa1/sound/songs/midi/song052.mid differ diff --git a/sa1/sound/songs/midi/song053.mid b/sa1/sound/songs/midi/song053.mid new file mode 100755 index 0000000000..08a35f169e Binary files /dev/null and b/sa1/sound/songs/midi/song053.mid differ diff --git a/sa1/sound/songs/midi/song054.mid b/sa1/sound/songs/midi/song054.mid new file mode 100755 index 0000000000..77ed11c925 Binary files /dev/null and b/sa1/sound/songs/midi/song054.mid differ diff --git a/sa1/sound/songs/midi/song102.mid b/sa1/sound/songs/midi/song102.mid new file mode 100755 index 0000000000..441990298f Binary files /dev/null and b/sa1/sound/songs/midi/song102.mid differ diff --git a/sa1/sound/songs/midi/song103.mid b/sa1/sound/songs/midi/song103.mid new file mode 100755 index 0000000000..de500b5e54 Binary files /dev/null and b/sa1/sound/songs/midi/song103.mid differ diff --git a/sa1/sound/songs/midi/song104.mid b/sa1/sound/songs/midi/song104.mid new file mode 100755 index 0000000000..e31fa2fead Binary files /dev/null and b/sa1/sound/songs/midi/song104.mid differ diff --git a/sa1/sound/songs/midi/song105.mid b/sa1/sound/songs/midi/song105.mid new file mode 100755 index 0000000000..907b201802 Binary files /dev/null and b/sa1/sound/songs/midi/song105.mid differ diff --git a/sa1/sound/songs/midi/song106.mid b/sa1/sound/songs/midi/song106.mid new file mode 100755 index 0000000000..95f6bfe363 Binary files /dev/null and b/sa1/sound/songs/midi/song106.mid differ diff --git a/sa1/sound/songs/midi/song107.mid b/sa1/sound/songs/midi/song107.mid new file mode 100755 index 0000000000..26fa7d35e9 Binary files /dev/null and b/sa1/sound/songs/midi/song107.mid differ diff --git a/sa1/sound/songs/midi/song108.mid b/sa1/sound/songs/midi/song108.mid new file mode 100755 index 0000000000..f6dc8de9a2 Binary files /dev/null and b/sa1/sound/songs/midi/song108.mid differ diff --git a/sa1/sound/songs/midi/song109.mid b/sa1/sound/songs/midi/song109.mid new file mode 100755 index 0000000000..9342981d74 Binary files /dev/null and b/sa1/sound/songs/midi/song109.mid differ diff --git a/sa1/sound/songs/midi/song110.mid b/sa1/sound/songs/midi/song110.mid new file mode 100755 index 0000000000..c354c4fb82 Binary files /dev/null and b/sa1/sound/songs/midi/song110.mid differ diff --git a/sa1/sound/songs/midi/song111.mid b/sa1/sound/songs/midi/song111.mid new file mode 100755 index 0000000000..de29cbb9c9 Binary files /dev/null and b/sa1/sound/songs/midi/song111.mid differ diff --git a/sa1/sound/songs/midi/song112.mid b/sa1/sound/songs/midi/song112.mid new file mode 100755 index 0000000000..d6c45f517e Binary files /dev/null and b/sa1/sound/songs/midi/song112.mid differ diff --git a/sa1/sound/songs/midi/song113.mid b/sa1/sound/songs/midi/song113.mid new file mode 100755 index 0000000000..3ade524f60 Binary files /dev/null and b/sa1/sound/songs/midi/song113.mid differ diff --git a/sa1/sound/songs/midi/song114.mid b/sa1/sound/songs/midi/song114.mid new file mode 100755 index 0000000000..08746cf5ab Binary files /dev/null and b/sa1/sound/songs/midi/song114.mid differ diff --git a/sa1/sound/songs/midi/song115.mid b/sa1/sound/songs/midi/song115.mid new file mode 100755 index 0000000000..70e201090f Binary files /dev/null and b/sa1/sound/songs/midi/song115.mid differ diff --git a/sa1/sound/songs/midi/song116.mid b/sa1/sound/songs/midi/song116.mid new file mode 100755 index 0000000000..95bfb60185 Binary files /dev/null and b/sa1/sound/songs/midi/song116.mid differ diff --git a/sa1/sound/songs/midi/song118.mid b/sa1/sound/songs/midi/song118.mid new file mode 100755 index 0000000000..8c83b643c0 Binary files /dev/null and b/sa1/sound/songs/midi/song118.mid differ diff --git a/sa1/sound/songs/midi/song119.mid b/sa1/sound/songs/midi/song119.mid new file mode 100755 index 0000000000..05242b1c0f Binary files /dev/null and b/sa1/sound/songs/midi/song119.mid differ diff --git a/sa1/sound/songs/midi/song120.mid b/sa1/sound/songs/midi/song120.mid new file mode 100755 index 0000000000..0a21c5258e Binary files /dev/null and b/sa1/sound/songs/midi/song120.mid differ diff --git a/sa1/sound/songs/midi/song121.mid b/sa1/sound/songs/midi/song121.mid new file mode 100755 index 0000000000..5ab58230ec Binary files /dev/null and b/sa1/sound/songs/midi/song121.mid differ diff --git a/sa1/sound/songs/midi/song122.mid b/sa1/sound/songs/midi/song122.mid new file mode 100755 index 0000000000..a27133e1e0 Binary files /dev/null and b/sa1/sound/songs/midi/song122.mid differ diff --git a/sa1/sound/songs/midi/song123.mid b/sa1/sound/songs/midi/song123.mid new file mode 100755 index 0000000000..1d6063746e Binary files /dev/null and b/sa1/sound/songs/midi/song123.mid differ diff --git a/sa1/sound/songs/midi/song124.mid b/sa1/sound/songs/midi/song124.mid new file mode 100755 index 0000000000..5c68a3ca18 Binary files /dev/null and b/sa1/sound/songs/midi/song124.mid differ diff --git a/sa1/sound/songs/midi/song125.mid b/sa1/sound/songs/midi/song125.mid new file mode 100755 index 0000000000..af04146675 Binary files /dev/null and b/sa1/sound/songs/midi/song125.mid differ diff --git a/sa1/sound/songs/midi/song126.mid b/sa1/sound/songs/midi/song126.mid new file mode 100755 index 0000000000..af4f71e377 Binary files /dev/null and b/sa1/sound/songs/midi/song126.mid differ diff --git a/sa1/sound/songs/midi/song127.mid b/sa1/sound/songs/midi/song127.mid new file mode 100755 index 0000000000..326b5b55bd Binary files /dev/null and b/sa1/sound/songs/midi/song127.mid differ diff --git a/sa1/sound/songs/midi/song128.mid b/sa1/sound/songs/midi/song128.mid new file mode 100755 index 0000000000..e8aafdc202 Binary files /dev/null and b/sa1/sound/songs/midi/song128.mid differ diff --git a/sa1/sound/songs/midi/song129.mid b/sa1/sound/songs/midi/song129.mid new file mode 100755 index 0000000000..05393924ed Binary files /dev/null and b/sa1/sound/songs/midi/song129.mid differ diff --git a/sa1/sound/songs/midi/song130.mid b/sa1/sound/songs/midi/song130.mid new file mode 100755 index 0000000000..6d01e3ae6a Binary files /dev/null and b/sa1/sound/songs/midi/song130.mid differ diff --git a/sa1/sound/songs/midi/song131.mid b/sa1/sound/songs/midi/song131.mid new file mode 100755 index 0000000000..fc3f96734d Binary files /dev/null and b/sa1/sound/songs/midi/song131.mid differ diff --git a/sa1/sound/songs/midi/song132.mid b/sa1/sound/songs/midi/song132.mid new file mode 100755 index 0000000000..d78134cbd7 Binary files /dev/null and b/sa1/sound/songs/midi/song132.mid differ diff --git a/sa1/sound/songs/midi/song133.mid b/sa1/sound/songs/midi/song133.mid new file mode 100755 index 0000000000..0615f27f2d Binary files /dev/null and b/sa1/sound/songs/midi/song133.mid differ diff --git a/sa1/sound/songs/midi/song134.mid b/sa1/sound/songs/midi/song134.mid new file mode 100755 index 0000000000..3378bfff0d Binary files /dev/null and b/sa1/sound/songs/midi/song134.mid differ diff --git a/sa1/sound/songs/midi/song135.mid b/sa1/sound/songs/midi/song135.mid new file mode 100755 index 0000000000..4b95ca1456 Binary files /dev/null and b/sa1/sound/songs/midi/song135.mid differ diff --git a/sa1/sound/songs/midi/song136.mid b/sa1/sound/songs/midi/song136.mid new file mode 100755 index 0000000000..db9038d7d3 Binary files /dev/null and b/sa1/sound/songs/midi/song136.mid differ diff --git a/sa1/sound/songs/midi/song137.mid b/sa1/sound/songs/midi/song137.mid new file mode 100755 index 0000000000..4c3caf213f Binary files /dev/null and b/sa1/sound/songs/midi/song137.mid differ diff --git a/sa1/sound/songs/midi/song138.mid b/sa1/sound/songs/midi/song138.mid new file mode 100755 index 0000000000..3ee0a8de95 Binary files /dev/null and b/sa1/sound/songs/midi/song138.mid differ diff --git a/sa1/sound/songs/midi/song139.mid b/sa1/sound/songs/midi/song139.mid new file mode 100755 index 0000000000..24504270f3 Binary files /dev/null and b/sa1/sound/songs/midi/song139.mid differ diff --git a/sa1/sound/songs/midi/song140.mid b/sa1/sound/songs/midi/song140.mid new file mode 100755 index 0000000000..75b1c64269 Binary files /dev/null and b/sa1/sound/songs/midi/song140.mid differ diff --git a/sa1/sound/songs/midi/song141.mid b/sa1/sound/songs/midi/song141.mid new file mode 100755 index 0000000000..a13a626e3c Binary files /dev/null and b/sa1/sound/songs/midi/song141.mid differ diff --git a/sa1/sound/songs/midi/song142.mid b/sa1/sound/songs/midi/song142.mid new file mode 100755 index 0000000000..cf613ec4ce Binary files /dev/null and b/sa1/sound/songs/midi/song142.mid differ diff --git a/sa1/sound/songs/midi/song143.mid b/sa1/sound/songs/midi/song143.mid new file mode 100755 index 0000000000..e46e8f016b Binary files /dev/null and b/sa1/sound/songs/midi/song143.mid differ diff --git a/sa1/sound/songs/midi/song144.mid b/sa1/sound/songs/midi/song144.mid new file mode 100755 index 0000000000..39818abab7 Binary files /dev/null and b/sa1/sound/songs/midi/song144.mid differ diff --git a/sa1/sound/songs/midi/song145.mid b/sa1/sound/songs/midi/song145.mid new file mode 100755 index 0000000000..9e80403014 Binary files /dev/null and b/sa1/sound/songs/midi/song145.mid differ diff --git a/sa1/sound/songs/midi/song146.mid b/sa1/sound/songs/midi/song146.mid new file mode 100755 index 0000000000..0f7babb609 Binary files /dev/null and b/sa1/sound/songs/midi/song146.mid differ diff --git a/sa1/sound/songs/midi/song147.mid b/sa1/sound/songs/midi/song147.mid new file mode 100755 index 0000000000..9924c3b81d Binary files /dev/null and b/sa1/sound/songs/midi/song147.mid differ diff --git a/sa1/sound/songs/midi/song148.mid b/sa1/sound/songs/midi/song148.mid new file mode 100755 index 0000000000..6c5fd74de7 Binary files /dev/null and b/sa1/sound/songs/midi/song148.mid differ diff --git a/sa1/sound/songs/midi/song149.mid b/sa1/sound/songs/midi/song149.mid new file mode 100755 index 0000000000..b205865213 Binary files /dev/null and b/sa1/sound/songs/midi/song149.mid differ diff --git a/sa1/sound/songs/midi/song150.mid b/sa1/sound/songs/midi/song150.mid new file mode 100755 index 0000000000..509405ea46 Binary files /dev/null and b/sa1/sound/songs/midi/song150.mid differ diff --git a/sa1/sound/songs/midi/song151.mid b/sa1/sound/songs/midi/song151.mid new file mode 100755 index 0000000000..034c738776 Binary files /dev/null and b/sa1/sound/songs/midi/song151.mid differ diff --git a/sa1/sound/songs/midi/song152.mid b/sa1/sound/songs/midi/song152.mid new file mode 100755 index 0000000000..1b72142fb7 Binary files /dev/null and b/sa1/sound/songs/midi/song152.mid differ diff --git a/sa1/sound/songs/midi/song153.mid b/sa1/sound/songs/midi/song153.mid new file mode 100755 index 0000000000..e817613e02 Binary files /dev/null and b/sa1/sound/songs/midi/song153.mid differ diff --git a/sa1/sound/songs/midi/song154.mid b/sa1/sound/songs/midi/song154.mid new file mode 100755 index 0000000000..c46cfa7b7b Binary files /dev/null and b/sa1/sound/songs/midi/song154.mid differ diff --git a/sa1/sound/songs/midi/song155.mid b/sa1/sound/songs/midi/song155.mid new file mode 100755 index 0000000000..f37e1f6065 Binary files /dev/null and b/sa1/sound/songs/midi/song155.mid differ diff --git a/sa1/sound/songs/midi/song156.mid b/sa1/sound/songs/midi/song156.mid new file mode 100755 index 0000000000..997e1b46b4 Binary files /dev/null and b/sa1/sound/songs/midi/song156.mid differ diff --git a/sa1/sound/songs/midi/song157.mid b/sa1/sound/songs/midi/song157.mid new file mode 100755 index 0000000000..91730a5ec7 Binary files /dev/null and b/sa1/sound/songs/midi/song157.mid differ diff --git a/sa1/sound/songs/midi/song158.mid b/sa1/sound/songs/midi/song158.mid new file mode 100755 index 0000000000..158f6c152e Binary files /dev/null and b/sa1/sound/songs/midi/song158.mid differ diff --git a/sa1/sound/songs/midi/song159.mid b/sa1/sound/songs/midi/song159.mid new file mode 100755 index 0000000000..c1e3c065c1 Binary files /dev/null and b/sa1/sound/songs/midi/song159.mid differ diff --git a/sa1/sound/songs/midi/song160.mid b/sa1/sound/songs/midi/song160.mid new file mode 100755 index 0000000000..a216b0650f Binary files /dev/null and b/sa1/sound/songs/midi/song160.mid differ diff --git a/sa1/sound/songs/midi/song161.mid b/sa1/sound/songs/midi/song161.mid new file mode 100755 index 0000000000..e794c08f60 Binary files /dev/null and b/sa1/sound/songs/midi/song161.mid differ diff --git a/sa1/sound/songs/midi/song162.mid b/sa1/sound/songs/midi/song162.mid new file mode 100755 index 0000000000..00d995042b Binary files /dev/null and b/sa1/sound/songs/midi/song162.mid differ diff --git a/sa1/sound/songs/midi/song163.mid b/sa1/sound/songs/midi/song163.mid new file mode 100755 index 0000000000..7eb2d6ac5f Binary files /dev/null and b/sa1/sound/songs/midi/song163.mid differ diff --git a/sa1/sound/songs/midi/song164.mid b/sa1/sound/songs/midi/song164.mid new file mode 100755 index 0000000000..80161707df Binary files /dev/null and b/sa1/sound/songs/midi/song164.mid differ diff --git a/sa1/sound/songs/midi/song166.mid b/sa1/sound/songs/midi/song166.mid new file mode 100755 index 0000000000..374cc31891 Binary files /dev/null and b/sa1/sound/songs/midi/song166.mid differ diff --git a/sa1/sound/songs/midi/song167.mid b/sa1/sound/songs/midi/song167.mid new file mode 100755 index 0000000000..3ee0a8de95 Binary files /dev/null and b/sa1/sound/songs/midi/song167.mid differ diff --git a/sa1/sound/songs/midi/song168.mid b/sa1/sound/songs/midi/song168.mid new file mode 100755 index 0000000000..f6c7763fc8 Binary files /dev/null and b/sa1/sound/songs/midi/song168.mid differ diff --git a/sa1/sound/songs/midi/song169.mid b/sa1/sound/songs/midi/song169.mid new file mode 100755 index 0000000000..132eda40bb Binary files /dev/null and b/sa1/sound/songs/midi/song169.mid differ diff --git a/sa1/sound/songs/midi/song170.mid b/sa1/sound/songs/midi/song170.mid new file mode 100755 index 0000000000..6c5fd74de7 Binary files /dev/null and b/sa1/sound/songs/midi/song170.mid differ diff --git a/sa1/sound/songs/midi/song171.mid b/sa1/sound/songs/midi/song171.mid new file mode 100755 index 0000000000..f4cec276a8 Binary files /dev/null and b/sa1/sound/songs/midi/song171.mid differ diff --git a/sa1/sound/songs/midi/song172.mid b/sa1/sound/songs/midi/song172.mid new file mode 100755 index 0000000000..1f84f9108a Binary files /dev/null and b/sa1/sound/songs/midi/song172.mid differ diff --git a/sa1/sound/songs/midi/song173.mid b/sa1/sound/songs/midi/song173.mid new file mode 100755 index 0000000000..87b790fd24 Binary files /dev/null and b/sa1/sound/songs/midi/song173.mid differ diff --git a/sa1/sound/songs/midi/song174.mid b/sa1/sound/songs/midi/song174.mid new file mode 100755 index 0000000000..5b463b3ba0 Binary files /dev/null and b/sa1/sound/songs/midi/song174.mid differ diff --git a/sa1/sound/songs/midi/song175.mid b/sa1/sound/songs/midi/song175.mid new file mode 100755 index 0000000000..50b788d7e7 Binary files /dev/null and b/sa1/sound/songs/midi/song175.mid differ diff --git a/sa1/sound/songs/midi/song176.mid b/sa1/sound/songs/midi/song176.mid new file mode 100755 index 0000000000..e5bd364670 Binary files /dev/null and b/sa1/sound/songs/midi/song176.mid differ diff --git a/sa1/sound/songs/midi/song177.mid b/sa1/sound/songs/midi/song177.mid new file mode 100755 index 0000000000..2247d78485 Binary files /dev/null and b/sa1/sound/songs/midi/song177.mid differ diff --git a/sa1/sound/songs/midi/song178.mid b/sa1/sound/songs/midi/song178.mid new file mode 100755 index 0000000000..8cb53e450a Binary files /dev/null and b/sa1/sound/songs/midi/song178.mid differ diff --git a/sa1/sound/songs/midi/song179.mid b/sa1/sound/songs/midi/song179.mid new file mode 100755 index 0000000000..71f174d347 Binary files /dev/null and b/sa1/sound/songs/midi/song179.mid differ diff --git a/sa1/sound/songs/midi/song180.mid b/sa1/sound/songs/midi/song180.mid new file mode 100755 index 0000000000..ba80ffca33 Binary files /dev/null and b/sa1/sound/songs/midi/song180.mid differ diff --git a/sa1/sound/songs/midi/song181.mid b/sa1/sound/songs/midi/song181.mid new file mode 100755 index 0000000000..bdfad30715 Binary files /dev/null and b/sa1/sound/songs/midi/song181.mid differ diff --git a/sa1/sound/songs/midi/song182.mid b/sa1/sound/songs/midi/song182.mid new file mode 100755 index 0000000000..ace885aff6 Binary files /dev/null and b/sa1/sound/songs/midi/song182.mid differ diff --git a/sa1/sound/songs/midi/song183.mid b/sa1/sound/songs/midi/song183.mid new file mode 100755 index 0000000000..86597d837d Binary files /dev/null and b/sa1/sound/songs/midi/song183.mid differ diff --git a/sa1/sound/songs/midi/song184.mid b/sa1/sound/songs/midi/song184.mid new file mode 100755 index 0000000000..3dfecf7da8 Binary files /dev/null and b/sa1/sound/songs/midi/song184.mid differ diff --git a/sa1/sound/songs/midi/song185.mid b/sa1/sound/songs/midi/song185.mid new file mode 100755 index 0000000000..8f1c5937b0 Binary files /dev/null and b/sa1/sound/songs/midi/song185.mid differ diff --git a/sa1/sound/songs/midi/song188.mid b/sa1/sound/songs/midi/song188.mid new file mode 100755 index 0000000000..d278a0bce5 Binary files /dev/null and b/sa1/sound/songs/midi/song188.mid differ diff --git a/sa1/sound/songs/midi/song189.mid b/sa1/sound/songs/midi/song189.mid new file mode 100755 index 0000000000..8b185b6dc1 Binary files /dev/null and b/sa1/sound/songs/midi/song189.mid differ diff --git a/sa1/sound/songs/midi/song190.mid b/sa1/sound/songs/midi/song190.mid new file mode 100755 index 0000000000..aee8b4aefb Binary files /dev/null and b/sa1/sound/songs/midi/song190.mid differ diff --git a/sa1/sound/songs/midi/song191.mid b/sa1/sound/songs/midi/song191.mid new file mode 100755 index 0000000000..de4a9968c4 Binary files /dev/null and b/sa1/sound/songs/midi/song191.mid differ diff --git a/sa1/sound/songs/midi/song192.mid b/sa1/sound/songs/midi/song192.mid new file mode 100755 index 0000000000..4dfca4ef3c Binary files /dev/null and b/sa1/sound/songs/midi/song192.mid differ diff --git a/sa1/sound/songs/midi/song193.mid b/sa1/sound/songs/midi/song193.mid new file mode 100755 index 0000000000..32147df355 Binary files /dev/null and b/sa1/sound/songs/midi/song193.mid differ diff --git a/sa1/sound/songs/midi/song194.mid b/sa1/sound/songs/midi/song194.mid new file mode 100755 index 0000000000..2eee7c19e0 Binary files /dev/null and b/sa1/sound/songs/midi/song194.mid differ diff --git a/sa1/sound/songs/midi/song195.mid b/sa1/sound/songs/midi/song195.mid new file mode 100755 index 0000000000..064cb09514 Binary files /dev/null and b/sa1/sound/songs/midi/song195.mid differ diff --git a/sa1/sound/songs/midi/song196.mid b/sa1/sound/songs/midi/song196.mid new file mode 100755 index 0000000000..7daa19dfb6 Binary files /dev/null and b/sa1/sound/songs/midi/song196.mid differ diff --git a/sa1/sound/songs/midi/song198.mid b/sa1/sound/songs/midi/song198.mid new file mode 100755 index 0000000000..0ef537b73e Binary files /dev/null and b/sa1/sound/songs/midi/song198.mid differ diff --git a/sa1/sound/songs/midi/song199.mid b/sa1/sound/songs/midi/song199.mid new file mode 100755 index 0000000000..e217c9b572 Binary files /dev/null and b/sa1/sound/songs/midi/song199.mid differ diff --git a/sa1/sound/songs/midi/song200.mid b/sa1/sound/songs/midi/song200.mid new file mode 100755 index 0000000000..b5788e445d Binary files /dev/null and b/sa1/sound/songs/midi/song200.mid differ diff --git a/sa1/sound/songs/midi/song201.mid b/sa1/sound/songs/midi/song201.mid new file mode 100755 index 0000000000..3d9edbcc68 Binary files /dev/null and b/sa1/sound/songs/midi/song201.mid differ diff --git a/sa1/sound/songs/midi/song202.mid b/sa1/sound/songs/midi/song202.mid new file mode 100755 index 0000000000..9342981d74 Binary files /dev/null and b/sa1/sound/songs/midi/song202.mid differ diff --git a/sa1/sound/songs/midi/song203.mid b/sa1/sound/songs/midi/song203.mid new file mode 100755 index 0000000000..6ec6ce32f2 Binary files /dev/null and b/sa1/sound/songs/midi/song203.mid differ diff --git a/sa1/sound/songs/midi/song204.mid b/sa1/sound/songs/midi/song204.mid new file mode 100755 index 0000000000..436a5a6083 Binary files /dev/null and b/sa1/sound/songs/midi/song204.mid differ diff --git a/sa1/sound/songs/midi/song205.mid b/sa1/sound/songs/midi/song205.mid new file mode 100755 index 0000000000..2526fe85fe Binary files /dev/null and b/sa1/sound/songs/midi/song205.mid differ diff --git a/sa1/sound/songs/midi/song206.mid b/sa1/sound/songs/midi/song206.mid new file mode 100755 index 0000000000..ec0ad9d639 Binary files /dev/null and b/sa1/sound/songs/midi/song206.mid differ diff --git a/sa1/sound/songs/midi/song207.mid b/sa1/sound/songs/midi/song207.mid new file mode 100755 index 0000000000..1473546648 Binary files /dev/null and b/sa1/sound/songs/midi/song207.mid differ diff --git a/sa1/sound/songs/midi/song208.mid b/sa1/sound/songs/midi/song208.mid new file mode 100755 index 0000000000..bf4d6af6ba Binary files /dev/null and b/sa1/sound/songs/midi/song208.mid differ diff --git a/sa1/sound/songs/midi/song209.mid b/sa1/sound/songs/midi/song209.mid new file mode 100755 index 0000000000..3a13c1fc1c Binary files /dev/null and b/sa1/sound/songs/midi/song209.mid differ diff --git a/sa1/sound/songs/midi/song210.mid b/sa1/sound/songs/midi/song210.mid new file mode 100755 index 0000000000..69b68468a6 Binary files /dev/null and b/sa1/sound/songs/midi/song210.mid differ diff --git a/sa1/sound/songs/midi/song211.mid b/sa1/sound/songs/midi/song211.mid new file mode 100755 index 0000000000..a6f5953ece Binary files /dev/null and b/sa1/sound/songs/midi/song211.mid differ diff --git a/sa1/sound/songs/midi/song212.mid b/sa1/sound/songs/midi/song212.mid new file mode 100755 index 0000000000..46649a7f02 Binary files /dev/null and b/sa1/sound/songs/midi/song212.mid differ diff --git a/sa1/sound/songs/midi/song213.mid b/sa1/sound/songs/midi/song213.mid new file mode 100755 index 0000000000..208633ff84 Binary files /dev/null and b/sa1/sound/songs/midi/song213.mid differ diff --git a/sa1/sound/songs/midi/song214.mid b/sa1/sound/songs/midi/song214.mid new file mode 100755 index 0000000000..292e5e8f21 Binary files /dev/null and b/sa1/sound/songs/midi/song214.mid differ diff --git a/sa1/sound/songs/midi/song215.mid b/sa1/sound/songs/midi/song215.mid new file mode 100755 index 0000000000..b2d5831957 Binary files /dev/null and b/sa1/sound/songs/midi/song215.mid differ diff --git a/sa1/sound/songs/midi/song216.mid b/sa1/sound/songs/midi/song216.mid new file mode 100755 index 0000000000..d1b2e5c266 Binary files /dev/null and b/sa1/sound/songs/midi/song216.mid differ diff --git a/sa1/sound/songs/midi/song217.mid b/sa1/sound/songs/midi/song217.mid new file mode 100755 index 0000000000..9a60df48f1 Binary files /dev/null and b/sa1/sound/songs/midi/song217.mid differ diff --git a/sa1/sound/songs/midi/song218.mid b/sa1/sound/songs/midi/song218.mid new file mode 100755 index 0000000000..1a00822147 Binary files /dev/null and b/sa1/sound/songs/midi/song218.mid differ diff --git a/sa1/sound/songs/midi/song219.mid b/sa1/sound/songs/midi/song219.mid new file mode 100755 index 0000000000..527c6112f5 Binary files /dev/null and b/sa1/sound/songs/midi/song219.mid differ diff --git a/sa1/sound/songs/midi/song220.mid b/sa1/sound/songs/midi/song220.mid new file mode 100755 index 0000000000..9d27826e9a Binary files /dev/null and b/sa1/sound/songs/midi/song220.mid differ diff --git a/sa1/sound/songs/midi/song221.mid b/sa1/sound/songs/midi/song221.mid new file mode 100755 index 0000000000..9378c06c48 Binary files /dev/null and b/sa1/sound/songs/midi/song221.mid differ diff --git a/sa1/sound/songs/midi/song222.mid b/sa1/sound/songs/midi/song222.mid new file mode 100755 index 0000000000..5f40f33a46 Binary files /dev/null and b/sa1/sound/songs/midi/song222.mid differ diff --git a/sa1/sound/songs/midi/song223.mid b/sa1/sound/songs/midi/song223.mid new file mode 100755 index 0000000000..2de0a2ac0d Binary files /dev/null and b/sa1/sound/songs/midi/song223.mid differ diff --git a/sa1/sound/songs/midi/song224.mid b/sa1/sound/songs/midi/song224.mid new file mode 100755 index 0000000000..091c1605fc Binary files /dev/null and b/sa1/sound/songs/midi/song224.mid differ diff --git a/sa1/sound/songs/midi/song301.mid b/sa1/sound/songs/midi/song301.mid new file mode 100755 index 0000000000..d6ce820e42 Binary files /dev/null and b/sa1/sound/songs/midi/song301.mid differ diff --git a/sa1/sound/songs/midi/song302.mid b/sa1/sound/songs/midi/song302.mid new file mode 100755 index 0000000000..79d386b59b Binary files /dev/null and b/sa1/sound/songs/midi/song302.mid differ diff --git a/sa1/sound/songs/midi/song303.mid b/sa1/sound/songs/midi/song303.mid new file mode 100755 index 0000000000..dbc2167897 Binary files /dev/null and b/sa1/sound/songs/midi/song303.mid differ diff --git a/sa1/sound/songs/midi/song304.mid b/sa1/sound/songs/midi/song304.mid new file mode 100755 index 0000000000..56a91eeef5 Binary files /dev/null and b/sa1/sound/songs/midi/song304.mid differ diff --git a/sa1/sound/songs/midi/song305.mid b/sa1/sound/songs/midi/song305.mid new file mode 100755 index 0000000000..eac3a215aa Binary files /dev/null and b/sa1/sound/songs/midi/song305.mid differ diff --git a/sa1/sound/songs/midi/song306.mid b/sa1/sound/songs/midi/song306.mid new file mode 100755 index 0000000000..411484c150 Binary files /dev/null and b/sa1/sound/songs/midi/song306.mid differ diff --git a/sa1/sound/songs/midi/song307.mid b/sa1/sound/songs/midi/song307.mid new file mode 100755 index 0000000000..127b115fa5 Binary files /dev/null and b/sa1/sound/songs/midi/song307.mid differ diff --git a/sa1/sound/songs/song001.s b/sa1/sound/songs/song001.s new file mode 100644 index 0000000000..5c8ba284a0 --- /dev/null +++ b/sa1/sound/songs/song001.s @@ -0,0 +1,3446 @@ + .include "asm/macros/c_decl.inc" + .include "asm/macros/portable.inc" + .include "sound/MPlayDef.s" + + mSectionRodata + + @********************** Track 1 **********************@ + + mAlignWord + .global song001_1 +song001_1: @ 0x0879C304 + .byte KEYSH , 0 + .byte TEMPO , 90 + .byte VOICE , 127 + .byte VOL , v120 + .byte PAN , c_v + .byte BENDR , 3 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte TEMPO , 84 + .byte N05 , Cs1, v124 + .byte W06 + .byte Cs1, v108 + .byte W06 + .byte N05 + .byte W06 + .byte N11 + .byte W12 + .byte N05 + .byte W06 + .byte Gs1, v127 + .byte W06 + .byte N11 + .byte W12 + .byte N05 + .byte W06 + .byte Gn1 + .byte W06 + .byte N11 + .byte W12 + .byte N05 + .byte W06 + .byte N05 + .byte W06 + .byte Fs1 + .byte W06 + .byte Fn1 + .byte W06 + .byte Cn1, v108 + .byte W06 + .byte N11 , Cs1 + .byte W12 + .byte N05 + .byte W06 + .byte N05 + .byte W06 +song001_1_1: + .byte N12 , Cn1, v127 + .byte N96 , Cs2 + .byte W12 + .byte N12 , Cn1 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N12 , Dn1, v028 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cn1, v127 + .byte N24 , En1, v080 + .byte W12 + .byte PEND +song001_1_2: + .byte W12 + .byte N12 , Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v056 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte PEND +song001_1_3: + .byte N12 , Cn1, v127 + .byte N96 , Cs2 + .byte W12 + .byte N12 , Cn1 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N12 , Dn1, v028 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cn1, v127 + .byte N12 , En1, v080 + .byte W12 + .byte PEND + .byte Dn1, v056 + .byte W12 + .byte Cn1, v127 + .byte N12 , En1, v080 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v056 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v068 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte PATT + mPtr song001_1_1 + .byte PATT + mPtr song001_1_2 + .byte PATT + mPtr song001_1_3 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cn1, v127 + .byte N12 , En1, v080 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v056 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v068 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N06 + .byte N12 , Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N96 , Cs2 + .byte W12 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v028 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte N12 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v036 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v044 + .byte W12 +song001_1_4: + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v056 + .byte W12 + .byte Dn1 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v028 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte PEND + .byte Cn1, v127 + .byte N68 , Cs2 + .byte W24 + .byte N12 , Cs1 + .byte N12 , Dn1, v068 + .byte W12 + .byte Cn1, v127 + .byte N24 , En1, v056 + .byte W24 + .byte N12 , Gn1, v127 + .byte W12 + .byte Cn1 + .byte N92 , Cs2 + .byte W12 + .byte N12 , Gs1 + .byte W12 + .byte Cs1 + .byte W12 + .byte Cn1 + .byte N24 , En1, v056 + .byte W24 + .byte N12 , Cs1, v127 + .byte W12 + .byte Cn1 + .byte N12 , En1, v056 + .byte W24 + .byte Cn1, v127 + .byte N96 , Cs2 + .byte W24 + .byte N12 , Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v028 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte PATT + mPtr song001_1_4 + .byte PATT + mPtr song001_1_4 + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v056 + .byte W12 + .byte Dn1 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v068 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v056 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N24 , En1, v056 + .byte W12 + .byte N11 , Cs1, v127 + .byte W12 + .byte N05 + .byte W06 + .byte N05 + .byte W06 + .byte N12 , Cn1 + .byte N36 , En1, v056 + .byte W24 + .byte N12 , Cs1, v127 + .byte W12 + .byte Cn1 + .byte N36 , En1, v056 + .byte W24 + .byte N12 , Gn1, v127 + .byte W12 + .byte Cn1 + .byte N36 , En1, v056 + .byte W24 + .byte W12 + .byte N12 , Cs1, v127 + .byte W12 + .byte N06 + .byte W06 + .byte N06 + .byte W06 + .byte Cn1 + .byte W06 + .byte N06 + .byte W06 + .byte Gs1 + .byte W06 + .byte Gn1 + .byte W06 + .byte Cn1 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Cs1 + .byte W12 + .byte N06 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Cn1 + .byte N36 , En1, v056 + .byte W24 + .byte N12 , Cs1, v127 + .byte W12 + .byte Cn1 + .byte N36 , En1, v056 + .byte W24 + .byte N12 , Gn1, v127 + .byte W12 + .byte Cn1 + .byte N12 , En1, v056 + .byte W12 + .byte Cn1, v127 + .byte TIE , Cs2 + .byte W12 + .byte W96 + .byte EOT + .byte FINE + + @********************** Track 2 **********************@ + + .global song001_2 +song001_2: @ 0x0879C5AD + .byte KEYSH , 0 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 11 + .byte VOL , v047 + .byte PAN , c_v + .byte BENDR , 13 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 3 + .byte MODT , 0 + .byte W96 + .byte W96 + .byte W36 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOL , v055 + .byte W23 + .byte BEND , c_v-14 + .byte W01 + .byte N15 , Gs3, v120 + .byte W01 + .byte BEND , c_v-10 + .byte W01 + .byte c_v-5 + .byte W02 + .byte c_v + .byte W14 + .byte c_v-12 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-37 + .byte W01 + .byte c_v-60 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-34 + .byte W01 + .byte c_v-25 + .byte N11 , Gs3, v104 + .byte W01 + .byte BEND , c_v-16 + .byte W01 + .byte c_v + .byte W10 + .byte N11 , Cn4, v120 + .byte W12 + .byte N10 , Gs3, v112 + .byte W12 + .byte TIE , Dn4, v127 + .byte W12 + .byte W02 + .byte VOL , v053 + .byte W01 + .byte v048 + .byte W01 + .byte v044 + .byte W01 + .byte v038 + .byte W01 + .byte v033 + .byte W01 + .byte v029 + .byte W01 + .byte v023 + .byte W01 + .byte v017 + .byte W01 + .byte v013 + .byte W01 + .byte v007 + .byte W01 + .byte v001 + .byte W01 + .byte v000 + .byte W01 + .byte v000 + .byte W01 + .byte v002 + .byte W01 + .byte v003 + .byte W01 + .byte v005 + .byte W01 + .byte v006 + .byte W01 + .byte v008 + .byte W01 + .byte v009 + .byte W01 + .byte v011 + .byte W01 + .byte v013 + .byte W01 + .byte v014 + .byte W01 + .byte v016 + .byte W01 + .byte v017 + .byte W01 + .byte v018 + .byte W01 + .byte v019 + .byte W01 + .byte v021 + .byte W01 + .byte v022 + .byte W01 + .byte v024 + .byte W01 + .byte v025 + .byte W01 + .byte v027 + .byte W01 + .byte v028 + .byte W01 + .byte v029 + .byte W01 + .byte v031 + .byte W01 + .byte v032 + .byte W01 + .byte v034 + .byte W01 + .byte v034 + .byte W01 + .byte v036 + .byte W01 + .byte v037 + .byte W01 + .byte v039 + .byte W01 + .byte v040 + .byte W01 + .byte v042 + .byte W01 + .byte v043 + .byte W01 + .byte v045 + .byte W01 + .byte v046 + .byte W01 + .byte v048 + .byte W01 + .byte v050 + .byte W01 + .byte v051 + .byte W01 + .byte v052 + .byte W01 + .byte v053 + .byte W01 + .byte v055 + .byte W32 + .byte W02 + .byte EOT + .byte W10 + .byte W23 + .byte BEND , c_v-14 + .byte W01 + .byte N18 , Gs3, v120 + .byte W01 + .byte BEND , c_v-10 + .byte W01 + .byte c_v-5 + .byte W02 + .byte c_v + .byte W11 + .byte c_v + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v-22 + .byte W01 + .byte c_v-30 + .byte W01 + .byte c_v-37 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-60 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-34 + .byte W01 + .byte c_v-25 + .byte N11 , Gs3, v096 + .byte W01 + .byte BEND , c_v-16 + .byte W01 + .byte c_v + .byte W10 + .byte N10 , Cn4, v116 + .byte W12 + .byte N09 , Gs3, v108 + .byte W12 + .byte N10 , Ds4, v120 + .byte W10 + .byte BEND , c_v + .byte W02 + .byte W12 + .byte N32 , Dn4, v127 + .byte W09 + .byte VOL , v050 + .byte W01 + .byte v040 + .byte W01 + .byte v034 + .byte W01 + .byte v025 + .byte W01 + .byte v016 + .byte W03 + .byte v017 + .byte W01 + .byte v017 + .byte W01 + .byte v018 + .byte W02 + .byte v019 + .byte W01 + .byte v020 + .byte W01 + .byte v021 + .byte W01 + .byte v022 + .byte W02 + .byte v023 + .byte W01 + .byte v024 + .byte W01 + .byte v025 + .byte W01 + .byte v026 + .byte W02 + .byte v027 + .byte W01 + .byte v028 + .byte W01 + .byte v029 + .byte W01 + .byte v030 + .byte W02 + .byte v031 + .byte W01 + .byte v032 + .byte N11 + .byte W01 + .byte VOL , v033 + .byte W01 + .byte v034 + .byte W02 + .byte v034 + .byte W01 + .byte v035 + .byte W01 + .byte v036 + .byte W01 + .byte v037 + .byte W02 + .byte v038 + .byte W01 + .byte v039 + .byte W01 + .byte v040 + .byte W01 + .byte v041 + .byte N11 , Ds4 + .byte W02 + .byte VOL , v042 + .byte W01 + .byte v043 + .byte W01 + .byte v044 + .byte W01 + .byte v045 + .byte W02 + .byte v046 + .byte W01 + .byte v047 + .byte W01 + .byte v048 + .byte W01 + .byte v049 + .byte W02 + .byte v050 + .byte N23 , En4 + .byte W01 + .byte VOL , v051 + .byte W01 + .byte v051 + .byte W01 + .byte v052 + .byte W02 + .byte v053 + .byte W01 + .byte v055 + .byte W18 + .byte TIE , Fn3 + .byte W96 + .byte W44 + .byte W03 + .byte EOT + .byte W01 + .byte N44 , Gs3 + .byte W48 + .byte N92 , Gn3 + .byte W96 + .byte BEND , c_v + .byte N30 , Cn4 + .byte W18 + .byte BEND , c_v + .byte W01 + .byte c_v-4 + .byte W02 + .byte c_v-8 + .byte W01 + .byte c_v-13 + .byte W02 + .byte c_v-17 + .byte W01 + .byte c_v-22 + .byte W02 + .byte c_v-26 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-32 + .byte W01 + .byte c_v-35 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-19 + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v + .byte W01 + .byte c_v + .byte N30 + .byte W18 + .byte BEND , c_v + .byte W01 + .byte c_v-4 + .byte W02 + .byte c_v-8 + .byte W01 + .byte c_v-13 + .byte W02 + .byte c_v-17 + .byte W01 + .byte c_v-22 + .byte W02 + .byte c_v-26 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-32 + .byte W01 + .byte c_v-35 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-19 + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v + .byte W01 + .byte c_v + .byte N30 + .byte W18 + .byte BEND , c_v + .byte W01 + .byte c_v-4 + .byte W02 + .byte c_v-8 + .byte W01 + .byte c_v-13 + .byte W02 + .byte c_v-17 + .byte W01 + .byte c_v-22 + .byte W02 + .byte c_v-26 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-32 + .byte W01 + .byte c_v-35 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-19 + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v + .byte W01 + .byte N23 + .byte W24 + .byte N11 , Bn3 + .byte W12 + .byte As3 + .byte W12 + .byte An3 + .byte W12 + .byte N68 , Gs3 + .byte W24 + .byte W96 + .byte W48 + .byte N44 + .byte W48 + .byte N96 , Bn3 + .byte W96 + .byte W24 + .byte N09 , Fn3 + .byte W12 + .byte Gn3 + .byte W12 + .byte N08 , As3 + .byte W12 + .byte N32 , Ds4 + .byte W36 + .byte Gn3 + .byte W36 + .byte N28 , Gs3 + .byte W36 + .byte N76 , Cs4 + .byte W24 + .byte W60 + .byte N10 , As3 + .byte W12 + .byte N20 , Bn3 + .byte W22 + .byte BEND , c_v + .byte W01 + .byte c_v-13 + .byte W01 + .byte c_v-27 + .byte N72 , Cn4 + .byte W01 + .byte BEND , c_v-55 + .byte W01 + .byte c_v-59 + .byte W12 + .byte c_v-59 + .byte W01 + .byte c_v-56 + .byte W02 + .byte c_v-52 + .byte W01 + .byte c_v-48 + .byte W02 + .byte c_v-44 + .byte W01 + .byte c_v-40 + .byte W02 + .byte c_v-37 + .byte W01 + .byte c_v-33 + .byte W02 + .byte c_v-29 + .byte W01 + .byte c_v-25 + .byte W02 + .byte c_v-21 + .byte W01 + .byte c_v-18 + .byte W02 + .byte c_v-14 + .byte W01 + .byte c_v-10 + .byte W02 + .byte c_v-6 + .byte W01 + .byte c_v-2 + .byte W01 + .byte c_v + .byte W13 + .byte c_v + .byte W02 + .byte c_v+4 + .byte W01 + .byte c_v+9 + .byte W02 + .byte c_v+13 + .byte W01 + .byte c_v+18 + .byte W02 + .byte c_v+22 + .byte W01 + .byte c_v+27 + .byte W02 + .byte c_v+31 + .byte W01 + .byte c_v+36 + .byte W02 + .byte c_v+40 + .byte W01 + .byte c_v+45 + .byte W02 + .byte c_v+50 + .byte W01 + .byte c_v+54 + .byte W02 + .byte c_v+60 + .byte W02 + .byte N12 + .byte W12 + .byte N12 + .byte W12 + .byte FINE + + @********************** Track 3 **********************@ + + .global song001_3 +song001_3: @ 0x0879C804 + .byte KEYSH , 0 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 80 + .byte VOL , v120 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 0 + .byte MOD , 32 + .byte MODT , 2 + .byte W96 + .byte W96 + .byte W36 + .byte N22 , Ds3, v127 + .byte W24 + .byte N17 + .byte W18 + .byte N05 , Dn3 + .byte W06 + .byte Ds3 + .byte W06 + .byte Dn3 + .byte W06 + .byte N07 , Ds3 + .byte W24 + .byte TIE , Fn3 + .byte W12 + .byte W92 + .byte W03 + .byte EOT + .byte W01 +song001_3_1: + .byte W24 + .byte N17 , Ds3, v127 + .byte W18 + .byte N05 , Dn3 + .byte W06 + .byte Ds3 + .byte W06 + .byte Dn3 + .byte W06 + .byte N07 , Ds3 + .byte W24 + .byte N18 , Fn3 + .byte W12 + .byte PEND + .byte W12 + .byte N78 + .byte W84 + .byte W24 + .byte N17 , Ds3 + .byte W18 + .byte N05 , Dn3 + .byte W06 + .byte Ds3 + .byte W06 + .byte Dn3 + .byte W06 + .byte N07 , Ds3 + .byte W24 + .byte TIE , Fn3 + .byte W12 + .byte W92 + .byte W03 + .byte EOT + .byte W01 + .byte PATT + mPtr song001_3_1 + .byte W12 + .byte N32 , Fn3, v127 + .byte W36 + .byte N11 , Fn3, v104 + .byte W12 + .byte Fs3, v112 + .byte W12 + .byte N19 , Gn3, v108 + .byte W24 + .byte TIE , Gs3, v120 + .byte W96 + .byte W92 + .byte W03 + .byte EOT + .byte W01 + .byte N92 , Gn3, v104 + .byte W96 + .byte N28 + .byte W36 + .byte N30 , Gn3, v084 + .byte W36 + .byte Gn3, v116 + .byte W24 + .byte W12 + .byte N21 , Gn3, v120 + .byte W24 + .byte N11 , Fs3, v112 + .byte W12 + .byte Fn3, v104 + .byte W12 + .byte En3, v092 + .byte W12 + .byte TIE , Ds3, v096 + .byte W24 + .byte W96 + .byte W92 + .byte W03 + .byte EOT + .byte W01 + .byte TIE , Dn3, v108 + .byte W96 + .byte W32 + .byte W03 + .byte EOT + .byte W01 + .byte N14 , Dn3, v112 + .byte W24 + .byte N30 , Dn3, v108 + .byte W30 + .byte FINE + + @********************** Track 4 **********************@ + + .global song001_4 +song001_4: @ 0x0879C8B6 + .byte KEYSH , 0 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 87 + .byte VOL , v093 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 0 + .byte MOD , 32 + .byte MODT , 2 + .byte W96 + .byte W96 + .byte W36 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W72 + .byte N02 , Dn2, v040 + .byte W03 + .byte Ds2, v092 + .byte W02 + .byte Fn2, v044 + .byte W03 + .byte N01 , Gn2, v068 + .byte W02 + .byte An2, v096 + .byte W02 + .byte As2, v108 + .byte W02 + .byte Dn3, v120 + .byte W01 + .byte N02 , Ds3, v112 + .byte W04 + .byte N01 , An3, v116 + .byte W01 + .byte As3, v104 + .byte W01 + .byte Cn4, v092 + .byte W02 + .byte N02 , Dn4, v080 + .byte W01 + .byte W02 + .byte N01 , Ds4, v020 + .byte W01 + .byte N04 , En4, v096 + .byte W05 + .byte N48 , Fn4, v092 + .byte W48 + .byte W03 + .byte N04 , En4, v100 + .byte W06 + .byte Ds4, v096 + .byte W06 + .byte N05 , Cs4, v084 + .byte W08 + .byte N02 , As3, v032 + .byte W04 + .byte N05 , Ds4, v116 + .byte W06 + .byte Cs4, v096 + .byte W07 + .byte N04 , As3, v060 + .byte W07 + .byte N03 , Gs3, v068 + .byte W05 + .byte N06 , Cs4, v116 + .byte W06 + .byte N05 , As3, v096 + .byte W06 + .byte Gs3, v104 + .byte W07 + .byte Fn3, v084 + .byte W16 + .byte Gs3, v108 + .byte W08 + .byte N02 , Fn3, v056 + .byte W05 + .byte N05 , As3, v100 + .byte W09 + .byte N02 , Fn3, v028 + .byte W03 + .byte N05 , Bn3, v116 + .byte W06 + .byte As3, v088 + .byte W06 + .byte N06 , Gs3, v104 + .byte W07 + .byte N04 , Fn3, v084 + .byte W05 + .byte N06 , Bn3, v096 + .byte W06 + .byte N07 , Cn4, v104 + .byte W12 + .byte N05 , Bn3, v120 + .byte W12 + .byte As3, v096 + .byte W11 + .byte Gs3, v116 + .byte W06 + .byte Gn3, v092 + .byte W07 + .byte N04 , Fn3, v100 + .byte W06 + .byte N05 , En3, v088 + .byte W06 + .byte Gn3, v116 + .byte W07 + .byte Cs3, v108 + .byte W11 + .byte N09 , Ds3, v116 + .byte W10 + .byte N04 , Cs3, v104 + .byte W02 + .byte W04 + .byte N03 , Cn3, v076 + .byte W04 + .byte N04 , Ds3, v084 + .byte W05 + .byte N03 , Dn3, v088 + .byte W03 + .byte N05 , Cs3, v072 + .byte W06 + .byte Cn3, v100 + .byte W06 + .byte Bn2, v092 + .byte W05 + .byte N03 , As2, v060 + .byte W06 + .byte N05 , Gs2, v084 + .byte W06 + .byte Gn2 + .byte W07 + .byte N02 , Fn2, v068 + .byte W06 + .byte N04 , Gs2, v108 + .byte W06 + .byte N02 , Fn2, v048 + .byte W05 + .byte N05 , Gn2, v076 + .byte W06 + .byte Gs2, v096 + .byte W07 + .byte As2, v064 + .byte W06 + .byte Bn2, v072 + .byte W06 + .byte N06 , Cn3 + .byte W02 + .byte W05 + .byte N05 , Ds3, v092 + .byte W06 + .byte Gn3, v080 + .byte W07 + .byte N06 , As3, v108 + .byte W08 + .byte N04 , Gn3, v024 + .byte W04 + .byte N07 , Gs3, v100 + .byte W08 + .byte N05 , Gn3, v072 + .byte W05 + .byte N03 , Fs3, v076 + .byte W05 + .byte N04 , Fn3, v084 + .byte W06 + .byte N05 , En3, v080 + .byte W06 + .byte N03 , Ds3, v068 + .byte W06 + .byte N06 , Cs3 + .byte W30 + .byte W08 + .byte N01 , Bn2, v080 + .byte W02 + .byte N02 , As2, v040 + .byte W04 + .byte N10 , Cn3, v096 + .byte W12 + .byte N23 , Ds3, v124 + .byte W24 + .byte N03 , Cn3, v092 + .byte W05 + .byte N04 , Ds3, v084 + .byte W05 + .byte N12 , Fs3, v124 + .byte W13 + .byte N04 , Ds3, v072 + .byte W06 + .byte Fs3, v100 + .byte W05 + .byte N12 , Gs3, v124 + .byte W12 + .byte N03 , Fs3, v080 + .byte W04 + .byte N06 , Gs3, v064 + .byte W07 + .byte N12 , As3, v116 + .byte W12 + .byte N05 , Gs3, v096 + .byte W07 + .byte As3, v080 + .byte W05 + .byte N10 , Cn4, v120 + .byte W12 + .byte N02 , As3, v076 + .byte W06 + .byte N05 , Cn4, v100 + .byte W06 + .byte N11 , Ds4, v120 + .byte W13 + .byte N03 , Cn4, v052 + .byte W06 + .byte N05 , Ds4, v096 + .byte W06 + .byte Fn4, v120 + .byte W06 + .byte N06 , Fs4, v124 + .byte W06 + .byte N22 , Gn4, v112 + .byte W24 + .byte W01 + .byte N04 , Fs4 + .byte W06 + .byte Fn4 + .byte W05 + .byte Ds4, v096 + .byte W06 + .byte N05 , Dn4 + .byte W06 + .byte N04 , Cn4, v084 + .byte W07 + .byte As3, v068 + .byte W06 + .byte N02 , Bn3, v104 + .byte W05 + .byte N06 , Gn4, v124 + .byte W07 + .byte N04 , Bn3, v092 + .byte W06 + .byte N02 , As3, v072 + .byte W06 + .byte N04 , Gs3, v104 + .byte W05 + .byte Gn3, v076 + .byte W06 + .byte N05 , Fn3, v084 + .byte W06 + .byte Gn3 + .byte W06 + .byte N06 , Cn4, v108 + .byte W07 + .byte N04 , Gn3, v076 + .byte W05 + .byte Fn3, v092 + .byte W06 + .byte N02 , En3, v088 + .byte W05 + .byte Ds3, v092 + .byte W05 + .byte N05 , Cs3 + .byte W06 + .byte N02 , Bn2, v048 + .byte W02 + .byte N04 , As2, v088 + .byte W05 + .byte N05 , Ds3, v120 + .byte W06 + .byte N04 , Cs3, v112 + .byte W05 + .byte N02 , Bn2, v080 + .byte W03 + .byte As2, v096 + .byte W02 + .byte N05 , An2, v072 + .byte W06 + .byte N03 , Gn2, v056 + .byte W04 + .byte N02 , Fn2, v060 + .byte W03 + .byte N08 , Ds2, v088 + .byte W08 + .byte N04 , As1, v084 + .byte W06 + .byte W96 + .byte W96 + .byte N36 , As1, v124 + .byte N36 , As2, v104 + .byte W36 + .byte Bn1, v124 + .byte N36 , Bn2, v104 + .byte W36 + .byte N12 , Cn2, v124 + .byte N12 , Cn3, v104 + .byte W12 + .byte Cn2, v124 + .byte N12 , Cn3, v104 + .byte W12 + .byte FINE + + @********************** Track 5 **********************@ + + .global song001_5 +song001_5: @ 0x0879CADA + .byte KEYSH , 0 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 3 + .byte VOL , v066 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W96 + .byte W96 + .byte W36 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N06 , Gs3, v112 + .byte W06 + .byte Cn4, v108 + .byte W06 + .byte Ds4 + .byte W06 + .byte Gs4, v096 + .byte W06 + .byte As4, v108 + .byte W06 + .byte Cn5, v104 + .byte W06 + .byte Fn3, v108 + .byte W06 + .byte Gs3, v116 + .byte W06 + .byte Cs4 + .byte W06 + .byte Ds4, v096 + .byte W06 + .byte Fn4, v116 + .byte W06 + .byte Gs4, v124 + .byte W06 + .byte Cs3, v096 + .byte W06 + .byte Fs3, v116 + .byte W06 + .byte Gs3, v112 + .byte W06 + .byte As3, v104 + .byte W06 + .byte Cs4, v108 + .byte W06 + .byte Fs4, v120 + .byte W06 + .byte Gs4, v108 + .byte W06 + .byte As4, v116 + .byte W06 + .byte Cs5 + .byte W06 + .byte As4, v108 + .byte W06 + .byte Fs4, v112 + .byte W06 + .byte Cs4, v104 + .byte W06 + .byte As4 + .byte W06 + .byte Fs4, v124 + .byte W06 + .byte Cs4, v112 + .byte W06 + .byte As3, v088 + .byte W06 + .byte Cs4, v124 + .byte W06 + .byte As3, v108 + .byte W06 + .byte Fs3, v116 + .byte W06 + .byte Cs3, v127 + .byte W06 + .byte N36 , Cn4, v112 + .byte W36 + .byte N36 + .byte W36 + .byte N12 , Cn4, v108 + .byte W12 + .byte N12 + .byte W12 + .byte FINE + + @********************** Track 6 **********************@ + + .global song001_6 +song001_6: @ 0x0879CB72 + .byte KEYSH , 0 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 72 + .byte VOL , v120 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 0 + .byte MOD , 32 + .byte MODT , 2 + .byte W96 + .byte W96 + .byte W36 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N36 , Cn3, v096 + .byte W36 + .byte Fn3 + .byte W36 + .byte TIE , As2 + .byte W24 + .byte W96 + .byte EOT + .byte FINE + + @********************** Track 7 **********************@ + + .global song001_7 +song001_7: @ 0x0879CBAC + .byte KEYSH , 0 + .byte VOICE , 74 + .byte VOL , v070 + .byte PAN , c_v + .byte BENDR , 12 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 0 + .byte MODT , 2 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W72 + .byte VOL , v070 + .byte TIE , Fn1, v120 + .byte W24 + .byte W24 + .byte As2 + .byte W48 + .byte Ds3 + .byte W24 + .byte W23 + .byte EOT , Fn1 + .byte W01 + .byte TIE , Fn2 + .byte TIE , Gs3 + .byte W08 + .byte VOL , v070 + .byte W01 + .byte v068 + .byte W01 + .byte v067 + .byte W01 + .byte v065 + .byte W01 + .byte v063 + .byte W01 + .byte v061 + .byte W01 + .byte v059 + .byte W01 + .byte v057 + .byte W01 + .byte v055 + .byte W01 + .byte v053 + .byte W01 + .byte v051 + .byte W01 + .byte v050 + .byte W01 + .byte v048 + .byte W01 + .byte v046 + .byte W01 + .byte v044 + .byte W01 + .byte v042 + .byte W01 + .byte v040 + .byte W01 + .byte v038 + .byte W01 + .byte v037 + .byte W04 + .byte v038 + .byte W02 + .byte v039 + .byte W03 + .byte v040 + .byte W02 + .byte v041 + .byte W02 + .byte v042 + .byte W02 + .byte v043 + .byte W03 + .byte v044 + .byte W02 + .byte v045 + .byte W02 + .byte v046 + .byte W03 + .byte v047 + .byte W02 + .byte v048 + .byte W02 + .byte v049 + .byte W02 + .byte v050 + .byte W03 + .byte v051 + .byte W02 + .byte v051 + .byte W02 + .byte v052 + .byte W02 + .byte v053 + .byte W03 + .byte v054 + .byte W02 + .byte v055 + .byte W01 + .byte W01 + .byte v056 + .byte W03 + .byte v057 + .byte W02 + .byte v058 + .byte W02 + .byte v059 + .byte W02 + .byte v060 + .byte W03 + .byte v061 + .byte W02 + .byte v062 + .byte W02 + .byte v063 + .byte W02 + .byte v064 + .byte W03 + .byte v065 + .byte W02 + .byte v066 + .byte W02 + .byte v067 + .byte W03 + .byte v068 + .byte W02 + .byte v068 + .byte W02 + .byte v069 + .byte W02 + .byte v070 + .byte W03 + .byte v071 + .byte W02 + .byte v072 + .byte W02 + .byte v073 + .byte W03 + .byte v074 + .byte W02 + .byte v075 + .byte W02 + .byte v076 + .byte W02 + .byte v077 + .byte W03 + .byte v078 + .byte W02 + .byte v079 + .byte W02 + .byte v080 + .byte W02 + .byte v081 + .byte W03 + .byte v082 + .byte W02 + .byte v083 + .byte W02 + .byte v084 + .byte W03 + .byte v085 + .byte W02 + .byte v085 + .byte W02 + .byte v086 + .byte W02 + .byte v087 + .byte W03 + .byte v088 + .byte W02 + .byte v089 + .byte W02 + .byte v090 + .byte W02 + .byte v091 + .byte W01 + .byte v092 + .byte W17 + .byte EOT , Fn2 + .byte As2 + .byte Ds3 + .byte Gs3 + .byte W01 + .byte N04 , Fn2, v060 + .byte N04 , Fn3 + .byte W04 + .byte Gn2, v068 + .byte N04 , Gn3 + .byte W04 + .byte Gs2, v080 + .byte N04 , Gs3 + .byte W04 + .byte As2, v088 + .byte N04 , As3 + .byte W04 + .byte Cn3, v100 + .byte N04 , Cn4 + .byte W04 + .byte Dn3, v108 + .byte N04 , Dn4 + .byte W04 + .byte En3, v120 + .byte N04 , En4 + .byte W04 + .byte VOL , v094 + .byte N16 , Fn2, v127 + .byte N16 , Fn3 + .byte W23 + .byte BEND , c_v-14 + .byte W01 + .byte N16 , Gs2, v100 + .byte N16 , Cn3 + .byte W01 + .byte BEND , c_v-10 + .byte W01 + .byte c_v-5 + .byte W02 + .byte c_v + .byte W14 + .byte c_v-12 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-37 + .byte W01 + .byte c_v-60 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-34 + .byte W01 + .byte c_v-25 + .byte N11 , Gs2, v104 + .byte N11 , Cn3 + .byte W01 + .byte BEND , c_v-16 + .byte W01 + .byte c_v + .byte W10 + .byte N11 , Cn3, v116 + .byte N11 , Ds3 + .byte W12 + .byte N09 , Gs2, v112 + .byte N09 , Cn3 + .byte W12 + .byte TIE , Dn3, v124 + .byte TIE , Fn3 + .byte W12 + .byte W02 + .byte VOL , v092 + .byte W01 + .byte v086 + .byte W01 + .byte v083 + .byte W01 + .byte v077 + .byte W01 + .byte v071 + .byte W01 + .byte v068 + .byte W01 + .byte v062 + .byte W01 + .byte v056 + .byte W01 + .byte v051 + .byte W01 + .byte v046 + .byte W01 + .byte v040 + .byte W01 + .byte v038 + .byte W01 + .byte v039 + .byte W01 + .byte v041 + .byte W01 + .byte v042 + .byte W01 + .byte v044 + .byte W01 + .byte v045 + .byte W01 + .byte v047 + .byte W01 + .byte v048 + .byte W01 + .byte v050 + .byte W01 + .byte v051 + .byte W01 + .byte v052 + .byte W01 + .byte v054 + .byte W01 + .byte v055 + .byte W01 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v060 + .byte W01 + .byte v061 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v075 + .byte W01 + .byte v076 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v084 + .byte W01 + .byte v085 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W40 + .byte W01 + .byte EOT , Dn3 + .byte Fn3 + .byte W03 + .byte W23 + .byte BEND , c_v-14 + .byte W01 + .byte N15 , Gs2, v104 + .byte N15 , Cn3 + .byte W01 + .byte BEND , c_v-10 + .byte W01 + .byte c_v-5 + .byte W02 + .byte c_v + .byte W11 + .byte c_v + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v-22 + .byte W01 + .byte c_v-30 + .byte W01 + .byte c_v-37 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-60 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-34 + .byte W01 + .byte c_v-25 + .byte N11 , Gs2, v108 + .byte N11 , Cn3 + .byte W01 + .byte BEND , c_v-16 + .byte W01 + .byte c_v + .byte W10 + .byte N11 , Cn3, v112 + .byte N11 , Ds3 + .byte W12 + .byte N10 , Gs2, v096 + .byte N10 , Cn3 + .byte W12 + .byte Ds3, v120 + .byte N10 , Gn3 + .byte W10 + .byte BEND , c_v + .byte W02 + .byte W12 + .byte N80 , Dn3 + .byte N80 , Fn3 + .byte W09 + .byte VOL , v088 + .byte W01 + .byte v079 + .byte W01 + .byte v073 + .byte W01 + .byte v064 + .byte W01 + .byte v054 + .byte W03 + .byte v055 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W02 + .byte v058 + .byte W01 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v061 + .byte W02 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v065 + .byte W02 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v068 + .byte W02 + .byte v069 + .byte W01 + .byte v070 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W02 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v075 + .byte W01 + .byte v076 + .byte W02 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v080 + .byte W02 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W02 + .byte v085 + .byte W01 + .byte v085 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W02 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v090 + .byte W01 + .byte v091 + .byte W02 + .byte v092 + .byte W01 + .byte v094 + .byte W18 + .byte v094 + .byte W23 + .byte BEND , c_v-14 + .byte W01 + .byte N15 , Cn3 + .byte N15 , Fn3 + .byte W01 + .byte BEND , c_v-10 + .byte W01 + .byte c_v-5 + .byte W02 + .byte c_v + .byte W14 + .byte c_v-12 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-37 + .byte W01 + .byte c_v-60 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-34 + .byte W01 + .byte c_v-25 + .byte N11 , Cn3, v104 + .byte N11 , Fn3 + .byte W01 + .byte BEND , c_v-16 + .byte W01 + .byte c_v + .byte W10 + .byte N11 , Ds3, v120 + .byte N11 , Gs3 + .byte W12 + .byte N10 , Cn3, v112 + .byte N10 , Fn3 + .byte W12 + .byte TIE , Fn3, v127 + .byte TIE , As3 + .byte W12 + .byte W02 + .byte VOL , v092 + .byte W01 + .byte v086 + .byte W01 + .byte v083 + .byte W01 + .byte v077 + .byte W01 + .byte v071 + .byte W01 + .byte v068 + .byte W01 + .byte v062 + .byte W01 + .byte v056 + .byte W01 + .byte v051 + .byte W01 + .byte v046 + .byte W01 + .byte v040 + .byte W01 + .byte v038 + .byte W01 + .byte v039 + .byte W01 + .byte v041 + .byte W01 + .byte v042 + .byte W01 + .byte v044 + .byte W01 + .byte v045 + .byte W01 + .byte v047 + .byte W01 + .byte v048 + .byte W01 + .byte v050 + .byte W01 + .byte v051 + .byte W01 + .byte v052 + .byte W01 + .byte v054 + .byte W01 + .byte v055 + .byte W01 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v060 + .byte W01 + .byte v061 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v075 + .byte W01 + .byte v076 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v084 + .byte W01 + .byte v085 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W32 + .byte W02 + .byte EOT , Fn3 + .byte As3 + .byte W10 + .byte W23 + .byte BEND , c_v-14 + .byte W01 + .byte N18 , Cn3, v120 + .byte N18 , Fn3 + .byte W01 + .byte BEND , c_v-10 + .byte W01 + .byte c_v-5 + .byte W02 + .byte c_v + .byte W11 + .byte c_v + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v-22 + .byte W01 + .byte c_v-30 + .byte W01 + .byte c_v-37 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-60 + .byte W01 + .byte c_v-52 + .byte W01 + .byte c_v-34 + .byte W01 + .byte c_v-25 + .byte N11 , Cn3, v096 + .byte N11 , Fn3 + .byte W01 + .byte BEND , c_v-16 + .byte W01 + .byte c_v + .byte W10 + .byte N10 , Fn3, v116 + .byte N10 , Gs3 + .byte W12 + .byte N09 , Cn3, v108 + .byte N09 , Fn3 + .byte W12 + .byte N10 , Gs3, v120 + .byte N10 , Cn4 + .byte W10 + .byte BEND , c_v + .byte W02 + .byte W12 + .byte N32 , Fn3, v127 + .byte N32 , As3 + .byte W09 + .byte VOL , v088 + .byte W01 + .byte v079 + .byte W01 + .byte v073 + .byte W01 + .byte v064 + .byte W01 + .byte v054 + .byte W03 + .byte v055 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W02 + .byte v058 + .byte W01 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v061 + .byte W02 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v065 + .byte W02 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v068 + .byte W02 + .byte v069 + .byte W01 + .byte v070 + .byte N11 , Fn3 + .byte N11 , As3 + .byte W01 + .byte VOL , v071 + .byte W01 + .byte v072 + .byte W02 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v075 + .byte W01 + .byte v076 + .byte W02 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v080 + .byte N11 , Fs3 + .byte N11 , Bn3 + .byte W02 + .byte VOL , v081 + .byte W01 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W02 + .byte v085 + .byte W01 + .byte v085 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W02 + .byte v088 + .byte N23 , Gn3 + .byte N23 , Cn4 + .byte W01 + .byte VOL , v089 + .byte W01 + .byte v090 + .byte W01 + .byte v091 + .byte W02 + .byte v092 + .byte W01 + .byte v094 + .byte W18 + .byte N36 , Gs3 + .byte N36 , Cs4 + .byte W01 + .byte BEND , c_v + .byte W16 + .byte c_v + .byte W01 + .byte c_v-5 + .byte W02 + .byte c_v-10 + .byte W01 + .byte c_v-15 + .byte W02 + .byte c_v-20 + .byte W01 + .byte c_v-25 + .byte W02 + .byte c_v-30 + .byte W01 + .byte c_v-36 + .byte W02 + .byte c_v-41 + .byte W01 + .byte c_v-46 + .byte W02 + .byte c_v-51 + .byte W01 + .byte c_v-56 + .byte W02 + .byte c_v-64 + .byte W09 + .byte c_v-30 + .byte W01 + .byte c_v + .byte W03 + .byte N92 , Gs2 + .byte W48 + .byte Cs3 + .byte W48 + .byte N44 , Fn3 + .byte W48 + .byte N92 , Cn3 + .byte N92 , En3 + .byte W96 + .byte BEND , c_v + .byte N30 + .byte N30 , Gn3 + .byte W18 + .byte BEND , c_v + .byte W01 + .byte c_v-4 + .byte W02 + .byte c_v-8 + .byte W01 + .byte c_v-13 + .byte W02 + .byte c_v-17 + .byte W01 + .byte c_v-22 + .byte W02 + .byte c_v-26 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-32 + .byte W01 + .byte c_v-35 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-19 + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v + .byte W01 + .byte c_v + .byte N30 , En3 + .byte N30 , Gn3 + .byte W18 + .byte BEND , c_v + .byte W01 + .byte c_v-4 + .byte W02 + .byte c_v-8 + .byte W01 + .byte c_v-13 + .byte W02 + .byte c_v-17 + .byte W01 + .byte c_v-22 + .byte W02 + .byte c_v-26 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-32 + .byte W01 + .byte c_v-35 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-19 + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v + .byte W01 + .byte c_v + .byte N30 , En3 + .byte N30 , Gn3 + .byte W18 + .byte BEND , c_v + .byte W01 + .byte c_v-4 + .byte W02 + .byte c_v-8 + .byte W01 + .byte c_v-13 + .byte W02 + .byte c_v-17 + .byte W01 + .byte c_v-22 + .byte W02 + .byte c_v-26 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-32 + .byte W01 + .byte c_v-35 + .byte W01 + .byte c_v-31 + .byte W01 + .byte c_v-25 + .byte W01 + .byte c_v-19 + .byte W01 + .byte c_v-7 + .byte W01 + .byte c_v + .byte W01 + .byte N23 , En3 + .byte N23 , Gn3 + .byte W24 + .byte N11 , Ds3 + .byte N11 , Fs3 + .byte W12 + .byte Dn3 + .byte N11 , Fn3 + .byte W12 + .byte Cs3 + .byte N11 , En3 + .byte W12 + .byte N68 , Cn3 + .byte N68 , Ds3 + .byte W24 + .byte W48 + .byte N92 , Gs2 + .byte W48 + .byte Cn3 + .byte W48 + .byte N44 , Ds3 + .byte W48 + .byte N96 , Dn3 + .byte N96 , Gn3 + .byte W96 + .byte W24 + .byte N09 , Fn2 + .byte N09 , Fn3 + .byte W12 + .byte Gn2 + .byte N09 , Gn3 + .byte W12 + .byte N08 , As2 + .byte N08 , As3 + .byte W12 + .byte N32 , Ds3 + .byte N32 , Ds4 + .byte W36 + .byte Ds3 + .byte N32 , Cn4 + .byte W36 + .byte N28 , Fn3 + .byte N28 , Cn4 + .byte W36 + .byte N76 , Fn3 + .byte N76 , Cn4 + .byte W24 + .byte W60 + .byte N10 , As2 + .byte N10 , As3 + .byte W12 + .byte N20 , Bn2 + .byte N20 , Bn3 + .byte W24 + .byte N36 , Cn3 + .byte N36 , Cn4 + .byte W36 + .byte Cn3 + .byte N36 , Cn4 + .byte W36 + .byte N12 , Cn3 + .byte N12 , Cn4 + .byte W12 + .byte Cn3 + .byte N12 , Cn4 + .byte W12 + .byte FINE + + @********************** Track 8 **********************@ + + .global song001_8 +song001_8: @ 0x0879D05A + .byte KEYSH , 0 + .byte VOICE , 46 + .byte VOL , v066 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte TIE , Cn2, v120 + .byte W72 + .byte W96 + .byte W96 + .byte W92 + .byte W03 + .byte EOT + .byte W36 + .byte W01 +song001_8_1: + .byte N20 , Fn2, v127 + .byte W24 + .byte N14 + .byte W18 + .byte N04 + .byte W06 + .byte N09 + .byte W12 + .byte N10 , Gs2 + .byte W12 + .byte Fn2 + .byte W12 + .byte N16 , As2 + .byte W12 + .byte PEND +song001_8_2: + .byte W12 + .byte N07 , As2, v127 + .byte W12 + .byte N05 , Dn2 + .byte W06 + .byte N06 + .byte W12 + .byte N05 + .byte W06 + .byte N07 , Ds2 + .byte W12 + .byte N09 + .byte W12 + .byte N08 , En2 + .byte W12 + .byte N10 + .byte W12 + .byte PEND + .byte PATT + mPtr song001_8_1 + .byte W12 + .byte N10 , As2, v127 + .byte W12 + .byte N05 , Dn2 + .byte W06 + .byte N06 + .byte W12 + .byte N05 + .byte W06 + .byte N07 , Ds2 + .byte W12 + .byte N09 + .byte W12 + .byte N08 , En2 + .byte W12 + .byte N10 + .byte W12 + .byte PATT + mPtr song001_8_1 + .byte PATT + mPtr song001_8_2 + .byte PATT + mPtr song001_8_1 + .byte W12 + .byte N10 , As2, v127 + .byte W12 + .byte N05 + .byte W06 + .byte N06 + .byte W12 + .byte N04 + .byte W06 + .byte N11 + .byte W12 + .byte Bn2 + .byte W12 + .byte Cn3 + .byte W12 + .byte N10 , Gs2 + .byte W12 +song001_8_3: + .byte N07 , Cs3, v127 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte PEND + .byte PATT + mPtr song001_8_3 + .byte N07 , Cn3, v127 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N24 + .byte W36 + .byte N30 + .byte W36 + .byte N24 + .byte W24 + .byte W12 + .byte N23 + .byte W24 + .byte N11 , Bn2 + .byte W12 + .byte As2 + .byte W12 + .byte N10 , An2 + .byte W12 + .byte N20 , Gs2 + .byte W24 +song001_8_4: + .byte N07 , Gs2, v127 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte PEND + .byte PATT + mPtr song001_8_4 + .byte N07 , Gn2, v127 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N07 + .byte W12 + .byte N06 + .byte W12 + .byte N19 + .byte W24 + .byte N28 , Gs2 + .byte W36 + .byte Cs2 + .byte W36 + .byte TIE , Fs2 + .byte W24 + .byte W84 + .byte W01 + .byte EOT + .byte W11 + .byte N30 , As1 + .byte W36 + .byte Bn1 + .byte W36 + .byte N07 , Cn2 + .byte W12 + .byte N09 + .byte W09 + .byte FINE + + @********************** Track 9 **********************@ + + .global song001_9 +song001_9: @ 0x0879D173 + .byte KEYSH , 0 + .byte VOICE , 120 + .byte VOL , v085 + .byte PAN , c_v+63 + .byte BENDR , 3 + .byte W96 + .byte W96 + .byte W72 + .byte TIE , Cn3, v127 + .byte W24 + .byte W72 + .byte Fs3 + .byte W24 + .byte W96 + .byte W72 + .byte EOT , Cn3 + .byte W24 + .byte W72 + .byte Fs3 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W36 + .byte FINE + + @********************** Track 10 **********************@ + + .global song001_10 +song001_10: @ 0x0879D194 + .byte KEYSH , 0 + .byte VOICE , 120 + .byte VOL , v085 + .byte PAN , c_v-64 + .byte BENDR , 3 + .byte W96 + .byte W96 + .byte W72 + .byte W01 + .byte TIE , Cn3, v127 + .byte W23 + .byte W72 + .byte W01 + .byte Fs3 + .byte W23 + .byte W96 + .byte W72 + .byte W01 + .byte EOT , Cn3 + .byte W23 + .byte W72 + .byte W01 + .byte Fs3 + .byte W23 + .byte W96 + .byte W96 + .byte W96 + .byte W36 + .byte FINE + + @********************** Track 11 **********************@ + + .global song001_11 +song001_11: @ 0x0879D1B9 + .byte KEYSH , 0 + .byte VOICE , 121 + .byte VOL , v120 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 0 + .byte MODT , 2 + .byte BEND , c_v + .byte TIE , Cn3, v127 + .byte W08 + .byte VOL , v119 + .byte W04 + .byte v118 + .byte W04 + .byte v117 + .byte W04 + .byte v116 + .byte W04 + .byte v115 + .byte W04 + .byte v114 + .byte W04 + .byte v113 + .byte W04 + .byte v112 + .byte W04 + .byte v111 + .byte W04 + .byte v110 + .byte W04 + .byte v109 + .byte W04 + .byte v108 + .byte W04 + .byte v107 + .byte W04 + .byte v106 + .byte W04 + .byte v105 + .byte W04 + .byte v104 + .byte W04 + .byte v103 + .byte W04 + .byte v102 + .byte W05 + .byte v102 + .byte W04 + .byte v101 + .byte W04 + .byte v100 + .byte W04 + .byte v099 + .byte W03 + .byte W01 + .byte v098 + .byte W04 + .byte v097 + .byte W04 + .byte v096 + .byte W04 + .byte v095 + .byte W04 + .byte v094 + .byte W04 + .byte v093 + .byte W04 + .byte v092 + .byte W04 + .byte v091 + .byte W04 + .byte v090 + .byte W04 + .byte v089 + .byte W04 + .byte v088 + .byte W04 + .byte v087 + .byte W04 + .byte v086 + .byte W04 + .byte v085 + .byte W04 + .byte v085 + .byte W04 + .byte v084 + .byte W05 + .byte v083 + .byte W04 + .byte v082 + .byte W04 + .byte v081 + .byte W04 + .byte v080 + .byte W04 + .byte v079 + .byte W04 + .byte v078 + .byte W04 + .byte v077 + .byte W04 + .byte v076 + .byte W02 + .byte W02 + .byte v075 + .byte W04 + .byte v074 + .byte W04 + .byte v073 + .byte W04 + .byte v072 + .byte W04 + .byte v071 + .byte W04 + .byte v070 + .byte W04 + .byte v069 + .byte W04 + .byte v068 + .byte W04 + .byte v068 + .byte W04 + .byte v067 + .byte W04 + .byte v066 + .byte W04 + .byte v065 + .byte W05 + .byte v064 + .byte W04 + .byte v063 + .byte W04 + .byte v062 + .byte W04 + .byte v061 + .byte W04 + .byte v060 + .byte W04 + .byte v059 + .byte W04 + .byte v058 + .byte W04 + .byte v057 + .byte W04 + .byte v056 + .byte W04 + .byte v055 + .byte W04 + .byte v054 + .byte W04 + .byte v053 + .byte W01 + .byte W03 + .byte v052 + .byte W04 + .byte v051 + .byte W04 + .byte v051 + .byte W04 + .byte v050 + .byte W04 + .byte v049 + .byte W04 + .byte v048 + .byte W04 + .byte v047 + .byte W04 + .byte v046 + .byte W05 + .byte v045 + .byte W04 + .byte v044 + .byte W04 + .byte v043 + .byte W04 + .byte v042 + .byte W04 + .byte v041 + .byte W04 + .byte v040 + .byte W04 + .byte v039 + .byte W04 + .byte v038 + .byte W04 + .byte v037 + .byte W04 + .byte v036 + .byte W04 + .byte v035 + .byte W04 + .byte v034 + .byte W04 + .byte v034 + .byte W04 + .byte v033 + .byte W04 + .byte v032 + .byte W04 + .byte v031 + .byte W04 + .byte v030 + .byte W04 + .byte v029 + .byte W04 + .byte v028 + .byte W04 + .byte v027 + .byte W05 + .byte v026 + .byte W04 + .byte v025 + .byte W04 + .byte v024 + .byte W04 + .byte v023 + .byte W04 + .byte v022 + .byte W04 + .byte v021 + .byte W04 + .byte v020 + .byte W04 + .byte v019 + .byte W04 + .byte v018 + .byte W04 + .byte v017 + .byte W04 + .byte v017 + .byte W04 + .byte v016 + .byte W04 + .byte v015 + .byte W04 + .byte v014 + .byte W04 + .byte v013 + .byte W04 + .byte v012 + .byte W03 + .byte BEND , c_v + .byte W01 + .byte VOL , v011 + .byte W04 + .byte v010 + .byte W04 + .byte v009 + .byte W03 + .byte W01 + .byte v008 + .byte W05 + .byte v007 + .byte W04 + .byte v006 + .byte W04 + .byte v005 + .byte W04 + .byte v004 + .byte W04 + .byte v003 + .byte W04 + .byte v002 + .byte W04 + .byte v001 + .byte W04 + .byte v000 + .byte W60 + .byte W02 + .byte W96 + .byte W92 + .byte EOT + .byte W04 + .byte W96 + .byte W96 + .byte W36 + .byte FINE + + @********************** Track 12 **********************@ + + .global song001_12 +song001_12: @ 0x0879D2DF + .byte KEYSH , 0 + .byte VOICE , 2 + .byte VOL , v012 + .byte PAN , c_v + .byte BENDR , 12 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 42 + .byte MODT , 0 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W48 + .byte VOL , v067 + .byte BEND , c_v-64 + .byte TIE , Fs3, v124 + .byte W04 + .byte BEND , c_v-64 + .byte W03 + .byte c_v-62 + .byte W03 + .byte c_v-59 + .byte W03 + .byte c_v-57 + .byte W03 + .byte c_v-54 + .byte W03 + .byte c_v-51 + .byte W03 + .byte c_v-49 + .byte W03 + .byte c_v-46 + .byte W03 + .byte c_v-43 + .byte W03 + .byte c_v-41 + .byte W03 + .byte c_v-38 + .byte W03 + .byte c_v-35 + .byte W03 + .byte c_v-33 + .byte W03 + .byte c_v-30 + .byte W03 + .byte c_v-27 + .byte W02 + .byte W01 + .byte c_v-25 + .byte W03 + .byte c_v-22 + .byte W03 + .byte c_v-19 + .byte W03 + .byte c_v-17 + .byte W03 + .byte c_v-14 + .byte W03 + .byte c_v-11 + .byte W03 + .byte c_v-9 + .byte W03 + .byte c_v-6 + .byte W03 + .byte c_v-3 + .byte W03 + .byte c_v-1 + .byte W03 + .byte c_v+2 + .byte W03 + .byte c_v+5 + .byte W03 + .byte c_v+7 + .byte W03 + .byte c_v+10 + .byte W03 + .byte c_v+13 + .byte W03 + .byte c_v+15 + .byte W03 + .byte c_v+18 + .byte W03 + .byte c_v+21 + .byte W03 + .byte c_v+23 + .byte W03 + .byte c_v+26 + .byte W03 + .byte c_v+28 + .byte W03 + .byte c_v+31 + .byte W03 + .byte c_v+34 + .byte W03 + .byte c_v+36 + .byte W03 + .byte c_v+39 + .byte W03 + .byte c_v+42 + .byte W03 + .byte c_v+44 + .byte W03 + .byte c_v+47 + .byte W03 + .byte VOL , v067 + .byte BEND , c_v+50 + .byte W03 + .byte c_v+52 + .byte W01 + .byte VOL , v066 + .byte W02 + .byte v065 + .byte BEND , c_v+55 + .byte W01 + .byte VOL , v064 + .byte W02 + .byte v063 + .byte BEND , c_v+58 + .byte W02 + .byte VOL , v062 + .byte W01 + .byte BEND , c_v+60 + .byte W01 + .byte VOL , v061 + .byte W01 + .byte BEND , c_v+63 + .byte W01 + .byte VOL , v060 + .byte W01 + .byte v059 + .byte W02 + .byte v058 + .byte W02 + .byte v057 + .byte W02 + .byte v056 + .byte W01 + .byte v055 + .byte W02 + .byte v054 + .byte W02 + .byte v053 + .byte W02 + .byte v052 + .byte W01 + .byte v051 + .byte W02 + .byte v051 + .byte W02 + .byte v050 + .byte W02 + .byte v049 + .byte W02 + .byte v048 + .byte W01 + .byte v047 + .byte W02 + .byte v046 + .byte W02 + .byte v045 + .byte W02 + .byte v044 + .byte W01 + .byte v043 + .byte W02 + .byte v042 + .byte W02 + .byte v041 + .byte W02 + .byte v040 + .byte W02 + .byte v039 + .byte W01 + .byte v038 + .byte W02 + .byte v037 + .byte W02 + .byte v036 + .byte W02 + .byte v035 + .byte W01 + .byte v034 + .byte W02 + .byte v034 + .byte W02 + .byte v033 + .byte W02 + .byte v032 + .byte W02 + .byte v031 + .byte W01 + .byte v030 + .byte W02 + .byte v029 + .byte W02 + .byte v028 + .byte W02 + .byte v027 + .byte W01 + .byte v026 + .byte W02 + .byte v025 + .byte W02 + .byte v024 + .byte W02 + .byte v023 + .byte W02 + .byte v022 + .byte W01 + .byte v021 + .byte W02 + .byte v020 + .byte W02 + .byte v019 + .byte W02 + .byte v018 + .byte W01 + .byte v017 + .byte W02 + .byte v017 + .byte W02 + .byte v016 + .byte W02 + .byte v015 + .byte W01 + .byte v014 + .byte W02 + .byte v013 + .byte W02 + .byte v012 + .byte W02 + .byte v011 + .byte W02 + .byte v010 + .byte W01 + .byte v009 + .byte W02 + .byte v008 + .byte W02 + .byte v007 + .byte W02 + .byte v006 + .byte W01 + .byte v005 + .byte W02 + .byte v004 + .byte W02 + .byte v003 + .byte W02 + .byte v002 + .byte W02 + .byte v001 + .byte W01 + .byte v000 + .byte W01 + .byte v000 + .byte W03 + .byte EOT + .byte W13 + .byte FINE + + mAlignWord + .global C_DECL(song001) +C_DECL(song001): @ 0x0879D400 + .byte 12 @ trackCount + .byte 0 @ blockCount + .byte 0 @ priority + .byte 128 @ reverb + +mAlignWord + mPtr voicegroup000 @ voicegroup/tone + + mPtr song001_1 @ track + mPtr song001_2 @ track + mPtr song001_3 @ track + mPtr song001_4 @ track + mPtr song001_5 @ track + mPtr song001_6 @ track + mPtr song001_7 @ track + mPtr song001_8 @ track + mPtr song001_9 @ track + mPtr song001_10 @ track + mPtr song001_11 @ track + mPtr song001_12 @ track diff --git a/sa1/sound/songs/song017.s b/sa1/sound/songs/song017.s new file mode 100644 index 0000000000..28c87755cc --- /dev/null +++ b/sa1/sound/songs/song017.s @@ -0,0 +1,2373 @@ + .include "asm/macros/c_decl.inc" + .include "asm/macros/portable.inc" + .include "sound/MPlayDef.s" + + mSectionRodata + + @********************** Track 1 **********************@ + + mAlignWord + .global song017_1 +song017_1: @ 0x087A6C04 + .byte KEYSH , 0 +song017_1_4: + .byte TEMPO , 45 + .byte VOICE , 127 + .byte VOL , v110 + .byte PAN , c_v + .byte MOD , 0 + .byte LFOS , 43 + .byte MODT , 2 + .byte LFODL , 0 + .byte N04 , Cn1, v127 + .byte N03 , Dn1, v056 + .byte W07 + .byte N04 , Cs1, v127 + .byte W12 + .byte Cn1 + .byte N16 , En1, v056 + .byte W05 + .byte N08 , Gn1, v127 + .byte W07 + .byte Gs1 + .byte W05 + .byte N04 , Cn1 + .byte N03 , Ds1, v056 + .byte W07 + .byte N04 , Cs1, v127 + .byte W12 + .byte Cn1 + .byte N16 , En1, v056 + .byte W05 + .byte N08 , An1, v127 + .byte W07 + .byte Gs1 + .byte W05 + .byte N04 , Cn1 + .byte N19 , En1, v056 + .byte W07 + .byte N04 , Cs1, v127 + .byte W12 + .byte Cn1 + .byte N16 , En1, v056 + .byte W05 + .byte N08 , Gn1, v127 + .byte W07 + .byte Gs1 + .byte W05 +song017_1_2: + .byte N08 , Cs1, v127 + .byte N03 , En1, v056 + .byte W12 + .byte N04 , Cn1, v127 + .byte N16 , En1, v052 + .byte W24 + .byte PEND +song017_1_1: + .byte N12 , Ds1, v052 + .byte W12 + .byte N04 , Dn1, v060 + .byte W08 + .byte N04 + .byte W04 + .byte N12 , Ds1, v044 + .byte W12 + .byte PEND + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 +song017_1_3: + .byte N12 , Ds1, v052 + .byte W12 + .byte N04 , Cn1, v127 + .byte W08 + .byte Cs1 + .byte W04 + .byte Cn1 + .byte W04 + .byte Gn1 + .byte W04 + .byte Cs1 + .byte W04 + .byte PEND + .byte VOICE , 127 + .byte VOL , v110 + .byte PAN , c_v + .byte MOD , 0 + .byte LFOS , 43 + .byte MODT , 2 + .byte LFODL , 0 + .byte N04 + .byte W12 + .byte N04 + .byte W07 + .byte Cn1 + .byte N16 , En1, v056 + .byte W05 + .byte N08 , Gn1, v127 + .byte W07 + .byte Gs1 + .byte W05 + .byte N04 , Cn1 + .byte N03 , Ds1, v056 + .byte W12 + .byte N04 , Cs1, v127 + .byte W07 + .byte Cn1 + .byte N16 , En1, v056 + .byte W05 + .byte N08 , An1, v127 + .byte W07 + .byte Gs1 + .byte W05 + .byte N04 , Cn1 + .byte N19 , En1, v056 + .byte W12 + .byte N04 , Cs1, v127 + .byte W07 + .byte Cn1 + .byte N16 , En1, v056 + .byte W05 + .byte N08 , Gn1, v127 + .byte W07 + .byte Gs1 + .byte W05 + .byte PATT + mPtr song017_1_2 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_1 + .byte PATT + mPtr song017_1_3 + .byte GOTO + mPtr song017_1_4 + .byte FINE + + @********************** Track 2 **********************@ + + .global song017_2 +song017_2: @ 0x087A6E0D + .byte KEYSH , 0 +song017_2_33: + .byte VOICE , 125 + .byte VOL , v110 + .byte PAN , c_v + .byte MOD , 0 + .byte LFOS , 43 + .byte MODT , 2 + .byte LFODL , 0 + .byte N04 , Bn2, v104 + .byte W19 + .byte N16 , Bn1, v096 + .byte W17 + .byte N04 , Bn2, v104 + .byte W19 + .byte N16 , Bn1, v100 + .byte W17 + .byte N04 , Bn2, v108 + .byte W19 + .byte N16 , Bn1, v104 + .byte W17 + .byte N04 , Bn2, v100 + .byte W12 + .byte N16 , Bn1, v108 + .byte W24 +song017_2_1: + .byte N19 , En2, v116 + .byte W30 + .byte W01 + .byte N04 , En2, v096 + .byte W05 + .byte PEND +song017_2_2: + .byte N18 , Bn1, v084 + .byte W19 + .byte N04 , En2, v088 + .byte W05 + .byte N10 , Bn1, v084 + .byte W12 + .byte PEND +song017_2_3: + .byte N17 , Fn2, v112 + .byte W24 + .byte N08 , Fn2, v104 + .byte W12 + .byte PEND +song017_2_4: + .byte N12 , Bn1, v096 + .byte W19 + .byte N04 , Fn2, v064 + .byte W05 + .byte N07 , Bn1, v088 + .byte W12 + .byte PEND +song017_2_5: + .byte N17 , Fs2, v112 + .byte W24 + .byte N11 , An2, v104 + .byte W12 + .byte PEND +song017_2_6: + .byte N16 , Bn2, v096 + .byte W19 + .byte N04 , Bn2, v088 + .byte W05 + .byte N11 , An2, v104 + .byte W12 + .byte PEND +song017_2_7: + .byte N18 , Gs2, v104 + .byte W24 + .byte N10 , Gn2, v100 + .byte W12 + .byte PEND +song017_2_8: + .byte N14 , Fs2, v112 + .byte W19 + .byte N03 , Fs2, v092 + .byte W05 + .byte N11 , Bn1, v100 + .byte W12 + .byte PEND +song017_2_9: + .byte N15 , En2, v096 + .byte W24 + .byte N11 , En2, v108 + .byte W12 + .byte PEND +song017_2_10: + .byte N12 , Bn1, v084 + .byte W19 + .byte N04 , En2, v092 + .byte W05 + .byte N10 , Bn1, v088 + .byte W12 + .byte PEND +song017_2_11: + .byte N18 , Fn2, v108 + .byte W24 + .byte N10 , Fn2, v112 + .byte W12 + .byte PEND +song017_2_12: + .byte N12 , Bn1, v076 + .byte W19 + .byte N04 , Fn2, v104 + .byte W05 + .byte N11 , Bn1, v084 + .byte W12 + .byte PEND +song017_2_13: + .byte N14 , Fs2, v116 + .byte W19 + .byte N04 , Fs2, v084 + .byte W05 + .byte N11 , An2, v104 + .byte W12 + .byte PEND +song017_2_14: + .byte N11 , Bn2, v096 + .byte W12 + .byte Bn1, v084 + .byte W12 + .byte Fs2, v104 + .byte W12 + .byte PEND +song017_2_15: + .byte N20 , En2, v108 + .byte W24 + .byte N09 , En2, v088 + .byte W12 + .byte PEND +song017_2_16: + .byte N10 , Bn2, v080 + .byte W19 + .byte N04 , En2, v084 + .byte W05 + .byte N11 , As2, v100 + .byte W12 + .byte PEND +song017_2_17: + .byte N11 , An2, v104 + .byte W12 + .byte Bn2, v096 + .byte W12 + .byte Cs3 + .byte W12 + .byte PEND +song017_2_18: + .byte N11 , Bn2, v088 + .byte W12 + .byte An2, v104 + .byte W12 + .byte Gs2, v076 + .byte W12 + .byte PEND +song017_2_19: + .byte N11 , An2, v104 + .byte W12 + .byte Bn2, v080 + .byte W12 + .byte Cn3, v096 + .byte W12 + .byte PEND +song017_2_20: + .byte N11 , Dn3, v096 + .byte W12 + .byte Dn2, v076 + .byte W12 + .byte An2, v088 + .byte W12 + .byte PEND +song017_2_21: + .byte N11 , Gn2, v096 + .byte W12 + .byte An2, v104 + .byte W12 + .byte Bn2, v084 + .byte W12 + .byte PEND +song017_2_22: + .byte N11 , Cn3, v100 + .byte W12 + .byte Bn2, v104 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte PEND +song017_2_23: + .byte N11 , Fs2, v100 + .byte W12 + .byte N07 , Gs2, v080 + .byte W07 + .byte N04 , Fs2, v076 + .byte W05 + .byte N11 , An2, v112 + .byte W12 + .byte PEND +song017_2_24: + .byte N11 , Bn2, v096 + .byte W12 + .byte N07 , Cs3, v084 + .byte W07 + .byte N04 , Bn2 + .byte W05 + .byte N11 , Ds3, v096 + .byte W12 + .byte PEND +song017_2_25: + .byte N16 , En3, v104 + .byte W19 + .byte N04 , En3, v100 + .byte W05 + .byte N09 , Bn2, v096 + .byte W12 + .byte PEND +song017_2_26: + .byte N13 , En2, v116 + .byte W19 + .byte N04 , Bn2, v088 + .byte W05 + .byte N11 , En2, v096 + .byte W12 + .byte PEND +song017_2_27: + .byte N13 , Fn2, v100 + .byte W19 + .byte N04 , Fn2, v088 + .byte W05 + .byte N10 , Bn2, v092 + .byte W12 + .byte PEND +song017_2_28: + .byte N12 , Fn2, v096 + .byte W19 + .byte N04 , Bn2, v072 + .byte W05 + .byte N07 , Fn2, v108 + .byte W12 + .byte PEND +song017_2_29: + .byte N11 , Fs2, v100 + .byte W12 + .byte Cs3, v096 + .byte W12 + .byte An2, v112 + .byte W12 + .byte PEND +song017_2_30: + .byte N10 , Bn2, v088 + .byte W12 + .byte N11 , Bn1, v092 + .byte W12 + .byte Fs2, v100 + .byte W12 + .byte PEND +song017_2_31: + .byte N13 , En2, v104 + .byte W24 + .byte N11 , En2, v084 + .byte W12 + .byte PEND +song017_2_32: + .byte N15 , Bn1, v100 + .byte W19 + .byte N03 , En2, v096 + .byte W05 + .byte N06 , Bn1 + .byte W12 + .byte PEND +song017_2_34: + .byte N08 , Bn2, v080 + .byte W19 + .byte N03 , Bn2, v076 + .byte W05 + .byte N11 , Bn1, v096 + .byte W12 + .byte PEND +song017_2_35: + .byte N05 , Bn2, v100 + .byte W19 + .byte N04 , Bn2, v088 + .byte W05 + .byte N11 , Bn1, v092 + .byte W12 + .byte PEND +song017_2_36: + .byte N04 , Bn2, v108 + .byte W19 + .byte Bn2, v084 + .byte W05 + .byte N11 , Bn1, v096 + .byte W12 + .byte PEND + .byte N03 , Bn2, v112 + .byte W12 + .byte N21 , Bn1, v108 + .byte W24 + .byte PATT + mPtr song017_2_1 + .byte PATT + mPtr song017_2_2 + .byte PATT + mPtr song017_2_3 + .byte PATT + mPtr song017_2_4 + .byte PATT + mPtr song017_2_5 + .byte PATT + mPtr song017_2_6 + .byte PATT + mPtr song017_2_7 + .byte PATT + mPtr song017_2_8 + .byte PATT + mPtr song017_2_9 + .byte PATT + mPtr song017_2_10 + .byte PATT + mPtr song017_2_11 + .byte PATT + mPtr song017_2_12 + .byte PATT + mPtr song017_2_13 + .byte PATT + mPtr song017_2_14 + .byte PATT + mPtr song017_2_15 + .byte PATT + mPtr song017_2_16 + .byte PATT + mPtr song017_2_17 + .byte PATT + mPtr song017_2_18 + .byte PATT + mPtr song017_2_19 + .byte PATT + mPtr song017_2_20 + .byte PATT + mPtr song017_2_21 + .byte PATT + mPtr song017_2_22 + .byte PATT + mPtr song017_2_23 + .byte PATT + mPtr song017_2_24 + .byte PATT + mPtr song017_2_25 + .byte PATT + mPtr song017_2_26 + .byte PATT + mPtr song017_2_27 + .byte PATT + mPtr song017_2_28 + .byte PATT + mPtr song017_2_29 + .byte PATT + mPtr song017_2_30 + .byte PATT + mPtr song017_2_31 + .byte PATT + mPtr song017_2_32 + .byte GOTO + mPtr song017_2_33 + .byte PATT + mPtr song017_2_34 + .byte PATT + mPtr song017_2_35 + .byte PATT + mPtr song017_2_36 + .byte N03 , Bn2, v112 + .byte W12 + .byte N21 , Bn1, v108 + .byte W21 + .byte FINE + + @********************** Track 3 **********************@ + + .global song017_3 +song017_3: @ 0x087A709D + .byte KEYSH , 0 +song017_3_6: + .byte VOICE , 88 + .byte VOL , v095 + .byte PAN , c_v + .byte MOD , 0 + .byte LFOS , 43 + .byte MODT , 2 + .byte LFODL , 0 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte MOD , 1 + .byte W07 + .byte N06 , Bn1, v104 + .byte N06 , Ds2 + .byte N06 , Gs2 + .byte W12 + .byte N04 , Bn1, v096 + .byte N04 , Ds2 + .byte N04 , Gs2 + .byte W05 + .byte N06 , En2, v100 + .byte N06 , Gs2 + .byte N06 , Bn2 + .byte W07 + .byte N04 , En2 + .byte N04 , Gs2 + .byte N04 , Cs3 + .byte W05 +song017_3_1: + .byte N12 , Gs2, v108 + .byte N12 , Cs3 + .byte N12 , En3 + .byte W19 + .byte N04 , En2, v088 + .byte N04 , Gs2 + .byte N04 , Cs3 + .byte W05 + .byte N06 , Gs2, v108 + .byte N06 , Cs3 + .byte N06 , En3 + .byte W07 + .byte N04 , As2, v104 + .byte N04 , En3 + .byte N04 , Gn3 + .byte W05 + .byte PEND +song017_3_2: + .byte N06 , Bn2, v116 + .byte N06 , Fn3 + .byte N06 , Gs3 + .byte W07 + .byte N03 , As2, v096 + .byte N03 , En3 + .byte N03 , Gn3 + .byte W05 + .byte N06 , Bn2, v116 + .byte N06 , Fn3 + .byte N06 , Gs3 + .byte W07 + .byte N32 , Fn2, v100 + .byte N32 , Gs2 + .byte N32 , Cs3 + .byte W17 + .byte PEND + .byte W30 + .byte BEND , c_v + .byte W06 + .byte W07 + .byte N07 , Cs3, v124 + .byte N07 , En3 + .byte N07 , An3 + .byte W12 + .byte N04 , Cs3, v108 + .byte N04 , En3 + .byte N04 , An3 + .byte W05 + .byte N09 , En2, v104 + .byte N09 , An2 + .byte N09 , Cs3 + .byte W12 + .byte N07 , An2, v108 + .byte N07 , Cs3 + .byte N07 , En3 + .byte W12 + .byte N06 , Fn2 + .byte N06 , As2 + .byte N06 , Dn3 + .byte W07 + .byte N04 , Fs2, v068 + .byte N04 , Bn2 + .byte N04 , Ds3 + .byte W05 + .byte N07 , An2, v096 + .byte N07 , Cs3 + .byte N07 , En3 + .byte W07 + .byte N04 , An2 + .byte N04 , Ds3 + .byte N04 , Fs3 + .byte W05 + .byte N19 , Ds3, v116 + .byte N19 , Fs3 + .byte N44 , Bn3 + .byte W19 + .byte N14 , Dn3 + .byte N14 , Fn3 + .byte W17 + .byte N04 , Cs3, v112 + .byte N04 , En3 + .byte W07 + .byte Cs3, v116 + .byte N04 , En3 + .byte W13 + .byte N16 , An2, v096 + .byte N16 , Ds3 + .byte N16 , Fs3 + .byte W16 + .byte N04 , Gs2 + .byte N04 , Bn2 + .byte N04 , Ds3 + .byte W07 + .byte N15 , Bn1 + .byte N15 , Ds2 + .byte N15 , Gs2 + .byte W17 + .byte N05 , En2, v092 + .byte N05 , Gs2 + .byte N05 , Bn2 + .byte W07 + .byte N04 , En2, v100 + .byte N04 , Gs2 + .byte N04 , Cs3 + .byte W05 + .byte N13 , Gs2, v104 + .byte N13 , Cs3 + .byte N13 , En3 + .byte W19 + .byte N04 , En2, v068 + .byte N04 , Gs2 + .byte N04 , Cs3 + .byte W05 + .byte N06 , Gs2, v104 + .byte N06 , Cs3 + .byte N06 , En3 + .byte W07 + .byte N04 , As2, v096 + .byte N04 , En3 + .byte N04 , Gn3 + .byte W05 + .byte N06 , Bn2, v108 + .byte N06 , Fn3 + .byte N06 , Gs3 + .byte W07 + .byte N04 , As2, v088 + .byte N04 , En3 + .byte N04 , Gn3 + .byte W05 + .byte N06 , Bn2, v108 + .byte N06 , Fn3 + .byte N06 , Gs3 + .byte W07 + .byte N40 , Fn2, v096 + .byte N40 , Gs2 + .byte N40 , Cs3 + .byte W17 + .byte W36 +song017_3_3: + .byte W07 + .byte N10 , Cs3, v116 + .byte N10 , En3 + .byte N10 , An3 + .byte W12 + .byte N04 , Cs3 + .byte N04 , En3 + .byte N04 , An3 + .byte W05 + .byte N08 , En2, v084 + .byte N08 , An2 + .byte N08 , Cs3 + .byte W12 + .byte PEND +song017_3_4: + .byte N08 , An2, v096 + .byte N08 , Cs3 + .byte N08 , En3 + .byte W12 + .byte N06 , En2, v100 + .byte N06 , An2 + .byte N06 , Cs3 + .byte W07 + .byte N04 , Fs2, v080 + .byte N04 , Bn2 + .byte N04 , Ds3 + .byte W05 + .byte N05 , An2, v088 + .byte N05 , Cs3 + .byte N05 , En3 + .byte W07 + .byte N04 , An2, v100 + .byte N04 , Ds3 + .byte N04 , Fs3 + .byte W05 + .byte PEND +song017_3_5: + .byte N48 , Gs2, v100 + .byte N17 , Cs3 + .byte N48 , En3 + .byte W19 + .byte N04 , Cs3 + .byte W05 + .byte N05 , Cn3 + .byte W12 + .byte PEND + .byte N13 , Bn2 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W07 + .byte N06 , Bn1, v104 + .byte N06 , Ds2 + .byte N06 , Gs2 + .byte W12 + .byte N04 , Bn1, v096 + .byte N04 , Ds2 + .byte N04 , Gs2 + .byte W05 + .byte N06 , En2, v100 + .byte N06 , Gs2 + .byte N06 , Bn2 + .byte W07 + .byte N04 , En2 + .byte N04 , Gs2 + .byte N04 , Cs3 + .byte W05 + .byte PATT + mPtr song017_3_1 + .byte PATT + mPtr song017_3_2 + .byte W36 + .byte PATT + mPtr song017_3_3 + .byte PATT + mPtr song017_3_4 + .byte PATT + mPtr song017_3_5 + .byte N13 , Bn2, v100 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte GOTO + mPtr song017_3_6 + .byte FINE + + @********************** Track 4 **********************@ + + .global song017_4 +song017_4: @ 0x087A729B + .byte KEYSH , 0 +song017_4_5: + .byte VOICE , 117 + .byte PAN , c_v + .byte VOL , v059 + .byte PRIO , 30 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte MOD , 1 + .byte W07 + .byte N06 , Gs3, v104 + .byte W12 + .byte N04 , Gs3, v096 + .byte W05 + .byte N06 , Bn3, v100 + .byte W07 + .byte N04 , Cs4 + .byte W05 +song017_4_1: + .byte N12 , En4, v108 + .byte W19 + .byte N04 , Cs4, v088 + .byte W05 + .byte N06 , En4, v108 + .byte W07 + .byte N04 , Gn4, v104 + .byte W05 + .byte PEND +song017_4_2: + .byte N06 , Gs4, v116 + .byte W07 + .byte N03 , Gn4, v096 + .byte W05 + .byte N06 , Gs4, v116 + .byte W07 + .byte N32 , Cs4, v100 + .byte W17 + .byte PEND + .byte W30 + .byte BEND , c_v + .byte W06 + .byte W07 + .byte N07 , An4, v124 + .byte W12 + .byte N04 , An4, v108 + .byte W05 + .byte N09 , Cs4, v104 + .byte W12 + .byte N07 , En4, v108 + .byte W12 + .byte N06 , Dn4 + .byte W07 + .byte N04 , Ds4, v068 + .byte W05 + .byte N07 , En4, v096 + .byte W07 + .byte N04 , Fs4 + .byte W05 + .byte N44 , Bn4, v116 + .byte W36 + .byte W36 + .byte W07 + .byte N15 , Gs3, v096 + .byte W17 + .byte N05 , Bn3, v092 + .byte W07 + .byte N04 , Cs4, v100 + .byte W05 + .byte N13 , En4, v104 + .byte W19 + .byte N04 , Cs4, v068 + .byte W05 + .byte N06 , En4, v104 + .byte W07 + .byte N04 , Gn4, v096 + .byte W05 + .byte N06 , Gs4, v108 + .byte W07 + .byte N04 , Gn4, v088 + .byte W05 + .byte N06 , Gs4, v108 + .byte W07 + .byte N40 , Cs4, v096 + .byte W17 + .byte W36 +song017_4_3: + .byte W07 + .byte N10 , An4, v116 + .byte W12 + .byte N04 + .byte W05 + .byte N08 , Cs4, v084 + .byte W12 + .byte PEND +song017_4_4: + .byte N08 , En4, v096 + .byte W12 + .byte N06 , Cs4, v100 + .byte W07 + .byte N04 , Ds4, v080 + .byte W05 + .byte N05 , En4, v088 + .byte W07 + .byte N04 , Fs4, v100 + .byte W05 + .byte PEND + .byte N48 , En4 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W07 + .byte N06 , Gs3, v104 + .byte W12 + .byte N04 , Gs3, v096 + .byte W05 + .byte N06 , Bn3, v100 + .byte W07 + .byte N04 , Cs4 + .byte W05 + .byte PATT + mPtr song017_4_1 + .byte PATT + mPtr song017_4_2 + .byte W36 + .byte PATT + mPtr song017_4_3 + .byte PATT + mPtr song017_4_4 + .byte N48 , En4, v100 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte GOTO + mPtr song017_4_5 + .byte FINE + + @********************** Track 5 **********************@ + + .global song017_5 +song017_5: @ 0x087A73B4 + .byte KEYSH , 0 +song017_5_4: + .byte VOICE , 75 + .byte VOL , v064 + .byte PAN , c_v + .byte MOD , 0 + .byte LFOS , 43 + .byte MODT , 2 + .byte LFODL , 0 + .byte PRIO , 30 + .byte W06 + .byte N04 , En2, v108 + .byte N04 , Gs2 + .byte N04 , Bn2 + .byte W17 + .byte N10 , En2, v112 + .byte N10 , Gs2 + .byte N10 , Bn2 + .byte W13 +song017_5_1: + .byte W06 + .byte N04 , Fn2, v112 + .byte N04 , Gs2 + .byte N04 , Bn2 + .byte W17 + .byte N10 , Fn2, v104 + .byte N10 , Gs2 + .byte N10 , Bn2 + .byte W13 + .byte PEND +song017_5_2: + .byte W06 + .byte N04 , Fs2, v100 + .byte N04 , An2 + .byte N04 , Bn2 + .byte W17 + .byte N10 , Fs2, v108 + .byte N10 , An2 + .byte N10 , Bn2 + .byte W12 + .byte N03 , Ds2, v112 + .byte N03 , Fs2 + .byte N03 , Bn2 + .byte W01 + .byte PEND +song017_5_3: + .byte W11 + .byte N22 , Bn1, v120 + .byte W24 + .byte W01 + .byte PEND + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W06 + .byte N04 , En2, v108 + .byte N04 , Gs2 + .byte N04 , Bn2 + .byte W17 + .byte N10 , En2, v112 + .byte N10 , Gs2 + .byte N10 , Bn2 + .byte W13 + .byte PATT + mPtr song017_5_1 + .byte PATT + mPtr song017_5_2 + .byte PATT + mPtr song017_5_3 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte GOTO + mPtr song017_5_4 + .byte FINE + + @********************** Track 6 **********************@ + + .global song017_6 +song017_6: @ 0x087A7470 + .byte KEYSH , 0 +song017_6_1: + .byte VOICE , 93 + .byte VOL , v077 + .byte PAN , c_v + .byte MOD , 0 + .byte LFOS , 43 + .byte MODT , 2 + .byte LFODL , 0 + .byte PRIO , 30 + .byte W36 + .byte W36 + .byte W36 + .byte W12 + .byte N24 , Bn3, v100 + .byte N03 , As4, v096 + .byte N24 , Bn4, v108 + .byte W24 + .byte W36 + .byte W36 + .byte W36 + .byte W01 + .byte N03 , Bn4, v104 + .byte W04 + .byte N02 , As4, v084 + .byte W03 + .byte N03 , An4, v092 + .byte W03 + .byte Gs4, v108 + .byte W09 + .byte Fs4, v104 + .byte W04 + .byte N02 , Fn4, v092 + .byte W03 + .byte Gs4, v068 + .byte W03 + .byte Fn4, v060 + .byte W03 + .byte Cs4, v068 + .byte W03 + .byte N05 , Fs4, v104 + .byte W07 + .byte N02 , Cs4, v088 + .byte W11 + .byte N03 , An3, v084 + .byte W04 + .byte N11 , Fs3, v080 + .byte W14 + .byte W36 + .byte W13 + .byte N03 , Gn3, v112 + .byte W04 + .byte Gs3, v088 + .byte W04 + .byte Bn3 + .byte W03 + .byte N04 , Ds4, v116 + .byte W08 + .byte Fs4, v112 + .byte W04 + .byte N06 , Fn4, v096 + .byte W07 + .byte N03 , Ds4, v056 + .byte W05 + .byte N04 , En4, v120 + .byte W07 + .byte N03 , Cs4, v080 + .byte W05 + .byte N02 , An3, v088 + .byte W03 + .byte Cs4, v060 + .byte W03 + .byte An3, v088 + .byte W03 + .byte Fs3 + .byte W03 + .byte N07 , Gs3, v096 + .byte W08 + .byte N16 , Bn3, v084 + .byte W28 + .byte W36 + .byte W36 + .byte N04 , Cs5, v112 + .byte W08 + .byte Cn5, v108 + .byte W04 + .byte Bn4, v104 + .byte W08 + .byte N03 , An4, v108 + .byte W04 + .byte N02 , Gs4, v096 + .byte W03 + .byte An4, v040 + .byte W03 + .byte Gs4, v068 + .byte W03 + .byte N03 , Fn4, v092 + .byte W03 + .byte N07 , Fs4, v120 + .byte W09 + .byte N02 , Cs4, v104 + .byte W11 + .byte N03 , An3, v100 + .byte W04 + .byte N12 , Fs3, v096 + .byte W12 + .byte W36 + .byte W13 + .byte N03 , Gn3, v108 + .byte W03 + .byte Gs3, v084 + .byte W04 + .byte N02 , Bn3, v068 + .byte W03 + .byte N03 , Ds4, v100 + .byte W07 + .byte N04 , Fs4, v116 + .byte W06 + .byte N05 , Ds4, v092 + .byte W07 + .byte N03 , En4, v080 + .byte W05 + .byte N06 , Gs4, v100 + .byte W08 + .byte N04 , Bn3, v096 + .byte N04 , Bn4 + .byte W11 + .byte N07 , Cn4, v120 + .byte N07 , Cn5 + .byte W05 + .byte N11 , Cs4, v116 + .byte N11 , An4 + .byte N11 , Cs5 + .byte W19 + .byte N04 , Cn4, v100 + .byte N04 , Gs4 + .byte N04 , Cn5 + .byte W05 + .byte N05 , Cs4, v116 + .byte N05 , An4 + .byte N05 , Cs5 + .byte W07 + .byte N04 , Cn4, v084 + .byte N04 , Gs4 + .byte N04 , Cn5 + .byte W05 + .byte N14 , Cs4, v112 + .byte N14 , An4 + .byte N14 , Cs5 + .byte W19 + .byte N03 , Cn4, v100 + .byte N03 , Gs4 + .byte N03 , Cn5 + .byte W05 + .byte N06 , Cs4, v108 + .byte N06 , An4 + .byte N06 , Cs5 + .byte W07 + .byte N03 , Cn4, v060 + .byte N03 , Gs4 + .byte N03 , Cn5 + .byte W05 + .byte N07 , Cs4, v108 + .byte N07 , An4 + .byte N07 , Cs5 + .byte W07 + .byte N04 , En3, v104 + .byte N04 , Cs4 + .byte N04 , En4 + .byte W12 + .byte N12 , En3, v096 + .byte N12 , Cs4 + .byte N12 , En4 + .byte W17 + .byte W07 + .byte N05 , En4, v112 + .byte N05 , Cn5 + .byte N05 , En5 + .byte W12 + .byte Dn4, v104 + .byte N05 , Bn4 + .byte N05 , Dn5 + .byte W12 + .byte N03 , Cn4, v080 + .byte N03 , An4 + .byte N03 , Cn5 + .byte W05 + .byte N16 , Bn3, v096 + .byte N16 , Gn4 + .byte N16 , Bn4 + .byte W19 + .byte N04 , An3, v084 + .byte N04 , Fs4 + .byte N04 , An4 + .byte W05 + .byte N05 , Bn3, v104 + .byte N05 , Gn4 + .byte N05 , Bn4 + .byte W07 + .byte N04 , An3, v068 + .byte N04 , Fs4 + .byte N04 , An4 + .byte W05 + .byte N07 , Bn3, v104 + .byte N07 , Gn4 + .byte N07 , Bn4 + .byte W07 + .byte N03 , Dn3, v092 + .byte N03 , Bn3 + .byte N03 , Dn4 + .byte W12 + .byte N06 , Gn3, v112 + .byte N06 , Dn4 + .byte N06 , Gn4 + .byte W12 + .byte N04 , Bn3, v100 + .byte N04 , Gn4 + .byte N04 , Bn4 + .byte W05 + .byte N08 , An3, v108 + .byte N08 , Fs4 + .byte N08 , An4 + .byte W12 + .byte N04 , An3, v100 + .byte N04 , Fs4 + .byte N04 , An4 + .byte W07 + .byte Gs3, v096 + .byte N04 , Fn4 + .byte N04 , Gs4 + .byte W05 + .byte N03 , An3, v104 + .byte N03 , Fs4 + .byte N03 , An4 + .byte W07 + .byte As3 + .byte N03 , Gn4 + .byte N03 , As4 + .byte W05 + .byte N04 , Bn3, v108 + .byte N04 , Gn4 + .byte N04 , Bn4 + .byte W07 + .byte N03 , Gn4, v120 + .byte W05 + .byte N01 , Ds4, v092 + .byte W03 + .byte N02 , Gn4, v096 + .byte W03 + .byte Ds4, v084 + .byte W03 + .byte N03 , Bn3, v096 + .byte W03 + .byte N07 , An3, v120 + .byte W07 + .byte N03 , Gn3, v080 + .byte W05 + .byte N12 , Gs3, v096 + .byte W36 + .byte W36 + .byte W36 + .byte N03 , En3, v100 + .byte W04 + .byte Fn3 + .byte W04 + .byte Gs3, v104 + .byte W04 + .byte Bn3 + .byte W04 + .byte Cs4, v096 + .byte W04 + .byte Dn4, v100 + .byte W04 + .byte En4, v096 + .byte W04 + .byte Fn4, v084 + .byte W04 + .byte Gs4, v088 + .byte W04 + .byte N05 , Bn4, v108 + .byte W08 + .byte N03 , An4, v104 + .byte W12 + .byte Fs4, v096 + .byte W04 + .byte N10 , Cs4, v084 + .byte W12 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W13 + .byte N18 , Ds2, v060 + .byte N15 , An2, v084 + .byte W23 + .byte W02 + .byte N01 , Ds2, v080 + .byte W01 + .byte Gs2, v060 + .byte W28 + .byte W01 + .byte N30 , Gs2, v068 + .byte W01 + .byte Ds2, v060 + .byte W03 + .byte W36 + .byte N04 , Fn2, v052 + .byte W02 + .byte N02 , Bn2, v020 + .byte W32 + .byte W02 + .byte N01 , Fn2, v076 + .byte N01 , Gs2, v068 + .byte N03 , Bn2, v072 + .byte W20 + .byte N16 , Fn2 + .byte N16 , Bn2, v076 + .byte W16 + .byte N24 , An2, v080 + .byte W01 + .byte En2, v076 + .byte W32 + .byte W03 + .byte N03 , An2, v104 + .byte W01 + .byte N02 , En2, v084 + .byte W17 + .byte N17 , An2, v120 + .byte W01 + .byte N19 , Ds2, v100 + .byte W17 + .byte W01 + .byte N11 , Gs2, v068 + .byte N08 , Bn2, v060 + .byte W17 + .byte N14 , Fn2, v088 + .byte W02 + .byte N03 , Bn2, v084 + .byte W16 + .byte W01 + .byte En2 + .byte N03 , An2, v100 + .byte W15 + .byte N01 , Cs3, v076 + .byte W08 + .byte N36 , Ds2 + .byte N13 , An2, v084 + .byte W12 + .byte W01 + .byte N24 , Gs2, v064 + .byte N28 , Bn2, v072 + .byte W32 + .byte W03 + .byte W07 + .byte N08 , Gs2, v100 + .byte N03 , Bn2 + .byte N04 , Ds3, v108 + .byte W05 + .byte Cs3, v080 + .byte N05 , En3, v072 + .byte W12 + .byte N08 , Gs2 + .byte N09 , Bn2, v088 + .byte N09 , Ds3 + .byte W12 + .byte N28 , Bn2, v084 + .byte W01 + .byte N24 , Fn2, v048 + .byte N23 , Gs2, v020 + .byte W32 + .byte W03 + .byte W01 + .byte N09 , Fn2, v112 + .byte N06 , Bn2, v116 + .byte N07 , Dn3 + .byte W08 + .byte N03 , Fs2, v084 + .byte N04 , Cs3, v076 + .byte W01 + .byte En3, v072 + .byte W10 + .byte N14 , Bn2, v076 + .byte W01 + .byte N17 , Fn2, v088 + .byte W15 + .byte N28 , An2, v080 + .byte W01 + .byte N24 , En2, v056 + .byte N30 , Cs3, v068 + .byte W32 + .byte W02 + .byte N04 , An2 + .byte W01 + .byte Cs3 + .byte N03 , En3, v096 + .byte W19 + .byte N11 , Ds2, v060 + .byte N13 , An2, v072 + .byte N13 , Ds3, v088 + .byte W16 + .byte N02 , Ds2, v060 + .byte N02 , Gs2, v084 + .byte N03 , Bn2 + .byte W01 + .byte W32 + .byte Gs2 + .byte W04 + .byte N06 , Ds3, v096 + .byte N10 , Gs3 + .byte W08 + .byte N02 , En3, v076 + .byte W11 + .byte N03 , En3, v104 + .byte W01 + .byte Gs3, v100 + .byte W12 + .byte N01 , En3, v096 + .byte N03 , Gs3 + .byte W04 + .byte W21 + .byte Cs3, v108 + .byte W15 + .byte N18 , Cs3, v096 + .byte N19 , En3, v112 + .byte W20 + .byte N02 , Cs3, v096 + .byte N03 , En3, v092 + .byte W16 + .byte N02 , Cs3, v096 + .byte N03 , En3, v104 + .byte W20 + .byte N02 , Cs3, v092 + .byte N03 , En3 + .byte W11 + .byte Cn3 + .byte W01 + .byte N02 , En3, v080 + .byte W04 + .byte W20 + .byte N16 , Bn2, v100 + .byte N16 , En3, v108 + .byte W16 + .byte N03 , Cn3, v112 + .byte W19 + .byte Bn2, v088 + .byte N03 , Dn3, v104 + .byte W12 + .byte N30 , Bn2, v084 + .byte N30 , Dn3, v100 + .byte W05 + .byte W36 + .byte N03 , An2, v084 + .byte N03 , Cs3, v104 + .byte W01 + .byte N01 , En2, v044 + .byte W18 + .byte N03 , Cs3, v108 + .byte W17 + .byte W07 + .byte An2, v100 + .byte N03 , Cn3, v104 + .byte W12 + .byte N13 , An2 + .byte N14 , Cn3 + .byte W17 + .byte N03 , Gs2, v084 + .byte N04 , Bn2 + .byte W36 + .byte W21 + .byte N03 , Gs3, v104 + .byte W01 + .byte N02 , Gs2, v076 + .byte N02 , Bn2, v088 + .byte W14 + .byte W01 + .byte N32 , Fn2, v092 + .byte N32 , Bn2, v080 + .byte W32 + .byte W03 + .byte W10 + .byte N02 , Dn3, v088 + .byte W02 + .byte N03 , Gs2, v084 + .byte N03 , Fn3, v080 + .byte N04 , Bn3 + .byte W08 + .byte Gs2, v052 + .byte N04 , Dn3, v084 + .byte N04 , Fn3, v080 + .byte N03 , Bn3, v056 + .byte W08 + .byte N04 , Fn2, v080 + .byte N02 , Bn2, v056 + .byte N04 , Dn3, v068 + .byte N04 , Gs3, v088 + .byte W08 + .byte N07 , Fn2, v044 + .byte N02 , Bn2, v052 + .byte N04 , Dn3, v080 + .byte N04 , Gs3, v076 + .byte W08 + .byte N21 , En2, v040 + .byte N20 , An2, v056 + .byte N21 , Cs3, v088 + .byte N20 , An3, v100 + .byte W28 + .byte N02 , An2, v076 + .byte N03 , Cs3, v088 + .byte W02 + .byte N01 , En2, v056 + .byte W17 + .byte N12 , Ds2, v092 + .byte W01 + .byte N15 , An2, v108 + .byte W16 + .byte N03 , Ds2, v072 + .byte N02 , Gs2, v088 + .byte N03 , Bn2, v076 + .byte W19 + .byte N20 , Ds2, v084 + .byte N19 , Gs2, v092 + .byte N19 , Bn2, v080 + .byte W17 + .byte W11 + .byte N23 , Bn2, v120 + .byte N24 , Bn3 + .byte W24 + .byte W01 + .byte GOTO + mPtr song017_6_1 + .byte W01 + .byte FINE + + @********************** Track 7 **********************@ + + .global song017_7 +song017_7: @ 0x087A7861 + .byte KEYSH , 0 +song017_7_1: + .byte VOICE , 122 + .byte PAN , c_v + .byte VOL , v110 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W13 + .byte N03 , Fs2, v092 + .byte W03 + .byte N02 , Gs2, v088 + .byte W03 + .byte N03 , An2, v096 + .byte W04 + .byte Bn2, v104 + .byte W04 + .byte Cs3 + .byte W03 + .byte Dn3, v108 + .byte W04 + .byte N09 , Ds3, v112 + .byte W02 + .byte W09 + .byte Ds3, v120 + .byte W10 + .byte N04 , Cs3, v092 + .byte W04 + .byte Ds3 + .byte W05 + .byte N05 , Bn2, v084 + .byte W08 + .byte N10 , Bn2, v076 + .byte W11 + .byte N05 , Gs2, v072 + .byte W05 + .byte N12 , Bn2, v060 + .byte W16 + .byte N02 , Bn2, v084 + .byte W03 + .byte N03 , Cs3, v092 + .byte W01 + .byte W02 + .byte N08 , Dn3, v120 + .byte W10 + .byte N07 , Dn3, v127 + .byte W09 + .byte N03 , Cs3, v088 + .byte W03 + .byte N04 , Dn3, v100 + .byte W05 + .byte N06 , Bn2, v076 + .byte W07 + .byte W02 + .byte N07 , Bn2, v096 + .byte W10 + .byte N08 , Gs2, v072 + .byte W09 + .byte N06 , Bn2, v076 + .byte W09 + .byte N04 , Bn2, v084 + .byte W05 + .byte N06 , An2, v056 + .byte W01 + .byte W06 + .byte Gs2, v072 + .byte W08 + .byte N05 , Bn2, v064 + .byte W06 + .byte N10 , An2, v040 + .byte W16 + .byte W12 + .byte N04 , An2, v068 + .byte W07 + .byte Bn2, v060 + .byte W05 + .byte N05 , Cs3, v100 + .byte W07 + .byte N03 , En3, v104 + .byte W05 + .byte N06 , Gn3, v127 + .byte W08 + .byte N05 , Gs3, v120 + .byte W05 + .byte N04 , Gn3, v112 + .byte W06 + .byte En3, v084 + .byte W05 + .byte Bn2, v096 + .byte W07 + .byte N05 , As2, v084 + .byte W05 + .byte An2, v112 + .byte W07 + .byte N04 , Gn2, v068 + .byte W05 + .byte Gs2, v088 + .byte W07 + .byte N03 , Bn2, v072 + .byte W05 + .byte N05 , Cs3, v092 + .byte W07 + .byte En3, v108 + .byte W05 + .byte W01 + .byte Ds3, v060 + .byte W07 + .byte N03 , En3 + .byte W04 + .byte N06 , Fs3, v124 + .byte W08 + .byte Gs3 + .byte W11 + .byte N05 , Gs3, v096 + .byte W05 + .byte W01 + .byte N08 , Bn2, v076 + .byte W12 + .byte N11 + .byte W20 + .byte N03 + .byte W03 + .byte W01 + .byte N06 , Gs3, v116 + .byte W08 + .byte An3, v127 + .byte W11 + .byte N08 , Bn3, v116 + .byte W09 + .byte N06 , An3, v127 + .byte W07 + .byte W01 + .byte Gs3, v104 + .byte W09 + .byte N08 , Gs3, v108 + .byte W09 + .byte N07 , Fn3, v076 + .byte W08 + .byte N05 , Gs3, v056 + .byte W07 + .byte Fs3, v080 + .byte W02 + .byte W07 + .byte N17 , Fs3, v068 + .byte W28 + .byte W01 + .byte N02 , An3, v124 + .byte W03 + .byte Cs4, v096 + .byte W03 + .byte An3, v124 + .byte W03 + .byte N01 , Fs3, v096 + .byte W03 + .byte Gs3, v076 + .byte W03 + .byte N02 , Bn3, v084 + .byte W03 + .byte N01 , Gs3, v040 + .byte W03 + .byte N02 , En3, v084 + .byte W03 + .byte Fs3, v088 + .byte W03 + .byte N01 , An3, v092 + .byte W03 + .byte Fs3, v068 + .byte W03 + .byte N02 , Ds3, v080 + .byte W02 + .byte N05 , En3, v068 + .byte W01 + .byte W07 + .byte N04 , En3, v092 + .byte W11 + .byte Bn2, v056 + .byte W05 + .byte N05 , Ds3, v096 + .byte W07 + .byte N04 , Fs3, v120 + .byte W06 + .byte Ds3, v068 + .byte W07 + .byte N03 , En3, v076 + .byte W05 + .byte N05 , Gs3, v100 + .byte W08 + .byte N04 , Bn3, v104 + .byte W11 + .byte Cn4, v116 + .byte W05 + .byte N08 , Cs4 + .byte W17 + .byte N05 , En3, v096 + .byte W06 + .byte N06 , Ds3, v088 + .byte W09 + .byte N03 , En3, v084 + .byte W04 + .byte W01 + .byte N05 , Bn3, v124 + .byte W07 + .byte N04 , An3, v096 + .byte W05 + .byte Gs3, v072 + .byte W06 + .byte Bn3, v116 + .byte W06 + .byte N05 , An3, v104 + .byte W07 + .byte N04 , En3, v036 + .byte W04 + .byte N05 , Cn3, v084 + .byte W08 + .byte N02 , An2, v040 + .byte W04 + .byte N04 , Dn3, v120 + .byte W08 + .byte N02 , Cs3, v060 + .byte W03 + .byte N05 , Cn3, v096 + .byte W07 + .byte Dn3, v127 + .byte W06 + .byte W01 + .byte N03 , Bn2, v064 + .byte W04 + .byte N02 , Dn3, v080 + .byte W04 + .byte Fs3, v092 + .byte W03 + .byte N06 , An3, v127 + .byte W07 + .byte N04 , Gn3, v096 + .byte W05 + .byte N05 , Fs3 + .byte W07 + .byte N03 , Gn3, v120 + .byte W05 + .byte N05 , An3, v124 + .byte W07 + .byte N04 , Bn3, v116 + .byte W05 + .byte Cn4, v127 + .byte W07 + .byte N05 , Dn4 + .byte W12 + .byte N04 , Bn3, v120 + .byte W05 + .byte W08 + .byte N02 , Fs3, v084 + .byte W04 + .byte N07 , An3, v127 + .byte W08 + .byte N01 , Fs3, v052 + .byte W03 + .byte N05 , Gn3, v124 + .byte W08 + .byte N03 , Gn3, v068 + .byte W03 + .byte N06 , Fs3, v084 + .byte W02 + .byte W07 + .byte N03 , En3, v096 + .byte W05 + .byte N05 , Ds3, v068 + .byte W08 + .byte N03 , En3, v088 + .byte W04 + .byte N06 , Fs3, v120 + .byte W08 + .byte N04 , Gn3, v112 + .byte W04 + .byte W01 + .byte N05 , Gs3 + .byte W07 + .byte N04 , An3, v120 + .byte W06 + .byte N05 , Bn3, v096 + .byte W07 + .byte N04 , Cs4, v124 + .byte W09 + .byte N05 , Ds4, v116 + .byte W06 + .byte W02 + .byte N04 , En3, v088 + .byte N07 , En4, v116 + .byte W10 + .byte N03 , En3, v076 + .byte W02 + .byte N04 , En4, v096 + .byte W08 + .byte N03 , Dn3, v124 + .byte N06 , Dn4, v108 + .byte W08 + .byte N03 , Dn3, v080 + .byte W01 + .byte Dn4 + .byte W05 + .byte W03 + .byte N02 , Bn2, v076 + .byte N02 , Bn3 + .byte W09 + .byte N04 , Bn2, v092 + .byte N04 , Bn3, v084 + .byte W09 + .byte N03 , As2 + .byte N05 , As3, v104 + .byte W07 + .byte N03 , An2, v084 + .byte N04 , An3, v104 + .byte W07 + .byte N03 , En3, v080 + .byte W01 + .byte N06 , En2, v068 + .byte W06 + .byte N02 , Gn2, v072 + .byte N02 , Gn3, v080 + .byte W02 + .byte N04 , Gs3, v092 + .byte W01 + .byte N03 , Gs2 + .byte W08 + .byte N02 , Gs2, v080 + .byte N06 , Gs3, v096 + .byte W08 + .byte N05 , Gs2, v072 + .byte N07 , Gs3, v100 + .byte W08 + .byte N02 , An2, v080 + .byte N03 , An3, v072 + .byte W03 + .byte W02 + .byte N04 , Gs3, v056 + .byte W01 + .byte N07 , Gs2, v060 + .byte W09 + .byte N06 , Gs3, v084 + .byte W01 + .byte N02 , Gs2, v052 + .byte W06 + .byte N11 , Fn2, v060 + .byte N11 , Fn3, v072 + .byte W17 + .byte W09 + .byte N03 , Fs2, v100 + .byte N02 , Fs3, v120 + .byte W10 + .byte N03 , Fs2, v080 + .byte W01 + .byte N04 , Fs3, v116 + .byte W05 + .byte An2, v108 + .byte N06 , Cs3 + .byte W09 + .byte N08 , An2, v092 + .byte W01 + .byte N07 , Cs3, v084 + .byte W01 + .byte W11 + .byte N06 , En3, v112 + .byte W08 + .byte N03 , Cs3, v052 + .byte W04 + .byte N05 , Ds3, v104 + .byte W08 + .byte N04 , En3, v108 + .byte W04 + .byte N05 , Fs3, v100 + .byte W01 + .byte W07 + .byte N06 , En3, v120 + .byte W11 + .byte N04 , Bn2, v084 + .byte W05 + .byte N06 , Gs2 + .byte W07 + .byte N04 , En2, v076 + .byte W05 + .byte N06 , An2, v108 + .byte N06 , Cs3 + .byte W01 + .byte W07 + .byte N03 , En2, v052 + .byte W05 + .byte Gs2, v092 + .byte N05 , Bn2, v084 + .byte W07 + .byte N02 , Gs2, v088 + .byte N05 , Bn2, v084 + .byte W07 + .byte N08 , En2, v072 + .byte W10 + .byte GOTO + mPtr song017_7_1 + .byte FINE + + @********************** Track 8 **********************@ + + .global song017_8 +song017_8: @ 0x087A7B5B + .byte KEYSH , 0 +song017_8_3: + .byte VOICE , 80 + .byte VOL , v090 + .byte PAN , c_v + .byte MOD , 0 + .byte LFOS , 43 + .byte MODT , 2 + .byte LFODL , 0 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W12 + .byte N72 , En3, v127 + .byte W24 + .byte W36 +song017_8_1: + .byte W19 + .byte N03 , En3, v120 + .byte W12 + .byte N03 + .byte W05 + .byte PEND + .byte N32 , Gn3, v116 + .byte W36 + .byte N66 , Dn3, v120 + .byte W36 + .byte W36 + .byte N30 , En3, v116 + .byte W36 +song017_8_2: + .byte N06 , Fs3, v116 + .byte W07 + .byte N04 , Fs3, v112 + .byte W12 + .byte N16 , Fs3, v120 + .byte W17 + .byte PEND + .byte N06 , Bn2, v116 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte N84 , En3, v127 + .byte W36 + .byte W36 + .byte PATT + mPtr song017_8_1 + .byte N32 , Gn3, v116 + .byte W36 + .byte N66 , Dn3, v120 + .byte W36 + .byte W36 + .byte N30 , En3, v116 + .byte W36 + .byte PATT + mPtr song017_8_2 + .byte N06 , Bn2, v116 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte W36 + .byte GOTO + mPtr song017_8_3 + .byte FINE + + mAlignWord + .global C_DECL(song017) +C_DECL(song017): @ 0x087A7BF4 + .byte 8 @ trackCount + .byte 0 @ blockCount + .byte 0 @ priority + .byte 128 @ reverb + +mAlignWord + mPtr voicegroup000 @ voicegroup/tone + + mPtr song017_1 @ track + mPtr song017_2 @ track + mPtr song017_3 @ track + mPtr song017_4 @ track + mPtr song017_5 @ track + mPtr song017_6 @ track + mPtr song017_7 @ track + mPtr song017_8 @ track diff --git a/sa1/sound/songs/song020.s b/sa1/sound/songs/song020.s new file mode 100644 index 0000000000..c11e8fb055 --- /dev/null +++ b/sa1/sound/songs/song020.s @@ -0,0 +1,1944 @@ + .include "asm/macros/c_decl.inc" + .include "asm/macros/portable.inc" + .include "sound/MPlayDef.s" + + mSectionRodata + + @********************** Track 1 **********************@ + + mAlignWord + .global song020_1 +song020_1: @ 0x087A954C + .byte KEYSH , 0 + .byte TEMPO , 67 + .byte VOICE , 38 + .byte MOD , 0 + .byte VOL , v042 + .byte PAN , c_v + .byte W24 +song020_1_1: + .byte N06 , Dn3, v127 + .byte W06 + .byte Fs4 + .byte W06 + .byte An3 + .byte W06 + .byte Dn4 + .byte W06 + .byte Fs3 + .byte W06 + .byte An4 + .byte W06 + .byte Cs4 + .byte W06 + .byte Cs5 + .byte W06 + .byte An3 + .byte W06 + .byte Dn5 + .byte W06 + .byte Dn3 + .byte W06 + .byte An4 + .byte W06 + .byte Fs3 + .byte W06 + .byte Fs4 + .byte W06 + .byte Cs4 + .byte W06 + .byte Dn4 + .byte W06 + .byte PEND + .byte PATT + mPtr song020_1_1 +song020_1_2: + .byte N06 , Cn3, v127 + .byte W06 + .byte En3 + .byte W06 + .byte En4 + .byte W06 + .byte Bn3 + .byte W06 + .byte Cn4 + .byte W06 + .byte Gn3 + .byte W06 + .byte Gn4 + .byte W06 + .byte Cn4 + .byte W06 + .byte Bn4 + .byte W06 + .byte Gn3 + .byte W06 + .byte Cn5 + .byte W06 + .byte Cn3 + .byte W06 + .byte En5 + .byte W06 + .byte En3 + .byte W06 + .byte Gn5 + .byte W06 + .byte Gn3 + .byte W06 + .byte PEND + .byte PATT + mPtr song020_1_2 +song020_1_3: + .byte N06 , Dn3, v127 + .byte W06 + .byte An4 + .byte W06 + .byte An3 + .byte W06 + .byte Dn4 + .byte W06 + .byte Fs3 + .byte W06 + .byte Fs4 + .byte W06 + .byte Dn3 + .byte W06 + .byte Dn4 + .byte W06 + .byte Cs4 + .byte W06 + .byte Dn4 + .byte W06 + .byte An4 + .byte W06 + .byte An3 + .byte W06 + .byte Dn5 + .byte W06 + .byte Fs4 + .byte W06 + .byte Fs5 + .byte W06 + .byte An5 + .byte W06 + .byte PEND + .byte PATT + mPtr song020_1_3 +song020_1_4: + .byte N06 , Cn3, v127 + .byte W06 + .byte Gn5 + .byte W06 + .byte En5 + .byte W06 + .byte Cn5 + .byte W06 + .byte Gn4 + .byte W06 + .byte Bn3 + .byte W06 + .byte Gn3 + .byte W06 + .byte En4 + .byte W06 + .byte En3 + .byte W06 + .byte Gn4 + .byte W06 + .byte Bn3 + .byte W06 + .byte Bn4 + .byte W06 + .byte En3 + .byte W06 + .byte En4 + .byte W06 + .byte Cn4 + .byte W06 + .byte Gn4 + .byte W06 + .byte PEND + .byte PATT + mPtr song020_1_4 +song020_1_5: + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_4 + .byte PATT + mPtr song020_1_4 + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_4 + .byte PATT + mPtr song020_1_4 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_4 + .byte PATT + mPtr song020_1_4 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte PATT + mPtr song020_1_1 + .byte PATT + mPtr song020_1_1 + .byte PATT + mPtr song020_1_2 + .byte PATT + mPtr song020_1_2 + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_3 + .byte PATT + mPtr song020_1_4 + .byte PATT + mPtr song020_1_4 + .byte GOTO + mPtr song020_1_5 + .byte FINE + + @********************** Track 2 **********************@ + + .global song020_2 +song020_2: @ 0x087A9677 + .byte KEYSH , 0 + .byte VOICE , 39 + .byte MOD , 2 + .byte VOL , v062 + .byte PAN , c_v + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 +song020_2_1: + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N32 , Cs3, v112 + .byte W36 + .byte N60 , Dn3 + .byte W60 + .byte W96 + .byte N78 , En3 + .byte W84 + .byte N06 + .byte W12 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N92 , An3, v088 + .byte W96 + .byte Cs4 + .byte W96 + .byte TIE , Cn4 + .byte W96 + .byte W90 + .byte EOT + .byte W06 + .byte N92 , An3 + .byte W96 + .byte Cs4 + .byte W96 + .byte TIE , Cn4 + .byte W96 + .byte W90 + .byte EOT + .byte W06 + .byte N92 , An3 + .byte W96 + .byte Cs4 + .byte W96 + .byte TIE , Cn4 + .byte W96 + .byte W90 + .byte EOT + .byte W06 + .byte N92 , An3 + .byte W96 + .byte Cs4 + .byte W96 + .byte TIE , Cn4 + .byte W96 + .byte W90 + .byte EOT + .byte W06 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte GOTO + mPtr song020_2_1 + .byte FINE + + @********************** Track 3 **********************@ + + .global song020_3 +song020_3: @ 0x087A96DF + .byte KEYSH , 0 + .byte VOICE , 40 + .byte MOD , 0 + .byte VOL , v062 + .byte PAN , c_v + .byte W02 + .byte N02 , En3, v088 + .byte W02 + .byte N03 , Fn3 + .byte W02 + .byte N02 , Gn3 + .byte W03 + .byte An3 + .byte W02 + .byte Bn3 + .byte W02 + .byte Cn4 + .byte W03 + .byte Dn4 + .byte W03 + .byte En4 + .byte W03 + .byte N01 , Fn4 + .byte W02 +song020_3_3: + .byte N32 , Fs4, v088 + .byte W36 + .byte N03 , En4 + .byte N02 , Fn4 + .byte W02 + .byte N03 , Ds4 + .byte W02 + .byte Cs4 + .byte N01 , Dn4 + .byte W01 + .byte N02 , Cn4 + .byte W02 + .byte N04 , Bn3 + .byte W03 + .byte N03 , An3 + .byte W01 + .byte N01 , As3 + .byte W01 + .byte N03 , Gn3 + .byte W02 + .byte Fn3 + .byte W02 + .byte En3 + .byte W01 + .byte N02 , Dn3 + .byte W02 + .byte Cn3 + .byte W01 + .byte N03 , Bn2 + .byte W02 + .byte An2 + .byte W02 + .byte N02 , Gn2, v004 + .byte W36 + .byte PEND +song020_3_4: + .byte W24 + .byte N22 , Fs4, v088 + .byte W24 + .byte N08 + .byte W12 + .byte N19 + .byte W24 + .byte N92 , Gn4 + .byte W12 + .byte PEND +song020_3_5: + .byte W84 + .byte N03 , Fn4, v088 + .byte W02 + .byte En4 + .byte W04 + .byte N02 , Dn4 + .byte W02 + .byte Cn4 + .byte W02 + .byte N01 , Bn3 + .byte W02 + .byte PEND +song020_3_6: + .byte W01 + .byte N01 , An3, v088 + .byte W01 + .byte Gn3 + .byte W01 + .byte Fn3 + .byte W03 + .byte En3, v004 + .byte W66 + .byte N02 , En3, v088 + .byte W02 + .byte N03 , Fn3 + .byte W02 + .byte N02 , Gn3 + .byte W03 + .byte An3 + .byte W02 + .byte Bn3 + .byte W02 + .byte Cn4 + .byte W03 + .byte Dn4 + .byte W03 + .byte En4 + .byte W03 + .byte N01 , Fn4 + .byte W02 + .byte Gn4 + .byte W02 + .byte PEND +song020_3_7: + .byte N56 , Fs4, v088 + .byte W54 + .byte W01 + .byte N06 , En4 + .byte W01 + .byte N07 , Dn4 + .byte W03 + .byte N06 , Cn4 + .byte W03 + .byte N05 , Bn3 + .byte W02 + .byte N04 , An3 + .byte W02 + .byte Gn3 + .byte W02 + .byte Fn3 + .byte W01 + .byte N03 , En3 + .byte W03 + .byte N02 , Dn3 + .byte W02 + .byte Cn3 + .byte W01 + .byte N01 , Bn2 + .byte W02 + .byte Gn2, v004 + .byte W19 + .byte PEND +song020_3_8: + .byte W24 + .byte N13 , An4, v088 + .byte W18 + .byte N01 + .byte W06 + .byte N11 + .byte W12 + .byte N20 + .byte W24 + .byte N60 , Cn5 + .byte W12 + .byte PEND + .byte W96 + .byte W96 +song020_3_9: + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W72 + .byte N32 , An4, v108 + .byte W24 + .byte W12 + .byte N36 , Fs4, v116 + .byte W36 + .byte N24 , Gn4 + .byte W24 + .byte N11 , Fs4, v104 + .byte W12 + .byte Dn4 + .byte W12 + .byte N68 , An4 + .byte W96 + .byte W12 + .byte N14 , Gn5, v116 + .byte W12 + .byte N12 , Fs5, v092 + .byte W12 + .byte N13 , Dn5, v108 + .byte W12 + .byte N14 , Cs5, v092 + .byte W12 + .byte N12 , An4, v108 + .byte W12 + .byte N15 , Cs5 + .byte W12 + .byte N09 , An5 + .byte W12 + .byte W96 + .byte W96 + .byte W96 + .byte N06 , An2, v127 + .byte W06 + .byte Bn2, v120 + .byte W06 + .byte Cs3, v124 + .byte W06 + .byte Bn2, v127 + .byte W06 + .byte Cs3 + .byte W06 + .byte Dn3 + .byte W06 + .byte Cs3 + .byte W06 + .byte Dn3 + .byte W06 + .byte En3 + .byte W06 + .byte Dn3 + .byte W06 + .byte En3 + .byte W06 + .byte Fs3 + .byte W06 + .byte Gn3 + .byte W06 + .byte An3 + .byte W06 + .byte Bn3 + .byte W06 + .byte Cs4 + .byte W06 + .byte N92 , Fs4, v112 + .byte W96 + .byte An4 + .byte W96 + .byte TIE , Gn4 + .byte W96 + .byte W01 + .byte N22 , Cn5, v120 + .byte W01 + .byte EOT , Gn4 + .byte W23 + .byte N20 , En4, v127 + .byte W24 + .byte N22 , Gn4, v120 + .byte W24 + .byte N19 , Cn4 + .byte W23 +song020_3_1: + .byte N92 , Fs4, v112 + .byte W01 + .byte N44 , Dn4, v108 + .byte W92 + .byte W03 + .byte PEND + .byte N92 , An4, v112 + .byte W96 + .byte TIE , Gn4 + .byte W96 +song020_3_2: + .byte W01 + .byte N22 , Cn5, v120 + .byte W24 + .byte N20 , En4, v127 + .byte W24 + .byte PEND + .byte EOT , Gn4 + .byte N42 , Gn4, v120 + .byte W24 + .byte N19 , Cn4 + .byte W23 + .byte PATT + mPtr song020_3_1 + .byte N92 , An4, v112 + .byte W96 + .byte TIE , Gn4 + .byte W96 + .byte PATT + mPtr song020_3_2 + .byte EOT , Gn4 + .byte N42 , Gn4, v120 + .byte W24 + .byte N19 , Cn4 + .byte W23 + .byte PATT + mPtr song020_3_1 + .byte N92 , An4, v112 + .byte W96 + .byte Gn4 + .byte W96 + .byte N48 , Dn5 + .byte W48 + .byte N24 , En5 + .byte W24 + .byte W02 + .byte N02 , En3, v088 + .byte W02 + .byte N03 , Fn3 + .byte W02 + .byte N02 , Gn3 + .byte W03 + .byte An3 + .byte W02 + .byte Bn3 + .byte W02 + .byte Cn4 + .byte W03 + .byte Dn4 + .byte W03 + .byte En4 + .byte W03 + .byte N01 , Fn4 + .byte W02 + .byte PATT + mPtr song020_3_3 + .byte PATT + mPtr song020_3_4 + .byte PATT + mPtr song020_3_5 + .byte PATT + mPtr song020_3_6 + .byte PATT + mPtr song020_3_7 + .byte PATT + mPtr song020_3_8 + .byte W96 + .byte W96 + .byte GOTO + mPtr song020_3_9 + .byte FINE + + @********************** Track 4 **********************@ + + .global song020_4 +song020_4: @ 0x087A98B8 + .byte KEYSH , 0 + .byte VOICE , 60 + .byte VOL , v069 + .byte PAN , c_v + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 +song020_4_2: + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N32 , Fs3, v127 + .byte N32 , An3 + .byte W36 + .byte TIE , Gn3 + .byte TIE , Bn3 + .byte W60 + .byte W96 + .byte EOT + .byte N72 , An3 + .byte N72 , Cs4 + .byte W01 + .byte EOT , Gn3 + .byte W80 + .byte W03 + .byte N12 , An3 + .byte N12 , Cs4 + .byte W12 + .byte W96 + .byte TIE , An4, v104 + .byte W96 + .byte W48 + .byte W01 + .byte EOT + .byte N24 , Gn4 + .byte W22 + .byte Fs4, v096 + .byte W24 + .byte W01 + .byte Gn4, v092 + .byte W24 + .byte N12 , Fs4, v100 + .byte W11 + .byte TIE , En4, v104 + .byte W60 + .byte W01 + .byte W84 + .byte EOT + .byte W12 + .byte N92 , Dn4, v112 + .byte N92 , Fs4 + .byte W96 + .byte En4 + .byte N92 , An4 + .byte W96 +song020_4_1: + .byte TIE , En4, v112 + .byte TIE , Gn4 + .byte W96 + .byte PEND + .byte W92 + .byte EOT , En4 + .byte Gn4 + .byte W04 + .byte N92 , Dn4 + .byte N92 , Fs4 + .byte W96 + .byte En4 + .byte N92 , An4 + .byte W96 + .byte PATT + mPtr song020_4_1 + .byte W92 + .byte EOT , En4 + .byte Gn4 + .byte W04 + .byte N92 , Dn4, v112 + .byte N92 , Fs4 + .byte W96 + .byte En4 + .byte N92 , An4 + .byte W96 + .byte PATT + mPtr song020_4_1 + .byte W92 + .byte EOT , En4 + .byte Gn4 + .byte W04 + .byte N92 , Dn4, v112 + .byte N92 , Fs4 + .byte W96 + .byte En4 + .byte N92 , An4 + .byte W96 + .byte PATT + mPtr song020_4_1 + .byte W92 + .byte EOT , En4 + .byte Gn4 + .byte W04 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte GOTO + mPtr song020_4_2 + .byte FINE + + @********************** Track 5 **********************@ + + .global song020_5 +song020_5: @ 0x087A9969 + .byte KEYSH , 0 + .byte VOICE , 39 + .byte PAN , c_v + .byte VOL , v094 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 +song020_5_1: + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 62 + .byte PAN , c_v + .byte VOL , v103 + .byte W96 + .byte W96 + .byte W72 + .byte N32 , An3, v108 + .byte W24 + .byte W12 + .byte N36 , Fs3, v116 + .byte W36 + .byte N24 , Gn3 + .byte W24 + .byte N11 , Fs3, v104 + .byte W12 + .byte Dn3 + .byte W12 + .byte N68 , An3 + .byte W96 + .byte W12 + .byte N14 , Gn4, v116 + .byte W12 + .byte N12 , Fs4, v092 + .byte W12 + .byte N13 , Dn4, v108 + .byte W12 + .byte N14 , Cs4, v092 + .byte W12 + .byte N12 , An3, v108 + .byte W12 + .byte N15 , Cs4 + .byte W12 + .byte N68 , An4 + .byte W12 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte GOTO + mPtr song020_5_1 + .byte FINE + + @********************** Track 6 **********************@ + + .global song020_6 +song020_6: @ 0x087A99DB + .byte KEYSH , 0 + .byte VOICE , 37 + .byte VOL , v096 + .byte PAN , c_v + .byte W24 +song020_6_1: + .byte N03 , Dn2, v120 + .byte W06 + .byte N04 + .byte W12 + .byte N08 , Fs2 + .byte W12 + .byte N05 + .byte W06 + .byte N22 , Gn2 + .byte W24 + .byte N15 + .byte W12 + .byte N19 , An2 + .byte W24 + .byte PEND +song020_6_2: + .byte W12 + .byte N10 , Dn2, v120 + .byte W12 + .byte N17 , An2 + .byte W18 + .byte N03 , Dn2 + .byte W06 + .byte N09 , Fs2 + .byte W12 + .byte N11 + .byte W12 + .byte N21 , An2 + .byte W24 + .byte PEND +song020_6_3: + .byte N02 , Cn2, v120 + .byte W06 + .byte N04 + .byte W12 + .byte N10 , Gn2 + .byte W12 + .byte N04 , Cn2 + .byte W06 + .byte N24 , Bn2 + .byte W24 + .byte N14 , Cn3 + .byte W12 + .byte N36 , Gn2 + .byte W24 + .byte PEND +song020_6_4: + .byte W12 + .byte N07 , Cn2, v120 + .byte W12 + .byte N16 , Gn2 + .byte W18 + .byte N03 , Cn2 + .byte W06 + .byte N05 , Cn3 + .byte W12 + .byte N12 + .byte W12 + .byte N11 , En3 + .byte W12 + .byte Cn3 + .byte W12 + .byte PEND +song020_6_5: + .byte N03 , Dn2, v120 + .byte W06 + .byte N05 + .byte W12 + .byte N11 , Fs2 + .byte W12 + .byte N04 , Dn2 + .byte W06 + .byte N24 , Fs2 + .byte W24 + .byte N08 , An2 + .byte W12 + .byte N32 + .byte W24 + .byte PEND +song020_6_6: + .byte W12 + .byte N04 , Dn2, v120 + .byte W12 + .byte N18 , Fs2 + .byte W18 + .byte N03 , Dn2 + .byte W06 + .byte N07 , An2 + .byte W12 + .byte N11 + .byte W12 + .byte N12 , Dn3 + .byte W12 + .byte N11 , An2 + .byte W12 + .byte PEND +song020_6_7: + .byte N03 , Cn2, v120 + .byte W06 + .byte N04 + .byte W12 + .byte N14 , Gn2 + .byte W12 + .byte N04 , Cn2 + .byte W06 + .byte N24 , Fs2 + .byte W24 + .byte N23 , Gn2 + .byte W24 + .byte N08 + .byte W12 + .byte PEND +song020_6_8: + .byte W12 + .byte N04 , Cn2, v120 + .byte W12 + .byte N18 , Gn2 + .byte W18 + .byte N03 , Cn2 + .byte W06 + .byte N05 , Fs2 + .byte W12 + .byte N04 , Gn2 + .byte W12 + .byte N22 , Cn3 + .byte W24 + .byte PEND +song020_6_14: + .byte PATT + mPtr song020_6_1 + .byte PATT + mPtr song020_6_2 + .byte PATT + mPtr song020_6_3 + .byte PATT + mPtr song020_6_4 + .byte PATT + mPtr song020_6_5 + .byte PATT + mPtr song020_6_6 + .byte PATT + mPtr song020_6_7 + .byte PATT + mPtr song020_6_8 + .byte N32 , Fs2, v120 + .byte W36 + .byte N64 , Gn2 + .byte W60 + .byte W12 + .byte N15 + .byte W12 + .byte N17 , Dn3 + .byte W18 + .byte N05 , Gn2 + .byte W06 + .byte N10 , Gn3 + .byte W12 + .byte N20 + .byte W12 + .byte N12 , Gn2 + .byte W12 + .byte N11 , Dn3 + .byte W12 + .byte N84 , An2 + .byte W84 + .byte N11 , Gn2 + .byte W12 + .byte W96 + .byte PATT + mPtr song020_6_1 + .byte PATT + mPtr song020_6_2 + .byte PATT + mPtr song020_6_3 + .byte PATT + mPtr song020_6_4 +song020_6_9: + .byte N17 , Dn2, v120 + .byte W18 + .byte An2 + .byte W18 + .byte N23 , Dn3 + .byte W24 + .byte Gn3 + .byte W24 + .byte N11 , Fs3 + .byte W12 + .byte PEND +song020_6_10: + .byte N17 , Dn2, v120 + .byte W18 + .byte An2 + .byte W18 + .byte N23 , Dn3 + .byte W24 + .byte N11 , Fs3 + .byte W03 + .byte N23 , Gn3 + .byte W21 + .byte N11 , Fs3 + .byte W12 + .byte PEND +song020_6_11: + .byte N17 , Cn2, v120 + .byte W18 + .byte Gn2 + .byte W18 + .byte N23 , Cn3 + .byte W24 + .byte Gn3 + .byte W24 + .byte N11 , Fs3 + .byte W12 + .byte PEND +song020_6_12: + .byte N17 , Cn2, v120 + .byte W18 + .byte Gn2 + .byte W18 + .byte N23 , Cn3 + .byte W24 + .byte N11 , Fn3 + .byte W03 + .byte Fs3 + .byte W04 + .byte N23 , Gn3 + .byte W17 + .byte N14 , Fs3 + .byte W12 + .byte PEND + .byte PATT + mPtr song020_6_9 + .byte PATT + mPtr song020_6_10 + .byte PATT + mPtr song020_6_11 +song020_6_13: + .byte N17 , Cn2, v120 + .byte W18 + .byte Gn2 + .byte W18 + .byte N23 , Cn3 + .byte W20 + .byte N11 , Fn3 + .byte W04 + .byte N23 , Gn3 + .byte W24 + .byte N14 , Fs3 + .byte W12 + .byte PEND + .byte PATT + mPtr song020_6_9 + .byte PATT + mPtr song020_6_10 + .byte PATT + mPtr song020_6_11 + .byte PATT + mPtr song020_6_12 + .byte PATT + mPtr song020_6_9 + .byte PATT + mPtr song020_6_10 + .byte PATT + mPtr song020_6_11 + .byte PATT + mPtr song020_6_13 + .byte PATT + mPtr song020_6_1 + .byte PATT + mPtr song020_6_2 + .byte PATT + mPtr song020_6_3 + .byte PATT + mPtr song020_6_4 + .byte PATT + mPtr song020_6_5 + .byte PATT + mPtr song020_6_6 + .byte PATT + mPtr song020_6_7 + .byte PATT + mPtr song020_6_8 + .byte GOTO + mPtr song020_6_14 + .byte FINE + + @********************** Track 7 **********************@ + + .global song020_7 +song020_7: @ 0x087A9BAA + .byte KEYSH , 0 + .byte VOICE , 61 + .byte VOL , v102 + .byte W02 + .byte N02 , En2, v120 + .byte W02 + .byte N03 , Fn2 + .byte W02 + .byte N02 , Gn2 + .byte W03 + .byte An2 + .byte W02 + .byte Bn2 + .byte W02 + .byte Cn3 + .byte W03 + .byte Dn3 + .byte W03 + .byte En3 + .byte W03 + .byte N01 , Fn3 + .byte W02 +song020_7_1: + .byte N32 , Dn3, v120 + .byte N32 , Fs3 + .byte W36 + .byte N03 , En3 + .byte N02 , Fn3 + .byte W02 + .byte N03 , Ds3 + .byte W02 + .byte Cs3 + .byte N01 , Dn3 + .byte W01 + .byte N02 , Cn3 + .byte W02 + .byte N04 , Bn2 + .byte W03 + .byte N03 , An2 + .byte W01 + .byte N01 , As2 + .byte W01 + .byte N03 , Gn2 + .byte W02 + .byte Fn2 + .byte W02 + .byte En2 + .byte W01 + .byte N02 , Dn2 + .byte W02 + .byte Cn2 + .byte W01 + .byte N03 , Bn1 + .byte W02 + .byte An1 + .byte W02 + .byte N02 , Gn1 + .byte W36 + .byte PEND +song020_7_2: + .byte W24 + .byte N22 , Dn3, v120 + .byte N22 , Fs3 + .byte W24 + .byte N08 , Dn3 + .byte N08 , Fs3 + .byte W12 + .byte N19 , Dn3 + .byte N19 , Fs3 + .byte W24 + .byte N92 , En3 + .byte N92 , Gn3 + .byte W12 + .byte PEND +song020_7_3: + .byte W84 + .byte N03 , Fn3, v120 + .byte W02 + .byte En3 + .byte W04 + .byte N02 , Dn3 + .byte W02 + .byte Cn3 + .byte W02 + .byte N01 , Bn2 + .byte W02 + .byte PEND +song020_7_4: + .byte W01 + .byte N01 , An2, v120 + .byte W01 + .byte Gn2 + .byte W01 + .byte Fn2 + .byte W03 + .byte En2 + .byte W66 + .byte N02 + .byte W02 + .byte N03 , Fn2 + .byte W02 + .byte N02 , Gn2 + .byte W03 + .byte An2 + .byte W02 + .byte Bn2 + .byte W02 + .byte Cn3 + .byte W03 + .byte Dn3 + .byte W03 + .byte En3 + .byte W03 + .byte N01 , Fn3 + .byte W02 + .byte Gn3 + .byte W02 + .byte PEND +song020_7_5: + .byte N52 , Dn3, v120 + .byte N56 , Fs3 + .byte W54 + .byte W01 + .byte N06 , En3 + .byte W01 + .byte N07 , Dn3 + .byte W03 + .byte N06 , Cn3 + .byte W03 + .byte N05 , Bn2 + .byte W02 + .byte N04 , An2 + .byte W02 + .byte Gn2 + .byte W02 + .byte Fn2 + .byte W01 + .byte N03 , En2 + .byte W03 + .byte N02 , Dn2 + .byte W02 + .byte Cn2 + .byte W01 + .byte N01 , Bn1 + .byte W02 + .byte Gn1 + .byte W19 + .byte PEND +song020_7_6: + .byte W24 + .byte N14 , Fs3, v120 + .byte N13 , An3 + .byte W18 + .byte N01 , Fs3 + .byte N01 , An3 + .byte W06 + .byte N11 , Fs3 + .byte N11 , An3 + .byte W12 + .byte N19 , Fs3 + .byte N20 , An3 + .byte W24 + .byte N60 , Gn3 + .byte N60 , Cn4 + .byte W12 + .byte PEND +song020_7_7: + .byte W48 + .byte W02 + .byte N02 , Bn3, v120 + .byte W02 + .byte An3 + .byte W01 + .byte Gn3 + .byte W02 + .byte Fn3 + .byte W02 + .byte N01 , En3 + .byte W02 + .byte Dn3 + .byte W01 + .byte Cn3 + .byte W01 + .byte Bn2 + .byte W02 + .byte An2 + .byte W01 + .byte Gn2 + .byte W01 + .byte Fn2 + .byte W01 + .byte En2 + .byte W30 + .byte PEND + .byte W96 +song020_7_8: + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte N13 , Dn4, v076 + .byte N13 , Gn4 + .byte W18 + .byte N01 , Dn4, v068 + .byte N02 , Gn4, v076 + .byte W06 + .byte N06 , Dn4 + .byte N07 , Gn4, v068 + .byte W12 + .byte N12 , Dn4 + .byte N12 , Gn4, v076 + .byte W24 + .byte N44 , Dn4 + .byte N44 , Fs4, v080 + .byte W12 + .byte W32 + .byte W01 + .byte N01 , Fn4, v056 + .byte W01 + .byte N04 , En4, v064 + .byte W04 + .byte N01 , Dn4, v072 + .byte W02 + .byte Cn4, v068 + .byte W01 + .byte Bn3, v064 + .byte W02 + .byte An3 + .byte W02 + .byte Gn3, v068 + .byte W01 + .byte Fn3 + .byte W02 + .byte En3, v036 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W72 + .byte W02 + .byte N02 , En2, v120 + .byte W02 + .byte N03 , Fn2 + .byte W02 + .byte N02 , Gn2 + .byte W03 + .byte An2 + .byte W02 + .byte Bn2 + .byte W02 + .byte Cn3 + .byte W03 + .byte Dn3 + .byte W03 + .byte En3 + .byte W03 + .byte N01 , Fn3 + .byte W02 + .byte PATT + mPtr song020_7_1 + .byte PATT + mPtr song020_7_2 + .byte PATT + mPtr song020_7_3 + .byte PATT + mPtr song020_7_4 + .byte PATT + mPtr song020_7_5 + .byte PATT + mPtr song020_7_6 + .byte PATT + mPtr song020_7_7 + .byte W96 + .byte GOTO + mPtr song020_7_8 + .byte FINE + + @********************** Track 8 **********************@ + + .global song020_8 +song020_8: @ 0x087A9D46 + .byte KEYSH , 0 + .byte VOICE , 63 + .byte PAN , c_v + .byte VOL , v089 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 +song020_8_8: + .byte N32 , An3, v120 + .byte W36 + .byte Gn3 + .byte W36 + .byte N56 , Fs3 + .byte W24 + .byte W36 + .byte N11 , Dn3 + .byte W12 + .byte Fs3 + .byte W12 + .byte En3 + .byte W12 + .byte N23 , Dn3 + .byte W24 + .byte N32 , En3 + .byte W36 + .byte Bn3 + .byte W36 + .byte TIE , Cn4 + .byte W24 + .byte W92 + .byte W03 + .byte EOT + .byte W01 + .byte N32 , An3 + .byte W36 + .byte Gn3 + .byte W36 + .byte N11 , Fs3 + .byte W12 + .byte N23 , Dn3 + .byte W12 + .byte W12 + .byte N11 + .byte W12 + .byte Fs3 + .byte W12 + .byte En3 + .byte W12 + .byte Fs3 + .byte W12 + .byte Gn3 + .byte W12 + .byte An3 + .byte W12 + .byte Dn4 + .byte W12 + .byte N32 , Fs4 + .byte W36 + .byte Gn4 + .byte W36 + .byte N72 , En4 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N06 , An2, v127 + .byte W06 + .byte Bn2, v120 + .byte W06 + .byte Cs3, v124 + .byte W06 + .byte Bn2, v127 + .byte W06 + .byte Cs3 + .byte W06 + .byte Dn3 + .byte W06 + .byte Cs3 + .byte W06 + .byte Dn3 + .byte W06 + .byte En3 + .byte W06 + .byte Dn3 + .byte W06 + .byte En3 + .byte W06 + .byte Fs3 + .byte W06 + .byte Gn3 + .byte W06 + .byte An3 + .byte W06 + .byte Bn3 + .byte W06 + .byte Cs4 + .byte W06 +song020_8_1: + .byte N32 , Dn3, v120 + .byte W36 + .byte An3 + .byte W36 + .byte N11 , Gn3 + .byte W12 + .byte N44 , Fs3 + .byte W12 + .byte PEND +song020_8_2: + .byte W36 + .byte N32 , En3, v120 + .byte W36 + .byte N23 , Fs3 + .byte W24 + .byte PEND +song020_8_3: + .byte N32 , Gn3, v120 + .byte W36 + .byte N92 , Cn4 + .byte W60 + .byte PEND +song020_8_4: + .byte W36 + .byte N32 , Gn4, v120 + .byte W36 + .byte N11 , Fs4 + .byte W12 + .byte Dn4 + .byte W12 + .byte PEND +song020_8_5: + .byte N32 , Dn3, v120 + .byte W36 + .byte An3 + .byte W36 + .byte N23 , Fs3 + .byte W24 + .byte PEND +song020_8_6: + .byte N44 , An3, v120 + .byte W48 + .byte N23 + .byte W24 + .byte Cs4 + .byte W24 + .byte PEND +song020_8_7: + .byte N32 , Cn4, v120 + .byte W36 + .byte Gn4 + .byte W36 + .byte TIE , En4 + .byte W24 + .byte PEND + .byte W78 + .byte W01 + .byte EOT + .byte W17 + .byte PATT + mPtr song020_8_1 + .byte PATT + mPtr song020_8_2 + .byte PATT + mPtr song020_8_3 + .byte PATT + mPtr song020_8_4 + .byte PATT + mPtr song020_8_5 + .byte PATT + mPtr song020_8_6 + .byte PATT + mPtr song020_8_7 + .byte W78 + .byte W01 + .byte EOT , En4 + .byte W17 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte GOTO + mPtr song020_8_8 + .byte FINE + + @********************** Track 9 **********************@ + + .global song020_9 +song020_9: @ 0x087A9E46 + .byte KEYSH , 0 + .byte VOICE , 127 + .byte VOL , v110 + .byte PAN , c_v + .byte W24 +song020_9_1: + .byte N05 , Cn1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N11 , Cn1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N07 , Ds1, v048 + .byte W06 + .byte N17 , Cs1, v127 + .byte W06 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N23 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N11 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte N11 , Cs1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N05 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W06 + .byte N17 , Cs1, v127 + .byte W06 + .byte PEND +song020_9_2: + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N11 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte N11 , Cs1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N23 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N11 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte N21 , Cs1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N07 , Ds1, v048 + .byte W12 + .byte PEND + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 +song020_9_5: + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte N17 , Cn1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W12 + .byte N17 , Cs1, v127 + .byte W06 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N23 , Cn1, v127 + .byte W12 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N11 , Cn1, v127 + .byte W12 + .byte Cs1 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N80 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte W72 + .byte N21 , Cs1, v127 + .byte W24 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 +song020_9_3: + .byte N17 , Cn1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W12 + .byte N17 , Cs1, v127 + .byte W06 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N23 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N11 , Cn1, v127 + .byte W12 + .byte N23 , Cs1 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N07 , Ds1, v048 + .byte W12 + .byte PEND +song020_9_4: + .byte N17 , Cn1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N07 , Ds1, v048 + .byte W06 + .byte N17 , Cs1, v127 + .byte W06 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N23 , Cn1, v127 + .byte W12 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W06 + .byte N11 , Cn1, v127 + .byte N07 , Ds1, v048 + .byte W12 + .byte N21 , Cs1, v127 + .byte N04 , Dn1, v040 + .byte W06 + .byte N04 + .byte W18 + .byte PEND + .byte PATT + mPtr song020_9_3 + .byte PATT + mPtr song020_9_4 + .byte PATT + mPtr song020_9_3 + .byte PATT + mPtr song020_9_4 + .byte PATT + mPtr song020_9_3 + .byte PATT + mPtr song020_9_4 + .byte PATT + mPtr song020_9_3 + .byte PATT + mPtr song020_9_4 + .byte PATT + mPtr song020_9_3 + .byte PATT + mPtr song020_9_4 + .byte PATT + mPtr song020_9_3 + .byte PATT + mPtr song020_9_4 + .byte PATT + mPtr song020_9_3 + .byte PATT + mPtr song020_9_4 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte PATT + mPtr song020_9_1 + .byte PATT + mPtr song020_9_2 + .byte GOTO + mPtr song020_9_5 + .byte FINE + + mAlignWord + .global C_DECL(song020) +C_DECL(song020): @ 0x087AA03C + .byte 9 @ trackCount + .byte 0 @ blockCount + .byte 0 @ priority + .byte 128 @ reverb + +mAlignWord + mPtr voicegroup006 @ voicegroup/tone + + mPtr song020_1 @ track + mPtr song020_2 @ track + mPtr song020_3 @ track + mPtr song020_4 @ track + mPtr song020_5 @ track + mPtr song020_6 @ track + mPtr song020_7 @ track + mPtr song020_8 @ track + mPtr song020_9 @ track diff --git a/sa1/sound/songs/song030.s b/sa1/sound/songs/song030.s new file mode 100644 index 0000000000..598300d6fb --- /dev/null +++ b/sa1/sound/songs/song030.s @@ -0,0 +1,3910 @@ + .include "asm/macros/c_decl.inc" + .include "asm/macros/portable.inc" + .include "sound/MPlayDef.s" + + mSectionRodata + + @********************** Track 1 **********************@ + + mAlignWord + .global song030_1 +song030_1: @ 0x087B0834 + .byte KEYSH , 0 + .byte TEMPO , 80 + .byte VOICE , 89 + .byte VOL , v099 + .byte PAN , c_v + .byte BENDR , 3 + .byte W12 + .byte N06 , Bn1, v127 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 +song030_1_1: + .byte N06 , Bn1, v127 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte PEND + .byte N06 + .byte W12 +song030_1_4: + .byte N06 , Bn1, v127 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte N06 , Bn1, v127 + .byte W12 + .byte Cn2 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 +song030_1_2: + .byte N06 , Cn2, v127 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte PEND + .byte PATT + mPtr song030_1_2 + .byte PATT + mPtr song030_1_2 + .byte PATT + mPtr song030_1_2 + .byte PATT + mPtr song030_1_2 + .byte PATT + mPtr song030_1_2 + .byte PATT + mPtr song030_1_2 + .byte N06 , Cn2, v127 + .byte W12 + .byte Bn1 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte PATT + mPtr song030_1_1 + .byte N06 , Bn1, v127 + .byte W12 + .byte Cs2 + .byte W12 + .byte Dn2 + .byte W12 + .byte Ds2 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 +song030_1_3: + .byte N06 , Ds2, v127 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte PEND + .byte PATT + mPtr song030_1_3 + .byte PATT + mPtr song030_1_3 + .byte N06 , Ds2, v127 + .byte W12 + .byte N12 , Fn2, v124 + .byte W36 + .byte N12 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W12 + .byte N06 , Bn1, v127 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte N06 + .byte W12 + .byte PATT + mPtr song030_1_1 + .byte N06 , Bn1, v127 + .byte W12 + .byte GOTO + mPtr song030_1_4 + .byte FINE + + @********************** Track 2 **********************@ + + .global song030_2 +song030_2: @ 0x087B097E + .byte KEYSH , 0 + .byte VOICE , 95 + .byte VOL , v081 + .byte PAN , c_v + .byte BENDR , 3 + .byte W96 + .byte W96 + .byte W12 +song030_2_2: + .byte W84 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W15 + .byte VOL , v076 + .byte W80 + .byte W01 + .byte W06 + .byte N06 , Gn2, v127 + .byte N06 , Cn3 + .byte N07 , Fn3 + .byte W24 + .byte Gn2 + .byte N07 , Cn3 + .byte N08 , Fn3 + .byte W12 + .byte N28 , Gs2 + .byte N28 , Cs3 + .byte N30 , Fs3 + .byte W36 + .byte N05 , Gn2 + .byte N04 , Cn3 + .byte N07 , Fn3 + .byte W18 + .byte W06 + .byte N08 , Gn2 + .byte N07 , Cn3 + .byte N09 , Fn3 + .byte W12 + .byte N32 , Fs2 + .byte N30 , Bn2 + .byte N32 , En3 + .byte W54 + .byte N05 , Fs2 + .byte N04 , Bn2 + .byte N09 , En3 + .byte W24 + .byte N04 , Fs2 + .byte N06 , Bn2 + .byte N10 , En3 + .byte W12 + .byte N08 , Gn2 + .byte N08 , Cn3 + .byte N11 , Fn3 + .byte W24 + .byte N07 , Gn2 + .byte N10 , Cn3 + .byte N11 , Fn3 + .byte W12 + .byte N08 , Fs2 + .byte N09 , Bn2 + .byte N10 , En3 + .byte W24 + .byte N06 , Fs2 + .byte N08 , Bn2 + .byte N07 , En3 + .byte W12 + .byte TIE , Fn2 + .byte TIE , As2 + .byte TIE , Ds3 + .byte W12 + .byte W12 + .byte VOL , v076 + .byte W06 + .byte v075 + .byte W04 + .byte v074 + .byte W03 + .byte v073 + .byte W03 + .byte v072 + .byte W04 + .byte v071 + .byte W03 + .byte v070 + .byte W03 + .byte v069 + .byte W03 + .byte v068 + .byte W04 + .byte v067 + .byte W03 + .byte v067 + .byte W03 + .byte v066 + .byte W04 + .byte v065 + .byte W03 + .byte v064 + .byte W03 + .byte v063 + .byte W04 + .byte v062 + .byte W03 + .byte v061 + .byte W03 + .byte v060 + .byte W03 + .byte v059 + .byte W04 + .byte v058 + .byte W03 + .byte v057 + .byte W03 + .byte v057 + .byte W04 + .byte v056 + .byte W03 + .byte v055 + .byte W03 + .byte v054 + .byte W02 + .byte W02 + .byte v053 + .byte W03 + .byte v052 + .byte W03 + .byte v051 + .byte W03 + .byte v050 + .byte W04 + .byte v049 + .byte W03 + .byte v048 + .byte W03 + .byte v047 + .byte W04 + .byte v047 + .byte W03 + .byte v046 + .byte W03 + .byte v045 + .byte W04 + .byte v044 + .byte W03 + .byte v043 + .byte W03 + .byte v042 + .byte W03 + .byte v041 + .byte W01 + .byte v040 + .byte W08 + .byte v039 + .byte W04 + .byte v038 + .byte W04 + .byte v038 + .byte W04 + .byte v037 + .byte W04 + .byte v036 + .byte W05 + .byte v035 + .byte W04 + .byte v034 + .byte W04 + .byte v033 + .byte W04 + .byte v032 + .byte W04 + .byte v031 + .byte W04 + .byte v030 + .byte W02 + .byte EOT , Fn2 + .byte W02 + .byte VOL , v029 + .byte W01 + .byte EOT , As2 + .byte W02 + .byte Ds3 + .byte W01 + .byte VOL , v028 + .byte W05 + .byte v028 + .byte W04 + .byte v027 + .byte W04 + .byte v026 + .byte W04 + .byte v025 + .byte W04 + .byte v024 + .byte W04 + .byte v023 + .byte W04 + .byte v022 + .byte W04 + .byte v021 + .byte W05 + .byte v020 + .byte W04 + .byte v019 + .byte W04 + .byte v019 + .byte W04 + .byte v018 + .byte W04 + .byte v017 + .byte W04 + .byte v016 + .byte W04 + .byte v015 + .byte W04 + .byte v014 + .byte W05 + .byte v013 + .byte W04 + .byte v012 + .byte W04 + .byte v011 + .byte W04 + .byte v010 + .byte W04 + .byte v009 + .byte W03 + .byte W01 + .byte v009 + .byte W04 + .byte v008 + .byte W04 + .byte v007 + .byte W05 + .byte v006 + .byte W04 + .byte v005 + .byte W04 + .byte v004 + .byte W04 + .byte v003 + .byte W04 + .byte v002 + .byte W04 + .byte v001 + .byte W04 + .byte v000 + .byte W01 + .byte v000 + .byte W56 + .byte W01 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W12 + .byte v081 + .byte W84 + .byte W96 + .byte W96 + .byte W12 + .byte N07 , An2, v116 + .byte N07 , Dn3 + .byte N07 , Gn3 + .byte W12 + .byte W12 + .byte N11 , An2, v124 + .byte N11 , Dn3 + .byte N11 , Gn3 + .byte W12 + .byte N20 , As2, v120 + .byte N20 , Ds3 + .byte N20 , Gs3 + .byte W24 + .byte N11 , Cs3, v112 + .byte N11 , Fs3 + .byte N11 , Bn3 + .byte W12 + .byte Cn3, v127 + .byte N11 , Fn3 + .byte N11 , As3 + .byte W12 + .byte As2, v120 + .byte N11 , Ds3 + .byte N11 , Gs3 + .byte W12 + .byte N07 , An2, v116 + .byte N07 , Dn3 + .byte N07 , Gn3 + .byte W12 + .byte W12 + .byte N11 , An2 + .byte N11 , Dn3 + .byte N11 , Gn3 + .byte W12 + .byte N24 , As2, v127 + .byte N24 , Ds3 + .byte N24 , Gs3 + .byte W36 + .byte N10 , Cn3 + .byte N10 , Fn3 + .byte N10 , As3 + .byte W24 + .byte N11 , Cn3, v116 + .byte N11 , Fn3 + .byte N11 , As3 + .byte W12 + .byte N24 , Cs3, v120 + .byte N24 , Fs3 + .byte W36 + .byte N32 , Ds3, v127 + .byte N32 , Gs3 + .byte W36 + .byte En3 + .byte N32 , An3 + .byte W24 + .byte W12 + .byte VOL , v115 + .byte W60 + .byte N84 , Gs2 + .byte N84 , Dn3 + .byte N84 , Gn3 + .byte W08 + .byte VOL , v115 + .byte W01 + .byte v106 + .byte W01 + .byte v097 + .byte W01 + .byte v091 + .byte W01 + .byte v082 + .byte W01 + .byte v073 + .byte W01 + .byte v067 + .byte W01 + .byte v058 + .byte W01 + .byte v049 + .byte W01 + .byte v044 + .byte W01 + .byte v035 + .byte W01 + .byte v026 + .byte W01 + .byte v019 + .byte W01 + .byte v010 + .byte W01 + .byte v005 + .byte W01 + .byte v006 + .byte W01 +song030_2_1: + .byte VOL , v008 + .byte W01 + .byte v009 + .byte W01 + .byte v011 + .byte W01 + .byte v013 + .byte W01 + .byte v015 + .byte W01 + .byte v017 + .byte W01 + .byte v019 + .byte W01 + .byte v020 + .byte W01 + .byte v022 + .byte W01 + .byte v024 + .byte W01 + .byte v025 + .byte W01 + .byte v027 + .byte W01 + .byte v028 + .byte W01 + .byte v030 + .byte W01 + .byte v032 + .byte W01 + .byte v034 + .byte W01 + .byte v036 + .byte W01 + .byte v038 + .byte W01 + .byte v038 + .byte W01 + .byte v040 + .byte W01 + .byte v041 + .byte W01 + .byte v043 + .byte W01 + .byte v045 + .byte W01 + .byte v047 + .byte W01 + .byte v048 + .byte W01 + .byte v050 + .byte W01 + .byte v052 + .byte W01 + .byte v054 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v062 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v069 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v074 + .byte W01 + .byte v076 + .byte W01 + .byte v076 + .byte W01 + .byte v078 + .byte W01 + .byte v080 + .byte W01 + .byte v082 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v089 + .byte W01 + .byte v091 + .byte W01 + .byte v093 + .byte W01 + .byte v095 + .byte W01 + .byte v095 + .byte W01 + .byte v097 + .byte W01 + .byte v099 + .byte W01 + .byte v101 + .byte W01 + .byte v103 + .byte W01 + .byte v104 + .byte W08 + .byte v105 + .byte W04 + .byte v105 + .byte W04 + .byte v106 + .byte W04 + .byte v107 + .byte W04 + .byte v108 + .byte W04 + .byte v109 + .byte W05 + .byte v110 + .byte W04 + .byte v111 + .byte W02 + .byte PEND + .byte W02 + .byte v112 + .byte W04 + .byte v113 + .byte W04 + .byte v115 + .byte W02 + .byte N96 , Fn2, v127 + .byte N96 , Bn2 + .byte N96 , En3 + .byte W10 + .byte VOL , v115 + .byte W01 + .byte v105 + .byte W01 + .byte v095 + .byte W01 + .byte v087 + .byte W01 + .byte v077 + .byte W01 + .byte v067 + .byte W01 + .byte v059 + .byte W01 + .byte v049 + .byte W01 + .byte v039 + .byte W01 + .byte v032 + .byte W01 + .byte v021 + .byte W01 + .byte v011 + .byte W02 + .byte v013 + .byte W01 + .byte v015 + .byte W01 + .byte v016 + .byte W01 + .byte v018 + .byte W01 + .byte v019 + .byte W01 + .byte v020 + .byte W01 + .byte v022 + .byte W01 + .byte v024 + .byte W01 + .byte v025 + .byte W01 + .byte v027 + .byte W01 + .byte v028 + .byte W01 + .byte v029 + .byte W01 + .byte v031 + .byte W01 + .byte v033 + .byte W01 + .byte v034 + .byte W01 + .byte v036 + .byte W01 + .byte v038 + .byte W02 + .byte v039 + .byte W01 + .byte v041 + .byte W01 + .byte v042 + .byte W01 + .byte v044 + .byte W01 + .byte v046 + .byte W01 + .byte v047 + .byte W01 + .byte v048 + .byte W01 + .byte v050 + .byte W01 + .byte v051 + .byte W01 + .byte v053 + .byte W01 + .byte v055 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v062 + .byte W01 + .byte v064 + .byte W02 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v075 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v090 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W01 + .byte v095 + .byte W01 + .byte v096 + .byte W01 + .byte v098 + .byte W01 + .byte v100 + .byte W02 + .byte W04 + .byte v101 + .byte W03 + .byte v102 + .byte W03 + .byte v103 + .byte W02 + .byte v115 + .byte W60 + .byte N84 , An2 + .byte N84 , Ds3 + .byte N84 , Gs3 + .byte W08 + .byte VOL , v115 + .byte W01 + .byte v106 + .byte W01 + .byte v097 + .byte W01 + .byte v091 + .byte W01 + .byte v082 + .byte W01 + .byte v073 + .byte W01 + .byte v067 + .byte W01 + .byte v058 + .byte W01 + .byte v049 + .byte W01 + .byte v044 + .byte W01 + .byte v035 + .byte W01 + .byte v026 + .byte W01 + .byte v019 + .byte W01 + .byte v010 + .byte W01 + .byte v005 + .byte W01 + .byte v006 + .byte W01 + .byte PATT + mPtr song030_2_1 + .byte W02 + .byte VOL , v112 + .byte W04 + .byte v113 + .byte W04 + .byte v115 + .byte W12 + .byte v115 + .byte W01 + .byte v105 + .byte W01 + .byte v095 + .byte W01 + .byte v087 + .byte W01 + .byte v077 + .byte W01 + .byte v067 + .byte W01 + .byte v059 + .byte W01 + .byte v049 + .byte W01 + .byte v039 + .byte W01 + .byte v032 + .byte W01 + .byte v021 + .byte W01 + .byte v011 + .byte W02 + .byte v013 + .byte W01 + .byte v015 + .byte W01 + .byte v016 + .byte W01 + .byte v018 + .byte W01 + .byte v019 + .byte W01 + .byte v020 + .byte W01 + .byte v022 + .byte W01 + .byte v024 + .byte W01 + .byte v025 + .byte W01 + .byte v027 + .byte W01 + .byte v028 + .byte W01 + .byte v029 + .byte W01 + .byte v031 + .byte W01 + .byte v033 + .byte W01 + .byte v034 + .byte W01 + .byte v036 + .byte W01 + .byte v038 + .byte W02 + .byte v039 + .byte W01 + .byte v041 + .byte W01 + .byte v042 + .byte W01 + .byte v044 + .byte W01 + .byte v046 + .byte W01 + .byte v047 + .byte W01 + .byte v048 + .byte W01 + .byte v050 + .byte W01 + .byte v051 + .byte W01 + .byte v053 + .byte W01 + .byte v055 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v062 + .byte W01 + .byte v064 + .byte W02 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v075 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v090 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W01 + .byte v095 + .byte W01 + .byte v096 + .byte W01 + .byte v098 + .byte W01 + .byte v100 + .byte W02 + .byte W04 + .byte v101 + .byte W03 + .byte v102 + .byte W03 + .byte v103 + .byte W84 + .byte W02 + .byte W96 + .byte W12 + .byte GOTO + mPtr song030_2_2 + .byte FINE + + @********************** Track 3 **********************@ + + .global song030_3 +song030_3: @ 0x087B0D48 + .byte KEYSH , 0 + .byte VOICE , 127 + .byte VOL , v115 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 0 + .byte MODT , 2 + .byte W12 + .byte N12 , Ds1, v044 + .byte N96 , Cn2, v116 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v040 + .byte W06 + .byte N12 , Ds1, v048 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 +song030_3_1: + .byte N06 , Dn1, v044 + .byte W06 + .byte N12 , Ds1, v040 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Dn1, v036 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte Ds1, v048 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte PEND + .byte N12 , Ds1 + .byte W12 +song030_3_8: + .byte N06 , Dn1, v032 + .byte W06 + .byte N12 , Ds1, v040 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1, v036 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1 + .byte W06 +song030_3_2: + .byte W06 + .byte N06 , Dn1, v048 + .byte W06 + .byte Dn1, v056 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte N12 , Ds1, v044 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Dn1, v032 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte PEND +song030_3_3: + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v036 + .byte W06 + .byte N12 , Ds1, v044 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v040 + .byte W06 + .byte N12 , Ds1, v048 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte PEND + .byte PATT + mPtr song030_3_1 +song030_3_4: + .byte N12 , Ds1, v048 + .byte W12 + .byte N06 , Dn1, v032 + .byte W06 + .byte N12 , Ds1, v040 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1, v036 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1 + .byte W06 + .byte PEND + .byte PATT + mPtr song030_3_2 + .byte PATT + mPtr song030_3_3 + .byte PATT + mPtr song030_3_1 +song030_3_5: + .byte N12 , Ds1, v048 + .byte W12 + .byte N06 , Dn1, v032 + .byte N96 , Cn2, v116 + .byte W06 + .byte N12 , Ds1, v040 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1, v036 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1 + .byte W06 + .byte PEND + .byte PATT + mPtr song030_3_2 + .byte PATT + mPtr song030_3_3 + .byte PATT + mPtr song030_3_1 + .byte PATT + mPtr song030_3_4 + .byte PATT + mPtr song030_3_2 + .byte PATT + mPtr song030_3_3 + .byte PATT + mPtr song030_3_1 + .byte PATT + mPtr song030_3_5 + .byte PATT + mPtr song030_3_2 + .byte PATT + mPtr song030_3_3 + .byte PATT + mPtr song030_3_1 + .byte PATT + mPtr song030_3_4 + .byte PATT + mPtr song030_3_2 + .byte PATT + mPtr song030_3_3 + .byte PATT + mPtr song030_3_1 + .byte N12 , Ds1, v048 + .byte W12 + .byte N06 , Dn1, v032 + .byte W06 + .byte N12 , Ds1, v040 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1, v036 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v048 + .byte W06 + .byte Dn1, v056 + .byte W06 + .byte N12 , Ds1, v052 + .byte W06 + .byte W06 + .byte N06 , Dn1 + .byte W06 + .byte N12 , Ds1, v044 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Dn1, v032 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte N06 + .byte W06 + .byte Dn1, v036 + .byte W06 + .byte N12 , Ds1, v044 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v040 + .byte W06 + .byte N12 , Ds1, v048 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte N12 , Ds1, v040 + .byte W12 + .byte N06 , Dn1 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Dn1, v036 + .byte W06 + .byte N12 , Ds1, v052 + .byte W12 + .byte Ds1, v048 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v032 + .byte W06 + .byte N12 , Ds1, v040 + .byte W06 + .byte W06 + .byte N06 , Dn1 + .byte W06 + .byte N12 , Ds1, v072 + .byte N06 , En4, v020 + .byte W06 + .byte Cn2, v116 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte Ds1, v048 + .byte W06 + .byte N12 , Ds1, v072 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte Dn1, v044 + .byte W06 +song030_3_6: + .byte N06 , Dn1, v032 + .byte W06 + .byte Dn1, v040 + .byte W06 + .byte N12 , Ds1, v036 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte N12 , Ds1, v056 + .byte W12 + .byte N06 , Dn1, v064 + .byte W06 + .byte N12 , Ds1, v072 + .byte W12 + .byte N06 , Dn1, v052 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte Ds1, v048 + .byte W06 + .byte PEND +song030_3_7: + .byte N12 , Ds1, v072 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v040 + .byte W06 + .byte N12 , Ds1, v036 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte N12 , Ds1, v056 + .byte W06 + .byte PEND + .byte W06 + .byte N06 , Dn1, v064 + .byte W06 + .byte N12 , Ds1, v072 + .byte W12 + .byte N06 , Dn1, v052 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte Dn1, v052 + .byte W06 + .byte Ds1, v048 + .byte W06 + .byte N12 , Ds1, v072 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte PATT + mPtr song030_3_6 + .byte PATT + mPtr song030_3_7 + .byte W06 + .byte N06 , Dn1, v064 + .byte W06 + .byte N12 , Ds1, v044 + .byte N96 , Cn2, v116 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v048 + .byte W06 + .byte N12 , Ds1 + .byte W12 + .byte N06 , Dn1, v040 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte Dn1, v040 + .byte W06 + .byte N12 , Ds1, v048 + .byte W12 + .byte N06 , Dn1, v044 + .byte W06 + .byte Dn1, v032 + .byte W06 + .byte PATT + mPtr song030_3_1 + .byte N12 , Ds1, v048 + .byte W12 + .byte GOTO + mPtr song030_3_8 + .byte FINE + + @********************** Track 4 **********************@ + + .global song030_4 +song030_4: @ 0x087B108E + .byte KEYSH , 0 + .byte VOICE , 74 + .byte VOL , v108 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte PRIO , 30 + .byte W96 + .byte W96 + .byte W12 +song030_4_8: + .byte W84 +song030_4_1: + .byte W12 + .byte VOL , v115 + .byte N32 , Cs2, v116 + .byte W36 + .byte Dn2, v108 + .byte W36 + .byte Bn1, v104 + .byte W12 + .byte PEND +song030_4_2: + .byte W24 + .byte N32 , Cs2, v100 + .byte W36 + .byte N08 , Dn2, v108 + .byte W24 + .byte N32 , En2, v116 + .byte W12 + .byte PEND +song030_4_3: + .byte W24 + .byte N32 , Fs2, v108 + .byte W36 + .byte Dn2, v096 + .byte W36 + .byte PEND +song030_4_4: + .byte N32 , En2, v108 + .byte W36 + .byte N09 , Fs2 + .byte W24 + .byte N32 , Gn2, v120 + .byte W36 + .byte PEND +song030_4_5: + .byte N32 , En2, v096 + .byte N32 , An2 + .byte W36 + .byte Cs2, v112 + .byte N32 , Fs2 + .byte W36 + .byte Dn2, v116 + .byte N32 , Gn2 + .byte W24 + .byte PEND +song030_4_6: + .byte W12 + .byte N08 , En2, v112 + .byte N08 , An2 + .byte W12 + .byte En2 + .byte N08 , Bn2 + .byte W12 + .byte N32 , An2, v120 + .byte N32 , Cs3 + .byte W36 + .byte An2, v112 + .byte N32 , Dn3 + .byte W24 + .byte PEND +song030_4_7: + .byte W12 + .byte N32 , An2, v116 + .byte N32 , En3 + .byte W36 + .byte Bn2, v120 + .byte N32 , Fs3 + .byte W36 + .byte N10 , Bn2, v112 + .byte N10 , Gn3 + .byte W12 + .byte PEND + .byte W12 + .byte N11 , Ds3 + .byte N11 , Gn3 + .byte W12 + .byte N10 , Fn3, v104 + .byte N10 , Gs3 + .byte W24 + .byte TIE , Cn3, v108 + .byte TIE , Fn3 + .byte W48 + .byte W32 + .byte W02 + .byte VOL , v115 + .byte W03 + .byte v114 + .byte W01 + .byte v113 + .byte W02 + .byte v112 + .byte W01 + .byte v111 + .byte W02 + .byte v110 + .byte W01 + .byte v109 + .byte W02 + .byte v108 + .byte W01 + .byte v107 + .byte W01 + .byte v106 + .byte W02 + .byte v105 + .byte W01 + .byte v105 + .byte W02 + .byte v104 + .byte W01 + .byte v103 + .byte W02 + .byte v102 + .byte W01 + .byte v101 + .byte W02 + .byte v100 + .byte W01 + .byte v099 + .byte W02 + .byte v098 + .byte W01 + .byte v097 + .byte W02 + .byte v096 + .byte W01 + .byte v095 + .byte W02 + .byte v095 + .byte W01 + .byte v094 + .byte W02 + .byte v093 + .byte W01 + .byte v092 + .byte W02 + .byte v091 + .byte W01 + .byte v090 + .byte W02 + .byte v089 + .byte W01 + .byte v088 + .byte W01 + .byte v087 + .byte W02 + .byte v086 + .byte W01 + .byte v086 + .byte W02 + .byte v085 + .byte W01 + .byte v084 + .byte W02 + .byte v083 + .byte W01 + .byte v082 + .byte W02 + .byte v081 + .byte W01 + .byte v080 + .byte W02 + .byte v079 + .byte W01 + .byte v078 + .byte W02 + .byte v077 + .byte W01 + .byte v076 + .byte W02 + .byte v076 + .byte W01 + .byte v075 + .byte W02 + .byte v074 + .byte W01 + .byte v073 + .byte W02 + .byte v072 + .byte W01 + .byte v071 + .byte W01 + .byte v070 + .byte W02 + .byte v069 + .byte W01 + .byte v068 + .byte W02 + .byte v067 + .byte W01 + .byte v067 + .byte W02 + .byte v066 + .byte W01 + .byte v065 + .byte W02 + .byte v064 + .byte W01 + .byte v063 + .byte W02 + .byte v062 + .byte W01 + .byte v061 + .byte W02 + .byte v060 + .byte W01 + .byte v059 + .byte W02 + .byte v058 + .byte W01 + .byte v057 + .byte W02 + .byte v057 + .byte W01 + .byte v056 + .byte W02 + .byte v055 + .byte W01 + .byte v054 + .byte W02 + .byte v053 + .byte W01 + .byte v052 + .byte W01 + .byte v051 + .byte W02 + .byte v050 + .byte W01 + .byte v049 + .byte W02 + .byte v048 + .byte W01 + .byte v047 + .byte W02 + .byte v047 + .byte W01 + .byte v046 + .byte W02 + .byte v045 + .byte W01 + .byte v044 + .byte W02 + .byte v043 + .byte W01 + .byte v042 + .byte W02 + .byte v041 + .byte W01 + .byte v040 + .byte W02 + .byte v039 + .byte W01 + .byte v038 + .byte W02 + .byte v038 + .byte W01 + .byte v037 + .byte W02 + .byte v036 + .byte W01 + .byte v035 + .byte W01 + .byte v034 + .byte W02 + .byte v033 + .byte W01 + .byte v032 + .byte W02 + .byte v031 + .byte W01 + .byte v030 + .byte W02 + .byte v029 + .byte W01 + .byte v028 + .byte W02 + .byte v028 + .byte W01 + .byte v027 + .byte W02 + .byte v026 + .byte W01 + .byte v025 + .byte W02 + .byte v024 + .byte W01 + .byte v023 + .byte W02 + .byte v022 + .byte W01 + .byte v021 + .byte W02 + .byte v020 + .byte W01 + .byte v019 + .byte W02 + .byte v019 + .byte W01 + .byte v018 + .byte W02 + .byte v017 + .byte W01 + .byte v016 + .byte W01 + .byte v015 + .byte W02 + .byte v014 + .byte W01 + .byte v013 + .byte W02 + .byte v012 + .byte W01 + .byte v011 + .byte W02 + .byte v010 + .byte W01 + .byte v009 + .byte W02 + .byte EOT , Cn3 + .byte Fn3 + .byte VOL , v009 + .byte W01 + .byte v008 + .byte W02 + .byte v007 + .byte W01 + .byte v006 + .byte W02 + .byte v005 + .byte W01 + .byte v004 + .byte W02 + .byte v003 + .byte W01 + .byte v002 + .byte W02 + .byte v001 + .byte W01 + .byte v000 + .byte W01 + .byte v000 + .byte W66 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte PATT + mPtr song030_4_1 + .byte PATT + mPtr song030_4_2 + .byte PATT + mPtr song030_4_3 + .byte PATT + mPtr song030_4_4 + .byte PATT + mPtr song030_4_5 + .byte PATT + mPtr song030_4_6 + .byte PATT + mPtr song030_4_7 + .byte W12 + .byte N10 , Cs3, v112 + .byte N10 , An3 + .byte W24 + .byte N11 , Fn3 + .byte N11 , An3 + .byte W12 + .byte N10 , Gn3, v104 + .byte N10 , As3 + .byte W24 + .byte TIE , Dn3, v108 + .byte TIE , Gn3 + .byte W24 + .byte W40 + .byte VOL , v115 + .byte W03 + .byte v114 + .byte W01 + .byte v113 + .byte W02 + .byte v112 + .byte W01 + .byte v111 + .byte W02 + .byte v110 + .byte W01 + .byte v109 + .byte W02 + .byte v108 + .byte W01 + .byte v107 + .byte W01 + .byte v106 + .byte W02 + .byte v105 + .byte W01 + .byte v105 + .byte W02 + .byte v104 + .byte W01 + .byte v103 + .byte W02 + .byte v102 + .byte W01 + .byte v101 + .byte W02 + .byte v100 + .byte W01 + .byte v099 + .byte W02 + .byte v098 + .byte W01 + .byte v097 + .byte W02 + .byte v096 + .byte W01 + .byte v095 + .byte W02 + .byte v095 + .byte W01 + .byte v094 + .byte W02 + .byte v093 + .byte W01 + .byte v092 + .byte W02 + .byte v091 + .byte W01 + .byte v090 + .byte W02 + .byte v089 + .byte W01 + .byte v088 + .byte W01 + .byte v087 + .byte W02 + .byte v086 + .byte W01 + .byte v086 + .byte W02 + .byte v085 + .byte W01 + .byte v084 + .byte W02 + .byte v083 + .byte W01 + .byte v082 + .byte W02 + .byte v081 + .byte W01 + .byte v080 + .byte W02 + .byte v079 + .byte W01 + .byte v078 + .byte W02 + .byte v077 + .byte W01 + .byte v076 + .byte W02 + .byte v076 + .byte W01 + .byte v075 + .byte W02 + .byte v074 + .byte W01 + .byte v073 + .byte W02 + .byte v072 + .byte W01 + .byte v071 + .byte W01 + .byte v070 + .byte W02 + .byte v069 + .byte W01 + .byte v068 + .byte W02 + .byte v067 + .byte W01 + .byte v067 + .byte W01 + .byte W01 + .byte v066 + .byte W01 + .byte v065 + .byte W02 + .byte v064 + .byte W01 + .byte v063 + .byte W02 + .byte v062 + .byte W01 + .byte v061 + .byte W02 + .byte v060 + .byte W01 + .byte v059 + .byte W02 + .byte v058 + .byte W01 + .byte v057 + .byte W02 + .byte v057 + .byte W01 + .byte v056 + .byte W02 + .byte v055 + .byte W01 + .byte v054 + .byte W02 + .byte v053 + .byte W01 + .byte v052 + .byte W01 + .byte v051 + .byte W02 + .byte v050 + .byte W01 + .byte v049 + .byte W02 + .byte v048 + .byte W01 + .byte v047 + .byte W02 + .byte v047 + .byte W01 + .byte v046 + .byte W02 + .byte v045 + .byte W01 + .byte v044 + .byte W02 + .byte v043 + .byte W01 + .byte v042 + .byte W02 + .byte v041 + .byte W01 + .byte v040 + .byte W02 + .byte v039 + .byte W01 + .byte v038 + .byte W02 + .byte v038 + .byte W01 + .byte v037 + .byte W02 + .byte v036 + .byte W01 + .byte v035 + .byte W01 + .byte v034 + .byte W02 + .byte v033 + .byte W01 + .byte v032 + .byte W02 + .byte v031 + .byte W01 + .byte v030 + .byte W02 + .byte v029 + .byte W01 + .byte v028 + .byte W02 + .byte v028 + .byte W01 + .byte v027 + .byte W02 + .byte v026 + .byte W01 + .byte v025 + .byte W02 + .byte v024 + .byte W01 + .byte v023 + .byte W02 + .byte v022 + .byte W01 + .byte v021 + .byte W02 + .byte v020 + .byte W01 + .byte v019 + .byte W02 + .byte v019 + .byte W01 + .byte v018 + .byte W02 + .byte v017 + .byte W01 + .byte v016 + .byte W01 + .byte v015 + .byte W02 + .byte v014 + .byte W01 + .byte v013 + .byte W02 + .byte v012 + .byte W01 + .byte v011 + .byte W02 + .byte v010 + .byte W01 + .byte v009 + .byte W02 + .byte v009 + .byte W01 + .byte v008 + .byte W01 + .byte W01 + .byte v007 + .byte W01 + .byte v006 + .byte W02 + .byte v005 + .byte W01 + .byte v004 + .byte W02 + .byte v003 + .byte W01 + .byte v002 + .byte W02 + .byte v001 + .byte W01 + .byte v000 + .byte W01 + .byte v000 + .byte W04 + .byte EOT , Dn3 + .byte Gn3 + .byte W80 + .byte VOL , v027 + .byte N24 , Bn2, v120 + .byte W01 + .byte VOL , v028 + .byte W01 + .byte v028 + .byte W01 + .byte v029 + .byte W02 + .byte v030 + .byte W01 + .byte v031 + .byte W01 + .byte v032 + .byte W01 + .byte v033 + .byte W01 + .byte v034 + .byte W02 + .byte v035 + .byte W01 + .byte v036 + .byte W01 + .byte v037 + .byte W01 + .byte v038 + .byte W01 + .byte v038 + .byte W02 + .byte v039 + .byte W01 + .byte v040 + .byte W01 + .byte v041 + .byte W01 + .byte v042 + .byte W01 + .byte v043 + .byte W02 + .byte v044 + .byte W01 + .byte v045 + .byte W01 + .byte v046 + .byte W01 + .byte v047 + .byte W01 + .byte v047 + .byte W02 + .byte v048 + .byte W01 + .byte v049 + .byte W01 + .byte v050 + .byte W01 + .byte v051 + .byte W01 + .byte v052 + .byte W02 + .byte v053 + .byte W01 + .byte v054 + .byte N32 , Cs3, v127 + .byte W01 + .byte VOL , v055 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W02 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v061 + .byte W02 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v065 + .byte W01 + .byte v066 + .byte W02 + .byte v067 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W01 + .byte v070 + .byte W02 + .byte v071 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v075 + .byte W02 + .byte v076 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W02 + .byte v080 + .byte W01 + .byte v081 + .byte N32 , Dn3 + .byte W01 + .byte VOL , v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W02 + .byte v085 + .byte W01 + .byte v086 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v088 + .byte W02 + .byte v089 + .byte W01 + .byte v090 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v093 + .byte W02 + .byte v094 + .byte W01 + .byte v095 + .byte W01 + .byte v095 + .byte W01 + .byte v096 + .byte W01 + .byte v097 + .byte W02 + .byte v098 + .byte W01 + .byte v099 + .byte W01 + .byte v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W02 + .byte v103 + .byte W01 + .byte v104 + .byte W01 + .byte v105 + .byte W01 + .byte v105 + .byte W01 + .byte v106 + .byte W02 + .byte v107 + .byte W01 + .byte v108 + .byte N12 , Fn2, v104 + .byte N12 , Bn2 + .byte N12 , En3, v108 + .byte W36 + .byte Fn2, v104 + .byte N12 , Bn2 + .byte N12 , En3, v112 + .byte W48 + .byte W60 + .byte VOL , v108 + .byte N12 , Fn2, v104 + .byte N12 , Bn2 + .byte N12 , En3, v108 + .byte W36 + .byte Fn2, v104 + .byte N12 , Bn2 + .byte N12 , En3, v112 + .byte W96 + .byte W12 + .byte VOL , v108 + .byte N12 , Fs2, v104 + .byte N12 , Cn3 + .byte N12 , Fn3, v108 + .byte W36 + .byte Fs2, v104 + .byte N12 , Cn3 + .byte N12 , Fn3, v112 + .byte W48 + .byte W60 + .byte VOL , v108 + .byte N12 , Gn2, v104 + .byte N12 , Cs3 + .byte N12 , Fs3, v108 + .byte W36 + .byte Gn2, v104 + .byte N12 , Cs3 + .byte N12 , Fs3, v112 + .byte W36 + .byte N72 , Fs2 + .byte N72 , Cs3 + .byte N72 , As3 + .byte W08 + .byte VOL , v104 + .byte W01 + .byte v097 + .byte W01 + .byte v093 + .byte W01 + .byte v086 + .byte W01 + .byte v079 + .byte W01 + .byte v075 + .byte W01 + .byte v067 + .byte W01 + .byte v060 + .byte W01 + .byte v056 + .byte W01 + .byte v049 + .byte W01 + .byte v042 + .byte W01 + .byte v038 + .byte W01 + .byte v031 + .byte W01 + .byte v028 + .byte W01 + .byte v029 + .byte W01 + .byte v030 + .byte W01 + .byte v032 + .byte W01 + .byte v034 + .byte W01 + .byte v036 + .byte W01 + .byte v037 + .byte W01 + .byte v038 + .byte W01 + .byte v040 + .byte W01 + .byte v041 + .byte W01 + .byte v043 + .byte W01 + .byte v045 + .byte W01 + .byte v047 + .byte W01 + .byte v047 + .byte W01 + .byte v049 + .byte W01 + .byte v051 + .byte W01 + .byte v053 + .byte W01 + .byte v054 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v062 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v075 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v089 + .byte W01 + .byte v090 + .byte W01 + .byte v091 + .byte W01 + .byte v093 + .byte W01 + .byte v095 + .byte W01 + .byte v095 + .byte W01 + .byte v097 + .byte W01 + .byte v099 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W01 + .byte v104 + .byte W01 + .byte v105 + .byte W01 + .byte v107 + .byte N12 , Bn2 + .byte N12 , Bn3 + .byte W01 + .byte VOL , v108 + .byte W80 + .byte W03 + .byte W96 + .byte W12 + .byte GOTO + mPtr song030_4_8 + .byte FINE + + @********************** Track 5 **********************@ + + .global song030_5 +song030_5: @ 0x087B151A + .byte KEYSH , 0 + .byte VOICE , 11 + .byte VOL , v063 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 3 + .byte MODT , 0 + .byte W12 + .byte N03 , Bn5, v127 + .byte W03 + .byte Gs5 + .byte W03 + .byte Fs5, v124 + .byte W03 + .byte Dn5, v120 + .byte W03 + .byte Bn4 + .byte W03 + .byte Gs4, v116 + .byte W03 + .byte Fs4 + .byte W03 + .byte Dn4, v112 + .byte W03 + .byte Bn3, v108 + .byte W03 + .byte Dn4 + .byte W03 + .byte Fs4, v104 + .byte W03 + .byte Gs4 + .byte W03 + .byte Bn4, v100 + .byte W03 + .byte Gs4, v096 + .byte W03 + .byte Fs4 + .byte W03 + .byte Dn4, v092 + .byte W03 + .byte Bn3 + .byte W03 + .byte Gs3, v088 + .byte W03 + .byte Fs3, v084 + .byte W03 + .byte Dn3 + .byte W03 + .byte Bn2, v080 + .byte W03 + .byte Dn3 + .byte W03 + .byte Fs3, v076 + .byte W03 + .byte Gs3, v072 + .byte W03 + .byte Bn3 + .byte W03 + .byte Gs3, v068 + .byte W03 + .byte Fs3, v064 + .byte W03 + .byte Dn3 + .byte W03 +song030_5_8: + .byte N03 , Bn2, v060 + .byte W03 + .byte Gs2 + .byte W03 + .byte Fs2, v056 + .byte W03 + .byte Dn2, v052 + .byte W03 + .byte Bn1 + .byte W03 + .byte Dn2, v048 + .byte W03 + .byte Fs2 + .byte W03 + .byte Gs2, v044 + .byte W03 + .byte Bn2, v040 + .byte W03 + .byte Gs2 + .byte W03 + .byte Fs2, v036 + .byte W03 + .byte Dn2 + .byte W03 + .byte Bn1, v032 + .byte W03 + .byte Gs1, v028 + .byte W03 + .byte Fs1 + .byte W03 + .byte Dn1, v024 + .byte W03 + .byte Bn0 + .byte W48 + .byte PEND + .byte W12 +song030_5_9: + .byte W84 +song030_5_1: + .byte W12 + .byte VOL , v063 + .byte N32 , Fs2, v116 + .byte W36 + .byte Gn2, v108 + .byte W36 + .byte Fs2, v104 + .byte W12 + .byte PEND +song030_5_2: + .byte W24 + .byte N32 , Gn2, v100 + .byte W36 + .byte N08 , Gn2, v108 + .byte W24 + .byte N32 , An2, v116 + .byte W12 + .byte PEND +song030_5_3: + .byte W24 + .byte N32 , Bn2, v108 + .byte W36 + .byte Gn2, v096 + .byte W36 + .byte PEND +song030_5_4: + .byte N32 , An2, v108 + .byte W36 + .byte N09 , Bn2 + .byte W24 + .byte N32 , Bn2, v120 + .byte W36 + .byte PEND +song030_5_5: + .byte N32 , Bn2, v096 + .byte W36 + .byte Gs2, v112 + .byte W36 + .byte An2, v116 + .byte W24 + .byte PEND +song030_5_6: + .byte W12 + .byte N08 , Bn2, v112 + .byte W12 + .byte Cs3 + .byte W12 + .byte N32 , Cs3, v120 + .byte W36 + .byte Fs3, v112 + .byte W24 + .byte PEND +song030_5_7: + .byte W12 + .byte N32 , En3, v116 + .byte W36 + .byte Fs3, v120 + .byte W36 + .byte N10 , Fs3, v112 + .byte W12 + .byte PEND + .byte W12 + .byte N11 , As3 + .byte W12 + .byte N10 , Cn4, v104 + .byte W24 + .byte TIE , Gs3, v108 + .byte W48 + .byte W19 + .byte VOL , v063 + .byte W05 + .byte v062 + .byte W03 + .byte v061 + .byte W03 + .byte v060 + .byte W02 + .byte v059 + .byte W03 + .byte v058 + .byte W02 + .byte v057 + .byte W03 + .byte v057 + .byte W03 + .byte v056 + .byte W02 + .byte v055 + .byte W03 + .byte v054 + .byte W02 + .byte v053 + .byte W03 + .byte v052 + .byte W02 + .byte v051 + .byte W03 + .byte v050 + .byte W03 + .byte v049 + .byte W02 + .byte v048 + .byte W03 + .byte v047 + .byte W02 + .byte v047 + .byte W03 + .byte v046 + .byte W02 + .byte v045 + .byte W03 + .byte v044 + .byte W03 + .byte v043 + .byte W02 + .byte v042 + .byte W03 + .byte v041 + .byte W02 + .byte v040 + .byte W03 + .byte v039 + .byte W02 + .byte v038 + .byte W03 + .byte v038 + .byte W02 + .byte W01 + .byte v037 + .byte W02 + .byte v036 + .byte W03 + .byte v035 + .byte W02 + .byte v034 + .byte W03 + .byte v033 + .byte W02 + .byte v032 + .byte W03 + .byte v031 + .byte W03 + .byte v030 + .byte W02 + .byte v029 + .byte W03 + .byte v028 + .byte W02 + .byte v028 + .byte W03 + .byte v027 + .byte W02 + .byte v026 + .byte W03 + .byte v025 + .byte W03 + .byte v024 + .byte W02 + .byte v023 + .byte W03 + .byte v022 + .byte W02 + .byte v021 + .byte W03 + .byte v020 + .byte W03 + .byte v019 + .byte W02 + .byte v019 + .byte W03 + .byte v018 + .byte W02 + .byte v017 + .byte W03 + .byte v016 + .byte W02 + .byte v015 + .byte W03 + .byte v014 + .byte W03 + .byte v013 + .byte W02 + .byte v012 + .byte W03 + .byte v011 + .byte W02 + .byte v010 + .byte W03 + .byte v009 + .byte W02 + .byte v009 + .byte W03 + .byte v008 + .byte W03 + .byte v007 + .byte W02 + .byte v006 + .byte W03 + .byte v005 + .byte W02 + .byte v004 + .byte W03 + .byte v003 + .byte W02 + .byte v002 + .byte W03 + .byte v001 + .byte W03 + .byte v000 + .byte W08 + .byte EOT + .byte W80 + .byte W24 + .byte VOL , v036 + .byte N06 , Dn4, v127 + .byte W36 + .byte N30 , Ds4 + .byte W36 + .byte W96 + .byte W96 + .byte W96 + .byte PATT + mPtr song030_5_1 + .byte PATT + mPtr song030_5_2 + .byte PATT + mPtr song030_5_3 + .byte PATT + mPtr song030_5_4 + .byte PATT + mPtr song030_5_5 + .byte PATT + mPtr song030_5_6 + .byte PATT + mPtr song030_5_7 + .byte W12 + .byte N10 , Fs3, v112 + .byte W24 + .byte N11 , Cn4 + .byte W12 + .byte N10 , Dn4, v104 + .byte W24 + .byte TIE , As3, v108 + .byte W24 + .byte W24 + .byte W01 + .byte VOL , v063 + .byte W05 + .byte v062 + .byte W03 + .byte v061 + .byte W03 + .byte v060 + .byte W02 + .byte v059 + .byte W03 + .byte v058 + .byte W02 + .byte v057 + .byte W03 + .byte v057 + .byte W03 + .byte v056 + .byte W02 + .byte v055 + .byte W03 + .byte v054 + .byte W02 + .byte v053 + .byte W03 + .byte v052 + .byte W02 + .byte v051 + .byte W03 + .byte v050 + .byte W03 + .byte v049 + .byte W02 + .byte v048 + .byte W03 + .byte v047 + .byte W02 + .byte v047 + .byte W03 + .byte v046 + .byte W02 + .byte v045 + .byte W03 + .byte v044 + .byte W03 + .byte v043 + .byte W02 + .byte v042 + .byte W03 + .byte v041 + .byte W02 + .byte v040 + .byte W03 + .byte v039 + .byte W02 + .byte v038 + .byte W03 + .byte v038 + .byte W03 + .byte v037 + .byte W02 + .byte v036 + .byte W03 + .byte v035 + .byte W02 + .byte v034 + .byte W03 + .byte v033 + .byte W02 + .byte v032 + .byte W03 + .byte v031 + .byte W02 + .byte W01 + .byte v030 + .byte W02 + .byte v029 + .byte W03 + .byte v028 + .byte W02 + .byte v028 + .byte W03 + .byte v027 + .byte W02 + .byte v026 + .byte W03 + .byte v025 + .byte W03 + .byte v024 + .byte W02 + .byte v023 + .byte W03 + .byte v022 + .byte W02 + .byte v021 + .byte W03 + .byte v020 + .byte W03 + .byte v019 + .byte W02 + .byte v019 + .byte W03 + .byte v018 + .byte W02 + .byte v017 + .byte W03 + .byte v016 + .byte W02 + .byte v015 + .byte W03 + .byte v014 + .byte W03 + .byte v013 + .byte W02 + .byte v012 + .byte W03 + .byte v011 + .byte W02 + .byte v010 + .byte W03 + .byte v009 + .byte W02 + .byte v009 + .byte W03 + .byte v008 + .byte W03 + .byte v007 + .byte W02 + .byte v006 + .byte W03 + .byte v005 + .byte W02 + .byte v004 + .byte W03 + .byte v003 + .byte W02 + .byte v002 + .byte W03 + .byte v001 + .byte W03 + .byte v000 + .byte W05 + .byte v000 + .byte W02 + .byte v001 + .byte W03 + .byte v002 + .byte W02 + .byte v003 + .byte W03 + .byte v004 + .byte W02 + .byte v005 + .byte W03 + .byte v006 + .byte W02 + .byte v007 + .byte W03 + .byte v008 + .byte W01 + .byte EOT + .byte W02 + .byte VOL , v009 + .byte W02 + .byte v009 + .byte W03 + .byte v010 + .byte W02 + .byte v011 + .byte W03 + .byte v012 + .byte W02 + .byte v013 + .byte W03 + .byte v014 + .byte W02 + .byte v015 + .byte W03 + .byte v016 + .byte W02 + .byte v017 + .byte W03 + .byte v018 + .byte W02 + .byte v019 + .byte W03 + .byte v019 + .byte W02 + .byte v020 + .byte W03 + .byte v021 + .byte W02 + .byte v022 + .byte W03 + .byte v023 + .byte W02 + .byte v024 + .byte W03 + .byte v025 + .byte W02 + .byte v026 + .byte W03 + .byte v027 + .byte W03 + .byte v028 + .byte W02 + .byte v028 + .byte W03 + .byte v029 + .byte W02 + .byte v030 + .byte W03 + .byte v031 + .byte W02 + .byte v032 + .byte W03 + .byte v033 + .byte W02 + .byte v034 + .byte W03 + .byte v035 + .byte W02 + .byte v036 + .byte W03 + .byte v037 + .byte W02 + .byte v038 + .byte W03 + .byte v038 + .byte W02 + .byte v039 + .byte W03 + .byte v040 + .byte W02 + .byte v041 + .byte N04 , Bn1, v112 + .byte W03 + .byte VOL , v042 + .byte W01 + .byte N04 , Cs2, v120 + .byte W01 + .byte VOL , v043 + .byte W03 + .byte v044 + .byte N04 , Dn2, v112 + .byte W03 + .byte VOL , v045 + .byte W01 + .byte N04 , En2, v108 + .byte W01 + .byte VOL , v046 + .byte W03 + .byte v047 + .byte N04 , Fn2, v100 + .byte W02 + .byte VOL , v047 + .byte W02 + .byte N04 , Gn2, v108 + .byte W01 + .byte VOL , v048 + .byte W02 + .byte v049 + .byte W01 + .byte N04 , Gs2, v112 + .byte W02 + .byte VOL , v050 + .byte W02 + .byte v051 + .byte N04 , As2, v120 + .byte W03 + .byte VOL , v052 + .byte W01 + .byte N04 , Bn2, v104 + .byte W01 + .byte VOL , v053 + .byte W03 + .byte v054 + .byte N04 , Cs3, v112 + .byte W02 + .byte VOL , v055 + .byte W02 + .byte N04 , Dn3, v108 + .byte W01 + .byte VOL , v056 + .byte W02 + .byte v057 + .byte W01 + .byte N04 , En3, v116 + .byte W02 + .byte VOL , v057 + .byte W02 + .byte v058 + .byte N04 , Fn3, v108 + .byte W03 + .byte VOL , v059 + .byte W01 + .byte N04 , Gn3, v112 + .byte W01 + .byte VOL , v060 + .byte W03 + .byte v061 + .byte N04 , Gs3, v124 + .byte W02 + .byte VOL , v062 + .byte W02 + .byte v063 + .byte N04 , As3, v120 + .byte W04 + .byte Bn3, v096 + .byte W04 + .byte Cs4, v120 + .byte W04 + .byte Dn4, v112 + .byte W04 + .byte En4, v104 + .byte W04 + .byte Fn4, v108 + .byte W04 + .byte Gn4, v112 + .byte W04 + .byte Gs4, v116 + .byte W04 + .byte As4, v124 + .byte W04 + .byte VOL , v063 + .byte N12 , Gs3, v104 + .byte W36 + .byte N12 + .byte W48 + .byte W60 + .byte VOL , v063 + .byte N12 + .byte W36 + .byte N12 + .byte W96 + .byte W12 + .byte VOL , v063 + .byte N12 , An3 + .byte W36 + .byte N12 + .byte W48 + .byte W60 + .byte VOL , v063 + .byte N12 , As3 + .byte W36 + .byte N12 + .byte W36 + .byte N04 , Fs1, v112 + .byte W04 + .byte Gs1, v120 + .byte W04 + .byte As1, v112 + .byte W04 + .byte Cs2, v116 + .byte W04 + .byte Fs2, v112 + .byte W04 + .byte Gs2, v108 + .byte W04 + .byte As2, v104 + .byte W04 + .byte Cs3 + .byte W04 + .byte Fs3 + .byte W04 + .byte Gs3, v108 + .byte W04 + .byte As3, v104 + .byte W04 + .byte Cs4 + .byte W04 + .byte Fs4, v108 + .byte W04 + .byte Gs4, v100 + .byte W04 + .byte As4 + .byte W04 + .byte Cs5, v108 + .byte W04 + .byte Fs5, v112 + .byte W04 + .byte Gs5 + .byte W04 + .byte N03 , Bn5, v127 + .byte W03 + .byte Gs5 + .byte W03 + .byte Fs5, v124 + .byte W03 + .byte Dn5, v120 + .byte W03 + .byte Bn4 + .byte W03 + .byte Gs4, v116 + .byte W03 + .byte Fs4 + .byte W03 + .byte Dn4, v112 + .byte W03 + .byte Bn3, v108 + .byte W03 + .byte Dn4 + .byte W03 + .byte Fs4, v104 + .byte W03 + .byte Gs4 + .byte W03 + .byte Bn4, v100 + .byte W03 + .byte Gs4, v096 + .byte W03 + .byte Fs4 + .byte W03 + .byte Dn4, v092 + .byte W03 + .byte Bn3 + .byte W03 + .byte Gs3, v088 + .byte W03 + .byte Fs3, v084 + .byte W03 + .byte Dn3 + .byte W03 + .byte Bn2, v080 + .byte W03 + .byte Dn3 + .byte W03 + .byte Fs3, v076 + .byte W03 + .byte Gs3, v072 + .byte W03 + .byte Bn3 + .byte W03 + .byte Gs3, v068 + .byte W03 + .byte Fs3, v064 + .byte W03 + .byte Dn3 + .byte W03 + .byte PATT + mPtr song030_5_8 + .byte W12 + .byte GOTO + mPtr song030_5_9 + .byte FINE + + @********************** Track 6 **********************@ + + .global song030_6 +song030_6: @ 0x087B1901 + .byte KEYSH , 0 + .byte VOICE , 90 + .byte VOL , v115 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte N06 , En2, v127 + .byte W06 + .byte N06 + .byte W06 + .byte N96 , An2 + .byte W84 + .byte W96 + .byte W12 +song030_6_3: + .byte W84 +song030_6_1: + .byte N06 , En2, v127 + .byte W06 + .byte N06 + .byte W06 + .byte N96 , An2 + .byte W84 + .byte PEND + .byte W96 + .byte W96 +song030_6_2: + .byte W48 + .byte N06 , En2, v127 + .byte W06 + .byte N06 + .byte W06 + .byte N96 , An2 + .byte W36 + .byte PEND + .byte W96 + .byte W96 + .byte W96 + .byte PATT + mPtr song030_6_1 + .byte W96 + .byte W96 + .byte W96 + .byte PATT + mPtr song030_6_1 + .byte W96 + .byte W96 + .byte W96 + .byte PATT + mPtr song030_6_1 + .byte W96 + .byte W96 + .byte PATT + mPtr song030_6_2 + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte N06 , En2, v127 + .byte W06 + .byte N06 + .byte W06 + .byte N96 , Cs3 + .byte W60 + .byte W96 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W12 + .byte N11 , Cs2 + .byte W12 + .byte N05 , Gs2, v120 + .byte W06 + .byte Gs2, v127 + .byte W06 + .byte N11 , Gs1, v120 + .byte W12 + .byte N36 , Cs2 + .byte W48 + .byte W60 + .byte N11 , Cs2, v127 + .byte W12 + .byte N05 , Gs2, v120 + .byte W06 + .byte Gs2, v127 + .byte W06 + .byte N11 , Gs1, v120 + .byte W12 + .byte N36 , Cs2 + .byte W96 + .byte W12 + .byte N11 , Dn2, v127 + .byte W12 + .byte N05 , An2, v120 + .byte W06 + .byte An2, v127 + .byte W06 + .byte N11 , An1, v120 + .byte W12 + .byte N36 , Dn2 + .byte W48 + .byte W60 + .byte N11 , Ds2, v127 + .byte W12 + .byte N05 , As2, v120 + .byte W06 + .byte As2, v127 + .byte W06 + .byte N11 , As1, v120 + .byte W12 + .byte N36 , Ds2 + .byte W96 + .byte PATT + mPtr song030_6_1 + .byte W96 + .byte W12 + .byte GOTO + mPtr song030_6_3 + .byte FINE + + @********************** Track 7 **********************@ + + .global song030_7 +song030_7: @ 0x087B19BF + .byte KEYSH , 0 + .byte VOICE , 93 + .byte VOL , v090 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W96 + .byte W96 + .byte W12 +song030_7_1: + .byte W84 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte N06 , Dn4, v127 + .byte N06 , Gn4 + .byte W36 + .byte N30 , Ds4 + .byte N30 , Gs4 + .byte W36 + .byte N06 , Cn4 + .byte N06 , Fn4 + .byte W12 + .byte Dn4 + .byte N06 , Gn4 + .byte W24 + .byte As3 + .byte N06 , Ds4 + .byte W24 + .byte Cn4 + .byte N06 , Fn4 + .byte W36 + .byte N30 , An3 + .byte N30 , Dn4 + .byte W36 + .byte N06 , An3 + .byte N06 , Dn4 + .byte W12 + .byte An3 + .byte N06 , Dn4 + .byte W24 + .byte As3 + .byte N06 , Ds4 + .byte W24 + .byte N24 , Gn3 + .byte N24 , Cn4 + .byte W36 + .byte N06 , An3 + .byte N06 , Dn4 + .byte W12 + .byte Fn3 + .byte N06 , As3 + .byte W24 + .byte N12 , Gn3, v088 + .byte N12 , Cn4 + .byte W24 + .byte Fn3 + .byte N12 , As3 + .byte W12 + .byte N36 , Fs3 + .byte N30 , Bn3 + .byte W84 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W12 + .byte GOTO + mPtr song030_7_1 + .byte FINE + + @********************** Track 8 **********************@ + + .global song030_8 +song030_8: @ 0x087B1A47 + .byte KEYSH , 0 + .byte VOICE , 91 + .byte VOL , v090 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W96 + .byte W96 + .byte W12 +song030_8_1: + .byte W84 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W60 + .byte N03 , Bn2, v104 + .byte W03 + .byte Cs3, v096 + .byte W03 + .byte Dn3, v100 + .byte W03 + .byte En3 + .byte W03 + .byte Fn3 + .byte W03 + .byte Gn3, v112 + .byte W03 + .byte Gs3, v096 + .byte W03 + .byte As3, v108 + .byte W03 + .byte Bn3 + .byte W03 + .byte Cs4, v116 + .byte W03 + .byte Dn4, v108 + .byte W03 + .byte As3, v124 + .byte W03 + .byte Gs3, v112 + .byte W03 + .byte Cs4, v108 + .byte W03 + .byte Bn3, v096 + .byte W03 + .byte Gn3 + .byte W03 + .byte Fn3 + .byte W03 + .byte As3, v112 + .byte W03 + .byte Gs3, v100 + .byte W03 + .byte En3, v076 + .byte W03 + .byte Dn3, v104 + .byte W03 + .byte Gn3 + .byte W03 + .byte Fn3, v096 + .byte W03 + .byte Cs3, v100 + .byte W03 + .byte Bn2, v096 + .byte W03 + .byte En3, v100 + .byte W03 + .byte Dn3, v108 + .byte W03 + .byte As2, v112 + .byte W03 + .byte Gs2, v104 + .byte W03 + .byte Cs3, v108 + .byte W03 + .byte Bn2, v100 + .byte W03 + .byte Gn2, v096 + .byte W36 + .byte W03 + .byte W12 + .byte As3, v116 + .byte W03 + .byte Gs3, v104 + .byte W03 + .byte Gn3, v096 + .byte W03 + .byte Fn3 + .byte W03 + .byte En3, v108 + .byte W03 + .byte Dn3, v096 + .byte W03 + .byte Cs3 + .byte W03 + .byte Bn2, v040 + .byte W03 + .byte As2, v100 + .byte W03 + .byte Gs2 + .byte W03 + .byte Gn2, v096 + .byte W03 + .byte Gs2, v104 + .byte W03 + .byte Cs3, v088 + .byte W03 + .byte Bn2 + .byte W03 + .byte As2, v092 + .byte W03 + .byte Bn2, v080 + .byte W03 + .byte En3, v096 + .byte W03 + .byte Dn3, v108 + .byte W03 + .byte Cs3, v100 + .byte W03 + .byte Dn3, v092 + .byte W03 + .byte Gn3, v108 + .byte W03 + .byte Fn3, v104 + .byte W03 + .byte En3, v076 + .byte W03 + .byte Fn3, v100 + .byte W03 + .byte As3, v116 + .byte W03 + .byte Gs3, v112 + .byte W03 + .byte Gn3, v108 + .byte W03 + .byte Gs3, v112 + .byte W03 + .byte Cs4, v120 + .byte W03 + .byte Bn3, v100 + .byte W03 + .byte Cs4, v116 + .byte W03 + .byte Dn4, v108 + .byte W48 + .byte W03 + .byte Cn3, v104 + .byte W03 + .byte Dn3, v096 + .byte W03 + .byte Ds3, v100 + .byte W03 + .byte Fn3 + .byte W03 + .byte Fs3 + .byte W03 + .byte Gs3, v112 + .byte W03 + .byte An3, v096 + .byte W03 + .byte Bn3, v108 + .byte W03 + .byte Cn4 + .byte W03 + .byte Dn4, v116 + .byte W03 + .byte Ds4, v108 + .byte W03 + .byte Bn3, v124 + .byte W03 + .byte An3, v112 + .byte W03 + .byte Dn4, v108 + .byte W03 + .byte Cn4, v096 + .byte W03 + .byte Gs3 + .byte W03 + .byte Fs3 + .byte W03 + .byte Bn3, v112 + .byte W03 + .byte An3, v100 + .byte W03 + .byte Fn3, v076 + .byte W03 + .byte Ds3, v104 + .byte W03 + .byte Gs3 + .byte W03 + .byte Fs3, v096 + .byte W03 + .byte Dn3, v100 + .byte W03 + .byte Cn3, v096 + .byte W03 + .byte Fn3, v100 + .byte W03 + .byte Ds3, v108 + .byte W03 + .byte Bn2, v112 + .byte W03 + .byte An2, v104 + .byte W03 + .byte Dn3, v108 + .byte W03 + .byte Cn3, v100 + .byte W03 + .byte Gs2, v096 + .byte W36 + .byte W03 + .byte W96 + .byte W96 + .byte W96 + .byte W12 + .byte GOTO + mPtr song030_8_1 + .byte FINE + + mAlignWord + .global C_DECL(song030) +C_DECL(song030): @ 0x087B1B9C + .byte 8 @ trackCount + .byte 0 @ blockCount + .byte 0 @ priority + .byte 128 @ reverb + +mAlignWord + mPtr voicegroup000 @ voicegroup/tone + + mPtr song030_1 @ track + mPtr song030_2 @ track + mPtr song030_3 @ track + mPtr song030_4 @ track + mPtr song030_5 @ track + mPtr song030_6 @ track + mPtr song030_7 @ track + mPtr song030_8 @ track diff --git a/sa1/sound/songs/song039.s b/sa1/sound/songs/song039.s new file mode 100644 index 0000000000..c84e78334e --- /dev/null +++ b/sa1/sound/songs/song039.s @@ -0,0 +1,3707 @@ + .include "asm/macros/c_decl.inc" + .include "asm/macros/portable.inc" + .include "sound/MPlayDef.s" + + mSectionRodata + + @********************** Track 1 **********************@ + + mAlignWord + .global song039_1 +song039_1: @ 0x087B4B90 + .byte KEYSH , 0 + .byte TEMPO , 56 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W06 + .byte TEMPO , 56 + .byte W06 + .byte TEMPO , 56 + .byte W06 + .byte TEMPO , 55 + .byte W06 + .byte TEMPO , 55 + .byte W06 + .byte TEMPO , 55 + .byte W06 + .byte TEMPO , 54 + .byte W06 + .byte TEMPO , 53 + .byte W06 + .byte TEMPO , 52 + .byte W06 + .byte TEMPO , 51 + .byte W06 + .byte TEMPO , 51 + .byte W06 + .byte TEMPO , 50 + .byte W06 + .byte TEMPO , 49 + .byte W06 + .byte TEMPO , 48 + .byte W06 + .byte TEMPO , 47 + .byte W06 + .byte TEMPO , 46 + .byte W06 + .byte TEMPO , 45 + .byte W06 + .byte TEMPO , 44 + .byte W06 + .byte TEMPO , 43 + .byte W06 + .byte TEMPO , 42 + .byte W06 + .byte TEMPO , 41 + .byte W06 + .byte TEMPO , 40 + .byte W06 + .byte TEMPO , 39 + .byte W06 + .byte TEMPO , 38 + .byte W06 + .byte TEMPO , 37 + .byte W06 + .byte TEMPO , 36 + .byte W06 + .byte TEMPO , 35 + .byte W06 + .byte TEMPO , 34 + .byte W06 + .byte TEMPO , 33 + .byte W48 + .byte W72 + .byte W72 + .byte TEMPO , 96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 127 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte W72 +song039_1_1: + .byte W24 + .byte N08 , Dn1, v048 + .byte W48 + .byte N08 + .byte W24 + .byte PEND + .byte PATT + mPtr song039_1_1 + .byte PATT + mPtr song039_1_1 + .byte N08 , An1, v127 + .byte W08 + .byte N08 + .byte W08 + .byte Cn1 + .byte W08 + .byte Dn1, v048 + .byte N08 , Gs1, v127 + .byte W08 + .byte N08 + .byte W08 + .byte Cn1 + .byte W08 + .byte Cs1 + .byte W08 + .byte N08 + .byte W08 + .byte Cn1 + .byte W08 + .byte N15 , Cs1 + .byte N08 , Dn1, v048 + .byte W16 + .byte N16 , Cn1, v127 + .byte TIE , Cs2 + .byte W08 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N08 , Dn1, v044 + .byte W08 + .byte EOT , Cs2 +song039_1_2: + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N08 , Dn1, v044 + .byte W08 + .byte PEND + .byte PATT + mPtr song039_1_2 +song039_1_3: + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cs1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W08 + .byte PEND +song039_1_4: + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N08 , Dn1, v044 + .byte W08 + .byte PEND + .byte PATT + mPtr song039_1_2 + .byte PATT + mPtr song039_1_2 + .byte PATT + mPtr song039_1_3 + .byte PATT + mPtr song039_1_4 + .byte PATT + mPtr song039_1_3 + .byte PATT + mPtr song039_1_4 + .byte PATT + mPtr song039_1_3 + .byte PATT + mPtr song039_1_4 + .byte PATT + mPtr song039_1_2 + .byte PATT + mPtr song039_1_2 + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cs1, v127 + .byte N15 , Ds1, v072 + .byte W16 + .byte N08 , Cn1, v127 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Cn1, v127 + .byte N15 , Ds1, v072 + .byte W08 + .byte N08 , Cs1, v127 + .byte W08 + .byte N08 + .byte W08 + .byte N08 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Gs1, v127 + .byte W08 + .byte Gn1 + .byte W08 + .byte Cs1 + .byte W16 + .byte N08 + .byte W08 + .byte N07 , Dn1, v044 + .byte W16 + .byte N08 , Cn1, v127 + .byte W08 + .byte N08 + .byte N23 , Ds1, v080 + .byte W16 + .byte N08 , Gn1, v127 + .byte W08 + .byte Cs1 + .byte N07 , Dn1, v044 + .byte W16 + .byte N08 , Cn1, v127 + .byte N23 , Ds1, v080 + .byte W08 + .byte W16 + .byte N08 , Cs1, v127 + .byte W08 + .byte N08 + .byte N07 , Dn1, v044 + .byte W16 + .byte N08 , Cn1, v127 + .byte N23 , Ds1, v080 + .byte W16 + .byte N08 , Gs1, v127 + .byte W08 + .byte An1 + .byte W08 + .byte Cs1 + .byte N07 , Dn1, v044 + .byte W16 + .byte N08 , Cn1, v127 + .byte N23 , Ds1, v080 + .byte W08 + .byte W16 + .byte N08 , Cs1, v127 + .byte W08 + .byte N08 + .byte N07 , Dn1, v044 + .byte W08 + .byte N08 , Gs1, v127 + .byte W08 + .byte Gn1 + .byte W08 + .byte Cs1 + .byte N07 , Dn1, v044 + .byte W16 + .byte N08 , Cn1, v127 + .byte W08 + .byte N08 + .byte N15 , Ds1, v080 + .byte W16 + .byte N08 , Cn1, v127 + .byte N23 , Ds1, v080 + .byte W08 + .byte W15 + .byte FINE + + @********************** Track 2 **********************@ + + .global song039_2 +song039_2: @ 0x087B4DEB + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 12 + .byte VOL , v050 + .byte PAN , c_v + .byte BENDR , 12 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N08 , Bn5, v100 + .byte W08 + .byte An5, v108 + .byte W08 + .byte Gn5, v112 + .byte W08 + .byte Dn5, v104 + .byte W08 + .byte Bn4 + .byte W08 + .byte Gn4, v100 + .byte W08 + .byte Bn4, v096 + .byte W08 + .byte An4, v104 + .byte W08 + .byte Gn4, v112 + .byte W08 + .byte Dn4, v104 + .byte W08 + .byte Bn3, v108 + .byte W08 + .byte Gn3 + .byte W08 + .byte Bn3, v100 + .byte W08 + .byte An3, v108 + .byte W08 + .byte Gn3, v112 + .byte W08 + .byte Dn3, v108 + .byte W08 + .byte Bn2, v100 + .byte W08 + .byte Gn2, v096 + .byte W08 + .byte Bn2, v104 + .byte W08 + .byte An2 + .byte W08 + .byte Gn2, v108 + .byte W08 + .byte Dn2 + .byte W08 + .byte Bn1, v104 + .byte W08 + .byte Gn1, v124 + .byte W08 + .byte En1, v108 + .byte W08 + .byte An1, v100 + .byte W08 + .byte Bn1, v112 + .byte W08 + .byte Cs2, v104 + .byte W08 + .byte En2, v096 + .byte W08 + .byte An2, v104 + .byte W08 + .byte En2, v100 + .byte W08 + .byte An2, v104 + .byte W08 + .byte Bn2, v096 + .byte W08 + .byte Cs3 + .byte W08 + .byte En3 + .byte W08 + .byte An3 + .byte W08 + .byte En3 + .byte W08 + .byte An3, v088 + .byte W08 + .byte Bn3 + .byte W08 + .byte Cs4, v100 + .byte W08 + .byte En4 + .byte W08 + .byte An4, v104 + .byte W08 + .byte En4, v084 + .byte W08 + .byte An4, v104 + .byte W08 + .byte Bn4, v100 + .byte W08 + .byte Cs5, v112 + .byte W08 + .byte En5, v104 + .byte W08 + .byte An5, v108 + .byte W08 + .byte Dn6, v100 + .byte W08 + .byte Cn6, v108 + .byte W08 + .byte As5, v112 + .byte W08 + .byte Fn5, v104 + .byte W08 + .byte Dn5 + .byte W08 + .byte As4, v100 + .byte W08 + .byte Dn5, v096 + .byte W08 + .byte Cn5, v104 + .byte W08 + .byte As4, v112 + .byte W08 + .byte Fn4, v104 + .byte W08 + .byte Dn4, v108 + .byte W08 + .byte As3 + .byte W08 + .byte Dn4, v100 + .byte W08 + .byte Cn4, v108 + .byte W08 + .byte As3, v112 + .byte W08 + .byte Fn3, v108 + .byte W08 + .byte Dn3, v100 + .byte W08 + .byte As2, v096 + .byte W08 + .byte Dn3, v104 + .byte W08 + .byte Cn3 + .byte W08 + .byte As2, v108 + .byte W08 + .byte Fn2 + .byte W08 + .byte Dn2, v104 + .byte W08 + .byte As1, v124 + .byte W08 + .byte Gn1, v108 + .byte W08 + .byte Cn2, v100 + .byte W08 + .byte Dn2, v112 + .byte W08 + .byte En2, v104 + .byte W08 + .byte Gn2, v096 + .byte W08 + .byte Cn3, v104 + .byte W08 + .byte Gn2, v100 + .byte W08 + .byte Cn3, v104 + .byte W08 + .byte Dn3, v096 + .byte W08 + .byte En3 + .byte W08 + .byte Gn3 + .byte W08 + .byte Cn4 + .byte W08 + .byte Gn3 + .byte W08 + .byte Cn4, v088 + .byte W08 + .byte Dn4 + .byte W08 + .byte En4, v100 + .byte W08 + .byte Gn4 + .byte W08 + .byte Cn5, v104 + .byte W08 + .byte Gn4, v084 + .byte W08 + .byte Cn5, v104 + .byte W08 + .byte Dn5, v100 + .byte W08 + .byte En5, v112 + .byte W08 + .byte Gn5, v104 + .byte W08 + .byte Cn6, v108 + .byte W08 + .byte Cs6 + .byte W08 + .byte Gs5, v100 + .byte W08 + .byte Fs5 + .byte W08 + .byte Fn5, v096 + .byte W08 + .byte Cs5, v104 + .byte W08 + .byte Gs4 + .byte W08 + .byte Fn5, v100 + .byte W08 + .byte Ds5, v104 + .byte W08 + .byte Cs5, v112 + .byte W08 + .byte Gs4, v124 + .byte W08 + .byte Fn4, v096 + .byte W08 + .byte Cs4, v112 + .byte W08 + .byte Gs4, v108 + .byte W08 + .byte Fn4, v096 + .byte W08 + .byte Ds4, v112 + .byte W08 + .byte Cs4, v116 + .byte W08 + .byte Gs3, v104 + .byte W08 + .byte Fn3, v096 + .byte W08 + .byte Cs4, v112 + .byte W08 + .byte Gs3, v108 + .byte W08 + .byte Fs3, v096 + .byte W08 + .byte Fn3 + .byte W08 + .byte Cs3, v088 + .byte W08 + .byte Gs2, v060 + .byte W08 + .byte Ds6, v108 + .byte W08 + .byte As5, v100 + .byte W08 + .byte Gs5 + .byte W08 + .byte Gn5, v096 + .byte W08 + .byte Ds5, v104 + .byte W08 + .byte As4 + .byte W08 + .byte Gn5, v100 + .byte W08 + .byte Fn5, v104 + .byte W08 + .byte Ds5, v112 + .byte W08 + .byte As4, v124 + .byte W08 + .byte Gn4, v096 + .byte W08 + .byte Ds4, v112 + .byte W08 + .byte As4, v108 + .byte W08 + .byte Gn4, v096 + .byte W08 + .byte Fn4, v112 + .byte W08 + .byte Ds4, v116 + .byte W08 + .byte As3, v104 + .byte W08 + .byte Gn3, v096 + .byte W08 + .byte Ds4, v112 + .byte W08 + .byte As3, v108 + .byte W08 + .byte Gs3, v096 + .byte W08 + .byte Gn3 + .byte W08 + .byte Ds3, v088 + .byte W08 + .byte As2, v060 + .byte W08 + .byte Fn6, v108 + .byte W08 + .byte Cn6, v100 + .byte W08 + .byte As5 + .byte W08 + .byte An5, v096 + .byte W08 + .byte Fn5, v104 + .byte W08 + .byte Cn5 + .byte W08 + .byte An5, v100 + .byte W08 + .byte Gn5, v104 + .byte W08 + .byte Fn5, v112 + .byte W08 + .byte Cn5, v124 + .byte W08 + .byte An4, v096 + .byte W08 + .byte Fn4, v112 + .byte W08 + .byte Cn5, v108 + .byte W08 + .byte An4, v096 + .byte W08 + .byte Gn4, v112 + .byte W08 + .byte Fn4, v116 + .byte W08 + .byte Cn4, v104 + .byte W08 + .byte An3, v096 + .byte W08 + .byte Fn4, v112 + .byte W08 + .byte Cn4, v108 + .byte W08 + .byte As3, v096 + .byte W08 + .byte An3 + .byte W08 + .byte Fn3, v088 + .byte W08 + .byte Cn3, v060 + .byte W08 + .byte Fn2, v104 + .byte W08 + .byte Gn2 + .byte W08 + .byte An2, v096 + .byte W08 + .byte Cn3 + .byte W08 + .byte Fn3 + .byte W08 + .byte An3, v104 + .byte W08 + .byte Cn3, v084 + .byte W08 + .byte Fn3, v104 + .byte W08 + .byte Gn3, v092 + .byte W08 + .byte An3, v100 + .byte W08 + .byte Cn4, v104 + .byte W08 + .byte Fn4, v108 + .byte W08 + .byte N06 , Fn3, v100 + .byte W06 + .byte Gn3, v104 + .byte W06 + .byte An3, v108 + .byte W06 + .byte Cn4, v096 + .byte W06 + .byte Fn4, v104 + .byte W06 + .byte Gn4, v108 + .byte W06 + .byte An4 + .byte W06 + .byte Cn5 + .byte W06 + .byte Fn4, v112 + .byte W06 + .byte Gn4, v104 + .byte W06 + .byte An4, v108 + .byte W06 + .byte Cn5, v084 + .byte W06 + .byte Fn5, v088 + .byte W06 + .byte Gn5, v104 + .byte W06 + .byte An5, v108 + .byte W06 + .byte Cn6, v100 + .byte W06 + .byte Fn6, v108 + .byte W96 + .byte W92 + .byte W01 + .byte BEND , c_v-64 + .byte W03 + .byte N68 , Cn4, v127 + .byte W20 + .byte BEND , c_v-64 + .byte W02 + .byte c_v-60 + .byte W01 + .byte c_v-56 + .byte W02 + .byte c_v-52 + .byte W01 + .byte c_v-48 + .byte W02 + .byte c_v-44 + .byte W01 + .byte c_v-40 + .byte W02 + .byte c_v-36 + .byte W01 + .byte c_v-32 + .byte W02 + .byte c_v-28 + .byte W01 + .byte c_v-24 + .byte W02 + .byte c_v-20 + .byte W01 + .byte c_v-16 + .byte W02 + .byte c_v-12 + .byte W01 + .byte c_v-8 + .byte W02 + .byte c_v-4 + .byte W01 + .byte c_v + .byte W28 + .byte N08 , Fn4 + .byte W16 + .byte N08 + .byte W08 + .byte FINE + + @********************** Track 3 **********************@ + + .global song039_3 +song039_3: @ 0x087B506C + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 76 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 0 + .byte MODT , 2 + .byte W72 + .byte W96 + .byte N96 , Gn3, v108 + .byte W96 + .byte An3 + .byte W96 + .byte Gn3, v112 + .byte W96 + .byte FINE + + @********************** Track 4 **********************@ + + .global song039_4 +song039_4: @ 0x087B509C + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 80 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 0 + .byte MODT , 2 + .byte W72 + .byte N96 , An2, v120 + .byte W96 + .byte W96 + .byte W96 + .byte N05 , Dn3, v100 + .byte W06 + .byte Cn3, v064 + .byte W03 + .byte Bn2, v092 + .byte W03 + .byte N06 , An2, v084 + .byte W04 + .byte N05 , Gn2, v088 + .byte W02 + .byte Fn2, v096 + .byte W03 + .byte N06 , En2, v088 + .byte W04 + .byte N05 , Dn2, v092 + .byte W03 + .byte Cn2, v084 + .byte W03 + .byte Bn1, v088 + .byte W03 + .byte An1, v092 + .byte W02 + .byte Gn1, v096 + .byte W03 + .byte N06 , Fn1, v084 + .byte W04 + .byte N05 , En1, v044 + .byte W02 + .byte N07 , Dn1, v076 + .byte W09 + .byte N05 , Fn1, v084 + .byte W03 + .byte Gn1, v100 + .byte W02 + .byte An1, v096 + .byte W03 + .byte Bn1 + .byte W02 + .byte Cn2, v092 + .byte W03 + .byte Dn2, v084 + .byte W03 + .byte En2, v088 + .byte W02 + .byte Fn2, v084 + .byte W03 + .byte Gn2, v088 + .byte W03 + .byte An2 + .byte W02 + .byte Bn2, v084 + .byte W03 + .byte N06 , Cn3, v080 + .byte W05 + .byte TIE , Dn3, v100 + .byte W08 + .byte W96 + .byte W44 + .byte W01 + .byte EOT + .byte W03 + .byte N17 , Dn3, v127 + .byte W24 + .byte N15 , Dn3, v116 + .byte W16 + .byte TIE , En3, v112 + .byte W08 + .byte W96 + .byte W44 + .byte W03 + .byte EOT + .byte W01 + .byte N15 , Dn3, v116 + .byte W16 + .byte N07 , Ds3, v092 + .byte W08 + .byte N15 , En3, v104 + .byte W16 + .byte TIE , Fn3, v116 + .byte W08 + .byte W96 + .byte W44 + .byte W01 + .byte EOT + .byte W03 + .byte N18 , Fn3, v096 + .byte W24 + .byte N14 + .byte W16 + .byte TIE , Gn3, v124 + .byte W08 + .byte W96 + .byte W20 + .byte EOT + .byte N05 , Fs3, v100 + .byte W06 + .byte En3, v064 + .byte W03 + .byte Ds3, v092 + .byte W03 + .byte N06 , Cs3, v084 + .byte W04 + .byte N05 , Bn2, v088 + .byte W02 + .byte An2, v096 + .byte W03 + .byte N06 , Gs2, v088 + .byte W04 + .byte N05 , Fs2, v092 + .byte W03 + .byte N14 , Fn2, v108 + .byte W16 + .byte N07 , Fs2 + .byte W08 + .byte N15 , Gn2, v116 + .byte W16 + .byte TIE , Gs2, v112 + .byte W08 + .byte W96 + .byte W44 + .byte EOT + .byte W04 + .byte N20 + .byte W24 + .byte N12 + .byte W16 + .byte TIE , As2 + .byte W08 + .byte W96 + .byte W42 + .byte W01 + .byte EOT + .byte W05 + .byte N19 + .byte W24 + .byte N11 + .byte W16 + .byte TIE , Cn3 + .byte W08 + .byte W96 + .byte W80 + .byte W01 + .byte EOT + .byte N05 , Dn3, v100 + .byte W02 + .byte En3, v096 + .byte W03 + .byte Fs3 + .byte W02 + .byte Gn3, v092 + .byte W03 + .byte An3, v084 + .byte W03 + .byte Bn3, v088 + .byte W02 + .byte N42 , Cn4, v112 + .byte W48 + .byte N11 + .byte W16 + .byte N05 + .byte W24 + .byte N48 + .byte W08 + .byte W40 + .byte W01 + .byte N05 , Bn3, v032 + .byte W06 + .byte An3, v060 + .byte W03 + .byte Gs3, v056 + .byte W03 + .byte N06 , Fs3, v052 + .byte W04 + .byte N05 , En3, v048 + .byte W02 + .byte Dn3, v044 + .byte W03 + .byte N06 , Cs3, v040 + .byte W04 + .byte N05 , Bn2, v036 + .byte W03 + .byte An2, v032 + .byte W03 + .byte Gs2 + .byte W03 + .byte Fs2, v028 + .byte W02 + .byte En2, v024 + .byte W03 + .byte N06 , Dn2, v020 + .byte W04 + .byte N05 , Cs2, v016 + .byte W05 + .byte FINE + + @********************** Track 5 **********************@ + + .global song039_5 +song039_5: @ 0x087B51F2 + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 45 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte N92 , Dn2, v072 + .byte W96 + .byte Dn3 + .byte W96 + .byte Dn2 + .byte W96 + .byte N44 , Dn3 + .byte W48 + .byte N15 , Dn2, v088 + .byte W16 + .byte N07 , En2, v084 + .byte W08 + .byte N15 , Fs2, v088 + .byte W16 + .byte N24 , Gn2 + .byte W08 + .byte W24 + .byte N13 + .byte W24 + .byte N16 , Gn2, v084 + .byte W24 + .byte N15 + .byte W24 + .byte N15 + .byte W24 + .byte N16 , Gn2, v088 + .byte W24 + .byte N13 , Gn2, v084 + .byte W16 + .byte N03 + .byte W08 + .byte N11 , Gn2, v092 + .byte W16 + .byte N24 + .byte W08 + .byte W24 + .byte N15 , Gn2, v084 + .byte W24 + .byte Gn2, v088 + .byte W24 + .byte N14 , Gn2, v084 + .byte W24 + .byte N11 , Gn2, v088 + .byte W24 + .byte N16 , Gn2, v084 + .byte W24 + .byte N14 + .byte W16 + .byte N07 , Gs2 + .byte W08 + .byte N11 , An2, v088 + .byte W16 + .byte N30 , As2, v092 + .byte W08 + .byte W24 + .byte N15 , As2, v088 + .byte W24 + .byte N16 , As2, v084 + .byte W24 + .byte N15 + .byte W24 + .byte As2, v088 + .byte W24 + .byte As2, v084 + .byte W24 + .byte N13 + .byte W16 + .byte N06 , As2, v076 + .byte W08 + .byte N11 + .byte W16 + .byte N28 , As2, v092 + .byte W08 + .byte W24 + .byte N13 , As2, v088 + .byte W24 + .byte N12 + .byte W24 + .byte N14 + .byte W24 + .byte As2, v084 + .byte W24 + .byte N13 , As2, v088 + .byte W24 + .byte N14 + .byte W16 + .byte N07 , Bn2, v080 + .byte W08 + .byte N13 , Cn3, v088 + .byte W16 + .byte N30 , Cs3, v092 + .byte W08 + .byte W24 + .byte N15 , Cs3, v088 + .byte W24 + .byte N14 + .byte W24 + .byte N12 + .byte W24 + .byte N16 , Cs3, v084 + .byte W24 + .byte N14 , Cs3, v088 + .byte W24 + .byte N13 + .byte W16 + .byte N07 , Gs2, v084 + .byte W08 + .byte N15 , Cs2, v088 + .byte W16 + .byte N28 , Ds2 + .byte W08 + .byte W24 + .byte N15 + .byte W24 + .byte N15 + .byte W24 + .byte N17 , Ds2, v084 + .byte W24 + .byte N18 , Ds2, v088 + .byte W24 + .byte N19 + .byte W24 + .byte N12 , Ds3, v084 + .byte W16 + .byte N07 , As2 + .byte W08 + .byte N14 , Ds2, v088 + .byte W16 + .byte N24 , Fn2 + .byte W08 + .byte W24 + .byte N18 + .byte W24 + .byte N15 + .byte W24 + .byte N14 , Fn2, v084 + .byte W24 + .byte N17 , Fn2, v088 + .byte W24 + .byte N18 , Fn2, v084 + .byte W24 + .byte N13 , Cn2, v088 + .byte W16 + .byte N07 , Ds2, v080 + .byte W08 + .byte N15 , En2, v088 + .byte W16 + .byte N28 , Fn2 + .byte W08 + .byte W24 + .byte N12 + .byte W24 + .byte N16 + .byte W24 + .byte N18 , Fn2, v084 + .byte W24 + .byte N16 , Fn2, v088 + .byte W24 + .byte N16 + .byte W24 + .byte N19 , Fn2, v084 + .byte W24 + .byte N14 + .byte W24 + .byte N12 , Fn2, v088 + .byte W16 + .byte N07 + .byte W32 + .byte N36 + .byte W40 + .byte N20 , Gs2 + .byte W08 + .byte W16 + .byte N06 , Fn2 + .byte W08 + .byte N12 , Gs2 + .byte W16 + .byte N20 , As2 + .byte W24 + .byte N06 , Gs2 + .byte W08 + .byte N12 , As2 + .byte W16 + .byte N36 , Cn3 + .byte W08 + .byte W48 + .byte N23 , Cn2 + .byte W24 + .byte N12 , Fn2 + .byte W16 + .byte N08 + .byte W08 + .byte FINE + + @********************** Track 6 **********************@ + + .global song039_6 +song039_6: @ 0x087B5340 + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 74 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W48 + .byte N12 , Bn2, v124 + .byte N12 , Dn3 + .byte W36 + .byte N19 , Bn2, v127 + .byte N19 , Dn3 + .byte W12 + .byte W05 + .byte N05 , As2, v068 + .byte W02 + .byte An2, v064 + .byte W03 + .byte N06 , Gn2, v060 + .byte W04 + .byte N05 , Fn2, v052 + .byte W03 + .byte Ds2, v048 + .byte W03 + .byte N03 , Dn2, v040 + .byte W04 + .byte N07 , Bn1, v116 + .byte N07 , Dn2 + .byte W16 + .byte N09 + .byte N09 , Gn2 + .byte W24 + .byte N07 , Gn2, v120 + .byte N07 , Bn2 + .byte W08 + .byte N10 , Bn2, v112 + .byte N10 , Dn3 + .byte W24 + .byte N40 , Cs3 + .byte N40 , En3 + .byte W48 + .byte N14 , Cs3, v100 + .byte N14 , En3 + .byte W24 + .byte N13 , An2, v108 + .byte N13 , Cs3 + .byte W16 + .byte N42 , En2, v112 + .byte N42 , An2 + .byte W08 + .byte W96 + .byte W48 + .byte N12 , Dn3, v124 + .byte N12 , Fn3 + .byte W36 + .byte N19 , Dn3, v127 + .byte N19 , Fn3 + .byte W12 + .byte W05 + .byte N05 , Cs3, v068 + .byte W02 + .byte Cn3, v064 + .byte W03 + .byte N06 , As2, v060 + .byte W04 + .byte N05 , Gs2, v052 + .byte W03 + .byte Fs2, v048 + .byte W03 + .byte N03 , Fn2, v040 + .byte W04 + .byte N07 , Dn2, v116 + .byte N07 , Fn2 + .byte W16 + .byte N09 + .byte N09 , As2 + .byte W24 + .byte N07 , As2, v120 + .byte N07 , Dn3 + .byte W08 + .byte N10 , Dn3, v112 + .byte N10 , Fn3 + .byte W24 + .byte N40 , En3 + .byte N40 , Gn3 + .byte W48 + .byte N14 , En3, v100 + .byte N14 , Gn3 + .byte W24 + .byte N13 , Cn3, v108 + .byte N13 , En3 + .byte W16 + .byte N42 , Gn2, v112 + .byte N42 , Cn3 + .byte W08 + .byte W96 + .byte W48 + .byte N12 , Fn3, v124 + .byte N12 , Gs3 + .byte W36 + .byte N19 , Fn3, v127 + .byte N19 , Gs3 + .byte W12 + .byte W05 + .byte N05 , En3, v068 + .byte W02 + .byte Ds3, v064 + .byte W03 + .byte N06 , Cs3, v060 + .byte W04 + .byte N05 , Bn2, v052 + .byte W03 + .byte An2, v048 + .byte W03 + .byte N03 , Gs2, v040 + .byte W04 + .byte N07 , Fn2, v116 + .byte N07 , Gs2 + .byte W16 + .byte N09 + .byte N09 , Cs3 + .byte W24 + .byte N07 , Cs3, v120 + .byte N07 , Fn3 + .byte W08 + .byte N15 , Fn3, v112 + .byte N15 , Gs3 + .byte W16 + .byte VOL , v127 + .byte TIE , Gn3 + .byte TIE , As3 + .byte W08 + .byte W03 + .byte VOL , v125 + .byte W01 + .byte v122 + .byte W01 + .byte v118 + .byte W01 + .byte v114 + .byte W01 + .byte v112 + .byte W01 + .byte v108 + .byte W01 + .byte v104 + .byte W01 + .byte v101 + .byte W01 + .byte v097 + .byte W01 + .byte v093 + .byte W01 + .byte v090 + .byte W01 + .byte v086 + .byte W01 + .byte v082 + .byte W01 + .byte v080 + .byte W01 + .byte v076 + .byte W01 + .byte v072 + .byte W01 + .byte v069 + .byte W01 + .byte v065 + .byte W01 + .byte v061 + .byte W01 + .byte v059 + .byte W03 + .byte v060 + .byte W01 + .byte v061 + .byte W01 + .byte v062 + .byte W02 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v065 + .byte W02 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W02 + .byte v070 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W02 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v075 + .byte W02 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v078 + .byte W02 + .byte v079 + .byte W01 + .byte v080 + .byte W01 + .byte v081 + .byte W02 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W02 + .byte v085 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W02 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v090 + .byte W02 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v093 + .byte W02 + .byte v094 + .byte W01 + .byte v095 + .byte W01 + .byte v096 + .byte W02 + .byte v097 + .byte W01 + .byte v098 + .byte W01 + .byte v099 + .byte W02 + .byte v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W02 + .byte v103 + .byte W01 + .byte v104 + .byte W01 + .byte v105 + .byte W02 + .byte v106 + .byte W01 + .byte v107 + .byte W01 + .byte v108 + .byte W01 + .byte v109 + .byte W02 + .byte v110 + .byte W01 + .byte v111 + .byte W01 + .byte v112 + .byte W02 + .byte v113 + .byte W01 + .byte v114 + .byte W01 + .byte v115 + .byte W02 + .byte v116 + .byte W01 + .byte v117 + .byte W01 + .byte v118 + .byte W02 + .byte v119 + .byte W01 + .byte EOT , Gn3 + .byte As3 + .byte VOL , v120 + .byte W01 + .byte v121 + .byte W02 + .byte v122 + .byte W01 + .byte v123 + .byte W01 + .byte v124 + .byte W02 + .byte v125 + .byte W01 + .byte v127 + .byte N08 , Gn2, v108 + .byte N08 , As2 + .byte W08 + .byte N16 , As2, v116 + .byte N16 , Ds3 + .byte W16 + .byte N08 , As2, v112 + .byte W08 + .byte N16 , As2, v116 + .byte N16 , Ds3 + .byte W16 + .byte N08 , Ds3, v108 + .byte N08 , Gn3 + .byte W08 + .byte N16 , Gn3, v124 + .byte N16 , As3 + .byte W16 + .byte TIE , An3, v116 + .byte TIE , Cn4 + .byte W08 + .byte W06 + .byte VOL , v126 + .byte W01 + .byte v120 + .byte W01 + .byte v117 + .byte W01 + .byte v111 + .byte W01 + .byte v106 + .byte W01 + .byte v102 + .byte W01 + .byte v097 + .byte W01 + .byte v092 + .byte W01 + .byte v088 + .byte W01 + .byte v083 + .byte W01 + .byte v077 + .byte W01 + .byte v074 + .byte W01 + .byte v068 + .byte W01 + .byte v063 + .byte W01 + .byte v058 + .byte W03 + .byte v059 + .byte W01 + .byte v060 + .byte W01 + .byte v061 + .byte W01 + .byte v062 + .byte W01 + .byte v063 + .byte W02 + .byte v064 + .byte W01 + .byte v065 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W02 + .byte v070 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v075 + .byte W02 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v080 + .byte W02 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W01 + .byte v085 + .byte W01 + .byte v086 + .byte W02 + .byte v087 + .byte W01 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v090 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W02 + .byte v093 + .byte W01 + .byte v094 + .byte W01 + .byte v095 + .byte W01 + .byte v096 + .byte W01 + .byte v097 + .byte W01 + .byte v098 + .byte W02 + .byte v099 + .byte W01 + .byte v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W01 + .byte v103 + .byte W02 + .byte v104 + .byte W01 + .byte v105 + .byte W01 + .byte v106 + .byte W01 + .byte v107 + .byte W01 + .byte v108 + .byte W01 + .byte v109 + .byte W02 + .byte v110 + .byte W01 + .byte v111 + .byte W01 + .byte v112 + .byte W01 + .byte v113 + .byte W01 + .byte v114 + .byte W01 + .byte v115 + .byte W02 + .byte v116 + .byte W01 + .byte v117 + .byte W01 + .byte v118 + .byte W01 + .byte v119 + .byte W03 + .byte v120 + .byte W01 + .byte v121 + .byte W01 + .byte v122 + .byte W01 + .byte v123 + .byte W01 + .byte v124 + .byte W01 + .byte v125 + .byte W02 + .byte v127 + .byte W01 + .byte EOT , An3 + .byte Cn4 + .byte W08 + .byte N08 , An2, v100 + .byte N08 , Cn3 + .byte W08 + .byte Cn3, v112 + .byte N08 , Fn3 + .byte W08 + .byte An2, v100 + .byte N08 , Cn3 + .byte W08 + .byte Cn3, v104 + .byte N08 , Fn3 + .byte W08 + .byte Fn3, v100 + .byte N08 , An3 + .byte W08 + .byte Cn3, v104 + .byte N08 , Fn3 + .byte W08 + .byte Fn3, v108 + .byte N08 , An3 + .byte W08 + .byte An3, v104 + .byte N08 , Cn4 + .byte W08 + .byte Fn3, v108 + .byte N08 , An3 + .byte W08 + .byte An3, v116 + .byte N08 , Cn4 + .byte W08 + .byte W05 + .byte VOL , v127 + .byte FINE + + @********************** Track 7 **********************@ + + .global song039_7 +song039_7: @ 0x087B560C + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 87 + .byte VOL , v100 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N09 , An3, v084 + .byte N08 , Cn4, v108 + .byte W16 + .byte N07 , An3, v068 + .byte N06 , Cn4, v080 + .byte W32 + .byte N30 , An3, v092 + .byte N30 , Cn4, v100 + .byte W40 + .byte N20 , Cn4, v116 + .byte N20 , Ds4 + .byte W08 + .byte W16 + .byte N09 , Gs3, v092 + .byte W08 + .byte N10 , Cn4, v084 + .byte N12 , Ds4, v092 + .byte W16 + .byte N18 , As3, v108 + .byte N20 , Dn4 + .byte W24 + .byte N13 , Fn3, v056 + .byte W08 + .byte N09 , As3, v108 + .byte N08 , Dn4, v092 + .byte W16 + .byte N32 , Fn3, v072 + .byte N24 , Gn3, v124 + .byte N24 , Cn4, v108 + .byte W08 + .byte W24 + .byte W01 + .byte N04 , En3, v004 + .byte W03 + .byte Dn3, v092 + .byte W03 + .byte N03 , Cn3, v072 + .byte W02 + .byte N04 , Bn2, v100 + .byte W02 + .byte An2, v072 + .byte W02 + .byte N05 , Gn2, v092 + .byte W03 + .byte N13 , Fn2, v080 + .byte W03 + .byte N08 , En2, v084 + .byte W07 + .byte N04 , Gn2, v020 + .byte W03 + .byte N03 , An2, v052 + .byte W01 + .byte Bn2, v084 + .byte W02 + .byte Cn3, v080 + .byte W02 + .byte Dn3, v056 + .byte W01 + .byte En3, v044 + .byte W03 + .byte Fn3, v028 + .byte W02 + .byte Gn3, v020 + .byte W02 + .byte An3, v068 + .byte W03 + .byte N04 , Bn3, v080 + .byte W03 + .byte N09 , An3, v108 + .byte N09 , Fn4 + .byte W16 + .byte An3 + .byte N09 , Fn4 + .byte W08 + .byte W01 + .byte FINE + + @********************** Track 8 **********************@ + + .global song039_8 +song039_8: @ 0x087B56D4 + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 118 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte W96 + .byte N07 , Cn3, v127 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte Dn3 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte Cn3 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W07 + .byte FINE + + @********************** Track 9 **********************@ + + .global song039_9 +song039_9: @ 0x087B5745 + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 124 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte N07 , Cn3, v127 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W08 + .byte N07 + .byte W07 + .byte FINE + + @********************** Track 10 **********************@ + + .global song039_10 +song039_10: @ 0x087B5785 + .byte KEYSH , 0 + .byte VOICE , 94 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte N23 , An1, v124 + .byte W12 + .byte En2, v092 + .byte W12 + .byte An2, v112 + .byte W12 + .byte Bn2, v096 + .byte W12 + .byte N20 , En3, v100 + .byte W12 + .byte N23 , Cs3, v108 + .byte W12 +song039_10_1: + .byte N23 , An1, v100 + .byte W12 + .byte En2, v112 + .byte W12 + .byte An2, v104 + .byte W12 + .byte N24 , Bn2, v108 + .byte W12 + .byte N23 , Cs3 + .byte W12 + .byte En2, v112 + .byte W12 + .byte PEND + .byte An1, v124 + .byte W12 + .byte En2, v092 + .byte W12 + .byte An2, v112 + .byte W12 + .byte Bn2, v096 + .byte W12 + .byte N20 , En3, v100 + .byte W12 + .byte N23 , Cs3, v108 + .byte W12 + .byte PATT + mPtr song039_10_1 + .byte N23 , Dn1, v096 + .byte W12 + .byte An1, v084 + .byte W12 + .byte Fs2, v120 + .byte W12 + .byte An2, v104 + .byte W12 + .byte En3, v088 + .byte W12 + .byte Cs3, v096 + .byte W12 + .byte Dn1, v112 + .byte W12 + .byte An1, v127 + .byte W12 + .byte Fs2, v084 + .byte W12 + .byte An2, v096 + .byte W12 + .byte Bn2, v108 + .byte W12 + .byte Dn2, v104 + .byte W12 + .byte En1, v112 + .byte W12 + .byte Bn1 + .byte W12 + .byte En2 + .byte W12 + .byte Fs2 + .byte W12 + .byte An2 + .byte W12 + .byte Fs2 + .byte W12 + .byte Gs2 + .byte W12 + .byte An2 + .byte W12 + .byte Bn2 + .byte W12 + .byte Cs3 + .byte W12 + .byte N68 , Dn3 + .byte W24 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOL , v000 + .byte W01 + .byte v001 + .byte W01 + .byte v002 + .byte W01 + .byte v003 + .byte W01 + .byte v005 + .byte W01 + .byte v006 + .byte W01 + .byte v007 + .byte W01 + .byte v008 + .byte W01 + .byte v010 + .byte W01 + .byte v011 + .byte W01 + .byte v012 + .byte W01 + .byte v013 + .byte W01 + .byte v015 + .byte W01 + .byte v016 + .byte W01 + .byte v017 + .byte W01 + .byte v018 + .byte W01 + .byte v020 + .byte W01 + .byte v021 + .byte W01 + .byte v022 + .byte W01 + .byte v023 + .byte W01 + .byte v025 + .byte W01 + .byte v026 + .byte W01 + .byte v027 + .byte W01 + .byte v028 + .byte W01 + .byte v030 + .byte N04 , Ds3, v104 + .byte W01 + .byte VOL , v031 + .byte W01 + .byte v032 + .byte W01 + .byte v033 + .byte W01 + .byte v035 + .byte N04 , Gn3, v112 + .byte W01 + .byte VOL , v036 + .byte W01 + .byte v037 + .byte W01 + .byte v038 + .byte W01 + .byte v040 + .byte N04 , Fn3, v100 + .byte W01 + .byte VOL , v041 + .byte W01 + .byte v042 + .byte W01 + .byte v043 + .byte W01 + .byte v045 + .byte N04 , An3, v104 + .byte W01 + .byte VOL , v046 + .byte W01 + .byte v047 + .byte W01 + .byte v048 + .byte W01 + .byte v050 + .byte N04 , Gn3, v100 + .byte W01 + .byte VOL , v051 + .byte W01 + .byte v052 + .byte W01 + .byte v053 + .byte W01 + .byte v055 + .byte N04 , Bn3, v112 + .byte W01 + .byte VOL , v056 + .byte W01 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v060 + .byte N04 , An3 + .byte W01 + .byte VOL , v061 + .byte W01 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte N04 , Fn3, v100 + .byte W01 + .byte VOL , v065 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v069 + .byte N04 , Gn3 + .byte W01 + .byte VOL , v070 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W01 + .byte v074 + .byte N04 , Ds3, v096 + .byte W01 + .byte VOL , v075 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte N04 , Fn3, v108 + .byte W01 + .byte VOL , v080 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v084 + .byte N04 , An3, v104 + .byte W01 + .byte VOL , v085 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v089 + .byte N04 , Gn3, v100 + .byte W01 + .byte VOL , v090 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte N04 , Bn3, v108 + .byte W01 + .byte VOL , v095 + .byte W01 + .byte v096 + .byte W01 + .byte v097 + .byte W01 + .byte v099 + .byte N04 , An3 + .byte W01 + .byte VOL , v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W01 + .byte v104 + .byte N04 , Fn3, v096 + .byte W01 + .byte VOL , v105 + .byte W01 + .byte v106 + .byte W01 + .byte v107 + .byte W01 + .byte v109 + .byte N04 , Gn3, v104 + .byte W01 + .byte VOL , v110 + .byte W01 + .byte v111 + .byte W01 + .byte v112 + .byte W01 + .byte v114 + .byte N04 , Ds3, v088 + .byte W01 + .byte VOL , v115 + .byte W01 + .byte v116 + .byte W01 + .byte v117 + .byte W01 + .byte v119 + .byte N04 , Fn3, v100 + .byte W01 + .byte VOL , v120 + .byte W01 + .byte v121 + .byte W01 + .byte v122 + .byte W01 + .byte v124 + .byte N04 , An3, v104 + .byte W01 + .byte VOL , v125 + .byte W01 + .byte v126 + .byte W01 + .byte v127 + .byte W01 + .byte N04 , Gn3, v100 + .byte W04 + .byte Bn3, v104 + .byte W04 + .byte An3 + .byte W04 + .byte Fn3 + .byte W04 + .byte Gn3, v108 + .byte W04 + .byte Ds3, v092 + .byte W04 + .byte Fn3, v104 + .byte W04 + .byte An3, v108 + .byte W04 + .byte Gn3, v100 + .byte W04 + .byte Bn3, v108 + .byte W04 + .byte An3, v104 + .byte W04 + .byte Fn3, v112 + .byte W04 + .byte Gn3, v104 + .byte W04 + .byte Ds3, v092 + .byte W04 + .byte Fn3, v104 + .byte W04 + .byte An3 + .byte W04 + .byte Gn3, v096 + .byte W04 + .byte Bn3, v104 + .byte W04 + .byte An3 + .byte W04 + .byte Fn3, v108 + .byte W04 + .byte Gn3, v104 + .byte W04 + .byte Ds3, v088 + .byte W04 + .byte Fn3, v108 + .byte W04 + .byte An3 + .byte W04 + .byte Gn3, v096 + .byte W04 + .byte Bn3, v104 + .byte W04 + .byte An3, v096 + .byte W04 + .byte Fn3, v104 + .byte W04 + .byte Gn3 + .byte W04 + .byte Ds3, v088 + .byte W04 + .byte Fn3, v100 + .byte W04 + .byte An3, v108 + .byte W04 + .byte Gn3, v096 + .byte W04 + .byte Bn3, v104 + .byte W04 + .byte An3, v100 + .byte W04 + .byte Fn3, v104 + .byte W04 + .byte Gn3 + .byte W04 + .byte VOL , v127 + .byte N04 , Ds3, v088 + .byte W02 + .byte VOL , v126 + .byte W01 + .byte v125 + .byte W01 + .byte v124 + .byte N04 , Fn3, v100 + .byte W01 + .byte VOL , v123 + .byte W01 + .byte v122 + .byte W01 + .byte v121 + .byte W01 + .byte v120 + .byte N04 , An3 + .byte W01 + .byte VOL , v119 + .byte W01 + .byte v118 + .byte W01 + .byte v117 + .byte W01 + .byte v116 + .byte N04 , Gn3, v096 + .byte W01 + .byte VOL , v115 + .byte W02 + .byte v114 + .byte W01 + .byte v113 + .byte N04 , Bn3, v104 + .byte W01 + .byte VOL , v112 + .byte W01 + .byte v111 + .byte W01 + .byte v110 + .byte W01 + .byte v109 + .byte N04 , An3, v108 + .byte W01 + .byte VOL , v108 + .byte W01 + .byte v107 + .byte W01 + .byte v106 + .byte W01 + .byte v105 + .byte N04 , Fn3, v104 + .byte W01 + .byte VOL , v104 + .byte W01 + .byte v103 + .byte W01 + .byte v102 + .byte W01 + .byte N04 , Gn3 + .byte W01 + .byte VOL , v101 + .byte W01 + .byte v100 + .byte W01 + .byte v099 + .byte W01 + .byte v098 + .byte N04 , Ds3, v092 + .byte W01 + .byte VOL , v097 + .byte W01 + .byte v096 + .byte W01 + .byte v095 + .byte W01 + .byte v094 + .byte N04 , Fn3, v104 + .byte W01 + .byte VOL , v093 + .byte W01 + .byte v092 + .byte W01 + .byte v091 + .byte W01 + .byte v090 + .byte N04 , An3 + .byte W01 + .byte VOL , v089 + .byte W02 + .byte v088 + .byte W01 + .byte v087 + .byte N04 , Gn3, v092 + .byte W01 + .byte VOL , v086 + .byte W01 + .byte v085 + .byte W01 + .byte v084 + .byte W01 + .byte v083 + .byte N04 , Bn3, v100 + .byte W01 + .byte VOL , v082 + .byte W01 + .byte v081 + .byte W01 + .byte v080 + .byte W01 + .byte v079 + .byte N04 , An3 + .byte W01 + .byte VOL , v078 + .byte W01 + .byte v077 + .byte W01 + .byte v076 + .byte W01 + .byte v075 + .byte N04 , Fn3, v108 + .byte W02 + .byte VOL , v074 + .byte W01 + .byte v073 + .byte W01 + .byte v072 + .byte N04 , Gn3, v104 + .byte W01 + .byte VOL , v071 + .byte W01 + .byte v070 + .byte W01 + .byte v069 + .byte W01 + .byte v068 + .byte N04 , Ds3, v092 + .byte W01 + .byte VOL , v067 + .byte W01 + .byte v066 + .byte W01 + .byte v065 + .byte W01 + .byte v064 + .byte N04 , Fn3, v108 + .byte W01 + .byte VOL , v063 + .byte W01 + .byte v062 + .byte W02 + .byte v061 + .byte N04 , An3, v104 + .byte W01 + .byte VOL , v060 + .byte W01 + .byte v059 + .byte W01 + .byte v058 + .byte W01 + .byte v057 + .byte N04 , Gn3, v100 + .byte W01 + .byte VOL , v056 + .byte W01 + .byte v055 + .byte W01 + .byte v054 + .byte W01 + .byte v053 + .byte N04 , Bn3, v096 + .byte W01 + .byte VOL , v052 + .byte W01 + .byte v051 + .byte W01 + .byte v050 + .byte W01 + .byte v049 + .byte N04 , An3, v100 + .byte W02 + .byte VOL , v048 + .byte W01 + .byte v047 + .byte W01 + .byte v046 + .byte N04 , Fn3, v104 + .byte W01 + .byte VOL , v045 + .byte W01 + .byte v044 + .byte W01 + .byte v043 + .byte W01 + .byte v042 + .byte N04 , Gn3 + .byte W01 + .byte VOL , v041 + .byte W01 + .byte v040 + .byte W01 + .byte v039 + .byte W01 + .byte v038 + .byte N04 , Ds3, v092 + .byte W01 + .byte VOL , v037 + .byte W01 + .byte v036 + .byte W01 + .byte v035 + .byte W01 + .byte N04 , Fn3, v104 + .byte W02 + .byte VOL , v034 + .byte W01 + .byte v033 + .byte W01 + .byte v032 + .byte N04 , An3 + .byte W01 + .byte VOL , v031 + .byte W01 + .byte v030 + .byte W01 + .byte v029 + .byte W01 + .byte v028 + .byte N04 , Gn3, v088 + .byte W01 + .byte VOL , v027 + .byte W01 + .byte v026 + .byte W01 + .byte v025 + .byte W01 + .byte v024 + .byte N04 , Bn3, v100 + .byte W01 + .byte VOL , v023 + .byte W02 + .byte v022 + .byte W01 + .byte v021 + .byte N04 , An3, v108 + .byte W01 + .byte VOL , v020 + .byte W01 + .byte v019 + .byte W01 + .byte v018 + .byte W01 + .byte v017 + .byte N04 , Fn3, v104 + .byte W01 + .byte VOL , v016 + .byte W01 + .byte v015 + .byte W01 + .byte v014 + .byte W01 + .byte v013 + .byte N04 , Gn3, v108 + .byte W01 + .byte VOL , v012 + .byte W01 + .byte v011 + .byte W01 + .byte v010 + .byte W01 + .byte N04 , Ds3, v084 + .byte W01 + .byte VOL , v009 + .byte W01 + .byte v008 + .byte W01 + .byte v007 + .byte W01 + .byte v006 + .byte N04 , Fn3, v108 + .byte W01 + .byte VOL , v005 + .byte W01 + .byte v004 + .byte W01 + .byte v003 + .byte W01 + .byte v002 + .byte N04 , An3, v104 + .byte W01 + .byte VOL , v001 + .byte W01 + .byte v000 + .byte W02 + .byte N04 , Gn3, v096 + .byte W04 + .byte Bn3, v108 + .byte W04 + .byte An3, v100 + .byte W04 + .byte Fn3, v104 + .byte W04 + .byte Gn3, v096 + .byte W04 + .byte Ds3, v092 + .byte W04 + .byte Fn3, v096 + .byte W04 + .byte An3, v104 + .byte W04 + .byte Gn3, v100 + .byte W32 + .byte W96 + .byte W96 + .byte VOL , v127 + .byte FINE + + @********************** Track 11 **********************@ + + .global song039_11 +song039_11: @ 0x087B5B50 + .byte KEYSH , 0 + .byte VOICE , 97 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte W64 + .byte VOL , v000 + .byte W04 + .byte v001 + .byte W02 + .byte v002 + .byte W02 + .byte v003 + .byte TIE , En3, v127 + .byte TIE , En4 + .byte W01 + .byte VOL , v004 + .byte W02 + .byte v005 + .byte W02 + .byte v006 + .byte W02 + .byte v007 + .byte W02 + .byte v008 + .byte W02 + .byte v009 + .byte W02 + .byte v010 + .byte W02 + .byte v011 + .byte W01 + .byte v012 + .byte W02 + .byte v013 + .byte W02 + .byte v014 + .byte W02 + .byte v015 + .byte W02 + .byte v016 + .byte W02 + .byte v017 + .byte W02 + .byte v018 + .byte W02 + .byte v019 + .byte W01 + .byte v020 + .byte W02 + .byte v021 + .byte W02 + .byte v022 + .byte W02 + .byte v023 + .byte W02 + .byte v024 + .byte W02 + .byte v025 + .byte W02 + .byte v026 + .byte W02 + .byte v027 + .byte W01 + .byte v028 + .byte W02 + .byte v029 + .byte W02 + .byte v030 + .byte W02 + .byte v031 + .byte W02 + .byte v032 + .byte W02 + .byte v033 + .byte W02 + .byte v034 + .byte W02 + .byte v035 + .byte W01 + .byte v036 + .byte W02 + .byte v037 + .byte W02 + .byte v038 + .byte W02 + .byte v039 + .byte W02 + .byte v040 + .byte W02 + .byte v041 + .byte W01 + .byte W01 + .byte v042 + .byte W02 + .byte v043 + .byte W01 + .byte v044 + .byte W02 + .byte v045 + .byte W02 + .byte v046 + .byte W02 + .byte v047 + .byte W02 + .byte v048 + .byte W02 + .byte v049 + .byte W02 + .byte v050 + .byte W02 + .byte v051 + .byte W01 + .byte v052 + .byte W02 + .byte v053 + .byte W02 + .byte v054 + .byte W01 + .byte v055 + .byte W05 + .byte v054 + .byte W03 + .byte v053 + .byte W03 + .byte v052 + .byte W03 + .byte v051 + .byte W03 + .byte v050 + .byte W03 + .byte v049 + .byte W03 + .byte v048 + .byte W03 + .byte v047 + .byte W03 + .byte v046 + .byte W02 + .byte v045 + .byte W03 + .byte v044 + .byte W03 + .byte v043 + .byte W03 + .byte v042 + .byte W03 + .byte v041 + .byte W03 + .byte v040 + .byte W02 + .byte EOT , En3 + .byte TIE , An3 + .byte W01 + .byte VOL , v039 + .byte W03 + .byte v038 + .byte W03 + .byte v037 + .byte W03 + .byte v036 + .byte W02 + .byte v035 + .byte W03 + .byte v034 + .byte W03 + .byte v033 + .byte W03 + .byte v032 + .byte W03 + .byte v031 + .byte W03 + .byte v030 + .byte W03 + .byte v029 + .byte W03 + .byte v028 + .byte W03 + .byte v027 + .byte W03 + .byte v026 + .byte W02 + .byte v025 + .byte W01 + .byte v024 + .byte W08 + .byte v025 + .byte W05 + .byte v026 + .byte W04 + .byte v027 + .byte W04 + .byte v028 + .byte W05 + .byte v029 + .byte W04 + .byte EOT , En4 + .byte VOL , v030 + .byte N72 , Dn4 + .byte W05 + .byte VOL , v031 + .byte W04 + .byte v032 + .byte W04 + .byte v033 + .byte W05 + .byte v034 + .byte W04 + .byte v035 + .byte W04 + .byte v036 + .byte W05 + .byte v038 + .byte W02 + .byte v037 + .byte W02 + .byte v036 + .byte W01 + .byte v035 + .byte W01 + .byte v034 + .byte W01 + .byte v033 + .byte W01 + .byte v032 + .byte W01 + .byte v031 + .byte W02 + .byte v030 + .byte W01 + .byte v029 + .byte W01 + .byte v028 + .byte W01 + .byte v027 + .byte W01 + .byte v026 + .byte W01 + .byte v025 + .byte W02 + .byte v024 + .byte W01 + .byte v023 + .byte W01 + .byte v022 + .byte W01 + .byte v021 + .byte W01 + .byte v020 + .byte W02 + .byte v019 + .byte W01 + .byte v018 + .byte W01 + .byte v017 + .byte W01 + .byte v016 + .byte W01 + .byte v015 + .byte W01 + .byte v014 + .byte W02 + .byte v013 + .byte W01 + .byte v012 + .byte W01 + .byte v011 + .byte W01 + .byte v010 + .byte W01 + .byte v009 + .byte W01 + .byte v008 + .byte W02 + .byte v007 + .byte W01 + .byte v006 + .byte W01 + .byte v005 + .byte W01 + .byte EOT , An3 + .byte VOL , v004 + .byte TIE , Gs3 + .byte TIE , Bn3 + .byte TIE , Dn4 + .byte W13 + .byte VOL , v005 + .byte W06 + .byte v006 + .byte W07 + .byte v007 + .byte W06 + .byte v008 + .byte W07 + .byte v009 + .byte W06 + .byte v010 + .byte W07 + .byte v011 + .byte W06 + .byte v012 + .byte W07 + .byte v013 + .byte W06 + .byte v014 + .byte W01 + .byte W06 + .byte v015 + .byte W06 + .byte v016 + .byte W07 + .byte v017 + .byte W06 + .byte v018 + .byte W07 + .byte v019 + .byte W06 + .byte v020 + .byte W07 + .byte v021 + .byte W06 + .byte v022 + .byte W07 + .byte v023 + .byte W06 + .byte v024 + .byte W07 + .byte v025 + .byte W01 + .byte W05 + .byte v026 + .byte W01 + .byte v027 + .byte W08 + .byte v026 + .byte W04 + .byte v025 + .byte W04 + .byte v024 + .byte W05 + .byte v023 + .byte W04 + .byte v022 + .byte W04 + .byte v021 + .byte W04 + .byte v020 + .byte W04 + .byte v019 + .byte W05 + .byte v018 + .byte W04 + .byte v017 + .byte W04 + .byte v016 + .byte W04 + .byte v015 + .byte W04 + .byte v014 + .byte W05 + .byte v013 + .byte W03 + .byte W01 + .byte v012 + .byte W04 + .byte v011 + .byte W04 + .byte v010 + .byte W04 + .byte v009 + .byte W05 + .byte v008 + .byte W04 + .byte v007 + .byte W04 + .byte v006 + .byte W04 + .byte v005 + .byte W04 + .byte v004 + .byte W05 + .byte v003 + .byte W04 + .byte v002 + .byte W04 + .byte v001 + .byte W01 + .byte v000 + .byte W24 + .byte EOT , Gs3 + .byte Bn3 + .byte Dn4 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 0 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte FINE + + @********************** Track 12 **********************@ + + .global song039_12 +song039_12: @ 0x087B5D13 + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte VOICE , 57 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 33 + .byte LFOS , 65 + .byte LFODL , 0 + .byte MODT , 0 + .byte W72 + .byte MOD , 64 + .byte VOL , v000 + .byte TIE , Gs2, v127 + .byte W06 + .byte VOL , v001 + .byte W03 + .byte v002 + .byte W04 + .byte v003 + .byte W03 + .byte v004 + .byte W03 + .byte v005 + .byte W03 + .byte v006 + .byte W04 + .byte v007 + .byte W03 + .byte v008 + .byte W03 + .byte v009 + .byte W03 + .byte v010 + .byte W04 + .byte v011 + .byte W03 + .byte v012 + .byte W03 + .byte v013 + .byte W03 + .byte v014 + .byte W04 + .byte v015 + .byte W03 + .byte v016 + .byte W03 + .byte v017 + .byte W03 + .byte v018 + .byte W04 + .byte v019 + .byte W03 + .byte v020 + .byte W03 + .byte v021 + .byte W01 + .byte W02 + .byte v022 + .byte W04 + .byte v023 + .byte W03 + .byte v024 + .byte W03 + .byte v025 + .byte W03 + .byte v026 + .byte W04 + .byte v027 + .byte W03 + .byte v028 + .byte W03 + .byte v029 + .byte W03 + .byte v030 + .byte W04 + .byte v031 + .byte W03 + .byte v032 + .byte W03 + .byte v033 + .byte W03 + .byte v034 + .byte W04 + .byte v035 + .byte W03 + .byte v036 + .byte W03 + .byte v037 + .byte W03 + .byte v038 + .byte W04 + .byte v039 + .byte W03 + .byte v040 + .byte W03 + .byte v041 + .byte W03 + .byte v042 + .byte W04 + .byte v043 + .byte W01 + .byte v044 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W22 + .byte v044 + .byte W04 + .byte v043 + .byte W02 + .byte v042 + .byte W02 + .byte v041 + .byte W02 + .byte v040 + .byte W02 + .byte v039 + .byte W02 + .byte v038 + .byte W02 + .byte v037 + .byte W02 + .byte v036 + .byte W02 + .byte v035 + .byte W02 + .byte v034 + .byte W02 + .byte v033 + .byte W02 + .byte v032 + .byte W02 + .byte v031 + .byte W02 + .byte v030 + .byte W02 + .byte v029 + .byte W02 + .byte v028 + .byte W02 + .byte v027 + .byte W02 + .byte v026 + .byte W02 + .byte v025 + .byte W02 + .byte v024 + .byte W02 + .byte v023 + .byte W02 + .byte v022 + .byte W02 + .byte v021 + .byte W02 + .byte v020 + .byte W02 + .byte v019 + .byte W02 + .byte v018 + .byte W02 + .byte v017 + .byte W02 + .byte v016 + .byte W02 + .byte v015 + .byte W02 + .byte v014 + .byte W02 + .byte v013 + .byte W02 + .byte v012 + .byte W02 + .byte v011 + .byte W02 + .byte v010 + .byte W02 + .byte v009 + .byte W02 + .byte v008 + .byte W02 + .byte v007 + .byte W02 + .byte v006 + .byte W03 + .byte v005 + .byte W02 + .byte v004 + .byte W02 + .byte v003 + .byte W02 + .byte v002 + .byte W02 + .byte v001 + .byte W01 + .byte v000 + .byte W08 + .byte EOT + .byte FINE + + @********************** Track 13 **********************@ + + .global song039_13 +song039_13: @ 0x087B5DF2 + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 78 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N42 , Cn4, v116 + .byte W48 + .byte N13 + .byte W16 + .byte N08 + .byte W24 + .byte N44 + .byte W08 + .byte W96 + .byte N10 , Cn3, v096 + .byte N11 , Cn4, v116 + .byte W16 + .byte N10 , Cn3, v076 + .byte N08 , Cn4, v112 + .byte W32 + .byte N32 , Cn3, v108 + .byte N32 , Cn4, v116 + .byte W40 + .byte N44 , Ds3, v127 + .byte N42 , Ds4, v124 + .byte W08 + .byte W40 + .byte N44 , Fn3, v120 + .byte N44 , Fn4, v116 + .byte W48 + .byte N72 , Gn3, v112 + .byte N76 , Gn4, v116 + .byte W08 + .byte W72 + .byte N11 , Cn4, v112 + .byte N12 , Cn5 + .byte W16 + .byte Cn4, v120 + .byte N14 , Cn5, v112 + .byte W08 + .byte W06 + .byte FINE + + @********************** Track 14 **********************@ + + .global song039_14 +song039_14: @ 0x087B5E6E + .byte KEYSH , 0 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte VOICE , 77 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W72 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte N23 , En3, v127 + .byte N23 , En4 + .byte W24 + .byte An3, v120 + .byte N23 , An4 + .byte W24 + .byte N15 , Cs4 + .byte N15 , Cs5 + .byte W16 + .byte N68 , Dn4, v127 + .byte N68 , Dn5 + .byte W08 + .byte W96 + .byte W96 + .byte W96 + .byte W24 + .byte N23 , Gn3, v116 + .byte N23 , Gn4 + .byte W24 + .byte Cn4, v112 + .byte N23 , Cn5 + .byte W24 + .byte N15 , En4, v124 + .byte N15 , En5 + .byte W16 + .byte N64 , Fn4, v116 + .byte N64 , Fn5 + .byte W08 + .byte W56 + .byte FINE + + mAlignWord + .global C_DECL(song039) +C_DECL(song039): @ 0x087B5ED0 + .byte 14 @ trackCount + .byte 0 @ blockCount + .byte 0 @ priority + .byte 128 @ reverb + +mAlignWord + mPtr voicegroup000 @ voicegroup/tone + + mPtr song039_1 @ track + mPtr song039_2 @ track + mPtr song039_3 @ track + mPtr song039_4 @ track + mPtr song039_5 @ track + mPtr song039_6 @ track + mPtr song039_7 @ track + mPtr song039_8 @ track + mPtr song039_9 @ track + mPtr song039_10 @ track + mPtr song039_11 @ track + mPtr song039_12 @ track + mPtr song039_13 @ track + mPtr song039_14 @ track diff --git a/sa1/sound/songs/song040.s b/sa1/sound/songs/song040.s new file mode 100644 index 0000000000..d7cfe9dd9d --- /dev/null +++ b/sa1/sound/songs/song040.s @@ -0,0 +1,5763 @@ + .include "asm/macros/c_decl.inc" + .include "asm/macros/portable.inc" + .include "sound/MPlayDef.s" + + mSectionRodata + + @********************** Track 1 **********************@ + + mAlignWord + .global song040_1 +song040_1: @ 0x087B5F10 + .byte KEYSH , 0 + .byte TEMPO , 63 + .byte VOICE , 127 + .byte VOL , v115 + .byte PAN , c_v + .byte BENDR , 3 + .byte W48 + .byte N12 , Dn1, v076 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Dn1, v080 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Dn1, v084 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Dn1, v084 + .byte W12 + .byte Dn1, v032 + .byte W12 +song040_1_1: + .byte N12 , Dn1, v084 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Dn1, v076 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Dn1, v080 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Dn1, v084 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_1_1 + .byte N12 , Dn1, v080 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Dn1, v084 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte N06 , Dn1, v068 + .byte W06 + .byte Dn1, v044 + .byte W06 + .byte Cs1, v127 + .byte W12 + .byte N06 + .byte W06 + .byte Cs1, v124 + .byte W06 + .byte N12 , Cn1, v127 + .byte N96 , Gn2 + .byte W12 + .byte W12 + .byte N12 , Ds1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v084 + .byte W12 + .byte Dn1, v032 + .byte W12 +song040_1_2: + .byte N12 , Cn1, v127 + .byte N12 , Dn1, v076 + .byte W12 + .byte Dn1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v076 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v084 + .byte W12 + .byte Cn1, v127 + .byte N24 , Ds1, v076 + .byte W12 + .byte PEND +song040_1_3: + .byte W12 + .byte N12 , Dn1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v076 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v080 + .byte W12 + .byte N06 , Cn1, v127 + .byte N12 , Dn1, v040 + .byte W06 + .byte N06 , Cn1, v127 + .byte W06 + .byte N12 , Cs1 + .byte N12 , Dn1, v084 + .byte W12 + .byte Cn1, v127 + .byte N24 , Ds1, v076 + .byte W12 + .byte PEND +song040_1_4: + .byte W12 + .byte N12 , Dn1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v076 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v080 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v040 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v084 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N24 , Ds1, v076 + .byte W12 + .byte PEND +song040_1_5: + .byte W12 + .byte N12 , Dn1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v076 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v084 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_1_2 + .byte PATT + mPtr song040_1_3 + .byte PATT + mPtr song040_1_4 + .byte PATT + mPtr song040_1_5 + .byte PATT + mPtr song040_1_2 + .byte PATT + mPtr song040_1_3 + .byte PATT + mPtr song040_1_4 + .byte PATT + mPtr song040_1_5 + .byte PATT + mPtr song040_1_2 + .byte PATT + mPtr song040_1_3 + .byte W12 + .byte N12 , Dn1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v076 + .byte W12 + .byte Dn1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v080 + .byte W12 + .byte Dn1, v040 + .byte N12 , Gs1, v127 + .byte W12 + .byte Cs1 + .byte N12 , Dn1, v084 + .byte W12 + .byte Cn1, v127 + .byte N24 , Ds1, v076 + .byte W12 + .byte W12 + .byte N12 , Ds1, v032 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v040 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v044 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Cn1, v127 + .byte W12 + .byte N06 , Cs1 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Cn1 + .byte N66 , Cs2 + .byte W18 + .byte N05 , Cs1 + .byte W06 + .byte N12 , Cn1 + .byte W12 + .byte N05 , Gn1 + .byte W06 + .byte Cs1 + .byte W06 + .byte N12 , Cn1 + .byte N24 , Ds1, v072 + .byte W12 +song040_1_6: + .byte W12 + .byte N12 , Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte PEND +song040_1_7: + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Cn1, v127 + .byte N24 , Ds1, v084 + .byte W12 + .byte PEND +song040_1_8: + .byte W12 + .byte N12 , Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N06 + .byte N12 , Ds1, v060 + .byte W06 + .byte N06 , Cn1, v127 + .byte W06 + .byte PEND + .byte N06 + .byte N36 , Cs2, v084 + .byte W06 + .byte N06 , Cn1, v127 + .byte W06 + .byte N12 , Cs1, v068 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N36 , Gn2, v084 + .byte W18 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte W12 + .byte N05 , Cs1 + .byte N12 , Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N24 , Ds1, v072 + .byte W12 + .byte PATT + mPtr song040_1_6 + .byte PATT + mPtr song040_1_7 + .byte PATT + mPtr song040_1_8 + .byte N06 , Cn1, v127 + .byte N36 , Cs2, v084 + .byte W06 + .byte N06 , Cn1, v127 + .byte W06 + .byte N12 , Cs1, v068 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v044 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Cn1 + .byte N36 , Fs2, v084 + .byte W24 + .byte N06 , Cs1, v127 + .byte W12 + .byte Cn1 + .byte N12 , Dn1, v044 + .byte W12 + .byte N06 , Cn1, v127 + .byte N36 , Gn2, v084 + .byte W12 + .byte W12 + .byte N12 , Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v052 + .byte W12 +song040_1_9: + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v052 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 +song040_1_11: + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte N11 , Cs1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Cs1, v127 + .byte W06 + .byte N05 , An1 + .byte W06 + .byte N11 , Gn1 + .byte W12 + .byte PEND +song040_1_10: + .byte N12 , Cn1, v127 + .byte N36 , Fs2 + .byte W12 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v040 + .byte N40 , Gn2, v127 + .byte W12 + .byte N12 , Dn1, v040 + .byte W12 + .byte N11 , Cs1, v127 + .byte N12 , Dn1, v040 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v040 + .byte W06 + .byte N05 , An1, v127 + .byte W06 + .byte N12 , Dn1, v040 + .byte N11 , Gn1, v127 + .byte W12 + .byte PEND + .byte N12 , Cn1 + .byte N36 , Fs2 + .byte W12 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v040 + .byte N40 , Gn2, v127 + .byte W12 + .byte N12 , Dn1, v040 + .byte W12 + .byte N11 , Cs1, v127 + .byte N12 , Ds1, v040 + .byte W12 + .byte N11 , Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte N05 , Cs1, v127 + .byte N12 , Ds1, v072 + .byte W06 + .byte N05 , Cs1, v127 + .byte W06 + .byte PATT + mPtr song040_1_10 + .byte N12 , Cn1, v127 + .byte N12 , Dn1, v040 + .byte N32 , Fs2, v127 + .byte W12 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cs1, v127 + .byte N12 , Dn1, v040 + .byte W12 + .byte Cn1, v127 + .byte N12 , Dn1, v040 + .byte N32 , Gn2, v127 + .byte W12 + .byte N12 , Dn1, v040 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Dn1, v040 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte N12 , Dn1, v040 + .byte N06 , An1, v127 + .byte W06 + .byte Gs1 + .byte W06 + .byte N12 , Dn1, v040 + .byte N06 , Gn1, v127 + .byte W06 + .byte Cs1 + .byte W06 + .byte N12 , Cn1 + .byte N44 , Gn2 + .byte W12 + .byte N12 , Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte N11 , Ds1, v060 + .byte W12 + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v052 + .byte W12 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_11 + .byte N12 , Cn1, v127 + .byte N48 , Fs2 + .byte W24 + .byte N12 , Cs1 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v052 + .byte W12 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte N11 , Cs1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Cs1, v127 + .byte W06 + .byte N06 + .byte W06 + .byte N06 + .byte W06 + .byte N06 + .byte W06 + .byte An1 + .byte W06 + .byte Gs1 + .byte W06 + .byte Gn1 + .byte W06 + .byte Fs1 + .byte W06 + .byte N12 , Cs1 + .byte N12 , Ds1, v076 + .byte N96 , Gn2, v127 + .byte W12 + .byte N12 , Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v052 + .byte W12 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte N06 , Cs1, v127 + .byte N12 , Ds1, v052 + .byte W06 + .byte N06 , Cs1, v127 + .byte W06 + .byte An1 + .byte W06 + .byte Gs1 + .byte W06 + .byte Gn1 + .byte W06 + .byte Fs1 + .byte W06 + .byte N12 , Cs1 + .byte N12 , Ds1, v076 + .byte N48 , Fs2, v127 + .byte W12 + .byte N12 , Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v052 + .byte W12 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte N06 , Cs1, v127 + .byte W06 + .byte N06 + .byte W06 + .byte N06 + .byte W06 + .byte N06 + .byte W06 + .byte N12 , Cn1 + .byte N48 , Gn2 + .byte W24 + .byte N12 , Cs1 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v052 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v052 + .byte W12 + .byte PATT + mPtr song040_1_9 + .byte PATT + mPtr song040_1_9 + .byte N12 , Cn1, v127 + .byte N12 , Ds1, v084 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cs1, v127 + .byte N12 , Ds1, v076 + .byte W12 + .byte Ds1, v060 + .byte W12 + .byte Cn1, v127 + .byte N12 , Ds1, v080 + .byte W12 + .byte N06 , Cs1, v127 + .byte W06 + .byte N06 + .byte W06 + .byte An1 + .byte W06 + .byte Gs1 + .byte W06 + .byte Gn1 + .byte W06 + .byte Fs1 + .byte W06 + .byte N12 , Cs1 + .byte N06 , Ds1, v084 + .byte W48 + .byte N12 , Cn1, v127 + .byte N06 , Ds1, v084 + .byte W12 + .byte FINE + + @********************** Track 2 **********************@ + + .global song040_2 +song040_2: @ 0x087B64F8 + .byte KEYSH , 0 + .byte VOICE , 12 + .byte VOL , v060 + .byte PAN , c_v + .byte BENDR , 3 + .byte W48 +song040_2_1: + .byte N03 , Gn4, v124 + .byte W12 + .byte Gn5, v092 + .byte W06 + .byte Dn5, v088 + .byte W06 + .byte Gn4, v084 + .byte W06 + .byte Gn5, v080 + .byte W06 + .byte Dn5, v076 + .byte W06 + .byte Gn4 + .byte W06 + .byte Gn5, v072 + .byte W06 + .byte Dn5, v068 + .byte W06 + .byte Gn4, v064 + .byte W06 + .byte Gn5, v060 + .byte W06 + .byte Dn5, v056 + .byte W06 + .byte Gn4, v052 + .byte W06 + .byte Gn5, v048 + .byte W06 + .byte Dn5, v044 + .byte W06 + .byte PEND +song040_2_2: + .byte N03 , Gn4, v044 + .byte W06 + .byte Gn5, v040 + .byte W06 + .byte Dn5, v036 + .byte W06 + .byte Gn4, v032 + .byte W06 + .byte Gn5, v028 + .byte W06 + .byte Dn5, v024 + .byte W06 + .byte Gn4, v020 + .byte W06 + .byte Gn5, v016 + .byte W06 + .byte Dn5, v012 + .byte W06 + .byte Gn4 + .byte W06 + .byte Gn5, v008 + .byte W06 + .byte Dn5, v004 + .byte W30 + .byte PEND + .byte PATT + mPtr song040_2_1 + .byte PATT + mPtr song040_2_2 + .byte PATT + mPtr song040_2_1 + .byte PATT + mPtr song040_2_2 + .byte PATT + mPtr song040_2_1 + .byte PATT + mPtr song040_2_2 + .byte PATT + mPtr song040_2_1 + .byte PATT + mPtr song040_2_2 + .byte PATT + mPtr song040_2_1 + .byte PATT + mPtr song040_2_2 +song040_2_3: + .byte N03 , An4, v124 + .byte W12 + .byte An5, v092 + .byte W06 + .byte Dn5, v088 + .byte W06 + .byte An4, v084 + .byte W06 + .byte An5, v080 + .byte W06 + .byte Dn5, v076 + .byte W06 + .byte An4 + .byte W06 + .byte An5, v072 + .byte W06 + .byte Dn5, v068 + .byte W06 + .byte An4, v064 + .byte W06 + .byte An5, v060 + .byte W06 + .byte Dn5, v056 + .byte W06 + .byte An4, v052 + .byte W06 + .byte An5, v048 + .byte W06 + .byte Dn5, v044 + .byte W06 + .byte PEND +song040_2_4: + .byte N03 , An4, v044 + .byte W06 + .byte An5, v040 + .byte W06 + .byte Dn5, v036 + .byte W06 + .byte An4, v032 + .byte W06 + .byte An5, v028 + .byte W06 + .byte Dn5, v024 + .byte W06 + .byte An4, v020 + .byte W06 + .byte An5, v016 + .byte W06 + .byte Dn5, v012 + .byte W06 + .byte An4 + .byte W06 + .byte An5, v008 + .byte W06 + .byte Dn5, v004 + .byte W30 + .byte PEND + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 +song040_2_5: + .byte N03 , Gs4, v124 + .byte W12 + .byte Gs5, v092 + .byte W06 + .byte Cs5, v088 + .byte W06 + .byte Gs4, v084 + .byte W06 + .byte Gs5, v080 + .byte W06 + .byte Cs5, v076 + .byte W06 + .byte Gs4 + .byte W06 + .byte Gs5, v072 + .byte W06 + .byte Cs5, v068 + .byte W06 + .byte Gs4, v064 + .byte W06 + .byte Gs5, v060 + .byte W06 + .byte Cs5, v056 + .byte W06 + .byte Gs4, v052 + .byte W06 + .byte Gs5, v048 + .byte W06 + .byte Cs5, v044 + .byte W06 + .byte PEND +song040_2_6: + .byte N03 , Gs4, v044 + .byte W06 + .byte Gs5, v040 + .byte W06 + .byte Cs5, v036 + .byte W06 + .byte Gs4, v032 + .byte W06 + .byte Gs5, v028 + .byte W06 + .byte Cs5, v024 + .byte W06 + .byte Gs4, v020 + .byte W06 + .byte Gs5, v016 + .byte W06 + .byte Cs5, v012 + .byte W06 + .byte Gs4 + .byte W06 + .byte Gs5, v008 + .byte W06 + .byte Cs5, v004 + .byte W30 + .byte PEND +song040_2_7: + .byte N03 , As4, v124 + .byte W12 + .byte As5, v092 + .byte W06 + .byte Ds5, v088 + .byte W06 + .byte As4, v084 + .byte W06 + .byte As5, v080 + .byte W06 + .byte Ds5, v076 + .byte W06 + .byte As4 + .byte W06 + .byte As5, v072 + .byte W06 + .byte Ds5, v068 + .byte W06 + .byte As4, v064 + .byte W06 + .byte As5, v060 + .byte W06 + .byte Ds5, v056 + .byte W06 + .byte As4, v052 + .byte W06 + .byte As5, v048 + .byte W06 + .byte Ds5, v044 + .byte W06 + .byte PEND +song040_2_8: + .byte N03 , As4, v044 + .byte W06 + .byte As5, v040 + .byte W06 + .byte Ds5, v036 + .byte W06 + .byte As4, v032 + .byte W06 + .byte As5, v028 + .byte W06 + .byte Ds5, v024 + .byte W06 + .byte As4, v020 + .byte W06 + .byte As5, v016 + .byte W06 + .byte Ds5, v012 + .byte W06 + .byte As4 + .byte W06 + .byte As5, v008 + .byte W06 + .byte Ds5, v004 + .byte W30 + .byte PEND + .byte PATT + mPtr song040_2_5 + .byte PATT + mPtr song040_2_6 + .byte PATT + mPtr song040_2_7 + .byte PATT + mPtr song040_2_8 +song040_2_9: + .byte N03 , Fs4, v124 + .byte W12 + .byte Fs5, v092 + .byte W06 + .byte Bn4, v088 + .byte W06 + .byte Fs4, v084 + .byte W06 + .byte Fs5, v080 + .byte W06 + .byte Bn4, v076 + .byte W06 + .byte Fs4 + .byte W06 + .byte Fs5, v072 + .byte W06 + .byte Bn4, v068 + .byte W06 + .byte Fs4, v064 + .byte W06 + .byte Fs5, v060 + .byte W06 + .byte Bn4, v056 + .byte W06 + .byte Fs4, v052 + .byte W06 + .byte Fs5, v048 + .byte W06 + .byte Bn4, v044 + .byte W06 + .byte PEND +song040_2_10: + .byte N03 , Fs4, v044 + .byte W06 + .byte Fs5, v040 + .byte W06 + .byte Bn4, v036 + .byte W06 + .byte Fs4, v032 + .byte W06 + .byte Fs5, v028 + .byte W06 + .byte Bn4, v024 + .byte W06 + .byte Fs4, v020 + .byte W06 + .byte Fs5, v016 + .byte W06 + .byte Bn4, v012 + .byte W06 + .byte Fs4 + .byte W06 + .byte Fs5, v008 + .byte W06 + .byte Bn4, v004 + .byte W30 + .byte PEND + .byte PATT + mPtr song040_2_5 + .byte PATT + mPtr song040_2_6 + .byte PATT + mPtr song040_2_9 + .byte PATT + mPtr song040_2_10 + .byte PATT + mPtr song040_2_3 + .byte PATT + mPtr song040_2_4 +song040_2_11: + .byte N03 , As4, v124 + .byte W12 + .byte As5, v092 + .byte W06 + .byte Fn5, v088 + .byte W06 + .byte As4, v084 + .byte W06 + .byte As5, v080 + .byte W06 + .byte Fn5, v076 + .byte W06 + .byte As4 + .byte W06 + .byte As5, v072 + .byte W06 + .byte Fn5, v068 + .byte W06 + .byte As4, v064 + .byte W06 + .byte As5, v060 + .byte W06 + .byte Fn5, v056 + .byte W06 + .byte As4, v052 + .byte W06 + .byte As5, v048 + .byte W06 + .byte Fn5, v044 + .byte W06 + .byte PEND +song040_2_12: + .byte N03 , As4, v044 + .byte W06 + .byte As5, v040 + .byte W06 + .byte Fn5, v036 + .byte W06 + .byte As4, v032 + .byte W06 + .byte As5, v028 + .byte W06 + .byte Fn5, v024 + .byte W06 + .byte As4, v020 + .byte W06 + .byte As5, v016 + .byte W06 + .byte Fn5, v012 + .byte W06 + .byte As4 + .byte W06 + .byte As5, v008 + .byte W06 + .byte Fn5, v004 + .byte W30 + .byte PEND + .byte PATT + mPtr song040_2_11 + .byte PATT + mPtr song040_2_12 + .byte PATT + mPtr song040_2_11 + .byte PATT + mPtr song040_2_12 + .byte PATT + mPtr song040_2_11 + .byte PATT + mPtr song040_2_12 + .byte N03 , Gs4, v124 + .byte W12 + .byte Gs5, v092 + .byte W06 + .byte Ds5, v088 + .byte W06 + .byte Gs4, v084 + .byte W06 + .byte Gs5, v080 + .byte W06 + .byte Ds5, v076 + .byte W06 + .byte Gs4 + .byte W06 + .byte Gs5, v072 + .byte W06 + .byte Ds5, v068 + .byte W06 + .byte Gs4, v064 + .byte W06 + .byte Gs5, v060 + .byte W06 + .byte Ds5, v056 + .byte W06 + .byte Gs4, v052 + .byte W06 + .byte Gs5, v048 + .byte W06 + .byte Ds5, v044 + .byte W06 + .byte Gs4 + .byte W06 + .byte Gs5, v040 + .byte W06 + .byte Ds5, v036 + .byte W06 + .byte Gs4, v032 + .byte W06 + .byte Gs5, v028 + .byte W06 + .byte Ds5, v024 + .byte W06 + .byte Gs4, v020 + .byte W06 + .byte Gs5, v016 + .byte W06 + .byte Ds5, v012 + .byte W06 + .byte Gs4 + .byte W06 + .byte Gs5, v008 + .byte W06 + .byte Ds5, v004 + .byte W30 + .byte PATT + mPtr song040_2_1 + .byte PATT + mPtr song040_2_2 + .byte N03 , Fn4, v124 + .byte W12 + .byte Fn5, v092 + .byte W06 + .byte Cn5, v088 + .byte W06 + .byte Fn4, v084 + .byte W06 + .byte Fn5, v080 + .byte W06 + .byte Cn5, v076 + .byte W06 + .byte Fn4 + .byte W06 + .byte Fn5, v072 + .byte W06 + .byte Cn5, v068 + .byte W06 + .byte Fn4, v064 + .byte W06 + .byte Fn5, v060 + .byte W06 + .byte Cn5, v056 + .byte W06 + .byte Fn4, v052 + .byte W06 + .byte Fn5, v048 + .byte W06 + .byte Cn5, v044 + .byte W06 + .byte Fn4 + .byte W06 + .byte Fn5, v040 + .byte W06 + .byte Cn5, v036 + .byte W06 + .byte Fn4, v032 + .byte W06 + .byte Fn5, v028 + .byte W06 + .byte Cn5, v024 + .byte W06 + .byte Fn4, v020 + .byte W06 + .byte Fn5, v016 + .byte W06 + .byte Cn5, v012 + .byte W06 + .byte Fn4 + .byte W06 + .byte Fn5, v008 + .byte W06 + .byte Cn5, v004 + .byte W30 + .byte PATT + mPtr song040_2_7 + .byte PATT + mPtr song040_2_8 + .byte PATT + mPtr song040_2_7 + .byte PATT + mPtr song040_2_8 + .byte PATT + mPtr song040_2_7 + .byte PATT + mPtr song040_2_8 + .byte PATT + mPtr song040_2_7 + .byte PATT + mPtr song040_2_8 + .byte PATT + mPtr song040_2_7 + .byte PATT + mPtr song040_2_8 + .byte PATT + mPtr song040_2_7 + .byte N03 , As4, v044 + .byte W06 + .byte As5, v040 + .byte W06 + .byte Ds5, v036 + .byte W06 + .byte As4, v032 + .byte W06 + .byte As5, v028 + .byte W06 + .byte Ds5, v024 + .byte W06 + .byte As4, v020 + .byte W06 + .byte As5, v016 + .byte W06 + .byte Ds5, v012 + .byte W06 + .byte As4 + .byte W06 + .byte As5, v008 + .byte W06 + .byte Ds5, v004 + .byte W03 + .byte FINE + + @********************** Track 3 **********************@ + + .global song040_3 +song040_3: @ 0x087B68CB + .byte KEYSH , 0 + .byte VOICE , 76 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 0 + .byte MODT , 2 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N36 , Fs3, v076 + .byte W36 + .byte N60 , Gs3 + .byte W60 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte TIE , As3, v068 + .byte W96 + .byte W07 + .byte EOT + .byte W05 + .byte N19 + .byte W24 + .byte N32 , As3, v064 + .byte W36 + .byte N23 , As3, v056 + .byte W24 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N92 , Fn3, v076 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte N96 , Ds3, v068 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte Fs3 + .byte W96 + .byte FINE + + @********************** Track 4 **********************@ + + .global song040_4 +song040_4: @ 0x087B693F + .byte KEYSH , 0 + .byte VOICE , 80 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 56 + .byte LFODL , 0 + .byte MOD , 0 + .byte MODT , 2 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W54 + .byte N05 , Bn0, v084 + .byte W01 + .byte N07 , Cn1, v088 + .byte W01 + .byte N08 , Dn1, v080 + .byte W01 + .byte N02 , En1, v044 + .byte W04 + .byte N04 , En1, v092 + .byte W02 + .byte Fn1, v084 + .byte W02 + .byte Gn1, v096 + .byte W02 + .byte An1, v084 + .byte W01 + .byte N03 , Bn1, v096 + .byte W02 + .byte Cn2, v100 + .byte W01 + .byte Dn2, v104 + .byte W02 + .byte En2, v116 + .byte W01 + .byte Fn2, v108 + .byte W01 + .byte N04 , Gn2, v104 + .byte W02 + .byte An2, v100 + .byte W01 + .byte N05 , Bn2, v084 + .byte W02 + .byte N03 , Cn3, v052 + .byte W04 + .byte TIE , Dn3, v080 + .byte W12 + .byte W92 + .byte W03 + .byte EOT + .byte W01 + .byte N08 , Dn3, v108 + .byte W12 + .byte N19 + .byte W24 + .byte N32 , Dn3, v112 + .byte W36 + .byte N11 , Dn3, v104 + .byte W12 + .byte N32 , Fn2, v116 + .byte W12 + .byte W24 + .byte N44 , Fn3, v104 + .byte W48 + .byte N11 , Fn3, v108 + .byte W12 + .byte N56 , Gn3, v092 + .byte W12 + .byte W48 + .byte N23 , Gn3, v072 + .byte W24 + .byte N11 , Gn2, v092 + .byte W12 + .byte N56 , Dn3, v116 + .byte W12 + .byte W48 + .byte N20 , Dn3, v104 + .byte W24 + .byte Dn3, v076 + .byte W24 + .byte N05 , Dn3, v104 + .byte W12 + .byte N22 , Dn3, v088 + .byte W24 + .byte N30 , Dn3, v112 + .byte W36 + .byte N11 + .byte W12 + .byte N56 , Fn3 + .byte W12 + .byte W48 + .byte N09 , Fn3, v104 + .byte W12 + .byte N23 + .byte W24 + .byte N32 , Gn3, v108 + .byte W12 + .byte W24 + .byte N17 , Gn3, v096 + .byte W24 + .byte N09 , Gn3, v100 + .byte W12 + .byte N11 , Gn3, v120 + .byte W12 + .byte Gn2, v092 + .byte W12 + .byte N56 , An2, v120 + .byte W12 + .byte W48 + .byte N44 , An2, v108 + .byte W48 + .byte N06 , An2, v104 + .byte W12 + .byte N19 + .byte W24 + .byte N30 , An2, v108 + .byte W36 + .byte N11 , An2, v104 + .byte W12 + .byte N56 , Cn3, v120 + .byte W12 + .byte W48 + .byte N09 , Cn3, v108 + .byte W12 + .byte N23 , Cn3, v116 + .byte W24 + .byte N32 , Dn3, v120 + .byte W12 + .byte W24 + .byte N22 , Dn3, v112 + .byte W24 + .byte N07 , Dn3, v124 + .byte W12 + .byte N22 , Dn3, v116 + .byte W24 + .byte N54 , An2, v108 + .byte W12 + .byte W48 + .byte N09 , An2, v096 + .byte W12 + .byte N19 , An2, v104 + .byte W24 + .byte N10 , An2, v092 + .byte W12 + .byte N21 , An2, v108 + .byte W24 + .byte N09 , An2, v092 + .byte W12 + .byte N30 + .byte W36 + .byte N10 , An2, v084 + .byte W12 + .byte N56 , Cn3, v104 + .byte W12 + .byte W48 + .byte N08 , Cn3, v092 + .byte W12 + .byte N20 , Cn3, v108 + .byte W24 + .byte Dn3 + .byte W12 + .byte W12 + .byte N32 , Dn3, v112 + .byte W36 + .byte N08 + .byte W12 + .byte N09 + .byte W12 + .byte N11 + .byte W12 + .byte TIE , En3, v096 + .byte W12 + .byte W92 + .byte W01 + .byte EOT + .byte W03 + .byte N30 , En3, v120 + .byte W30 + .byte W01 + .byte N02 , Dn3, v064 + .byte W04 + .byte Cn3, v060 + .byte W02 + .byte Bn2, v076 + .byte W02 + .byte An2, v072 + .byte W03 + .byte Gn2, v036 + .byte W32 + .byte W02 + .byte N05 , Dn1, v076 + .byte W01 + .byte N02 , Cn1, v064 + .byte W01 + .byte N06 , En1, v048 + .byte W03 + .byte N04 , Fn1, v056 + .byte W02 + .byte Gn1, v088 + .byte W02 + .byte An1, v084 + .byte W01 + .byte Bn1, v076 + .byte W02 + .byte Cn2, v084 + .byte W01 + .byte Dn2, v092 + .byte W02 + .byte En2, v100 + .byte W01 + .byte Fn2, v096 + .byte W02 + .byte Gn2, v084 + .byte W02 + .byte N16 , An2, v052 + .byte W24 + .byte N17 , An2, v096 + .byte W24 + .byte N09 , An2, v104 + .byte W12 + .byte N08 , An2, v044 + .byte W12 + .byte N21 , An2, v092 + .byte W24 + .byte N11 , An2, v060 + .byte W36 + .byte N12 , An2, v116 + .byte W24 + .byte N09 , An2, v108 + .byte W12 + .byte N11 , An2, v076 + .byte W12 + .byte N54 , Dn3, v120 + .byte W12 + .byte W48 + .byte N20 , Dn3, v096 + .byte W24 + .byte N20 + .byte W24 + .byte N32 , Fn3, v116 + .byte W36 + .byte Gn3, v124 + .byte W36 + .byte N11 , Gn2, v120 + .byte W12 + .byte An2 + .byte W12 + .byte N20 , An2, v108 + .byte W36 + .byte N07 , An2, v056 + .byte W12 + .byte N17 , An2, v108 + .byte W24 + .byte N32 , An2, v100 + .byte W24 + .byte W12 + .byte N12 + .byte W24 + .byte N24 , An2, v108 + .byte W36 + .byte N11 , An2, v092 + .byte W12 + .byte N80 , Dn3, v116 + .byte W12 + .byte W72 + .byte N19 , Dn3, v100 + .byte W24 + .byte N30 , Fn2, v120 + .byte W36 + .byte N44 , Gn2, v108 + .byte W48 + .byte TIE , Gs2, v120 + .byte W12 + .byte W96 + .byte W42 + .byte W01 + .byte EOT + .byte W05 + .byte N44 , Gs2, v104 + .byte W48 + .byte TIE , As2, v088 + .byte W96 + .byte W09 + .byte EOT + .byte W03 + .byte N19 , As2, v112 + .byte W24 + .byte N56 , As2, v088 + .byte W60 + .byte TIE , Gs2, v080 + .byte W96 + .byte W44 + .byte EOT + .byte W04 + .byte N09 , Gs2, v092 + .byte W12 + .byte N32 , Gs2, v088 + .byte W36 + .byte N44 , As2, v096 + .byte W48 + .byte N88 , As2, v112 + .byte W48 + .byte W48 + .byte N08 , As2, v092 + .byte W12 + .byte N32 + .byte W36 + .byte TIE , Fs2, v096 + .byte W96 + .byte W44 + .byte W01 + .byte EOT + .byte W03 + .byte N09 , Fs2, v092 + .byte W12 + .byte N32 , Fs2, v096 + .byte W36 + .byte N90 , Cs3, v100 + .byte W96 + .byte N09 , Cs3, v084 + .byte W12 + .byte N20 , Cs3, v096 + .byte W24 + .byte N48 + .byte W60 + .byte N32 , Fs2, v104 + .byte W36 + .byte N56 , Gs2, v116 + .byte W60 + .byte W96 + .byte N32 , Gn2, v112 + .byte W36 + .byte N48 , An2, v124 + .byte W60 + .byte N32 , As2, v116 + .byte W36 + .byte N56 , Cn3, v124 + .byte W60 + .byte N92 , Fn3, v112 + .byte W96 + .byte N06 , Fn3, v108 + .byte W12 + .byte N21 , Fn3, v100 + .byte W24 + .byte N56 , Fn3, v116 + .byte W60 + .byte W96 + .byte W96 + .byte N88 , Fn3, v100 + .byte W96 + .byte N06 , Fn3, v096 + .byte W12 + .byte N19 , Fn3, v108 + .byte W24 + .byte N56 + .byte W60 + .byte N92 , Ds3, v112 + .byte W96 + .byte N68 , Ds3, v068 + .byte W72 + .byte N23 , En3, v127 + .byte W24 + .byte N92 , Ds3, v104 + .byte W96 + .byte N07 + .byte W12 + .byte N42 , Ds3, v108 + .byte W48 + .byte N20 , Ds3, v092 + .byte W24 + .byte N11 , Ds3, v104 + .byte W12 + .byte W96 + .byte N88 , Cs3, v108 + .byte W96 + .byte N92 , Ds3 + .byte W96 + .byte N64 , Fn3, v100 + .byte W96 + .byte N92 , As2, v127 + .byte W96 + .byte N07 , As2, v068 + .byte W12 + .byte N21 , As2, v100 + .byte W24 + .byte N60 , As2, v127 + .byte W60 + .byte TIE , Ds3, v104 + .byte W96 + .byte W01 + .byte EOT + .byte W92 + .byte W03 + .byte N92 , As2, v116 + .byte W96 + .byte N07 + .byte W12 + .byte N22 , As2, v104 + .byte W24 + .byte N56 , As2, v120 + .byte W60 + .byte N92 , Fs3, v112 + .byte W96 + .byte W96 + .byte TIE , As2, v116 + .byte W96 + .byte W80 + .byte EOT + .byte N05 , Bn2, v020 + .byte W01 + .byte N07 , Cn3, v072 + .byte W04 + .byte N05 , Dn3, v060 + .byte W02 + .byte En3, v064 + .byte W02 + .byte N06 , Fn3, v056 + .byte W02 + .byte Gn3, v032 + .byte W01 + .byte N04 , An3, v024 + .byte W04 + .byte TIE , As3, v108 + .byte W96 + .byte W88 + .byte W01 + .byte EOT + .byte W07 + .byte N11 , As3, v127 + .byte W48 + .byte N10 , As2, v112 + .byte W10 + .byte FINE + + @********************** Track 5 **********************@ + + .global song040_5 +song040_5: @ 0x087B6C2D + .byte KEYSH , 0 + .byte VOICE , 45 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W84 + .byte N17 , Gn1, v104 + .byte W12 + .byte W12 + .byte N05 , Gn1, v096 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1, v092 + .byte W12 + .byte Gn1, v096 + .byte W12 + .byte Gn1, v088 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte Gn1, v104 + .byte W12 + .byte Gn1, v112 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N17 , As1 + .byte W12 +song040_5_1: + .byte W12 + .byte N05 , As1, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N17 , Cn2 + .byte W12 + .byte PEND + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte Fn1 + .byte W12 + .byte Fs1 + .byte W12 + .byte N17 , Gn1 + .byte W12 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte An1 + .byte W12 + .byte N17 , As1 + .byte W12 + .byte PATT + mPtr song040_5_1 + .byte W12 + .byte N05 , Cn2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte Cs2 + .byte W12 + .byte N17 , Dn2 + .byte W12 +song040_5_2: + .byte W12 + .byte N05 , Dn2, v112 + .byte W12 + .byte Dn3 + .byte W12 + .byte Dn2 + .byte W12 + .byte N05 + .byte W12 + .byte Dn3 + .byte W12 + .byte Dn2 + .byte W12 + .byte N05 + .byte W12 + .byte PEND +song040_5_3: + .byte N05 , Dn3, v112 + .byte W12 + .byte Dn2 + .byte W12 + .byte N05 + .byte W12 + .byte Dn3 + .byte W12 + .byte Dn2 + .byte W12 + .byte N05 + .byte W12 + .byte En2 + .byte W12 + .byte N17 , Fn2 + .byte W12 + .byte PEND +song040_5_4: + .byte W12 + .byte N05 , Fn2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N17 , Gn2 + .byte W12 + .byte PEND + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte Cn2 + .byte W12 + .byte Cs2 + .byte W12 + .byte N17 , Dn2 + .byte W12 + .byte PATT + mPtr song040_5_2 + .byte PATT + mPtr song040_5_3 + .byte PATT + mPtr song040_5_4 + .byte W12 + .byte N05 , Gn2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte Gs2 + .byte W12 + .byte N17 , An2 + .byte W12 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W36 + .byte N23 , An1 + .byte W24 + .byte N05 , Cn2 + .byte W12 + .byte Cs2 + .byte W12 + .byte N17 , Dn2 + .byte W12 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 +song040_5_5: + .byte N05 , Dn2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte PEND + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N17 , Cn2 + .byte W24 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte PATT + mPtr song040_5_5 + .byte PATT + mPtr song040_5_5 + .byte N05 , Gn1, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte An1 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N17 , Cn2 + .byte W24 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N17 , Cs2 + .byte W12 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 +song040_5_7: + .byte N05 , Cs2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte PEND +song040_5_6: + .byte N05 , Ds2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_5_6 + .byte PATT + mPtr song040_5_7 + .byte PATT + mPtr song040_5_7 +song040_5_8: + .byte N05 , Cn2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_5_8 +song040_5_9: + .byte N05 , Bn1, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_5_9 +song040_5_10: + .byte N05 , As1, v112 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte N05 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_5_10 + .byte N32 , Gs1, v112 + .byte W36 + .byte N23 , As1 + .byte W24 + .byte N11 + .byte W12 + .byte N05 , Gs2 + .byte W06 + .byte An2 + .byte W06 + .byte N11 , As2 + .byte W12 + .byte N32 , Bn1 + .byte W36 + .byte N23 , Cs2 + .byte W24 + .byte N05 , As2 + .byte W06 + .byte Bn2 + .byte W06 + .byte Cs3 + .byte W06 + .byte Gs2 + .byte W06 + .byte N11 , Cs2 + .byte W12 + .byte N32 , An1 + .byte W36 + .byte N23 , Bn1 + .byte W24 + .byte N11 + .byte W12 + .byte N05 , An2 + .byte W06 + .byte As2 + .byte W06 + .byte N11 , Bn2 + .byte W12 + .byte N32 , Cn2 + .byte W36 + .byte N23 , Fn2 + .byte W24 + .byte N05 , Ds3 + .byte W06 + .byte En3 + .byte W06 + .byte Fn3 + .byte W06 + .byte Cn3 + .byte W06 + .byte N11 , Fn2 + .byte W12 +song040_5_11: + .byte N05 , As1, v112 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte PEND +song040_5_12: + .byte N05 , As2, v112 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_5_11 + .byte N05 , As2, v112 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte Fn2 + .byte W12 + .byte PATT + mPtr song040_5_11 + .byte PATT + mPtr song040_5_12 + .byte PATT + mPtr song040_5_11 + .byte N05 , As2, v112 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte An1 + .byte W12 + .byte N05 + .byte W12 + .byte Gs1 + .byte W12 + .byte N05 + .byte W12 + .byte Gs2 + .byte W12 + .byte Gs1 + .byte W12 + .byte N05 + .byte W12 + .byte Gs2 + .byte W12 + .byte Gs1 + .byte W12 + .byte N05 + .byte W12 + .byte Gs2 + .byte W12 + .byte Gs1 + .byte W12 + .byte N05 + .byte W12 + .byte Gs2 + .byte W12 + .byte Gs1 + .byte W12 + .byte N05 + .byte W12 + .byte Gs2 + .byte W12 + .byte Gs1 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2 + .byte W12 + .byte Gn1 + .byte W12 + .byte N05 + .byte W12 + .byte Fs2 + .byte W12 + .byte Fs1 + .byte W12 + .byte N05 + .byte W12 + .byte Fs2 + .byte W12 + .byte Fs1 + .byte W12 + .byte N05 + .byte W12 + .byte Fs2 + .byte W12 + .byte Fs1 + .byte W12 + .byte Fn1 + .byte W12 + .byte N05 + .byte W12 + .byte Fn2 + .byte W12 + .byte Fn1 + .byte W12 + .byte N05 + .byte W12 + .byte Fn2 + .byte W12 + .byte Fn1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte As2 + .byte W12 + .byte As1 + .byte W12 + .byte N05 + .byte W12 + .byte Gs2 + .byte W06 + .byte An2 + .byte W06 + .byte N11 , As2 + .byte W12 +song040_5_13: + .byte N05 , Ds2, v112 + .byte W12 + .byte N05 + .byte W12 + .byte Ds3 + .byte W12 + .byte Ds2 + .byte W12 + .byte N05 + .byte W12 + .byte Ds3 + .byte W12 + .byte Ds2 + .byte W12 + .byte N05 + .byte W12 + .byte PEND + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte PATT + mPtr song040_5_13 + .byte N05 , Ds2, v112 + .byte W48 + .byte Ds1 + .byte W05 + .byte FINE + + @********************** Track 6 **********************@ + + .global song040_6 +song040_6: @ 0x087B6FA0 + .byte KEYSH , 0 + .byte VOICE , 74 + .byte VOL , v110 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 23 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W48 + .byte TIE , Gn1, v096 + .byte W96 + .byte Dn2 + .byte W96 + .byte W96 + .byte W80 + .byte W03 + .byte EOT , Gn1 + .byte Dn2 + .byte W01 + .byte N22 , Gn3, v127 + .byte W12 + .byte W12 + .byte N09 + .byte W84 + .byte W60 + .byte N11 , As3 + .byte W12 + .byte N05 , An3, v120 + .byte W12 + .byte N68 , Gn3, v127 + .byte W12 + .byte W60 + .byte N11 , Dn3, v108 + .byte W12 + .byte N05 , En3 + .byte W12 + .byte N64 , Gn3, v127 + .byte W12 + .byte W60 + .byte N11 , Dn3, v108 + .byte W12 + .byte N08 , En3, v096 + .byte W12 + .byte N21 , Gn3, v127 + .byte W12 + .byte W12 + .byte N11 + .byte W84 + .byte W60 + .byte As3 + .byte W12 + .byte N05 , An3, v112 + .byte W12 + .byte N68 , Gn3, v127 + .byte W12 + .byte W60 + .byte N05 , Dn3, v088 + .byte W12 + .byte N03 , En3, v096 + .byte W12 + .byte N64 , Gn3, v124 + .byte W12 + .byte W72 + .byte N04 , Gs3, v112 + .byte W12 + .byte N44 , An3 + .byte W12 + .byte W36 + .byte N10 , An3, v108 + .byte W60 +song040_6_1: + .byte W60 + .byte N11 , Cn4, v112 + .byte W12 + .byte N06 , Bn3, v104 + .byte W12 + .byte N60 , An3, v124 + .byte W12 + .byte PEND +song040_6_2: + .byte W60 + .byte N11 , Cn3, v108 + .byte W12 + .byte N05 , Dn3, v104 + .byte W12 + .byte N68 , An3, v116 + .byte W12 + .byte PEND + .byte W60 + .byte N16 , An3, v108 + .byte W24 + .byte N40 , An3, v120 + .byte W12 + .byte W36 + .byte N11 , An3, v116 + .byte W60 + .byte PATT + mPtr song040_6_1 + .byte PATT + mPtr song040_6_2 + .byte W60 + .byte N11 , An3, v116 + .byte W12 + .byte N08 , Bn3, v096 + .byte W12 + .byte N56 , Cs4, v120 + .byte W12 + .byte W48 + .byte N44 + .byte W48 + .byte N13 + .byte W60 + .byte N05 , An3, v116 + .byte W12 + .byte N11 , Fn4, v127 + .byte W12 + .byte N21 , Dn4, v124 + .byte W12 + .byte W24 + .byte N16 , Cn4, v104 + .byte W24 + .byte N15 , Bn3, v127 + .byte W24 + .byte N17 , As3 + .byte W24 +song040_6_3: + .byte N18 , An3, v124 + .byte W24 + .byte N10 , Dn4 + .byte W12 + .byte N24 , Gn3, v120 + .byte W36 + .byte N11 , Fn3, v084 + .byte W12 + .byte N76 , Dn3, v096 + .byte W12 + .byte PEND + .byte W72 + .byte N20 , Dn3, v112 + .byte W24 + .byte N11 , Fn3, v120 + .byte W12 + .byte En3, v100 + .byte W12 + .byte Dn3, v112 + .byte W12 + .byte N23 , En3, v120 + .byte W24 + .byte N11 , Dn3, v100 + .byte W12 + .byte Cn3, v108 + .byte W12 + .byte N23 , Dn3, v127 + .byte W12 + .byte W12 + .byte N10 , Dn4, v124 + .byte W36 + .byte N11 , Cn4, v104 + .byte W24 + .byte N15 , Bn3, v127 + .byte W24 + .byte PATT + mPtr song040_6_3 + .byte W72 + .byte N20 , Dn3, v112 + .byte W24 + .byte VOL , v110 + .byte N11 , Fn3, v100 + .byte W12 + .byte En3, v096 + .byte W12 + .byte N09 , Dn3, v104 + .byte W12 + .byte N19 , En3, v120 + .byte W24 + .byte N10 , Fn3, v096 + .byte W12 + .byte Gn3, v092 + .byte W12 + .byte TIE , Gs3, v108 + .byte W10 + .byte VOL , v110 + .byte W02 + .byte v109 + .byte W01 + .byte v108 + .byte W01 + .byte v107 + .byte W01 + .byte v105 + .byte W01 + .byte v104 + .byte W01 + .byte v103 + .byte W01 + .byte v102 + .byte W01 + .byte v101 + .byte W01 + .byte v100 + .byte W01 + .byte v099 + .byte W01 + .byte v098 + .byte W01 + .byte v097 + .byte W01 + .byte v095 + .byte W01 + .byte v094 + .byte W01 + .byte v093 + .byte W01 + .byte v092 + .byte W01 + .byte v091 + .byte W01 + .byte v090 + .byte W01 + .byte v089 + .byte W01 + .byte v088 + .byte W01 + .byte v087 + .byte W01 + .byte v085 + .byte W01 + .byte v084 + .byte W01 + .byte v083 + .byte W01 + .byte v082 + .byte W01 + .byte v081 + .byte W01 + .byte v080 + .byte W01 + .byte v079 + .byte W01 + .byte v078 + .byte W01 + .byte v077 + .byte W01 + .byte v075 + .byte W01 + .byte v074 + .byte W01 + .byte v073 + .byte W01 + .byte v072 + .byte W01 + .byte v071 + .byte W01 + .byte v070 + .byte W01 + .byte v069 + .byte W01 + .byte v068 + .byte W01 + .byte v067 + .byte W01 + .byte v065 + .byte W01 + .byte v064 + .byte W01 + .byte v063 + .byte W01 + .byte v062 + .byte W01 + .byte v061 + .byte W01 + .byte v060 + .byte W01 + .byte v059 + .byte W01 + .byte v058 + .byte W01 + .byte v057 + .byte W01 + .byte v055 + .byte W01 + .byte v054 + .byte W01 + .byte v053 + .byte W01 + .byte v052 + .byte W01 + .byte v051 + .byte W01 + .byte v050 + .byte W01 + .byte v049 + .byte W01 + .byte v048 + .byte W01 + .byte v047 + .byte W01 + .byte v045 + .byte W01 + .byte v044 + .byte W02 + .byte v043 + .byte W01 + .byte v042 + .byte W01 + .byte v041 + .byte W01 + .byte v040 + .byte W01 + .byte v039 + .byte W01 + .byte v038 + .byte W01 + .byte v036 + .byte W01 + .byte v035 + .byte W01 + .byte v034 + .byte W01 + .byte v033 + .byte W01 + .byte v032 + .byte W01 + .byte v031 + .byte W01 + .byte v030 + .byte W01 + .byte v029 + .byte W01 + .byte v028 + .byte W01 + .byte v026 + .byte W01 + .byte v025 + .byte W01 + .byte v024 + .byte W01 + .byte v023 + .byte W01 + .byte v022 + .byte W01 + .byte v021 + .byte W01 + .byte v020 + .byte W01 + .byte v019 + .byte W01 + .byte v018 + .byte W01 + .byte v016 + .byte W01 + .byte v015 + .byte W01 + .byte v014 + .byte W01 + .byte v013 + .byte W01 + .byte v012 + .byte W01 + .byte v011 + .byte W01 + .byte v010 + .byte W01 + .byte v009 + .byte W01 + .byte v008 + .byte W01 + .byte v006 + .byte W01 + .byte EOT + .byte VOL , v005 + .byte W01 + .byte v004 + .byte W01 + .byte v003 + .byte W01 + .byte v002 + .byte W01 + .byte v001 + .byte W01 + .byte v000 + .byte W92 + .byte W01 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte v110 + .byte W96 + .byte v110 + .byte N36 , Bn2, v084 + .byte N36 , Ds3 + .byte W05 + .byte VOL , v097 + .byte W01 + .byte v077 + .byte W01 + .byte v063 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v063 + .byte W01 + .byte v066 + .byte W01 + .byte v068 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v074 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v083 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v090 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W01 + .byte v097 + .byte W01 + .byte v099 + .byte W01 + .byte v101 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v107 + .byte W01 + .byte v110 + .byte W04 + .byte N60 , Cs3, v096 + .byte N60 , Fn3 + .byte W05 + .byte VOL , v107 + .byte W01 + .byte v099 + .byte W01 + .byte v088 + .byte W01 + .byte v077 + .byte W01 + .byte v069 + .byte W01 + .byte v058 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v093 + .byte W01 + .byte v094 + .byte W01 + .byte v096 + .byte W01 + .byte v097 + .byte W01 + .byte v098 + .byte W01 + .byte v099 + .byte W01 + .byte v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v106 + .byte W01 + .byte v107 + .byte W01 + .byte v108 + .byte W01 + .byte v110 + .byte W05 + .byte v110 + .byte N36 , Ds3, v116 + .byte N36 , Fs3 + .byte W05 + .byte VOL , v097 + .byte W01 + .byte v077 + .byte W01 + .byte v063 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v063 + .byte W01 + .byte v066 + .byte W01 + .byte v068 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v074 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v083 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v090 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W01 + .byte v097 + .byte W01 + .byte v099 + .byte W01 + .byte v101 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v107 + .byte W01 + .byte v110 + .byte W04 + .byte N60 , Fn3, v127 + .byte N60 , Gs3 + .byte W05 + .byte VOL , v107 + .byte W01 + .byte v099 + .byte W01 + .byte v088 + .byte W01 + .byte v077 + .byte W01 + .byte v069 + .byte W01 + .byte v058 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v093 + .byte W01 + .byte v094 + .byte W01 + .byte v096 + .byte W01 + .byte v097 + .byte W01 + .byte v098 + .byte W01 + .byte v099 + .byte W01 + .byte v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v106 + .byte W01 + .byte v107 + .byte W01 + .byte v108 + .byte W01 + .byte v110 + .byte W05 + .byte v110 + .byte N36 , Cn3, v096 + .byte N36 , En3 + .byte W05 + .byte VOL , v097 + .byte W01 + .byte v077 + .byte W01 + .byte v063 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v063 + .byte W01 + .byte v066 + .byte W01 + .byte v068 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v074 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v083 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v090 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W01 + .byte v097 + .byte W01 + .byte v099 + .byte W01 + .byte v101 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v107 + .byte W01 + .byte v110 + .byte W04 + .byte N60 , Dn3, v104 + .byte N60 , Fs3 + .byte W05 + .byte VOL , v107 + .byte W01 + .byte v099 + .byte W01 + .byte v088 + .byte W01 + .byte v077 + .byte W01 + .byte v069 + .byte W01 + .byte v058 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v093 + .byte W01 + .byte v094 + .byte W01 + .byte v096 + .byte W01 + .byte v097 + .byte W01 + .byte v098 + .byte W01 + .byte v099 + .byte W01 + .byte v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v106 + .byte W01 + .byte v107 + .byte W01 + .byte v108 + .byte W01 + .byte v110 + .byte W05 + .byte v110 + .byte N36 , Ds3, v120 + .byte N36 , Gn3 + .byte W05 + .byte VOL , v097 + .byte W01 + .byte v077 + .byte W01 + .byte v063 + .byte W01 + .byte v057 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v063 + .byte W01 + .byte v066 + .byte W01 + .byte v068 + .byte W01 + .byte v070 + .byte W01 + .byte v072 + .byte W01 + .byte v074 + .byte W01 + .byte v077 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v083 + .byte W01 + .byte v086 + .byte W01 + .byte v088 + .byte W01 + .byte v090 + .byte W01 + .byte v092 + .byte W01 + .byte v094 + .byte W01 + .byte v097 + .byte W01 + .byte v099 + .byte W01 + .byte v101 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v107 + .byte W01 + .byte v110 + .byte W04 + .byte N60 , Fn3, v127 + .byte N60 , An3 + .byte W05 + .byte VOL , v107 + .byte W01 + .byte v099 + .byte W01 + .byte v088 + .byte W01 + .byte v077 + .byte W01 + .byte v069 + .byte W01 + .byte v058 + .byte W01 + .byte v056 + .byte W01 + .byte v057 + .byte W01 + .byte v058 + .byte W01 + .byte v059 + .byte W01 + .byte v061 + .byte W01 + .byte v062 + .byte W01 + .byte v063 + .byte W01 + .byte v064 + .byte W01 + .byte v066 + .byte W01 + .byte v067 + .byte W01 + .byte v068 + .byte W01 + .byte v069 + .byte W01 + .byte v071 + .byte W01 + .byte v072 + .byte W01 + .byte v073 + .byte W01 + .byte v074 + .byte W01 + .byte v076 + .byte W01 + .byte v077 + .byte W01 + .byte v078 + .byte W01 + .byte v079 + .byte W01 + .byte v081 + .byte W01 + .byte v082 + .byte W01 + .byte v083 + .byte W01 + .byte v084 + .byte W01 + .byte v086 + .byte W01 + .byte v087 + .byte W01 + .byte v088 + .byte W01 + .byte v089 + .byte W01 + .byte v091 + .byte W01 + .byte v092 + .byte W01 + .byte v093 + .byte W01 + .byte v094 + .byte W01 + .byte v096 + .byte W01 + .byte v097 + .byte W01 + .byte v098 + .byte W01 + .byte v099 + .byte W01 + .byte v100 + .byte W01 + .byte v101 + .byte W01 + .byte v102 + .byte W01 + .byte v103 + .byte W01 + .byte v105 + .byte W01 + .byte v106 + .byte W01 + .byte v107 + .byte W01 + .byte v108 + .byte W01 + .byte v110 + .byte W05 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W72 + .byte N04 , Fn2, v104 + .byte N04 , Fn3 + .byte W04 + .byte Gn2, v120 + .byte N04 , Gn3 + .byte W04 + .byte Gs2, v112 + .byte N04 , Gs3 + .byte W04 + .byte As2, v124 + .byte N04 , As3 + .byte W04 + .byte Cn3, v116 + .byte N04 , Cn4 + .byte W04 + .byte Dn3, v127 + .byte N04 , Dn4 + .byte W04 + .byte N08 , Ds3 + .byte N08 , Ds4 + .byte W96 +song040_6_4: + .byte W12 + .byte N11 , As2, v080 + .byte N11 , As3 + .byte W12 + .byte N09 , Cn3, v084 + .byte N09 , Cn4 + .byte W12 + .byte N07 , Ds3, v088 + .byte N07 , Ds4 + .byte W24 + .byte N16 , Ds2, v080 + .byte N16 , Ds3 + .byte W24 + .byte TIE , Ds2, v072 + .byte TIE , Ds3 + .byte W12 + .byte PEND + .byte W96 + .byte W24 + .byte W03 + .byte EOT , Ds2 + .byte Ds3 + .byte W44 + .byte W01 + .byte N04 , Fn2, v104 + .byte N04 , Fn3 + .byte W04 + .byte Gn2, v120 + .byte N04 , Gn3 + .byte W04 + .byte Gs2, v112 + .byte N04 , Gs3 + .byte W04 + .byte As2, v124 + .byte N04 , As3 + .byte W04 + .byte Cn3, v116 + .byte N04 , Cn4 + .byte W04 + .byte Dn3, v127 + .byte N04 , Dn4 + .byte W04 + .byte N08 , Ds3 + .byte N08 , Ds4 + .byte W96 + .byte PATT + mPtr song040_6_4 + .byte W96 + .byte W24 + .byte W03 + .byte EOT , Ds2 + .byte Ds3 + .byte W44 + .byte W01 + .byte N04 , Fn2, v104 + .byte N04 , Fn3 + .byte W04 + .byte Gn2, v120 + .byte N04 , Gn3 + .byte W04 + .byte Gs2, v112 + .byte N04 , Gs3 + .byte W04 + .byte As2, v124 + .byte N04 , As3 + .byte W04 + .byte Cn3, v116 + .byte N04 , Cn4 + .byte W04 + .byte Dn3, v127 + .byte N04 , Dn4 + .byte W04 + .byte N80 , Ds3, v068 + .byte N08 , Ds4, v127 + .byte W84 + .byte N05 , Ds3, v108 + .byte W06 + .byte Ds3, v124 + .byte W06 + .byte N88 , Ds3, v100 + .byte N88 , Gn3 + .byte W96 + .byte N78 + .byte N80 , As3, v124 + .byte W84 + .byte N04 , Gn3, v100 + .byte N05 , As3, v124 + .byte W06 + .byte N04 , Gn3, v108 + .byte N05 , As3, v127 + .byte W06 + .byte N84 , Gn3 + .byte N88 , As3 + .byte W96 + .byte N12 , Ds3, v124 + .byte N13 , Ds4, v127 + .byte W48 + .byte N14 , Ds1, v124 + .byte N14 , Ds2, v127 + .byte W14 + .byte FINE + + @********************** Track 7 **********************@ + + .global song040_7 +song040_7: @ 0x087B7547 + .byte KEYSH , 0 + .byte VOICE , 85 + .byte PAN , c_v + .byte BENDR , 3 + .byte VOL , v127 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W48 +song040_7_1: + .byte N05 , Gn2, v100 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2, v092 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte Gn2, v088 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte Gn2, v104 + .byte W12 + .byte PEND + .byte Gn2, v100 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2, v092 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2, v092 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte PATT + mPtr song040_7_1 + .byte N05 , Gn2, v100 + .byte W12 + .byte Gn2, v096 + .byte W12 + .byte N05 + .byte W12 + .byte Gn2, v092 + .byte W12 + .byte Gn2, v096 + .byte W06 + .byte Gn2, v088 + .byte W06 + .byte Fn2 + .byte W06 + .byte Fs2 + .byte W06 + .byte Gn2, v096 + .byte W05 + .byte FINE + + @********************** Track 8 **********************@ + + .global song040_8 +song040_8: @ 0x087B75A8 + .byte KEYSH , 0 + .byte VOICE , 0 + .byte VOL , v055 + .byte PAN , c_v + .byte BENDR , 12 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 2 + .byte MODT , 0 + .byte W48 + .byte W96 + .byte W92 + .byte BEND , c_v-64 + .byte W04 + .byte TIE , Gn4, v100 + .byte W72 + .byte W03 + .byte BEND , c_v-64 + .byte W02 + .byte c_v-59 + .byte W01 + .byte c_v-54 + .byte W02 + .byte c_v-49 + .byte W01 + .byte c_v-44 + .byte W02 + .byte c_v-39 + .byte W01 + .byte c_v-34 + .byte W02 + .byte c_v-29 + .byte W01 + .byte c_v-24 + .byte W02 + .byte c_v-19 + .byte W01 + .byte c_v-14 + .byte W02 + .byte c_v-9 + .byte W01 + .byte c_v-4 + .byte W01 + .byte c_v + .byte W02 + .byte W80 + .byte W03 + .byte EOT + .byte W01 + .byte N22 , Gn3, v127 + .byte W12 + .byte W12 + .byte N09 + .byte W84 + .byte W60 + .byte N11 , Dn4 + .byte W12 + .byte N05 , Cn4, v120 + .byte W12 + .byte N68 , As3, v127 + .byte W12 + .byte W60 + .byte N11 , Fn3, v108 + .byte W12 + .byte N05 , Gn3 + .byte W12 + .byte N64 , Cn4, v127 + .byte W12 + .byte W60 + .byte N11 , Gn3, v108 + .byte W12 + .byte N08 , An3, v096 + .byte W12 + .byte N21 , Bn3, v127 + .byte W12 + .byte W12 + .byte N11 + .byte W84 + .byte W60 + .byte Dn4 + .byte W12 + .byte N05 , Cn4, v112 + .byte W12 + .byte N68 , As3, v127 + .byte W12 + .byte W60 + .byte N05 , Fn3, v088 + .byte W12 + .byte N03 , Gn3, v096 + .byte W12 + .byte N64 , Cn4, v124 + .byte W12 + .byte W72 + .byte N04 , Cs4, v112 + .byte W12 + .byte N44 , Dn4 + .byte W12 + .byte W36 + .byte N10 , Dn4, v108 + .byte W60 +song040_8_1: + .byte W60 + .byte N11 , An4, v127 + .byte W12 + .byte N06 , Gn4 + .byte W12 + .byte N60 , Fn4 + .byte W12 + .byte PEND +song040_8_2: + .byte W60 + .byte N17 , Fn3, v127 + .byte W24 + .byte N66 , Dn4 + .byte W12 + .byte PEND + .byte W60 + .byte N11 + .byte W12 + .byte N05 , En4 + .byte W12 + .byte Fn4 + .byte W06 + .byte N32 , Fs4 + .byte W06 + .byte W36 + .byte N10 + .byte W60 + .byte PATT + mPtr song040_8_1 + .byte PATT + mPtr song040_8_2 + .byte W60 + .byte N11 , Fn4, v127 + .byte W12 + .byte N08 , Gn4 + .byte W12 + .byte N23 , En4 + .byte W12 + .byte W12 + .byte N28 , An4 + .byte W36 + .byte N42 , En4 + .byte W48 + .byte N13 , En3 + .byte W60 + .byte N05 , An3 + .byte W12 + .byte N11 , Fn4 + .byte W12 + .byte N21 , Dn4 + .byte W12 + .byte W24 + .byte N16 , Cn4 + .byte W24 + .byte N15 , Bn3 + .byte W24 + .byte N17 , As3 + .byte W24 + .byte N18 , An3 + .byte W24 + .byte N10 , Dn4 + .byte W12 + .byte N24 , Gn3 + .byte W36 + .byte N11 , Fn3 + .byte W12 + .byte N76 , Dn3 + .byte W12 + .byte W72 + .byte N20 , Gn3 + .byte W24 + .byte N11 , Dn4 + .byte W12 + .byte Cn4 + .byte W12 + .byte As3 + .byte W12 + .byte N23 , Cn4 + .byte W24 + .byte N11 , As3 + .byte W12 + .byte En3 + .byte W12 + .byte Fs3 + .byte W12 + .byte N11 + .byte W12 + .byte N10 , Fs4 + .byte W36 + .byte N11 , Cn4 + .byte W24 + .byte N15 , Bn3 + .byte W24 + .byte N18 , An3 + .byte W24 + .byte N10 , Dn4 + .byte W12 + .byte N24 , Gn3 + .byte W36 + .byte N11 , Dn4 + .byte W12 + .byte N76 , Gn3 + .byte W12 + .byte W72 + .byte N20 , Dn3 + .byte W24 + .byte VOL , v055 + .byte N11 , Dn4, v100 + .byte W12 + .byte Cn4, v096 + .byte W12 + .byte N09 , As3, v104 + .byte W12 + .byte N19 , Cn4, v120 + .byte W24 + .byte N10 , Dn4, v096 + .byte W12 + .byte En4, v092 + .byte W12 + .byte TIE , Fn4, v108 + .byte W09 + .byte VOL , v055 + .byte W03 + .byte v054 + .byte W01 + .byte v053 + .byte W02 + .byte v052 + .byte W01 + .byte v051 + .byte W01 + .byte v050 + .byte W02 + .byte v049 + .byte W01 + .byte v048 + .byte W01 + .byte v047 + .byte W02 + .byte v046 + .byte W01 + .byte v045 + .byte W02 + .byte v044 + .byte W01 + .byte v043 + .byte W01 + .byte v042 + .byte W02 + .byte v041 + .byte W01 + .byte v040 + .byte W01 + .byte v039 + .byte W02 + .byte v038 + .byte W01 + .byte v037 + .byte W02 + .byte v036 + .byte W01 + .byte v035 + .byte W01 + .byte v034 + .byte W02 + .byte v033 + .byte W01 + .byte v032 + .byte W01 + .byte v031 + .byte W02 + .byte v030 + .byte W01 + .byte v029 + .byte W02 + .byte v028 + .byte W01 + .byte v027 + .byte W01 + .byte v026 + .byte W02 + .byte v025 + .byte W01 + .byte v024 + .byte W01 + .byte v023 + .byte W02 + .byte v022 + .byte W01 + .byte v021 + .byte W02 + .byte v020 + .byte W01 + .byte v019 + .byte W01 + .byte v018 + .byte W02 + .byte v017 + .byte W01 + .byte v016 + .byte W01 + .byte v015 + .byte W02 + .byte v014 + .byte W01 + .byte v013 + .byte W02 + .byte v012 + .byte W01 + .byte v011 + .byte W01 + .byte v010 + .byte W02 + .byte v009 + .byte W01 + .byte v008 + .byte W01 + .byte v007 + .byte W02 + .byte v006 + .byte W01 + .byte v005 + .byte W02 + .byte v004 + .byte W01 + .byte v003 + .byte W01 + .byte v002 + .byte W02 + .byte v001 + .byte W01 + .byte v000 + .byte W14 + .byte EOT + .byte W08 + .byte VOICE , 2 + .byte VOL , v065 + .byte PAN , c_v + .byte BENDR , 12 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 2 + .byte MODT , 0 + .byte W96 +song040_8_3: + .byte W48 + .byte N04 , Ds2, v004 + .byte W04 + .byte Fn2 + .byte W04 + .byte Gn2, v008 + .byte W04 + .byte As2, v012 + .byte W04 + .byte Ds3 + .byte W04 + .byte Fn3, v016 + .byte W04 + .byte Gn3, v020 + .byte W04 + .byte As3 + .byte W04 + .byte Ds4, v024 + .byte W04 + .byte As3, v028 + .byte W04 + .byte Gn3, v032 + .byte W04 + .byte Fn3 + .byte W04 + .byte PEND +song040_8_4: + .byte N04 , Ds3, v036 + .byte W04 + .byte Fn3, v040 + .byte W04 + .byte Gn3 + .byte W04 + .byte As3, v044 + .byte W04 + .byte Ds4, v048 + .byte W04 + .byte Fn4, v052 + .byte W04 + .byte Gn4 + .byte W04 + .byte As4, v056 + .byte W04 + .byte Ds5, v060 + .byte W04 + .byte As4 + .byte W04 + .byte Gn4, v064 + .byte W04 + .byte Fn4, v068 + .byte W04 + .byte Ds4, v072 + .byte W04 + .byte Fn4 + .byte W04 + .byte Gn4, v076 + .byte W04 + .byte As4, v080 + .byte W04 + .byte Ds5 + .byte W04 + .byte Fn5, v084 + .byte W04 + .byte Gn5, v072 + .byte W04 + .byte As5 + .byte W04 + .byte Ds6, v068 + .byte W04 + .byte As5 + .byte W04 + .byte Gn5, v064 + .byte W04 + .byte Fn5 + .byte W04 + .byte PEND + .byte Ds5, v060 + .byte W04 + .byte As4, v056 + .byte W04 + .byte Gn4 + .byte W04 + .byte Fn4, v052 + .byte W04 + .byte Gn4 + .byte W04 + .byte As4, v048 + .byte W04 + .byte Ds5, v044 + .byte W04 + .byte As4 + .byte W04 + .byte Gn4, v040 + .byte W04 + .byte Fn4 + .byte W04 + .byte Ds4, v036 + .byte W04 + .byte As3, v032 + .byte W04 + .byte Gn3 + .byte W04 + .byte Fn3, v028 + .byte W04 + .byte Gn3 + .byte W04 + .byte As3, v024 + .byte W04 + .byte Ds4, v020 + .byte W04 + .byte As3 + .byte W04 + .byte Gn3, v016 + .byte W04 + .byte Fn3 + .byte W04 + .byte Ds3, v012 + .byte W04 + .byte As2 + .byte W04 + .byte Ds2, v008 + .byte W08 + .byte W96 + .byte PATT + mPtr song040_8_3 + .byte PATT + mPtr song040_8_4 + .byte N04 , Fs5, v060 + .byte W04 + .byte Cs5, v056 + .byte W04 + .byte As4 + .byte W04 + .byte Gs4, v052 + .byte W04 + .byte As4 + .byte W04 + .byte Cs5, v048 + .byte W04 + .byte Fs5, v044 + .byte W04 + .byte Cs5 + .byte W04 + .byte As4, v040 + .byte W04 + .byte Gs4 + .byte W04 + .byte Fs4, v036 + .byte W04 + .byte Cs4, v032 + .byte W04 + .byte As3 + .byte W04 + .byte Gs3, v028 + .byte W04 + .byte As3 + .byte W04 + .byte Cs4, v024 + .byte W04 + .byte Fs4, v020 + .byte W04 + .byte Cs4 + .byte W04 + .byte As3, v016 + .byte W04 + .byte Gs3 + .byte W04 + .byte Fs3, v012 + .byte W04 + .byte Cs3 + .byte W04 + .byte Fs2, v008 + .byte W08 + .byte W96 + .byte W96 + .byte Fs2, v020 + .byte W04 + .byte Gs2 + .byte W04 + .byte As2, v024 + .byte W04 + .byte Cs3, v028 + .byte W04 + .byte Fs3 + .byte W04 + .byte Gs3, v032 + .byte W04 + .byte As3, v036 + .byte W04 + .byte Cs4 + .byte W04 + .byte Fs4, v040 + .byte W04 + .byte Cs4, v044 + .byte W04 + .byte As3, v048 + .byte W04 + .byte Gs3 + .byte W04 + .byte Fs3, v052 + .byte W04 + .byte Gs3, v056 + .byte W04 + .byte As3 + .byte W04 + .byte Cs4, v060 + .byte W04 + .byte Fs4, v064 + .byte W04 + .byte Gs4, v068 + .byte W04 + .byte As4 + .byte W04 + .byte Cs5, v072 + .byte W04 + .byte Fs5, v076 + .byte W04 + .byte Cs5 + .byte W04 + .byte As4, v080 + .byte W04 + .byte Gs4, v084 + .byte W04 + .byte W36 + .byte N06 , Cs4, v044 + .byte W06 + .byte As3, v040 + .byte W06 + .byte Fs4, v044 + .byte W06 + .byte Cs4, v040 + .byte W06 + .byte As3, v044 + .byte W06 + .byte Fs3 + .byte W06 + .byte As3, v048 + .byte W06 + .byte Gs3, v060 + .byte W06 + .byte Fs3, v056 + .byte W06 + .byte Cs3, v060 + .byte W06 + .byte W36 + .byte Ds3, v036 + .byte W06 + .byte As2, v048 + .byte W06 + .byte Bn2, v036 + .byte W06 + .byte Ds3, v044 + .byte W06 + .byte Gs3, v056 + .byte W06 + .byte Fs3, v048 + .byte W06 + .byte Fn3, v040 + .byte W06 + .byte Gs3, v060 + .byte W06 + .byte Cs4 + .byte W12 + .byte W36 + .byte Dn4, v044 + .byte W06 + .byte Bn3, v040 + .byte W06 + .byte Gn4, v044 + .byte W06 + .byte Dn4, v040 + .byte W06 + .byte Bn3, v044 + .byte W06 + .byte Gn3 + .byte W06 + .byte Bn3, v048 + .byte W06 + .byte An3, v060 + .byte W06 + .byte Gn3, v056 + .byte W06 + .byte Dn3, v060 + .byte W06 + .byte W36 + .byte Gn3, v044 + .byte W06 + .byte Ds3, v036 + .byte W06 + .byte Fn3, v040 + .byte W06 + .byte Gn3, v044 + .byte W06 + .byte An3, v048 + .byte W06 + .byte As3, v044 + .byte W06 + .byte N04 , Gn3, v036 + .byte W04 + .byte An3, v044 + .byte W04 + .byte As3, v036 + .byte W04 + .byte Cn4, v032 + .byte W04 + .byte Dn4, v040 + .byte W04 + .byte Ds4, v044 + .byte W04 + .byte TIE , Fn4, v048 + .byte W96 + .byte W68 + .byte W03 + .byte EOT + .byte W01 + .byte N04 , Fn3, v036 + .byte W04 + .byte Gn3, v040 + .byte W04 + .byte An3 + .byte W04 + .byte As3, v048 + .byte W04 + .byte Cn4, v036 + .byte W04 + .byte Dn4, v048 + .byte W04 + .byte N96 , Ds4 + .byte W96 + .byte N48 , As4 + .byte W48 + .byte An4 + .byte W48 + .byte TIE , Fn4 + .byte W96 + .byte W72 + .byte EOT + .byte N04 , Fn3, v036 + .byte W04 + .byte Gn3, v040 + .byte W04 + .byte An3 + .byte W04 + .byte As3, v048 + .byte W04 + .byte Cn4, v036 + .byte W04 + .byte Dn4, v048 + .byte W04 + .byte N96 , Cn4 + .byte W96 + .byte N48 + .byte W48 + .byte N24 + .byte W24 + .byte Cs4 + .byte W24 + .byte TIE , Cn4 + .byte W96 + .byte W96 + .byte EOT + .byte N96 , As3 + .byte W96 + .byte N96 + .byte W96 + .byte Cn4 + .byte W96 + .byte Dn4 + .byte W96 + .byte TIE , As3 + .byte W96 + .byte W96 + .byte EOT + .byte N96 , Cn4 + .byte W96 + .byte Ds4 + .byte W96 + .byte TIE , As3 + .byte W96 + .byte W96 + .byte EOT + .byte N96 , Bn3 + .byte W96 + .byte Ds4 + .byte W96 + .byte TIE , As3 + .byte W96 + .byte W96 + .byte EOT + .byte TIE + .byte W96 + .byte W96 + .byte EOT + .byte N12 , Ds4, v044 + .byte W48 + .byte Ds3 + .byte W12 + .byte FINE + + @********************** Track 9 **********************@ + + .global song040_9 +song040_9: @ 0x087B798F + .byte KEYSH , 0 + .byte VOICE , 77 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W48 + .byte N36 , Ds4, v056 + .byte W48 + .byte N28 , Gn4, v112 + .byte W48 + .byte N36 , As4, v120 + .byte W48 + .byte N44 , Gs4, v127 + .byte W96 + .byte W96 + .byte W96 + .byte N09 , Gn4, v112 + .byte W48 + .byte N30 , As4, v127 + .byte W48 + .byte N36 , Bn4, v116 + .byte W96 + .byte W96 + .byte W48 + .byte N12 , Fs4, v112 + .byte W48 + .byte N30 , As4, v120 + .byte W48 + .byte Cs5, v124 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W48 + .byte N44 , As3, v100 + .byte N44 , Fn4 + .byte W48 + .byte Dn4, v104 + .byte N44 , As4 + .byte W48 + .byte Fn4, v092 + .byte N44 , Dn5 + .byte W48 + .byte N92 , Gn4, v120 + .byte N92 , Ds5 + .byte W96 + .byte N76 , As3, v052 + .byte N76 , Gn4 + .byte W96 + .byte W48 + .byte N44 , Dn4, v060 + .byte N44 , As4 + .byte W48 + .byte Fn4, v112 + .byte N44 , Dn5 + .byte W48 + .byte As4, v088 + .byte N44 , Fn5 + .byte W48 + .byte N72 , Gn4, v092 + .byte N72 , Ds5 + .byte W84 + .byte N05 , Fn4, v072 + .byte N05 , Dn5 + .byte W06 + .byte En4 + .byte N05 , Cs5 + .byte W06 + .byte N68 , Ds4, v080 + .byte N68 , Cn5 + .byte W72 + .byte N23 , Ds4, v096 + .byte N23 , Cn5 + .byte W24 + .byte N44 , Gs4, v112 + .byte N44 , Ds5 + .byte W48 + .byte N48 , Cn4 + .byte N48 , Gs4 + .byte W48 + .byte W24 + .byte N19 , Cn4, v080 + .byte N19 , Gs4 + .byte W24 + .byte N23 , Gs4, v084 + .byte N23 , Fn5 + .byte W24 + .byte N22 , Gn4, v096 + .byte N22 , Ds5 + .byte W24 + .byte N68 , Fn4, v104 + .byte N68 , Dn5 + .byte W72 + .byte N28 , Dn4, v068 + .byte N28 , As4 + .byte W24 + .byte W48 + .byte N21 , Cn5, v124 + .byte N21 , Gs5 + .byte W24 + .byte N18 , As4, v072 + .byte N18 , Gn5 + .byte W24 + .byte N44 , Cn5, v120 + .byte N44 , Gn5 + .byte W48 + .byte N60 , Gs4, v088 + .byte N60 , Ds5 + .byte W48 + .byte W24 + .byte N23 , Fn4, v080 + .byte N23 , Dn5 + .byte W24 + .byte Gn4 + .byte N23 , Ds5 + .byte W24 + .byte Gs4, v100 + .byte N23 , Fn5 + .byte W24 + .byte N30 , Gn4, v116 + .byte N30 , Ds5 + .byte W30 + .byte FINE + + @********************** Track 10 **********************@ + + .global song040_10 +song040_10: @ 0x087B7A96 + .byte KEYSH , 0 + .byte VOICE , 93 + .byte VOL , v110 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W84 + .byte N20 , Gn3, v112 + .byte W12 + .byte W12 + .byte N11 , Gn3, v096 + .byte W12 + .byte N05 , As3, v068 + .byte N11 , Bn3, v084 + .byte N11 , Dn4, v096 + .byte W12 + .byte Gn3, v084 + .byte W12 + .byte Cn4 + .byte N11 , En4, v088 + .byte W12 + .byte Gn3 + .byte W12 + .byte N05 , As3, v056 + .byte N11 , Bn3, v076 + .byte N11 , Dn4, v080 + .byte W12 + .byte N16 , Gn3, v096 + .byte W12 + .byte W12 + .byte N11 , Gn3, v108 + .byte W12 + .byte N05 , As3, v072 + .byte N10 , Bn3, v084 + .byte N10 , Dn4, v096 + .byte W12 + .byte Gn3, v084 + .byte W12 + .byte Cn4 + .byte N10 , En4, v096 + .byte W12 + .byte N11 , Gn3, v076 + .byte W12 + .byte N03 , As3, v072 + .byte N09 , Bn3, v084 + .byte N09 , Dn4, v096 + .byte W12 + .byte N40 , Fn3, v108 + .byte N44 , Dn4, v104 + .byte W12 + .byte W36 + .byte N07 , Fn3, v088 + .byte N08 , Dn4, v080 + .byte W12 + .byte Fn3, v084 + .byte N08 , Dn4, v104 + .byte W12 + .byte N06 , Fn3, v096 + .byte N07 , Dn4, v092 + .byte W12 + .byte Fn3, v080 + .byte N11 , Dn4, v096 + .byte W12 + .byte N28 , Gn3, v120 + .byte N30 , En4, v108 + .byte W12 + .byte W24 + .byte N18 , Gn3, v096 + .byte N19 , En4 + .byte W24 + .byte N08 , Gn3, v092 + .byte N09 , En4, v096 + .byte W12 + .byte N20 , Gn3, v104 + .byte N13 , En4, v096 + .byte W24 + .byte N03 , As3, v084 + .byte N21 , Bn3 + .byte N21 , Dn4, v092 + .byte W12 + .byte W12 + .byte N10 , Gn3, v100 + .byte W12 + .byte N05 , As3, v076 + .byte N11 , Bn3, v072 + .byte N11 , Dn4, v092 + .byte W12 + .byte Gn3 + .byte W12 + .byte Cn4, v084 + .byte N11 , En4, v096 + .byte W12 + .byte Gn3 + .byte W12 + .byte N03 , As3, v068 + .byte N11 , Bn3, v080 + .byte N11 , Dn4, v096 + .byte W12 + .byte N17 , Gn3, v092 + .byte W12 + .byte W12 + .byte N11 , Gn3, v104 + .byte W12 + .byte N04 , As3, v072 + .byte N11 , Bn3, v076 + .byte N11 , Dn4, v096 + .byte W12 + .byte Gn3, v088 + .byte W12 + .byte Cn4, v076 + .byte N11 , En4, v100 + .byte W12 + .byte N09 , Gn3, v080 + .byte W12 + .byte N06 , As3 + .byte N10 , Bn3, v068 + .byte N08 , Dn4, v084 + .byte W12 + .byte N44 , Fn3, v116 + .byte N44 , Dn4, v108 + .byte W12 + .byte W36 + .byte N08 , Fn3, v092 + .byte N07 , Dn4, v108 + .byte W12 + .byte Fn3, v104 + .byte N08 , Dn4 + .byte W12 + .byte N19 , Fn3, v092 + .byte N23 , Dn4, v104 + .byte W24 + .byte N30 , Gn3, v116 + .byte N32 , En4, v108 + .byte W12 + .byte W24 + .byte N18 , Gn3, v092 + .byte N19 , En4, v100 + .byte W24 + .byte N07 , Gn3, v088 + .byte N07 , En4, v108 + .byte W12 + .byte N18 , Gn3, v092 + .byte N08 , En4 + .byte W12 + .byte N07 , En4, v108 + .byte W12 + .byte N19 , An3, v096 + .byte N24 , Fs4, v124 + .byte W12 + .byte W12 + .byte N09 , An3, v076 + .byte W12 + .byte N08 , Dn4, v088 + .byte N11 , Fs4, v108 + .byte W12 + .byte N09 , An3, v052 + .byte W12 + .byte N03 , Ds4, v072 + .byte N10 , En4, v096 + .byte N11 , Gn4 + .byte W12 + .byte An3, v072 + .byte W12 + .byte N08 , Dn4, v096 + .byte N11 , Fs4, v108 + .byte W12 + .byte N18 , An3, v064 + .byte W12 + .byte W12 + .byte N09 , An3, v100 + .byte W12 + .byte N08 , Dn4 + .byte N11 , Fs4, v112 + .byte W12 + .byte An3, v072 + .byte W12 + .byte N05 , Ds4, v088 + .byte N10 , En4, v076 + .byte N11 , Gn4, v100 + .byte W12 + .byte An3, v084 + .byte W12 + .byte N08 , Dn4, v096 + .byte N10 , Fs4, v100 + .byte W12 + .byte N40 , An3, v092 + .byte N40 , Fn4, v076 + .byte W12 + .byte W36 + .byte N09 , An3, v088 + .byte N08 , Fn4, v096 + .byte W12 + .byte N09 , An3, v108 + .byte N09 , Fn4, v112 + .byte W12 + .byte N19 , An3, v104 + .byte N21 , Fn4 + .byte W24 + .byte N32 , Bn3 + .byte N32 , Dn4 + .byte W12 + .byte W24 + .byte N08 , Bn3, v088 + .byte N09 , Dn4, v120 + .byte W12 + .byte N20 , Bn3, v108 + .byte N20 , Gn4, v112 + .byte W24 + .byte N07 , Bn3, v068 + .byte N09 , Dn4, v092 + .byte W12 + .byte N05 , Bn3, v084 + .byte N09 , Gn4, v104 + .byte W12 + .byte N20 , An3, v072 + .byte N20 , Fs4 + .byte W12 + .byte W12 + .byte N11 , An3, v080 + .byte W12 + .byte N09 , Dn4, v100 + .byte N11 , Fs4, v108 + .byte W12 + .byte An3, v056 + .byte W12 + .byte N05 , Ds4, v096 + .byte N12 , En4, v076 + .byte N13 , Gn4, v104 + .byte W12 + .byte N11 , An3, v076 + .byte W12 + .byte Dn4, v096 + .byte N11 , Fs4, v108 + .byte W12 + .byte N16 , An3, v076 + .byte W12 + .byte W12 + .byte N12 + .byte W12 + .byte N11 , Dn4, v100 + .byte N11 , Fs4, v104 + .byte W12 + .byte An3, v080 + .byte W12 + .byte N06 , Ds4, v068 + .byte N09 , En4, v076 + .byte N10 , Gn4, v096 + .byte W12 + .byte N11 , An3, v092 + .byte W12 + .byte N08 , Dn4, v096 + .byte N09 , Fs4, v108 + .byte W12 + .byte N30 , An3, v100 + .byte N36 , Fn4, v112 + .byte W12 + .byte W36 + .byte N05 , An3, v076 + .byte N08 , Fn4, v096 + .byte W12 + .byte An3 + .byte N08 , Fn4 + .byte W12 + .byte N09 , An3, v104 + .byte N10 , Fn4, v092 + .byte W12 + .byte N07 , An3, v076 + .byte N12 , Fn4, v064 + .byte W12 + .byte N05 , Bn3, v112 + .byte N28 , Dn4, v104 + .byte W12 + .byte W24 + .byte N11 , Cn4, v076 + .byte N14 , Gn4, v100 + .byte W24 + .byte N08 , Bn3, v084 + .byte N08 , Gn4, v104 + .byte W12 + .byte N06 , Bn3, v044 + .byte N08 , Gn4, v072 + .byte W12 + .byte N06 , Bn3, v068 + .byte N07 , Gn4, v092 + .byte W12 + .byte N13 , Dn4, v096 + .byte N15 , An4, v108 + .byte W12 + .byte W12 + .byte N08 , Dn4, v096 + .byte N07 , An4, v084 + .byte W12 + .byte Dn4, v096 + .byte N08 , An4, v112 + .byte W12 + .byte N06 , Dn4, v088 + .byte N08 , An4, v096 + .byte W12 + .byte Dn4 + .byte N07 , An4, v084 + .byte W12 + .byte Dn4, v096 + .byte N08 , An4, v112 + .byte W12 + .byte N06 , Dn4, v088 + .byte N08 , An4, v096 + .byte W12 + .byte N10 , Dn4, v092 + .byte N10 , An4, v104 + .byte W12 + .byte N14 , Cs4, v116 + .byte N12 , An4, v124 + .byte W36 + .byte N10 , Cs4, v116 + .byte N19 , An4, v112 + .byte W24 + .byte N07 , Cs4, v104 + .byte N07 , An4, v096 + .byte W12 + .byte N11 , Cs4, v080 + .byte N09 , An4, v100 + .byte W24 + .byte W12 + .byte N02 , Dn4, v084 + .byte N03 , An4 + .byte W12 + .byte N10 , Fn4, v112 + .byte N14 , An4, v108 + .byte W12 + .byte N06 , Fs4, v072 + .byte W12 + .byte N10 , Dn4, v096 + .byte N11 , An4, v092 + .byte W12 + .byte N04 , An3, v032 + .byte W12 + .byte N10 , Dn4, v096 + .byte N10 , An4, v100 + .byte W12 + .byte N03 , An3, v072 + .byte W12 + .byte N07 , An3, v096 + .byte N07 , Cn4 + .byte W12 + .byte N08 , An3, v084 + .byte N11 , Cn4 + .byte W12 + .byte N06 , Gn3, v076 + .byte N05 , Bn3 + .byte W12 + .byte N14 , Fs3, v096 + .byte N16 , An3, v084 + .byte W24 + .byte N09 , Dn3, v076 + .byte W12 + .byte N10 , Fs3, v084 + .byte N11 , An3, v096 + .byte W12 + .byte N13 , Dn3, v092 + .byte W12 + .byte W12 + .byte N06 , An3, v108 + .byte N07 , Cn4, v104 + .byte W12 + .byte N17 , An3, v084 + .byte N16 , Cn4, v096 + .byte W24 + .byte N14 , Gn3, v104 + .byte N17 , Bn3, v096 + .byte W24 + .byte N11 , Fn3 + .byte N14 , An3, v088 + .byte W24 + .byte N11 , As3, v116 + .byte N11 , Dn4, v112 + .byte W12 + .byte Fn3, v088 + .byte W12 + .byte N08 , As3, v096 + .byte N07 , Dn4 + .byte W12 + .byte N22 , Cn4, v108 + .byte N21 , En4, v116 + .byte W24 + .byte N09 , Gn3, v088 + .byte W12 + .byte N11 , Cn4, v092 + .byte N11 , En4, v104 + .byte W12 + .byte An3, v088 + .byte W12 + .byte N13 + .byte W12 + .byte N06 , Dn4, v080 + .byte W12 + .byte N10 , An3, v084 + .byte N10 , Fs4 + .byte W12 + .byte An3 + .byte N10 , Fs4 + .byte W12 + .byte N09 , Fn4, v108 + .byte N14 , An4, v104 + .byte W12 + .byte N06 , Fs4, v096 + .byte W12 + .byte N08 , Dn4, v100 + .byte N11 , An4, v092 + .byte W12 + .byte N08 , An3, v032 + .byte W12 + .byte N06 , An3, v100 + .byte N06 , Cn4, v108 + .byte W12 + .byte N09 , An3, v096 + .byte N11 , Cn4 + .byte W12 + .byte N08 , Gn3, v080 + .byte N04 , Bn3, v084 + .byte W12 + .byte N14 , Fs3, v068 + .byte N16 , An3 + .byte W24 + .byte N08 , Dn3, v072 + .byte W12 + .byte N10 , Fs3, v080 + .byte N11 , An3, v096 + .byte W12 + .byte N13 , Dn3, v076 + .byte W12 + .byte W12 + .byte N06 , An3, v104 + .byte N06 , Cn4 + .byte W12 + .byte N17 , An3, v084 + .byte N17 , Cn4, v076 + .byte W24 + .byte N12 , Gn3, v104 + .byte N17 , Bn3, v096 + .byte W24 + .byte N10 , Fs3, v080 + .byte N10 , An3, v068 + .byte W12 + .byte N06 , Dn3, v080 + .byte W12 + .byte N11 , As3, v108 + .byte N24 , Dn4, v112 + .byte W12 + .byte N11 , Fn3, v084 + .byte W12 + .byte N08 , As3, v100 + .byte W12 + .byte N21 , Cn4, v104 + .byte N20 , En4 + .byte W24 + .byte N11 , Gn3, v096 + .byte W12 + .byte Cn4 + .byte N11 , En4 + .byte W12 + .byte N21 , Cs4, v104 + .byte N20 , Fn4 + .byte W12 + .byte W09 + .byte FINE + + @********************** Track 11 **********************@ + + .global song040_11 +song040_11: @ 0x087B7E63 + .byte KEYSH , 0 + .byte VOICE , 95 + .byte VOL , v110 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W48 + .byte N44 , Gs2, v100 + .byte W48 + .byte N92 , Cs3, v116 + .byte W48 + .byte N44 , Gs3, v112 + .byte W48 + .byte Ds3, v076 + .byte N92 , Gn3, v088 + .byte W48 + .byte N44 , As2, v076 + .byte W48 + .byte As2, v080 + .byte N92 , Ds3, v068 + .byte W48 + .byte N44 , Cn3, v080 + .byte W48 + .byte Gs2, v096 + .byte TIE , Cs3 + .byte W48 + .byte N44 , Fn3, v084 + .byte W48 + .byte Gs3, v092 + .byte W44 + .byte W03 + .byte EOT , Cs3 + .byte W01 + .byte N44 , Fn3, v096 + .byte N44 , Cs4, v068 + .byte W48 + .byte Gn3, v100 + .byte N92 , Ds4 + .byte W48 + .byte N44 , As2 + .byte W48 + .byte N48 , Fn3, v112 + .byte N92 , As3, v100 + .byte W48 + .byte N44 , Ds3, v112 + .byte W48 + .byte TIE , Bn2, v092 + .byte N44 , Fs3, v080 + .byte W48 + .byte Fn3, v112 + .byte W48 + .byte Fs3, v104 + .byte W44 + .byte W03 + .byte EOT , Bn2 + .byte W01 + .byte N44 , Bn2, v124 + .byte N44 , Ds4 + .byte W48 + .byte Fs3 + .byte N92 , Cs4 + .byte W48 + .byte N44 , Cs3, v104 + .byte W48 + .byte Fs3, v100 + .byte N92 , Fs4, v120 + .byte W48 + .byte N44 , As3, v100 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte As2, v080 + .byte W48 + .byte As3, v104 + .byte W48 + .byte N92 , Gs3, v088 + .byte W96 + .byte N44 , Ds3, v068 + .byte W48 + .byte Gs3, v080 + .byte W48 + .byte TIE , Gn3, v096 + .byte W96 + .byte W30 + .byte W01 + .byte EOT + .byte W64 + .byte W01 + .byte N92 , Bn2, v080 + .byte W96 + .byte N44 , Fs3 + .byte W48 + .byte Bn3, v096 + .byte W48 + .byte TIE , As3, v108 + .byte W96 + .byte W64 + .byte W01 + .byte EOT + .byte W07 + .byte N23 , As2, v112 + .byte W24 + .byte TIE , As3, v124 + .byte W96 + .byte W44 + .byte W03 + .byte EOT + .byte W01 + .byte N44 , As2, v112 + .byte W44 + .byte W03 + .byte FINE + + @********************** Track 12 **********************@ + + .global song040_12 +song040_12: @ 0x087B7F59 + .byte KEYSH , 0 + .byte VOICE , 98 + .byte VOL , v127 + .byte PAN , c_v + .byte BENDR , 3 + .byte LFOS , 31 + .byte LFODL , 22 + .byte MOD , 0 + .byte MODT , 0 + .byte W48 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W96 + .byte W36 + .byte N06 , Cs4, v116 + .byte W06 + .byte As3, v112 + .byte W06 + .byte Fs4, v116 + .byte W06 + .byte Cs4, v112 + .byte W06 + .byte As3, v116 + .byte W06 + .byte Fs3 + .byte W06 + .byte As3, v120 + .byte W06 + .byte Gs3, v127 + .byte W06 + .byte Fs3, v124 + .byte W06 + .byte Cs3, v127 + .byte W06 + .byte W36 + .byte Ds3, v108 + .byte W06 + .byte As2, v120 + .byte W06 + .byte Bn2, v104 + .byte W06 + .byte Ds3, v116 + .byte W06 + .byte Gs3, v124 + .byte W06 + .byte Fs3, v120 + .byte W06 + .byte Fn3, v108 + .byte W06 + .byte Gs3, v127 + .byte W06 + .byte Cs4 + .byte W12 + .byte W36 + .byte Dn4, v116 + .byte W06 + .byte Bn3, v112 + .byte W06 + .byte Gn4, v116 + .byte W06 + .byte Dn4, v112 + .byte W06 + .byte Bn3, v116 + .byte W06 + .byte Gn3 + .byte W06 + .byte Bn3, v120 + .byte W06 + .byte An3, v127 + .byte W06 + .byte Gn3, v124 + .byte W06 + .byte Dn3, v127 + .byte W06 + .byte W36 + .byte Gn3, v116 + .byte W06 + .byte Ds3, v108 + .byte W06 + .byte Fn3 + .byte W06 + .byte Gn3, v112 + .byte W06 + .byte An3, v116 + .byte W06 + .byte As3 + .byte W06 + .byte N04 , Gn3, v104 + .byte W04 + .byte An3, v112 + .byte W04 + .byte As3, v108 + .byte W04 + .byte Cn4, v100 + .byte W04 + .byte Dn4, v108 + .byte W04 + .byte Ds4, v116 + .byte W04 + .byte VOL , v060 + .byte TIE , Fn4 + .byte W96 + .byte W68 + .byte W03 + .byte EOT + .byte W01 + .byte N04 , Fn3, v104 + .byte W04 + .byte Gn3, v108 + .byte W04 + .byte An3 + .byte W04 + .byte As3, v120 + .byte W04 + .byte Cn4, v104 + .byte W04 + .byte Dn4, v116 + .byte W04 + .byte N96 , Ds4 + .byte W96 + .byte N48 , As4 + .byte W48 + .byte An4 + .byte W48 + .byte TIE , Fn4 + .byte W96 + .byte W72 + .byte EOT + .byte N04 , Fn3, v104 + .byte W04 + .byte Gn3, v108 + .byte W04 + .byte An3 + .byte W04 + .byte As3, v120 + .byte W04 + .byte Cn4, v104 + .byte W04 + .byte Dn4, v116 + .byte W04 + .byte N96 , Ds4 + .byte W96 + .byte N48 + .byte W48 + .byte N24 + .byte W24 + .byte En4 + .byte W24 + .byte TIE , Ds4 + .byte W96 + .byte W96 + .byte EOT + .byte N96 , Dn4 + .byte W96 + .byte En4 + .byte W96 + .byte Ds4 + .byte W96 + .byte Gs4 + .byte W96 + .byte TIE , Gn4 + .byte W96 + .byte W96 + .byte EOT + .byte N96 , Ds4 + .byte W96 + .byte Gs4 + .byte W96 + .byte TIE , Gn4 + .byte W96 + .byte W96 + .byte EOT + .byte N96 , Ds4 + .byte W96 + .byte Fs4 + .byte W96 + .byte TIE , Gn4 + .byte W96 + .byte W96 + .byte EOT + .byte TIE + .byte W96 + .byte W96 + .byte EOT + .byte FINE + + mAlignWord + .global C_DECL(song040) +C_DECL(song040): @ 0x087B8084 + .byte 12 @ trackCount + .byte 0 @ blockCount + .byte 0 @ priority + .byte 178 @ reverb + +mAlignWord + mPtr voicegroup000 @ voicegroup/tone + + mPtr song040_1 @ track + mPtr song040_2 @ track + mPtr song040_3 @ track + mPtr song040_4 @ track + mPtr song040_5 @ track + mPtr song040_6 @ track + mPtr song040_7 @ track + mPtr song040_8 @ track + mPtr song040_9 @ track + mPtr song040_10 @ track + mPtr song040_11 @ track + mPtr song040_12 @ track diff --git a/sa1/sound/voice_groups.inc b/sa1/sound/voice_groups.inc new file mode 100644 index 0000000000..a767f656b9 --- /dev/null +++ b/sa1/sound/voice_groups.inc @@ -0,0 +1,8 @@ +.include "sound/voicegroups/voicegroup000.inc" +.include "sound/voicegroups/voicegroup001.inc" +.include "sound/voicegroups/voicegroup002.inc" +.include "sound/voicegroups/voicegroup003.inc" +.include "sound/voicegroups/voicegroup004.inc" +.include "sound/voicegroups/voicegroup005.inc" +.include "sound/voicegroups/voicegroup006.inc" +.include "sound/voicegroups/voicegroup007.inc" diff --git a/sa1/sound/voicegroups/voicegroup000.inc b/sa1/sound/voicegroups/voicegroup000.inc new file mode 100644 index 0000000000..cf5265da3b --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup000.inc @@ -0,0 +1,189 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup000 +voicegroup000: @ 0x086DB8AC +mAlignWord + voice_square_1_alt 0, 0, 0, 0, 15, 0 @086DB8AC +mAlignWord + voice_square_1_alt 0, 1, 0, 0, 15, 0 @086DB8B8 +mAlignWord + voice_square_1_alt 0, 2, 0, 0, 15, 0 @086DB8C4 +mAlignWord + voice_square_1_alt 0, 3, 0, 0, 15, 0 @086DB8D0 +mAlignWord + voice_square_1_alt 0, 2, 2, 0, 15, 0 @086DB8DC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB8E8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB8F4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB900 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB90C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB918 +mAlignWord + voice_square_2_alt 0, 0, 0, 15, 0 @086DB924 +mAlignWord + voice_square_2_alt 1, 0, 0, 15, 0 @086DB930 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DB93C +mAlignWord + voice_square_2_alt 3, 0, 0, 15, 0 @086DB948 +mAlignWord + voice_square_2_alt 2, 2, 0, 15, 0 @086DB954 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB960 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB96C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB978 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB984 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB990 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB99C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9A8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9B4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9C0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9CC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9D8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9E4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9F0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DB9FC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA08 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA14 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA20 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA2C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA38 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA44 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA50 +mAlignWord + voice_square_1_alt 0, 1, 1, 0, 15, 0 @086DBA5C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA68 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA74 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBA80 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6D0, 0, 4, 4, 0 @086DBA8C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6E0, 0, 0, 15, 0 @086DBA98 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6F0, 0, 0, 15, 0 @086DBAA4 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD700, 0, 0, 15, 0 @086DBAB0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD710, 0, 0, 15, 0 @086DBABC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD720, 0, 0, 15, 0 @086DBAC8 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 0, 15, 0 @086DBAD4 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD740, 0, 0, 15, 0 @086DBAE0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD750, 0, 3, 0, 2 @086DBAEC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DBAF8 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 0 @086DBB04 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 0 @086DBB10 +mAlignWord + voice_square_1_alt 0, 2, 0, 3, 0, 0 @086DBB1C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6D0, 0, 0, 15, 0 @086DBB28 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD750, 0, 3, 0, 2 @086DBB34 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6D0, 0, 0, 15, 0 @086DBB40 +mAlignWord + voice_square_1_alt 0, 0, 0, 0, 15, 5 @086DBB4C +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 0 @086DBB58 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 0 @086DBB64 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DBB70 +mAlignWord + voice_square_1_alt 0, 0, 0, 4, 0, 0 @086DBB7C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD750, 0, 4, 0, 0 @086DBB88 +mAlignWord + voice_square_2_alt 0, 0, 4, 4, 0 @086DBB94 +mAlignWord + voice_square_1_alt 0, 1, 0, 3, 0, 0 @086DBBA0 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DBBAC +mAlignWord + voice_square_1_alt 0, 3, 0, 1, 0, 1 @086DBBB8 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD710, 0, 0, 15, 0 @086DBBC4 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD720, 0, 0, 15, 0 @086DBBD0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 0, 15, 0 @086DBBDC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD740, 0, 0, 15, 0 @086DBBE8 +mAlignWord + voice_directsound 60, 0, gUnknown_086DE134, 255, 0, 255, 0 @086DBBF4 +mAlignWord + voice_directsound 60, 0, gUnknown_086DF608, 255, 0, 255, 0 @086DBC00 +mAlignWord + voice_directsound 60, 0, gUnknown_086E0A1C, 255, 0, 255, 0 @086DBC0C +mAlignWord + voice_directsound 60, 0, gUnknown_086E134C, 255, 0, 255, 0 @086DBC18 +mAlignWord + voice_directsound 60, 0, gUnknown_086E1ABC, 255, 0, 255, 127 @086DBC24 +mAlignWord + voice_directsound 60, 0, gUnknown_086E33B0, 255, 0, 255, 127 @086DBC30 +mAlignWord + voice_directsound 60, 0, gUnknown_086E64DC, 255, 0, 255, 0 @086DBC3C +mAlignWord + voice_directsound 60, 0, gUnknown_086E6B24, 255, 235, 38, 165 @086DBC48 +mAlignWord + voice_directsound 60, 0, gUnknown_086EA218, 255, 0, 255, 127 @086DBC54 +mAlignWord + voice_directsound 60, 0, gUnknown_086ED1F4, 255, 0, 255, 0 @086DBC60 +mAlignWord + voice_directsound 60, 0, gUnknown_086F0138, 255, 0, 255, 0 @086DBC6C +mAlignWord + voice_directsound 60, 0, gUnknown_086F1AC0, 255, 0, 255, 127 @086DBC78 +mAlignWord + voice_directsound 60, 0, gUnknown_086F1DC0, 255, 0, 255, 127 @086DBC84 +mAlignWord + voice_keysplit voicegroup002, KeySplitTable1 @086DBC90 +mAlignWord + voice_directsound 60, 0, gUnknown_086F2994, 255, 246, 64, 149 @086DBC9C +mAlignWord + voice_directsound 60, 0, gUnknown_086F5578, 255, 0, 255, 127 @086DBCA8 +mAlignWord + voice_directsound 60, 0, gUnknown_086F836C, 255, 0, 255, 127 @086DBCB4 +mAlignWord + voice_directsound 60, 0, gUnknown_086FA790, 255, 0, 255, 127 @086DBCC0 +mAlignWord + voice_directsound 60, 0, gUnknown_086FAEA4, 255, 0, 255, 127 @086DBCCC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD720, 0, 0, 15, 0 @086DBCD8 +mAlignWord + voice_directsound 60, 0, gUnknown_086FBBD4, 255, 0, 255, 127 @086DBCE4 +mAlignWord + voice_directsound 60, 0, gUnknown_086FE150, 255, 231, 0, 188 @086DBCF0 diff --git a/sa1/sound/voicegroups/voicegroup001.inc b/sa1/sound/voicegroups/voicegroup001.inc new file mode 100644 index 0000000000..7433bd4e40 --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup001.inc @@ -0,0 +1,77 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup001 +voicegroup001: @ 0x086DBCFC +mAlignWord + voice_directsound 60, 0, gUnknown_086FE7E4, 255, 0, 255, 0 @086DBCFC +mAlignWord + voice_directsound 60, 0, gUnknown_086FF18C, 255, 0, 255, 149 @086DBD08 +mAlignWord + voice_directsound 60, 0, gUnknown_0870224C, 255, 235, 25, 165 @086DBD14 +mAlignWord + voice_directsound 60, 0, gUnknown_08702F60, 255, 0, 255, 149 @086DBD20 +mAlignWord + voice_directsound 60, 0, gUnknown_0870613C, 255, 0, 255, 0 @086DBD2C +mAlignWord + voice_directsound 60, 0, gUnknown_08708210, 37, 0, 255, 165 @086DBD38 +mAlignWord + voice_directsound 60, 0, gUnknown_08708210, 255, 0, 255, 165 @086DBD44 +mAlignWord + voice_directsound 60, 0, gUnknown_0870A724, 255, 252, 0, 149 @086DBD50 +mAlignWord + voice_directsound 60, 0, gUnknown_0870CA4C, 255, 0, 255, 0 @086DBD5C +mAlignWord + voice_directsound 60, 0, gUnknown_0870D7EC, 255, 0, 255, 0 @086DBD68 +mAlignWord + voice_directsound 60, 0, gUnknown_0870DC84, 255, 0, 255, 0 @086DBD74 +mAlignWord + voice_directsound 60, 0, gUnknown_0870E60C, 255, 0, 255, 0 @086DBD80 +mAlignWord + voice_directsound 60, 0, gUnknown_0870EA00, 255, 0, 255, 0 @086DBD8C +mAlignWord + voice_directsound 60, 0, gUnknown_0870EE50, 255, 0, 255, 0 @086DBD98 +mAlignWord + voice_directsound 60, 0, gUnknown_0870F254, 255, 0, 255, 0 @086DBDA4 +mAlignWord + voice_directsound 60, 0, gUnknown_0870FBC0, 255, 0, 255, 0 @086DBDB0 +mAlignWord + voice_directsound 60, 0, gUnknown_0870FFA0, 255, 0, 255, 0 @086DBDBC +mAlignWord + voice_directsound 60, 0, gUnknown_087103F8, 255, 0, 255, 0 @086DBDC8 +mAlignWord + voice_directsound 60, 0, gUnknown_08710D74, 255, 0, 255, 0 @086DBDD4 +mAlignWord + voice_directsound 60, 0, gUnknown_087111D4, 255, 0, 255, 0 @086DBDE0 +mAlignWord + voice_directsound 60, 0, gUnknown_08711640, 255, 0, 255, 0 @086DBDEC +mAlignWord + voice_directsound 60, 0, gUnknown_08711ACC, 255, 0, 255, 0 @086DBDF8 +mAlignWord + voice_directsound 60, 0, gUnknown_087123F8, 255, 0, 255, 0 @086DBE04 +mAlignWord + voice_directsound 60, 0, gUnknown_08712950, 255, 0, 255, 0 @086DBE10 +mAlignWord + voice_directsound 60, 0, gUnknown_08712DB8, 255, 0, 255, 0 @086DBE1C +mAlignWord + voice_directsound 60, 0, gUnknown_0871375C, 255, 250, 18, 250 @086DBE28 +mAlignWord + voice_directsound 60, 0, gUnknown_0871AED4, 255, 216, 25, 0 @086DBE34 +mAlignWord + voice_directsound 60, 0, spectrasonics__symphony_of_voices__partition_d__big_chord__big_min__c4_r, 37, 0, 255, 149 @086DBE40 +mAlignWord + voice_directsound 60, 0, gUnknown_0871EF30, 255, 0, 255, 0 @086DBE4C +mAlignWord + voice_directsound 60, 0, gUnknown_08727348, 255, 0, 255, 0 @086DBE58 +mAlignWord + voice_directsound 60, 0, gUnknown_0872CF68, 255, 0, 255, 149 @086DBE64 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD710, 0, 5, 1, 0 @086DBE70 +mAlignWord + voice_directsound 60, 0, gUnknown_0872E77C, 255, 216, 25, 0 @086DBE7C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD710, 0, 4, 4, 0 @086DBE88 +mAlignWord + voice_keysplit_all voicegroup003 @086DBE94 +mAlignWord + voice_keysplit_all voicegroup001 @086DBEA0 diff --git a/sa1/sound/voicegroups/voicegroup002.inc b/sa1/sound/voicegroups/voicegroup002.inc new file mode 100644 index 0000000000..0fa043e179 --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup002.inc @@ -0,0 +1,111 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup002 +voicegroup002: @ 0x086DBEAC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08730340, 255, 255, 255, 0 @086DBEAC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08730BF0, 255, 0, 255, 0 @086DBEB8 +mAlignWord + voice_noise 84, 0, 192, 0, 0, 1, 0, 0 @086DBEC4 +mAlignWord + voice_noise 84, 0, 192, 0, 0, 2, 0, 0 @086DBED0 +mAlignWord + voice_noise 84, 0, 192, 0, 0, 3, 7, 0 @086DBEDC +mAlignWord + voice_directsound 45, 0, gUnknown_08731868, 255, 0, 255, 0 @086DBEE8 +mAlignWord + voice_directsound 50, 0, gUnknown_08731868, 255, 0, 255, 0 @086DBEF4 +mAlignWord + voice_directsound 55, 0, gUnknown_08731868, 255, 0, 255, 0 @086DBF00 +mAlignWord + voice_directsound 60, 0, gUnknown_08731868, 255, 0, 255, 0 @086DBF0C +mAlignWord + voice_directsound 65, 0, gUnknown_08731868, 255, 0, 255, 0 @086DBF18 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08732A00, 255, 0, 255, 0 @086DBF24 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08733304, 255, 0, 255, 0 @086DBF30 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08733D74, 255, 0, 255, 0 @086DBF3C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08737EB4, 255, 0, 255, 0 @086DBF48 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873BCBC, 255, 0, 255, 0 @086DBF54 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873C470, 255, 0, 255, 0 @086DBF60 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873CC80, 255, 0, 255, 0 @086DBF6C +mAlignWord + voice_directsound 57, 0, gUnknown_08737EB4, 255, 0, 255, 0 @086DBF78 +mAlignWord + voice_directsound 59, 0, gUnknown_08737EB4, 255, 0, 255, 0 @086DBF84 +mAlignWord + voice_directsound 61, 0, gUnknown_08737EB4, 255, 0, 255, 0 @086DBF90 +mAlignWord + voice_directsound 45, 0, gUnknown_0873D430, 255, 0, 255, 0 @086DBF9C +mAlignWord + voice_directsound 50, 0, gUnknown_0873D430, 255, 0, 255, 0 @086DBFA8 +mAlignWord + voice_directsound 55, 0, gUnknown_0873D430, 255, 0, 255, 0 @086DBFB4 +mAlignWord + voice_directsound 60, 0, gUnknown_0873D430, 255, 0, 255, 0 @086DBFC0 +mAlignWord + voice_directsound 65, 0, gUnknown_0873D430, 255, 0, 255, 0 @086DBFCC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873DF74, 255, 0, 255, 0 @086DBFD8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873ECE8, 255, 0, 255, 0 @086DBFE4 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873F1C0, 255, 0, 255, 0 @086DBFF0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873F654, 255, 0, 255, 0 @086DBFFC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873FAB8, 255, 0, 255, 0 @086DC008 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0873FF64, 255, 0, 255, 0 @086DC014 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087403FC, 255, 0, 255, 0 @086DC020 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08740854, 255, 0, 255, 0 @086DC02C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08740D00, 255, 0, 255, 0 @086DC038 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08741248, 255, 0, 255, 0 @086DC044 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08741694, 255, 0, 255, 0 @086DC050 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08741B00, 255, 0, 255, 0 @086DC05C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874216C, 255, 0, 255, 0 @086DC068 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087424D8, 255, 0, 255, 0 @086DC074 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874267C, 255, 0, 255, 0 @086DC080 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08742E90, 255, 0, 255, 0 @086DC08C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087432F0, 255, 0, 255, 0 @086DC098 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087436FC, 255, 0, 255, 0 @086DC0A4 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08743BEC, 255, 0, 255, 0 @086DC0B0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874408C, 255, 0, 255, 0 @086DC0BC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087444B4, 255, 0, 255, 0 @086DC0C8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087449BC, 255, 0, 255, 0 @086DC0D4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC0E0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC0EC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC0F8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC104 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC110 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC11C diff --git a/sa1/sound/voicegroups/voicegroup003.inc b/sa1/sound/voicegroups/voicegroup003.inc new file mode 100644 index 0000000000..bc61ef1206 --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup003.inc @@ -0,0 +1,67 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup003 +voicegroup003: @ 0x086DC128 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC128 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC134 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC140 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC14C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC158 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874621C, 255, 0, 255, 0 @086DC164 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08746C04, 255, 0, 255, 0 @086DC170 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08747908, 255, 0, 255, 0 @086DC17C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08747D18, 255, 0, 255, 0 @086DC188 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08748108, 255, 0, 255, 0 @086DC194 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08748BD8, 255, 0, 255, 0 @086DC1A0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087493A4, 255, 0, 255, 0 @086DC1AC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08749864, 255, 0, 255, 0 @086DC1B8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC1C4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC1D0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC1DC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC1E8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC1F4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC200 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC20C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC218 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC224 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08749D20, 255, 0, 255, 0 @086DC230 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874A750, 255, 0, 255, 0 @086DC23C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874AAF8, 255, 0, 255, 0 @086DC248 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874B5D0, 255, 0, 255, 0 @086DC254 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874B844, 255, 0, 255, 0 @086DC260 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874CAFC, 255, 0, 255, 0 @086DC26C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874D4D0, 255, 0, 255, 0 @086DC278 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874DDCC, 255, 0, 255, 0 @086DC284 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0874E228, 255, 0, 255, 0 @086DC290 diff --git a/sa1/sound/voicegroups/voicegroup004.inc b/sa1/sound/voicegroups/voicegroup004.inc new file mode 100644 index 0000000000..ff322bc3a7 --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup004.inc @@ -0,0 +1,87 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup004 +voicegroup004: @ 0x086DC29C +mAlignWord + voice_directsound 60, 0, gUnknown_0874E6D0, 255, 0, 255, 0 @086DC29C +mAlignWord + voice_directsound 60, 0, gUnknown_08753AEC, 255, 0, 255, 0 @086DC2A8 +mAlignWord + voice_directsound 60, 0, gUnknown_08758BB4, 255, 0, 255, 0 @086DC2B4 +mAlignWord + voice_directsound 60, 0, gUnknown_0875A76C, 255, 0, 255, 0 @086DC2C0 +mAlignWord + voice_directsound 60, 0, gUnknown_0875E854, 255, 0, 255, 0 @086DC2CC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0871EF30, 255, 0, 255, 0 @086DC2D8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC2E4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC2F0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC2FC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087634B0, 255, 0, 255, 0 @086DC308 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08763F44, 255, 0, 255, 0 @086DC314 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087644B8, 255, 0, 255, 0 @086DC320 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08764A24, 255, 0, 255, 0 @086DC32C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08764EC8, 255, 0, 255, 0 @086DC338 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08765524, 255, 0, 255, 0 @086DC344 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08765FF0, 255, 0, 255, 0 @086DC350 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087665C8, 255, 0, 255, 0 @086DC35C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08766AE4, 255, 0, 255, 0 @086DC368 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876701C, 255, 0, 255, 0 @086DC374 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08767588, 255, 0, 255, 0 @086DC380 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08767A20, 255, 0, 255, 0 @086DC38C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08768070, 255, 0, 255, 0 @086DC398 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC3A4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC3B0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC3BC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08768BA0, 255, 0, 255, 0 @086DC3C8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087692C0, 255, 0, 255, 0 @086DC3D4 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876995C, 255, 0, 255, 0 @086DC3E0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876A058, 255, 0, 255, 0 @086DC3EC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876A7E8, 255, 0, 255, 0 @086DC3F8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876AE6C, 255, 0, 255, 0 @086DC404 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876B5CC, 255, 0, 255, 0 @086DC410 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876BCBC, 255, 0, 255, 0 @086DC41C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876C1C4, 255, 0, 255, 0 @086DC428 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876C974, 255, 0, 255, 0 @086DC434 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876D0E8, 255, 0, 255, 0 @086DC440 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876D79C, 255, 0, 255, 0 @086DC44C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876DF8C, 255, 0, 255, 0 @086DC458 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876E614, 255, 0, 255, 0 @086DC464 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876ED88, 255, 0, 255, 0 @086DC470 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0876F47C, 255, 0, 255, 0 @086DC47C diff --git a/sa1/sound/voicegroups/voicegroup005.inc b/sa1/sound/voicegroups/voicegroup005.inc new file mode 100644 index 0000000000..a0d9ef0c6b --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup005.inc @@ -0,0 +1,261 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup005 +voicegroup005: @ 0x086DC488 +mAlignWord + voice_square_1_alt 0, 0, 0, 0, 15, 0 @086DC488 +mAlignWord + voice_square_1_alt 0, 1, 0, 0, 15, 0 @086DC494 +mAlignWord + voice_square_1_alt 0, 2, 0, 0, 15, 0 @086DC4A0 +mAlignWord + voice_square_1_alt 0, 3, 0, 0, 15, 0 @086DC4AC +mAlignWord + voice_square_1_alt 0, 2, 2, 0, 15, 0 @086DC4B8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC4C4 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 0 @086DC4D0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC4DC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC4E8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC4F4 +mAlignWord + voice_square_2_alt 0, 0, 0, 15, 0 @086DC500 +mAlignWord + voice_square_2_alt 1, 0, 0, 15, 0 @086DC50C +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DC518 +mAlignWord + voice_square_2_alt 3, 0, 0, 15, 0 @086DC524 +mAlignWord + voice_square_2_alt 2, 2, 0, 15, 0 @086DC530 +mAlignWord + voice_noise 60, 0, 0, 1, 1, 0, 12, 2 @086DC53C +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 12, 2 @086DC548 +mAlignWord + voice_square_1_alt 0, 1, 0, 0, 15, 0 @086DC554 +mAlignWord + voice_square_1_alt 0, 1, 0, 0, 5, 3 @086DC560 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 12, 2 @086DC56C +mAlignWord + voice_noise 60, 0, 0, 1, 1, 0, 12, 2 @086DC578 +mAlignWord + voice_noise 60, 0, 0, 1, 4, 0, 12, 2 @086DC584 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DC590 +mAlignWord + voice_square_1_alt 0, 1, 0, 0, 5, 4 @086DC59C +mAlignWord + voice_square_1_alt 0, 0, 0, 0, 15, 5 @086DC5A8 +mAlignWord + voice_square_1_alt 0, 2, 0, 2, 0, 0 @086DC5B4 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 0 @086DC5C0 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 2 @086DC5CC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC5D8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC5E4 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DC5F0 +mAlignWord + voice_noise 60, 0, 0, 0, 3, 0, 15, 4 @086DC5FC +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DC608 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DC614 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DC620 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 0 @086DC62C +mAlignWord + voice_square_1_alt 0, 1, 1, 0, 15, 0 @086DC638 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DC644 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DC650 +mAlignWord + voice_square_2_alt 2, 2, 0, 15, 1 @086DC65C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6D0, 0, 4, 4, 0 @086DC668 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6E0, 0, 0, 15, 0 @086DC674 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6F0, 0, 0, 15, 0 @086DC680 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD700, 0, 0, 15, 0 @086DC68C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD710, 0, 0, 15, 0 @086DC698 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD720, 0, 0, 15, 0 @086DC6A4 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 0, 15, 0 @086DC6B0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD740, 0, 0, 15, 0 @086DC6BC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD750, 0, 3, 0, 2 @086DC6C8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC6D4 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 0 @086DC6E0 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 0 @086DC6EC +mAlignWord + voice_square_1_alt 0, 2, 0, 3, 0, 0 @086DC6F8 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6D0, 0, 0, 15, 0 @086DC704 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD750, 0, 3, 0, 2 @086DC710 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD6D0, 0, 0, 15, 0 @086DC71C +mAlignWord + voice_square_1_alt 0, 0, 0, 0, 15, 5 @086DC728 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 0 @086DC734 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 0 @086DC740 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DC74C +mAlignWord + voice_square_1_alt 0, 0, 0, 4, 0, 0 @086DC758 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD750, 0, 4, 0, 0 @086DC764 +mAlignWord + voice_square_2_alt 0, 0, 4, 4, 0 @086DC770 +mAlignWord + voice_square_1_alt 0, 1, 0, 3, 0, 0 @086DC77C +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DC788 +mAlignWord + voice_square_1_alt 0, 3, 0, 1, 0, 1 @086DC794 +mAlignWord + voice_square_1_alt 0, 2, 0, 2, 2, 2 @086DC7A0 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DC7AC +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DC7B8 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DC7C4 +mAlignWord + voice_directsound 60, 0, gUnknown_086DE134, 255, 0, 255, 0 @086DC7D0 +mAlignWord + voice_directsound 60, 0, gUnknown_086DF608, 255, 0, 255, 0 @086DC7DC +mAlignWord + voice_directsound 60, 0, gUnknown_086E0A1C, 255, 0, 255, 0 @086DC7E8 +mAlignWord + voice_directsound 60, 0, gUnknown_086E134C, 255, 0, 255, 0 @086DC7F4 +mAlignWord + voice_directsound 60, 0, gUnknown_086E1ABC, 255, 0, 255, 127 @086DC800 +mAlignWord + voice_directsound 60, 0, gUnknown_086E33B0, 255, 0, 255, 127 @086DC80C +mAlignWord + voice_directsound 60, 0, gUnknown_086E64DC, 255, 0, 255, 0 @086DC818 +mAlignWord + voice_directsound 60, 0, gUnknown_086E6B24, 255, 235, 38, 165 @086DC824 +mAlignWord + voice_directsound 60, 0, gUnknown_086EA218, 255, 0, 255, 127 @086DC830 +mAlignWord + voice_directsound 60, 0, gUnknown_086ED1F4, 255, 0, 255, 0 @086DC83C +mAlignWord + voice_directsound 60, 0, gUnknown_086F0138, 255, 0, 255, 0 @086DC848 +mAlignWord + voice_directsound 60, 0, gUnknown_086F1AC0, 255, 0, 255, 127 @086DC854 +mAlignWord + voice_directsound 60, 0, gUnknown_086F1DC0, 255, 0, 255, 127 @086DC860 +mAlignWord + voice_noise 60, 0, 0, 0, 3, 0, 15, 4 @086DC86C +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DC878 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD720, 0, 0, 15, 0 @086DC884 +mAlignWord + voice_square_1_alt 0, 2, 0, 2, 0, 0 @086DC890 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 1 @086DC89C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC8A8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC8B4 +mAlignWord + voice_directsound 60, 0, gUnknown_086FBBD4, 255, 0, 255, 0 @086DC8C0 +mAlignWord + voice_directsound 60, 0, gUnknown_086FE150, 255, 0, 255, 0 @086DC8CC +mAlignWord + voice_directsound 60, 0, gUnknown_086FE7E4, 255, 0, 255, 0 @086DC8D8 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD750, 0, 3, 0, 2 @086DC8E4 +mAlignWord + voice_noise 60, 0, 0, 1, 1, 0, 12, 2 @086DC8F0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC8FC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC908 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC914 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC920 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DC92C +mAlignWord + voice_directsound 60, 0, gUnknown_0876FB20, 255, 0, 255, 0 @086DC938 +mAlignWord + voice_directsound 60, 0, gUnknown_08771CC4, 255, 0, 255, 0 @086DC944 +mAlignWord + voice_directsound 60, 0, gUnknown_08773848, 255, 0, 255, 0 @086DC950 +mAlignWord + voice_directsound 60, 0, gUnknown_08775640, 255, 0, 255, 0 @086DC95C +mAlignWord + voice_directsound 60, 0, gUnknown_08775E7C, 255, 0, 255, 0 @086DC968 +mAlignWord + voice_directsound 60, 0, gUnknown_08778D48, 255, 0, 255, 0 @086DC974 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08779EDC, 255, 0, 255, 0 @086DC980 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0870FBC0, 255, 0, 255, 0 @086DC98C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0870FFA0, 255, 0, 255, 0 @086DC998 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087103F8, 255, 0, 255, 0 @086DC9A4 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08710D74, 255, 0, 255, 0 @086DC9B0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087111D4, 255, 0, 255, 0 @086DC9BC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08711640, 255, 0, 255, 0 @086DC9C8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08711ACC, 255, 0, 255, 0 @086DC9D4 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087123F8, 255, 0, 255, 0 @086DC9E0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08712950, 255, 0, 255, 0 @086DC9EC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0877AD00, 255, 0, 255, 0 @086DC9F8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0877B9A0, 255, 0, 255, 0 @086DCA04 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 0 @086DCA10 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 2 @086DCA1C +mAlignWord + voice_noise 60, 0, 0, 1, 1, 0, 12, 2 @086DCA28 +mAlignWord + voice_square_1_alt 0, 2, 2, 0, 15, 0 @086DCA34 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 2 @086DCA40 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DCA4C +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 2 @086DCA58 +mAlignWord + voice_square_1_alt 0, 2, 3, 0, 10, 3 @086DCA64 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DCA70 +mAlignWord + voice_keysplit_all voicegroup001 @086DCA7C diff --git a/sa1/sound/voicegroups/voicegroup006.inc b/sa1/sound/voicegroups/voicegroup006.inc new file mode 100644 index 0000000000..8ba6a53f20 --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup006.inc @@ -0,0 +1,261 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup006 +voicegroup006: @ 0x086DCA88 +mAlignWord + voice_square_1_alt 0, 0, 0, 0, 15, 0 @086DCA88 +mAlignWord + voice_square_1_alt 0, 1, 0, 0, 15, 0 @086DCA94 +mAlignWord + voice_square_1_alt 0, 2, 0, 0, 15, 0 @086DCAA0 +mAlignWord + voice_square_1_alt 0, 3, 0, 0, 15, 0 @086DCAAC +mAlignWord + voice_square_1_alt 0, 2, 2, 0, 15, 0 @086DCAB8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCAC4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCAD0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCADC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCAE8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCAF4 +mAlignWord + voice_square_2_alt 0, 0, 0, 15, 0 @086DCB00 +mAlignWord + voice_square_2_alt 1, 0, 0, 15, 0 @086DCB0C +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DCB18 +mAlignWord + voice_square_2_alt 3, 0, 0, 15, 0 @086DCB24 +mAlignWord + voice_square_2_alt 2, 2, 0, 15, 0 @086DCB30 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCB3C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCB48 +mAlignWord + voice_square_2_alt 0, 0, 3, 0, 2 @086DCB54 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 4, 0 @086DCB60 +mAlignWord + voice_square_2_alt 2, 0, 2, 2, 0 @086DCB6C +mAlignWord + voice_directsound 60, 0, gUnknown_086FF18C, 255, 0, 255, 149 @086DCB78 +mAlignWord + voice_directsound 60, 0, gUnknown_0877CF24, 255, 0, 255, 149 @086DCB84 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DCB90 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 7, 0 @086DCB9C +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DCBA8 +mAlignWord + voice_square_1_alt 0, 2, 2, 0, 9, 6 @086DCBB4 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DCBC0 +mAlignWord + voice_square_2_alt 2, 0, 4, 0, 6 @086DCBCC +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DCBD8 +mAlignWord + voice_square_2_alt 2, 0, 4, 13, 6 @086DCBE4 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DCBF0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD740, 0, 0, 15, 0 @086DCBFC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 0, 15, 0 @086DCC08 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 4 @086DCC14 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DCC20 +mAlignWord + voice_square_1_alt 0, 1, 0, 6, 0, 6 @086DCC2C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 2, 0, 15, 0 @086DCC38 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 2 @086DCC44 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DCC50 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DCC5C +mAlignWord + voice_square_1_alt 0, 1, 0, 6, 0, 6 @086DCC68 +mAlignWord + voice_square_1_alt 0, 2, 0, 6, 0, 6 @086DCC74 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 0, 15, 0 @086DCC80 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DCC8C +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DCC98 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DCCA4 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 4 @086DCCB0 +mAlignWord + voice_square_1_alt 0, 2, 0, 6, 0, 6 @086DCCBC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD740, 0, 6, 0, 6 @086DCCC8 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DCCD4 +mAlignWord + voice_square_2_alt 1, 0, 0, 15, 0 @086DCCE0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 4 @086DCCEC +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DCCF8 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DCD04 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 3 @086DCD10 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DCD1C +mAlignWord + voice_square_1_alt 0, 1, 2, 0, 10, 3 @086DCD28 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 0 @086DCD34 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 0 @086DCD40 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DCD4C +mAlignWord + voice_directsound 60, 0, gUnknown_0877F2A4, 255, 0, 255, 0 @086DCD58 +mAlignWord + voice_directsound 60, 0, gUnknown_0878306C, 255, 0, 255, 0 @086DCD64 +mAlignWord + voice_directsound 60, 0, gUnknown_08789214, 255, 0, 255, 0 @086DCD70 +mAlignWord + voice_directsound 60, 0, gUnknown_0878D964, 255, 0, 255, 0 @086DCD7C +mAlignWord + voice_directsound 60, 0, gUnknown_0878FAAC, 255, 0, 255, 0 @086DCD88 +mAlignWord + voice_directsound 60, 0, gUnknown_0877F2A4, 255, 0, 255, 0 @086DCD94 +mAlignWord + voice_directsound 60, 0, gUnknown_0878306C, 255, 0, 255, 0 @086DCDA0 +mAlignWord + voice_directsound 60, 0, gUnknown_08789214, 255, 250, 18, 250 @086DCDAC +mAlignWord + voice_directsound 60, 0, gUnknown_0878D964, 255, 250, 18, 250 @086DCDB8 +mAlignWord + voice_directsound 60, 0, gUnknown_0878FAAC, 255, 250, 18, 250 @086DCDC4 +mAlignWord + voice_directsound 60, 0, gUnknown_086DE134, 255, 0, 255, 0 @086DCDD0 +mAlignWord + voice_directsound 60, 0, gUnknown_086DF608, 255, 0, 255, 0 @086DCDDC +mAlignWord + voice_directsound 60, 0, gUnknown_086E0A1C, 255, 0, 255, 0 @086DCDE8 +mAlignWord + voice_directsound 60, 0, gUnknown_086E134C, 255, 0, 255, 0 @086DCDF4 +mAlignWord + voice_directsound 60, 0, gUnknown_086E1ABC, 255, 0, 255, 127 @086DCE00 +mAlignWord + voice_directsound 60, 0, gUnknown_086E33B0, 255, 0, 255, 127 @086DCE0C +mAlignWord + voice_directsound 60, 0, gUnknown_086E64DC, 255, 0, 255, 0 @086DCE18 +mAlignWord + voice_directsound 60, 0, gUnknown_086E6B24, 255, 235, 38, 165 @086DCE24 +mAlignWord + voice_directsound 60, 0, gUnknown_086EA218, 255, 0, 255, 127 @086DCE30 +mAlignWord + voice_directsound 60, 0, gUnknown_086ED1F4, 255, 0, 255, 0 @086DCE3C +mAlignWord + voice_directsound 60, 0, gUnknown_086F0138, 255, 0, 255, 0 @086DCE48 +mAlignWord + voice_directsound 60, 0, gUnknown_086F1AC0, 255, 0, 255, 127 @086DCE54 +mAlignWord + voice_directsound 60, 0, gUnknown_086F1DC0, 255, 0, 255, 127 @086DCE60 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCE6C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCE78 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCE84 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCE90 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 1 @086DCE9C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCEA8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCEB4 +mAlignWord + voice_directsound 60, 0, gUnknown_086FBBD4, 255, 0, 255, 0 @086DCEC0 +mAlignWord + voice_directsound 60, 0, gUnknown_086FE150, 255, 0, 255, 0 @086DCECC +mAlignWord + voice_directsound 60, 0, gUnknown_086FE7E4, 255, 0, 255, 0 @086DCED8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCEE4 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCEF0 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCEFC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF08 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF14 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF20 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF2C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF38 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF44 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF50 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF5C +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF68 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF74 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DCF80 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0870FBC0, 255, 0, 255, 0 @086DCF8C +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0870FFA0, 255, 0, 255, 0 @086DCF98 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087103F8, 255, 0, 255, 0 @086DCFA4 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08710D74, 255, 0, 255, 0 @086DCFB0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087111D4, 255, 0, 255, 0 @086DCFBC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08711640, 255, 0, 255, 0 @086DCFC8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08711ACC, 255, 0, 255, 0 @086DCFD4 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_087123F8, 255, 0, 255, 0 @086DCFE0 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_08712950, 255, 0, 255, 0 @086DCFEC +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0877AD00, 255, 0, 255, 0 @086DCFF8 +mAlignWord + voice_directsound_no_resample 60, 0, gUnknown_0877B9A0, 255, 0, 255, 0 @086DD004 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 0 @086DD010 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 2 @086DD01C +mAlignWord + voice_noise 60, 0, 0, 1, 1, 0, 12, 2 @086DD028 +mAlignWord + voice_square_1_alt 0, 2, 2, 0, 15, 0 @086DD034 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 2 @086DD040 +mAlignWord + voice_noise 60, 0, 0, 0, 0, 0, 15, 2 @086DD04C +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 2 @086DD058 +mAlignWord + voice_square_1_alt 0, 2, 3, 0, 10, 3 @086DD064 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DD070 +mAlignWord + voice_keysplit_all voicegroup001 @086DD07C diff --git a/sa1/sound/voicegroups/voicegroup007.inc b/sa1/sound/voicegroups/voicegroup007.inc new file mode 100644 index 0000000000..f0175f7e76 --- /dev/null +++ b/sa1/sound/voicegroups/voicegroup007.inc @@ -0,0 +1,261 @@ + mAlignWord + @********************** Voicegroup **********************@ + + .global voicegroup007 +voicegroup007: @ 0x086DD088 +mAlignWord + voice_square_1_alt 0, 2, 0, 3, 1, 3 @086DD088 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD094 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 3, 0 @086DD0A0 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD0AC +mAlignWord + voice_square_1_alt 0, 2, 0, 0, 15, 0 @086DD0B8 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 4, 0 @086DD0C4 +mAlignWord + voice_square_2_alt 0, 0, 0, 15, 0 @086DD0D0 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD0DC +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD0E8 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 7, 0 @086DD0F4 +mAlignWord + voice_square_1_alt 0, 2, 0, 0, 15, 0 @086DD100 +mAlignWord + voice_square_1_alt 0, 2, 0, 3, 4, 0 @086DD10C +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD118 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 7, 0 @086DD124 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 3, 0 @086DD130 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD13C +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD148 +mAlignWord + voice_square_2_alt 2, 0, 3, 1, 2 @086DD154 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD160 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 7, 0 @086DD16C +mAlignWord + voice_directsound 60, 0, gUnknown_086FF18C, 255, 0, 255, 149 @086DD178 +mAlignWord + voice_directsound 60, 0, gUnknown_0877CF24, 255, 0, 255, 149 @086DD184 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD190 +mAlignWord + voice_square_2_alt 0, 0, 0, 15, 0 @086DD19C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 3 @086DD1A8 +mAlignWord + voice_square_1_alt 0, 2, 2, 0, 9, 6 @086DD1B4 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD1C0 +mAlignWord + voice_square_2_alt 2, 0, 4, 0, 6 @086DD1CC +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD1D8 +mAlignWord + voice_square_2_alt 2, 0, 4, 13, 6 @086DD1E4 +mAlignWord + voice_square_1_alt 0, 1, 0, 2, 0, 0 @086DD1F0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD740, 0, 0, 15, 0 @086DD1FC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 0, 15, 0 @086DD208 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 4 @086DD214 +mAlignWord + voice_square_1_alt 0, 2, 0, 6, 0, 6 @086DD220 +mAlignWord + voice_square_2_alt 1, 0, 6, 0, 6 @086DD22C +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 2, 0, 15, 0 @086DD238 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 2 @086DD244 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD250 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD25C +mAlignWord + voice_square_1_alt 0, 1, 0, 6, 0, 6 @086DD268 +mAlignWord + voice_square_1_alt 0, 2, 0, 6, 0, 6 @086DD274 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 0, 15, 0 @086DD280 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD28C +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD298 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD2A4 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 4 @086DD2B0 +mAlignWord + voice_square_1_alt 0, 2, 0, 6, 0, 6 @086DD2BC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD740, 0, 6, 0, 6 @086DD2C8 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD2D4 +mAlignWord + voice_square_2_alt 1, 0, 0, 15, 0 @086DD2E0 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 4 @086DD2EC +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD2F8 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD304 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 3 @086DD310 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD31C +mAlignWord + voice_square_1_alt 0, 1, 2, 0, 10, 3 @086DD328 +mAlignWord + voice_noise 60, 0, 0, 0, 1, 0, 15, 0 @086DD334 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 0 @086DD340 +mAlignWord + voice_directsound 60, 0, gUnknown_08797224, 255, 0, 128, 235 @086DD34C +mAlignWord + voice_directsound 60, 0, gUnknown_0877F2A4, 255, 0, 255, 0 @086DD358 +mAlignWord + voice_directsound 60, 0, gUnknown_0878306C, 255, 0, 255, 0 @086DD364 +mAlignWord + voice_directsound 60, 0, gUnknown_08789214, 255, 0, 255, 0 @086DD370 +mAlignWord + voice_directsound 60, 0, gUnknown_0878D964, 255, 0, 255, 0 @086DD37C +mAlignWord + voice_directsound 60, 0, gUnknown_0878FAAC, 255, 0, 255, 0 @086DD388 +mAlignWord + voice_directsound 60, 0, gUnknown_0877F2A4, 255, 0, 255, 0 @086DD394 +mAlignWord + voice_directsound 60, 0, gUnknown_0878306C, 255, 0, 255, 0 @086DD3A0 +mAlignWord + voice_directsound 60, 0, gUnknown_08789214, 255, 250, 18, 250 @086DD3AC +mAlignWord + voice_directsound 60, 0, gUnknown_0878D964, 255, 250, 18, 250 @086DD3B8 +mAlignWord + voice_directsound 60, 0, gUnknown_0878FAAC, 255, 250, 18, 250 @086DD3C4 +mAlignWord + voice_directsound 60, 0, gUnknown_086DE134, 255, 0, 255, 0 @086DD3D0 +mAlignWord + voice_directsound 60, 0, gUnknown_086DF608, 255, 0, 255, 0 @086DD3DC +mAlignWord + voice_directsound 60, 0, gUnknown_086E0A1C, 255, 0, 255, 0 @086DD3E8 +mAlignWord + voice_directsound 60, 0, gUnknown_086E134C, 255, 0, 255, 0 @086DD3F4 +mAlignWord + voice_directsound 60, 0, gUnknown_086E1ABC, 255, 0, 255, 127 @086DD400 +mAlignWord + voice_directsound 60, 0, gUnknown_086E33B0, 255, 0, 255, 127 @086DD40C +mAlignWord + voice_directsound 60, 0, gUnknown_086E64DC, 255, 0, 255, 0 @086DD418 +mAlignWord + voice_directsound 60, 0, gUnknown_086E6B24, 255, 235, 38, 165 @086DD424 +mAlignWord + voice_directsound 60, 0, gUnknown_086EA218, 255, 0, 255, 127 @086DD430 +mAlignWord + voice_directsound 60, 0, gUnknown_086ED1F4, 255, 0, 255, 0 @086DD43C +mAlignWord + voice_directsound 60, 0, gUnknown_086F0138, 255, 0, 255, 0 @086DD448 +mAlignWord + voice_directsound 60, 0, gUnknown_086F1AC0, 255, 0, 255, 127 @086DD454 +mAlignWord + voice_directsound 60, 0, gUnknown_086F1DC0, 255, 0, 255, 127 @086DD460 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 1, 3 @086DD46C +mAlignWord + voice_square_2_alt 2, 0, 4, 10, 0 @086DD478 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 3 @086DD484 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DD490 +mAlignWord + voice_noise 60, 0, 0, 1, 0, 0, 15, 1 @086DD49C +mAlignWord + voice_square_1_alt 0, 2, 0, 6, 0, 2 @086DD4A8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DD4B4 +mAlignWord + voice_directsound 60, 0, gUnknown_086FBBD4, 255, 0, 255, 0 @086DD4C0 +mAlignWord + voice_directsound 60, 0, gUnknown_086FE150, 255, 0, 255, 0 @086DD4CC +mAlignWord + voice_directsound 60, 0, gUnknown_086FE7E4, 255, 0, 255, 0 @086DD4D8 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 7, 2 @086DD4E4 +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 2 @086DD4F0 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 2 @086DD4FC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 2, 9, 2 @086DD508 +mAlignWord + voice_square_2_alt 2, 1, 0, 10, 3 @086DD514 +mAlignWord + voice_square_1_alt 0, 2, 0, 4, 10, 0 @086DD520 +mAlignWord + voice_square_2_alt 3, 1, 6, 0, 0 @086DD52C +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD538 +mAlignWord + voice_square_1_alt 0, 2, 0, 4, 0, 4 @086DD544 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 2, 9, 2 @086DD550 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 1, 2, 9, 2 @086DD55C +mAlignWord + voice_square_1_alt 0, 2, 0, 0, 15, 0 @086DD568 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD574 +mAlignWord + voice_square_1_alt 0, 2, 0, 4, 0, 4 @086DD580 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 2, 9, 2 @086DD58C +mAlignWord + voice_square_2_alt 2, 0, 4, 0, 4 @086DD598 +mAlignWord + voice_square_1_alt 0, 2, 0, 4, 0, 4 @086DD5A4 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD5B0 +mAlignWord + voice_square_1_alt 0, 2, 0, 4, 0, 4 @086DD5BC +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 2, 9, 2 @086DD5C8 +mAlignWord + voice_square_2_alt 2, 1, 3, 3, 5 @086DD5D4 +mAlignWord + voice_square_1_alt 0, 2, 1, 3, 3, 5 @086DD5E0 +mAlignWord + voice_square_2_alt 2, 0, 0, 15, 0 @086DD5EC +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DD5F8 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DD604 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DD610 +mAlignWord + voice_square_1 0, 2, 0, 0, 15, 0 @086DD61C +mAlignWord + voice_square_1_alt 0, 2, 0, 4, 0, 4 @086DD628 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 2, 9, 2 @086DD634 +mAlignWord + voice_programmable_wave_alt ProgrammableWaveData_86DD730, 0, 3, 7, 2 @086DD640 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 2 @086DD64C +mAlignWord + voice_square_1_alt 0, 2, 1, 0, 10, 2 @086DD658 +mAlignWord + voice_square_2_alt 2, 0, 6, 0, 6 @086DD664 +mAlignWord + voice_square_1_alt 0, 1, 0, 0, 15, 0 @086DD670 +mAlignWord + voice_keysplit_all voicegroup001 diff --git a/sa1/src/.gitkeep b/sa1/src/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sa1/src/data/animations/animation_table.c b/sa1/src/data/animations/animation_table.c new file mode 100644 index 0000000000..0a393a32ce --- /dev/null +++ b/sa1/src/data/animations/animation_table.c @@ -0,0 +1,1681 @@ +#include "global.h" + +extern const s32 * const anim_0000[]; +extern const s32 * const anim_0001[]; +extern const s32 * const anim_0002[]; +extern const s32 * const anim_0003[]; +extern const s32 * const anim_0004[]; +extern const s32 * const anim_0005[]; +extern const s32 * const anim_0006[]; +extern const s32 * const anim_0007[]; +extern const s32 * const anim_0008[]; +extern const s32 * const anim_0009[]; +extern const s32 * const anim_0010[]; +extern const s32 * const anim_0011[]; +extern const s32 * const anim_0012[]; +extern const s32 * const anim_0013[]; +extern const s32 * const anim_0014[]; +extern const s32 * const anim_0017[]; +extern const s32 * const anim_0018[]; +extern const s32 * const anim_0019[]; +extern const s32 * const anim_0021[]; +extern const s32 * const anim_0022[]; +extern const s32 * const anim_0023[]; +extern const s32 * const anim_0024[]; +extern const s32 * const anim_0025[]; +extern const s32 * const anim_0026[]; +extern const s32 * const anim_0027[]; +extern const s32 * const anim_0028[]; +extern const s32 * const anim_0029[]; +extern const s32 * const anim_0030[]; +extern const s32 * const anim_0031[]; +extern const s32 * const anim_0032[]; +extern const s32 * const anim_0033[]; +extern const s32 * const anim_0034[]; +extern const s32 * const anim_0035[]; +extern const s32 * const anim_0036[]; +extern const s32 * const anim_0037[]; +extern const s32 * const anim_0038[]; +extern const s32 * const anim_0039[]; +extern const s32 * const anim_0040[]; +extern const s32 * const anim_0041[]; +extern const s32 * const anim_0042[]; +extern const s32 * const anim_0043[]; +extern const s32 * const anim_0044[]; +extern const s32 * const anim_0045[]; +extern const s32 * const anim_0049[]; +extern const s32 * const anim_0050[]; +extern const s32 * const anim_0051[]; +extern const s32 * const anim_0052[]; +extern const s32 * const anim_0053[]; +extern const s32 * const anim_0055[]; +extern const s32 * const anim_0081[]; +extern const s32 * const anim_0082[]; +extern const s32 * const anim_0083[]; +extern const s32 * const anim_0084[]; +extern const s32 * const anim_0085[]; +extern const s32 * const anim_0086[]; +extern const s32 * const anim_0087[]; +extern const s32 * const anim_0088[]; +extern const s32 * const anim_0089[]; +extern const s32 * const anim_0091[]; +extern const s32 * const anim_0093[]; +extern const s32 * const anim_0096[]; +extern const s32 * const anim_0097[]; +extern const s32 * const anim_0098[]; +extern const s32 * const anim_0099[]; +extern const s32 * const anim_0100[]; +extern const s32 * const anim_0101[]; +extern const s32 * const anim_0102[]; +extern const s32 * const anim_0103[]; +extern const s32 * const anim_0104[]; +extern const s32 * const anim_0105[]; +extern const s32 * const anim_0106[]; +extern const s32 * const anim_0107[]; +extern const s32 * const anim_0108[]; +extern const s32 * const anim_0109[]; +extern const s32 * const anim_0110[]; +extern const s32 * const anim_0111[]; +extern const s32 * const anim_0112[]; +extern const s32 * const anim_0113[]; +extern const s32 * const anim_0116[]; +extern const s32 * const anim_0117[]; +extern const s32 * const anim_0118[]; +extern const s32 * const anim_0120[]; +extern const s32 * const anim_0121[]; +extern const s32 * const anim_0122[]; +extern const s32 * const anim_0123[]; +extern const s32 * const anim_0124[]; +extern const s32 * const anim_0125[]; +extern const s32 * const anim_0126[]; +extern const s32 * const anim_0127[]; +extern const s32 * const anim_0128[]; +extern const s32 * const anim_0129[]; +extern const s32 * const anim_0130[]; +extern const s32 * const anim_0131[]; +extern const s32 * const anim_0132[]; +extern const s32 * const anim_0133[]; +extern const s32 * const anim_0134[]; +extern const s32 * const anim_0135[]; +extern const s32 * const anim_0136[]; +extern const s32 * const anim_0137[]; +extern const s32 * const anim_0138[]; +extern const s32 * const anim_0139[]; +extern const s32 * const anim_0140[]; +extern const s32 * const anim_0141[]; +extern const s32 * const anim_0142[]; +extern const s32 * const anim_0145[]; +extern const s32 * const anim_0146[]; +extern const s32 * const anim_0147[]; +extern const s32 * const anim_0149[]; +extern const s32 * const anim_0155[]; +extern const s32 * const anim_0156[]; +extern const s32 * const anim_0157[]; +extern const s32 * const anim_0158[]; +extern const s32 * const anim_0180[]; +extern const s32 * const anim_0181[]; +extern const s32 * const anim_0182[]; +extern const s32 * const anim_0184[]; +extern const s32 * const anim_0185[]; +extern const s32 * const anim_0186[]; +extern const s32 * const anim_0187[]; +extern const s32 * const anim_0188[]; +extern const s32 * const anim_0190[]; +extern const s32 * const anim_0191[]; +extern const s32 * const anim_0192[]; +extern const s32 * const anim_0195[]; +extern const s32 * const anim_0196[]; +extern const s32 * const anim_0197[]; +extern const s32 * const anim_0198[]; +extern const s32 * const anim_0199[]; +extern const s32 * const anim_0200[]; +extern const s32 * const anim_0201[]; +extern const s32 * const anim_0202[]; +extern const s32 * const anim_0203[]; +extern const s32 * const anim_0204[]; +extern const s32 * const anim_0205[]; +extern const s32 * const anim_0206[]; +extern const s32 * const anim_0207[]; +extern const s32 * const anim_0208[]; +extern const s32 * const anim_0209[]; +extern const s32 * const anim_0210[]; +extern const s32 * const anim_0211[]; +extern const s32 * const anim_0212[]; +extern const s32 * const anim_0213[]; +extern const s32 * const anim_0216[]; +extern const s32 * const anim_0217[]; +extern const s32 * const anim_0218[]; +extern const s32 * const anim_0220[]; +extern const s32 * const anim_0221[]; +extern const s32 * const anim_0222[]; +extern const s32 * const anim_0223[]; +extern const s32 * const anim_0224[]; +extern const s32 * const anim_0225[]; +extern const s32 * const anim_0226[]; +extern const s32 * const anim_0227[]; +extern const s32 * const anim_0228[]; +extern const s32 * const anim_0229[]; +extern const s32 * const anim_0230[]; +extern const s32 * const anim_0231[]; +extern const s32 * const anim_0232[]; +extern const s32 * const anim_0233[]; +extern const s32 * const anim_0234[]; +extern const s32 * const anim_0235[]; +extern const s32 * const anim_0236[]; +extern const s32 * const anim_0237[]; +extern const s32 * const anim_0238[]; +extern const s32 * const anim_0239[]; +extern const s32 * const anim_0240[]; +extern const s32 * const anim_0241[]; +extern const s32 * const anim_0242[]; +extern const s32 * const anim_0245[]; +extern const s32 * const anim_0246[]; +extern const s32 * const anim_0249[]; +extern const s32 * const anim_0250[]; +extern const s32 * const anim_0260[]; +extern const s32 * const anim_0261[]; +extern const s32 * const anim_0262[]; +extern const s32 * const anim_0263[]; +extern const s32 * const anim_0264[]; +extern const s32 * const anim_0265[]; +extern const s32 * const anim_0269[]; +extern const s32 * const anim_0270[]; +extern const s32 * const anim_0271[]; +extern const s32 * const anim_0280[]; +extern const s32 * const anim_0281[]; +extern const s32 * const anim_0282[]; +extern const s32 * const anim_0284[]; +extern const s32 * const anim_0285[]; +extern const s32 * const anim_0286[]; +extern const s32 * const anim_0287[]; +extern const s32 * const anim_0288[]; +extern const s32 * const anim_0292[]; +extern const s32 * const anim_0295[]; +extern const s32 * const anim_0296[]; +extern const s32 * const anim_0297[]; +extern const s32 * const anim_0298[]; +extern const s32 * const anim_0299[]; +extern const s32 * const anim_0300[]; +extern const s32 * const anim_0301[]; +extern const s32 * const anim_0302[]; +extern const s32 * const anim_0303[]; +extern const s32 * const anim_0304[]; +extern const s32 * const anim_0305[]; +extern const s32 * const anim_0306[]; +extern const s32 * const anim_0307[]; +extern const s32 * const anim_0308[]; +extern const s32 * const anim_0309[]; +extern const s32 * const anim_0310[]; +extern const s32 * const anim_0311[]; +extern const s32 * const anim_0312[]; +extern const s32 * const anim_0315[]; +extern const s32 * const anim_0316[]; +extern const s32 * const anim_0317[]; +extern const s32 * const anim_0319[]; +extern const s32 * const anim_0320[]; +extern const s32 * const anim_0321[]; +extern const s32 * const anim_0322[]; +extern const s32 * const anim_0323[]; +extern const s32 * const anim_0324[]; +extern const s32 * const anim_0325[]; +extern const s32 * const anim_0326[]; +extern const s32 * const anim_0327[]; +extern const s32 * const anim_0328[]; +extern const s32 * const anim_0329[]; +extern const s32 * const anim_0330[]; +extern const s32 * const anim_0331[]; +extern const s32 * const anim_0332[]; +extern const s32 * const anim_0333[]; +extern const s32 * const anim_0334[]; +extern const s32 * const anim_0335[]; +extern const s32 * const anim_0336[]; +extern const s32 * const anim_0337[]; +extern const s32 * const anim_0338[]; +extern const s32 * const anim_0339[]; +extern const s32 * const anim_0340[]; +extern const s32 * const anim_0341[]; +extern const s32 * const anim_0342[]; +extern const s32 * const anim_0343[]; +extern const s32 * const anim_0348[]; +extern const s32 * const anim_0353[]; +extern const s32 * const anim_0373[]; +extern const s32 * const anim_0374[]; +extern const s32 * const anim_0375[]; +extern const s32 * const anim_0376[]; +extern const s32 * const anim_0377[]; +extern const s32 * const anim_0378[]; +extern const s32 * const anim_0379[]; +extern const s32 * const anim_0380[]; +extern const s32 * const anim_0381[]; +extern const s32 * const anim_0383[]; +extern const s32 * const anim_0384[]; +extern const s32 * const anim_0385[]; +extern const s32 * const anim_0386[]; +extern const s32 * const anim_0387[]; +extern const s32 * const anim_0391[]; +extern const s32 * const anim_0392[]; +extern const s32 * const anim_0393[]; +extern const s32 * const anim_0394[]; +extern const s32 * const anim_0396[]; +extern const s32 * const anim_0397[]; +extern const s32 * const anim_0398[]; +extern const s32 * const anim_0399[]; +extern const s32 * const anim_0400[]; +extern const s32 * const anim_0401[]; +extern const s32 * const anim_0402[]; +extern const s32 * const anim_0403[]; +extern const s32 * const anim_0404[]; +extern const s32 * const anim_0405[]; +extern const s32 * const anim_0406[]; +extern const s32 * const anim_0407[]; +extern const s32 * const anim_0408[]; +extern const s32 * const anim_0409[]; +extern const s32 * const anim_0410[]; +extern const s32 * const anim_0411[]; +extern const s32 * const anim_0412[]; +extern const s32 * const anim_0413[]; +extern const s32 * const anim_0414[]; +extern const s32 * const anim_0415[]; +extern const s32 * const anim_0416[]; +extern const s32 * const anim_0417[]; +extern const s32 * const anim_0418[]; +extern const s32 * const anim_0419[]; +extern const s32 * const anim_0420[]; +extern const s32 * const anim_0421[]; +extern const s32 * const anim_0422[]; +extern const s32 * const anim_0423[]; +extern const s32 * const anim_0424[]; +extern const s32 * const anim_0425[]; +extern const s32 * const anim_0426[]; +extern const s32 * const anim_0427[]; +extern const s32 * const anim_0428[]; +extern const s32 * const anim_0429[]; +extern const s32 * const anim_0430[]; +extern const s32 * const anim_0431[]; +extern const s32 * const anim_0432[]; +extern const s32 * const anim_0433[]; +extern const s32 * const anim_0434[]; +extern const s32 * const anim_0435[]; +extern const s32 * const anim_0436[]; +extern const s32 * const anim_0437[]; +extern const s32 * const anim_0438[]; +extern const s32 * const anim_0439[]; +extern const s32 * const anim_0440[]; +extern const s32 * const anim_0441[]; +extern const s32 * const anim_0442[]; +extern const s32 * const anim_0443[]; +extern const s32 * const anim_0444[]; +extern const s32 * const anim_0445[]; +extern const s32 * const anim_0446[]; +extern const s32 * const anim_0447[]; +extern const s32 * const anim_0448[]; +extern const s32 * const anim_0449[]; +extern const s32 * const anim_0450[]; +extern const s32 * const anim_0451[]; +extern const s32 * const anim_0452[]; +extern const s32 * const anim_0453[]; +extern const s32 * const anim_0454[]; +extern const s32 * const anim_0455[]; +extern const s32 * const anim_0456[]; +extern const s32 * const anim_0457[]; +extern const s32 * const anim_0458[]; +extern const s32 * const anim_0459[]; +extern const s32 * const anim_0460[]; +extern const s32 * const anim_0461[]; +extern const s32 * const anim_0462[]; +extern const s32 * const anim_0463[]; +extern const s32 * const anim_0464[]; +extern const s32 * const anim_0465[]; +extern const s32 * const anim_0466[]; +extern const s32 * const anim_0467[]; +extern const s32 * const anim_0468[]; +extern const s32 * const anim_0469[]; +extern const s32 * const anim_0470[]; +extern const s32 * const anim_0471[]; +extern const s32 * const anim_0472[]; +extern const s32 * const anim_0473[]; +extern const s32 * const anim_0474[]; +extern const s32 * const anim_0475[]; +extern const s32 * const anim_0476[]; +extern const s32 * const anim_0477[]; +extern const s32 * const anim_0478[]; +extern const s32 * const anim_0479[]; +extern const s32 * const anim_0480[]; +extern const s32 * const anim_0481[]; +extern const s32 * const anim_0482[]; +extern const s32 * const anim_0483[]; +extern const s32 * const anim_0484[]; +extern const s32 * const anim_0485[]; +extern const s32 * const anim_0486[]; +extern const s32 * const anim_0487[]; +extern const s32 * const anim_0488[]; +extern const s32 * const anim_0489[]; +extern const s32 * const anim_0490[]; +extern const s32 * const anim_0491[]; +extern const s32 * const anim_0492[]; +extern const s32 * const anim_0493[]; +extern const s32 * const anim_0494[]; +extern const s32 * const anim_0495[]; +extern const s32 * const anim_0496[]; +extern const s32 * const anim_0497[]; +extern const s32 * const anim_0498[]; +extern const s32 * const anim_0499[]; +extern const s32 * const anim_0500[]; +extern const s32 * const anim_0501[]; +extern const s32 * const anim_0502[]; +extern const s32 * const anim_0503[]; +extern const s32 * const anim_0504[]; +extern const s32 * const anim_0505[]; +extern const s32 * const anim_0506[]; +extern const s32 * const anim_0507[]; +extern const s32 * const anim_0508[]; +extern const s32 * const anim_0509[]; +extern const s32 * const anim_0510[]; +extern const s32 * const anim_0511[]; +extern const s32 * const anim_0512[]; +extern const s32 * const anim_0513[]; +extern const s32 * const anim_0514[]; +extern const s32 * const anim_0515[]; +extern const s32 * const anim_0516[]; +extern const s32 * const anim_0517[]; +extern const s32 * const anim_0518[]; +extern const s32 * const anim_0519[]; +extern const s32 * const anim_0520[]; +extern const s32 * const anim_0521[]; +extern const s32 * const anim_0522[]; +extern const s32 * const anim_0523[]; +extern const s32 * const anim_0524[]; +extern const s32 * const anim_0525[]; +extern const s32 * const anim_0526[]; +extern const s32 * const anim_0527[]; +extern const s32 * const anim_0528[]; +extern const s32 * const anim_0529[]; +extern const s32 * const anim_0530[]; +extern const s32 * const anim_0531[]; +extern const s32 * const anim_0532[]; +extern const s32 * const anim_0533[]; +extern const s32 * const anim_0534[]; +extern const s32 * const anim_0535[]; +extern const s32 * const anim_0536[]; +extern const s32 * const anim_0537[]; +extern const s32 * const anim_0538[]; +extern const s32 * const anim_0539[]; +extern const s32 * const anim_0540[]; +extern const s32 * const anim_0541[]; +extern const s32 * const anim_0542[]; +extern const s32 * const anim_0543[]; +extern const s32 * const anim_0544[]; +extern const s32 * const anim_0545[]; +extern const s32 * const anim_0546[]; +extern const s32 * const anim_0547[]; +extern const s32 * const anim_0548[]; +extern const s32 * const anim_0549[]; +extern const s32 * const anim_0550[]; +extern const s32 * const anim_0551[]; +extern const s32 * const anim_0552[]; +extern const s32 * const anim_0553[]; +extern const s32 * const anim_0554[]; +extern const s32 * const anim_0555[]; +extern const s32 * const anim_0556[]; +extern const s32 * const anim_0557[]; +extern const s32 * const anim_0558[]; +extern const s32 * const anim_0559[]; +extern const s32 * const anim_0560[]; +extern const s32 * const anim_0561[]; +extern const s32 * const anim_0562[]; +extern const s32 * const anim_0563[]; +extern const s32 * const anim_0564[]; +extern const s32 * const anim_0565[]; +extern const s32 * const anim_0566[]; +extern const s32 * const anim_0567[]; +extern const s32 * const anim_0568[]; +extern const s32 * const anim_0569[]; +extern const s32 * const anim_0570[]; +extern const s32 * const anim_0571[]; +extern const s32 * const anim_0572[]; +extern const s32 * const anim_0573[]; +extern const s32 * const anim_0574[]; +extern const s32 * const anim_0575[]; +extern const s32 * const anim_0576[]; +extern const s32 * const anim_0577[]; +extern const s32 * const anim_0578[]; +extern const s32 * const anim_0579[]; +extern const s32 * const anim_0580[]; +extern const s32 * const anim_0581[]; +extern const s32 * const anim_0582[]; +extern const s32 * const anim_0583[]; +extern const s32 * const anim_0584[]; +extern const s32 * const anim_0585[]; +extern const s32 * const anim_0586[]; +extern const s32 * const anim_0587[]; +extern const s32 * const anim_0588[]; +extern const s32 * const anim_0589[]; +extern const s32 * const anim_0590[]; +extern const s32 * const anim_0591[]; +extern const s32 * const anim_0592[]; +extern const s32 * const anim_0593[]; +extern const s32 * const anim_0594[]; +extern const s32 * const anim_0595[]; +extern const s32 * const anim_0596[]; +extern const s32 * const anim_0597[]; +extern const s32 * const anim_0598[]; +extern const s32 * const anim_0599[]; +extern const s32 * const anim_0600[]; +extern const s32 * const anim_0601[]; +extern const s32 * const anim_0602[]; +extern const s32 * const anim_0603[]; +extern const s32 * const anim_0604[]; +extern const s32 * const anim_0605[]; +extern const s32 * const anim_0606[]; +extern const s32 * const anim_0607[]; +extern const s32 * const anim_0608[]; +extern const s32 * const anim_0609[]; +extern const s32 * const anim_0610[]; +extern const s32 * const anim_0611[]; +extern const s32 * const anim_0612[]; +extern const s32 * const anim_0613[]; +extern const s32 * const anim_0614[]; +extern const s32 * const anim_0615[]; +extern const s32 * const anim_0616[]; +extern const s32 * const anim_0617[]; +extern const s32 * const anim_0618[]; +extern const s32 * const anim_0619[]; +extern const s32 * const anim_0620[]; +extern const s32 * const anim_0621[]; +extern const s32 * const anim_0622[]; +extern const s32 * const anim_0623[]; +extern const s32 * const anim_0624[]; +extern const s32 * const anim_0625[]; +extern const s32 * const anim_0626[]; +extern const s32 * const anim_0627[]; +extern const s32 * const anim_0628[]; +extern const s32 * const anim_0629[]; +extern const s32 * const anim_0630[]; +extern const s32 * const anim_0631[]; +extern const s32 * const anim_0632[]; +extern const s32 * const anim_0633[]; +extern const s32 * const anim_0634[]; +extern const s32 * const anim_0635[]; +extern const s32 * const anim_0636[]; +extern const s32 * const anim_0637[]; +extern const s32 * const anim_0638[]; +extern const s32 * const anim_0639[]; +extern const s32 * const anim_0640[]; +extern const s32 * const anim_0641[]; +extern const s32 * const anim_0642[]; +extern const s32 * const anim_0643[]; +extern const s32 * const anim_0644[]; +extern const s32 * const anim_0645[]; +extern const s32 * const anim_0646[]; +extern const s32 * const anim_0647[]; +extern const s32 * const anim_0648[]; +extern const s32 * const anim_0649[]; +extern const s32 * const anim_0650[]; +extern const s32 * const anim_0651[]; +extern const s32 * const anim_0652[]; +extern const s32 * const anim_0653[]; +extern const s32 * const anim_0654[]; +extern const s32 * const anim_0655[]; +extern const s32 * const anim_0656[]; +extern const s32 * const anim_0657[]; +extern const s32 * const anim_0658[]; +extern const s32 * const anim_0659[]; +extern const s32 * const anim_0660[]; +extern const s32 * const anim_0661[]; +extern const s32 * const anim_0662[]; +extern const s32 * const anim_0663[]; +extern const s32 * const anim_0664[]; +extern const s32 * const anim_0665[]; +extern const s32 * const anim_0666[]; +extern const s32 * const anim_0667[]; +extern const s32 * const anim_0668[]; +extern const s32 * const anim_0669[]; +extern const s32 * const anim_0670[]; +extern const s32 * const anim_0671[]; +extern const s32 * const anim_0672[]; +extern const s32 * const anim_0673[]; +extern const s32 * const anim_0674[]; +extern const s32 * const anim_0675[]; +extern const s32 * const anim_0676[]; +extern const s32 * const anim_0677[]; +extern const s32 * const anim_0678[]; +extern const s32 * const anim_0679[]; +extern const s32 * const anim_0680[]; +extern const s32 * const anim_0681[]; +extern const s32 * const anim_0682[]; +extern const s32 * const anim_0683[]; +extern const s32 * const anim_0684[]; +extern const s32 * const anim_0685[]; +extern const s32 * const anim_0686[]; +extern const s32 * const anim_0687[]; +extern const s32 * const anim_0688[]; +extern const s32 * const anim_0689[]; +extern const s32 * const anim_0690[]; +extern const s32 * const anim_0691[]; +extern const s32 * const anim_0692[]; +extern const s32 * const anim_0693[]; +extern const s32 * const anim_0694[]; +extern const s32 * const anim_0695[]; +extern const s32 * const anim_0696[]; +extern const s32 * const anim_0697[]; +extern const s32 * const anim_0698[]; +extern const s32 * const anim_0699[]; +extern const s32 * const anim_0700[]; +extern const s32 * const anim_0701[]; +extern const s32 * const anim_0702[]; +extern const s32 * const anim_0703[]; +extern const s32 * const anim_0704[]; +extern const s32 * const anim_0705[]; +extern const s32 * const anim_0706[]; +extern const s32 * const anim_0707[]; +extern const s32 * const anim_0708[]; +extern const s32 * const anim_0709[]; +extern const s32 * const anim_0710[]; +extern const s32 * const anim_0711[]; +extern const s32 * const anim_0712[]; +extern const s32 * const anim_0713[]; +extern const s32 * const anim_0714[]; +extern const s32 * const anim_0715[]; +extern const s32 * const anim_0716[]; +extern const s32 * const anim_0717[]; +extern const s32 * const anim_0718[]; +extern const s32 * const anim_0719[]; +extern const s32 * const anim_0720[]; +extern const s32 * const anim_0721[]; +extern const s32 * const anim_0722[]; +extern const s32 * const anim_0723[]; +extern const s32 * const anim_0724[]; +extern const s32 * const anim_0725[]; +extern const s32 * const anim_0726[]; +extern const s32 * const anim_0727[]; +extern const s32 * const anim_0728[]; +extern const s32 * const anim_0729[]; +extern const s32 * const anim_0730[]; +extern const s32 * const anim_0731[]; +extern const s32 * const anim_0732[]; +extern const s32 * const anim_0733[]; +extern const s32 * const anim_0734[]; +extern const s32 * const anim_0735[]; +extern const s32 * const anim_0736[]; +extern const s32 * const anim_0737[]; +extern const s32 * const anim_0738[]; +extern const s32 * const anim_0739[]; +extern const s32 * const anim_0740[]; +extern const s32 * const anim_0741[]; +extern const s32 * const anim_0742[]; +extern const s32 * const anim_0743[]; +extern const s32 * const anim_0744[]; +extern const s32 * const anim_0745[]; +extern const s32 * const anim_0746[]; +extern const s32 * const anim_0747[]; +extern const s32 * const anim_0748[]; +extern const s32 * const anim_0749[]; +extern const s32 * const anim_0750[]; +extern const s32 * const anim_0751[]; +extern const s32 * const anim_0752[]; +extern const s32 * const anim_0753[]; +extern const s32 * const anim_0754[]; +extern const s32 * const anim_0755[]; +extern const s32 * const anim_0756[]; +extern const s32 * const anim_0757[]; +extern const s32 * const anim_0758[]; +extern const s32 * const anim_0759[]; +extern const s32 * const anim_0760[]; +extern const s32 * const anim_0761[]; +extern const s32 * const anim_0762[]; +extern const s32 * const anim_0763[]; +extern const s32 * const anim_0764[]; +extern const s32 * const anim_0765[]; +extern const s32 * const anim_0766[]; +extern const s32 * const anim_0767[]; +extern const s32 * const anim_0768[]; +extern const s32 * const anim_0769[]; +extern const s32 * const anim_0770[]; +extern const s32 * const anim_0771[]; +extern const s32 * const anim_0772[]; +extern const s32 * const anim_0773[]; +extern const s32 * const anim_0774[]; +extern const s32 * const anim_0775[]; +extern const s32 * const anim_0776[]; +extern const s32 * const anim_0777[]; +extern const s32 * const anim_0778[]; +extern const s32 * const anim_0779[]; +extern const s32 * const anim_0780[]; +extern const s32 * const anim_0781[]; +extern const s32 * const anim_0782[]; +extern const s32 * const anim_0783[]; +extern const s32 * const anim_0784[]; +extern const s32 * const anim_0785[]; +extern const s32 * const anim_0786[]; +extern const s32 * const anim_0787[]; +extern const s32 * const anim_0788[]; +extern const s32 * const anim_0789[]; +extern const s32 * const anim_0790[]; +extern const s32 * const anim_0791[]; +extern const s32 * const anim_0792[]; +extern const s32 * const anim_0793[]; +extern const s32 * const anim_0794[]; +extern const s32 * const anim_0795[]; +extern const s32 * const anim_0796[]; +extern const s32 * const anim_0797[]; +extern const s32 * const anim_0798[]; +extern const s32 * const anim_0799[]; +extern const s32 * const anim_0800[]; +extern const s32 * const anim_0801[]; +extern const s32 * const anim_0802[]; +extern const s32 * const anim_0803[]; +extern const s32 * const anim_0804[]; +extern const s32 * const anim_0805[]; +extern const s32 * const anim_0806[]; +extern const s32 * const anim_0807[]; +extern const s32 * const anim_0808[]; +extern const s32 * const anim_0809[]; +extern const s32 * const anim_0810[]; +extern const s32 * const anim_0811[]; +extern const s32 * const anim_0812[]; +extern const s32 * const anim_0813[]; +extern const s32 * const anim_0814[]; +extern const s32 * const anim_0815[]; +extern const s32 * const anim_0816[]; +extern const s32 * const anim_0817[]; +extern const s32 * const anim_0818[]; +extern const s32 * const anim_0819[]; +extern const s32 * const anim_0820[]; +extern const s32 * const anim_0821[]; +extern const s32 * const anim_0822[]; +extern const s32 * const anim_0823[]; +extern const s32 * const anim_0824[]; +extern const s32 * const anim_0825[]; +extern const s32 * const anim_0826[]; +extern const s32 * const anim_0827[]; +extern const s32 * const anim_0828[]; +extern const s32 * const anim_0829[]; +extern const s32 * const anim_0830[]; +extern const s32 * const anim_0831[]; +extern const s32 * const anim_0832[]; +extern const s32 * const anim_0833[]; +extern const s32 * const anim_0834[]; +extern const s32 * const anim_0835[]; +extern const s32 * const anim_0836[]; +extern const s32 * const anim_0837[]; +extern const s32 * const anim_0838[]; +extern const s32 * const anim_0839[]; +extern const s32 * const anim_0840[]; +extern const s32 * const anim_0841[]; +extern const s32 * const anim_0842[]; +extern const s32 * const anim_0843[]; +extern const s32 * const anim_0844[]; +extern const s32 * const anim_0845[]; +extern const s32 * const anim_0846[]; +extern const s32 * const anim_0847[]; +extern const s32 * const anim_0848[]; +extern const s32 * const anim_0849[]; +extern const s32 * const anim_0850[]; +extern const s32 * const anim_0851[]; +extern const s32 * const anim_0852[]; +extern const s32 * const anim_0853[]; +extern const s32 * const anim_0854[]; +extern const s32 * const anim_0855[]; +extern const s32 * const anim_0856[]; +extern const s32 * const anim_0857[]; +extern const s32 * const anim_0858[]; +extern const s32 * const anim_0859[]; +extern const s32 * const anim_0860[]; +extern const s32 * const anim_0861[]; +extern const s32 * const anim_0862[]; +extern const s32 * const anim_0863[]; +extern const s32 * const anim_0864[]; +extern const s32 * const anim_0865[]; +extern const s32 * const anim_0866[]; +extern const s32 * const anim_0867[]; +extern const s32 * const anim_0868[]; +extern const s32 * const anim_0869[]; +extern const s32 * const anim_0870[]; +extern const s32 * const anim_0871[]; +extern const s32 * const anim_0872[]; +extern const s32 * const anim_0873[]; +extern const s32 * const anim_0874[]; +extern const s32 * const anim_0875[]; +extern const s32 * const anim_0876[]; +extern const s32 * const anim_0877[]; +extern const s32 * const anim_0878[]; +extern const s32 * const anim_0879[]; +extern const s32 * const anim_0880[]; +extern const s32 * const anim_0881[]; +extern const s32 * const anim_0882[]; +extern const s32 * const anim_0883[]; +extern const s32 * const anim_0884[]; +extern const s32 * const anim_0885[]; +extern const s32 * const anim_0886[]; +extern const s32 * const anim_0887[]; +extern const s32 * const anim_0888[]; +extern const s32 * const anim_0889[]; +extern const s32 * const anim_0890[]; +extern const s32 * const anim_0891[]; +extern const s32 * const anim_0892[]; +extern const s32 * const anim_0893[]; +extern const s32 * const anim_0894[]; +extern const s32 * const anim_0895[]; +extern const s32 * const anim_0896[]; +extern const s32 * const anim_0897[]; +extern const s32 * const anim_0898[]; +extern const s32 * const anim_0899[]; +extern const s32 * const anim_0900[]; +extern const s32 * const anim_0901[]; +extern const s32 * const anim_0902[]; +extern const s32 * const anim_0903[]; +extern const s32 * const anim_0904[]; +extern const s32 * const anim_0905[]; +extern const s32 * const anim_0906[]; +extern const s32 * const anim_0907[]; + +const s32 * const *gAnimations[] = { + anim_0000, + anim_0001, + anim_0002, + anim_0003, + anim_0004, + anim_0005, + anim_0006, + anim_0007, + anim_0008, + anim_0009, + anim_0010, + anim_0011, + anim_0012, + anim_0013, + anim_0014, + NULL, + NULL, + anim_0017, + anim_0018, + anim_0019, + NULL, + anim_0021, + anim_0022, + anim_0023, + anim_0024, + anim_0025, + anim_0026, + anim_0027, + anim_0028, + anim_0029, + anim_0030, + anim_0031, + anim_0032, + anim_0033, + anim_0034, + anim_0035, + anim_0036, + anim_0037, + anim_0038, + anim_0039, + anim_0040, + anim_0041, + anim_0042, + anim_0043, + anim_0044, + anim_0045, + NULL, + NULL, + NULL, + anim_0049, + anim_0050, + anim_0051, + anim_0052, + anim_0053, + NULL, + anim_0055, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + anim_0081, + anim_0082, + anim_0083, + anim_0084, + anim_0085, + anim_0086, + anim_0087, + anim_0088, + anim_0089, + NULL, + anim_0091, + NULL, + anim_0093, + NULL, + NULL, + anim_0096, + anim_0097, + anim_0098, + anim_0099, + anim_0100, + anim_0101, + anim_0102, + anim_0103, + anim_0104, + anim_0105, + anim_0106, + anim_0107, + anim_0108, + anim_0109, + anim_0110, + anim_0111, + anim_0112, + anim_0113, + NULL, + NULL, + anim_0116, + anim_0117, + anim_0118, + NULL, + anim_0120, + anim_0121, + anim_0122, + anim_0123, + anim_0124, + anim_0125, + anim_0126, + anim_0127, + anim_0128, + anim_0129, + anim_0130, + anim_0131, + anim_0132, + anim_0133, + anim_0134, + anim_0135, + anim_0136, + anim_0137, + anim_0138, + anim_0139, + anim_0140, + anim_0141, + anim_0142, + NULL, + NULL, + anim_0145, + anim_0146, + anim_0147, + NULL, + anim_0149, + NULL, + NULL, + NULL, + NULL, + NULL, + anim_0155, + anim_0156, + anim_0157, + anim_0158, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + anim_0180, + anim_0181, + anim_0182, + NULL, + anim_0184, + anim_0185, + anim_0186, + anim_0187, + anim_0188, + NULL, + anim_0190, + anim_0191, + anim_0192, + NULL, + NULL, + anim_0195, + anim_0196, + anim_0197, + anim_0198, + anim_0199, + anim_0200, + anim_0201, + anim_0202, + anim_0203, + anim_0204, + anim_0205, + anim_0206, + anim_0207, + anim_0208, + anim_0209, + anim_0210, + anim_0211, + anim_0212, + anim_0213, + NULL, + NULL, + anim_0216, + anim_0217, + anim_0218, + NULL, + anim_0220, + anim_0221, + anim_0222, + anim_0223, + anim_0224, + anim_0225, + anim_0226, + anim_0227, + anim_0228, + anim_0229, + anim_0230, + anim_0231, + anim_0232, + anim_0233, + anim_0234, + anim_0235, + anim_0236, + anim_0237, + anim_0238, + anim_0239, + anim_0240, + anim_0241, + anim_0242, + NULL, + NULL, + anim_0245, + anim_0246, + NULL, + NULL, + anim_0249, + anim_0250, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + anim_0260, + anim_0261, + anim_0262, + anim_0263, + anim_0264, + anim_0265, + NULL, + NULL, + NULL, + anim_0269, + anim_0270, + anim_0271, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + anim_0280, + anim_0281, + anim_0282, + NULL, + anim_0284, + anim_0285, + anim_0286, + anim_0287, + anim_0288, + NULL, + NULL, + NULL, + anim_0292, + NULL, + NULL, + anim_0295, + anim_0296, + anim_0297, + anim_0298, + anim_0299, + anim_0300, + anim_0301, + anim_0302, + anim_0303, + anim_0304, + anim_0305, + anim_0306, + anim_0307, + anim_0308, + anim_0309, + anim_0310, + anim_0311, + anim_0312, + NULL, + NULL, + anim_0315, + anim_0306, + anim_0317, + NULL, + anim_0319, + anim_0320, + anim_0321, + anim_0322, + anim_0323, + anim_0324, + anim_0325, + anim_0326, + anim_0327, + anim_0328, + anim_0329, + anim_0330, + anim_0331, + anim_0332, + anim_0333, + anim_0334, + anim_0335, + anim_0336, + anim_0337, + anim_0338, + anim_0339, + anim_0340, + anim_0341, + anim_0342, + anim_0343, + NULL, + NULL, + NULL, + NULL, + anim_0348, + NULL, + NULL, + NULL, + NULL, + anim_0353, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + anim_0373, + anim_0374, + anim_0375, + anim_0376, + anim_0377, + anim_0306, + anim_0379, + anim_0380, + anim_0381, + NULL, + anim_0383, + anim_0384, + anim_0385, + anim_0386, + anim_0387, + NULL, + NULL, + NULL, + anim_0391, + anim_0392, + anim_0393, + anim_0394, + NULL, + anim_0396, + anim_0397, + anim_0398, + anim_0399, + anim_0400, + anim_0401, + anim_0402, + anim_0403, + anim_0404, + anim_0405, + anim_0406, + anim_0407, + anim_0408, + anim_0409, + anim_0410, + anim_0411, + anim_0412, + anim_0413, + anim_0414, + anim_0415, + anim_0416, + anim_0417, + anim_0418, + anim_0419, + anim_0420, + anim_0421, + anim_0422, + anim_0423, + anim_0424, + anim_0425, + anim_0426, + anim_0427, + anim_0428, + anim_0429, + anim_0430, + anim_0431, + anim_0432, + anim_0433, + anim_0434, + anim_0435, + anim_0436, + anim_0437, + anim_0438, + anim_0439, + anim_0440, + anim_0441, + anim_0442, + anim_0443, + anim_0444, + anim_0445, + anim_0446, + anim_0447, + anim_0448, + anim_0449, + anim_0450, + anim_0451, + anim_0452, + anim_0453, + anim_0454, + anim_0455, + anim_0456, + anim_0457, + anim_0458, + anim_0459, + anim_0460, + anim_0461, + anim_0462, + anim_0463, + anim_0464, + anim_0465, + anim_0466, + anim_0467, + anim_0468, + anim_0469, + anim_0470, + anim_0471, + anim_0472, + anim_0473, + anim_0474, + anim_0475, + anim_0476, + anim_0477, + anim_0478, + anim_0479, + anim_0480, + anim_0481, + anim_0482, + anim_0483, + anim_0484, + anim_0485, + anim_0486, + anim_0487, + anim_0488, + anim_0489, + anim_0490, + anim_0491, + anim_0492, + anim_0493, + anim_0494, + anim_0495, + anim_0496, + anim_0497, + anim_0498, + anim_0499, + anim_0498, + anim_0501, + anim_0502, + anim_0503, + anim_0504, + anim_0505, + anim_0506, + anim_0507, + anim_0508, + anim_0509, + anim_0510, + anim_0511, + anim_0512, + anim_0513, + anim_0514, + anim_0515, + anim_0516, + anim_0517, + anim_0518, + anim_0519, + anim_0520, + anim_0521, + anim_0522, + anim_0523, + anim_0524, + anim_0525, + anim_0526, + anim_0527, + anim_0528, + anim_0529, + anim_0530, + anim_0531, + anim_0532, + anim_0533, + anim_0534, + anim_0535, + anim_0536, + anim_0537, + anim_0538, + anim_0539, + anim_0540, + anim_0541, + anim_0542, + anim_0543, + anim_0544, + anim_0545, + anim_0546, + anim_0547, + anim_0548, + anim_0549, + anim_0550, + anim_0551, + anim_0552, + anim_0553, + anim_0554, + anim_0555, + anim_0556, + anim_0557, + anim_0558, + anim_0559, + anim_0560, + anim_0561, + anim_0562, + anim_0563, + anim_0564, + anim_0565, + anim_0566, + anim_0567, + anim_0568, + anim_0569, + anim_0570, + anim_0571, + anim_0572, + anim_0573, + anim_0574, + anim_0575, + anim_0576, + anim_0577, + anim_0578, + anim_0579, + anim_0580, + anim_0581, + anim_0582, + anim_0583, + anim_0584, + anim_0585, + anim_0586, + anim_0587, + anim_0588, + anim_0589, + anim_0590, + anim_0591, + anim_0592, + anim_0593, + anim_0594, + anim_0595, + anim_0596, + anim_0597, + anim_0598, + anim_0599, + anim_0600, + anim_0601, + anim_0602, + anim_0603, + anim_0604, + anim_0605, + anim_0606, + anim_0607, + anim_0608, + anim_0609, + anim_0610, + anim_0611, + anim_0612, + anim_0613, + anim_0614, + anim_0615, + anim_0616, + anim_0617, + anim_0618, + anim_0619, + anim_0620, + anim_0621, + anim_0622, + anim_0623, + anim_0624, + anim_0625, + anim_0626, + anim_0627, + anim_0628, + anim_0629, + anim_0630, + anim_0631, + anim_0632, + anim_0633, + anim_0634, + anim_0635, + anim_0636, + anim_0637, + anim_0638, + anim_0639, + anim_0640, + anim_0641, + anim_0642, + anim_0643, + anim_0644, + anim_0645, + anim_0646, + anim_0647, + anim_0648, + anim_0649, + anim_0650, + anim_0651, + anim_0652, + anim_0653, + anim_0654, + anim_0655, + anim_0656, + anim_0657, + anim_0658, + anim_0659, + anim_0660, + anim_0661, + anim_0662, + anim_0663, + anim_0664, + anim_0665, + anim_0666, + anim_0667, + anim_0668, + anim_0669, + anim_0670, + anim_0671, + anim_0672, + anim_0673, + anim_0674, + anim_0675, + anim_0676, + anim_0677, + anim_0678, + anim_0679, + anim_0680, + anim_0681, + anim_0682, + anim_0683, + anim_0684, + anim_0685, + anim_0686, + anim_0687, + anim_0688, + anim_0689, + anim_0690, + anim_0691, + anim_0692, + anim_0693, + anim_0694, + anim_0695, + anim_0696, + anim_0697, + anim_0698, + anim_0699, + anim_0700, + anim_0701, + anim_0702, + anim_0703, + anim_0704, + anim_0705, + anim_0706, + anim_0707, + anim_0708, + anim_0709, + anim_0710, + anim_0711, + anim_0712, + anim_0713, + anim_0714, + anim_0715, + anim_0716, + anim_0717, + anim_0718, + anim_0719, + anim_0720, + anim_0721, + anim_0722, + anim_0723, + anim_0724, + anim_0725, + anim_0726, + anim_0727, + anim_0728, + anim_0729, + anim_0730, + anim_0731, + anim_0732, + anim_0733, + anim_0734, + anim_0735, + anim_0736, + anim_0737, + anim_0738, + anim_0739, + anim_0740, + anim_0741, + anim_0742, + anim_0743, + anim_0744, + anim_0745, + anim_0746, + anim_0747, + anim_0748, + anim_0749, + anim_0750, + anim_0751, + anim_0752, + anim_0753, + anim_0754, + anim_0755, + anim_0756, + anim_0757, + anim_0758, + anim_0759, + anim_0760, + anim_0761, + anim_0762, + anim_0763, + anim_0764, + anim_0765, + anim_0766, + anim_0767, + anim_0768, + anim_0769, + anim_0770, + anim_0771, + anim_0772, + anim_0773, + anim_0774, + anim_0775, + anim_0776, + anim_0777, + anim_0778, + anim_0779, + anim_0780, + anim_0781, + anim_0782, + anim_0783, + anim_0784, + anim_0785, + anim_0786, + anim_0787, + anim_0788, + anim_0789, + anim_0790, + anim_0791, + anim_0792, + anim_0793, + anim_0794, + anim_0795, + anim_0796, + anim_0797, + anim_0798, + anim_0799, + anim_0800, + anim_0801, + anim_0802, + anim_0736, + anim_0735, + anim_0805, + anim_0806, + anim_0807, + anim_0808, + anim_0809, + anim_0810, + anim_0811, + anim_0812, + anim_0813, + anim_0814, + anim_0815, + anim_0816, + anim_0817, + anim_0818, + anim_0819, + anim_0820, + anim_0821, + anim_0822, + anim_0823, + anim_0824, + anim_0825, + anim_0826, + anim_0827, + anim_0828, + anim_0829, + anim_0830, + anim_0831, + anim_0832, + anim_0833, + anim_0834, + anim_0835, + anim_0836, + anim_0837, + anim_0838, + anim_0839, + anim_0840, + anim_0841, + anim_0842, + anim_0843, + anim_0844, + anim_0845, + anim_0846, + anim_0847, + anim_0848, + anim_0849, + anim_0850, + anim_0851, + anim_0852, + anim_0853, + anim_0854, + anim_0855, + anim_0856, + anim_0857, + anim_0858, + anim_0859, + anim_0860, + anim_0861, + anim_0862, + anim_0863, + anim_0864, + anim_0865, + anim_0866, + anim_0867, + anim_0868, + anim_0869, + anim_0870, + anim_0871, + anim_0872, + anim_0873, + anim_0874, + anim_0875, + anim_0876, + anim_0877, + anim_0878, + anim_0879, + anim_0880, + anim_0881, + anim_0882, + anim_0883, + anim_0884, + anim_0885, + anim_0886, + anim_0887, + anim_0888, + anim_0889, + anim_0890, + anim_0891, + anim_0892, + anim_0893, + anim_0894, + anim_0895, + anim_0896, + anim_0897, + anim_0898, + anim_0899, + anim_0900, + anim_0901, + anim_0902, + anim_0903, + anim_0904, + anim_0905, + anim_0906, + anim_0907, +}; diff --git a/sa1/src/data/animations/animations.c b/sa1/src/data/animations/animations.c new file mode 100644 index 0000000000..a1542da107 --- /dev/null +++ b/sa1/src/data/animations/animations.c @@ -0,0 +1,28989 @@ +#include "global.h" +#include "constants/anim_commands.h" + +const s32 anim_0000__v0_l0[] = { // 0x080DC188 + PALETTE(0, 16, 0x0) + TILES(0x0, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(6, 0) + + TILES(0x14, 16) + SHOW_FRAME(6, 1) + + TILES(0x24, 16) + SHOW_FRAME(6, 2) + + TILES(0x34, 16) + SHOW_FRAME(6, 3) + + TILES(0x44, 20) + SHOW_FRAME(6, 4) + + TILES(0x58, 20) + SHOW_FRAME(6, 5) + + TILES(0x6C, 16) + SHOW_FRAME(6, 6) + + TILES(0x7C, 20) + SHOW_FRAME(6, 7) + + TILES(0x0, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(6, 0) + + TILES(0x14, 16) + SHOW_FRAME(6, 1) + + TILES(0x90, 16) + SHOW_FRAME(6, 8) + + TILES(0xA0, 16) + SHOW_FRAME(6, 9) + + TILES(0x44, 20) + SHOW_FRAME(6, 4) + + TILES(0x58, 20) + SHOW_FRAME(6, 5) + + TILES(0x6C, 16) + SHOW_FRAME(6, 6) + + TILES(0x7C, 20) + SHOW_FRAME(6, 7) + + TILES(0x0, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(6, 0) + + TILES(0x14, 16) + SHOW_FRAME(6, 1) + + TILES(0x24, 16) + SHOW_FRAME(6, 2) + + TILES(0x34, 16) + SHOW_FRAME(6, 3) + + TILES(0x44, 20) + SHOW_FRAME(6, 4) + + TILES(0x58, 20) + SHOW_FRAME(6, 5) + + TILES(0x6C, 16) + SHOW_FRAME(6, 6) + + TILES(0x7C, 20) + SHOW_FRAME(6, 7) + + TILES(0xB0, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(6, 10) + + TILES(0xC4, 20) + SHOW_FRAME(12, 11) + + TILES(0xD8, 20) + SHOW_FRAME(6, 12) + + TILES(0xC4, 20) + SHOW_FRAME(6, 11) + + TILES(0xD8, 20) + SHOW_FRAME(6, 12) + + TILES(0xC4, 20) + SHOW_FRAME(12, 11) + + TILES(0xB0, 20) + SHOW_FRAME(8, 10) + + TILES(0x0, 20) + SHOW_FRAME(6, 0) + + TILES(0x58, 20) + SHOW_FRAME(6, 5) + + TILES(0x6C, 16) + SHOW_FRAME(6, 6) + + TILES(0x7C, 20) + SHOW_FRAME(6, 7) + + JUMP_BACK(190) +}; + +const s32 * const anim_0000[1] = { + anim_0000__v0_l0, +}; + +const s32 anim_0001__v0_l0[] = { // 0x080DC48C + PALETTE(0, 16, 0x0) + TILES(0xEC, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(6, 0) + + TILES(0x100, 20) + SHOW_FRAME(30, 1) + + TILES(0x114, 30) + SHOW_FRAME(10, 2) + + TILES(0x132, 20) + SHOW_FRAME(6, 3) + + TILES(0x100, 20) + SHOW_FRAME(40, 1) + + TILES(0x146, 20) + SHOW_FRAME(6, 4) + + TILES(0x15A, 25) + SHOW_FRAME(8, 5) + + TILES(0x173, 25) + SHOW_FRAME(8, 6) + + TILES(0x15A, 25) + SHOW_FRAME(8, 5) + + TILES(0x173, 25) + SHOW_FRAME(8, 6) + + TILES(0x15A, 25) + SHOW_FRAME(8, 5) + + TILES(0x173, 25) + SHOW_FRAME(8, 6) + + TILES(0x18C, 20) + SHOW_FRAME(6, 7) + + TILES(0x1A0, 20) + SHOW_FRAME(12, 8) + + TILES(0x1B4, 20) + SHOW_FRAME(6, 9) + + TILES(0x1C8, 20) + SHOW_FRAME(6, 10) + + TILES(0x1DC, 20) + SHOW_FRAME(6, 11) + + TILES(0x1F0, 20) + SHOW_FRAME(20, 12) + + TILES(0x204, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(8, 13) + + TILES(0x218, 20) + SHOW_FRAME(30, 14) + + TILES(0x204, 20) + SHOW_FRAME(8, 13) + TILES(0x100, 20) + SHOW_FRAME(20, 1) + + TILES(0x22C, 20) + SHOW_FRAME(8, 15) + + TILES(0x240, 20) + SHOW_FRAME(12, 16) + + TILES(0x254, 20) + SHOW_FRAME(8, 17) + + TILES(0x240, 20) + SHOW_FRAME(8, 16) + + TILES(0x254, 20) + SHOW_FRAME(8, 17) + + TILES(0x240, 20) + SHOW_FRAME(20, 16) + + TILES(0x22C, 20) + SHOW_FRAME(6, 15) + + TILES(0x100, 20) + SHOW_FRAME(80, 1) + + TILES(0x22C, 20) + SHOW_FRAME(8, 15) + + TILES(0x240, 20) + SHOW_FRAME(12, 16) + + TILES(0x254, 20) + SHOW_FRAME(8, 17) + + TILES(0x240, 20) + SHOW_FRAME(8, 16) + + TILES(0x254, 20) + SHOW_FRAME(8, 17) + + TILES(0x240, 20) + SHOW_FRAME(20, 16) + + TILES(0x22C, 20) + SHOW_FRAME(6, 15) + + JUMP_BACK(80) +}; + +const s32 * const anim_0001[1] = { + anim_0001__v0_l0, +}; + +const s32 anim_0002__v0_l0[] = { // 0x080DC7A0 + PALETTE(0, 16, 0x0) + TILES(0x268, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x27C, 20) + SHOW_FRAME(1, 1) + TILES(0x290, 20) + SHOW_FRAME(12, 2) + + TILES(0x2A4, 20) + SHOW_FRAME(12, 3) + + TILES(0x290, 20) + SHOW_FRAME(12, 2) + + TILES(0x2B8, 20) + SHOW_FRAME(12, 4) + + JUMP_BACK(20) +}; + +const s32 anim_0002__v1_l0[] = { // 0x080DC838 + PALETTE(0, 16, 0x0) + TILES(0x27C, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(1, 1) + + TILES(0x268, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0002[2] = { + anim_0002__v0_l0, + anim_0002__v1_l0, +}; + +const s32 anim_0003__v0_l0[] = { // 0x080DC884 + PALETTE(0, 16, 0x0) + TILES(0x2CC, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x2DC, 16) + SHOW_FRAME(1, 1) + + TILES(0x2EC, 16) + SHOW_FRAME(1, 2) + TILES(0x2FC, 16) + SHOW_FRAME(1, 3) + + JUMP_BACK(5) +}; + +const s32 anim_0003__v1_l0[] = { // 0x080DC8F4 + PALETTE(0, 16, 0x0) + TILES(0x2DC, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 1) + + TILES(0x2CC, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0003[2] = { + anim_0003__v0_l0, + anim_0003__v1_l0, +}; + +const s32 anim_0004__v0_l0[] = { // 0x080DC940 + PALETTE(0, 16, 0x0) + TILES(0x30C, 64) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x34C, 64) + SHOW_FRAME(3, 1) + + TILES(0x38C, 64) + SHOW_FRAME(3, 2) + + TILES(0x3CC, 64) + SHOW_FRAME(3, 3) + + TILES(0x40C, 64) + SHOW_FRAME(3, 4) + + TILES(0x44C, 64) + SHOW_FRAME(3, 5) + + TILES(0x48C, 64) + SHOW_FRAME(3, 6) + + TILES(0x4CC, 64) + SHOW_FRAME(3, 7) + + JUMP_BACK(46) +}; + +const s32 * const anim_0004[1] = { + anim_0004__v0_l0, +}; + +const s32 anim_0005__v0_l0[] = { // 0x080DCA04 + PALETTE(0, 16, 0x0) + TILES(0x50C, 64) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x54C, 64) + SHOW_FRAME(2, 1) + + TILES(0x58C, 64) + SHOW_FRAME(2, 2) + + TILES(0x5CC, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0005[1] = { + anim_0005__v0_l0, +}; + +const s32 anim_0006__v0_l0[] = { // 0x080DCA78 + PALETTE(0, 16, 0x0) + TILES(0x60C, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x620, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0006[1] = { + anim_0006__v0_l0, +}; + +const s32 anim_0007__v0_l0[] = { // 0x080DCAC0 + PALETTE(0, 16, 0x0) + TILES(0x634, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x648, 20) + SHOW_FRAME(1, 1) + + TILES(0x65C, 25) + SHOW_FRAME(1, 2) + + TILES(0x675, 20) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0007[1] = { + anim_0007__v0_l0, +}; + +const s32 anim_0008__v0_l0[] = { // 0x080DCB30 + PALETTE(0, 16, 0x0) + TILES(0x689, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x699, 16) + SHOW_FRAME(2, 1) + + TILES(0x6A9, 16) + SHOW_FRAME(2, 2) + + TILES(0x6B9, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 * const anim_0008[1] = { + anim_0008__v0_l0, +}; + +const s32 anim_0009__v0_l0[] = { // 0x080DCBB0 + PALETTE(0, 16, 0x0) + TILES(0x6C9, 25) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(2, 0) + TILES(0x6E2, 25) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(4, 1) + + TILES(0x6FB, 25) + SHOW_FRAME(4, 2) + + JUMP_BACK(13) +}; + +const s32 anim_0009__v1_l0[] = { // 0x080DCC18 + PALETTE(0, 16, 0x0) + TILES(0x6C9, 25) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0009[2] = { + anim_0009__v0_l0, + anim_0009__v1_l0, +}; + +const s32 anim_0010__v0_l0[] = { // 0x080DCC50 + PALETTE(0, 16, 0x0) + TILES(0x714, 24) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 0) + TILES(0x72C, 18) + SHOW_FRAME(3, 1) + + TILES(0x73E, 18) + SHOW_FRAME(3, 2) + + TILES(0x750, 18) + SHOW_FRAME(3, 3) + + JUMP_BACK(15) +}; + +const s32 anim_0010__v1_l0[] = { // 0x080DCCC0 + PALETTE(0, 16, 0x0) + TILES(0x714, 24) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(2, 0) + + TILES(0x762, 20) + SHOW_FRAME(2, 4) + + TILES(0x776, 20) + SHOW_FRAME(2, 5) + + TILES(0x78A, 20) + SHOW_FRAME(3, 6) + + TILES(0x79E, 20) + SHOW_FRAME(3, 7) + + TILES(0x7B2, 20) + SHOW_FRAME(3, 8) + + END() +}; + +const s32 anim_0010__v2_l0[] = { // 0x080DCD54 + PALETTE(0, 16, 0x0) + TILES(0x7C6, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 9) + + TILES(0x7DA, 20) + SHOW_FRAME(3, 10) + + TILES(0x7EE, 20) + SHOW_FRAME(3, 11) + + JUMP_BACK(21) +}; + +const s32 anim_0010__v3_l0[] = { // 0x080DCDB0 + PALETTE(0, 16, 0x0) + TILES(0x802, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 12) + + TILES(0x816, 16) + HITBOX(0, -6, 0, 6, 24) + SHOW_FRAME(1, 13) + + TILES(0x826, 16) + HITBOX(0, -6, 0, 6, 24) + SHOW_FRAME(1, 14) + + TILES(0x816, 16) + HITBOX(0, -6, 0, 6, 24) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 * const anim_0010[4] = { + anim_0010__v0_l0, + anim_0010__v1_l0, + anim_0010__v2_l0, + anim_0010__v3_l0, +}; + +const s32 anim_0011__v0_l0[] = { // 0x080DCE50 + PALETTE(0, 16, 0x0) + TILES(0x836, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(4, 0) + + TILES(0x84A, 16) + SHOW_FRAME(4, 1) + + TILES(0x85A, 20) + SHOW_FRAME(4, 2) + + TILES(0x86E, 20) + SHOW_FRAME(4, 3) + + TILES(0x882, 20) + SHOW_FRAME(4, 4) + + TILES(0x896, 20) + SHOW_FRAME(4, 5) + + TILES(0x8AA, 20) + SHOW_FRAME(4, 6) + + TILES(0x8BE, 20) + SHOW_FRAME(4, 7) + + TILES(0x8D2, 20) + SHOW_FRAME(4, 8) + + TILES(0x8E6, 16) + SHOW_FRAME(4, 9) + + TILES(0x8F6, 20) + SHOW_FRAME(4, 10) + + END() +}; + +const s32 * const anim_0011[1] = { + anim_0011__v0_l0, +}; + +const s32 anim_0012__v0_l0[] = { // 0x080DCF4C + PALETTE(0, 16, 0x0) + TILES(0x90A, 16) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(4, 0) + TILES(0x91A, 16) + SHOW_FRAME(6, 1) + + TILES(0x92A, 16) + SHOW_FRAME(6, 2) + + TILES(0x93A, 16) + SHOW_FRAME(6, 3) + + TILES(0x94A, 16) + SHOW_FRAME(6, 4) + + TILES(0x95A, 16) + SHOW_FRAME(6, 5) + + TILES(0x96A, 16) + SHOW_FRAME(6, 6) + + TILES(0x97A, 16) + SHOW_FRAME(6, 7) + + TILES(0x98A, 16) + SHOW_FRAME(6, 8) + + JUMP_BACK(40) +}; + +const s32 anim_0012__v1_l0[] = { // 0x080DD020 + PALETTE(0, 16, 0x0) + TILES(0x90A, 16) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0012[2] = { + anim_0012__v0_l0, + anim_0012__v1_l0, +}; + +const s32 anim_0013__v0_l0[] = { // 0x080DD058 + PALETTE(0, 16, 0x0) + TILES(0x99A, 20) + HITBOX(0, -5, -13, 7, 16) + SHOW_FRAME(2, 0) + TILES(0x9AE, 25) + HITBOX(0, -5, -13, 7, 16) + SHOW_FRAME(2, 1) + + TILES(0x9C7, 25) + SHOW_FRAME(2, 2) + + TILES(0x9E0, 25) + SHOW_FRAME(2, 3) + + TILES(0x9F9, 20) + SHOW_FRAME(2, 4) + + TILES(0xA0D, 25) + SHOW_FRAME(2, 5) + + TILES(0xA26, 25) + SHOW_FRAME(2, 6) + + TILES(0xA3F, 25) + SHOW_FRAME(2, 7) + + TILES(0xA58, 20) + SHOW_FRAME(2, 8) + + JUMP_BACK(43) +}; + +const s32 anim_0013__v1_l0[] = { // 0x080DD138 + PALETTE(0, 16, 0x0) + TILES(0xA6C, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(2, 9) + + END() +}; + +const s32 * const anim_0013[2] = { + anim_0013__v0_l0, + anim_0013__v1_l0, +}; + +const s32 anim_0014__v0_l0[] = { // 0x080DD170 + PALETTE(0, 16, 0x0) + TILES(0xA80, 25) + HITBOX(0, -16, -13, -4, 16) + SHOW_FRAME(2, 0) + TILES(0xA99, 25) + HITBOX(0, -16, -13, -4, 16) + SHOW_FRAME(3, 1) + + TILES(0xAB2, 25) + SHOW_FRAME(3, 2) + + TILES(0xACB, 25) + SHOW_FRAME(3, 3) + + TILES(0xAE4, 20) + SHOW_FRAME(3, 4) + + TILES(0xAF8, 25) + SHOW_FRAME(3, 5) + + TILES(0xB11, 25) + SHOW_FRAME(3, 6) + + TILES(0xB2A, 25) + SHOW_FRAME(3, 7) + + TILES(0xB43, 30) + SHOW_FRAME(3, 8) + + JUMP_BACK(43) +}; + +const s32 anim_0014__v1_l0[] = { // 0x080DD250 + PALETTE(0, 16, 0x0) + TILES(0xB61, 25) + HITBOX(0, -14, -13, -2, 16) + SHOW_FRAME(2, 9) + + END() +}; + +const s32 * const anim_0014[2] = { + anim_0014__v0_l0, + anim_0014__v1_l0, +}; + +const s32 anim_0017__v0_l0[] = { // 0x080DD288 + PALETTE(0, 16, 0x0) + TILES(0xB7A, 24) + HITBOX(0, -6, -14, 6, 14) + PLAY_SOUND(191) + SHOW_FRAME(6, 0) + + TILES(0xB92, 24) + SHOW_FRAME(6, 1) + + END() +}; + +const s32 * const anim_0017[1] = { + anim_0017__v0_l0, +}; + +const s32 anim_0018__v0_l0[] = { // 0x080DD2D8 + PALETTE(0, 16, 0x0) + TILES(0xBAA, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0xBBA, 16) + SHOW_FRAME(2, 1) + + TILES(0xBCA, 16) + SHOW_FRAME(2, 2) + + TILES(0xBDA, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 anim_0018__v1_l0[] = { // 0x080DD354 + PALETTE(0, 16, 0x0) + TILES(0xBEA, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 4) + + TILES(0xBFA, 16) + HITBOX(0, -7, -9, 5, 8) + SHOW_FRAME(2, 5) + + TILES(0xC0A, 16) + HITBOX(0, -7, -9, 5, 8) + SHOW_FRAME(2, 6) + + TILES(0xC1A, 16) + HITBOX(0, -7, -9, 5, 8) + SHOW_FRAME(2, 7) + + END() +}; + +const s32 * const anim_0018[2] = { + anim_0018__v0_l0, + anim_0018__v1_l0, +}; + +const s32 anim_0019__v0_l0[] = { // 0x080DD3F8 + PALETTE(0, 16, 0x0) + TILES(0xC2A, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0xC3E, 25) + SHOW_FRAME(3, 1) + + TILES(0xC57, 20) + SHOW_FRAME(3, 2) + + TILES(0xC6B, 25) + SHOW_FRAME(3, 3) + TILES(0xC84, 20) + SHOW_FRAME(3, 4) + + JUMP_BACK(5) +}; + +const s32 * const anim_0019[1] = { + anim_0019__v0_l0, +}; + +const s32 anim_0021__v0_l0[] = { // 0x080DD480 + PALETTE(0, 16, 0x0) + TILES(0xC98, 20) + SHOW_FRAME(3, 0) + + TILES(0xCAC, 25) + SHOW_FRAME(3, 1) + + TILES(0xC98, 20) + SHOW_FRAME(12, 0) + + TILES(0xCC5, 16) + SHOW_FRAME(2, 2) + TILES(0xCD5, 20) + SHOW_FRAME(3, 3) + + TILES(0xCE9, 20) + SHOW_FRAME(3, 4) + + JUMP_BACK(10) +}; + +const s32 * const anim_0021[1] = { + anim_0021__v0_l0, +}; + +const s32 anim_0022__v0_l0[] = { // 0x080DD510 + PALETTE(0, 16, 0x0) + TILES(0xCFD, 20) + SHOW_FRAME(3, 0) + + TILES(0xD11, 20) + SHOW_FRAME(3, 1) + + TILES(0xD25, 20) + SHOW_FRAME(3, 2) + + TILES(0xD39, 20) + SHOW_FRAME(3, 3) + + TILES(0xD4D, 20) + SHOW_FRAME(3, 4) + + TILES(0xD61, 20) + SHOW_FRAME(3, 5) + + TILES(0xD75, 25) + SHOW_FRAME(3, 6) + + TILES(0xD8E, 25) + SHOW_FRAME(3, 7) + TILES(0xDA7, 20) + SHOW_FRAME(3, 8) + + TILES(0xDBB, 20) + SHOW_FRAME(3, 9) + + TILES(0xDCF, 20) + SHOW_FRAME(3, 10) + + TILES(0xDE3, 20) + SHOW_FRAME(3, 11) + + TILES(0xDF7, 20) + SHOW_FRAME(3, 12) + + TILES(0xE0B, 20) + SHOW_FRAME(3, 13) + + TILES(0xD75, 25) + SHOW_FRAME(3, 6) + + TILES(0xE1F, 25) + SHOW_FRAME(3, 14) + + JUMP_BACK(40) +}; + +const s32 * const anim_0022[1] = { + anim_0022__v0_l0, +}; + +const s32 anim_0023__v0_l0[] = { // 0x080DD668 + PALETTE(0, 16, 0x0) + TILES(0xE38, 20) + SHOW_FRAME(4, 0) + + TILES(0xE4C, 20) + SHOW_FRAME(4, 1) + + TILES(0xE60, 24) + SHOW_FRAME(4, 2) + + TILES(0xE78, 24) + SHOW_FRAME(4, 3) + + TILES(0xE90, 24) + SHOW_FRAME(4, 4) + + TILES(0xEA8, 24) + SHOW_FRAME(4, 5) + + TILES(0xEC0, 20) + SHOW_FRAME(4, 6) + + TILES(0xED4, 20) + SHOW_FRAME(4, 7) + + TILES(0xEE8, 20) + SHOW_FRAME(4, 8) + + TILES(0xEFC, 20) + SHOW_FRAME(8, 9) + + TILES(0xEE8, 20) + SHOW_FRAME(4, 8) + + TILES(0xF10, 20) + SHOW_FRAME(3, 10) + + TILES(0xF24, 20) + SHOW_FRAME(3, 11) + + TILES(0xF38, 25) + SHOW_FRAME(4, 12) + + TILES(0xF51, 25) + SHOW_FRAME(8, 13) + + TILES(0xF6A, 25) + SHOW_FRAME(4, 14) + + TILES(0xF83, 25) + SHOW_FRAME(4, 15) + + TILES(0xF9C, 25) + SHOW_FRAME(4, 16) + + END() +}; + +const s32 * const anim_0023[1] = { + anim_0023__v0_l0, +}; + +const s32 anim_0024__v0_l0[] = { // 0x080DD7E4 + PALETTE(0, 16, 0x0) + TILES(0xFB5, 25) + SHOW_FRAME(3, 0) + + TILES(0xFCE, 25) + SHOW_FRAME(3, 1) + + TILES(0xFE7, 25) + SHOW_FRAME(3, 2) + + TILES(0x1000, 25) + SHOW_FRAME(20, 3) + + TILES(0xFB5, 25) + SHOW_FRAME(3, 0) + + TILES(0x1019, 20) + SHOW_FRAME(3, 4) + + TILES(0x102D, 20) + SHOW_FRAME(30, 5) + + END() +}; + +const s32 * const anim_0024[1] = { + anim_0024__v0_l0, +}; + +const s32 anim_0025__v0_l0[] = { // 0x080DD884 + PALETTE(0, 16, 0x70) + TILES(0x1041, 18) + SHOW_FRAME(3, 0) + + TILES(0x1053, 24) + SHOW_FRAME(3, 1) + + TILES(0x106B, 18) + SHOW_FRAME(3, 2) + + TILES(0x107D, 24) + SHOW_FRAME(3, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0025[1] = { + anim_0025__v0_l0, +}; + +const s32 anim_0026__v0_l0[] = { // 0x080DD8EC + PALETTE(0, 16, 0x70) + TILES(0x1095, 35) + SHOW_FRAME(20, 0) + + TILES(0x10B8, 36) + SHOW_FRAME(10, 1) + + TILES(0x10DC, 42) + SHOW_FRAME(8, 2) + + TILES(0x1106, 42) + SHOW_FRAME(7, 3) + + TILES(0x1130, 42) + SHOW_FRAME(5, 4) + + TILES(0x115A, 42) + SHOW_FRAME(3, 5) + TILES(0x1184, 42) + SHOW_FRAME(2, 6) + + TILES(0x11AE, 42) + SHOW_FRAME(2, 7) + + TILES(0x11D8, 42) + SHOW_FRAME(2, 8) + + JUMP_BACK(15) +}; + +const s32 * const anim_0026[1] = { + anim_0026__v0_l0, +}; + +const s32 anim_0027__v0_l0[] = { // 0x080DD9B8 + PALETTE(0, 16, 0x0) + TILES(0x1202, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x1242, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v1_l0[] = { // 0x080DDA00 + PALETTE(0, 16, 0x0) + TILES(0x1282, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0x12C2, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v2_l0[] = { // 0x080DDA48 + PALETTE(0, 16, 0x0) + TILES(0x1302, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0x1342, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v3_l0[] = { // 0x080DDA90 + PALETTE(0, 16, 0x0) + TILES(0x1382, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0x13C2, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v4_l0[] = { // 0x080DDAD8 + PALETTE(0, 16, 0x0) + TILES(0x1402, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0x1442, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v5_l0[] = { // 0x080DDB20 + PALETTE(0, 16, 0x0) + TILES(0x1482, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0x14C2, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v6_l0[] = { // 0x080DDB68 + PALETTE(0, 16, 0x0) + TILES(0x1502, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 12) + + TILES(0x1542, 64) + SHOW_FRAME(2, 13) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v7_l0[] = { // 0x080DDBB0 + PALETTE(0, 16, 0x0) + TILES(0x1582, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 14) + + TILES(0x15C2, 64) + SHOW_FRAME(2, 15) + + JUMP_BACK(16) +}; + +const s32 anim_0027__v8_l0[] = { // 0x080DDBF8 + PALETTE(0, 16, 0x0) + TILES(0x1602, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 16) + + TILES(0x1642, 64) + SHOW_FRAME(2, 17) + + JUMP_BACK(16) +}; + +const s32 * const anim_0027[9] = { + anim_0027__v0_l0, + anim_0027__v1_l0, + anim_0027__v2_l0, + anim_0027__v3_l0, + anim_0027__v4_l0, + anim_0027__v5_l0, + anim_0027__v6_l0, + anim_0027__v7_l0, + anim_0027__v8_l0, +}; + +const s32 anim_0028__v0_l0[] = { // 0x080DDC64 + PALETTE(0, 16, 0x0) + TILES(0x1682, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x16C2, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0028__v1_l0[] = { // 0x080DDCAC + PALETTE(0, 16, 0x0) + TILES(0x1702, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0x1742, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0028__v2_l0[] = { // 0x080DDCF4 + PALETTE(0, 16, 0x0) + TILES(0x1782, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0x17C2, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0028__v3_l0[] = { // 0x080DDD3C + PALETTE(0, 16, 0x0) + TILES(0x1802, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0x1842, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0028__v4_l0[] = { // 0x080DDD84 + PALETTE(0, 16, 0x0) + TILES(0x1882, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0x18C2, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0028__v5_l0[] = { // 0x080DDDCC + PALETTE(0, 16, 0x0) + TILES(0x1902, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0x1942, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(16) +}; + +const s32 anim_0028__v6_l0[] = { // 0x080DDE14 + PALETTE(0, 16, 0x0) + TILES(0x1982, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 12) + + TILES(0x19C2, 64) + SHOW_FRAME(2, 13) + + JUMP_BACK(16) +}; + +const s32 anim_0028__v7_l0[] = { // 0x080DDE5C + PALETTE(0, 16, 0x0) + TILES(0x1A02, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 14) + + TILES(0x1A42, 64) + SHOW_FRAME(2, 15) + + JUMP_BACK(16) +}; + +const s32 * const anim_0028[8] = { + anim_0028__v0_l0, + anim_0028__v1_l0, + anim_0028__v2_l0, + anim_0028__v3_l0, + anim_0028__v4_l0, + anim_0028__v5_l0, + anim_0028__v6_l0, + anim_0028__v7_l0, +}; + +const s32 anim_0029__v0_l0[] = { // 0x080DDEC4 + PALETTE(0, 16, 0x0) + TILES(0x1A82, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + TILES(0x1AC2, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 1) + + TILES(0x1B02, 64) + SHOW_FRAME(2, 2) + + JUMP_BACK(13) +}; + +const s32 anim_0029__v1_l0[] = { // 0x080DDF2C + PALETTE(0, 16, 0x0) + TILES(0x1A82, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0029[2] = { + anim_0029__v0_l0, + anim_0029__v1_l0, +}; + +const s32 anim_0030__v0_l0[] = { // 0x080DDF64 + PALETTE(0, 16, 0x0) + TILES(0x1B42, 64) + HITBOX(0, -22, -22, 22, 22) + SHOW_FRAME(2, 0) + + TILES(0x1B82, 64) + SHOW_FRAME(2, 1) + + TILES(0x1BC2, 64) + SHOW_FRAME(2, 2) + + TILES(0x1C02, 64) + SHOW_FRAME(2, 3) + + TILES(0x1C42, 64) + SHOW_FRAME(2, 4) + + TILES(0x1C82, 64) + SHOW_FRAME(2, 5) + + TILES(0x1CC2, 64) + SHOW_FRAME(2, 6) + + TILES(0x1D02, 64) + SHOW_FRAME(2, 7) + + TILES(0x1D42, 64) + SHOW_FRAME(2, 8) + + TILES(0x1D82, 64) + SHOW_FRAME(2, 9) + + TILES(0x1DC2, 64) + SHOW_FRAME(2, 10) + + JUMP_BACK(61) +}; + +const s32 * const anim_0030[1] = { + anim_0030__v0_l0, +}; + +const s32 anim_0031__v0_l0[] = { // 0x080DE064 + PALETTE(0, 16, 0x0) + TILES(0x1E02, 64) + HITBOX(0, -20, -20, 20, 20) + SHOW_FRAME(2, 0) + + TILES(0x1E42, 64) + SHOW_FRAME(2, 1) + + TILES(0x1E82, 64) + SHOW_FRAME(2, 2) + + TILES(0x1EC2, 64) + SHOW_FRAME(3, 3) + + TILES(0x1F02, 64) + SHOW_FRAME(3, 4) + + TILES(0x1F42, 64) + SHOW_FRAME(3, 5) + + TILES(0x1F82, 64) + SHOW_FRAME(3, 6) + + TILES(0x1FC2, 64) + SHOW_FRAME(3, 7) + + TILES(0x2002, 64) + SHOW_FRAME(3, 8) + + TILES(0x2042, 64) + SHOW_FRAME(3, 9) + + TILES(0x2082, 64) + SHOW_FRAME(3, 10) + + TILES(0x1EC2, 64) + SHOW_FRAME(3, 3) + + TILES(0x20C2, 64) + SHOW_FRAME(3, 11) + + TILES(0x2102, 64) + SHOW_FRAME(3, 12) + + TILES(0x2142, 64) + SHOW_FRAME(3, 13) + + END() +}; + +// Bug/Leftover? +const s32 anim_0031__v0_l1[] = { // 0x080DE064 +}; + +const s32 * const anim_0031[2] = { + anim_0031__v0_l0, + anim_0031__v0_l1, +}; + +const s32 anim_0032__v0_l0[] = { // 0x080DE1B4 + PALETTE(0, 16, 0x0) + TILES(0x2182, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(3, 0) + + TILES(0x21C2, 64) + SHOW_FRAME(3, 1) + + TILES(0x2202, 64) + SHOW_FRAME(3, 2) + + TILES(0x2242, 64) + SHOW_FRAME(3, 3) + + TILES(0x2282, 64) + SHOW_FRAME(3, 4) + + TILES(0x22C2, 64) + SHOW_FRAME(3, 5) + + TILES(0x2302, 64) + SHOW_FRAME(3, 6) + + JUMP_BACK(41) +}; + +const s32 * const anim_0032[1] = { + anim_0032__v0_l0, +}; + +const s32 anim_0033__v0_l0[] = { // 0x080DE264 + PALETTE(0, 16, 0x0) + TILES(0x2342, 64) + SHOW_FRAME(6, 0) + TILES(0x2382, 64) + SHOW_FRAME(3, 1) + + TILES(0x23C2, 64) + SHOW_FRAME(3, 2) + + JUMP_BACK(10) +}; + +const s32 anim_0033__v1_l0[] = { // 0x080DE2B4 + PALETTE(0, 16, 0x0) + TILES(0x2342, 64) + SHOW_FRAME(6, 0) + + END() +}; + +const s32 * const anim_0033[2] = { + anim_0033__v0_l0, + anim_0033__v1_l0, +}; + +const s32 anim_0034__v0_l0[] = { // 0x080DE2E0 + PALETTE(0, 16, 0x0) + TILES(0x2402, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x2442, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0034__v1_l0[] = { // 0x080DE328 + PALETTE(0, 16, 0x0) + TILES(0x2482, 64) + SHOW_FRAME(2, 2) + + TILES(0x24C2, 64) + SHOW_FRAME(2, 3) + + TILES(0x2502, 64) + SHOW_FRAME(2, 4) + + TILES(0x2542, 64) + SHOW_FRAME(2, 5) + + TILES(0x2582, 64) + SHOW_FRAME(2, 6) + + TILES(0x25C2, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(33) +}; + +const s32 * const anim_0034[2] = { + anim_0034__v0_l0, + anim_0034__v1_l0, +}; + +const s32 anim_0035__v0_l0[] = { // 0x080DE3BC + PALETTE(0, 16, 0x70) + TILES(0x2602, 16) + SHOW_FRAME(1, 0) + + TILES(0x2612, 16) + SHOW_FRAME(1, 1) + + TILES(0x2622, 16) + SHOW_FRAME(16, 2) + + TILES(0x2612, 16) + SHOW_FRAME(1, 1) + + TILES(0x2602, 16) + SHOW_FRAME(2, 0) + + TILES(0x2632, 20) + SHOW_FRAME(2, 3) + + TILES(0x2646, 25) + SHOW_FRAME(20, 4) + TILES(0x265F, 20) + SHOW_FRAME(6, 5) + + TILES(0x2673, 25) + SHOW_FRAME(6, 6) + + TILES(0x268C, 25) + SHOW_FRAME(6, 7) + + TILES(0x26A5, 20) + SHOW_FRAME(6, 8) + + TILES(0x26B9, 20) + SHOW_FRAME(6, 9) + + TILES(0x2646, 25) + SHOW_FRAME(6, 4) + + JUMP_BACK(30) +}; + +const s32 * const anim_0035[1] = { + anim_0035__v0_l0, +}; + +const s32 anim_0036__v0_l0[] = { // 0x080DE4D8 + PALETTE(0, 16, 0x0) + TILES(0x26CD, 16) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x26DD, 16) + SHOW_FRAME(3, 1) + + TILES(0x26ED, 16) + SHOW_FRAME(3, 2) + + TILES(0x26FD, 16) + SHOW_FRAME(3, 3) + + TILES(0x270D, 16) + SHOW_FRAME(3, 4) + + TILES(0x271D, 16) + SHOW_FRAME(3, 5) + + TILES(0x272D, 16) + SHOW_FRAME(3, 6) + + TILES(0x273D, 16) + SHOW_FRAME(3, 7) + + JUMP_BACK(46) +}; + +const s32 anim_0036__v1_l0[] = { // 0x080DE598 + PALETTE(0, 16, 0x0) + TILES(0x274D, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(3, 8) + + TILES(0x2761, 20) + SHOW_FRAME(3, 9) + + TILES(0x2775, 16) + SHOW_FRAME(3, 10) + + TILES(0x2785, 20) + SHOW_FRAME(3, 11) + + TILES(0x2799, 20) + SHOW_FRAME(3, 12) + + TILES(0x27AD, 20) + SHOW_FRAME(3, 13) + + TILES(0x27C1, 20) + SHOW_FRAME(3, 14) + + TILES(0x27D5, 20) + SHOW_FRAME(3, 15) + + JUMP_BACK(46) +}; + +const s32 anim_0036__v2_l0[] = { // 0x080DE658 + PALETTE(0, 16, 0x0) + TILES(0x27E9, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(3, 16) + + TILES(0x27FD, 20) + SHOW_FRAME(3, 17) + + TILES(0x2811, 25) + SHOW_FRAME(3, 18) + + TILES(0x282A, 20) + SHOW_FRAME(3, 19) + + TILES(0x283E, 20) + SHOW_FRAME(3, 20) + + TILES(0x2852, 20) + SHOW_FRAME(3, 21) + + TILES(0x2866, 16) + SHOW_FRAME(3, 22) + + TILES(0x2876, 20) + SHOW_FRAME(3, 23) + + JUMP_BACK(46) +}; + +const s32 * const anim_0036[3] = { + anim_0036__v0_l0, + anim_0036__v1_l0, + anim_0036__v2_l0, +}; + +const s32 anim_0037__v0_l0[] = { // 0x080DE724 + PALETTE(0, 16, 0x0) + TILES(0x288A, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x289E, 25) + SHOW_FRAME(2, 1) + + TILES(0x28B7, 25) + SHOW_FRAME(4, 2) + + TILES(0x28D0, 25) + SHOW_FRAME(1, 3) + + TILES(0x28E9, 20) + SHOW_FRAME(1, 4) + TILES(0x28FD, 30) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(1, 5) + + TILES(0x291B, 30) + SHOW_FRAME(1, 6) + + TILES(0x2939, 30) + SHOW_FRAME(1, 7) + + JUMP_BACK(18) +}; + +const s32 * const anim_0037[1] = { + anim_0037__v0_l0, +}; + +const s32 anim_0038__v0_l0[] = { // 0x080DE7F4 + PALETTE(0, 16, 0x0) + TILES(0x2957, 30) + HITBOX(0, -3, -18, 9, 14) + SHOW_FRAME(3, 0) + + TILES(0x2975, 30) + SHOW_FRAME(3, 1) + + TILES(0x2993, 30) + SHOW_FRAME(3, 2) + + TILES(0x29B1, 24) + HITBOX(0, -3, -12, 9, 14) + SHOW_FRAME(2, 3) + + TILES(0x29C9, 18) + SHOW_FRAME(2, 4) + + END() +}; + +const s32 * const anim_0038[1] = { + anim_0038__v0_l0, +}; + +const s32 anim_0039__v0_l0[] = { // 0x080DE884 + PALETTE(0, 16, 0x0) + TILES(0x29DB, 64) + SHOW_FRAME(2, 0) + + TILES(0x2A1B, 64) + SHOW_FRAME(2, 1) + + TILES(0x2A5B, 64) + SHOW_FRAME(2, 2) + + TILES(0x2A9B, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0039[1] = { + anim_0039__v0_l0, +}; + +const s32 anim_0040__v0_l0[] = { // 0x080DE8EC + PALETTE(0, 16, 0x0) + TILES(0x2ADB, 28) + HITBOX(0, -32, -22, -8, -4) + CMD_12(0x10) + SHOW_FRAME(3, 0) + + TILES(0x2AF7, 20) + HITBOX(0, -24, -22, -6, -4) + CMD_12(0x10) + SHOW_FRAME(3, 1) + + TILES(0x2B0B, 16) + HITBOX(0, -8, -22, 0, -4) + CMD_12(0x10) + SHOW_FRAME(3, 2) + + TILES(0x2B1B, 16) + HITBOX(0, 2, -22, 10, -4) + CMD_12(0x10) + SHOW_FRAME(3, 3) + + TILES(0x2B2B, 24) + HITBOX(0, 6, -22, 24, -4) + CMD_12(0x10) + SHOW_FRAME(3, 4) + + TILES(0x2B43, 28) + HITBOX(0, 8, -22, 32, -4) + CMD_12(0x10) + SHOW_FRAME(3, 5) + + TILES(0x2B5F, 20) + HITBOX(0, 6, -22, 24, -4) + CMD_12(0x13) + SHOW_FRAME(3, 6) + + TILES(0x2B73, 16) + HITBOX(0, 2, -22, 10, -4) + CMD_12(0x13) + SHOW_FRAME(3, 7) + + TILES(0x2B83, 20) + HITBOX(0, -8, -22, 0, -4) + CMD_12(0x13) + SHOW_FRAME(3, 8) + + TILES(0x2B97, 20) + HITBOX(0, -24, -22, -6, -4) + CMD_12(0x13) + SHOW_FRAME(3, 9) + + JUMP_BACK(103) +}; + +const s32 anim_0040__v1_l0[] = { // 0x080DEA90 + PALETTE(0, 16, 0x0) + TILES(0x2BAB, 28) + HITBOX(0, -8, 2, 8, 36) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 10) + + TILES(0x2BC7, 20) + HITBOX(0, -8, 2, 8, 24) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 11) + + TILES(0x2BDB, 16) + HITBOX(0, -8, -2, 8, 10) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 12) + + TILES(0x2BEB, 16) + HITBOX(0, -8, -10, 8, 2) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 13) + + TILES(0x2BFB, 24) + HITBOX(0, -8, -18, 8, 0) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 14) + + TILES(0x2C13, 28) + HITBOX(0, -8, -37, 8, -3) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 15) + + TILES(0x2C2F, 20) + HITBOX(0, -8, -22, 8, 0) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 16) + + TILES(0x2C43, 16) + HITBOX(0, -8, -10, 8, 2) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 17) + + TILES(0x2C53, 20) + HITBOX(0, -8, -2, 8, 10) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 18) + + TILES(0x2C67, 20) + HITBOX(0, -8, 2, 8, 20) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 19) + + JUMP_BACK(103) +}; + +const s32 * const anim_0040[2] = { + anim_0040__v0_l0, + anim_0040__v1_l0, +}; + +const s32 anim_0041__v0_l0[] = { // 0x080DEC3C + PALETTE(0, 16, 0x0) + TILES(0x2C7B, 24) + HITBOX(0, -6, -19, 6, 7) + SHOW_FRAME(10, 0) + + TILES(0x2C93, 24) + SHOW_FRAME(10, 1) + + TILES(0x2CAB, 24) + SHOW_FRAME(10, 2) + + TILES(0x2C93, 24) + SHOW_FRAME(10, 1) + + JUMP_BACK(26) +}; + +const s32 anim_0041__v1_l0[] = { // 0x080DECAC + PALETTE(0, 16, 0x0) + TILES(0x2CC3, 24) + HITBOX(0, -6, -19, 6, 7) + SHOW_FRAME(5, 3) + + TILES(0x2C93, 24) + SHOW_FRAME(5, 1) + + TILES(0x2CDB, 24) + SHOW_FRAME(5, 4) + + TILES(0x2C93, 24) + SHOW_FRAME(5, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0041[2] = { + anim_0041__v0_l0, + anim_0041__v1_l0, +}; + +const s32 anim_0042__v0_l0[] = { // 0x080DED24 + PALETTE(0, 16, 0x0) + TILES(0x2CF3, 36) + HITBOX(0, -6, -12, 6, 10) + SHOW_FRAME(5, 0) + + TILES(0x2D17, 25) + SHOW_FRAME(5, 1) + + TILES(0x2D30, 16) + SHOW_FRAME(5, 2) + + TILES(0x2D40, 25) + SHOW_FRAME(5, 3) + + TILES(0x2D59, 36) + SHOW_FRAME(5, 4) + + TILES(0x2D7D, 20) + SHOW_FRAME(5, 5) + + TILES(0x2D91, 16) + SHOW_FRAME(5, 6) + + TILES(0x2DA1, 20) + SHOW_FRAME(5, 7) + + JUMP_BACK(46) +}; + +const s32 * const anim_0042[1] = { + anim_0042__v0_l0, +}; + +const s32 anim_0043__v0_l0[] = { // 0x080DEDE8 + PALETTE(0, 16, 0x0) + TILES(0x2DB5, 30) + SHOW_FRAME(8, 0) + + TILES(0x2DD3, 30) + SHOW_FRAME(8, 1) + + TILES(0x2DF1, 30) + SHOW_FRAME(8, 2) + + TILES(0x2DD3, 30) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0043[1] = { + anim_0043__v0_l0, +}; + +const s32 anim_0044__v0_l0[] = { // 0x080DEE50 + PALETTE(0, 16, 0x0) + TILES(0x2E0F, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x2E23, 20) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0044__v1_l0[] = { // 0x080DEE98 + PALETTE(0, 16, 0x0) + TILES(0x2E37, 30) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(2, 2) + + TILES(0x2E55, 28) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 * const anim_0044[2] = { + anim_0044__v0_l0, + anim_0044__v1_l0, +}; + +const s32 anim_0045__v0_l0[] = { // 0x080DEEE8 + PALETTE(0, 16, 0x0) + TILES(0x2E71, 20) + HITBOX(0, -6, -16, 6, 8) + SHOW_FRAME(3, 0) + + TILES(0x2E85, 24) + SHOW_FRAME(3, 1) + + TILES(0x2E9D, 20) + SHOW_FRAME(3, 2) + + TILES(0x2E71, 20) + SHOW_FRAME(3, 0) + + TILES(0x2E85, 24) + SHOW_FRAME(3, 1) + + TILES(0x2E9D, 20) + SHOW_FRAME(3, 2) + + TILES(0x2EB1, 25) + SHOW_FRAME(3, 3) + + TILES(0x2ECA, 20) + SHOW_FRAME(3, 4) + + TILES(0x2EDE, 25) + SHOW_FRAME(3, 5) + + TILES(0x2EF7, 20) + SHOW_FRAME(3, 6) + + TILES(0x2EB1, 25) + SHOW_FRAME(3, 3) + + TILES(0x2ECA, 20) + SHOW_FRAME(3, 4) + + TILES(0x2EDE, 25) + SHOW_FRAME(3, 5) + + TILES(0x2EF7, 20) + SHOW_FRAME(3, 6) + + TILES(0x2EB1, 25) + SHOW_FRAME(3, 3) + + TILES(0x2ECA, 20) + SHOW_FRAME(3, 4) + + TILES(0x2EDE, 25) + SHOW_FRAME(3, 5) + + TILES(0x2EF7, 20) + SHOW_FRAME(3, 6) + TILES(0x2F0B, 20) + HITBOX(0, -6, -16, 6, 8) + SHOW_FRAME(3, 7) + + TILES(0x2F1F, 20) + SHOW_FRAME(3, 8) + + TILES(0x2F33, 20) + SHOW_FRAME(3, 9) + + JUMP_BACK(18) +}; + +const s32 anim_0045__v1_l0[] = { // 0x080DF0B8 + PALETTE(0, 16, 0x0) + TILES(0x2F47, 20) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(3, 10) + + TILES(0x2F5B, 16) + SHOW_FRAME(1, 11) + + TILES(0x2F6B, 16) + SHOW_FRAME(1, 12) + + TILES(0x2F7B, 16) + SHOW_FRAME(4, 13) + + TILES(0x2F6B, 16) + SHOW_FRAME(2, 12) + + TILES(0x2F5B, 16) + SHOW_FRAME(2, 11) + + END() +}; + +const s32 * const anim_0045[2] = { + anim_0045__v0_l0, + anim_0045__v1_l0, +}; + +const s32 anim_0049__v0_l0[] = { // 0x080DF154 + PALETTE(0, 16, 0x0) + TILES(0x2F8B, 16) + HITBOX(0, -6, -12, 6, 10) + SHOW_FRAME(2, 0) + + TILES(0x2F9B, 16) + SHOW_FRAME(2, 1) + + TILES(0x2FAB, 16) + SHOW_FRAME(2, 2) + + TILES(0x2FBB, 16) + SHOW_FRAME(2, 3) + TILES(0x2FCB, 20) + HITBOX(0, -8, -14, 6, 12) + SHOW_FRAME(2, 4) + + TILES(0x2FDF, 24) + SHOW_FRAME(2, 5) + + TILES(0x2FF7, 20) + SHOW_FRAME(2, 6) + + JUMP_BACK(18) +}; + +const s32 anim_0049__v1_l0[] = { // 0x080DF20C + PALETTE(0, 16, 0x0) + TILES(0x300B, 25) + HITBOX(0, -6, -12, 6, 12) + SHOW_FRAME(2, 7) + + TILES(0x3024, 25) + SHOW_FRAME(2, 8) + + JUMP_BACK(16) +}; + +const s32 anim_0049__v2_l0[] = { // 0x080DF254 + PALETTE(0, 16, 0x0) + TILES(0x303D, 25) + HITBOX(0, -6, -12, 6, 12) + SHOW_FRAME(2, 9) + + END() +}; + +const s32 * const anim_0049[3] = { + anim_0049__v0_l0, + anim_0049__v1_l0, + anim_0049__v2_l0, +}; + +const s32 anim_0050__v0_l0[] = { // 0x080DF290 + PALETTE(0, 16, 0x0) + TILES(0x3056, 16) + HITBOX(0, -8, -8, 10, 10) + HITBOX(1, -14, -14, 14, 14) + SHOW_FRAME(1, 0) + + TILES(0x3066, 12) + SHOW_FRAME(1, 1) + + TILES(0x3072, 16) + SHOW_FRAME(1, 2) + + TILES(0x3082, 16) + SHOW_FRAME(1, 3) + + TILES(0x3092, 16) + SHOW_FRAME(1, 4) + + TILES(0x30A2, 12) + SHOW_FRAME(1, 5) + + TILES(0x30AE, 16) + SHOW_FRAME(1, 6) + + TILES(0x30BE, 20) + SHOW_FRAME(1, 7) + TILES(0x30D2, 16) + HITBOX(0, -8, -8, 8, 8) + SHOW_FRAME(2, 8) + + TILES(0x30E2, 16) + SHOW_FRAME(2, 9) + + TILES(0x30F2, 16) + SHOW_FRAME(2, 10) + + TILES(0x3102, 16) + SHOW_FRAME(2, 11) + + JUMP_BACK(23) +}; + +const s32 anim_0050__v1_l0[] = { // 0x080DF3B8 + PALETTE(1, 16, 0x50) + TILES(0x3112, 8) + SHOW_FRAME(2, 12) + + TILES(0x311A, 16) + SHOW_FRAME(2, 13) + + TILES(0x312A, 16) + SHOW_FRAME(2, 14) + + TILES(0x313A, 16) + SHOW_FRAME(2, 15) + + TILES(0x314A, 16) + SHOW_FRAME(2, 16) + + TILES(0x315A, 16) + SHOW_FRAME(2, 17) + + TILES(0x316A, 12) + SHOW_FRAME(2, 18) + + TILES(0x3176, 16) + SHOW_FRAME(2, 19) + + END() +}; + +const s32 * const anim_0050[2] = { + anim_0050__v0_l0, + anim_0050__v1_l0, +}; + +const s32 anim_0051__v0_l0[] = { // 0x080DF470 + PALETTE(0, 16, 0x0) + TILES(0x3186, 16) + HITBOX(0, -8, -4, 6, 12) + HITBOX(1, -10, -8, 12, 16) + SHOW_FRAME(6, 0) + + TILES(0x3196, 16) + HITBOX(0, -6, -2, 6, 16) + SHOW_FRAME(6, 1) + + TILES(0x31A6, 16) + SHOW_FRAME(6, 2) + + TILES(0x31B6, 12) + HITBOX(0, -6, -2, 6, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(6, 3) + + END() +}; + +const s32 * const anim_0051[1] = { + anim_0051__v0_l0, +}; + +const s32 anim_0052__v0_l0[] = { // 0x080DF510 + PALETTE(0, 16, 0x0) + TILES(0x31C2, 16) + HITBOX(0, -6, -2, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x31D2, 30) + HITBOX(0, -14, -10, 14, 16) + HITBOX(1, -23, -20, 6, 16) + SHOW_FRAME(2, 1) + + TILES(0x31F0, 18) + SHOW_FRAME(2, 2) + + TILES(0x3202, 24) + HITBOX(0, -14, -10, 14, 16) + HITBOX(1, -20, -15, 6, 16) + SHOW_FRAME(2, 3) + + TILES(0x321A, 30) + SHOW_FRAME(2, 4) + + TILES(0x3238, 30) + HITBOX(0, -6, -10, 6, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(2, 5) + + TILES(0x3256, 36) + SHOW_FRAME(1, 6) + + TILES(0x327A, 25) + SHOW_FRAME(1, 7) + + TILES(0x3293, 30) + SHOW_FRAME(1, 8) + + TILES(0x32B1, 30) + SHOW_FRAME(2, 9) + + TILES(0x32CF, 20) + SHOW_FRAME(3, 10) + + END() +}; + +const s32 * const anim_0052[1] = { + anim_0052__v0_l0, +}; + +const s32 anim_0053__v0_l0[] = { // 0x080DF654 + PALETTE(0, 16, 0x0) + TILES(0x32E3, 24) + HITBOX(0, -14, -2, 14, 16) + HITBOX(1, -21, -8, 3, 16) + SHOW_FRAME(2, 0) + + TILES(0x32FB, 24) + SHOW_FRAME(2, 1) + + TILES(0x3313, 24) + SHOW_FRAME(2, 2) + + JUMP_BACK(24) +}; + +const s32 anim_0053__v1_l0[] = { // 0x080DF6BC + PALETTE(0, 16, 0x0) + TILES(0x332B, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(2, 3) + + TILES(0x333B, 16) + SHOW_FRAME(2, 4) + + TILES(0x334B, 16) + SHOW_FRAME(2, 5) + + END() +}; + +const s32 * const anim_0053[2] = { + anim_0053__v0_l0, + anim_0053__v1_l0, +}; + +const s32 anim_0055__v0_l0[] = { // 0x080DF71C + PALETTE(0, 16, 0x0) + TILES(0x335B, 16) + HITBOX(0, -6, -8, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x336B, 16) + SHOW_FRAME(2, 1) + + TILES(0x337B, 16) + SHOW_FRAME(2, 2) + + TILES(0x338B, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0055[1] = { + anim_0055__v0_l0, +}; + +const s32 anim_0081__v0_l0[] = { // 0x080DF790 + PALETTE(0, 16, 0x0) + TILES(0x339B, 25) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x33B4, 30) + SHOW_FRAME(4, 1) + + TILES(0x33D2, 36) + SHOW_FRAME(4, 2) + + TILES(0x33F6, 25) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0081[1] = { + anim_0081__v0_l0, +}; + +const s32 anim_0082__v0_l0[] = { // 0x080DF804 + PALETTE(0, 16, 0x0) + TILES(0x340F, 30) + HITBOX(0, -6, -13, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x342D, 36) + SHOW_FRAME(4, 1) + + TILES(0x3451, 36) + SHOW_FRAME(4, 2) + + TILES(0x3475, 24) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0082[1] = { + anim_0082__v0_l0, +}; + +const s32 anim_0083__v0_l0[] = { // 0x080DF878 + PALETTE(0, 16, 0x0) + TILES(0x348D, 20) + HITBOX(0, -6, -12, 6, 6) + SHOW_FRAME(2, 0) + + TILES(0x34A1, 20) + SHOW_FRAME(2, 1) + + TILES(0x34B5, 20) + SHOW_FRAME(2, 2) + + TILES(0x34C9, 20) + SHOW_FRAME(2, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0083[1] = { + anim_0083__v0_l0, +}; + +const s32 anim_0084__v0_l0[] = { // 0x080DF8EC + PALETTE(0, 16, 0x0) + TILES(0x34DD, 20) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x34F1, 30) + SHOW_FRAME(2, 1) + + TILES(0x350F, 35) + SHOW_FRAME(2, 2) + + TILES(0x3532, 16) + SHOW_FRAME(2, 3) + + END() +}; + +const s32 * const anim_0084[1] = { + anim_0084__v0_l0, +}; + +const s32 anim_0085__v0_l0[] = { // 0x080DF968 + PALETTE(0, 16, 0x70) + TILES(0x3542, 24) + SHOW_FRAME(3, 0) + + TILES(0x355A, 24) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0085[1] = { + anim_0085__v0_l0, +}; + +const s32 anim_0086__v0_l0[] = { // 0x080DF9A8 + PALETTE(0, 16, 0x70) + TILES(0x3572, 16) + SHOW_FRAME(2, 0) + + TILES(0x3582, 16) + SHOW_FRAME(2, 1) + + END() +}; + +const s32 anim_0086__v1_l0[] = { // 0x080DF9E0 + PALETTE(0, 16, 0x70) + TILES(0x3592, 16) + SHOW_FRAME(2, 2) + + END() +}; + +const s32 * const anim_0086[2] = { + anim_0086__v0_l0, + anim_0086__v1_l0, +}; + +const s32 anim_0087__v0_l0[] = { // 0x080DFA0C + PALETTE(0, 16, 0x0) + TILES(0x35A2, 15) + SHOW_FRAME(3, 0) + + TILES(0x35B1, 15) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0087[1] = { + anim_0087__v0_l0, +}; + +const s32 anim_0088__v0_l0[] = { // 0x080DFA4C + PALETTE(0, 16, 0x70) + TILES(0x35C0, 20) + SHOW_FRAME(6, 0) + + TILES(0x35D4, 20) + SHOW_FRAME(6, 1) + + TILES(0x35E8, 20) + SHOW_FRAME(6, 2) + TILES(0x35FC, 20) + SHOW_FRAME(3, 3) + + TILES(0x3610, 20) + SHOW_FRAME(3, 4) + + JUMP_BACK(10) +}; + +const s32 * const anim_0088[1] = { + anim_0088__v0_l0, +}; + +const s32 anim_0089__v0_l0[] = { // 0x080DFAC8 + PALETTE(0, 16, 0x70) + TILES(0x3624, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0089__v1_l0[] = { // 0x080DFAEC + PALETTE(0, 16, 0x70) + TILES(0x3638, 20) + SHOW_FRAME(4, 1) + + TILES(0x364C, 20) + SHOW_FRAME(4, 2) + + TILES(0x3660, 20) + SHOW_FRAME(4, 3) + + TILES(0x3674, 20) + SHOW_FRAME(40, 4) + + END() +}; + +const s32 * const anim_0089[2] = { + anim_0089__v0_l0, + anim_0089__v1_l0, +}; + +const s32 anim_0091__v0_l0[] = { // 0x080DFB54 + PALETTE(0, 16, 0x70) + TILES(0x3688, 16) + SHOW_FRAME(3, 0) + + TILES(0x3698, 16) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0091[1] = { + anim_0091__v0_l0, +}; + +const s32 anim_0093__v0_l0[] = { // 0x080DFB94 + PALETTE(0, 16, 0x0) + TILES(0x36A8, 25) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0093__v1_l0[] = { // 0x080DFBC4 + PALETTE(0, 16, 0x0) + TILES(0x36C1, 16) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0093__v2_l0[] = { // 0x080DFBF4 + PALETTE(0, 16, 0x0) + TILES(0x36D1, 16) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0093__v3_l0[] = { // 0x080DFC24 + PALETTE(0, 16, 0x0) + TILES(0x36E1, 25) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0093__v4_l0[] = { // 0x080DFC54 + PALETTE(0, 16, 0x0) + TILES(0x36FA, 20) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0093__v5_l0[] = { // 0x080DFC84 + PALETTE(0, 16, 0x0) + TILES(0x370E, 16) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0093__v6_l0[] = { // 0x080DFCB4 + PALETTE(0, 16, 0x0) + TILES(0x371E, 16) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0093__v7_l0[] = { // 0x080DFCE4 + PALETTE(0, 16, 0x0) + TILES(0x372E, 20) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 * const anim_0093[8] = { + anim_0093__v0_l0, + anim_0093__v1_l0, + anim_0093__v2_l0, + anim_0093__v3_l0, + anim_0093__v4_l0, + anim_0093__v5_l0, + anim_0093__v6_l0, + anim_0093__v7_l0, +}; + +const s32 anim_0096__v0_l0[] = { // 0x080DFD34 + PALETTE(0, 16, 0x70) + TILES(0x3742, 64) + SHOW_FRAME(2, 0) + + TILES(0x3782, 64) + SHOW_FRAME(2, 1) + + TILES(0x37C2, 64) + SHOW_FRAME(2, 2) + + TILES(0x3802, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0096[1] = { + anim_0096__v0_l0, +}; + +const s32 anim_0097__v0_l0[] = { // 0x080DFD9C + PALETTE(0, 16, 0x0) + TILES(0x3842, 8) + SHOW_FRAME(1, 0) + + TILES(0x384A, 8) + SHOW_FRAME(1, 1) + + TILES(0x3842, 8) + SHOW_FRAME(1, 0) + + TILES(0x3852, 12) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0097[1] = { + anim_0097__v0_l0, +}; + +const s32 anim_0098__v0_l0[] = { // 0x080DFE00 + PALETTE(0, 16, 0x0) + TILES(0x385E, 64) + SHOW_FRAME(3, 0) + + END() +}; + +const s32 * const anim_0098[1] = { + anim_0098__v0_l0, +}; + +const s32 anim_0099__v0_l0[] = { // 0x080DFE28 + PALETTE(2, 16, 0x10) + TILES(0x389E, 24) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(8, 0) + + TILES(0x38B6, 24) + SHOW_FRAME(8, 1) + + TILES(0x38CE, 30) + SHOW_FRAME(8, 2) + + TILES(0x38EC, 24) + SHOW_FRAME(8, 3) + + TILES(0x3904, 24) + SHOW_FRAME(8, 4) + + TILES(0x391C, 24) + SHOW_FRAME(8, 5) + + TILES(0x3934, 30) + SHOW_FRAME(8, 6) + + TILES(0x3952, 24) + SHOW_FRAME(8, 7) + + TILES(0x389E, 24) + SHOW_FRAME(8, 0) + + TILES(0x396A, 24) + SHOW_FRAME(8, 8) + + TILES(0x3982, 30) + SHOW_FRAME(8, 9) + + TILES(0x39A0, 24) + SHOW_FRAME(8, 10) + + TILES(0x3904, 24) + SHOW_FRAME(8, 4) + + TILES(0x391C, 24) + SHOW_FRAME(8, 5) + + TILES(0x3934, 30) + SHOW_FRAME(8, 6) + + TILES(0x3952, 24) + SHOW_FRAME(8, 7) + + JUMP_BACK(86) +}; + +const s32 * const anim_0099[1] = { + anim_0099__v0_l0, +}; + +const s32 anim_0100__v0_l0[] = { // 0x080DFF8C + PALETTE(2, 16, 0x10) + TILES(0x39B8, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x39CC, 36) + SHOW_FRAME(10, 1) + + TILES(0x39F0, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(12, 2) + + TILES(0x3A04, 20) + SHOW_FRAME(10, 3) + + TILES(0x3A18, 20) + SHOW_FRAME(10, 4) + + TILES(0x3A04, 20) + SHOW_FRAME(10, 3) + + TILES(0x39F0, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(10, 2) + + TILES(0x3A04, 20) + SHOW_FRAME(10, 3) + + TILES(0x3A18, 20) + SHOW_FRAME(10, 4) + + TILES(0x3A04, 20) + SHOW_FRAME(10, 3) + + TILES(0x3A2C, 16) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(6, 5) + + TILES(0x3A3C, 12) + SHOW_FRAME(6, 6) + + TILES(0x3A2C, 16) + SHOW_FRAME(6, 5) + + TILES(0x3A48, 20) + SHOW_FRAME(6, 7) + + TILES(0x3A5C, 16) + SHOW_FRAME(6, 8) + + TILES(0x3A6C, 16) + SHOW_FRAME(6, 9) + + TILES(0x3A5C, 16) + SHOW_FRAME(6, 8) + + TILES(0x3A48, 20) + SHOW_FRAME(6, 7) + + TILES(0x3A2C, 16) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(6, 5) + + TILES(0x3A3C, 12) + SHOW_FRAME(6, 6) + + TILES(0x3A2C, 16) + SHOW_FRAME(6, 5) + + TILES(0x3A48, 20) + SHOW_FRAME(6, 7) + + TILES(0x3A5C, 16) + SHOW_FRAME(6, 8) + + TILES(0x3A6C, 16) + SHOW_FRAME(6, 9) + + TILES(0x3A5C, 16) + SHOW_FRAME(6, 8) + + TILES(0x3A48, 20) + SHOW_FRAME(30, 7) + + TILES(0x3A7C, 20) + SHOW_FRAME(10, 10) + + TILES(0x3A90, 20) + SHOW_FRAME(10, 11) + + TILES(0x3AA4, 24) + SHOW_FRAME(6, 12) + TILES(0x3ABC, 28) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(6, 13) + + TILES(0x3AD8, 28) + SHOW_FRAME(6, 14) + + TILES(0x3AF4, 28) + SHOW_FRAME(6, 15) + + TILES(0x3B10, 28) + SHOW_FRAME(6, 16) + + TILES(0x3B2C, 28) + SHOW_FRAME(6, 17) + + TILES(0x3B48, 28) + SHOW_FRAME(6, 18) + + TILES(0x3B64, 28) + SHOW_FRAME(6, 19) + + TILES(0x3B80, 28) + SHOW_FRAME(6, 20) + + TILES(0x3ABC, 28) + SHOW_FRAME(6, 13) + + TILES(0x3B9C, 28) + SHOW_FRAME(6, 21) + + TILES(0x3BB8, 28) + SHOW_FRAME(6, 22) + + TILES(0x3BD4, 28) + SHOW_FRAME(6, 23) + + TILES(0x3B2C, 28) + SHOW_FRAME(6, 17) + + TILES(0x3B48, 28) + SHOW_FRAME(6, 18) + + TILES(0x3B64, 28) + SHOW_FRAME(6, 19) + + TILES(0x3BF0, 28) + SHOW_FRAME(6, 24) + + JUMP_BACK(83) +}; + +const s32 * const anim_0100[1] = { + anim_0100__v0_l0, +}; + +const s32 anim_0101__v0_l0[] = { // 0x080E0370 + PALETTE(2, 16, 0x10) + TILES(0x3C0C, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x3C20, 25) + SHOW_FRAME(2, 1) + TILES(0x3C39, 25) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(10, 2) + + TILES(0x3C52, 25) + SHOW_FRAME(10, 3) + + TILES(0x3C6B, 25) + SHOW_FRAME(10, 4) + + TILES(0x3C84, 25) + SHOW_FRAME(10, 5) + + JUMP_BACK(23) +}; + +const s32 anim_0101__v1_l0[] = { // 0x080E0414 + PALETTE(2, 16, 0x10) + TILES(0x3C20, 25) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(2, 1) + + TILES(0x3C0C, 20) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 * const anim_0101[2] = { + anim_0101__v0_l0, + anim_0101__v1_l0, +}; + +const s32 anim_0102__v0_l0[] = { // 0x080E0460 + PALETTE(2, 16, 0x10) + TILES(0x3C9D, 20) + HITBOX(0, -6, -4, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x3CB1, 24) + SHOW_FRAME(1, 1) + TILES(0x3CC9, 18) + SHOW_FRAME(6, 2) + + TILES(0x3CDB, 18) + SHOW_FRAME(6, 3) + + TILES(0x3CED, 18) + SHOW_FRAME(6, 4) + + TILES(0x3CFF, 18) + SHOW_FRAME(6, 5) + + TILES(0x3D11, 18) + SHOW_FRAME(6, 6) + + TILES(0x3D23, 18) + SHOW_FRAME(6, 7) + + TILES(0x3D35, 18) + SHOW_FRAME(6, 8) + + TILES(0x3D47, 18) + SHOW_FRAME(6, 9) + + TILES(0x3CC9, 18) + SHOW_FRAME(6, 2) + + TILES(0x3D59, 18) + SHOW_FRAME(6, 10) + + TILES(0x3D6B, 18) + SHOW_FRAME(6, 11) + + TILES(0x3D7D, 18) + SHOW_FRAME(6, 12) + + TILES(0x3D11, 18) + SHOW_FRAME(6, 6) + + TILES(0x3D23, 18) + SHOW_FRAME(6, 7) + + TILES(0x3D35, 18) + SHOW_FRAME(6, 8) + + TILES(0x3D47, 18) + SHOW_FRAME(6, 9) + + JUMP_BACK(80) +}; + +const s32 anim_0102__v1_l0[] = { // 0x080E05E8 + PALETTE(2, 16, 0x10) + TILES(0x3CB1, 24) + HITBOX(0, -6, -4, 6, 16) + SHOW_FRAME(1, 1) + + TILES(0x3C9D, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0102[2] = { + anim_0102__v0_l0, + anim_0102__v1_l0, +}; + +const s32 anim_0103__v0_l0[] = { // 0x080E0634 + PALETTE(2, 16, 0x10) + TILES(0x3D8F, 64) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x3DCF, 64) + SHOW_FRAME(3, 1) + + TILES(0x3E0F, 64) + SHOW_FRAME(3, 2) + + TILES(0x3E4F, 64) + SHOW_FRAME(3, 3) + + TILES(0x3E8F, 64) + SHOW_FRAME(3, 4) + + TILES(0x3ECF, 64) + SHOW_FRAME(3, 5) + + TILES(0x3F0F, 64) + SHOW_FRAME(3, 6) + + TILES(0x3F4F, 64) + SHOW_FRAME(3, 7) + + TILES(0x3D8F, 64) + SHOW_FRAME(3, 0) + + TILES(0x3F8F, 64) + SHOW_FRAME(3, 8) + + TILES(0x3FCF, 64) + SHOW_FRAME(3, 9) + + TILES(0x400F, 64) + SHOW_FRAME(3, 10) + + TILES(0x3E8F, 64) + SHOW_FRAME(3, 4) + + TILES(0x3ECF, 64) + SHOW_FRAME(3, 5) + + TILES(0x3F0F, 64) + SHOW_FRAME(3, 6) + + TILES(0x3F4F, 64) + SHOW_FRAME(3, 7) + + JUMP_BACK(86) +}; + +const s32 * const anim_0103[1] = { + anim_0103__v0_l0, +}; + +const s32 anim_0104__v0_l0[] = { // 0x080E0798 + PALETTE(2, 16, 0x10) + TILES(0x404F, 64) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x408F, 64) + SHOW_FRAME(2, 1) + + TILES(0x40CF, 64) + SHOW_FRAME(2, 2) + + TILES(0x410F, 64) + SHOW_FRAME(2, 3) + + TILES(0x414F, 64) + SHOW_FRAME(2, 4) + + TILES(0x418F, 64) + SHOW_FRAME(2, 5) + + TILES(0x41CF, 64) + SHOW_FRAME(2, 6) + + TILES(0x420F, 64) + SHOW_FRAME(2, 7) + + TILES(0x404F, 64) + SHOW_FRAME(2, 0) + + TILES(0x424F, 64) + SHOW_FRAME(2, 8) + + TILES(0x428F, 64) + SHOW_FRAME(2, 9) + + TILES(0x42CF, 64) + SHOW_FRAME(2, 10) + + TILES(0x414F, 64) + SHOW_FRAME(2, 4) + + TILES(0x418F, 64) + SHOW_FRAME(2, 5) + + TILES(0x41CF, 64) + SHOW_FRAME(2, 6) + + TILES(0x420F, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(86) +}; + +const s32 * const anim_0104[1] = { + anim_0104__v0_l0, +}; + +const s32 anim_0105__v0_l0[] = { // 0x080E08FC + PALETTE(2, 16, 0x10) + TILES(0x430F, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x4323, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0105[1] = { + anim_0105__v0_l0, +}; + +const s32 anim_0106__v0_l0[] = { // 0x080E0944 + PALETTE(2, 16, 0x10) + TILES(0x4337, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x434B, 20) + SHOW_FRAME(1, 1) + + TILES(0x435F, 16) + SHOW_FRAME(1, 2) + + TILES(0x436F, 24) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0106[1] = { + anim_0106__v0_l0, +}; + +const s32 anim_0107__v0_l0[] = { // 0x080E09B4 + PALETTE(2, 16, 0x10) + TILES(0x4387, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x4397, 16) + SHOW_FRAME(2, 1) + + TILES(0x43A7, 16) + SHOW_FRAME(2, 2) + + TILES(0x43B7, 16) + SHOW_FRAME(2, 3) + + TILES(0x4387, 16) + SHOW_FRAME(2, 0) + + TILES(0x4397, 16) + SHOW_FRAME(2, 1) + + TILES(0x43A7, 16) + SHOW_FRAME(2, 2) + + TILES(0x43B7, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(49) +}; + +const s32 anim_0107__v1_l0[] = { // 0x080E0A80 + PALETTE(2, 16, 0x10) + TILES(0x43C7, 16) + SHOW_FRAME(2, 4) + + TILES(0x43D7, 16) + SHOW_FRAME(2, 5) + + TILES(0x43E7, 16) + SHOW_FRAME(2, 6) + + TILES(0x43F7, 16) + SHOW_FRAME(2, 7) + + TILES(0x4407, 16) + SHOW_FRAME(2, 8) + + TILES(0x4417, 16) + SHOW_FRAME(2, 9) + + TILES(0x4427, 16) + SHOW_FRAME(2, 10) + + TILES(0x4437, 16) + SHOW_FRAME(2, 11) + + JUMP_BACK(43) +}; + +const s32 * const anim_0107[2] = { + anim_0107__v0_l0, + anim_0107__v1_l0, +}; + +const s32 anim_0108__v0_l0[] = { // 0x080E0B3C + PALETTE(2, 16, 0x10) + TILES(0x4447, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(2, 0) + TILES(0x445B, 20) + SHOW_FRAME(4, 1) + + TILES(0x446F, 20) + SHOW_FRAME(4, 2) + + JUMP_BACK(10) +}; + +const s32 anim_0108__v1_l0[] = { // 0x080E0B98 + PALETTE(2, 16, 0x10) + TILES(0x4483, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 * const anim_0108[2] = { + anim_0108__v0_l0, + anim_0108__v1_l0, +}; + +const s32 anim_0109__v0_l0[] = { // 0x080E0BD0 + PALETTE(2, 16, 0x10) + TILES(0x4497, 21) + HITBOX(0, -6, -12, 6, 10) + SHOW_FRAME(2, 0) + + TILES(0x44AC, 21) + SHOW_FRAME(2, 1) + + TILES(0x44C1, 21) + SHOW_FRAME(2, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0109__v1_l0[] = { // 0x080E0C2C + PALETTE(2, 16, 0x10) + TILES(0x44D6, 18) + HITBOX(0, -6, -12, 6, 10) + SHOW_FRAME(2, 3) + + TILES(0x44E8, 24) + HITBOX(0, -6, -14, 6, 8) + SHOW_FRAME(3, 4) + + TILES(0x4500, 20) + SHOW_FRAME(3, 5) + + TILES(0x4514, 20) + SHOW_FRAME(4, 6) + + TILES(0x4528, 20) + HITBOX(0, -6, -16, 6, 6) + SHOW_FRAME(4, 7) + + TILES(0x453C, 25) + HITBOX(0, -6, -14, 6, 6) + SHOW_FRAME(4, 8) + + END() +}; + +const s32 anim_0109__v2_l0[] = { // 0x080E0CE4 + PALETTE(2, 16, 0x10) + TILES(0x4555, 28) + HITBOX(0, -6, -16, 6, 6) + SHOW_FRAME(3, 9) + + TILES(0x4571, 28) + SHOW_FRAME(3, 10) + + TILES(0x458D, 28) + SHOW_FRAME(3, 11) + + JUMP_BACK(21) +}; + +const s32 anim_0109__v3_l0[] = { // 0x080E0D40 + PALETTE(2, 16, 0x10) + TILES(0x45A9, 20) + SHOW_FRAME(2, 12) + + TILES(0x45BD, 24) + SHOW_FRAME(1, 13) + + TILES(0x45D5, 18) + SHOW_FRAME(1, 14) + + TILES(0x45BD, 24) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 * const anim_0109[4] = { + anim_0109__v0_l0, + anim_0109__v1_l0, + anim_0109__v2_l0, + anim_0109__v3_l0, +}; + +const s32 anim_0110__v0_l0[] = { // 0x080E0DB0 + PALETTE(2, 16, 0x10) + TILES(0x45E7, 25) + HITBOX(0, -6, -11, 6, 11) + SHOW_FRAME(4, 0) + + TILES(0x4600, 25) + SHOW_FRAME(4, 1) + + TILES(0x4619, 24) + SHOW_FRAME(4, 2) + + TILES(0x4631, 24) + SHOW_FRAME(4, 3) + + TILES(0x4649, 20) + SHOW_FRAME(4, 4) + + TILES(0x465D, 20) + SHOW_FRAME(4, 5) + + TILES(0x4671, 20) + SHOW_FRAME(4, 6) + + TILES(0x4685, 20) + SHOW_FRAME(4, 7) + + TILES(0x4699, 20) + SHOW_FRAME(4, 8) + + TILES(0x46AD, 20) + SHOW_FRAME(4, 9) + + TILES(0x46C1, 25) + SHOW_FRAME(4, 10) + + END() +}; + +const s32 * const anim_0110[1] = { + anim_0110__v0_l0, +}; + +const s32 anim_0111__v0_l0[] = { // 0x080E0EAC + PALETTE(2, 16, 0x10) + TILES(0x46DA, 24) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 0) + TILES(0x46F2, 30) + SHOW_FRAME(7, 1) + + TILES(0x4710, 30) + SHOW_FRAME(7, 2) + + TILES(0x472E, 30) + SHOW_FRAME(7, 3) + + TILES(0x474C, 24) + SHOW_FRAME(7, 4) + + TILES(0x4764, 24) + SHOW_FRAME(7, 5) + + TILES(0x477C, 24) + SHOW_FRAME(7, 6) + + TILES(0x4794, 24) + SHOW_FRAME(7, 7) + + TILES(0x47AC, 24) + SHOW_FRAME(7, 8) + + JUMP_BACK(40) +}; + +const s32 anim_0111__v1_l0[] = { // 0x080E0F80 + PALETTE(2, 16, 0x10) + TILES(0x46DA, 24) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0111[2] = { + anim_0111__v0_l0, + anim_0111__v1_l0, +}; + +const s32 anim_0112__v0_l0[] = { // 0x080E0FB8 + PALETTE(2, 16, 0x10) + TILES(0x47C4, 20) + HITBOX(0, -3, -10, 9, 16) + SHOW_FRAME(2, 0) + TILES(0x47D8, 28) + HITBOX(0, -3, -10, 9, 16) + SHOW_FRAME(2, 1) + + TILES(0x47F4, 30) + SHOW_FRAME(2, 2) + + TILES(0x4812, 35) + SHOW_FRAME(2, 3) + + TILES(0x4835, 28) + SHOW_FRAME(2, 4) + + TILES(0x4851, 24) + SHOW_FRAME(2, 5) + + TILES(0x4869, 24) + SHOW_FRAME(2, 6) + + TILES(0x4881, 30) + SHOW_FRAME(2, 7) + + TILES(0x489F, 28) + SHOW_FRAME(2, 8) + + JUMP_BACK(43) +}; + +const s32 anim_0112__v1_l0[] = { // 0x080E1098 + PALETTE(2, 16, 0x10) + TILES(0x48BB, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(2, 9) + + END() +}; + +const s32 * const anim_0112[2] = { + anim_0112__v0_l0, + anim_0112__v1_l0, +}; + +const s32 anim_0113__v0_l0[] = { // 0x080E10D0 + PALETTE(2, 16, 0x10) + TILES(0x48CF, 30) + HITBOX(0, -13, -10, -1, 16) + SHOW_FRAME(4, 0) + + TILES(0x48ED, 36) + SHOW_FRAME(4, 1) + + TILES(0x4911, 42) + SHOW_FRAME(4, 2) + + TILES(0x493B, 24) + SHOW_FRAME(4, 3) + + TILES(0x4953, 35) + SHOW_FRAME(4, 4) + + TILES(0x4976, 35) + SHOW_FRAME(4, 5) + + TILES(0x4999, 30) + SHOW_FRAME(4, 6) + + TILES(0x49B7, 30) + SHOW_FRAME(4, 7) + + JUMP_BACK(46) +}; + +const s32 anim_0113__v1_l0[] = { // 0x080E1190 + PALETTE(2, 16, 0x10) + TILES(0x49D5, 24) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0113[2] = { + anim_0113__v0_l0, + anim_0113__v1_l0, +}; + +const s32 anim_0116__v0_l0[] = { // 0x080E11C8 + PALETTE(2, 16, 0x10) + TILES(0x49ED, 20) + HITBOX(0, -6, -10, 6, 16) + PLAY_SOUND(191) + SHOW_FRAME(6, 0) + + TILES(0x4A01, 20) + SHOW_FRAME(6, 1) + + END() +}; + +const s32 * const anim_0116[1] = { + anim_0116__v0_l0, +}; + +const s32 anim_0117__v0_l0[] = { // 0x080E1218 + PALETTE(2, 16, 0x10) + TILES(0x4A15, 24) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x4A2D, 24) + SHOW_FRAME(2, 1) + + TILES(0x4A45, 24) + SHOW_FRAME(2, 2) + + TILES(0x4A5D, 28) + SHOW_FRAME(2, 3) + + TILES(0x4A79, 24) + SHOW_FRAME(2, 4) + + TILES(0x4A91, 24) + SHOW_FRAME(2, 5) + + TILES(0x4AA9, 24) + SHOW_FRAME(2, 6) + + TILES(0x4AC1, 28) + SHOW_FRAME(2, 7) + + JUMP_BACK(49) +}; + +const s32 * const anim_0117[1] = { + anim_0117__v0_l0, +}; + +const s32 anim_0118__v0_l0[] = { // 0x080E12E8 + PALETTE(2, 16, 0x10) + TILES(0x4ADD, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x4AF1, 20) + SHOW_FRAME(3, 1) + + TILES(0x4B05, 20) + SHOW_FRAME(3, 2) + + TILES(0x4B19, 20) + SHOW_FRAME(3, 3) + + TILES(0x4B2D, 20) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0118[1] = { + anim_0118__v0_l0, +}; + +const s32 anim_0120__v0_l0[] = { // 0x080E136C + PALETTE(2, 16, 0x10) + TILES(0x4B41, 25) + SHOW_FRAME(3, 0) + + TILES(0x4B5A, 20) + SHOW_FRAME(3, 1) + + TILES(0x4B41, 25) + SHOW_FRAME(3, 0) + + TILES(0x4B6E, 20) + SHOW_FRAME(3, 2) + TILES(0x4B82, 20) + SHOW_FRAME(3, 3) + + TILES(0x4B96, 15) + SHOW_FRAME(3, 4) + + JUMP_BACK(10) +}; + +const s32 * const anim_0120[1] = { + anim_0120__v0_l0, +}; + +const s32 anim_0121__v0_l0[] = { // 0x080E13FC + PALETTE(2, 16, 0x10) + TILES(0x4BA5, 24) + SHOW_FRAME(3, 0) + + TILES(0x4BBD, 24) + SHOW_FRAME(3, 1) + + TILES(0x4BD5, 24) + SHOW_FRAME(3, 2) + + TILES(0x4BED, 24) + SHOW_FRAME(3, 3) + TILES(0x4C05, 24) + SHOW_FRAME(3, 4) + + TILES(0x4C1D, 24) + SHOW_FRAME(3, 5) + + TILES(0x4C35, 24) + SHOW_FRAME(3, 6) + + TILES(0x4C4D, 24) + SHOW_FRAME(3, 7) + + TILES(0x4C65, 24) + SHOW_FRAME(3, 8) + + TILES(0x4C7D, 24) + SHOW_FRAME(3, 9) + + TILES(0x4C95, 24) + SHOW_FRAME(3, 10) + + TILES(0x4CAD, 24) + SHOW_FRAME(3, 11) + + JUMP_BACK(40) +}; + +const s32 * const anim_0121[1] = { + anim_0121__v0_l0, +}; + +const s32 anim_0122__v0_l0[] = { // 0x080E1504 + PALETTE(2, 16, 0x10) + TILES(0x4CC5, 20) + SHOW_FRAME(6, 0) + + TILES(0x4CD9, 30) + SHOW_FRAME(8, 1) + + TILES(0x4CF7, 20) + SHOW_FRAME(4, 2) + + TILES(0x4D0B, 12) + SHOW_FRAME(4, 3) + + TILES(0x4D17, 16) + SHOW_FRAME(6, 4) + + TILES(0x4D27, 25) + SHOW_FRAME(8, 5) + + TILES(0x4D40, 24) + SHOW_FRAME(4, 6) + + TILES(0x4D58, 12) + SHOW_FRAME(4, 7) + + TILES(0x4D64, 16) + SHOW_FRAME(4, 8) + + TILES(0x4D74, 20) + SHOW_FRAME(4, 9) + + TILES(0x4D88, 20) + SHOW_FRAME(4, 10) + + TILES(0x4D9C, 16) + SHOW_FRAME(4, 11) + + TILES(0x4DAC, 20) + SHOW_FRAME(4, 12) + + TILES(0x4DC0, 16) + SHOW_FRAME(4, 13) + + TILES(0x4DD0, 20) + SHOW_FRAME(4, 14) + + TILES(0x4DE4, 25) + SHOW_FRAME(2, 15) + + TILES(0x4DFD, 15) + SHOW_FRAME(4, 16) + + TILES(0x4E0C, 16) + SHOW_FRAME(4, 17) + + TILES(0x4E1C, 20) + SHOW_FRAME(6, 18) + + TILES(0x4E30, 20) + SHOW_FRAME(6, 19) + + TILES(0x4E44, 20) + SHOW_FRAME(6, 20) + TILES(0x4E58, 30) + SHOW_FRAME(6, 21) + + TILES(0x4E76, 35) + SHOW_FRAME(6, 22) + + TILES(0x4E99, 35) + SHOW_FRAME(6, 23) + + TILES(0x4EBC, 30) + SHOW_FRAME(6, 24) + + TILES(0x4EDA, 30) + SHOW_FRAME(6, 25) + + TILES(0x4EF8, 35) + SHOW_FRAME(6, 26) + + TILES(0x4F1B, 30) + SHOW_FRAME(6, 27) + + JUMP_BACK(35) +}; + +const s32 * const anim_0122[1] = { + anim_0122__v0_l0, +}; + +const s32 anim_0123__v0_l0[] = { // 0x080E174C + PALETTE(2, 16, 0x10) + TILES(0x4F39, 35) + SHOW_FRAME(4, 0) + + TILES(0x4F5C, 20) + SHOW_FRAME(15, 1) + + TILES(0x4F70, 20) + SHOW_FRAME(4, 2) + + TILES(0x4F84, 20) + SHOW_FRAME(4, 3) + + TILES(0x4F98, 30) + SHOW_FRAME(4, 4) + + TILES(0x4FB6, 25) + SHOW_FRAME(4, 5) + + TILES(0x4FCF, 30) + SHOW_FRAME(4, 6) + + TILES(0x4FED, 24) + SHOW_FRAME(4, 7) + + TILES(0x4F98, 30) + SHOW_FRAME(4, 4) + + TILES(0x5005, 25) + SHOW_FRAME(4, 8) + + TILES(0x501E, 30) + SHOW_FRAME(4, 9) + + TILES(0x503C, 24) + SHOW_FRAME(4, 10) + + TILES(0x4F98, 30) + SHOW_FRAME(4, 4) + + TILES(0x4FB6, 25) + SHOW_FRAME(4, 5) + + TILES(0x4FCF, 30) + SHOW_FRAME(4, 6) + + TILES(0x4FED, 24) + SHOW_FRAME(4, 7) + + TILES(0x4F98, 30) + SHOW_FRAME(4, 4) + + TILES(0x5005, 25) + SHOW_FRAME(4, 8) + + TILES(0x501E, 30) + SHOW_FRAME(4, 9) + + TILES(0x503C, 24) + SHOW_FRAME(4, 10) + + TILES(0x5054, 20) + SHOW_FRAME(4, 11) + + TILES(0x5068, 20) + SHOW_FRAME(4, 12) + + END() +}; + +const s32 * const anim_0123[1] = { + anim_0123__v0_l0, +}; + +const s32 anim_0124__v0_l0[] = { // 0x080E1918 + PALETTE(2, 16, 0x80) + TILES(0x507C, 21) + HITBOX(0, -6, -14, 6, 8) + SHOW_FRAME(3, 0) + + TILES(0x5091, 21) + SHOW_FRAME(3, 1) + + TILES(0x50A6, 21) + SHOW_FRAME(3, 2) + + TILES(0x50BB, 24) + SHOW_FRAME(3, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0124[1] = { + anim_0124__v0_l0, +}; + +const s32 anim_0125__v0_l0[] = { // 0x080E198C + PALETTE(2, 16, 0x80) + TILES(0x50D3, 35) + SHOW_FRAME(20, 0) + + TILES(0x50F6, 30) + SHOW_FRAME(10, 1) + + TILES(0x5114, 36) + SHOW_FRAME(8, 2) + + TILES(0x5138, 35) + SHOW_FRAME(7, 3) + + TILES(0x515B, 42) + SHOW_FRAME(5, 4) + + TILES(0x5185, 42) + SHOW_FRAME(3, 5) + TILES(0x51AF, 56) + SHOW_FRAME(2, 6) + + TILES(0x51E7, 56) + SHOW_FRAME(2, 7) + + TILES(0x521F, 56) + SHOW_FRAME(2, 8) + + JUMP_BACK(15) +}; + +const s32 * const anim_0125[1] = { + anim_0125__v0_l0, +}; + +const s32 anim_0126__v0_l0[] = { // 0x080E1A58 + PALETTE(2, 16, 0x10) + TILES(0x5257, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x5297, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v1_l0[] = { // 0x080E1AA0 + PALETTE(2, 16, 0x10) + TILES(0x52D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0x5317, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v2_l0[] = { // 0x080E1AE8 + PALETTE(2, 16, 0x10) + TILES(0x5357, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0x5397, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v3_l0[] = { // 0x080E1B30 + PALETTE(2, 16, 0x10) + TILES(0x53D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0x5417, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v4_l0[] = { // 0x080E1B78 + PALETTE(2, 16, 0x10) + TILES(0x5457, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0x5497, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v5_l0[] = { // 0x080E1BC0 + PALETTE(2, 16, 0x10) + TILES(0x54D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0x5517, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v6_l0[] = { // 0x080E1C08 + PALETTE(2, 16, 0x10) + TILES(0x5557, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 12) + + TILES(0x5597, 64) + SHOW_FRAME(2, 13) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v7_l0[] = { // 0x080E1C50 + PALETTE(2, 16, 0x10) + TILES(0x55D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 14) + + TILES(0x5617, 64) + SHOW_FRAME(2, 15) + + JUMP_BACK(16) +}; + +const s32 anim_0126__v8_l0[] = { // 0x080E1C98 + PALETTE(2, 16, 0x10) + TILES(0x5657, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 16) + + TILES(0x5697, 64) + SHOW_FRAME(2, 17) + + JUMP_BACK(16) +}; + +const s32 * const anim_0126[9] = { + anim_0126__v0_l0, + anim_0126__v1_l0, + anim_0126__v2_l0, + anim_0126__v3_l0, + anim_0126__v4_l0, + anim_0126__v5_l0, + anim_0126__v6_l0, + anim_0126__v7_l0, + anim_0126__v8_l0, +}; + +const s32 anim_0127__v0_l0[] = { // 0x080E1D04 + PALETTE(2, 16, 0x10) + TILES(0x56D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(1, 0) + + TILES(0x5717, 64) + SHOW_FRAME(1, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0127__v1_l0[] = { // 0x080E1D4C + PALETTE(2, 16, 0x10) + TILES(0x5757, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0x5797, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0127__v2_l0[] = { // 0x080E1D94 + PALETTE(2, 16, 0x10) + TILES(0x57D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0x5817, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0127__v3_l0[] = { // 0x080E1DDC + PALETTE(2, 16, 0x10) + TILES(0x5857, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0x5897, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0127__v4_l0[] = { // 0x080E1E24 + PALETTE(2, 16, 0x10) + TILES(0x58D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0x5917, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0127__v5_l0[] = { // 0x080E1E6C + PALETTE(2, 16, 0x10) + TILES(0x5957, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0x5997, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(16) +}; + +const s32 anim_0127__v6_l0[] = { // 0x080E1EB4 + PALETTE(2, 16, 0x10) + TILES(0x59D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 12) + + TILES(0x5A17, 64) + SHOW_FRAME(2, 13) + + JUMP_BACK(16) +}; + +const s32 anim_0127__v7_l0[] = { // 0x080E1EFC + PALETTE(2, 16, 0x10) + TILES(0x5A57, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 14) + + TILES(0x5A97, 64) + SHOW_FRAME(2, 15) + + JUMP_BACK(16) +}; + +const s32 * const anim_0127[8] = { + anim_0127__v0_l0, + anim_0127__v1_l0, + anim_0127__v2_l0, + anim_0127__v3_l0, + anim_0127__v4_l0, + anim_0127__v5_l0, + anim_0127__v6_l0, + anim_0127__v7_l0, +}; + +const s32 anim_0128__v0_l0[] = { // 0x080E1F64 + PALETTE(2, 16, 0x10) + TILES(0x5AD7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + TILES(0x5B17, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 1) + + TILES(0x5B57, 64) + SHOW_FRAME(2, 2) + + JUMP_BACK(13) +}; + +const s32 anim_0128__v1_l0[] = { // 0x080E1FCC + PALETTE(2, 16, 0x10) + TILES(0x5AD7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0128[2] = { + anim_0128__v0_l0, + anim_0128__v1_l0, +}; + +const s32 anim_0129__v0_l0[] = { // 0x080E2004 + PALETTE(2, 16, 0x10) + TILES(0x5B97, 64) + HITBOX(0, -20, -20, 20, 20) + SHOW_FRAME(2, 0) + + TILES(0x5BD7, 64) + SHOW_FRAME(2, 1) + + TILES(0x5C17, 64) + SHOW_FRAME(2, 2) + + TILES(0x5C57, 64) + SHOW_FRAME(2, 3) + + TILES(0x5C97, 64) + SHOW_FRAME(2, 4) + + TILES(0x5CD7, 64) + SHOW_FRAME(2, 5) + + TILES(0x5D17, 64) + SHOW_FRAME(2, 6) + + TILES(0x5D57, 64) + SHOW_FRAME(2, 7) + + TILES(0x5D97, 64) + SHOW_FRAME(2, 8) + + TILES(0x5DD7, 64) + SHOW_FRAME(2, 9) + + TILES(0x5E17, 64) + SHOW_FRAME(2, 10) + + JUMP_BACK(61) +}; + +const s32 * const anim_0129[1] = { + anim_0129__v0_l0, +}; + +const s32 anim_0130__v0_l0[] = { // 0x080E2104 + PALETTE(2, 16, 0x10) + TILES(0x5E57, 64) + HITBOX(0, -14, -14, 14, 14) + SHOW_FRAME(5, 0) + + TILES(0x5E97, 64) + SHOW_FRAME(2, 1) + + TILES(0x5ED7, 64) + SHOW_FRAME(2, 2) + + TILES(0x5F17, 64) + SHOW_FRAME(2, 3) + + TILES(0x5F57, 64) + SHOW_FRAME(2, 4) + + TILES(0x5F97, 64) + SHOW_FRAME(2, 5) + + TILES(0x5FD7, 64) + SHOW_FRAME(2, 6) + + TILES(0x6017, 64) + SHOW_FRAME(2, 7) + + TILES(0x6057, 64) + SHOW_FRAME(2, 8) + + TILES(0x5E97, 64) + SHOW_FRAME(2, 1) + + TILES(0x5ED7, 64) + SHOW_FRAME(2, 2) + + TILES(0x5F17, 64) + SHOW_FRAME(2, 3) + + TILES(0x5F57, 64) + SHOW_FRAME(2, 4) + + TILES(0x5F97, 64) + SHOW_FRAME(2, 5) + + TILES(0x5FD7, 64) + SHOW_FRAME(2, 6) + + TILES(0x6017, 64) + SHOW_FRAME(2, 7) + + TILES(0x6057, 64) + SHOW_FRAME(2, 8) + + TILES(0x5E57, 64) + HITBOX(0, 0, 0, 0, 0) + SHOW_FRAME(5, 0) + + END() +}; + +const s32 * const anim_0130[1] = { + anim_0130__v0_l0, +}; + +const s32 anim_0131__v0_l0[] = { // 0x080E2298 + PALETTE(2, 16, 0x10) + TILES(0x6097, 64) + SHOW_FRAME(3, 0) + + TILES(0x60D7, 64) + SHOW_FRAME(3, 1) + + TILES(0x6117, 64) + SHOW_FRAME(3, 2) + + TILES(0x6157, 64) + SHOW_FRAME(3, 3) + + TILES(0x6197, 64) + SHOW_FRAME(3, 4) + + TILES(0x61D7, 64) + SHOW_FRAME(3, 5) + + TILES(0x6217, 64) + SHOW_FRAME(3, 6) + + TILES(0x6257, 64) + SHOW_FRAME(3, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0131[1] = { + anim_0131__v0_l0, +}; + +const s32 anim_0132__v0_l0[] = { // 0x080E2350 + PALETTE(2, 16, 0x10) + TILES(0x6297, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(6, 0) + TILES(0x62D7, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 1) + + TILES(0x6317, 64) + SHOW_FRAME(4, 2) + + TILES(0x6357, 64) + SHOW_FRAME(4, 3) + + TILES(0x6397, 64) + SHOW_FRAME(4, 4) + + TILES(0x63D7, 64) + SHOW_FRAME(4, 5) + + TILES(0x6417, 64) + SHOW_FRAME(4, 6) + + TILES(0x6457, 64) + SHOW_FRAME(4, 7) + + TILES(0x6497, 64) + SHOW_FRAME(4, 8) + + TILES(0x64D7, 64) + SHOW_FRAME(4, 9) + + TILES(0x6317, 64) + SHOW_FRAME(4, 2) + + JUMP_BACK(53) +}; + +const s32 anim_0132__v1_l0[] = { // 0x080E2458 + PALETTE(2, 16, 0x10) + TILES(0x6297, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(6, 0) + + END() +}; + +const s32 * const anim_0132[2] = { + anim_0132__v0_l0, + anim_0132__v1_l0, +}; + +const s32 anim_0133__v0_l0[] = { // 0x080E2490 + PALETTE(2, 16, 0x10) + TILES(0x6517, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x6557, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0133__v1_l0[] = { // 0x080E24D8 + PALETTE(2, 16, 0x10) + TILES(0x6597, 64) + SHOW_FRAME(2, 2) + + TILES(0x65D7, 64) + SHOW_FRAME(2, 3) + + TILES(0x6617, 64) + SHOW_FRAME(2, 4) + + TILES(0x6657, 64) + SHOW_FRAME(2, 5) + + TILES(0x6697, 64) + SHOW_FRAME(2, 6) + + TILES(0x66D7, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(33) +}; + +const s32 * const anim_0133[2] = { + anim_0133__v0_l0, + anim_0133__v1_l0, +}; + +const s32 anim_0134__v0_l0[] = { // 0x080E256C + PALETTE(2, 16, 0x10) + TILES(0x6717, 16) + SHOW_FRAME(3, 0) + + TILES(0x6727, 20) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 anim_0134__v1_l0[] = { // 0x080E25A8 + PALETTE(2, 16, 0x10) + TILES(0x673B, 20) + SHOW_FRAME(2, 2) + + TILES(0x674F, 24) + SHOW_FRAME(2, 3) + + TILES(0x6767, 18) + SHOW_FRAME(3, 4) + + TILES(0x6779, 20) + SHOW_FRAME(3, 5) + + TILES(0x678D, 24) + SHOW_FRAME(3, 6) + TILES(0x67A5, 28) + SHOW_FRAME(6, 7) + + TILES(0x67C1, 24) + SHOW_FRAME(6, 8) + + TILES(0x67D9, 28) + SHOW_FRAME(6, 9) + + TILES(0x67F5, 28) + SHOW_FRAME(6, 10) + + TILES(0x6811, 28) + SHOW_FRAME(6, 11) + + TILES(0x682D, 24) + SHOW_FRAME(6, 12) + + TILES(0x6845, 28) + SHOW_FRAME(6, 13) + + TILES(0x6861, 28) + SHOW_FRAME(6, 14) + + TILES(0x687D, 28) + SHOW_FRAME(6, 15) + + TILES(0x6899, 24) + SHOW_FRAME(6, 16) + + TILES(0x68B1, 28) + SHOW_FRAME(6, 17) + + TILES(0x67F5, 28) + SHOW_FRAME(6, 10) + + TILES(0x6811, 28) + SHOW_FRAME(6, 11) + + TILES(0x682D, 24) + SHOW_FRAME(6, 12) + + TILES(0x6845, 28) + SHOW_FRAME(6, 13) + + TILES(0x6861, 28) + SHOW_FRAME(6, 14) + + JUMP_BACK(80) +}; + +const s32 * const anim_0134[2] = { + anim_0134__v0_l0, + anim_0134__v1_l0, +}; + +const s32 anim_0135__v0_l0[] = { // 0x080E2768 + PALETTE(2, 16, 0x10) + TILES(0x68CD, 30) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x68EB, 30) + SHOW_FRAME(3, 1) + + TILES(0x6909, 30) + SHOW_FRAME(3, 2) + + TILES(0x6927, 35) + SHOW_FRAME(3, 3) + + TILES(0x694A, 30) + SHOW_FRAME(3, 4) + + TILES(0x6968, 30) + SHOW_FRAME(3, 5) + + TILES(0x6986, 30) + SHOW_FRAME(3, 6) + + TILES(0x69A4, 35) + SHOW_FRAME(3, 7) + + JUMP_BACK(46) +}; + +const s32 anim_0135__v1_l0[] = { // 0x080E2828 + PALETTE(2, 16, 0x10) + TILES(0x69C7, 30) + HITBOX(0, -4, -8, 8, 20) + SHOW_FRAME(3, 8) + + TILES(0x69E5, 30) + SHOW_FRAME(3, 9) + + TILES(0x6A03, 28) + SHOW_FRAME(3, 10) + + TILES(0x6A1F, 30) + SHOW_FRAME(3, 11) + + TILES(0x6A3D, 30) + SHOW_FRAME(3, 12) + + TILES(0x6A5B, 30) + SHOW_FRAME(3, 13) + + TILES(0x6A79, 35) + SHOW_FRAME(3, 14) + + TILES(0x6A9C, 30) + SHOW_FRAME(3, 15) + + JUMP_BACK(46) +}; + +const s32 anim_0135__v2_l0[] = { // 0x080E28E8 + PALETTE(2, 16, 0x10) + TILES(0x6ABA, 30) + HITBOX(0, -4, -10, 8, 18) + SHOW_FRAME(3, 16) + + TILES(0x6AD8, 30) + SHOW_FRAME(3, 17) + + TILES(0x6AF6, 35) + SHOW_FRAME(3, 18) + + TILES(0x6B19, 30) + SHOW_FRAME(3, 19) + + TILES(0x6B37, 30) + SHOW_FRAME(3, 20) + + TILES(0x6B55, 35) + SHOW_FRAME(3, 21) + + TILES(0x6B78, 32) + SHOW_FRAME(3, 22) + + TILES(0x6B98, 30) + SHOW_FRAME(3, 23) + + JUMP_BACK(46) +}; + +const s32 * const anim_0135[3] = { + anim_0135__v0_l0, + anim_0135__v1_l0, + anim_0135__v2_l0, +}; + +const s32 anim_0136__v0_l0[] = { // 0x080E29B4 + PALETTE(2, 16, 0x10) + TILES(0x6BB6, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x6BCA, 24) + SHOW_FRAME(2, 1) + + TILES(0x6BE2, 28) + SHOW_FRAME(4, 2) + + TILES(0x6BFE, 24) + SHOW_FRAME(1, 3) + + TILES(0x6C16, 28) + SHOW_FRAME(1, 4) + TILES(0x6C32, 24) + HITBOX(0, -14, -10, -2, 16) + SHOW_FRAME(2, 5) + + TILES(0x6C4A, 24) + SHOW_FRAME(2, 6) + + TILES(0x6C62, 24) + SHOW_FRAME(2, 7) + + JUMP_BACK(18) +}; + +const s32 * const anim_0136[1] = { + anim_0136__v0_l0, +}; + +const s32 anim_0137__v0_l0[] = { // 0x080E2A84 + PALETTE(2, 16, 0x10) + TILES(0x6C7A, 28) + HITBOX(0, -6, -14, 6, 8) + SHOW_FRAME(3, 0) + + TILES(0x6C96, 28) + SHOW_FRAME(3, 1) + + TILES(0x6CB2, 28) + SHOW_FRAME(3, 2) + + TILES(0x6CCE, 32) + HITBOX(0, -6, -14, 6, 8) + SHOW_FRAME(2, 3) + + TILES(0x6CEE, 32) + HITBOX(0, -6, -14, 6, 8) + SHOW_FRAME(2, 4) + + END() +}; + +const s32 * const anim_0137[1] = { + anim_0137__v0_l0, +}; + +const s32 anim_0138__v0_l0[] = { // 0x080E2B20 + PALETTE(2, 16, 0x10) + TILES(0x6D0E, 64) + SHOW_FRAME(2, 0) + + TILES(0x6D4E, 64) + SHOW_FRAME(2, 1) + + TILES(0x6D8E, 64) + SHOW_FRAME(2, 2) + + TILES(0x6DCE, 64) + SHOW_FRAME(2, 3) + + TILES(0x6D0E, 64) + SHOW_FRAME(2, 0) + + TILES(0x6D4E, 64) + SHOW_FRAME(2, 1) + + TILES(0x6D8E, 64) + SHOW_FRAME(2, 2) + + TILES(0x6DCE, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(43) +}; + +const s32 anim_0138__v1_l0[] = { // 0x080E2BD4 + PALETTE(2, 16, 0x10) + TILES(0x6E0E, 64) + SHOW_FRAME(2, 4) + + TILES(0x6E4E, 64) + SHOW_FRAME(2, 5) + + TILES(0x6E8E, 64) + SHOW_FRAME(2, 6) + + TILES(0x6ECE, 64) + SHOW_FRAME(2, 7) + + TILES(0x6F0E, 64) + SHOW_FRAME(2, 8) + + TILES(0x6F4E, 64) + SHOW_FRAME(2, 9) + + TILES(0x6F8E, 64) + SHOW_FRAME(2, 10) + + TILES(0x6FCE, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(43) +}; + +const s32 * const anim_0138[2] = { + anim_0138__v0_l0, + anim_0138__v1_l0, +}; + +const s32 anim_0139__v0_l0[] = { // 0x080E2C90 + PALETTE(2, 16, 0x10) + TILES(0x700E, 24) + HITBOX(0, -32, -20, -4, -6) + CMD_12(0x10) + SHOW_FRAME(3, 0) + + TILES(0x7026, 20) + HITBOX(0, -20, -20, -2, -6) + CMD_12(0x10) + SHOW_FRAME(3, 1) + + TILES(0x703A, 20) + HITBOX(0, -12, -20, 0, -6) + CMD_12(0x10) + SHOW_FRAME(3, 2) + + TILES(0x704E, 24) + HITBOX(0, 2, -20, 14, -6) + CMD_12(0x10) + SHOW_FRAME(3, 3) + + TILES(0x7066, 24) + HITBOX(0, 3, -20, 21, -6) + CMD_12(0x10) + SHOW_FRAME(3, 4) + + TILES(0x707E, 24) + HITBOX(0, 4, -20, 32, -6) + CMD_12(0x10) + SHOW_FRAME(3, 5) + + TILES(0x7096, 20) + HITBOX(0, 4, -20, 22, -6) + CMD_12(0x13) + SHOW_FRAME(3, 6) + + TILES(0x70AA, 24) + HITBOX(0, 1, -20, 13, -6) + CMD_12(0x13) + SHOW_FRAME(3, 7) + + TILES(0x70C2, 24) + HITBOX(0, -15, -20, -3, -6) + CMD_12(0x13) + SHOW_FRAME(3, 8) + + TILES(0x70DA, 24) + HITBOX(0, -21, -20, -3, -6) + CMD_12(0x13) + SHOW_FRAME(3, 9) + + JUMP_BACK(103) +}; + +const s32 anim_0139__v1_l0[] = { // 0x080E2E34 + PALETTE(2, 16, 0x10) + TILES(0x70F2, 24) + HITBOX(0, -7, 4, 5, 30) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 10) + + TILES(0x710A, 20) + HITBOX(0, -7, 0, 5, 24) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 11) + + TILES(0x711E, 20) + HITBOX(0, -7, -5, 7, 11) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 12) + + TILES(0x7132, 24) + HITBOX(0, -6, -9, 6, 5) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 13) + + TILES(0x714A, 24) + HITBOX(0, -6, -15, 6, 1) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 14) + + TILES(0x7162, 24) + HITBOX(0, -6, -29, 6, -3) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 15) + + TILES(0x717A, 20) + HITBOX(0, -6, -26, 6, -2) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 16) + + TILES(0x718E, 24) + HITBOX(0, -6, -16, 6, 0) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 17) + + TILES(0x71A6, 24) + HITBOX(0, -6, -6, 6, 8) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 18) + + TILES(0x71BE, 24) + HITBOX(0, -6, 2, 6, 18) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 19) + + JUMP_BACK(103) +}; + +const s32 * const anim_0139[2] = { + anim_0139__v0_l0, + anim_0139__v1_l0, +}; + +const s32 anim_0140__v0_l0[] = { // 0x080E2FE0 + PALETTE(2, 16, 0x10) + TILES(0x71D6, 28) + HITBOX(0, -6, -18, 6, 4) + SHOW_FRAME(10, 0) + + TILES(0x71F2, 28) + SHOW_FRAME(10, 1) + + TILES(0x720E, 28) + SHOW_FRAME(10, 2) + + TILES(0x71F2, 28) + SHOW_FRAME(10, 1) + + JUMP_BACK(26) +}; + +const s32 anim_0140__v1_l0[] = { // 0x080E3050 + PALETTE(2, 16, 0x10) + TILES(0x722A, 28) + HITBOX(0, -6, -18, 6, 4) + SHOW_FRAME(5, 3) + + TILES(0x7246, 28) + SHOW_FRAME(5, 4) + + TILES(0x7262, 28) + SHOW_FRAME(5, 5) + + TILES(0x7246, 28) + SHOW_FRAME(5, 4) + + JUMP_BACK(26) +}; + +const s32 * const anim_0140[2] = { + anim_0140__v0_l0, + anim_0140__v1_l0, +}; + +const s32 anim_0141__v0_l0[] = { // 0x080E30C8 + PALETTE(2, 16, 0x10) + TILES(0x727E, 24) + HITBOX(0, -10, -6, 10, 10) + SHOW_FRAME(5, 0) + + TILES(0x7296, 24) + SHOW_FRAME(5, 1) + + TILES(0x72AE, 20) + SHOW_FRAME(5, 2) + + TILES(0x72C2, 24) + SHOW_FRAME(5, 3) + + TILES(0x72DA, 24) + SHOW_FRAME(5, 4) + + TILES(0x72F2, 24) + SHOW_FRAME(5, 5) + + TILES(0x730A, 30) + SHOW_FRAME(5, 6) + + TILES(0x7328, 24) + SHOW_FRAME(5, 7) + + JUMP_BACK(46) +}; + +const s32 * const anim_0141[1] = { + anim_0141__v0_l0, +}; + +const s32 anim_0142__v0_l0[] = { // 0x080E318C + PALETTE(2, 16, 0x10) + TILES(0x7340, 28) + SHOW_FRAME(8, 0) + + TILES(0x735C, 28) + SHOW_FRAME(8, 1) + + TILES(0x7378, 28) + SHOW_FRAME(8, 2) + + TILES(0x735C, 28) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0142[1] = { + anim_0142__v0_l0, +}; + +const s32 anim_0145__v0_l0[] = { // 0x080E31F4 + PALETTE(2, 16, 0x10) + TILES(0x7394, 24) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(3, 0) + TILES(0x73AC, 30) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(3, 1) + + TILES(0x73CA, 30) + SHOW_FRAME(3, 2) + + TILES(0x73E8, 30) + SHOW_FRAME(3, 3) + + TILES(0x7406, 30) + SHOW_FRAME(3, 4) + + TILES(0x7424, 24) + SHOW_FRAME(3, 5) + + TILES(0x743C, 30) + SHOW_FRAME(3, 6) + + TILES(0x745A, 30) + SHOW_FRAME(3, 7) + + TILES(0x7478, 30) + SHOW_FRAME(3, 8) + + JUMP_BACK(43) +}; + +const s32 * const anim_0145[1] = { + anim_0145__v0_l0, +}; + +const s32 anim_0146__v0_l0[] = { // 0x080E32D8 + PALETTE(2, 16, 0x10) + TILES(0x7496, 20) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 0) + + TILES(0x74AA, 20) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0146[1] = { + anim_0146__v0_l0, +}; + +const s32 anim_0147__v0_l0[] = { // 0x080E332C + PALETTE(2, 16, 0x10) + TILES(0x74BE, 35) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(6, 0) + TILES(0x74E1, 35) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(6, 1) + + TILES(0x7504, 42) + SHOW_FRAME(6, 2) + + TILES(0x752E, 42) + SHOW_FRAME(6, 3) + + TILES(0x7558, 42) + SHOW_FRAME(6, 4) + + TILES(0x7582, 30) + SHOW_FRAME(6, 5) + + TILES(0x75A0, 42) + SHOW_FRAME(6, 6) + + TILES(0x75CA, 42) + SHOW_FRAME(6, 7) + + TILES(0x75F4, 35) + SHOW_FRAME(6, 8) + + JUMP_BACK(43) +}; + +const s32 * const anim_0147[1] = { + anim_0147__v0_l0, +}; + +const s32 anim_0149__v0_l0[] = { // 0x080E3410 + PALETTE(2, 16, 0x10) + TILES(0x7617, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x762B, 20) + HITBOX(0, -10, -10, 2, 16) + SHOW_FRAME(3, 1) + + TILES(0x763F, 24) + HITBOX(0, -12, -10, 0, 16) + PLAY_SOUND(121) + SHOW_FRAME(3, 2) + + TILES(0x7657, 24) + HITBOX(0, -6, -10, 6, 16) + HITBOX(1, -20, -10, -6, 16) + SHOW_FRAME(3, 3) + + TILES(0x766F, 28) + HITBOX(0, -14, -10, -2, 16) + HITBOX(1, -48, -10, -12, 16) + SHOW_FRAME(3, 4) + + TILES(0x768B, 28) + HITBOX(0, -14, -10, -2, 16) + HITBOX(1, -40, -10, -14, 16) + SHOW_FRAME(3, 5) + + TILES(0x76A7, 24) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 6) + + TILES(0x76BF, 16) + HITBOX(0, -8, -10, 4, 16) + SHOW_FRAME(4, 7) + + TILES(0x76CF, 20) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 8) + + END() +}; + +const s32 * const anim_0149[1] = { + anim_0149__v0_l0, +}; + +const s32 anim_0155__v0_l0[] = { // 0x080E3570 + PALETTE(2, 16, 0x10) + TILES(0x76E3, 20) + HITBOX(0, -6, -10, 6, 10) + HITBOX(1, -21, -19, 22, -11) + SHOW_FRAME(2, 0) + + TILES(0x76F7, 20) + SHOW_FRAME(2, 1) + + TILES(0x770B, 30) + SHOW_FRAME(2, 2) + + TILES(0x7729, 25) + SHOW_FRAME(2, 3) + + TILES(0x7742, 20) + SHOW_FRAME(2, 4) + + TILES(0x7756, 20) + SHOW_FRAME(2, 5) + + TILES(0x776A, 30) + SHOW_FRAME(2, 6) + + TILES(0x7788, 25) + SHOW_FRAME(2, 7) + + TILES(0x76E3, 20) + SHOW_FRAME(2, 0) + + TILES(0x76F7, 20) + SHOW_FRAME(2, 1) + + TILES(0x770B, 30) + SHOW_FRAME(2, 2) + + TILES(0x7729, 25) + SHOW_FRAME(2, 3) + + TILES(0x77A1, 20) + SHOW_FRAME(2, 8) + + TILES(0x77B5, 20) + SHOW_FRAME(2, 9) + + TILES(0x77C9, 30) + SHOW_FRAME(2, 10) + + TILES(0x7788, 25) + SHOW_FRAME(2, 7) + + JUMP_BACK(89) +}; + +const s32 * const anim_0155[1] = { + anim_0155__v0_l0, +}; + +const s32 anim_0156__v0_l0[] = { // 0x080E36E0 + PALETTE(2, 16, 0x10) + TILES(0x77E7, 25) + HITBOX(0, -6, -10, 6, 10) + HITBOX(1, -17, -19, 17, -11) + SHOW_FRAME(1, 0) + + TILES(0x7800, 25) + HITBOX(0, -6, -10, 6, 10) + HITBOX(1, -17, -19, 17, -11) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0156[1] = { + anim_0156__v0_l0, +}; + +const s32 anim_0157__v0_l0[] = { // 0x080E374C + PALETTE(2, 16, 0x10) + TILES(0x7819, 20) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(6, 0) + + TILES(0x782D, 30) + SHOW_FRAME(3, 1) + TILES(0x784B, 30) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(6, 2) + + TILES(0x7869, 30) + SHOW_FRAME(6, 3) + + TILES(0x7887, 30) + SHOW_FRAME(6, 4) + + TILES(0x78A5, 30) + SHOW_FRAME(6, 5) + + TILES(0x78C3, 30) + SHOW_FRAME(6, 6) + + TILES(0x78E1, 30) + SHOW_FRAME(6, 7) + + TILES(0x78FF, 30) + SHOW_FRAME(6, 8) + + TILES(0x791D, 30) + SHOW_FRAME(6, 9) + + JUMP_BACK(43) +}; + +const s32 * const anim_0157[1] = { + anim_0157__v0_l0, +}; + +const s32 anim_0158__v0_l0[] = { // 0x080E3844 + PALETTE(2, 16, 0x10) + TILES(0x793B, 30) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(3, 0) + + TILES(0x7959, 20) + HITBOX(0, -10, -10, 2, 10) + SHOW_FRAME(3, 1) + TILES(0x796D, 16) + SHOW_FRAME(3, 2) + + TILES(0x797D, 20) + SHOW_FRAME(3, 3) + + JUMP_BACK(10) +}; + +const s32 anim_0158__v1_l0[] = { // 0x080E38C0 + PALETTE(2, 16, 0x10) + TILES(0x7991, 20) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(2, 4) + + TILES(0x79A5, 24) + SHOW_FRAME(2, 5) + + TILES(0x79BD, 18) + SHOW_FRAME(3, 6) + + TILES(0x79A5, 24) + SHOW_FRAME(2, 5) + + END() +}; + +const s32 * const anim_0158[2] = { + anim_0158__v0_l0, + anim_0158__v1_l0, +}; + +const s32 anim_0180__v0_l0[] = { // 0x080E3934 + PALETTE(2, 16, 0x10) + TILES(0x79CF, 36) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x79F3, 36) + SHOW_FRAME(4, 1) + + TILES(0x7A17, 36) + SHOW_FRAME(4, 2) + + TILES(0x79F3, 36) + SHOW_FRAME(4, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0180[1] = { + anim_0180__v0_l0, +}; + +const s32 anim_0181__v0_l0[] = { // 0x080E39A8 + PALETTE(2, 16, 0x10) + TILES(0x7A3B, 25) + HITBOX(0, -6, -10, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x7A54, 25) + SHOW_FRAME(4, 1) + + TILES(0x7A6D, 25) + SHOW_FRAME(4, 2) + + TILES(0x7A54, 25) + SHOW_FRAME(4, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0181[1] = { + anim_0181__v0_l0, +}; + +const s32 anim_0182__v0_l0[] = { // 0x080E3A1C + PALETTE(2, 16, 0x10) + TILES(0x7A86, 25) + HITBOX(0, -6, -11, 6, 8) + SHOW_FRAME(2, 0) + + TILES(0x7A9F, 25) + SHOW_FRAME(2, 1) + + TILES(0x7AB8, 25) + SHOW_FRAME(2, 2) + + TILES(0x7A9F, 25) + SHOW_FRAME(2, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0182[1] = { + anim_0182__v0_l0, +}; + +const s32 anim_0184__v0_l0[] = { // 0x080E3A90 + PALETTE(3, 16, 0x80) + TILES(0x7AD1, 21) + SHOW_FRAME(3, 0) + + TILES(0x7AE6, 21) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0184[1] = { + anim_0184__v0_l0, +}; + +const s32 anim_0185__v0_l0[] = { // 0x080E3AD0 + PALETTE(3, 16, 0x80) + TILES(0x7AFB, 20) + SHOW_FRAME(2, 0) + + TILES(0x7B0F, 24) + SHOW_FRAME(2, 1) + + END() +}; + +const s32 anim_0185__v1_l0[] = { // 0x080E3B08 + PALETTE(3, 16, 0x80) + TILES(0x7B27, 18) + SHOW_FRAME(2, 2) + + JUMP_BACK(8) +}; + +const s32 * const anim_0185[2] = { + anim_0185__v0_l0, + anim_0185__v1_l0, +}; + +const s32 anim_0186__v0_l0[] = { // 0x080E3B38 + PALETTE(3, 16, 0x80) + TILES(0x7B39, 24) + SHOW_FRAME(3, 0) + + TILES(0x7B51, 24) + SHOW_FRAME(3, 1) + + TILES(0x7B69, 24) + SHOW_FRAME(3, 2) + + TILES(0x7B81, 24) + SHOW_FRAME(3, 3) + + TILES(0x7B99, 24) + SHOW_FRAME(3, 4) + + TILES(0x7BB1, 24) + SHOW_FRAME(3, 5) + + TILES(0x7BC9, 24) + SHOW_FRAME(3, 6) + + TILES(0x7BE1, 24) + SHOW_FRAME(3, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0186[1] = { + anim_0186__v0_l0, +}; + +const s32 anim_0187__v0_l0[] = { // 0x080E3BF0 + PALETTE(3, 16, 0x80) + TILES(0x7BF9, 24) + SHOW_FRAME(6, 0) + + TILES(0x7C11, 20) + SHOW_FRAME(6, 1) + + TILES(0x7C25, 16) + SHOW_FRAME(6, 2) + TILES(0x7C35, 16) + SHOW_FRAME(3, 3) + + TILES(0x7C45, 16) + SHOW_FRAME(3, 4) + + JUMP_BACK(10) +}; + +const s32 * const anim_0187[1] = { + anim_0187__v0_l0, +}; + +const s32 anim_0188__v0_l0[] = { // 0x080E3C6C + PALETTE(3, 16, 0x80) + TILES(0x7C55, 30) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0188__v1_l0[] = { // 0x080E3C90 + PALETTE(3, 16, 0x80) + TILES(0x7C73, 24) + SHOW_FRAME(4, 1) + + TILES(0x7C8B, 24) + SHOW_FRAME(4, 2) + + TILES(0x7CA3, 24) + SHOW_FRAME(40, 3) + + END() +}; + +const s32 * const anim_0188[2] = { + anim_0188__v0_l0, + anim_0188__v1_l0, +}; + +const s32 anim_0190__v0_l0[] = { // 0x080E3CE4 + PALETTE(3, 16, 0x80) + TILES(0x7CBB, 9) + SHOW_FRAME(3, 0) + + TILES(0x7CC4, 9) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0190[1] = { + anim_0190__v0_l0, +}; + +const s32 anim_0191__v0_l0[] = { // 0x080E3D24 + PALETTE(3, 16, 0x80) + TILES(0x7CCD, 9) + SHOW_FRAME(10, 0) + + TILES(0x7CD6, 9) + SHOW_FRAME(10, 1) + + TILES(0x7CDF, 9) + SHOW_FRAME(10, 2) + + TILES(0x7CE8, 6) + SHOW_FRAME(16, 3) + + TILES(0x7CDF, 9) + SHOW_FRAME(10, 2) + + TILES(0x7CD6, 9) + SHOW_FRAME(10, 1) + + TILES(0x7CCD, 9) + SHOW_FRAME(10, 0) + + TILES(0x7CEE, 9) + SHOW_FRAME(16, 4) + + JUMP_BACK(43) +}; + +const s32 anim_0191__v1_l0[] = { // 0x080E3DD8 + PALETTE(3, 16, 0x80) + TILES(0x7CDF, 9) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0191[2] = { + anim_0191__v0_l0, + anim_0191__v1_l0, +}; + +const s32 anim_0192__v0_l0[] = { // 0x080E3E04 + PALETTE(4, 16, 0x10) + TILES(0x7CF7, 24) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0192__v1_l0[] = { // 0x080E3E34 + PALETTE(4, 16, 0x10) + TILES(0x7D0F, 28) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0192__v2_l0[] = { // 0x080E3E64 + PALETTE(4, 16, 0x10) + TILES(0x7D2B, 24) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0192__v3_l0[] = { // 0x080E3E94 + PALETTE(4, 16, 0x10) + TILES(0x7D43, 28) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0192__v4_l0[] = { // 0x080E3EC4 + PALETTE(4, 16, 0x10) + TILES(0x7D5F, 28) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0192__v5_l0[] = { // 0x080E3EF4 + PALETTE(4, 16, 0x10) + TILES(0x7D7B, 24) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0192__v6_l0[] = { // 0x080E3F24 + PALETTE(4, 16, 0x10) + TILES(0x7D93, 24) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0192__v7_l0[] = { // 0x080E3F54 + PALETTE(4, 16, 0x10) + TILES(0x7DAB, 24) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 * const anim_0192[8] = { + anim_0192__v0_l0, + anim_0192__v1_l0, + anim_0192__v2_l0, + anim_0192__v3_l0, + anim_0192__v4_l0, + anim_0192__v5_l0, + anim_0192__v6_l0, + anim_0192__v7_l0, +}; + +const s32 anim_0195__v0_l0[] = { // 0x080E3FA4 + PALETTE(3, 16, 0x80) + TILES(0x7DC3, 64) + SHOW_FRAME(2, 0) + + TILES(0x7E03, 64) + SHOW_FRAME(2, 1) + + TILES(0x7E43, 64) + SHOW_FRAME(2, 2) + + TILES(0x7E83, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0195[1] = { + anim_0195__v0_l0, +}; + +const s32 anim_0196__v0_l0[] = { // 0x080E400C + PALETTE(2, 16, 0x10) + TILES(0x7EC3, 12) + SHOW_FRAME(1, 0) + + TILES(0x7ECF, 12) + SHOW_FRAME(1, 1) + + TILES(0x7EC3, 12) + SHOW_FRAME(1, 0) + + TILES(0x7EDB, 15) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0196[1] = { + anim_0196__v0_l0, +}; + +const s32 anim_0197__v0_l0[] = { // 0x080E4070 + PALETTE(2, 16, 0x10) + TILES(0x7EEA, 64) + SHOW_FRAME(3, 0) + + END() +}; + +const s32 * const anim_0197[1] = { + anim_0197__v0_l0, +}; + +const s32 anim_0198__v0_l0[] = { // 0x080E4098 + PALETTE(2, 16, 0x10) + TILES(0x7F2A, 20) + SHOW_FRAME(6, 0) + + TILES(0x7F3E, 25) + SHOW_FRAME(4, 1) + + TILES(0x7F57, 25) + SHOW_FRAME(4, 2) + + TILES(0x7F70, 25) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 * const anim_0198[1] = { + anim_0198__v0_l0, +}; + +const s32 anim_0199__v0_l0[] = { // 0x080E40FC + PALETTE(5, 16, 0x20) + TILES(0x7F89, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(5, 0) + + TILES(0x7F9D, 20) + SHOW_FRAME(5, 1) + + TILES(0x7FB1, 20) + SHOW_FRAME(5, 2) + + TILES(0x7FC5, 16) + SHOW_FRAME(5, 3) + + TILES(0x7FD5, 20) + SHOW_FRAME(5, 4) + + TILES(0x7F89, 20) + SHOW_FRAME(5, 0) + + TILES(0x7F9D, 20) + SHOW_FRAME(5, 1) + + TILES(0x7FB1, 20) + SHOW_FRAME(5, 2) + + TILES(0x7FC5, 16) + SHOW_FRAME(5, 3) + + TILES(0x7FD5, 20) + SHOW_FRAME(5, 4) + + TILES(0x7FE9, 20) + SHOW_FRAME(5, 5) + + TILES(0x7F89, 20) + SHOW_FRAME(5, 0) + + TILES(0x7F9D, 20) + SHOW_FRAME(5, 1) + + TILES(0x7FFD, 20) + SHOW_FRAME(5, 6) + + TILES(0x8011, 16) + SHOW_FRAME(5, 7) + + TILES(0x8021, 20) + SHOW_FRAME(5, 8) + + TILES(0x7FE9, 20) + SHOW_FRAME(5, 5) + + TILES(0x7F89, 20) + SHOW_FRAME(5, 0) + + TILES(0x7F9D, 20) + SHOW_FRAME(5, 1) + + TILES(0x7FB1, 20) + SHOW_FRAME(5, 2) + + TILES(0x7FC5, 16) + SHOW_FRAME(5, 3) + + TILES(0x7FD5, 20) + HITBOX(0, -6, -13, 8, 16) + SHOW_FRAME(5, 4) + + TILES(0x8035, 20) + SHOW_FRAME(5, 9) + + TILES(0x8049, 20) + SHOW_FRAME(10, 10) + + TILES(0x805D, 20) + SHOW_FRAME(5, 11) + + TILES(0x8071, 20) + SHOW_FRAME(5, 12) + + TILES(0x8085, 20) + SHOW_FRAME(5, 13) + + TILES(0x8035, 20) + SHOW_FRAME(5, 9) + + TILES(0x8049, 20) + SHOW_FRAME(5, 10) + + TILES(0x805D, 20) + SHOW_FRAME(5, 11) + + TILES(0x8071, 20) + SHOW_FRAME(5, 12) + + TILES(0x8085, 20) + SHOW_FRAME(12, 13) + + TILES(0x8035, 20) + SHOW_FRAME(6, 9) + + TILES(0x7FE9, 20) + SHOW_FRAME(5, 5) + + TILES(0x7F89, 20) + SHOW_FRAME(5, 0) + + TILES(0x7F9D, 20) + SHOW_FRAME(5, 1) + + TILES(0x7FB1, 20) + SHOW_FRAME(5, 2) + + TILES(0x7FC5, 16) + SHOW_FRAME(5, 3) + + TILES(0x7FD5, 20) + SHOW_FRAME(5, 4) + + JUMP_BACK(204) +}; + +const s32 * const anim_0199[1] = { + anim_0199__v0_l0, +}; + +const s32 anim_0200__v0_l0[] = { // 0x080E4438 + PALETTE(5, 16, 0x20) + TILES(0x8099, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(10, 0) + + TILES(0x80AD, 15) + SHOW_FRAME(10, 1) + + TILES(0x80BC, 24) + SHOW_FRAME(20, 2) + + TILES(0x80D4, 15) + SHOW_FRAME(30, 3) + + TILES(0x80E3, 15) + SHOW_FRAME(8, 4) + + TILES(0x80D4, 15) + SHOW_FRAME(8, 3) + + TILES(0x80E3, 15) + SHOW_FRAME(8, 4) + + TILES(0x80D4, 15) + SHOW_FRAME(8, 3) + + TILES(0x80E3, 15) + SHOW_FRAME(8, 4) + + TILES(0x80D4, 15) + SHOW_FRAME(30, 3) + + TILES(0x80F2, 15) + SHOW_FRAME(4, 5) + + TILES(0x8101, 20) + SHOW_FRAME(10, 6) + + TILES(0x80F2, 15) + SHOW_FRAME(4, 5) + + TILES(0x8115, 15) + SHOW_FRAME(10, 7) + + TILES(0x80F2, 15) + SHOW_FRAME(60, 5) + + TILES(0x8124, 15) + SHOW_FRAME(6, 8) + + TILES(0x8133, 15) + SHOW_FRAME(6, 9) + + TILES(0x8142, 15) + SHOW_FRAME(4, 10) + + TILES(0x8133, 15) + SHOW_FRAME(16, 9) + + TILES(0x8124, 15) + SHOW_FRAME(6, 8) + + TILES(0x80D4, 15) + SHOW_FRAME(8, 3) + + TILES(0x8151, 20) + SHOW_FRAME(10, 11) + + TILES(0x8165, 20) + SHOW_FRAME(10, 12) + + TILES(0x8151, 20) + SHOW_FRAME(10, 11) + + TILES(0x8165, 20) + SHOW_FRAME(10, 12) + + TILES(0x8151, 20) + SHOW_FRAME(40, 11) + TILES(0x80D4, 15) + SHOW_FRAME(8, 3) + + TILES(0x80E3, 15) + SHOW_FRAME(8, 4) + + TILES(0x80D4, 15) + SHOW_FRAME(8, 3) + + JUMP_BACK(15) +}; + +const s32 * const anim_0200[1] = { + anim_0200__v0_l0, +}; + +const s32 anim_0201__v0_l0[] = { // 0x080E46A0 + PALETTE(5, 16, 0x20) + TILES(0x8179, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x818D, 20) + SHOW_FRAME(2, 1) + + TILES(0x81A1, 20) + SHOW_FRAME(2, 2) + + END() +}; + +const s32 anim_0201__v1_l0[] = { // 0x080E46F8 + PALETTE(5, 16, 0x20) + TILES(0x818D, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(1, 1) + + TILES(0x8179, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0201[2] = { + anim_0201__v0_l0, + anim_0201__v1_l0, +}; + +const s32 anim_0202__v0_l0[] = { // 0x080E4744 + PALETTE(5, 16, 0x20) + TILES(0x81B5, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x81C5, 16) + SHOW_FRAME(1, 1) + + TILES(0x81D5, 12) + SHOW_FRAME(1, 2) + + TILES(0x81E1, 16) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0202__v1_l0[] = { // 0x080E47B0 + PALETTE(5, 16, 0x20) + TILES(0x81C5, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 1) + + TILES(0x81B5, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0202[2] = { + anim_0202__v0_l0, + anim_0202__v1_l0, +}; + +const s32 anim_0203__v0_l0[] = { // 0x080E47FC + PALETTE(5, 16, 0x20) + TILES(0x81F1, 64) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x8231, 64) + SHOW_FRAME(3, 1) + + TILES(0x8271, 64) + SHOW_FRAME(3, 2) + + TILES(0x82B1, 64) + SHOW_FRAME(3, 3) + + TILES(0x82F1, 64) + SHOW_FRAME(3, 4) + + TILES(0x8331, 64) + SHOW_FRAME(3, 5) + + TILES(0x8371, 64) + SHOW_FRAME(3, 6) + + TILES(0x83B1, 64) + SHOW_FRAME(3, 7) + + JUMP_BACK(46) +}; + +const s32 * const anim_0203[1] = { + anim_0203__v0_l0, +}; + +const s32 anim_0204__v0_l0[] = { // 0x080E48C0 + PALETTE(5, 16, 0x20) + TILES(0x83F1, 64) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x8431, 64) + SHOW_FRAME(2, 1) + + TILES(0x8471, 64) + SHOW_FRAME(2, 2) + + TILES(0x84B1, 64) + SHOW_FRAME(2, 3) + + TILES(0x84F1, 64) + SHOW_FRAME(2, 4) + + TILES(0x8531, 64) + SHOW_FRAME(2, 5) + + TILES(0x8571, 64) + SHOW_FRAME(2, 6) + + TILES(0x85B1, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(46) +}; + +const s32 * const anim_0204[1] = { + anim_0204__v0_l0, +}; + +const s32 anim_0205__v0_l0[] = { // 0x080E4984 + PALETTE(5, 16, 0x20) + TILES(0x85F1, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x8605, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0205[1] = { + anim_0205__v0_l0, +}; + +const s32 anim_0206__v0_l0[] = { // 0x080E49CC + PALETTE(5, 16, 0x20) + TILES(0x8619, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x862D, 30) + SHOW_FRAME(1, 1) + + TILES(0x864B, 30) + SHOW_FRAME(1, 2) + + TILES(0x8669, 25) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0206[1] = { + anim_0206__v0_l0, +}; + +const s32 anim_0207__v0_l0[] = { // 0x080E4A3C + PALETTE(5, 16, 0x20) + TILES(0x8682, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x8692, 16) + SHOW_FRAME(2, 1) + + TILES(0x86A2, 16) + SHOW_FRAME(2, 2) + + TILES(0x86B2, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 * const anim_0207[1] = { + anim_0207__v0_l0, +}; + +const s32 anim_0208__v0_l0[] = { // 0x080E4ABC + PALETTE(5, 16, 0x20) + TILES(0x86C2, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x86D6, 30) + SHOW_FRAME(2, 1) + TILES(0x86F4, 30) + SHOW_FRAME(2, 2) + + JUMP_BACK(5) +}; + +const s32 anim_0208__v1_l0[] = { // 0x080E4B18 + PALETTE(5, 16, 0x20) + TILES(0x8712, 30) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 3) + + TILES(0x86C2, 20) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 * const anim_0208[2] = { + anim_0208__v0_l0, + anim_0208__v1_l0, +}; + +const s32 anim_0209__v0_l0[] = { // 0x080E4B64 + PALETTE(5, 16, 0x20) + TILES(0x8730, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 0) + TILES(0x8744, 20) + SHOW_FRAME(3, 1) + + TILES(0x8758, 20) + SHOW_FRAME(3, 2) + + TILES(0x876C, 20) + SHOW_FRAME(3, 3) + + JUMP_BACK(15) +}; + +const s32 anim_0209__v1_l0[] = { // 0x080E4BD4 + PALETTE(5, 16, 0x20) + TILES(0x8780, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 4) + + TILES(0x8794, 20) + SHOW_FRAME(3, 5) + + TILES(0x87A8, 20) + SHOW_FRAME(3, 6) + + TILES(0x87BC, 25) + SHOW_FRAME(3, 7) + + TILES(0x87D5, 30) + SHOW_FRAME(3, 8) + + TILES(0x87F3, 30) + SHOW_FRAME(3, 9) + + END() +}; + +const s32 anim_0209__v2_l0[] = { // 0x080E4C68 + PALETTE(5, 16, 0x20) + TILES(0x8811, 30) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 10) + + TILES(0x882F, 30) + SHOW_FRAME(3, 11) + + TILES(0x884D, 30) + SHOW_FRAME(3, 12) + + JUMP_BACK(21) +}; + +const s32 anim_0209__v3_l0[] = { // 0x080E4CC4 + PALETTE(5, 16, 0x20) + TILES(0x886B, 30) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 13) + + TILES(0x8889, 16) + HITBOX(0, -6, -2, 6, 28) + SHOW_FRAME(1, 14) + + TILES(0x8899, 16) + SHOW_FRAME(1, 15) + + TILES(0x8889, 16) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 * const anim_0209[4] = { + anim_0209__v0_l0, + anim_0209__v1_l0, + anim_0209__v2_l0, + anim_0209__v3_l0, +}; + +const s32 anim_0210__v0_l0[] = { // 0x080E4D4C + PALETTE(5, 16, 0x20) + TILES(0x88A9, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(4, 0) + + TILES(0x88BD, 20) + SHOW_FRAME(4, 1) + + TILES(0x88D1, 20) + SHOW_FRAME(4, 2) + + TILES(0x88E5, 25) + SHOW_FRAME(4, 3) + + TILES(0x88FE, 25) + SHOW_FRAME(4, 4) + + TILES(0x8917, 25) + SHOW_FRAME(4, 5) + + TILES(0x8930, 20) + SHOW_FRAME(4, 6) + + TILES(0x8944, 20) + SHOW_FRAME(4, 7) + + TILES(0x8958, 25) + SHOW_FRAME(4, 8) + + TILES(0x8971, 20) + SHOW_FRAME(4, 9) + + TILES(0x8985, 25) + SHOW_FRAME(4, 10) + + END() +}; + +const s32 * const anim_0210[1] = { + anim_0210__v0_l0, +}; + +const s32 anim_0211__v0_l0[] = { // 0x080E4E48 + PALETTE(5, 16, 0x20) + TILES(0x899E, 16) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(4, 0) + TILES(0x89AE, 16) + SHOW_FRAME(6, 1) + + TILES(0x89BE, 16) + SHOW_FRAME(6, 2) + + TILES(0x89CE, 16) + SHOW_FRAME(6, 3) + + TILES(0x89DE, 16) + SHOW_FRAME(6, 4) + + TILES(0x89EE, 16) + SHOW_FRAME(6, 5) + + TILES(0x89FE, 16) + SHOW_FRAME(6, 6) + + TILES(0x8A0E, 16) + SHOW_FRAME(6, 7) + + TILES(0x8A1E, 16) + SHOW_FRAME(6, 8) + + JUMP_BACK(40) +}; + +const s32 anim_0211__v1_l0[] = { // 0x080E4F1C + PALETTE(5, 16, 0x20) + TILES(0x899E, 16) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0211[2] = { + anim_0211__v0_l0, + anim_0211__v1_l0, +}; + +const s32 anim_0212__v0_l0[] = { // 0x080E4F54 + PALETTE(5, 16, 0x20) + TILES(0x8A2E, 25) + HITBOX(0, -7, -14, 5, 16) + SHOW_FRAME(2, 0) + TILES(0x8A47, 30) + SHOW_FRAME(3, 1) + + TILES(0x8A65, 36) + SHOW_FRAME(3, 2) + + TILES(0x8A89, 36) + SHOW_FRAME(3, 3) + + TILES(0x8AAD, 30) + SHOW_FRAME(3, 4) + + TILES(0x8ACB, 30) + SHOW_FRAME(3, 5) + + TILES(0x8AE9, 30) + SHOW_FRAME(3, 6) + + JUMP_BACK(30) +}; + +const s32 anim_0212__v1_l0[] = { // 0x080E5000 + PALETTE(5, 16, 0x20) + TILES(0x8B07, 25) + HITBOX(0, 2, -14, 14, 16) + SHOW_FRAME(2, 7) + + END() +}; + +const s32 * const anim_0212[2] = { + anim_0212__v0_l0, + anim_0212__v1_l0, +}; + +const s32 anim_0213__v0_l0[] = { // 0x080E5038 + PALETTE(5, 16, 0x20) + TILES(0x8B20, 25) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + TILES(0x8B39, 30) + SHOW_FRAME(4, 1) + + TILES(0x8B57, 30) + SHOW_FRAME(4, 2) + + TILES(0x8B75, 25) + SHOW_FRAME(4, 3) + + TILES(0x8B8E, 36) + SHOW_FRAME(4, 4) + + TILES(0x8BB2, 36) + SHOW_FRAME(4, 5) + + TILES(0x8BD6, 36) + SHOW_FRAME(4, 6) + + JUMP_BACK(30) +}; + +const s32 anim_0213__v1_l0[] = { // 0x080E50E4 + PALETTE(5, 16, 0x20) + TILES(0x8BFA, 25) + HITBOX(0, -4, -14, 8, 16) + SHOW_FRAME(2, 7) + + END() +}; + +const s32 * const anim_0213[2] = { + anim_0213__v0_l0, + anim_0213__v1_l0, +}; + +const s32 anim_0216__v0_l0[] = { // 0x080E511C + PALETTE(5, 16, 0x20) + TILES(0x8C13, 30) + HITBOX(0, -6, -14, 6, 14) + PLAY_SOUND(191) + SHOW_FRAME(6, 0) + + TILES(0x8C31, 30) + SHOW_FRAME(6, 1) + + END() +}; + +const s32 * const anim_0216[1] = { + anim_0216__v0_l0, +}; + +const s32 anim_0217__v0_l0[] = { // 0x080E516C + PALETTE(5, 16, 0x20) + TILES(0x8C4F, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x8C5F, 16) + SHOW_FRAME(2, 1) + + TILES(0x8C6F, 16) + SHOW_FRAME(2, 2) + + TILES(0x8C7F, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 anim_0217__v1_l0[] = { // 0x080E51E8 + PALETTE(5, 16, 0x20) + TILES(0x8C8F, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 4) + + TILES(0x8C9F, 16) + SHOW_FRAME(2, 5) + + TILES(0x8CAF, 16) + SHOW_FRAME(2, 6) + + TILES(0x8CBF, 16) + SHOW_FRAME(2, 7) + + END() +}; + +const s32 * const anim_0217[2] = { + anim_0217__v0_l0, + anim_0217__v1_l0, +}; + +const s32 anim_0218__v0_l0[] = { // 0x080E5268 + PALETTE(5, 16, 0x20) + TILES(0x8CCF, 25) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0x8CE8, 20) + SHOW_FRAME(3, 1) + + TILES(0x8CFC, 20) + SHOW_FRAME(3, 2) + + TILES(0x8D10, 20) + SHOW_FRAME(3, 3) + TILES(0x8D24, 15) + SHOW_FRAME(3, 4) + + JUMP_BACK(5) +}; + +const s32 * const anim_0218[1] = { + anim_0218__v0_l0, +}; + +const s32 anim_0220__v0_l0[] = { // 0x080E52F0 + PALETTE(5, 16, 0x20) + TILES(0x8D33, 30) + SHOW_FRAME(3, 0) + + TILES(0x8D51, 36) + SHOW_FRAME(3, 1) + + TILES(0x8D33, 30) + SHOW_FRAME(3, 0) + + TILES(0x8D75, 25) + SHOW_FRAME(3, 2) + TILES(0x8D8E, 20) + SHOW_FRAME(3, 3) + + TILES(0x8DA2, 20) + SHOW_FRAME(3, 4) + + JUMP_BACK(10) +}; + +const s32 * const anim_0220[1] = { + anim_0220__v0_l0, +}; + +const s32 anim_0221__v0_l0[] = { // 0x080E5380 + PALETTE(5, 16, 0x20) + TILES(0x8DB6, 20) + SHOW_FRAME(3, 0) + + TILES(0x8DCA, 20) + SHOW_FRAME(3, 1) + + TILES(0x8DDE, 24) + SHOW_FRAME(3, 2) + + TILES(0x8DF6, 25) + SHOW_FRAME(3, 3) + + TILES(0x8E0F, 20) + SHOW_FRAME(3, 4) + + TILES(0x8E23, 20) + SHOW_FRAME(3, 5) + + TILES(0x8E37, 25) + SHOW_FRAME(3, 6) + + TILES(0x8E50, 25) + SHOW_FRAME(3, 7) + TILES(0x8E69, 24) + SHOW_FRAME(3, 8) + + TILES(0x8E81, 30) + SHOW_FRAME(3, 9) + + TILES(0x8E9F, 30) + SHOW_FRAME(3, 10) + + TILES(0x8EBD, 24) + SHOW_FRAME(3, 11) + + TILES(0x8ED5, 24) + SHOW_FRAME(3, 12) + + TILES(0x8EED, 24) + SHOW_FRAME(3, 13) + + TILES(0x8F05, 30) + SHOW_FRAME(3, 14) + + TILES(0x8F23, 30) + SHOW_FRAME(3, 15) + + JUMP_BACK(40) +}; + +const s32 * const anim_0221[1] = { + anim_0221__v0_l0, +}; + +const s32 anim_0222__v0_l0[] = { // 0x080E54D8 + PALETTE(5, 16, 0x20) + TILES(0x8F41, 20) + SHOW_FRAME(4, 0) + + TILES(0x8F55, 30) + SHOW_FRAME(6, 1) + + TILES(0x8F73, 20) + SHOW_FRAME(4, 2) + + TILES(0x8F87, 20) + SHOW_FRAME(4, 3) + + TILES(0x8F9B, 20) + SHOW_FRAME(4, 4) + + TILES(0x8FAF, 15) + SHOW_FRAME(6, 5) + + TILES(0x8FBE, 20) + SHOW_FRAME(16, 6) + + TILES(0x8FD2, 15) + SHOW_FRAME(6, 7) + + TILES(0x8FE1, 20) + SHOW_FRAME(6, 8) + + TILES(0x8FF5, 20) + SHOW_FRAME(4, 9) + + TILES(0x9009, 20) + SHOW_FRAME(4, 10) + + TILES(0x901D, 20) + SHOW_FRAME(4, 11) + + TILES(0x9031, 25) + SHOW_FRAME(4, 12) + + TILES(0x904A, 25) + SHOW_FRAME(4, 13) + + TILES(0x8FF5, 20) + SHOW_FRAME(4, 9) + + TILES(0x9009, 20) + SHOW_FRAME(4, 10) + + TILES(0x901D, 20) + SHOW_FRAME(4, 11) + + TILES(0x9031, 25) + SHOW_FRAME(4, 12) + + TILES(0x904A, 25) + SHOW_FRAME(4, 13) + + TILES(0x8FF5, 20) + SHOW_FRAME(12, 9) + + TILES(0x9063, 20) + SHOW_FRAME(3, 14) + + TILES(0x9077, 20) + SHOW_FRAME(30, 15) + + END() +}; + +const s32 * const anim_0222[1] = { + anim_0222__v0_l0, +}; + +const s32 anim_0223__v0_l0[] = { // 0x080E56A4 + PALETTE(5, 16, 0x20) + TILES(0x908B, 25) + SHOW_FRAME(3, 0) + + TILES(0x90A4, 25) + SHOW_FRAME(3, 1) + + TILES(0x90BD, 25) + SHOW_FRAME(1, 2) + + TILES(0x90D6, 25) + SHOW_FRAME(26, 3) + + TILES(0x908B, 25) + SHOW_FRAME(3, 0) + + TILES(0x90EF, 20) + SHOW_FRAME(10, 4) + + TILES(0x9103, 20) + SHOW_FRAME(1, 5) + + TILES(0x9117, 30) + SHOW_FRAME(2, 6) + + TILES(0x9135, 30) + SHOW_FRAME(2, 7) + + TILES(0x9153, 35) + SHOW_FRAME(4, 8) + + TILES(0x9117, 30) + SHOW_FRAME(2, 6) + + TILES(0x9103, 20) + SHOW_FRAME(1, 5) + + TILES(0x9176, 20) + SHOW_FRAME(6, 9) + + TILES(0x918A, 20) + SHOW_FRAME(1, 10) + + TILES(0x919E, 20) + SHOW_FRAME(2, 11) + + TILES(0x91B2, 35) + SHOW_FRAME(4, 12) + + TILES(0x91D5, 35) + SHOW_FRAME(2, 13) + + TILES(0x919E, 20) + SHOW_FRAME(2, 11) + + TILES(0x918A, 20) + SHOW_FRAME(2, 10) + + TILES(0x90EF, 20) + SHOW_FRAME(2, 4) + + END() +}; + +const s32 * const anim_0223[1] = { + anim_0223__v0_l0, +}; + +const s32 anim_0224__v0_l0[] = { // 0x080E5848 + PALETTE(5, 16, 0x90) + TILES(0x91F8, 20) + SHOW_FRAME(3, 0) + + TILES(0x920C, 20) + SHOW_FRAME(3, 1) + + TILES(0x9220, 20) + SHOW_FRAME(3, 2) + + TILES(0x9234, 20) + SHOW_FRAME(3, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0224[1] = { + anim_0224__v0_l0, +}; + +const s32 anim_0225__v0_l0[] = { // 0x080E58B0 + PALETTE(5, 16, 0x90) + TILES(0x9248, 30) + SHOW_FRAME(20, 0) + + TILES(0x9266, 36) + SHOW_FRAME(10, 1) + + TILES(0x928A, 42) + SHOW_FRAME(8, 2) + + TILES(0x92B4, 42) + SHOW_FRAME(7, 3) + + TILES(0x92DE, 42) + SHOW_FRAME(5, 4) + + TILES(0x9308, 42) + SHOW_FRAME(3, 5) + TILES(0x9332, 42) + SHOW_FRAME(2, 6) + + TILES(0x935C, 42) + SHOW_FRAME(2, 7) + + TILES(0x9386, 42) + SHOW_FRAME(2, 8) + + JUMP_BACK(15) +}; + +const s32 * const anim_0225[1] = { + anim_0225__v0_l0, +}; + +const s32 anim_0226__v0_l0[] = { // 0x080E597C + PALETTE(5, 16, 0x20) + TILES(0x93B0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x93F0, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v1_l0[] = { // 0x080E59C4 + PALETTE(5, 16, 0x20) + TILES(0x9430, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0x9470, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v2_l0[] = { // 0x080E5A0C + PALETTE(5, 16, 0x20) + TILES(0x94B0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0x94F0, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v3_l0[] = { // 0x080E5A54 + PALETTE(5, 16, 0x20) + TILES(0x9530, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0x9570, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v4_l0[] = { // 0x080E5A9C + PALETTE(5, 16, 0x20) + TILES(0x95B0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0x95F0, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v5_l0[] = { // 0x080E5AE4 + PALETTE(5, 16, 0x20) + TILES(0x9630, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0x9670, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v6_l0[] = { // 0x080E5B2C + PALETTE(5, 16, 0x20) + TILES(0x96B0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 12) + + TILES(0x96F0, 64) + SHOW_FRAME(2, 13) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v7_l0[] = { // 0x080E5B74 + PALETTE(5, 16, 0x20) + TILES(0x9730, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 14) + + TILES(0x9770, 64) + SHOW_FRAME(2, 15) + + JUMP_BACK(16) +}; + +const s32 anim_0226__v8_l0[] = { // 0x080E5BBC + PALETTE(5, 16, 0x20) + TILES(0x97B0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 16) + + TILES(0x97F0, 64) + SHOW_FRAME(2, 17) + + JUMP_BACK(16) +}; + +const s32 * const anim_0226[9] = { + anim_0226__v0_l0, + anim_0226__v1_l0, + anim_0226__v2_l0, + anim_0226__v3_l0, + anim_0226__v4_l0, + anim_0226__v5_l0, + anim_0226__v6_l0, + anim_0226__v7_l0, + anim_0226__v8_l0, +}; + +const s32 anim_0227__v0_l0[] = { // 0x080E5C28 + PALETTE(5, 16, 0x20) + TILES(0x9830, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x9870, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0227__v1_l0[] = { // 0x080E5C70 + PALETTE(5, 16, 0x20) + TILES(0x98B0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0x98F0, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0227__v2_l0[] = { // 0x080E5CB8 + PALETTE(5, 16, 0x20) + TILES(0x9930, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0x9970, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0227__v3_l0[] = { // 0x080E5D00 + PALETTE(5, 16, 0x20) + TILES(0x99B0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0x99F0, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0227__v4_l0[] = { // 0x080E5D48 + PALETTE(5, 16, 0x20) + TILES(0x9A30, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0x9A70, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0227__v5_l0[] = { // 0x080E5D90 + PALETTE(5, 16, 0x20) + TILES(0x9AB0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0x9AB0, 64) + SHOW_FRAME(2, 10) + + JUMP_BACK(16) +}; + +const s32 anim_0227__v6_l0[] = { // 0x080E5DD8 + PALETTE(5, 16, 0x20) + TILES(0x9AF0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 11) + + TILES(0x9B30, 64) + SHOW_FRAME(2, 12) + + JUMP_BACK(16) +}; + +const s32 anim_0227__v7_l0[] = { // 0x080E5E20 + PALETTE(5, 16, 0x20) + TILES(0x9B70, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 13) + + TILES(0x9BB0, 64) + SHOW_FRAME(2, 14) + + JUMP_BACK(16) +}; + +const s32 * const anim_0227[8] = { + anim_0227__v0_l0, + anim_0227__v1_l0, + anim_0227__v2_l0, + anim_0227__v3_l0, + anim_0227__v4_l0, + anim_0227__v5_l0, + anim_0227__v6_l0, + anim_0227__v7_l0, +}; + +const s32 anim_0228__v0_l0[] = { // 0x080E5E88 + PALETTE(5, 16, 0x20) + TILES(0x9BF0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + TILES(0x9C30, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 1) + + TILES(0x9C70, 64) + SHOW_FRAME(2, 2) + + JUMP_BACK(13) +}; + +const s32 anim_0228__v1_l0[] = { // 0x080E5EF0 + PALETTE(5, 16, 0x20) + TILES(0x9BF0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0228[2] = { + anim_0228__v0_l0, + anim_0228__v1_l0, +}; + +const s32 anim_0229__v0_l0[] = { // 0x080E5F28 + PALETTE(5, 16, 0x20) + TILES(0x9CB0, 64) + HITBOX(0, -20, -20, 20, 20) + SHOW_FRAME(2, 0) + + TILES(0x9CF0, 64) + SHOW_FRAME(2, 1) + + TILES(0x9D30, 64) + SHOW_FRAME(2, 2) + + TILES(0x9D70, 64) + SHOW_FRAME(2, 3) + + TILES(0x9DB0, 64) + SHOW_FRAME(2, 4) + + TILES(0x9DF0, 64) + SHOW_FRAME(2, 5) + + TILES(0x9E30, 64) + SHOW_FRAME(2, 6) + + TILES(0x9E70, 64) + SHOW_FRAME(2, 7) + + TILES(0x9EB0, 64) + SHOW_FRAME(2, 8) + + TILES(0x9EF0, 64) + SHOW_FRAME(2, 9) + + TILES(0x9F30, 64) + SHOW_FRAME(2, 10) + + JUMP_BACK(61) +}; + +const s32 * const anim_0229[1] = { + anim_0229__v0_l0, +}; + +const s32 anim_0230__v0_l0[] = { // 0x080E6028 + PALETTE(5, 16, 0x20) + TILES(0x9F70, 64) + HITBOX(0, -14, -14, 14, 14) + SHOW_FRAME(3, 0) + + TILES(0x9FB0, 64) + SHOW_FRAME(3, 1) + + TILES(0x9FF0, 64) + SHOW_FRAME(3, 2) + + TILES(0xA030, 64) + SHOW_FRAME(3, 3) + + TILES(0xA070, 64) + SHOW_FRAME(3, 4) + + TILES(0xA0B0, 64) + SHOW_FRAME(3, 5) + + TILES(0xA0F0, 64) + SHOW_FRAME(3, 6) + + TILES(0xA130, 64) + SHOW_FRAME(3, 7) + + TILES(0xA170, 64) + SHOW_FRAME(3, 8) + + TILES(0xA1B0, 64) + SHOW_FRAME(3, 9) + + TILES(0xA1F0, 64) + SHOW_FRAME(3, 10) + + TILES(0xA230, 64) + SHOW_FRAME(3, 11) + + TILES(0xA270, 64) + SHOW_FRAME(3, 12) + + TILES(0xA2B0, 64) + SHOW_FRAME(3, 13) + + END() +}; + +const s32 * const anim_0230[1] = { + anim_0230__v0_l0, +}; + +const s32 anim_0231__v0_l0[] = { // 0x080E6160 + PALETTE(5, 16, 0x20) + TILES(0xA2F0, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(3, 0) + + TILES(0xA330, 64) + SHOW_FRAME(3, 1) + + TILES(0xA370, 64) + SHOW_FRAME(3, 2) + + TILES(0xA3B0, 64) + SHOW_FRAME(3, 3) + + TILES(0xA3F0, 64) + SHOW_FRAME(3, 4) + + TILES(0xA430, 64) + SHOW_FRAME(3, 5) + + TILES(0xA470, 64) + SHOW_FRAME(3, 6) + + JUMP_BACK(41) +}; + +const s32 * const anim_0231[1] = { + anim_0231__v0_l0, +}; + +const s32 anim_0232__v0_l0[] = { // 0x080E6210 + PALETTE(5, 16, 0x20) + TILES(0xA4B0, 64) + SHOW_FRAME(6, 0) + TILES(0xA4F0, 64) + SHOW_FRAME(3, 1) + + TILES(0xA530, 64) + SHOW_FRAME(3, 2) + + JUMP_BACK(10) +}; + +const s32 anim_0232__v1_l0[] = { // 0x080E6260 + PALETTE(5, 16, 0x20) + TILES(0xA4B0, 64) + SHOW_FRAME(6, 0) + + END() +}; + +const s32 * const anim_0232[2] = { + anim_0232__v0_l0, + anim_0232__v1_l0, +}; + +const s32 anim_0233__v0_l0[] = { // 0x080E628C + PALETTE(5, 16, 0x20) + TILES(0xA570, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0xA5B0, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0233__v1_l0[] = { // 0x080E62D4 + PALETTE(5, 16, 0x20) + TILES(0xA5F0, 64) + SHOW_FRAME(2, 2) + + TILES(0xA630, 64) + SHOW_FRAME(2, 3) + + TILES(0xA670, 64) + SHOW_FRAME(2, 4) + + TILES(0xA6B0, 64) + SHOW_FRAME(2, 5) + + TILES(0xA6F0, 64) + SHOW_FRAME(2, 6) + + TILES(0xA730, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(33) +}; + +const s32 * const anim_0233[2] = { + anim_0233__v0_l0, + anim_0233__v1_l0, +}; + +const s32 anim_0234__v0_l0[] = { // 0x080E6368 + PALETTE(5, 16, 0x90) + TILES(0xA770, 16) + SHOW_FRAME(1, 0) + + TILES(0xA780, 16) + SHOW_FRAME(1, 1) + + TILES(0xA790, 16) + SHOW_FRAME(16, 2) + + TILES(0xA7A0, 16) + SHOW_FRAME(4, 3) + + TILES(0xA7B0, 16) + SHOW_FRAME(4, 4) + + TILES(0xA7C0, 20) + SHOW_FRAME(4, 5) + + TILES(0xA7D4, 20) + SHOW_FRAME(4, 6) + + TILES(0xA7E8, 25) + SHOW_FRAME(30, 7) + + END() +}; + +const s32 * const anim_0234[1] = { + anim_0234__v0_l0, +}; + +const s32 anim_0235__v0_l0[] = { // 0x080E641C + PALETTE(5, 16, 0x20) + TILES(0xA801, 16) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0xA811, 16) + SHOW_FRAME(3, 1) + + TILES(0xA821, 20) + SHOW_FRAME(3, 2) + + TILES(0xA835, 16) + SHOW_FRAME(3, 3) + + TILES(0xA845, 16) + SHOW_FRAME(3, 4) + + TILES(0xA855, 16) + SHOW_FRAME(3, 5) + + TILES(0xA865, 16) + SHOW_FRAME(3, 6) + + TILES(0xA875, 16) + SHOW_FRAME(3, 7) + + JUMP_BACK(46) +}; + +const s32 anim_0235__v1_l0[] = { // 0x080E64DC + PALETTE(5, 16, 0x20) + TILES(0xA885, 30) + HITBOX(0, -6, -16, 6, 16) + SHOW_FRAME(3, 8) + + TILES(0xA8A3, 25) + SHOW_FRAME(3, 9) + + TILES(0xA8BC, 20) + SHOW_FRAME(3, 10) + + TILES(0xA8D0, 25) + SHOW_FRAME(3, 11) + + TILES(0xA8E9, 30) + SHOW_FRAME(3, 12) + + TILES(0xA907, 25) + SHOW_FRAME(3, 13) + + TILES(0xA920, 30) + SHOW_FRAME(3, 14) + + TILES(0xA93E, 25) + SHOW_FRAME(3, 15) + + JUMP_BACK(46) +}; + +const s32 anim_0235__v2_l0[] = { // 0x080E659C + PALETTE(5, 16, 0x20) + TILES(0xA957, 30) + HITBOX(0, -6, -16, 6, 16) + SHOW_FRAME(3, 16) + + TILES(0xA975, 25) + SHOW_FRAME(3, 17) + + TILES(0xA98E, 30) + SHOW_FRAME(3, 18) + + TILES(0xA9AC, 25) + SHOW_FRAME(3, 19) + + TILES(0xA9C5, 30) + SHOW_FRAME(3, 20) + + TILES(0xA9E3, 30) + SHOW_FRAME(3, 21) + + TILES(0xAA01, 25) + SHOW_FRAME(3, 22) + + TILES(0xAA1A, 30) + SHOW_FRAME(3, 23) + + JUMP_BACK(46) +}; + +const s32 * const anim_0235[3] = { + anim_0235__v0_l0, + anim_0235__v1_l0, + anim_0235__v2_l0, +}; + +const s32 anim_0236__v0_l0[] = { // 0x080E6668 + PALETTE(5, 16, 0x20) + TILES(0xAA38, 25) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xAA51, 24) + SHOW_FRAME(2, 1) + + TILES(0xAA69, 20) + SHOW_FRAME(4, 2) + + TILES(0xAA7D, 25) + SHOW_FRAME(1, 3) + + TILES(0xAA96, 25) + SHOW_FRAME(1, 4) + + TILES(0xAAAF, 30) + HITBOX(0, -8, -14, 4, 16) + SHOW_FRAME(2, 5) + + TILES(0xAACD, 30) + SHOW_FRAME(2, 6) + + TILES(0xAAEB, 30) + SHOW_FRAME(2, 7) + + END() +}; + +const s32 * const anim_0236[1] = { + anim_0236__v0_l0, +}; + +const s32 anim_0237__v0_l0[] = { // 0x080E6734 + PALETTE(5, 16, 0x20) + TILES(0xAB09, 30) + HITBOX(0, -6, -18, 8, 14) + SHOW_FRAME(3, 0) + + TILES(0xAB27, 30) + SHOW_FRAME(3, 1) + + TILES(0xAB45, 30) + SHOW_FRAME(3, 2) + + TILES(0xAB63, 24) + SHOW_FRAME(2, 3) + + TILES(0xAB7B, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(2, 4) + + END() +}; + +const s32 * const anim_0237[1] = { + anim_0237__v0_l0, +}; + +const s32 anim_0238__v0_l0[] = { // 0x080E67C4 + PALETTE(5, 16, 0x20) + TILES(0xAB8F, 64) + SHOW_FRAME(2, 0) + + TILES(0xABCF, 64) + SHOW_FRAME(2, 1) + + TILES(0xAC0F, 64) + SHOW_FRAME(2, 2) + + TILES(0xAC4F, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0238[1] = { + anim_0238__v0_l0, +}; + +const s32 anim_0239__v0_l0[] = { // 0x080E682C + PALETTE(5, 16, 0x20) + TILES(0xAC8F, 28) + HITBOX(0, -30, -24, -6, -6) + CMD_12(0x10) + SHOW_FRAME(3, 0) + + TILES(0xACAB, 20) + HITBOX(0, -22, -24, -4, -6) + CMD_12(0x10) + SHOW_FRAME(3, 1) + + TILES(0xACBF, 12) + HITBOX(0, -6, -24, 2, -6) + CMD_12(0x10) + SHOW_FRAME(3, 2) + + TILES(0xACCB, 20) + HITBOX(0, -2, -24, 6, -6) + CMD_12(0x10) + SHOW_FRAME(3, 3) + + TILES(0xACDF, 20) + HITBOX(0, 8, -24, 26, -6) + CMD_12(0x10) + SHOW_FRAME(3, 4) + + TILES(0xACF3, 28) + HITBOX(0, 6, -24, 34, -6) + CMD_12(0x10) + SHOW_FRAME(3, 5) + + TILES(0xAD0F, 20) + HITBOX(0, 8, -24, 26, -6) + CMD_12(0x13) + SHOW_FRAME(3, 6) + + TILES(0xAD23, 16) + HITBOX(0, 2, -24, 10, -6) + CMD_12(0x13) + SHOW_FRAME(3, 7) + + TILES(0xAD33, 16) + HITBOX(0, -8, -24, 0, -6) + CMD_12(0x13) + SHOW_FRAME(3, 8) + + TILES(0xAD43, 24) + HITBOX(0, -22, -24, -4, -6) + CMD_12(0x13) + SHOW_FRAME(3, 9) + + JUMP_BACK(103) +}; + +const s32 anim_0239__v1_l0[] = { // 0x080E69D0 + PALETTE(5, 16, 0x20) + TILES(0xAD5B, 28) + HITBOX(0, -8, 1, 8, 35) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 10) + + TILES(0xAD77, 20) + HITBOX(0, -8, 1, 8, 23) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 11) + + TILES(0xAD8B, 12) + HITBOX(0, -8, -3, 8, 9) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 12) + + TILES(0xAD97, 20) + HITBOX(0, -8, -12, 8, 0) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 13) + + TILES(0xADAB, 20) + HITBOX(0, -8, -20, 8, -2) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 14) + + TILES(0xADBF, 28) + HITBOX(0, -8, -40, 8, -6) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 15) + + TILES(0xADDB, 20) + HITBOX(0, -8, -24, 8, -2) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 16) + + TILES(0xADEF, 16) + HITBOX(0, -8, -12, 8, 0) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 17) + + TILES(0xADFF, 16) + HITBOX(0, -8, -3, 8, 9) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 18) + + TILES(0xAE0F, 24) + HITBOX(0, -8, 1, 8, 19) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 19) + + JUMP_BACK(103) +}; + +const s32 * const anim_0239[2] = { + anim_0239__v0_l0, + anim_0239__v1_l0, +}; + +const s32 anim_0240__v0_l0[] = { // 0x080E6B7C + PALETTE(5, 16, 0x20) + TILES(0xAE27, 24) + HITBOX(0, -6, -19, 6, 7) + SHOW_FRAME(10, 0) + + TILES(0xAE3F, 24) + SHOW_FRAME(10, 1) + + TILES(0xAE57, 24) + SHOW_FRAME(10, 2) + + TILES(0xAE3F, 24) + SHOW_FRAME(10, 1) + + JUMP_BACK(26) +}; + +const s32 anim_0240__v1_l0[] = { // 0x080E6BEC + PALETTE(5, 16, 0x20) + TILES(0xAE6F, 24) + HITBOX(0, -6, -19, 6, 7) + SHOW_FRAME(5, 3) + + TILES(0xAE87, 24) + SHOW_FRAME(5, 4) + + TILES(0xAE9F, 24) + SHOW_FRAME(5, 5) + + TILES(0xAE87, 24) + SHOW_FRAME(5, 4) + + JUMP_BACK(26) +}; + +const s32 * const anim_0240[2] = { + anim_0240__v0_l0, + anim_0240__v1_l0, +}; + +const s32 anim_0241__v0_l0[] = { // 0x080E6C64 + PALETTE(5, 16, 0x20) + TILES(0xAEB7, 36) + HITBOX(0, -6, -12, 6, 10) + SHOW_FRAME(5, 0) + + TILES(0xAEDB, 30) + SHOW_FRAME(5, 1) + + TILES(0xAEF9, 20) + SHOW_FRAME(5, 2) + + TILES(0xAF0D, 30) + SHOW_FRAME(5, 3) + + TILES(0xAF2B, 36) + SHOW_FRAME(5, 4) + + TILES(0xAF4F, 20) + SHOW_FRAME(5, 5) + + TILES(0xAF63, 25) + SHOW_FRAME(5, 6) + + TILES(0xAF7C, 20) + SHOW_FRAME(5, 7) + + JUMP_BACK(46) +}; + +const s32 * const anim_0241[1] = { + anim_0241__v0_l0, +}; + +const s32 anim_0242__v0_l0[] = { // 0x080E6D28 + PALETTE(5, 16, 0x20) + TILES(0xAF90, 30) + SHOW_FRAME(8, 0) + + TILES(0xAFAE, 30) + SHOW_FRAME(8, 1) + + TILES(0xAFCC, 30) + SHOW_FRAME(8, 2) + + TILES(0xAFAE, 30) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0242[1] = { + anim_0242__v0_l0, +}; + +const s32 anim_0245__v0_l0[] = { // 0x080E6D90 + PALETTE(5, 16, 0x20) + TILES(0xAFEA, 20) + HITBOX(0, -4, -8, 18, 6) + SHOW_FRAME(6, 0) + + TILES(0xAFFE, 20) + SHOW_FRAME(4, 1) + + TILES(0xB012, 20) + SHOW_FRAME(4, 2) + + TILES(0xB026, 15) + SHOW_FRAME(6, 3) + + TILES(0xB035, 20) + SHOW_FRAME(6, 4) + + TILES(0xB049, 16) + SHOW_FRAME(6, 5) + + JUMP_BACK(36) +}; + +const s32 * const anim_0245[1] = { + anim_0245__v0_l0, +}; + +const s32 anim_0246__v0_l0[] = { // 0x080E6E2C + PALETTE(5, 16, 0x20) + TILES(0xB059, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0246__v1_l0[] = { // 0x080E6E5C + PALETTE(5, 16, 0x20) + TILES(0xB071, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0246__v2_l0[] = { // 0x080E6E8C + PALETTE(5, 16, 0x20) + TILES(0xB089, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0246__v3_l0[] = { // 0x080E6EBC + PALETTE(5, 16, 0x20) + TILES(0xB0A1, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0246[4] = { + anim_0246__v0_l0, + anim_0246__v1_l0, + anim_0246__v2_l0, + anim_0246__v3_l0, +}; + +const s32 anim_0249__v0_l0[] = { // 0x080E6EFC + PALETTE(5, 16, 0x20) + TILES(0xB0B9, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xB0B9, 20) + SHOW_FRAME(2, 0) + + TILES(0xB0CD, 30) + HITBOX(0, -16, -14, 2, 16) + HITBOX(1, -32, -12, -14, 16) + PLAY_SOUND(126) + SHOW_FRAME(2, 1) + + TILES(0xB0EB, 35) + HITBOX(0, -6, -14, 6, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(4, 2) + + TILES(0xB10E, 30) + HITBOX(0, -6, -14, 6, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(2, 3) + + TILES(0xB0B9, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 anim_0249__v1_l0[] = { // 0x080E6FEC + PALETTE(5, 16, 0x20) + TILES(0xB12C, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 4) + + TILES(0xB140, 20) + SHOW_FRAME(2, 5) + + TILES(0xB154, 35) + HITBOX(0, -17, -14, 6, 16) + HITBOX(1, -32, -12, -14, 16) + SHOW_FRAME(2, 6) + + TILES(0xB177, 35) + HITBOX(0, -17, -14, 6, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(6, 7) + + TILES(0xB140, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 5) + + TILES(0xB12C, 20) + SHOW_FRAME(2, 4) + + END() +}; + +const s32 * const anim_0249[2] = { + anim_0249__v0_l0, + anim_0249__v1_l0, +}; + +const s32 anim_0250__v0_l0[] = { // 0x080E70C4 + PALETTE(5, 16, 0x20) + TILES(0xB19A, 25) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xB1B3, 25) + SHOW_FRAME(2, 1) + + END() +}; + +const s32 anim_0250__v1_l0[] = { // 0x080E7108 + PALETTE(5, 16, 0x20) + TILES(0xB1CC, 28) + HITBOX(0, -6, -20, 6, 2) + HITBOX(1, -16, -35, 0, 16) + SHOW_FRAME(6, 2) + + TILES(0xB1E8, 24) + HITBOX(0, -6, -20, 6, 2) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(5, 3) + + TILES(0xB200, 30) + SHOW_FRAME(4, 4) + + TILES(0xB21E, 30) + SHOW_FRAME(3, 5) + TILES(0xB23C, 30) + SHOW_FRAME(2, 6) + + TILES(0xB25A, 30) + SHOW_FRAME(2, 7) + + TILES(0xB278, 30) + SHOW_FRAME(2, 8) + + JUMP_BACK(15) +}; + +const s32 anim_0250__v2_l0[] = { // 0x080E71D8 + PALETTE(5, 16, 0x20) + TILES(0xB296, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 9) + + TILES(0xB2A6, 16) + SHOW_FRAME(1, 10) + + TILES(0xB296, 16) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0250__v3_l0[] = { // 0x080E7230 + PALETTE(6, 16, 0x40) + TILES(0xB2B6, 6) + SHOW_FRAME(2, 11) + + TILES(0xB2BC, 12) + SHOW_FRAME(2, 12) + + TILES(0xB2C8, 20) + SHOW_FRAME(2, 13) + + TILES(0xB2DC, 20) + SHOW_FRAME(2, 14) + + TILES(0xB2F0, 24) + SHOW_FRAME(3, 15) + + TILES(0xB308, 24) + SHOW_FRAME(3, 16) + + TILES(0xB320, 24) + SHOW_FRAME(3, 17) + + TILES(0xB338, 9) + SHOW_FRAME(3, 18) + + END() +}; + +const s32 * const anim_0250[4] = { + anim_0250__v0_l0, + anim_0250__v1_l0, + anim_0250__v2_l0, + anim_0250__v3_l0, +}; + +const s32 anim_0260__v0_l0[] = { // 0x080E72F0 + PALETTE(5, 16, 0x20) + TILES(0xB341, 24) + HITBOX(0, -6, -8, 16, 6) + HITBOX(1, -12, -12, 2, 9) + SHOW_FRAME(3, 0) + + TILES(0xB359, 24) + SHOW_FRAME(3, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0260[1] = { + anim_0260__v0_l0, +}; + +const s32 anim_0261__v0_l0[] = { // 0x080E7348 + PALETTE(5, 16, 0x20) + TILES(0xB371, 24) + HITBOX(0, -6, -8, 16, 6) + HITBOX(1, -12, -12, 2, 9) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0261__v1_l0[] = { // 0x080E7384 + PALETTE(5, 16, 0x20) + TILES(0xB389, 24) + HITBOX(0, -10, -8, 12, 6) + HITBOX(1, -16, -12, -2, 9) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0261__v2_l0[] = { // 0x080E73C0 + PALETTE(5, 16, 0x20) + TILES(0xB3A1, 24) + HITBOX(0, -14, -8, 8, 6) + HITBOX(1, 2, -12, 16, 9) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0261__v3_l0[] = { // 0x080E73FC + PALETTE(5, 16, 0x20) + TILES(0xB3B9, 24) + HITBOX(0, -18, -8, 4, 6) + HITBOX(1, -2, -12, 12, 9) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0261[4] = { + anim_0261__v0_l0, + anim_0261__v1_l0, + anim_0261__v2_l0, + anim_0261__v3_l0, +}; + +const s32 anim_0262__v0_l0[] = { // 0x080E7448 + PALETTE(5, 16, 0x20) + TILES(0xB3D1, 15) + HITBOX(0, -5, -6, 21, 7) + HITBOX(1, -11, -10, 2, 10) + SHOW_FRAME(2, 0) + + TILES(0xB3E0, 15) + SHOW_FRAME(2, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0262[1] = { + anim_0262__v0_l0, +}; + +const s32 anim_0263__v0_l0[] = { // 0x080E74A0 + PALETTE(5, 16, 0x20) + TILES(0xB3EF, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 0) + + TILES(0xB403, 25) + SHOW_FRAME(3, 1) + + TILES(0xB41C, 30) + SHOW_FRAME(3, 2) + + TILES(0xB43A, 30) + SHOW_FRAME(3, 3) + + TILES(0xB458, 30) + SHOW_FRAME(3, 4) + + TILES(0xB476, 30) + SHOW_FRAME(3, 5) + TILES(0xB494, 30) + SHOW_FRAME(3, 6) + + JUMP_BACK(5) +}; + +const s32 anim_0263__v1_l0[] = { // 0x080E754C + PALETTE(5, 16, 0x20) + TILES(0xB4B2, 30) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 7) + + TILES(0xB4D0, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 8) + + TILES(0xB4E0, 16) + SHOW_FRAME(1, 9) + + TILES(0xB4F0, 16) + SHOW_FRAME(6, 10) + + TILES(0xB4E0, 16) + SHOW_FRAME(1, 9) + + TILES(0xB4D0, 16) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0263[2] = { + anim_0263__v0_l0, + anim_0263__v1_l0, +}; + +const s32 anim_0264__v0_l0[] = { // 0x080E75F4 + PALETTE(5, 16, 0x20) + TILES(0xB500, 30) + HITBOX(0, -2, -14, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0xB51E, 20) + HITBOX(0, -6, -10, 10, 15) + SHOW_FRAME(2, 1) + + TILES(0xB532, 16) + HITBOX(0, -9, -9, -9, -9) + SHOW_FRAME(2, 2) + + END() +}; + +const s32 * const anim_0264[1] = { + anim_0264__v0_l0, +}; + +const s32 anim_0265__v0_l0[] = { // 0x080E7668 + PALETTE(5, 16, 0x20) + TILES(0xB542, 20) + HITBOX(0, -6, -10, 10, 15) + SHOW_FRAME(4, 0) + + TILES(0xB556, 24) + PLAY_SOUND(125) + SHOW_FRAME(4, 1) + + TILES(0xB56E, 20) + SHOW_FRAME(4, 2) + + TILES(0xB582, 20) + SHOW_FRAME(4, 3) + + TILES(0xB596, 24) + PLAY_SOUND(125) + SHOW_FRAME(4, 4) + + TILES(0xB5AE, 20) + SHOW_FRAME(4, 5) + + JUMP_BACK(40) +}; + +const s32 anim_0265__v1_l0[] = { // 0x080E7710 + PALETTE(5, 16, 0x20) + TILES(0xB5AE, 20) + HITBOX(0, -6, -10, 10, 15) + SHOW_FRAME(4, 5) + + TILES(0xB596, 24) + SHOW_FRAME(4, 4) + + TILES(0xB582, 20) + PLAY_SOUND(125) + SHOW_FRAME(4, 3) + + TILES(0xB56E, 20) + SHOW_FRAME(4, 2) + + TILES(0xB556, 24) + SHOW_FRAME(4, 1) + + TILES(0xB542, 20) + PLAY_SOUND(125) + SHOW_FRAME(4, 0) + + JUMP_BACK(40) +}; + +const s32 anim_0265__v2_l0[] = { // 0x080E77B8 + PALETTE(5, 16, 0x20) + TILES(0xB5C2, 16) + HITBOX(0, -6, -10, 10, 15) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0265__v3_l0[] = { // 0x080E77E8 + PALETTE(5, 16, 0x20) + TILES(0xB5D2, 20) + HITBOX(0, -9, -8, 7, 15) + SHOW_FRAME(4, 7) + + TILES(0xB5E6, 18) + HITBOX(0, -15, -16, 1, 10) + SHOW_FRAME(4, 8) + + TILES(0xB5F8, 24) + HITBOX(0, -17, -20, -7, 6) + SHOW_FRAME(4, 9) + + TILES(0xB610, 24) + SHOW_FRAME(4, 10) + + TILES(0xB628, 20) + HITBOX(0, -19, -20, -7, 0) + SHOW_FRAME(4, 11) + + END() +}; + +const s32 anim_0265__v4_l0[] = { // 0x080E788C + PALETTE(5, 16, 0x20) + TILES(0xB63C, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(4, 12) + + TILES(0xB64C, 16) + SHOW_FRAME(4, 13) + + END() +}; + +const s32 * const anim_0265[5] = { + anim_0265__v0_l0, + anim_0265__v1_l0, + anim_0265__v2_l0, + anim_0265__v3_l0, + anim_0265__v4_l0, +}; + +const s32 anim_0269__v0_l0[] = { // 0x080E78E4 + PALETTE(5, 16, 0x20) + TILES(0xB65C, 30) + HITBOX(0, -6, -17, 6, 9) + SHOW_FRAME(6, 0) + + TILES(0xB67A, 24) + SHOW_FRAME(4, 1) + + TILES(0xB692, 24) + SHOW_FRAME(4, 2) + + TILES(0xB6AA, 24) + SHOW_FRAME(6, 3) + + TILES(0xB6C2, 24) + SHOW_FRAME(6, 4) + + TILES(0xB6DA, 24) + SHOW_FRAME(6, 5) + + JUMP_BACK(36) +}; + +const s32 * const anim_0269[1] = { + anim_0269__v0_l0, +}; + +const s32 anim_0270__v0_l0[] = { // 0x080E7980 + PALETTE(5, 16, 0x20) + TILES(0xB6F2, 24) + HITBOX(0, -6, -17, 6, 9) + SHOW_FRAME(2, 0) + + TILES(0xB70A, 24) + SHOW_FRAME(2, 1) + + END() +}; + +const s32 * const anim_0270[1] = { + anim_0270__v0_l0, +}; + +const s32 anim_0271__v0_l0[] = { // 0x080E79C8 + PALETTE(5, 16, 0x20) + TILES(0xB722, 30) + HITBOX(0, -6, -17, 6, 9) + SHOW_FRAME(6, 0) + + TILES(0xB740, 24) + SHOW_FRAME(6, 1) + + TILES(0xB758, 24) + SHOW_FRAME(6, 2) + + TILES(0xB770, 24) + SHOW_FRAME(6, 3) + + TILES(0xB788, 24) + SHOW_FRAME(6, 4) + + TILES(0xB7A0, 24) + SHOW_FRAME(6, 5) + + JUMP_BACK(36) +}; + +const s32 * const anim_0271[1] = { + anim_0271__v0_l0, +}; + +const s32 anim_0280__v0_l0[] = { // 0x080E7A64 + PALETTE(5, 16, 0x20) + TILES(0xB7B8, 30) + HITBOX(0, -4, -14, 8, 16) + SHOW_FRAME(4, 0) + + TILES(0xB7D6, 36) + SHOW_FRAME(4, 1) + + TILES(0xB7FA, 36) + SHOW_FRAME(4, 2) + + TILES(0xB81E, 25) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0280[1] = { + anim_0280__v0_l0, +}; + +const s32 anim_0281__v0_l0[] = { // 0x080E7AD8 + PALETTE(5, 16, 0x20) + TILES(0xB837, 30) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0xB855, 36) + SHOW_FRAME(4, 1) + + TILES(0xB879, 36) + SHOW_FRAME(4, 2) + + TILES(0xB89D, 24) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0281[1] = { + anim_0281__v0_l0, +}; + +const s32 anim_0282__v0_l0[] = { // 0x080E7B4C + PALETTE(5, 16, 0x20) + TILES(0xB8B5, 25) + HITBOX(0, -6, -16, 6, 2) + SHOW_FRAME(2, 0) + + TILES(0xB8CE, 25) + SHOW_FRAME(2, 1) + + TILES(0xB8E7, 25) + SHOW_FRAME(2, 2) + + TILES(0xB900, 20) + SHOW_FRAME(2, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0282[1] = { + anim_0282__v0_l0, +}; + +const s32 anim_0284__v0_l0[] = { // 0x080E7BC0 + PALETTE(5, 16, 0x90) + TILES(0xB914, 24) + SHOW_FRAME(3, 0) + + TILES(0xB92C, 24) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0284[1] = { + anim_0284__v0_l0, +}; + +const s32 anim_0285__v0_l0[] = { // 0x080E7C00 + PALETTE(5, 16, 0x90) + TILES(0xB944, 16) + SHOW_FRAME(2, 0) + + TILES(0xB954, 16) + SHOW_FRAME(2, 1) + + END() +}; + +const s32 anim_0285__v1_l0[] = { // 0x080E7C38 + PALETTE(5, 16, 0x90) + TILES(0xB964, 16) + SHOW_FRAME(2, 2) + + END() +}; + +const s32 * const anim_0285[2] = { + anim_0285__v0_l0, + anim_0285__v1_l0, +}; + +const s32 anim_0286__v0_l0[] = { // 0x080E7C64 + PALETTE(5, 16, 0x90) + TILES(0xB974, 15) + SHOW_FRAME(3, 0) + + TILES(0xB983, 20) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0286[1] = { + anim_0286__v0_l0, +}; + +const s32 anim_0287__v0_l0[] = { // 0x080E7CA4 + PALETTE(5, 16, 0x90) + TILES(0xB997, 20) + SHOW_FRAME(6, 0) + + TILES(0xB9AB, 15) + SHOW_FRAME(6, 1) + + TILES(0xB9BA, 20) + SHOW_FRAME(6, 2) + TILES(0xB9CE, 20) + SHOW_FRAME(3, 3) + + TILES(0xB9E2, 20) + SHOW_FRAME(3, 4) + + JUMP_BACK(10) +}; + +const s32 * const anim_0287[1] = { + anim_0287__v0_l0, +}; + +const s32 anim_0288__v0_l0[] = { // 0x080E7D20 + PALETTE(5, 16, 0x90) + TILES(0xB9F6, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0288__v1_l0[] = { // 0x080E7D44 + PALETTE(5, 16, 0x90) + TILES(0xBA0A, 20) + SHOW_FRAME(6, 1) + + TILES(0xBA1E, 15) + SHOW_FRAME(6, 2) + + TILES(0xBA2D, 15) + SHOW_FRAME(40, 3) + + END() +}; + +const s32 * const anim_0288[2] = { + anim_0288__v0_l0, + anim_0288__v1_l0, +}; + +const s32 anim_0292__v0_l0[] = { // 0x080E7D98 + PALETTE(5, 16, 0x20) + TILES(0xBA3C, 25) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0292__v1_l0[] = { // 0x080E7DC8 + PALETTE(5, 16, 0x20) + TILES(0xBA55, 16) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0292__v2_l0[] = { // 0x080E7DF8 + PALETTE(5, 16, 0x20) + TILES(0xBA65, 16) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0292__v3_l0[] = { // 0x080E7E28 + PALETTE(5, 16, 0x20) + TILES(0xBA75, 25) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0292__v4_l0[] = { // 0x080E7E58 + PALETTE(5, 16, 0x20) + TILES(0xBA8E, 24) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0292__v5_l0[] = { // 0x080E7E88 + PALETTE(5, 16, 0x20) + TILES(0xBAA6, 20) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0292__v6_l0[] = { // 0x080E7EB8 + PALETTE(5, 16, 0x20) + TILES(0xBABA, 16) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0292__v7_l0[] = { // 0x080E7EE8 + PALETTE(5, 16, 0x20) + TILES(0xBACA, 25) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 * const anim_0292[8] = { + anim_0292__v0_l0, + anim_0292__v1_l0, + anim_0292__v2_l0, + anim_0292__v3_l0, + anim_0292__v4_l0, + anim_0292__v5_l0, + anim_0292__v6_l0, + anim_0292__v7_l0, +}; + +const s32 anim_0295__v0_l0[] = { // 0x080E7F38 + PALETTE(5, 16, 0x90) + TILES(0xBAE3, 64) + SHOW_FRAME(2, 0) + + TILES(0xBB23, 64) + SHOW_FRAME(2, 1) + + TILES(0xBB63, 64) + SHOW_FRAME(2, 2) + + TILES(0xBBA3, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0295[1] = { + anim_0295__v0_l0, +}; + +const s32 anim_0296__v0_l0[] = { // 0x080E7FA0 + PALETTE(5, 16, 0x20) + TILES(0xBBE3, 8) + SHOW_FRAME(1, 0) + + TILES(0xBBEB, 8) + SHOW_FRAME(1, 1) + + TILES(0xBBE3, 8) + SHOW_FRAME(1, 0) + + TILES(0xBBF3, 12) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0296[1] = { + anim_0296__v0_l0, +}; + +const s32 anim_0297__v0_l0[] = { // 0x080E8004 + PALETTE(5, 16, 0x20) + TILES(0xBBFF, 64) + SHOW_FRAME(3, 0) + + END() +}; + +const s32 * const anim_0297[1] = { + anim_0297__v0_l0, +}; + +const s32 anim_0298__v0_l0[] = { // 0x080E802C + PALETTE(7, 16, 0x30) + TILES(0xBC3F, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(6, 0) + + TILES(0xBC53, 20) + SHOW_FRAME(6, 1) + + TILES(0xBC67, 20) + SHOW_FRAME(6, 2) + + TILES(0xBC7B, 20) + SHOW_FRAME(6, 3) + + TILES(0xBC8F, 20) + SHOW_FRAME(6, 4) + + TILES(0xBCA3, 20) + SHOW_FRAME(6, 5) + + TILES(0xBCB7, 20) + SHOW_FRAME(6, 6) + + TILES(0xBCCB, 20) + SHOW_FRAME(6, 7) + + TILES(0xBC3F, 20) + SHOW_FRAME(6, 0) + + TILES(0xBCDF, 20) + SHOW_FRAME(6, 8) + + TILES(0xBCF3, 20) + SHOW_FRAME(6, 9) + + TILES(0xBD07, 20) + SHOW_FRAME(6, 10) + + TILES(0xBC8F, 20) + SHOW_FRAME(6, 4) + + TILES(0xBCA3, 20) + SHOW_FRAME(6, 5) + + TILES(0xBCB7, 20) + SHOW_FRAME(6, 6) + + TILES(0xBCCB, 20) + SHOW_FRAME(6, 7) + + JUMP_BACK(86) +}; + +const s32 * const anim_0298[1] = { + anim_0298__v0_l0, +}; + +const s32 anim_0299__v0_l0[] = { // 0x080E8190 + PALETTE(7, 16, 0x30) + TILES(0xBD1B, 30) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(20, 0) + + TILES(0xBD39, 20) + SHOW_FRAME(4, 1) + + TILES(0xBD4D, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(8, 2) + + TILES(0xBD61, 20) + SHOW_FRAME(8, 3) + + TILES(0xBD75, 20) + SHOW_FRAME(8, 4) + + TILES(0xBD61, 20) + SHOW_FRAME(8, 3) + + TILES(0xBD4D, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(8, 2) + + TILES(0xBD61, 20) + SHOW_FRAME(8, 3) + + TILES(0xBD75, 20) + SHOW_FRAME(8, 4) + + TILES(0xBD61, 20) + SHOW_FRAME(8, 3) + + TILES(0xBD4D, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(8, 2) + + TILES(0xBD61, 20) + SHOW_FRAME(8, 3) + + TILES(0xBD75, 20) + SHOW_FRAME(8, 4) + + TILES(0xBD61, 20) + SHOW_FRAME(8, 3) + + TILES(0xBD89, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(8, 5) + + TILES(0xBD9D, 20) + SHOW_FRAME(8, 6) + + TILES(0xBDB1, 20) + SHOW_FRAME(8, 7) + + TILES(0xBD9D, 20) + SHOW_FRAME(60, 6) + + TILES(0xBDC5, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(4, 8) + + TILES(0xBDD5, 20) + SHOW_FRAME(8, 9) + + TILES(0xBDE9, 16) + SHOW_FRAME(10, 10) + + TILES(0xBDF9, 16) + SHOW_FRAME(8, 11) + + TILES(0xBE09, 16) + SHOW_FRAME(4, 12) + + TILES(0xBE19, 16) + SHOW_FRAME(4, 13) + + TILES(0xBE29, 16) + SHOW_FRAME(4, 14) + + TILES(0xBE39, 16) + SHOW_FRAME(4, 15) + + TILES(0xBE29, 16) + SHOW_FRAME(4, 14) + + TILES(0xBE49, 16) + SHOW_FRAME(4, 16) + + TILES(0xBE29, 16) + SHOW_FRAME(4, 14) + + TILES(0xBE39, 16) + SHOW_FRAME(60, 15) + + TILES(0xBE59, 20) + SHOW_FRAME(8, 17) + + TILES(0xBE6D, 16) + SHOW_FRAME(6, 18) + + TILES(0xBE7D, 20) + SHOW_FRAME(6, 19) + + TILES(0xBE91, 20) + SHOW_FRAME(6, 20) + + TILES(0xBEA5, 20) + SHOW_FRAME(6, 21) + + TILES(0xBEB9, 16) + SHOW_FRAME(60, 22) + + TILES(0xBEC9, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 23) + + TILES(0xBED9, 20) + SHOW_FRAME(5, 24) + + TILES(0xBEED, 20) + SHOW_FRAME(5, 25) + + TILES(0xBF01, 20) + SHOW_FRAME(5, 26) + + TILES(0xBEED, 20) + SHOW_FRAME(5, 25) + + TILES(0xBF01, 20) + SHOW_FRAME(5, 26) + + TILES(0xBEED, 20) + SHOW_FRAME(5, 25) + + TILES(0xBF01, 20) + SHOW_FRAME(30, 26) + + TILES(0xBF15, 16) + SHOW_FRAME(2, 27) + TILES(0xBF25, 30) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(5, 28) + + TILES(0xBF43, 30) + SHOW_FRAME(4, 29) + + TILES(0xBF61, 20) + SHOW_FRAME(5, 30) + + TILES(0xBF43, 30) + SHOW_FRAME(4, 29) + + JUMP_BACK(23) +}; + +const s32 * const anim_0299[1] = { + anim_0299__v0_l0, +}; + +const s32 anim_0300__v0_l0[] = { // 0x080E85DC + PALETTE(7, 16, 0x30) + TILES(0xBF75, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xBF89, 15) + SHOW_FRAME(2, 1) + TILES(0xBF98, 15) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(12, 2) + + TILES(0xBFA7, 15) + SHOW_FRAME(4, 3) + + TILES(0xBFB6, 15) + SHOW_FRAME(4, 4) + + TILES(0xBFA7, 15) + SHOW_FRAME(4, 3) + + JUMP_BACK(23) +}; + +const s32 anim_0300__v1_l0[] = { // 0x080E8680 + PALETTE(7, 16, 0x30) + TILES(0xBF89, 15) + SHOW_FRAME(1, 1) + + TILES(0xBF75, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0300[2] = { + anim_0300__v0_l0, + anim_0300__v1_l0, +}; + +const s32 anim_0301__v0_l0[] = { // 0x080E86CC + PALETTE(7, 16, 0x30) + TILES(0xBFC5, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0xBFD5, 16) + SHOW_FRAME(1, 1) + + TILES(0xBFE5, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0301__v1_l0[] = { // 0x080E8724 + PALETTE(7, 16, 0x30) + TILES(0xBFF5, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 3) + + TILES(0xC005, 16) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0301[2] = { + anim_0301__v0_l0, + anim_0301__v1_l0, +}; + +const s32 anim_0302__v0_l0[] = { // 0x080E8770 + PALETTE(7, 16, 0x30) + TILES(0xC015, 64) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0xC055, 64) + SHOW_FRAME(3, 1) + + TILES(0xC095, 64) + SHOW_FRAME(3, 2) + + TILES(0xC0D5, 64) + SHOW_FRAME(3, 3) + + TILES(0xC115, 64) + SHOW_FRAME(3, 4) + + TILES(0xC155, 64) + SHOW_FRAME(3, 5) + + TILES(0xC195, 64) + SHOW_FRAME(3, 6) + + TILES(0xC1D5, 64) + SHOW_FRAME(3, 7) + + TILES(0xC015, 64) + SHOW_FRAME(3, 0) + + TILES(0xC215, 64) + SHOW_FRAME(3, 8) + + TILES(0xC255, 64) + SHOW_FRAME(3, 9) + + TILES(0xC295, 64) + SHOW_FRAME(3, 10) + + TILES(0xC115, 64) + SHOW_FRAME(3, 4) + + TILES(0xC155, 64) + SHOW_FRAME(3, 5) + + TILES(0xC195, 64) + SHOW_FRAME(3, 6) + + TILES(0xC1D5, 64) + SHOW_FRAME(3, 7) + + JUMP_BACK(86) +}; + +const s32 * const anim_0302[1] = { + anim_0302__v0_l0, +}; + +const s32 anim_0303__v0_l0[] = { // 0x080E88D4 + PALETTE(7, 16, 0x30) + TILES(0xC2D5, 64) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xC315, 64) + SHOW_FRAME(2, 1) + + TILES(0xC355, 64) + SHOW_FRAME(2, 2) + + TILES(0xC395, 64) + SHOW_FRAME(2, 3) + + TILES(0xC3D5, 64) + SHOW_FRAME(2, 4) + + TILES(0xC415, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(36) +}; + +const s32 * const anim_0303[1] = { + anim_0303__v0_l0, +}; + +const s32 anim_0304__v0_l0[] = { // 0x080E8970 + PALETTE(7, 16, 0x30) + TILES(0xC455, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0xC469, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0304[1] = { + anim_0304__v0_l0, +}; + +const s32 anim_0305__v0_l0[] = { // 0x080E89B8 + PALETTE(7, 16, 0x30) + TILES(0xC47D, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0xC48D, 20) + SHOW_FRAME(1, 1) + + TILES(0xC4A1, 20) + SHOW_FRAME(1, 2) + + TILES(0xC4B5, 16) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0305[1] = { + anim_0305__v0_l0, +}; + +const s32 anim_0306__v0_l0[] = { // 0x080E8A28 + PALETTE(7, 16, 0x30) + TILES(0xC4C5, 12) + HITBOX(0, -8, -6, 8, 10) + PLAY_SOUND(133) + SHOW_FRAME(2, 0) + + TILES(0xC4D1, 16) + SHOW_FRAME(2, 1) + + TILES(0xC4E1, 12) + SHOW_FRAME(2, 2) + + TILES(0xC4ED, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(28) +}; + +const s32 * const anim_0306[1] = { + anim_0306__v0_l0, +}; + +const s32 anim_0307__v0_l0[] = { // 0x080E8AA4 + PALETTE(7, 16, 0x30) + TILES(0xC4FD, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 0) + TILES(0xC511, 20) + SHOW_FRAME(2, 1) + + TILES(0xC525, 20) + SHOW_FRAME(2, 2) + + JUMP_BACK(10) +}; + +const s32 anim_0307__v1_l0[] = { // 0x080E8B00 + PALETTE(7, 16, 0x30) + TILES(0xC539, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 3) + + END() +}; + +const s32 * const anim_0307[2] = { + anim_0307__v0_l0, + anim_0307__v1_l0, +}; + +const s32 anim_0308__v0_l0[] = { // 0x080E8B38 + PALETTE(7, 16, 0x30) + TILES(0xC549, 24) + HITBOX(0, -6, -18, 6, 8) + SHOW_FRAME(3, 0) + + TILES(0xC561, 24) + SHOW_FRAME(3, 1) + + TILES(0xC579, 24) + SHOW_FRAME(3, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0308__v1_l0[] = { // 0x080E8B94 + PALETTE(7, 16, 0x30) + TILES(0xC591, 20) + HITBOX(0, -6, -18, 6, 8) + SHOW_FRAME(3, 3) + + TILES(0xC5A5, 20) + SHOW_FRAME(3, 4) + + TILES(0xC5B9, 20) + SHOW_FRAME(3, 5) + + TILES(0xC5CD, 20) + SHOW_FRAME(4, 6) + + TILES(0xC5E1, 20) + SHOW_FRAME(4, 7) + + TILES(0xC5F5, 20) + SHOW_FRAME(4, 8) + + END() +}; + +const s32 anim_0308__v2_l0[] = { // 0x080E8C28 + PALETTE(7, 16, 0x30) + TILES(0xC609, 30) + HITBOX(0, -6, -18, 6, 8) + SHOW_FRAME(3, 9) + + TILES(0xC627, 30) + SHOW_FRAME(3, 10) + + TILES(0xC645, 30) + SHOW_FRAME(3, 11) + + JUMP_BACK(21) +}; + +const s32 anim_0308__v3_l0[] = { // 0x080E8C84 + PALETTE(7, 16, 0x30) + TILES(0xC663, 16) + SHOW_FRAME(2, 12) + + TILES(0xC673, 16) + SHOW_FRAME(1, 13) + + TILES(0xC683, 16) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 * const anim_0308[4] = { + anim_0308__v0_l0, + anim_0308__v1_l0, + anim_0308__v2_l0, + anim_0308__v3_l0, +}; + +const s32 anim_0309__v0_l0[] = { // 0x080E8CE0 + PALETTE(7, 16, 0x30) + TILES(0xC693, 20) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(4, 0) + + TILES(0xC6A7, 15) + SHOW_FRAME(4, 1) + + TILES(0xC6B6, 12) + SHOW_FRAME(4, 2) + + TILES(0xC6C2, 16) + SHOW_FRAME(4, 3) + + TILES(0xC6D2, 16) + SHOW_FRAME(4, 4) + + TILES(0xC6E2, 12) + SHOW_FRAME(4, 5) + + TILES(0xC6EE, 16) + SHOW_FRAME(4, 6) + + TILES(0xC6FE, 16) + SHOW_FRAME(4, 7) + + TILES(0xC70E, 16) + SHOW_FRAME(4, 8) + + TILES(0xC71E, 25) + SHOW_FRAME(4, 9) + + TILES(0xC737, 20) + SHOW_FRAME(4, 10) + + END() +}; + +const s32 * const anim_0309[1] = { + anim_0309__v0_l0, +}; + +const s32 anim_0310__v0_l0[] = { // 0x080E8DDC + PALETTE(7, 16, 0x30) + TILES(0xC74B, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(4, 0) + TILES(0xC75F, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(7, 1) + + TILES(0xC773, 20) + SHOW_FRAME(7, 2) + + TILES(0xC787, 20) + SHOW_FRAME(7, 3) + + TILES(0xC79B, 16) + SHOW_FRAME(7, 4) + + TILES(0xC7AB, 16) + SHOW_FRAME(7, 5) + + TILES(0xC7BB, 16) + SHOW_FRAME(7, 6) + + TILES(0xC7CB, 16) + SHOW_FRAME(7, 7) + + TILES(0xC7DB, 16) + SHOW_FRAME(7, 8) + + JUMP_BACK(43) +}; + +const s32 anim_0310__v1_l0[] = { // 0x080E8EBC + PALETTE(7, 16, 0x30) + TILES(0xC74B, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0310[2] = { + anim_0310__v0_l0, + anim_0310__v1_l0, +}; + +const s32 anim_0311__v0_l0[] = { // 0x080E8EF4 + PALETTE(7, 16, 0x30) + TILES(0xC7EB, 20) + HITBOX(0, -3, -12, 9, 16) + SHOW_FRAME(2, 0) + + TILES(0xC7FF, 16) + SHOW_FRAME(2, 1) + + TILES(0xC80F, 16) + SHOW_FRAME(2, 2) + TILES(0xC81F, 20) + HITBOX(0, -3, -12, 9, 16) + SHOW_FRAME(5, 3) + + TILES(0xC833, 20) + SHOW_FRAME(5, 4) + + TILES(0xC847, 20) + SHOW_FRAME(5, 5) + + TILES(0xC833, 20) + SHOW_FRAME(5, 4) + + JUMP_BACK(23) +}; + +const s32 anim_0311__v1_l0[] = { // 0x080E8FAC + PALETTE(7, 16, 0x30) + TILES(0xC85B, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 6) + + TILES(0xC86B, 16) + SHOW_FRAME(2, 7) + + TILES(0xC87B, 20) + HITBOX(0, -69, 6, -69, 6) + SHOW_FRAME(2, 8) + + END() +}; + +const s32 * const anim_0311[2] = { + anim_0311__v0_l0, + anim_0311__v1_l0, +}; + +const s32 anim_0312__v0_l0[] = { // 0x080E9018 + PALETTE(7, 16, 0x30) + TILES(0xC88F, 15) + HITBOX(0, -5, -12, 7, 16) + SHOW_FRAME(1, 0) + + TILES(0xC89E, 15) + HITBOX(0, -63, -41, -63, -41) + SHOW_FRAME(1, 1) + + TILES(0xC8AD, 15) + SHOW_FRAME(2, 2) + TILES(0xC8BC, 15) + HITBOX(0, 0, -12, 12, 16) + SHOW_FRAME(15, 3) + + TILES(0xC8CB, 15) + SHOW_FRAME(5, 4) + + TILES(0xC8DA, 15) + SHOW_FRAME(5, 5) + + TILES(0xC8CB, 15) + SHOW_FRAME(5, 4) + + JUMP_BACK(23) +}; + +const s32 anim_0312__v1_l0[] = { // 0x080E90DC + PALETTE(7, 16, 0x30) + TILES(0xC8E9, 15) + HITBOX(0, -4, -12, 8, 16) + SHOW_FRAME(2, 6) + + TILES(0xC8F8, 15) + SHOW_FRAME(1, 7) + + TILES(0xC907, 15) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0312[2] = { + anim_0312__v0_l0, + anim_0312__v1_l0, +}; + +const s32 anim_0315__v0_l0[] = { // 0x080E913C + PALETTE(7, 16, 0x30) + TILES(0xC916, 20) + HITBOX(0, -6, -12, 6, 16) + PLAY_SOUND(191) + SHOW_FRAME(6, 0) + + TILES(0xC92A, 15) + SHOW_FRAME(6, 1) + + END() +}; + +const s32 * const anim_0315[1] = { + anim_0315__v0_l0, +}; + +const s32 anim_0317__v0_l0[] = { // 0x080E918C + PALETTE(7, 16, 0x30) + TILES(0xC939, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0xC94D, 20) + SHOW_FRAME(3, 1) + + TILES(0xC961, 16) + SHOW_FRAME(3, 2) + + TILES(0xC971, 16) + SHOW_FRAME(3, 3) + + END() +}; + +const s32 * const anim_0317[1] = { + anim_0317__v0_l0, +}; + +const s32 anim_0319__v0_l0[] = { // 0x080E91FC + PALETTE(7, 16, 0x30) + TILES(0xC981, 20) + SHOW_FRAME(3, 0) + + TILES(0xC995, 30) + SHOW_FRAME(3, 1) + + TILES(0xC9B3, 30) + SHOW_FRAME(2, 2) + TILES(0xC9D1, 20) + SHOW_FRAME(3, 3) + + TILES(0xC9E5, 20) + SHOW_FRAME(3, 4) + + JUMP_BACK(10) +}; + +const s32 * const anim_0319[1] = { + anim_0319__v0_l0, +}; + +const s32 anim_0320__v0_l0[] = { // 0x080E9278 + PALETTE(7, 16, 0x30) + TILES(0xC9F9, 20) + SHOW_FRAME(3, 0) + + TILES(0xCA0D, 20) + SHOW_FRAME(3, 1) + + TILES(0xCA21, 16) + SHOW_FRAME(3, 2) + + TILES(0xCA31, 16) + SHOW_FRAME(3, 3) + TILES(0xCA41, 16) + SHOW_FRAME(3, 4) + + TILES(0xCA51, 20) + SHOW_FRAME(3, 5) + + TILES(0xCA65, 16) + SHOW_FRAME(3, 6) + + TILES(0xCA75, 16) + SHOW_FRAME(3, 7) + + TILES(0xCA85, 16) + SHOW_FRAME(3, 8) + + TILES(0xCA95, 20) + SHOW_FRAME(3, 9) + + TILES(0xCAA9, 16) + SHOW_FRAME(3, 10) + + TILES(0xCAB9, 16) + SHOW_FRAME(3, 11) + + TILES(0xCAC9, 16) + SHOW_FRAME(3, 12) + + TILES(0xCAD9, 20) + SHOW_FRAME(3, 13) + + TILES(0xCAED, 16) + SHOW_FRAME(3, 14) + + TILES(0xCA75, 16) + SHOW_FRAME(3, 7) + + TILES(0xCA85, 16) + SHOW_FRAME(3, 8) + + TILES(0xCA95, 20) + SHOW_FRAME(3, 9) + + TILES(0xCAA9, 16) + SHOW_FRAME(3, 10) + + TILES(0xCAB9, 16) + SHOW_FRAME(3, 11) + + JUMP_BACK(80) +}; + +const s32 * const anim_0320[1] = { + anim_0320__v0_l0, +}; + +const s32 anim_0321__v0_l0[] = { // 0x080E9420 + PALETTE(7, 16, 0x30) + TILES(0xCAFD, 15) + SHOW_FRAME(3, 0) + + TILES(0xCB0C, 15) + SHOW_FRAME(3, 1) + + TILES(0xCB1B, 20) + SHOW_FRAME(4, 2) + + TILES(0xCB2F, 20) + SHOW_FRAME(4, 3) + + TILES(0xCB43, 20) + SHOW_FRAME(4, 4) + + TILES(0xCB57, 20) + SHOW_FRAME(4, 5) + + TILES(0xCB6B, 20) + SHOW_FRAME(4, 6) + + TILES(0xCB7F, 15) + SHOW_FRAME(4, 7) + + TILES(0xCB8E, 20) + SHOW_FRAME(4, 8) + + TILES(0xCBA2, 20) + SHOW_FRAME(4, 9) + + TILES(0xCBB6, 20) + SHOW_FRAME(4, 10) + + TILES(0xCBCA, 20) + SHOW_FRAME(4, 11) + + TILES(0xCBDE, 20) + SHOW_FRAME(4, 12) + + TILES(0xCBF2, 15) + SHOW_FRAME(4, 13) + + TILES(0xCB1B, 20) + SHOW_FRAME(4, 2) + + TILES(0xCB2F, 20) + SHOW_FRAME(4, 3) + + TILES(0xCB43, 20) + SHOW_FRAME(4, 4) + + TILES(0xCB57, 20) + SHOW_FRAME(4, 5) + + TILES(0xCB6B, 20) + SHOW_FRAME(4, 6) + + TILES(0xCB7F, 15) + SHOW_FRAME(4, 7) + + TILES(0xCB8E, 20) + SHOW_FRAME(4, 8) + + TILES(0xCBA2, 20) + SHOW_FRAME(4, 9) + + TILES(0xCBB6, 20) + SHOW_FRAME(4, 10) + + TILES(0xCBCA, 20) + SHOW_FRAME(4, 11) + + TILES(0xCBDE, 20) + SHOW_FRAME(4, 12) + + TILES(0xCBF2, 15) + SHOW_FRAME(4, 13) + + TILES(0xCC01, 16) + SHOW_FRAME(4, 14) + + TILES(0xCC11, 15) + SHOW_FRAME(4, 15) + + TILES(0xCC20, 12) + SHOW_FRAME(4, 16) + + TILES(0xCC2C, 15) + SHOW_FRAME(4, 17) + + TILES(0xCC3B, 16) + SHOW_FRAME(4, 18) + + TILES(0xCC4B, 20) + SHOW_FRAME(4, 19) + + TILES(0xCC5F, 25) + SHOW_FRAME(4, 20) + + TILES(0xCC78, 16) + SHOW_FRAME(4, 21) + + TILES(0xCC88, 16) + SHOW_FRAME(4, 22) + + TILES(0xCC98, 16) + SHOW_FRAME(4, 23) + + TILES(0xCCA8, 12) + SHOW_FRAME(4, 24) + + TILES(0xCCB4, 12) + SHOW_FRAME(4, 25) + + TILES(0xCCC0, 12) + SHOW_FRAME(8, 26) + + TILES(0xCCCC, 20) + SHOW_FRAME(3, 27) + + TILES(0xCCE0, 20) + SHOW_FRAME(3, 28) + + TILES(0xCCF4, 16) + SHOW_FRAME(30, 29) + + END() +}; + +const s32 * const anim_0321[1] = { + anim_0321__v0_l0, +}; + +const s32 anim_0322__v0_l0[] = { // 0x080E977C + PALETTE(7, 16, 0x30) + TILES(0xCD04, 12) + SHOW_FRAME(2, 0) + + TILES(0xCD10, 20) + SHOW_FRAME(5, 1) + + TILES(0xCD24, 16) + SHOW_FRAME(5, 2) + + TILES(0xCD34, 16) + SHOW_FRAME(5, 3) + + TILES(0xCD44, 12) + SHOW_FRAME(20, 4) + + TILES(0xCD50, 16) + SHOW_FRAME(2, 5) + + TILES(0xCD60, 24) + SHOW_FRAME(4, 6) + + TILES(0xCD78, 24) + SHOW_FRAME(4, 7) + + TILES(0xCD90, 24) + SHOW_FRAME(4, 8) + + TILES(0xCD78, 24) + SHOW_FRAME(4, 7) + + TILES(0xCD60, 24) + SHOW_FRAME(4, 6) + + TILES(0xCD78, 24) + SHOW_FRAME(4, 7) + + TILES(0xCD90, 24) + SHOW_FRAME(4, 8) + + TILES(0xCD78, 24) + SHOW_FRAME(4, 7) + + END() +}; + +const s32 anim_0322__v1_l0[] = { // 0x080E98A4 + PALETTE(7, 16, 0x30) + TILES(0xCDA8, 25) + SHOW_FRAME(2, 9) + + END() +}; + +const s32 * const anim_0322[2] = { + anim_0322__v0_l0, + anim_0322__v1_l0, +}; + +const s32 anim_0323__v0_l0[] = { // 0x080E98D0 + PALETTE(7, 16, 0x90) + TILES(0xCDC1, 24) + SHOW_FRAME(3, 0) + + TILES(0xCDD9, 24) + SHOW_FRAME(3, 1) + + TILES(0xCDF1, 24) + SHOW_FRAME(3, 2) + + TILES(0xCE09, 24) + SHOW_FRAME(3, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0323[1] = { + anim_0323__v0_l0, +}; + +const s32 anim_0324__v0_l0[] = { // 0x080E9938 + PALETTE(7, 16, 0xA0) + TILES(0xCE21, 24) + SHOW_FRAME(20, 0) + + TILES(0xCE39, 36) + SHOW_FRAME(10, 1) + + TILES(0xCE5D, 36) + SHOW_FRAME(8, 2) + + TILES(0xCE81, 35) + SHOW_FRAME(7, 3) + + TILES(0xCEA4, 42) + SHOW_FRAME(5, 4) + + TILES(0xCECE, 30) + SHOW_FRAME(3, 5) + TILES(0xCEEC, 30) + SHOW_FRAME(2, 6) + + TILES(0xCF0A, 30) + SHOW_FRAME(2, 7) + + TILES(0xCF28, 30) + SHOW_FRAME(2, 8) + + JUMP_BACK(15) +}; + +const s32 * const anim_0324[1] = { + anim_0324__v0_l0, +}; + +const s32 anim_0325__v0_l0[] = { // 0x080E9A04 + PALETTE(7, 16, 0x30) + TILES(0xCF46, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0xCF86, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v1_l0[] = { // 0x080E9A4C + PALETTE(7, 16, 0x30) + TILES(0xCFC6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0xD006, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v2_l0[] = { // 0x080E9A94 + PALETTE(7, 16, 0x30) + TILES(0xD046, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0xD086, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v3_l0[] = { // 0x080E9ADC + PALETTE(7, 16, 0x30) + TILES(0xD0C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0xD106, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v4_l0[] = { // 0x080E9B24 + PALETTE(7, 16, 0x30) + TILES(0xD146, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0xD186, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v5_l0[] = { // 0x080E9B6C + PALETTE(7, 16, 0x30) + TILES(0xD1C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0xD206, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v6_l0[] = { // 0x080E9BB4 + PALETTE(7, 16, 0x30) + TILES(0xD246, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 12) + + TILES(0xD286, 64) + SHOW_FRAME(2, 13) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v7_l0[] = { // 0x080E9BFC + PALETTE(7, 16, 0x30) + TILES(0xD2C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 14) + + TILES(0xD306, 64) + SHOW_FRAME(2, 15) + + JUMP_BACK(16) +}; + +const s32 anim_0325__v8_l0[] = { // 0x080E9C44 + PALETTE(7, 16, 0x30) + TILES(0xD346, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 16) + + TILES(0xD386, 64) + SHOW_FRAME(2, 17) + + JUMP_BACK(16) +}; + +const s32 * const anim_0325[9] = { + anim_0325__v0_l0, + anim_0325__v1_l0, + anim_0325__v2_l0, + anim_0325__v3_l0, + anim_0325__v4_l0, + anim_0325__v5_l0, + anim_0325__v6_l0, + anim_0325__v7_l0, + anim_0325__v8_l0, +}; + +const s32 anim_0326__v0_l0[] = { // 0x080E9CB0 + PALETTE(7, 16, 0x30) + TILES(0xD3C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0xD406, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0326__v1_l0[] = { // 0x080E9CF8 + PALETTE(7, 16, 0x30) + TILES(0xD446, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 2) + + TILES(0xD486, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0326__v2_l0[] = { // 0x080E9D40 + PALETTE(7, 16, 0x30) + TILES(0xD4C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 4) + + TILES(0xD506, 64) + SHOW_FRAME(2, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0326__v3_l0[] = { // 0x080E9D88 + PALETTE(7, 16, 0x30) + TILES(0xD546, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 6) + + TILES(0xD586, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(16) +}; + +const s32 anim_0326__v4_l0[] = { // 0x080E9DD0 + PALETTE(7, 16, 0x30) + TILES(0xD5C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 8) + + TILES(0xD606, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(16) +}; + +const s32 anim_0326__v5_l0[] = { // 0x080E9E18 + PALETTE(7, 16, 0x30) + TILES(0xD646, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 10) + + TILES(0xD686, 64) + SHOW_FRAME(2, 11) + + JUMP_BACK(16) +}; + +const s32 anim_0326__v6_l0[] = { // 0x080E9E60 + PALETTE(7, 16, 0x30) + TILES(0xD6C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 12) + + TILES(0xD706, 64) + SHOW_FRAME(2, 13) + + JUMP_BACK(16) +}; + +const s32 anim_0326__v7_l0[] = { // 0x080E9EA8 + PALETTE(7, 16, 0x30) + TILES(0xD746, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 14) + + TILES(0xD786, 64) + SHOW_FRAME(2, 15) + + JUMP_BACK(16) +}; + +const s32 * const anim_0326[8] = { + anim_0326__v0_l0, + anim_0326__v1_l0, + anim_0326__v2_l0, + anim_0326__v3_l0, + anim_0326__v4_l0, + anim_0326__v5_l0, + anim_0326__v6_l0, + anim_0326__v7_l0, +}; + +const s32 anim_0327__v0_l0[] = { // 0x080E9F10 + PALETTE(7, 16, 0x30) + TILES(0xD7C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + TILES(0xD806, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 1) + + TILES(0xD846, 64) + SHOW_FRAME(2, 2) + + JUMP_BACK(13) +}; + +const s32 anim_0327__v1_l0[] = { // 0x080E9F78 + PALETTE(7, 16, 0x30) + TILES(0xD7C6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0327[2] = { + anim_0327__v0_l0, + anim_0327__v1_l0, +}; + +const s32 anim_0328__v0_l0[] = { // 0x080E9FB0 + PALETTE(7, 16, 0x30) + TILES(0xD886, 64) + HITBOX(0, -20, -20, 20, 20) + SHOW_FRAME(2, 0) + + TILES(0xD8C6, 64) + SHOW_FRAME(2, 1) + + TILES(0xD906, 64) + SHOW_FRAME(2, 2) + + TILES(0xD946, 64) + SHOW_FRAME(2, 3) + + TILES(0xD986, 64) + SHOW_FRAME(2, 4) + + TILES(0xD9C6, 64) + SHOW_FRAME(2, 5) + + TILES(0xDA06, 64) + SHOW_FRAME(2, 6) + + TILES(0xDA46, 64) + SHOW_FRAME(2, 7) + + TILES(0xDA86, 64) + SHOW_FRAME(2, 8) + + TILES(0xDAC6, 64) + SHOW_FRAME(2, 9) + + TILES(0xDB06, 64) + SHOW_FRAME(2, 10) + + JUMP_BACK(61) +}; + +const s32 * const anim_0328[1] = { + anim_0328__v0_l0, +}; + +const s32 anim_0329__v0_l0[] = { // 0x080EA0B0 + PALETTE(7, 16, 0x30) + TILES(0xDB46, 64) + HITBOX(0, -14, -14, 14, 14) + SHOW_FRAME(1, 0) + + TILES(0xDB86, 64) + SHOW_FRAME(2, 1) + + TILES(0xDBC6, 64) + SHOW_FRAME(2, 2) + + TILES(0xDC06, 64) + SHOW_FRAME(2, 3) + + TILES(0xDC46, 64) + SHOW_FRAME(2, 4) + + TILES(0xDC86, 64) + SHOW_FRAME(2, 5) + + TILES(0xDCC6, 64) + SHOW_FRAME(2, 6) + + TILES(0xDD06, 64) + SHOW_FRAME(2, 7) + + TILES(0xDD46, 64) + SHOW_FRAME(2, 8) + + TILES(0xDD86, 64) + SHOW_FRAME(2, 9) + + TILES(0xDDC6, 64) + SHOW_FRAME(2, 10) + + TILES(0xDE06, 64) + SHOW_FRAME(2, 11) + + TILES(0xDE46, 64) + SHOW_FRAME(2, 12) + + TILES(0xDB86, 64) + SHOW_FRAME(2, 1) + + TILES(0xDBC6, 64) + SHOW_FRAME(2, 2) + + TILES(0xDC06, 64) + SHOW_FRAME(2, 3) + + TILES(0xDC46, 64) + SHOW_FRAME(2, 4) + + TILES(0xDC86, 64) + SHOW_FRAME(2, 5) + + TILES(0xDCC6, 64) + SHOW_FRAME(2, 6) + + TILES(0xDD06, 64) + SHOW_FRAME(2, 7) + + TILES(0xDD46, 64) + SHOW_FRAME(2, 8) + + TILES(0xDD86, 64) + SHOW_FRAME(2, 9) + + TILES(0xDE86, 64) + HITBOX(0, 0, 0, 0, 0) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 * const anim_0329[1] = { + anim_0329__v0_l0, +}; + +const s32 anim_0330__v0_l0[] = { // 0x080EA2A8 + PALETTE(7, 16, 0x30) + TILES(0xDEC6, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(3, 0) + + TILES(0xDF06, 64) + SHOW_FRAME(3, 1) + + TILES(0xDF46, 64) + SHOW_FRAME(3, 2) + + TILES(0xDF86, 64) + SHOW_FRAME(3, 3) + + TILES(0xDFC6, 64) + SHOW_FRAME(3, 4) + + TILES(0xE006, 64) + SHOW_FRAME(3, 5) + + TILES(0xE046, 64) + SHOW_FRAME(3, 6) + + JUMP_BACK(41) +}; + +const s32 * const anim_0330[1] = { + anim_0330__v0_l0, +}; + +const s32 anim_0331__v0_l0[] = { // 0x080EA358 + PALETTE(7, 16, 0x30) + TILES(0xE086, 64) + SHOW_FRAME(6, 0) + + TILES(0xE0C6, 64) + SHOW_FRAME(3, 1) + + TILES(0xE106, 64) + SHOW_FRAME(8, 2) + + TILES(0xE146, 64) + SHOW_FRAME(5, 3) + TILES(0xE186, 64) + SHOW_FRAME(3, 4) + + TILES(0xE1C6, 64) + SHOW_FRAME(3, 5) + + JUMP_BACK(10) +}; + +const s32 anim_0331__v1_l0[] = { // 0x080EA3E4 + PALETTE(7, 16, 0x30) + TILES(0xE086, 64) + SHOW_FRAME(6, 0) + + END() +}; + +const s32 * const anim_0331[2] = { + anim_0331__v0_l0, + anim_0331__v1_l0, +}; + +const s32 anim_0332__v0_l0[] = { // 0x080EA410 + PALETTE(7, 16, 0x30) + TILES(0xE206, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0xE246, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0332__v1_l0[] = { // 0x080EA458 + PALETTE(7, 16, 0x30) + TILES(0xE286, 64) + SHOW_FRAME(2, 2) + + TILES(0xE2C6, 64) + SHOW_FRAME(2, 3) + + TILES(0xE306, 64) + SHOW_FRAME(2, 4) + + TILES(0xE346, 64) + SHOW_FRAME(2, 5) + + TILES(0xE386, 64) + SHOW_FRAME(2, 6) + + TILES(0xE3C6, 64) + SHOW_FRAME(2, 7) + + JUMP_BACK(33) +}; + +const s32 * const anim_0332[2] = { + anim_0332__v0_l0, + anim_0332__v1_l0, +}; + +const s32 anim_0333__v0_l0[] = { // 0x080EA4EC + PALETTE(7, 16, 0xA0) + TILES(0xE406, 18) + SHOW_FRAME(3, 0) + + TILES(0xE418, 18) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 anim_0333__v1_l0[] = { // 0x080EA528 + PALETTE(7, 16, 0xA0) + TILES(0xE42A, 15) + SHOW_FRAME(3, 2) + + TILES(0xE439, 20) + SHOW_FRAME(3, 3) + + TILES(0xE44D, 16) + SHOW_FRAME(3, 4) + + TILES(0xE45D, 16) + SHOW_FRAME(15, 5) + + TILES(0xE46D, 15) + SHOW_FRAME(3, 6) + + TILES(0xE47C, 15) + SHOW_FRAME(3, 7) + + TILES(0xE48B, 15) + SHOW_FRAME(3, 8) + + TILES(0xE49A, 20) + SHOW_FRAME(3, 9) + + TILES(0xE4AE, 20) + SHOW_FRAME(3, 10) + TILES(0xE4C2, 25) + SHOW_FRAME(25, 11) + + TILES(0xE4DB, 25) + SHOW_FRAME(6, 12) + + TILES(0xE4F4, 25) + SHOW_FRAME(6, 13) + + TILES(0xE4DB, 25) + SHOW_FRAME(6, 12) + + JUMP_BACK(20) +}; + +const s32 * const anim_0333[2] = { + anim_0333__v0_l0, + anim_0333__v1_l0, +}; + +const s32 anim_0334__v0_l0[] = { // 0x080EA648 + PALETTE(7, 16, 0x30) + TILES(0xE50D, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0xE51D, 16) + SHOW_FRAME(3, 1) + + TILES(0xE52D, 16) + SHOW_FRAME(3, 2) + + TILES(0xE53D, 16) + SHOW_FRAME(3, 3) + + TILES(0xE54D, 16) + SHOW_FRAME(3, 4) + + TILES(0xE55D, 16) + SHOW_FRAME(3, 5) + + TILES(0xE56D, 16) + SHOW_FRAME(3, 6) + + TILES(0xE57D, 16) + SHOW_FRAME(3, 7) + + JUMP_BACK(46) +}; + +const s32 anim_0334__v1_l0[] = { // 0x080EA708 + PALETTE(7, 16, 0x30) + TILES(0xE58D, 20) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(3, 8) + + TILES(0xE5A1, 20) + SHOW_FRAME(3, 9) + + TILES(0xE5B5, 20) + SHOW_FRAME(3, 10) + + TILES(0xE5C9, 20) + SHOW_FRAME(3, 11) + + TILES(0xE5DD, 20) + SHOW_FRAME(3, 12) + + TILES(0xE5F1, 20) + SHOW_FRAME(3, 13) + + TILES(0xE605, 20) + SHOW_FRAME(3, 14) + + TILES(0xE619, 20) + SHOW_FRAME(3, 15) + + JUMP_BACK(46) +}; + +const s32 anim_0334__v2_l0[] = { // 0x080EA7C8 + PALETTE(7, 16, 0x30) + TILES(0xE62D, 20) + HITBOX(0, -6, -18, 6, 10) + SHOW_FRAME(3, 16) + + TILES(0xE641, 20) + SHOW_FRAME(3, 17) + + TILES(0xE655, 20) + SHOW_FRAME(3, 18) + + TILES(0xE669, 20) + SHOW_FRAME(3, 19) + + TILES(0xE67D, 20) + SHOW_FRAME(3, 20) + + TILES(0xE691, 20) + SHOW_FRAME(3, 21) + + TILES(0xE6A5, 20) + SHOW_FRAME(3, 22) + + TILES(0xE6B9, 20) + SHOW_FRAME(3, 23) + + JUMP_BACK(46) +}; + +const s32 * const anim_0334[3] = { + anim_0334__v0_l0, + anim_0334__v1_l0, + anim_0334__v2_l0, +}; + +const s32 anim_0335__v0_l0[] = { // 0x080EA894 + PALETTE(7, 16, 0x30) + TILES(0xE6CD, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xE6DD, 16) + SHOW_FRAME(2, 1) + + TILES(0xE6ED, 16) + HITBOX(0, -74, 29, -74, 29) + SHOW_FRAME(4, 2) + + TILES(0xE6FD, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 3) + + TILES(0xE70D, 12) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 4) + TILES(0xE719, 20) + HITBOX(0, -4, -12, 6, 16) + SHOW_FRAME(2, 5) + + TILES(0xE72D, 20) + SHOW_FRAME(2, 6) + + TILES(0xE741, 20) + HITBOX(0, -57, 26, -57, 26) + SHOW_FRAME(2, 7) + + JUMP_BACK(21) +}; + +const s32 * const anim_0335[1] = { + anim_0335__v0_l0, +}; + +const s32 anim_0336__v0_l0[] = { // 0x080EA994 + PALETTE(7, 16, 0x30) + TILES(0xE755, 24) + HITBOX(0, -6, -14, 4, 14) + SHOW_FRAME(3, 0) + + TILES(0xE76D, 24) + SHOW_FRAME(3, 1) + + TILES(0xE785, 24) + SHOW_FRAME(3, 2) + + TILES(0xE79D, 20) + HITBOX(0, -6, -14, 6, 12) + SHOW_FRAME(2, 3) + + TILES(0xE7B1, 24) + HITBOX(0, -6, -14, 6, 14) + SHOW_FRAME(2, 4) + + END() +}; + +const s32 * const anim_0336[1] = { + anim_0336__v0_l0, +}; + +const s32 anim_0337__v0_l0[] = { // 0x080EAA30 + PALETTE(7, 16, 0x30) + TILES(0xE7C9, 64) + SHOW_FRAME(2, 0) + + TILES(0xE809, 64) + SHOW_FRAME(2, 1) + + TILES(0xE849, 64) + SHOW_FRAME(2, 2) + + TILES(0xE889, 64) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0337[1] = { + anim_0337__v0_l0, +}; + +const s32 anim_0338__v0_l0[] = { // 0x080EAA98 + PALETTE(7, 16, 0x30) + TILES(0xE8C9, 24) + HITBOX(0, -30, -20, -4, -4) + CMD_12(0x10) + SHOW_FRAME(3, 0) + + TILES(0xE8E1, 20) + HITBOX(0, -22, -20, -2, -4) + CMD_12(0x10) + SHOW_FRAME(3, 1) + + TILES(0xE8F5, 16) + HITBOX(0, -4, -20, 2, -4) + CMD_12(0x10) + SHOW_FRAME(3, 2) + + TILES(0xE905, 16) + HITBOX(0, 2, -20, 8, -4) + CMD_12(0x10) + SHOW_FRAME(3, 3) + + TILES(0xE915, 16) + HITBOX(0, 3, -20, 23, -4) + CMD_12(0x10) + SHOW_FRAME(3, 4) + + TILES(0xE925, 20) + HITBOX(0, 4, -20, 30, -4) + CMD_12(0x10) + SHOW_FRAME(3, 5) + + TILES(0xE939, 20) + HITBOX(0, 4, -20, 24, -4) + CMD_12(0x13) + SHOW_FRAME(3, 6) + + TILES(0xE94D, 12) + HITBOX(0, 3, -20, 9, -4) + CMD_12(0x13) + SHOW_FRAME(3, 7) + + TILES(0xE959, 16) + HITBOX(0, -8, -20, -2, -4) + CMD_12(0x13) + SHOW_FRAME(3, 8) + + TILES(0xE969, 20) + HITBOX(0, -22, -20, -2, -4) + CMD_12(0x13) + SHOW_FRAME(3, 9) + + JUMP_BACK(103) +}; + +const s32 anim_0338__v1_l0[] = { // 0x080EAC3C + PALETTE(7, 16, 0x30) + TILES(0xE97D, 24) + HITBOX(0, -8, 32, 8, 8) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 10) + + TILES(0xE995, 20) + HITBOX(0, -8, 23, 8, 9) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 11) + + TILES(0xE9A9, 16) + HITBOX(0, -8, 9, 8, -3) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 12) + + TILES(0xE9B9, 16) + HITBOX(0, -8, 2, 8, -10) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 13) + + TILES(0xE9C9, 16) + HITBOX(0, -8, 1, 8, -17) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 14) + + TILES(0xE9D9, 20) + HITBOX(0, -8, -4, 8, -28) + SET_PRIORITY(0x2) + SHOW_FRAME(3, 15) + + TILES(0xE9ED, 20) + HITBOX(0, -8, -8, 8, -22) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 16) + + TILES(0xEA01, 12) + HITBOX(0, -8, 2, 8, -10) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 17) + + TILES(0xEA0D, 16) + HITBOX(0, -9, 9, 7, -3) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 18) + + TILES(0xEA1D, 20) + HITBOX(0, -8, 20, 8, 2) + SET_PRIORITY(0x3) + SHOW_FRAME(3, 19) + + JUMP_BACK(103) +}; + +const s32 * const anim_0338[2] = { + anim_0338__v0_l0, + anim_0338__v1_l0, +}; + +const s32 anim_0339__v0_l0[] = { // 0x080EADE8 + PALETTE(7, 16, 0x30) + TILES(0xEA31, 24) + HITBOX(0, -6, -18, 6, 8) + SHOW_FRAME(10, 0) + + TILES(0xEA49, 24) + SHOW_FRAME(10, 1) + + TILES(0xEA61, 24) + SHOW_FRAME(10, 2) + + TILES(0xEA49, 24) + SHOW_FRAME(10, 1) + + JUMP_BACK(26) +}; + +const s32 anim_0339__v1_l0[] = { // 0x080EAE58 + PALETTE(7, 16, 0x30) + TILES(0xEA79, 24) + HITBOX(0, -6, -18, 6, 8) + SHOW_FRAME(5, 3) + + TILES(0xEA91, 24) + SHOW_FRAME(5, 4) + + TILES(0xEAA9, 24) + SHOW_FRAME(5, 5) + + TILES(0xEA91, 24) + SHOW_FRAME(5, 4) + + JUMP_BACK(26) +}; + +const s32 * const anim_0339[2] = { + anim_0339__v0_l0, + anim_0339__v1_l0, +}; + +const s32 anim_0340__v0_l0[] = { // 0x080EAED0 + PALETTE(7, 16, 0x30) + TILES(0xEAC1, 25) + HITBOX(0, -6, -12, 6, 8) + SHOW_FRAME(5, 0) + + TILES(0xEADA, 20) + SHOW_FRAME(5, 1) + + TILES(0xEAEE, 20) + SHOW_FRAME(5, 2) + + TILES(0xEB02, 16) + SHOW_FRAME(5, 3) + + TILES(0xEB12, 25) + SHOW_FRAME(5, 4) + + TILES(0xEB2B, 20) + SHOW_FRAME(5, 5) + + TILES(0xEB3F, 20) + SHOW_FRAME(5, 6) + + TILES(0xEB53, 20) + SHOW_FRAME(5, 7) + + JUMP_BACK(46) +}; + +const s32 * const anim_0340[1] = { + anim_0340__v0_l0, +}; + +const s32 anim_0341__v0_l0[] = { // 0x080EAF94 + PALETTE(7, 16, 0x30) + TILES(0xEB67, 24) + SHOW_FRAME(8, 0) + + TILES(0xEB7F, 24) + SHOW_FRAME(8, 1) + + TILES(0xEB97, 24) + SHOW_FRAME(8, 2) + + TILES(0xEB7F, 24) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0341[1] = { + anim_0341__v0_l0, +}; + +const s32 anim_0342__v0_l0[] = { // 0x080EAFFC + PALETTE(7, 16, 0x30) + TILES(0xEBAF, 25) + HITBOX(0, -6, -4, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xEBC8, 25) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0342__v1_l0[] = { // 0x080EB044 + PALETTE(7, 16, 0x30) + TILES(0xEBE1, 25) + HITBOX(0, -6, -2, 6, 16) + SHOW_FRAME(2, 2) + + TILES(0xEBFA, 25) + SHOW_FRAME(2, 3) + + JUMP_BACK(16) +}; + +const s32 * const anim_0342[2] = { + anim_0342__v0_l0, + anim_0342__v1_l0, +}; + +const s32 anim_0343__v0_l0[] = { // 0x080EB094 + PALETTE(7, 16, 0x30) + TILES(0xEC13, 20) + HITBOX(0, -6, -16, 6, 6) + SHOW_FRAME(2, 0) + + TILES(0xEC27, 20) + HITBOX(0, -6, -20, 6, 6) + SHOW_FRAME(8, 1) + + TILES(0xEC3B, 20) + SHOW_FRAME(1, 2) + + TILES(0xEC4F, 25) + HITBOX(0, -6, -14, 6, 12) + SHOW_FRAME(3, 3) + + TILES(0xEC68, 25) + SHOW_FRAME(3, 4) + + TILES(0xEC81, 25) + SHOW_FRAME(3, 5) + + TILES(0xEC4F, 25) + HITBOX(0, -6, -14, 6, 12) + SHOW_FRAME(3, 3) + + TILES(0xEC68, 25) + SHOW_FRAME(3, 4) + + TILES(0xEC81, 25) + SHOW_FRAME(3, 5) + + TILES(0xEC4F, 25) + HITBOX(0, -6, -14, 6, 12) + SHOW_FRAME(3, 3) + + TILES(0xEC68, 25) + SHOW_FRAME(3, 4) + + TILES(0xEC81, 25) + SHOW_FRAME(3, 5) + + TILES(0xEC9A, 20) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(1, 6) + TILES(0xECAE, 30) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(3, 7) + + TILES(0xECCC, 30) + SHOW_FRAME(3, 8) + + TILES(0xECEA, 30) + SHOW_FRAME(3, 9) + + JUMP_BACK(18) +}; + +const s32 * const anim_0343[1] = { + anim_0343__v0_l0, +}; + +const s32 anim_0348__v0_l0[] = { // 0x080EB240 + PALETTE(7, 16, 0x30) + TILES(0xED08, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0xED1C, 24) + HITBOX(0, 0, -12, 14, 16) + SHOW_FRAME(1, 1) + + TILES(0xED34, 20) + HITBOX(0, 2, -12, 14, 16) + SHOW_FRAME(1, 2) + + TILES(0xED48, 35) + HITBOX(0, 6, -12, 18, 16) + SHOW_FRAME(1, 3) + + TILES(0xED6B, 35) + SHOW_FRAME(2, 4) + + TILES(0xED8E, 30) + SHOW_FRAME(3, 5) + + TILES(0xEDAC, 30) + HITBOX(0, 2, -12, 14, 16) + SHOW_FRAME(1, 6) + + TILES(0xEDCA, 24) + HITBOX(0, 0, -12, 12, 16) + HITBOX(1, -20, -35, 10, -2) + SHOW_FRAME(1, 7) + + TILES(0xEDE2, 42) + HITBOX(0, -6, -12, 6, 16) + HITBOX(1, -32, -23, 0, 16) + PLAY_SOUND(128) + SHOW_FRAME(2, 8) + + TILES(0xEE0C, 35) + SHOW_FRAME(2, 9) + + TILES(0xEE2F, 35) + SHOW_FRAME(2, 10) + + TILES(0xEE52, 28) + SHOW_FRAME(2, 11) + + TILES(0xEE6E, 16) + HITBOX(0, -6, -12, 6, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(3, 12) + + TILES(0xEE7E, 20) + SHOW_FRAME(3, 13) + + TILES(0xEE92, 16) + SHOW_FRAME(3, 14) + + END() +}; + +const s32 * const anim_0348[1] = { + anim_0348__v0_l0, +}; + +const s32 anim_0353__v0_l0[] = { // 0x080EB40C + PALETTE(7, 16, 0x30) + TILES(0xEEA2, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0xEEB6, 20) + SHOW_FRAME(1, 1) + + TILES(0xEECA, 25) + SHOW_FRAME(1, 2) + + TILES(0xEEE3, 30) + SHOW_FRAME(1, 3) + + TILES(0xEF01, 30) + SHOW_FRAME(3, 4) + + TILES(0xEF1F, 36) + SHOW_FRAME(4, 5) + + TILES(0xEF43, 36) + SHOW_FRAME(2, 6) + + TILES(0xEF67, 35) + SHOW_FRAME(1, 7) + + TILES(0xEF8A, 42) + HITBOX(0, -6, -12, 6, 16) + HITBOX(1, -32, -42, 0, 0) + SHOW_FRAME(1, 8) + + TILES(0xEFB4, 42) + HITBOX(0, -14, -12, -2, 16) + HITBOX(1, -40, -34, -7, 6) + SHOW_FRAME(1, 9) + + TILES(0xEFDE, 42) + HITBOX(0, -14, -12, -2, 16) + HITBOX(1, -44, -23, -11, 16) + PLAY_SOUND(128) + SHOW_FRAME(1, 10) + + TILES(0xF008, 42) + SHOW_FRAME(2, 11) + + TILES(0xF032, 42) + SHOW_FRAME(2, 12) + + TILES(0xF05C, 28) + SHOW_FRAME(2, 13) + + TILES(0xF078, 28) + SHOW_FRAME(8, 14) + + TILES(0xF094, 16) + HITBOX(0, -8, -12, 4, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(3, 15) + + TILES(0xF0A4, 16) + HITBOX(0, -4, -12, 8, 16) + SHOW_FRAME(3, 16) + + TILES(0xF0B4, 12) + HITBOX(0, -2, -12, 10, 16) + SHOW_FRAME(3, 17) + + END() +}; + +const s32 * const anim_0353[1] = { + anim_0353__v0_l0, +}; + +const s32 anim_0373__v0_l0[] = { // 0x080EB614 + PALETTE(7, 16, 0x30) + TILES(0xF0C0, 30) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0xF0DE, 24) + SHOW_FRAME(1, 1) + + TILES(0xF0F6, 28) + SHOW_FRAME(2, 2) + + TILES(0xF112, 20) + HITBOX(0, -9, -19, 8, 13) + SHOW_FRAME(1, 3) + + TILES(0xF126, 25) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(2, 4) + + TILES(0xF13F, 18) + SHOW_FRAME(2, 5) + + TILES(0xF151, 25) + SHOW_FRAME(2, 6) + + TILES(0xF16A, 18) + SHOW_FRAME(2, 7) + + TILES(0xF17C, 20) + SHOW_FRAME(2, 8) + + TILES(0xF190, 15) + SHOW_FRAME(2, 9) + + TILES(0xF19F, 25) + SHOW_FRAME(2, 10) + + TILES(0xF1B8, 15) + SHOW_FRAME(2, 11) + + TILES(0xF126, 25) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(2, 4) + + TILES(0xF13F, 18) + SHOW_FRAME(2, 5) + + TILES(0xF151, 25) + SHOW_FRAME(2, 6) + + TILES(0xF16A, 18) + SHOW_FRAME(2, 7) + + TILES(0xF17C, 20) + SHOW_FRAME(2, 8) + + TILES(0xF190, 15) + SHOW_FRAME(2, 9) + TILES(0xF1C7, 30) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(3, 12) + + TILES(0xF1E5, 30) + SHOW_FRAME(3, 13) + + TILES(0xF203, 30) + SHOW_FRAME(3, 14) + + JUMP_BACK(18) +}; + +const s32 * const anim_0373[1] = { + anim_0373__v0_l0, +}; + +const s32 anim_0374__v0_l0[] = { // 0x080EB80C + PALETTE(7, 16, 0x30) + TILES(0xF221, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0xF231, 16) + SHOW_FRAME(1, 1) + + TILES(0xF241, 16) + SHOW_FRAME(2, 2) + TILES(0xF251, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 3) + + TILES(0xF265, 20) + SHOW_FRAME(2, 4) + + TILES(0xF279, 20) + SHOW_FRAME(2, 5) + + JUMP_BACK(18) +}; + +const s32 anim_0374__v1_l0[] = { // 0x080EB8B0 + PALETTE(7, 16, 0x30) + TILES(0xF28D, 20) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 6) + TILES(0xF2A1, 20) + SHOW_FRAME(2, 7) + + TILES(0xF2B5, 20) + SHOW_FRAME(2, 8) + + JUMP_BACK(10) +}; + +const s32 anim_0374__v2_l0[] = { // 0x080EB90C + PALETTE(7, 16, 0x30) + TILES(0xF2C9, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 * const anim_0374[3] = { + anim_0374__v0_l0, + anim_0374__v1_l0, + anim_0374__v2_l0, +}; + +const s32 anim_0375__v0_l0[] = { // 0x080EB948 + PALETTE(7, 16, 0x30) + TILES(0xF2D9, 16) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0xF2E9, 20) + HITBOX(0, -6, -8, 8, 16) + HITBOX(1, -16, -14, 0, 16) + SHOW_FRAME(2, 1) + + TILES(0xF2FD, 20) + SHOW_FRAME(2, 2) + + TILES(0xF311, 20) + HITBOX(0, -6, -2, 8, 16) + HITBOX(1, -16, -2, 0, 16) + SHOW_FRAME(2, 3) + TILES(0xF325, 20) + HITBOX(1, -16, -2, 0, 16) + SHOW_FRAME(3, 4) + + TILES(0xF339, 24) + SHOW_FRAME(3, 5) + + JUMP_BACK(13) +}; + +const s32 anim_0375__v1_l0[] = { // 0x080EBA1C + PALETTE(7, 16, 0x30) + TILES(0xF351, 18) + HITBOX(0, -6, -4, 6, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(6, 6) + + TILES(0xF363, 20) + SHOW_FRAME(2, 7) + + TILES(0xF377, 20) + SHOW_FRAME(2, 8) + + TILES(0xF38B, 15) + HITBOX(0, -6, -4, 6, 16) + SHOW_FRAME(6, 9) + + TILES(0xF39A, 15) + SHOW_FRAME(6, 10) + + TILES(0xF38B, 15) + SHOW_FRAME(6, 9) + + TILES(0xF39A, 15) + SHOW_FRAME(6, 10) + + TILES(0xF38B, 15) + SHOW_FRAME(6, 9) + + TILES(0xF3A9, 15) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 11) + + TILES(0xF3B8, 16) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 * const anim_0375[2] = { + anim_0375__v0_l0, + anim_0375__v1_l0, +}; + +const s32 anim_0376__v0_l0[] = { // 0x080EBB2C + PALETTE(7, 16, 0x30) + TILES(0xF3C8, 24) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(3, 0) + + TILES(0xF3E0, 35) + SHOW_FRAME(4, 1) + + TILES(0xF403, 30) + HITBOX(0, -6, -12, 6, 14) + HITBOX(1, -24, -27, 21, 12) + SHOW_FRAME(3, 2) + + TILES(0xF421, 30) + HITBOX(0, -6, -12, 6, 14) + HITBOX(1, -39, -25, 17, 28) + SHOW_FRAME(3, 3) + + TILES(0xF43F, 42) + HITBOX(0, -6, -12, 8, 14) + HITBOX(1, -29, -23, 14, 33) + SHOW_FRAME(3, 4) + + TILES(0xF469, 30) + HITBOX(0, -6, -4, 6, 22) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(3, 5) + + TILES(0xF487, 20) + SHOW_FRAME(3, 6) + + TILES(0xF49B, 20) + SHOW_FRAME(3, 7) + + TILES(0xF4AF, 24) + SHOW_FRAME(3, 8) + + TILES(0xF4C7, 16) + SHOW_FRAME(3, 9) + + TILES(0xF4D7, 20) + SHOW_FRAME(4, 10) + TILES(0xF4EB, 30) + SHOW_FRAME(3, 11) + + TILES(0xF509, 30) + SHOW_FRAME(3, 12) + + TILES(0xF527, 30) + SHOW_FRAME(3, 13) + + JUMP_BACK(15) +}; + +const s32 * const anim_0376[1] = { + anim_0376__v0_l0, +}; + +const s32 anim_0377__v0_l0[] = { // 0x080EBCC8 + PALETTE(7, 16, 0x30) + TILES(0xF545, 20) + HITBOX(0, -6, -12, 6, 14) + SHOW_FRAME(3, 0) + + TILES(0xF559, 20) + SHOW_FRAME(4, 1) + + TILES(0xF56D, 20) + SHOW_FRAME(3, 2) + TILES(0xF581, 30) + HITBOX(0, -6, -12, 6, 14) + HITBOX(1, -24, -6, 24, 14) + SHOW_FRAME(2, 3) + + TILES(0xF59F, 20) + SHOW_FRAME(2, 4) + + TILES(0xF5B3, 30) + SHOW_FRAME(2, 5) + + TILES(0xF5D1, 20) + SHOW_FRAME(2, 6) + + TILES(0xF5E5, 16) + SHOW_FRAME(2, 7) + + TILES(0xF5F5, 24) + SHOW_FRAME(2, 8) + + JUMP_BACK(36) +}; + +const s32 anim_0377__v1_l0[] = { // 0x080EBDB4 + PALETTE(7, 16, 0x30) + TILES(0xF60D, 20) + HITBOX(0, -6, -12, 6, 14) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(4, 9) + TILES(0xF621, 30) + SHOW_FRAME(3, 10) + + TILES(0xF63F, 30) + SHOW_FRAME(3, 11) + + TILES(0xF65D, 30) + SHOW_FRAME(3, 12) + + JUMP_BACK(15) +}; + +const s32 * const anim_0377[2] = { + anim_0377__v0_l0, + anim_0377__v1_l0, +}; + +const s32 anim_0379__v0_l0[] = { // 0x080EBE38 + PALETTE(7, 16, 0x30) + TILES(0xF67B, 24) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0xF693, 24) + SHOW_FRAME(3, 1) + + TILES(0xF6AB, 24) + SHOW_FRAME(3, 2) + + TILES(0xF693, 24) + SHOW_FRAME(3, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0379[1] = { + anim_0379__v0_l0, +}; + +const s32 anim_0380__v0_l0[] = { // 0x080EBEAC + PALETTE(7, 16, 0x30) + TILES(0xF6C3, 30) + HITBOX(0, -6, -12, 6, 16) + SHOW_FRAME(3, 0) + + TILES(0xF6E1, 24) + SHOW_FRAME(3, 1) + + TILES(0xF6F9, 24) + SHOW_FRAME(3, 2) + + TILES(0xF6E1, 24) + SHOW_FRAME(3, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0380[1] = { + anim_0380__v0_l0, +}; + +const s32 anim_0381__v0_l0[] = { // 0x080EBF20 + PALETTE(7, 16, 0x30) + TILES(0xF711, 20) + HITBOX(0, -6, -18, 6, 8) + SHOW_FRAME(3, 0) + + TILES(0xF725, 25) + SHOW_FRAME(3, 1) + + TILES(0xF73E, 25) + SHOW_FRAME(3, 2) + + TILES(0xF725, 25) + SHOW_FRAME(3, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0381[1] = { + anim_0381__v0_l0, +}; + +const s32 anim_0383__v0_l0[] = { // 0x080EBF94 + PALETTE(7, 16, 0xA0) + TILES(0xF757, 18) + SHOW_FRAME(3, 0) + + TILES(0xF769, 18) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0383[1] = { + anim_0383__v0_l0, +}; + +const s32 anim_0384__v0_l0[] = { // 0x080EBFD4 + PALETTE(7, 16, 0xA0) + TILES(0xF77B, 16) + SHOW_FRAME(2, 0) + + TILES(0xF78B, 16) + SHOW_FRAME(2, 1) + + END() +}; + +const s32 anim_0384__v1_l0[] = { // 0x080EC00C + PALETTE(7, 16, 0xA0) + TILES(0xF79B, 16) + SHOW_FRAME(2, 2) + + JUMP_BACK(8) +}; + +const s32 * const anim_0384[2] = { + anim_0384__v0_l0, + anim_0384__v1_l0, +}; + +const s32 anim_0385__v0_l0[] = { // 0x080EC03C + PALETTE(7, 16, 0xA0) + TILES(0xF7AB, 15) + SHOW_FRAME(3, 0) + + TILES(0xF7BA, 15) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0385[1] = { + anim_0385__v0_l0, +}; + +const s32 anim_0386__v0_l0[] = { // 0x080EC07C + PALETTE(7, 16, 0xA0) + TILES(0xF7C9, 25) + SHOW_FRAME(8, 0) + TILES(0xF7E2, 25) + SHOW_FRAME(3, 1) + + TILES(0xF7FB, 25) + SHOW_FRAME(3, 2) + + JUMP_BACK(10) +}; + +const s32 * const anim_0386[1] = { + anim_0386__v0_l0, +}; + +const s32 anim_0387__v0_l0[] = { // 0x080EC0D0 + PALETTE(7, 16, 0xA0) + TILES(0xF814, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0387__v1_l0[] = { // 0x080EC0F4 + PALETTE(7, 16, 0xA0) + TILES(0xF828, 20) + SHOW_FRAME(4, 1) + + TILES(0xF83C, 20) + SHOW_FRAME(4, 2) + + TILES(0xF850, 20) + SHOW_FRAME(40, 3) + + END() +}; + +const s32 * const anim_0387[2] = { + anim_0387__v0_l0, + anim_0387__v1_l0, +}; + +const s32 anim_0391__v0_l0[] = { // 0x080EC148 + PALETTE(8, 16, 0x30) + TILES(0xF864, 16) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0391__v1_l0[] = { // 0x080EC178 + PALETTE(8, 16, 0x30) + TILES(0xF874, 16) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0391__v2_l0[] = { // 0x080EC1A8 + PALETTE(8, 16, 0x30) + TILES(0xF884, 16) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0391__v3_l0[] = { // 0x080EC1D8 + PALETTE(8, 16, 0x30) + TILES(0xF894, 20) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0391__v4_l0[] = { // 0x080EC208 + PALETTE(8, 16, 0x30) + TILES(0xF8A8, 20) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0391__v5_l0[] = { // 0x080EC238 + PALETTE(8, 16, 0x30) + TILES(0xF8BC, 16) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0391__v6_l0[] = { // 0x080EC268 + PALETTE(8, 16, 0x30) + TILES(0xF8CC, 16) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0391__v7_l0[] = { // 0x080EC298 + PALETTE(8, 16, 0x30) + TILES(0xF8DC, 20) + HITBOX(0, -6, -10, 6, 10) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 * const anim_0391[8] = { + anim_0391__v0_l0, + anim_0391__v1_l0, + anim_0391__v2_l0, + anim_0391__v3_l0, + anim_0391__v4_l0, + anim_0391__v5_l0, + anim_0391__v6_l0, + anim_0391__v7_l0, +}; + +const s32 anim_0392__v0_l0[] = { // 0x080EC2E8 + PALETTE(7, 16, 0x30) + TILES(0xF8F0, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(3, 0) + + TILES(0xF900, 16) + SHOW_FRAME(3, 1) + + TILES(0xF910, 16) + SHOW_FRAME(3, 2) + + TILES(0xF920, 16) + SHOW_FRAME(3, 3) + + JUMP_BACK(29) +}; + +const s32 * const anim_0392[1] = { + anim_0392__v0_l0, +}; + +const s32 anim_0393__v0_l0[] = { // 0x080EC368 + PALETTE(7, 16, 0x30) + TILES(0xF930, 16) + HITBOX(0, -8, -7, 8, 9) + HITBOX(1, -8, -7, 8, 9) + SHOW_FRAME(3, 0) + + TILES(0xF940, 12) + SHOW_FRAME(3, 1) + + TILES(0xF94C, 12) + SHOW_FRAME(3, 2) + + JUMP_BACK(24) +}; + +const s32 * const anim_0393[1] = { + anim_0393__v0_l0, +}; + +const s32 anim_0394__v0_l0[] = { // 0x080EC3D4 + PALETTE(7, 16, 0xA0) + TILES(0xF958, 64) + SHOW_FRAME(2, 0) + + TILES(0xF998, 64) + SHOW_FRAME(2, 1) + + TILES(0xF9D8, 64) + SHOW_FRAME(2, 2) + + TILES(0xFA18, 64) + SHOW_FRAME(2, 3) + + TILES(0xFA58, 64) + SHOW_FRAME(2, 4) + + TILES(0xFA98, 64) + SHOW_FRAME(2, 5) + + TILES(0xFAD8, 64) + SHOW_FRAME(2, 6) + + TILES(0xFB18, 64) + SHOW_FRAME(2, 7) + + TILES(0xFB58, 64) + SHOW_FRAME(2, 8) + + TILES(0xFB98, 64) + SHOW_FRAME(2, 9) + + JUMP_BACK(53) +}; + +const s32 * const anim_0394[1] = { + anim_0394__v0_l0, +}; + +const s32 anim_0396__v0_l0[] = { // 0x080EC4B4 + PALETTE(7, 16, 0x30) + TILES(0xFBD8, 64) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 * const anim_0396[1] = { + anim_0396__v0_l0, +}; + +const s32 anim_0397__v0_l0[] = { // 0x080EC4DC + PALETTE(0, 16, 0x0) + TILES(0xFC18, 20) + SHOW_FRAME(4, 0) + + TILES(0xFC2C, 20) + SHOW_FRAME(4, 1) + + TILES(0xFC40, 20) + SHOW_FRAME(4, 2) + + END() +}; + +const s32 * const anim_0397[1] = { + anim_0397__v0_l0, +}; + +const s32 anim_0398__v0_l0[] = { // 0x080EC52C + PALETTE(0, 16, 0x0) + TILES(0xFC54, 16) + SHOW_FRAME(4, 0) + + TILES(0xFC64, 16) + SHOW_FRAME(10, 1) + + TILES(0xFC74, 16) + SHOW_FRAME(2, 2) + + TILES(0xFC54, 16) + SHOW_FRAME(4, 0) + + TILES(0xFC84, 20) + SHOW_FRAME(3, 3) + + TILES(0xFC98, 20) + SHOW_FRAME(3, 4) + + TILES(0xFCAC, 24) + SHOW_FRAME(3, 5) + + TILES(0xFCC4, 24) + SHOW_FRAME(3, 6) + + PALETTE(9, 16, 0x0) + TILES(0xFCDC, 24) + SHOW_FRAME(3, 7) + + PALETTE(10, 16, 0x0) + TILES(0xFCF4, 24) + SHOW_FRAME(3, 8) + PALETTE(11, 16, 0x0) + TILES(0xFD0C, 24) + SHOW_FRAME(1, 9) + + PALETTE(12, 16, 0x30) + TILES(0xFD24, 24) + SHOW_FRAME(1, 10) + + PALETTE(11, 16, 0x0) + TILES(0xFD3C, 24) + SHOW_FRAME(1, 11) + + PALETTE(12, 16, 0x30) + TILES(0xFD54, 24) + SHOW_FRAME(1, 12) + + JUMP_BACK(32) +}; + +const s32 anim_0398__v1_l0[] = { // 0x080EC6A0 + PALETTE(13, 16, 0x50) + TILES(0xFD6C, 36) + SHOW_FRAME(3, 13) + + TILES(0xFD90, 56) + SHOW_FRAME(3, 14) + + JUMP_BACK(13) +}; + +const s32 * const anim_0398[2] = { + anim_0398__v0_l0, + anim_0398__v1_l0, +}; + +const s32 anim_0399__v0_l0[] = { // 0x080EC6E4 + PALETTE(11, 16, 0x0) + TILES(0xFDC8, 24) + HITBOX(0, -14, -10, 13, 6) + HITBOX(1, -14, -10, 13, 6) + SHOW_FRAME(2, 0) + + PALETTE(12, 16, 0x30) + TILES(0xFDE0, 24) + SHOW_FRAME(2, 1) + + PALETTE(11, 16, 0x0) + TILES(0xFDF8, 24) + SHOW_FRAME(2, 2) + + PALETTE(12, 16, 0x30) + TILES(0xFE10, 24) + SHOW_FRAME(2, 3) + + JUMP_BACK(38) +}; + +const s32 anim_0399__v1_l0[] = { // 0x080EC784 + PALETTE(11, 16, 0x0) + TILES(0xFE28, 24) + HITBOX(0, -14, -10, 13, 6) + HITBOX(1, -20, -15, 3, 11) + SHOW_FRAME(2, 4) + + PALETTE(12, 16, 0x30) + TILES(0xFE40, 24) + SHOW_FRAME(2, 5) + + PALETTE(11, 16, 0x0) + TILES(0xFE58, 24) + SHOW_FRAME(2, 6) + + PALETTE(12, 16, 0x30) + TILES(0xFE70, 24) + SHOW_FRAME(2, 7) + + JUMP_BACK(38) +}; + +const s32 anim_0399__v2_l0[] = { // 0x080EC824 + PALETTE(11, 16, 0x0) + TILES(0xFE88, 64) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0399[3] = { + anim_0399__v0_l0, + anim_0399__v1_l0, + anim_0399__v2_l0, +}; + +const s32 anim_0400__v0_l0[] = { // 0x080EC854 + PALETTE(14, 16, 0x20) + TILES(0xFEC8, 40) + SHOW_FRAME(2, 0) + + TILES(0xFEF0, 40) + SHOW_FRAME(2, 1) + + TILES(0xFF18, 40) + SHOW_FRAME(2, 2) + + TILES(0xFF40, 40) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 anim_0400__v1_l0[] = { // 0x080EC8B8 + PALETTE(14, 16, 0x20) + TILES(0xFF68, 40) + SHOW_FRAME(3, 4) + + TILES(0xFF90, 40) + SHOW_FRAME(3, 5) + + TILES(0xFFB8, 40) + SHOW_FRAME(3, 6) + + END() +}; + +const s32 * const anim_0400[2] = { + anim_0400__v0_l0, + anim_0400__v1_l0, +}; + +const s32 anim_0401__v0_l0[] = { // 0x080EC90C + PALETTE(15, 16, 0xC0) + TILES(0xFFE0, 20) + HITBOX(0, -13, -22, 10, 5) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0401__v1_l0[] = { // 0x080EC93C + PALETTE(15, 16, 0xC0) + TILES(0xFFF4, 20) + HITBOX(0, -13, -22, 10, 6) + SHOW_FRAME(8, 1) + + TILES(0x10008, 20) + SHOW_FRAME(8, 2) + + TILES(0xFFE0, 20) + SHOW_FRAME(8, 0) + + JUMP_BACK(21) +}; + +const s32 anim_0401__v2_l0[] = { // 0x080EC998 + PALETTE(15, 16, 0xC0) + TILES(0x1001C, 20) + HITBOX(0, -8, -20, 7, 3) + SHOW_FRAME(6, 3) + + TILES(0x10030, 20) + HITBOX(0, -9, -20, 11, 0) + SHOW_FRAME(8, 4) + + TILES(0x10044, 20) + HITBOX(0, -7, -19, 7, 2) + SHOW_FRAME(8, 5) + + END() +}; + +const s32 * const anim_0401[3] = { + anim_0401__v0_l0, + anim_0401__v1_l0, + anim_0401__v2_l0, +}; + +const s32 anim_0402__v0_l0[] = { // 0x080ECA14 + PALETTE(16, 16, 0x70) + TILES(0x10058, 16) + HITBOX(0, -10, -7, 9, 10) + SHOW_FRAME(4, 0) + + TILES(0x10068, 16) + HITBOX(0, -8, -5, 7, 9) + SHOW_FRAME(4, 1) + + TILES(0x10078, 16) + HITBOX(0, -5, -5, 6, 6) + SHOW_FRAME(4, 2) + + TILES(0x10088, 12) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 * const anim_0402[1] = { + anim_0402__v0_l0, +}; + +const s32 anim_0403__v0_l0[] = { // 0x080ECA9C + PALETTE(17, 16, 0xC0) + TILES(0x10094, 20) + HITBOX(0, -10, -27, 12, -2) + SHOW_FRAME(2, 0) + + TILES(0x100A8, 20) + HITBOX(0, -10, -27, 12, -2) + SHOW_FRAME(2, 1) + + JUMP_BACK(19) +}; + +const s32 anim_0403__v1_l0[] = { // 0x080ECAF0 + PALETTE(17, 16, 0xC0) + TILES(0x100BC, 20) + HITBOX(0, -9, -26, 10, -3) + SHOW_FRAME(3, 2) + + TILES(0x100D0, 20) + HITBOX(0, -9, -26, 10, -3) + SHOW_FRAME(4, 3) + + JUMP_BACK(19) +}; + +const s32 anim_0403__v2_l0[] = { // 0x080ECB44 + PALETTE(17, 16, 0xC0) + TILES(0x100E4, 20) + HITBOX(0, -5, -30, 7, -3) + SHOW_FRAME(5, 4) + + END() +}; + +const s32 * const anim_0403[3] = { + anim_0403__v0_l0, + anim_0403__v1_l0, + anim_0403__v2_l0, +}; + +const s32 anim_0404__v0_l0[] = { // 0x080ECB80 + PALETTE(15, 16, 0xC0) + TILES(0x100F8, 24) + HITBOX(0, -13, -21, 13, -4) + SHOW_FRAME(5, 0) + + TILES(0x10110, 30) + HITBOX(0, -13, -21, 13, -4) + SHOW_FRAME(5, 1) + + TILES(0x1012E, 24) + HITBOX(0, -13, -21, 13, -4) + SHOW_FRAME(5, 2) + + TILES(0x10110, 30) + HITBOX(0, -13, -21, 13, -4) + SHOW_FRAME(5, 1) + + JUMP_BACK(35) +}; + +const s32 anim_0404__v1_l0[] = { // 0x080ECC14 + PALETTE(15, 16, 0xC0) + TILES(0x10146, 30) + HITBOX(0, -13, -21, 13, -4) + SHOW_FRAME(10, 3) + + TILES(0x10164, 30) + HITBOX(0, -13, -21, 13, -4) + SHOW_FRAME(10, 4) + + END() +}; + +const s32 * const anim_0404[2] = { + anim_0404__v0_l0, + anim_0404__v1_l0, +}; + +const s32 anim_0405__v0_l0[] = { // 0x080ECC6C + PALETTE(18, 16, 0xD0) + TILES(0x10182, 20) + HITBOX(0, -14, -26, 14, 2) + SHOW_FRAME(4, 0) + + TILES(0x10196, 20) + SHOW_FRAME(4, 1) + + TILES(0x101AA, 20) + SHOW_FRAME(4, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0405__v1_l0[] = { // 0x080ECCC8 + PALETTE(18, 16, 0xD0) + TILES(0x10182, 20) + HITBOX(0, -14, -26, 14, 2) + SHOW_FRAME(3, 0) + + TILES(0x101BE, 20) + SHOW_FRAME(3, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0405__v2_l0[] = { // 0x080ECD10 + PALETTE(18, 16, 0xD0) + TILES(0x101D2, 20) + HITBOX(0, -14, -26, 14, 2) + SHOW_FRAME(12, 4) + + TILES(0x101E6, 20) + SHOW_FRAME(12, 5) + + END() +}; + +const s32 * const anim_0405[3] = { + anim_0405__v0_l0, + anim_0405__v1_l0, + anim_0405__v2_l0, +}; + +const s32 anim_0406__v0_l0[] = { // 0x080ECD60 + PALETTE(19, 16, 0xE0) + TILES(0x101FA, 16) + HITBOX(0, -8, -19, 6, -2) + SHOW_FRAME(4, 0) + + TILES(0x1020A, 12) + HITBOX(0, -10, -18, 8, -3) + SHOW_FRAME(4, 1) + + TILES(0x10216, 20) + HITBOX(0, -10, -31, 12, -7) + SHOW_FRAME(6, 2) + + TILES(0x1022A, 20) + HITBOX(0, -13, -22, 10, -5) + SHOW_FRAME(20, 3) + + TILES(0x1020A, 12) + HITBOX(0, -11, -18, 9, -2) + SHOW_FRAME(4, 1) + + END() +}; + +const s32 anim_0406__v1_l0[] = { // 0x080ECE10 + PALETTE(19, 16, 0xE0) + TILES(0x1023E, 16) + HITBOX(0, -10, -21, 7, -1) + SHOW_FRAME(7, 4) + + TILES(0x1024E, 16) + HITBOX(0, -10, -19, 7, -2) + SHOW_FRAME(7, 5) + + JUMP_BACK(19) +}; + +const s32 * const anim_0406[2] = { + anim_0406__v0_l0, + anim_0406__v1_l0, +}; + +const s32 anim_0407__v0_l0[] = { // 0x080ECE6C + TILES(0x1025E, 64) + PALETTE(20, 16, 0x90) + HITBOX(0, -15, -29, 14, -1) + SHOW_FRAME(6, 0) + + HITBOX(0, -15, -29, 14, -1) + SHOW_FRAME(6, 1) + + HITBOX(0, -15, -29, 14, -1) + SHOW_FRAME(6, 2) + + HITBOX(0, -15, -29, 14, -1) + SHOW_FRAME(6, 3) + + END() +}; + +const s32 * const anim_0407[1] = { + anim_0407__v0_l0, +}; + +const s32 anim_0408__v0_l0[] = { // 0x080ECEDC + PALETTE(17, 16, 0xC0) + TILES(0x1029E, 4) + HITBOX(0, -4, -4, 4, 5) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0408[1] = { + anim_0408__v0_l0, +}; + +const s32 anim_0409__v0_l0[] = { // 0x080ECF10 + PALETTE(17, 16, 0xC0) + TILES(0x102A2, 1) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0409[1] = { + anim_0409__v0_l0, +}; + +const s32 anim_0410__v0_l0[] = { // 0x080ECF44 + PALETTE(17, 16, 0xC0) + TILES(0x102A3, 4) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(3, 0) + + TILES(0x102A7, 4) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(3, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0410[1] = { + anim_0410__v0_l0, +}; + +const s32 anim_0411__v0_l0[] = { // 0x080ECF9C + PALETTE(21, 16, 0xE0) + TILES(0x102AB, 8) + HITBOX(0, -6, -14, 6, -2) + SHOW_FRAME(5, 0) + + TILES(0x102B3, 8) + SHOW_FRAME(5, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0411__v1_l0[] = { // 0x080ECFE4 + PALETTE(21, 16, 0xE0) + TILES(0x102BB, 16) + HITBOX(0, -10, -18, 10, 2) + SHOW_FRAME(5, 2) + + TILES(0x102CB, 16) + SHOW_FRAME(5, 3) + + JUMP_BACK(16) +}; + +const s32 * const anim_0411[2] = { + anim_0411__v0_l0, + anim_0411__v1_l0, +}; + +const s32 anim_0412__v0_l0[] = { // 0x080ED034 + PALETTE(22, 16, 0xD0) + TILES(0x102DB, 4) + HITBOX(0, -8, -1, 8, 13) + SHOW_FRAME(30, 0) + + END() +}; + +const s32 anim_0412__v1_l0[] = { // 0x080ED064 + PALETTE(22, 16, 0xD0) + TILES(0x102DF, 6) + HITBOX(0, -8, 2, 8, 16) + SHOW_FRAME(3, 1) + + TILES(0x102E5, 6) + SHOW_FRAME(3, 2) + + JUMP_BACK(16) +}; + +const s32 anim_0412__v2_l0[] = { // 0x080ED0AC + PALETTE(22, 16, 0xD0) + TILES(0x102EB, 4) + HITBOX(0, -8, -1, 8, 13) + SHOW_FRAME(20, 3) + + END() +}; + +const s32 * const anim_0412[3] = { + anim_0412__v0_l0, + anim_0412__v1_l0, + anim_0412__v2_l0, +}; + +const s32 anim_0413__v0_l0[] = { // 0x080ED0E8 + PALETTE(23, 16, 0xC0) + TILES(0x102EF, 4) + HITBOX(0, -6, -22, 6, -5) + SHOW_FRAME(4, 0) + + TILES(0x102F3, 4) + SHOW_FRAME(4, 1) + + TILES(0x102F7, 8) + SHOW_FRAME(4, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0413__v1_l0[] = { // 0x080ED144 + PALETTE(23, 16, 0xC0) + TILES(0x102FF, 6) + SHOW_FRAME(5, 3) + + TILES(0x10305, 6) + SHOW_FRAME(5, 4) + + END() +}; + +const s32 * const anim_0413[2] = { + anim_0413__v0_l0, + anim_0413__v1_l0, +}; + +const s32 anim_0414__v0_l0[] = { // 0x080ED184 + PALETTE(23, 16, 0xC0) + TILES(0x1030B, 1) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(3, 0) + + TILES(0x1030C, 1) + SHOW_FRAME(3, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0414[1] = { + anim_0414__v0_l0, +}; + +const s32 anim_0415__v0_l0[] = { // 0x080ED1D0 + PALETTE(24, 16, 0xD0) + TILES(0x1030D, 16) + HITBOX(0, -10, -26, 10, 2) + SHOW_FRAME(5, 0) + + TILES(0x1031D, 16) + HITBOX(0, -10, -26, 10, 2) + SHOW_FRAME(5, 1) + + JUMP_BACK(19) +}; + +const s32 anim_0415__v1_l0[] = { // 0x080ED224 + PALETTE(24, 16, 0xD0) + TILES(0x1032D, 20) + HITBOX(0, -10, -26, 10, 2) + SHOW_FRAME(5, 2) + + TILES(0x10341, 20) + HITBOX(0, -10, -26, 10, 2) + SHOW_FRAME(10, 3) + + TILES(0x1032D, 20) + HITBOX(0, -10, -26, 10, 2) + SHOW_FRAME(5, 2) + + END() +}; + +const s32 * const anim_0415[2] = { + anim_0415__v0_l0, + anim_0415__v1_l0, +}; + +const s32 anim_0416__v0_l0[] = { // 0x080ED29C + PALETTE(25, 16, 0xD0) + TILES(0x10355, 1) + HITBOX(0, -6, -6, 7, 7) + SHOW_FRAME(4, 0) + + TILES(0x10356, 4) + HITBOX(0, -16, -16, 16, 16) + SHOW_FRAME(4, 1) + + TILES(0x1035A, 9) + HITBOX(0, -16, -16, 16, 16) + SHOW_FRAME(4, 2) + + TILES(0x10363, 16) + HITBOX(0, -24, -24, 24, 24) + SHOW_FRAME(4, 3) + + TILES(0x10373, 16) + HITBOX(0, -24, -24, 24, 24) + SHOW_FRAME(4, 4) + + END() +}; + +const s32 * const anim_0416[1] = { + anim_0416__v0_l0, +}; + +const s32 anim_0417__v0_l0[] = { // 0x080ED350 + PALETTE(26, 16, 0xE0) + TILES(0x10383, 15) + HITBOX(0, -21, -29, 21, -8) + SHOW_FRAME(4, 0) + + TILES(0x10392, 15) + SHOW_FRAME(4, 1) + + TILES(0x103A1, 15) + SHOW_FRAME(4, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0417__v1_l0[] = { // 0x080ED3AC + PALETTE(26, 16, 0xE0) + TILES(0x103B0, 12) + HITBOX(0, -21, -29, 21, -8) + SHOW_FRAME(4, 3) + + TILES(0x103BC, 12) + SHOW_FRAME(4, 4) + + TILES(0x103C8, 15) + SHOW_FRAME(4, 5) + + END() +}; + +const s32 * const anim_0417[2] = { + anim_0417__v0_l0, + anim_0417__v1_l0, +}; + +const s32 anim_0418__v0_l0[] = { // 0x080ED40C + PALETTE(24, 16, 0xC0) + TILES(0x103D7, 36) + HITBOX(0, -10, -42, 10, -22) + HITBOX(1, -14, -22, 14, 2) + SHOW_FRAME(5, 0) + + TILES(0x103FB, 36) + SHOW_FRAME(5, 1) + + TILES(0x1041F, 24) + SHOW_FRAME(5, 2) + + TILES(0x10437, 36) + SHOW_FRAME(5, 3) + + JUMP_BACK(29) +}; + +const s32 * const anim_0418[1] = { + anim_0418__v0_l0, +}; + +const s32 anim_0419__v0_l0[] = { // 0x080ED48C + PALETTE(24, 16, 0xD0) + TILES(0x1045B, 4) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(4, 0) + + TILES(0x1045F, 4) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(4, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0419[1] = { + anim_0419__v0_l0, +}; + +const s32 anim_0420__v0_l0[] = { // 0x080ED4E4 + PALETTE(26, 16, 0xE0) + TILES(0x10463, 4) + HITBOX(0, -6, -5, 6, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0420[1] = { + anim_0420__v0_l0, +}; + +const s32 anim_0421__v0_l0[] = { // 0x080ED518 + PALETTE(26, 16, 0xE0) + TILES(0x10467, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0421[1] = { + anim_0421__v0_l0, +}; + +const s32 anim_0422__v0_l0[] = { // 0x080ED540 + PALETTE(27, 16, 0xC0) + TILES(0x10468, 6) + HITBOX(0, -6, -20, 6, 1) + SHOW_FRAME(10, 0) + + TILES(0x1046E, 6) + HITBOX(0, -6, -19, 6, 1) + SHOW_FRAME(3, 1) + + TILES(0x10474, 8) + HITBOX(0, -6, -20, 6, 1) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0422__v1_l0[] = { // 0x080ED5B0 + PALETTE(27, 16, 0xC0) + TILES(0x10468, 6) + HITBOX(0, -6, -20, 6, 1) + SHOW_FRAME(6, 0) + + TILES(0x1047C, 8) + HITBOX(0, -6, -20, 6, 1) + SHOW_FRAME(6, 3) + + TILES(0x10468, 6) + HITBOX(0, -6, -20, 6, 1) + SHOW_FRAME(6, 0) + + TILES(0x10484, 8) + HITBOX(0, -6, -21, 6, 1) + SHOW_FRAME(6, 4) + + JUMP_BACK(35) +}; + +const s32 * const anim_0422[2] = { + anim_0422__v0_l0, + anim_0422__v1_l0, +}; + +const s32 anim_0423__v0_l0[] = { // 0x080ED64C + PALETTE(27, 16, 0xC0) + TILES(0x1048C, 6) + HITBOX(0, -20, -6, 1, 6) + SHOW_FRAME(10, 0) + + TILES(0x10492, 6) + HITBOX(0, -19, -6, 1, 6) + SHOW_FRAME(3, 1) + + TILES(0x10498, 8) + HITBOX(0, -21, -6, 1, 6) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0423__v1_l0[] = { // 0x080ED6BC + PALETTE(27, 16, 0xC0) + TILES(0x1048C, 6) + HITBOX(0, -19, -6, 1, 6) + SHOW_FRAME(5, 0) + + TILES(0x104A0, 8) + HITBOX(0, -21, -6, 1, 6) + SHOW_FRAME(5, 3) + + TILES(0x1048C, 6) + HITBOX(0, -20, -6, 1, 6) + SHOW_FRAME(5, 0) + + TILES(0x104A8, 8) + HITBOX(0, -21, -6, 1, 6) + SHOW_FRAME(5, 4) + + JUMP_BACK(35) +}; + +const s32 * const anim_0423[2] = { + anim_0423__v0_l0, + anim_0423__v1_l0, +}; + +const s32 anim_0424__v0_l0[] = { // 0x080ED758 + PALETTE(27, 16, 0xC0) + TILES(0x104B0, 10) + HITBOX(0, -14, -5, 14, 3) + SHOW_FRAME(4, 0) + + TILES(0x104BA, 10) + SHOW_FRAME(4, 1) + + TILES(0x104C4, 10) + SHOW_FRAME(4, 2) + + JUMP_BACK(21) +}; + +const s32 * const anim_0424[1] = { + anim_0424__v0_l0, +}; + +const s32 anim_0425__v0_l0[] = { // 0x080ED7B8 + PALETTE(28, 16, 0xE0) + TILES(0x104CE, 6) + HITBOX(0, -6, -8, 6, 6) + SHOW_FRAME(6, 0) + + TILES(0x104D4, 8) + SHOW_FRAME(6, 1) + + TILES(0x104DC, 3) + SHOW_FRAME(6, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0425__v1_l0[] = { // 0x080ED814 + PALETTE(28, 16, 0xE0) + TILES(0x104DF, 15) + HITBOX(0, -16, -16, 16, 16) + SHOW_FRAME(2, 3) + + TILES(0x104EE, 15) + SHOW_FRAME(2, 4) + + TILES(0x104FD, 15) + SHOW_FRAME(2, 5) + + JUMP_BACK(21) +}; + +const s32 * const anim_0425[2] = { + anim_0425__v0_l0, + anim_0425__v1_l0, +}; + +const s32 anim_0426__v0_l0[] = { // 0x080ED878 + PALETTE(29, 16, 0xD0) + TILES(0x1050C, 8) + HITBOX(0, -5, -23, 7, 1) + SHOW_FRAME(5, 0) + + TILES(0x10514, 6) + SHOW_FRAME(5, 1) + + TILES(0x1051A, 8) + SHOW_FRAME(5, 2) + + TILES(0x10514, 6) + SHOW_FRAME(5, 1) + + JUMP_BACK(26) +}; + +const s32 anim_0426__v1_l0[] = { // 0x080ED8E8 + PALETTE(29, 16, 0xD0) + TILES(0x10522, 6) + HITBOX(0, -6, -23, 6, 1) + SHOW_FRAME(13, 3) + + TILES(0x10528, 6) + SHOW_FRAME(5, 4) + + END() +}; + +const s32 * const anim_0426[2] = { + anim_0426__v0_l0, + anim_0426__v1_l0, +}; + +const s32 anim_0427__v0_l0[] = { // 0x080ED934 + PALETTE(27, 16, 0xC0) + TILES(0x1052E, 1) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0427[1] = { + anim_0427__v0_l0, +}; + +const s32 anim_0428__v0_l0[] = { // 0x080ED968 + PALETTE(29, 16, 0xD0) + TILES(0x1052F, 4) + HITBOX(0, -5, -10, 5, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0428[1] = { + anim_0428__v0_l0, +}; + +const s32 anim_0429__v0_l0[] = { // 0x080ED99C + PALETTE(29, 16, 0xD0) + TILES(0x10533, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0429__v1_l0[] = { // 0x080ED9C0 + PALETTE(29, 16, 0xD0) + TILES(0x10534, 1) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0429[2] = { + anim_0429__v0_l0, + anim_0429__v1_l0, +}; + +const s32 anim_0430__v0_l0[] = { // 0x080ED9EC + PALETTE(30, 16, 0xE0) + TILES(0x10535, 18) + HITBOX(0, -12, -16, 12, 2) + SHOW_FRAME(5, 0) + + TILES(0x10547, 18) + SHOW_FRAME(5, 1) + + TILES(0x10535, 18) + SHOW_FRAME(5, 0) + + TILES(0x10559, 18) + SHOW_FRAME(5, 2) + + JUMP_BACK(26) +}; + +const s32 anim_0430__v1_l0[] = { // 0x080EDA5C + PALETTE(30, 16, 0xE0) + TILES(0x1056B, 18) + HITBOX(0, -12, -16, 12, 2) + SHOW_FRAME(13, 3) + + TILES(0x1057D, 21) + SHOW_FRAME(2, 4) + + TILES(0x10592, 24) + HITBOX(0, -12, -16, 12, 2) + HITBOX(1, -38, -16, -12, 2) + SHOW_FRAME(12, 5) + + TILES(0x1057D, 21) + SHOW_FRAME(2, 4) + + TILES(0x1056B, 18) + HITBOX(0, -12, -16, 12, 2) + SHOW_FRAME(2, 3) + + END() +}; + +const s32 anim_0430__v2_l0[] = { // 0x080EDB00 + PALETTE(30, 16, 0xE0) + TILES(0x105AA, 18) + HITBOX(0, -12, -16, 12, 2) + SHOW_FRAME(7, 6) + + TILES(0x105BC, 18) + HITBOX(0, -14, -16, 12, 2) + SHOW_FRAME(7, 7) + + END() +}; + +const s32 * const anim_0430[3] = { + anim_0430__v0_l0, + anim_0430__v1_l0, + anim_0430__v2_l0, +}; + +const s32 anim_0431__v0_l0[] = { // 0x080EDB5C + PALETTE(18, 16, 0xD0) + TILES(0x105CE, 4) + HITBOX(0, -6, -6, 6, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0431__v1_l0[] = { // 0x080EDB8C + PALETTE(18, 16, 0xD0) + TILES(0x105D2, 4) + HITBOX(0, -6, -6, 6, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0431__v2_l0[] = { // 0x080EDBBC + PALETTE(18, 16, 0xD0) + TILES(0x105D6, 4) + HITBOX(0, -5, -5, 5, 5) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0431[3] = { + anim_0431__v0_l0, + anim_0431__v1_l0, + anim_0431__v2_l0, +}; + +const s32 anim_0432__v0_l0[] = { // 0x080EDBF8 + PALETTE(31, 16, 0xD0) + TILES(0x105DA, 16) + HITBOX(0, -10, -26, 10, -6) + SHOW_FRAME(5, 0) + + TILES(0x105EA, 16) + SHOW_FRAME(5, 1) + + TILES(0x105FA, 16) + SHOW_FRAME(5, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0432__v1_l0[] = { // 0x080EDC54 + PALETTE(31, 16, 0xD0) + TILES(0x1060A, 20) + HITBOX(0, -10, -26, 10, -6) + SHOW_FRAME(4, 3) + + TILES(0x1061E, 20) + SHOW_FRAME(3, 4) + + TILES(0x1060A, 20) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 * const anim_0432[2] = { + anim_0432__v0_l0, + anim_0432__v1_l0, +}; + +const s32 anim_0433__v0_l0[] = { // 0x080EDCB4 + PALETTE(31, 16, 0xD0) + TILES(0x10632, 8) + HITBOX(0, -8, -24, 8, -4) + SHOW_FRAME(5, 0) + + TILES(0x1063A, 8) + SHOW_FRAME(5, 1) + + TILES(0x10642, 8) + SHOW_FRAME(5, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0433__v1_l0[] = { // 0x080EDD10 + PALETTE(31, 16, 0xD0) + TILES(0x10632, 8) + HITBOX(0, -8, -24, 8, -4) + SHOW_FRAME(5, 0) + + TILES(0x1064A, 8) + SHOW_FRAME(3, 3) + + TILES(0x10652, 8) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0433[2] = { + anim_0433__v0_l0, + anim_0433__v1_l0, +}; + +const s32 anim_0434__v0_l0[] = { // 0x080EDD70 + PALETTE(21, 16, 0xE0) + TILES(0x1065A, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0434__v1_l0[] = { // 0x080EDD94 + PALETTE(21, 16, 0xE0) + TILES(0x1065E, 4) + SHOW_FRAME(3, 1) + + TILES(0x10662, 12) + SHOW_FRAME(3, 2) + + TILES(0x1066E, 16) + HITBOX(0, -7, -20, 7, 2) + SHOW_FRAME(50, 3) + + TILES(0x10662, 12) + HITBOX(0, -7, -13, 7, 2) + SHOW_FRAME(10, 2) + + TILES(0x1065E, 4) + SHOW_FRAME(6, 1) + + END() +}; + +const s32 * const anim_0434[2] = { + anim_0434__v0_l0, + anim_0434__v1_l0, +}; + +const s32 anim_0435__v0_l0[] = { // 0x080EDE28 + PALETTE(31, 16, 0xD0) + TILES(0x1067E, 4) + HITBOX(0, -4, -4, 4, 4) + SHOW_FRAME(3, 0) + + TILES(0x10682, 4) + SHOW_FRAME(3, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0435[1] = { + anim_0435__v0_l0, +}; + +const s32 anim_0436__v0_l0[] = { // 0x080EDE74 + PALETTE(31, 16, 0xD0) + TILES(0x10686, 4) + HITBOX(0, -4, -4, 4, 4) + SHOW_FRAME(3, 0) + + TILES(0x1068A, 4) + HITBOX(0, -4, -4, 4, 4) + SHOW_FRAME(1, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0436[1] = { + anim_0436__v0_l0, +}; + +const s32 anim_0437__v0_l0[] = { // 0x080EDECC + PALETTE(32, 16, 0xF0) + TILES(0x1068E, 4) + SHOW_FRAME(8, 0) + + TILES(0x10692, 4) + SHOW_FRAME(8, 1) + + TILES(0x10696, 4) + SHOW_FRAME(8, 2) + + TILES(0x10692, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0437[1] = { + anim_0437__v0_l0, +}; + +const s32 anim_0438__v0_l0[] = { // 0x080EDF34 + PALETTE(32, 16, 0xF0) + TILES(0x1069A, 4) + SHOW_FRAME(8, 0) + + TILES(0x1069E, 4) + SHOW_FRAME(8, 1) + + TILES(0x106A2, 4) + SHOW_FRAME(8, 2) + + TILES(0x1069E, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0438[1] = { + anim_0438__v0_l0, +}; + +const s32 anim_0439__v0_l0[] = { // 0x080EDF9C + PALETTE(32, 16, 0xF0) + TILES(0x106A6, 4) + SHOW_FRAME(8, 0) + + TILES(0x106AA, 4) + SHOW_FRAME(8, 1) + + TILES(0x106AE, 4) + SHOW_FRAME(8, 2) + + TILES(0x106AA, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0439[1] = { + anim_0439__v0_l0, +}; + +const s32 anim_0440__v0_l0[] = { // 0x080EE004 + PALETTE(32, 16, 0xF0) + TILES(0x106B2, 4) + SHOW_FRAME(8, 0) + + TILES(0x106B6, 4) + SHOW_FRAME(2, 1) + + TILES(0x106BA, 4) + SHOW_FRAME(10, 2) + + TILES(0x106B6, 4) + SHOW_FRAME(2, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0440[1] = { + anim_0440__v0_l0, +}; + +const s32 anim_0441__v0_l0[] = { // 0x080EE06C + PALETTE(32, 16, 0xF0) + TILES(0x106BE, 4) + SHOW_FRAME(8, 0) + + TILES(0x106C2, 4) + SHOW_FRAME(8, 1) + + TILES(0x106C6, 4) + SHOW_FRAME(8, 2) + + TILES(0x106C2, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0441[1] = { + anim_0441__v0_l0, +}; + +const s32 anim_0442__v0_l0[] = { // 0x080EE0D4 + PALETTE(32, 16, 0xF0) + TILES(0x106CA, 4) + SHOW_FRAME(3, 0) + + TILES(0x106CE, 4) + SHOW_FRAME(3, 1) + + TILES(0x106D2, 4) + SHOW_FRAME(3, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0442[1] = { + anim_0442__v0_l0, +}; + +const s32 anim_0443__v0_l0[] = { // 0x080EE128 + PALETTE(32, 16, 0xF0) + TILES(0x106D6, 4) + SHOW_FRAME(8, 0) + + TILES(0x106DA, 4) + SHOW_FRAME(8, 1) + + TILES(0x106DE, 4) + SHOW_FRAME(8, 2) + + TILES(0x106DA, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0443[1] = { + anim_0443__v0_l0, +}; + +const s32 anim_0444__v0_l0[] = { // 0x080EE190 + PALETTE(32, 16, 0xF0) + TILES(0x106E2, 4) + SHOW_FRAME(8, 0) + + TILES(0x106E6, 4) + SHOW_FRAME(8, 1) + + TILES(0x106EA, 4) + SHOW_FRAME(8, 2) + + TILES(0x106E6, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0444[1] = { + anim_0444__v0_l0, +}; + +const s32 anim_0445__v0_l0[] = { // 0x080EE1F8 + PALETTE(32, 16, 0xF0) + TILES(0x106EE, 4) + SHOW_FRAME(8, 0) + + TILES(0x106F2, 4) + SHOW_FRAME(8, 1) + + TILES(0x106F6, 4) + SHOW_FRAME(8, 2) + + TILES(0x106F2, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0445[1] = { + anim_0445__v0_l0, +}; + +const s32 anim_0446__v0_l0[] = { // 0x080EE260 + PALETTE(32, 16, 0xF0) + TILES(0x106FA, 4) + SHOW_FRAME(8, 0) + + TILES(0x106FE, 4) + SHOW_FRAME(8, 1) + + TILES(0x10702, 4) + SHOW_FRAME(8, 2) + + TILES(0x106FE, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0446[1] = { + anim_0446__v0_l0, +}; + +const s32 anim_0447__v0_l0[] = { // 0x080EE2C8 + PALETTE(32, 16, 0xF0) + TILES(0x10706, 4) + SHOW_FRAME(8, 0) + + TILES(0x1070A, 4) + SHOW_FRAME(8, 1) + + TILES(0x1070E, 4) + SHOW_FRAME(8, 2) + + TILES(0x1070A, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0447[1] = { + anim_0447__v0_l0, +}; + +const s32 anim_0448__v0_l0[] = { // 0x080EE330 + PALETTE(32, 16, 0xF0) + TILES(0x10712, 4) + SHOW_FRAME(3, 0) + + TILES(0x10716, 4) + SHOW_FRAME(3, 1) + + TILES(0x1071A, 4) + SHOW_FRAME(3, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0448[1] = { + anim_0448__v0_l0, +}; + +const s32 anim_0449__v0_l0[] = { // 0x080EE384 + PALETTE(32, 16, 0xF0) + TILES(0x1071E, 4) + SHOW_FRAME(8, 0) + + TILES(0x10722, 4) + SHOW_FRAME(8, 1) + + TILES(0x10726, 4) + SHOW_FRAME(8, 2) + + TILES(0x10722, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0449[1] = { + anim_0449__v0_l0, +}; + +const s32 anim_0450__v0_l0[] = { // 0x080EE3EC + PALETTE(32, 16, 0xF0) + TILES(0x1072A, 4) + SHOW_FRAME(6, 0) + + TILES(0x1072E, 4) + SHOW_FRAME(6, 1) + + TILES(0x10732, 4) + SHOW_FRAME(6, 2) + + TILES(0x1072E, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0450[1] = { + anim_0450__v0_l0, +}; + +const s32 anim_0451__v0_l0[] = { // 0x080EE454 + PALETTE(32, 16, 0xF0) + TILES(0x10736, 4) + SHOW_FRAME(8, 0) + + TILES(0x1073A, 4) + SHOW_FRAME(8, 1) + + TILES(0x1073E, 4) + SHOW_FRAME(8, 2) + + TILES(0x1073A, 4) + SHOW_FRAME(8, 1) + + JUMP_BACK(23) +}; + +const s32 * const anim_0451[1] = { + anim_0451__v0_l0, +}; + +const s32 anim_0452__v0_l0[] = { // 0x080EE4BC + PALETTE(33, 16, 0x70) + TILES(0x10742, 12) + HITBOX(0, -7, -44, 8, 5) + SHOW_FRAME(3, 0) + + JUMP_BACK(11) +}; + +const s32 anim_0452__v1_l0[] = { // 0x080EE4F0 + PALETTE(33, 16, 0x70) + TILES(0x1074E, 18) + PLAY_SOUND(169) + SHOW_FRAME(2, 1) + + TILES(0x10760, 15) + SHOW_FRAME(2, 2) + + TILES(0x1076F, 10) + SHOW_FRAME(2, 3) + + TILES(0x10779, 15) + SHOW_FRAME(2, 4) + + TILES(0x10788, 18) + SHOW_FRAME(2, 5) + + TILES(0x10742, 12) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 anim_0452__v2_l0[] = { // 0x080EE580 + PALETTE(33, 16, 0x70) + TILES(0x10742, 12) + SHOW_FRAME(3, 0) + + TILES(0x1079A, 12) + SHOW_FRAME(3, 6) + + JUMP_BACK(13) +}; + +const s32 * const anim_0452[3] = { + anim_0452__v0_l0, + anim_0452__v1_l0, + anim_0452__v2_l0, +}; + +const s32 anim_0453__v0_l0[] = { // 0x080EE5C8 + PALETTE(34, 16, 0x90) + TILES(0x107A6, 30) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 anim_0453__v1_l0[] = { // 0x080EE5EC + PALETTE(34, 16, 0x90) + TILES(0x107C4, 20) + SHOW_FRAME(2, 1) + + TILES(0x107D8, 20) + SHOW_FRAME(2, 2) + + TILES(0x107EC, 30) + SHOW_FRAME(2, 3) + + TILES(0x1080A, 20) + SHOW_FRAME(2, 4) + + TILES(0x1081E, 20) + SHOW_FRAME(2, 5) + + TILES(0x107A6, 30) + SHOW_FRAME(2, 0) + + JUMP_BACK(33) +}; + +const s32 anim_0453__v2_l0[] = { // 0x080EE678 + PALETTE(34, 16, 0x90) + TILES(0x10832, 36) + SHOW_FRAME(2, 6) + + END() +}; + +const s32 * const anim_0453[3] = { + anim_0453__v0_l0, + anim_0453__v1_l0, + anim_0453__v2_l0, +}; + +const s32 anim_0454__v0_l0[] = { // 0x080EE6A8 + PALETTE(35, 16, 0x90) + TILES(0x10856, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0454__v1_l0[] = { // 0x080EE6CC + PALETTE(35, 16, 0x90) + TILES(0x1085A, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0454__v2_l0[] = { // 0x080EE6F0 + PALETTE(35, 16, 0x90) + TILES(0x10862, 16) + HITBOX(0, -16, -21, 15, 3) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0454__v3_l0[] = { // 0x080EE720 + PALETTE(35, 16, 0x90) + TILES(0x10872, 16) + HITBOX(0, -2, -30, 22, 1) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0454[4] = { + anim_0454__v0_l0, + anim_0454__v1_l0, + anim_0454__v2_l0, + anim_0454__v3_l0, +}; + +const s32 anim_0455__v0_l0[] = { // 0x080EE760 + PALETTE(33, 16, 0x70) + TILES(0x10882, 12) + HITBOX(0, -12, -17, 12, -1) + SHOW_FRAME(3, 0) + + END() +}; + +const s32 anim_0455__v1_l0[] = { // 0x080EE790 + PALETTE(33, 16, 0x70) + TILES(0x1088E, 12) + HITBOX(0, -13, -19, 13, -1) + SHOW_FRAME(1, 1) + + TILES(0x1089A, 16) + HITBOX(0, -13, -32, 13, -1) + SHOW_FRAME(2, 2) + + TILES(0x108AA, 16) + HITBOX(0, -13, -28, 13, -1) + SHOW_FRAME(1, 3) + + TILES(0x108BA, 16) + HITBOX(0, -13, -31, 13, -1) + SHOW_FRAME(5, 4) + + TILES(0x108AA, 16) + HITBOX(0, -13, -28, 13, -1) + SHOW_FRAME(3, 3) + + END() +}; + +const s32 anim_0455__v2_l0[] = { // 0x080EE840 + PALETTE(33, 16, 0x70) + TILES(0x108CA, 12) + HITBOX(0, -2, -29, 16, 0) + SHOW_FRAME(3, 5) + + END() +}; + +const s32 anim_0455__v3_l0[] = { // 0x080EE870 + PALETTE(33, 16, 0x70) + TILES(0x108D6, 12) + HITBOX(0, -2, -29, 14, 0) + SHOW_FRAME(1, 6) + + TILES(0x108E2, 16) + HITBOX(0, -2, -29, 29, 0) + SHOW_FRAME(2, 7) + + TILES(0x108F2, 16) + HITBOX(0, -2, -29, 25, 0) + SHOW_FRAME(1, 8) + + TILES(0x10902, 16) + HITBOX(0, -2, -29, 28, 0) + SHOW_FRAME(5, 9) + + TILES(0x108F2, 16) + HITBOX(0, -2, -29, 25, 0) + SHOW_FRAME(3, 8) + + END() +}; + +const s32 anim_0455__v4_l0[] = { // 0x080EE920 + PALETTE(33, 16, 0x70) + TILES(0x10912, 9) + HITBOX(0, 0, -27, 20, -4) + HITBOX(1, 9, -27, 20, -16) + SHOW_FRAME(3, 10) + + END() +}; + +const s32 anim_0455__v5_l0[] = { // 0x080EE95C + PALETTE(33, 16, 0x70) + TILES(0x1091B, 9) + HITBOX(0, 0, -26, 19, -4) + SHOW_FRAME(1, 11) + + TILES(0x10924, 16) + HITBOX(0, 0, -35, 28, -4) + SHOW_FRAME(2, 12) + + TILES(0x10934, 16) + HITBOX(0, 0, -32, 25, -4) + SHOW_FRAME(1, 13) + + TILES(0x10944, 16) + HITBOX(0, 0, -34, 27, -4) + SHOW_FRAME(5, 14) + + TILES(0x10934, 16) + HITBOX(0, 0, -32, 25, -4) + SHOW_FRAME(3, 13) + + END() +}; + +const s32 anim_0455__v6_l0[] = { // 0x080EEA0C + PALETTE(33, 16, 0x70) + TILES(0x10954, 6) + HITBOX(0, 0, -23, 20, -9) + HITBOX(1, 9, -23, 20, -9) + SHOW_FRAME(1, 15) + + END() +}; + +const s32 anim_0455__v7_l0[] = { // 0x080EEA48 + PALETTE(33, 16, 0x70) + TILES(0x1095A, 6) + SHOW_FRAME(2, 16) + + TILES(0x10960, 12) + SHOW_FRAME(1, 17) + + TILES(0x1096C, 12) + SHOW_FRAME(5, 18) + + TILES(0x10978, 12) + SHOW_FRAME(3, 19) + + END() +}; + +const s32 * const anim_0455[8] = { + anim_0455__v0_l0, + anim_0455__v1_l0, + anim_0455__v2_l0, + anim_0455__v3_l0, + anim_0455__v4_l0, + anim_0455__v5_l0, + anim_0455__v6_l0, + anim_0455__v7_l0, +}; + +const s32 anim_0456__v0_l0[] = { // 0x080EEAC8 + PALETTE(36, 16, 0x80) + TILES(0x10984, 2) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0456[1] = { + anim_0456__v0_l0, +}; + +const s32 anim_0457__v0_l0[] = { // 0x080EEAF0 + PALETTE(35, 16, 0x90) + TILES(0x10986, 16) + HITBOX(0, -14, -30, 13, -2) + SHOW_FRAME(4, 0) + + TILES(0x10996, 16) + HITBOX(0, -14, -30, 13, -2) + SHOW_FRAME(4, 1) + + TILES(0x109A6, 16) + HITBOX(0, -14, -30, 13, -2) + SHOW_FRAME(4, 2) + + TILES(0x109B6, 16) + HITBOX(0, -14, -30, 13, -2) + SHOW_FRAME(4, 3) + + JUMP_BACK(35) +}; + +const s32 * const anim_0457[1] = { + anim_0457__v0_l0, +}; + +const s32 anim_0458__v0_l0[] = { // 0x080EEB88 + PALETTE(35, 16, 0x90) + TILES(0x109C6, 24) + HITBOX(0, -16, -28, 16, -2) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0458[1] = { + anim_0458__v0_l0, +}; + +const s32 anim_0459__v0_l0[] = { // 0x080EEBBC + TILES(0x109DE, 1) + PALETTE(35, 16, 0x90) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0459[1] = { + anim_0459__v0_l0, +}; + +const s32 anim_0460__v0_l0[] = { // 0x080EEBE4 + TILES(0x109DF, 4) + PALETTE(35, 16, 0x90) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0460[1] = { + anim_0460__v0_l0, +}; + +const s32 anim_0461__v0_l0[] = { // 0x080EEC0C + PALETTE(37, 16, 0x70) + TILES(0x109E3, 18) + HITBOX(0, -20, -11, 20, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0461__v1_l0[] = { // 0x080EEC3C + PALETTE(37, 16, 0x70) + TILES(0x109F5, 18) + HITBOX(0, -20, -11, 20, 4) + SHOW_FRAME(2, 1) + + TILES(0x10A07, 24) + SHOW_FRAME(3, 2) + + TILES(0x10A1F, 18) + SHOW_FRAME(2, 3) + + TILES(0x10A31, 24) + SHOW_FRAME(2, 4) + + TILES(0x10A49, 18) + SHOW_FRAME(2, 5) + + TILES(0x10A5B, 18) + SHOW_FRAME(2, 6) + + END() +}; + +const s32 * const anim_0461[2] = { + anim_0461__v0_l0, + anim_0461__v1_l0, +}; + +const s32 anim_0462__v0_l0[] = { // 0x080EECD8 + PALETTE(38, 16, 0xB0) + TILES(0x10A6D, 12) + HITBOX(0, -15, -5, 15, 11) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0462[1] = { + anim_0462__v0_l0, +}; + +const s32 anim_0463__v0_l0[] = { // 0x080EED0C + PALETTE(39, 16, 0xB0) + TILES(0x10A79, 18) + HITBOX(0, -24, -6, 24, -4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0463[1] = { + anim_0463__v0_l0, +}; + +const s32 anim_0464__v0_l0[] = { // 0x080EED40 + PALETTE(33, 16, 0x70) + TILES(0x10A8B, 18) + SHOW_FRAME(2, 0) + + TILES(0x10A9D, 18) + SHOW_FRAME(2, 1) + + TILES(0x10AAF, 18) + SHOW_FRAME(2, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0464[1] = { + anim_0464__v0_l0, +}; + +const s32 anim_0465__v0_l0[] = { // 0x080EED94 + PALETTE(39, 16, 0xB0) + TILES(0x10AC1, 1) + HITBOX(0, -12, -12, 12, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0465__v1_l0[] = { // 0x080EEDC4 + PALETTE(39, 16, 0xB0) + TILES(0x10AC2, 1) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0465__v2_l0[] = { // 0x080EEDE8 + PALETTE(39, 16, 0xB0) + TILES(0x10AC3, 1) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0465__v3_l0[] = { // 0x080EEE0C + PALETTE(39, 16, 0xB0) + TILES(0x10AC4, 1) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0465__v4_l0[] = { // 0x080EEE30 + PALETTE(39, 16, 0xB0) + TILES(0x10AC5, 1) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0465__v5_l0[] = { // 0x080EEE54 + PALETTE(39, 16, 0xB0) + TILES(0x10AC6, 1) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0465__v6_l0[] = { // 0x080EEE78 + PALETTE(39, 16, 0xB0) + TILES(0x10AC7, 1) + HITBOX(0, -12, -8, 12, 12) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0465__v7_l0[] = { // 0x080EEEA8 + PALETTE(39, 16, 0xB0) + TILES(0x10AC8, 1) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0465__v8_l0[] = { // 0x080EEECC + PALETTE(39, 16, 0xB0) + TILES(0x10AC9, 1) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0465[9] = { + anim_0465__v0_l0, + anim_0465__v1_l0, + anim_0465__v2_l0, + anim_0465__v3_l0, + anim_0465__v4_l0, + anim_0465__v5_l0, + anim_0465__v6_l0, + anim_0465__v7_l0, + anim_0465__v8_l0, +}; + +const s32 anim_0466__v0_l0[] = { // 0x080EEF14 + PALETTE(33, 16, 0x70) + TILES(0x10ACA, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0466[1] = { + anim_0466__v0_l0, +}; + +const s32 anim_0467__v0_l0[] = { // 0x080EEF3C + PALETTE(39, 16, 0xB0) + TILES(0x10ACE, 4) + SHOW_FRAME(6, 0) + + TILES(0x10AD2, 16) + SHOW_FRAME(6, 1) + + TILES(0x10AE2, 16) + SHOW_FRAME(6, 2) + + TILES(0x10AF2, 12) + SHOW_FRAME(7, 3) + + TILES(0x10AFE, 9) + SHOW_FRAME(8, 4) + + TILES(0x10B07, 9) + SHOW_FRAME(8, 5) + + TILES(0x10B10, 9) + SHOW_FRAME(12, 6) + + END() +}; + +const s32 * const anim_0467[1] = { + anim_0467__v0_l0, +}; + +const s32 anim_0468__v0_l0[] = { // 0x080EEFDC + PALETTE(33, 16, 0x70) + TILES(0x10B19, 8) + HITBOX(0, 10, 5, 23, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0468__v1_l0[] = { // 0x080EF00C + PALETTE(33, 16, 0x70) + TILES(0x10B19, 8) + SHOW_FRAME(3, 0) + + TILES(0x10B21, 8) + SHOW_FRAME(3, 1) + + TILES(0x10B29, 12) + SHOW_FRAME(3, 2) + + TILES(0x10B35, 8) + SHOW_FRAME(2, 3) + + TILES(0x10B21, 8) + SHOW_FRAME(2, 1) + + TILES(0x10B3D, 8) + SHOW_FRAME(4, 4) + + TILES(0x10B21, 8) + SHOW_FRAME(3, 1) + + TILES(0x10B3D, 8) + SHOW_FRAME(3, 4) + + TILES(0x10B19, 8) + SHOW_FRAME(6, 0) + + END() +}; + +const s32 * const anim_0468[2] = { + anim_0468__v0_l0, + anim_0468__v1_l0, +}; + +const s32 anim_0469__v0_l0[] = { // 0x080EF0D8 + PALETTE(33, 16, 0x70) + TILES(0x10B45, 12) + HITBOX(0, -10, -24, 10, 2) + SHOW_FRAME(6, 0) + + END() +}; + +const s32 anim_0469__v1_l0[] = { // 0x080EF108 + PALETTE(33, 16, 0x70) + TILES(0x10B51, 12) + SHOW_FRAME(2, 1) + + TILES(0x10B5D, 12) + SHOW_FRAME(2, 2) + + TILES(0x10B69, 12) + SHOW_FRAME(4, 3) + + TILES(0x10B75, 12) + SHOW_FRAME(1, 4) + + TILES(0x10B5D, 12) + SHOW_FRAME(4, 2) + + TILES(0x10B81, 12) + SHOW_FRAME(4, 5) + + TILES(0x10B5D, 12) + SHOW_FRAME(3, 2) + + TILES(0x10B81, 12) + SHOW_FRAME(3, 5) + + TILES(0x10B51, 12) + SHOW_FRAME(6, 1) + + END() +}; + +const s32 * const anim_0469[2] = { + anim_0469__v0_l0, + anim_0469__v1_l0, +}; + +const s32 anim_0470__v0_l0[] = { // 0x080EF1D4 + PALETTE(33, 16, 0x70) + TILES(0x10B8D, 12) + HITBOX(0, 10, 5, 23, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0470__v1_l0[] = { // 0x080EF204 + PALETTE(33, 16, 0x70) + TILES(0x10B8D, 12) + SHOW_FRAME(3, 0) + + TILES(0x10B99, 12) + SHOW_FRAME(3, 1) + + TILES(0x10BA5, 12) + SHOW_FRAME(3, 2) + + TILES(0x10BB1, 12) + SHOW_FRAME(2, 3) + + TILES(0x10B99, 12) + SHOW_FRAME(2, 1) + + TILES(0x10BBD, 12) + SHOW_FRAME(4, 4) + + TILES(0x10B99, 12) + SHOW_FRAME(3, 1) + + TILES(0x10BBD, 12) + SHOW_FRAME(3, 4) + + TILES(0x10B8D, 12) + SHOW_FRAME(6, 0) + + END() +}; + +const s32 * const anim_0470[2] = { + anim_0470__v0_l0, + anim_0470__v1_l0, +}; + +const s32 anim_0471__v0_l0[] = { // 0x080EF2D0 + PALETTE(40, 16, 0x70) + TILES(0x10BC9, 8) + HITBOX(0, -15, -6, 7, 0) + SHOW_FRAME(2, 0) + + TILES(0x10BD1, 8) + HITBOX(0, -15, -6, 7, 0) + SHOW_FRAME(2, 1) + + TILES(0x10BD9, 8) + HITBOX(0, -15, -6, 7, 0) + SHOW_FRAME(2, 2) + + JUMP_BACK(27) +}; + +const s32 anim_0471__v1_l0[] = { // 0x080EF344 + PALETTE(40, 16, 0x70) + TILES(0x10BE1, 12) + HITBOX(0, -15, -9, 6, 2) + SHOW_FRAME(2, 3) + + TILES(0x10BED, 12) + HITBOX(0, -15, -9, 6, 2) + SHOW_FRAME(2, 4) + + TILES(0x10BF9, 12) + HITBOX(0, -15, -9, 6, 2) + SHOW_FRAME(2, 5) + + JUMP_BACK(27) +}; + +const s32 anim_0471__v2_l0[] = { // 0x080EF3B8 + PALETTE(40, 16, 0x70) + TILES(0x10C05, 12) + HITBOX(0, -14, -6, 9, 1) + SHOW_FRAME(2, 6) + + TILES(0x10C11, 12) + HITBOX(0, -14, -6, 9, 1) + SHOW_FRAME(2, 7) + + TILES(0x10C1D, 12) + HITBOX(0, -14, -6, 9, 1) + SHOW_FRAME(2, 8) + + JUMP_BACK(27) +}; + +const s32 * const anim_0471[3] = { + anim_0471__v0_l0, + anim_0471__v1_l0, + anim_0471__v2_l0, +}; + +const s32 anim_0472__v0_l0[] = { // 0x080EF438 + PALETTE(40, 16, 0x70) + TILES(0x10C29, 8) + HITBOX(0, -12, -6, 0, 14) + SHOW_FRAME(2, 0) + + TILES(0x10C31, 8) + HITBOX(0, -16, -8, 0, 8) + SHOW_FRAME(2, 1) + + TILES(0x10C39, 8) + HITBOX(0, -16, -8, 0, 8) + SHOW_FRAME(2, 2) + + JUMP_BACK(27) +}; + +const s32 * const anim_0472[1] = { + anim_0472__v0_l0, +}; + +const s32 anim_0473__v0_l0[] = { // 0x080EF4B0 + PALETTE(33, 16, 0x70) + TILES(0x10C41, 49) + SHOW_FRAME(2, 0) + + TILES(0x10C72, 49) + SHOW_FRAME(2, 1) + + TILES(0x10CA3, 49) + SHOW_FRAME(2, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0473[1] = { + anim_0473__v0_l0, +}; + +const s32 anim_0474__v0_l0[] = { // 0x080EF504 + PALETTE(33, 16, 0x70) + TILES(0x10CD4, 12) + SHOW_FRAME(3, 0) + + TILES(0x10CE0, 18) + SHOW_FRAME(3, 1) + + TILES(0x10CF2, 12) + SHOW_FRAME(3, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0474[1] = { + anim_0474__v0_l0, +}; + +const s32 anim_0475__v0_l0[] = { // 0x080EF558 + PALETTE(41, 16, 0x70) + TILES(0x10CFE, 36) + HITBOX(0, 9, -39, 39, -9) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0475[1] = { + anim_0475__v0_l0, +}; + +const s32 anim_0476__v0_l0[] = { // 0x080EF58C + PALETTE(41, 16, 0x70) + TILES(0x10D22, 12) + HITBOX(0, -20, -4, 20, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0476[1] = { + anim_0476__v0_l0, +}; + +const s32 anim_0477__v0_l0[] = { // 0x080EF5C0 + PALETTE(41, 16, 0x70) + TILES(0x10D2E, 12) + HITBOX(0, -8, -18, 4, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0477[1] = { + anim_0477__v0_l0, +}; + +const s32 anim_0478__v0_l0[] = { // 0x080EF5F4 + PALETTE(42, 16, 0x70) + TILES(0x10D3A, 18) + HITBOX(0, -8, -8, 40, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0478__v1_l0[] = { // 0x080EF624 + PALETTE(42, 16, 0x70) + TILES(0x10D4C, 24) + SHOW_FRAME(5, 1) + + TILES(0x10D64, 18) + SHOW_FRAME(5, 2) + + END() +}; + +const s32 anim_0478__v2_l0[] = { // 0x080EF65C + PALETTE(42, 16, 0x70) + TILES(0x10D76, 18) + HITBOX(0, -8, -8, 9, 40) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0478__v3_l0[] = { // 0x080EF68C + PALETTE(42, 16, 0x70) + TILES(0x10D88, 30) + SHOW_FRAME(5, 4) + + TILES(0x10DA6, 18) + SHOW_FRAME(5, 5) + + END() +}; + +const s32 * const anim_0478[4] = { + anim_0478__v0_l0, + anim_0478__v1_l0, + anim_0478__v2_l0, + anim_0478__v3_l0, +}; + +const s32 anim_0479__v0_l0[] = { // 0x080EF6D4 + PALETTE(43, 16, 0x70) + TILES(0x10DB8, 18) + HITBOX(0, -6, -16, 6, 0) + SHOW_FRAME(9, 0) + + TILES(0x10DCA, 18) + SHOW_FRAME(9, 1) + + TILES(0x10DDC, 18) + SHOW_FRAME(9, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0479__v1_l0[] = { // 0x080EF730 + PALETTE(43, 16, 0x70) + TILES(0x10DEE, 18) + SHOW_FRAME(6, 3) + + TILES(0x10E00, 18) + SHOW_FRAME(3, 4) + + TILES(0x10E12, 12) + SHOW_FRAME(6, 5) + + TILES(0x10E1E, 12) + SHOW_FRAME(6, 6) + + TILES(0x10E2A, 12) + SHOW_FRAME(6, 7) + + TILES(0x10E36, 12) + SHOW_FRAME(6, 8) + + END() +}; + +const s32 * const anim_0479[2] = { + anim_0479__v0_l0, + anim_0479__v1_l0, +}; + +const s32 anim_0480__v0_l0[] = { // 0x080EF7C0 + PALETTE(43, 16, 0x70) + TILES(0x10E42, 18) + HITBOX(0, -6, -16, 6, 0) + SHOW_FRAME(9, 0) + + TILES(0x10E54, 18) + SHOW_FRAME(9, 1) + + TILES(0x10E66, 18) + SHOW_FRAME(9, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0480__v1_l0[] = { // 0x080EF81C + PALETTE(43, 16, 0x70) + TILES(0x10E78, 18) + SHOW_FRAME(6, 3) + + TILES(0x10E8A, 18) + SHOW_FRAME(3, 4) + + TILES(0x10E9C, 12) + SHOW_FRAME(6, 5) + + TILES(0x10EA8, 12) + SHOW_FRAME(6, 6) + + TILES(0x10EB4, 12) + SHOW_FRAME(6, 7) + + TILES(0x10EC0, 12) + SHOW_FRAME(6, 8) + + END() +}; + +const s32 * const anim_0480[2] = { + anim_0480__v0_l0, + anim_0480__v1_l0, +}; + +const s32 anim_0481__v0_l0[] = { // 0x080EF8AC + PALETTE(43, 16, 0x70) + TILES(0x10ECC, 18) + HITBOX(0, -6, -16, 6, 0) + SHOW_FRAME(9, 0) + + TILES(0x10EDE, 18) + SHOW_FRAME(9, 1) + + TILES(0x10EF0, 18) + SHOW_FRAME(9, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0481__v1_l0[] = { // 0x080EF908 + PALETTE(43, 16, 0x70) + TILES(0x10F02, 18) + SHOW_FRAME(6, 3) + + TILES(0x10F14, 18) + SHOW_FRAME(3, 4) + + TILES(0x10F26, 12) + SHOW_FRAME(6, 5) + + TILES(0x10F32, 12) + SHOW_FRAME(6, 6) + + TILES(0x10F3E, 12) + SHOW_FRAME(6, 7) + + TILES(0x10F4A, 12) + SHOW_FRAME(6, 8) + + END() +}; + +const s32 * const anim_0481[2] = { + anim_0481__v0_l0, + anim_0481__v1_l0, +}; + +const s32 anim_0482__v0_l0[] = { // 0x080EF998 + PALETTE(44, 16, 0x70) + TILES(0x10F56, 1) + SHOW_FRAME(5, 0) + + TILES(0x10F57, 4) + SHOW_FRAME(2, 1) + + TILES(0x10F5B, 4) + SHOW_FRAME(4, 2) + + TILES(0x10F5F, 9) + SHOW_FRAME(6, 3) + + TILES(0x10F68, 9) + SHOW_FRAME(7, 4) + + END() +}; + +const s32 * const anim_0482[1] = { + anim_0482__v0_l0, +}; + +const s32 anim_0483__v0_l0[] = { // 0x080EFA10 + PALETTE(45, 16, 0x70) + TILES(0x10F71, 1) + SHOW_FRAME(5, 0) + + TILES(0x10F72, 1) + SHOW_FRAME(2, 1) + + TILES(0x10F73, 4) + SHOW_FRAME(4, 2) + + TILES(0x10F77, 4) + SHOW_FRAME(6, 3) + + TILES(0x10F7B, 4) + SHOW_FRAME(7, 4) + + END() +}; + +const s32 * const anim_0483[1] = { + anim_0483__v0_l0, +}; + +const s32 anim_0484__v0_l0[] = { // 0x080EFA88 + PALETTE(41, 16, 0x70) + TILES(0x10F7F, 30) + HITBOX(0, -22, -14, 22, 15) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0484[1] = { + anim_0484__v0_l0, +}; + +const s32 anim_0485__v0_l0[] = { // 0x080EFABC + PALETTE(41, 16, 0x70) + TILES(0x10F9D, 16) + HITBOX(0, -11, -11, 11, 11) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0485[1] = { + anim_0485__v0_l0, +}; + +const s32 anim_0486__v0_l0[] = { // 0x080EFAF0 + PALETTE(33, 16, 0x70) + TILES(0x10FAD, 60) + HITBOX(0, -48, -20, 47, 18) + SHOW_FRAME(3, 0) + + TILES(0x10FE9, 60) + SHOW_FRAME(3, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0486[1] = { + anim_0486__v0_l0, +}; + +const s32 anim_0487__v0_l0[] = { // 0x080EFB3C + PALETTE(46, 16, 0x70) + TILES(0x11025, 60) + HITBOX(0, -49, 10, 49, 40) + SHOW_FRAME(6, 0) + + TILES(0x11061, 60) + SHOW_FRAME(6, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0487[1] = { + anim_0487__v0_l0, +}; + +const s32 anim_0488__v0_l0[] = { // 0x080EFB88 + PALETTE(47, 16, 0x70) + TILES(0x1109D, 16) + HITBOX(0, -18, -40, 18, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0488[1] = { + anim_0488__v0_l0, +}; + +const s32 anim_0489__v0_l0[] = { // 0x080EFBBC + PALETTE(47, 16, 0x70) + TILES(0x110AD, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0489[1] = { + anim_0489__v0_l0, +}; + +const s32 anim_0490__v0_l0[] = { // 0x080EFBE4 + PALETTE(47, 16, 0x70) + TILES(0x110AE, 9) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0490[1] = { + anim_0490__v0_l0, +}; + +const s32 anim_0491__v0_l0[] = { // 0x080EFC18 + PALETTE(47, 16, 0x70) + TILES(0x110B7, 30) + HITBOX(0, -36, 0, 36, 13) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0491[1] = { + anim_0491__v0_l0, +}; + +const s32 anim_0492__v0_l0[] = { // 0x080EFC4C + PALETTE(48, 16, 0x70) + TILES(0x110D5, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 0) + + TILES(0x110E5, 16) + SHOW_FRAME(20, 1) + + TILES(0x110D5, 16) + SHOW_FRAME(5, 0) + + TILES(0x110E5, 16) + SHOW_FRAME(12, 1) + + TILES(0x110D5, 16) + SHOW_FRAME(5, 0) + + TILES(0x110E5, 16) + SHOW_FRAME(8, 1) + + TILES(0x110D5, 16) + SHOW_FRAME(2, 0) + + TILES(0x110E5, 16) + SHOW_FRAME(30, 1) + + TILES(0x110F5, 16) + SHOW_FRAME(4, 2) + + TILES(0x11105, 16) + SHOW_FRAME(4, 3) + + TILES(0x11115, 16) + SHOW_FRAME(4, 4) + + TILES(0x110D5, 16) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 anim_0492__v1_l0[] = { // 0x080EFD58 + PALETTE(48, 16, 0x70) + TILES(0x110E5, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(6, 1) + + TILES(0x11115, 16) + SHOW_FRAME(2, 4) + + TILES(0x110D5, 16) + SHOW_FRAME(30, 0) + + TILES(0x110E5, 16) + SHOW_FRAME(6, 1) + + TILES(0x110D5, 16) + SHOW_FRAME(2, 0) + + TILES(0x110E5, 16) + SHOW_FRAME(6, 1) + + TILES(0x110D5, 16) + SHOW_FRAME(2, 0) + + TILES(0x11115, 16) + SHOW_FRAME(1, 4) + + TILES(0x11105, 16) + SHOW_FRAME(1, 3) + + TILES(0x110F5, 16) + SHOW_FRAME(1, 2) + + TILES(0x110E5, 16) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0492__v2_l0[] = { // 0x080EFE50 + PALETTE(48, 16, 0x70) + TILES(0x110D5, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0492__v3_l0[] = { // 0x080EFE74 + PALETTE(48, 16, 0x70) + TILES(0x110E5, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 1) + TILES(0x110F5, 16) + SHOW_FRAME(2, 2) + + JUMP_BACK(5) +}; + +const s32 anim_0492__v4_l0[] = { // 0x080EFEBC + PALETTE(48, 16, 0x70) + TILES(0x11125, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 5) + + TILES(0x11135, 16) + SHOW_FRAME(20, 6) + + TILES(0x11125, 16) + SHOW_FRAME(5, 5) + + TILES(0x11135, 16) + SHOW_FRAME(12, 6) + + TILES(0x11125, 16) + SHOW_FRAME(5, 5) + + TILES(0x11135, 16) + SHOW_FRAME(8, 6) + + TILES(0x11125, 16) + SHOW_FRAME(2, 5) + + TILES(0x11135, 16) + SHOW_FRAME(30, 6) + + TILES(0x11145, 16) + SHOW_FRAME(4, 7) + + TILES(0x11155, 16) + SHOW_FRAME(4, 8) + + TILES(0x11165, 16) + SHOW_FRAME(4, 9) + + TILES(0x11125, 16) + SHOW_FRAME(4, 5) + + END() +}; + +const s32 anim_0492__v5_l0[] = { // 0x080EFFC8 + PALETTE(48, 16, 0x70) + TILES(0x11135, 16) + SHOW_FRAME(6, 6) + + TILES(0x11165, 16) + SHOW_FRAME(2, 9) + + TILES(0x11125, 16) + SHOW_FRAME(30, 5) + + TILES(0x11135, 16) + SHOW_FRAME(6, 6) + + TILES(0x11125, 16) + SHOW_FRAME(2, 5) + + TILES(0x11135, 16) + SHOW_FRAME(6, 6) + + TILES(0x11125, 16) + SHOW_FRAME(2, 5) + + TILES(0x11165, 16) + SHOW_FRAME(1, 9) + + TILES(0x11155, 16) + SHOW_FRAME(1, 8) + + TILES(0x11145, 16) + SHOW_FRAME(1, 7) + + TILES(0x11135, 16) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0492__v6_l0[] = { // 0x080F00B4 + PALETTE(48, 16, 0x70) + TILES(0x11125, 16) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0492__v7_l0[] = { // 0x080F00D8 + TILES(0x11135, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 6) + TILES(0x11145, 16) + SHOW_FRAME(2, 7) + + JUMP_BACK(5) +}; + +const s32 anim_0492__v8_l0[] = { // 0x080F0114 + PALETTE(48, 16, 0x70) + TILES(0x11175, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 10) + + TILES(0x11185, 16) + SHOW_FRAME(20, 11) + + TILES(0x11175, 16) + SHOW_FRAME(5, 10) + + TILES(0x11185, 16) + SHOW_FRAME(12, 11) + + TILES(0x11175, 16) + SHOW_FRAME(5, 10) + + TILES(0x11185, 16) + SHOW_FRAME(8, 11) + + TILES(0x11175, 16) + SHOW_FRAME(2, 10) + + TILES(0x11185, 16) + SHOW_FRAME(30, 11) + + TILES(0x11195, 16) + SHOW_FRAME(4, 12) + + TILES(0x111A5, 16) + SHOW_FRAME(4, 13) + + TILES(0x111B5, 16) + SHOW_FRAME(4, 14) + + TILES(0x11175, 16) + SHOW_FRAME(4, 10) + + END() +}; + +const s32 anim_0492__v9_l0[] = { // 0x080F0220 + PALETTE(48, 16, 0x70) + TILES(0x11185, 16) + SHOW_FRAME(6, 11) + + TILES(0x111B5, 16) + SHOW_FRAME(2, 14) + + TILES(0x11175, 16) + SHOW_FRAME(30, 10) + + TILES(0x11185, 16) + SHOW_FRAME(6, 11) + + TILES(0x11175, 16) + SHOW_FRAME(2, 10) + + TILES(0x11185, 16) + SHOW_FRAME(6, 11) + + TILES(0x11175, 16) + SHOW_FRAME(2, 10) + + TILES(0x111B5, 16) + SHOW_FRAME(1, 14) + + TILES(0x111A5, 16) + SHOW_FRAME(1, 13) + + TILES(0x11195, 16) + SHOW_FRAME(1, 12) + + TILES(0x11185, 16) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0492__v10_l0[] = { // 0x080F030C + PALETTE(48, 16, 0x70) + TILES(0x11175, 16) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0492__v11_l0[] = { // 0x080F0330 + PALETTE(48, 16, 0x70) + TILES(0x11185, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 11) + TILES(0x11195, 16) + SHOW_FRAME(2, 12) + + JUMP_BACK(5) +}; + +const s32 anim_0492__v12_l0[] = { // 0x080F0378 + PALETTE(48, 16, 0x70) + TILES(0x111C5, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 15) + + TILES(0x111D5, 16) + SHOW_FRAME(20, 16) + + TILES(0x111C5, 16) + SHOW_FRAME(5, 15) + + TILES(0x111D5, 16) + SHOW_FRAME(12, 16) + + TILES(0x111C5, 16) + SHOW_FRAME(5, 15) + + TILES(0x111D5, 16) + SHOW_FRAME(8, 16) + + TILES(0x111C5, 16) + SHOW_FRAME(2, 15) + + TILES(0x111D5, 16) + SHOW_FRAME(30, 16) + + TILES(0x111E5, 16) + SHOW_FRAME(4, 17) + + TILES(0x111F5, 16) + SHOW_FRAME(4, 18) + + TILES(0x11205, 16) + SHOW_FRAME(4, 19) + + TILES(0x111C5, 16) + SHOW_FRAME(4, 15) + + END() +}; + +const s32 anim_0492__v13_l0[] = { // 0x080F0484 + PALETTE(48, 16, 0x70) + TILES(0x111D5, 16) + SHOW_FRAME(6, 16) + + TILES(0x11205, 16) + SHOW_FRAME(2, 19) + + TILES(0x111C5, 16) + SHOW_FRAME(30, 15) + + TILES(0x111D5, 16) + SHOW_FRAME(6, 16) + + TILES(0x111C5, 16) + SHOW_FRAME(2, 15) + + TILES(0x111D5, 16) + SHOW_FRAME(6, 16) + + TILES(0x111C5, 16) + SHOW_FRAME(2, 15) + + TILES(0x11205, 16) + SHOW_FRAME(1, 19) + + TILES(0x111F5, 16) + SHOW_FRAME(1, 18) + + TILES(0x111E5, 16) + SHOW_FRAME(1, 17) + + TILES(0x111D5, 16) + SHOW_FRAME(1, 16) + + END() +}; + +const s32 anim_0492__v14_l0[] = { // 0x080F0570 + PALETTE(48, 16, 0x70) + TILES(0x111C5, 16) + SHOW_FRAME(1, 15) + + END() +}; + +const s32 anim_0492__v15_l0[] = { // 0x080F0594 + PALETTE(48, 16, 0x70) + TILES(0x111D5, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 16) + TILES(0x111E5, 16) + SHOW_FRAME(2, 17) + + JUMP_BACK(5) +}; + +const s32 anim_0492__v16_l0[] = { // 0x080F05DC + PALETTE(48, 16, 0x70) + TILES(0x11215, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 20) + + TILES(0x11225, 16) + SHOW_FRAME(20, 21) + + TILES(0x11215, 16) + SHOW_FRAME(5, 20) + + TILES(0x11225, 16) + SHOW_FRAME(12, 21) + + TILES(0x11215, 16) + SHOW_FRAME(5, 20) + + TILES(0x11225, 16) + SHOW_FRAME(8, 21) + + TILES(0x11215, 16) + SHOW_FRAME(2, 20) + + TILES(0x11225, 16) + SHOW_FRAME(30, 21) + + TILES(0x11235, 16) + SHOW_FRAME(4, 22) + + TILES(0x11245, 16) + SHOW_FRAME(4, 23) + + TILES(0x11255, 16) + SHOW_FRAME(4, 24) + + TILES(0x11215, 16) + SHOW_FRAME(4, 20) + + END() +}; + +const s32 anim_0492__v17_l0[] = { // 0x080F06E8 + PALETTE(48, 16, 0x70) + TILES(0x11225, 16) + SHOW_FRAME(6, 21) + + TILES(0x11255, 16) + SHOW_FRAME(2, 24) + + TILES(0x11215, 16) + SHOW_FRAME(30, 20) + + TILES(0x11225, 16) + SHOW_FRAME(6, 21) + + TILES(0x11215, 16) + SHOW_FRAME(2, 20) + + TILES(0x11225, 16) + SHOW_FRAME(6, 21) + + TILES(0x11215, 16) + SHOW_FRAME(2, 20) + + TILES(0x11255, 16) + SHOW_FRAME(1, 24) + + TILES(0x11245, 16) + SHOW_FRAME(1, 23) + + TILES(0x11235, 16) + SHOW_FRAME(1, 22) + + TILES(0x11225, 16) + SHOW_FRAME(1, 21) + + END() +}; + +const s32 anim_0492__v18_l0[] = { // 0x080F07D4 + PALETTE(48, 16, 0x70) + TILES(0x11215, 16) + SHOW_FRAME(1, 20) + + END() +}; + +const s32 anim_0492__v19_l0[] = { // 0x080F07F8 + PALETTE(48, 16, 0x70) + TILES(0x11225, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 21) + TILES(0x11235, 16) + SHOW_FRAME(2, 22) + + JUMP_BACK(5) +}; + +const s32 anim_0492__v20_l0[] = { // 0x080F0840 + PALETTE(48, 16, 0x70) + TILES(0x11265, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 25) + + TILES(0x11275, 16) + SHOW_FRAME(20, 26) + + TILES(0x11265, 16) + SHOW_FRAME(5, 25) + + TILES(0x11275, 16) + SHOW_FRAME(12, 26) + + TILES(0x11265, 16) + SHOW_FRAME(5, 25) + + TILES(0x11275, 16) + SHOW_FRAME(8, 26) + + TILES(0x11265, 16) + SHOW_FRAME(2, 25) + + TILES(0x11275, 16) + SHOW_FRAME(30, 26) + + TILES(0x11285, 16) + SHOW_FRAME(4, 27) + + TILES(0x11295, 16) + SHOW_FRAME(4, 28) + + TILES(0x112A5, 16) + SHOW_FRAME(4, 29) + + TILES(0x11265, 16) + SHOW_FRAME(4, 25) + + END() +}; + +const s32 anim_0492__v21_l0[] = { // 0x080F094C + PALETTE(48, 16, 0x70) + TILES(0x11275, 16) + SHOW_FRAME(6, 26) + + TILES(0x112A5, 16) + SHOW_FRAME(2, 29) + + TILES(0x11265, 16) + SHOW_FRAME(30, 25) + + TILES(0x11275, 16) + SHOW_FRAME(6, 26) + + TILES(0x11265, 16) + SHOW_FRAME(2, 25) + + TILES(0x11275, 16) + SHOW_FRAME(6, 26) + + TILES(0x11265, 16) + SHOW_FRAME(2, 25) + + TILES(0x112A5, 16) + SHOW_FRAME(1, 29) + + TILES(0x11295, 16) + SHOW_FRAME(1, 28) + + TILES(0x11285, 16) + SHOW_FRAME(1, 27) + + TILES(0x11275, 16) + SHOW_FRAME(1, 26) + + END() +}; + +const s32 anim_0492__v22_l0[] = { // 0x080F0A38 + PALETTE(48, 16, 0x70) + TILES(0x11265, 16) + SHOW_FRAME(1, 25) + + END() +}; + +const s32 anim_0492__v23_l0[] = { // 0x080F0A5C + PALETTE(48, 16, 0x70) + TILES(0x11275, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 26) + TILES(0x11285, 16) + SHOW_FRAME(2, 27) + + JUMP_BACK(5) +}; + +const s32 anim_0492__v24_l0[] = { // 0x080F0AA4 + PALETTE(48, 16, 0x70) + TILES(0x112B5, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 30) + + TILES(0x112C5, 16) + SHOW_FRAME(20, 31) + + TILES(0x112B5, 16) + SHOW_FRAME(5, 30) + + TILES(0x112C5, 16) + SHOW_FRAME(12, 31) + + TILES(0x112B5, 16) + SHOW_FRAME(5, 30) + + TILES(0x112C5, 16) + SHOW_FRAME(8, 31) + + TILES(0x112B5, 16) + SHOW_FRAME(2, 30) + + TILES(0x112C5, 16) + SHOW_FRAME(30, 31) + + TILES(0x112D5, 16) + SHOW_FRAME(4, 32) + + TILES(0x112E5, 16) + SHOW_FRAME(4, 33) + + TILES(0x112F5, 16) + SHOW_FRAME(4, 34) + + TILES(0x112B5, 16) + SHOW_FRAME(4, 30) + + END() +}; + +const s32 anim_0492__v25_l0[] = { // 0x080F0BB0 + PALETTE(48, 16, 0x70) + TILES(0x112C5, 16) + SHOW_FRAME(6, 31) + + TILES(0x112F5, 16) + SHOW_FRAME(2, 34) + + TILES(0x112B5, 16) + SHOW_FRAME(30, 30) + + TILES(0x112C5, 16) + SHOW_FRAME(6, 31) + + TILES(0x112B5, 16) + SHOW_FRAME(2, 30) + + TILES(0x112C5, 16) + SHOW_FRAME(6, 31) + + TILES(0x112B5, 16) + SHOW_FRAME(2, 30) + + TILES(0x112F5, 16) + SHOW_FRAME(1, 34) + + TILES(0x112E5, 16) + SHOW_FRAME(1, 33) + + TILES(0x112D5, 16) + SHOW_FRAME(1, 32) + + TILES(0x112C5, 16) + SHOW_FRAME(1, 31) + + END() +}; + +const s32 anim_0492__v26_l0[] = { // 0x080F0C9C + PALETTE(48, 16, 0x70) + TILES(0x112B5, 16) + SHOW_FRAME(1, 30) + + END() +}; + +const s32 anim_0492__v27_l0[] = { // 0x080F0CC0 + PALETTE(48, 16, 0x70) + TILES(0x112C5, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 31) + TILES(0x112D5, 16) + SHOW_FRAME(2, 32) + + JUMP_BACK(5) +}; + +const s32 anim_0492__v28_l0[] = { // 0x080F0D08 + PALETTE(48, 16, 0x70) + TILES(0x11305, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(5, 35) + + TILES(0x11315, 16) + SHOW_FRAME(20, 36) + + TILES(0x11305, 16) + SHOW_FRAME(5, 35) + + TILES(0x11315, 16) + SHOW_FRAME(12, 36) + + TILES(0x11305, 16) + SHOW_FRAME(5, 35) + + TILES(0x11315, 16) + SHOW_FRAME(8, 36) + + TILES(0x11305, 16) + SHOW_FRAME(2, 35) + + TILES(0x11315, 16) + SHOW_FRAME(30, 36) + + TILES(0x11325, 16) + SHOW_FRAME(4, 37) + + TILES(0x11335, 16) + SHOW_FRAME(4, 38) + + TILES(0x11345, 16) + SHOW_FRAME(4, 39) + + TILES(0x11305, 16) + SHOW_FRAME(4, 35) + + END() +}; + +const s32 anim_0492__v29_l0[] = { // 0x080F0E14 + PALETTE(48, 16, 0x70) + TILES(0x11315, 16) + SHOW_FRAME(6, 36) + + TILES(0x11345, 16) + SHOW_FRAME(2, 39) + + TILES(0x11305, 16) + SHOW_FRAME(30, 35) + + TILES(0x11315, 16) + SHOW_FRAME(6, 36) + + TILES(0x11305, 16) + SHOW_FRAME(2, 35) + + TILES(0x11315, 16) + SHOW_FRAME(6, 36) + + TILES(0x11305, 16) + SHOW_FRAME(2, 35) + + TILES(0x11345, 16) + SHOW_FRAME(1, 39) + + TILES(0x11335, 16) + SHOW_FRAME(1, 38) + + TILES(0x11325, 16) + SHOW_FRAME(1, 37) + + TILES(0x11315, 16) + SHOW_FRAME(1, 36) + + END() +}; + +const s32 anim_0492__v30_l0[] = { // 0x080F0F00 + PALETTE(48, 16, 0x70) + TILES(0x11305, 16) + SHOW_FRAME(1, 35) + + END() +}; + +const s32 anim_0492__v31_l0[] = { // 0x080F0F24 + PALETTE(48, 16, 0x70) + TILES(0x11315, 16) + HITBOX(0, -12, -11, 13, 12) + SHOW_FRAME(2, 36) + TILES(0x11325, 16) + SHOW_FRAME(2, 37) + + JUMP_BACK(5) +}; + +const s32 * const anim_0492[32] = { + anim_0492__v0_l0, + anim_0492__v1_l0, + anim_0492__v2_l0, + anim_0492__v3_l0, + anim_0492__v4_l0, + anim_0492__v5_l0, + anim_0492__v6_l0, + anim_0492__v7_l0, + anim_0492__v8_l0, + anim_0492__v9_l0, + anim_0492__v10_l0, + anim_0492__v11_l0, + anim_0492__v12_l0, + anim_0492__v13_l0, + anim_0492__v14_l0, + anim_0492__v15_l0, + anim_0492__v16_l0, + anim_0492__v17_l0, + anim_0492__v18_l0, + anim_0492__v19_l0, + anim_0492__v20_l0, + anim_0492__v21_l0, + anim_0492__v22_l0, + anim_0492__v23_l0, + anim_0492__v24_l0, + anim_0492__v25_l0, + anim_0492__v26_l0, + anim_0492__v27_l0, + anim_0492__v28_l0, + anim_0492__v29_l0, + anim_0492__v30_l0, + anim_0492__v31_l0, +}; + +const s32 anim_0493__v0_l0[] = { // 0x080F0FEC + PALETTE(47, 16, 0x70) + TILES(0x11355, 20) + HITBOX(0, -16, -18, 16, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0493[1] = { + anim_0493__v0_l0, +}; + +const s32 anim_0494__v0_l0[] = { // 0x080F1020 + PALETTE(47, 16, 0x70) + TILES(0x11369, 36) + HITBOX(0, -24, -23, 24, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0494[1] = { + anim_0494__v0_l0, +}; + +const s32 anim_0495__v0_l0[] = { // 0x080F1054 + PALETTE(47, 16, 0x70) + TILES(0x1138D, 18) + HITBOX(0, -24, -10, 24, -4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0495[1] = { + anim_0495__v0_l0, +}; + +const s32 anim_0496__v0_l0[] = { // 0x080F1088 + PALETTE(41, 16, 0x70) + TILES(0x1139F, 8) + HITBOX(0, -16, 0, 7, 32) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0496__v1_l0[] = { // 0x080F10B8 + PALETTE(41, 16, 0x70) + TILES(0x113A7, 8) + HITBOX(0, -16, 0, 7, 32) + SHOW_FRAME(1, 1) + + TILES(0x113AF, 8) + SHOW_FRAME(1, 2) + + TILES(0x113B7, 8) + SHOW_FRAME(1, 3) + + TILES(0x113BF, 8) + SHOW_FRAME(1, 4) + + TILES(0x113C7, 8) + SHOW_FRAME(1, 5) + + TILES(0x1139F, 8) + SHOW_FRAME(1, 0) + + TILES(0x113A7, 8) + SHOW_FRAME(1, 1) + + TILES(0x113AF, 8) + SHOW_FRAME(1, 2) + + TILES(0x113B7, 8) + SHOW_FRAME(1, 3) + + TILES(0x113BF, 8) + SHOW_FRAME(2, 4) + + TILES(0x113C7, 8) + SHOW_FRAME(2, 5) + + TILES(0x1139F, 8) + SHOW_FRAME(2, 0) + + TILES(0x113A7, 8) + SHOW_FRAME(2, 1) + + TILES(0x113AF, 8) + SHOW_FRAME(2, 2) + + TILES(0x113B7, 8) + SHOW_FRAME(2, 3) + + TILES(0x113BF, 8) + SHOW_FRAME(3, 4) + + TILES(0x113C7, 8) + SHOW_FRAME(3, 5) + + TILES(0x1139F, 8) + SHOW_FRAME(3, 0) + + TILES(0x113A7, 8) + SHOW_FRAME(3, 1) + + TILES(0x113AF, 8) + SHOW_FRAME(3, 2) + + TILES(0x113B7, 8) + SHOW_FRAME(4, 3) + + TILES(0x113BF, 8) + SHOW_FRAME(4, 4) + + TILES(0x113C7, 8) + SHOW_FRAME(4, 5) + + TILES(0x1139F, 8) + SHOW_FRAME(4, 0) + + TILES(0x113A7, 8) + SHOW_FRAME(5, 1) + + TILES(0x113AF, 8) + SHOW_FRAME(5, 2) + + TILES(0x113B7, 8) + SHOW_FRAME(5, 3) + + TILES(0x113BF, 8) + SHOW_FRAME(6, 4) + + TILES(0x113C7, 8) + SHOW_FRAME(6, 5) + + TILES(0x1139F, 8) + SHOW_FRAME(7, 0) + + TILES(0x113A7, 8) + SHOW_FRAME(8, 1) + + TILES(0x113AF, 8) + SHOW_FRAME(9, 2) + + TILES(0x113B7, 8) + SHOW_FRAME(10, 3) + + TILES(0x113BF, 8) + SHOW_FRAME(11, 4) + + TILES(0x113C7, 8) + SHOW_FRAME(12, 5) + + JUMP_BACK(181) +}; + +const s32 * const anim_0496[2] = { + anim_0496__v0_l0, + anim_0496__v1_l0, +}; + +const s32 anim_0497__v0_l0[] = { // 0x080F139C + PALETTE(41, 16, 0x70) + TILES(0x113CF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 0) + + TILES(0x113D7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 1) + + TILES(0x113DF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 2) + + TILES(0x113E7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 3) + + TILES(0x113EF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 4) + + TILES(0x113F7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 5) + + TILES(0x113CF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 0) + + TILES(0x113D7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 1) + + TILES(0x113DF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 2) + + TILES(0x113E7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(2, 3) + + TILES(0x113EF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(2, 4) + + TILES(0x113F7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(2, 5) + + TILES(0x113CF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(2, 0) + + TILES(0x113D7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(2, 1) + + TILES(0x113DF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(2, 2) + + TILES(0x113E7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(3, 3) + + TILES(0x113EF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(3, 4) + + TILES(0x113F7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(3, 5) + + TILES(0x113CF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(3, 0) + + TILES(0x113D7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(3, 1) + + TILES(0x113DF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(4, 2) + + TILES(0x113E7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(4, 3) + + TILES(0x113EF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(4, 4) + + TILES(0x113F7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(4, 5) + + TILES(0x113CF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(5, 0) + + TILES(0x113D7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(5, 1) + + TILES(0x113DF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(5, 2) + + TILES(0x113E7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(6, 3) + + TILES(0x113EF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(6, 4) + + TILES(0x113F7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(7, 5) + + TILES(0x113CF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(8, 0) + + TILES(0x113D7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(9, 1) + + TILES(0x113DF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(10, 2) + + TILES(0x113E7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(11, 3) + + TILES(0x113EF, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(12, 4) + + JUMP_BACK(283) +}; + +const s32 anim_0497__v1_l0[] = { // 0x080F1810 + PALETTE(41, 16, 0x70) + TILES(0x113F7, 8) + HITBOX(0, 4, -6, 28, 6) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 * const anim_0497[2] = { + anim_0497__v0_l0, + anim_0497__v1_l0, +}; + +const s32 anim_0498__v0_l0[] = { // 0x080F1848 + PALETTE(49, 16, 0xB0) + TILES(0x113FF, 30) + HITBOX(0, -10, 24, 10, 44) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0498__v1_l0[] = { // 0x080F1878 + PALETTE(49, 16, 0xB0) + TILES(0x1141D, 30) + SHOW_FRAME(2, 1) + + TILES(0x1143B, 30) + SHOW_FRAME(2, 2) + + END() +}; + +const s32 anim_0498__v2_l0[] = { // 0x080F18B0 + PALETTE(49, 16, 0xB0) + TILES(0x1141D, 30) + SHOW_FRAME(2, 1) + + TILES(0x113FF, 30) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0498__v3_l0[] = { // 0x080F18E8 + PALETTE(49, 16, 0xB0) + TILES(0x11459, 3) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0498[4] = { + anim_0498__v0_l0, + anim_0498__v1_l0, + anim_0498__v2_l0, + anim_0498__v3_l0, +}; + +const s32 anim_0499__v0_l0[] = { // 0x080F191C + PALETTE(50, 16, 0xB0) + TILES(0x1145C, 12) + HITBOX(0, -15, -8, 15, 9) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0499[1] = { + anim_0499__v0_l0, +}; + +const s32 anim_0501__v0_l0[] = { // 0x080F1950 + PALETTE(51, 16, 0xB0) + TILES(0x11468, 12) + HITBOX(0, -11, -8, 11, 0) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0501__v1_l0[] = { // 0x080F1980 + PALETTE(51, 16, 0xB0) + TILES(0x11474, 8) + HITBOX(0, -11, -8, 11, 0) + SHOW_FRAME(6, 1) + + TILES(0x1147C, 16) + HITBOX(0, -11, -8, 11, 0) + SHOW_FRAME(6, 2) + + TILES(0x1148C, 16) + HITBOX(0, -11, -8, 11, 0) + SHOW_FRAME(6, 3) + + TILES(0x1149C, 16) + HITBOX(0, -11, -8, 11, 0) + SHOW_FRAME(6, 4) + + TILES(0x114AC, 16) + HITBOX(0, -11, -8, 11, 0) + SHOW_FRAME(6, 5) + + END() +}; + +const s32 anim_0501__v2_l0[] = { // 0x080F1A30 + PALETTE(51, 16, 0xB0) + TILES(0x114BC, 8) + HITBOX(0, -10, -21, 10, -7) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 * const anim_0501[3] = { + anim_0501__v0_l0, + anim_0501__v1_l0, + anim_0501__v2_l0, +}; + +const s32 anim_0502__v0_l0[] = { // 0x080F1A6C + PALETTE(49, 16, 0xB0) + TILES(0x114C4, 32) + HITBOX(0, 0, 4, 64, 23) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0502[1] = { + anim_0502__v0_l0, +}; + +const s32 anim_0503__v0_l0[] = { // 0x080F1AA0 + PALETTE(52, 16, 0xB0) + TILES(0x114E4, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0503__v1_l0[] = { // 0x080F1AC4 + PALETTE(52, 16, 0xB0) + TILES(0x114E5, 1) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0503__v2_l0[] = { // 0x080F1AE8 + PALETTE(52, 16, 0xB0) + TILES(0x114E6, 1) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0503[3] = { + anim_0503__v0_l0, + anim_0503__v1_l0, + anim_0503__v2_l0, +}; + +const s32 anim_0504__v0_l0[] = { // 0x080F1B18 + PALETTE(52, 16, 0xB0) + TILES(0x114E7, 6) + HITBOX(0, -7, 12, 7, 42) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0504__v1_l0[] = { // 0x080F1B48 + PALETTE(52, 16, 0xB0) + TILES(0x114ED, 16) + HITBOX(0, -112, 123, -112, 123) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0504[2] = { + anim_0504__v0_l0, + anim_0504__v1_l0, +}; + +const s32 anim_0505__v0_l0[] = { // 0x080F1B80 + PALETTE(52, 16, 0xB0) + TILES(0x114FD, 18) + HITBOX(0, -23, -14, 23, 2) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0505__v1_l0[] = { // 0x080F1BB0 + PALETTE(52, 16, 0xB0) + TILES(0x1150F, 12) + SHOW_FRAME(4, 1) + + TILES(0x1151B, 30) + SHOW_FRAME(2, 2) + + TILES(0x11539, 12) + SHOW_FRAME(1, 3) + + TILES(0x11545, 24) + SHOW_FRAME(5, 4) + + TILES(0x1155D, 12) + SHOW_FRAME(3, 5) + + TILES(0x11569, 18) + SHOW_FRAME(3, 6) + + END() +}; + +const s32 * const anim_0505[2] = { + anim_0505__v0_l0, + anim_0505__v1_l0, +}; + +const s32 anim_0506__v0_l0[] = { // 0x080F1C40 + PALETTE(53, 16, 0x70) + TILES(0x1157B, 18) + HITBOX(0, -24, -5, 24, -3) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0506[1] = { + anim_0506__v0_l0, +}; + +const s32 anim_0507__v0_l0[] = { // 0x080F1C74 + PALETTE(49, 16, 0xB0) + TILES(0x1158D, 12) + HITBOX(0, -14, -5, 14, 14) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0507[1] = { + anim_0507__v0_l0, +}; + +const s32 anim_0508__v0_l0[] = { // 0x080F1CA8 + PALETTE(49, 16, 0xB0) + TILES(0x11599, 36) + HITBOX(0, -44, -5, 44, 8) + SHOW_FRAME(10, 0) + + TILES(0x115BD, 36) + SHOW_FRAME(10, 1) + + TILES(0x115E1, 36) + SHOW_FRAME(10, 2) + + TILES(0x11605, 36) + SHOW_FRAME(10, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0508__v1_l0[] = { // 0x080F1D18 + PALETTE(49, 16, 0xB0) + TILES(0x11605, 36) + HITBOX(0, -44, -3, 44, 8) + SHOW_FRAME(10, 3) + + TILES(0x115E1, 36) + SHOW_FRAME(10, 2) + + TILES(0x115BD, 36) + SHOW_FRAME(10, 1) + + TILES(0x11599, 36) + SHOW_FRAME(10, 0) + + JUMP_BACK(26) +}; + +const s32 * const anim_0508[2] = { + anim_0508__v0_l0, + anim_0508__v1_l0, +}; + +const s32 anim_0509__v0_l0[] = { // 0x080F1D90 + PALETTE(49, 16, 0xB0) + TILES(0x11629, 27) + HITBOX(0, -32, -7, 32, 6) + SHOW_FRAME(10, 0) + + TILES(0x11644, 27) + SHOW_FRAME(10, 1) + + TILES(0x1165F, 27) + SHOW_FRAME(10, 2) + + TILES(0x1167A, 27) + SHOW_FRAME(10, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0509__v1_l0[] = { // 0x080F1E00 + PALETTE(49, 16, 0xB0) + TILES(0x1167A, 27) + HITBOX(0, -32, -7, 32, 6) + SHOW_FRAME(10, 3) + + TILES(0x1165F, 27) + SHOW_FRAME(10, 2) + + TILES(0x11644, 27) + SHOW_FRAME(10, 1) + + TILES(0x11629, 27) + SHOW_FRAME(10, 0) + + JUMP_BACK(26) +}; + +const s32 * const anim_0509[2] = { + anim_0509__v0_l0, + anim_0509__v1_l0, +}; + +const s32 anim_0510__v0_l0[] = { // 0x080F1E78 + PALETTE(54, 16, 0xB0) + TILES(0x11695, 36) + HITBOX(0, -14, -14, 14, 14) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0510[1] = { + anim_0510__v0_l0, +}; + +const s32 anim_0511__v0_l0[] = { // 0x080F1EAC + PALETTE(55, 16, 0xB0) + TILES(0x116B9, 4) + HITBOX(0, -8, -3, 8, 8) + SHOW_FRAME(7, 0) + + TILES(0x116BD, 4) + SHOW_FRAME(7, 1) + + TILES(0x116C1, 4) + SHOW_FRAME(7, 2) + + JUMP_BACK(21) +}; + +const s32 * const anim_0511[1] = { + anim_0511__v0_l0, +}; + +const s32 anim_0512__v0_l0[] = { // 0x080F1F0C + PALETTE(56, 16, 0xB0) + TILES(0x116C5, 8) + SHOW_FRAME(7, 0) + + TILES(0x116CD, 8) + SHOW_FRAME(7, 1) + + TILES(0x116D5, 8) + SHOW_FRAME(7, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0512[1] = { + anim_0512__v0_l0, +}; + +const s32 anim_0513__v0_l0[] = { // 0x080F1F60 + PALETTE(49, 16, 0xB0) + TILES(0x116DD, 32) + HITBOX(0, 0, 3, 64, 32) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0513[1] = { + anim_0513__v0_l0, +}; + +const s32 anim_0514__v0_l0[] = { // 0x080F1F94 + PALETTE(41, 16, 0x70) + TILES(0x116FD, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0514__v1_l0[] = { // 0x080F1FB8 + PALETTE(41, 16, 0x70) + TILES(0x1170D, 25) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0514[2] = { + anim_0514__v0_l0, + anim_0514__v1_l0, +}; + +const s32 anim_0515__v0_l0[] = { // 0x080F1FE4 + PALETTE(57, 16, 0xB0) + TILES(0x11726, 54) + HITBOX(0, -72, -11, 72, 10) + SHOW_FRAME(4, 0) + + TILES(0x1175C, 54) + SHOW_FRAME(4, 1) + + TILES(0x11792, 42) + SHOW_FRAME(4, 2) + + TILES(0x117BC, 54) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0515[1] = { + anim_0515__v0_l0, +}; + +const s32 anim_0516__v0_l0[] = { // 0x080F2058 + PALETTE(35, 16, 0x90) + TILES(0x117F2, 30) + HITBOX(0, -24, -16, 24, 16) + HITBOX(1, -20, -22, 20, -14) + SHOW_FRAME(16, 0) + + END() +}; + +const s32 anim_0516__v1_l0[] = { // 0x080F2094 + PALETTE(35, 16, 0x90) + TILES(0x11810, 30) + HITBOX(0, -24, -14, 24, 16) + SHOW_FRAME(16, 1) + + TILES(0x1182E, 24) + SHOW_FRAME(16, 2) + + TILES(0x11846, 30) + SHOW_FRAME(16, 3) + + END() +}; + +const s32 anim_0516__v2_l0[] = { // 0x080F20EC + PALETTE(35, 16, 0x90) + TILES(0x11864, 30) + HITBOX(0, -24, -14, 24, 15) + HITBOX(1, -21, 15, 21, 21) + SHOW_FRAME(16, 4) + + JUMP_BACK(14) +}; + +const s32 anim_0516__v3_l0[] = { // 0x080F212C + PALETTE(35, 16, 0x90) + TILES(0x11882, 30) + HITBOX(0, -24, -14, 24, 16) + SHOW_FRAME(16, 5) + + TILES(0x118A0, 24) + SHOW_FRAME(16, 6) + + TILES(0x118B8, 30) + SHOW_FRAME(16, 7) + + END() +}; + +const s32 * const anim_0516[4] = { + anim_0516__v0_l0, + anim_0516__v1_l0, + anim_0516__v2_l0, + anim_0516__v3_l0, +}; + +const s32 anim_0517__v0_l0[] = { // 0x080F2194 + PALETTE(49, 16, 0xB0) + TILES(0x118D6, 18) + HITBOX(0, -24, -8, 24, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0517[1] = { + anim_0517__v0_l0, +}; + +const s32 anim_0518__v0_l0[] = { // 0x080F21C8 + PALETTE(49, 16, 0xB0) + TILES(0x118E8, 36) + HITBOX(0, -24, -20, 24, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0518[1] = { + anim_0518__v0_l0, +}; + +const s32 anim_0519__v0_l0[] = { // 0x080F21FC + PALETTE(49, 16, 0xB0) + TILES(0x1190C, 40) + HITBOX(0, -39, -14, 39, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0519[1] = { + anim_0519__v0_l0, +}; + +const s32 anim_0520__v0_l0[] = { // 0x080F2230 + PALETTE(50, 16, 0xB0) + TILES(0x11934, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0520[1] = { + anim_0520__v0_l0, +}; + +const s32 anim_0521__v0_l0[] = { // 0x080F2258 + PALETTE(58, 16, 0x70) + TILES(0x1193C, 20) + HITBOX(0, -15, -9, 15, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0521[1] = { + anim_0521__v0_l0, +}; + +const s32 anim_0522__v0_l0[] = { // 0x080F228C + PALETTE(59, 16, 0x70) + TILES(0x11950, 16) + HITBOX(0, 0, -11, 16, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0522__v1_l0[] = { // 0x080F22BC + PALETTE(59, 16, 0x70) + TILES(0x11960, 8) + SHOW_FRAME(3, 1) + + TILES(0x11968, 16) + SHOW_FRAME(3, 2) + + TILES(0x11978, 12) + SHOW_FRAME(4, 3) + + TILES(0x11968, 16) + SHOW_FRAME(4, 2) + + TILES(0x11978, 12) + SHOW_FRAME(5, 3) + + TILES(0x11968, 16) + SHOW_FRAME(5, 2) + + END() +}; + +const s32 * const anim_0522[2] = { + anim_0522__v0_l0, + anim_0522__v1_l0, +}; + +const s32 anim_0523__v0_l0[] = { // 0x080F234C + PALETTE(60, 16, 0xB0) + TILES(0x11984, 18) + HITBOX(0, -24, -9, 24, -7) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0523[1] = { + anim_0523__v0_l0, +}; + +const s32 anim_0524__v0_l0[] = { // 0x080F2380 + PALETTE(60, 16, 0xB0) + TILES(0x11996, 36) + HITBOX(0, -24, -23, 24, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0524[1] = { + anim_0524__v0_l0, +}; + +const s32 anim_0525__v0_l0[] = { // 0x080F23B4 + PALETTE(60, 16, 0xB0) + TILES(0x119BA, 18) + HITBOX(0, -22, -18, 23, -12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0525[1] = { + anim_0525__v0_l0, +}; + +const s32 anim_0526__v0_l0[] = { // 0x080F23E8 + PALETTE(61, 16, 0x70) + TILES(0x119CC, 24) + HITBOX(0, -13, -15, 13, 28) + SHOW_FRAME(1, 0) + + TILES(0x119E4, 28) + HITBOX(0, -13, -28, 13, 28) + SHOW_FRAME(2, 1) + + TILES(0x11A00, 28) + HITBOX(0, -13, -24, 13, 28) + SHOW_FRAME(1, 2) + + TILES(0x11A1C, 28) + HITBOX(0, -13, -27, 13, 28) + SHOW_FRAME(5, 3) + + TILES(0x11A00, 28) + HITBOX(0, -13, -24, 13, 28) + SHOW_FRAME(3, 2) + + END() +}; + +const s32 anim_0526__v1_l0[] = { // 0x080F2498 + PALETTE(62, 16, 0x70) + TILES(0x11A38, 24) + HITBOX(0, -13, -13, 13, 28) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0526[2] = { + anim_0526__v0_l0, + anim_0526__v1_l0, +}; + +const s32 anim_0527__v0_l0[] = { // 0x080F24D0 + PALETTE(63, 16, 0xB0) + TILES(0x11A50, 32) + HITBOX(0, 0, 4, 64, 23) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0527[1] = { + anim_0527__v0_l0, +}; + +const s32 anim_0528__v0_l0[] = { // 0x080F2504 + PALETTE(60, 16, 0xB0) + TILES(0x11A70, 30) + HITBOX(0, -19, -18, 19, -5) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0528[1] = { + anim_0528__v0_l0, +}; + +const s32 anim_0529__v0_l0[] = { // 0x080F2538 + PALETTE(60, 16, 0xB0) + TILES(0x11A8E, 24) + HITBOX(0, -24, -30, 24, 0) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0529[1] = { + anim_0529__v0_l0, +}; + +const s32 anim_0530__v0_l0[] = { // 0x080F256C + PALETTE(62, 16, 0x70) + TILES(0x11AA6, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0530[1] = { + anim_0530__v0_l0, +}; + +const s32 anim_0531__v0_l0[] = { // 0x080F2594 + PALETTE(64, 16, 0x70) + TILES(0x11AAA, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0531[1] = { + anim_0531__v0_l0, +}; + +const s32 anim_0532__v0_l0[] = { // 0x080F25BC + PALETTE(1, 16, 0x50) + TILES(0x11AAE, 1) + HITBOX(0, -9, 5, 9, 7) + SHOW_FRAME(20, 0) + + TILES(0x11AAF, 9) + SHOW_FRAME(20, 1) + + TILES(0x11AB8, 9) + SHOW_FRAME(20, 2) + + TILES(0x11AC1, 9) + SHOW_FRAME(20, 3) + TILES(0x11ACA, 9) + SHOW_FRAME(12, 4) + + TILES(0x11AD3, 9) + SHOW_FRAME(12, 5) + + TILES(0x11ADC, 9) + SHOW_FRAME(12, 6) + + JUMP_BACK(15) +}; + +const s32 * const anim_0532[1] = { + anim_0532__v0_l0, +}; + +const s32 anim_0533__v0_l0[] = { // 0x080F266C + PALETTE(1, 16, 0x50) + TILES(0x11AE5, 4) + SHOW_FRAME(12, 0) + + TILES(0x11AE9, 4) + SHOW_FRAME(12, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0533[1] = { + anim_0533__v0_l0, +}; + +const s32 anim_0534__v0_l0[] = { // 0x080F26AC + PALETTE(49, 16, 0xB0) + TILES(0x11AED, 12) + HITBOX(0, -8, -48, 8, 0) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0534[1] = { + anim_0534__v0_l0, +}; + +const s32 anim_0535__v0_l0[] = { // 0x080F26E0 + PALETTE(65, 16, 0xB0) + TILES(0x11AF9, 18) + HITBOX(0, -24, -8, 24, -6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0535[1] = { + anim_0535__v0_l0, +}; + +const s32 anim_0536__v0_l0[] = { // 0x080F2714 + PALETTE(65, 16, 0xB0) + TILES(0x11B0B, 40) + HITBOX(0, -16, -37, 16, 40) + SHOW_FRAME(4, 0) + + END() +}; + +const s32 * const anim_0536[1] = { + anim_0536__v0_l0, +}; + +const s32 anim_0537__v0_l0[] = { // 0x080F2748 + PALETTE(65, 16, 0xB0) + TILES(0x11B33, 40) + HITBOX(0, -40, -14, 40, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0537[1] = { + anim_0537__v0_l0, +}; + +const s32 anim_0538__v0_l0[] = { // 0x080F277C + PALETTE(66, 16, 0xB0) + TILES(0x11B5B, 36) + HITBOX(0, -24, -20, 24, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0538[1] = { + anim_0538__v0_l0, +}; + +const s32 anim_0539__v0_l0[] = { // 0x080F27B0 + PALETTE(66, 16, 0xB0) + TILES(0x11B7F, 36) + HITBOX(0, -24, -20, 24, 23) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0539[1] = { + anim_0539__v0_l0, +}; + +const s32 anim_0540__v0_l0[] = { // 0x080F27E4 + PALETTE(62, 16, 0x70) + TILES(0x11BA3, 24) + HITBOX(0, -13, -13, 13, 28) + SHOW_FRAME(3, 0) + + END() +}; + +const s32 anim_0540__v1_l0[] = { // 0x080F2814 + PALETTE(62, 16, 0x70) + TILES(0x11BBB, 24) + HITBOX(0, -13, -15, 13, 28) + SHOW_FRAME(1, 1) + + TILES(0x11BD3, 28) + HITBOX(0, -13, -28, 13, 28) + SHOW_FRAME(2, 2) + + TILES(0x11BEF, 28) + HITBOX(0, -13, -24, 13, 28) + SHOW_FRAME(1, 3) + + TILES(0x11C0B, 28) + HITBOX(0, -13, -27, 13, 28) + SHOW_FRAME(5, 4) + + TILES(0x11BEF, 28) + HITBOX(0, -13, -24, 13, 28) + SHOW_FRAME(3, 3) + + END() +}; + +const s32 * const anim_0540[2] = { + anim_0540__v0_l0, + anim_0540__v1_l0, +}; + +const s32 anim_0541__v0_l0[] = { // 0x080F28CC + PALETTE(35, 16, 0x90) + TILES(0x11C27, 36) + HITBOX(0, -20, -20, 20, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0541[1] = { + anim_0541__v0_l0, +}; + +const s32 anim_0542__v0_l0[] = { // 0x080F2900 + PALETTE(67, 16, 0x60) + TILES(0x11C4B, 16) + HITBOX(0, -7, -13, 11, 18) + SHOW_FRAME(6, 0) + + TILES(0x11C5B, 16) + SHOW_FRAME(6, 1) + + TILES(0x11C6B, 16) + SHOW_FRAME(6, 2) + + TILES(0x11C7B, 16) + SHOW_FRAME(6, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0542__v1_l0[] = { // 0x080F2970 + PALETTE(67, 16, 0x60) + TILES(0x11C4B, 16) + HITBOX(0, -7, -13, 11, 18) + SHOW_FRAME(6, 0) + + TILES(0x11C7B, 16) + SHOW_FRAME(6, 3) + + TILES(0x11C6B, 16) + SHOW_FRAME(6, 2) + + TILES(0x11C5B, 16) + SHOW_FRAME(6, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0542[2] = { + anim_0542__v0_l0, + anim_0542__v1_l0, +}; + +const s32 anim_0543__v0_l0[] = { // 0x080F29E8 + PALETTE(65, 16, 0xB0) + TILES(0x11C8B, 12) + HITBOX(0, -15, -6, 15, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0543[1] = { + anim_0543__v0_l0, +}; + +const s32 anim_0544__v0_l0[] = { // 0x080F2A1C + PALETTE(65, 16, 0xB0) + TILES(0x11C97, 25) + HITBOX(0, -20, -18, 20, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0544[1] = { + anim_0544__v0_l0, +}; + +const s32 anim_0545__v0_l0[] = { // 0x080F2A50 + PALETTE(66, 16, 0xB0) + TILES(0x11CB0, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0545__v1_l0[] = { // 0x080F2A74 + PALETTE(66, 16, 0xB0) + TILES(0x11CB4, 9) + HITBOX(0, -5, -2, 9, 10) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0545[2] = { + anim_0545__v0_l0, + anim_0545__v1_l0, +}; + +const s32 anim_0546__v0_l0[] = { // 0x080F2AAC + PALETTE(68, 16, 0x60) + TILES(0x11CBD, 60) + HITBOX(0, -48, -20, 48, 20) + SHOW_FRAME(1, 0) + + TILES(0x11CF9, 60) + HITBOX(0, -48, -20, 48, 20) + SHOW_FRAME(1, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0546[1] = { + anim_0546__v0_l0, +}; + +const s32 anim_0547__v0_l0[] = { // 0x080F2B04 + PALETTE(67, 16, 0x60) + TILES(0x11D35, 24) + HITBOX(0, -24, -30, 24, 0) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0547[1] = { + anim_0547__v0_l0, +}; + +const s32 anim_0548__v0_l0[] = { // 0x080F2B38 + PALETTE(67, 16, 0x60) + TILES(0x11D4D, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0548[1] = { + anim_0548__v0_l0, +}; + +const s32 anim_0549__v0_l0[] = { // 0x080F2B60 + PALETTE(67, 16, 0x60) + TILES(0x11D5D, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0549[1] = { + anim_0549__v0_l0, +}; + +const s32 anim_0550__v0_l0[] = { // 0x080F2B88 + PALETTE(65, 16, 0xB0) + TILES(0x11D5E, 40) + HITBOX(0, -40, -12, 40, 16) + SHOW_FRAME(1, 0) + + JUMP_BACK(11) +}; + +const s32 * const anim_0550[1] = { + anim_0550__v0_l0, +}; + +const s32 anim_0551__v0_l0[] = { // 0x080F2BC0 + PALETTE(65, 16, 0xB0) + TILES(0x11D86, 32) + HITBOX(0, 0, 4, 64, 23) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0551[1] = { + anim_0551__v0_l0, +}; + +const s32 anim_0552__v0_l0[] = { // 0x080F2BF4 + PALETTE(68, 16, 0x60) + TILES(0x11DA6, 18) + SHOW_FRAME(2, 0) + + TILES(0x11DB8, 18) + SHOW_FRAME(2, 1) + + TILES(0x11DCA, 18) + SHOW_FRAME(2, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0552[1] = { + anim_0552__v0_l0, +}; + +const s32 anim_0553__v0_l0[] = { // 0x080F2C48 + PALETTE(69, 16, 0xB0) + TILES(0x11DDC, 64) + SHOW_FRAME(1, 0) + + JUMP_BACK(8) +}; + +const s32 * const anim_0553[1] = { + anim_0553__v0_l0, +}; + +const s32 anim_0554__v0_l0[] = { // 0x080F2C74 + PALETTE(60, 16, 0xB0) + TILES(0x11E1C, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0554[1] = { + anim_0554__v0_l0, +}; + +const s32 anim_0555__v0_l0[] = { // 0x080F2C9C + PALETTE(60, 16, 0xB0) + TILES(0x11E1D, 25) + HITBOX(0, -18, -38, 18, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0555[1] = { + anim_0555__v0_l0, +}; + +const s32 anim_0556__v0_l0[] = { // 0x080F2CD0 + PALETTE(69, 16, 0xB0) + TILES(0x11E36, 64) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0556[1] = { + anim_0556__v0_l0, +}; + +const s32 anim_0557__v0_l0[] = { // 0x080F2CF8 + PALETTE(60, 16, 0xB0) + TILES(0x11E76, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0557[1] = { + anim_0557__v0_l0, +}; + +const s32 anim_0558__v0_l0[] = { // 0x080F2D20 + PALETTE(65, 16, 0xB0) + TILES(0x11E7A, 15) + SHOW_FRAME(8, 0) + + TILES(0x11E89, 15) + SHOW_FRAME(8, 1) + + TILES(0x11E98, 15) + SHOW_FRAME(8, 2) + + TILES(0x11EA7, 15) + SHOW_FRAME(8, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0558[1] = { + anim_0558__v0_l0, +}; + +const s32 anim_0559__v0_l0[] = { // 0x080F2D88 + PALETTE(70, 16, 0xB0) + TILES(0x11EB6, 32) + HITBOX(0, 0, 0, 31, 64) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0559[1] = { + anim_0559__v0_l0, +}; + +const s32 anim_0560__v0_l0[] = { // 0x080F2DBC + PALETTE(71, 16, 0x70) + TILES(0x11ED6, 16) + HITBOX(0, -16, -17, 16, 8) + HITBOX(1, -16, -17, 16, 8) + SHOW_FRAME(16, 0) + + TILES(0x11EE6, 12) + HITBOX(0, -16, -17, 16, 8) + HITBOX(1, -16, -17, 16, 8) + SHOW_FRAME(16, 1) + + END() +}; + +const s32 * const anim_0560[1] = { + anim_0560__v0_l0, +}; + +const s32 anim_0561__v0_l0[] = { // 0x080F2E28 + PALETTE(71, 16, 0x70) + TILES(0x11EF2, 4) + HITBOX(0, -16, 0, 16, 8) + SHOW_FRAME(16, 0) + + TILES(0x11EF6, 4) + HITBOX(0, -16, 0, 16, 8) + SHOW_FRAME(16, 1) + + TILES(0x11EFA, 4) + HITBOX(0, -16, 0, 16, 8) + SHOW_FRAME(16, 2) + + JUMP_BACK(27) +}; + +const s32 * const anim_0561[1] = { + anim_0561__v0_l0, +}; + +const s32 anim_0562__v0_l0[] = { // 0x080F2EA0 + PALETTE(1, 16, 0x50) + TILES(0x11EFE, 18) + HITBOX(0, -16, -13, -16, -13) + SHOW_FRAME(3, 0) + + TILES(0x11F10, 18) + SHOW_FRAME(3, 1) + + TILES(0x11F22, 18) + SHOW_FRAME(3, 2) + + JUMP_BACK(21) +}; + +const s32 * const anim_0562[1] = { + anim_0562__v0_l0, +}; + +const s32 anim_0563__v0_l0[] = { // 0x080F2F00 + TILES(0x11F34, 6) + PALETTE(1, 16, 0x50) + SHOW_FRAME(12, 0) + + SHOW_FRAME(12, 1) + + SHOW_FRAME(12, 2) + + JUMP_BACK(9) +}; + +const s32 * const anim_0563[1] = { + anim_0563__v0_l0, +}; + +const s32 anim_0564__v0_l0[] = { // 0x080F2F3C + PALETTE(66, 16, 0xB0) + TILES(0x11F3A, 1) + SHOW_FRAME(4, 0) + + TILES(0x11F3B, 1) + SHOW_FRAME(4, 1) + + TILES(0x11F3C, 1) + SHOW_FRAME(4, 2) + + TILES(0x11F3D, 1) + SHOW_FRAME(4, 3) + + TILES(0x11F3E, 1) + SHOW_FRAME(4, 4) + + TILES(0x11F3F, 1) + SHOW_FRAME(4, 5) + + TILES(0x11F40, 1) + SHOW_FRAME(4, 6) + + TILES(0x11F41, 1) + SHOW_FRAME(4, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0564[1] = { + anim_0564__v0_l0, +}; + +const s32 anim_0565__v0_l0[] = { // 0x080F2FF4 + PALETTE(66, 16, 0xB0) + TILES(0x11F42, 2) + SHOW_FRAME(6, 0) + + TILES(0x11F44, 2) + SHOW_FRAME(6, 1) + + TILES(0x11F46, 2) + SHOW_FRAME(6, 2) + + TILES(0x11F48, 2) + SHOW_FRAME(6, 3) + + TILES(0x11F4A, 2) + SHOW_FRAME(6, 4) + + TILES(0x11F4C, 2) + SHOW_FRAME(6, 5) + + TILES(0x11F4E, 2) + SHOW_FRAME(6, 6) + + TILES(0x11F50, 2) + SHOW_FRAME(6, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0565[1] = { + anim_0565__v0_l0, +}; + +const s32 anim_0566__v0_l0[] = { // 0x080F30AC + PALETTE(66, 16, 0xB0) + TILES(0x11F52, 1) + SHOW_FRAME(5, 0) + + TILES(0x11F53, 1) + SHOW_FRAME(5, 1) + + TILES(0x11F54, 1) + SHOW_FRAME(5, 2) + + TILES(0x11F55, 1) + SHOW_FRAME(5, 3) + + TILES(0x11F56, 1) + SHOW_FRAME(5, 4) + + TILES(0x11F57, 1) + SHOW_FRAME(5, 5) + + TILES(0x11F58, 1) + SHOW_FRAME(5, 6) + + TILES(0x11F59, 1) + SHOW_FRAME(5, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0566[1] = { + anim_0566__v0_l0, +}; + +const s32 anim_0567__v0_l0[] = { // 0x080F3164 + PALETTE(72, 16, 0xB0) + TILES(0x11F5A, 20) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 0) + + TILES(0x11F6E, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 1) + + TILES(0x11F86, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 2) + + TILES(0x11F9E, 20) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 3) + + TILES(0x11FB2, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 4) + + TILES(0x11FCA, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 5) + + JUMP_BACK(69) +}; + +const s32 anim_0567__v1_l0[] = { // 0x080F3280 + PALETTE(72, 16, 0xB0) + TILES(0x11F5A, 20) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 0) + + TILES(0x11F6E, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 1) + + TILES(0x11FE2, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 6) + + TILES(0x11FFA, 20) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, -11, -38, 11, -12) + SHOW_FRAME(4, 7) + + TILES(0x1200E, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(4, 8) + + TILES(0x12026, 24) + HITBOX(0, -11, -8, 11, 0) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(4, 9) + + END() +}; + +const s32 * const anim_0567[2] = { + anim_0567__v0_l0, + anim_0567__v1_l0, +}; + +const s32 anim_0568__v0_l0[] = { // 0x080F33A0 + PALETTE(68, 16, 0x60) + TILES(0x1203E, 12) + SHOW_FRAME(3, 0) + + TILES(0x1204A, 18) + SHOW_FRAME(3, 1) + + TILES(0x1205C, 12) + SHOW_FRAME(3, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0568[1] = { + anim_0568__v0_l0, +}; + +const s32 anim_0569__v0_l0[] = { // 0x080F33F4 + PALETTE(63, 16, 0xB0) + TILES(0x12068, 6) + HITBOX(0, -7, 12, 7, 42) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0569[1] = { + anim_0569__v0_l0, +}; + +const s32 anim_0570__v0_l0[] = { // 0x080F3428 + PALETTE(73, 16, 0x70) + TILES(0x1206E, 12) + HITBOX(0, 4, -8, 20, 22) + SHOW_FRAME(1, 0) + + TILES(0x1207A, 12) + SHOW_FRAME(1, 1) + + TILES(0x12086, 12) + SHOW_FRAME(1, 2) + + JUMP_BACK(21) +}; + +const s32 * const anim_0570[1] = { + anim_0570__v0_l0, +}; + +const s32 anim_0571__v0_l0[] = { // 0x080F3488 + PALETTE(73, 16, 0x70) + TILES(0x12092, 12) + HITBOX(0, 3, 0, 18, 23) + SHOW_FRAME(1, 0) + + TILES(0x1209E, 12) + SHOW_FRAME(1, 1) + + TILES(0x120AA, 12) + SHOW_FRAME(1, 2) + + JUMP_BACK(21) +}; + +const s32 * const anim_0571[1] = { + anim_0571__v0_l0, +}; + +const s32 anim_0572__v0_l0[] = { // 0x080F34E8 + PALETTE(33, 16, 0x70) + TILES(0x120B6, 20) + SHOW_FRAME(1, 0) + + TILES(0x120CA, 16) + SHOW_FRAME(2, 1) + + TILES(0x120DA, 24) + SHOW_FRAME(1, 2) + + TILES(0x120F2, 24) + SHOW_FRAME(5, 3) + + TILES(0x1210A, 24) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 anim_0572__v1_l0[] = { // 0x080F355C + PALETTE(33, 16, 0x70) + TILES(0x120B6, 20) + HITBOX(0, -15, -32, 15, 1) + SHOW_FRAME(1, 0) + + JUMP_BACK(11) +}; + +const s32 * const anim_0572[2] = { + anim_0572__v0_l0, + anim_0572__v1_l0, +}; + +const s32 anim_0573__v0_l0[] = { // 0x080F3598 + PALETTE(74, 16, 0xB0) + TILES(0x12122, 28) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0573[1] = { + anim_0573__v0_l0, +}; + +const s32 anim_0574__v0_l0[] = { // 0x080F35C0 + PALETTE(75, 16, 0xD0) + TILES(0x1213E, 6) + HITBOX(0, -8, -13, 8, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0574[1] = { + anim_0574__v0_l0, +}; + +const s32 anim_0575__v0_l0[] = { // 0x080F35F4 + PALETTE(76, 16, 0xE0) + TILES(0x12144, 72) + HITBOX(0, -28, -53, 29, 0) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0575__v1_l0[] = { // 0x080F3624 + PALETTE(76, 16, 0xE0) + TILES(0x1218C, 72) + HITBOX(0, -28, -53, 29, 0) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0575__v2_l0[] = { // 0x080F3654 + PALETTE(76, 16, 0xE0) + TILES(0x121D4, 81) + HITBOX(0, -12, -73, 12, -65) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0575[3] = { + anim_0575__v0_l0, + anim_0575__v1_l0, + anim_0575__v2_l0, +}; + +const s32 anim_0576__v0_l0[] = { // 0x080F3690 + PALETTE(76, 16, 0xE0) + TILES(0x12225, 6) + HITBOX(0, -13, -76, 13, -60) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0576[1] = { + anim_0576__v0_l0, +}; + +const s32 anim_0577__v0_l0[] = { // 0x080F36C4 + PALETTE(76, 16, 0xE0) + TILES(0x1222B, 64) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0577[1] = { + anim_0577__v0_l0, +}; + +const s32 anim_0578__v0_l0[] = { // 0x080F36EC + PALETTE(76, 16, 0xE0) + TILES(0x1226B, 64) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0578[1] = { + anim_0578__v0_l0, +}; + +const s32 anim_0579__v0_l0[] = { // 0x080F3714 + PALETTE(74, 16, 0xB0) + TILES(0x122AB, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0579[1] = { + anim_0579__v0_l0, +}; + +const s32 anim_0580__v0_l0[] = { // 0x080F373C + PALETTE(74, 16, 0xB0) + TILES(0x122AF, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0580[1] = { + anim_0580__v0_l0, +}; + +const s32 anim_0581__v0_l0[] = { // 0x080F3764 + PALETTE(1, 16, 0x50) + TILES(0x122B0, 12) + SHOW_FRAME(10, 0) + + TILES(0x122BC, 12) + SHOW_FRAME(10, 1) + + TILES(0x122C8, 12) + SHOW_FRAME(10, 2) + + TILES(0x122D4, 6) + SHOW_FRAME(10, 3) + + END() +}; + +const s32 * const anim_0581[1] = { + anim_0581__v0_l0, +}; + +const s32 anim_0582__v0_l0[] = { // 0x080F37C8 + PALETTE(41, 16, 0x70) + TILES(0x122DA, 24) + HITBOX(0, -13, -12, 13, 23) + SHOW_FRAME(1, 0) + + TILES(0x122F2, 24) + SHOW_FRAME(2, 1) + + TILES(0x1230A, 28) + SHOW_FRAME(5, 2) + + TILES(0x12326, 28) + SHOW_FRAME(3, 3) + + TILES(0x12342, 28) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 anim_0582__v1_l0[] = { // 0x080F3848 + PALETTE(41, 16, 0x70) + TILES(0x122DA, 24) + HITBOX(0, -13, -12, 13, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0582[2] = { + anim_0582__v0_l0, + anim_0582__v1_l0, +}; + +const s32 anim_0583__v0_l0[] = { // 0x080F3880 + PALETTE(77, 16, 0x70) + TILES(0x1235E, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0583[1] = { + anim_0583__v0_l0, +}; + +const s32 anim_0584__v0_l0[] = { // 0x080F38A8 + PALETTE(78, 16, 0x70) + TILES(0x12368, 70) + HITBOX(0, -19, -27, 21, 46) + SHOW_FRAME(4, 0) + + TILES(0x123AE, 70) + SHOW_FRAME(4, 1) + + TILES(0x123F4, 70) + SHOW_FRAME(4, 2) + + TILES(0x1243A, 70) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0584[1] = { + anim_0584__v0_l0, +}; + +const s32 anim_0585__v0_l0[] = { // 0x080F391C + PALETTE(78, 16, 0x70) + TILES(0x12480, 70) + HITBOX(0, -19, -27, 21, 46) + SHOW_FRAME(4, 0) + + TILES(0x124C6, 70) + SHOW_FRAME(4, 1) + + TILES(0x1250C, 70) + SHOW_FRAME(4, 2) + + TILES(0x12552, 70) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0585[1] = { + anim_0585__v0_l0, +}; + +const s32 anim_0586__v0_l0[] = { // 0x080F3990 + PALETTE(78, 16, 0x70) + TILES(0x12598, 70) + HITBOX(0, -26, -19, 47, 21) + SHOW_FRAME(4, 0) + + TILES(0x125DE, 70) + SHOW_FRAME(4, 1) + + TILES(0x12624, 70) + SHOW_FRAME(4, 2) + + TILES(0x1266A, 70) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0586[1] = { + anim_0586__v0_l0, +}; + +const s32 anim_0587__v0_l0[] = { // 0x080F3A04 + PALETTE(78, 16, 0x70) + TILES(0x126B0, 70) + HITBOX(0, -26, -19, 47, 21) + SHOW_FRAME(4, 0) + + TILES(0x126F6, 70) + SHOW_FRAME(4, 1) + + TILES(0x1273C, 70) + SHOW_FRAME(4, 2) + + TILES(0x12782, 70) + SHOW_FRAME(4, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0587[1] = { + anim_0587__v0_l0, +}; + +const s32 anim_0588__v0_l0[] = { // 0x080F3A78 + PALETTE(79, 16, 0xB0) + TILES(0x127C8, 70) + HITBOX(0, -27, -20, 46, 20) + SHOW_FRAME(35, 0) + + TILES(0x1280E, 70) + SHOW_FRAME(10, 1) + + TILES(0x12854, 70) + SHOW_FRAME(10, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0588__v1_l0[] = { // 0x080F3AD4 + PALETTE(79, 16, 0xB0) + TILES(0x1289A, 70) + HITBOX(0, -27, -20, 46, 20) + SHOW_FRAME(35, 3) + + TILES(0x128E0, 70) + SHOW_FRAME(10, 4) + + TILES(0x12926, 70) + SHOW_FRAME(10, 5) + + JUMP_BACK(21) +}; + +const s32 * const anim_0588[2] = { + anim_0588__v0_l0, + anim_0588__v1_l0, +}; + +const s32 anim_0589__v0_l0[] = { // 0x080F3B38 + PALETTE(79, 16, 0xB0) + TILES(0x1296C, 70) + HITBOX(0, -20, -28, 20, 45) + SHOW_FRAME(35, 0) + + TILES(0x129B2, 70) + SHOW_FRAME(10, 1) + + TILES(0x129F8, 70) + SHOW_FRAME(10, 2) + + JUMP_BACK(21) +}; + +const s32 anim_0589__v1_l0[] = { // 0x080F3B94 + PALETTE(79, 16, 0xB0) + TILES(0x12A3E, 70) + HITBOX(0, -20, -28, 20, 45) + SHOW_FRAME(35, 3) + + TILES(0x12A84, 70) + SHOW_FRAME(10, 4) + + TILES(0x12ACA, 70) + SHOW_FRAME(10, 5) + + JUMP_BACK(21) +}; + +const s32 * const anim_0589[2] = { + anim_0589__v0_l0, + anim_0589__v1_l0, +}; + +const s32 anim_0590__v0_l0[] = { // 0x080F3BF8 + PALETTE(80, 16, 0xB0) + TILES(0x12B10, 91) + HITBOX(0, -52, -28, 51, 36) + SHOW_FRAME(8, 0) + + TILES(0x12B6B, 91) + SHOW_FRAME(8, 1) + + TILES(0x12BC6, 91) + SHOW_FRAME(8, 2) + + TILES(0x12C21, 91) + SHOW_FRAME(8, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0590__v1_l0[] = { // 0x080F3C68 + PALETTE(80, 16, 0xB0) + TILES(0x12C7C, 91) + HITBOX(0, -52, -28, 51, 36) + SHOW_FRAME(8, 4) + + TILES(0x12CD7, 91) + SHOW_FRAME(8, 5) + + TILES(0x12D32, 91) + SHOW_FRAME(8, 6) + + TILES(0x12D8D, 91) + SHOW_FRAME(8, 7) + + JUMP_BACK(26) +}; + +const s32 * const anim_0590[2] = { + anim_0590__v0_l0, + anim_0590__v1_l0, +}; + +const s32 anim_0591__v0_l0[] = { // 0x080F3CE0 + PALETTE(80, 16, 0xB0) + TILES(0x12DE8, 77) + HITBOX(0, -27, -44, 27, 45) + SHOW_FRAME(8, 0) + + TILES(0x12E35, 77) + SHOW_FRAME(8, 1) + + TILES(0x12E82, 77) + SHOW_FRAME(8, 2) + + TILES(0x12ECF, 77) + SHOW_FRAME(8, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0591__v1_l0[] = { // 0x080F3D50 + PALETTE(80, 16, 0xB0) + TILES(0x12F1C, 77) + HITBOX(0, -27, -44, 27, 45) + SHOW_FRAME(8, 4) + + TILES(0x12F69, 77) + SHOW_FRAME(8, 5) + + TILES(0x12FB6, 77) + SHOW_FRAME(8, 6) + + TILES(0x13003, 77) + SHOW_FRAME(8, 7) + + JUMP_BACK(26) +}; + +const s32 * const anim_0591[2] = { + anim_0591__v0_l0, + anim_0591__v1_l0, +}; + +const s32 anim_0592__v0_l0[] = { // 0x080F3DC8 + PALETTE(81, 16, 0xB0) + TILES(0x13050, 16) + HITBOX(0, -16, -16, 12, -8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0592[1] = { + anim_0592__v0_l0, +}; + +const s32 anim_0593__v0_l0[] = { // 0x080F3DFC + PALETTE(82, 16, 0x70) + TILES(0x13060, 28) + HITBOX(0, 0, -30, 56, 0) + SHOW_FRAME(8, 0) + + TILES(0x1307C, 28) + SHOW_FRAME(8, 1) + + JUMP_BACK(16) +}; + +const s32 anim_0593__v1_l0[] = { // 0x080F3E44 + PALETTE(83, 16, 0x70) + TILES(0x13098, 28) + HITBOX(0, 0, 0, 29, 56) + SHOW_FRAME(8, 2) + + TILES(0x130B4, 28) + SHOW_FRAME(8, 3) + + JUMP_BACK(16) +}; + +const s32 * const anim_0593[2] = { + anim_0593__v0_l0, + anim_0593__v1_l0, +}; + +const s32 anim_0594__v0_l0[] = { // 0x080F3E94 + PALETTE(63, 16, 0xB0) + TILES(0x130D0, 32) + HITBOX(0, 0, 0, 32, 64) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0594[1] = { + anim_0594__v0_l0, +}; + +const s32 anim_0595__v0_l0[] = { // 0x080F3EC8 + PALETTE(65, 16, 0xB0) + TILES(0x130F0, 32) + HITBOX(0, 0, 0, 32, 63) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0595[1] = { + anim_0595__v0_l0, +}; + +const s32 anim_0596__v0_l0[] = { // 0x080F3EFC + PALETTE(84, 16, 0xB0) + TILES(0x13110, 32) + HITBOX(0, 0, 0, 32, 64) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0596[1] = { + anim_0596__v0_l0, +}; + +const s32 anim_0597__v0_l0[] = { // 0x080F3F30 + PALETTE(85, 16, 0x70) + TILES(0x13130, 1) + SHOW_FRAME(10, 0) + + TILES(0x13131, 1) + SHOW_FRAME(10, 1) + + TILES(0x13132, 1) + SHOW_FRAME(10, 2) + + TILES(0x13133, 1) + SHOW_FRAME(10, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0597[1] = { + anim_0597__v0_l0, +}; + +const s32 anim_0598__v0_l0[] = { // 0x080F3F98 + PALETTE(86, 16, 0xB0) + TILES(0x13134, 18) + HITBOX(0, -24, -8, 24, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0598[1] = { + anim_0598__v0_l0, +}; + +const s32 anim_0599__v0_l0[] = { // 0x080F3FCC + PALETTE(86, 16, 0xB0) + TILES(0x13146, 36) + HITBOX(0, -24, -20, 24, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0599[1] = { + anim_0599__v0_l0, +}; + +const s32 anim_0600__v0_l0[] = { // 0x080F4000 + PALETTE(86, 16, 0xB0) + TILES(0x1316A, 40) + HITBOX(0, -39, -14, 39, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0600[1] = { + anim_0600__v0_l0, +}; + +const s32 anim_0601__v0_l0[] = { // 0x080F4034 + PALETTE(86, 16, 0xB0) + TILES(0x13192, 12) + HITBOX(0, -14, -9, 14, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0601[1] = { + anim_0601__v0_l0, +}; + +const s32 anim_0602__v0_l0[] = { // 0x080F4068 + PALETTE(86, 16, 0xB0) + TILES(0x1319E, 32) + HITBOX(0, 0, 3, 64, 32) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0602[1] = { + anim_0602__v0_l0, +}; + +const s32 anim_0603__v0_l0[] = { // 0x080F409C + PALETTE(86, 16, 0xB0) + TILES(0x131BE, 27) + HITBOX(0, -32, -7, 32, 6) + SHOW_FRAME(10, 0) + + TILES(0x131D9, 27) + SHOW_FRAME(10, 1) + + TILES(0x131F4, 27) + SHOW_FRAME(10, 2) + + TILES(0x1320F, 27) + SHOW_FRAME(10, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0603__v1_l0[] = { // 0x080F410C + PALETTE(86, 16, 0xB0) + TILES(0x131BE, 27) + HITBOX(0, -32, -7, 32, 6) + SHOW_FRAME(10, 0) + + TILES(0x1320F, 27) + SHOW_FRAME(10, 3) + + TILES(0x131F4, 27) + SHOW_FRAME(10, 2) + + TILES(0x131D9, 27) + SHOW_FRAME(10, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0603[2] = { + anim_0603__v0_l0, + anim_0603__v1_l0, +}; + +const s32 anim_0604__v0_l0[] = { // 0x080F4184 + PALETTE(86, 16, 0xB0) + TILES(0x1322A, 36) + HITBOX(0, -44, -5, 44, 8) + SHOW_FRAME(10, 0) + + TILES(0x1324E, 36) + SHOW_FRAME(10, 1) + + TILES(0x13272, 36) + SHOW_FRAME(10, 2) + + TILES(0x13296, 36) + SHOW_FRAME(10, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0604__v1_l0[] = { // 0x080F41F4 + PALETTE(86, 16, 0xB0) + TILES(0x1322A, 36) + HITBOX(0, -44, -5, 44, 8) + SHOW_FRAME(10, 0) + + TILES(0x13296, 36) + SHOW_FRAME(10, 3) + + TILES(0x13272, 36) + SHOW_FRAME(10, 2) + + TILES(0x1324E, 36) + SHOW_FRAME(10, 1) + + JUMP_BACK(26) +}; + +const s32 * const anim_0604[2] = { + anim_0604__v0_l0, + anim_0604__v1_l0, +}; + +const s32 anim_0605__v0_l0[] = { // 0x080F426C + PALETTE(87, 16, 0xD0) + TILES(0x132BA, 18) + HITBOX(0, -24, -7, 24, -5) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0605[1] = { + anim_0605__v0_l0, +}; + +const s32 anim_0606__v0_l0[] = { // 0x080F42A0 + PALETTE(88, 16, 0x0) + TILES(0x132CC, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0606[1] = { + anim_0606__v0_l0, +}; + +const s32 anim_0607__v0_l0[] = { // 0x080F42C8 + PALETTE(89, 16, 0xA0) + TILES(0x132DC, 63) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0607__v1_l0[] = { // 0x080F42EC + PALETTE(89, 16, 0xA0) + TILES(0x132DC, 63) + HITBOX(0, -32, -56, 29, 0) + HITBOX(1, -16, -36, 16, -16) + SHOW_FRAME(4, 0) + + TILES(0x1331B, 70) + SHOW_FRAME(4, 1) + + CHANGE_ANIM(607, 2) +}; + +const s32 anim_0607__v2_l0[] = { // 0x080F4340 + PALETTE(89, 16, 0xA0) + TILES(0x13361, 70) + SHOW_FRAME(4, 2) + + CHANGE_ANIM(607, 1) +}; + +const s32 * const anim_0607[3] = { + anim_0607__v0_l0, + anim_0607__v1_l0, + anim_0607__v2_l0, +}; + +const s32 anim_0608__v0_l0[] = { // 0x080F4374 + PALETTE(89, 16, 0xA0) + TILES(0x133A7, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0608[1] = { + anim_0608__v0_l0, +}; + +const s32 anim_0609__v0_l0[] = { // 0x080F439C + PALETTE(89, 16, 0xA0) + TILES(0x133AB, 64) + HITBOX(0, -16, -16, 16, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0609[1] = { + anim_0609__v0_l0, +}; + +const s32 anim_0610__v0_l0[] = { // 0x080F43D0 + PALETTE(90, 16, 0x80) + TILES(0x133EB, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0610__v1_l0[] = { // 0x080F43F4 + PALETTE(90, 16, 0x80) + TILES(0x133F3, 8) + SHOW_FRAME(6, 1) + + TILES(0x133FB, 8) + SHOW_FRAME(6, 2) + + TILES(0x133F3, 8) + SHOW_FRAME(6, 1) + + TILES(0x133FB, 8) + SHOW_FRAME(6, 2) + + TILES(0x133F3, 8) + SHOW_FRAME(6, 1) + + TILES(0x133FB, 8) + SHOW_FRAME(6, 2) + + CHANGE_ANIM(610, 0) +}; + +const s32 anim_0610__v2_l0[] = { // 0x080F4480 + PALETTE(90, 16, 0x80) + TILES(0x13403, 8) + SHOW_FRAME(5, 3) + + TILES(0x1340B, 8) + SHOW_FRAME(3, 4) + + TILES(0x13403, 8) + SHOW_FRAME(5, 3) + + TILES(0x1340B, 8) + SHOW_FRAME(3, 4) + + TILES(0x13403, 8) + SHOW_FRAME(5, 3) + + TILES(0x1340B, 8) + SHOW_FRAME(3, 4) + + CHANGE_ANIM(610, 0) +}; + +const s32 * const anim_0610[3] = { + anim_0610__v0_l0, + anim_0610__v1_l0, + anim_0610__v2_l0, +}; + +const s32 anim_0611__v0_l0[] = { // 0x080F4518 + TILES(0x13413, 80) + PALETTE(33, 16, 0x70) + PLAY_SOUND(144) + SHOW_FRAME(4, 0) + + SHOW_FRAME(4, 1) + + SHOW_FRAME(4, 2) + + SHOW_FRAME(4, 3) + + SHOW_FRAME(4, 4) + + END() +}; + +const s32 * const anim_0611[1] = { + anim_0611__v0_l0, +}; + +const s32 anim_0612__v0_l0[] = { // 0x080F4568 + PALETTE(89, 16, 0xA0) + TILES(0x13463, 56) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0612[1] = { + anim_0612__v0_l0, +}; + +const s32 anim_0613__v0_l0[] = { // 0x080F4590 + PALETTE(89, 16, 0xA0) + TILES(0x1349B, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0613[1] = { + anim_0613__v0_l0, +}; + +const s32 anim_0614__v0_l0[] = { // 0x080F45B8 + PALETTE(89, 16, 0xA0) + TILES(0x134AB, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0614[1] = { + anim_0614__v0_l0, +}; + +const s32 anim_0615__v0_l0[] = { // 0x080F45E0 + PALETTE(89, 16, 0xA0) + TILES(0x134BB, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0615[1] = { + anim_0615__v0_l0, +}; + +const s32 anim_0616__v0_l0[] = { // 0x080F4608 + PALETTE(89, 16, 0xA0) + TILES(0x134CB, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0616[1] = { + anim_0616__v0_l0, +}; + +const s32 anim_0617__v0_l0[] = { // 0x080F4630 + PALETTE(91, 16, 0xA0) + TILES(0x134DB, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0617[1] = { + anim_0617__v0_l0, +}; + +const s32 anim_0618__v0_l0[] = { // 0x080F4658 + PALETTE(90, 16, 0x80) + TILES(0x134E3, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0618__v1_l0[] = { // 0x080F467C + PALETTE(90, 16, 0x80) + TILES(0x134EB, 8) + SHOW_FRAME(6, 1) + + TILES(0x134F3, 8) + SHOW_FRAME(6, 2) + + TILES(0x134EB, 8) + SHOW_FRAME(6, 1) + + TILES(0x134F3, 8) + SHOW_FRAME(6, 2) + + TILES(0x134EB, 8) + SHOW_FRAME(6, 1) + + TILES(0x134F3, 8) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0618__v2_l0[] = { // 0x080F4704 + PALETTE(90, 16, 0x80) + TILES(0x134FB, 8) + SHOW_FRAME(5, 3) + + TILES(0x13503, 8) + SHOW_FRAME(3, 4) + + TILES(0x134FB, 8) + SHOW_FRAME(5, 3) + + TILES(0x13503, 8) + SHOW_FRAME(3, 4) + + TILES(0x134FB, 8) + SHOW_FRAME(5, 3) + + TILES(0x13503, 8) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0618[3] = { + anim_0618__v0_l0, + anim_0618__v1_l0, + anim_0618__v2_l0, +}; + +const s32 anim_0619__v0_l0[] = { // 0x080F4798 + PALETTE(91, 16, 0xA0) + TILES(0x1350B, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0619[1] = { + anim_0619__v0_l0, +}; + +const s32 anim_0620__v0_l0[] = { // 0x080F47C0 + PALETTE(91, 16, 0xA0) + TILES(0x13513, 54) + HITBOX(0, -19, -65, 20, -30) + HITBOX(1, -16, -30, 16, 2) + HITBOX(2, 0, 0, 0, 0) + SHOW_FRAME(4, 0) + + TILES(0x13549, 54) + HITBOX(0, -19, -65, 20, -30) + HITBOX(1, -16, -30, 16, 2) + HITBOX(2, -24, -69, -24, -70) + SHOW_FRAME(4, 1) + + TILES(0x1357F, 54) + HITBOX(0, -19, -65, 20, -30) + HITBOX(1, -16, -30, 16, 2) + HITBOX(2, -24, -68, -24, -70) + SHOW_FRAME(4, 2) + + TILES(0x13549, 54) + HITBOX(0, -19, -65, 20, -30) + HITBOX(1, -16, -30, 16, 2) + HITBOX(2, -24, -69, -24, -70) + SHOW_FRAME(4, 1) + + JUMP_BACK(59) +}; + +const s32 anim_0620__v1_l0[] = { // 0x080F48B4 + PALETTE(91, 16, 0xA0) + TILES(0x135B5, 54) + HITBOX(0, -19, -68, 20, -33) + HITBOX(1, -16, -35, 16, 2) + HITBOX(2, -24, -73, -24, -70) + SHOW_FRAME(3, 3) + + TILES(0x135EB, 42) + HITBOX(0, -19, -54, 20, -19) + HITBOX(1, -16, -19, 16, 3) + HITBOX(2, -24, -57, -24, -70) + SHOW_FRAME(3, 4) + + TILES(0x13615, 42) + HITBOX(0, -19, -44, 20, -9) + HITBOX(1, -16, -9, 16, 3) + HITBOX(2, -24, -50, -24, -70) + SHOW_FRAME(3, 5) + + TILES(0x135EB, 42) + HITBOX(0, -19, -54, 20, -19) + HITBOX(1, -16, -18, 16, 2) + HITBOX(2, -24, -57, -24, -70) + SHOW_FRAME(3, 4) + + TILES(0x135B5, 54) + HITBOX(0, -19, -68, 20, -33) + HITBOX(1, -16, -35, 16, 2) + HITBOX(2, -24, -73, -24, -70) + SHOW_FRAME(3, 3) + + END() +}; + +const s32 anim_0620__v2_l0[] = { // 0x080F49DC + PALETTE(91, 16, 0xA0) + TILES(0x135B5, 54) + HITBOX(0, -19, -68, 20, -33) + HITBOX(1, -16, -35, 16, 2) + HITBOX(2, -24, -73, -24, -70) + SHOW_FRAME(3, 3) + + TILES(0x135EB, 42) + HITBOX(0, -19, -54, 20, -19) + HITBOX(1, -16, -19, 16, 3) + HITBOX(2, -24, -57, -24, -70) + SHOW_FRAME(3, 4) + + TILES(0x13615, 42) + HITBOX(0, -19, -44, 20, -9) + HITBOX(1, -16, -9, 16, 3) + HITBOX(2, -24, -50, -24, -70) + SHOW_FRAME(6, 5) + + TILES(0x135EB, 42) + HITBOX(0, -19, -54, 20, -19) + HITBOX(1, -16, -19, 16, 3) + HITBOX(2, -24, -57, -24, -70) + SHOW_FRAME(6, 4) + + TILES(0x13615, 42) + HITBOX(0, -19, -44, 20, -9) + HITBOX(1, -16, -9, 16, 3) + HITBOX(2, -24, -50, -24, -70) + SHOW_FRAME(5, 5) + + TILES(0x135EB, 42) + HITBOX(0, -19, -54, 20, -19) + HITBOX(1, -16, -19, 16, 3) + HITBOX(2, -24, -57, -24, -70) + SHOW_FRAME(5, 4) + + TILES(0x13615, 42) + HITBOX(0, -19, -44, 20, -9) + HITBOX(1, -16, -9, 16, 3) + HITBOX(2, -24, -50, -24, -70) + SHOW_FRAME(4, 5) + + TILES(0x135EB, 42) + HITBOX(0, -19, -54, 20, -19) + HITBOX(1, -16, -19, 16, 3) + HITBOX(2, -24, -57, -24, -70) + SHOW_FRAME(4, 4) + + TILES(0x135B5, 54) + HITBOX(0, -19, -68, 20, -33) + HITBOX(1, -16, -35, 16, 2) + HITBOX(2, -24, -73, -24, -70) + SHOW_FRAME(3, 3) + + END() +}; + +const s32 * const anim_0620[3] = { + anim_0620__v0_l0, + anim_0620__v1_l0, + anim_0620__v2_l0, +}; + +const s32 anim_0621__v0_l0[] = { // 0x080F4BF0 + PALETTE(91, 16, 0xA0) + TILES(0x1363F, 30) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0621[1] = { + anim_0621__v0_l0, +}; + +const s32 anim_0622__v0_l0[] = { // 0x080F4C18 + PALETTE(90, 16, 0x80) + TILES(0x1365D, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0622__v1_l0[] = { // 0x080F4C3C + PALETTE(90, 16, 0x80) + TILES(0x13665, 8) + SHOW_FRAME(6, 1) + + TILES(0x1366D, 8) + SHOW_FRAME(6, 2) + + TILES(0x13665, 8) + SHOW_FRAME(6, 1) + + TILES(0x1366D, 8) + SHOW_FRAME(6, 2) + + TILES(0x13665, 8) + SHOW_FRAME(6, 1) + + TILES(0x1366D, 8) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0622__v2_l0[] = { // 0x080F4CC4 + PALETTE(90, 16, 0x80) + TILES(0x13675, 8) + SHOW_FRAME(5, 3) + + TILES(0x1367D, 8) + SHOW_FRAME(3, 4) + + TILES(0x13675, 8) + SHOW_FRAME(5, 3) + + TILES(0x1367D, 8) + SHOW_FRAME(3, 4) + + TILES(0x13675, 8) + SHOW_FRAME(5, 3) + + TILES(0x1367D, 8) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0622[3] = { + anim_0622__v0_l0, + anim_0622__v1_l0, + anim_0622__v2_l0, +}; + +const s32 anim_0623__v0_l0[] = { // 0x080F4D58 + PALETTE(92, 16, 0xA0) + TILES(0x13685, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0623[1] = { + anim_0623__v0_l0, +}; + +const s32 anim_0624__v0_l0[] = { // 0x080F4D80 + PALETTE(92, 16, 0xA0) + TILES(0x13695, 36) + HITBOX(0, -20, -20, 20, 22) + SHOW_FRAME(5, 0) + + TILES(0x136B9, 36) + SHOW_FRAME(5, 1) + + TILES(0x136DD, 36) + SHOW_FRAME(5, 2) + + TILES(0x13701, 36) + SHOW_FRAME(5, 3) + + JUMP_BACK(26) +}; + +const s32 * const anim_0624[1] = { + anim_0624__v0_l0, +}; + +const s32 anim_0625__v0_l0[] = { // 0x080F4DF4 + PALETTE(93, 16, 0xB0) + TILES(0x13725, 36) + HITBOX(0, -20, -20, 20, 22) + SHOW_FRAME(5, 0) + + TILES(0x13749, 36) + SHOW_FRAME(5, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0625[1] = { + anim_0625__v0_l0, +}; + +const s32 anim_0626__v0_l0[] = { // 0x080F4E40 + PALETTE(94, 16, 0xA0) + TILES(0x1376D, 48) + HITBOX(0, -23, 16, 23, 58) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0626[1] = { + anim_0626__v0_l0, +}; + +const s32 anim_0627__v0_l0[] = { // 0x080F4E74 + PALETTE(95, 16, 0xA0) + TILES(0x1379D, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0627__v1_l0[] = { // 0x080F4E98 + PALETTE(95, 16, 0xA0) + TILES(0x137AD, 12) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0627[2] = { + anim_0627__v0_l0, + anim_0627__v1_l0, +}; + +const s32 anim_0628__v0_l0[] = { // 0x080F4EC4 + PALETTE(94, 16, 0xA0) + TILES(0x137B9, 64) + HITBOX(0, -23, 0, 23, 53) + SHOW_FRAME(7, 0) + + TILES(0x137F9, 64) + SHOW_FRAME(7, 1) + + TILES(0x13839, 64) + SHOW_FRAME(7, 2) + + TILES(0x13879, 64) + SHOW_FRAME(7, 3) + + JUMP_BACK(26) +}; + +const s32 anim_0628__v1_l0[] = { // 0x080F4F34 + PALETTE(94, 16, 0xA0) + TILES(0x138B9, 64) + HITBOX(0, -23, 0, 23, 53) + SHOW_FRAME(5, 4) + + TILES(0x138F9, 64) + SHOW_FRAME(5, 5) + + JUMP_BACK(16) +}; + +const s32 anim_0628__v2_l0[] = { // 0x080F4F7C + PALETTE(94, 16, 0xA0) + TILES(0x138B9, 64) + HITBOX(0, -23, 0, 23, 53) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0628[3] = { + anim_0628__v0_l0, + anim_0628__v1_l0, + anim_0628__v2_l0, +}; + +const s32 anim_0629__v0_l0[] = { // 0x080F4FB8 + PALETTE(96, 16, 0x80) + TILES(0x13939, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0629__v1_l0[] = { // 0x080F4FDC + PALETTE(96, 16, 0x80) + TILES(0x13941, 8) + SHOW_FRAME(6, 1) + + TILES(0x13949, 8) + SHOW_FRAME(6, 2) + + TILES(0x13941, 8) + SHOW_FRAME(6, 1) + + TILES(0x13949, 8) + SHOW_FRAME(6, 2) + + TILES(0x13941, 8) + SHOW_FRAME(6, 1) + + TILES(0x13949, 8) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0629__v2_l0[] = { // 0x080F5064 + PALETTE(96, 16, 0x80) + TILES(0x13951, 8) + SHOW_FRAME(5, 3) + + TILES(0x13949, 8) + SHOW_FRAME(3, 2) + + TILES(0x13951, 8) + SHOW_FRAME(5, 3) + + TILES(0x13949, 8) + SHOW_FRAME(3, 2) + + TILES(0x13951, 8) + SHOW_FRAME(5, 3) + + TILES(0x13949, 8) + SHOW_FRAME(3, 2) + + END() +}; + +const s32 * const anim_0629[3] = { + anim_0629__v0_l0, + anim_0629__v1_l0, + anim_0629__v2_l0, +}; + +const s32 anim_0630__v0_l0[] = { // 0x080F50F8 + PALETTE(97, 16, 0xB0) + TILES(0x13959, 24) + HITBOX(0, -12, -17, 11, 6) + HITBOX(1, -5, 5, 4, 15) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0630[1] = { + anim_0630__v0_l0, +}; + +const s32 anim_0631__v0_l0[] = { // 0x080F5138 + PALETTE(98, 16, 0xA0) + TILES(0x13971, 16) + SHOW_FRAME(60, 0) + + END() +}; + +const s32 anim_0631__v1_l0[] = { // 0x080F515C + PALETTE(98, 16, 0xA0) + TILES(0x13981, 20) + SHOW_FRAME(4, 1) + + TILES(0x13995, 30) + SHOW_FRAME(4, 2) + + TILES(0x139B3, 24) + SHOW_FRAME(4, 3) + + TILES(0x13995, 30) + SHOW_FRAME(3, 2) + + TILES(0x13981, 20) + SHOW_FRAME(3, 1) + + TILES(0x139CB, 20) + SHOW_FRAME(4, 4) + + TILES(0x139DF, 20) + SHOW_FRAME(4, 5) + + TILES(0x139F3, 20) + SHOW_FRAME(4, 6) + + TILES(0x13A07, 20) + SHOW_FRAME(12, 7) + + END() +}; + +const s32 * const anim_0631[2] = { + anim_0631__v0_l0, + anim_0631__v1_l0, +}; + +const s32 anim_0632__v0_l0[] = { // 0x080F5228 + PALETTE(98, 16, 0xA0) + TILES(0x13A1B, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x13A2F, 20) + SHOW_FRAME(4, 1) + + TILES(0x13A43, 20) + SHOW_FRAME(4, 2) + + TILES(0x13A57, 20) + SHOW_FRAME(4, 3) + + TILES(0x13A6B, 16) + SHOW_FRAME(4, 4) + + TILES(0x13A7B, 20) + SHOW_FRAME(4, 5) + + JUMP_BACK(36) +}; + +const s32 * const anim_0632[1] = { + anim_0632__v0_l0, +}; + +const s32 anim_0633__v0_l0[] = { // 0x080F52C4 + PALETTE(98, 16, 0xA0) + TILES(0x13A8F, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x13AA3, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0633[1] = { + anim_0633__v0_l0, +}; + +const s32 anim_0634__v0_l0[] = { // 0x080F530C + PALETTE(98, 16, 0xA0) + TILES(0x13AB7, 25) + SHOW_FRAME(3, 0) + + TILES(0x13AD0, 20) + SHOW_FRAME(3, 1) + + TILES(0x13AE4, 20) + SHOW_FRAME(3, 2) + + TILES(0x13AF8, 20) + SHOW_FRAME(3, 3) + + TILES(0x13B0C, 15) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0634[1] = { + anim_0634__v0_l0, +}; + +const s32 anim_0635__v0_l0[] = { // 0x080F5384 + PALETTE(98, 16, 0xA0) + TILES(0x13B1B, 20) + SHOW_FRAME(3, 0) + + TILES(0x13B2F, 15) + SHOW_FRAME(3, 1) + + TILES(0x13B3E, 15) + SHOW_FRAME(3, 2) + + TILES(0x13B4D, 20) + SHOW_FRAME(3, 3) + + TILES(0x13B61, 20) + SHOW_FRAME(3, 4) + + TILES(0x13B75, 16) + SHOW_FRAME(3, 5) + + END() +}; + +const s32 * const anim_0635[1] = { + anim_0635__v0_l0, +}; + +const s32 anim_0636__v0_l0[] = { // 0x080F5410 + PALETTE(98, 16, 0xA0) + TILES(0x13B85, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x13B95, 16) + SHOW_FRAME(2, 1) + + TILES(0x13BA5, 16) + SHOW_FRAME(2, 2) + + TILES(0x13BB5, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 * const anim_0636[1] = { + anim_0636__v0_l0, +}; + +const s32 anim_0637__v0_l0[] = { // 0x080F5490 + PALETTE(98, 16, 0xA0) + TILES(0x13BC5, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x13BD5, 16) + SHOW_FRAME(2, 1) + + TILES(0x13BE5, 16) + SHOW_FRAME(2, 2) + + TILES(0x13BF5, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 anim_0637__v1_l0[] = { // 0x080F550C + PALETTE(98, 16, 0xA0) + TILES(0x13C05, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 4) + + TILES(0x13C15, 16) + SHOW_FRAME(2, 5) + + TILES(0x13C25, 16) + SHOW_FRAME(2, 6) + + TILES(0x13C35, 16) + SHOW_FRAME(2, 7) + + JUMP_BACK(29) +}; + +const s32 * const anim_0637[2] = { + anim_0637__v0_l0, + anim_0637__v1_l0, +}; + +const s32 anim_0638__v0_l0[] = { // 0x080F5590 + PALETTE(98, 16, 0xA0) + TILES(0x13C45, 24) + HITBOX(0, -12, -8, 10, 6) + HITBOX(1, -24, -10, 0, 13) + SHOW_FRAME(3, 0) + + TILES(0x13C5D, 24) + SHOW_FRAME(3, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0638[1] = { + anim_0638__v0_l0, +}; + +const s32 anim_0639__v0_l0[] = { // 0x080F55E8 + PALETTE(98, 16, 0xA0) + TILES(0x13C75, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0639__v1_l0[] = { // 0x080F5618 + PALETTE(98, 16, 0xA0) + TILES(0x13C8D, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0639__v2_l0[] = { // 0x080F5648 + PALETTE(98, 16, 0xA0) + TILES(0x13CA5, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0639__v3_l0[] = { // 0x080F5678 + PALETTE(98, 16, 0xA0) + TILES(0x13CBD, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0639[4] = { + anim_0639__v0_l0, + anim_0639__v1_l0, + anim_0639__v2_l0, + anim_0639__v3_l0, +}; + +const s32 anim_0640__v0_l0[] = { // 0x080F56B8 + PALETTE(98, 16, 0xA0) + TILES(0x13CD5, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 0) + + TILES(0x13CE9, 25) + SHOW_FRAME(3, 1) + + TILES(0x13D02, 30) + SHOW_FRAME(3, 2) + + TILES(0x13D20, 30) + SHOW_FRAME(3, 3) + + TILES(0x13D3E, 30) + SHOW_FRAME(3, 4) + + TILES(0x13D5C, 30) + SHOW_FRAME(3, 5) + + TILES(0x13D7A, 30) + SHOW_FRAME(3, 6) + + END() +}; + +const s32 anim_0640__v1_l0[] = { // 0x080F5760 + PALETTE(98, 16, 0xA0) + TILES(0x13D98, 30) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 7) + + TILES(0x13DB6, 16) + HITBOX(0, -6, -6, 6, 16) + SHOW_FRAME(1, 8) + + TILES(0x13DC6, 16) + SHOW_FRAME(1, 9) + + TILES(0x13DD6, 16) + SHOW_FRAME(6, 10) + + TILES(0x13DC6, 16) + SHOW_FRAME(1, 9) + + TILES(0x13DB6, 16) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0640[2] = { + anim_0640__v0_l0, + anim_0640__v1_l0, +}; + +const s32 anim_0641__v0_l0[] = { // 0x080F5808 + PALETTE(98, 16, 0xA0) + TILES(0x13DE6, 15) + HITBOX(0, -11, -6, 15, 7) + SHOW_FRAME(2, 0) + + TILES(0x13DF5, 15) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0641[1] = { + anim_0641__v0_l0, +}; + +const s32 anim_0642__v0_l0[] = { // 0x080F5854 + PALETTE(98, 16, 0xA0) + TILES(0x13E04, 16) + HITBOX(0, -8, -6, 8, 16) + PLAY_SOUND(132) + SHOW_FRAME(1, 0) + + TILES(0x13E14, 16) + SHOW_FRAME(1, 1) + + TILES(0x13E24, 12) + SHOW_FRAME(1, 2) + + TILES(0x13E30, 16) + SHOW_FRAME(30, 3) + + TILES(0x13E14, 16) + SHOW_FRAME(1, 1) + + TILES(0x13E04, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0642[1] = { + anim_0642__v0_l0, +}; + +const s32 anim_0643__v0_l0[] = { // 0x080F58F4 + PALETTE(98, 16, 0xA0) + TILES(0x13E40, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 0) + + TILES(0x13E54, 30) + SHOW_FRAME(2, 1) + + TILES(0x13E72, 30) + HITBOX(0, -16, -14, 0, 16) + HITBOX(1, -32, -12, -4, 16) + PLAY_SOUND(126) + SHOW_FRAME(2, 2) + + TILES(0x13E90, 35) + HITBOX(0, -16, -14, 0, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(4, 3) + + TILES(0x13E54, 30) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 1) + + TILES(0x13E40, 20) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 anim_0643__v1_l0[] = { // 0x080F59CC + PALETTE(98, 16, 0xA0) + TILES(0x13EB3, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 4) + + TILES(0x13EC7, 20) + SHOW_FRAME(2, 5) + + TILES(0x13EDB, 35) + HITBOX(0, -16, -14, 0, 16) + HITBOX(1, -32, -12, -4, 16) + PLAY_SOUND(126) + SHOW_FRAME(2, 6) + + TILES(0x13EFE, 35) + HITBOX(0, -16, -13, 0, 16) + HITBOX(1, 0, 0, 0, 0) + SHOW_FRAME(6, 7) + + TILES(0x13EC7, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(2, 5) + + TILES(0x13EB3, 20) + SHOW_FRAME(2, 4) + + END() +}; + +const s32 * const anim_0643[2] = { + anim_0643__v0_l0, + anim_0643__v1_l0, +}; + +const s32 anim_0644__v0_l0[] = { // 0x080F5AAC + PALETTE(99, 16, 0xB0) + TILES(0x13F21, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x13F35, 20) + SHOW_FRAME(3, 1) + + TILES(0x13F49, 25) + SHOW_FRAME(3, 2) + + TILES(0x13F62, 20) + SHOW_FRAME(3, 3) + + TILES(0x13F76, 25) + SHOW_FRAME(4, 4) + + TILES(0x13F8F, 25) + SHOW_FRAME(4, 5) + + JUMP_BACK(36) +}; + +const s32 * const anim_0644[1] = { + anim_0644__v0_l0, +}; + +const s32 anim_0645__v0_l0[] = { // 0x080F5B48 + PALETTE(100, 16, 0xB0) + TILES(0x13FA8, 20) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(1, 0) + + TILES(0x13FBC, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0645[1] = { + anim_0645__v0_l0, +}; + +const s32 anim_0646__v0_l0[] = { // 0x080F5B90 + PALETTE(100, 16, 0xB0) + TILES(0x13FD0, 25) + SHOW_FRAME(3, 0) + + TILES(0x13FE9, 20) + SHOW_FRAME(3, 1) + + TILES(0x13FFD, 20) + SHOW_FRAME(3, 2) + + TILES(0x14011, 20) + SHOW_FRAME(3, 3) + + TILES(0x14025, 15) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0646[1] = { + anim_0646__v0_l0, +}; + +const s32 anim_0647__v0_l0[] = { // 0x080F5C08 + PALETTE(100, 16, 0xB0) + TILES(0x14034, 20) + SHOW_FRAME(3, 0) + + TILES(0x14048, 15) + SHOW_FRAME(3, 1) + + TILES(0x14057, 15) + SHOW_FRAME(3, 2) + + TILES(0x14066, 20) + SHOW_FRAME(3, 3) + + TILES(0x1407A, 20) + SHOW_FRAME(3, 4) + + TILES(0x1408E, 16) + SHOW_FRAME(3, 5) + + END() +}; + +const s32 * const anim_0647[1] = { + anim_0647__v0_l0, +}; + +const s32 anim_0648__v0_l0[] = { // 0x080F5C94 + PALETTE(100, 16, 0xB0) + TILES(0x1409E, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x140AE, 16) + SHOW_FRAME(2, 1) + + TILES(0x140BE, 16) + SHOW_FRAME(2, 2) + + TILES(0x140CE, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 * const anim_0648[1] = { + anim_0648__v0_l0, +}; + +const s32 anim_0649__v0_l0[] = { // 0x080F5D14 + PALETTE(100, 16, 0xB0) + TILES(0x140DE, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 0) + + TILES(0x140EE, 16) + SHOW_FRAME(2, 1) + + TILES(0x140FE, 16) + SHOW_FRAME(2, 2) + + TILES(0x1410E, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(29) +}; + +const s32 anim_0649__v1_l0[] = { // 0x080F5D90 + PALETTE(100, 16, 0xB0) + TILES(0x1411E, 16) + HITBOX(0, -8, -8, 8, 8) + HITBOX(1, -8, -8, 8, 8) + SHOW_FRAME(2, 4) + + TILES(0x1412E, 16) + SHOW_FRAME(2, 5) + + TILES(0x1413E, 16) + SHOW_FRAME(2, 6) + + TILES(0x1414E, 16) + SHOW_FRAME(2, 7) + + JUMP_BACK(29) +}; + +const s32 * const anim_0649[2] = { + anim_0649__v0_l0, + anim_0649__v1_l0, +}; + +const s32 anim_0650__v0_l0[] = { // 0x080F5E14 + PALETTE(100, 16, 0xB0) + TILES(0x1415E, 24) + HITBOX(0, -12, -8, 10, 6) + HITBOX(1, -24, -10, 0, 13) + SHOW_FRAME(3, 0) + + TILES(0x14176, 24) + SHOW_FRAME(3, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0650[1] = { + anim_0650__v0_l0, +}; + +const s32 anim_0651__v0_l0[] = { // 0x080F5E6C + PALETTE(100, 16, 0xB0) + TILES(0x1418E, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0651__v1_l0[] = { // 0x080F5E9C + PALETTE(100, 16, 0xB0) + TILES(0x141A6, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0651__v2_l0[] = { // 0x080F5ECC + PALETTE(100, 16, 0xB0) + TILES(0x141BE, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0651__v3_l0[] = { // 0x080F5EFC + PALETTE(100, 16, 0xB0) + TILES(0x141D6, 24) + HITBOX(0, -12, -8, 10, 6) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0651[4] = { + anim_0651__v0_l0, + anim_0651__v1_l0, + anim_0651__v2_l0, + anim_0651__v3_l0, +}; + +const s32 anim_0652__v0_l0[] = { // 0x080F5F3C + PALETTE(100, 16, 0xB0) + TILES(0x141EE, 20) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 0) + + TILES(0x14202, 25) + SHOW_FRAME(3, 1) + + TILES(0x1421B, 30) + SHOW_FRAME(3, 2) + + TILES(0x14239, 30) + SHOW_FRAME(3, 3) + + TILES(0x14257, 30) + SHOW_FRAME(3, 4) + + TILES(0x14275, 30) + SHOW_FRAME(3, 5) + + TILES(0x14293, 30) + SHOW_FRAME(3, 6) + + END() +}; + +const s32 anim_0652__v1_l0[] = { // 0x080F5FE4 + PALETTE(100, 16, 0xB0) + TILES(0x142B1, 30) + HITBOX(0, -6, -16, 6, 14) + SHOW_FRAME(3, 7) + + TILES(0x142CF, 16) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(1, 8) + + TILES(0x142DF, 16) + SHOW_FRAME(1, 9) + + TILES(0x142EF, 16) + SHOW_FRAME(6, 10) + + TILES(0x142DF, 16) + SHOW_FRAME(1, 9) + + TILES(0x142CF, 16) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0652[2] = { + anim_0652__v0_l0, + anim_0652__v1_l0, +}; + +const s32 anim_0653__v0_l0[] = { // 0x080F608C + PALETTE(100, 16, 0xB0) + TILES(0x142FF, 15) + HITBOX(0, -11, -6, 15, 7) + SHOW_FRAME(2, 0) + + TILES(0x1430E, 15) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0653[1] = { + anim_0653__v0_l0, +}; + +const s32 anim_0654__v0_l0[] = { // 0x080F60D8 + PALETTE(99, 16, 0xB0) + TILES(0x1431D, 16) + HITBOX(0, -8, -6, 8, 16) + PLAY_SOUND(132) + SHOW_FRAME(1, 0) + + TILES(0x1432D, 16) + SHOW_FRAME(1, 1) + + TILES(0x1433D, 12) + SHOW_FRAME(1, 2) + + TILES(0x14349, 16) + SHOW_FRAME(30, 3) + + TILES(0x1432D, 16) + SHOW_FRAME(1, 1) + + TILES(0x1431D, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0654[1] = { + anim_0654__v0_l0, +}; + +const s32 anim_0655__v0_l0[] = { // 0x080F6178 + PALETTE(100, 16, 0xB0) + TILES(0x14359, 16) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(4, 0) + + TILES(0x14369, 16) + SHOW_FRAME(6, 1) + + TILES(0x14379, 24) + SHOW_FRAME(18, 2) + + END() +}; + +const s32 anim_0655__v1_l0[] = { // 0x080F61D0 + PALETTE(100, 16, 0xB0) + TILES(0x14391, 25) + HITBOX(0, -6, -14, 6, 16) + SHOW_FRAME(12, 3) + + TILES(0x143AA, 25) + SHOW_FRAME(4, 4) + + TILES(0x143C3, 20) + SHOW_FRAME(4, 5) + + TILES(0x143D7, 25) + SHOW_FRAME(6, 6) + + TILES(0x143F0, 20) + SHOW_FRAME(10, 7) + + END() +}; + +const s32 * const anim_0655[2] = { + anim_0655__v0_l0, + anim_0655__v1_l0, +}; + +const s32 anim_0656__v0_l0[] = { // 0x080F6258 + PALETTE(101, 16, 0xC0) + TILES(0x14404, 64) + HITBOX(0, -21, -5, 8, 5) + SHOW_FRAME(2, 0) + + TILES(0x14444, 64) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0656[1] = { + anim_0656__v0_l0, +}; + +const s32 anim_0657__v0_l0[] = { // 0x080F62A4 + PALETTE(100, 16, 0xB0) + TILES(0x14484, 64) + SHOW_FRAME(3, 0) + + TILES(0x144C4, 64) + SHOW_FRAME(3, 1) + + TILES(0x14504, 64) + SHOW_FRAME(3, 2) + + TILES(0x14544, 64) + SHOW_FRAME(3, 3) + + JUMP_BACK(23) +}; + +const s32 anim_0657__v1_l0[] = { // 0x080F6308 + PALETTE(100, 16, 0xB0) + TILES(0x14584, 15) + SHOW_FRAME(3, 4) + + TILES(0x14593, 15) + SHOW_FRAME(3, 5) + + END() +}; + +const s32 * const anim_0657[2] = { + anim_0657__v0_l0, + anim_0657__v1_l0, +}; + +const s32 anim_0658__v0_l0[] = { // 0x080F6348 + PALETTE(100, 16, 0xB0) + TILES(0x145A2, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0658__v1_l0[] = { // 0x080F636C + PALETTE(100, 16, 0xB0) + TILES(0x145B2, 16) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0658__v2_l0[] = { // 0x080F6390 + PALETTE(100, 16, 0xB0) + TILES(0x145C2, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0658__v3_l0[] = { // 0x080F63B4 + PALETTE(100, 16, 0xB0) + TILES(0x145D2, 16) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0658__v4_l0[] = { // 0x080F63D8 + PALETTE(100, 16, 0xB0) + TILES(0x145E2, 16) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0658__v5_l0[] = { // 0x080F63FC + PALETTE(100, 16, 0xB0) + TILES(0x145F2, 16) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 * const anim_0658[6] = { + anim_0658__v0_l0, + anim_0658__v1_l0, + anim_0658__v2_l0, + anim_0658__v3_l0, + anim_0658__v4_l0, + anim_0658__v5_l0, +}; + +const s32 anim_0659__v0_l0[] = { // 0x080F6438 + PALETTE(102, 16, 0xB0) + TILES(0x14602, 16) + HITBOX(0, -13, -13, 13, 13) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0659[1] = { + anim_0659__v0_l0, +}; + +const s32 anim_0660__v0_l0[] = { // 0x080F646C + PALETTE(103, 16, 0x80) + TILES(0x14612, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0660__v1_l0[] = { // 0x080F6490 + PALETTE(103, 16, 0x80) + TILES(0x1461A, 8) + SHOW_FRAME(6, 1) + + TILES(0x14622, 8) + SHOW_FRAME(6, 2) + + TILES(0x1461A, 8) + SHOW_FRAME(6, 1) + + TILES(0x14622, 8) + SHOW_FRAME(6, 2) + + TILES(0x1461A, 8) + SHOW_FRAME(6, 1) + + TILES(0x14622, 8) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0660__v2_l0[] = { // 0x080F6518 + PALETTE(103, 16, 0x80) + TILES(0x1462A, 8) + SHOW_FRAME(5, 3) + + TILES(0x14632, 8) + SHOW_FRAME(3, 4) + + TILES(0x1462A, 8) + SHOW_FRAME(5, 3) + + TILES(0x14632, 8) + SHOW_FRAME(3, 4) + + TILES(0x1462A, 8) + SHOW_FRAME(5, 3) + + TILES(0x14632, 8) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 anim_0660__v3_l0[] = { // 0x080F65A0 + PALETTE(103, 16, 0x80) + TILES(0x1463A, 8) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0660__v4_l0[] = { // 0x080F65C4 + PALETTE(103, 16, 0x80) + TILES(0x14642, 8) + SHOW_FRAME(6, 6) + + TILES(0x1464A, 8) + SHOW_FRAME(6, 7) + + TILES(0x14642, 8) + SHOW_FRAME(6, 6) + + TILES(0x1464A, 8) + SHOW_FRAME(6, 7) + + TILES(0x14642, 8) + SHOW_FRAME(6, 6) + + TILES(0x1464A, 8) + SHOW_FRAME(6, 7) + + END() +}; + +const s32 anim_0660__v5_l0[] = { // 0x080F664C + PALETTE(103, 16, 0x80) + TILES(0x14652, 8) + SHOW_FRAME(5, 8) + + TILES(0x1465A, 8) + SHOW_FRAME(3, 9) + + TILES(0x14652, 8) + SHOW_FRAME(5, 8) + + TILES(0x1465A, 8) + SHOW_FRAME(3, 9) + + TILES(0x14652, 8) + SHOW_FRAME(5, 8) + + TILES(0x1465A, 8) + SHOW_FRAME(3, 9) + + END() +}; + +const s32 * const anim_0660[6] = { + anim_0660__v0_l0, + anim_0660__v1_l0, + anim_0660__v2_l0, + anim_0660__v3_l0, + anim_0660__v4_l0, + anim_0660__v5_l0, +}; + +const s32 anim_0661__v0_l0[] = { // 0x080F66EC + PALETTE(104, 16, 0xA0) + TILES(0x14662, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0661[1] = { + anim_0661__v0_l0, +}; + +const s32 anim_0662__v0_l0[] = { // 0x080F6714 + PALETTE(104, 16, 0xA0) + TILES(0x14666, 48) + HITBOX(0, 0, 0, 0, 0) + HITBOX(1, -24, -24, 24, 24) + SHOW_FRAME(4, 0) + + TILES(0x14666, 48) + SHOW_FRAME(4, 1) + + END() +}; + +const s32 anim_0662__v1_l0[] = { // 0x080F6764 + PALETTE(104, 16, 0xA0) + TILES(0x14696, 48) + HITBOX(0, 0, 0, 0, 0) + HITBOX(1, -24, -24, 24, 24) + SHOW_FRAME(4, 2) + + TILES(0x14696, 48) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 anim_0662__v2_l0[] = { // 0x080F67B4 + PALETTE(104, 16, 0xA0) + TILES(0x146C6, 48) + HITBOX(0, -18, -32, 18, -12) + HITBOX(1, -24, -24, 24, 24) + SHOW_FRAME(5, 4) + + END() +}; + +const s32 anim_0662__v3_l0[] = { // 0x080F67F0 + PALETTE(104, 16, 0xA0) + TILES(0x146C6, 48) + HITBOX(0, 0, 0, 0, 0) + HITBOX(1, -24, -24, 24, 24) + SHOW_FRAME(5, 5) + + END() +}; + +const s32 * const anim_0662[4] = { + anim_0662__v0_l0, + anim_0662__v1_l0, + anim_0662__v2_l0, + anim_0662__v3_l0, +}; + +const s32 anim_0663__v0_l0[] = { // 0x080F683C + PALETTE(104, 16, 0xA0) + TILES(0x146F6, 6) + SHOW_FRAME(4, 0) + + TILES(0x146FC, 6) + SHOW_FRAME(4, 1) + + END() +}; + +const s32 * const anim_0663[1] = { + anim_0663__v0_l0, +}; + +const s32 anim_0664__v0_l0[] = { // 0x080F6878 + PALETTE(102, 16, 0xB0) + TILES(0x14702, 4) + HITBOX(0, -3, -3, 3, 3) + SHOW_FRAME(1, 0) + + TILES(0x14706, 4) + SHOW_FRAME(1, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0664[1] = { + anim_0664__v0_l0, +}; + +const s32 anim_0665__v0_l0[] = { // 0x080F68C4 + PALETTE(105, 16, 0xB0) + TILES(0x1470A, 64) + HITBOX(0, -16, -24, 12, -4) + HITBOX(1, -16, -24, 12, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0665__v1_l0[] = { // 0x080F6900 + PALETTE(105, 16, 0xB0) + TILES(0x1474A, 64) + HITBOX(0, -16, -24, 12, -4) + HITBOX(1, -16, -24, 12, 12) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0665[2] = { + anim_0665__v0_l0, + anim_0665__v1_l0, +}; + +const s32 anim_0666__v0_l0[] = { // 0x080F6944 + PALETTE(106, 16, 0xA0) + TILES(0x80000000, 72) + HITBOX(0, 0, 0, 0, 0) + HITBOX(1, -24, -28, 24, 44) + SHOW_FRAME(4, 0) + + TILES(0x80000048, 72) + SHOW_FRAME(4, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0666[1] = { + anim_0666__v0_l0, +}; + +const s32 anim_0667__v0_l0[] = { // 0x080F699C + PALETTE(106, 16, 0xA0) + TILES(0x1478A, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0667__v1_l0[] = { // 0x080F69C0 + PALETTE(106, 16, 0xA0) + TILES(0x1479A, 16) + SHOW_FRAME(1, 1) + + JUMP_BACK(8) +}; + +const s32 anim_0667__v2_l0[] = { // 0x080F69E8 + PALETTE(106, 16, 0xA0) + TILES(0x147AA, 16) + HITBOX(1, -11, 0, 11, 9) + SHOW_FRAME(4, 2) + + TILES(0x147BA, 16) + SHOW_FRAME(4, 3) + + JUMP_BACK(16) +}; + +const s32 anim_0667__v3_l0[] = { // 0x080F6A30 + TILES(0x147CA, 16) + HITBOX(1, -14, 0, 7, 9) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0667[4] = { + anim_0667__v0_l0, + anim_0667__v1_l0, + anim_0667__v2_l0, + anim_0667__v3_l0, +}; + +const s32 anim_0668__v0_l0[] = { // 0x080F6A64 + PALETTE(106, 16, 0xA0) + TILES(0x147DA, 64) + SHOW_FRAME(4, 0) + + TILES(0x1481A, 64) + SHOW_FRAME(4, 1) + + JUMP_BACK(13) +}; + +const s32 anim_0668__v1_l0[] = { // 0x080F6AA0 + PALETTE(106, 16, 0xA0) + TILES(0x1485A, 64) + SHOW_FRAME(4, 2) + + TILES(0x1489A, 64) + SHOW_FRAME(4, 3) + + JUMP_BACK(13) +}; + +const s32 * const anim_0668[2] = { + anim_0668__v0_l0, + anim_0668__v1_l0, +}; + +const s32 anim_0669__v0_l0[] = { // 0x080F6AE4 + PALETTE(106, 16, 0xA0) + TILES(0x148DA, 9) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0669[1] = { + anim_0669__v0_l0, +}; + +const s32 anim_0670__v0_l0[] = { // 0x080F6B0C + PALETTE(106, 16, 0xA0) + TILES(0x148E3, 3) + HITBOX(0, 0, -8, 8, 8) + HITBOX(1, 0, -8, 8, 8) + SHOW_FRAME(4, 0) + + TILES(0x148E6, 3) + SHOW_FRAME(4, 1) + + END() +}; + +const s32 anim_0670__v1_l0[] = { // 0x080F6B5C + PALETTE(106, 16, 0xA0) + TILES(0x148E9, 8) + SHOW_FRAME(4, 2) + + TILES(0x148F1, 8) + SHOW_FRAME(4, 3) + + JUMP_BACK(13) +}; + +const s32 anim_0670__v2_l0[] = { // 0x080F6B98 + PALETTE(106, 16, 0xA0) + TILES(0x148E3, 3) + HITBOX(0, 0, -8, 8, 8) + HITBOX(1, 0, -8, 8, 8) + SHOW_FRAME(3, 0) + + TILES(0x148E6, 3) + SHOW_FRAME(3, 1) + + TILES(0x148F9, 6) + SHOW_FRAME(3, 4) + + TILES(0x148FF, 6) + SHOW_FRAME(3, 5) + + TILES(0x14905, 8) + SHOW_FRAME(3, 6) + + TILES(0x1490D, 8) + SHOW_FRAME(3, 7) + + TILES(0x148F9, 6) + SHOW_FRAME(3, 4) + + TILES(0x148FF, 6) + SHOW_FRAME(3, 5) + + JUMP_BACK(49) +}; + +const s32 anim_0670__v3_l0[] = { // 0x080F6C64 + PALETTE(106, 16, 0xA0) + TILES(0x148F9, 6) + SHOW_FRAME(4, 4) + + TILES(0x148FF, 6) + SHOW_FRAME(4, 5) + + TILES(0x14905, 8) + SHOW_FRAME(4, 6) + + TILES(0x1490D, 8) + SHOW_FRAME(4, 7) + + END() +}; + +const s32 * const anim_0670[4] = { + anim_0670__v0_l0, + anim_0670__v1_l0, + anim_0670__v2_l0, + anim_0670__v3_l0, +}; + +const s32 anim_0671__v0_l0[] = { // 0x080F6CD4 + PALETTE(106, 16, 0xA0) + TILES(0x14915, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0671[1] = { + anim_0671__v0_l0, +}; + +const s32 anim_0672__v0_l0[] = { // 0x080F6CFC + PALETTE(106, 16, 0xC0) + TILES(0x14919, 4) + HITBOX(0, -7, -14, 7, 3) + HITBOX(1, -7, -14, 7, 3) + PLAY_SOUND(162) + SHOW_FRAME(3, 0) + + TILES(0x1491D, 12) + HITBOX(0, -7, -46, 7, 2) + HITBOX(1, -7, -46, 7, 2) + SHOW_FRAME(3, 1) + + TILES(0x14929, 24) + HITBOX(0, -7, -92, 7, 3) + HITBOX(1, -7, -92, 7, 3) + SHOW_FRAME(3, 2) + + TILES(0x14941, 24) + HITBOX(0, -6, -92, 6, -30) + HITBOX(1, -6, -92, 6, -30) + SHOW_FRAME(3, 3) + + TILES(0x14959, 22) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0672[1] = { + anim_0672__v0_l0, +}; + +const s32 anim_0673__v0_l0[] = { // 0x080F6DDC + PALETTE(105, 16, 0xB0) + TILES(0x1496F, 64) + HITBOX(0, 0, 0, 0, 0) + HITBOX(1, -7, -7, 7, 7) + SHOW_FRAME(3, 0) + + TILES(0x149AF, 64) + SHOW_FRAME(3, 1) + + TILES(0x1496F, 64) + SHOW_FRAME(3, 2) + + JUMP_BACK(24) +}; + +const s32 * const anim_0673[1] = { + anim_0673__v0_l0, +}; + +const s32 anim_0674__v0_l0[] = { // 0x080F6E48 + PALETTE(105, 16, 0xB0) + TILES(0x149EF, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0674[1] = { + anim_0674__v0_l0, +}; + +const s32 anim_0675__v0_l0[] = { // 0x080F6E70 + PALETTE(106, 16, 0xC0) + TILES(0x149F3, 4) + HITBOX(0, -5, -5, 5, 5) + HITBOX(1, -5, -5, 5, 5) + SHOW_FRAME(3, 0) + + TILES(0x149F7, 4) + SHOW_FRAME(3, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0675[1] = { + anim_0675__v0_l0, +}; + +const s32 anim_0676__v0_l0[] = { // 0x080F6EC8 + PALETTE(107, 16, 0xF0) + TILES(0x149FB, 16) + HITBOX(0, -10, -10, 10, 10) + HITBOX(1, -12, -12, 12, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0676[1] = { + anim_0676__v0_l0, +}; + +const s32 anim_0677__v0_l0[] = { // 0x080F6F08 + PALETTE(107, 16, 0xF0) + TILES(0x14A0B, 4) + HITBOX(0, -6, -6, 6, 6) + HITBOX(1, -6, -6, 6, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0677[1] = { + anim_0677__v0_l0, +}; + +const s32 anim_0678__v0_l0[] = { // 0x080F6F48 + PALETTE(107, 16, 0xF0) + TILES(0x14A0F, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0678[1] = { + anim_0678__v0_l0, +}; + +const s32 anim_0679__v0_l0[] = { // 0x080F6F70 + PALETTE(108, 16, 0xA0) + TILES(0x14A10, 16) + HITBOX(0, -49, 2, -28, 23) + SHOW_FRAME(4, 0) + + TILES(0x14A20, 16) + SHOW_FRAME(4, 1) + + TILES(0x14A10, 16) + SHOW_FRAME(4, 2) + + JUMP_BACK(21) +}; + +const s32 * const anim_0679[1] = { + anim_0679__v0_l0, +}; + +const s32 anim_0680__v0_l0[] = { // 0x080F6FD0 + PALETTE(90, 16, 0x80) + TILES(0x14A30, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0680__v1_l0[] = { // 0x080F6FF4 + PALETTE(90, 16, 0x80) + TILES(0x14A38, 8) + SHOW_FRAME(6, 1) + + TILES(0x14A40, 8) + SHOW_FRAME(6, 2) + + TILES(0x14A38, 8) + SHOW_FRAME(6, 1) + + TILES(0x14A40, 8) + SHOW_FRAME(6, 2) + + TILES(0x14A38, 8) + SHOW_FRAME(6, 1) + + TILES(0x14A40, 8) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0680__v2_l0[] = { // 0x080F707C + PALETTE(90, 16, 0x80) + TILES(0x14A48, 8) + SHOW_FRAME(5, 3) + + TILES(0x14A50, 8) + SHOW_FRAME(3, 4) + + TILES(0x14A48, 8) + SHOW_FRAME(5, 3) + + TILES(0x14A50, 8) + SHOW_FRAME(3, 4) + + TILES(0x14A48, 8) + SHOW_FRAME(5, 3) + + TILES(0x14A50, 8) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0680[3] = { + anim_0680__v0_l0, + anim_0680__v1_l0, + anim_0680__v2_l0, +}; + +const s32 anim_0681__v0_l0[] = { // 0x080F7110 + PALETTE(108, 16, 0xA0) + TILES(0x14A58, 16) + SHOW_FRAME(4, 0) + + TILES(0x14A68, 16) + SHOW_FRAME(4, 1) + + JUMP_BACK(13) +}; + +const s32 anim_0681__v1_l0[] = { // 0x080F714C + PALETTE(108, 16, 0xA0) + TILES(0x14A78, 16) + SHOW_FRAME(4, 2) + + TILES(0x14A88, 16) + SHOW_FRAME(4, 3) + + JUMP_BACK(13) +}; + +const s32 anim_0681__v2_l0[] = { // 0x080F7188 + PALETTE(108, 16, 0xA0) + TILES(0x14A98, 16) + SHOW_FRAME(4, 4) + + TILES(0x14AA8, 16) + SHOW_FRAME(4, 5) + + JUMP_BACK(13) +}; + +const s32 anim_0681__v3_l0[] = { // 0x080F71C4 + PALETTE(108, 16, 0xA0) + TILES(0x14AB8, 16) + SHOW_FRAME(4, 6) + + TILES(0x14AC8, 16) + SHOW_FRAME(4, 7) + + JUMP_BACK(13) +}; + +const s32 * const anim_0681[4] = { + anim_0681__v0_l0, + anim_0681__v1_l0, + anim_0681__v2_l0, + anim_0681__v3_l0, +}; + +const s32 anim_0682__v0_l0[] = { // 0x080F7210 + PALETTE(108, 16, 0xA0) + TILES(0x14AD8, 54) + HITBOX(0, -28, -14, 26, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0682[1] = { + anim_0682__v0_l0, +}; + +const s32 anim_0683__v0_l0[] = { // 0x080F7244 + PALETTE(109, 16, 0xB0) + TILES(0x14B0E, 4) + SHOW_FRAME(3, 0) + + TILES(0x14B12, 2) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 anim_0683__v1_l0[] = { // 0x080F7280 + PALETTE(109, 16, 0xB0) + TILES(0x14B14, 2) + SHOW_FRAME(6, 2) + + TILES(0x14B16, 2) + SHOW_FRAME(6, 3) + + JUMP_BACK(13) +}; + +const s32 anim_0683__v2_l0[] = { // 0x080F72BC + PALETTE(109, 16, 0xA0) + TILES(0x14B18, 4) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0683[3] = { + anim_0683__v0_l0, + anim_0683__v1_l0, + anim_0683__v2_l0, +}; + +const s32 anim_0684__v0_l0[] = { // 0x080F72EC + PALETTE(109, 16, 0xB0) + TILES(0x14B1C, 30) + HITBOX(0, -20, -18, 22, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0684[1] = { + anim_0684__v0_l0, +}; + +const s32 anim_0685__v0_l0[] = { // 0x080F7320 + PALETTE(110, 16, 0x90) + TILES(0x14B3A, 16) + HITBOX(0, -14, -14, 14, 14) + SHOW_FRAME(2, 0) + + TILES(0x14B4A, 16) + SHOW_FRAME(2, 1) + + JUMP_BACK(16) +}; + +const s32 * const anim_0685[1] = { + anim_0685__v0_l0, +}; + +const s32 anim_0686__v0_l0[] = { // 0x080F736C + PALETTE(90, 16, 0x80) + TILES(0x14B5A, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0686__v1_l0[] = { // 0x080F7390 + PALETTE(90, 16, 0x80) + TILES(0x14B62, 8) + SHOW_FRAME(6, 1) + + TILES(0x14B6A, 8) + SHOW_FRAME(6, 2) + + TILES(0x14B62, 8) + SHOW_FRAME(6, 1) + + TILES(0x14B6A, 8) + SHOW_FRAME(6, 2) + + TILES(0x14B62, 8) + SHOW_FRAME(6, 1) + + TILES(0x14B6A, 8) + SHOW_FRAME(6, 2) + + END() +}; + +const s32 anim_0686__v2_l0[] = { // 0x080F7418 + PALETTE(90, 16, 0x80) + TILES(0x14B72, 8) + SHOW_FRAME(5, 3) + + TILES(0x14B7A, 8) + SHOW_FRAME(3, 4) + + TILES(0x14B72, 8) + SHOW_FRAME(5, 3) + + TILES(0x14B7A, 8) + SHOW_FRAME(3, 4) + + TILES(0x14B72, 8) + SHOW_FRAME(5, 3) + + TILES(0x14B7A, 8) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0686[3] = { + anim_0686__v0_l0, + anim_0686__v1_l0, + anim_0686__v2_l0, +}; + +const s32 anim_0687__v0_l0[] = { // 0x080F74AC + PALETTE(111, 16, 0xF0) + TILES(0x14B82, 42) + HITBOX(0, -18, -27, 17, -14) + HITBOX(1, -22, -16, 24, 31) + SHOW_FRAME(5, 0) + + TILES(0x14BAC, 42) + SHOW_FRAME(5, 1) + + JUMP_BACK(19) +}; + +const s32 * const anim_0687[1] = { + anim_0687__v0_l0, +}; + +const s32 anim_0688__v0_l0[] = { // 0x080F7504 + PALETTE(112, 16, 0xE0) + TILES(0x14BD6, 12) + HITBOX(0, -28, -12, 28, 12) + SHOW_FRAME(4, 0) + + TILES(0x14BE2, 12) + SHOW_FRAME(4, 1) + + TILES(0x14BEE, 12) + SHOW_FRAME(4, 2) + + TILES(0x14BFA, 12) + SHOW_FRAME(4, 3) + + TILES(0x14C06, 12) + SHOW_FRAME(4, 4) + + TILES(0x14C12, 12) + SHOW_FRAME(4, 5) + + TILES(0x14C1E, 12) + SHOW_FRAME(4, 6) + + TILES(0x14C2A, 12) + SHOW_FRAME(4, 7) + + TILES(0x14C36, 12) + SHOW_FRAME(4, 8) + + TILES(0x14C42, 12) + SHOW_FRAME(4, 9) + + TILES(0x14C4E, 12) + SHOW_FRAME(4, 10) + + TILES(0x14C5A, 12) + SHOW_FRAME(4, 11) + + JUMP_BACK(66) +}; + +const s32 anim_0688__v1_l0[] = { // 0x080F7614 + PALETTE(112, 16, 0xE0) + TILES(0x14C66, 12) + SHOW_FRAME(4, 12) + + TILES(0x14C72, 12) + SHOW_FRAME(4, 13) + + TILES(0x14C7E, 12) + SHOW_FRAME(4, 14) + + TILES(0x14C8A, 12) + SHOW_FRAME(4, 15) + + TILES(0x14C96, 12) + SHOW_FRAME(4, 16) + + TILES(0x14CA2, 12) + SHOW_FRAME(4, 17) + + TILES(0x14CAE, 12) + SHOW_FRAME(4, 18) + + TILES(0x14CBA, 12) + SHOW_FRAME(4, 19) + + TILES(0x14CC6, 12) + SHOW_FRAME(4, 20) + + TILES(0x14CD2, 12) + SHOW_FRAME(4, 21) + + TILES(0x14CDE, 12) + SHOW_FRAME(4, 22) + + TILES(0x14CEA, 12) + SHOW_FRAME(4, 23) + + JUMP_BACK(63) +}; + +const s32 anim_0688__v2_l0[] = { // 0x080F7718 + PALETTE(112, 16, 0xE0) + TILES(0x14CF6, 12) + HITBOX(0, -28, -12, 28, 12) + SHOW_FRAME(4, 24) + + END() +}; + +const s32 anim_0688__v3_l0[] = { // 0x080F7748 + PALETTE(112, 16, 0xE0) + TILES(0x14C8A, 12) + SHOW_FRAME(4, 15) + + END() +}; + +const s32 anim_0688__v4_l0[] = { // 0x080F776C + PALETTE(112, 16, 0xE0) + TILES(0x14D02, 12) + HITBOX(0, -28, -12, 28, 12) + SHOW_FRAME(4, 25) + + END() +}; + +const s32 anim_0688__v5_l0[] = { // 0x080F779C + PALETTE(112, 16, 0xE0) + TILES(0x14CBA, 12) + SHOW_FRAME(4, 19) + + END() +}; + +const s32 anim_0688__v6_l0[] = { // 0x080F77C0 + PALETTE(112, 16, 0xE0) + TILES(0x14D0E, 12) + HITBOX(0, -28, -12, 28, 12) + SHOW_FRAME(4, 26) + + END() +}; + +const s32 anim_0688__v7_l0[] = { // 0x080F77F0 + PALETTE(112, 16, 0xE0) + TILES(0x14CEA, 12) + SHOW_FRAME(4, 23) + + END() +}; + +const s32 anim_0688__v8_l0[] = { // 0x080F7814 + PALETTE(112, 16, 0xE0) + TILES(0x14C06, 12) + HITBOX(0, -28, -12, 28, 12) + SHOW_FRAME(4, 4) + + TILES(0x14C12, 12) + SHOW_FRAME(4, 5) + + TILES(0x14C1E, 12) + SHOW_FRAME(4, 6) + + TILES(0x14C2A, 12) + SHOW_FRAME(4, 7) + + END() +}; + +const s32 anim_0688__v9_l0[] = { // 0x080F7880 + PALETTE(112, 16, 0xE0) + TILES(0x14BD6, 12) + HITBOX(0, -28, -12, 28, 12) + SHOW_FRAME(4, 0) + + TILES(0x14BE2, 12) + SHOW_FRAME(4, 1) + + TILES(0x14BEE, 12) + SHOW_FRAME(4, 2) + + TILES(0x14BFA, 12) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 anim_0688__v10_l0[] = { // 0x080F78EC + PALETTE(112, 16, 0xE0) + TILES(0x14C36, 12) + HITBOX(0, -28, -12, 28, 12) + SHOW_FRAME(4, 8) + + TILES(0x14C42, 12) + SHOW_FRAME(4, 9) + + TILES(0x14C4E, 12) + SHOW_FRAME(4, 10) + + TILES(0x14C5A, 12) + SHOW_FRAME(4, 11) + + END() +}; + +const s32 anim_0688__v11_l0[] = { // 0x080F7958 + PALETTE(112, 16, 0xE0) + TILES(0x14C96, 12) + SHOW_FRAME(4, 16) + + TILES(0x14CA2, 12) + SHOW_FRAME(4, 17) + + TILES(0x14CAE, 12) + SHOW_FRAME(4, 18) + + TILES(0x14CBA, 12) + SHOW_FRAME(4, 19) + + END() +}; + +const s32 anim_0688__v12_l0[] = { // 0x080F79B8 + PALETTE(112, 16, 0xE0) + TILES(0x14C66, 12) + SHOW_FRAME(4, 12) + + TILES(0x14C72, 12) + SHOW_FRAME(4, 13) + + TILES(0x14C7E, 12) + SHOW_FRAME(4, 14) + + TILES(0x14C8A, 12) + SHOW_FRAME(4, 15) + + END() +}; + +const s32 anim_0688__v13_l0[] = { // 0x080F7A18 + PALETTE(112, 16, 0xE0) + TILES(0x14CC6, 12) + SHOW_FRAME(4, 20) + + TILES(0x14CD2, 12) + SHOW_FRAME(4, 21) + + TILES(0x14CDE, 12) + SHOW_FRAME(4, 22) + + TILES(0x14CEA, 12) + SHOW_FRAME(4, 23) + + END() +}; + +const s32 anim_0688__v14_l0[] = { // 0x080F7A78 + PALETTE(112, 16, 0xE0) + TILES(0x14C2A, 12) + SHOW_FRAME(4, 7) + + END() +}; + +const s32 anim_0688__v15_l0[] = { // 0x080F7A9C + PALETTE(112, 16, 0xE0) + TILES(0x14BFA, 12) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 anim_0688__v16_l0[] = { // 0x080F7AC0 + PALETTE(112, 16, 0xE0) + TILES(0x14C5A, 12) + SHOW_FRAME(4, 11) + + END() +}; + +const s32 anim_0688__v17_l0[] = { // 0x080F7AE4 + PALETTE(112, 16, 0xE0) + TILES(0x14CBA, 12) + SHOW_FRAME(4, 19) + + END() +}; + +const s32 anim_0688__v18_l0[] = { // 0x080F7B08 + PALETTE(112, 16, 0xE0) + TILES(0x14C8A, 12) + SHOW_FRAME(4, 15) + + END() +}; + +const s32 anim_0688__v19_l0[] = { // 0x080F7B2C + PALETTE(112, 16, 0xE0) + TILES(0x14CEA, 12) + SHOW_FRAME(4, 23) + + END() +}; + +const s32 * const anim_0688[20] = { + anim_0688__v0_l0, + anim_0688__v1_l0, + anim_0688__v2_l0, + anim_0688__v3_l0, + anim_0688__v4_l0, + anim_0688__v5_l0, + anim_0688__v6_l0, + anim_0688__v7_l0, + anim_0688__v8_l0, + anim_0688__v9_l0, + anim_0688__v10_l0, + anim_0688__v11_l0, + anim_0688__v12_l0, + anim_0688__v13_l0, + anim_0688__v14_l0, + anim_0688__v15_l0, + anim_0688__v16_l0, + anim_0688__v17_l0, + anim_0688__v18_l0, + anim_0688__v19_l0, +}; + +const s32 anim_0689__v0_l0[] = { // 0x080F7BA0 + PALETTE(113, 16, 0xE0) + TILES(0x14D1A, 64) + HITBOX(0, -10, -10, 20, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0689__v1_l0[] = { // 0x080F7BD0 + PALETTE(113, 16, 0xE0) + TILES(0x14D5A, 64) + HITBOX(0, -6, -6, 6, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0689__v2_l0[] = { // 0x080F7C00 + PALETTE(113, 16, 0xE0) + TILES(0x14D9A, 64) + SHOW_FRAME(5, 2) + + TILES(0x14DDA, 64) + SHOW_FRAME(5, 3) + + END() +}; + +const s32 * const anim_0689[3] = { + anim_0689__v0_l0, + anim_0689__v1_l0, + anim_0689__v2_l0, +}; + +const s32 anim_0690__v0_l0[] = { // 0x080F7C44 + PALETTE(113, 16, 0xE0) + TILES(0x14E1A, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0690__v1_l0[] = { // 0x080F7C68 + PALETTE(113, 16, 0xE0) + TILES(0x14E1E, 4) + HITBOX(0, -7, -7, 7, 7) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0690[2] = { + anim_0690__v0_l0, + anim_0690__v1_l0, +}; + +const s32 anim_0691__v0_l0[] = { // 0x080F7CA0 + PALETTE(90, 16, 0x80) + TILES(0x14E22, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0691__v1_l0[] = { // 0x080F7CC4 + PALETTE(90, 16, 0x80) + TILES(0x14E22, 8) + SHOW_FRAME(15, 0) + + PALETTE(90, 16, 0x80) + TILES(0x14E2A, 12) + SHOW_FRAME(4, 1) + + TILES(0x14E36, 12) + SHOW_FRAME(8, 2) + + TILES(0x14E2A, 12) + SHOW_FRAME(4, 1) + + TILES(0x14E36, 12) + SHOW_FRAME(8, 2) + + TILES(0x14E2A, 12) + SHOW_FRAME(4, 1) + + TILES(0x14E36, 12) + SHOW_FRAME(8, 2) + + TILES(0x14E2A, 12) + SHOW_FRAME(4, 1) + + TILES(0x14E36, 12) + SHOW_FRAME(8, 2) + + TILES(0x14E2A, 12) + SHOW_FRAME(4, 1) + + TILES(0x14E36, 12) + SHOW_FRAME(8, 2) + + END() +}; + +const s32 anim_0691__v2_l0[] = { // 0x080F7DBC + PALETTE(90, 16, 0x80) + TILES(0x14E42, 8) + SHOW_FRAME(5, 3) + + TILES(0x14E4A, 8) + SHOW_FRAME(3, 4) + + TILES(0x14E42, 8) + SHOW_FRAME(5, 3) + + TILES(0x14E4A, 8) + SHOW_FRAME(3, 4) + + TILES(0x14E42, 8) + SHOW_FRAME(5, 3) + + TILES(0x14E4A, 8) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 anim_0691__v3_l0[] = { // 0x080F7E44 + PALETTE(90, 16, 0x80) + TILES(0x14E52, 8) + SHOW_FRAME(6, 5) + + TILES(0x14E5A, 8) + SHOW_FRAME(6, 6) + + TILES(0x14E52, 8) + SHOW_FRAME(6, 5) + + TILES(0x14E5A, 8) + SHOW_FRAME(6, 6) + + TILES(0x14E52, 8) + SHOW_FRAME(6, 5) + + TILES(0x14E5A, 8) + SHOW_FRAME(6, 6) + + END() +}; + +const s32 * const anim_0691[4] = { + anim_0691__v0_l0, + anim_0691__v1_l0, + anim_0691__v2_l0, + anim_0691__v3_l0, +}; + +const s32 anim_0692__v0_l0[] = { // 0x080F7EDC + PALETTE(113, 16, 0xE0) + TILES(0x14E62, 16) + HITBOX(0, -13, -13, 13, 13) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0692[1] = { + anim_0692__v0_l0, +}; + +const s32 anim_0693__v0_l0[] = { // 0x080F7F10 + PALETTE(114, 16, 0xC0) + TILES(0x14E72, 30) + SHOW_FRAME(3, 0) + + TILES(0x14E90, 30) + SHOW_FRAME(2, 1) + + JUMP_BACK(13) +}; + +const s32 anim_0693__v1_l0[] = { // 0x080F7F4C + PALETTE(114, 16, 0xC0) + TILES(0x14EAE, 30) + SHOW_FRAME(3, 2) + + TILES(0x14ECC, 30) + SHOW_FRAME(2, 3) + + TILES(0x14EAE, 30) + SHOW_FRAME(3, 4) + + TILES(0x14ECC, 30) + SHOW_FRAME(2, 5) + + END() +}; + +const s32 * const anim_0693[2] = { + anim_0693__v0_l0, + anim_0693__v1_l0, +}; + +const s32 anim_0694__v0_l0[] = { // 0x080F7FB4 + PALETTE(90, 16, 0x80) + TILES(0x14EEA, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0694__v1_l0[] = { // 0x080F7FD8 + PALETTE(90, 16, 0x80) + TILES(0x14EF2, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0694__v2_l0[] = { // 0x080F7FFC + PALETTE(90, 16, 0x80) + TILES(0x14EFA, 12) + SHOW_FRAME(45, 2) + + TILES(0x14EEA, 8) + SHOW_FRAME(8, 0) + + TILES(0x14F06, 12) + SHOW_FRAME(6, 3) + + TILES(0x14F12, 12) + SHOW_FRAME(8, 4) + + TILES(0x14F06, 12) + SHOW_FRAME(6, 3) + + TILES(0x14F12, 12) + SHOW_FRAME(8, 4) + + TILES(0x14F06, 12) + SHOW_FRAME(6, 3) + + TILES(0x14F12, 12) + SHOW_FRAME(8, 4) + + END() +}; + +const s32 anim_0694__v3_l0[] = { // 0x080F80AC + PALETTE(90, 16, 0x80) + TILES(0x14F1E, 12) + SHOW_FRAME(7, 5) + + TILES(0x14F12, 12) + SHOW_FRAME(6, 4) + + JUMP_BACK(13) +}; + +const s32 anim_0694__v4_l0[] = { // 0x080F80E8 + PALETTE(90, 16, 0x80) + TILES(0x14F2A, 12) + SHOW_FRAME(7, 6) + + TILES(0x14F36, 12) + SHOW_FRAME(7, 7) + + JUMP_BACK(13) +}; + +const s32 anim_0694__v5_l0[] = { // 0x080F8124 + PALETTE(90, 16, 0x80) + TILES(0x14F42, 12) + SHOW_FRAME(7, 8) + + TILES(0x14F4E, 12) + SHOW_FRAME(7, 9) + + JUMP_BACK(13) +}; + +const s32 anim_0694__v6_l0[] = { // 0x080F8160 + PALETTE(90, 16, 0x80) + TILES(0x14F5A, 8) + SHOW_FRAME(6, 10) + + TILES(0x14F62, 12) + SHOW_FRAME(5, 11) + + JUMP_BACK(13) +}; + +const s32 anim_0694__v7_l0[] = { // 0x080F819C + PALETTE(90, 16, 0x80) + TILES(0x14F6E, 8) + SHOW_FRAME(5, 12) + + TILES(0x14F76, 12) + SHOW_FRAME(6, 13) + + END() +}; + +const s32 anim_0694__v8_l0[] = { // 0x080F81D4 + PALETTE(90, 16, 0x80) + TILES(0x14F82, 8) + SHOW_FRAME(6, 14) + + TILES(0x14F8A, 12) + SHOW_FRAME(5, 15) + + JUMP_BACK(13) +}; + +const s32 anim_0694__v9_l0[] = { // 0x080F8210 + PALETTE(90, 16, 0x80) + TILES(0x14EF2, 8) + SHOW_FRAME(5, 1) + + TILES(0x14F96, 8) + SHOW_FRAME(5, 16) + + END() +}; + +const s32 * const anim_0694[10] = { + anim_0694__v0_l0, + anim_0694__v1_l0, + anim_0694__v2_l0, + anim_0694__v3_l0, + anim_0694__v4_l0, + anim_0694__v5_l0, + anim_0694__v6_l0, + anim_0694__v7_l0, + anim_0694__v8_l0, + anim_0694__v9_l0, +}; + +const s32 anim_0695__v0_l0[] = { // 0x080F8270 + PALETTE(115, 16, 0xD0) + TILES(0x14F9E, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0695__v1_l0[] = { // 0x080F8294 + PALETTE(115, 16, 0xD0) + TILES(0x14FA2, 4) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0695[2] = { + anim_0695__v0_l0, + anim_0695__v1_l0, +}; + +const s32 anim_0696__v0_l0[] = { // 0x080F82C0 + PALETTE(115, 16, 0xD0) + TILES(0x14FA6, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0696__v1_l0[] = { // 0x080F82E4 + PALETTE(115, 16, 0xD0) + TILES(0x14FB6, 12) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0696[2] = { + anim_0696__v0_l0, + anim_0696__v1_l0, +}; + +const s32 anim_0697__v0_l0[] = { // 0x080F8310 + PALETTE(115, 16, 0xD0) + TILES(0x14FC2, 1) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0697__v1_l0[] = { // 0x080F8334 + PALETTE(115, 16, 0xD0) + TILES(0x14FC3, 1) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0697[2] = { + anim_0697__v0_l0, + anim_0697__v1_l0, +}; + +const s32 anim_0698__v0_l0[] = { // 0x080F8360 + PALETTE(116, 16, 0xC0) + TILES(0x14FC4, 8) + SHOW_FRAME(4, 0) + + CHANGE_ANIM(698, 1) +}; + +const s32 anim_0698__v1_l0[] = { // 0x080F8388 + PALETTE(116, 16, 0xC0) + TILES(0x14FCC, 16) + SHOW_FRAME(4, 1) + + TILES(0x14FDC, 16) + SHOW_FRAME(4, 2) + + JUMP_BACK(13) +}; + +const s32 anim_0698__v2_l0[] = { // 0x080F83C4 + PALETTE(116, 16, 0xC0) + TILES(0x14FEC, 12) + SHOW_FRAME(4, 3) + + END() +}; + +const s32 * const anim_0698[3] = { + anim_0698__v0_l0, + anim_0698__v1_l0, + anim_0698__v2_l0, +}; + +const s32 anim_0699__v0_l0[] = { // 0x080F83F4 + PALETTE(116, 16, 0xC0) + TILES(0x14FF8, 12) + SHOW_FRAME(5, 0) + + TILES(0x15004, 12) + SHOW_FRAME(5, 1) + + TILES(0x15010, 12) + SHOW_FRAME(5, 2) + + TILES(0x1501C, 12) + SHOW_FRAME(5, 3) + + TILES(0x15010, 12) + SHOW_FRAME(5, 2) + + TILES(0x15004, 12) + SHOW_FRAME(5, 1) + + JUMP_BACK(33) +}; + +const s32 * const anim_0699[1] = { + anim_0699__v0_l0, +}; + +const s32 anim_0700__v0_l0[] = { // 0x080F8484 + PALETTE(116, 16, 0xC0) + TILES(0x15028, 8) + SHOW_FRAME(1, 0) + + TILES(0x15028, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0700[1] = { + anim_0700__v0_l0, +}; + +const s32 anim_0701__v0_l0[] = { // 0x080F84C0 + PALETTE(116, 16, 0xC0) + TILES(0x15030, 8) + SHOW_FRAME(1, 0) + + TILES(0x15038, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0701[1] = { + anim_0701__v0_l0, +}; + +const s32 anim_0702__v0_l0[] = { // 0x080F84FC + PALETTE(116, 16, 0xC0) + TILES(0x15040, 8) + SHOW_FRAME(5, 0) + + TILES(0x15048, 8) + SHOW_FRAME(5, 1) + + TILES(0x15050, 8) + SHOW_FRAME(5, 2) + + TILES(0x15048, 8) + SHOW_FRAME(5, 1) + + TILES(0x15040, 8) + SHOW_FRAME(5, 0) + + TILES(0x15058, 8) + SHOW_FRAME(5, 3) + + TILES(0x15060, 8) + SHOW_FRAME(5, 4) + + TILES(0x15058, 8) + SHOW_FRAME(5, 3) + + TILES(0x15040, 8) + SHOW_FRAME(5, 0) + + TILES(0x15048, 8) + SHOW_FRAME(5, 1) + + TILES(0x15050, 8) + SHOW_FRAME(5, 2) + + TILES(0x15048, 8) + SHOW_FRAME(5, 1) + + TILES(0x15040, 8) + SHOW_FRAME(5, 0) + + TILES(0x15048, 8) + SHOW_FRAME(5, 1) + + TILES(0x15050, 8) + SHOW_FRAME(5, 2) + + TILES(0x15048, 8) + SHOW_FRAME(5, 1) + + JUMP_BACK(83) +}; + +const s32 * const anim_0702[1] = { + anim_0702__v0_l0, +}; + +const s32 anim_0703__v0_l0[] = { // 0x080F8654 + PALETTE(116, 16, 0xC0) + TILES(0x15068, 8) + SHOW_FRAME(12, 0) + + TILES(0x15070, 8) + SHOW_FRAME(12, 1) + + TILES(0x15078, 12) + SHOW_FRAME(12, 2) + + TILES(0x15084, 8) + SHOW_FRAME(12, 3) + + TILES(0x1508C, 8) + SHOW_FRAME(12, 4) + + TILES(0x15084, 8) + SHOW_FRAME(12, 3) + + TILES(0x15078, 12) + SHOW_FRAME(12, 2) + + TILES(0x15070, 8) + SHOW_FRAME(12, 1) + + JUMP_BACK(43) +}; + +const s32 * const anim_0703[1] = { + anim_0703__v0_l0, +}; + +const s32 anim_0704__v0_l0[] = { // 0x080F870C + PALETTE(116, 16, 0xC0) + TILES(0x15094, 12) + HITBOX(0, -8, -5, 8, 15) + SHOW_FRAME(45, 0) + + TILES(0x150A0, 12) + SHOW_FRAME(6, 1) + + TILES(0x150AC, 12) + SHOW_FRAME(8, 2) + + TILES(0x150B8, 12) + SHOW_FRAME(8, 3) + + TILES(0x150C4, 12) + SHOW_FRAME(8, 4) + + TILES(0x150B8, 12) + SHOW_FRAME(8, 3) + + TILES(0x150C4, 12) + SHOW_FRAME(8, 4) + + TILES(0x150B8, 12) + SHOW_FRAME(8, 3) + + TILES(0x150C4, 12) + SHOW_FRAME(8, 4) + + TILES(0x150B8, 12) + SHOW_FRAME(8, 3) + + TILES(0x150C4, 12) + SHOW_FRAME(8, 4) + + TILES(0x150AC, 12) + SHOW_FRAME(6, 2) + + TILES(0x150A0, 12) + SHOW_FRAME(5, 1) + + JUMP_BACK(71) +}; + +const s32 * const anim_0704[1] = { + anim_0704__v0_l0, +}; + +const s32 anim_0705__v0_l0[] = { // 0x080F8834 + TILES(0x150D0, 16) + PALETTE(33, 16, 0x70) + HITBOX(0, -13, -24, 13, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0705[1] = { + anim_0705__v0_l0, +}; + +const s32 anim_0706__v0_l0[] = { // 0x080F8868 + PALETTE(0, 16, 0x0) + TILES(0x150E0, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0706__v1_l0[] = { // 0x080F888C + PALETTE(2, 16, 0x10) + TILES(0x150E4, 4) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0706__v2_l0[] = { // 0x080F88B0 + PALETTE(5, 16, 0x20) + TILES(0x150E8, 4) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0706__v3_l0[] = { // 0x080F88D4 + PALETTE(7, 16, 0x30) + TILES(0x150EC, 4) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0706__v4_l0[] = { // 0x080F88F8 + PALETTE(1, 16, 0x50) + TILES(0x150F0, 4) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0706__v5_l0[] = { // 0x080F891C + PALETTE(117, 16, 0xA0) + TILES(0x150F4, 4) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0706__v6_l0[] = { // 0x080F8940 + PALETTE(117, 16, 0xA0) + TILES(0x150F8, 4) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0706__v7_l0[] = { // 0x080F8964 + PALETTE(117, 16, 0xA0) + TILES(0x150FC, 4) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0706__v8_l0[] = { // 0x080F8988 + PALETTE(68, 16, 0x60) + TILES(0x15100, 4) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0706__v9_l0[] = { // 0x080F89AC + PALETTE(68, 16, 0x60) + TILES(0x15104, 4) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0706__v10_l0[] = { // 0x080F89D0 + PALETTE(68, 16, 0x60) + TILES(0x15108, 4) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0706__v11_l0[] = { // 0x080F89F4 + PALETTE(68, 16, 0x60) + TILES(0x1510C, 4) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0706__v12_l0[] = { // 0x080F8A18 + PALETTE(117, 16, 0xA0) + TILES(0x15110, 4) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 anim_0706__v13_l0[] = { // 0x080F8A3C + PALETTE(117, 16, 0xA0) + TILES(0x15114, 4) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 anim_0706__v14_l0[] = { // 0x080F8A60 + PALETTE(117, 16, 0xA0) + TILES(0x15118, 4) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 anim_0706__v15_l0[] = { // 0x080F8A84 + PALETTE(1, 16, 0x50) + TILES(0x1511C, 4) + SHOW_FRAME(1, 15) + + END() +}; + +const s32 anim_0706__v16_l0[] = { // 0x080F8AA8 + PALETTE(117, 16, 0xA0) + TILES(0x15120, 4) + SHOW_FRAME(1, 16) + + END() +}; + +const s32 * const anim_0706[17] = { + anim_0706__v0_l0, + anim_0706__v1_l0, + anim_0706__v2_l0, + anim_0706__v3_l0, + anim_0706__v4_l0, + anim_0706__v5_l0, + anim_0706__v6_l0, + anim_0706__v7_l0, + anim_0706__v8_l0, + anim_0706__v9_l0, + anim_0706__v10_l0, + anim_0706__v11_l0, + anim_0706__v12_l0, + anim_0706__v13_l0, + anim_0706__v14_l0, + anim_0706__v15_l0, + anim_0706__v16_l0, +}; + +const s32 anim_0707__v0_l0[] = { // 0x080F8B10 + TILES(0x15124, 16) + PALETTE(68, 16, 0x60) + SHOW_FRAME(8, 0) + + SHOW_FRAME(8, 1) + + SHOW_FRAME(8, 2) + + SHOW_FRAME(8, 3) + + JUMP_BACK(11) +}; + +const s32 * const anim_0707[1] = { + anim_0707__v0_l0, +}; + +const s32 anim_0708__v0_l0[] = { // 0x080F8B54 + TILES(0x15134, 16) + PALETTE(68, 16, 0x60) + PLAY_SOUND(117) + SHOW_FRAME(8, 0) + + SHOW_FRAME(8, 1) + + SHOW_FRAME(8, 2) + + SHOW_FRAME(8, 3) + + END() +}; + +const s32 * const anim_0708[1] = { + anim_0708__v0_l0, +}; + +const s32 anim_0709__v0_l0[] = { // 0x080F8B9C + PALETTE(68, 16, 0x60) + TILES(0x15144, 2) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0709__v1_l0[] = { // 0x080F8BC0 + PALETTE(68, 16, 0x60) + TILES(0x15146, 2) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0709__v2_l0[] = { // 0x080F8BE4 + PALETTE(68, 16, 0x60) + TILES(0x15148, 2) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0709__v3_l0[] = { // 0x080F8C08 + PALETTE(68, 16, 0x60) + TILES(0x1514A, 2) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0709__v4_l0[] = { // 0x080F8C2C + PALETTE(68, 16, 0x60) + TILES(0x1514C, 2) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0709[5] = { + anim_0709__v0_l0, + anim_0709__v1_l0, + anim_0709__v2_l0, + anim_0709__v3_l0, + anim_0709__v4_l0, +}; + +const s32 anim_0710__v0_l0[] = { // 0x080F8C64 + PALETTE(118, 16, 0x0) + SHOW_FRAME(21, -1) + + TILES(0x1514E, 4) + SHOW_FRAME(2, 0) + + TILES(0x15152, 4) + SHOW_FRAME(20, 1) + TILES(0x15156, 4) + SHOW_FRAME(6, 2) + + TILES(0x1515A, 4) + SHOW_FRAME(6, 3) + + TILES(0x1515E, 4) + SHOW_FRAME(6, 4) + + TILES(0x15162, 4) + SHOW_FRAME(3, 5) + + TILES(0x15166, 4) + SHOW_FRAME(3, 6) + + TILES(0x1516A, 4) + SHOW_FRAME(3, 7) + + TILES(0x1516E, 4) + SHOW_FRAME(3, 8) + + TILES(0x15172, 4) + SHOW_FRAME(3, 9) + + TILES(0x1515A, 4) + SHOW_FRAME(3, 3) + + JUMP_BACK(45) +}; + +const s32 anim_0710__v1_l0[] = { // 0x080F8D5C + PALETTE(119, 16, 0x0) + SHOW_FRAME(21, -1) + + TILES(0x1514E, 4) + SHOW_FRAME(2, 0) + + TILES(0x15152, 4) + SHOW_FRAME(20, 1) + TILES(0x15156, 4) + SHOW_FRAME(6, 2) + + TILES(0x1515A, 4) + SHOW_FRAME(6, 3) + + TILES(0x1515E, 4) + SHOW_FRAME(6, 4) + + TILES(0x15162, 4) + SHOW_FRAME(3, 5) + + TILES(0x15166, 4) + SHOW_FRAME(3, 6) + + TILES(0x1516A, 4) + SHOW_FRAME(3, 7) + + TILES(0x1516E, 4) + SHOW_FRAME(3, 8) + + TILES(0x15172, 4) + SHOW_FRAME(3, 9) + + TILES(0x1515A, 4) + SHOW_FRAME(3, 3) + + JUMP_BACK(45) +}; + +const s32 anim_0710__v2_l0[] = { // 0x080F8E54 + PALETTE(120, 16, 0x0) + SHOW_FRAME(21, -1) + + TILES(0x1514E, 4) + SHOW_FRAME(2, 0) + + TILES(0x15152, 4) + SHOW_FRAME(20, 1) + TILES(0x15156, 4) + SHOW_FRAME(6, 2) + + TILES(0x1515A, 4) + SHOW_FRAME(6, 3) + + TILES(0x1515E, 4) + SHOW_FRAME(6, 4) + + TILES(0x15162, 4) + SHOW_FRAME(3, 5) + + TILES(0x15166, 4) + SHOW_FRAME(3, 6) + + TILES(0x1516A, 4) + SHOW_FRAME(3, 7) + + TILES(0x1516E, 4) + SHOW_FRAME(3, 8) + + TILES(0x15172, 4) + SHOW_FRAME(3, 9) + + TILES(0x1515A, 4) + SHOW_FRAME(3, 3) + + JUMP_BACK(45) +}; + +const s32 anim_0710__v3_l0[] = { // 0x080F8F4C + PALETTE(121, 16, 0x0) + SHOW_FRAME(21, -1) + + TILES(0x1514E, 4) + SHOW_FRAME(2, 0) + + TILES(0x15152, 4) + SHOW_FRAME(20, 1) + TILES(0x15156, 4) + SHOW_FRAME(6, 2) + + TILES(0x1515A, 4) + SHOW_FRAME(6, 3) + + TILES(0x1515E, 4) + SHOW_FRAME(6, 4) + + TILES(0x15162, 4) + SHOW_FRAME(3, 5) + + TILES(0x15166, 4) + SHOW_FRAME(3, 6) + + TILES(0x1516A, 4) + SHOW_FRAME(3, 7) + + TILES(0x1516E, 4) + SHOW_FRAME(3, 8) + + TILES(0x15172, 4) + SHOW_FRAME(3, 9) + + TILES(0x1515A, 4) + SHOW_FRAME(3, 3) + + JUMP_BACK(45) +}; + +const s32 anim_0710__v4_l0[] = { // 0x080F9044 + PALETTE(122, 16, 0x0) + SHOW_FRAME(21, -1) + + TILES(0x1514E, 4) + SHOW_FRAME(2, 0) + + TILES(0x15152, 4) + SHOW_FRAME(20, 1) + TILES(0x15156, 4) + SHOW_FRAME(6, 2) + + TILES(0x1515A, 4) + SHOW_FRAME(6, 3) + + TILES(0x1515E, 4) + SHOW_FRAME(6, 4) + + TILES(0x15162, 4) + SHOW_FRAME(3, 5) + + TILES(0x15166, 4) + SHOW_FRAME(3, 6) + + TILES(0x1516A, 4) + SHOW_FRAME(3, 7) + + TILES(0x1516E, 4) + SHOW_FRAME(3, 8) + + TILES(0x15172, 4) + SHOW_FRAME(3, 9) + + TILES(0x1515A, 4) + SHOW_FRAME(3, 3) + + JUMP_BACK(45) +}; + +const s32 anim_0710__v5_l0[] = { // 0x080F913C + PALETTE(123, 16, 0x0) + SHOW_FRAME(21, -1) + + TILES(0x1514E, 4) + SHOW_FRAME(2, 0) + + TILES(0x15152, 4) + SHOW_FRAME(20, 1) + TILES(0x15156, 4) + SHOW_FRAME(6, 2) + + TILES(0x1515A, 4) + SHOW_FRAME(6, 3) + + TILES(0x1515E, 4) + SHOW_FRAME(6, 4) + + TILES(0x15162, 4) + SHOW_FRAME(3, 5) + + TILES(0x15166, 4) + SHOW_FRAME(3, 6) + + TILES(0x1516A, 4) + SHOW_FRAME(3, 7) + + TILES(0x1516E, 4) + SHOW_FRAME(3, 8) + + TILES(0x15172, 4) + SHOW_FRAME(3, 9) + + TILES(0x1515A, 4) + SHOW_FRAME(3, 3) + + JUMP_BACK(45) +}; + +const s32 anim_0710__v6_l0[] = { // 0x080F9234 + PALETTE(124, 16, 0x0) + SHOW_FRAME(21, -1) + + TILES(0x1514E, 4) + SHOW_FRAME(2, 0) + + TILES(0x15152, 4) + SHOW_FRAME(20, 1) + TILES(0x15156, 4) + SHOW_FRAME(6, 2) + + TILES(0x1515A, 4) + SHOW_FRAME(6, 3) + + TILES(0x1515E, 4) + SHOW_FRAME(6, 4) + + TILES(0x15162, 4) + SHOW_FRAME(3, 5) + + TILES(0x15166, 4) + SHOW_FRAME(3, 6) + + TILES(0x1516A, 4) + SHOW_FRAME(3, 7) + + TILES(0x1516E, 4) + SHOW_FRAME(3, 8) + + TILES(0x15172, 4) + SHOW_FRAME(3, 9) + + TILES(0x1515A, 4) + SHOW_FRAME(3, 3) + + JUMP_BACK(45) +}; + +const s32 * const anim_0710[7] = { + anim_0710__v0_l0, + anim_0710__v1_l0, + anim_0710__v2_l0, + anim_0710__v3_l0, + anim_0710__v4_l0, + anim_0710__v5_l0, + anim_0710__v6_l0, +}; + +const s32 anim_0711__v0_l0[] = { // 0x080F9348 + PALETTE(118, 16, 0x0) + SHOW_FRAME(10, -1) + + TILES(0x15176, 2) + SHOW_FRAME(3, 0) + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(80) +}; + +const s32 anim_0711__v1_l0[] = { // 0x080F94B8 + PALETTE(119, 16, 0x0) + SHOW_FRAME(10, -1) + + TILES(0x15176, 2) + SHOW_FRAME(3, 0) + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(80) +}; + +const s32 anim_0711__v2_l0[] = { // 0x080F9628 + PALETTE(120, 16, 0x0) + SHOW_FRAME(10, -1) + + TILES(0x15176, 2) + SHOW_FRAME(0, 0) + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(80) +}; + +const s32 anim_0711__v3_l0[] = { // 0x080F9798 + PALETTE(121, 16, 0x0) + SHOW_FRAME(10, -1) + + TILES(0x15176, 2) + SHOW_FRAME(3, 0) + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(80) +}; + +const s32 anim_0711__v4_l0[] = { // 0x080F9908 + PALETTE(122, 16, 0x0) + SHOW_FRAME(10, -1) + + TILES(0x15176, 2) + SHOW_FRAME(3, 0) + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(80) +}; + +const s32 anim_0711__v5_l0[] = { // 0x080F9A78 + PALETTE(123, 16, 0x0) + SHOW_FRAME(10, -1) + + TILES(0x15176, 2) + SHOW_FRAME(3, 0) + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(80) +}; + +const s32 anim_0711__v6_l0[] = { // 0x080F9BE8 + PALETTE(124, 16, 0x0) + SHOW_FRAME(10, -1) + + TILES(0x15176, 2) + SHOW_FRAME(3, 0) + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + TILES(0x15178, 4) + SHOW_FRAME(6, 1) + + JUMP_BACK(80) +}; + +const s32 * const anim_0711[7] = { + anim_0711__v0_l0, + anim_0711__v1_l0, + anim_0711__v2_l0, + anim_0711__v3_l0, + anim_0711__v4_l0, + anim_0711__v5_l0, + anim_0711__v6_l0, +}; + +const s32 anim_0712__v0_l0[] = { // 0x080F9D74 + PALETTE(118, 16, 0x0) + SHOW_FRAME(34, -1) + + TILES(0x1517C, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0712__v1_l0[] = { // 0x080F9DA0 + PALETTE(119, 16, 0x0) + SHOW_FRAME(34, -1) + + TILES(0x1517C, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0712__v2_l0[] = { // 0x080F9DCC + PALETTE(120, 16, 0x0) + SHOW_FRAME(34, -1) + + TILES(0x1517C, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0712__v3_l0[] = { // 0x080F9DF8 + PALETTE(121, 16, 0x0) + SHOW_FRAME(34, -1) + + TILES(0x1517C, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0712__v4_l0[] = { // 0x080F9E24 + PALETTE(122, 16, 0x0) + SHOW_FRAME(34, -1) + + TILES(0x1517C, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0712__v5_l0[] = { // 0x080F9E50 + PALETTE(123, 16, 0x0) + SHOW_FRAME(34, -1) + + TILES(0x1517C, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0712__v6_l0[] = { // 0x080F9E7C + PALETTE(124, 16, 0x0) + SHOW_FRAME(34, -1) + + TILES(0x1517C, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0712[7] = { + anim_0712__v0_l0, + anim_0712__v1_l0, + anim_0712__v2_l0, + anim_0712__v3_l0, + anim_0712__v4_l0, + anim_0712__v5_l0, + anim_0712__v6_l0, +}; + +const s32 anim_0713__v0_l0[] = { // 0x080F9EC4 + PALETTE(118, 16, 0x0) + SHOW_FRAME(30, -1) + + TILES(0x15180, 2) + SHOW_FRAME(3, 0) + + TILES(0x15182, 4) + SHOW_FRAME(3, 1) + + TILES(0x15186, 2) + SHOW_FRAME(3, 2) + TILES(0x15188, 4) + SHOW_FRAME(25, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + JUMP_BACK(20) +}; + +const s32 anim_0713__v1_l0[] = { // 0x080F9F6C + PALETTE(119, 16, 0x0) + SHOW_FRAME(30, -1) + + TILES(0x15180, 2) + SHOW_FRAME(3, 0) + + TILES(0x15182, 4) + SHOW_FRAME(3, 1) + + TILES(0x15186, 2) + SHOW_FRAME(3, 2) + TILES(0x15188, 4) + SHOW_FRAME(25, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + JUMP_BACK(20) +}; + +const s32 anim_0713__v2_l0[] = { // 0x080FA014 + PALETTE(120, 16, 0x0) + SHOW_FRAME(30, -1) + + TILES(0x15180, 2) + SHOW_FRAME(3, 0) + + TILES(0x15182, 4) + SHOW_FRAME(3, 1) + + TILES(0x15186, 2) + SHOW_FRAME(3, 2) + TILES(0x15188, 4) + SHOW_FRAME(25, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + JUMP_BACK(20) +}; + +const s32 anim_0713__v3_l0[] = { // 0x080FA0BC + PALETTE(121, 16, 0x0) + SHOW_FRAME(30, -1) + + TILES(0x15180, 2) + SHOW_FRAME(3, 0) + + TILES(0x15182, 4) + SHOW_FRAME(3, 1) + + TILES(0x15186, 2) + SHOW_FRAME(3, 2) + TILES(0x15188, 4) + SHOW_FRAME(25, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + JUMP_BACK(20) +}; + +const s32 anim_0713__v4_l0[] = { // 0x080FA164 + PALETTE(122, 16, 0x0) + SHOW_FRAME(30, -1) + + TILES(0x15180, 2) + SHOW_FRAME(3, 0) + + TILES(0x15182, 4) + SHOW_FRAME(3, 1) + + TILES(0x15186, 2) + SHOW_FRAME(3, 2) + TILES(0x15188, 4) + SHOW_FRAME(25, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + JUMP_BACK(20) +}; + +const s32 anim_0713__v5_l0[] = { // 0x080FA20C + PALETTE(123, 16, 0x0) + SHOW_FRAME(30, -1) + + TILES(0x15180, 2) + SHOW_FRAME(3, 0) + + TILES(0x15182, 4) + SHOW_FRAME(3, 1) + + TILES(0x15186, 2) + SHOW_FRAME(3, 2) + TILES(0x15188, 4) + SHOW_FRAME(25, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + JUMP_BACK(20) +}; + +const s32 anim_0713__v6_l0[] = { // 0x080FA2B4 + PALETTE(124, 16, 0x0) + SHOW_FRAME(30, -1) + + TILES(0x15180, 2) + SHOW_FRAME(3, 0) + + TILES(0x15182, 4) + SHOW_FRAME(3, 1) + + TILES(0x15186, 2) + SHOW_FRAME(3, 2) + TILES(0x15188, 4) + SHOW_FRAME(25, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + TILES(0x15188, 4) + SHOW_FRAME(6, 3) + + JUMP_BACK(20) +}; + +const s32 * const anim_0713[7] = { + anim_0713__v0_l0, + anim_0713__v1_l0, + anim_0713__v2_l0, + anim_0713__v3_l0, + anim_0713__v4_l0, + anim_0713__v5_l0, + anim_0713__v6_l0, +}; + +const s32 anim_0714__v0_l0[] = { // 0x080FA378 + PALETTE(88, 16, 0x0) + TILES(0x1518C, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0714[1] = { + anim_0714__v0_l0, +}; + +const s32 anim_0715__v0_l0[] = { // 0x080FA3A0 + PALETTE(68, 16, 0x60) + TILES(0x15198, 64) + HITBOX(0, 71, 69, 71, 70) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0715__v1_l0[] = { // 0x080FA3D0 + PALETTE(68, 16, 0x60) + TILES(0x151D8, 64) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0715__v2_l0[] = { // 0x080FA3F4 + PALETTE(68, 16, 0x60) + TILES(0x15218, 64) + HITBOX(0, 0, -1, 0, -1) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0715__v3_l0[] = { // 0x080FA424 + PALETTE(68, 16, 0x60) + TILES(0x15258, 64) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0715__v4_l0[] = { // 0x080FA448 + PALETTE(68, 16, 0x60) + TILES(0x15298, 14) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0715[5] = { + anim_0715__v0_l0, + anim_0715__v1_l0, + anim_0715__v2_l0, + anim_0715__v3_l0, + anim_0715__v4_l0, +}; + +const s32 anim_0716__v0_l0[] = { // 0x080FA480 + PALETTE(125, 16, 0x0) + TILES(0x152A6, 42) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0716[1] = { + anim_0716__v0_l0, +}; + +const s32 anim_0717__v0_l0[] = { // 0x080FA4A8 + PALETTE(126, 16, 0x0) + TILES(0x152D0, 56) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0717__v1_l0[] = { // 0x080FA4CC + PALETTE(126, 16, 0x0) + TILES(0x15308, 56) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0717__v2_l0[] = { // 0x080FA4F0 + PALETTE(126, 16, 0x0) + TILES(0x15340, 56) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0717[3] = { + anim_0717__v0_l0, + anim_0717__v1_l0, + anim_0717__v2_l0, +}; + +const s32 anim_0718__v0_l0[] = { // 0x080FA520 + PALETTE(68, 16, 0x60) + TILES(0x15378, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0718[1] = { + anim_0718__v0_l0, +}; + +const s32 anim_0719__v0_l0[] = { // 0x080FA548 + PALETTE(68, 16, 0x60) + TILES(0x1538C, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0719__v1_l0[] = { // 0x080FA56C + PALETTE(68, 16, 0x60) + TILES(0x1539C, 16) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0719__v2_l0[] = { // 0x080FA590 + PALETTE(68, 16, 0x60) + TILES(0x153AC, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0719__v3_l0[] = { // 0x080FA5B4 + PALETTE(68, 16, 0x60) + TILES(0x153BC, 16) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0719[4] = { + anim_0719__v0_l0, + anim_0719__v1_l0, + anim_0719__v2_l0, + anim_0719__v3_l0, +}; + +const s32 anim_0720__v0_l0[] = { // 0x080FA5E8 + PALETTE(68, 16, 0x60) + TILES(0x153CC, 48) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0720[1] = { + anim_0720__v0_l0, +}; + +const s32 anim_0721__v0_l0[] = { // 0x080FA610 + PALETTE(68, 16, 0x60) + TILES(0x153FC, 3) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0721[1] = { + anim_0721__v0_l0, +}; + +const s32 anim_0722__v0_l0[] = { // 0x080FA638 + PALETTE(127, 16, 0x70) + TILES(0x153FF, 80) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0722__v1_l0[] = { // 0x080FA65C + PALETTE(127, 16, 0x70) + TILES(0x1544F, 80) + SHOW_FRAME(8, 1) + + TILES(0x1549F, 80) + SHOW_FRAME(3, 2) + + TILES(0x154EF, 80) + SHOW_FRAME(15, 3) + + END() +}; + +const s32 anim_0722__v2_l0[] = { // 0x080FA6A8 + PALETTE(128, 16, 0x80) + TILES(0x1553F, 72) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0722__v3_l0[] = { // 0x080FA6CC + PALETTE(128, 16, 0x80) + TILES(0x15587, 81) + SHOW_FRAME(4, 5) + + TILES(0x155D8, 81) + SHOW_FRAME(4, 6) + + TILES(0x15629, 81) + SHOW_FRAME(3, 7) + + TILES(0x1567A, 72) + SHOW_FRAME(15, 8) + + END() +}; + +const s32 anim_0722__v4_l0[] = { // 0x080FA72C + PALETTE(129, 16, 0x90) + TILES(0x156C2, 70) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0722__v5_l0[] = { // 0x080FA750 + PALETTE(129, 16, 0x90) + TILES(0x15708, 90) + SHOW_FRAME(4, 10) + + TILES(0x15762, 90) + SHOW_FRAME(4, 11) + + TILES(0x157BC, 90) + SHOW_FRAME(2, 12) + + TILES(0x15816, 80) + SHOW_FRAME(15, 13) + + END() +}; + +const s32 anim_0722__v6_l0[] = { // 0x080FA7B0 + PALETTE(130, 16, 0xA0) + TILES(0x15866, 63) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 anim_0722__v7_l0[] = { // 0x080FA7D4 + PALETTE(130, 16, 0xA0) + TILES(0x158A5, 63) + SHOW_FRAME(3, 15) + + TILES(0x158E4, 63) + SHOW_FRAME(3, 16) + + TILES(0x15923, 70) + SHOW_FRAME(3, 17) + + TILES(0x15969, 70) + SHOW_FRAME(6, 18) + + TILES(0x159AF, 70) + SHOW_FRAME(4, 19) + + TILES(0x159F5, 70) + SHOW_FRAME(2, 20) + + TILES(0x15A3B, 80) + SHOW_FRAME(15, 21) + + END() +}; + +const s32 * const anim_0722[8] = { + anim_0722__v0_l0, + anim_0722__v1_l0, + anim_0722__v2_l0, + anim_0722__v3_l0, + anim_0722__v4_l0, + anim_0722__v5_l0, + anim_0722__v6_l0, + anim_0722__v7_l0, +}; + +const s32 anim_0723__v0_l0[] = { // 0x080FA890 + PALETTE(131, 16, 0x0) + TILES(0x15A8B, 600) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 anim_0723__v1_l0[] = { // 0x080FA8B4 + PALETTE(132, 16, 0x0) + TILES(0x15CE3, 600) + SHOW_FRAME(2, 1) + + END() +}; + +const s32 anim_0723__v2_l0[] = { // 0x080FA8D8 + PALETTE(133, 16, 0x0) + TILES(0x15F3B, 600) + SHOW_FRAME(2, 2) + + END() +}; + +const s32 anim_0723__v3_l0[] = { // 0x080FA8FC + PALETTE(132, 16, 0x0) + TILES(0x16193, 600) + SHOW_FRAME(2, 3) + + END() +}; + +const s32 * const anim_0723[4] = { + anim_0723__v0_l0, + anim_0723__v1_l0, + anim_0723__v2_l0, + anim_0723__v3_l0, +}; + +const s32 anim_0724__v0_l0[] = { // 0x080FA930 + PALETTE(134, 16, 0x30) + SHOW_FRAME(1, -1) + + JUMP_BACK(5) +}; + +const s32 anim_0724__v1_l0[] = { // 0x080FA94C + PALETTE(135, 16, 0x20) + TILES(0x163EB, 28) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0724__v2_l0[] = { // 0x080FA970 + PALETTE(135, 16, 0x20) + TILES(0x16407, 30) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0724__v3_l0[] = { // 0x080FA994 + PALETTE(135, 16, 0x20) + TILES(0x16425, 28) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0724__v4_l0[] = { // 0x080FA9B8 + PALETTE(135, 16, 0x20) + TILES(0x16441, 30) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0724__v5_l0[] = { // 0x080FA9DC + PALETTE(135, 16, 0x20) + TILES(0x1645F, 28) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0724__v6_l0[] = { // 0x080FAA00 + PALETTE(135, 16, 0x20) + TILES(0x1647B, 30) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0724__v7_l0[] = { // 0x080FAA24 + PALETTE(135, 16, 0x20) + TILES(0x16499, 28) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0724__v8_l0[] = { // 0x080FAA48 + PALETTE(135, 16, 0x20) + TILES(0x164B5, 30) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0724__v9_l0[] = { // 0x080FAA6C + PALETTE(135, 16, 0x20) + TILES(0x164D3, 28) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0724__v10_l0[] = { // 0x080FAA90 + PALETTE(135, 16, 0x20) + TILES(0x164EF, 30) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0724__v11_l0[] = { // 0x080FAAB4 + PALETTE(135, 16, 0x20) + TILES(0x1650D, 28) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0724__v12_l0[] = { // 0x080FAAD8 + PALETTE(135, 16, 0x20) + TILES(0x16529, 30) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0724__v13_l0[] = { // 0x080FAAFC + PALETTE(135, 16, 0x20) + TILES(0x16547, 28) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 anim_0724__v14_l0[] = { // 0x080FAB20 + PALETTE(135, 16, 0x20) + TILES(0x16563, 28) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 anim_0724__v15_l0[] = { // 0x080FAB44 + PALETTE(135, 16, 0x20) + TILES(0x1657F, 26) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 anim_0724__v16_l0[] = { // 0x080FAB68 + PALETTE(135, 16, 0x20) + TILES(0x16599, 26) + SHOW_FRAME(1, 15) + + END() +}; + +const s32 anim_0724__v17_l0[] = { // 0x080FAB8C + PALETTE(135, 16, 0x20) + TILES(0x165B3, 26) + SHOW_FRAME(1, 16) + + END() +}; + +const s32 anim_0724__v18_l0[] = { // 0x080FABB0 + PALETTE(135, 16, 0x20) + TILES(0x165CD, 26) + SHOW_FRAME(1, 17) + + END() +}; + +const s32 * const anim_0724[19] = { + anim_0724__v0_l0, + anim_0724__v1_l0, + anim_0724__v2_l0, + anim_0724__v3_l0, + anim_0724__v4_l0, + anim_0724__v5_l0, + anim_0724__v6_l0, + anim_0724__v7_l0, + anim_0724__v8_l0, + anim_0724__v9_l0, + anim_0724__v10_l0, + anim_0724__v11_l0, + anim_0724__v12_l0, + anim_0724__v13_l0, + anim_0724__v14_l0, + anim_0724__v15_l0, + anim_0724__v16_l0, + anim_0724__v17_l0, + anim_0724__v18_l0, +}; + +const s32 anim_0725__v0_l0[] = { // 0x080FAC20 + PALETTE(136, 16, 0x70) + TILES(0x165E7, 36) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0725[1] = { + anim_0725__v0_l0, +}; + +const s32 anim_0726__v0_l0[] = { // 0x080FAC48 + PALETTE(137, 16, 0x80) + TILES(0x1660B, 36) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0726[1] = { + anim_0726__v0_l0, +}; + +const s32 anim_0727__v0_l0[] = { // 0x080FAC70 + PALETTE(138, 16, 0x90) + TILES(0x1662F, 36) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0727[1] = { + anim_0727__v0_l0, +}; + +const s32 anim_0728__v0_l0[] = { // 0x080FAC98 + PALETTE(139, 16, 0xE0) + TILES(0x16653, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0728[1] = { + anim_0728__v0_l0, +}; + +const s32 anim_0729__v0_l0[] = { // 0x080FACC0 + PALETTE(140, 16, 0xD0) + TILES(0x16665, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0729[1] = { + anim_0729__v0_l0, +}; + +const s32 anim_0730__v0_l0[] = { // 0x080FACE8 + PALETTE(117, 16, 0xB0) + TILES(0x16677, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0730[1] = { + anim_0730__v0_l0, +}; + +const s32 anim_0731__v0_l0[] = { // 0x080FAD10 + PALETTE(141, 16, 0x20) + TILES(0x16687, 4) + SHOW_FRAME(4, 0) + + TILES(0x1668B, 4) + SHOW_FRAME(4, 1) + + TILES(0x1668F, 4) + SHOW_FRAME(4, 2) + + TILES(0x16693, 4) + SHOW_FRAME(4, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0731[1] = { + anim_0731__v0_l0, +}; + +const s32 anim_0732__v0_l0[] = { // 0x080FAD78 + PALETTE(1, 16, 0xE0) + TILES(0x16697, 16) + SHOW_FRAME(2, 0) + + TILES(0x166A7, 16) + SHOW_FRAME(2, 1) + + TILES(0x166B7, 16) + SHOW_FRAME(2, 2) + + TILES(0x166C7, 16) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0732[1] = { + anim_0732__v0_l0, +}; + +const s32 anim_0733__v0_l0[] = { // 0x080FADE0 + PALETTE(142, 16, 0xE0) + TILES(0x166D7, 192) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0733__v1_l0[] = { // 0x080FAE04 + PALETTE(142, 16, 0xE0) + TILES(0x16797, 192) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0733[2] = { + anim_0733__v0_l0, + anim_0733__v1_l0, +}; + +const s32 anim_0734__v0_l0[] = { // 0x080FAE30 + PALETTE(143, 16, 0xE0) + TILES(0x16857, 192) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0734__v1_l0[] = { // 0x080FAE54 + PALETTE(144, 16, 0xE0) + TILES(0x16917, 192) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0734[2] = { + anim_0734__v0_l0, + anim_0734__v1_l0, +}; + +const s32 anim_0735__v0_l0[] = { // 0x080FAE80 + PALETTE(145, 16, 0x60) + TILES(0x169D7, 64) + SHOW_FRAME(2, 0) + + TILES(0x16A17, 32) + SHOW_FRAME(2, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0735[1] = { + anim_0735__v0_l0, +}; + +const s32 anim_0736__v0_l0[] = { // 0x080FAEC0 + PALETTE(145, 16, 0x60) + TILES(0x16A37, 120) + SHOW_FRAME(2, 0) + + TILES(0x16AAF, 120) + SHOW_FRAME(2, 1) + + JUMP_BACK(13) +}; + +const s32 * const anim_0736[1] = { + anim_0736__v0_l0, +}; + +const s32 anim_0737__v0_l0[] = { // 0x080FAF00 + PALETTE(146, 256, 0x0) + TILES(0x80000090, 192) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0737__v1_l0[] = { // 0x080FAF24 + PALETTE(146, 256, 0x0) + TILES(0x80000150, 192) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0737__v2_l0[] = { // 0x080FAF48 + PALETTE(146, 256, 0x0) + TILES(0x80000210, 192) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0737__v3_l0[] = { // 0x080FAF6C + PALETTE(146, 256, 0x0) + TILES(0x800002D0, 192) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0737[4] = { + anim_0737__v0_l0, + anim_0737__v1_l0, + anim_0737__v2_l0, + anim_0737__v3_l0, +}; + +const s32 anim_0738__v0_l0[] = { // 0x080FAFA0 + PALETTE(146, 64, 0x0) + TILES(0x80000390, 225) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0738__v1_l0[] = { // 0x080FAFC4 + PALETTE(146, 64, 0x0) + TILES(0x80000471, 182) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0738__v2_l0[] = { // 0x080FAFE8 + PALETTE(146, 64, 0x0) + TILES(0x80000527, 192) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0738__v3_l0[] = { // 0x080FB00C + PALETTE(146, 64, 0x0) + TILES(0x800005E7, 196) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0738[4] = { + anim_0738__v0_l0, + anim_0738__v1_l0, + anim_0738__v2_l0, + anim_0738__v3_l0, +}; + +const s32 anim_0739__v0_l0[] = { // 0x080FB040 + PALETTE(162, 16, 0x70) + TILES(0x16B27, 72) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0739__v1_l0[] = { // 0x080FB064 + PALETTE(163, 16, 0x80) + TILES(0x16B6F, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0739[2] = { + anim_0739__v0_l0, + anim_0739__v1_l0, +}; + +const s32 anim_0740__v0_l0[] = { // 0x080FB090 + PALETTE(164, 16, 0x0) + TILES(0x16B83, 56) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0740__v1_l0[] = { // 0x080FB0B4 + PALETTE(164, 16, 0x0) + TILES(0x16BBB, 78) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0740__v2_l0[] = { // 0x080FB0D8 + PALETTE(164, 16, 0x0) + TILES(0x16C09, 60) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0740__v3_l0[] = { // 0x080FB0FC + PALETTE(164, 16, 0x0) + TILES(0x16C45, 96) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0740[4] = { + anim_0740__v0_l0, + anim_0740__v1_l0, + anim_0740__v2_l0, + anim_0740__v3_l0, +}; + +const s32 anim_0741__v0_l0[] = { // 0x080FB130 + PALETTE(165, 16, 0x30) + TILES(0x16CA5, 63) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0741__v1_l0[] = { // 0x080FB154 + PALETTE(165, 16, 0x30) + TILES(0x16CE4, 63) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0741[2] = { + anim_0741__v0_l0, + anim_0741__v1_l0, +}; + +const s32 anim_0742__v0_l0[] = { // 0x080FB180 + PALETTE(166, 16, 0xA0) + TILES(0x16D23, 36) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0742[1] = { + anim_0742__v0_l0, +}; + +const s32 anim_0743__v0_l0[] = { // 0x080FB1A8 + PALETTE(167, 16, 0xB0) + TILES(0x16D47, 36) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0743[1] = { + anim_0743__v0_l0, +}; + +const s32 anim_0744__v0_l0[] = { // 0x080FB1D0 + PALETTE(168, 16, 0xC0) + TILES(0x16D6B, 36) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0744[1] = { + anim_0744__v0_l0, +}; + +const s32 anim_0745__v0_l0[] = { // 0x080FB1F8 + PALETTE(169, 16, 0xF0) + TILES(0x16D8F, 6) + SHOW_FRAME(10, 0) + + TILES(0x16D95, 6) + SHOW_FRAME(10, 1) + + TILES(0x16D9B, 6) + SHOW_FRAME(10, 2) + + TILES(0x16DA1, 6) + SHOW_FRAME(10, 3) + + TILES(0x16DA7, 6) + SHOW_FRAME(10, 4) + + JUMP_BACK(28) +}; + +const s32 * const anim_0745[1] = { + anim_0745__v0_l0, +}; + +const s32 anim_0746__v0_l0[] = { // 0x080FB274 + PALETTE(6, 16, 0x40) + TILES(0x16DAD, 8) + SHOW_FRAME(2, 0) + + TILES(0x16DB5, 12) + SHOW_FRAME(2, 1) + + TILES(0x16DC1, 12) + SHOW_FRAME(2, 2) + + TILES(0x16DCD, 12) + SHOW_FRAME(2, 3) + + TILES(0x16DD9, 12) + SHOW_FRAME(2, 4) + + TILES(0x16DE5, 12) + SHOW_FRAME(2, 5) + + TILES(0x16DF1, 12) + SHOW_FRAME(2, 6) + + TILES(0x16DFD, 8) + SHOW_FRAME(2, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0746[1] = { + anim_0746__v0_l0, +}; + +const s32 anim_0747__v0_l0[] = { // 0x080FB32C + PALETTE(6, 16, 0x40) + TILES(0x16E05, 20) + SHOW_FRAME(2, 0) + + TILES(0x16E19, 20) + SHOW_FRAME(2, 1) + + TILES(0x16E2D, 16) + SHOW_FRAME(2, 2) + + TILES(0x16E3D, 20) + SHOW_FRAME(2, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0747[1] = { + anim_0747__v0_l0, +}; + +const s32 anim_0748__v0_l0[] = { // 0x080FB394 + TILES(0x16E51, 32) + PALETTE(6, 16, 0x40) + SHOW_FRAME(2, 0) + + SHOW_FRAME(2, 1) + + SHOW_FRAME(2, 2) + + HITBOX(0, 65, 39, 65, 39) + SHOW_FRAME(2, 3) + + SHOW_FRAME(2, 4) + + SHOW_FRAME(2, 5) + + SHOW_FRAME(2, 6) + + SHOW_FRAME(2, 7) + + END() +}; + +const s32 * const anim_0748[1] = { + anim_0748__v0_l0, +}; + +const s32 anim_0749__v0_l0[] = { // 0x080FB400 + PALETTE(170, 16, 0x70) + TILES(0x16E71, 16) + SHOW_FRAME(1, 0) + + TILES(0x16E81, 4) + SHOW_FRAME(1, 1) + + TILES(0x16E85, 6) + SHOW_FRAME(1, 2) + + TILES(0x16E8B, 9) + SHOW_FRAME(1, 3) + + TILES(0x16E94, 12) + SHOW_FRAME(1, 4) + + TILES(0x16EA0, 16) + SHOW_FRAME(1, 5) + + TILES(0x16EB0, 16) + SHOW_FRAME(1, 6) + + TILES(0x16EC0, 16) + SHOW_FRAME(1, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0749[1] = { + anim_0749__v0_l0, +}; + +const s32 anim_0750__v0_l0[] = { // 0x080FB4B8 + PALETTE(1, 16, 0x50) + TILES(0x16ED0, 36) + SHOW_FRAME(3, 0) + + TILES(0x16EF4, 36) + SHOW_FRAME(3, 1) + + TILES(0x16F18, 36) + SHOW_FRAME(3, 2) + + TILES(0x16F3C, 36) + SHOW_FRAME(3, 3) + + TILES(0x16F60, 36) + SHOW_FRAME(3, 4) + + TILES(0x16F84, 36) + SHOW_FRAME(3, 5) + + JUMP_BACK(33) +}; + +const s32 * const anim_0750[1] = { + anim_0750__v0_l0, +}; + +const s32 anim_0751__v0_l0[] = { // 0x080FB548 + PALETTE(1, 16, 0x50) + TILES(0x16FA8, 36) + SHOW_FRAME(3, 0) + + TILES(0x16FCC, 36) + SHOW_FRAME(3, 1) + + TILES(0x16FA8, 36) + SHOW_FRAME(3, 0) + + TILES(0x16FCC, 36) + SHOW_FRAME(3, 1) + + TILES(0x16FF0, 36) + SHOW_FRAME(3, 2) + + TILES(0x17014, 36) + SHOW_FRAME(3, 3) + + TILES(0x16FF0, 36) + SHOW_FRAME(3, 2) + + TILES(0x17014, 36) + SHOW_FRAME(3, 3) + + TILES(0x17038, 36) + SHOW_FRAME(3, 4) + + TILES(0x1705C, 36) + SHOW_FRAME(3, 5) + + TILES(0x17038, 36) + SHOW_FRAME(3, 4) + + TILES(0x1705C, 36) + SHOW_FRAME(3, 5) + + TILES(0x17080, 36) + SHOW_FRAME(3, 6) + + TILES(0x170A4, 36) + SHOW_FRAME(3, 7) + + TILES(0x17080, 36) + SHOW_FRAME(3, 6) + + TILES(0x170A4, 36) + SHOW_FRAME(3, 7) + + JUMP_BACK(83) +}; + +const s32 * const anim_0751[1] = { + anim_0751__v0_l0, +}; + +const s32 anim_0752__v0_l0[] = { // 0x080FB6A0 + PALETTE(1, 16, 0x50) + TILES(0x170C8, 36) + SHOW_FRAME(2, 0) + + TILES(0x170EC, 36) + SHOW_FRAME(2, 1) + + TILES(0x17110, 36) + SHOW_FRAME(2, 2) + + TILES(0x17134, 36) + SHOW_FRAME(2, 3) + + TILES(0x17158, 36) + SHOW_FRAME(2, 4) + + TILES(0x1717C, 36) + SHOW_FRAME(2, 5) + + JUMP_BACK(33) +}; + +const s32 anim_0752__v1_l0[] = { // 0x080FB72C + PALETTE(1, 16, 0x50) + TILES(0x171A0, 6) + SHOW_FRAME(2, 6) + + TILES(0x171A6, 6) + SHOW_FRAME(2, 7) + + TILES(0x171AC, 9) + SHOW_FRAME(2, 8) + + TILES(0x171B5, 9) + SHOW_FRAME(2, 9) + + TILES(0x171BE, 9) + SHOW_FRAME(2, 10) + + TILES(0x171C7, 9) + SHOW_FRAME(2, 11) + + TILES(0x171D0, 1) + SHOW_FRAME(2, 12) + + TILES(0x171D1, 1) + SHOW_FRAME(2, 13) + + TILES(0x171D2, 4) + SHOW_FRAME(2, 14) + + TILES(0x171D6, 4) + SHOW_FRAME(2, 15) + + TILES(0x171DA, 4) + SHOW_FRAME(2, 16) + + TILES(0x171DE, 4) + SHOW_FRAME(2, 17) + + END() +}; + +const s32 * const anim_0752[2] = { + anim_0752__v0_l0, + anim_0752__v1_l0, +}; + +const s32 anim_0753__v0_l0[] = { // 0x080FB834 + TILES(0x171E2, 4) + PALETTE(1, 16, 0x50) + SHOW_FRAME(12, 0) + + SHOW_FRAME(12, 1) + + SHOW_FRAME(12, 2) + + SHOW_FRAME(12, 3) + + JUMP_BACK(11) +}; + +const s32 * const anim_0753[1] = { + anim_0753__v0_l0, +}; + +const s32 anim_0754__v0_l0[] = { // 0x080FB878 + TILES(0x171E6, 16) + PALETTE(1, 16, 0x50) + SHOW_FRAME(12, 0) + + SHOW_FRAME(12, 1) + + SHOW_FRAME(12, 2) + + SHOW_FRAME(12, 3) + + JUMP_BACK(11) +}; + +const s32 * const anim_0754[1] = { + anim_0754__v0_l0, +}; + +const s32 anim_0755__v0_l0[] = { // 0x080FB8BC + PALETTE(68, 16, 0x60) + TILES(0x171F6, 9) + SHOW_FRAME(3, 0) + + TILES(0x171FF, 12) + SHOW_FRAME(3, 1) + + TILES(0x1720B, 12) + SHOW_FRAME(3, 2) + + TILES(0x17217, 12) + SHOW_FRAME(3, 3) + + END() +}; + +const s32 * const anim_0755[1] = { + anim_0755__v0_l0, +}; + +const s32 anim_0756__v0_l0[] = { // 0x080FB920 + PALETTE(1, 16, 0x50) + TILES(0x17223, 2) + SHOW_FRAME(3, 0) + + TILES(0x17225, 8) + SHOW_FRAME(3, 1) + + TILES(0x1722D, 10) + SHOW_FRAME(3, 2) + + TILES(0x17237, 10) + SHOW_FRAME(3, 3) + + TILES(0x17241, 4) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0756[1] = { + anim_0756__v0_l0, +}; + +const s32 anim_0757__v0_l0[] = { // 0x080FB998 + PALETTE(1, 16, 0x50) + TILES(0x17245, 2) + SHOW_FRAME(3, 0) + + TILES(0x17247, 8) + SHOW_FRAME(3, 1) + + TILES(0x1724F, 8) + SHOW_FRAME(3, 2) + + TILES(0x17257, 5) + SHOW_FRAME(3, 3) + + TILES(0x1725C, 5) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0757[1] = { + anim_0757__v0_l0, +}; + +const s32 anim_0758__v0_l0[] = { // 0x080FBA10 + PALETTE(1, 16, 0x50) + TILES(0x17261, 2) + SHOW_FRAME(3, 0) + + TILES(0x17263, 8) + SHOW_FRAME(3, 1) + + TILES(0x1726B, 8) + SHOW_FRAME(3, 2) + + TILES(0x17273, 4) + SHOW_FRAME(3, 3) + + TILES(0x17277, 4) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0758[1] = { + anim_0758__v0_l0, +}; + +const s32 anim_0759__v0_l0[] = { // 0x080FBA88 + PALETTE(171, 16, 0x40) + TILES(0x1727B, 4) + SHOW_FRAME(3, 0) + + TILES(0x1727F, 4) + SHOW_FRAME(3, 1) + + TILES(0x17283, 4) + SHOW_FRAME(3, 2) + + TILES(0x17287, 4) + SHOW_FRAME(3, 3) + + TILES(0x1728B, 2) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0759[1] = { + anim_0759__v0_l0, +}; + +const s32 anim_0760__v0_l0[] = { // 0x080FBB00 + PALETTE(171, 16, 0x40) + TILES(0x1728D, 2) + SHOW_FRAME(3, 0) + + TILES(0x1728F, 4) + SHOW_FRAME(3, 1) + + TILES(0x17293, 4) + SHOW_FRAME(3, 2) + + TILES(0x17297, 4) + SHOW_FRAME(3, 3) + + TILES(0x1729B, 2) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0760[1] = { + anim_0760__v0_l0, +}; + +const s32 anim_0761__v0_l0[] = { // 0x080FBB78 + PALETTE(171, 16, 0x40) + TILES(0x1729D, 2) + SHOW_FRAME(3, 0) + + TILES(0x1729F, 4) + SHOW_FRAME(3, 1) + + TILES(0x172A3, 4) + SHOW_FRAME(3, 2) + + TILES(0x172A7, 4) + SHOW_FRAME(3, 3) + + TILES(0x172AB, 2) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0761[1] = { + anim_0761__v0_l0, +}; + +const s32 anim_0762__v0_l0[] = { // 0x080FBBF0 + PALETTE(68, 16, 0x60) + TILES(0x172AD, 6) + SHOW_FRAME(3, 0) + + TILES(0x172B3, 12) + SHOW_FRAME(3, 1) + + TILES(0x172BF, 12) + SHOW_FRAME(3, 2) + + TILES(0x172CB, 8) + SHOW_FRAME(3, 3) + + TILES(0x172D3, 4) + SHOW_FRAME(3, 4) + + TILES(0x172D7, 6) + SHOW_FRAME(3, 5) + + TILES(0x172DD, 6) + SHOW_FRAME(3, 6) + + TILES(0x172E3, 4) + SHOW_FRAME(3, 7) + + END() +}; + +const s32 * const anim_0762[1] = { + anim_0762__v0_l0, +}; + +const s32 anim_0763__v0_l0[] = { // 0x080FBCA4 + PALETTE(68, 16, 0x60) + TILES(0x172E7, 9) + SHOW_FRAME(3, 0) + + TILES(0x172F0, 16) + SHOW_FRAME(3, 1) + + TILES(0x17300, 16) + SHOW_FRAME(3, 2) + + TILES(0x17310, 16) + SHOW_FRAME(3, 3) + + TILES(0x17320, 16) + SHOW_FRAME(3, 4) + + END() +}; + +const s32 * const anim_0763[1] = { + anim_0763__v0_l0, +}; + +const s32 anim_0764__v0_l0[] = { // 0x080FBD1C + PALETTE(172, 16, 0x40) + TILES(0x17330, 4) + SHOW_FRAME(3, 0) + + TILES(0x17334, 4) + SHOW_FRAME(3, 1) + + TILES(0x17338, 4) + SHOW_FRAME(3, 2) + + TILES(0x1733C, 4) + SHOW_FRAME(3, 3) + + TILES(0x17340, 4) + SHOW_FRAME(3, 4) + + TILES(0x17344, 1) + SHOW_FRAME(3, 5) + + END() +}; + +const s32 * const anim_0764[1] = { + anim_0764__v0_l0, +}; + +const s32 anim_0765__v0_l0[] = { // 0x080FBDA8 + PALETTE(6, 16, 0x40) + TILES(0x17345, 9) + SHOW_FRAME(3, 0) + + TILES(0x1734E, 16) + SHOW_FRAME(3, 1) + + TILES(0x1735E, 16) + SHOW_FRAME(3, 2) + + TILES(0x1736E, 16) + SHOW_FRAME(3, 3) + + TILES(0x1737E, 16) + SHOW_FRAME(3, 4) + + TILES(0x1738E, 16) + SHOW_FRAME(3, 5) + + TILES(0x1739E, 12) + SHOW_FRAME(3, 6) + + END() +}; + +const s32 * const anim_0765[1] = { + anim_0765__v0_l0, +}; + +const s32 anim_0766__v0_l0[] = { // 0x080FBE48 + PALETTE(1, 16, 0x50) + TILES(0x173AA, 4) + SHOW_FRAME(2, 0) + + TILES(0x173AE, 4) + SHOW_FRAME(2, 1) + + TILES(0x173B2, 4) + SHOW_FRAME(2, 2) + + TILES(0x173B6, 4) + SHOW_FRAME(2, 3) + + TILES(0x173BA, 4) + SHOW_FRAME(2, 4) + + TILES(0x173BE, 4) + SHOW_FRAME(2, 5) + + TILES(0x173C2, 4) + SHOW_FRAME(2, 6) + + TILES(0x173AA, 4) + SHOW_FRAME(2, 0) + + END() +}; + +const s32 anim_0766__v1_l0[] = { // 0x080FBEF8 + PALETTE(1, 16, 0x50) + TILES(0x173C6, 1) + SHOW_FRAME(2, 7) + + TILES(0x173AA, 4) + SHOW_FRAME(2, 0) + + TILES(0x173C7, 4) + SHOW_FRAME(2, 8) + + TILES(0x173CB, 4) + SHOW_FRAME(2, 9) + + TILES(0x173CF, 4) + SHOW_FRAME(2, 10) + + TILES(0x173D3, 4) + SHOW_FRAME(2, 11) + + TILES(0x173AA, 4) + SHOW_FRAME(2, 0) + + TILES(0x173C6, 1) + SHOW_FRAME(2, 7) + + END() +}; + +const s32 * const anim_0766[2] = { + anim_0766__v0_l0, + anim_0766__v1_l0, +}; + +const s32 anim_0767__v0_l0[] = { // 0x080FBFB0 + PALETTE(88, 16, 0x0) + TILES(0x173D7, 4) + SHOW_FRAME(3, 0) + + TILES(0x173DB, 4) + SHOW_FRAME(3, 1) + + TILES(0x173DF, 4) + SHOW_FRAME(3, 2) + + TILES(0x173E3, 4) + SHOW_FRAME(3, 3) + + TILES(0x173E7, 4) + SHOW_FRAME(3, 4) + + TILES(0x173EB, 4) + SHOW_FRAME(3, 5) + + TILES(0x173EF, 4) + SHOW_FRAME(3, 6) + + TILES(0x173F3, 4) + SHOW_FRAME(3, 7) + + JUMP_BACK(43) +}; + +const s32 * const anim_0767[1] = { + anim_0767__v0_l0, +}; + +const s32 anim_0768__v0_l0[] = { // 0x080FC068 + PALETTE(68, 16, 0x60) + TILES(0x173F7, 30) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0768__v1_l0[] = { // 0x080FC08C + PALETTE(68, 16, 0x60) + TILES(0x17415, 14) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0768__v2_l0[] = { // 0x080FC0B0 + PALETTE(68, 16, 0x60) + TILES(0x17423, 10) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0768__v3_l0[] = { // 0x080FC0D4 + PALETTE(68, 16, 0x60) + TILES(0x1742D, 14) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0768__v4_l0[] = { // 0x080FC0F8 + PALETTE(68, 16, 0x60) + TILES(0x1743B, 10) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0768__v5_l0[] = { // 0x080FC11C + PALETTE(68, 16, 0x60) + TILES(0x17445, 16) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0768__v6_l0[] = { // 0x080FC140 + PALETTE(68, 16, 0x60) + TILES(0x17455, 16) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0768__v7_l0[] = { // 0x080FC164 + PALETTE(68, 16, 0x60) + TILES(0x17465, 16) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0768__v8_l0[] = { // 0x080FC188 + PALETTE(68, 16, 0x60) + TILES(0x17475, 6) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0768__v9_l0[] = { // 0x080FC1AC + PALETTE(68, 16, 0x60) + TILES(0x1747B, 8) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0768__v10_l0[] = { // 0x080FC1D0 + PALETTE(68, 16, 0x60) + TILES(0x17483, 14) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0768__v11_l0[] = { // 0x080FC1F4 + PALETTE(68, 16, 0x60) + TILES(0x17491, 28) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0768__v12_l0[] = { // 0x080FC218 + PALETTE(68, 16, 0x60) + TILES(0x174AD, 24) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 anim_0768__v13_l0[] = { // 0x080FC23C + PALETTE(68, 16, 0x60) + TILES(0x174C5, 4) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 anim_0768__v14_l0[] = { // 0x080FC260 + PALETTE(68, 16, 0x60) + TILES(0x174C9, 6) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 anim_0768__v15_l0[] = { // 0x080FC284 + PALETTE(68, 16, 0x60) + TILES(0x174CF, 16) + SHOW_FRAME(1, 15) + + END() +}; + +const s32 anim_0768__v16_l0[] = { // 0x080FC2A8 + PALETTE(68, 16, 0x60) + TILES(0x174DF, 12) + SHOW_FRAME(1, 16) + + END() +}; + +const s32 anim_0768__v17_l0[] = { // 0x080FC2CC + PALETTE(68, 16, 0x60) + TILES(0x174EB, 14) + SHOW_FRAME(1, 17) + + END() +}; + +const s32 anim_0768__v18_l0[] = { // 0x080FC2F0 + PALETTE(68, 16, 0x60) + TILES(0x174F9, 18) + SHOW_FRAME(1, 18) + + END() +}; + +const s32 anim_0768__v19_l0[] = { // 0x080FC314 + PALETTE(68, 16, 0x60) + TILES(0x1750B, 12) + SHOW_FRAME(1, 19) + + END() +}; + +const s32 anim_0768__v20_l0[] = { // 0x080FC338 + PALETTE(68, 16, 0x60) + TILES(0x17517, 6) + SHOW_FRAME(1, 20) + + END() +}; + +const s32 * const anim_0768[21] = { + anim_0768__v0_l0, + anim_0768__v1_l0, + anim_0768__v2_l0, + anim_0768__v3_l0, + anim_0768__v4_l0, + anim_0768__v5_l0, + anim_0768__v6_l0, + anim_0768__v7_l0, + anim_0768__v8_l0, + anim_0768__v9_l0, + anim_0768__v10_l0, + anim_0768__v11_l0, + anim_0768__v12_l0, + anim_0768__v13_l0, + anim_0768__v14_l0, + anim_0768__v15_l0, + anim_0768__v16_l0, + anim_0768__v17_l0, + anim_0768__v18_l0, + anim_0768__v19_l0, + anim_0768__v20_l0, +}; + +const s32 anim_0769__v0_l0[] = { // 0x080FC3B0 + PALETTE(173, 16, 0x0) + TILES(0x1751D, 80) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0769__v1_l0[] = { // 0x080FC3D4 + PALETTE(174, 16, 0x40) + TILES(0x1756D, 90) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0769__v2_l0[] = { // 0x080FC3F8 + PALETTE(175, 16, 0x50) + TILES(0x175C7, 100) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0769__v3_l0[] = { // 0x080FC41C + PALETTE(176, 16, 0x30) + TILES(0x1762B, 80) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0769[4] = { + anim_0769__v0_l0, + anim_0769__v1_l0, + anim_0769__v2_l0, + anim_0769__v3_l0, +}; + +const s32 anim_0770__v0_l0[] = { // 0x080FC450 + PALETTE(177, 16, 0xD0) + TILES(0x1767B, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0770__v1_l0[] = { // 0x080FC474 + PALETTE(177, 16, 0xD0) + TILES(0x17687, 16) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0770__v2_l0[] = { // 0x080FC498 + PALETTE(177, 16, 0xD0) + TILES(0x17697, 12) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0770__v3_l0[] = { // 0x080FC4BC + PALETTE(177, 16, 0xD0) + TILES(0x176A3, 8) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0770__v4_l0[] = { // 0x080FC4E0 + PALETTE(177, 16, 0xD0) + TILES(0x176AB, 12) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0770__v5_l0[] = { // 0x080FC504 + PALETTE(177, 16, 0xD0) + TILES(0x176B7, 30) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 * const anim_0770[6] = { + anim_0770__v0_l0, + anim_0770__v1_l0, + anim_0770__v2_l0, + anim_0770__v3_l0, + anim_0770__v4_l0, + anim_0770__v5_l0, +}; + +const s32 anim_0771__v0_l0[] = { // 0x080FC540 + PALETTE(177, 16, 0xD0) + TILES(0x176D5, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0771__v1_l0[] = { // 0x080FC564 + PALETTE(177, 16, 0xD0) + TILES(0x176E1, 16) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0771__v2_l0[] = { // 0x080FC588 + PALETTE(177, 16, 0xD0) + TILES(0x176F1, 8) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0771__v3_l0[] = { // 0x080FC5AC + PALETTE(177, 16, 0xD0) + TILES(0x176F9, 12) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0771__v4_l0[] = { // 0x080FC5D0 + PALETTE(177, 16, 0xD0) + TILES(0x17705, 16) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0771__v5_l0[] = { // 0x080FC5F4 + PALETTE(177, 16, 0xD0) + TILES(0x17715, 30) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 * const anim_0771[6] = { + anim_0771__v0_l0, + anim_0771__v1_l0, + anim_0771__v2_l0, + anim_0771__v3_l0, + anim_0771__v4_l0, + anim_0771__v5_l0, +}; + +const s32 anim_0772__v0_l0[] = { // 0x080FC630 + PALETTE(177, 16, 0xD0) + TILES(0x17733, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0772__v1_l0[] = { // 0x080FC654 + PALETTE(177, 16, 0xD0) + TILES(0x1773B, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0772__v2_l0[] = { // 0x080FC678 + PALETTE(177, 16, 0xD0) + TILES(0x17743, 8) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0772__v3_l0[] = { // 0x080FC69C + PALETTE(177, 16, 0xD0) + TILES(0x1774B, 12) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0772__v4_l0[] = { // 0x080FC6C0 + PALETTE(177, 16, 0xD0) + TILES(0x17757, 12) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0772__v5_l0[] = { // 0x080FC6E4 + PALETTE(177, 16, 0xD0) + TILES(0x17763, 12) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0772__v6_l0[] = { // 0x080FC708 + PALETTE(177, 16, 0xD0) + TILES(0x1776F, 8) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0772__v7_l0[] = { // 0x080FC72C + PALETTE(177, 16, 0xD0) + TILES(0x17777, 8) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0772__v8_l0[] = { // 0x080FC750 + PALETTE(177, 16, 0xD0) + TILES(0x1777F, 30) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0772[9] = { + anim_0772__v0_l0, + anim_0772__v1_l0, + anim_0772__v2_l0, + anim_0772__v3_l0, + anim_0772__v4_l0, + anim_0772__v5_l0, + anim_0772__v6_l0, + anim_0772__v7_l0, + anim_0772__v8_l0, +}; + +const s32 anim_0773__v0_l0[] = { // 0x080FC798 + PALETTE(177, 16, 0xD0) + TILES(0x1779D, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0773__v1_l0[] = { // 0x080FC7BC + PALETTE(177, 16, 0xD0) + TILES(0x177B1, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0773__v2_l0[] = { // 0x080FC7E0 + PALETTE(177, 16, 0xD0) + TILES(0x177C5, 20) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0773__v3_l0[] = { // 0x080FC804 + PALETTE(177, 16, 0xD0) + TILES(0x177D9, 30) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0773[4] = { + anim_0773__v0_l0, + anim_0773__v1_l0, + anim_0773__v2_l0, + anim_0773__v3_l0, +}; + +const s32 anim_0774__v0_l0[] = { // 0x080FC838 + PALETTE(163, 16, 0x80) + TILES(0x177F7, 30) + SHOW_FRAME(6, 0) + + TILES(0x17815, 30) + SHOW_FRAME(6, 1) + + TILES(0x17833, 30) + SHOW_FRAME(6, 2) + + TILES(0x17851, 30) + SHOW_FRAME(6, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0774[1] = { + anim_0774__v0_l0, +}; + +const s32 anim_0775__v0_l0[] = { // 0x080FC8A0 + PALETTE(1, 16, 0x50) + TILES(0x1786F, 4) + SHOW_FRAME(3, 0) + + TILES(0x17873, 4) + SHOW_FRAME(3, 1) + + TILES(0x17877, 4) + SHOW_FRAME(3, 2) + + TILES(0x1787B, 4) + SHOW_FRAME(3, 3) + + TILES(0x1787F, 4) + SHOW_FRAME(3, 4) + + TILES(0x17883, 4) + SHOW_FRAME(3, 5) + + TILES(0x17887, 4) + SHOW_FRAME(3, 6) + + TILES(0x1786F, 4) + SHOW_FRAME(3, 0) + + END() +}; + +const s32 anim_0775__v1_l0[] = { // 0x080FC950 + PALETTE(1, 16, 0x50) + TILES(0x1788B, 1) + SHOW_FRAME(3, 7) + + TILES(0x1786F, 4) + SHOW_FRAME(3, 0) + + TILES(0x1788C, 4) + SHOW_FRAME(3, 8) + + TILES(0x17877, 4) + SHOW_FRAME(3, 2) + + TILES(0x17890, 4) + SHOW_FRAME(3, 9) + + TILES(0x17894, 4) + SHOW_FRAME(3, 10) + + TILES(0x1786F, 4) + SHOW_FRAME(3, 0) + + TILES(0x1788B, 1) + SHOW_FRAME(3, 7) + + END() +}; + +const s32 * const anim_0775[2] = { + anim_0775__v0_l0, + anim_0775__v1_l0, +}; + +const s32 anim_0776__v0_l0[] = { // 0x080FCA08 + PALETTE(157, 16, 0xB0) + TILES(0x800006AB, 15) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0776[1] = { + anim_0776__v0_l0, +}; + +const s32 anim_0777__v0_l0[] = { // 0x080FCA30 + SHOW_FRAME(12, -1) + + PALETTE(1, 16, 0x50) + TILES(0x17898, 12) + SHOW_FRAME(3, 0) + + TILES(0x178A4, 15) + SHOW_FRAME(4, 1) + + TILES(0x178B3, 12) + SHOW_FRAME(3, 2) + + TILES(0x178BF, 9) + SHOW_FRAME(2, 3) + + END() +}; + +const s32 * const anim_0777[1] = { + anim_0777__v0_l0, +}; + +const s32 anim_0778__v0_l0[] = { // 0x080FCA9C + PALETTE(68, 16, 0x60) + TILES(0x178C8, 46) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0778__v1_l0[] = { // 0x080FCAC0 + PALETTE(178, 16, 0x40) + TILES(0x178F6, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0778__v2_l0[] = { // 0x080FCAE4 + PALETTE(179, 16, 0x30) + TILES(0x1790A, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0778__v3_l0[] = { // 0x080FCB08 + PALETTE(179, 16, 0x30) + TILES(0x1791A, 20) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0778__v4_l0[] = { // 0x080FCB2C + PALETTE(179, 16, 0x30) + TILES(0x1792E, 16) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0778__v5_l0[] = { // 0x080FCB50 + PALETTE(179, 16, 0x30) + TILES(0x1793E, 32) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 * const anim_0778[6] = { + anim_0778__v0_l0, + anim_0778__v1_l0, + anim_0778__v2_l0, + anim_0778__v3_l0, + anim_0778__v4_l0, + anim_0778__v5_l0, +}; + +const s32 anim_0779__v0_l0[] = { // 0x080FCB8C + PALETTE(68, 16, 0x60) + TILES(0x1795E, 28) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0779__v1_l0[] = { // 0x080FCBB0 + PALETTE(178, 16, 0x40) + TILES(0x1797A, 28) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0779__v2_l0[] = { // 0x080FCBD4 + PALETTE(179, 16, 0x30) + TILES(0x17996, 8) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0779__v3_l0[] = { // 0x080FCBF8 + PALETTE(179, 16, 0x30) + TILES(0x1799E, 28) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0779__v4_l0[] = { // 0x080FCC1C + PALETTE(179, 16, 0x30) + TILES(0x179BA, 20) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0779__v5_l0[] = { // 0x080FCC40 + PALETTE(179, 16, 0x30) + TILES(0x179CE, 40) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 * const anim_0779[6] = { + anim_0779__v0_l0, + anim_0779__v1_l0, + anim_0779__v2_l0, + anim_0779__v3_l0, + anim_0779__v4_l0, + anim_0779__v5_l0, +}; + +const s32 anim_0780__v0_l0[] = { // 0x080FCC7C + PALETTE(179, 16, 0x30) + TILES(0x179F6, 90) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0780__v1_l0[] = { // 0x080FCCA0 + PALETTE(179, 16, 0x30) + TILES(0x17A50, 90) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0780[2] = { + anim_0780__v0_l0, + anim_0780__v1_l0, +}; + +const s32 anim_0781__v0_l0[] = { // 0x080FCCCC + PALETTE(68, 16, 0x60) + TILES(0x17AAA, 4) + SHOW_FRAME(60, 0) + + END() +}; + +const s32 anim_0781__v1_l0[] = { // 0x080FCCF0 + PALETTE(68, 16, 0x60) + TILES(0x17AAE, 4) + SHOW_FRAME(60, 1) + + END() +}; + +const s32 anim_0781__v2_l0[] = { // 0x080FCD14 + PALETTE(68, 16, 0x60) + TILES(0x17AB2, 4) + SHOW_FRAME(60, 2) + + END() +}; + +const s32 anim_0781__v3_l0[] = { // 0x080FCD38 + PALETTE(68, 16, 0x60) + TILES(0x17AB6, 4) + SHOW_FRAME(60, 3) + + END() +}; + +const s32 anim_0781__v4_l0[] = { // 0x080FCD5C + PALETTE(68, 16, 0x60) + TILES(0x17ABA, 4) + SHOW_FRAME(60, 4) + + END() +}; + +const s32 anim_0781__v5_l0[] = { // 0x080FCD80 + PALETTE(68, 16, 0x60) + TILES(0x17ABE, 4) + SHOW_FRAME(60, 5) + + END() +}; + +const s32 * const anim_0781[6] = { + anim_0781__v0_l0, + anim_0781__v1_l0, + anim_0781__v2_l0, + anim_0781__v3_l0, + anim_0781__v4_l0, + anim_0781__v5_l0, +}; + +const s32 anim_0782__v0_l0[] = { // 0x080FCDBC + PALETTE(1, 16, 0x50) + TILES(0x17AC2, 4) + SHOW_FRAME(8, 0) + + TILES(0x17AC6, 8) + SHOW_FRAME(8, 1) + + TILES(0x17ACE, 8) + SHOW_FRAME(8, 2) + + TILES(0x17AD6, 8) + SHOW_FRAME(8, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0782[1] = { + anim_0782__v0_l0, +}; + +const s32 anim_0783__v0_l0[] = { // 0x080FCE24 + PALETTE(179, 16, 0x0) + TILES(0x17ADE, 28) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0783[1] = { + anim_0783__v0_l0, +}; + +const s32 anim_0784__v0_l0[] = { // 0x080FCE4C + PALETTE(180, 16, 0x0) + TILES(0x17AFA, 100) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0784[1] = { + anim_0784__v0_l0, +}; + +const s32 anim_0785__v0_l0[] = { // 0x080FCE74 + PALETTE(68, 16, 0xF0) + TILES(0x17B5E, 69) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0785__v1_l0[] = { // 0x080FCE98 + PALETTE(68, 16, 0xF0) + TILES(0x17BA3, 39) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0785__v2_l0[] = { // 0x080FCEBC + PALETTE(68, 16, 0xF0) + TILES(0x17BCA, 51) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0785[3] = { + anim_0785__v0_l0, + anim_0785__v1_l0, + anim_0785__v2_l0, +}; + +const s32 anim_0786__v0_l0[] = { // 0x080FCEEC + PALETTE(179, 16, 0x0) + TILES(0x17BFD, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0786[1] = { + anim_0786__v0_l0, +}; + +const s32 anim_0787__v0_l0[] = { // 0x080FCF14 + PALETTE(180, 16, 0x0) + TILES(0x17C11, 46) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0787[1] = { + anim_0787__v0_l0, +}; + +const s32 anim_0788__v0_l0[] = { // 0x080FCF3C + PALETTE(32, 16, 0xD0) + TILES(0x17C3F, 4) + SHOW_FRAME(3, 0) + + TILES(0x17C43, 4) + SHOW_FRAME(3, 1) + + TILES(0x17C47, 4) + SHOW_FRAME(3, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0788[1] = { + anim_0788__v0_l0, +}; + +const s32 anim_0789__v0_l0[] = { // 0x080FCF90 + PALETTE(32, 16, 0xD0) + TILES(0x17C4B, 4) + SHOW_FRAME(3, 0) + + TILES(0x17C4F, 4) + SHOW_FRAME(3, 1) + + TILES(0x17C53, 4) + SHOW_FRAME(3, 2) + + JUMP_BACK(18) +}; + +const s32 * const anim_0789[1] = { + anim_0789__v0_l0, +}; + +const s32 anim_0790__v0_l0[] = { // 0x080FCFE4 + PALETTE(181, 16, 0xC0) + TILES(0x17C57, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0790[1] = { + anim_0790__v0_l0, +}; + +const s32 anim_0791__v0_l0[] = { // 0x080FD00C + PALETTE(181, 16, 0xC0) + TILES(0x17C61, 21) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0791[1] = { + anim_0791__v0_l0, +}; + +const s32 anim_0792__v0_l0[] = { // 0x080FD034 + PALETTE(182, 16, 0xC0) + TILES(0x17C76, 30) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0792[1] = { + anim_0792__v0_l0, +}; + +const s32 anim_0793__v0_l0[] = { // 0x080FD05C + PALETTE(181, 16, 0xC0) + TILES(0x17C94, 80) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0793[1] = { + anim_0793__v0_l0, +}; + +const s32 anim_0794__v0_l0[] = { // 0x080FD084 + PALETTE(1, 16, 0x50) + TILES(0x17CE4, 8) + HITBOX(0, 1, -18, 1, -18) + SHOW_FRAME(5, 0) + + TILES(0x17CEC, 8) + HITBOX(0, 1, -18, 1, -18) + SHOW_FRAME(5, 1) + + TILES(0x17CF4, 8) + HITBOX(0, 1, -18, 1, -18) + SHOW_FRAME(5, 2) + + TILES(0x17CFC, 8) + HITBOX(0, 1, -18, 1, -18) + SHOW_FRAME(5, 3) + + TILES(0x17D04, 6) + HITBOX(0, 1, -18, 1, -18) + SHOW_FRAME(5, 4) + + TILES(0x17D0A, 8) + HITBOX(0, 1, -18, 1, -18) + SHOW_FRAME(5, 5) + + JUMP_BACK(51) +}; + +const s32 * const anim_0794[1] = { + anim_0794__v0_l0, +}; + +const s32 anim_0795__v0_l0[] = { // 0x080FD15C + TILES(0x17D12, 16) + PALETTE(68, 16, 0x60) + HITBOX(0, -12, -12, 12, 12) + SHOW_FRAME(6, 0) + + SHOW_FRAME(6, 1) + + SHOW_FRAME(6, 2) + + SHOW_FRAME(6, 3) + + JUMP_BACK(14) +}; + +const s32 * const anim_0795[1] = { + anim_0795__v0_l0, +}; + +const s32 anim_0796__v0_l0[] = { // 0x080FD1AC + TILES(0x17D22, 16) + PALETTE(68, 16, 0x60) + SHOW_FRAME(4, 0) + + SHOW_FRAME(4, 1) + + SHOW_FRAME(4, 2) + + SHOW_FRAME(4, 3) + + END() +}; + +const s32 * const anim_0796[1] = { + anim_0796__v0_l0, +}; + +const s32 anim_0797__v0_l0[] = { // 0x080FD1EC + PALETTE(183, 16, 0x60) + TILES(0x17D32, 64) + HITBOX(0, -10, -10, 10, 10) + SHOW_FRAME(2, 0) + + TILES(0x17D72, 64) + SHOW_FRAME(2, 1) + + TILES(0x17DB2, 64) + SHOW_FRAME(2, 2) + + TILES(0x17DF2, 64) + SHOW_FRAME(2, 3) + + TILES(0x17E32, 64) + SHOW_FRAME(2, 4) + + TILES(0x17E72, 64) + SHOW_FRAME(2, 5) + + TILES(0x17EB2, 64) + SHOW_FRAME(2, 6) + + JUMP_BACK(41) +}; + +const s32 * const anim_0797[1] = { + anim_0797__v0_l0, +}; + +const s32 anim_0798__v0_l0[] = { // 0x080FD29C + TILES(0x17EF2, 24) + PALETTE(68, 16, 0x60) + SHOW_FRAME(2, 0) + + SHOW_FRAME(2, 1) + + SHOW_FRAME(2, 2) + + SHOW_FRAME(2, 3) + + SHOW_FRAME(2, 4) + + SHOW_FRAME(2, 5) + + END() +}; + +const s32 * const anim_0798[1] = { + anim_0798__v0_l0, +}; + +const s32 anim_0799__v0_l0[] = { // 0x080FD2EC + TILES(0x17F0A, 64) + PALETTE(33, 16, 0x70) + HITBOX(0, -9, -9, 10, 10) + SHOW_FRAME(2, 0) + + SHOW_FRAME(2, 1) + + SHOW_FRAME(2, 2) + + SHOW_FRAME(2, 3) + + JUMP_BACK(14) +}; + +const s32 anim_0799__v1_l0[] = { // 0x080FD338 + TILES(0x17F4A, 64) + PALETTE(33, 16, 0x70) + HITBOX(0, -9, -9, 10, 10) + SHOW_FRAME(2, 4) + + SHOW_FRAME(2, 5) + + SHOW_FRAME(2, 6) + + SHOW_FRAME(2, 7) + + JUMP_BACK(14) +}; + +const s32 anim_0799__v2_l0[] = { // 0x080FD384 + TILES(0x17F8A, 64) + PALETTE(33, 16, 0x70) + HITBOX(0, -9, -9, 10, 10) + SHOW_FRAME(2, 8) + + SHOW_FRAME(2, 9) + + SHOW_FRAME(2, 10) + + SHOW_FRAME(2, 11) + + JUMP_BACK(14) +}; + +const s32 anim_0799__v3_l0[] = { // 0x080FD3D0 + TILES(0x17FCA, 64) + PALETTE(33, 16, 0x70) + HITBOX(0, -9, -9, 10, 10) + SHOW_FRAME(2, 12) + + SHOW_FRAME(2, 13) + + SHOW_FRAME(2, 14) + + SHOW_FRAME(2, 15) + + JUMP_BACK(14) +}; + +const s32 anim_0799__v4_l0[] = { // 0x080FD41C + TILES(0x1800A, 64) + PALETTE(33, 16, 0x70) + HITBOX(0, -9, -9, 10, 10) + SHOW_FRAME(2, 16) + + SHOW_FRAME(2, 17) + + SHOW_FRAME(2, 18) + + SHOW_FRAME(2, 19) + + JUMP_BACK(14) +}; + +const s32 anim_0799__v5_l0[] = { // 0x080FD468 + TILES(0x1804A, 64) + PALETTE(33, 16, 0x70) + HITBOX(0, -9, -9, 10, 10) + SHOW_FRAME(2, 20) + + SHOW_FRAME(2, 21) + + SHOW_FRAME(2, 22) + + SHOW_FRAME(2, 23) + + JUMP_BACK(14) +}; + +const s32 * const anim_0799[6] = { + anim_0799__v0_l0, + anim_0799__v1_l0, + anim_0799__v2_l0, + anim_0799__v3_l0, + anim_0799__v4_l0, + anim_0799__v5_l0, +}; + +const s32 anim_0800__v0_l0[] = { // 0x080FD4CC + TILES(0x1808A, 160) + PALETTE(116, 16, 0xF0) + HITBOX(0, -15, -15, 14, 15) + SHOW_FRAME(3, 0) + + SHOW_FRAME(3, 1) + + SHOW_FRAME(3, 2) + + SHOW_FRAME(3, 3) + + SHOW_FRAME(3, 4) + + SHOW_FRAME(3, 5) + + SHOW_FRAME(3, 6) + + SHOW_FRAME(3, 7) + + SHOW_FRAME(3, 8) + + SHOW_FRAME(3, 9) + + JUMP_BACK(26) +}; + +const s32 * const anim_0800[1] = { + anim_0800__v0_l0, +}; + +const s32 anim_0801__v0_l0[] = { // 0x080FD54C + TILES(0x1812A, 32) + PALETTE(33, 16, 0x70) + HITBOX(0, -7, -7, 7, 7) + SHOW_FRAME(2, 0) + + SHOW_FRAME(2, 1) + + JUMP_BACK(10) +}; + +const s32 * const anim_0801[1] = { + anim_0801__v0_l0, +}; + +const s32 anim_0802__v0_l0[] = { // 0x080FD58C + TILES(0x1814A, 80) + PALETTE(33, 16, 0x70) + SHOW_FRAME(4, 0) + + SHOW_FRAME(4, 1) + + SHOW_FRAME(4, 2) + + SHOW_FRAME(4, 3) + + SHOW_FRAME(4, 4) + + END() +}; + +const s32 * const anim_0802[1] = { + anim_0802__v0_l0, +}; + +const s32 anim_0805__v0_l0[] = { // 0x080FD5D4 + PALETTE(0, 16, 0x70) + TILES(0x1819A, 9) + SHOW_FRAME(3, 0) + + TILES(0x181A3, 9) + SHOW_FRAME(3, 1) + + JUMP_BACK(13) +}; + +const s32 anim_0805__v1_l0[] = { // 0x080FD610 + PALETTE(3, 16, 0x80) + TILES(0x181AC, 9) + SHOW_FRAME(3, 2) + + TILES(0x181B5, 9) + SHOW_FRAME(3, 3) + + JUMP_BACK(13) +}; + +const s32 * const anim_0805[2] = { + anim_0805__v0_l0, + anim_0805__v1_l0, +}; + +const s32 anim_0806__v0_l0[] = { // 0x080FD654 + PALETTE(184, 16, 0x50) + TILES(0x181BE, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0806__v1_l0[] = { // 0x080FD678 + PALETTE(184, 16, 0x50) + TILES(0x181C4, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0806__v2_l0[] = { // 0x080FD69C + PALETTE(184, 16, 0x60) + TILES(0x181BE, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0806__v3_l0[] = { // 0x080FD6C0 + PALETTE(184, 16, 0x60) + TILES(0x181C4, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0806__v4_l0[] = { // 0x080FD6E4 + PALETTE(184, 16, 0x70) + TILES(0x181BE, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0806__v5_l0[] = { // 0x080FD708 + PALETTE(184, 16, 0x70) + TILES(0x181C4, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0806__v6_l0[] = { // 0x080FD72C + PALETTE(184, 16, 0x80) + TILES(0x181BE, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0806__v7_l0[] = { // 0x080FD750 + PALETTE(184, 16, 0x70) + TILES(0x181CA, 6) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0806[8] = { + anim_0806__v0_l0, + anim_0806__v1_l0, + anim_0806__v2_l0, + anim_0806__v3_l0, + anim_0806__v4_l0, + anim_0806__v5_l0, + anim_0806__v6_l0, + anim_0806__v7_l0, +}; + +const s32 anim_0807__v0_l0[] = { // 0x080FD794 + PALETTE(185, 16, 0x20) + TILES(0x181D0, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0807__v1_l0[] = { // 0x080FD7B8 + PALETTE(185, 16, 0x20) + TILES(0x181E4, 22) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0807__v2_l0[] = { // 0x080FD7DC + PALETTE(185, 16, 0x20) + TILES(0x181FA, 22) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0807__v3_l0[] = { // 0x080FD800 + PALETTE(185, 16, 0x20) + TILES(0x18210, 16) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0807__v4_l0[] = { // 0x080FD824 + PALETTE(185, 16, 0x20) + TILES(0x18220, 4) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0807__v5_l0[] = { // 0x080FD848 + PALETTE(185, 16, 0x20) + TILES(0x18224, 4) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0807__v6_l0[] = { // 0x080FD86C + PALETTE(185, 16, 0x20) + TILES(0x18228, 4) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0807__v7_l0[] = { // 0x080FD890 + PALETTE(185, 16, 0x20) + TILES(0x1822C, 4) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0807__v8_l0[] = { // 0x080FD8B4 + PALETTE(185, 16, 0x20) + TILES(0x18230, 4) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0807[9] = { + anim_0807__v0_l0, + anim_0807__v1_l0, + anim_0807__v2_l0, + anim_0807__v3_l0, + anim_0807__v4_l0, + anim_0807__v5_l0, + anim_0807__v6_l0, + anim_0807__v7_l0, + anim_0807__v8_l0, +}; + +const s32 anim_0808__v0_l0[] = { // 0x080FD8FC + PALETTE(186, 16, 0x60) + TILES(0x18234, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0808__v1_l0[] = { // 0x080FD920 + PALETTE(186, 16, 0x60) + TILES(0x1823E, 21) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0808__v2_l0[] = { // 0x080FD944 + PALETTE(186, 16, 0x60) + TILES(0x18253, 51) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0808__v3_l0[] = { // 0x080FD968 + PALETTE(186, 16, 0x60) + TILES(0x18286, 38) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0808__v4_l0[] = { // 0x080FD98C + PALETTE(186, 16, 0x60) + TILES(0x182AC, 84) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0808[5] = { + anim_0808__v0_l0, + anim_0808__v1_l0, + anim_0808__v2_l0, + anim_0808__v3_l0, + anim_0808__v4_l0, +}; + +const s32 anim_0809__v0_l0[] = { // 0x080FD9C4 + PALETTE(187, 16, 0x60) + TILES(0x18300, 96) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0809[1] = { + anim_0809__v0_l0, +}; + +const s32 anim_0810__v0_l0[] = { // 0x080FD9EC + PALETTE(35, 16, 0x90) + TILES(0x18360, 40) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0810__v1_l0[] = { // 0x080FDA10 + PALETTE(35, 16, 0x90) + TILES(0x18388, 64) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0810[2] = { + anim_0810__v0_l0, + anim_0810__v1_l0, +}; + +const s32 anim_0811__v0_l0[] = { // 0x080FDA3C + PALETTE(179, 16, 0x0) + TILES(0x183C8, 80) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0811[1] = { + anim_0811__v0_l0, +}; + +const s32 anim_0812__v0_l0[] = { // 0x080FDA64 + PALETTE(188, 16, 0xC0) + TILES(0x18418, 38) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0812__v1_l0[] = { // 0x080FDA88 + PALETTE(188, 16, 0xC0) + TILES(0x1843E, 30) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0812__v2_l0[] = { // 0x080FDAAC + PALETTE(188, 16, 0xC0) + TILES(0x1845C, 18) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0812[3] = { + anim_0812__v0_l0, + anim_0812__v1_l0, + anim_0812__v2_l0, +}; + +const s32 anim_0813__v0_l0[] = { // 0x080FDADC + PALETTE(189, 16, 0xB0) + TILES(0x1846E, 60) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0813__v1_l0[] = { // 0x080FDB00 + PALETTE(189, 16, 0xB0) + TILES(0x184AA, 60) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0813[2] = { + anim_0813__v0_l0, + anim_0813__v1_l0, +}; + +const s32 anim_0814__v0_l0[] = { // 0x080FDB2C + PALETTE(190, 16, 0xF0) + SHOW_FRAME(16, -1) + + PALETTE(191, 16, 0xF0) + SHOW_FRAME(16, -1) + + PALETTE(192, 16, 0xF0) + SHOW_FRAME(16, -1) + + PALETTE(193, 16, 0xF0) + SHOW_FRAME(16, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0814[1] = { + anim_0814__v0_l0, +}; + +const s32 anim_0815__v0_l0[] = { // 0x080FDB88 + PALETTE(194, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(195, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(196, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(197, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(198, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(199, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(200, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(201, 16, 0xA0) + SHOW_FRAME(1, -1) + + JUMP_BACK(40) +}; + +const s32 * const anim_0815[1] = { + anim_0815__v0_l0, +}; + +const s32 anim_0816__v0_l0[] = { // 0x080FDC34 + PALETTE(202, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + PALETTE(203, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + PALETTE(204, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + PALETTE(205, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + PALETTE(206, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + PALETTE(207, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + PALETTE(208, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + PALETTE(209, 16, 0x80) + TILES(0x184E6, 4) + SHOW_FRAME(6, 0) + + JUMP_BACK(64) +}; + +const s32 * const anim_0816[1] = { + anim_0816__v0_l0, +}; + +const s32 anim_0817__v0_l0[] = { // 0x080FDD40 + PALETTE(210, 16, 0x30) + TILES(0x184EA, 4) + SHOW_FRAME(5, 0) + + PALETTE(211, 16, 0x30) + TILES(0x184EA, 4) + SHOW_FRAME(5, 0) + + PALETTE(212, 16, 0x30) + TILES(0x184EA, 4) + SHOW_FRAME(5, 0) + + PALETTE(213, 16, 0x30) + TILES(0x184EA, 4) + SHOW_FRAME(5, 0) + + JUMP_BACK(32) +}; + +const s32 * const anim_0817[1] = { + anim_0817__v0_l0, +}; + +const s32 anim_0818__v0_l0[] = { // 0x080FDDCC + PALETTE(214, 16, 0x10) + TILES(0x184EE, 4) + SHOW_FRAME(16, 0) + + PALETTE(215, 16, 0x10) + TILES(0x184EE, 4) + SHOW_FRAME(16, 0) + + PALETTE(216, 16, 0x10) + TILES(0x184EE, 4) + SHOW_FRAME(16, 0) + + PALETTE(217, 16, 0x10) + TILES(0x184EE, 4) + SHOW_FRAME(16, 0) + + JUMP_BACK(32) +}; + +const s32 * const anim_0818[1] = { + anim_0818__v0_l0, +}; + +const s32 anim_0819__v0_l0[] = { // 0x080FDE58 + PALETTE(218, 16, 0x50) + TILES(0x184F2, 16) + SHOW_FRAME(4, 0) + + PALETTE(219, 16, 0x50) + SHOW_FRAME(4, 0) + + PALETTE(220, 16, 0x50) + SHOW_FRAME(4, 0) + + PALETTE(221, 16, 0x50) + SHOW_FRAME(4, 0) + + PALETTE(222, 16, 0x50) + SHOW_FRAME(4, 0) + + PALETTE(223, 16, 0x50) + SHOW_FRAME(4, 0) + + PALETTE(224, 16, 0x50) + SHOW_FRAME(4, 0) + + PALETTE(225, 16, 0x50) + SHOW_FRAME(4, 0) + + JUMP_BACK(43) +}; + +const s32 * const anim_0819[1] = { + anim_0819__v0_l0, +}; + +const s32 anim_0820__v0_l0[] = { // 0x080FDF10 + PALETTE(226, 16, 0xC0) + SHOW_FRAME(2, -1) + + PALETTE(227, 16, 0xC0) + SHOW_FRAME(2, -1) + + PALETTE(228, 16, 0xC0) + SHOW_FRAME(2, -1) + + PALETTE(229, 16, 0xC0) + SHOW_FRAME(2, -1) + + PALETTE(230, 16, 0xC0) + SHOW_FRAME(2, -1) + + PALETTE(231, 16, 0xC0) + SHOW_FRAME(2, -1) + + PALETTE(232, 16, 0xC0) + SHOW_FRAME(2, -1) + + PALETTE(233, 16, 0xC0) + SHOW_FRAME(2, -1) + + JUMP_BACK(40) +}; + +const s32 anim_0820__v1_l0[] = { // 0x080FDFB8 + PALETTE(234, 16, 0xD0) + TILES(0x18502, 8) + SHOW_FRAME(2, 0) + + PALETTE(235, 16, 0xD0) + SHOW_FRAME(2, 0) + + PALETTE(236, 16, 0xD0) + SHOW_FRAME(2, 0) + + PALETTE(237, 16, 0xD0) + SHOW_FRAME(2, 0) + + PALETTE(238, 16, 0xD0) + SHOW_FRAME(2, 0) + + PALETTE(239, 16, 0xD0) + SHOW_FRAME(2, 0) + + PALETTE(240, 16, 0xD0) + SHOW_FRAME(2, 0) + + PALETTE(241, 16, 0xD0) + SHOW_FRAME(2, 0) + + JUMP_BACK(43) +}; + +const s32 * const anim_0820[2] = { + anim_0820__v0_l0, + anim_0820__v1_l0, +}; + +const s32 anim_0821__v0_l0[] = { // 0x080FE074 + PALETTE(242, 16, 0x0) + SHOW_FRAME(100, -1) + + PALETTE(242, 16, 0x0) + SHOW_FRAME(3, -1) + + PALETTE(243, 16, 0x0) + SHOW_FRAME(3, -1) + + PALETTE(244, 16, 0x0) + SHOW_FRAME(3, -1) + + PALETTE(245, 16, 0x0) + SHOW_FRAME(3, -1) + + PALETTE(246, 16, 0x0) + SHOW_FRAME(3, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0821[1] = { + anim_0821__v0_l0, +}; + +const s32 anim_0822__v0_l0[] = { // 0x080FE0F8 + PALETTE(247, 16, 0x10) + SHOW_FRAME(60, -1) + + PALETTE(247, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(248, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(249, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(250, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(251, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0822[1] = { + anim_0822__v0_l0, +}; + +const s32 anim_0823__v0_l0[] = { // 0x080FE17C + PALETTE(252, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(253, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(254, 16, 0xA0) + SHOW_FRAME(1, -1) + + PALETTE(255, 16, 0xA0) + SHOW_FRAME(1, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0823[1] = { + anim_0823__v0_l0, +}; + +const s32 anim_0824__v0_l0[] = { // 0x080FE1D8 + PALETTE(256, 16, 0x60) + SHOW_FRAME(10, -1) + + PALETTE(257, 16, 0x60) + SHOW_FRAME(10, -1) + + JUMP_BACK(10) +}; + +const s32 * const anim_0824[1] = { + anim_0824__v0_l0, +}; + +const s32 anim_0825__v0_l0[] = { // 0x080FE20C + PALETTE(258, 16, 0x90) + SHOW_FRAME(8, -1) + + PALETTE(259, 16, 0x90) + SHOW_FRAME(8, -1) + + PALETTE(260, 16, 0x90) + SHOW_FRAME(8, -1) + + JUMP_BACK(15) +}; + +const s32 * const anim_0825[1] = { + anim_0825__v0_l0, +}; + +const s32 anim_0826__v0_l0[] = { // 0x080FE254 + PALETTE(261, 16, 0x70) + SHOW_FRAME(6, -1) + + PALETTE(262, 16, 0x70) + SHOW_FRAME(6, -1) + + PALETTE(263, 16, 0x70) + SHOW_FRAME(6, -1) + + PALETTE(264, 16, 0x70) + SHOW_FRAME(6, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0826[1] = { + anim_0826__v0_l0, +}; + +const s32 anim_0827__v0_l0[] = { // 0x080FE2B0 + PALETTE(265, 16, 0xE0) + SHOW_FRAME(8, -1) + + PALETTE(266, 16, 0xE0) + SHOW_FRAME(8, -1) + + PALETTE(267, 16, 0xE0) + SHOW_FRAME(8, -1) + + PALETTE(268, 16, 0xE0) + SHOW_FRAME(8, -1) + + PALETTE(269, 16, 0xE0) + SHOW_FRAME(8, -1) + + PALETTE(270, 16, 0xE0) + SHOW_FRAME(8, -1) + + PALETTE(271, 16, 0xE0) + SHOW_FRAME(8, -1) + + JUMP_BACK(35) +}; + +const s32 * const anim_0827[1] = { + anim_0827__v0_l0, +}; + +const s32 anim_0828__v0_l0[] = { // 0x080FE348 + PALETTE(272, 16, 0xA0) + SHOW_FRAME(8, -1) + + PALETTE(273, 16, 0xA0) + SHOW_FRAME(8, -1) + + PALETTE(274, 16, 0xA0) + SHOW_FRAME(8, -1) + + JUMP_BACK(15) +}; + +const s32 * const anim_0828[1] = { + anim_0828__v0_l0, +}; + +const s32 anim_0829__v0_l0[] = { // 0x080FE390 + PALETTE(275, 16, 0x10) + SHOW_FRAME(8, -1) + + PALETTE(276, 16, 0x10) + SHOW_FRAME(8, -1) + + PALETTE(277, 16, 0x10) + SHOW_FRAME(8, -1) + + JUMP_BACK(15) +}; + +const s32 * const anim_0829[1] = { + anim_0829__v0_l0, +}; + +const s32 anim_0830__v0_l0[] = { // 0x080FE3D8 + PALETTE(278, 16, 0x20) + SHOW_FRAME(5, -1) + + PALETTE(279, 16, 0x20) + SHOW_FRAME(5, -1) + + PALETTE(280, 16, 0x20) + SHOW_FRAME(5, -1) + + PALETTE(281, 16, 0x20) + SHOW_FRAME(5, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0830[1] = { + anim_0830__v0_l0, +}; + +const s32 anim_0831__v0_l0[] = { // 0x080FE434 + PALETTE(282, 16, 0xE0) + SHOW_FRAME(10, -1) + + PALETTE(283, 16, 0xE0) + SHOW_FRAME(10, -1) + + PALETTE(284, 16, 0xE0) + SHOW_FRAME(10, -1) + + PALETTE(285, 16, 0xE0) + SHOW_FRAME(10, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0831[1] = { + anim_0831__v0_l0, +}; + +const s32 anim_0832__v0_l0[] = { // 0x080FE490 + PALETTE(286, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(287, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(288, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(289, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(290, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(291, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(292, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(35) +}; + +const s32 anim_0832__v1_l0[] = { // 0x080FE524 + PALETTE(293, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(294, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(295, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(296, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(295, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(294, 16, 0x0) + SHOW_FRAME(5, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0832[2] = { + anim_0832__v0_l0, + anim_0832__v1_l0, +}; + +const s32 anim_0833__v0_l0[] = { // 0x080FE5AC + PALETTE(297, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(298, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(299, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(300, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(301, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(302, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(303, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(35) +}; + +const s32 anim_0833__v1_l0[] = { // 0x080FE640 + PALETTE(304, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(305, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(306, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(307, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(306, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(305, 16, 0x0) + SHOW_FRAME(5, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0833[2] = { + anim_0833__v0_l0, + anim_0833__v1_l0, +}; + +const s32 anim_0834__v0_l0[] = { // 0x080FE6C8 + PALETTE(308, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(309, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(310, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(311, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(312, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(313, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(314, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(35) +}; + +const s32 anim_0834__v1_l0[] = { // 0x080FE75C + PALETTE(315, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(316, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(317, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(318, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(317, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(316, 16, 0x0) + SHOW_FRAME(5, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0834[2] = { + anim_0834__v0_l0, + anim_0834__v1_l0, +}; + +const s32 anim_0835__v0_l0[] = { // 0x080FE7E4 + PALETTE(319, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(320, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(321, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(322, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(323, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(324, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(325, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(35) +}; + +const s32 anim_0835__v1_l0[] = { // 0x080FE878 + PALETTE(326, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(327, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(328, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(329, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(328, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(327, 16, 0x0) + SHOW_FRAME(5, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0835[2] = { + anim_0835__v0_l0, + anim_0835__v1_l0, +}; + +const s32 anim_0836__v0_l0[] = { // 0x080FE900 + PALETTE(330, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(331, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(332, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(333, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(334, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(335, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(336, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(35) +}; + +const s32 anim_0836__v1_l0[] = { // 0x080FE994 + PALETTE(337, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(338, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(339, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(340, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(339, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(338, 16, 0x0) + SHOW_FRAME(5, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0836[2] = { + anim_0836__v0_l0, + anim_0836__v1_l0, +}; + +const s32 anim_0837__v0_l0[] = { // 0x080FEA1C + PALETTE(341, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(342, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(343, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(344, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(345, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(346, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(347, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(35) +}; + +const s32 anim_0837__v1_l0[] = { // 0x080FEAB0 + PALETTE(348, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(349, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(350, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(351, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(350, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(349, 16, 0x0) + SHOW_FRAME(5, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0837[2] = { + anim_0837__v0_l0, + anim_0837__v1_l0, +}; + +const s32 anim_0838__v0_l0[] = { // 0x080FEB38 + PALETTE(352, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(353, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(354, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(355, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(356, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(357, 16, 0x10) + SHOW_FRAME(3, -1) + + PALETTE(358, 16, 0x10) + SHOW_FRAME(3, -1) + + JUMP_BACK(35) +}; + +const s32 anim_0838__v1_l0[] = { // 0x080FEBCC + PALETTE(359, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(360, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(361, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(362, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(361, 16, 0x0) + SHOW_FRAME(5, -1) + + PALETTE(360, 16, 0x0) + SHOW_FRAME(5, -1) + + JUMP_BACK(30) +}; + +const s32 * const anim_0838[2] = { + anim_0838__v0_l0, + anim_0838__v1_l0, +}; + +const s32 anim_0839__v0_l0[] = { // 0x080FEC54 + PALETTE(363, 16, 0xD0) + SHOW_FRAME(4, -1) + + PALETTE(364, 16, 0xD0) + SHOW_FRAME(4, -1) + + PALETTE(365, 16, 0xD0) + SHOW_FRAME(4, -1) + + PALETTE(366, 16, 0xD0) + SHOW_FRAME(4, -1) + + PALETTE(367, 16, 0xD0) + SHOW_FRAME(4, -1) + + JUMP_BACK(25) +}; + +const s32 * const anim_0839[1] = { + anim_0839__v0_l0, +}; + +const s32 anim_0840__v0_l0[] = { // 0x080FECC4 + PALETTE(368, 16, 0xC0) + SHOW_FRAME(7, -1) + + PALETTE(369, 16, 0xC0) + SHOW_FRAME(7, -1) + + PALETTE(370, 16, 0xC0) + SHOW_FRAME(7, -1) + + PALETTE(371, 16, 0xC0) + SHOW_FRAME(7, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0840[1] = { + anim_0840__v0_l0, +}; + +const s32 anim_0841__v0_l0[] = { // 0x080FED20 + PALETTE(372, 16, 0xA0) + SHOW_FRAME(3, -1) + + PALETTE(373, 16, 0xA0) + SHOW_FRAME(3, -1) + + JUMP_BACK(10) +}; + +const s32 * const anim_0841[1] = { + anim_0841__v0_l0, +}; + +const s32 anim_0842__v0_l0[] = { // 0x080FED54 + PALETTE(363, 16, 0xD0) + SHOW_FRAME(6, -1) + + PALETTE(374, 16, 0xD0) + SHOW_FRAME(6, -1) + + PALETTE(375, 16, 0xD0) + SHOW_FRAME(6, -1) + + PALETTE(376, 16, 0xD0) + SHOW_FRAME(6, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0842[1] = { + anim_0842__v0_l0, +}; + +const s32 anim_0843__v0_l0[] = { // 0x080FEDB0 + PALETTE(377, 16, 0xB0) + SHOW_FRAME(10, -1) + + PALETTE(378, 16, 0xB0) + SHOW_FRAME(10, -1) + + JUMP_BACK(10) +}; + +const s32 * const anim_0843[1] = { + anim_0843__v0_l0, +}; + +const s32 anim_0844__v0_l0[] = { // 0x080FEDE4 + PALETTE(379, 16, 0xC0) + SHOW_FRAME(8, -1) + + PALETTE(380, 16, 0xC0) + SHOW_FRAME(8, -1) + + PALETTE(381, 16, 0xC0) + SHOW_FRAME(8, -1) + + PALETTE(382, 16, 0xC0) + SHOW_FRAME(8, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0844[1] = { + anim_0844__v0_l0, +}; + +const s32 anim_0845__v0_l0[] = { // 0x080FEE40 + PALETTE(383, 16, 0xA0) + SHOW_FRAME(10, -1) + + PALETTE(384, 16, 0xA0) + SHOW_FRAME(10, -1) + + PALETTE(385, 16, 0xA0) + SHOW_FRAME(10, -1) + + PALETTE(386, 16, 0xA0) + SHOW_FRAME(10, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0845[1] = { + anim_0845__v0_l0, +}; + +const s32 anim_0846__v0_l0[] = { // 0x080FEE9C + PALETTE(387, 16, 0x40) + SHOW_FRAME(10, -1) + + PALETTE(388, 16, 0x40) + SHOW_FRAME(10, -1) + + PALETTE(389, 16, 0x40) + SHOW_FRAME(10, -1) + + PALETTE(390, 16, 0x40) + SHOW_FRAME(10, -1) + + PALETTE(391, 16, 0x40) + SHOW_FRAME(10, -1) + + PALETTE(392, 16, 0x40) + SHOW_FRAME(10, -1) + + PALETTE(393, 16, 0x40) + SHOW_FRAME(10, -1) + + PALETTE(394, 16, 0x40) + SHOW_FRAME(10, -1) + + JUMP_BACK(40) +}; + +const s32 * const anim_0846[1] = { + anim_0846__v0_l0, +}; + +const s32 anim_0847__v0_l0[] = { // 0x080FEF48 + PALETTE(395, 16, 0x60) + SHOW_FRAME(20, -1) + + PALETTE(396, 16, 0x60) + SHOW_FRAME(20, -1) + + PALETTE(397, 16, 0x60) + SHOW_FRAME(20, -1) + + PALETTE(398, 16, 0x60) + SHOW_FRAME(20, -1) + + PALETTE(399, 16, 0x60) + SHOW_FRAME(20, -1) + + PALETTE(400, 16, 0x60) + SHOW_FRAME(20, -1) + + PALETTE(401, 16, 0x60) + SHOW_FRAME(20, -1) + + JUMP_BACK(35) +}; + +const s32 * const anim_0847[1] = { + anim_0847__v0_l0, +}; + +const s32 anim_0848__v0_l0[] = { // 0x080FEFE0 + PALETTE(402, 16, 0x50) + SHOW_FRAME(20, -1) + + PALETTE(403, 16, 0x50) + SHOW_FRAME(20, -1) + + PALETTE(404, 16, 0x50) + SHOW_FRAME(20, -1) + + PALETTE(405, 16, 0x50) + SHOW_FRAME(20, -1) + + PALETTE(406, 16, 0x50) + SHOW_FRAME(20, -1) + + PALETTE(407, 16, 0x50) + SHOW_FRAME(20, -1) + + PALETTE(408, 16, 0x50) + SHOW_FRAME(20, -1) + + PALETTE(409, 16, 0x50) + SHOW_FRAME(20, -1) + + JUMP_BACK(40) +}; + +const s32 * const anim_0848[1] = { + anim_0848__v0_l0, +}; + +const s32 anim_0849__v0_l0[] = { // 0x080FF08C + PALETTE(410, 16, 0xD0) + SHOW_FRAME(10, -1) + + PALETTE(411, 16, 0xD0) + SHOW_FRAME(10, -1) + + PALETTE(412, 16, 0xD0) + SHOW_FRAME(10, -1) + + PALETTE(413, 16, 0xD0) + SHOW_FRAME(10, -1) + + PALETTE(410, 16, 0xD0) + SHOW_FRAME(10, -1) + + PALETTE(414, 16, 0xD0) + SHOW_FRAME(10, -1) + + PALETTE(415, 16, 0xD0) + SHOW_FRAME(10, -1) + + PALETTE(416, 16, 0xD0) + SHOW_FRAME(10, -1) + + JUMP_BACK(40) +}; + +const s32 * const anim_0849[1] = { + anim_0849__v0_l0, +}; + +const s32 anim_0850__v0_l0[] = { // 0x080FF138 + PALETTE(417, 16, 0xC0) + SHOW_FRAME(14, -1) + + PALETTE(418, 16, 0xC0) + SHOW_FRAME(14, -1) + + JUMP_BACK(10) +}; + +const s32 * const anim_0850[1] = { + anim_0850__v0_l0, +}; + +const s32 anim_0851__v0_l0[] = { // 0x080FF16C + PALETTE(419, 16, 0xF0) + SHOW_FRAME(6, -1) + + PALETTE(420, 16, 0xF0) + SHOW_FRAME(6, -1) + + PALETTE(421, 16, 0xF0) + SHOW_FRAME(6, -1) + + PALETTE(422, 16, 0xF0) + SHOW_FRAME(6, -1) + + JUMP_BACK(20) +}; + +const s32 * const anim_0851[1] = { + anim_0851__v0_l0, +}; + +const s32 anim_0852__v0_l0[] = { // 0x080FF1C8 + PALETTE(423, 256, 0x0) + SHOW_FRAME(1, -1) + + END() +}; + +const s32 * const anim_0852[1] = { + anim_0852__v0_l0, +}; + +const s32 anim_0853__v0_l0[] = { // 0x080FF1E4 + PALETTE(439, 16, 0x50) + TILES(0x1850A, 63) + SHOW_FRAME(5, 0) + + TILES(0x18549, 63) + SHOW_FRAME(5, 1) + + TILES(0x18588, 63) + SHOW_FRAME(5, 2) + + TILES(0x185C7, 72) + SHOW_FRAME(5, 3) + + TILES(0x1860F, 63) + SHOW_FRAME(5, 4) + + TILES(0x1864E, 63) + SHOW_FRAME(5, 5) + + TILES(0x1868D, 54) + SHOW_FRAME(5, 6) + + TILES(0x1864E, 63) + SHOW_FRAME(5, 5) + + JUMP_BACK(43) +}; + +const s32 * const anim_0853[1] = { + anim_0853__v0_l0, +}; + +const s32 anim_0854__v0_l0[] = { // 0x080FF29C + PALETTE(439, 16, 0x50) + TILES(0x186C3, 36) + SHOW_FRAME(5, 0) + + TILES(0x186E7, 54) + SHOW_FRAME(5, 1) + + TILES(0x1871D, 54) + SHOW_FRAME(5, 2) + + TILES(0x18753, 63) + SHOW_FRAME(5, 3) + + TILES(0x18792, 54) + SHOW_FRAME(5, 4) + + TILES(0x187C8, 54) + SHOW_FRAME(5, 5) + + TILES(0x187FE, 36) + SHOW_FRAME(5, 6) + + TILES(0x18822, 54) + SHOW_FRAME(5, 7) + + TILES(0x18858, 63) + SHOW_FRAME(5, 8) + + TILES(0x18897, 63) + SHOW_FRAME(5, 9) + + TILES(0x188D6, 63) + SHOW_FRAME(5, 10) + + TILES(0x18915, 54) + SHOW_FRAME(5, 11) + + TILES(0x186C3, 36) + SHOW_FRAME(5, 0) + + TILES(0x1894B, 54) + SHOW_FRAME(5, 12) + + TILES(0x18981, 54) + SHOW_FRAME(5, 13) + + TILES(0x189B7, 63) + SHOW_FRAME(5, 14) + + TILES(0x18792, 54) + SHOW_FRAME(5, 4) + + TILES(0x187C8, 54) + SHOW_FRAME(5, 5) + + TILES(0x187FE, 36) + SHOW_FRAME(5, 6) + + TILES(0x18822, 54) + SHOW_FRAME(5, 7) + + TILES(0x18858, 63) + SHOW_FRAME(5, 8) + + TILES(0x18897, 63) + SHOW_FRAME(5, 9) + + TILES(0x188D6, 63) + SHOW_FRAME(5, 10) + + TILES(0x18915, 54) + SHOW_FRAME(5, 11) + + JUMP_BACK(123) +}; + +const s32 * const anim_0854[1] = { + anim_0854__v0_l0, +}; + +const s32 anim_0855__v0_l0[] = { // 0x080FF494 + PALETTE(439, 16, 0x50) + TILES(0x189F6, 99) + SHOW_FRAME(5, 0) + + TILES(0x18A59, 90) + SHOW_FRAME(5, 1) + + TILES(0x18AB3, 90) + SHOW_FRAME(5, 2) + + TILES(0x18B0D, 99) + SHOW_FRAME(5, 3) + + TILES(0x18B70, 90) + SHOW_FRAME(5, 4) + + TILES(0x18BCA, 99) + SHOW_FRAME(5, 5) + + TILES(0x18C2D, 99) + SHOW_FRAME(5, 6) + + TILES(0x18C90, 99) + SHOW_FRAME(5, 7) + + JUMP_BACK(43) +}; + +const s32 anim_0855__v1_l0[] = { // 0x080FF548 + PALETTE(439, 16, 0x50) + TILES(0x18CF3, 72) + SHOW_FRAME(5, 8) + + END() +}; + +const s32 * const anim_0855[2] = { + anim_0855__v0_l0, + anim_0855__v1_l0, +}; + +const s32 anim_0856__v0_l0[] = { // 0x080FF574 + PALETTE(439, 16, 0x50) + TILES(0x18D3B, 32) + SHOW_FRAME(6, 0) + + TILES(0x18D5B, 32) + SHOW_FRAME(4, 1) + + TILES(0x18D7B, 48) + SHOW_FRAME(4, 2) + + TILES(0x18DAB, 48) + SHOW_FRAME(4, 3) + + TILES(0x18DDB, 48) + SHOW_FRAME(12, 4) + + END() +}; + +const s32 * const anim_0856[1] = { + anim_0856__v0_l0, +}; + +const s32 anim_0857__v0_l0[] = { // 0x080FF5EC + PALETTE(68, 16, 0x70) + TILES(0x18E0B, 4) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0857[1] = { + anim_0857__v0_l0, +}; + +const s32 anim_0858__v0_l0[] = { // 0x080FF614 + PALETTE(68, 16, 0x20) + TILES(0x18E0F, 28) + SHOW_FRAME(8, 0) + + TILES(0x18E2B, 28) + SHOW_FRAME(8, 1) + + TILES(0x18E47, 28) + SHOW_FRAME(8, 2) + + TILES(0x18E63, 28) + SHOW_FRAME(8, 3) + + JUMP_BACK(23) +}; + +const s32 * const anim_0858[1] = { + anim_0858__v0_l0, +}; + +const s32 anim_0859__v0_l0[] = { // 0x080FF67C + PALETTE(440, 16, 0x20) + TILES(0x18E7F, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0859[1] = { + anim_0859__v0_l0, +}; + +const s32 anim_0860__v0_l0[] = { // 0x080FF6A4 + PALETTE(179, 16, 0x0) + TILES(0x18E87, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0860[1] = { + anim_0860__v0_l0, +}; + +const s32 anim_0861__v0_l0[] = { // 0x080FF6CC + PALETTE(441, 16, 0x0) + TILES(0x18E93, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0861__v1_l0[] = { // 0x080FF6F0 + PALETTE(441, 16, 0x0) + TILES(0x18EA5, 10) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0861__v2_l0[] = { // 0x080FF714 + PALETTE(441, 16, 0x0) + TILES(0x18EAF, 14) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0861__v3_l0[] = { // 0x080FF738 + PALETTE(441, 16, 0x0) + TILES(0x18EBD, 26) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0861[4] = { + anim_0861__v0_l0, + anim_0861__v1_l0, + anim_0861__v2_l0, + anim_0861__v3_l0, +}; + +const s32 anim_0862__v0_l0[] = { // 0x080FF76C + PALETTE(442, 16, 0x0) + TILES(0x18ED7, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0862__v1_l0[] = { // 0x080FF790 + PALETTE(442, 16, 0x0) + TILES(0x18EEB, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0862__v2_l0[] = { // 0x080FF7B4 + PALETTE(442, 16, 0x0) + TILES(0x18EFF, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0862__v3_l0[] = { // 0x080FF7D8 + PALETTE(442, 16, 0x0) + TILES(0x18F0F, 32) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0862[4] = { + anim_0862__v0_l0, + anim_0862__v1_l0, + anim_0862__v2_l0, + anim_0862__v3_l0, +}; + +const s32 anim_0863__v0_l0[] = { // 0x080FF80C + PALETTE(179, 16, 0x0) + TILES(0x18F2F, 26) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0863__v1_l0[] = { // 0x080FF830 + PALETTE(179, 16, 0x0) + TILES(0x18F49, 12) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0863__v2_l0[] = { // 0x080FF854 + PALETTE(179, 16, 0x0) + TILES(0x18F55, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0863__v3_l0[] = { // 0x080FF878 + PALETTE(179, 16, 0x0) + TILES(0x18F65, 24) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0863__v4_l0[] = { // 0x080FF89C + PALETTE(179, 16, 0x0) + TILES(0x18F7D, 20) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0863__v5_l0[] = { // 0x080FF8C0 + PALETTE(179, 16, 0x0) + TILES(0x18F91, 30) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0863__v6_l0[] = { // 0x080FF8E4 + PALETTE(179, 16, 0x0) + TILES(0x18FAF, 36) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0863__v7_l0[] = { // 0x080FF908 + PALETTE(179, 16, 0x0) + TILES(0x18FD3, 8) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0863__v8_l0[] = { // 0x080FF92C + PALETTE(179, 16, 0x0) + TILES(0x18FDB, 6) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0863__v9_l0[] = { // 0x080FF950 + PALETTE(179, 16, 0x0) + TILES(0x18FE1, 8) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0863__v10_l0[] = { // 0x080FF974 + PALETTE(179, 16, 0x0) + TILES(0x18FE9, 16) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0863__v11_l0[] = { // 0x080FF998 + PALETTE(179, 16, 0x0) + TILES(0x18FF9, 16) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0863__v12_l0[] = { // 0x080FF9BC + PALETTE(179, 16, 0x0) + TILES(0x19009, 10) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 anim_0863__v13_l0[] = { // 0x080FF9E0 + PALETTE(179, 16, 0x0) + TILES(0x18FF9, 16) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0863__v14_l0[] = { // 0x080FFA04 + PALETTE(179, 16, 0x0) + TILES(0x19013, 16) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 anim_0863__v15_l0[] = { // 0x080FFA28 + PALETTE(178, 16, 0x10) + SHOW_FRAME(1, -1) + + END() +}; + +const s32 * const anim_0863[16] = { + anim_0863__v0_l0, + anim_0863__v1_l0, + anim_0863__v2_l0, + anim_0863__v3_l0, + anim_0863__v4_l0, + anim_0863__v5_l0, + anim_0863__v6_l0, + anim_0863__v7_l0, + anim_0863__v8_l0, + anim_0863__v9_l0, + anim_0863__v10_l0, + anim_0863__v11_l0, + anim_0863__v12_l0, + anim_0863__v13_l0, + anim_0863__v14_l0, + anim_0863__v15_l0, +}; + +const s32 anim_0864__v0_l0[] = { // 0x080FFA80 + PALETTE(443, 16, 0x60) + TILES(0x19023, 22) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0864__v1_l0[] = { // 0x080FFAA4 + PALETTE(443, 16, 0x0) + TILES(0x19039, 51) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0864__v2_l0[] = { // 0x080FFAC8 + PALETTE(443, 16, 0xF0) + TILES(0x1906C, 26) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0864[3] = { + anim_0864__v0_l0, + anim_0864__v1_l0, + anim_0864__v2_l0, +}; + +const s32 anim_0865__v0_l0[] = { // 0x080FFAF8 + PALETTE(444, 16, 0x0) + TILES(0x19086, 16) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0865__v1_l0[] = { // 0x080FFB1C + PALETTE(444, 16, 0x0) + SHOW_FRAME(1, -1) + + END() +}; + +const s32 anim_0865__v2_l0[] = { // 0x080FFB34 + PALETTE(444, 16, 0x0) + TILES(0x19096, 24) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0865[3] = { + anim_0865__v0_l0, + anim_0865__v1_l0, + anim_0865__v2_l0, +}; + +const s32 anim_0866__v0_l0[] = { // 0x080FFB64 + PALETTE(179, 16, 0x0) + TILES(0x190AE, 22) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0866__v1_l0[] = { // 0x080FFB88 + PALETTE(179, 16, 0x0) + TILES(0x190C4, 12) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0866__v2_l0[] = { // 0x080FFBAC + PALETTE(179, 16, 0x0) + TILES(0x190D0, 14) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0866__v3_l0[] = { // 0x080FFBD0 + PALETTE(179, 16, 0x0) + TILES(0x190DE, 18) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0866__v4_l0[] = { // 0x080FFBF4 + PALETTE(179, 16, 0x0) + TILES(0x190F0, 20) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0866__v5_l0[] = { // 0x080FFC18 + PALETTE(179, 16, 0x0) + TILES(0x19104, 16) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0866__v6_l0[] = { // 0x080FFC3C + PALETTE(179, 16, 0x0) + TILES(0x19114, 16) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0866__v7_l0[] = { // 0x080FFC60 + PALETTE(179, 16, 0x0) + TILES(0x19124, 8) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0866__v8_l0[] = { // 0x080FFC84 + PALETTE(179, 16, 0x0) + TILES(0x1912C, 6) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0866__v9_l0[] = { // 0x080FFCA8 + PALETTE(179, 16, 0x0) + TILES(0x19132, 6) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0866__v10_l0[] = { // 0x080FFCCC + PALETTE(179, 16, 0x0) + TILES(0x19138, 12) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0866__v11_l0[] = { // 0x080FFCF0 + PALETTE(179, 16, 0x0) + TILES(0x19144, 8) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0866__v12_l0[] = { // 0x080FFD14 + PALETTE(179, 16, 0x0) + TILES(0x1914C, 12) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 anim_0866__v13_l0[] = { // 0x080FFD38 + PALETTE(179, 16, 0x0) + TILES(0x19158, 12) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 anim_0866__v14_l0[] = { // 0x080FFD5C + PALETTE(179, 16, 0x0) + TILES(0x19164, 12) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 anim_0866__v15_l0[] = { // 0x080FFD80 + PALETTE(178, 16, 0x10) + SHOW_FRAME(1, -1) + + END() +}; + +const s32 * const anim_0866[16] = { + anim_0866__v0_l0, + anim_0866__v1_l0, + anim_0866__v2_l0, + anim_0866__v3_l0, + anim_0866__v4_l0, + anim_0866__v5_l0, + anim_0866__v6_l0, + anim_0866__v7_l0, + anim_0866__v8_l0, + anim_0866__v9_l0, + anim_0866__v10_l0, + anim_0866__v11_l0, + anim_0866__v12_l0, + anim_0866__v13_l0, + anim_0866__v14_l0, + anim_0866__v15_l0, +}; + +const s32 anim_0867__v0_l0[] = { // 0x080FFDD8 + PALETTE(445, 16, 0x30) + TILES(0x19170, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0867[1] = { + anim_0867__v0_l0, +}; + +const s32 anim_0868__v0_l0[] = { // 0x080FFE00 + PALETTE(179, 16, 0x20) + TILES(0x1917C, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0868__v1_l0[] = { // 0x080FFE24 + PALETTE(179, 16, 0x20) + TILES(0x1918E, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0868__v2_l0[] = { // 0x080FFE48 + PALETTE(179, 16, 0x20) + TILES(0x19196, 4) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0868[3] = { + anim_0868__v0_l0, + anim_0868__v1_l0, + anim_0868__v2_l0, +}; + +const s32 anim_0869__v0_l0[] = { // 0x080FFE78 + PALETTE(446, 16, 0x0) + TILES(0x1919A, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0869__v1_l0[] = { // 0x080FFE9C + PALETTE(446, 16, 0x0) + TILES(0x191AC, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0869__v2_l0[] = { // 0x080FFEC0 + PALETTE(446, 16, 0x0) + TILES(0x191B4, 14) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0869[3] = { + anim_0869__v0_l0, + anim_0869__v1_l0, + anim_0869__v2_l0, +}; + +const s32 anim_0870__v0_l0[] = { // 0x080FFEF0 + PALETTE(68, 16, 0x20) + TILES(0x191C2, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0870__v1_l0[] = { // 0x080FFF14 + PALETTE(68, 16, 0x20) + TILES(0x191CA, 8) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0870__v2_l0[] = { // 0x080FFF38 + PALETTE(68, 16, 0x80) + TILES(0x191D2, 1) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0870[3] = { + anim_0870__v0_l0, + anim_0870__v1_l0, + anim_0870__v2_l0, +}; + +const s32 anim_0871__v0_l0[] = { // 0x080FFF68 + PALETTE(68, 16, 0x20) + TILES(0x191D3, 28) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0871[1] = { + anim_0871__v0_l0, +}; + +const s32 anim_0872__v0_l0[] = { // 0x080FFF90 + PALETTE(447, 16, 0x0) + TILES(0x191EF, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0872[1] = { + anim_0872__v0_l0, +}; + +const s32 anim_0873__v0_l0[] = { // 0x080FFFB8 + PALETTE(68, 16, 0x20) + TILES(0x191F7, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0873[1] = { + anim_0873__v0_l0, +}; + +const s32 anim_0874__v0_l0[] = { // 0x080FFFE0 + PALETTE(448, 16, 0x70) + TILES(0x19209, 96) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0874[1] = { + anim_0874__v0_l0, +}; + +const s32 anim_0875__v0_l0[] = { // 0x08100008 + PALETTE(449, 16, 0x60) + TILES(0x19269, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0875[1] = { + anim_0875__v0_l0, +}; + +const s32 anim_0876__v0_l0[] = { // 0x08100030 + PALETTE(450, 16, 0x70) + TILES(0x1927D, 64) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0876[1] = { + anim_0876__v0_l0, +}; + +const s32 anim_0877__v0_l0[] = { // 0x08100058 + PALETTE(451, 16, 0x40) + TILES(0x192BD, 144) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0877__v1_l0[] = { // 0x0810007C + PALETTE(451, 16, 0x40) + TILES(0x1934D, 144) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0877__v2_l0[] = { // 0x081000A0 + PALETTE(451, 16, 0x40) + TILES(0x193DD, 144) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0877__v3_l0[] = { // 0x081000C4 + PALETTE(451, 16, 0x40) + TILES(0x1946D, 144) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0877[4] = { + anim_0877__v0_l0, + anim_0877__v1_l0, + anim_0877__v2_l0, + anim_0877__v3_l0, +}; + +const s32 anim_0878__v0_l0[] = { // 0x081000F8 + PALETTE(179, 16, 0x0) + TILES(0x194FD, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0878__v1_l0[] = { // 0x0810011C + PALETTE(179, 16, 0x0) + TILES(0x1950F, 16) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0878__v2_l0[] = { // 0x08100140 + PALETTE(179, 16, 0x0) + TILES(0x1951F, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0878[3] = { + anim_0878__v0_l0, + anim_0878__v1_l0, + anim_0878__v2_l0, +}; + +const s32 anim_0879__v0_l0[] = { // 0x08100170 + PALETTE(179, 16, 0x0) + TILES(0x1952F, 115) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0879__v1_l0[] = { // 0x08100194 + PALETTE(179, 16, 0x0) + TILES(0x195A2, 130) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0879__v2_l0[] = { // 0x081001B8 + PALETTE(179, 16, 0x0) + TILES(0x19624, 120) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0879[3] = { + anim_0879__v0_l0, + anim_0879__v1_l0, + anim_0879__v2_l0, +}; + +const s32 anim_0880__v0_l0[] = { // 0x081001E8 + PALETTE(179, 16, 0x0) + TILES(0x1969C, 40) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0880__v1_l0[] = { // 0x0810020C + PALETTE(179, 16, 0x0) + TILES(0x196C4, 34) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0880__v2_l0[] = { // 0x08100230 + PALETTE(179, 16, 0x0) + TILES(0x196E6, 42) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0880__v3_l0[] = { // 0x08100254 + PALETTE(179, 16, 0x0) + TILES(0x19710, 36) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0880__v4_l0[] = { // 0x08100278 + PALETTE(179, 16, 0x0) + TILES(0x19734, 36) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0880__v5_l0[] = { // 0x0810029C + PALETTE(179, 16, 0x0) + TILES(0x19758, 34) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0880__v6_l0[] = { // 0x081002C0 + PALETTE(179, 16, 0x0) + TILES(0x1977A, 36) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0880__v7_l0[] = { // 0x081002E4 + PALETTE(179, 16, 0x0) + TILES(0x1979E, 16) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0880__v8_l0[] = { // 0x08100308 + PALETTE(179, 16, 0x0) + TILES(0x197AE, 30) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0880__v9_l0[] = { // 0x0810032C + PALETTE(179, 16, 0xF0) + TILES(0x197CC, 20) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0880__v10_l0[] = { // 0x08100350 + PALETTE(179, 16, 0xF0) + TILES(0x197E0, 38) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0880__v11_l0[] = { // 0x08100374 + PALETTE(179, 16, 0xF0) + TILES(0x19806, 24) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0880__v12_l0[] = { // 0x08100398 + PALETTE(179, 16, 0xF0) + TILES(0x1981E, 8) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 * const anim_0880[13] = { + anim_0880__v0_l0, + anim_0880__v1_l0, + anim_0880__v2_l0, + anim_0880__v3_l0, + anim_0880__v4_l0, + anim_0880__v5_l0, + anim_0880__v6_l0, + anim_0880__v7_l0, + anim_0880__v8_l0, + anim_0880__v9_l0, + anim_0880__v10_l0, + anim_0880__v11_l0, + anim_0880__v12_l0, +}; + +const s32 anim_0881__v0_l0[] = { // 0x081003F0 + PALETTE(135, 16, 0x20) + TILES(0x19826, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0881__v1_l0[] = { // 0x08100414 + PALETTE(135, 16, 0x20) + TILES(0x1983E, 21) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0881__v2_l0[] = { // 0x08100438 + PALETTE(135, 16, 0x20) + TILES(0x19853, 16) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0881__v3_l0[] = { // 0x0810045C + PALETTE(135, 16, 0x20) + TILES(0x19863, 16) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0881__v4_l0[] = { // 0x08100480 + PALETTE(135, 16, 0x20) + TILES(0x19873, 16) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0881__v5_l0[] = { // 0x081004A4 + PALETTE(135, 16, 0x20) + TILES(0x19883, 16) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0881__v6_l0[] = { // 0x081004C8 + PALETTE(135, 16, 0x20) + TILES(0x19893, 16) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0881__v7_l0[] = { // 0x081004EC + PALETTE(135, 16, 0x20) + TILES(0x198A3, 16) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0881__v8_l0[] = { // 0x08100510 + PALETTE(452, 16, 0x40) + TILES(0x198B3, 20) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0881__v9_l0[] = { // 0x08100534 + PALETTE(452, 16, 0x40) + TILES(0x198C7, 20) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0881__v10_l0[] = { // 0x08100558 + PALETTE(452, 16, 0x40) + TILES(0x198DB, 18) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0881__v11_l0[] = { // 0x0810057C + PALETTE(452, 16, 0x40) + TILES(0x198ED, 20) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 * const anim_0881[12] = { + anim_0881__v0_l0, + anim_0881__v1_l0, + anim_0881__v2_l0, + anim_0881__v3_l0, + anim_0881__v4_l0, + anim_0881__v5_l0, + anim_0881__v6_l0, + anim_0881__v7_l0, + anim_0881__v8_l0, + anim_0881__v9_l0, + anim_0881__v10_l0, + anim_0881__v11_l0, +}; + +const s32 anim_0882__v0_l0[] = { // 0x081005D0 + PALETTE(453, 16, 0x0) + TILES(0x19901, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0882__v1_l0[] = { // 0x081005F4 + PALETTE(453, 16, 0x0) + TILES(0x1990B, 12) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0882[2] = { + anim_0882__v0_l0, + anim_0882__v1_l0, +}; + +const s32 anim_0883__v0_l0[] = { // 0x08100620 + PALETTE(454, 16, 0x0) + TILES(0x19917, 30) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0883__v1_l0[] = { // 0x08100644 + PALETTE(454, 16, 0x0) + TILES(0x19935, 32) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0883__v2_l0[] = { // 0x08100668 + PALETTE(454, 16, 0x0) + TILES(0x19955, 30) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0883__v3_l0[] = { // 0x0810068C + PALETTE(454, 16, 0x0) + TILES(0x19973, 30) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0883__v4_l0[] = { // 0x081006B0 + PALETTE(454, 16, 0x0) + TILES(0x19991, 34) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0883__v5_l0[] = { // 0x081006D4 + PALETTE(454, 16, 0x0) + TILES(0x199B3, 26) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0883__v6_l0[] = { // 0x081006F8 + PALETTE(454, 16, 0x0) + TILES(0x199CD, 34) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0883__v7_l0[] = { // 0x0810071C + PALETTE(454, 16, 0x0) + TILES(0x199EF, 12) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0883__v8_l0[] = { // 0x08100740 + PALETTE(454, 16, 0x0) + TILES(0x199FB, 22) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0883__v9_l0[] = { // 0x08100764 + PALETTE(454, 16, 0xF0) + TILES(0x19A11, 18) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0883__v10_l0[] = { // 0x08100788 + PALETTE(454, 16, 0xF0) + TILES(0x19A23, 18) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0883__v11_l0[] = { // 0x081007AC + PALETTE(454, 16, 0xF0) + TILES(0x19A35, 18) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0883__v12_l0[] = { // 0x081007D0 + PALETTE(454, 16, 0xF0) + TILES(0x19A47, 10) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 * const anim_0883[13] = { + anim_0883__v0_l0, + anim_0883__v1_l0, + anim_0883__v2_l0, + anim_0883__v3_l0, + anim_0883__v4_l0, + anim_0883__v5_l0, + anim_0883__v6_l0, + anim_0883__v7_l0, + anim_0883__v8_l0, + anim_0883__v9_l0, + anim_0883__v10_l0, + anim_0883__v11_l0, + anim_0883__v12_l0, +}; + +const s32 anim_0884__v0_l0[] = { // 0x08100828 + PALETTE(179, 16, 0x0) + TILES(0x19A51, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0884__v1_l0[] = { // 0x0810084C + PALETTE(179, 16, 0x0) + TILES(0x19A5B, 10) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0884__v2_l0[] = { // 0x08100870 + PALETTE(179, 16, 0x0) + TILES(0x19A65, 12) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0884__v3_l0[] = { // 0x08100894 + PALETTE(68, 16, 0x60) + TILES(0x19A71, 8) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0884__v4_l0[] = { // 0x081008B8 + PALETTE(68, 16, 0x60) + TILES(0x19A79, 24) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 * const anim_0884[5] = { + anim_0884__v0_l0, + anim_0884__v1_l0, + anim_0884__v2_l0, + anim_0884__v3_l0, + anim_0884__v4_l0, +}; + +const s32 anim_0885__v0_l0[] = { // 0x081008F0 + PALETTE(455, 16, 0x0) + TILES(0x19A91, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0885__v1_l0[] = { // 0x08100914 + PALETTE(455, 16, 0x0) + TILES(0x19AA3, 18) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0885__v2_l0[] = { // 0x08100938 + PALETTE(455, 16, 0x0) + TILES(0x19AB5, 22) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0885__v3_l0[] = { // 0x0810095C + PALETTE(455, 16, 0x0) + TILES(0x19ACB, 18) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0885__v4_l0[] = { // 0x08100980 + PALETTE(455, 16, 0x0) + TILES(0x19ADD, 26) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0885__v5_l0[] = { // 0x081009A4 + PALETTE(455, 16, 0x0) + TILES(0x19AF7, 10) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0885__v6_l0[] = { // 0x081009C8 + PALETTE(455, 16, 0x0) + TILES(0x19B01, 14) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0885__v7_l0[] = { // 0x081009EC + PALETTE(455, 16, 0x0) + TILES(0x19B0F, 10) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0885__v8_l0[] = { // 0x08100A10 + PALETTE(455, 16, 0x0) + TILES(0x19B19, 10) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0885__v9_l0[] = { // 0x08100A34 + PALETTE(455, 16, 0x0) + TILES(0x19B23, 10) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0885__v10_l0[] = { // 0x08100A58 + PALETTE(455, 16, 0x0) + TILES(0x19B2D, 10) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 * const anim_0885[11] = { + anim_0885__v0_l0, + anim_0885__v1_l0, + anim_0885__v2_l0, + anim_0885__v3_l0, + anim_0885__v4_l0, + anim_0885__v5_l0, + anim_0885__v6_l0, + anim_0885__v7_l0, + anim_0885__v8_l0, + anim_0885__v9_l0, + anim_0885__v10_l0, +}; + +const s32 anim_0886__v0_l0[] = { // 0x08100AA8 + PALETTE(456, 16, 0x90) + TILES(0x19B37, 35) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0886[1] = { + anim_0886__v0_l0, +}; + +const s32 anim_0887__v0_l0[] = { // 0x08100AD0 + PALETTE(457, 16, 0x90) + TILES(0x19B5A, 40) + SHOW_FRAME(15, 0) + + TILES(0x19B82, 40) + SHOW_FRAME(15, 1) + + TILES(0x19BAA, 35) + SHOW_FRAME(15, 2) + + JUMP_BACK(18) +}; + +const s32 anim_0887__v1_l0[] = { // 0x08100B20 + PALETTE(457, 16, 0x90) + TILES(0x19BCD, 35) + SHOW_FRAME(15, 3) + + TILES(0x19BF0, 35) + SHOW_FRAME(15, 4) + + TILES(0x19C13, 35) + SHOW_FRAME(15, 5) + + JUMP_BACK(18) +}; + +const s32 anim_0887__v2_l0[] = { // 0x08100B70 + PALETTE(457, 16, 0x90) + TILES(0x19C36, 40) + SHOW_FRAME(15, 6) + + TILES(0x19C5E, 40) + SHOW_FRAME(15, 7) + + TILES(0x19C86, 40) + SHOW_FRAME(15, 8) + + JUMP_BACK(18) +}; + +const s32 anim_0887__v3_l0[] = { // 0x08100BC0 + PALETTE(457, 16, 0x90) + TILES(0x19CAE, 30) + SHOW_FRAME(15, 9) + + TILES(0x19CCC, 30) + SHOW_FRAME(30, 10) + + TILES(0x19CAE, 30) + SHOW_FRAME(15, 9) + + JUMP_BACK(18) +}; + +const s32 anim_0887__v4_l0[] = { // 0x08100C10 + PALETTE(457, 16, 0x90) + TILES(0x19CEA, 30) + SHOW_FRAME(8, 11) + + TILES(0x19D08, 30) + SHOW_FRAME(8, 12) + + TILES(0x19CEA, 30) + SHOW_FRAME(8, 11) + + JUMP_BACK(18) +}; + +const s32 anim_0887__v5_l0[] = { // 0x08100C60 + PALETTE(457, 16, 0x90) + TILES(0x19D26, 40) + SHOW_FRAME(15, 13) + + TILES(0x19D4E, 40) + SHOW_FRAME(30, 14) + + TILES(0x19D76, 35) + SHOW_FRAME(15, 15) + + JUMP_BACK(18) +}; + +const s32 anim_0887__v6_l0[] = { // 0x08100CB0 + PALETTE(457, 16, 0x90) + TILES(0x19D99, 30) + SHOW_FRAME(15, 16) + + TILES(0x19DB7, 30) + SHOW_FRAME(30, 17) + + TILES(0x19DD5, 30) + SHOW_FRAME(15, 18) + + JUMP_BACK(18) +}; + +const s32 * const anim_0887[7] = { + anim_0887__v0_l0, + anim_0887__v1_l0, + anim_0887__v2_l0, + anim_0887__v3_l0, + anim_0887__v4_l0, + anim_0887__v5_l0, + anim_0887__v6_l0, +}; + +const s32 anim_0888__v0_l0[] = { // 0x08100D1C + PALETTE(456, 16, 0x90) + TILES(0x19DF3, 35) + SHOW_FRAME(50, 0) + + TILES(0x19E16, 35) + SHOW_FRAME(8, 1) + + TILES(0x19E39, 35) + SHOW_FRAME(8, 2) + + TILES(0x19E5C, 35) + SHOW_FRAME(8, 3) + + TILES(0x19E7F, 35) + SHOW_FRAME(8, 4) + + TILES(0x19EA2, 35) + SHOW_FRAME(8, 5) + + TILES(0x19EC5, 35) + SHOW_FRAME(50, 6) + + TILES(0x19EE8, 35) + SHOW_FRAME(8, 7) + + TILES(0x19F0B, 35) + SHOW_FRAME(8, 8) + + TILES(0x19F2E, 35) + SHOW_FRAME(8, 9) + + TILES(0x19F51, 35) + SHOW_FRAME(8, 10) + + TILES(0x19F74, 35) + SHOW_FRAME(8, 11) + + JUMP_BACK(63) +}; + +const s32 anim_0888__v1_l0[] = { // 0x08100E20 + PALETTE(456, 16, 0x90) + TILES(0x19E16, 35) + SHOW_FRAME(8, 1) + + TILES(0x19E39, 35) + SHOW_FRAME(8, 2) + + TILES(0x19E5C, 35) + SHOW_FRAME(8, 3) + + TILES(0x19E7F, 35) + SHOW_FRAME(8, 4) + + TILES(0x19EA2, 35) + SHOW_FRAME(8, 5) + + TILES(0x19EC5, 35) + SHOW_FRAME(8, 6) + + END() +}; + +const s32 anim_0888__v2_l0[] = { // 0x08100EA8 + PALETTE(456, 16, 0x90) + TILES(0x19EE8, 35) + SHOW_FRAME(8, 7) + + TILES(0x19F0B, 35) + SHOW_FRAME(8, 8) + + TILES(0x19F2E, 35) + SHOW_FRAME(8, 9) + + TILES(0x19F51, 35) + SHOW_FRAME(8, 10) + + TILES(0x19F74, 35) + SHOW_FRAME(8, 11) + + TILES(0x19DF3, 35) + SHOW_FRAME(8, 0) + + END() +}; + +const s32 * const anim_0888[3] = { + anim_0888__v0_l0, + anim_0888__v1_l0, + anim_0888__v2_l0, +}; + +const s32 anim_0889__v0_l0[] = { // 0x08100F3C + PALETTE(456, 16, 0x90) + TILES(0x19F97, 42) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0889[1] = { + anim_0889__v0_l0, +}; + +const s32 anim_0890__v0_l0[] = { // 0x08100F64 + PALETTE(458, 16, 0x20) + TILES(0x19FC1, 24) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0890[1] = { + anim_0890__v0_l0, +}; + +const s32 anim_0891__v0_l0[] = { // 0x08100F8C + PALETTE(68, 16, 0x20) + TILES(0x19FD9, 40) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0891__v1_l0[] = { // 0x08100FB0 + PALETTE(68, 16, 0x20) + TILES(0x1A001, 28) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0891__v2_l0[] = { // 0x08100FD4 + PALETTE(68, 16, 0x20) + TILES(0x1A01D, 12) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0891__v3_l0[] = { // 0x08100FF8 + PALETTE(68, 16, 0x20) + TILES(0x1A029, 8) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0891__v4_l0[] = { // 0x0810101C + PALETTE(68, 16, 0x20) + TILES(0x1A031, 4) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0891__v5_l0[] = { // 0x08101040 + PALETTE(68, 16, 0x20) + TILES(0x1A035, 4) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0891__v6_l0[] = { // 0x08101064 + PALETTE(68, 16, 0x20) + TILES(0x1A039, 4) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0891__v7_l0[] = { // 0x08101088 + PALETTE(68, 16, 0x20) + TILES(0x1A03D, 4) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0891__v8_l0[] = { // 0x081010AC + PALETTE(68, 16, 0x20) + TILES(0x1A041, 12) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0891__v9_l0[] = { // 0x081010D0 + PALETTE(68, 16, 0x20) + TILES(0x1A04D, 10) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 * const anim_0891[10] = { + anim_0891__v0_l0, + anim_0891__v1_l0, + anim_0891__v2_l0, + anim_0891__v3_l0, + anim_0891__v4_l0, + anim_0891__v5_l0, + anim_0891__v6_l0, + anim_0891__v7_l0, + anim_0891__v8_l0, + anim_0891__v9_l0, +}; + +const s32 anim_0892__v0_l0[] = { // 0x0810111C + PALETTE(453, 16, 0x0) + TILES(0x1A057, 42) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0892__v1_l0[] = { // 0x08101140 + PALETTE(453, 16, 0x0) + TILES(0x1A081, 42) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0892__v2_l0[] = { // 0x08101164 + PALETTE(453, 16, 0x0) + TILES(0x1A0AB, 10) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0892__v3_l0[] = { // 0x08101188 + PALETTE(453, 16, 0x0) + TILES(0x1A0B5, 12) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0892[4] = { + anim_0892__v0_l0, + anim_0892__v1_l0, + anim_0892__v2_l0, + anim_0892__v3_l0, +}; + +const s32 anim_0893__v0_l0[] = { // 0x081011BC + PALETTE(179, 16, 0x0) + TILES(0x1A0C1, 46) + SHOW_FRAME(1, 0) + + JUMP_BACK(8) +}; + +const s32 * const anim_0893[1] = { + anim_0893__v0_l0, +}; + +const s32 anim_0894__v0_l0[] = { // 0x081011E8 + PALETTE(68, 16, 0x20) + TILES(0x1A0EF, 18) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0894__v1_l0[] = { // 0x0810120C + PALETTE(68, 16, 0x20) + TILES(0x1A101, 22) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0894__v2_l0[] = { // 0x08101230 + PALETTE(68, 16, 0x20) + TILES(0x1A117, 26) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0894__v3_l0[] = { // 0x08101254 + PALETTE(68, 16, 0x20) + TILES(0x1A131, 32) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0894__v4_l0[] = { // 0x08101278 + PALETTE(68, 16, 0x20) + TILES(0x1A151, 15) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0894__v5_l0[] = { // 0x0810129C + PALETTE(68, 16, 0x20) + TILES(0x1A160, 8) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0894__v6_l0[] = { // 0x081012C0 + PALETTE(68, 16, 0x20) + TILES(0x1A168, 8) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0894__v7_l0[] = { // 0x081012E4 + PALETTE(68, 16, 0x20) + TILES(0x1A170, 8) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0894__v8_l0[] = { // 0x08101308 + PALETTE(68, 16, 0x20) + TILES(0x1A178, 8) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 * const anim_0894[9] = { + anim_0894__v0_l0, + anim_0894__v1_l0, + anim_0894__v2_l0, + anim_0894__v3_l0, + anim_0894__v4_l0, + anim_0894__v5_l0, + anim_0894__v6_l0, + anim_0894__v7_l0, + anim_0894__v8_l0, +}; + +const s32 anim_0895__v0_l0[] = { // 0x08101350 + PALETTE(459, 16, 0x0) + TILES(0x1A180, 10) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0895__v1_l0[] = { // 0x08101374 + PALETTE(459, 16, 0x0) + TILES(0x1A18A, 20) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0895[2] = { + anim_0895__v0_l0, + anim_0895__v1_l0, +}; + +const s32 anim_0896__v0_l0[] = { // 0x081013A0 + PALETTE(460, 16, 0x90) + TILES(0x1A19E, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0896__v1_l0[] = { // 0x081013C4 + PALETTE(460, 16, 0x90) + TILES(0x1A1A6, 10) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0896__v2_l0[] = { // 0x081013E8 + PALETTE(460, 16, 0x90) + TILES(0x1A1B0, 10) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0896__v3_l0[] = { // 0x0810140C + PALETTE(460, 16, 0x90) + TILES(0x1A1BA, 4) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0896__v4_l0[] = { // 0x08101430 + PALETTE(460, 16, 0x90) + TILES(0x1A1BE, 2) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0896__v5_l0[] = { // 0x08101454 + PALETTE(460, 16, 0x90) + TILES(0x1A1C0, 4) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0896__v6_l0[] = { // 0x08101478 + PALETTE(460, 16, 0x90) + TILES(0x1A1C4, 4) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0896__v7_l0[] = { // 0x0810149C + PALETTE(460, 16, 0x90) + TILES(0x1A1C8, 4) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0896__v8_l0[] = { // 0x081014C0 + PALETTE(460, 16, 0x90) + TILES(0x1A1CC, 4) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0896__v9_l0[] = { // 0x081014E4 + PALETTE(460, 16, 0x90) + TILES(0x1A1D0, 4) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0896__v10_l0[] = { // 0x08101508 + PALETTE(460, 16, 0x90) + TILES(0x1A1D4, 4) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0896__v11_l0[] = { // 0x0810152C + PALETTE(460, 16, 0x90) + TILES(0x1A1D8, 4) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0896__v12_l0[] = { // 0x08101550 + PALETTE(460, 16, 0x90) + TILES(0x1A1DC, 4) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 anim_0896__v13_l0[] = { // 0x08101574 + PALETTE(460, 16, 0x90) + TILES(0x1A1E0, 14) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 * const anim_0896[14] = { + anim_0896__v0_l0, + anim_0896__v1_l0, + anim_0896__v2_l0, + anim_0896__v3_l0, + anim_0896__v4_l0, + anim_0896__v5_l0, + anim_0896__v6_l0, + anim_0896__v7_l0, + anim_0896__v8_l0, + anim_0896__v9_l0, + anim_0896__v10_l0, + anim_0896__v11_l0, + anim_0896__v12_l0, + anim_0896__v13_l0, +}; + +const s32 anim_0897__v0_l0[] = { // 0x081015D0 + PALETTE(461, 16, 0x0) + TILES(0x1A1EE, 38) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0897__v1_l0[] = { // 0x081015F4 + PALETTE(461, 16, 0x0) + TILES(0x1A214, 40) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0897[2] = { + anim_0897__v0_l0, + anim_0897__v1_l0, +}; + +const s32 anim_0898__v0_l0[] = { // 0x08101620 + PALETTE(88, 16, 0x0) + TILES(0x1A23C, 20) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0898__v1_l0[] = { // 0x08101644 + PALETTE(2, 16, 0x10) + TILES(0x1A250, 24) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0898__v2_l0[] = { // 0x08101668 + PALETTE(462, 16, 0x20) + TILES(0x1A268, 20) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0898__v3_l0[] = { // 0x0810168C + PALETTE(7, 16, 0x30) + TILES(0x1A27C, 20) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0898[4] = { + anim_0898__v0_l0, + anim_0898__v1_l0, + anim_0898__v2_l0, + anim_0898__v3_l0, +}; + +const s32 anim_0899__v0_l0[] = { // 0x081016C0 + PALETTE(453, 16, 0x0) + TILES(0x1A290, 22) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0899__v1_l0[] = { // 0x081016E4 + PALETTE(453, 16, 0x0) + TILES(0x1A2A6, 18) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0899__v2_l0[] = { // 0x08101708 + PALETTE(453, 16, 0x0) + TILES(0x1A2B8, 18) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0899__v3_l0[] = { // 0x0810172C + PALETTE(453, 16, 0x0) + TILES(0x1A2CA, 16) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0899__v4_l0[] = { // 0x08101750 + PALETTE(453, 16, 0x0) + TILES(0x1A2DA, 26) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0899__v5_l0[] = { // 0x08101774 + PALETTE(453, 16, 0x0) + TILES(0x1A2F4, 14) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0899__v6_l0[] = { // 0x08101798 + PALETTE(455, 16, 0x0) + TILES(0x1A302, 14) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0899__v7_l0[] = { // 0x081017BC + PALETTE(453, 16, 0x0) + TILES(0x1A310, 10) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0899__v8_l0[] = { // 0x081017E0 + PALETTE(453, 16, 0x0) + TILES(0x1A31A, 10) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0899__v9_l0[] = { // 0x08101804 + PALETTE(453, 16, 0x0) + TILES(0x1A324, 10) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0899__v10_l0[] = { // 0x08101828 + PALETTE(453, 16, 0x0) + TILES(0x1A32E, 10) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 * const anim_0899[11] = { + anim_0899__v0_l0, + anim_0899__v1_l0, + anim_0899__v2_l0, + anim_0899__v3_l0, + anim_0899__v4_l0, + anim_0899__v5_l0, + anim_0899__v6_l0, + anim_0899__v7_l0, + anim_0899__v8_l0, + anim_0899__v9_l0, + anim_0899__v10_l0, +}; + +const s32 anim_0900__v0_l0[] = { // 0x08101878 + PALETTE(460, 16, 0x90) + TILES(0x1A338, 6) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0900__v1_l0[] = { // 0x0810189C + PALETTE(460, 16, 0x90) + TILES(0x1A33E, 6) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0900__v2_l0[] = { // 0x081018C0 + PALETTE(460, 16, 0x90) + TILES(0x1A344, 14) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 * const anim_0900[3] = { + anim_0900__v0_l0, + anim_0900__v1_l0, + anim_0900__v2_l0, +}; + +const s32 anim_0901__v0_l0[] = { // 0x081018F0 + PALETTE(461, 16, 0x0) + TILES(0x1A352, 34) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0901__v1_l0[] = { // 0x08101914 + PALETTE(461, 16, 0x0) + TILES(0x1A374, 30) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 * const anim_0901[2] = { + anim_0901__v0_l0, + anim_0901__v1_l0, +}; + +const s32 anim_0902__v0_l0[] = { // 0x08101940 + PALETTE(463, 16, 0x60) + TILES(0x1A392, 42) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0902__v1_l0[] = { // 0x08101964 + PALETTE(463, 16, 0x60) + TILES(0x1A3BC, 44) + SHOW_FRAME(1, 1) + + JUMP_BACK(8) +}; + +const s32 anim_0902__v2_l0[] = { // 0x0810198C + PALETTE(463, 16, 0x60) + TILES(0x1A3E8, 44) + SHOW_FRAME(1, 2) + + JUMP_BACK(8) +}; + +const s32 anim_0902__v3_l0[] = { // 0x081019B4 + PALETTE(463, 16, 0x60) + TILES(0x1A414, 40) + SHOW_FRAME(1, 3) + + JUMP_BACK(8) +}; + +const s32 * const anim_0902[4] = { + anim_0902__v0_l0, + anim_0902__v1_l0, + anim_0902__v2_l0, + anim_0902__v3_l0, +}; + +const s32 anim_0903__v0_l0[] = { // 0x081019EC + PALETTE(68, 16, 0x60) + TILES(0x1A43C, 12) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0903__v1_l0[] = { // 0x08101A10 + PALETTE(68, 16, 0x60) + TILES(0x1A448, 13) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0903__v2_l0[] = { // 0x08101A34 + PALETTE(68, 16, 0x60) + TILES(0x1A455, 12) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0903__v3_l0[] = { // 0x08101A58 + PALETTE(68, 16, 0x60) + TILES(0x1A461, 11) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 * const anim_0903[4] = { + anim_0903__v0_l0, + anim_0903__v1_l0, + anim_0903__v2_l0, + anim_0903__v3_l0, +}; + +const s32 anim_0904__v0_l0[] = { // 0x08101A8C + PALETTE(68, 16, 0x60) + TILES(0x1A46C, 8) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0904__v1_l0[] = { // 0x08101AB0 + PALETTE(68, 16, 0x60) + TILES(0x1A474, 12) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0904__v2_l0[] = { // 0x08101AD4 + PALETTE(68, 16, 0x60) + TILES(0x1A480, 12) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0904__v3_l0[] = { // 0x08101AF8 + PALETTE(68, 16, 0x60) + TILES(0x1A48C, 8) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0904__v4_l0[] = { // 0x08101B1C + PALETTE(68, 16, 0x60) + TILES(0x1A494, 8) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0904__v5_l0[] = { // 0x08101B40 + PALETTE(68, 16, 0x60) + TILES(0x1A49C, 8) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0904__v6_l0[] = { // 0x08101B64 + PALETTE(68, 16, 0x60) + TILES(0x1A4A4, 8) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 * const anim_0904[7] = { + anim_0904__v0_l0, + anim_0904__v1_l0, + anim_0904__v2_l0, + anim_0904__v3_l0, + anim_0904__v4_l0, + anim_0904__v5_l0, + anim_0904__v6_l0, +}; + +const s32 anim_0905__v0_l0[] = { // 0x08101BA4 + PALETTE(68, 16, 0x20) + TILES(0x1A4AC, 24) + SHOW_FRAME(60, 0) + + SHOW_FRAME(60, -1) + + JUMP_BACK(10) +}; + +const s32 * const anim_0905[1] = { + anim_0905__v0_l0, +}; + +const s32 anim_0906__v0_l0[] = { // 0x08101BD8 + PALETTE(38, 16, 0xB0) + TILES(0x1A4C4, 32) + HITBOX(0, 0, 3, 64, 23) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 * const anim_0906[1] = { + anim_0906__v0_l0, +}; + +const s32 anim_0907__v0_l0[] = { // 0x08101C0C + PALETTE(68, 16, 0x60) + TILES(0x1A4E4, 2) + SHOW_FRAME(1, 0) + + END() +}; + +const s32 anim_0907__v1_l0[] = { // 0x08101C30 + PALETTE(68, 16, 0x60) + TILES(0x1A4E6, 2) + SHOW_FRAME(1, 1) + + END() +}; + +const s32 anim_0907__v2_l0[] = { // 0x08101C54 + PALETTE(68, 16, 0x60) + TILES(0x1A4E8, 2) + SHOW_FRAME(1, 2) + + END() +}; + +const s32 anim_0907__v3_l0[] = { // 0x08101C78 + PALETTE(68, 16, 0x60) + TILES(0x1A4EA, 2) + SHOW_FRAME(1, 3) + + END() +}; + +const s32 anim_0907__v4_l0[] = { // 0x08101C9C + PALETTE(68, 16, 0x60) + TILES(0x1A4EC, 2) + SHOW_FRAME(1, 4) + + END() +}; + +const s32 anim_0907__v5_l0[] = { // 0x08101CC0 + PALETTE(68, 16, 0x60) + TILES(0x1A4EE, 2) + SHOW_FRAME(1, 5) + + END() +}; + +const s32 anim_0907__v6_l0[] = { // 0x08101CE4 + PALETTE(68, 16, 0x60) + TILES(0x1A4F0, 2) + SHOW_FRAME(1, 6) + + END() +}; + +const s32 anim_0907__v7_l0[] = { // 0x08101D08 + PALETTE(68, 16, 0x60) + TILES(0x1A4F2, 2) + SHOW_FRAME(1, 7) + + END() +}; + +const s32 anim_0907__v8_l0[] = { // 0x08101D2C + PALETTE(68, 16, 0x60) + TILES(0x1A4F4, 2) + SHOW_FRAME(1, 8) + + END() +}; + +const s32 anim_0907__v9_l0[] = { // 0x08101D50 + PALETTE(68, 16, 0x60) + TILES(0x1A4F6, 2) + SHOW_FRAME(1, 9) + + END() +}; + +const s32 anim_0907__v10_l0[] = { // 0x08101D74 + PALETTE(68, 16, 0x60) + TILES(0x1A4F8, 2) + SHOW_FRAME(1, 10) + + END() +}; + +const s32 anim_0907__v11_l0[] = { // 0x08101D98 + PALETTE(68, 16, 0x60) + TILES(0x1A4FA, 2) + SHOW_FRAME(1, 11) + + END() +}; + +const s32 anim_0907__v12_l0[] = { // 0x08101DBC + PALETTE(68, 16, 0x60) + TILES(0x1A4FC, 2) + SHOW_FRAME(1, 12) + + END() +}; + +const s32 anim_0907__v13_l0[] = { // 0x08101DE0 + PALETTE(68, 16, 0x60) + TILES(0x1A4FE, 2) + SHOW_FRAME(1, 13) + + END() +}; + +const s32 anim_0907__v14_l0[] = { // 0x08101E04 + PALETTE(68, 16, 0x60) + TILES(0x1A500, 2) + SHOW_FRAME(1, 14) + + END() +}; + +const s32 anim_0907__v15_l0[] = { // 0x08101E28 + PALETTE(68, 16, 0x60) + TILES(0x1A502, 2) + SHOW_FRAME(1, 15) + + END() +}; + +const s32 anim_0907__v16_l0[] = { // 0x08101E4C + PALETTE(68, 16, 0x60) + TILES(0x1A504, 2) + SHOW_FRAME(1, 16) + + END() +}; + +const s32 anim_0907__v17_l0[] = { // 0x08101E70 + PALETTE(68, 16, 0x60) + TILES(0x1A506, 2) + SHOW_FRAME(1, 17) + + END() +}; + +const s32 anim_0907__v18_l0[] = { // 0x08101E94 + PALETTE(68, 16, 0x60) + TILES(0x1A508, 2) + SHOW_FRAME(1, 18) + + END() +}; + +const s32 anim_0907__v19_l0[] = { // 0x08101EB8 + PALETTE(68, 16, 0x60) + TILES(0x1A50A, 2) + SHOW_FRAME(1, 19) + + END() +}; + +const s32 anim_0907__v20_l0[] = { // 0x08101EDC + PALETTE(68, 16, 0x60) + TILES(0x1A50C, 2) + SHOW_FRAME(1, 20) + + END() +}; + +const s32 anim_0907__v21_l0[] = { // 0x08101F00 + PALETTE(68, 16, 0x60) + TILES(0x1A50E, 2) + SHOW_FRAME(1, 21) + + END() +}; + +const s32 * const anim_0907[22] = { + anim_0907__v0_l0, + anim_0907__v1_l0, + anim_0907__v2_l0, + anim_0907__v3_l0, + anim_0907__v4_l0, + anim_0907__v5_l0, + anim_0907__v6_l0, + anim_0907__v7_l0, + anim_0907__v8_l0, + anim_0907__v9_l0, + anim_0907__v10_l0, + anim_0907__v11_l0, + anim_0907__v12_l0, + anim_0907__v13_l0, + anim_0907__v14_l0, + anim_0907__v15_l0, + anim_0907__v16_l0, + anim_0907__v17_l0, + anim_0907__v18_l0, + anim_0907__v19_l0, + anim_0907__v20_l0, + anim_0907__v21_l0, +}; + diff --git a/sa1/src/data/credits.c b/sa1/src/data/credits.c new file mode 100644 index 0000000000..4245213487 --- /dev/null +++ b/sa1/src/data/credits.c @@ -0,0 +1,338 @@ +#include "game/credits.h" + +const CreditsString sCreditsEntries[NUM_ENTRIES] = { + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 10, 0, 0, "CREATED BY ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 8, 0, 0, "PRODUCER ", { 0, 0, 0 } }, + { 9, 1, 0, "YUJI NAKA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 8, 0, 0, "DIRECTOR ", { 0, 0, 0 } }, + { 17, 1, 0, "AKINORI NISHIYAMA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 12, 0, 0, "ART DIRECTOR ", { 0, 0, 0 } }, + { 11, 1, 0, "YUJI UEKAWA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 18, 0, 0, "TECHNICAL DIRECTOR ", { 0, 0, 0 } }, + { 15, 1, 0, "TAKAHIRO HAMANO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 9, 0, 0, "DESIGNERS ", { 0, 0, 0 } }, + { 16, 1, 0, "SACHIKO KAWAMURA ", { 0, 0, 0 } }, + { 10, 1, 0, "KAZUKO ITO ", { 0, 0, 0 } }, + { 13, 1, 0, "MAKOTO YONEZU ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 11, 0, 0, "PROGRAMMERS ", { 0, 0, 0 } }, + { 19, 1, 0, "YOSHIHISA HASHIMOTO ", { 0, 0, 0 } }, + { 13, 1, 0, "TAKAAKI SAITO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 12, 0, 0, "DEVELOPED BY ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 8, 0, 0, "PRODUCER ", { 0, 0, 0 } }, + { 17, 1, 0, "HIROSHI MATSUMOTO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 13, 0, 0, "LINE PRODUCER ", { 0, 0, 0 } }, + { 13, 1, 0, "KOICHI SAKITA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 8, 0, 0, "PLANNERS ", { 0, 0, 0 } }, + { 16, 1, 0, "YUKIHIRO HIGASHI ", { 0, 0, 0 } }, + { 16, 1, 0, "MASAAKI YAMAGIWA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 11, 0, 0, "PROGRAMMERS ", { 0, 0, 0 } }, + { 20, 1, 0, "SHINICHIRO SHIBUSAWA ", { 0, 0, 0 } }, + { 13, 1, 0, "HIROFUMI KONO ", { 0, 0, 0 } }, + { 16, 1, 0, "HIROKI YOSHITAKE ", { 0, 0, 0 } }, + { 16, 1, 0, "KATSUYA KURAMOTO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 9, 0, 0, "DESIGNERS ", { 0, 0, 0 } }, + { 17, 1, 0, "KAZUHIKO YAMAMOTO ", { 0, 0, 0 } }, + { 13, 1, 0, "YUKO YAMANOUE ", { 0, 0, 0 } }, + { 15, 1, 0, "ETSUKO HOSOKAWA ", { 0, 0, 0 } }, + { 14, 1, 0, "TORU NAKANISHI ", { 0, 0, 0 } }, + { 16, 1, 0, "SADAKI MATSUMOTO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 5, 0, 0, "SOUND ", { 0, 0, 0 } }, + { 16, 1, 0, "HIRONOBU INAGAKI ", { 0, 0, 0 } }, + { 17, 1, 0, "ATSUYOSHI ISEMURA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 14, 0, 0, "SPECIAL THANKS ", { 0, 0, 0 } }, + { 17, 1, 0, "MASAHISA NAGANUMA ", { 0, 0, 0 } }, + { 17, 1, 0, "TAKAYUKI SAKAMOTO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 16, 0, 0, "SOUND CREATED BY ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 13, 0, 0, "SOUND CREATOR ", { 0, 0, 0 } }, + { 15, 1, 0, "TATSUYUKI MAEDA ", { 0, 0, 0 } }, + { 13, 1, 0, "YUTAKA MINOBE ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 18, 1, 0, "\"SCRAP BRAIN ZONE\" \x000\x000", { 0, 0, 0 } }, + { 17, 1, 0, "\"STAR LIGHT ZONE\" \x000\x000", { 0, 0, 0 } }, + { 10, 1, 0, "\"POWER UP\" \x000\x000", { 0, 0, 0 } }, + { 6, 1, 0, "\"BOSS\" \x000\x000", { 0, 0, 0 } }, + { 23, 0, 0, "from SONIC THE HEDGEHOG ", { 0, 0, 0 } }, + { 23, 1, 4, "\"EMERALD HILL ZONE(2P)\"\x000\x000", { 0, 0, 0 } }, + { 6, 1, 4, "\"BOSS\" \x000\x000", { 0, 0, 0 } }, + { 24, 0, 4, "from SONIC THE HEDGEHOG2 ", { 0, 0, 0 } }, + { 21, 1, 8, "composed and arranged ", { 0, 0, 0 } }, + { 2, 1, 8, "by ", { 0, 0, 0 } }, + { 15, 1, 8, "Masato Nakamura ", { 0, 0, 0 } }, + { 18, 1, 8, "(DREAMS COME TRUE) ", { 0, 0, 0 } }, + { 13, 1, 8, "DCTgarden.com ", { 0, 0, 0 } }, + { 16, 1, 8, "DREAMS COME TRUE ", { 0, 0, 0 } }, + { 2, 1, 8, "by ", { 0, 0, 0 } }, + { 15, 1, 8, "the courtesy of ", { 0, 0, 0 } }, + { 23, 1, 8, "Virgin Records America/ ", { 0, 0, 0 } }, + { 15, 1, 8, "TOSHIBA-EMI,LTD ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 16, 0, 0, "SEGA CORPORATION ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 20, 0, 0, "PROMOTION MANAGEMENT ", { 0, 0, 0 } }, + { 13, 1, 0, "MASANAO MAEDA ", { 0, 0, 0 } }, + { 17, 1, 0, "HIROYUKI MIYAZAKI ", { 0, 0, 0 } }, + { 15, 1, 0, "SEIJIRO SANNABE ", { 0, 0, 0 } }, + { 17, 1, 0, "HIDEKI YOKAICHIYA ", { 0, 0, 0 } }, + { 17, 1, 0, "YASUSHI YAMASHITA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 18, 0, 0, "PRODUCT MANAGEMENT ", { 0, 0, 0 } }, + { 12, 1, 0, "YOSHIKI OHKA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 9, 0, 0, "MARKETING ", { 0, 0, 0 } }, + { 17, 1, 0, "YASUNOBU MASAHIRO ", { 0, 0, 0 } }, + { 10, 1, 0, "NAOKO OHKA ", { 0, 0, 0 } }, + { 16, 1, 0, "TAKAYOSHI OHUCHI ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 9, 0, 0, "PUBLICITY ", { 0, 0, 0 } }, + { 14, 1, 0, "YASUSHI NAGUMO ", { 0, 0, 0 } }, + { 13, 1, 0, "MARIKO TAKEDA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 18, 0, 0, "MARKETING RESEARCH ", { 0, 0, 0 } }, + { 15, 1, 0, "TSUYOSHI SAWADA ", { 0, 0, 0 } }, + { 10, 1, 0, "AYAKO HINO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 17, 0, 0, "MANUAL PRODUCTION ", { 0, 0, 0 } }, + { 16, 1, 0, "YOSHIHIRO SAKUTA ", { 0, 0, 0 } }, + { 15, 1, 0, "CHIEKO NAKAMURA ", { 0, 0, 0 } }, + { 14, 1, 0, "MAKOTO NISHINO ", { 0, 0, 0 } }, + { 17, 1, 0, "TOSHIKI YAMAGUCHI ", { 0, 0, 0 } }, + { 15, 1, 0, "SATORU ISHIGAMI ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 9, 0, 0, "TEST TEAM ", { 0, 0, 0 } }, + { 15, 1, 0, "AKIRA NISHIKAWA ", { 0, 0, 0 } }, + { 15, 1, 0, "HIROYUKI MIYANO ", { 0, 0, 0 } }, + { 15, 1, 0, "YUTAKA KAWASAKI ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 15, 0, 0, "SEGA OF AMERICA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 20, 0, 0, "EXECUTIVE MANAGEMENT ", { 0, 0, 0 } }, + { 11, 1, 0, "PETER MOORE ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 21, 0, 0, "LOCALIZATION PRODUCER ", { 0, 0, 0 } }, + { 15, 1, 0, "OSAMU SHIBAMIYA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 9, 0, 0, "TEST LEAD ", { 0, 0, 0 } }, + { 13, 1, 0, "BRIAN IVANHOE ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 14, 0, 0, "SPECIAL THANKS ", { 0, 0, 0 } }, + { 11, 1, 0, "RICH BRIGGS ", { 0, 0, 0 } }, + { 11, 1, 0, "NOAH MUSLER ", { 0, 0, 0 } }, + { 14, 1, 0, "TAKASHI IIZUKA ", { 0, 0, 0 } }, + { 10, 1, 0, "ROXANA HUI ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 14, 0, 0, "SEGA OF EUROPE ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 20, 0, 0, "EXECUTIVE MANAGEMENT ", { 0, 0, 0 } }, + { 12, 1, 0, "YOSHIO SAKAI ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 14, 0, 0, "DIRECTOR OF PD ", { 0, 0, 0 } }, + { 9, 1, 0, "KATS SATO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 17, 0, 0, "PRODUCERS MANAGER ", { 0, 0, 0 } }, + { 11, 1, 0, "AUDE DONNAN ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 21, 0, 0, "LOCALIZATION PRODUCER ", { 0, 0, 0 } }, + { 16, 1, 0, "KUNIYO MATSUMOTO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 11, 0, 0, "LEAD TESTER ", { 0, 0, 0 } }, + { 11, 1, 0, "MATT BROOKS ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 25, 0, 0, "PRODUCT MARKETING MANAGER", { 0, 0, 0 } }, + { 9, 1, 0, "JIM PRIDE ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 15, 0, 0, "PRODUCT MANAGER ", { 0, 0, 0 } }, + { 13, 1, 0, "MATHEW QUAECK ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 20, 0, 0, "EXECUTIVE SUPERVISOR ", { 0, 0, 0 } }, + { 12, 1, 0, "TETSU KAYAMA ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 18, 0, 8, "EXECUTIVE PRODUCER ", { 0, 0, 0 } }, + { 11, 1, 8, "HIDEKI SATO ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 12, 0, 0, "PRESENTED BY ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, + { 0, 0, 0, " ", { 0, 0, 0 } }, +}; diff --git a/sa1/src/data/entities.c b/sa1/src/data/entities.c new file mode 100644 index 0000000000..3a5d7df701 --- /dev/null +++ b/sa1/src/data/entities.c @@ -0,0 +1,146 @@ +#include "global.h" + +const u8 zone_1_act_1_rings[] + = INCBIN_U8("data/maps/zone_1/act_1/entities/rings.bin.rl"); +const u8 zone_1_act_1_enemies[] + = INCBIN_U8("data/maps/zone_1/act_1/entities/enemies.bin.rl"); +const u8 zone_1_act_1_itemboxes[] + = INCBIN_U8("data/maps/zone_1/act_1/entities/itemboxes.bin.rl"); +const u8 zone_1_act_1_interactables[] + = INCBIN_U8("data/maps/zone_1/act_1/entities/interactables.bin.rl"); +const u8 zone_1_act_2_rings[] + = INCBIN_U8("data/maps/zone_1/act_2/entities/rings.bin.rl"); +const u8 zone_1_act_2_enemies[] + = INCBIN_U8("data/maps/zone_1/act_2/entities/enemies.bin.rl"); +const u8 zone_1_act_2_itemboxes[] + = INCBIN_U8("data/maps/zone_1/act_2/entities/itemboxes.bin.rl"); +const u8 zone_1_act_2_interactables[] + = INCBIN_U8("data/maps/zone_1/act_2/entities/interactables.bin.rl"); +const u8 zone_2_act_1_rings[] + = INCBIN_U8("data/maps/zone_2/act_1/entities/rings.bin.rl"); +const u8 zone_2_act_1_enemies[] + = INCBIN_U8("data/maps/zone_2/act_1/entities/enemies.bin.rl"); +const u8 zone_2_act_1_itemboxes[] + = INCBIN_U8("data/maps/zone_2/act_1/entities/itemboxes.bin.rl"); +const u8 zone_2_act_1_interactables[] + = INCBIN_U8("data/maps/zone_2/act_1/entities/interactables.bin.rl"); +const u8 zone_2_act_2_rings[] + = INCBIN_U8("data/maps/zone_2/act_2/entities/rings.bin.rl"); +const u8 zone_2_act_2_enemies[] + = INCBIN_U8("data/maps/zone_2/act_2/entities/enemies.bin.rl"); +const u8 zone_2_act_2_itemboxes[] + = INCBIN_U8("data/maps/zone_2/act_2/entities/itemboxes.bin.rl"); +const u8 zone_2_act_2_interactables[] + = INCBIN_U8("data/maps/zone_2/act_2/entities/interactables.bin.rl"); +const u8 zone_3_act_1_rings[] + = INCBIN_U8("data/maps/zone_3/act_1/entities/rings.bin.rl"); +const u8 zone_3_act_1_enemies[] + = INCBIN_U8("data/maps/zone_3/act_1/entities/enemies.bin.rl"); +const u8 zone_3_act_1_itemboxes[] + = INCBIN_U8("data/maps/zone_3/act_1/entities/itemboxes.bin.rl"); +const u8 zone_3_act_1_interactables[] + = INCBIN_U8("data/maps/zone_3/act_1/entities/interactables.bin.rl"); +const u8 zone_3_act_2_rings[] + = INCBIN_U8("data/maps/zone_3/act_2/entities/rings.bin.rl"); +const u8 zone_3_act_2_enemies[] + = INCBIN_U8("data/maps/zone_3/act_2/entities/enemies.bin.rl"); +const u8 zone_3_act_2_itemboxes[] + = INCBIN_U8("data/maps/zone_3/act_2/entities/itemboxes.bin.rl"); +const u8 zone_3_act_2_interactables[] + = INCBIN_U8("data/maps/zone_3/act_2/entities/interactables.bin.rl"); +const u8 zone_4_act_1_rings[] + = INCBIN_U8("data/maps/zone_4/act_1/entities/rings.bin.rl"); +const u8 zone_4_act_1_enemies[] + = INCBIN_U8("data/maps/zone_4/act_1/entities/enemies.bin.rl"); +const u8 zone_4_act_1_itemboxes[] + = INCBIN_U8("data/maps/zone_4/act_1/entities/itemboxes.bin.rl"); +const u8 zone_4_act_1_interactables[] + = INCBIN_U8("data/maps/zone_4/act_1/entities/interactables.bin.rl"); +const u8 zone_4_act_2_rings[] + = INCBIN_U8("data/maps/zone_4/act_2/entities/rings.bin.rl"); +const u8 zone_4_act_2_enemies[] + = INCBIN_U8("data/maps/zone_4/act_2/entities/enemies.bin.rl"); +const u8 zone_4_act_2_itemboxes[] + = INCBIN_U8("data/maps/zone_4/act_2/entities/itemboxes.bin.rl"); +const u8 zone_4_act_2_interactables[] + = INCBIN_U8("data/maps/zone_4/act_2/entities/interactables.bin.rl"); +const u8 zone_5_act_1_rings[] + = INCBIN_U8("data/maps/zone_5/act_1/entities/rings.bin.rl"); +const u8 zone_5_act_1_enemies[] + = INCBIN_U8("data/maps/zone_5/act_1/entities/enemies.bin.rl"); +const u8 zone_5_act_1_itemboxes[] + = INCBIN_U8("data/maps/zone_5/act_1/entities/itemboxes.bin.rl"); +const u8 zone_5_act_1_interactables[] + = INCBIN_U8("data/maps/zone_5/act_1/entities/interactables.bin.rl"); +const u8 zone_5_act_2_rings[] + = INCBIN_U8("data/maps/zone_5/act_2/entities/rings.bin.rl"); +const u8 zone_5_act_2_enemies[] + = INCBIN_U8("data/maps/zone_5/act_2/entities/enemies.bin.rl"); +const u8 zone_5_act_2_itemboxes[] + = INCBIN_U8("data/maps/zone_5/act_2/entities/itemboxes.bin.rl"); +const u8 zone_5_act_2_interactables[] + = INCBIN_U8("data/maps/zone_5/act_2/entities/interactables.bin.rl"); +const u8 zone_6_act_1_rings[] + = INCBIN_U8("data/maps/zone_6/act_1/entities/rings.bin.rl"); +const u8 zone_6_act_1_enemies[] + = INCBIN_U8("data/maps/zone_6/act_1/entities/enemies.bin.rl"); +const u8 zone_6_act_1_itemboxes[] + = INCBIN_U8("data/maps/zone_6/act_1/entities/itemboxes.bin.rl"); +const u8 zone_6_act_1_interactables[] + = INCBIN_U8("data/maps/zone_6/act_1/entities/interactables.bin.rl"); +const u8 zone_6_act_2_rings[] + = INCBIN_U8("data/maps/zone_6/act_2/entities/rings.bin.rl"); +const u8 zone_6_act_2_enemies[] + = INCBIN_U8("data/maps/zone_6/act_2/entities/enemies.bin.rl"); +const u8 zone_6_act_2_itemboxes[] + = INCBIN_U8("data/maps/zone_6/act_2/entities/itemboxes.bin.rl"); +const u8 zone_6_act_2_interactables[] + = INCBIN_U8("data/maps/zone_6/act_2/entities/interactables.bin.rl"); +const u8 zone_7_act_1_rings[] + = INCBIN_U8("data/maps/zone_7/act_1/entities/rings.bin.rl"); +const u8 zone_7_act_1_enemies[] + = INCBIN_U8("data/maps/zone_7/act_1/entities/enemies.bin.rl"); +const u8 zone_7_act_1_itemboxes[] + = INCBIN_U8("data/maps/zone_7/act_1/entities/itemboxes.bin.rl"); +const u8 zone_7_act_1_interactables[] + = INCBIN_U8("data/maps/zone_7/act_1/entities/interactables.bin.rl"); +const u8 zone_7_act_2_rings[] + = INCBIN_U8("data/maps/zone_7/act_2/entities/rings.bin.rl"); +const u8 zone_7_act_2_enemies[] + = INCBIN_U8("data/maps/zone_7/act_2/entities/enemies.bin.rl"); +const u8 zone_7_act_2_itemboxes[] + = INCBIN_U8("data/maps/zone_7/act_2/entities/itemboxes.bin.rl"); +const u8 zone_7_act_2_interactables[] + = INCBIN_U8("data/maps/zone_7/act_2/entities/interactables.bin.rl"); +const u8 chao_hunt_vs_zone_a_rings[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/entities/rings.bin.rl"); +const u8 chao_hunt_vs_zone_a_enemies[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/entities/enemies.bin.rl"); +const u8 chao_hunt_vs_zone_a_itemboxes[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/entities/itemboxes.bin.rl"); +const u8 chao_hunt_vs_zone_a_interactables[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_a/entities/interactables.bin.rl"); +const u8 chao_hunt_vs_zone_b_rings[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/entities/rings.bin.rl"); +const u8 chao_hunt_vs_zone_b_enemies[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/entities/enemies.bin.rl"); +const u8 chao_hunt_vs_zone_b_itemboxes[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/entities/itemboxes.bin.rl"); +const u8 chao_hunt_vs_zone_b_interactables[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_b/entities/interactables.bin.rl"); +const u8 chao_hunt_vs_zone_c_rings[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/entities/rings.bin.rl"); +const u8 chao_hunt_vs_zone_c_enemies[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/entities/enemies.bin.rl"); +const u8 chao_hunt_vs_zone_c_itemboxes[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/entities/itemboxes.bin.rl"); +const u8 chao_hunt_vs_zone_c_interactables[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_c/entities/interactables.bin.rl"); +const u8 chao_hunt_vs_zone_d_rings[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/entities/rings.bin.rl"); +const u8 chao_hunt_vs_zone_d_enemies[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/entities/enemies.bin.rl"); +const u8 chao_hunt_vs_zone_d_itemboxes[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/entities/itemboxes.bin.rl"); +const u8 chao_hunt_vs_zone_d_interactables[] + = INCBIN_U8("data/maps/chao_hunt/vs_zone_d/entities/interactables.bin.rl"); diff --git a/sa1/src/data/entity_tables.c b/sa1/src/data/entity_tables.c new file mode 100644 index 0000000000..a8252e7e4f --- /dev/null +++ b/sa1/src/data/entity_tables.c @@ -0,0 +1,135 @@ +#include "global.h" +#include "constants/zones.h" + +extern const u8 zone_1_act_1_rings[]; +extern const u8 zone_1_act_2_rings[]; +extern const u8 zone_2_act_1_rings[]; +extern const u8 zone_2_act_2_rings[]; +extern const u8 zone_3_act_1_rings[]; +extern const u8 zone_3_act_2_rings[]; +extern const u8 zone_4_act_1_rings[]; +extern const u8 zone_4_act_2_rings[]; +extern const u8 zone_5_act_1_rings[]; +extern const u8 zone_5_act_2_rings[]; +extern const u8 zone_6_act_1_rings[]; +extern const u8 zone_6_act_2_rings[]; +extern const u8 zone_7_act_1_rings[]; +extern const u8 zone_7_act_2_rings[]; +extern const u8 chao_hunt_vs_zone_a_rings[]; +extern const u8 chao_hunt_vs_zone_b_rings[]; +extern const u8 chao_hunt_vs_zone_c_rings[]; +extern const u8 chao_hunt_vs_zone_d_rings[]; + +extern u8 zone_1_act_1_interactables[]; +extern u8 zone_1_act_2_interactables[]; +extern u8 zone_2_act_1_interactables[]; +extern u8 zone_2_act_2_interactables[]; +extern u8 zone_3_act_1_interactables[]; +extern u8 zone_3_act_2_interactables[]; +extern u8 zone_4_act_1_interactables[]; +extern u8 zone_4_act_2_interactables[]; +extern u8 zone_5_act_1_interactables[]; +extern u8 zone_5_act_2_interactables[]; +extern u8 zone_6_act_1_interactables[]; +extern u8 zone_6_act_2_interactables[]; +extern u8 zone_7_act_1_interactables[]; +extern u8 zone_7_act_2_interactables[]; +extern u8 chao_hunt_vs_zone_a_interactables[]; +extern u8 chao_hunt_vs_zone_b_interactables[]; +extern u8 chao_hunt_vs_zone_c_interactables[]; +extern u8 chao_hunt_vs_zone_d_interactables[]; + +extern u8 zone_1_act_1_itemboxes[]; +extern u8 zone_1_act_2_itemboxes[]; +extern u8 zone_2_act_1_itemboxes[]; +extern u8 zone_2_act_2_itemboxes[]; +extern u8 zone_3_act_1_itemboxes[]; +extern u8 zone_3_act_2_itemboxes[]; +extern u8 zone_4_act_1_itemboxes[]; +extern u8 zone_4_act_2_itemboxes[]; +extern u8 zone_5_act_1_itemboxes[]; +extern u8 zone_5_act_2_itemboxes[]; +extern u8 zone_6_act_1_itemboxes[]; +extern u8 zone_6_act_2_itemboxes[]; +extern u8 zone_7_act_1_itemboxes[]; +extern u8 zone_7_act_2_itemboxes[]; +extern u8 chao_hunt_vs_zone_a_itemboxes[]; +extern u8 chao_hunt_vs_zone_b_itemboxes[]; +extern u8 chao_hunt_vs_zone_c_itemboxes[]; +extern u8 chao_hunt_vs_zone_d_itemboxes[]; + +extern u8 zone_1_act_1_enemies[]; +extern u8 zone_1_act_2_enemies[]; +extern u8 zone_2_act_1_enemies[]; +extern u8 zone_2_act_2_enemies[]; +extern u8 zone_3_act_1_enemies[]; +extern u8 zone_3_act_2_enemies[]; +extern u8 zone_4_act_1_enemies[]; +extern u8 zone_4_act_2_enemies[]; +extern u8 zone_5_act_1_enemies[]; +extern u8 zone_5_act_2_enemies[]; +extern u8 zone_6_act_1_enemies[]; +extern u8 zone_6_act_2_enemies[]; +extern u8 zone_7_act_1_enemies[]; +extern u8 zone_7_act_2_enemies[]; +extern u8 chao_hunt_vs_zone_a_enemies[]; +extern u8 chao_hunt_vs_zone_b_enemies[]; +extern u8 chao_hunt_vs_zone_c_enemies[]; +extern u8 chao_hunt_vs_zone_d_enemies[]; + +const RLCompressed *const gSpritePosData_rings[NUM_LEVEL_IDS] = { + (void *)&zone_1_act_1_rings, (void *)&zone_1_act_2_rings, + (void *)&zone_2_act_1_rings, (void *)&zone_2_act_2_rings, + (void *)&zone_3_act_1_rings, (void *)&zone_3_act_2_rings, + (void *)&zone_4_act_1_rings, (void *)&zone_4_act_2_rings, + (void *)&zone_5_act_1_rings, (void *)&zone_5_act_2_rings, + (void *)&zone_6_act_1_rings, (void *)&zone_6_act_2_rings, + (void *)&zone_7_act_1_rings, (void *)&zone_7_act_2_rings, + (void *)&chao_hunt_vs_zone_a_rings, (void *)&chao_hunt_vs_zone_b_rings, + (void *)&chao_hunt_vs_zone_c_rings, (void *)&chao_hunt_vs_zone_d_rings, +}; + +const RLCompressed *const gSpritePosData_interactables[NUM_LEVEL_IDS] = { + (void *)&zone_1_act_1_interactables, + (void *)&zone_1_act_2_interactables, + (void *)&zone_2_act_1_interactables, + (void *)&zone_2_act_2_interactables, + (void *)&zone_3_act_1_interactables, + (void *)&zone_3_act_2_interactables, + (void *)&zone_4_act_1_interactables, + (void *)&zone_4_act_2_interactables, + (void *)&zone_5_act_1_interactables, + (void *)&zone_5_act_2_interactables, + (void *)&zone_6_act_1_interactables, + (void *)&zone_6_act_2_interactables, + (void *)&zone_7_act_1_interactables, + (void *)&zone_7_act_2_interactables, + (void *)&chao_hunt_vs_zone_a_interactables, + (void *)&chao_hunt_vs_zone_b_interactables, + (void *)&chao_hunt_vs_zone_c_interactables, + (void *)&chao_hunt_vs_zone_d_interactables, +}; + +const RLCompressed *const gSpritePosData_itemboxes[NUM_LEVEL_IDS] = { + (void *)&zone_1_act_1_itemboxes, (void *)&zone_1_act_2_itemboxes, + (void *)&zone_2_act_1_itemboxes, (void *)&zone_2_act_2_itemboxes, + (void *)&zone_3_act_1_itemboxes, (void *)&zone_3_act_2_itemboxes, + (void *)&zone_4_act_1_itemboxes, (void *)&zone_4_act_2_itemboxes, + (void *)&zone_5_act_1_itemboxes, (void *)&zone_5_act_2_itemboxes, + (void *)&zone_6_act_1_itemboxes, (void *)&zone_6_act_2_itemboxes, + (void *)&zone_7_act_1_itemboxes, (void *)&zone_7_act_2_itemboxes, + (void *)&chao_hunt_vs_zone_a_itemboxes, (void *)&chao_hunt_vs_zone_b_itemboxes, + (void *)&chao_hunt_vs_zone_c_itemboxes, (void *)&chao_hunt_vs_zone_d_itemboxes, +}; + +const RLCompressed *const gSpritePosData_enemies[NUM_LEVEL_IDS] = { + (void *)&zone_1_act_1_enemies, (void *)&zone_1_act_2_enemies, + (void *)&zone_2_act_1_enemies, (void *)&zone_2_act_2_enemies, + (void *)&zone_3_act_1_enemies, (void *)&zone_3_act_2_enemies, + (void *)&zone_4_act_1_enemies, (void *)&zone_4_act_2_enemies, + (void *)&zone_5_act_1_enemies, (void *)&zone_5_act_2_enemies, + (void *)&zone_6_act_1_enemies, (void *)&zone_6_act_2_enemies, + (void *)&zone_7_act_1_enemies, (void *)&zone_7_act_2_enemies, + (void *)&chao_hunt_vs_zone_a_enemies, (void *)&chao_hunt_vs_zone_b_enemies, + (void *)&chao_hunt_vs_zone_c_enemies, (void *)&chao_hunt_vs_zone_d_enemies, +}; diff --git a/sa1/src/data/oam_data.c b/sa1/src/data/oam_data.c new file mode 100644 index 0000000000..1d48d22d7a --- /dev/null +++ b/sa1/src/data/oam_data.c @@ -0,0 +1,136314 @@ +#include "gba/defines.h" // for PACKED macro used in OamDataShort +#include "data/sprite_data.h" + +static const OamDataShort spriteOamData_Data[] = { + // 0 - 0x0810F708 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 1 - 0x0810F780 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 2 - 0x0810F87C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 3 - 0x0810F8B8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 4 - 0x0810F8D0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 5 - 0x0810F900 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 6 - 0x0810F918 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 7 - 0x0810F930 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 8 - 0x0810F96C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 9 - 0x0810F984 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 10 - 0x0810F9CC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 11 - 0x0810FA98 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 12 - 0x0810FB10 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 13 - 0x0810FB46 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 14 - 0x0810FC06 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 17 - 0x0810FCEA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 18 - 0x0810FD02 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 19 - 0x0810FD32 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 21 - 0x0810FD86 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 22 - 0x0810FDC8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 23 - 0x0810FEA0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 24 - 0x0810FFA8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 25 - 0x08110020 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 26 - 0x08110068 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + + // 27 - 0x081101A0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 28 - 0x0811020C + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 29 - 0x0811026C + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 30 - 0x0811027E + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 31 - 0x081102C0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 32 - 0x08110314 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 33 - 0x0811033E + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 34 - 0x08110350 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 35 - 0x08110380 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 36 - 0x0811040A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 37 - 0x081104FA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + + // 38 - 0x081105A2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 39 - 0x0811060E + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 40 - 0x08110626 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 41 - 0x0811070A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 42 - 0x08110746 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 43 - 0x081107CA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + + // 44 - 0x08110812 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 45 - 0x08110854 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 49 - 0x08110902 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 50 - 0x08110986 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 51 - 0x08110A16 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 52 - 0x08110A34 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 53 - 0x08110B12 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 55 - 0x08110B48 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 81 - 0x08110B60 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 82 - 0x08110BC0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 83 - 0x08110C14 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 84 - 0x08110C44 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 85 - 0x08110C92 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 86 - 0x08110CAA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 87 - 0x08110CBC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 0, + }, + + // 88 - 0x08110CEC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 89 - 0x08110D28 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 91 - 0x08110D64 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 93 - 0x08110D70 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 96 - 0x08110DD0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 97 - 0x08110DE8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 98 - 0x08110E00 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 99 - 0x08110E06 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 100 - 0x08110EAE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 101 - 0x0811101C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 102 - 0x081110A0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 103 - 0x081111C0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 104 - 0x08111202 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 105 - 0x08111244 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 106 - 0x0811125C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 107 - 0x08111286 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 108 - 0x081112CE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 109 - 0x081112FE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 110 - 0x08111430 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 111 - 0x081114D8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 112 - 0x08111568 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 113 - 0x08111622 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 116 - 0x08111706 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 117 - 0x0811171E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 118 - 0x0811178A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 120 - 0x081117C6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 1, + }, + + // 121 - 0x0811181A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 122 - 0x081118AA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + + // 123 - 0x08111A84 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 124 - 0x08111B74 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + + // 125 - 0x08111BF8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 48, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 48, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 48, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 8, + }, + + // 126 - 0x08111D12 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 127 - 0x08111D7E + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 128 - 0x08111DDE + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 129 - 0x08111DF0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 130 - 0x08111E32 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 131 - 0x08111E68 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 132 - 0x08111E98 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 133 - 0x08111ED4 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 134 - 0x08111F04 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 135 - 0x08112012 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + + // 136 - 0x08112276 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 137 - 0x081122E2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 138 - 0x08112324 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 139 - 0x0811236C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 140 - 0x0811245C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 141 - 0x081124C8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 142 - 0x08112534 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 145 - 0x0811256A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + + // 146 - 0x0811262A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 147 - 0x08112642 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 1, + }, + + // 149 - 0x0811277A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 155 - 0x081127EC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + + // 156 - 0x081128AC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 157 - 0x081128DC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + + // 158 - 0x081129C0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 180 - 0x08112A26 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 1, + }, + + // 181 - 0x08112A6E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 182 - 0x08112AB6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 184 - 0x08112AFE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 14, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + + // 185 - 0x08112B46 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + + // 186 - 0x08112B76 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + + // 187 - 0x08112BD6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 188 - 0x08112C00 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + + // 190 - 0x08112C3C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + + // 191 - 0x08112C6C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + + // 192 - 0x08112CD8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + + // 195 - 0x08112D4A + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 196 - 0x08112D62 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 1, + }, + + // 197 - 0x08112D92 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 198 - 0x08112D98 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 1, + }, + + // 199 - 0x08112DEC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 200 - 0x08112E88 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 201 - 0x08112F84 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 202 - 0x08112FA8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 203 - 0x08112FC6 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 204 - 0x08112FF6 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 205 - 0x08113026 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 206 - 0x0811303E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 207 - 0x08113092 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 208 - 0x081130AA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + + // 209 - 0x081130FE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 210 - 0x08113206 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 211 - 0x081132C6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 212 - 0x081132FC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 213 - 0x081133BC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 216 - 0x0811347C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + + // 217 - 0x081134AC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 218 - 0x081134DC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + + // 220 - 0x08113530 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 221 - 0x08113590 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + + // 222 - 0x081136A4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 223 - 0x081137A0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 2, + }, + + // 224 - 0x081138D8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + + // 225 - 0x08113908 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + + // 226 - 0x08113A34 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 227 - 0x08113AA0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 228 - 0x08113AFA + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 229 - 0x08113B0C + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 230 - 0x08113B4E + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 231 - 0x08113BA2 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 232 - 0x08113BCC + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 233 - 0x08113BDE + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 234 - 0x08113C0E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + + // 235 - 0x08113C5C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + + // 236 - 0x08113E06 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + + // 237 - 0x08113EAE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 238 - 0x08113F0E + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 239 - 0x08113F26 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 240 - 0x08114016 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 241 - 0x0811405E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 242 - 0x081140FA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + + // 245 - 0x08114142 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 246 - 0x08114190 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 249 - 0x081141C0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 2, + }, + + // 250 - 0x08114280 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + + // 260 - 0x081143BE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 261 - 0x081143D6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 262 - 0x08114406 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + + // 263 - 0x08114436 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 264 - 0x081144FC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 265 - 0x08114526 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 269 - 0x081145C8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 270 - 0x0811461C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 271 - 0x08114634 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 280 - 0x08114688 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 281 - 0x081146E8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 282 - 0x0811473C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 284 - 0x08114790 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + + // 285 - 0x081147A8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + + // 286 - 0x081147BA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + + // 287 - 0x081147DE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + + // 288 - 0x08114826 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 9, + }, + + // 292 - 0x0811486E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 295 - 0x081148E0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + + // 296 - 0x081148F8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + + // 297 - 0x08114910 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 298 - 0x08114916 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 299 - 0x0811499A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 300 - 0x08114AEA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + + // 301 - 0x08114B56 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 302 - 0x08114B74 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 303 - 0x08114BB6 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 304 - 0x08114BDA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 305 - 0x08114BF2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 306, 316, 378 - 0x08114C16 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 307 - 0x08114C3A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 308 - 0x08114C64 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 309 - 0x08114D2A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 310 - 0x08114DA8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 311 - 0x08114DF6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 312 - 0x08114E4A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + + // 315 - 0x08114F22 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + + // 317 - 0x08114F46 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 319 - 0x08114F6A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 320 - 0x08114FBE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 321 - 0x08115036 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 322 - 0x081151CE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + + // 323 - 0x08115240 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + + // 324 - 0x08115270 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + + // 325 - 0x08115354 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 326 - 0x081153C0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 327 - 0x08115420 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 328 - 0x08115432 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 329 - 0x08115474 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 330 - 0x081154C8 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 331 - 0x081154F2 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 332 - 0x08115516 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 333 - 0x08115546 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + + // 334 - 0x0811564E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 335 - 0x0811573E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 336 - 0x08115786 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 337 - 0x081157C2 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 338 - 0x081157DA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 339 - 0x0811589A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 340 - 0x081158E2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 341 - 0x08115954 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 342 - 0x08115978 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + + // 343 - 0x081159D8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + + // 348 - 0x08115A98 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 353 - 0x08115BD6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + + // 373 - 0x08115D7A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + + // 374 - 0x08115EB8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 375 - 0x08115F18 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 376 - 0x08115FD8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + + // 377 - 0x081160F2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + + // 379 - 0x081161C4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 380 - 0x081161E8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 381 - 0x08116218 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + + // 383 - 0x08116254 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + + // 384 - 0x08116284 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 385 - 0x08116296 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + + // 386 - 0x081162C6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + + // 387 - 0x0811630E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + + // 391 - 0x0811633E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 392 - 0x08116380 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 393 - 0x08116398 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + + // 394 - 0x081163B6 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 396 - 0x081163F2 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 397 - 0x081163F8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 398 - 0x0811641C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + + // 399 - 0x081164DC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 400 - 0x08116542 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 2, + }, + + // 401 - 0x081165C0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + + // 402 - 0x08116608 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 403 - 0x08116626 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + + // 404 - 0x08116662 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + + // 405 - 0x081166C2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + + // 406 - 0x0811670A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 407 - 0x08116740 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 9, + }, + + // 408 - 0x08116758 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 409 - 0x0811675E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 410 - 0x08116764 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 411 - 0x08116770 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 412 - 0x08116788 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 413 - 0x081167AC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 12, + }, + + // 414 - 0x081167D6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 415 - 0x081167E2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + + // 416 - 0x08116806 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 417 - 0x08116836 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 14, + }, + + // 418 - 0x081168AE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 12, + }, + + // 419 - 0x08116902 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 420 - 0x0811690E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 421 - 0x08116914 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 422 - 0x0811691A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 423 - 0x08116944 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 424 - 0x0811696E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + + // 425 - 0x08116992 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 2, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 14, + }, + + // 426 - 0x081169F8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 13, + }, + + // 427 - 0x08116A28 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 428 - 0x08116A2E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 429 - 0x08116A34 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 430 - 0x08116A40 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + + // 431 - 0x08116B0C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 432 - 0x08116B1E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + + // 433 - 0x08116B48 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 434 - 0x08116B66 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 435 - 0x08116B84 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 436 - 0x08116B90 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 437 - 0x08116B9C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 438 - 0x08116BAE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 439 - 0x08116BC0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 440 - 0x08116BD2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 441 - 0x08116BE4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 442 - 0x08116BF6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 443 - 0x08116C08 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 444 - 0x08116C1A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 445 - 0x08116C2C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 446 - 0x08116C3E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 447 - 0x08116C50 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 448 - 0x08116C62 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 449 - 0x08116C74 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 450 - 0x08116C86 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 451 - 0x08116C98 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 452 - 0x08116CAA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 453 - 0x08116D2E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + + // 454 - 0x08116DA6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + + // 455 - 0x08116DBE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 456 - 0x08116E90 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 457 - 0x08116E96 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + + // 458 - 0x08116EAE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + + // 459 - 0x08116EBA + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + + // 460 - 0x08116EC0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + + // 461 - 0x08116EC6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 462 - 0x08116F56 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 463 - 0x08116F62 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 464 - 0x08116F7A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 465 - 0x08116FC2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 466 - 0x08116FF8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 467 - 0x08116FFE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 468 - 0x08117064 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 469 - 0x08117088 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 470 - 0x081170D0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 471 - 0x0811710C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 472 - 0x08117166 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 473 - 0x08117178 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 42, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 46, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 42, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 46, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 42, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 46, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + + // 474 - 0x0811721A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 475 - 0x0811724A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + + // 476 - 0x08117262 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 477 - 0x0811726E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 478 - 0x0811727A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 479 - 0x081172FE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 480 - 0x081173A6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 481 - 0x0811744E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 482 - 0x081174F6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 483 - 0x08117538 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 484 - 0x08117556 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 7, + }, + + // 485 - 0x0811756E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 486 - 0x08117574 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + + // 487 - 0x081175B0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + + // 488 - 0x081175EC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 489 - 0x081175F2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 490 - 0x081175F8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 491 - 0x08117610 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 7, + }, + + // 492 - 0x08117628 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 493 - 0x08117718 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 494 - 0x08117724 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + + // 495 - 0x0811773C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 496 - 0x08117754 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 497 - 0x08117778 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 498, 500 - 0x0811779C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 2, + .priority = 0, + .paletteNum = 11, + }, + + // 499 - 0x081177F0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 501 - 0x081177FC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 502 - 0x0811782C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 503 - 0x08117832 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 504 - 0x08117844 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 505 - 0x08117856 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 506 - 0x081178CE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 507 - 0x081178E6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 508 - 0x081178F2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 509 - 0x08117982 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + + // 510 - 0x08117A12 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 511 - 0x08117A2A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 512 - 0x08117A3C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 513 - 0x08117A4E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 514 - 0x08117A54 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + + // 515 - 0x08117A72 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + + // 516 - 0x08117B56 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + + // 517 - 0x08117BFE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 518 - 0x08117C16 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 519 - 0x08117C2E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 520 - 0x08117C3A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 521 - 0x08117C40 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 522 - 0x08117C4C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 523 - 0x08117C6A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 524 - 0x08117C82 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 525 - 0x08117C9A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 526 - 0x08117CB2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 527 - 0x08117D00 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 528 - 0x08117D06 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + + // 529 - 0x08117D1E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 530 - 0x08117D2A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 531 - 0x08117D30 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 532 - 0x08117D36 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + + // 533 - 0x08117DCC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 534 - 0x08117DD8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 535 - 0x08117DE4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 536 - 0x08117DFC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 537 - 0x08117E08 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 538 - 0x08117E14 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 539 - 0x08117E2C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 540 - 0x08117E44 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + + // 541 - 0x08117E92 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + + // 542 - 0x08117EAA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 543 - 0x08117EC2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 544 - 0x08117ECE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + + // 545 - 0x08117EE6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 546 - 0x08117F04 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 6, + }, + + // 547 - 0x08117F40 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + + // 548 - 0x08117F4C + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 549 - 0x08117F52 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 550 - 0x08117F58 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 551 - 0x08117F64 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 552 - 0x08117F6A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + + // 553 - 0x08117FB2 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 554 - 0x08117FB8 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 555 - 0x08117FBE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + + // 556 - 0x08117FD6 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 557 - 0x08117FDC + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 558 - 0x08117FE2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 10, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + + // 559 - 0x08118042 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 560 - 0x08118048 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 561 - 0x0811805A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 562 - 0x0811806C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + + // 563 - 0x081180B4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 2, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + + // 564 - 0x081180C6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 565 - 0x081180F6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 566 - 0x08118126 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 567 - 0x08118156 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 568 - 0x081181CE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + + // 569 - 0x081181FE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 11, + }, + + // 570 - 0x0811820A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 571 - 0x0811822E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 572 - 0x08118252 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 573 - 0x08118288 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + + // 574 - 0x0811829A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 13, + }, + + // 575 - 0x081182A6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 80, + .priority = 0, + .paletteNum = 14, + }, + + // 576 - 0x081182EE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 14, + }, + + // 577 - 0x081182FA + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 578 - 0x08118300 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 579 - 0x08118306 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 580 - 0x0811830C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 581 - 0x08118312 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + + // 582 - 0x08118342 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + + // 583 - 0x08118390 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + + // 584 - 0x0811839C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + + // 585 - 0x0811845C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + + // 586 - 0x0811851C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + + // 587 - 0x081185DC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + + // 588 - 0x0811869C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + + // 589 - 0x081187BC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 11, + }, + + // 590 - 0x081188DC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 90, + .priority = 0, + .paletteNum = 11, + }, + + // 591 - 0x08118AEC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 52, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 66, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 70, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 74, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 11, + }, + + // 592 - 0x08118CFC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 593 - 0x08118D02 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + + // 594 - 0x08118D4A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 595 - 0x08118D50 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 596 - 0x08118D56 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 597 - 0x08118D5C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 598 - 0x08118D74 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 599 - 0x08118D8C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 600 - 0x08118DA4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 601 - 0x08118DB0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + + // 602 - 0x08118DBC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 603 - 0x08118DC2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 26, + .priority = 0, + .paletteNum = 11, + }, + + // 604 - 0x08118E52 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 605 - 0x08118EE2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + + // 606 - 0x08118EFA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 607 - 0x08118F00 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 60, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 56, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 10, + }, + + // 608 - 0x08118F90 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 609 - 0x08118F96 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 610 - 0x08118F9C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 611 - 0x08118FBA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + + // 612 - 0x08118FD8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + + // 613 - 0x08118FF6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 614 - 0x08118FFC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 615 - 0x08119002 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 616 - 0x08119008 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 617 - 0x0811900E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 618 - 0x08119014 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 619 - 0x08119032 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 620 - 0x08119038 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + + // 621 - 0x081190F8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + + // 622 - 0x08119110 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 623 - 0x0811912E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 624 - 0x08119134 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + + // 625 - 0x08119194 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 626 - 0x081191C4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + + // 627 - 0x081191D6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + + // 628 - 0x081191E8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 629 - 0x0811920C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 630 - 0x08119224 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 631 - 0x08119230 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + + // 632 - 0x08119296 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + + // 633 - 0x081192D8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + + // 634 - 0x081192F0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + + // 635 - 0x08119344 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 636 - 0x0811939E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 637 - 0x081193B6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 638 - 0x081193E6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + + // 639 - 0x081193FE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + + // 640 - 0x0811942E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 641 - 0x081194F4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 10, + }, + + // 642 - 0x08119524 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 643 - 0x08119542 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 10, + }, + + // 644 - 0x08119602 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + + // 645 - 0x0811966E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 646 - 0x08119686 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + + // 647 - 0x081196DA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 648 - 0x08119734 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 649 - 0x0811974C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 650 - 0x0811977C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 651 - 0x08119794 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 652 - 0x081197C4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 653 - 0x0811988A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + + // 654 - 0x081198BA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 655 - 0x081198D8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + + // 656 - 0x08119950 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 657 - 0x0811995C + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 11, + }, + + // 658 - 0x081199A4 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 659 - 0x081199C8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 660 - 0x081199CE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 661 - 0x08119A0A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 662 - 0x08119A10 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + + // 663 - 0x08119A46 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 10, + }, + + // 664 - 0x08119A5E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 665 - 0x08119A6A + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 666 - 0x08119A76 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 0, + }, + + // 667 - 0x08119A9A + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 668 - 0x08119AB8 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 669 - 0x08119AD0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 10, + }, + + // 670 - 0x08119AE8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 2, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 2, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 671 - 0x08119B30 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 672 - 0x08119B36 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 80, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + + // 673 - 0x08119B84 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 674 - 0x08119B90 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 675 - 0x08119B96 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 676 - 0x08119BA2 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 677 - 0x08119BA8 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 678 - 0x08119BAE + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 679 - 0x08119BB4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 680 - 0x08119BC0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 681 - 0x08119BDE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 682 - 0x08119C0E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 48, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + + // 683 - 0x08119C2C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 684 - 0x08119C4A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 11, + }, + + // 685 - 0x08119C62 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + + // 686 - 0x08119C6E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 687 - 0x08119C8C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 15, + }, + + // 688 - 0x08119CD4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + + // 689 - 0x08119E18 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 690 - 0x08119E30 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 691 - 0x08119E3C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 692 - 0x08119E72 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 693 - 0x08119E78 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + + // 694 - 0x08119ED8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 695 - 0x08119F80 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 696 - 0x08119F8C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + + // 697 - 0x08119F9E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 698 - 0x08119FAA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + + // 699 - 0x08119FC8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + + // 700 - 0x08119FF8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 701 - 0x08119FFE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 702 - 0x0811A00A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 703 - 0x0811A028 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + + // 704 - 0x0811A04C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + + // 705 - 0x0811A088 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 706 - 0x0811A08E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + + // 707 - 0x0811A0F4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + + // 708 - 0x0811A10C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + + // 709 - 0x0811A124 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 710 - 0x0811A142 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 711 - 0x0811A17E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 712 - 0x0811A18A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 713 - 0x0811A190 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 714 - 0x0811A1A8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 715 - 0x0811A1B4 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + + // 716 - 0x0811A1DE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + + // 717 - 0x0811A202 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + + // 718 - 0x0811A280 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + + // 719 - 0x0811A292 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 720 - 0x0811A2AA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + + // 721 - 0x0811A2B6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 2, + .priority = 0, + .paletteNum = 6, + }, + + // 722 - 0x0811A2C2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 80, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 80, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 80, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 10, + }, + + // 723 - 0x0811A5AA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 128, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 224, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 288, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 320, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 384, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 448, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 480, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 512, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 544, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 560, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 568, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 576, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 584, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 592, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 128, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 224, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 288, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 320, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 384, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 448, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 480, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 512, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 544, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 560, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 568, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 576, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 584, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 592, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 128, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 224, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 288, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 320, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 384, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 448, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 480, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 512, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 544, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 560, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 568, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 576, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 584, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 592, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 128, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 224, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 288, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 320, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 384, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 448, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 480, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 3, + .tileNum = 512, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 544, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 560, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 568, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 576, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 584, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 128, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 224, + .matrixNum = 0, + .size = 2, + .tileNum = 592, + .priority = 0, + .paletteNum = 0, + }, + + // 724 - 0x0811A742 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 725 - 0x0811A916 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + + // 726 - 0x0811A92E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 8, + }, + + // 727 - 0x0811A946 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + + // 728 - 0x0811A95E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 14, + }, + + // 729 - 0x0811A976 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + + // 730 - 0x0811A98E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 731 - 0x0811A994 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 732 - 0x0811A9AC + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + + // 733 - 0x0811A9C4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 14, + }, + + // 734 - 0x0811A9F4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 14, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 14, + }, + + // 735, 804 - 0x0811AA24 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 736, 803 - 0x0811AA30 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 96, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 104, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 1, + .tileNum = 112, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 1, + .tileNum = 116, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 96, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 104, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 1, + .tileNum = 112, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 1, + .tileNum = 116, + .priority = 0, + .paletteNum = 6, + }, + + // 737 - 0x0811AA78 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + + // 738 - 0x0811AAD8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 112, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 104, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 108, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 112, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 116, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 120, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 152, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 168, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 112, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 176, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 180, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 188, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 196, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 204, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 112, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 208, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 1, + .tileNum = 210, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 1, + .tileNum = 214, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 1, + .tileNum = 218, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 222, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 112, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 224, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 100, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 104, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 136, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 152, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 156, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 164, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 172, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 180, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 104, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 112, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 144, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 160, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 168, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 176, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 184, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 192, + .priority = 0, + .paletteNum = 0, + }, + + // 739 - 0x0811ABEC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + + // 740 - 0x0811AC0A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 76, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 88, + .priority = 0, + .paletteNum = 0, + }, + + // 741 - 0x0811AC88 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 60, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 60, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 3, + }, + + // 742 - 0x0811AD18 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 10, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 10, + }, + + // 743 - 0x0811AD30 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + + // 744 - 0x0811AD48 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 12, + }, + + // 745 - 0x0811AD60 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 15, + }, + + // 746 - 0x0811AD9C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + + // 747 - 0x0811ADF0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + + // 748 - 0x0811AE1A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 4, + }, + + // 749 - 0x0811AE4A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 750 - 0x0811AE98 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + + // 751 - 0x0811AF28 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + + // 752 - 0x0811AFE8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 753 - 0x0811B114 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 1, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 2, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 3, + .priority = 0, + .paletteNum = 5, + }, + + // 754 - 0x0811B12C + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 5, + }, + + // 755 - 0x0811B144 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + + // 756 - 0x0811B180 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 757 - 0x0811B1AA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + + // 758 - 0x0811B1D4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 759 - 0x0811B1F2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + + // 760 - 0x0811B210 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + + // 761 - 0x0811B22E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + + // 762 - 0x0811B24C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 763 - 0x0811B29A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 764 - 0x0811B2CA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + + // 765 - 0x0811B2EE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + + // 766 - 0x0811B330 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 767 - 0x0811B378 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 768 - 0x0811B3A8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + + // 769 - 0x0811B4DA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 96, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 3, + }, + + // 770 - 0x0811B546 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 13, + }, + + // 771 - 0x0811B594 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 13, + }, + + // 772 - 0x0811B5DC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 13, + }, + + // 773 - 0x0811B63C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 13, + }, + + // 774 - 0x0811B67E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 8, + }, + + // 775 - 0x0811B6DE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 776 - 0x0811B720 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 96, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 112, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 1, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 0, + }, + + // 777 - 0x0811B73E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 5, + }, + + // 778 - 0x0811B786 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 176, + .matrixNum = 0, + .size = 0, + .tileNum = 44, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + + // 779 - 0x0811B804 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + + // 780 - 0x0811B882 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 2, + .tileNum = 60, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 224, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 224, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 2, + .tileNum = 60, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 224, + .matrixNum = 0, + .size = 1, + .tileNum = 84, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 224, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 3, + }, + + // 781 - 0x0811B942 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 782 - 0x0811B966 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 783 - 0x0811B97E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 784 - 0x0811B996 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 1, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + + // 785 - 0x0811B9AE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 60, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 64, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 176, + .matrixNum = 0, + .size = 0, + .tileNum = 66, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 176, + .matrixNum = 0, + .size = 0, + .tileNum = 68, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 36, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 38, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 48, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 50, + .priority = 0, + .paletteNum = 15, + }, + + // 786 - 0x0811BA6E + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 787 - 0x0811BA80 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 176, + .matrixNum = 0, + .size = 0, + .tileNum = 44, + .priority = 0, + .paletteNum = 0, + }, + + // 788 - 0x0811BAAA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 789 - 0x0811BABC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 790 - 0x0811BACE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + + // 791 - 0x0811BADA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + + // 792 - 0x0811BAFE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + + // 793 - 0x0811BB22 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 40, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 12, + }, + + // 794 - 0x0811BB46 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 795 - 0x0811BB70 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + + // 796 - 0x0811BB88 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + + // 797 - 0x0811BBA0 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 798 - 0x0811BBCA + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 6, + }, + + // 799 - 0x0811BBEE + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + + // 800 - 0x0811BC7E + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 96, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 112, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 128, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 144, + .priority = 0, + .paletteNum = 15, + }, + + // 801 - 0x0811BCBA + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + + // 802 - 0x0811BCC6 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + + // 805 - 0x0811BCE4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 6, + .priority = 0, + .paletteNum = 8, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 8, + }, + + // 806 - 0x0811BD44 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 7, + }, + + // 807 - 0x0811BD68 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 808 - 0x0811BDD4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 48, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 50, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 144, + .matrixNum = 0, + .size = 0, + .tileNum = 36, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 2, + .tileNum = 60, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 1, + .tileNum = 80, + .priority = 0, + .paletteNum = 6, + }, + + // 809 - 0x0811BEB8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 48, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 88, + .priority = 0, + .paletteNum = 6, + }, + + // 810 - 0x0811BEDC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + + // 811 - 0x0811BEF4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 64, + .priority = 0, + .paletteNum = 0, + }, + + // 812 - 0x0811BF06 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 144, + .matrixNum = 0, + .size = 0, + .tileNum = 36, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 12, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 12, + }, + + // 813 - 0x0811BF5A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 48, + .priority = 0, + .paletteNum = 11, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 56, + .priority = 0, + .paletteNum = 11, + }, + + // 814, 815, 816 - 0x0811BF96 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 817 - 0x0811BF9C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + + // 818 - 0x0811BFA2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + + // 819 - 0x0811BFA8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + + // 820 - 0x0811BFAE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 13, + }, + + // 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, + // 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, + // 853 - 0x0811BFB4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + + // 854 - 0x0811C0D4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 44, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 52, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 54, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 58, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 62, + .priority = 0, + .paletteNum = 5, + }, + + // 855 - 0x0811C2CC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 90, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 94, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 98, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 90, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 94, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 98, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 90, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 94, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 98, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 90, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 94, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 98, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 72, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 88, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 90, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 1, + .tileNum = 94, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 98, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 64, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 64, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 68, + .priority = 0, + .paletteNum = 5, + }, + + // 856 - 0x0811C458 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 5, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 40, + .priority = 0, + .paletteNum = 5, + }, + + // 857 - 0x0811C49A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 858 - 0x0811C4A0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 859 - 0x0811C4E8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 860 - 0x0811C4EE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 861 - 0x0811C4FA + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 862 - 0x0811C542 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + + // 863 - 0x0811C58A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 864 - 0x0811C662 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 36, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 44, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 48, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 50, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 15, + }, + + // 865 - 0x0811C6CE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 866 - 0x0811C6EC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 867 - 0x0811C7B2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 3, + }, + + // 868 - 0x0811C7BE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 869 - 0x0811C7DC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + + // 870 - 0x0811C806 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 8, + }, + + // 871 - 0x0811C818 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + + // 872 - 0x0811C830 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + + // 873 - 0x0811C836 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 874 - 0x0811C848 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 7, + }, + + // 875 - 0x0811C854 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + + // 876 - 0x0811C860 + { + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + }, + + // 877 - 0x0811C866 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 128, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 136, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 128, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 136, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 128, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 136, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 64, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 128, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 136, + .priority = 0, + .paletteNum = 4, + }, + + // 878 - 0x0811C8C6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 879 - 0x0811C8F0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 80, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 96, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 2, + .tileNum = 100, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 108, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 176, + .matrixNum = 0, + .size = 1, + .tileNum = 110, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 176, + .matrixNum = 0, + .size = 0, + .tileNum = 114, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 80, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 112, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 116, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 192, + .matrixNum = 0, + .size = 2, + .tileNum = 120, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 192, + .matrixNum = 0, + .size = 0, + .tileNum = 128, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 3, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 72, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 76, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 3, + .tileNum = 80, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 112, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 116, + .priority = 0, + .paletteNum = 0, + }, + + // 880 - 0x0811C9B0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 144, + .matrixNum = 0, + .size = 0, + .tileNum = 36, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + + // 881 - 0x0811CB00 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 18, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 4, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 4, + }, + + // 882 - 0x0811CBCC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 883 - 0x0811CBE4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 15, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 15, + }, + + // 884 - 0x0811CD10 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + + // 885 - 0x0811CD4C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 886 - 0x0811CE00 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + + // 887 - 0x0811CE24 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 1, + .tileNum = 30, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 20, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + + // 888 - 0x0811CFFE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 34, + .priority = 0, + .paletteNum = 9, + }, + + // 889 - 0x0811D1AE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 28, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 36, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 48, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 9, + }, + + // 890 - 0x0811D1D2 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + + // 891 - 0x0811D1E4 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + + // 892 - 0x0811D25C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 893 - 0x0811D2BC + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 176, + .matrixNum = 0, + .size = 0, + .tileNum = 44, + .priority = 0, + .paletteNum = 0, + }, + + // 894 - 0x0811D2E6 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 14, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + + // 895 - 0x0811D376 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + + // 896 - 0x0811D394 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 9, + }, + + // 897 - 0x0811D400 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 128, + .matrixNum = 0, + .size = 1, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 144, + .matrixNum = 0, + .size = 0, + .tileNum = 36, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + + // 898 - 0x0811D442 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 1, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + }, + { + .y = 32, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 3, + }, + + // 899 - 0x0811D472 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 20, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 32, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + + // 900 - 0x0811D526 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 16, + .matrixNum = 0, + .size = 0, + .tileNum = 4, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 9, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 48, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 9, + }, + + // 901 - 0x0811D550 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 128, + .matrixNum = 0, + .size = 0, + .tileNum = 32, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 1, + .tileNum = 24, + .priority = 0, + .paletteNum = 0, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 112, + .matrixNum = 0, + .size = 0, + .tileNum = 28, + .priority = 0, + .paletteNum = 0, + }, + + // 902 - 0x0811D58C + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 160, + .matrixNum = 0, + .size = 0, + .tileNum = 40, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 160, + .matrixNum = 0, + .size = 1, + .tileNum = 40, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 2, + .tileNum = 16, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 96, + .matrixNum = 0, + .size = 2, + .tileNum = 24, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 128, + .matrixNum = 0, + .size = 2, + .tileNum = 32, + .priority = 0, + .paletteNum = 6, + }, + + // 903 - 0x0811D616 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 96, + .matrixNum = 0, + .size = 0, + .tileNum = 12, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 4, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 64, + .matrixNum = 0, + .size = 0, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 80, + .matrixNum = 0, + .size = 0, + .tileNum = 10, + .priority = 0, + .paletteNum = 6, + }, + + // 904 - 0x0811D66A + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + + // 905 - 0x0811D6A0 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 8, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 2, + .tileNum = 12, + .priority = 0, + .paletteNum = 2, + }, + { + .y = 16, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 32, + .matrixNum = 0, + .size = 1, + .tileNum = 20, + .priority = 0, + .paletteNum = 2, + }, + + // 906 - 0x0811D6B8 + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 11, + }, + + // 907 - 0x0811D6BE + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, + { + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 6, + }, +}; + +// 0811D744 +const OamDataShort *const gSpriteOamData[908] = { + /* 0 */ &spriteOamData_Data[0], + /* 1 */ &spriteOamData_Data[20], + /* 2 */ &spriteOamData_Data[62], + /* 3 */ &spriteOamData_Data[72], + /* 4 */ &spriteOamData_Data[76], + /* 5 */ &spriteOamData_Data[84], + /* 6 */ &spriteOamData_Data[88], + /* 7 */ &spriteOamData_Data[92], + /* 8 */ &spriteOamData_Data[102], + /* 9 */ &spriteOamData_Data[106], + /* 10 */ &spriteOamData_Data[118], + /* 11 */ &spriteOamData_Data[152], + /* 12 */ &spriteOamData_Data[172], + /* 13 */ &spriteOamData_Data[181], + /* 14 */ &spriteOamData_Data[213], + /* 15 */ NULL, + /* 16 */ NULL, + /* 17 */ &spriteOamData_Data[251], + /* 18 */ &spriteOamData_Data[255], + /* 19 */ &spriteOamData_Data[263], + /* 20 */ NULL, + /* 21 */ &spriteOamData_Data[277], + /* 22 */ &spriteOamData_Data[288], + /* 23 */ &spriteOamData_Data[324], + /* 24 */ &spriteOamData_Data[368], + /* 25 */ &spriteOamData_Data[388], + /* 26 */ &spriteOamData_Data[400], + /* 27 */ &spriteOamData_Data[452], + /* 28 */ &spriteOamData_Data[470], + /* 29 */ &spriteOamData_Data[486], + /* 30 */ &spriteOamData_Data[489], + /* 31 */ &spriteOamData_Data[500], + /* 32 */ &spriteOamData_Data[514], + /* 33 */ &spriteOamData_Data[521], + /* 34 */ &spriteOamData_Data[524], + /* 35 */ &spriteOamData_Data[532], + /* 36 */ &spriteOamData_Data[555], + /* 37 */ &spriteOamData_Data[595], + /* 38 */ &spriteOamData_Data[623], + /* 39 */ &spriteOamData_Data[641], + /* 40 */ &spriteOamData_Data[645], + /* 41 */ &spriteOamData_Data[683], + /* 42 */ &spriteOamData_Data[693], + /* 43 */ &spriteOamData_Data[715], + /* 44 */ &spriteOamData_Data[727], + /* 45 */ &spriteOamData_Data[738], + /* 46 */ NULL, + /* 47 */ NULL, + /* 48 */ NULL, + /* 49 */ &spriteOamData_Data[767], + /* 50 */ &spriteOamData_Data[789], + /* 51 */ &spriteOamData_Data[813], + /* 52 */ &spriteOamData_Data[818], + /* 53 */ &spriteOamData_Data[855], + /* 54 */ NULL, + /* 55 */ &spriteOamData_Data[864], + /* 56 */ NULL, + /* 57 */ NULL, + /* 58 */ NULL, + /* 59 */ NULL, + /* 60 */ NULL, + /* 61 */ NULL, + /* 62 */ NULL, + /* 63 */ NULL, + /* 64 */ NULL, + /* 65 */ NULL, + /* 66 */ NULL, + /* 67 */ NULL, + /* 68 */ NULL, + /* 69 */ NULL, + /* 70 */ NULL, + /* 71 */ NULL, + /* 72 */ NULL, + /* 73 */ NULL, + /* 74 */ NULL, + /* 75 */ NULL, + /* 76 */ NULL, + /* 77 */ NULL, + /* 78 */ NULL, + /* 79 */ NULL, + /* 80 */ NULL, + /* 81 */ &spriteOamData_Data[868], + /* 82 */ &spriteOamData_Data[884], + /* 83 */ &spriteOamData_Data[898], + /* 84 */ &spriteOamData_Data[906], + /* 85 */ &spriteOamData_Data[919], + /* 86 */ &spriteOamData_Data[923], + /* 87 */ &spriteOamData_Data[926], + /* 88 */ &spriteOamData_Data[934], + /* 89 */ &spriteOamData_Data[944], + /* 90 */ NULL, + /* 91 */ &spriteOamData_Data[954], + /* 92 */ NULL, + /* 93 */ &spriteOamData_Data[956], + /* 94 */ NULL, + /* 95 */ NULL, + /* 96 */ &spriteOamData_Data[972], + /* 97 */ &spriteOamData_Data[976], + /* 98 */ &spriteOamData_Data[980], + /* 99 */ &spriteOamData_Data[981], + /* 100 */ &spriteOamData_Data[1009], + /* 101 */ &spriteOamData_Data[1070], + /* 102 */ &spriteOamData_Data[1092], + /* 103 */ &spriteOamData_Data[1140], + /* 104 */ &spriteOamData_Data[1151], + /* 105 */ &spriteOamData_Data[1162], + /* 106 */ &spriteOamData_Data[1166], + /* 107 */ &spriteOamData_Data[1173], + /* 108 */ &spriteOamData_Data[1185], + /* 109 */ &spriteOamData_Data[1193], + /* 110 */ &spriteOamData_Data[1244], + /* 111 */ &spriteOamData_Data[1272], + /* 112 */ &spriteOamData_Data[1296], + /* 113 */ &spriteOamData_Data[1327], + /* 114 */ NULL, + /* 115 */ NULL, + /* 116 */ &spriteOamData_Data[1365], + /* 117 */ &spriteOamData_Data[1369], + /* 118 */ &spriteOamData_Data[1387], + /* 119 */ NULL, + /* 120 */ &spriteOamData_Data[1397], + /* 121 */ &spriteOamData_Data[1411], + /* 122 */ &spriteOamData_Data[1435], + /* 123 */ &spriteOamData_Data[1514], + /* 124 */ &spriteOamData_Data[1554], + /* 125 */ &spriteOamData_Data[1576], + /* 126 */ &spriteOamData_Data[1623], + /* 127 */ &spriteOamData_Data[1641], + /* 128 */ &spriteOamData_Data[1657], + /* 129 */ &spriteOamData_Data[1660], + /* 130 */ &spriteOamData_Data[1671], + /* 131 */ &spriteOamData_Data[1680], + /* 132 */ &spriteOamData_Data[1688], + /* 133 */ &spriteOamData_Data[1698], + /* 134 */ &spriteOamData_Data[1706], + /* 135 */ &spriteOamData_Data[1751], + /* 136 */ &spriteOamData_Data[1853], + /* 137 */ &spriteOamData_Data[1871], + /* 138 */ &spriteOamData_Data[1882], + /* 139 */ &spriteOamData_Data[1894], + /* 140 */ &spriteOamData_Data[1934], + /* 141 */ &spriteOamData_Data[1952], + /* 142 */ &spriteOamData_Data[1970], + /* 143 */ NULL, + /* 144 */ NULL, + /* 145 */ &spriteOamData_Data[1979], + /* 146 */ &spriteOamData_Data[2011], + /* 147 */ &spriteOamData_Data[2015], + /* 148 */ NULL, + /* 149 */ &spriteOamData_Data[2067], + /* 150 */ NULL, + /* 151 */ NULL, + /* 152 */ NULL, + /* 153 */ NULL, + /* 154 */ NULL, + /* 155 */ &spriteOamData_Data[2086], + /* 156 */ &spriteOamData_Data[2118], + /* 157 */ &spriteOamData_Data[2126], + /* 158 */ &spriteOamData_Data[2164], + /* 159 */ NULL, + /* 160 */ NULL, + /* 161 */ NULL, + /* 162 */ NULL, + /* 163 */ NULL, + /* 164 */ NULL, + /* 165 */ NULL, + /* 166 */ NULL, + /* 167 */ NULL, + /* 168 */ NULL, + /* 169 */ NULL, + /* 170 */ NULL, + /* 171 */ NULL, + /* 172 */ NULL, + /* 173 */ NULL, + /* 174 */ NULL, + /* 175 */ NULL, + /* 176 */ NULL, + /* 177 */ NULL, + /* 178 */ NULL, + /* 179 */ NULL, + /* 180 */ &spriteOamData_Data[2181], + /* 181 */ &spriteOamData_Data[2193], + /* 182 */ &spriteOamData_Data[2205], + /* 183 */ NULL, + /* 184 */ &spriteOamData_Data[2217], + /* 185 */ &spriteOamData_Data[2229], + /* 186 */ &spriteOamData_Data[2237], + /* 187 */ &spriteOamData_Data[2253], + /* 188 */ &spriteOamData_Data[2260], + /* 189 */ NULL, + /* 190 */ &spriteOamData_Data[2270], + /* 191 */ &spriteOamData_Data[2278], + /* 192 */ &spriteOamData_Data[2296], + /* 193 */ NULL, + /* 194 */ NULL, + /* 195 */ &spriteOamData_Data[2315], + /* 196 */ &spriteOamData_Data[2319], + /* 197 */ &spriteOamData_Data[2327], + /* 198 */ &spriteOamData_Data[2328], + /* 199 */ &spriteOamData_Data[2342], + /* 200 */ &spriteOamData_Data[2368], + /* 201 */ &spriteOamData_Data[2410], + /* 202 */ &spriteOamData_Data[2416], + /* 203 */ &spriteOamData_Data[2421], + /* 204 */ &spriteOamData_Data[2429], + /* 205 */ &spriteOamData_Data[2437], + /* 206 */ &spriteOamData_Data[2441], + /* 207 */ &spriteOamData_Data[2455], + /* 208 */ &spriteOamData_Data[2459], + /* 209 */ &spriteOamData_Data[2473], + /* 210 */ &spriteOamData_Data[2517], + /* 211 */ &spriteOamData_Data[2549], + /* 212 */ &spriteOamData_Data[2558], + /* 213 */ &spriteOamData_Data[2590], + /* 214 */ NULL, + /* 215 */ NULL, + /* 216 */ &spriteOamData_Data[2622], + /* 217 */ &spriteOamData_Data[2630], + /* 218 */ &spriteOamData_Data[2638], + /* 219 */ NULL, + /* 220 */ &spriteOamData_Data[2652], + /* 221 */ &spriteOamData_Data[2668], + /* 222 */ &spriteOamData_Data[2714], + /* 223 */ &spriteOamData_Data[2756], + /* 224 */ &spriteOamData_Data[2808], + /* 225 */ &spriteOamData_Data[2816], + /* 226 */ &spriteOamData_Data[2866], + /* 227 */ &spriteOamData_Data[2884], + /* 228 */ &spriteOamData_Data[2899], + /* 229 */ &spriteOamData_Data[2902], + /* 230 */ &spriteOamData_Data[2913], + /* 231 */ &spriteOamData_Data[2927], + /* 232 */ &spriteOamData_Data[2934], + /* 233 */ &spriteOamData_Data[2937], + /* 234 */ &spriteOamData_Data[2945], + /* 235 */ &spriteOamData_Data[2958], + /* 236 */ &spriteOamData_Data[3029], + /* 237 */ &spriteOamData_Data[3057], + /* 238 */ &spriteOamData_Data[3073], + /* 239 */ &spriteOamData_Data[3077], + /* 240 */ &spriteOamData_Data[3117], + /* 241 */ &spriteOamData_Data[3129], + /* 242 */ &spriteOamData_Data[3155], + /* 243 */ NULL, + /* 244 */ NULL, + /* 245 */ &spriteOamData_Data[3167], + /* 246 */ &spriteOamData_Data[3180], + /* 247 */ NULL, + /* 248 */ NULL, + /* 249 */ &spriteOamData_Data[3188], + /* 250 */ &spriteOamData_Data[3220], + /* 251 */ NULL, + /* 252 */ NULL, + /* 253 */ NULL, + /* 254 */ NULL, + /* 255 */ NULL, + /* 256 */ NULL, + /* 257 */ NULL, + /* 258 */ NULL, + /* 259 */ NULL, + /* 260 */ &spriteOamData_Data[3273], + /* 261 */ &spriteOamData_Data[3277], + /* 262 */ &spriteOamData_Data[3285], + /* 263 */ &spriteOamData_Data[3293], + /* 264 */ &spriteOamData_Data[3326], + /* 265 */ &spriteOamData_Data[3333], + /* 266 */ NULL, + /* 267 */ NULL, + /* 268 */ NULL, + /* 269 */ &spriteOamData_Data[3360], + /* 270 */ &spriteOamData_Data[3374], + /* 271 */ &spriteOamData_Data[3378], + /* 272 */ NULL, + /* 273 */ NULL, + /* 274 */ NULL, + /* 275 */ NULL, + /* 276 */ NULL, + /* 277 */ NULL, + /* 278 */ NULL, + /* 279 */ NULL, + /* 280 */ &spriteOamData_Data[3392], + /* 281 */ &spriteOamData_Data[3408], + /* 282 */ &spriteOamData_Data[3422], + /* 283 */ NULL, + /* 284 */ &spriteOamData_Data[3436], + /* 285 */ &spriteOamData_Data[3440], + /* 286 */ &spriteOamData_Data[3443], + /* 287 */ &spriteOamData_Data[3449], + /* 288 */ &spriteOamData_Data[3461], + /* 289 */ NULL, + /* 290 */ NULL, + /* 291 */ NULL, + /* 292 */ &spriteOamData_Data[3473], + /* 293 */ NULL, + /* 294 */ NULL, + /* 295 */ &spriteOamData_Data[3492], + /* 296 */ &spriteOamData_Data[3496], + /* 297 */ &spriteOamData_Data[3500], + /* 298 */ &spriteOamData_Data[3501], + /* 299 */ &spriteOamData_Data[3523], + /* 300 */ &spriteOamData_Data[3579], + /* 301 */ &spriteOamData_Data[3597], + /* 302 */ &spriteOamData_Data[3602], + /* 303 */ &spriteOamData_Data[3613], + /* 304 */ &spriteOamData_Data[3619], + /* 305 */ &spriteOamData_Data[3623], + /* 306 */ &spriteOamData_Data[3629], + /* 307 */ &spriteOamData_Data[3635], + /* 308 */ &spriteOamData_Data[3642], + /* 309 */ &spriteOamData_Data[3675], + /* 310 */ &spriteOamData_Data[3696], + /* 311 */ &spriteOamData_Data[3709], + /* 312 */ &spriteOamData_Data[3723], + /* 313 */ NULL, + /* 314 */ NULL, + /* 315 */ &spriteOamData_Data[3759], + /* 316 */ &spriteOamData_Data[3629], + /* 317 */ &spriteOamData_Data[3765], + /* 318 */ NULL, + /* 319 */ &spriteOamData_Data[3771], + /* 320 */ &spriteOamData_Data[3785], + /* 321 */ &spriteOamData_Data[3805], + /* 322 */ &spriteOamData_Data[3873], + /* 323 */ &spriteOamData_Data[3892], + /* 324 */ &spriteOamData_Data[3900], + /* 325 */ &spriteOamData_Data[3938], + /* 326 */ &spriteOamData_Data[3956], + /* 327 */ &spriteOamData_Data[3972], + /* 328 */ &spriteOamData_Data[3975], + /* 329 */ &spriteOamData_Data[3986], + /* 330 */ &spriteOamData_Data[4000], + /* 331 */ &spriteOamData_Data[4007], + /* 332 */ &spriteOamData_Data[4013], + /* 333 */ &spriteOamData_Data[4021], + /* 334 */ &spriteOamData_Data[4065], + /* 335 */ &spriteOamData_Data[4105], + /* 336 */ &spriteOamData_Data[4117], + /* 337 */ &spriteOamData_Data[4127], + /* 338 */ &spriteOamData_Data[4131], + /* 339 */ &spriteOamData_Data[4163], + /* 340 */ &spriteOamData_Data[4175], + /* 341 */ &spriteOamData_Data[4194], + /* 342 */ &spriteOamData_Data[4200], + /* 343 */ &spriteOamData_Data[4216], + /* 344 */ NULL, + /* 345 */ NULL, + /* 346 */ NULL, + /* 347 */ NULL, + /* 348 */ &spriteOamData_Data[4248], + /* 349 */ NULL, + /* 350 */ NULL, + /* 351 */ NULL, + /* 352 */ NULL, + /* 353 */ &spriteOamData_Data[4301], + /* 354 */ NULL, + /* 355 */ NULL, + /* 356 */ NULL, + /* 357 */ NULL, + /* 358 */ NULL, + /* 359 */ NULL, + /* 360 */ NULL, + /* 361 */ NULL, + /* 362 */ NULL, + /* 363 */ NULL, + /* 364 */ NULL, + /* 365 */ NULL, + /* 366 */ NULL, + /* 367 */ NULL, + /* 368 */ NULL, + /* 369 */ NULL, + /* 370 */ NULL, + /* 371 */ NULL, + /* 372 */ NULL, + /* 373 */ &spriteOamData_Data[4371], + /* 374 */ &spriteOamData_Data[4424], + /* 375 */ &spriteOamData_Data[4440], + /* 376 */ &spriteOamData_Data[4472], + /* 377 */ &spriteOamData_Data[4519], + /* 378 */ &spriteOamData_Data[3629], + /* 379 */ &spriteOamData_Data[4554], + /* 380 */ &spriteOamData_Data[4560], + /* 381 */ &spriteOamData_Data[4568], + /* 382 */ NULL, + /* 383 */ &spriteOamData_Data[4578], + /* 384 */ &spriteOamData_Data[4586], + /* 385 */ &spriteOamData_Data[4589], + /* 386 */ &spriteOamData_Data[4597], + /* 387 */ &spriteOamData_Data[4609], + /* 388 */ NULL, + /* 389 */ NULL, + /* 390 */ NULL, + /* 391 */ &spriteOamData_Data[4617], + /* 392 */ &spriteOamData_Data[4628], + /* 393 */ &spriteOamData_Data[4632], + /* 394 */ &spriteOamData_Data[4637], + /* 395 */ NULL, + /* 396 */ &spriteOamData_Data[4647], + /* 397 */ &spriteOamData_Data[4648], + /* 398 */ &spriteOamData_Data[4654], + /* 399 */ &spriteOamData_Data[4686], + /* 400 */ &spriteOamData_Data[4703], + /* 401 */ &spriteOamData_Data[4724], + /* 402 */ &spriteOamData_Data[4736], + /* 403 */ &spriteOamData_Data[4741], + /* 404 */ &spriteOamData_Data[4751], + /* 405 */ &spriteOamData_Data[4767], + /* 406 */ &spriteOamData_Data[4779], + /* 407 */ &spriteOamData_Data[4788], + /* 408 */ &spriteOamData_Data[4792], + /* 409 */ &spriteOamData_Data[4793], + /* 410 */ &spriteOamData_Data[4794], + /* 411 */ &spriteOamData_Data[4796], + /* 412 */ &spriteOamData_Data[4800], + /* 413 */ &spriteOamData_Data[4806], + /* 414 */ &spriteOamData_Data[4813], + /* 415 */ &spriteOamData_Data[4815], + /* 416 */ &spriteOamData_Data[4821], + /* 417 */ &spriteOamData_Data[4829], + /* 418 */ &spriteOamData_Data[4849], + /* 419 */ &spriteOamData_Data[4863], + /* 420 */ &spriteOamData_Data[4865], + /* 421 */ &spriteOamData_Data[4866], + /* 422 */ &spriteOamData_Data[4867], + /* 423 */ &spriteOamData_Data[4874], + /* 424 */ &spriteOamData_Data[4881], + /* 425 */ &spriteOamData_Data[4887], + /* 426 */ &spriteOamData_Data[4904], + /* 427 */ &spriteOamData_Data[4912], + /* 428 */ &spriteOamData_Data[4913], + /* 429 */ &spriteOamData_Data[4914], + /* 430 */ &spriteOamData_Data[4916], + /* 431 */ &spriteOamData_Data[4950], + /* 432 */ &spriteOamData_Data[4953], + /* 433 */ &spriteOamData_Data[4960], + /* 434 */ &spriteOamData_Data[4965], + /* 435 */ &spriteOamData_Data[4970], + /* 436 */ &spriteOamData_Data[4972], + /* 437 */ &spriteOamData_Data[4974], + /* 438 */ &spriteOamData_Data[4977], + /* 439 */ &spriteOamData_Data[4980], + /* 440 */ &spriteOamData_Data[4983], + /* 441 */ &spriteOamData_Data[4986], + /* 442 */ &spriteOamData_Data[4989], + /* 443 */ &spriteOamData_Data[4992], + /* 444 */ &spriteOamData_Data[4995], + /* 445 */ &spriteOamData_Data[4998], + /* 446 */ &spriteOamData_Data[5001], + /* 447 */ &spriteOamData_Data[5004], + /* 448 */ &spriteOamData_Data[5007], + /* 449 */ &spriteOamData_Data[5010], + /* 450 */ &spriteOamData_Data[5013], + /* 451 */ &spriteOamData_Data[5016], + /* 452 */ &spriteOamData_Data[5019], + /* 453 */ &spriteOamData_Data[5041], + /* 454 */ &spriteOamData_Data[5061], + /* 455 */ &spriteOamData_Data[5065], + /* 456 */ &spriteOamData_Data[5100], + /* 457 */ &spriteOamData_Data[5101], + /* 458 */ &spriteOamData_Data[5105], + /* 459 */ &spriteOamData_Data[5107], + /* 460 */ &spriteOamData_Data[5108], + /* 461 */ &spriteOamData_Data[5109], + /* 462 */ &spriteOamData_Data[5133], + /* 463 */ &spriteOamData_Data[5135], + /* 464 */ &spriteOamData_Data[5139], + /* 465 */ &spriteOamData_Data[5151], + /* 466 */ &spriteOamData_Data[5160], + /* 467 */ &spriteOamData_Data[5161], + /* 468 */ &spriteOamData_Data[5178], + /* 469 */ &spriteOamData_Data[5184], + /* 470 */ &spriteOamData_Data[5196], + /* 471 */ &spriteOamData_Data[5206], + /* 472 */ &spriteOamData_Data[5221], + /* 473 */ &spriteOamData_Data[5224], + /* 474 */ &spriteOamData_Data[5251], + /* 475 */ &spriteOamData_Data[5259], + /* 476 */ &spriteOamData_Data[5263], + /* 477 */ &spriteOamData_Data[5265], + /* 478 */ &spriteOamData_Data[5267], + /* 479 */ &spriteOamData_Data[5289], + /* 480 */ &spriteOamData_Data[5317], + /* 481 */ &spriteOamData_Data[5345], + /* 482 */ &spriteOamData_Data[5373], + /* 483 */ &spriteOamData_Data[5384], + /* 484 */ &spriteOamData_Data[5389], + /* 485 */ &spriteOamData_Data[5393], + /* 486 */ &spriteOamData_Data[5394], + /* 487 */ &spriteOamData_Data[5404], + /* 488 */ &spriteOamData_Data[5414], + /* 489 */ &spriteOamData_Data[5415], + /* 490 */ &spriteOamData_Data[5416], + /* 491 */ &spriteOamData_Data[5420], + /* 492 */ &spriteOamData_Data[5424], + /* 493 */ &spriteOamData_Data[5464], + /* 494 */ &spriteOamData_Data[5466], + /* 495 */ &spriteOamData_Data[5470], + /* 496 */ &spriteOamData_Data[5474], + /* 497 */ &spriteOamData_Data[5480], + /* 498 */ &spriteOamData_Data[5486], + /* 499 */ &spriteOamData_Data[5500], + /* 500 */ &spriteOamData_Data[5486], + /* 501 */ &spriteOamData_Data[5502], + /* 502 */ &spriteOamData_Data[5510], + /* 503 */ &spriteOamData_Data[5511], + /* 504 */ &spriteOamData_Data[5514], + /* 505 */ &spriteOamData_Data[5517], + /* 506 */ &spriteOamData_Data[5537], + /* 507 */ &spriteOamData_Data[5541], + /* 508 */ &spriteOamData_Data[5543], + /* 509 */ &spriteOamData_Data[5567], + /* 510 */ &spriteOamData_Data[5591], + /* 511 */ &spriteOamData_Data[5595], + /* 512 */ &spriteOamData_Data[5598], + /* 513 */ &spriteOamData_Data[5601], + /* 514 */ &spriteOamData_Data[5602], + /* 515 */ &spriteOamData_Data[5607], + /* 516 */ &spriteOamData_Data[5645], + /* 517 */ &spriteOamData_Data[5673], + /* 518 */ &spriteOamData_Data[5677], + /* 519 */ &spriteOamData_Data[5681], + /* 520 */ &spriteOamData_Data[5683], + /* 521 */ &spriteOamData_Data[5684], + /* 522 */ &spriteOamData_Data[5686], + /* 523 */ &spriteOamData_Data[5691], + /* 524 */ &spriteOamData_Data[5695], + /* 525 */ &spriteOamData_Data[5699], + /* 526 */ &spriteOamData_Data[5703], + /* 527 */ &spriteOamData_Data[5716], + /* 528 */ &spriteOamData_Data[5717], + /* 529 */ &spriteOamData_Data[5721], + /* 530 */ &spriteOamData_Data[5723], + /* 531 */ &spriteOamData_Data[5724], + /* 532 */ &spriteOamData_Data[5725], + /* 533 */ &spriteOamData_Data[5750], + /* 534 */ &spriteOamData_Data[5752], + /* 535 */ &spriteOamData_Data[5754], + /* 536 */ &spriteOamData_Data[5758], + /* 537 */ &spriteOamData_Data[5760], + /* 538 */ &spriteOamData_Data[5762], + /* 539 */ &spriteOamData_Data[5766], + /* 540 */ &spriteOamData_Data[5770], + /* 541 */ &spriteOamData_Data[5783], + /* 542 */ &spriteOamData_Data[5787], + /* 543 */ &spriteOamData_Data[5791], + /* 544 */ &spriteOamData_Data[5793], + /* 545 */ &spriteOamData_Data[5797], + /* 546 */ &spriteOamData_Data[5802], + /* 547 */ &spriteOamData_Data[5812], + /* 548 */ &spriteOamData_Data[5814], + /* 549 */ &spriteOamData_Data[5815], + /* 550 */ &spriteOamData_Data[5816], + /* 551 */ &spriteOamData_Data[5818], + /* 552 */ &spriteOamData_Data[5819], + /* 553 */ &spriteOamData_Data[5831], + /* 554 */ &spriteOamData_Data[5832], + /* 555 */ &spriteOamData_Data[5833], + /* 556 */ &spriteOamData_Data[5837], + /* 557 */ &spriteOamData_Data[5838], + /* 558 */ &spriteOamData_Data[5839], + /* 559 */ &spriteOamData_Data[5855], + /* 560 */ &spriteOamData_Data[5856], + /* 561 */ &spriteOamData_Data[5859], + /* 562 */ &spriteOamData_Data[5862], + /* 563 */ &spriteOamData_Data[5874], + /* 564 */ &spriteOamData_Data[5877], + /* 565 */ &spriteOamData_Data[5885], + /* 566 */ &spriteOamData_Data[5893], + /* 567 */ &spriteOamData_Data[5901], + /* 568 */ &spriteOamData_Data[5921], + /* 569 */ &spriteOamData_Data[5929], + /* 570 */ &spriteOamData_Data[5931], + /* 571 */ &spriteOamData_Data[5937], + /* 572 */ &spriteOamData_Data[5943], + /* 573 */ &spriteOamData_Data[5952], + /* 574 */ &spriteOamData_Data[5955], + /* 575 */ &spriteOamData_Data[5957], + /* 576 */ &spriteOamData_Data[5969], + /* 577 */ &spriteOamData_Data[5971], + /* 578 */ &spriteOamData_Data[5972], + /* 579 */ &spriteOamData_Data[5973], + /* 580 */ &spriteOamData_Data[5974], + /* 581 */ &spriteOamData_Data[5975], + /* 582 */ &spriteOamData_Data[5983], + /* 583 */ &spriteOamData_Data[5996], + /* 584 */ &spriteOamData_Data[5998], + /* 585 */ &spriteOamData_Data[6030], + /* 586 */ &spriteOamData_Data[6062], + /* 587 */ &spriteOamData_Data[6094], + /* 588 */ &spriteOamData_Data[6126], + /* 589 */ &spriteOamData_Data[6174], + /* 590 */ &spriteOamData_Data[6222], + /* 591 */ &spriteOamData_Data[6310], + /* 592 */ &spriteOamData_Data[6398], + /* 593 */ &spriteOamData_Data[6399], + /* 594 */ &spriteOamData_Data[6411], + /* 595 */ &spriteOamData_Data[6412], + /* 596 */ &spriteOamData_Data[6413], + /* 597 */ &spriteOamData_Data[6414], + /* 598 */ &spriteOamData_Data[6418], + /* 599 */ &spriteOamData_Data[6422], + /* 600 */ &spriteOamData_Data[6426], + /* 601 */ &spriteOamData_Data[6428], + /* 602 */ &spriteOamData_Data[6430], + /* 603 */ &spriteOamData_Data[6431], + /* 604 */ &spriteOamData_Data[6455], + /* 605 */ &spriteOamData_Data[6479], + /* 606 */ &spriteOamData_Data[6483], + /* 607 */ &spriteOamData_Data[6484], + /* 608 */ &spriteOamData_Data[6508], + /* 609 */ &spriteOamData_Data[6509], + /* 610 */ &spriteOamData_Data[6510], + /* 611 */ &spriteOamData_Data[6515], + /* 612 */ &spriteOamData_Data[6520], + /* 613 */ &spriteOamData_Data[6525], + /* 614 */ &spriteOamData_Data[6526], + /* 615 */ &spriteOamData_Data[6527], + /* 616 */ &spriteOamData_Data[6528], + /* 617 */ &spriteOamData_Data[6529], + /* 618 */ &spriteOamData_Data[6530], + /* 619 */ &spriteOamData_Data[6535], + /* 620 */ &spriteOamData_Data[6536], + /* 621 */ &spriteOamData_Data[6568], + /* 622 */ &spriteOamData_Data[6572], + /* 623 */ &spriteOamData_Data[6577], + /* 624 */ &spriteOamData_Data[6578], + /* 625 */ &spriteOamData_Data[6594], + /* 626 */ &spriteOamData_Data[6602], + /* 627 */ &spriteOamData_Data[6605], + /* 628 */ &spriteOamData_Data[6608], + /* 629 */ &spriteOamData_Data[6614], + /* 630 */ &spriteOamData_Data[6618], + /* 631 */ &spriteOamData_Data[6620], + /* 632 */ &spriteOamData_Data[6637], + /* 633 */ &spriteOamData_Data[6648], + /* 634 */ &spriteOamData_Data[6652], + /* 635 */ &spriteOamData_Data[6666], + /* 636 */ &spriteOamData_Data[6681], + /* 637 */ &spriteOamData_Data[6685], + /* 638 */ &spriteOamData_Data[6693], + /* 639 */ &spriteOamData_Data[6697], + /* 640 */ &spriteOamData_Data[6705], + /* 641 */ &spriteOamData_Data[6738], + /* 642 */ &spriteOamData_Data[6746], + /* 643 */ &spriteOamData_Data[6751], + /* 644 */ &spriteOamData_Data[6783], + /* 645 */ &spriteOamData_Data[6801], + /* 646 */ &spriteOamData_Data[6805], + /* 647 */ &spriteOamData_Data[6819], + /* 648 */ &spriteOamData_Data[6834], + /* 649 */ &spriteOamData_Data[6838], + /* 650 */ &spriteOamData_Data[6846], + /* 651 */ &spriteOamData_Data[6850], + /* 652 */ &spriteOamData_Data[6858], + /* 653 */ &spriteOamData_Data[6891], + /* 654 */ &spriteOamData_Data[6899], + /* 655 */ &spriteOamData_Data[6904], + /* 656 */ &spriteOamData_Data[6924], + /* 657 */ &spriteOamData_Data[6926], + /* 658 */ &spriteOamData_Data[6938], + /* 659 */ &spriteOamData_Data[6944], + /* 660 */ &spriteOamData_Data[6945], + /* 661 */ &spriteOamData_Data[6955], + /* 662 */ &spriteOamData_Data[6956], + /* 663 */ &spriteOamData_Data[6965], + /* 664 */ &spriteOamData_Data[6969], + /* 665 */ &spriteOamData_Data[6971], + /* 666 */ &spriteOamData_Data[6973], + /* 667 */ &spriteOamData_Data[6979], + /* 668 */ &spriteOamData_Data[6984], + /* 669 */ &spriteOamData_Data[6988], + /* 670 */ &spriteOamData_Data[6992], + /* 671 */ &spriteOamData_Data[7004], + /* 672 */ &spriteOamData_Data[7005], + /* 673 */ &spriteOamData_Data[7018], + /* 674 */ &spriteOamData_Data[7020], + /* 675 */ &spriteOamData_Data[7021], + /* 676 */ &spriteOamData_Data[7023], + /* 677 */ &spriteOamData_Data[7024], + /* 678 */ &spriteOamData_Data[7025], + /* 679 */ &spriteOamData_Data[7026], + /* 680 */ &spriteOamData_Data[7028], + /* 681 */ &spriteOamData_Data[7033], + /* 682 */ &spriteOamData_Data[7041], + /* 683 */ &spriteOamData_Data[7046], + /* 684 */ &spriteOamData_Data[7051], + /* 685 */ &spriteOamData_Data[7055], + /* 686 */ &spriteOamData_Data[7057], + /* 687 */ &spriteOamData_Data[7062], + /* 688 */ &spriteOamData_Data[7074], + /* 689 */ &spriteOamData_Data[7128], + /* 690 */ &spriteOamData_Data[7132], + /* 691 */ &spriteOamData_Data[7134], + /* 692 */ &spriteOamData_Data[7143], + /* 693 */ &spriteOamData_Data[7144], + /* 694 */ &spriteOamData_Data[7160], + /* 695 */ &spriteOamData_Data[7188], + /* 696 */ &spriteOamData_Data[7190], + /* 697 */ &spriteOamData_Data[7193], + /* 698 */ &spriteOamData_Data[7195], + /* 699 */ &spriteOamData_Data[7200], + /* 700 */ &spriteOamData_Data[7208], + /* 701 */ &spriteOamData_Data[7209], + /* 702 */ &spriteOamData_Data[7211], + /* 703 */ &spriteOamData_Data[7216], + /* 704 */ &spriteOamData_Data[7222], + /* 705 */ &spriteOamData_Data[7232], + /* 706 */ &spriteOamData_Data[7233], + /* 707 */ &spriteOamData_Data[7250], + /* 708 */ &spriteOamData_Data[7254], + /* 709 */ &spriteOamData_Data[7258], + /* 710 */ &spriteOamData_Data[7263], + /* 711 */ &spriteOamData_Data[7273], + /* 712 */ &spriteOamData_Data[7275], + /* 713 */ &spriteOamData_Data[7276], + /* 714 */ &spriteOamData_Data[7280], + /* 715 */ &spriteOamData_Data[7282], + /* 716 */ &spriteOamData_Data[7289], + /* 717 */ &spriteOamData_Data[7295], + /* 718 */ &spriteOamData_Data[7316], + /* 719 */ &spriteOamData_Data[7319], + /* 720 */ &spriteOamData_Data[7323], + /* 721 */ &spriteOamData_Data[7325], + /* 722 */ &spriteOamData_Data[7327], + /* 723 */ &spriteOamData_Data[7451], + /* 724 */ &spriteOamData_Data[7519], + /* 725 */ &spriteOamData_Data[7597], + /* 726 */ &spriteOamData_Data[7601], + /* 727 */ &spriteOamData_Data[7605], + /* 728 */ &spriteOamData_Data[7609], + /* 729 */ &spriteOamData_Data[7613], + /* 730 */ &spriteOamData_Data[7617], + /* 731 */ &spriteOamData_Data[7618], + /* 732 */ &spriteOamData_Data[7622], + /* 733 */ &spriteOamData_Data[7626], + /* 734 */ &spriteOamData_Data[7634], + /* 735 */ &spriteOamData_Data[7642], + /* 736 */ &spriteOamData_Data[7644], + /* 737 */ &spriteOamData_Data[7656], + /* 738 */ &spriteOamData_Data[7672], + /* 739 */ &spriteOamData_Data[7718], + /* 740 */ &spriteOamData_Data[7723], + /* 741 */ &spriteOamData_Data[7744], + /* 742 */ &spriteOamData_Data[7768], + /* 743 */ &spriteOamData_Data[7772], + /* 744 */ &spriteOamData_Data[7776], + /* 745 */ &spriteOamData_Data[7780], + /* 746 */ &spriteOamData_Data[7790], + /* 747 */ &spriteOamData_Data[7804], + /* 748 */ &spriteOamData_Data[7811], + /* 749 */ &spriteOamData_Data[7819], + /* 750 */ &spriteOamData_Data[7832], + /* 751 */ &spriteOamData_Data[7856], + /* 752 */ &spriteOamData_Data[7888], + /* 753 */ &spriteOamData_Data[7938], + /* 754 */ &spriteOamData_Data[7942], + /* 755 */ &spriteOamData_Data[7946], + /* 756 */ &spriteOamData_Data[7956], + /* 757 */ &spriteOamData_Data[7963], + /* 758 */ &spriteOamData_Data[7970], + /* 759 */ &spriteOamData_Data[7975], + /* 760 */ &spriteOamData_Data[7980], + /* 761 */ &spriteOamData_Data[7985], + /* 762 */ &spriteOamData_Data[7990], + /* 763 */ &spriteOamData_Data[8003], + /* 764 */ &spriteOamData_Data[8011], + /* 765 */ &spriteOamData_Data[8017], + /* 766 */ &spriteOamData_Data[8028], + /* 767 */ &spriteOamData_Data[8040], + /* 768 */ &spriteOamData_Data[8048], + /* 769 */ &spriteOamData_Data[8099], + /* 770 */ &spriteOamData_Data[8117], + /* 771 */ &spriteOamData_Data[8130], + /* 772 */ &spriteOamData_Data[8142], + /* 773 */ &spriteOamData_Data[8158], + /* 774 */ &spriteOamData_Data[8169], + /* 775 */ &spriteOamData_Data[8185], + /* 776 */ &spriteOamData_Data[8196], + /* 777 */ &spriteOamData_Data[8201], + /* 778 */ &spriteOamData_Data[8213], + /* 779 */ &spriteOamData_Data[8234], + /* 780 */ &spriteOamData_Data[8255], + /* 781 */ &spriteOamData_Data[8287], + /* 782 */ &spriteOamData_Data[8293], + /* 783 */ &spriteOamData_Data[8297], + /* 784 */ &spriteOamData_Data[8301], + /* 785 */ &spriteOamData_Data[8305], + /* 786 */ &spriteOamData_Data[8337], + /* 787 */ &spriteOamData_Data[8340], + /* 788 */ &spriteOamData_Data[8347], + /* 789 */ &spriteOamData_Data[8350], + /* 790 */ &spriteOamData_Data[8353], + /* 791 */ &spriteOamData_Data[8355], + /* 792 */ &spriteOamData_Data[8361], + /* 793 */ &spriteOamData_Data[8367], + /* 794 */ &spriteOamData_Data[8373], + /* 795 */ &spriteOamData_Data[8380], + /* 796 */ &spriteOamData_Data[8384], + /* 797 */ &spriteOamData_Data[8388], + /* 798 */ &spriteOamData_Data[8395], + /* 799 */ &spriteOamData_Data[8401], + /* 800 */ &spriteOamData_Data[8425], + /* 801 */ &spriteOamData_Data[8435], + /* 802 */ &spriteOamData_Data[8437], + /* 803 */ &spriteOamData_Data[7644], + /* 804 */ &spriteOamData_Data[7642], + /* 805 */ &spriteOamData_Data[8442], + /* 806 */ &spriteOamData_Data[8458], + /* 807 */ &spriteOamData_Data[8464], + /* 808 */ &spriteOamData_Data[8482], + /* 809 */ &spriteOamData_Data[8520], + /* 810 */ &spriteOamData_Data[8526], + /* 811 */ &spriteOamData_Data[8530], + /* 812 */ &spriteOamData_Data[8533], + /* 813 */ &spriteOamData_Data[8547], + /* 814 */ &spriteOamData_Data[8557], + /* 815 */ &spriteOamData_Data[8557], + /* 816 */ &spriteOamData_Data[8557], + /* 817 */ &spriteOamData_Data[8558], + /* 818 */ &spriteOamData_Data[8559], + /* 819 */ &spriteOamData_Data[8560], + /* 820 */ &spriteOamData_Data[8561], + /* 821 */ &spriteOamData_Data[8562], + /* 822 */ &spriteOamData_Data[8562], + /* 823 */ &spriteOamData_Data[8562], + /* 824 */ &spriteOamData_Data[8562], + /* 825 */ &spriteOamData_Data[8562], + /* 826 */ &spriteOamData_Data[8562], + /* 827 */ &spriteOamData_Data[8562], + /* 828 */ &spriteOamData_Data[8562], + /* 829 */ &spriteOamData_Data[8562], + /* 830 */ &spriteOamData_Data[8562], + /* 831 */ &spriteOamData_Data[8562], + /* 832 */ &spriteOamData_Data[8562], + /* 833 */ &spriteOamData_Data[8562], + /* 834 */ &spriteOamData_Data[8562], + /* 835 */ &spriteOamData_Data[8562], + /* 836 */ &spriteOamData_Data[8562], + /* 837 */ &spriteOamData_Data[8562], + /* 838 */ &spriteOamData_Data[8562], + /* 839 */ &spriteOamData_Data[8562], + /* 840 */ &spriteOamData_Data[8562], + /* 841 */ &spriteOamData_Data[8562], + /* 842 */ &spriteOamData_Data[8562], + /* 843 */ &spriteOamData_Data[8562], + /* 844 */ &spriteOamData_Data[8562], + /* 845 */ &spriteOamData_Data[8562], + /* 846 */ &spriteOamData_Data[8562], + /* 847 */ &spriteOamData_Data[8562], + /* 848 */ &spriteOamData_Data[8562], + /* 849 */ &spriteOamData_Data[8562], + /* 850 */ &spriteOamData_Data[8562], + /* 851 */ &spriteOamData_Data[8562], + /* 852 */ &spriteOamData_Data[8562], + /* 853 */ &spriteOamData_Data[8562], + /* 854 */ &spriteOamData_Data[8610], + /* 855 */ &spriteOamData_Data[8694], + /* 856 */ &spriteOamData_Data[8760], + /* 857 */ &spriteOamData_Data[8771], + /* 858 */ &spriteOamData_Data[8772], + /* 859 */ &spriteOamData_Data[8784], + /* 860 */ &spriteOamData_Data[8785], + /* 861 */ &spriteOamData_Data[8787], + /* 862 */ &spriteOamData_Data[8799], + /* 863 */ &spriteOamData_Data[8811], + /* 864 */ &spriteOamData_Data[8847], + /* 865 */ &spriteOamData_Data[8865], + /* 866 */ &spriteOamData_Data[8870], + /* 867 */ &spriteOamData_Data[8903], + /* 868 */ &spriteOamData_Data[8905], + /* 869 */ &spriteOamData_Data[8910], + /* 870 */ &spriteOamData_Data[8917], + /* 871 */ &spriteOamData_Data[8920], + /* 872 */ &spriteOamData_Data[8924], + /* 873 */ &spriteOamData_Data[8925], + /* 874 */ &spriteOamData_Data[8928], + /* 875 */ &spriteOamData_Data[8930], + /* 876 */ &spriteOamData_Data[8932], + /* 877 */ &spriteOamData_Data[8933], + /* 878 */ &spriteOamData_Data[8949], + /* 879 */ &spriteOamData_Data[8956], + /* 880 */ &spriteOamData_Data[8988], + /* 881 */ &spriteOamData_Data[9044], + /* 882 */ &spriteOamData_Data[9078], + /* 883 */ &spriteOamData_Data[9082], + /* 884 */ &spriteOamData_Data[9132], + /* 885 */ &spriteOamData_Data[9142], + /* 886 */ &spriteOamData_Data[9172], + /* 887 */ &spriteOamData_Data[9178], + /* 888 */ &spriteOamData_Data[9257], + /* 889 */ &spriteOamData_Data[9329], + /* 890 */ &spriteOamData_Data[9335], + /* 891 */ &spriteOamData_Data[9338], + /* 892 */ &spriteOamData_Data[9358], + /* 893 */ &spriteOamData_Data[9374], + /* 894 */ &spriteOamData_Data[9381], + /* 895 */ &spriteOamData_Data[9405], + /* 896 */ &spriteOamData_Data[9410], + /* 897 */ &spriteOamData_Data[9428], + /* 898 */ &spriteOamData_Data[9439], + /* 899 */ &spriteOamData_Data[9447], + /* 900 */ &spriteOamData_Data[9477], + /* 901 */ &spriteOamData_Data[9484], + /* 902 */ &spriteOamData_Data[9494], + /* 903 */ &spriteOamData_Data[9517], + /* 904 */ &spriteOamData_Data[9531], + /* 905 */ &spriteOamData_Data[9540], + /* 906 */ &spriteOamData_Data[9544], + /* 907 */ &spriteOamData_Data[9545], +}; diff --git a/sa1/src/data/obj_palettes.c b/sa1/src/data/obj_palettes.c new file mode 100644 index 0000000000..e38b78a4ac --- /dev/null +++ b/sa1/src/data/obj_palettes.c @@ -0,0 +1,469 @@ +#include "global.h" + +// 0x0811E574 +const u16 gSpritePalettes[][16] = { + INCBIN_U16("graphics/obj_palettes/pal_000.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_001.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_002.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_003.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_004.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_005.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_006.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_007.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_008.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_009.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_010.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_011.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_012.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_013.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_014.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_015.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_016.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_017.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_018.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_019.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_020.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_021.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_022.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_023.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_024.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_025.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_026.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_027.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_028.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_029.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_030.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_031.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_032.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_033.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_034.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_035.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_036.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_037.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_038.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_039.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_040.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_041.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_042.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_043.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_044.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_045.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_046.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_047.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_048.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_049.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_050.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_051.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_052.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_053.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_054.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_055.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_056.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_057.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_058.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_059.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_060.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_061.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_062.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_063.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_064.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_065.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_066.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_067.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_068.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_069.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_070.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_071.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_072.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_073.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_074.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_075.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_076.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_077.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_078.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_079.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_080.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_081.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_082.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_083.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_084.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_085.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_086.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_087.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_088.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_089.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_090.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_091.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_092.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_093.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_094.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_095.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_096.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_097.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_098.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_099.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_100.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_101.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_102.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_103.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_104.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_105.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_106.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_107.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_108.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_109.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_110.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_111.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_112.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_113.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_114.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_115.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_116.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_117.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_118.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_119.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_120.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_121.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_122.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_123.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_124.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_125.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_126.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_127.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_128.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_129.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_130.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_131.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_132.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_133.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_134.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_135.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_136.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_137.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_138.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_139.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_140.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_141.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_142.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_143.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_144.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_145.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_146.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_147.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_148.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_149.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_150.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_151.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_152.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_153.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_154.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_155.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_156.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_157.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_158.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_159.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_160.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_161.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_162.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_163.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_164.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_165.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_166.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_167.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_168.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_169.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_170.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_171.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_172.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_173.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_174.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_175.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_176.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_177.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_178.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_179.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_180.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_181.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_182.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_183.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_184.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_185.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_186.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_187.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_188.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_189.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_190.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_191.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_192.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_193.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_194.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_195.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_196.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_197.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_198.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_199.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_200.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_201.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_202.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_203.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_204.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_205.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_206.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_207.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_208.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_209.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_210.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_211.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_212.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_213.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_214.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_215.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_216.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_217.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_218.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_219.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_220.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_221.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_222.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_223.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_224.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_225.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_226.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_227.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_228.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_229.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_230.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_231.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_232.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_233.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_234.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_235.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_236.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_237.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_238.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_239.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_240.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_241.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_242.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_243.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_244.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_245.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_246.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_247.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_248.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_249.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_250.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_251.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_252.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_253.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_254.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_255.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_256.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_257.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_258.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_259.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_260.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_261.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_262.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_263.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_264.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_265.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_266.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_267.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_268.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_269.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_270.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_271.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_272.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_273.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_274.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_275.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_276.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_277.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_278.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_279.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_280.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_281.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_282.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_283.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_284.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_285.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_286.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_287.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_288.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_289.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_290.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_291.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_292.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_293.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_294.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_295.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_296.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_297.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_298.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_299.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_300.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_301.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_302.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_303.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_304.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_305.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_306.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_307.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_308.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_309.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_310.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_311.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_312.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_313.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_314.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_315.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_316.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_317.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_318.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_319.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_320.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_321.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_322.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_323.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_324.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_325.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_326.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_327.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_328.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_329.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_330.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_331.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_332.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_333.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_334.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_335.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_336.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_337.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_338.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_339.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_340.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_341.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_342.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_343.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_344.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_345.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_346.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_347.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_348.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_349.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_350.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_351.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_352.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_353.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_354.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_355.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_356.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_357.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_358.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_359.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_360.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_361.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_362.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_363.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_364.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_365.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_366.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_367.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_368.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_369.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_370.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_371.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_372.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_373.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_374.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_375.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_376.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_377.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_378.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_379.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_380.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_381.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_382.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_383.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_384.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_385.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_386.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_387.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_388.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_389.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_390.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_391.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_392.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_393.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_394.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_395.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_396.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_397.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_398.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_399.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_400.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_401.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_402.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_403.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_404.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_405.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_406.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_407.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_408.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_409.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_410.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_411.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_412.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_413.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_414.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_415.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_416.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_417.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_418.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_419.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_420.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_421.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_422.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_423.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_424.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_425.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_426.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_427.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_428.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_429.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_430.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_431.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_432.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_433.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_434.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_435.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_436.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_437.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_438.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_439.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_440.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_441.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_442.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_443.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_444.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_445.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_446.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_447.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_448.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_449.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_450.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_451.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_452.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_453.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_454.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_455.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_456.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_457.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_458.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_459.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_460.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_461.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_462.gbapal"), + INCBIN_U16("graphics/obj_palettes/pal_463.gbapal"), +}; \ No newline at end of file diff --git a/sa1/src/data/sprite_dimensions.c b/sa1/src/data/sprite_dimensions.c new file mode 100644 index 0000000000..9f33cd1690 --- /dev/null +++ b/sa1/src/data/sprite_dimensions.c @@ -0,0 +1,39766 @@ +#include "data/sprite_data.h" + +// 0 - 0x08102DAC +static const SpriteOffset spriteDim_8102DAC[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 1 - 0x08102E48 +static const SpriteOffset spriteDim_8102E48[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 2 - 0x08102F20 +static const SpriteOffset spriteDim_8102F20[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 3 - 0x08102F5C +static const SpriteOffset spriteDim_8102F5C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 4 - 0x08102F8C +static const SpriteOffset spriteDim_8102F8C[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, +}; + +// 5 - 0x08102FEC +static const SpriteOffset spriteDim_8102FEC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, +}; + +// 6 - 0x0810301C +static const SpriteOffset spriteDim_810301C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 7 - 0x08103034 +static const SpriteOffset spriteDim_8103034[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 8 - 0x08103064 +static const SpriteOffset spriteDim_8103064[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 9 - 0x08103094 +static const SpriteOffset spriteDim_8103094[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 10 - 0x081030B8 +static const SpriteOffset spriteDim_81030B8[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 4, + }, +}; + +// 11 - 0x0810316C +static const SpriteOffset spriteDim_810316C[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 12 - 0x081031F0 +static const SpriteOffset spriteDim_81031F0[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 16, + }, +}; + +// 13 - 0x0810325C +static const SpriteOffset spriteDim_810325C[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 23, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 23, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 14 - 0x081032D4 +static const SpriteOffset spriteDim_81032D4[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 17 - 0x0810334C +static const SpriteOffset spriteDim_810334C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 18 - 0x08103364 +static const SpriteOffset spriteDim_8103364[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 19 - 0x081033C4 +static const SpriteOffset spriteDim_81033C4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 21 - 0x08103400 +static const SpriteOffset spriteDim_8103400[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, +}; + +// 22 - 0x0810343C +static const SpriteOffset spriteDim_810343C[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 23 - 0x081034F0 +static const SpriteOffset spriteDim_81034F0[17] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 24 - 0x081035BC +static const SpriteOffset spriteDim_81035BC[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 25 - 0x08103604 +static const SpriteOffset spriteDim_8103604[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 26 - 0x08103634 +static const SpriteOffset spriteDim_8103634[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 32, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, +}; + +// 27 - 0x081036A0 +static const SpriteOffset spriteDim_81036A0[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 28 - 0x08103778 +static const SpriteOffset spriteDim_8103778[16] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 29 - 0x08103838 +static const SpriteOffset spriteDim_8103838[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 30 - 0x0810385C +static const SpriteOffset spriteDim_810385C[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 31 - 0x081038E0 +static const SpriteOffset spriteDim_81038E0[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 32 - 0x08103988 +static const SpriteOffset spriteDim_8103988[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 33 - 0x081039DC +static const SpriteOffset spriteDim_81039DC[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 34 - 0x08103A00 +static const SpriteOffset spriteDim_8103A00[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 35 - 0x08103A60 +static const SpriteOffset spriteDim_8103A60[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, +}; + +// 36 - 0x08103AD8 +static const SpriteOffset spriteDim_8103AD8[24] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 37 - 0x08103BF8 +static const SpriteOffset spriteDim_8103BF8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 38 - 0x08103C58 +static const SpriteOffset spriteDim_8103C58[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 21, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 21, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 21, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 13, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 28, + }, +}; + +// 39 - 0x08103C94 +static const SpriteOffset spriteDim_8103C94[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 40 - 0x08103CC4 +static const SpriteOffset spriteDim_8103CC4[20] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 36, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 20, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 4, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 4, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 4, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 20, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 36, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 47, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 41 - 0x08103DB4 +static const SpriteOffset spriteDim_8103DB4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, +}; + +// 42 - 0x08103DF0 +static const SpriteOffset spriteDim_8103DF0[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 43 - 0x08103E50 +static const SpriteOffset spriteDim_8103E50[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 44 - 0x08103E74 +static const SpriteOffset spriteDim_8103E74[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, +}; + +// 45 - 0x08103EA4 +static const SpriteOffset spriteDim_8103EA4[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 49 - 0x08103F4C +static const SpriteOffset spriteDim_8103F4C[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, +}; + +// 50 - 0x08103FC4 +static const SpriteOffset spriteDim_8103FC4[20] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 0, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 51 - 0x081040B4 +static const SpriteOffset spriteDim_81040B4[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 52 - 0x081040E4 +static const SpriteOffset spriteDim_81040E4[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 53 - 0x08104168 +static const SpriteOffset spriteDim_8104168[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 55 - 0x081041B0 +static const SpriteOffset spriteDim_81041B0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 81 - 0x081041E0 +static const SpriteOffset spriteDim_81041E0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 82 - 0x08104210 +static const SpriteOffset spriteDim_8104210[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 83 - 0x08104240 +static const SpriteOffset spriteDim_8104240[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 84 - 0x08104270 +static const SpriteOffset spriteDim_8104270[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 85 - 0x081042A0 +static const SpriteOffset spriteDim_81042A0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 86 - 0x081042B8 +static const SpriteOffset spriteDim_81042B8[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 87 - 0x081042DC +static const SpriteOffset spriteDim_81042DC[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 88 - 0x081042F4 +static const SpriteOffset spriteDim_81042F4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 89 - 0x08104330 +static const SpriteOffset spriteDim_8104330[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 91 - 0x0810436C +static const SpriteOffset spriteDim_810436C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 32, + }, +}; + +// 93 - 0x08104384 +static const SpriteOffset spriteDim_8104384[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 96 - 0x081043E4 +static const SpriteOffset spriteDim_81043E4[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 97 - 0x08104414 +static const SpriteOffset spriteDim_8104414[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 98 - 0x08104438 +static const SpriteOffset spriteDim_8104438[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 36, + }, +}; + +// 99 - 0x08104444 +static const SpriteOffset spriteDim_8104444[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 100 - 0x081044C8 +static const SpriteOffset spriteDim_81044C8[25] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 52, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 58, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 101 - 0x081045F4 +static const SpriteOffset spriteDim_81045F4[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 102 - 0x0810463C +static const SpriteOffset spriteDim_810463C[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 103 - 0x081046D8 +static const SpriteOffset spriteDim_81046D8[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, +}; + +// 104 - 0x0810475C +static const SpriteOffset spriteDim_810475C[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 24, + .offsetY = 48, + }, +}; + +// 105 - 0x081047E0 +static const SpriteOffset spriteDim_81047E0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 106 - 0x081047F8 +static const SpriteOffset spriteDim_81047F8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 107 - 0x08104828 +static const SpriteOffset spriteDim_8104828[12] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = -4, + }, +}; + +// 108 - 0x081048B8 +static const SpriteOffset spriteDim_81048B8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 109 - 0x081048E8 +static const SpriteOffset spriteDim_81048E8[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = -8, + .offsetY = -32, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = -8, + .offsetY = -32, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = -8, + .offsetY = -40, + }, +}; + +// 110 - 0x0810499C +static const SpriteOffset spriteDim_810499C[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 111 - 0x08104A20 +static const SpriteOffset spriteDim_8104A20[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, +}; + +// 112 - 0x08104A8C +static const SpriteOffset spriteDim_8104A8C[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 13, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 21, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 21, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 21, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 113 - 0x08104B04 +static const SpriteOffset spriteDim_8104B04[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 15, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 23, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 116 - 0x08104B70 +static const SpriteOffset spriteDim_8104B70[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 117 - 0x08104B88 +static const SpriteOffset spriteDim_8104B88[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 118 - 0x08104BE8 +static const SpriteOffset spriteDim_8104BE8[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 10, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, +}; + +// 120 - 0x08104C24 +static const SpriteOffset spriteDim_8104C24[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 18, + .offsetY = 16, + }, +}; + +// 121 - 0x08104C60 +static const SpriteOffset spriteDim_8104C60[12] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 122 - 0x08104CF0 +static const SpriteOffset spriteDim_8104CF0[28] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 14, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 22, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 30, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 22, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 17, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 20, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 41, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 12, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 12, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 61, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 65, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 69, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 75, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, +}; + +// 123 - 0x08104E40 +static const SpriteOffset spriteDim_8104E40[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 124 - 0x08104EDC +static const SpriteOffset spriteDim_8104EDC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 24, + .height = 64, + .offsetX = 8, + .offsetY = 28, + }, +}; + +// 125 - 0x08104F0C +static const SpriteOffset spriteDim_8104F0C[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 5, + .width = 56, + .height = 64, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 5, + .width = 56, + .height = 64, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 42, + .numSubframes = 5, + .width = 56, + .height = 64, + .offsetX = 24, + .offsetY = 38, + }, +}; + +// 126 - 0x08104F78 +static const SpriteOffset spriteDim_8104F78[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 127 - 0x08105050 +static const SpriteOffset spriteDim_8105050[16] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 128 - 0x08105110 +static const SpriteOffset spriteDim_8105110[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 129 - 0x08105134 +static const SpriteOffset spriteDim_8105134[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 130 - 0x081051B8 +static const SpriteOffset spriteDim_81051B8[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 131 - 0x08105224 +static const SpriteOffset spriteDim_8105224[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 132 - 0x08105284 +static const SpriteOffset spriteDim_8105284[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 133 - 0x081052FC +static const SpriteOffset spriteDim_81052FC[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 134 - 0x0810535C +static const SpriteOffset spriteDim_810535C[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 42, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, +}; + +// 135 - 0x08105434 +static const SpriteOffset spriteDim_8105434[24] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 51, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 59, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 65, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 69, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 73, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 77, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 83, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 87, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 91, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 97, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 98, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 136 - 0x08105554 +static const SpriteOffset spriteDim_8105554[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 137 - 0x081055B4 +static const SpriteOffset spriteDim_81055B4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 138 - 0x081055F0 +static const SpriteOffset spriteDim_81055F0[12] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 10, + }, +}; + +// 139 - 0x08105680 +static const SpriteOffset spriteDim_8105680[20] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 44, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 34, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 19, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 10, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 4, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 19, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 35, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 15, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 17, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 33, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 15, + .offsetY = 16, + }, +}; + +// 140 - 0x08105770 +static const SpriteOffset spriteDim_8105770[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 141 - 0x081057B8 +static const SpriteOffset spriteDim_81057B8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 30, + }, +}; + +// 142 - 0x08105818 +static const SpriteOffset spriteDim_8105818[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 17, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 17, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 17, + .offsetY = 24, + }, +}; + +// 145 - 0x0810583C +static const SpriteOffset spriteDim_810583C[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 146 - 0x081058A8 +static const SpriteOffset spriteDim_81058A8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 147 - 0x081058C0 +static const SpriteOffset spriteDim_81058C0[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 24, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 24, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 24, + .offsetY = 18, + }, +}; + +// 149 - 0x0810592C +static const SpriteOffset spriteDim_810592C[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 155 - 0x08105998 +static const SpriteOffset spriteDim_8105998[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 26, + }, +}; + +// 156 - 0x08105A1C +static const SpriteOffset spriteDim_8105A1C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 157 - 0x08105A34 +static const SpriteOffset spriteDim_8105A34[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, +}; + +// 158 - 0x08105AAC +static const SpriteOffset spriteDim_8105AAC[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 180 - 0x08105B00 +static const SpriteOffset spriteDim_8105B00[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 181 - 0x08105B24 +static const SpriteOffset spriteDim_8105B24[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 182 - 0x08105B48 +static const SpriteOffset spriteDim_8105B48[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, +}; + +// 184 - 0x08105B6C +static const SpriteOffset spriteDim_8105B6C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 24, + .height = 56, + .offsetX = 8, + .offsetY = 32, + }, +}; + +// 185 - 0x08105B84 +static const SpriteOffset spriteDim_8105B84[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 186 - 0x08105BA8 +static const SpriteOffset spriteDim_8105BA8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 187 - 0x08105C08 +static const SpriteOffset spriteDim_8105C08[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 188 - 0x08105C44 +static const SpriteOffset spriteDim_8105C44[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, +}; + +// 190 - 0x08105C74 +static const SpriteOffset spriteDim_8105C74[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, +}; + +// 191 - 0x08105C8C +static const SpriteOffset spriteDim_8105C8C[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, +}; + +// 192 - 0x08105CC8 +static const SpriteOffset spriteDim_8105CC8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 195 - 0x08105D28 +static const SpriteOffset spriteDim_8105D28[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 196 - 0x08105D58 +static const SpriteOffset spriteDim_8105D58[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 24, + .offsetY = 8, + }, +}; + +// 197 - 0x08105D7C +static const SpriteOffset spriteDim_8105D7C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 26, + .offsetY = 40, + }, +}; + +// 198 - 0x08105D88 +static const SpriteOffset spriteDim_8105D88[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 199 - 0x08105DB8 +static const SpriteOffset spriteDim_8105DB8[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 200 - 0x08105E60 +static const SpriteOffset spriteDim_8105E60[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 201 - 0x08105EFC +static const SpriteOffset spriteDim_8105EFC[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 202 - 0x08105F20 +static const SpriteOffset spriteDim_8105F20[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 203 - 0x08105F50 +static const SpriteOffset spriteDim_8105F50[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, +}; + +// 204 - 0x08105FB0 +static const SpriteOffset spriteDim_8105FB0[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, +}; + +// 205 - 0x08106010 +static const SpriteOffset spriteDim_8106010[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 206 - 0x08106028 +static const SpriteOffset spriteDim_8106028[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 207 - 0x08106058 +static const SpriteOffset spriteDim_8106058[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 208 - 0x08106088 +static const SpriteOffset spriteDim_8106088[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 209 - 0x081060B8 +static const SpriteOffset spriteDim_81060B8[16] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 42, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 4, + }, +}; + +// 210 - 0x08106178 +static const SpriteOffset spriteDim_8106178[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, +}; + +// 211 - 0x081061FC +static const SpriteOffset spriteDim_81061FC[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, +}; + +// 212 - 0x08106268 +static const SpriteOffset spriteDim_8106268[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 15, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 23, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 23, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 23, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 213 - 0x081062C8 +static const SpriteOffset spriteDim_81062C8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 26, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 26, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 26, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 216 - 0x08106328 +static const SpriteOffset spriteDim_8106328[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 217 - 0x08106340 +static const SpriteOffset spriteDim_8106340[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 218 - 0x081063A0 +static const SpriteOffset spriteDim_81063A0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 220 - 0x081063DC +static const SpriteOffset spriteDim_81063DC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 28, + }, +}; + +// 221 - 0x08106418 +static const SpriteOffset spriteDim_8106418[16] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 42, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, +}; + +// 222 - 0x081064D8 +static const SpriteOffset spriteDim_81064D8[16] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 17, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 18, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 21, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 21, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, +}; + +// 223 - 0x08106598 +static const SpriteOffset spriteDim_8106598[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, +}; + +// 224 - 0x08106640 +static const SpriteOffset spriteDim_8106640[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, +}; + +// 225 - 0x08106670 +static const SpriteOffset spriteDim_8106670[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 32, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 20, + }, +}; + +// 226 - 0x081066DC +static const SpriteOffset spriteDim_81066DC[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 227 - 0x081067B4 +static const SpriteOffset spriteDim_81067B4[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 228 - 0x08106868 +static const SpriteOffset spriteDim_8106868[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 229 - 0x0810688C +static const SpriteOffset spriteDim_810688C[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 230 - 0x08106910 +static const SpriteOffset spriteDim_8106910[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 231 - 0x081069B8 +static const SpriteOffset spriteDim_81069B8[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 232 - 0x08106A0C +static const SpriteOffset spriteDim_8106A0C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 233 - 0x08106A30 +static const SpriteOffset spriteDim_8106A30[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 234 - 0x08106A90 +static const SpriteOffset spriteDim_8106A90[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 40, + }, +}; + +// 235 - 0x08106AF0 +static const SpriteOffset spriteDim_8106AF0[24] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 51, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 59, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 63, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 67, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 236 - 0x08106C10 +static const SpriteOffset spriteDim_8106C10[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 237 - 0x08106C70 +static const SpriteOffset spriteDim_8106C70[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 238 - 0x08106CAC +static const SpriteOffset spriteDim_8106CAC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 239 - 0x08106CDC +static const SpriteOffset spriteDim_8106CDC[20] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 50, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 34, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 2, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 2, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 2, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 10, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 20, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 42, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 9, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 9, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 7, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 50, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 9, + }, +}; + +// 240 - 0x08106DCC +static const SpriteOffset spriteDim_8106DCC[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 27, + }, +}; + +// 241 - 0x08106E14 +static const SpriteOffset spriteDim_8106E14[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 242 - 0x08106E74 +static const SpriteOffset spriteDim_8106E74[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 245 - 0x08106E98 +static const SpriteOffset spriteDim_8106E98[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 246 - 0x08106EE0 +static const SpriteOffset spriteDim_8106EE0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 249 - 0x08106F10 +static const SpriteOffset spriteDim_8106F10[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, +}; + +// 250 - 0x08106F70 +static const SpriteOffset spriteDim_8106F70[19] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 41, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 16, + .offsetY = 48, + }, +}; + +// 260 - 0x08107054 +static const SpriteOffset spriteDim_8107054[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, +}; + +// 261 - 0x0810706C +static const SpriteOffset spriteDim_810706C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 22, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 26, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 30, + .offsetY = 16, + }, +}; + +// 262 - 0x0810709C +static const SpriteOffset spriteDim_810709C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 10, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 10, + .offsetY = 12, + }, +}; + +// 263 - 0x081070B4 +static const SpriteOffset spriteDim_81070B4[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 264 - 0x08107138 +static const SpriteOffset spriteDim_8107138[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, +}; + +// 265 - 0x0810715C +static const SpriteOffset spriteDim_810715C[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 17, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 15, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 23, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 23, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 31, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 269 - 0x08107204 +static const SpriteOffset spriteDim_8107204[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, +}; + +// 270 - 0x0810724C +static const SpriteOffset spriteDim_810724C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, +}; + +// 271 - 0x08107264 +static const SpriteOffset spriteDim_8107264[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 25, + }, +}; + +// 280 - 0x081072AC +static const SpriteOffset spriteDim_81072AC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 281 - 0x081072DC +static const SpriteOffset spriteDim_81072DC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, +}; + +// 282 - 0x0810730C +static const SpriteOffset spriteDim_810730C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 284 - 0x0810733C +static const SpriteOffset spriteDim_810733C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 285 - 0x08107354 +static const SpriteOffset spriteDim_8107354[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 286 - 0x08107378 +static const SpriteOffset spriteDim_8107378[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 287 - 0x08107390 +static const SpriteOffset spriteDim_8107390[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 288 - 0x081073CC +static const SpriteOffset spriteDim_81073CC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 292 - 0x081073FC +static const SpriteOffset spriteDim_81073FC[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 295 - 0x0810745C +static const SpriteOffset spriteDim_810745C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 296 - 0x0810748C +static const SpriteOffset spriteDim_810748C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 297 - 0x081074B0 +static const SpriteOffset spriteDim_81074B0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 36, + }, +}; + +// 298 - 0x081074BC +static const SpriteOffset spriteDim_81074BC[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 299 - 0x08107540 +static const SpriteOffset spriteDim_8107540[31] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 41, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 50, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 54, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 300 - 0x081076B4 +static const SpriteOffset spriteDim_81076B4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 301 - 0x081076F0 +static const SpriteOffset spriteDim_81076F0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 302 - 0x0810772C +static const SpriteOffset spriteDim_810772C[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, +}; + +// 303 - 0x081077B0 +static const SpriteOffset spriteDim_81077B0[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 48, + }, +}; + +// 304 - 0x081077F8 +static const SpriteOffset spriteDim_81077F8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 305 - 0x08107810 +static const SpriteOffset spriteDim_8107810[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 306 - 0x08107840 +static const SpriteOffset spriteDim_8107840[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 307 - 0x08107870 +static const SpriteOffset spriteDim_8107870[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 308 - 0x081078A0 +static const SpriteOffset spriteDim_81078A0[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 309 - 0x08107954 +static const SpriteOffset spriteDim_8107954[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 8, + .offsetY = 20, + }, +}; + +// 310 - 0x081079D8 +static const SpriteOffset spriteDim_81079D8[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 311 - 0x08107A44 +static const SpriteOffset spriteDim_8107A44[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 13, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 13, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 13, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 21, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 312 - 0x08107AB0 +static const SpriteOffset spriteDim_8107AB0[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 315 - 0x08107B1C +static const SpriteOffset spriteDim_8107B1C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 317 - 0x08107B34 +static const SpriteOffset spriteDim_8107B34[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 13, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 16, + }, +}; + +// 319 - 0x08107B64 +static const SpriteOffset spriteDim_8107B64[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 320 - 0x08107BA0 +static const SpriteOffset spriteDim_8107BA0[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 321 - 0x08107C54 +static const SpriteOffset spriteDim_8107C54[30] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 41, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 48, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 50, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 54, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 56, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 57, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 59, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 61, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 63, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 65, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 67, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 322 - 0x08107DBC +static const SpriteOffset spriteDim_8107DBC[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 323 - 0x08107E34 +static const SpriteOffset spriteDim_8107E34[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 22, + }, +}; + +// 324 - 0x08107E64 +static const SpriteOffset spriteDim_8107E64[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, +}; + +// 325 - 0x08107ED0 +static const SpriteOffset spriteDim_8107ED0[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 326 - 0x08107FA8 +static const SpriteOffset spriteDim_8107FA8[16] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 327 - 0x08108068 +static const SpriteOffset spriteDim_8108068[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 328 - 0x0810808C +static const SpriteOffset spriteDim_810808C[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 329 - 0x08108110 +static const SpriteOffset spriteDim_8108110[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 330 - 0x081081B8 +static const SpriteOffset spriteDim_81081B8[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 331 - 0x0810820C +static const SpriteOffset spriteDim_810820C[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 332 - 0x08108254 +static const SpriteOffset spriteDim_8108254[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 333 - 0x081082B4 +static const SpriteOffset spriteDim_81082B4[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, +}; + +// 334 - 0x0810835C +static const SpriteOffset spriteDim_810835C[24] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 335 - 0x0810847C +static const SpriteOffset spriteDim_810847C[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 18, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 336 - 0x081084DC +static const SpriteOffset spriteDim_81084DC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 12, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 12, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 12, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 337 - 0x08108518 +static const SpriteOffset spriteDim_8108518[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 40, + }, +}; + +// 338 - 0x08108548 +static const SpriteOffset spriteDim_8108548[20] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 44, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 34, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 11, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 2, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 2, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 4, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 3, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 18, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 34, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 7, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 339 - 0x08108638 +static const SpriteOffset spriteDim_8108638[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 340 - 0x08108680 +static const SpriteOffset spriteDim_8108680[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 341 - 0x081086E0 +static const SpriteOffset spriteDim_81086E0[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 13, + .offsetY = 28, + }, +}; + +// 342 - 0x08108704 +static const SpriteOffset spriteDim_8108704[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 343 - 0x08108734 +static const SpriteOffset spriteDim_8108734[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 348 - 0x081087AC +static const SpriteOffset spriteDim_81087AC[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 14, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 2, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 10, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 10, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 2, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 2, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 10, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 50, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 52, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 353 - 0x08108860 +static const SpriteOffset spriteDim_8108860[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 32, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 40, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 42, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 40, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 48, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 40, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 54, + .numSubframes = 6, + .width = 56, + .height = 48, + .offsetX = 40, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 60, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 63, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 66, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 67, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 68, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 373 - 0x08108938 +static const SpriteOffset spriteDim_8108938[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 8, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 41, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 374 - 0x081089EC +static const SpriteOffset spriteDim_81089EC[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 375 - 0x08108A64 +static const SpriteOffset spriteDim_8108A64[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 376 - 0x08108B00 +static const SpriteOffset spriteDim_8108B00[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 379 - 0x08108BA8 +static const SpriteOffset spriteDim_8108BA8[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 32, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 379 - 0x08108C44 +static const SpriteOffset spriteDim_8108C44[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 380 - 0x08108C68 +static const SpriteOffset spriteDim_8108C68[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 381 - 0x08108C8C +static const SpriteOffset spriteDim_8108C8C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 383 - 0x08108CB0 +static const SpriteOffset spriteDim_8108CB0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 384 - 0x08108CC8 +static const SpriteOffset spriteDim_8108CC8[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 385 - 0x08108CEC +static const SpriteOffset spriteDim_8108CEC[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 386 - 0x08108D04 +static const SpriteOffset spriteDim_8108D04[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 387 - 0x08108D28 +static const SpriteOffset spriteDim_8108D28[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 391 - 0x08108D58 +static const SpriteOffset spriteDim_8108D58[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 392 - 0x08108DB8 +static const SpriteOffset spriteDim_8108DB8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 393 - 0x08108DE8 +static const SpriteOffset spriteDim_8108DE8[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 23, + }, +}; + +// 394 - 0x08108E0C +static const SpriteOffset spriteDim_8108E0C[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 396 - 0x08108E84 +static const SpriteOffset spriteDim_8108E84[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 40, + }, +}; + +// 397 - 0x08108E90 +static const SpriteOffset spriteDim_8108E90[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 398 - 0x08108EB4 +static const SpriteOffset spriteDim_8108EB4[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 5, + .width = 64, + .height = 56, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 399 - 0x08108F68 +static const SpriteOffset spriteDim_8108F68[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 400 - 0x08108FD4 +static const SpriteOffset spriteDim_8108FD4[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 26, + .offsetY = 24, + }, +}; + +// 401 - 0x08109028 +static const SpriteOffset spriteDim_8109028[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 402 - 0x08109070 +static const SpriteOffset spriteDim_8109070[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 403 - 0x081090A0 +static const SpriteOffset spriteDim_81090A0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 15, + .offsetY = 38, + }, +}; + +// 404 - 0x081090DC +static const SpriteOffset spriteDim_81090DC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 39, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 39, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 39, + }, +}; + +// 405 - 0x08109118 +static const SpriteOffset spriteDim_8109118[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 18, + .offsetY = 30, + }, +}; + +// 406 - 0x08109160 +static const SpriteOffset spriteDim_8109160[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 31, + }, +}; + +// 407 - 0x081091A8 +static const SpriteOffset spriteDim_81091A8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, +}; + +// 408 - 0x081091D8 +static const SpriteOffset spriteDim_81091D8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 409 - 0x081091E4 +static const SpriteOffset spriteDim_81091E4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 410 - 0x081091F0 +static const SpriteOffset spriteDim_81091F0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 411 - 0x08109208 +static const SpriteOffset spriteDim_8109208[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 412 - 0x08109238 +static const SpriteOffset spriteDim_8109238[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 1, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 16, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 16, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 1, + }, +}; + +// 413 - 0x08109268 +static const SpriteOffset spriteDim_8109268[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 32, + .offsetX = 8, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 32, + .offsetX = 8, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 16, + .offsetY = 28, + }, +}; + +// 414 - 0x081092A4 +static const SpriteOffset spriteDim_81092A4[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 415 - 0x081092BC +static const SpriteOffset spriteDim_81092BC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 14, + .offsetY = 38, + }, +}; + +// 416 - 0x081092EC +static const SpriteOffset spriteDim_81092EC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 417 - 0x08109328 +static const SpriteOffset spriteDim_8109328[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 24, + .offsetY = 38, + }, +}; + +// 418 - 0x08109370 +static const SpriteOffset spriteDim_8109370[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 46, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 46, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 46, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 46, + }, +}; + +// 419 - 0x081093A0 +static const SpriteOffset spriteDim_81093A0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 420 - 0x081093B8 +static const SpriteOffset spriteDim_81093B8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 421 - 0x081093C4 +static const SpriteOffset spriteDim_81093C4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 422 - 0x081093D0 +static const SpriteOffset spriteDim_81093D0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 16, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 16, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 31, + }, +}; + +// 423 - 0x0810940C +static const SpriteOffset spriteDim_810940C[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 23, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 23, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 31, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 31, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 31, + .offsetY = 0, + }, +}; + +// 424 - 0x08109448 +static const SpriteOffset spriteDim_8109448[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, +}; + +// 425 - 0x0810946C +static const SpriteOffset spriteDim_810946C[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 8, + .height = 24, + .offsetX = 8, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, +}; + +// 426 - 0x081094B4 +static const SpriteOffset spriteDim_81094B4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 7, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 7, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 7, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 23, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 23, + }, +}; + +// 427 - 0x081094F0 +static const SpriteOffset spriteDim_81094F0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 428 - 0x081094FC +static const SpriteOffset spriteDim_81094FC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, +}; + +// 429 - 0x08109508 +static const SpriteOffset spriteDim_8109508[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 430 - 0x08109520 +static const SpriteOffset spriteDim_8109520[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 22, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 22, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 22, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 22, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 6, + .width = 56, + .height = 24, + .offsetX = 30, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 64, + .height = 24, + .offsetX = 38, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 8, + .offsetY = 22, + }, +}; + +// 431 - 0x08109580 +static const SpriteOffset spriteDim_8109580[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 432 - 0x081095A4 +static const SpriteOffset spriteDim_81095A4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 433 - 0x081095E0 +static const SpriteOffset spriteDim_81095E0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, +}; + +// 434 - 0x0810961C +static const SpriteOffset spriteDim_810961C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 16, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 16, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 30, + }, +}; + +// 435 - 0x0810964C +static const SpriteOffset spriteDim_810964C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 436 - 0x08109664 +static const SpriteOffset spriteDim_8109664[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 437 - 0x0810967C +static const SpriteOffset spriteDim_810967C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, +}; + +// 438 - 0x081096A0 +static const SpriteOffset spriteDim_81096A0[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, +}; + +// 439 - 0x081096C4 +static const SpriteOffset spriteDim_81096C4[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 6, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 6, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 6, + .offsetY = 15, + }, +}; + +// 440 - 0x081096E8 +static const SpriteOffset spriteDim_81096E8[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, +}; + +// 441 - 0x0810970C +static const SpriteOffset spriteDim_810970C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, +}; + +// 442 - 0x08109730 +static const SpriteOffset spriteDim_8109730[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 443 - 0x08109754 +static const SpriteOffset spriteDim_8109754[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, +}; + +// 444 - 0x08109778 +static const SpriteOffset spriteDim_8109778[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, +}; + +// 445 - 0x0810979C +static const SpriteOffset spriteDim_810979C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 14, + }, +}; + +// 446 - 0x081097C0 +static const SpriteOffset spriteDim_81097C0[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, +}; + +// 447 - 0x081097E4 +static const SpriteOffset spriteDim_81097E4[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, +}; + +// 448 - 0x08109808 +static const SpriteOffset spriteDim_8109808[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 449 - 0x0810982C +static const SpriteOffset spriteDim_810982C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 15, + }, +}; + +// 450 - 0x08109850 +static const SpriteOffset spriteDim_8109850[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 451 - 0x08109874 +static const SpriteOffset spriteDim_8109874[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 15, + }, +}; + +// 452 - 0x08109898 +static const SpriteOffset spriteDim_8109898[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 48, + .offsetX = 8, + .offsetY = 43, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 43, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 35, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 16, + .height = 40, + .offsetX = 8, + .offsetY = 35, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 16, + .offsetY = 35, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 16, + .offsetY = 43, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 16, + .height = 48, + .offsetX = 8, + .offsetY = 43, + }, +}; + +// 453 - 0x081098EC +static const SpriteOffset spriteDim_81098EC[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 46, + }, +}; + +// 454 - 0x08109940 +static const SpriteOffset spriteDim_8109940[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 16, + .offsetY = 5, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 13, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 29, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 2, + .offsetY = 30, + }, +}; + +// 455 - 0x08109970 +static const SpriteOffset spriteDim_8109970[20] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 25, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 33, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 33, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 33, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 2, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 2, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 2, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 2, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 2, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 0, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 0, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 0, + .offsetY = 36, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 0, + .offsetY = 36, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 0, + .offsetY = 36, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 0, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 0, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 32, + }, +}; + +// 456 - 0x08109A60 +static const SpriteOffset spriteDim_8109A60[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 0, + .offsetY = -8, + }, +}; + +// 457 - 0x08109A6C +static const SpriteOffset spriteDim_8109A6C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, +}; + +// 458 - 0x08109A9C +static const SpriteOffset spriteDim_8109A9C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 34, + }, +}; + +// 459 - 0x08109AA8 +static const SpriteOffset spriteDim_8109AA8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 460 - 0x08109AB4 +static const SpriteOffset spriteDim_8109AB4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 461 - 0x08109AC0 +static const SpriteOffset spriteDim_8109AC0[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 20, + }, +}; + +// 462 - 0x08109B14 +static const SpriteOffset spriteDim_8109B14[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, +}; + +// 463 - 0x08109B20 +static const SpriteOffset spriteDim_8109B20[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 464 - 0x08109B2C +static const SpriteOffset spriteDim_8109B2C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 34, + }, +}; + +// 465 - 0x08109B50 +static const SpriteOffset spriteDim_8109B50[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = -4, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 12, + .offsetY = -4, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = -4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 12, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = -4, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 12, + }, +}; + +// 466 - 0x08109BBC +static const SpriteOffset spriteDim_8109BBC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 467 - 0x08109BC8 +static const SpriteOffset spriteDim_8109BC8[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 468 - 0x08109C1C +static const SpriteOffset spriteDim_8109C1C[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 6, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 6, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 6, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 6, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 6, + .offsetY = 14, + }, +}; + +// 469 - 0x08109C58 +static const SpriteOffset spriteDim_8109C58[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 17, + .offsetY = 29, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 30, + }, +}; + +// 470 - 0x08109CA0 +static const SpriteOffset spriteDim_8109CA0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 6, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 6, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 6, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 6, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 6, + .offsetY = 14, + }, +}; + +// 471 - 0x08109CDC +static const SpriteOffset spriteDim_8109CDC[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 19, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 19, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 19, + }, +}; + +// 472 - 0x08109D48 +static const SpriteOffset spriteDim_8109D48[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 473 - 0x08109D6C +static const SpriteOffset spriteDim_8109D6C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 9, + .width = 56, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 9, + .width = 56, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 9, + .width = 56, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, +}; + +// 474 - 0x08109D90 +static const SpriteOffset spriteDim_8109D90[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 31, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 31, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 31, + .offsetY = 6, + }, +}; + +// 475 - 0x08109DB4 +static const SpriteOffset spriteDim_8109DB4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 0, + .offsetY = 48, + }, +}; + +// 476 - 0x08109DC0 +static const SpriteOffset spriteDim_8109DC0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, +}; + +// 477 - 0x08109DCC +static const SpriteOffset spriteDim_8109DCC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 48, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 478 - 0x08109DD8 +static const SpriteOffset spriteDim_8109DD8[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 479 - 0x08109E20 +static const SpriteOffset spriteDim_8109E20[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, +}; + +// 480 - 0x08109E8C +static const SpriteOffset spriteDim_8109E8C[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, +}; + +// 481 - 0x08109EF8 +static const SpriteOffset spriteDim_8109EF8[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 24, + .height = 48, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 12, + .offsetY = 16, + }, +}; + +// 482 - 0x08109F64 +static const SpriteOffset spriteDim_8109F64[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 483 - 0x08109FA0 +static const SpriteOffset spriteDim_8109FA0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 484 - 0x08109FDC +static const SpriteOffset spriteDim_8109FDC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, +}; + +// 485 - 0x08109FE8 +static const SpriteOffset spriteDim_8109FE8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 486 - 0x08109FF4 +static const SpriteOffset spriteDim_8109FF4[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 96, + .height = 40, + .offsetX = 48, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 5, + .width = 96, + .height = 40, + .offsetX = 48, + .offsetY = 20, + }, +}; + +// 487 - 0x0810A00C +static const SpriteOffset spriteDim_810A00C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 96, + .height = 40, + .offsetX = 48, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 5, + .width = 96, + .height = 40, + .offsetX = 48, + .offsetY = 0, + }, +}; + +// 488 - 0x0810A024 +static const SpriteOffset spriteDim_810A024[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 489 - 0x0810A030 +static const SpriteOffset spriteDim_810A030[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 490 - 0x0810A03C +static const SpriteOffset spriteDim_810A03C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, +}; + +// 491 - 0x0810A048 +static const SpriteOffset spriteDim_810A048[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 48, + .offsetY = 22, + }, +}; + +// 492 - 0x0810A054 +static const SpriteOffset spriteDim_810A054[40] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 493 - 0x0810A234 +static const SpriteOffset spriteDim_810A234[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 494 - 0x0810A240 +static const SpriteOffset spriteDim_810A240[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 495 - 0x0810A24C +static const SpriteOffset spriteDim_810A24C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 496 - 0x0810A258 +static const SpriteOffset spriteDim_810A258[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 0, + }, +}; + +// 497 - 0x0810A2A0 +static const SpriteOffset spriteDim_810A2A0[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, +}; + +// 498 - 0x0810A2E8 +static const SpriteOffset spriteDim_810A2E8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 8, + .height = 24, + .offsetX = 4, + .offsetY = 0, + }, +}; + +// 499 - 0x0810A2E8 +static const SpriteOffset spriteDim_810A318[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, +}; + +// 501 - 0x0810A324 +static const SpriteOffset spriteDim_810A324[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 502 - 0x0810A378 +static const SpriteOffset spriteDim_810A378[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 503 - 0x0810A384 +static const SpriteOffset spriteDim_810A384[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 0, + }, +}; + +// 504 - 0x0810A3A8 +static const SpriteOffset spriteDim_810A3A8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 505 - 0x0810A3C0 +static const SpriteOffset spriteDim_810A3C0[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 22, + }, +}; + +// 506 - 0x0810A414 +static const SpriteOffset spriteDim_810A414[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 507 - 0x0810A420 +static const SpriteOffset spriteDim_810A420[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 508 - 0x0810A42C +static const SpriteOffset spriteDim_810A42C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, +}; + +// 509 - 0x0810A45C +static const SpriteOffset spriteDim_810A45C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, +}; + +// 510 - 0x0810A48C +static const SpriteOffset spriteDim_810A48C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 511 - 0x0810A498 +static const SpriteOffset spriteDim_810A498[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 512 - 0x0810A4BC +static const SpriteOffset spriteDim_810A4BC[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 513 - 0x0810A4E0 +static const SpriteOffset spriteDim_810A4E0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 514 - 0x0810A4EC +static const SpriteOffset spriteDim_810A4EC[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 515 - 0x0810A504 +static const SpriteOffset spriteDim_810A504[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 10, + .width = 144, + .height = 24, + .offsetX = 72, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 10, + .width = 144, + .height = 24, + .offsetX = 72, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 8, + .width = 112, + .height = 24, + .offsetX = 56, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 10, + .width = 144, + .height = 24, + .offsetX = 72, + .offsetY = 12, + }, +}; + +// 516 - 0x0810A534 +static const SpriteOffset spriteDim_810A534[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 517 - 0x0810A594 +static const SpriteOffset spriteDim_810A594[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 518 - 0x0810A5A0 +static const SpriteOffset spriteDim_810A5A0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 519 - 0x0810A5AC +static const SpriteOffset spriteDim_810A5AC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 80, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, +}; + +// 520 - 0x0810A5B8 +static const SpriteOffset spriteDim_810A5B8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 521 - 0x0810A5C4 +static const SpriteOffset spriteDim_810A5C4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 522 - 0x0810A5D0 +static const SpriteOffset spriteDim_810A5D0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 8, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 8, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 8, + .offsetY = 12, + }, +}; + +// 523 - 0x0810A600 +static const SpriteOffset spriteDim_810A600[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 524 - 0x0810A60C +static const SpriteOffset spriteDim_810A60C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 525 - 0x0810A618 +static const SpriteOffset spriteDim_810A618[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 18, + }, +}; + +// 526 - 0x0810A624 +static const SpriteOffset spriteDim_810A624[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, +}; + +// 527 - 0x0810A660 +static const SpriteOffset spriteDim_810A660[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 528 - 0x0810A66C +static const SpriteOffset spriteDim_810A66C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 28, + .offsetY = 21, + }, +}; + +// 529 - 0x0810A678 +static const SpriteOffset spriteDim_810A678[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 530 - 0x0810A684 +static const SpriteOffset spriteDim_810A684[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 531 - 0x0810A690 +static const SpriteOffset spriteDim_810A690[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 532 - 0x0810A69C +static const SpriteOffset spriteDim_810A69C[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, +}; + +// 533 - 0x0810A6F0 +static const SpriteOffset spriteDim_810A6F0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 534 - 0x0810A708 +static const SpriteOffset spriteDim_810A708[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 48, + .offsetX = 8, + .offsetY = 48, + }, +}; + +// 535 - 0x0810A714 +static const SpriteOffset spriteDim_810A714[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 536 - 0x0810A720 +static const SpriteOffset spriteDim_810A720[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 80, + .offsetX = 16, + .offsetY = 40, + }, +}; + +// 537 - 0x0810A72C +static const SpriteOffset spriteDim_810A72C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 80, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, +}; + +// 538 - 0x0810A738 +static const SpriteOffset spriteDim_810A738[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 539 - 0x0810A744 +static const SpriteOffset spriteDim_810A744[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 540 - 0x0810A750 +static const SpriteOffset spriteDim_810A750[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, +}; + +// 541 - 0x0810A78C +static const SpriteOffset spriteDim_810A78C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 542 - 0x0810A798 +static const SpriteOffset spriteDim_810A798[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 14, + .offsetY = 12, + }, +}; + +// 543 - 0x0810A7C8 +static const SpriteOffset spriteDim_810A7C8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, +}; + +// 544 - 0x0810A7D4 +static const SpriteOffset spriteDim_810A7D4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 20, + .offsetY = 21, + }, +}; + +// 545 - 0x0810A7E0 +static const SpriteOffset spriteDim_810A7E0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 32, + .offsetX = 2, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 10, + .offsetY = 14, + }, +}; + +// 546 - 0x0810A7F8 +static const SpriteOffset spriteDim_810A7F8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 96, + .height = 40, + .offsetX = 48, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 5, + .width = 96, + .height = 40, + .offsetX = 48, + .offsetY = 20, + }, +}; + +// 547 - 0x0810A810 +static const SpriteOffset spriteDim_810A810[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 548 - 0x0810A81C +static const SpriteOffset spriteDim_810A81C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 14, + }, +}; + +// 549 - 0x0810A828 +static const SpriteOffset spriteDim_810A828[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 550 - 0x0810A834 +static const SpriteOffset spriteDim_810A834[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 80, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, +}; + +// 551 - 0x0810A840 +static const SpriteOffset spriteDim_810A840[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 552 - 0x0810A84C +static const SpriteOffset spriteDim_810A84C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 34, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 34, + }, +}; + +// 553 - 0x0810A870 +static const SpriteOffset spriteDim_810A870[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 20, + .offsetY = 20, + }, +}; + +// 554 - 0x0810A87C +static const SpriteOffset spriteDim_810A87C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 555 - 0x0810A888 +static const SpriteOffset spriteDim_810A888[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 20, + .offsetY = 39, + }, +}; + +// 556 - 0x0810A894 +static const SpriteOffset spriteDim_810A894[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 20, + .offsetY = 28, + }, +}; + +// 557 - 0x0810A8A0 +static const SpriteOffset spriteDim_810A8A0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 558 - 0x0810A8AC +static const SpriteOffset spriteDim_810A8AC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 40, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 559 - 0x0810A8DC +static const SpriteOffset spriteDim_810A8DC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 560 - 0x0810A8E8 +static const SpriteOffset spriteDim_810A8E8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 561 - 0x0810A900 +static const SpriteOffset spriteDim_810A900[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 16, + .offsetY = 0, + }, +}; + +// 562 - 0x0810A924 +static const SpriteOffset spriteDim_810A924[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 31, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 31, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 31, + .offsetY = 14, + }, +}; + +// 563 - 0x0810A948 +static const SpriteOffset spriteDim_810A948[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 8, + .offsetY = 5, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 8, + .offsetY = 5, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 8, + .offsetY = 5, + }, +}; + +// 564 - 0x0810A96C +static const SpriteOffset spriteDim_810A96C[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 56, + }, +}; + +// 565 - 0x0810A9CC +static const SpriteOffset spriteDim_810A9CC[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 56, + }, +}; + +// 566 - 0x0810AA2C +static const SpriteOffset spriteDim_810AA2C[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 56, + }, +}; + +// 567 - 0x0810AA8C +static const SpriteOffset spriteDim_810AA8C[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 48, + }, +}; + +// 568 - 0x0810AB04 +static const SpriteOffset spriteDim_810AB04[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 31, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 31, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 31, + .offsetY = 6, + }, +}; + +// 569 - 0x0810AB28 +static const SpriteOffset spriteDim_810AB28[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 4, + }, +}; + +// 570 - 0x0810AB34 +static const SpriteOffset spriteDim_810AB34[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 571 - 0x0810AB58 +static const SpriteOffset spriteDim_810AB58[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 572 - 0x0810AB7C +static const SpriteOffset spriteDim_810AB7C[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 39, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 31, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 47, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 47, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 47, + }, +}; + +// 573 - 0x0810ABB8 +static const SpriteOffset spriteDim_810ABB8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 28, + .offsetY = 16, + }, +}; + +// 574 - 0x0810ABC4 +static const SpriteOffset spriteDim_810ABC4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 575 - 0x0810ABD0 +static const SpriteOffset spriteDim_810ABD0[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 72, + .height = 64, + .offsetX = 36, + .offsetY = 64, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 72, + .height = 64, + .offsetX = 36, + .offsetY = 64, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 72, + .height = 72, + .offsetX = 36, + .offsetY = 72, + }, +}; + +// 576 - 0x0810ABF4 +static const SpriteOffset spriteDim_810ABF4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 12, + .offsetY = 76, + }, +}; + +// 577 - 0x0810AC00 +static const SpriteOffset spriteDim_810AC00[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 64, + }, +}; + +// 578 - 0x0810AC0C +static const SpriteOffset spriteDim_810AC0C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 579 - 0x0810AC18 +static const SpriteOffset spriteDim_810AC18[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 580 - 0x0810AC24 +static const SpriteOffset spriteDim_810AC24[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 581 - 0x0810AC30 +static const SpriteOffset spriteDim_810AC30[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 8, + .offsetX = 24, + .offsetY = 8, + }, +}; + +// 582 - 0x0810AC60 +static const SpriteOffset spriteDim_810AC60[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 16, + .offsetY = 28, + }, +}; + +// 583 - 0x0810AC9C +static const SpriteOffset spriteDim_810AC9C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 40, + .offsetX = 8, + .offsetY = 40, + }, +}; + +// 584 - 0x0810ACA8 +static const SpriteOffset spriteDim_810ACA8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, +}; + +// 585 - 0x0810ACD8 +static const SpriteOffset spriteDim_810ACD8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 27, + .offsetY = 27, + }, +}; + +// 586 - 0x0810AD08 +static const SpriteOffset spriteDim_810AD08[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, +}; + +// 587 - 0x0810AD38 +static const SpriteOffset spriteDim_810AD38[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 27, + .offsetY = 27, + }, +}; + +// 588 - 0x0810AD68 +static const SpriteOffset spriteDim_810AD68[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 28, + .offsetY = 28, + }, +}; + +// 589 - 0x0810ADB0 +static const SpriteOffset spriteDim_810ADB0[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 28, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 28, + .offsetY = 28, + }, +}; + +// 590 - 0x0810ADF8 +static const SpriteOffset spriteDim_810ADF8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 66, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 77, + .numSubframes = 11, + .width = 104, + .height = 56, + .offsetX = 52, + .offsetY = 28, + }, +}; + +// 591 - 0x0810AE58 +static const SpriteOffset spriteDim_810AE58[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, + { + .flip = 0x00, + .oamIndex = 66, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, + { + .flip = 0x00, + .oamIndex = 77, + .numSubframes = 11, + .width = 56, + .height = 88, + .offsetX = 28, + .offsetY = 44, + }, +}; + +// 592 - 0x0810AEB8 +static const SpriteOffset spriteDim_810AEB8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 593 - 0x0810AEC4 +static const SpriteOffset spriteDim_810AEC4[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 32, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 594 - 0x0810AEF4 +static const SpriteOffset spriteDim_810AEF4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 595 - 0x0810AF00 +static const SpriteOffset spriteDim_810AF00[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 596 - 0x0810AF0C +static const SpriteOffset spriteDim_810AF0C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 597 - 0x0810AF18 +static const SpriteOffset spriteDim_810AF18[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 0, + }, +}; + +// 598 - 0x0810AF48 +static const SpriteOffset spriteDim_810AF48[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 599 - 0x0810AF54 +static const SpriteOffset spriteDim_810AF54[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 600 - 0x0810AF60 +static const SpriteOffset spriteDim_810AF60[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 80, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, +}; + +// 601 - 0x0810AF6C +static const SpriteOffset spriteDim_810AF6C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, +}; + +// 602 - 0x0810AF78 +static const SpriteOffset spriteDim_810AF78[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 603 - 0x0810AF84 +static const SpriteOffset spriteDim_810AF84[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 72, + .height = 24, + .offsetX = 36, + .offsetY = 16, + }, +}; + +// 604 - 0x0810AFB4 +static const SpriteOffset spriteDim_810AFB4[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 96, + .height = 24, + .offsetX = 48, + .offsetY = 14, + }, +}; + +// 605 - 0x0810AFE4 +static const SpriteOffset spriteDim_810AFE4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 606 - 0x0810AFF0 +static const SpriteOffset spriteDim_810AFF0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 607 - 0x0810AFFC +static const SpriteOffset spriteDim_810AFFC[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 72, + .height = 56, + .offsetX = 40, + .offsetY = 56, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 40, + .offsetY = 56, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 80, + .height = 56, + .offsetX = 40, + .offsetY = 56, + }, +}; + +// 608 - 0x0810B020 +static const SpriteOffset spriteDim_810B020[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 609 - 0x0810B02C +static const SpriteOffset spriteDim_810B02C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 610 - 0x0810B038 +static const SpriteOffset spriteDim_810B038[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 20, + .offsetY = 63, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 20, + .offsetY = 63, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 20, + .offsetY = 63, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 20, + .offsetY = 63, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 20, + .offsetY = 63, + }, +}; + +// 611 - 0x0810B074 +static const SpriteOffset spriteDim_810B074[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 612 - 0x0810B0B0 +static const SpriteOffset spriteDim_810B0B0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 64, + .height = 56, + .offsetX = 34, + .offsetY = 56, + }, +}; + +// 613 - 0x0810B0BC +static const SpriteOffset spriteDim_810B0BC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 35, + .offsetY = 32, + }, +}; + +// 614 - 0x0810B0C8 +static const SpriteOffset spriteDim_810B0C8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 39, + .offsetY = 32, + }, +}; + +// 615 - 0x0810B0D4 +static const SpriteOffset spriteDim_810B0D4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -1, + .offsetY = 32, + }, +}; + +// 616 - 0x0810B0E0 +static const SpriteOffset spriteDim_810B0E0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 2, + .offsetY = 32, + }, +}; + +// 617 - 0x0810B0EC +static const SpriteOffset spriteDim_810B0EC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 618 - 0x0810B0F8 +static const SpriteOffset spriteDim_810B0F8[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 71, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 71, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 71, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 71, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 71, + }, +}; + +// 619 - 0x0810B134 +static const SpriteOffset spriteDim_810B134[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 620 - 0x0810B140 +static const SpriteOffset spriteDim_810B140[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 70, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 70, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 70, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 70, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 24, + .offsetY = 54, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 24, + .offsetY = 54, + }, +}; + +// 621 - 0x0810B188 +static const SpriteOffset spriteDim_810B188[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 622 - 0x0810B194 +static const SpriteOffset spriteDim_810B194[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 8, + .offsetY = 24, + }, +}; + +// 623 - 0x0810B1D0 +static const SpriteOffset spriteDim_810B1D0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 624 - 0x0810B1DC +static const SpriteOffset spriteDim_810B1DC[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 625 - 0x0810B20C +static const SpriteOffset spriteDim_810B20C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 626 - 0x0810B224 +static const SpriteOffset spriteDim_810B224[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 64, + .height = 48, + .offsetX = 32, + .offsetY = -16, + }, +}; + +// 627 - 0x0810B230 +static const SpriteOffset spriteDim_810B230[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 628 - 0x0810B248 +static const SpriteOffset spriteDim_810B248[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 0, + }, +}; + +// 629 - 0x0810B290 +static const SpriteOffset spriteDim_810B290[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -28, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -28, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -28, + }, +}; + +// 630 - 0x0810B2C0 +static const SpriteOffset spriteDim_810B2C0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 631 - 0x0810B2CC +static const SpriteOffset spriteDim_810B2CC[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 4, + .width = 40, + .height = 48, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 8, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 632 - 0x0810B32C +static const SpriteOffset spriteDim_810B32C[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 633 - 0x0810B374 +static const SpriteOffset spriteDim_810B374[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 634 - 0x0810B38C +static const SpriteOffset spriteDim_810B38C[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 635 - 0x0810B3C8 +static const SpriteOffset spriteDim_810B3C8[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 636 - 0x0810B410 +static const SpriteOffset spriteDim_810B410[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 637 - 0x0810B440 +static const SpriteOffset spriteDim_810B440[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 638 - 0x0810B4A0 +static const SpriteOffset spriteDim_810B4A0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 639 - 0x0810B4B8 +static const SpriteOffset spriteDim_810B4B8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 640 - 0x0810B4E8 +static const SpriteOffset spriteDim_810B4E8[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 641 - 0x0810B56C +static const SpriteOffset spriteDim_810B56C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, +}; + +// 642 - 0x0810B584 +static const SpriteOffset spriteDim_810B584[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 643 - 0x0810B5B4 +static const SpriteOffset spriteDim_810B5B4[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 32, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 40, + .offsetY = 24, + }, +}; + +// 644 - 0x0810B614 +static const SpriteOffset spriteDim_810B614[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 645 - 0x0810B65C +static const SpriteOffset spriteDim_810B65C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 646 - 0x0810B674 +static const SpriteOffset spriteDim_810B674[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 647 - 0x0810B6B0 +static const SpriteOffset spriteDim_810B6B0[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 648 - 0x0810B6F8 +static const SpriteOffset spriteDim_810B6F8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 649 - 0x0810B728 +static const SpriteOffset spriteDim_810B728[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 650 - 0x0810B788 +static const SpriteOffset spriteDim_810B788[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 651 - 0x0810B7A0 +static const SpriteOffset spriteDim_810B7A0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 652 - 0x0810B7D0 +static const SpriteOffset spriteDim_810B7D0[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 653 - 0x0810B854 +static const SpriteOffset spriteDim_810B854[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, +}; + +// 654 - 0x0810B86C +static const SpriteOffset spriteDim_810B86C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 655 - 0x0810B89C +static const SpriteOffset spriteDim_810B89C[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 48, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 40, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 656 - 0x0810B8FC +static const SpriteOffset spriteDim_810B8FC[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 40, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 40, + .offsetY = 32, + }, +}; + +// 657 - 0x0810B914 +static const SpriteOffset spriteDim_810B914[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 16, + .offsetY = 12, + }, +}; + +// 658 - 0x0810B95C +static const SpriteOffset spriteDim_810B95C[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 659 - 0x0810B9A4 +static const SpriteOffset spriteDim_810B9A4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 660 - 0x0810B9B0 +static const SpriteOffset spriteDim_810B9B0[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 28, + }, + { + .flip = 0x02, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -12, + }, + { + .flip = 0x02, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -12, + }, + { + .flip = 0x02, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -12, + }, + { + .flip = 0x02, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -12, + }, + { + .flip = 0x02, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = -12, + }, +}; + +// 661 - 0x0810BA28 +static const SpriteOffset spriteDim_810BA28[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 662 - 0x0810BA34 +static const SpriteOffset spriteDim_810BA34[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x02, + .oamIndex = 0, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x02, + .oamIndex = 3, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x02, + .oamIndex = 6, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 663 - 0x0810BA7C +static const SpriteOffset spriteDim_810BA7C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, +}; + +// 664 - 0x0810BA94 +static const SpriteOffset spriteDim_810BA94[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 665 - 0x0810BAAC +static const SpriteOffset spriteDim_810BAAC[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 28, + .offsetY = 36, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 28, + .offsetY = 36, + }, +}; + +// 666 - 0x0810BAC4 +static const SpriteOffset spriteDim_810BAC4[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 64, + .height = 72, + .offsetX = 28, + .offsetY = 56, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 64, + .height = 72, + .offsetX = 28, + .offsetY = 56, + }, +}; + +// 667 - 0x0810BADC +static const SpriteOffset spriteDim_810BADC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 21, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 21, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 20, + .offsetY = 13, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 20, + .offsetY = 13, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 23, + .offsetY = 14, + }, +}; + +// 668 - 0x0810BB18 +static const SpriteOffset spriteDim_810BB18[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 20, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 20, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 20, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 20, + .offsetY = 16, + }, +}; + +// 669 - 0x0810BB48 +static const SpriteOffset spriteDim_810BB48[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, +}; + +// 670 - 0x0810BB54 +static const SpriteOffset spriteDim_810BB54[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 8, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 8, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 0, + }, +}; + +// 671 - 0x0810BBB4 +static const SpriteOffset spriteDim_810BBB4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 6, + .offsetY = 6, + }, +}; + +// 672 - 0x0810BBC0 +static const SpriteOffset spriteDim_810BBC0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 13, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 16, + .height = 48, + .offsetX = 8, + .offsetY = 45, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 16, + .height = 96, + .offsetX = 8, + .offsetY = 93, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 16, + .height = 96, + .offsetX = 8, + .offsetY = 93, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 16, + .height = 88, + .offsetX = 8, + .offsetY = 93, + }, +}; + +// 673 - 0x0810BBFC +static const SpriteOffset spriteDim_810BBFC[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 36, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 36, + .offsetY = 20, + }, + { + .flip = 0x02, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 36, + .offsetY = 20, + }, +}; + +// 674 - 0x0810BC20 +static const SpriteOffset spriteDim_810BC20[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 675 - 0x0810BC2C +static const SpriteOffset spriteDim_810BC2C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 676 - 0x0810BC44 +static const SpriteOffset spriteDim_810BC44[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 677 - 0x0810BC50 +static const SpriteOffset spriteDim_810BC50[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 678 - 0x0810BC5C +static const SpriteOffset spriteDim_810BC5C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 679 - 0x0810BC68 +static const SpriteOffset spriteDim_810BC68[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 55, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 55, + .offsetY = 4, + }, + { + .flip = 0x02, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 55, + .offsetY = 4, + }, +}; + +// 680 - 0x0810BC8C +static const SpriteOffset spriteDim_810BC8C[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 22, + }, +}; + +// 681 - 0x0810BCC8 +static const SpriteOffset spriteDim_810BCC8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 25, + .offsetY = -3, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 25, + .offsetY = -3, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 41, + .offsetY = -1, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 41, + .offsetY = -1, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -7, + .offsetY = -3, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -7, + .offsetY = -3, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 9, + .offsetY = -1, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 9, + .offsetY = -1, + }, +}; + +// 682 - 0x0810BD28 +static const SpriteOffset spriteDim_810BD28[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 72, + .height = 48, + .offsetX = 36, + .offsetY = 24, + }, +}; + +// 683 - 0x0810BD34 +static const SpriteOffset spriteDim_810BD34[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = -25, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = -25, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 7, + .offsetY = -20, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 7, + .offsetY = -20, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 684 - 0x0810BD70 +static const SpriteOffset spriteDim_810BD70[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 23, + .offsetY = 20, + }, +}; + +// 685 - 0x0810BD7C +static const SpriteOffset spriteDim_810BD7C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 686 - 0x0810BD94 +static const SpriteOffset spriteDim_810BD94[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 11, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 11, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 11, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 11, + .offsetY = 26, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 11, + .offsetY = 26, + }, +}; + +// 687 - 0x0810BDD0 +static const SpriteOffset spriteDim_810BDD0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 24, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 24, + .offsetY = 30, + }, +}; + +// 688 - 0x0810BDE8 +static const SpriteOffset spriteDim_810BDE8[27] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 26, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 28, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 34, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 36, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 38, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 42, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 44, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x01, + .oamIndex = 46, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 48, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 50, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 52, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, +}; + +// 689 - 0x0810BF2C +static const SpriteOffset spriteDim_810BF2C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 690 - 0x0810BF5C +static const SpriteOffset spriteDim_810BF5C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 691 - 0x0810BF74 +static const SpriteOffset spriteDim_810BF74[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 38, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 30, + }, +}; + +// 692 - 0x0810BFC8 +static const SpriteOffset spriteDim_810BFC8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 693 - 0x0810BFD4 +static const SpriteOffset spriteDim_810BFD4[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x01, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x01, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 694 - 0x0810C01C +static const SpriteOffset spriteDim_810C01C[17] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 13, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 13, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 13, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 13, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 13, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 13, + .offsetY = 28, + }, + { + .flip = 0x01, + .oamIndex = 27, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 19, + .offsetY = 20, + }, +}; + +// 695 - 0x0810C0E8 +static const SpriteOffset spriteDim_810C0E8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 696 - 0x0810C100 +static const SpriteOffset spriteDim_810C100[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 697 - 0x0810C118 +static const SpriteOffset spriteDim_810C118[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 698 - 0x0810C130 +static const SpriteOffset spriteDim_810C130[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 32, + }, +}; + +// 699 - 0x0810C160 +static const SpriteOffset spriteDim_810C160[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 700 - 0x0810C190 +static const SpriteOffset spriteDim_810C190[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x01, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 701 - 0x0810C1A8 +static const SpriteOffset spriteDim_810C1A8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 702 - 0x0810C1C0 +static const SpriteOffset spriteDim_810C1C0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 703 - 0x0810C1FC +static const SpriteOffset spriteDim_810C1FC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 704 - 0x0810C238 +static const SpriteOffset spriteDim_810C238[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 705 - 0x0810C274 +static const SpriteOffset spriteDim_810C274[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 26, + }, +}; + +// 706 - 0x0810C280 +static const SpriteOffset spriteDim_810C280[17] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 18, + }, +}; + +// 707 - 0x0810C34C +static const SpriteOffset spriteDim_810C34C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 708 - 0x0810C37C +static const SpriteOffset spriteDim_810C37C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 16, + }, +}; + +// 709 - 0x0810C3AC +static const SpriteOffset spriteDim_810C3AC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 6, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 6, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 6, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 6, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 8, + .offsetY = 4, + }, +}; + +// 710 - 0x0810C3E8 +static const SpriteOffset spriteDim_810C3E8[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 24, + .offsetY = 32, + }, +}; + +// 711 - 0x0810C460 +static const SpriteOffset spriteDim_810C460[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 712 - 0x0810C478 +static const SpriteOffset spriteDim_810C478[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 24, + }, +}; + +// 713 - 0x0810C484 +static const SpriteOffset spriteDim_810C484[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 0, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = -8, + .offsetY = 16, + }, +}; + +// 714 - 0x0810C4B4 +static const SpriteOffset spriteDim_810C4B4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 715 - 0x0810C4C0 +static const SpriteOffset spriteDim_810C4C0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 64, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 0, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 64, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 0, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 56, + .offsetY = 8, + }, +}; + +// 716 - 0x0810C4FC +static const SpriteOffset spriteDim_810C4FC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 168, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 717 - 0x0810C508 +static const SpriteOffset spriteDim_810C508[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 7, + .width = 224, + .height = 16, + .offsetX = 112, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 7, + .width = 224, + .height = 16, + .offsetX = 112, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 7, + .width = 224, + .height = 16, + .offsetX = 112, + .offsetY = 8, + }, +}; + +// 718 - 0x0810C52C +static const SpriteOffset spriteDim_810C52C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, +}; + +// 719 - 0x0810C538 +static const SpriteOffset spriteDim_810C538[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 64, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 0, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -32, + .offsetY = 16, + }, +}; + +// 720 - 0x0810C568 +static const SpriteOffset spriteDim_810C568[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 96, + .height = 32, + .offsetX = 48, + .offsetY = 16, + }, +}; + +// 721 - 0x0810C574 +static const SpriteOffset spriteDim_810C574[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 8, + .offsetX = 12, + .offsetY = 4, + }, +}; + +// 722 - 0x0810C580 +static const SpriteOffset spriteDim_810C580[22] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 3, + .width = 64, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 6, + .width = 72, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 6, + .width = 72, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 6, + .width = 72, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 3, + .width = 64, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 24, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 6, + .width = 72, + .height = 80, + .offsetX = 40, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 50, + .numSubframes = 6, + .width = 72, + .height = 80, + .offsetX = 40, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 56, + .numSubframes = 6, + .width = 72, + .height = 80, + .offsetX = 40, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 62, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 65, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 73, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 81, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 89, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 24, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 97, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 24, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 105, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 24, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 113, + .numSubframes = 8, + .width = 56, + .height = 80, + .offsetX = 24, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 121, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, +}; + +// 723 - 0x0810C688 +static const SpriteOffset spriteDim_810C688[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 17, + .width = 240, + .height = 160, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 17, + .width = 240, + .height = 160, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 17, + .width = 240, + .height = 160, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 51, + .numSubframes = 17, + .width = 240, + .height = 160, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 724 - 0x0810C6B8 +static const SpriteOffset spriteDim_810C6B8[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 54, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 58, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 62, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 66, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 70, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 74, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 725 - 0x0810C790 +static const SpriteOffset spriteDim_810C790[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 726 - 0x0810C79C +static const SpriteOffset spriteDim_810C79C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 727 - 0x0810C7A8 +static const SpriteOffset spriteDim_810C7A8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 728 - 0x0810C7B4 +static const SpriteOffset spriteDim_810C7B4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 729 - 0x0810C7C0 +static const SpriteOffset spriteDim_810C7C0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 24, + .offsetY = 12, + }, +}; + +// 730 - 0x0810C7CC +static const SpriteOffset spriteDim_810C7CC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 52, + }, +}; + +// 731 - 0x0810C7D8 +static const SpriteOffset spriteDim_810C7D8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 732 - 0x0810C808 +static const SpriteOffset spriteDim_810C808[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 733 - 0x0810C838 +static const SpriteOffset spriteDim_810C838[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, +}; + +// 734 - 0x0810C850 +static const SpriteOffset spriteDim_810C850[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, +}; + +// 735 - 0x0810C868 +static const SpriteOffset spriteDim_810C868[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 32, + .offsetY = 16, + }, +}; + +// 736 - 0x0810C880 +static const SpriteOffset spriteDim_810C880[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 120, + .height = 64, + .offsetX = 60, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 120, + .height = 64, + .offsetX = 60, + .offsetY = 32, + }, +}; + +// 737 - 0x0810C898 +static const SpriteOffset spriteDim_810C898[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, +}; + +// 738 - 0x0810C8C8 +static const SpriteOffset spriteDim_810C8C8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 20, + .width = 120, + .height = 120, + .offsetX = 64, + .offsetY = 64, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 11, + .width = 112, + .height = 104, + .offsetX = 56, + .offsetY = 56, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 4, + .width = 128, + .height = 96, + .offsetX = 64, + .offsetY = 48, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 11, + .width = 112, + .height = 112, + .offsetX = 48, + .offsetY = 56, + }, +}; + +// 739 - 0x0810C8F8 +static const SpriteOffset spriteDim_810C8F8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 64, + .height = 72, + .offsetX = 40, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 48, + .offsetY = 32, + }, +}; + +// 740 - 0x0810C910 +static const SpriteOffset spriteDim_810C910[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 112, + .height = 32, + .offsetX = 56, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 7, + .width = 104, + .height = 48, + .offsetX = 56, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 5, + .width = 80, + .height = 48, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 6, + .width = 128, + .height = 48, + .offsetX = 64, + .offsetY = 24, + }, +}; + +// 741 - 0x0810C940 +static const SpriteOffset spriteDim_810C940[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 12, + .width = 168, + .height = 24, + .offsetX = 84, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 12, + .width = 168, + .height = 24, + .offsetX = 84, + .offsetY = 12, + }, +}; + +// 742 - 0x0810C958 +static const SpriteOffset spriteDim_810C958[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 743 - 0x0810C964 +static const SpriteOffset spriteDim_810C964[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 744 - 0x0810C970 +static const SpriteOffset spriteDim_810C970[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 745 - 0x0810C97C +static const SpriteOffset spriteDim_810C97C[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 8, + .offsetY = 12, + }, +}; + +// 746 - 0x0810C9B8 +static const SpriteOffset spriteDim_810C9B8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = -4, + .offsetY = 13, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = -4, + .offsetY = 21, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = -4, + .offsetY = 21, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = -4, + .offsetY = 21, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = -4, + .offsetY = 21, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = -4, + .offsetY = 21, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = -4, + .offsetY = 21, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = -4, + .offsetY = 13, + }, +}; + +// 747 - 0x0810CA18 +static const SpriteOffset spriteDim_810CA18[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = -4, + .offsetY = 37, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = -4, + .offsetY = 37, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -4, + .offsetY = 29, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = -4, + .offsetY = 37, + }, +}; + +// 748 - 0x0810CA48 +static const SpriteOffset spriteDim_810CA48[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 749 - 0x0810CAA8 +static const SpriteOffset spriteDim_810CAA8[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -1, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = -1, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = -1, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = -1, + .offsetY = 22, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = -1, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -1, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -1, + .offsetY = 30, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -1, + .offsetY = 30, + }, +}; + +// 750 - 0x0810CB08 +static const SpriteOffset spriteDim_810CB08[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 751 - 0x0810CB50 +static const SpriteOffset spriteDim_810CB50[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, +}; + +// 752 - 0x0810CBB0 +static const SpriteOffset spriteDim_810CBB0[18] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 4, + .width = 48, + .height = 48, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 16, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 40, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = -4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = -4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 48, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 12, + }, +}; + +// 753 - 0x0810CC88 +static const SpriteOffset spriteDim_810CC88[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 4, + .offsetY = 4, + }, +}; + +// 754 - 0x0810CCB8 +static const SpriteOffset spriteDim_810CCB8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 755 - 0x0810CCE8 +static const SpriteOffset spriteDim_810CCE8[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 756 - 0x0810CD18 +static const SpriteOffset spriteDim_810CD18[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 40, + .offsetY = 8, + }, +}; + +// 757 - 0x0810CD54 +static const SpriteOffset spriteDim_810CD54[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 8, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 40, + .height = 8, + .offsetX = 40, + .offsetY = 8, + }, +}; + +// 758 - 0x0810CD90 +static const SpriteOffset spriteDim_810CD90[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 32, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 32, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 32, + .offsetY = 8, + }, +}; + +// 759 - 0x0810CDCC +static const SpriteOffset spriteDim_810CDCC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 7, + .offsetY = 0, + }, +}; + +// 760 - 0x0810CE08 +static const SpriteOffset spriteDim_810CE08[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 7, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 7, + .offsetY = 0, + }, +}; + +// 761 - 0x0810CE44 +static const SpriteOffset spriteDim_810CE44[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 7, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 7, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 8, + .offsetX = 7, + .offsetY = 0, + }, +}; + +// 762 - 0x0810CE80 +static const SpriteOffset spriteDim_810CE80[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 763 - 0x0810CEE0 +static const SpriteOffset spriteDim_810CEE0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 764 - 0x0810CF1C +static const SpriteOffset spriteDim_810CF1C[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 765 - 0x0810CF64 +static const SpriteOffset spriteDim_810CF64[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 24, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 50, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 32, + .offsetY = 50, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 32, + .offsetY = 50, + }, +}; + +// 766 - 0x0810CFB8 +static const SpriteOffset spriteDim_810CFB8[12] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 767 - 0x0810D048 +static const SpriteOffset spriteDim_810D048[8] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 0, + }, +}; + +// 768 - 0x0810D0A8 +static const SpriteOffset spriteDim_810D0A8[21] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 64, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 16, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 12, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 56, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 3, + .width = 96, + .height = 16, + .offsetX = 48, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 12, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 41, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 44, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 10, + }, + { + .flip = 0x00, + .oamIndex = 49, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 12, + .offsetY = 10, + }, +}; + +// 769 - 0x0810D1A4 +static const SpriteOffset spriteDim_810D1A4[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 6, + .width = 72, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 6, + .width = 80, + .height = 80, + .offsetX = 40, + .offsetY = 80, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 3, + .width = 64, + .height = 80, + .offsetX = 32, + .offsetY = 80, + }, +}; + +// 770 - 0x0810D1D4 +static const SpriteOffset spriteDim_810D1D4[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = -56, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = -80, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = -96, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 771 - 0x0810D21C +static const SpriteOffset spriteDim_810D21C[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -24, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = -56, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = -72, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = -88, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 772 - 0x0810D264 +static const SpriteOffset spriteDim_810D264[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = -16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = -32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = -40, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = -56, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 2, + .width = 24, + .height = 32, + .offsetX = -72, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = -88, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 16, + .height = 32, + .offsetX = -104, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 773 - 0x0810D2D0 +static const SpriteOffset spriteDim_810D2D0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 0, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = -40, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = -80, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 774 - 0x0810D300 +static const SpriteOffset spriteDim_810D300[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 24, + .offsetY = 16, + }, +}; + +// 775 - 0x0810D330 +static const SpriteOffset spriteDim_810D330[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 776 - 0x0810D3B4 +static const SpriteOffset spriteDim_810D3B4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 8, + .height = 120, + .offsetX = 4, + .offsetY = 60, + }, +}; + +// 777 - 0x0810D3C0 +static const SpriteOffset spriteDim_810D3C0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 48, + .offsetY = 8, + }, +}; + +// 778 - 0x0810D3F0 +static const SpriteOffset spriteDim_810D3F0[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 7, + .width = 184, + .height = 16, + .offsetX = 92, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 4, + .width = 128, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, +}; + +// 779 - 0x0810D438 +static const SpriteOffset spriteDim_810D438[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 56, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 56, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 56, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 5, + .width = 160, + .height = 16, + .offsetX = 80, + .offsetY = 8, + }, +}; + +// 780 - 0x0810D480 +static const SpriteOffset spriteDim_810D480[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 16, + .width = 240, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 16, + .width = 240, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 781 - 0x0810D498 +static const SpriteOffset spriteDim_810D498[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 782 - 0x0810D4E0 +static const SpriteOffset spriteDim_810D4E0[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 8, + .offsetX = 6, + .offsetY = 6, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 6, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 6, + .offsetY = 14, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 6, + .offsetY = 14, + }, +}; + +// 783 - 0x0810D510 +static const SpriteOffset spriteDim_810D510[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 56, + .offsetY = 8, + }, +}; + +// 784 - 0x0810D51C +static const SpriteOffset spriteDim_810D51C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 200, + .height = 32, + .offsetX = 100, + .offsetY = 16, + }, +}; + +// 785 - 0x0810D528 +static const SpriteOffset spriteDim_810D528[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 14, + .width = 184, + .height = 24, + .offsetX = 92, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 8, + .width = 104, + .height = 24, + .offsetX = 52, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 10, + .width = 136, + .height = 24, + .offsetX = 68, + .offsetY = 8, + }, +}; + +// 786 - 0x0810D54C +static const SpriteOffset spriteDim_810D54C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, +}; + +// 787 - 0x0810D558 +static const SpriteOffset spriteDim_810D558[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 7, + .width = 184, + .height = 16, + .offsetX = 92, + .offsetY = 8, + }, +}; + +// 788 - 0x0810D564 +static const SpriteOffset spriteDim_810D564[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 789 - 0x0810D588 +static const SpriteOffset spriteDim_810D588[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 790 - 0x0810D5AC +static const SpriteOffset spriteDim_810D5AC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 791 - 0x0810D5B8 +static const SpriteOffset spriteDim_810D5B8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 56, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 792 - 0x0810D5C4 +static const SpriteOffset spriteDim_810D5C4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 80, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 793 - 0x0810D5D0 +static const SpriteOffset spriteDim_810D5D0[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 128, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 794 - 0x0810D5DC +static const SpriteOffset spriteDim_810D5DC[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 8, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 24, + }, +}; + +// 795 - 0x0810D624 +static const SpriteOffset spriteDim_810D624[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 796 - 0x0810D654 +static const SpriteOffset spriteDim_810D654[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 797 - 0x0810D684 +static const SpriteOffset spriteDim_810D684[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 32, + .offsetY = 32, + }, +}; + +// 798 - 0x0810D6D8 +static const SpriteOffset spriteDim_810D6D8[6] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, +}; + +// 799 - 0x0810D720 +static const SpriteOffset spriteDim_810D720[24] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 15, + .offsetY = 15, + }, +}; + +// 800 - 0x0810D840 +static const SpriteOffset spriteDim_810D840[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 801 - 0x0810D8B8 +static const SpriteOffset spriteDim_810D8B8[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 12, + .offsetY = 12, + }, +}; + +// 804 - 0x0810D8D0 +static const SpriteOffset spriteDim_810D8D0[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 16, + .offsetY = 16, + }, +}; + +// 805 - 0x0810D90C +static const SpriteOffset spriteDim_810D90C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 24, + .height = 24, + .offsetX = 12, + .offsetY = 32, + }, +}; + +// 806 - 0x0810D93C +static const SpriteOffset spriteDim_810D93C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = -8, + .offsetY = -8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = -8, + .offsetY = -8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = -8, + .offsetY = -8, + }, +}; + +// 807 - 0x0810D960 +static const SpriteOffset spriteDim_810D960[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 808 - 0x0810D9CC +static const SpriteOffset spriteDim_810D9CC[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 6, + .width = 56, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 10, + .width = 136, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 152, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 14, + .width = 224, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 809 - 0x0810DA08 +static const SpriteOffset spriteDim_810DA08[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 128, + .height = 48, + .offsetX = 64, + .offsetY = 24, + }, +}; + +// 810 - 0x0810DA14 +static const SpriteOffset spriteDim_810DA14[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 80, + .height = 32, + .offsetX = 40, + .offsetY = 16, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 128, + .height = 32, + .offsetX = 64, + .offsetY = 16, + }, +}; + +// 811 - 0x0810DA2C +static const SpriteOffset spriteDim_810DA2C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 160, + .height = 32, + .offsetX = 80, + .offsetY = 16, + }, +}; + +// 812 - 0x0810DA38 +static const SpriteOffset spriteDim_810DA38[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 152, + .height = 16, + .offsetX = 76, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 60, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 8, + }, +}; + +// 813 - 0x0810DA5C +static const SpriteOffset spriteDim_810DA5C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 80, + .height = 48, + .offsetX = 40, + .offsetY = 24, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 5, + .width = 80, + .height = 48, + .offsetX = 40, + .offsetY = 24, + }, +}; + +// 816 - 0x0810DA74 +static const SpriteOffset spriteDim_810DA74[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 817 - 0x0810DA80 +static const SpriteOffset spriteDim_810DA80[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 818 - 0x0810DA8C +static const SpriteOffset spriteDim_810DA8C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 819 - 0x0810DA98 +static const SpriteOffset spriteDim_810DA98[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 820 - 0x0810DAA4 +static const SpriteOffset spriteDim_810DAA4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 853 - 0x0810DAB0 +static const SpriteOffset spriteDim_810DAB0[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 3, + .width = 64, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, +}; + +// 854 - 0x0810DB04 +static const SpriteOffset spriteDim_810DB04[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 72, + .offsetX = 16, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 32, + .height = 72, + .offsetX = 16, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 37, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 53, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 61, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 66, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 71, + .numSubframes = 5, + .width = 48, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 76, + .numSubframes = 8, + .width = 56, + .height = 72, + .offsetX = 24, + .offsetY = 72, + }, +}; + +// 855 - 0x0810DBB8 +static const SpriteOffset spriteDim_810DBB8[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 9, + .width = 88, + .height = 72, + .offsetX = 54, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 6, + .width = 80, + .height = 72, + .offsetX = 46, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 6, + .width = 80, + .height = 72, + .offsetX = 46, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 9, + .width = 88, + .height = 72, + .offsetX = 54, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 6, + .width = 80, + .height = 72, + .offsetX = 46, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 9, + .width = 88, + .height = 72, + .offsetX = 54, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 9, + .width = 88, + .height = 72, + .offsetX = 54, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 54, + .numSubframes = 9, + .width = 88, + .height = 72, + .offsetX = 54, + .offsetY = 72, + }, + { + .flip = 0x00, + .oamIndex = 63, + .numSubframes = 3, + .width = 64, + .height = 72, + .offsetX = 32, + .offsetY = 72, + }, +}; + +// 856 - 0x0810DC24 +static const SpriteOffset spriteDim_810DC24[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 16, + .offsetY = 64, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 64, + .offsetX = 16, + .offsetY = 64, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 64, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 64, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 3, + .width = 48, + .height = 64, + .offsetX = 24, + .offsetY = 64, + }, +}; + +// 857 - 0x0810DC60 +static const SpriteOffset spriteDim_810DC60[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 858 - 0x0810DC6C +static const SpriteOffset spriteDim_810DC6C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 56, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 859 - 0x0810DC9C +static const SpriteOffset spriteDim_810DC9C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 860 - 0x0810DCA8 +static const SpriteOffset spriteDim_810DCA8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 861 - 0x0810DCB4 +static const SpriteOffset spriteDim_810DCB4[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 52, + .offsetY = 8, + }, +}; + +// 862 - 0x0810DCE4 +static const SpriteOffset spriteDim_810DCE4[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 128, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, +}; + +// 863 - 0x0810DD14 +static const SpriteOffset spriteDim_810DD14[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 3, + .width = 96, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 5, + .width = 144, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 32, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 32, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 34, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, +}; + +// 864 - 0x0810DDBC +static const SpriteOffset spriteDim_810DDBC[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 44, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 10, + .width = 136, + .height = 24, + .offsetX = 68, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 52, + .offsetY = 8, + }, +}; + +// 865 - 0x0810DDE0 +static const SpriteOffset spriteDim_810DDE0[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 32, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 3, + .width = 96, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, +}; + +// 866 - 0x0810DDF8 +static const SpriteOffset spriteDim_810DDF8[15] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 32, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 27, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 29, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, +}; + +// 867 - 0x0810DEAC +static const SpriteOffset spriteDim_810DEAC[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 868 - 0x0810DEB8 +static const SpriteOffset spriteDim_810DEB8[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 869 - 0x0810DEDC +static const SpriteOffset spriteDim_810DEDC[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 870 - 0x0810DF00 +static const SpriteOffset spriteDim_810DF00[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 8, + .offsetX = 3, + .offsetY = 4, + }, +}; + +// 871 - 0x0810DF24 +static const SpriteOffset spriteDim_810DF24[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, +}; + +// 872 - 0x0810DF30 +static const SpriteOffset spriteDim_810DF30[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 873 - 0x0810DF3C +static const SpriteOffset spriteDim_810DF3C[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, +}; + +// 874 - 0x0810DF48 +static const SpriteOffset spriteDim_810DF48[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 96, + .height = 64, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 875 - 0x0810DF54 +static const SpriteOffset spriteDim_810DF54[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 32, + .offsetX = 40, + .offsetY = 32, + }, +}; + +// 876 - 0x0810DF60 +static const SpriteOffset spriteDim_810DF60[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 64, + .offsetX = 40, + .offsetY = 40, + }, +}; + +// 877 - 0x0810DF6C +static const SpriteOffset spriteDim_810DF6C[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 144, + .height = 64, + .offsetX = 72, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 144, + .height = 64, + .offsetX = 72, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 144, + .height = 64, + .offsetX = 72, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 144, + .height = 64, + .offsetX = 72, + .offsetY = 32, + }, +}; + +// 878 - 0x0810DF9C +static const SpriteOffset spriteDim_810DF9C[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 72, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, +}; + +// 879 - 0x0810DFC0 +static const SpriteOffset spriteDim_810DFC0[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 12, + .width = 184, + .height = 40, + .offsetX = 92, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 11, + .width = 208, + .height = 40, + .offsetX = 104, + .offsetY = 20, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 9, + .width = 192, + .height = 40, + .offsetX = 96, + .offsetY = 20, + }, +}; + +// 880 - 0x0810DFE4 +static const SpriteOffset spriteDim_810DFE4[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 160, + .height = 16, + .offsetX = 160, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 5, + .width = 136, + .height = 16, + .offsetX = 136, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 6, + .width = 168, + .height = 16, + .offsetX = 168, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 5, + .width = 144, + .height = 16, + .offsetX = 144, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 5, + .width = 144, + .height = 16, + .offsetX = 144, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 5, + .width = 136, + .height = 16, + .offsetX = 136, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 5, + .width = 144, + .height = 16, + .offsetX = 144, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 64, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 38, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 120, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 46, + .numSubframes = 6, + .width = 152, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 52, + .numSubframes = 3, + .width = 96, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, +}; + +// 881 - 0x0810E080 +static const SpriteOffset spriteDim_810E080[12] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 64, + .height = 24, + .offsetX = 64, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 6, + .width = 56, + .height = 24, + .offsetX = 56, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 25, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 31, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, +}; + +// 882 - 0x0810E110 +static const SpriteOffset spriteDim_810E110[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, +}; + +// 883 - 0x0810E128 +static const SpriteOffset spriteDim_810E128[13] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 120, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 128, + .height = 16, + .offsetX = 128, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 120, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 120, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 5, + .width = 136, + .height = 16, + .offsetX = 136, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 104, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 5, + .width = 136, + .height = 16, + .offsetX = 136, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 35, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 88, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 42, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 45, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 48, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, +}; + +// 884 - 0x0810E1C4 +static const SpriteOffset spriteDim_810E1C4[5] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 3, + .width = 96, + .height = 16, + .offsetX = 48, + .offsetY = 8, + }, +}; + +// 885 - 0x0810E200 +static const SpriteOffset spriteDim_810E200[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 44, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 52, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, +}; + +// 886 - 0x0810E284 +static const SpriteOffset spriteDim_810E284[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 887 - 0x0810E290 +static const SpriteOffset spriteDim_810E290[19] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 33, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 39, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 43, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 47, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 51, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 55, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 58, + .numSubframes = 3, + .width = 64, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 61, + .numSubframes = 6, + .width = 56, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 67, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 71, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 75, + .numSubframes = 4, + .width = 48, + .height = 40, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 888 - 0x0810E374 +static const SpriteOffset spriteDim_810E374[12] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 30, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 36, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 42, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 48, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 54, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 60, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 66, + .numSubframes = 6, + .width = 40, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 889 - 0x0810E404 +static const SpriteOffset spriteDim_810E404[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 48, + .height = 56, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 890 - 0x0810E410 +static const SpriteOffset spriteDim_810E410[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 96, + .height = 16, + .offsetX = 48, + .offsetY = 6, + }, +}; + +// 891 - 0x0810E41C +static const SpriteOffset spriteDim_810E41C[10] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 160, + .height = 16, + .offsetX = 80, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 4, + .width = 112, + .height = 16, + .offsetX = 56, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 8, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 2, + .width = 32, + .height = 24, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 892 - 0x0810E494 +static const SpriteOffset spriteDim_810E494[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 168, + .height = 16, + .offsetX = 84, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 168, + .height = 16, + .offsetX = 84, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, +}; + +// 893 - 0x0810E4C4 +static const SpriteOffset spriteDim_810E4C4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 7, + .width = 184, + .height = 16, + .offsetX = 92, + .offsetY = 8, + }, +}; + +// 894 - 0x0810E4D0 +static const SpriteOffset spriteDim_810E4D0[9] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 48, + .height = 24, + .offsetX = 48, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 88, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 128, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 4, + .width = 40, + .height = 24, + .offsetX = 0, + .offsetY = 12, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 23, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 0, + .offsetY = 8, + }, +}; + +// 895 - 0x0810E53C +static const SpriteOffset spriteDim_810E53C[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 40, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 3, + .width = 80, + .height = 16, + .offsetX = 80, + .offsetY = 8, + }, +}; + +// 896 - 0x0810E554 +static const SpriteOffset spriteDim_810E554[14] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 12, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 16, + .height = 16, + .offsetX = 4, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, +}; + +// 897 - 0x0810E5FC +static const SpriteOffset spriteDim_810E5FC[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 152, + .height = 16, + .offsetX = 152, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 5, + .width = 160, + .height = 16, + .offsetX = 160, + .offsetY = 8, + }, +}; + +// 898 - 0x0810E614 +static const SpriteOffset spriteDim_810E614[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 48, + .height = 32, + .offsetX = 16, + .offsetY = 32, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 2, + .width = 32, + .height = 40, + .offsetX = 16, + .offsetY = 40, + }, +}; + +// 899 - 0x0810E644 +static const SpriteOffset spriteDim_810E644[11] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 88, + .height = 16, + .offsetX = 44, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 3, + .width = 72, + .height = 16, + .offsetX = 36, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 2, + .width = 64, + .height = 16, + .offsetX = 28, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 4, + .width = 104, + .height = 16, + .offsetX = 52, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 22, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 24, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 26, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 28, + .numSubframes = 2, + .width = 40, + .height = 16, + .offsetX = 20, + .offsetY = 8, + }, +}; + +// 900 - 0x0810E6C8 +static const SpriteOffset spriteDim_810E6C8[3] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 12, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 2, + .width = 24, + .height = 16, + .offsetX = 12, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 3, + .width = 56, + .height = 16, + .offsetX = 28, + .offsetY = 8, + }, +}; + +// 901 - 0x0810E6EC +static const SpriteOffset spriteDim_810E6EC[2] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 5, + .width = 136, + .height = 16, + .offsetX = 136, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 5, + .width = 120, + .height = 16, + .offsetX = 120, + .offsetY = 8, + }, +}; + +// 902 - 0x0810E704 +static const SpriteOffset spriteDim_810E704[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 6, + .width = 168, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 6, + .width = 176, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 6, + .width = 176, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 5, + .width = 160, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 903 - 0x0810E734 +static const SpriteOffset spriteDim_810E734[4] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 3, + .width = 96, + .height = 8, + .offsetX = 96, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 4, + .width = 104, + .height = 8, + .offsetX = 104, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 3, + .width = 96, + .height = 8, + .offsetX = 96, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 4, + .width = 88, + .height = 8, + .offsetX = 88, + .offsetY = 0, + }, +}; + +// 904 - 0x0810E764 +static const SpriteOffset spriteDim_810E764[7] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 2, + .width = 48, + .height = 16, + .offsetX = 24, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 32, + .height = 16, + .offsetX = 16, + .offsetY = 8, + }, +}; + +// 905 - 0x0810E7B8 +static const SpriteOffset spriteDim_810E7B8[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 4, + .width = 64, + .height = 24, + .offsetX = 32, + .offsetY = 12, + }, +}; + +// 906 - 0x0810E7C4 +static const SpriteOffset spriteDim_810E7C4[1] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 64, + .height = 32, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 907 - 0x0810E7D0 +static const SpriteOffset spriteDim_810E7D0[22] = { + { + .flip = 0x00, + .oamIndex = 0, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 1, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 2, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 3, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 4, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 5, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 6, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 7, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 8, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 9, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 10, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 11, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 12, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 13, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 14, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 15, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 16, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 17, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 18, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 19, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 20, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, + { + .flip = 0x00, + .oamIndex = 21, + .numSubframes = 1, + .width = 8, + .height = 16, + .offsetX = 0, + .offsetY = 0, + }, +}; + +// 0x0810E8D8 +const SpriteOffset *const gSpriteDimensions[908] = { + /* 000 */ spriteDim_8102DAC, + /* 001 */ spriteDim_8102E48, + /* 002 */ spriteDim_8102F20, + /* 003 */ spriteDim_8102F5C, + /* 004 */ spriteDim_8102F8C, + /* 005 */ spriteDim_8102FEC, + /* 006 */ spriteDim_810301C, + /* 007 */ spriteDim_8103034, + /* 008 */ spriteDim_8103064, + /* 009 */ spriteDim_8103094, + /* 010 */ spriteDim_81030B8, + /* 011 */ spriteDim_810316C, + /* 012 */ spriteDim_81031F0, + /* 013 */ spriteDim_810325C, + /* 014 */ spriteDim_81032D4, + NULL, + NULL, + /* 017 */ spriteDim_810334C, + /* 018 */ spriteDim_8103364, + /* 019 */ spriteDim_81033C4, + NULL, + /* 021 */ spriteDim_8103400, + /* 022 */ spriteDim_810343C, + /* 023 */ spriteDim_81034F0, + /* 024 */ spriteDim_81035BC, + /* 025 */ spriteDim_8103604, + /* 026 */ spriteDim_8103634, + /* 027 */ spriteDim_81036A0, + /* 028 */ spriteDim_8103778, + /* 029 */ spriteDim_8103838, + /* 030 */ spriteDim_810385C, + /* 031 */ spriteDim_81038E0, + /* 032 */ spriteDim_8103988, + /* 033 */ spriteDim_81039DC, + /* 034 */ spriteDim_8103A00, + /* 035 */ spriteDim_8103A60, + /* 036 */ spriteDim_8103AD8, + /* 037 */ spriteDim_8103BF8, + /* 038 */ spriteDim_8103C58, + /* 039 */ spriteDim_8103C94, + /* 040 */ spriteDim_8103CC4, + /* 041 */ spriteDim_8103DB4, + /* 042 */ spriteDim_8103DF0, + /* 043 */ spriteDim_8103E50, + /* 044 */ spriteDim_8103E74, + /* 045 */ spriteDim_8103EA4, + NULL, + NULL, + NULL, + /* 049 */ spriteDim_8103F4C, + /* 050 */ spriteDim_8103FC4, + /* 051 */ spriteDim_81040B4, + /* 052 */ spriteDim_81040E4, + /* 053 */ spriteDim_8104168, + NULL, + /* 055 */ spriteDim_81041B0, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* 081 */ spriteDim_81041E0, + /* 082 */ spriteDim_8104210, + /* 083 */ spriteDim_8104240, + /* 084 */ spriteDim_8104270, + /* 085 */ spriteDim_81042A0, + /* 086 */ spriteDim_81042B8, + /* 087 */ spriteDim_81042DC, + /* 088 */ spriteDim_81042F4, + /* 089 */ spriteDim_8104330, + NULL, + /* 091 */ spriteDim_810436C, + NULL, + /* 093 */ spriteDim_8104384, + NULL, + NULL, + /* 096 */ spriteDim_81043E4, + /* 097 */ spriteDim_8104414, + /* 098 */ spriteDim_8104438, + /* 099 */ spriteDim_8104444, + /* 100 */ spriteDim_81044C8, + /* 101 */ spriteDim_81045F4, + /* 102 */ spriteDim_810463C, + /* 103 */ spriteDim_81046D8, + /* 104 */ spriteDim_810475C, + /* 105 */ spriteDim_81047E0, + /* 106 */ spriteDim_81047F8, + /* 107 */ spriteDim_8104828, + /* 108 */ spriteDim_81048B8, + /* 109 */ spriteDim_81048E8, + /* 110 */ spriteDim_810499C, + /* 111 */ spriteDim_8104A20, + /* 112 */ spriteDim_8104A8C, + /* 113 */ spriteDim_8104B04, + NULL, + NULL, + /* 116 */ spriteDim_8104B70, + /* 117 */ spriteDim_8104B88, + /* 118 */ spriteDim_8104BE8, + NULL, + /* 120 */ spriteDim_8104C24, + /* 121 */ spriteDim_8104C60, + /* 122 */ spriteDim_8104CF0, + /* 123 */ spriteDim_8104E40, + /* 124 */ spriteDim_8104EDC, + /* 125 */ spriteDim_8104F0C, + /* 126 */ spriteDim_8104F78, + /* 127 */ spriteDim_8105050, + /* 128 */ spriteDim_8105110, + /* 129 */ spriteDim_8105134, + /* 130 */ spriteDim_81051B8, + /* 131 */ spriteDim_8105224, + /* 132 */ spriteDim_8105284, + /* 133 */ spriteDim_81052FC, + /* 134 */ spriteDim_810535C, + /* 135 */ spriteDim_8105434, + /* 136 */ spriteDim_8105554, + /* 137 */ spriteDim_81055B4, + /* 138 */ spriteDim_81055F0, + /* 139 */ spriteDim_8105680, + /* 140 */ spriteDim_8105770, + /* 141 */ spriteDim_81057B8, + /* 142 */ spriteDim_8105818, + NULL, + NULL, + /* 145 */ spriteDim_810583C, + /* 146 */ spriteDim_81058A8, + /* 147 */ spriteDim_81058C0, + NULL, + /* 149 */ spriteDim_810592C, + NULL, + NULL, + NULL, + NULL, + NULL, + /* 155 */ spriteDim_8105998, + /* 156 */ spriteDim_8105A1C, + /* 157 */ spriteDim_8105A34, + /* 158 */ spriteDim_8105AAC, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* 180 */ spriteDim_8105B00, + /* 181 */ spriteDim_8105B24, + /* 182 */ spriteDim_8105B48, + NULL, + /* 184 */ spriteDim_8105B6C, + /* 185 */ spriteDim_8105B84, + /* 186 */ spriteDim_8105BA8, + /* 187 */ spriteDim_8105C08, + /* 188 */ spriteDim_8105C44, + NULL, + /* 190 */ spriteDim_8105C74, + /* 191 */ spriteDim_8105C8C, + /* 192 */ spriteDim_8105CC8, + NULL, + NULL, + /* 195 */ spriteDim_8105D28, + /* 196 */ spriteDim_8105D58, + /* 197 */ spriteDim_8105D7C, + /* 198 */ spriteDim_8105D88, + /* 199 */ spriteDim_8105DB8, + /* 200 */ spriteDim_8105E60, + /* 201 */ spriteDim_8105EFC, + /* 202 */ spriteDim_8105F20, + /* 203 */ spriteDim_8105F50, + /* 204 */ spriteDim_8105FB0, + /* 205 */ spriteDim_8106010, + /* 206 */ spriteDim_8106028, + /* 207 */ spriteDim_8106058, + /* 208 */ spriteDim_8106088, + /* 209 */ spriteDim_81060B8, + /* 210 */ spriteDim_8106178, + /* 211 */ spriteDim_81061FC, + /* 212 */ spriteDim_8106268, + /* 213 */ spriteDim_81062C8, + NULL, + NULL, + /* 216 */ spriteDim_8106328, + /* 217 */ spriteDim_8106340, + /* 218 */ spriteDim_81063A0, + NULL, + /* 220 */ spriteDim_81063DC, + /* 221 */ spriteDim_8106418, + /* 222 */ spriteDim_81064D8, + /* 223 */ spriteDim_8106598, + /* 224 */ spriteDim_8106640, + /* 225 */ spriteDim_8106670, + /* 226 */ spriteDim_81066DC, + /* 227 */ spriteDim_81067B4, + /* 228 */ spriteDim_8106868, + /* 229 */ spriteDim_810688C, + /* 230 */ spriteDim_8106910, + /* 231 */ spriteDim_81069B8, + /* 232 */ spriteDim_8106A0C, + /* 233 */ spriteDim_8106A30, + /* 234 */ spriteDim_8106A90, + /* 235 */ spriteDim_8106AF0, + /* 236 */ spriteDim_8106C10, + /* 237 */ spriteDim_8106C70, + /* 238 */ spriteDim_8106CAC, + /* 239 */ spriteDim_8106CDC, + /* 240 */ spriteDim_8106DCC, + /* 241 */ spriteDim_8106E14, + /* 242 */ spriteDim_8106E74, + NULL, + NULL, + /* 245 */ spriteDim_8106E98, + /* 246 */ spriteDim_8106EE0, + NULL, + NULL, + /* 249 */ spriteDim_8106F10, + /* 250 */ spriteDim_8106F70, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* 260 */ spriteDim_8107054, + /* 261 */ spriteDim_810706C, + /* 262 */ spriteDim_810709C, + /* 263 */ spriteDim_81070B4, + /* 264 */ spriteDim_8107138, + /* 265 */ spriteDim_810715C, + NULL, + NULL, + NULL, + /* 269 */ spriteDim_8107204, + /* 270 */ spriteDim_810724C, + /* 271 */ spriteDim_8107264, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* 280 */ spriteDim_81072AC, + /* 281 */ spriteDim_81072DC, + /* 282 */ spriteDim_810730C, + NULL, + /* 284 */ spriteDim_810733C, + /* 285 */ spriteDim_8107354, + /* 286 */ spriteDim_8107378, + /* 287 */ spriteDim_8107390, + /* 288 */ spriteDim_81073CC, + NULL, + NULL, + NULL, + /* 292 */ spriteDim_81073FC, + NULL, + NULL, + /* 295 */ spriteDim_810745C, + /* 296 */ spriteDim_810748C, + /* 297 */ spriteDim_81074B0, + /* 298 */ spriteDim_81074BC, + /* 299 */ spriteDim_8107540, + /* 300 */ spriteDim_81076B4, + /* 301 */ spriteDim_81076F0, + /* 302 */ spriteDim_810772C, + /* 303 */ spriteDim_81077B0, + /* 304 */ spriteDim_81077F8, + /* 305 */ spriteDim_8107810, + /* 306 */ spriteDim_8107840, + /* 307 */ spriteDim_8107870, + /* 308 */ spriteDim_81078A0, + /* 309 */ spriteDim_8107954, + /* 310 */ spriteDim_81079D8, + /* 311 */ spriteDim_8107A44, + /* 312 */ spriteDim_8107AB0, + NULL, + NULL, + /* 315 */ spriteDim_8107B1C, + /* 316 */ spriteDim_8107840, + /* 317 */ spriteDim_8107B34, + NULL, + /* 319 */ spriteDim_8107B64, + /* 320 */ spriteDim_8107BA0, + /* 321 */ spriteDim_8107C54, + /* 322 */ spriteDim_8107DBC, + /* 323 */ spriteDim_8107E34, + /* 324 */ spriteDim_8107E64, + /* 325 */ spriteDim_8107ED0, + /* 326 */ spriteDim_8107FA8, + /* 327 */ spriteDim_8108068, + /* 328 */ spriteDim_810808C, + /* 329 */ spriteDim_8108110, + /* 330 */ spriteDim_81081B8, + /* 331 */ spriteDim_810820C, + /* 332 */ spriteDim_8108254, + /* 333 */ spriteDim_81082B4, + /* 334 */ spriteDim_810835C, + /* 335 */ spriteDim_810847C, + /* 336 */ spriteDim_81084DC, + /* 337 */ spriteDim_8108518, + /* 338 */ spriteDim_8108548, + /* 339 */ spriteDim_8108638, + /* 340 */ spriteDim_8108680, + /* 341 */ spriteDim_81086E0, + /* 342 */ spriteDim_8108704, + /* 343 */ spriteDim_8108734, + NULL, + NULL, + NULL, + NULL, + /* 348 */ spriteDim_81087AC, + NULL, + NULL, + NULL, + NULL, + /* 353 */ spriteDim_8108860, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + /* 373 */ spriteDim_8108938, + /* 374 */ spriteDim_81089EC, + /* 375 */ spriteDim_8108A64, + /* 376 */ spriteDim_8108B00, + /* 377 */ spriteDim_8108BA8, + /* 378 */ spriteDim_8107840, + /* 379 */ spriteDim_8108C44, + /* 380 */ spriteDim_8108C68, + /* 381 */ spriteDim_8108C8C, + NULL, + /* 383 */ spriteDim_8108CB0, + /* 384 */ spriteDim_8108CC8, + /* 385 */ spriteDim_8108CEC, + /* 386 */ spriteDim_8108D04, + /* 387 */ spriteDim_8108D28, + NULL, + NULL, + NULL, + /* 391 */ spriteDim_8108D58, + /* 392 */ spriteDim_8108DB8, + /* 393 */ spriteDim_8108DE8, + /* 394 */ spriteDim_8108E0C, + NULL, + /* 396 */ spriteDim_8108E84, + /* 397 */ spriteDim_8108E90, + /* 398 */ spriteDim_8108EB4, + /* 399 */ spriteDim_8108F68, + /* 400 */ spriteDim_8108FD4, + /* 401 */ spriteDim_8109028, + /* 402 */ spriteDim_8109070, + /* 403 */ spriteDim_81090A0, + /* 404 */ spriteDim_81090DC, + /* 405 */ spriteDim_8109118, + /* 406 */ spriteDim_8109160, + /* 407 */ spriteDim_81091A8, + /* 408 */ spriteDim_81091D8, + /* 409 */ spriteDim_81091E4, + /* 410 */ spriteDim_81091F0, + /* 411 */ spriteDim_8109208, + /* 412 */ spriteDim_8109238, + /* 413 */ spriteDim_8109268, + /* 414 */ spriteDim_81092A4, + /* 415 */ spriteDim_81092BC, + /* 416 */ spriteDim_81092EC, + /* 417 */ spriteDim_8109328, + /* 418 */ spriteDim_8109370, + /* 419 */ spriteDim_81093A0, + /* 420 */ spriteDim_81093B8, + /* 421 */ spriteDim_81093C4, + /* 422 */ spriteDim_81093D0, + /* 423 */ spriteDim_810940C, + /* 424 */ spriteDim_8109448, + /* 425 */ spriteDim_810946C, + /* 426 */ spriteDim_81094B4, + /* 427 */ spriteDim_81094F0, + /* 428 */ spriteDim_81094FC, + /* 429 */ spriteDim_8109508, + /* 430 */ spriteDim_8109520, + /* 431 */ spriteDim_8109580, + /* 432 */ spriteDim_81095A4, + /* 433 */ spriteDim_81095E0, + /* 434 */ spriteDim_810961C, + /* 435 */ spriteDim_810964C, + /* 436 */ spriteDim_8109664, + /* 437 */ spriteDim_810967C, + /* 438 */ spriteDim_81096A0, + /* 439 */ spriteDim_81096C4, + /* 440 */ spriteDim_81096E8, + /* 441 */ spriteDim_810970C, + /* 442 */ spriteDim_8109730, + /* 443 */ spriteDim_8109754, + /* 444 */ spriteDim_8109778, + /* 445 */ spriteDim_810979C, + /* 446 */ spriteDim_81097C0, + /* 447 */ spriteDim_81097E4, + /* 448 */ spriteDim_8109808, + /* 449 */ spriteDim_810982C, + /* 450 */ spriteDim_8109850, + /* 451 */ spriteDim_8109874, + /* 452 */ spriteDim_8109898, + /* 453 */ spriteDim_81098EC, + /* 454 */ spriteDim_8109940, + /* 455 */ spriteDim_8109970, + /* 456 */ spriteDim_8109A60, + /* 457 */ spriteDim_8109A6C, + /* 458 */ spriteDim_8109A9C, + /* 459 */ spriteDim_8109AA8, + /* 460 */ spriteDim_8109AB4, + /* 461 */ spriteDim_8109AC0, + /* 462 */ spriteDim_8109B14, + /* 463 */ spriteDim_8109B20, + /* 464 */ spriteDim_8109B2C, + /* 465 */ spriteDim_8109B50, + /* 466 */ spriteDim_8109BBC, + /* 467 */ spriteDim_8109BC8, + /* 468 */ spriteDim_8109C1C, + /* 469 */ spriteDim_8109C58, + /* 470 */ spriteDim_8109CA0, + /* 471 */ spriteDim_8109CDC, + /* 472 */ spriteDim_8109D48, + /* 473 */ spriteDim_8109D6C, + /* 474 */ spriteDim_8109D90, + /* 475 */ spriteDim_8109DB4, + /* 476 */ spriteDim_8109DC0, + /* 477 */ spriteDim_8109DCC, + /* 478 */ spriteDim_8109DD8, + /* 479 */ spriteDim_8109E20, + /* 480 */ spriteDim_8109E8C, + /* 481 */ spriteDim_8109EF8, + /* 482 */ spriteDim_8109F64, + /* 483 */ spriteDim_8109FA0, + /* 484 */ spriteDim_8109FDC, + /* 485 */ spriteDim_8109FE8, + /* 486 */ spriteDim_8109FF4, + /* 487 */ spriteDim_810A00C, + /* 488 */ spriteDim_810A024, + /* 489 */ spriteDim_810A030, + /* 490 */ spriteDim_810A03C, + /* 491 */ spriteDim_810A048, + /* 492 */ spriteDim_810A054, + /* 493 */ spriteDim_810A234, + /* 494 */ spriteDim_810A240, + /* 495 */ spriteDim_810A24C, + /* 496 */ spriteDim_810A258, + /* 497 */ spriteDim_810A2A0, + /* 498 */ spriteDim_810A2E8, + /* 499 */ spriteDim_810A318, + /* 500 */ spriteDim_810A2E8, + /* 501 */ spriteDim_810A324, + /* 502 */ spriteDim_810A378, + /* 503 */ spriteDim_810A384, + /* 504 */ spriteDim_810A3A8, + /* 505 */ spriteDim_810A3C0, + /* 506 */ spriteDim_810A414, + /* 507 */ spriteDim_810A420, + /* 508 */ spriteDim_810A42C, + /* 509 */ spriteDim_810A45C, + /* 510 */ spriteDim_810A48C, + /* 511 */ spriteDim_810A498, + /* 512 */ spriteDim_810A4BC, + /* 513 */ spriteDim_810A4E0, + /* 514 */ spriteDim_810A4EC, + /* 515 */ spriteDim_810A504, + /* 516 */ spriteDim_810A534, + /* 517 */ spriteDim_810A594, + /* 518 */ spriteDim_810A5A0, + /* 519 */ spriteDim_810A5AC, + /* 520 */ spriteDim_810A5B8, + /* 521 */ spriteDim_810A5C4, + /* 522 */ spriteDim_810A5D0, + /* 523 */ spriteDim_810A600, + /* 524 */ spriteDim_810A60C, + /* 525 */ spriteDim_810A618, + /* 526 */ spriteDim_810A624, + /* 527 */ spriteDim_810A660, + /* 528 */ spriteDim_810A66C, + /* 529 */ spriteDim_810A678, + /* 530 */ spriteDim_810A684, + /* 531 */ spriteDim_810A690, + /* 532 */ spriteDim_810A69C, + /* 533 */ spriteDim_810A6F0, + /* 534 */ spriteDim_810A708, + /* 535 */ spriteDim_810A714, + /* 536 */ spriteDim_810A720, + /* 537 */ spriteDim_810A72C, + /* 538 */ spriteDim_810A738, + /* 539 */ spriteDim_810A744, + /* 540 */ spriteDim_810A750, + /* 541 */ spriteDim_810A78C, + /* 542 */ spriteDim_810A798, + /* 543 */ spriteDim_810A7C8, + /* 544 */ spriteDim_810A7D4, + /* 545 */ spriteDim_810A7E0, + /* 546 */ spriteDim_810A7F8, + /* 547 */ spriteDim_810A810, + /* 548 */ spriteDim_810A81C, + /* 549 */ spriteDim_810A828, + /* 550 */ spriteDim_810A834, + /* 551 */ spriteDim_810A840, + /* 552 */ spriteDim_810A84C, + /* 553 */ spriteDim_810A870, + /* 554 */ spriteDim_810A87C, + /* 555 */ spriteDim_810A888, + /* 556 */ spriteDim_810A894, + /* 557 */ spriteDim_810A8A0, + /* 558 */ spriteDim_810A8AC, + /* 559 */ spriteDim_810A8DC, + /* 560 */ spriteDim_810A8E8, + /* 561 */ spriteDim_810A900, + /* 562 */ spriteDim_810A924, + /* 563 */ spriteDim_810A948, + /* 564 */ spriteDim_810A96C, + /* 565 */ spriteDim_810A9CC, + /* 566 */ spriteDim_810AA2C, + /* 567 */ spriteDim_810AA8C, + /* 568 */ spriteDim_810AB04, + /* 569 */ spriteDim_810AB28, + /* 570 */ spriteDim_810AB34, + /* 571 */ spriteDim_810AB58, + /* 572 */ spriteDim_810AB7C, + /* 573 */ spriteDim_810ABB8, + /* 574 */ spriteDim_810ABC4, + /* 575 */ spriteDim_810ABD0, + /* 576 */ spriteDim_810ABF4, + /* 577 */ spriteDim_810AC00, + /* 578 */ spriteDim_810AC0C, + /* 579 */ spriteDim_810AC18, + /* 580 */ spriteDim_810AC24, + /* 581 */ spriteDim_810AC30, + /* 582 */ spriteDim_810AC60, + /* 583 */ spriteDim_810AC9C, + /* 584 */ spriteDim_810ACA8, + /* 585 */ spriteDim_810ACD8, + /* 586 */ spriteDim_810AD08, + /* 587 */ spriteDim_810AD38, + /* 588 */ spriteDim_810AD68, + /* 589 */ spriteDim_810ADB0, + /* 590 */ spriteDim_810ADF8, + /* 591 */ spriteDim_810AE58, + /* 592 */ spriteDim_810AEB8, + /* 593 */ spriteDim_810AEC4, + /* 594 */ spriteDim_810AEF4, + /* 595 */ spriteDim_810AF00, + /* 596 */ spriteDim_810AF0C, + /* 597 */ spriteDim_810AF18, + /* 598 */ spriteDim_810AF48, + /* 599 */ spriteDim_810AF54, + /* 600 */ spriteDim_810AF60, + /* 601 */ spriteDim_810AF6C, + /* 602 */ spriteDim_810AF78, + /* 603 */ spriteDim_810AF84, + /* 604 */ spriteDim_810AFB4, + /* 605 */ spriteDim_810AFE4, + /* 606 */ spriteDim_810AFF0, + /* 607 */ spriteDim_810AFFC, + /* 608 */ spriteDim_810B020, + /* 609 */ spriteDim_810B02C, + /* 610 */ spriteDim_810B038, + /* 611 */ spriteDim_810B074, + /* 612 */ spriteDim_810B0B0, + /* 613 */ spriteDim_810B0BC, + /* 614 */ spriteDim_810B0C8, + /* 615 */ spriteDim_810B0D4, + /* 616 */ spriteDim_810B0E0, + /* 617 */ spriteDim_810B0EC, + /* 618 */ spriteDim_810B0F8, + /* 619 */ spriteDim_810B134, + /* 620 */ spriteDim_810B140, + /* 621 */ spriteDim_810B188, + /* 622 */ spriteDim_810B194, + /* 623 */ spriteDim_810B1D0, + /* 624 */ spriteDim_810B1DC, + /* 625 */ spriteDim_810B20C, + /* 626 */ spriteDim_810B224, + /* 627 */ spriteDim_810B230, + /* 628 */ spriteDim_810B248, + /* 629 */ spriteDim_810B290, + /* 630 */ spriteDim_810B2C0, + /* 631 */ spriteDim_810B2CC, + /* 632 */ spriteDim_810B32C, + /* 633 */ spriteDim_810B374, + /* 634 */ spriteDim_810B38C, + /* 635 */ spriteDim_810B3C8, + /* 636 */ spriteDim_810B410, + /* 637 */ spriteDim_810B440, + /* 638 */ spriteDim_810B4A0, + /* 639 */ spriteDim_810B4B8, + /* 640 */ spriteDim_810B4E8, + /* 641 */ spriteDim_810B56C, + /* 642 */ spriteDim_810B584, + /* 643 */ spriteDim_810B5B4, + /* 644 */ spriteDim_810B614, + /* 645 */ spriteDim_810B65C, + /* 646 */ spriteDim_810B674, + /* 647 */ spriteDim_810B6B0, + /* 648 */ spriteDim_810B6F8, + /* 649 */ spriteDim_810B728, + /* 650 */ spriteDim_810B788, + /* 651 */ spriteDim_810B7A0, + /* 652 */ spriteDim_810B7D0, + /* 653 */ spriteDim_810B854, + /* 654 */ spriteDim_810B86C, + /* 655 */ spriteDim_810B89C, + /* 656 */ spriteDim_810B8FC, + /* 657 */ spriteDim_810B914, + /* 658 */ spriteDim_810B95C, + /* 659 */ spriteDim_810B9A4, + /* 660 */ spriteDim_810B9B0, + /* 661 */ spriteDim_810BA28, + /* 662 */ spriteDim_810BA34, + /* 663 */ spriteDim_810BA7C, + /* 664 */ spriteDim_810BA94, + /* 665 */ spriteDim_810BAAC, + /* 666 */ spriteDim_810BAC4, + /* 667 */ spriteDim_810BADC, + /* 668 */ spriteDim_810BB18, + /* 669 */ spriteDim_810BB48, + /* 670 */ spriteDim_810BB54, + /* 671 */ spriteDim_810BBB4, + /* 672 */ spriteDim_810BBC0, + /* 673 */ spriteDim_810BBFC, + /* 674 */ spriteDim_810BC20, + /* 675 */ spriteDim_810BC2C, + /* 676 */ spriteDim_810BC44, + /* 677 */ spriteDim_810BC50, + /* 678 */ spriteDim_810BC5C, + /* 679 */ spriteDim_810BC68, + /* 680 */ spriteDim_810BC8C, + /* 681 */ spriteDim_810BCC8, + /* 682 */ spriteDim_810BD28, + /* 683 */ spriteDim_810BD34, + /* 684 */ spriteDim_810BD70, + /* 685 */ spriteDim_810BD7C, + /* 686 */ spriteDim_810BD94, + /* 687 */ spriteDim_810BDD0, + /* 688 */ spriteDim_810BDE8, + /* 689 */ spriteDim_810BF2C, + /* 690 */ spriteDim_810BF5C, + /* 691 */ spriteDim_810BF74, + /* 692 */ spriteDim_810BFC8, + /* 693 */ spriteDim_810BFD4, + /* 694 */ spriteDim_810C01C, + /* 695 */ spriteDim_810C0E8, + /* 696 */ spriteDim_810C100, + /* 697 */ spriteDim_810C118, + /* 698 */ spriteDim_810C130, + /* 699 */ spriteDim_810C160, + /* 700 */ spriteDim_810C190, + /* 701 */ spriteDim_810C1A8, + /* 702 */ spriteDim_810C1C0, + /* 703 */ spriteDim_810C1FC, + /* 704 */ spriteDim_810C238, + /* 705 */ spriteDim_810C274, + /* 706 */ spriteDim_810C280, + /* 707 */ spriteDim_810C34C, + /* 708 */ spriteDim_810C37C, + /* 709 */ spriteDim_810C3AC, + /* 710 */ spriteDim_810C3E8, + /* 711 */ spriteDim_810C460, + /* 712 */ spriteDim_810C478, + /* 713 */ spriteDim_810C484, + /* 714 */ spriteDim_810C4B4, + /* 715 */ spriteDim_810C4C0, + /* 716 */ spriteDim_810C4FC, + /* 717 */ spriteDim_810C508, + /* 718 */ spriteDim_810C52C, + /* 719 */ spriteDim_810C538, + /* 720 */ spriteDim_810C568, + /* 721 */ spriteDim_810C574, + /* 722 */ spriteDim_810C580, + /* 723 */ spriteDim_810C688, + /* 724 */ spriteDim_810C6B8, + /* 725 */ spriteDim_810C790, + /* 726 */ spriteDim_810C79C, + /* 727 */ spriteDim_810C7A8, + /* 728 */ spriteDim_810C7B4, + /* 729 */ spriteDim_810C7C0, + /* 730 */ spriteDim_810C7CC, + /* 731 */ spriteDim_810C7D8, + /* 732 */ spriteDim_810C808, + /* 733 */ spriteDim_810C838, + /* 734 */ spriteDim_810C850, + /* 735 */ spriteDim_810C868, + /* 736 */ spriteDim_810C880, + /* 737 */ spriteDim_810C898, + /* 738 */ spriteDim_810C8C8, + /* 739 */ spriteDim_810C8F8, + /* 740 */ spriteDim_810C910, + /* 741 */ spriteDim_810C940, + /* 742 */ spriteDim_810C958, + /* 743 */ spriteDim_810C964, + /* 744 */ spriteDim_810C970, + /* 745 */ spriteDim_810C97C, + /* 746 */ spriteDim_810C9B8, + /* 747 */ spriteDim_810CA18, + /* 748 */ spriteDim_810CA48, + /* 749 */ spriteDim_810CAA8, + /* 750 */ spriteDim_810CB08, + /* 751 */ spriteDim_810CB50, + /* 752 */ spriteDim_810CBB0, + /* 753 */ spriteDim_810CC88, + /* 754 */ spriteDim_810CCB8, + /* 755 */ spriteDim_810CCE8, + /* 756 */ spriteDim_810CD18, + /* 757 */ spriteDim_810CD54, + /* 758 */ spriteDim_810CD90, + /* 759 */ spriteDim_810CDCC, + /* 760 */ spriteDim_810CE08, + /* 761 */ spriteDim_810CE44, + /* 762 */ spriteDim_810CE80, + /* 763 */ spriteDim_810CEE0, + /* 764 */ spriteDim_810CF1C, + /* 765 */ spriteDim_810CF64, + /* 766 */ spriteDim_810CFB8, + /* 767 */ spriteDim_810D048, + /* 768 */ spriteDim_810D0A8, + /* 769 */ spriteDim_810D1A4, + /* 770 */ spriteDim_810D1D4, + /* 771 */ spriteDim_810D21C, + /* 772 */ spriteDim_810D264, + /* 773 */ spriteDim_810D2D0, + /* 774 */ spriteDim_810D300, + /* 775 */ spriteDim_810D330, + /* 776 */ spriteDim_810D3B4, + /* 777 */ spriteDim_810D3C0, + /* 778 */ spriteDim_810D3F0, + /* 779 */ spriteDim_810D438, + /* 780 */ spriteDim_810D480, + /* 781 */ spriteDim_810D498, + /* 782 */ spriteDim_810D4E0, + /* 783 */ spriteDim_810D510, + /* 784 */ spriteDim_810D51C, + /* 785 */ spriteDim_810D528, + /* 786 */ spriteDim_810D54C, + /* 787 */ spriteDim_810D558, + /* 788 */ spriteDim_810D564, + /* 789 */ spriteDim_810D588, + /* 790 */ spriteDim_810D5AC, + /* 791 */ spriteDim_810D5B8, + /* 792 */ spriteDim_810D5C4, + /* 793 */ spriteDim_810D5D0, + /* 794 */ spriteDim_810D5DC, + /* 795 */ spriteDim_810D624, + /* 796 */ spriteDim_810D654, + /* 797 */ spriteDim_810D684, + /* 798 */ spriteDim_810D6D8, + /* 799 */ spriteDim_810D720, + /* 800 */ spriteDim_810D840, + /* 801 */ spriteDim_810D8B8, + /* 802 */ spriteDim_810D8D0, + /* 803 */ spriteDim_810C880, + /* 804 */ spriteDim_810C868, + /* 805 */ spriteDim_810D90C, + /* 806 */ spriteDim_810D93C, + /* 807 */ spriteDim_810D960, + /* 808 */ spriteDim_810D9CC, + /* 809 */ spriteDim_810DA08, + /* 810 */ spriteDim_810DA14, + /* 811 */ spriteDim_810DA2C, + /* 812 */ spriteDim_810DA38, + /* 813 */ spriteDim_810DA5C, + /* 814 */ spriteDim_810DA74, + /* 815 */ spriteDim_810DA74, + /* 816 */ spriteDim_810DA74, + /* 817 */ spriteDim_810DA80, + /* 818 */ spriteDim_810DA8C, + /* 819 */ spriteDim_810DA98, + /* 820 */ spriteDim_810DAA4, + /* 821 */ spriteDim_810DAB0, + /* 822 */ spriteDim_810DAB0, + /* 823 */ spriteDim_810DAB0, + /* 824 */ spriteDim_810DAB0, + /* 825 */ spriteDim_810DAB0, + /* 826 */ spriteDim_810DAB0, + /* 827 */ spriteDim_810DAB0, + /* 828 */ spriteDim_810DAB0, + /* 829 */ spriteDim_810DAB0, + /* 830 */ spriteDim_810DAB0, + /* 831 */ spriteDim_810DAB0, + /* 832 */ spriteDim_810DAB0, + /* 833 */ spriteDim_810DAB0, + /* 834 */ spriteDim_810DAB0, + /* 835 */ spriteDim_810DAB0, + /* 836 */ spriteDim_810DAB0, + /* 837 */ spriteDim_810DAB0, + /* 838 */ spriteDim_810DAB0, + /* 839 */ spriteDim_810DAB0, + /* 840 */ spriteDim_810DAB0, + /* 841 */ spriteDim_810DAB0, + /* 842 */ spriteDim_810DAB0, + /* 843 */ spriteDim_810DAB0, + /* 844 */ spriteDim_810DAB0, + /* 845 */ spriteDim_810DAB0, + /* 846 */ spriteDim_810DAB0, + /* 847 */ spriteDim_810DAB0, + /* 848 */ spriteDim_810DAB0, + /* 849 */ spriteDim_810DAB0, + /* 850 */ spriteDim_810DAB0, + /* 851 */ spriteDim_810DAB0, + /* 852 */ spriteDim_810DAB0, + /* 853 */ spriteDim_810DAB0, + /* 854 */ spriteDim_810DB04, + /* 855 */ spriteDim_810DBB8, + /* 856 */ spriteDim_810DC24, + /* 857 */ spriteDim_810DC60, + /* 858 */ spriteDim_810DC6C, + /* 859 */ spriteDim_810DC9C, + /* 860 */ spriteDim_810DCA8, + /* 861 */ spriteDim_810DCB4, + /* 862 */ spriteDim_810DCE4, + /* 863 */ spriteDim_810DD14, + /* 864 */ spriteDim_810DDBC, + /* 865 */ spriteDim_810DDE0, + /* 866 */ spriteDim_810DDF8, + /* 867 */ spriteDim_810DEAC, + /* 868 */ spriteDim_810DEB8, + /* 869 */ spriteDim_810DEDC, + /* 870 */ spriteDim_810DF00, + /* 871 */ spriteDim_810DF24, + /* 872 */ spriteDim_810DF30, + /* 873 */ spriteDim_810DF3C, + /* 874 */ spriteDim_810DF48, + /* 875 */ spriteDim_810DF54, + /* 876 */ spriteDim_810DF60, + /* 877 */ spriteDim_810DF6C, + /* 878 */ spriteDim_810DF9C, + /* 879 */ spriteDim_810DFC0, + /* 880 */ spriteDim_810DFE4, + /* 881 */ spriteDim_810E080, + /* 882 */ spriteDim_810E110, + /* 883 */ spriteDim_810E128, + /* 884 */ spriteDim_810E1C4, + /* 885 */ spriteDim_810E200, + /* 886 */ spriteDim_810E284, + /* 887 */ spriteDim_810E290, + /* 888 */ spriteDim_810E374, + /* 889 */ spriteDim_810E404, + /* 890 */ spriteDim_810E410, + /* 891 */ spriteDim_810E41C, + /* 892 */ spriteDim_810E494, + /* 893 */ spriteDim_810E4C4, + /* 894 */ spriteDim_810E4D0, + /* 895 */ spriteDim_810E53C, + /* 896 */ spriteDim_810E554, + /* 897 */ spriteDim_810E5FC, + /* 898 */ spriteDim_810E614, + /* 899 */ spriteDim_810E644, + /* 900 */ spriteDim_810E6C8, + /* 901 */ spriteDim_810E6EC, + /* 902 */ spriteDim_810E704, + /* 903 */ spriteDim_810E734, + /* 904 */ spriteDim_810E764, + /* 905 */ spriteDim_810E7B8, + /* 906 */ spriteDim_810E7C4, + /* 907 */ spriteDim_810E7D0, +}; diff --git a/sa1/src/data/sprite_tables.c b/sa1/src/data/sprite_tables.c new file mode 100644 index 0000000000..f3ad24c77c --- /dev/null +++ b/sa1/src/data/sprite_tables.c @@ -0,0 +1,14 @@ +#include "core.h" +#include "data/sprite_data.h" + +extern const u8 gObjTiles_4bpp[]; +extern const u8 gObjTiles_8bpp[]; + +const struct SpriteTables gSpriteTables = { + (const void*)gAnimations, + gSpriteDimensions, + (const u16**const)gSpriteOamData, + (const u16*)gSpritePalettes, + gObjTiles_4bpp, + gObjTiles_8bpp +}; diff --git a/sa1/src/data/tilemap_data_0.c b/sa1/src/data/tilemap_data_0.c new file mode 100644 index 0000000000..d2d3b5635c --- /dev/null +++ b/sa1/src/data/tilemap_data_0.c @@ -0,0 +1,21 @@ +#include "../graphics/tilemaps/tilemap_73/header.c" +#include "../graphics/tilemaps/tilemap_74/header.c" +#include "../graphics/tilemaps/tilemap_75/header.c" +#include "../graphics/tilemaps/mp_choose_pak_type_jp/header.c" +#include "../graphics/tilemaps/mp_choose_pak_type_en/header.c" +#include "../graphics/tilemaps/mp_connection_success/header.c" +#include "../graphics/tilemaps/mp_connection_error/header.c" +#include "../graphics/tilemaps/mp_continue_screen/header.c" +#include "../graphics/tilemaps/mp_team_play_screen/header.c" +#include "../graphics/tilemaps/mp_vs_background/header.c" +#include "../graphics/tilemaps/tilemap_85/header.c" +#include "../graphics/tilemaps/tilemap_84/header.c" +#include "../graphics/tilemaps/tilemap_unused_mp_player_bar/header.c" +#include "../graphics/tilemaps/tilemap_unused_mp_1/header.c" +#include "../graphics/tilemaps/tilemap_unused_mp_2/header.c" +#include "../graphics/tilemaps/tilemap_unused_mp_3/header.c" +#include "../graphics/tilemaps/tilemap_unused_mp_4/header.c" +#include "../graphics/tilemaps/mp_singlepak_program_is_being_sent/header.c" +#include "../graphics/tilemaps/intro_presented_by_sega/header.c" +#include "../graphics/tilemaps/intro_created_by_sonic_team/header.c" +#include "../graphics/tilemaps/tilemap_89/header.c" diff --git a/sa1/src/data/tilemap_data_2.c b/sa1/src/data/tilemap_data_2.c new file mode 100644 index 0000000000..2418f371a7 --- /dev/null +++ b/sa1/src/data/tilemap_data_2.c @@ -0,0 +1 @@ +#include "../graphics/tilemaps/mp_multipak_player_overview/header.c" diff --git a/sa1/src/data/tilemap_data_3.c b/sa1/src/data/tilemap_data_3.c new file mode 100644 index 0000000000..a8db7f07cf --- /dev/null +++ b/sa1/src/data/tilemap_data_3.c @@ -0,0 +1,39 @@ +#include "../data/maps/zone_1/act_1/tilemaps/fg/header.c" +#include "../data/maps/zone_1/act_2/tilemaps/fg/header.c" +#include "../data/maps/zone_2/act_1/tilemaps/fg/header.c" +#include "../data/maps/zone_2/act_2/tilemaps/fg/header.c" +#include "../data/maps/zone_3/act_1/tilemaps/fg/header.c" +#include "../data/maps/zone_3/act_2/tilemaps/fg/header.c" +#include "../data/maps/zone_4/act_1/tilemaps/fg/header.c" +#include "../data/maps/zone_4/act_2/tilemaps/fg/header.c" +#include "../data/maps/zone_5/act_1/tilemaps/fg/header.c" +#include "../data/maps/zone_5/act_2/tilemaps/fg/header.c" +#include "../data/maps/zone_6/act_1/tilemaps/fg/header.c" +#include "../data/maps/zone_6/act_2/tilemaps/fg/header.c" +#include "../data/maps/zone_7/act_1/tilemaps/fg/header.c" +#include "../data/maps/zone_7/act_2/tilemaps/fg/header.c" +#include "../data/maps/chao_hunt/vs_zone_a/tilemaps/fg/header.c" +#include "../data/maps/chao_hunt/vs_zone_b/tilemaps/fg/header.c" +#include "../data/maps/chao_hunt/vs_zone_c/tilemaps/fg/header.c" +#include "../data/maps/chao_hunt/vs_zone_d/tilemaps/fg/header.c" + +#include "../data/maps/zone_1/act_1/tilemaps/bg/header.c" +// zone_1_act_2_bg shares the pointer with zone_1_act_1_bg. +#include "../data/maps/zone_2/act_1/tilemaps/bg/header.c" +// zone_2_act_2_bg shares the pointer with zone_2_act_1_bg. +#include "../data/maps/zone_3/act_1/tilemaps/bg/header.c" +// zone_3_act_2_bg shares the pointer with zone_3_act_1_bg. +#include "../data/maps/zone_4/act_1/tilemaps/bg/header.c" +// zone_4_act_2_bg shares the pointer with zone_4_act_1_bg. +#include "../data/maps/zone_5/act_1/tilemaps/bg/header.c" +// zone_5_act_2_bg shares the pointer with zone_5_act_1_bg. +#include "../data/maps/zone_6/act_1/tilemaps/bg/header.c" +#include "../data/maps/zone_6/act_2/tilemaps/bg/header.c" +#include "../data/maps/zone_7/act_1/tilemaps/bg/header.c" +#include "../data/maps/zone_7/act_2/tilemaps/bg/header.c" +#include "../data/maps/chao_hunt/vs_zone_a/tilemaps/bg/header.c" +#include "../data/maps/chao_hunt/vs_zone_b/tilemaps/bg/header.c" +#include "../data/maps/chao_hunt/vs_zone_c/tilemaps/bg/header.c" +#include "../data/maps/chao_hunt/vs_zone_d/tilemaps/bg/header.c" +#include "../graphics/tilemaps/ice_paradise_snow/header.c" +#include "../graphics/tilemaps/egg_rocket_clouds/header.c" diff --git a/sa1/src/data/tilemap_table.c b/sa1/src/data/tilemap_table.c new file mode 100644 index 0000000000..d8da675532 --- /dev/null +++ b/sa1/src/data/tilemap_table.c @@ -0,0 +1,188 @@ +extern struct MapHeader *zone_1_act_1_fg0; +extern struct MapHeader *zone_1_act_1_fg1; +extern struct MapHeader *zone_1_act_1_bg; +extern struct MapHeader *zone_1_act_2_fg0; +extern struct MapHeader *zone_1_act_2_fg1; +extern struct MapHeader *zone_1_act_2_bg; +extern struct MapHeader *zone_2_act_1_fg0; +extern struct MapHeader *zone_2_act_1_fg1; +extern struct MapHeader *zone_2_act_1_bg; +extern struct MapHeader *zone_2_act_2_fg0; +extern struct MapHeader *zone_2_act_2_fg1; +extern struct MapHeader *zone_2_act_2_bg; +extern struct MapHeader *zone_3_act_1_fg0; +extern struct MapHeader *zone_3_act_1_fg1; +extern struct MapHeader *zone_3_act_1_bg; +extern struct MapHeader *zone_3_act_2_fg0; +extern struct MapHeader *zone_3_act_2_fg1; +extern struct MapHeader *zone_3_act_2_bg; +extern struct MapHeader *zone_4_act_1_fg0; +extern struct MapHeader *zone_4_act_1_fg1; +extern struct MapHeader *zone_4_act_1_bg; +extern struct MapHeader *zone_4_act_2_fg0; +extern struct MapHeader *zone_4_act_2_fg1; +extern struct MapHeader *zone_4_act_2_bg; +extern struct MapHeader *zone_5_act_1_fg0; +extern struct MapHeader *zone_5_act_1_fg1; +extern struct MapHeader *zone_5_act_1_bg; +extern struct MapHeader *zone_5_act_2_fg0; +extern struct MapHeader *zone_5_act_2_fg1; +extern struct MapHeader *zone_5_act_2_bg; +extern struct MapHeader *zone_6_act_1_fg0; +extern struct MapHeader *zone_6_act_1_fg1; +extern struct MapHeader *zone_6_act_1_bg; +extern struct MapHeader *zone_6_act_2_fg0; +extern struct MapHeader *zone_6_act_2_fg1; +extern struct MapHeader *zone_6_act_2_bg; +extern struct MapHeader *zone_7_act_1_fg0; +extern struct MapHeader *zone_7_act_1_fg1; +extern struct MapHeader *zone_7_act_1_bg; +extern struct MapHeader *zone_7_act_2_fg0; +extern struct MapHeader *zone_7_act_2_fg1; +extern struct MapHeader *zone_7_act_2_bg; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_a_fg0; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_a_fg1; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_a_bg; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_b_fg0; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_b_fg1; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_b_bg; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_c_fg0; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_c_fg1; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_c_bg; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_d_fg0; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_d_fg1; +extern struct MapHeader *zone_chao_hunt_act_vs_zone_d_bg; +extern struct MapHeader *tilemap_54; +extern struct MapHeader *special_stage_bg_frame_0; +extern struct MapHeader *special_stage_bg_frame_1; +extern struct MapHeader *special_stage_bg_frame_2; +extern struct MapHeader *special_stage_bg_frame_3; +extern struct MapHeader *special_stage_bg_frame_4; +extern struct MapHeader *special_stage_bg_frame_5; +extern struct MapHeader *special_stage_bg_frame_6; +extern struct MapHeader *special_stage_bg_frame_7; +extern struct MapHeader *special_stage_bg_frame_8; +extern struct MapHeader *special_stage_bg_frame_9; +extern struct MapHeader *special_stage_bg_frame_10; +extern struct MapHeader *special_stage_bg_frame_11; +extern struct MapHeader *special_stage_bg_frame_12; +extern struct MapHeader *special_stage_bg_frame_13; +extern struct MapHeader *special_stage_bg_frame_14; +extern struct MapHeader *special_stage_bg_frame_15; +extern struct MapHeader *ice_paradise_snow; +extern struct MapHeader *egg_rocket_clouds; +extern struct MapHeader *tilemap_73; +extern struct MapHeader *tilemap_74; +extern struct MapHeader *tilemap_75; +extern struct MapHeader *mp_choose_pak_type_jp; +extern struct MapHeader *mp_choose_pak_type_en; +extern struct MapHeader *mp_connection_success; +extern struct MapHeader *mp_connection_error; +extern struct MapHeader *mp_continue_screen; +extern struct MapHeader *mp_team_play_screen; +extern struct MapHeader *mp_vs_background; +extern struct MapHeader *mp_singlepak_program_is_being_sent; +extern struct MapHeader *tilemap_84; +extern struct MapHeader *tilemap_85; +extern struct MapHeader *intro_presented_by_sega; +extern struct MapHeader *intro_created_by_sonic_team; +extern struct MapHeader *mp_multipak_player_overview; +extern struct MapHeader *tilemap_89; +#include "global.h" +#include "tilemap.h" + +#include "constants/tilemaps.h" + +// 0x084ADD40 +const Tilemap * const gTilemaps[] = { + [0] = (Tilemap *)&zone_1_act_1_fg0, + [1] = (Tilemap *)&zone_1_act_1_fg1, + [2] = (Tilemap *)&zone_1_act_1_bg, + [3] = (Tilemap *)&zone_1_act_2_fg0, + [4] = (Tilemap *)&zone_1_act_2_fg1, + [5] = (Tilemap *)&zone_1_act_1_bg, + [6] = (Tilemap *)&zone_2_act_1_fg0, + [7] = (Tilemap *)&zone_2_act_1_fg1, + [8] = (Tilemap *)&zone_2_act_1_bg, + [9] = (Tilemap *)&zone_2_act_2_fg0, + [10] = (Tilemap *)&zone_2_act_2_fg1, + [11] = (Tilemap *)&zone_2_act_1_bg, + [12] = (Tilemap *)&zone_3_act_1_fg0, + [13] = (Tilemap *)&zone_3_act_1_fg1, + [14] = (Tilemap *)&zone_3_act_1_bg, + [15] = (Tilemap *)&zone_3_act_2_fg0, + [16] = (Tilemap *)&zone_3_act_2_fg1, + [17] = (Tilemap *)&zone_3_act_1_bg, + [18] = (Tilemap *)&zone_4_act_1_fg0, + [19] = (Tilemap *)&zone_4_act_1_fg1, + [20] = (Tilemap *)&zone_4_act_1_bg, + [21] = (Tilemap *)&zone_4_act_2_fg0, + [22] = (Tilemap *)&zone_4_act_2_fg1, + [23] = (Tilemap *)&zone_4_act_1_bg, + [24] = (Tilemap *)&zone_5_act_1_fg0, + [25] = (Tilemap *)&zone_5_act_1_fg1, + [26] = (Tilemap *)&zone_5_act_1_bg, + [27] = (Tilemap *)&zone_5_act_2_fg0, + [28] = (Tilemap *)&zone_5_act_2_fg1, + [29] = (Tilemap *)&zone_5_act_1_bg, + [30] = (Tilemap *)&zone_6_act_1_fg0, + [31] = (Tilemap *)&zone_6_act_1_fg1, + [32] = (Tilemap *)&zone_6_act_1_bg, + [33] = (Tilemap *)&zone_6_act_2_fg0, + [34] = (Tilemap *)&zone_6_act_2_fg1, + [35] = (Tilemap *)&zone_6_act_2_bg, + [36] = (Tilemap *)&zone_7_act_1_fg0, + [37] = (Tilemap *)&zone_7_act_1_fg1, + [38] = (Tilemap *)&zone_7_act_1_bg, + [39] = (Tilemap *)&zone_7_act_2_fg0, + [40] = (Tilemap *)&zone_7_act_2_fg1, + [41] = (Tilemap *)&zone_7_act_2_bg, + [42] = (Tilemap *)&zone_chao_hunt_act_vs_zone_a_fg0, + [43] = (Tilemap *)&zone_chao_hunt_act_vs_zone_a_fg1, + [44] = (Tilemap *)&zone_chao_hunt_act_vs_zone_a_bg, + [45] = (Tilemap *)&zone_chao_hunt_act_vs_zone_b_fg0, + [46] = (Tilemap *)&zone_chao_hunt_act_vs_zone_b_fg1, + [47] = (Tilemap *)&zone_chao_hunt_act_vs_zone_b_bg, + [48] = (Tilemap *)&zone_chao_hunt_act_vs_zone_c_fg0, + [49] = (Tilemap *)&zone_chao_hunt_act_vs_zone_c_fg1, + [50] = (Tilemap *)&zone_chao_hunt_act_vs_zone_c_bg, + [51] = (Tilemap *)&zone_chao_hunt_act_vs_zone_d_fg0, + [52] = (Tilemap *)&zone_chao_hunt_act_vs_zone_d_fg1, + [53] = (Tilemap *)&zone_chao_hunt_act_vs_zone_d_bg, + [TM_TILEMAP_54] = (Tilemap *)&tilemap_54, + [TM_SPECIAL_STAGE_BG_FRAME_0] = (Tilemap *)&special_stage_bg_frame_0, + [TM_SPECIAL_STAGE_BG_FRAME_1] = (Tilemap *)&special_stage_bg_frame_1, + [TM_SPECIAL_STAGE_BG_FRAME_2] = (Tilemap *)&special_stage_bg_frame_2, + [TM_SPECIAL_STAGE_BG_FRAME_3] = (Tilemap *)&special_stage_bg_frame_3, + [TM_SPECIAL_STAGE_BG_FRAME_4] = (Tilemap *)&special_stage_bg_frame_4, + [TM_SPECIAL_STAGE_BG_FRAME_5] = (Tilemap *)&special_stage_bg_frame_5, + [TM_SPECIAL_STAGE_BG_FRAME_6] = (Tilemap *)&special_stage_bg_frame_6, + [TM_SPECIAL_STAGE_BG_FRAME_7] = (Tilemap *)&special_stage_bg_frame_7, + [TM_SPECIAL_STAGE_BG_FRAME_8] = (Tilemap *)&special_stage_bg_frame_8, + [TM_SPECIAL_STAGE_BG_FRAME_9] = (Tilemap *)&special_stage_bg_frame_9, + [TM_SPECIAL_STAGE_BG_FRAME_10] = (Tilemap *)&special_stage_bg_frame_10, + [TM_SPECIAL_STAGE_BG_FRAME_11] = (Tilemap *)&special_stage_bg_frame_11, + [TM_SPECIAL_STAGE_BG_FRAME_12] = (Tilemap *)&special_stage_bg_frame_12, + [TM_SPECIAL_STAGE_BG_FRAME_13] = (Tilemap *)&special_stage_bg_frame_13, + [TM_SPECIAL_STAGE_BG_FRAME_14] = (Tilemap *)&special_stage_bg_frame_14, + [TM_SPECIAL_STAGE_BG_FRAME_15] = (Tilemap *)&special_stage_bg_frame_15, + [TM_ICE_PARADISE_SNOW] = (Tilemap *)&ice_paradise_snow, + [TM_EGG_ROCKET_CLOUDS] = (Tilemap *)&egg_rocket_clouds, + [TM_SA1_TITLE_LOGO_JP] = (Tilemap *)&tilemap_73, + [TM_SA1_TITLE_LOGO_EN] = (Tilemap *)&tilemap_74, + [TM_SA1_TITLE_BG] = (Tilemap *)&tilemap_75, + [TM_MP_CHOOSE_PAK_TYPE_JP] = (Tilemap *)&mp_choose_pak_type_jp, + [TM_MP_CHOOSE_PAK_TYPE_EN] = (Tilemap *)&mp_choose_pak_type_en, + [TM_MP_CONNECTION_SUCCESS] = (Tilemap *)&mp_connection_success, + [TM_MP_CONNECTION_ERROR] = (Tilemap *)&mp_connection_error, + [TM_MP_CONTINUE_SCREEN] = (Tilemap *)&mp_continue_screen, + [TM_MP_TEAM_PLAY_SCREEN] = (Tilemap *)&mp_team_play_screen, + [TM_MP_VS_BACKGROUND] = (Tilemap *)&mp_vs_background, + [TM_MP_SINGLEPAK_PROGRAM_IS_BEING_SENT] = (Tilemap *)&mp_singlepak_program_is_being_sent, + [TM_VS_MODE_SELECT_JP] = (Tilemap *)&tilemap_84, + [TM_VS_MODE_SELECT] = (Tilemap *)&tilemap_85, + [TM_INTRO_PRESENTED_BY_SEGA] = (Tilemap *)&intro_presented_by_sega, + [TM_INTRO_CREATED_BY_SONIC_TEAM] = (Tilemap *)&intro_created_by_sonic_team, + [TM_MP_MULTIPAK_PLAYER_OVERVIEW] = (Tilemap *)&mp_multipak_player_overview, + [TM_TILEMAP_89] = (Tilemap *)&tilemap_89, +}; diff --git a/sa1/src/data/tilemaps_special_stage.c b/sa1/src/data/tilemaps_special_stage.c new file mode 100644 index 0000000000..931a3836e8 --- /dev/null +++ b/sa1/src/data/tilemaps_special_stage.c @@ -0,0 +1 @@ +#include "../../graphics/tilemaps/special_stage/header.c" diff --git a/sa1/src/data/tileset_debug_ascii.c b/sa1/src/data/tileset_debug_ascii.c new file mode 100644 index 0000000000..be530f638f --- /dev/null +++ b/sa1/src/data/tileset_debug_ascii.c @@ -0,0 +1,9 @@ +#include "global.h" +#include "data/tileset_debug_ascii.h" + +// Tiles used for debug strings, like the unused (in the retail version) Stage Select. +#ifndef NON_MATCHING +const u8 ALIGNED(8) Tileset_DebugAscii[] = {}; +#else +const u8 ALIGNED(8) Tileset_DebugAscii[] = INCBIN_U8("graphics/tilesets/debug_ascii/debug_ascii.4bpp"); +#endif diff --git a/sa1/src/data/ui_graphics_data.c b/sa1/src/data/ui_graphics_data.c new file mode 100644 index 0000000000..bd85ba88c0 --- /dev/null +++ b/sa1/src/data/ui_graphics_data.c @@ -0,0 +1,268 @@ +#include "global.h" +#include "data/ui_graphics.h" + +/* This file was created using './scripts/extract_ui_graphics_data.py'. + If you want to change a name or some other property, + please change it in there and run the script again, + so that they are adjusted in all auto-generated files! */ + +// 0 - 0x0865F17C | 0x0866117C +const u8 gUiGraphicsAsciiChars[] = INCBIN_U8("graphics/ui/stage_ui/AsciiChars.4bpp"); +const u16 gUiPaletteAsciiChars[] = INCBIN_U16("graphics/ui/stage_ui/AsciiChars.gbapal"); + +// 1 - 0x0866119C | 0x0866121C +const u8 gUiGraphics1UpIconSonic[] = INCBIN_U8("graphics/ui/icon_lives/Sonic.4bpp"); +const u16 gUiPalette1UpIconSonic[] = INCBIN_U16("graphics/ui/icon_lives/Sonic.gbapal"); + +// 2 - 0x0866123C | 0x086612BC +const u8 gUiGraphics1UpIconTails[] = INCBIN_U8("graphics/ui/icon_lives/Tails.4bpp"); +const u16 gUiPalette1UpIconTails[] = INCBIN_U16("graphics/ui/icon_lives/Tails.gbapal"); + +// 3 - 0x086612DC | 0x0866135C +const u8 gUiGraphics1UpIconKnuckles[] = INCBIN_U8("graphics/ui/icon_lives/Knuckles.4bpp"); +const u16 gUiPalette1UpIconKnuckles[] = INCBIN_U16("graphics/ui/icon_lives/Knuckles.gbapal"); + +// 4 - 0x0866137C | 0x086613FC +const u8 gUiGraphics1UpIconAmy[] = INCBIN_U8("graphics/ui/icon_lives/Amy.4bpp"); +const u16 gUiPalette1UpIconAmy[] = INCBIN_U16("graphics/ui/icon_lives/Amy.gbapal"); + +// 5 - 0x0866141C | 0x0866161C +const u8 gUiGraphicsHudRing[] = INCBIN_U8("graphics/ui/icon_ring/HudRing.4bpp"); +const u16 gUiPaletteHudRing[] = INCBIN_U16("graphics/ui/icon_ring/HudRing.gbapal"); + +// 6 - 0x0866163C | 0x08661A3C +const u8 gUiGraphicsStageIntroSonic[] = INCBIN_U8("graphics/ui/stage_intro/Sonic.4bpp"); +const u16 gUiPaletteStageIntroSonic[] = INCBIN_U16("graphics/ui/stage_intro/Sonic.gbapal"); + +// 7 - 0x08661A5C | 0x08661E5C +const u8 gUiGraphicsStageIntroTails[] = INCBIN_U8("graphics/ui/stage_intro/Tails.4bpp"); +const u16 gUiPaletteStageIntroTails[] = INCBIN_U16("graphics/ui/stage_intro/Tails.gbapal"); + +// 8 - 0x08661E7C | 0x0866227C +const u8 gUiGraphicsStageIntroKnuckles[] = INCBIN_U8("graphics/ui/stage_intro/Knuckles.4bpp"); +const u16 gUiPaletteStageIntroKnuckles[] = INCBIN_U16("graphics/ui/stage_intro/Knuckles.gbapal"); + +// 9 - 0x0866229C | 0x0866269C +const u8 gUiGraphicsStageIntroAmy[] = INCBIN_U8("graphics/ui/stage_intro/Amy.4bpp"); +const u16 gUiPaletteStageIntroAmy[] = INCBIN_U16("graphics/ui/stage_intro/Amy.gbapal"); + +// 10 - 0x086626BC | 0x086646BC +const u8 gUiGraphicsStageIntrochar_names[] = INCBIN_U8("graphics/ui/stage_intro/char_names.4bpp"); +const u16 gUiPaletteStageIntrochar_names[] = INCBIN_U16("graphics/ui/stage_intro/char_names.gbapal"); + +// 11 - 0x086646DC | 0x08664CDC +const u8 gUiGraphicsStageResultSonic[] = INCBIN_U8("graphics/ui/stage_result/Sonic.4bpp"); +const u16 gUiPaletteStageResultSonic[] = INCBIN_U16("graphics/ui/stage_result/Sonic.gbapal"); + +// 12 - 0x08664CFC | 0x086652FC +const u8 gUiGraphicsStageResultTails[] = INCBIN_U8("graphics/ui/stage_result/Tails.4bpp"); +const u16 gUiPaletteStageResultTails[] = INCBIN_U16("graphics/ui/stage_result/Tails.gbapal"); + +// 13 - 0x0866531C | 0x0866591C +const u8 gUiGraphicsStageResultKnuckles[] = INCBIN_U8("graphics/ui/stage_result/Knuckles.4bpp"); +const u16 gUiPaletteStageResultKnuckles[] = INCBIN_U16("graphics/ui/stage_result/Knuckles.gbapal"); + +// 14 - 0x0866593C | 0x08665F3C +const u8 gUiGraphicsStageResultAmy[] = INCBIN_U8("graphics/ui/stage_result/Amy.4bpp"); +const u16 gUiPaletteStageResultAmy[] = INCBIN_U16("graphics/ui/stage_result/Amy.gbapal"); + +// 15 - 0x08665F5C | 0x0866615C +const u8 gUiGraphicsStageResultAct12[] = INCBIN_U8("graphics/ui/stage_result/Act12.4bpp"); +const u16 gUiPaletteStageResultAct12[] = INCBIN_U16("graphics/ui/stage_result/Act12.gbapal"); + +// 16 - 0x0866617C | 0x0866637C +const u8 gUiGraphicsStageResultHeadlineBack[] = INCBIN_U8("graphics/ui/stage_result/HeadlineBack.4bpp"); +const u16 gUiPaletteStageResultHeadlineBack[] = INCBIN_U16("graphics/ui/stage_result/HeadlineBack.gbapal"); + +// 17 - 0x0866639C | 0x08666E1C +const u8 gUiGraphicsStageNamesJapanese0[] = INCBIN_U8("graphics/ui/stage_intro/Japanese0.4bpp"); +const u16 gUiPaletteStageNamesJapanese0[] = INCBIN_U16("graphics/ui/stage_intro/Japanese0.gbapal"); + +// 18 - 0x08666E3C | 0x0866763C +const u8 gUiGraphicsStageNamesJapanese1[] = INCBIN_U8("graphics/ui/stage_intro/Japanese1.4bpp"); +const u16 gUiPaletteStageNamesJapanese1[] = INCBIN_U16("graphics/ui/stage_intro/Japanese1.gbapal"); + +// 19 - 0x0866765C | 0x08667D5C +const u8 gUiGraphicsStageNameNeoGreenHillZone[] = INCBIN_U8("graphics/ui/stage_intro/NeoGreenHillZone.4bpp"); +const u16 gUiPaletteStageNameNeoGreenHillZone[] = INCBIN_U16("graphics/ui/stage_intro/NeoGreenHillZone.gbapal"); + +// 20 - 0x08667D7C | 0x0866847C +const u8 gUiGraphicsStageNameSecretBaseZone[] = INCBIN_U8("graphics/ui/stage_intro/SecretBaseZone.4bpp"); +const u16 gUiPaletteStageNameSecretBaseZone[] = INCBIN_U16("graphics/ui/stage_intro/SecretBaseZone.gbapal"); + +// 21 - 0x0866849C | 0x08668B9C +const u8 gUiGraphicsStageNameCasinoParadiseZone[] = INCBIN_U8("graphics/ui/stage_intro/CasinoParadiseZone.4bpp"); +const u16 gUiPaletteStageNameCasinoParadiseZone[] = INCBIN_U16("graphics/ui/stage_intro/CasinoParadiseZone.gbapal"); + +// 22 - 0x08668BBC | 0x086692BC +const u8 gUiGraphicsStageNameIceMountainZone[] = INCBIN_U8("graphics/ui/stage_intro/IceMountainZone.4bpp"); +const u16 gUiPaletteStageNameIceMountainZone[] = INCBIN_U16("graphics/ui/stage_intro/IceMountainZone.gbapal"); + +// 23 - 0x086692DC | 0x086699DC +const u8 gUiGraphicsStageNameAngelIslandZone[] = INCBIN_U8("graphics/ui/stage_intro/AngelIslandZone.4bpp"); +const u16 gUiPaletteStageNameAngelIslandZone[] = INCBIN_U16("graphics/ui/stage_intro/AngelIslandZone.gbapal"); + +// 24 - 0x086699FC | 0x0866A0FC +const u8 gUiGraphicsStageNameEggRocketZone[] = INCBIN_U8("graphics/ui/stage_intro/EggRocketZone.4bpp"); +const u16 gUiPaletteStageNameEggRocketZone[] = INCBIN_U16("graphics/ui/stage_intro/EggRocketZone.gbapal"); + +// 25 - 0x0866A11C | 0x0866A81C +const u8 gUiGraphicsStageNameCosmicAngelZone[] = INCBIN_U8("graphics/ui/stage_intro/CosmicAngelZone.4bpp"); +const u16 gUiPaletteStageNameCosmicAngelZone[] = INCBIN_U16("graphics/ui/stage_intro/CosmicAngelZone.gbapal"); + +// 26 - 0x0866A83C | 0x0866AF3C +const u8 gUiGraphicsStageNameXZone[] = INCBIN_U8("graphics/ui/stage_intro/XZone.4bpp"); +const u16 gUiPaletteStageNameXZone[] = INCBIN_U16("graphics/ui/stage_intro/XZone.gbapal"); + +// 27 - 0x0866AF5C | 0x0866B65C +const u8 gUiGraphicsStageNameTheMoonZone[] = INCBIN_U8("graphics/ui/stage_intro/TheMoonZone.4bpp"); +const u16 gUiPaletteStageNameTheMoonZone[] = INCBIN_U16("graphics/ui/stage_intro/TheMoonZone.gbapal"); + +// 28 - 0x0866B67C | 0x0866BD7C +const u8 gUiGraphicsStageNameForestChaoGarden[] = INCBIN_U8("graphics/ui/stage_intro/ForestChaoGarden.4bpp"); +const u16 gUiPaletteStageNameForestChaoGarden[] = INCBIN_U16("graphics/ui/stage_intro/ForestChaoGarden.gbapal"); + +// 29 - 0x0866BD9C | 0x0866C49C +const u8 gUiGraphicsStageNameFactoryChaoGarden[] = INCBIN_U8("graphics/ui/stage_intro/FactoryChaoGarden.4bpp"); +const u16 gUiPaletteStageNameFactoryChaoGarden[] = INCBIN_U16("graphics/ui/stage_intro/FactoryChaoGarden.gbapal"); + +// 30 - 0x0866C4BC | 0x0866CBBC +const u8 gUiGraphicsStageNamePinballChaoGarden[] = INCBIN_U8("graphics/ui/stage_intro/PinballChaoGarden.4bpp"); +const u16 gUiPaletteStageNamePinballChaoGarden[] = INCBIN_U16("graphics/ui/stage_intro/PinballChaoGarden.gbapal"); + +// 31 - 0x0866CBDC | 0x0866D2DC +const u8 gUiGraphicsStageNameSpaceChaoGarden[] = INCBIN_U8("graphics/ui/stage_intro/SpaceChaoGarden.4bpp"); +const u16 gUiPaletteStageNameSpaceChaoGarden[] = INCBIN_U16("graphics/ui/stage_intro/SpaceChaoGarden.gbapal"); + +// 32 - 0x0866D2FC | 0x0866D87C +const u8 gUiGraphicsTimerDigits[] = INCBIN_U8("graphics/ui/stage_ui/TimerDigits.4bpp"); +const u16 gUiPaletteTimerDigits[] = INCBIN_U16("graphics/ui/stage_ui/TimerDigits.gbapal"); + +// 33 - 0x0866D89C | 0x0866DA9C +const u8 gUiGraphicsOK[] = INCBIN_U8("graphics/ui/stage_ui/OK.4bpp"); +const u16 gUiPaletteOK[] = INCBIN_U16("graphics/ui/stage_ui/OK.gbapal"); + +// 34 - 0x0866DABC | 0x086702BC +const u8 gUiGraphicsGotThroughTexts[] = INCBIN_U8("graphics/ui/stage_result/GotThroughTexts.4bpp"); +const u16 gUiPaletteGotThroughTexts[] = INCBIN_U16("graphics/ui/stage_result/GotThroughTexts.gbapal"); + +// 35 - 0x086702DC | 0x086752DC +const u8 gUiGraphicsOverlayEnterName[] = INCBIN_U8("graphics/ui/options_overlays/EnterName.4bpp"); +const u16 gUiPaletteOverlayEnterName[] = INCBIN_U16("graphics/ui/options_overlays/EnterName.gbapal"); + +// 36 - 0x086752FC | 0x08677AFC +const u8 gUiGraphicsOverlayCharacters[] = INCBIN_U8("graphics/ui/options_overlays/Characters.4bpp"); +const u16 gUiPaletteOverlayCharacters[] = INCBIN_U16("graphics/ui/options_overlays/Characters.gbapal"); + +// 37 - 0x08677B1C | 0x08677B3C +const u8 gUiGraphicsOverlayRedCorner[] = INCBIN_U8("graphics/ui/options_overlays/RedCorner.4bpp"); +const u16 gUiPaletteOverlayRedCorner[] = INCBIN_U16("graphics/ui/options_overlays/RedCorner.gbapal"); + +// 38 - 0x08677B5C | 0x08677C5C +const u8 gUiGraphicsOverlayCursors[] = INCBIN_U8("graphics/ui/options_overlays/Cursors.4bpp"); +const u16 gUiPaletteOverlayCursors[] = INCBIN_U16("graphics/ui/options_overlays/Cursors.gbapal"); + +// 39 - 0x08677C7C | 0x0867807C +const u8 gUiGraphicsCharSelectZigZag[] = INCBIN_U8("graphics/ui/character_select/ZigZag.4bpp"); +const u16 gUiPaletteCharSelectZigZag[] = INCBIN_U16("graphics/ui/character_select/ZigZag.gbapal"); + +// 40 - 0x0867809C | 0x0867849C +const u8 gUiGraphicsCharSelectArrow[] = INCBIN_U8("graphics/ui/character_select/Arrow.4bpp"); +const u16 gUiPaletteCharSelectArrow[] = INCBIN_U16("graphics/ui/character_select/Arrow.gbapal"); + +// 41 - 0x086784BC | 0x0867B4BC +const u8 gUiGraphicsCharSelectNames[] = INCBIN_U8("graphics/ui/character_select/Names.4bpp"); +const u16 gUiPaletteCharSelectNames[] = INCBIN_U16("graphics/ui/character_select/Names.gbapal"); + +// 42 - 0x0867B4DC | 0x0867BCDC +const u8 gUiGraphicsCharSelectSelectACharacter[] = INCBIN_U8("graphics/ui/character_select/SelectACharacter.4bpp"); +const u16 gUiPaletteCharSelectSelectACharacter[] = INCBIN_U16("graphics/ui/character_select/SelectACharacter.gbapal"); + +// 43 - 0x0867BCFC | 0x0867BDFC +const u8 gUiGraphicsCharSelectBlackBox[] = INCBIN_U8("graphics/ui/character_select/BlackBox.4bpp"); +const u16 gUiPaletteCharSelectBlackBox[] = INCBIN_U16("graphics/ui/character_select/BlackBox.gbapal"); + +// 44 - 0x0867BE1C | 0x0867C01C +const u8 gUiGraphicsCharSelectOK[] = INCBIN_U8("graphics/ui/character_select/OK.4bpp"); +const u16 gUiPaletteCharSelectOK[] = INCBIN_U16("graphics/ui/character_select/OK.gbapal"); + +// 45 - 0x0867C03C | 0x0867C23C +const u8 gUiGraphicsCharSelectBlackBox2[] = INCBIN_U8("graphics/ui/character_select/BlackBox2.4bpp"); +const u16 gUiPaletteCharSelectBlackBox2[] = INCBIN_U16("graphics/ui/character_select/BlackBox2.gbapal"); + +// 46 - 0x0867C25C | 0x0867C65C +const u8 gUiGraphicsSpecialStage46[] = INCBIN_U8("graphics/ui/special_stage/46.4bpp"); +const u16 gUiPaletteSpecialStage46[] = INCBIN_U16("graphics/ui/special_stage/46.gbapal"); + +// 47 - 0x0867C67C | 0x0867D47C +const u8 gUiGraphicsSpecialStageTextGotRings0[] = INCBIN_U8("graphics/ui/special_stage/TextGotRings0.4bpp"); +const u16 gUiPaletteSpecialStageTextGotRings0[] = INCBIN_U16("graphics/ui/special_stage/TextGotRings0.gbapal"); + +// 48 - 0x0867D49C | 0x0867E29C +const u8 gUiGraphicsSpecialStageTextGotRings1[] = INCBIN_U8("graphics/ui/special_stage/TextGotRings1.4bpp"); +const u16 gUiPaletteSpecialStageTextGotRings1[] = INCBIN_U16("graphics/ui/special_stage/TextGotRings1.gbapal"); + +// 49 - 0x0867E2BC | 0x0867F0BC +const u8 gUiGraphicsSpecialStageTextGotRings2[] = INCBIN_U8("graphics/ui/special_stage/TextGotRings2.4bpp"); +const u16 gUiPaletteSpecialStageTextGotRings2[] = INCBIN_U16("graphics/ui/special_stage/TextGotRings2.gbapal"); + +// 50 - 0x0867F0DC | 0x0867FADC +const u8 gUiGraphicsSpecialStageTextStart[] = INCBIN_U8("graphics/ui/special_stage/TextStart.4bpp"); +const u16 gUiPaletteSpecialStageTextStart[] = INCBIN_U16("graphics/ui/special_stage/TextStart.gbapal"); + +// 51 - 0x0867FAFC | 0x086808FC +const u8 gUiGraphicsSpecialStageTextGotAChaosEmerald[] = INCBIN_U8("graphics/ui/special_stage/TextGotAChaosEmerald.4bpp"); +const u16 gUiPaletteSpecialStageTextGotAChaosEmerald[] = INCBIN_U16("graphics/ui/special_stage/TextGotAChaosEmerald.gbapal"); + +// 52 - 0x0868091C | 0x08681B1C +const u8 gUiGraphicsSpecialStageTextSpecialStage[] = INCBIN_U8("graphics/ui/special_stage/TextSpecialStage.4bpp"); +const u16 gUiPaletteSpecialStageTextSpecialStage[] = INCBIN_U16("graphics/ui/special_stage/TextSpecialStage.gbapal"); + +// 53 - 0x08681B3C | 0x08682F3C +const u8 gUiGraphicsSpecialStage53[] = INCBIN_U8("graphics/ui/special_stage/53.4bpp"); +const u16 gUiPaletteSpecialStage53[] = INCBIN_U16("graphics/ui/special_stage/53.gbapal"); + +// 54 - 0x08682F5C | 0x0868355C +const u8 gUiGraphicsSpecialStageChaosEmerald[] = INCBIN_U8("graphics/ui/special_stage/ChaosEmerald.4bpp"); +const u16 gUiPaletteSpecialStageChaosEmerald[] = INCBIN_U16("graphics/ui/special_stage/ChaosEmerald.gbapal"); + +// 55 - 0x0868357C | 0x0868359C +const u8 gUiGraphicsTransparent0[] = INCBIN_U8("graphics/ui/unknown/Transparent0.4bpp"); +const u16 gUiPaletteTransparent0[] = INCBIN_U16("graphics/ui/unknown/Transparent0.gbapal"); + +// 56 - 0x086835BC | 0x086835DC +const u8 gUiGraphicsTransparent1[] = INCBIN_U8("graphics/ui/unknown/Transparent1.4bpp"); +const u16 gUiPaletteTransparent1[] = INCBIN_U16("graphics/ui/unknown/Transparent1.gbapal"); + +// 57 - 0x086835FC | 0x0868361C +const u8 gUiGraphicsTransparent2[] = INCBIN_U8("graphics/ui/unknown/Transparent2.4bpp"); +const u16 gUiPaletteTransparent2[] = INCBIN_U16("graphics/ui/unknown/Transparent2.gbapal"); + +// 58 - 0x0868363C | 0x0868365C +const u8 gUiGraphicsTransparent3[] = INCBIN_U8("graphics/ui/unknown/Transparent3.4bpp"); +const u16 gUiPaletteTransparent3[] = INCBIN_U16("graphics/ui/unknown/Transparent3.gbapal"); + +// 59 - 0x0868367C | 0x0868369C +const u8 gUiGraphicsTransparent4[] = INCBIN_U8("graphics/ui/unknown/Transparent4.4bpp"); +const u16 gUiPaletteTransparent4[] = INCBIN_U16("graphics/ui/unknown/Transparent4.gbapal"); + +// 60 - 0x086836BC | 0x0868373C +const u8 gUiGraphicsTransparent5[] = INCBIN_U8("graphics/ui/unknown/Transparent5.4bpp"); +const u16 gUiPaletteTransparent5[] = INCBIN_U16("graphics/ui/unknown/Transparent5.gbapal"); + +// 61 - 0x0868375C | 0x08683F5C +const u8 gUiGraphicsSoundTestBackground[] = INCBIN_U8("graphics/ui/sound_test/Background.4bpp"); +const u16 gUiPaletteSoundTestBackground[] = INCBIN_U16("graphics/ui/sound_test/Background.gbapal"); + +// 62 - 0x08683F7C | 0x08683F9C +const u8 gUiGraphicsSoundTestBox2[] = INCBIN_U8("graphics/ui/sound_test/Box2.4bpp"); +const u16 gUiPaletteSoundTestBox2[] = INCBIN_U16("graphics/ui/sound_test/Box2.gbapal"); + +// 63 - 0x08683FBC | 0x08683FDC +const u8 gUiGraphicsSoundTestBox3[] = INCBIN_U8("graphics/ui/sound_test/Box3.4bpp"); +const u16 gUiPaletteSoundTestBox3[] = INCBIN_U16("graphics/ui/sound_test/Box3.gbapal"); + +// 64 - 0x08683FFC | 0x0868401C +const u8 gUiGraphicsSoundTestBox4[] = INCBIN_U8("graphics/ui/sound_test/Box4.4bpp"); +const u16 gUiPaletteSoundTestBox4[] = INCBIN_U16("graphics/ui/sound_test/Box4.gbapal"); + diff --git a/sa1/src/data/ui_graphics_table.c b/sa1/src/data/ui_graphics_table.c new file mode 100644 index 0000000000..f087deee2f --- /dev/null +++ b/sa1/src/data/ui_graphics_table.c @@ -0,0 +1,661 @@ +#include "global.h" +#include "data/ui_graphics.h" + +/* This file was created using './scripts/extract_ui_graphics_data.py'. + If you want to change a name or some other property, + please change it in there and run the script again, + so that they are adjusted in all auto-generated files! */ + +// 0x8687B3C -> 0x8688258 +const UiGraphics gUiGraphics[] = { + { + // 0 - 0x08687B3C + .tiles = gUiGraphicsAsciiChars, + .palette = gUiPaletteAsciiChars, + .unk8 = 2, + .unkC = 0, + .unk10 = 2, + .unk14 = 1, + .unk18 = 2, + }, + { + // 1 - 0x08687B58 + .tiles = gUiGraphics1UpIconSonic, + .palette = gUiPalette1UpIconSonic, + .unk8 = 4, + .unkC = 1, + .unk10 = 0, + .unk14 = 2, + .unk18 = 2, + }, + { + // 2 - 0x08687B74 + .tiles = gUiGraphics1UpIconTails, + .palette = gUiPalette1UpIconTails, + .unk8 = 4, + .unkC = 1, + .unk10 = 0, + .unk14 = 2, + .unk18 = 2, + }, + { + // 3 - 0x08687B90 + .tiles = gUiGraphics1UpIconKnuckles, + .palette = gUiPalette1UpIconKnuckles, + .unk8 = 4, + .unkC = 1, + .unk10 = 0, + .unk14 = 2, + .unk18 = 2, + }, + { + // 4 - 0x08687BAC + .tiles = gUiGraphics1UpIconAmy, + .palette = gUiPalette1UpIconAmy, + .unk8 = 4, + .unkC = 1, + .unk10 = 0, + .unk14 = 2, + .unk18 = 2, + }, + { + // 5 - 0x08687BC8 + .tiles = gUiGraphicsHudRing, + .palette = gUiPaletteHudRing, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 6 - 0x08687BE4 + .tiles = gUiGraphicsStageIntroSonic, + .palette = gUiPaletteStageIntroSonic, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 7 - 0x08687C00 + .tiles = gUiGraphicsStageIntroTails, + .palette = gUiPaletteStageIntroTails, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 8 - 0x08687C1C + .tiles = gUiGraphicsStageIntroKnuckles, + .palette = gUiPaletteStageIntroKnuckles, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 9 - 0x08687C38 + .tiles = gUiGraphicsStageIntroAmy, + .palette = gUiPaletteStageIntroAmy, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 10 - 0x08687C54 + .tiles = gUiGraphicsStageIntrochar_names, + .palette = gUiPaletteStageIntrochar_names, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 11 - 0x08687C70 + .tiles = gUiGraphicsStageResultSonic, + .palette = gUiPaletteStageResultSonic, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 12 - 0x08687C8C + .tiles = gUiGraphicsStageResultTails, + .palette = gUiPaletteStageResultTails, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 13 - 0x08687CA8 + .tiles = gUiGraphicsStageResultKnuckles, + .palette = gUiPaletteStageResultKnuckles, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 14 - 0x08687CC4 + .tiles = gUiGraphicsStageResultAmy, + .palette = gUiPaletteStageResultAmy, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 15 - 0x08687CE0 + .tiles = gUiGraphicsStageResultAct12, + .palette = gUiPaletteStageResultAct12, + .unk8 = 2, + .unkC = 0, + .unk10 = 2, + .unk14 = 1, + .unk18 = 2, + }, + { + // 16 - 0x08687CFC + .tiles = gUiGraphicsStageResultHeadlineBack, + .palette = gUiPaletteStageResultHeadlineBack, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 17 - 0x08687D18 + .tiles = gUiGraphicsStageNamesJapanese0, + .palette = gUiPaletteStageNamesJapanese0, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 18 - 0x08687D34 + .tiles = gUiGraphicsStageNamesJapanese1, + .palette = gUiPaletteStageNamesJapanese1, + .unk8 = 4, + .unkC = 1, + .unk10 = 1, + .unk14 = 4, + .unk18 = 1, + }, + { + // 19 - 0x08687D50 + .tiles = gUiGraphicsStageNameNeoGreenHillZone, + .palette = gUiPaletteStageNameNeoGreenHillZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 20 - 0x08687D6C + .tiles = gUiGraphicsStageNameSecretBaseZone, + .palette = gUiPaletteStageNameSecretBaseZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 21 - 0x08687D88 + .tiles = gUiGraphicsStageNameCasinoParadiseZone, + .palette = gUiPaletteStageNameCasinoParadiseZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 22 - 0x08687DA4 + .tiles = gUiGraphicsStageNameIceMountainZone, + .palette = gUiPaletteStageNameIceMountainZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 23 - 0x08687DC0 + .tiles = gUiGraphicsStageNameAngelIslandZone, + .palette = gUiPaletteStageNameAngelIslandZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 24 - 0x08687DDC + .tiles = gUiGraphicsStageNameEggRocketZone, + .palette = gUiPaletteStageNameEggRocketZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 25 - 0x08687DF8 + .tiles = gUiGraphicsStageNameCosmicAngelZone, + .palette = gUiPaletteStageNameCosmicAngelZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 26 - 0x08687E14 + .tiles = gUiGraphicsStageNameXZone, + .palette = gUiPaletteStageNameXZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 27 - 0x08687E30 + .tiles = gUiGraphicsStageNameTheMoonZone, + .palette = gUiPaletteStageNameTheMoonZone, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 28 - 0x08687E4C + .tiles = gUiGraphicsStageNameForestChaoGarden, + .palette = gUiPaletteStageNameForestChaoGarden, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 29 - 0x08687E68 + .tiles = gUiGraphicsStageNameFactoryChaoGarden, + .palette = gUiPaletteStageNameFactoryChaoGarden, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 30 - 0x08687E84 + .tiles = gUiGraphicsStageNamePinballChaoGarden, + .palette = gUiPaletteStageNamePinballChaoGarden, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 31 - 0x08687EA0 + .tiles = gUiGraphicsStageNameSpaceChaoGarden, + .palette = gUiPaletteStageNameSpaceChaoGarden, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 32 - 0x08687EBC + .tiles = gUiGraphicsTimerDigits, + .palette = gUiPaletteTimerDigits, + .unk8 = 4, + .unkC = 1, + .unk10 = 0, + .unk14 = 2, + .unk18 = 2, + }, + { + // 33 - 0x08687ED8 + .tiles = gUiGraphicsOK, + .palette = gUiPaletteOK, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 34 - 0x08687EF4 + .tiles = gUiGraphicsGotThroughTexts, + .palette = gUiPaletteGotThroughTexts, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 35 - 0x08687F10 + .tiles = gUiGraphicsOverlayEnterName, + .palette = gUiPaletteOverlayEnterName, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 36 - 0x08687F2C + .tiles = gUiGraphicsOverlayCharacters, + .palette = gUiPaletteOverlayCharacters, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 37 - 0x08687F48 + .tiles = gUiGraphicsOverlayRedCorner, + .palette = gUiPaletteOverlayRedCorner, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 38 - 0x08687F64 + .tiles = gUiGraphicsOverlayCursors, + .palette = gUiPaletteOverlayCursors, + .unk8 = 4, + .unkC = 1, + .unk10 = 0, + .unk14 = 2, + .unk18 = 2, + }, + { + // 39 - 0x08687F80 + .tiles = gUiGraphicsCharSelectZigZag, + .palette = gUiPaletteCharSelectZigZag, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 40 - 0x08687F9C + .tiles = gUiGraphicsCharSelectArrow, + .palette = gUiPaletteCharSelectArrow, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 41 - 0x08687FB8 + .tiles = gUiGraphicsCharSelectNames, + .palette = gUiPaletteCharSelectNames, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 42 - 0x08687FD4 + .tiles = gUiGraphicsCharSelectSelectACharacter, + .palette = gUiPaletteCharSelectSelectACharacter, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 43 - 0x08687FF0 + .tiles = gUiGraphicsCharSelectBlackBox, + .palette = gUiPaletteCharSelectBlackBox, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 44 - 0x0868800C + .tiles = gUiGraphicsCharSelectOK, + .palette = gUiPaletteCharSelectOK, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 45 - 0x08688028 + .tiles = gUiGraphicsCharSelectBlackBox2, + .palette = gUiPaletteCharSelectBlackBox2, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 46 - 0x08688044 + .tiles = gUiGraphicsSpecialStage46, + .palette = gUiPaletteSpecialStage46, + .unk8 = 32, + .unkC = 3, + .unk10 = 1, + .unk14 = 8, + .unk18 = 4, + }, + { + // 47 - 0x08688060 + .tiles = gUiGraphicsSpecialStageTextGotRings0, + .palette = gUiPaletteSpecialStageTextGotRings0, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 48 - 0x0868807C + .tiles = gUiGraphicsSpecialStageTextGotRings1, + .palette = gUiPaletteSpecialStageTextGotRings1, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 49 - 0x08688098 + .tiles = gUiGraphicsSpecialStageTextGotRings2, + .palette = gUiPaletteSpecialStageTextGotRings2, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 50 - 0x086880B4 + .tiles = gUiGraphicsSpecialStageTextStart, + .palette = gUiPaletteSpecialStageTextStart, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 51 - 0x086880D0 + .tiles = gUiGraphicsSpecialStageTextGotAChaosEmerald, + .palette = gUiPaletteSpecialStageTextGotAChaosEmerald, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 52 - 0x086880EC + .tiles = gUiGraphicsSpecialStageTextSpecialStage, + .palette = gUiPaletteSpecialStageTextSpecialStage, + .unk8 = 8, + .unkC = 2, + .unk10 = 1, + .unk14 = 4, + .unk18 = 2, + }, + { + // 53 - 0x08688108 + .tiles = gUiGraphicsSpecialStage53, + .palette = gUiPaletteSpecialStage53, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 54 - 0x08688124 + .tiles = gUiGraphicsSpecialStageChaosEmerald, + .palette = gUiPaletteSpecialStageChaosEmerald, + .unk8 = 16, + .unkC = 2, + .unk10 = 0, + .unk14 = 4, + .unk18 = 4, + }, + { + // 55 - 0x08688140 + .tiles = gUiGraphicsTransparent0, + .palette = gUiPaletteTransparent0, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 56 - 0x0868815C + .tiles = gUiGraphicsTransparent1, + .palette = gUiPaletteTransparent1, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 57 - 0x08688178 + .tiles = gUiGraphicsTransparent2, + .palette = gUiPaletteTransparent2, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 58 - 0x08688194 + .tiles = gUiGraphicsTransparent3, + .palette = gUiPaletteTransparent3, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 59 - 0x086881B0 + .tiles = gUiGraphicsTransparent4, + .palette = gUiPaletteTransparent4, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 60 - 0x086881CC + .tiles = gUiGraphicsTransparent5, + .palette = gUiPaletteTransparent5, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 61 - 0x086881E8 + .tiles = gUiGraphicsSoundTestBackground, + .palette = gUiPaletteSoundTestBackground, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 62 - 0x08688204 + .tiles = gUiGraphicsSoundTestBox2, + .palette = gUiPaletteSoundTestBox2, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 63 - 0x08688220 + .tiles = gUiGraphicsSoundTestBox3, + .palette = gUiPaletteSoundTestBox3, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, + { + // 64 - 0x0868823C + .tiles = gUiGraphicsSoundTestBox4, + .palette = gUiPaletteSoundTestBox4, + .unk8 = 1, + .unkC = 0, + .unk10 = 0, + .unk14 = 1, + .unk18 = 1, + }, +}; diff --git a/sa1/src/game/amy_attack_heart_effect.c b/sa1/src/game/amy_attack_heart_effect.c new file mode 100644 index 0000000000..e804df7051 --- /dev/null +++ b/sa1/src/game/amy_attack_heart_effect.c @@ -0,0 +1,298 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "task.h" + +#include "game/amy_attack_heart_effect.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/player.h" + +#include "constants/animations.h" +#if (GAME == GAME_SA2) +#include "constants/char_states.h" +#endif + +typedef struct { + /* 0x00 */ s32 x; + /* 0x04 */ s32 y; + /* 0x08 */ u16 unk8; + /* 0x0A */ u16 unkA; + /* 0x0C */ u8 count; +} AmyHeartParams; /* size: 0x10 */ + +typedef struct { + /* 0x000 */ Sprite sprHearts[AMY_ATTACK_HEART_SPRITE_COUNT]; + /* 0x0C0 */ AmyHeartParams params[AMY_ATTACK_HEART_SPRITE_COUNT]; +#if (GAME == GAME_SA1) + /* 0x100 */ s8 unk100; + /* 0x101 */ s8 kind; +#elif (GAME == GAME_SA2) + /* 0x100 */ u16 unk100; + /* 0x102 */ u16 unk102; + /* 0x104 */ u16 kind; +#endif + /* 0x106 */ u16 unk106; + /* 0x108 */ u16 unk108; + /* 0x10A */ u16 unk10A; +} AmyAtkHearts; /* size: 0x10C */ + +void Task_AmyAttackHeartEffect(void); +void sa2__sub_8015E28(u16); +void TaskDestructor_AmyAttackHeartEffect(struct Task *); + +ALIGNED(4) +const s16 sHeartOffsets[AMY_HEART_PATTERN_COUNT][8][3] = { + [AMY_HEART_PATTERN_HAMMER_ATTACK] = { + { 10, 0, -27 }, + { 12, 13, -22 }, + { 14, 23, -13 }, + { 16, 26, 0 }, + { -1, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + }, + [AMY_HEART_PATTERN_B] = { + { 10, 7, -27 }, + { 12, 20, -22 }, + { 14, 30, -13 }, + { 16, 33, 0 }, + { -1, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + { 0, 0, 0 }, + }, + [AMY_HEART_PATTERN_C] = { + { 0, -10, -26 }, + { 4, 8, -27 }, + { 8, 22, -17 }, + { 12, 28, -1 }, + { 16, 23, 16 }, + { 20, 10, 26 }, + { -1, 0, 0 }, + { 0, 0, 0 }, + }, + [AMY_HEART_PATTERN_STOP_N_SLAM] = { + { 2, 0, 4 }, + { 6, 19, 6 }, + { 10, 28, 2 }, + { 14, 19, 4 }, + { 18, 0, 6 }, + { 22, -19, 2 }, + { 26, -28, 4 }, + { 30, -19, 6 }, + }, +}; + +#if (GAME == GAME_SA1) +extern void CreateAmyAttackHeartEffect(void) +#elif (GAME == GAME_SA2) +extern void CreateAmyAttackHeartEffect(u16 kind) +#endif +{ + u8 i; + + if (IS_MULTI_PLAYER) { + return; + } + + if (gPlayer.character != CHARACTER_AMY) { + return; + } + +#if (GAME == GAME_SA2) + if ((gPlayer.charState == CHARSTATE_BOOSTLESS_ATTACK) || (gPlayer.charState == CHARSTATE_SOME_ATTACK) + || (gPlayer.charState == CHARSTATE_TRICK_DOWN)) +#endif + { + struct Task *t = TaskCreate(Task_AmyAttackHeartEffect, sizeof(AmyAtkHearts), 0x3001, 0, TaskDestructor_AmyAttackHeartEffect); + AmyAtkHearts *hearts = TASK_DATA(t); + + // TODO: Remove magic nums! +#if (GAME == GAME_SA1) + hearts->unk100 = gPlayer.charState; + hearts->kind = gPlayer.charState - 87; +#elif (GAME == GAME_SA2) + hearts->unk100 = sCharStateAnimInfo[gPlayer.charState][0]; + hearts->unk102 = sCharStateAnimInfo[gPlayer.charState][1]; + + if (gPlayer.charState < 80) { + hearts->unk100 += gPlayerCharacterIdleAnims[gPlayer.character]; + } + + hearts->kind = kind; +#endif + hearts->unk106 = 0; + hearts->unk108 = 0; + hearts->unk10A = 0; + + for (i = 0; i < ARRAY_COUNT(hearts->params); i++) { + hearts->params[i].count = 0; + } + } +} + +// NOTE: Fakematch +// (99.97%) https://decomp.me/scratch/Z3oDP +void Task_AmyAttackHeartEffect(void) +{ +#ifndef NON_MATCHING + register struct Task *t asm("r2") = gCurTask; +#else + struct Task *t = gCurTask; +#endif + AmyAtkHearts *hearts = TASK_DATA(t); + u8 i; + + // TODO: Fix horrible cast! +#if (GAME == GAME_SA1) + if (hearts->unk100 != gPlayer.charState) +#else + if ((!PLAYER_IS_ALIVE) || ((*(u32 *)&hearts->unk100 != *(u32 *)&gPlayer.anim) && (*(u32 *)&gPlayer.anim != 0x0001019F))) +#endif + { + TaskDestroy(t); + return; + } else { + for (i = 0; i < ARRAY_COUNT(hearts->params); i++) { + if (hearts->params[i].count != 0) { +#ifndef NON_MATCHING + register s32 sIndex asm("r0") = i * sizeof(Sprite); + register Sprite *s asm("r4") = ((void *)&hearts->sprHearts) + sIndex; +#else + Sprite *s = &hearts->sprHearts[i]; +#endif + + if (s->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + hearts->params[i].count = 0; + VramFree(s->graphics.dest); + } + } + } + + { // _08015D56+0xA + u16 r2 = sHeartOffsets[hearts->kind][hearts->unk108][0]; + r2 *= 16; + + if (r2 != (u16)-1) { + u16 old106 = hearts->unk106; + hearts->unk106 += gPlayer.spriteInfoBody->s.animSpeed; + + if (old106 >= r2) { + u32 v; + sa2__sub_8015E28(hearts->unk108); + + hearts->unk108 = ((++hearts->unk108) & 0x7); + + if (hearts->unk108 == 0) { + hearts->unk106 = 0; + } + } + } + + for (i = 0; i < ARRAY_COUNT(hearts->sprHearts); i++) { + struct Camera *cam = &gCamera; + + if (hearts->params[i].count != 0) { + Sprite *s; + s32 x, y; +#if (GAME == GAME_SA1) + u16 camX, camY; +#elif (GAME == GAME_SA2) + s32 camX, camY; +#endif +#ifndef NON_MATCHING + register s32 index asm("r0") = i; + index *= sizeof(Sprite); + s = ((void *)&hearts->sprHearts) + index; +#else + s = &hearts->sprHearts[i]; +#endif + x = Q(hearts->params[i].x); + y = Q(hearts->params[i].y); + + camX = gCamera.x; + s->x = (x >> 16) - camX; + camY = gCamera.y; + s->y = (y >> 16) - camY; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + } + } +} + +void sa2__sub_8015E28(u16 p0) +{ + AmyAtkHearts *hearts = TASK_DATA(gCurTask); + u8 i = 0; + + while (hearts->params[i].count != 0) { + if (++i >= ARRAY_COUNT(hearts->params)) { + return; + } + } + + if (i < ARRAY_COUNT(hearts->params)) { + Sprite *s = &hearts->sprHearts[i]; + hearts->params[i].count = 0xFF; + hearts->params[i].x = gPlayer.qWorldX; + hearts->params[i].y = gPlayer.qWorldY; + + if (gPlayer.moveState & MOVESTATE_FACING_LEFT) { + hearts->params[i].x -= sHeartOffsets[hearts->kind][p0][1] << 8; + } else { + hearts->params[i].x += sHeartOffsets[hearts->kind][p0][1] << 8; + } + + if (GRAVITY_IS_INVERTED) { + hearts->params[i].y -= sHeartOffsets[hearts->kind][p0][2] << 8; + } else { + hearts->params[i].y += sHeartOffsets[hearts->kind][p0][2] << 8; + } + + hearts->params[i].unk8 = 0; + hearts->params[i].unkA = 0; + + s->graphics.dest = VramMalloc(4); + s->oamFlags = SPRITE_OAM_ORDER(16); + s->graphics.size = 0; +#if (GAME == GAME_SA1) + // TODO: Unify name! + s->graphics.anim = SA1_ANIM_HEART; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_HEART; +#endif + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = gPlayer.spriteInfoBody->s.animSpeed; + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + +#if (GAME == GAME_SA2) + if (GRAVITY_IS_INVERTED) { + SPRITE_FLAG_SET(s, Y_FLIP); + } else { + SPRITE_FLAG_SET_VALUE(s, PRIORITY, 2); + } +#endif + } +} + +void TaskDestructor_AmyAttackHeartEffect(struct Task *t) +{ + AmyAtkHearts *hearts = TASK_DATA(t); + + u8 i; + for (i = 0; i < ARRAY_COUNT(hearts->params); i++) { + if (hearts->params[i].count != 0) { + Sprite *s = &hearts->sprHearts[i]; + VramFree(s->graphics.dest); + } + } +} diff --git a/sa1/src/game/character_select.c b/sa1/src/game/character_select.c new file mode 100644 index 0000000000..c81c3309cd --- /dev/null +++ b/sa1/src/game/character_select.c @@ -0,0 +1,1576 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/gTask_03006240.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/multiplayer/unk_1.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" +#include "game/save.h" +#include "game/time_attack/menu.h" +#include "game/title_screen.h" + +#include "constants/characters.h" +#include "constants/songs.h" + +// Character Indices +#define CIDX_LEFT 0 +#define CIDX_MIDDLE 1 +#define CIDX_RIGHT 2 +#define CIDX_BLOCK 3 // appears when a character was chosen already in MP +#define CIDX_COUNT 4 + +typedef struct CharSelect_20 { + GameOverB overB; + s32 unk18; + u16 unk1C; + s16 unk1E; +} CharSelect_20; + +typedef struct CharSelect_34 { + Sprite s; + u16 unk30; + u16 unk32; +} CharSelect_34; + +typedef struct CharSelect_3C { + StrcUi_805423C strc0; + struct Task *taskC; // -> CharSelect_Chars + struct Task *task10; // -> CharSelect_20 + struct Task *task14; // -> CharSelect_44 + struct Task *task18; // -> CharSelect_20 + struct Task *task1C; // -> CharSelect_20 + struct Task *task20; // -> CharSelect_34 + u32 unk24; + s16 unk28; + s8 unk2A; + s8 unk2B; + u8 unk2C; + u8 unk2D; + u8 unk2E; + u8 unk2F; + u8 filler30[0x9]; + u8 unk39; +} CharSelect_3C; + +typedef struct CharSelect_44 { + GameOverB overB; + GameOverB overB2; + u32 unk30; + u32 unk34; + u32 unk38; + s32 unk3C; + s16 unk40; +} CharSelect_44; + +typedef struct CharSelect_Chars { + Sprite sprites[CIDX_COUNT]; + u32 unkC0; + s16 unkC4; + u8 unkC6; + u8 unkC7; + u8 unkC8; + u8 unkC9; +} CharSelect_Chars; + +void Task_8059F9C(void); +void Task_nullsub_805B980(void); +void Task_805A060(void); +void Task_805ACD8(void); +void Task_805AF24(void); +void Task_805B11C(void); +void Task_805B1E0(void); +void Task_805B52C(void); +void Task_805B984(void); +void CheckCPUPartnerUnlock(void); +void sub_805B858(void); +void Task_805A54C(void); +void sub_805A9A4(void); +void Task_805A798(void); +void Task_805AE84(void); +void Task_805B880(void); +void Task_805B8C0(void); +void Task_805B930(void); +void Task_805AAF8(void); +void sub_805ADF0(void); +void sub_805AFC4(void); +void sub_805B324(void); +void sub_805B694(void); +void Task_805AC00(void); + +extern u32 gUnknown_03005140; + +extern void CreateCourseSelect(u8 param0); // TODO: Header +const u16 gUnknown_08688570[] = { 25, 25, 24, 20 }; +const u8 gUnknown_08688578[4] = { 3, 0, 2, 1 }; + +extern void sub_805321C(u8 *param0, GameOverB *param1); + +// (99.35%) https://decomp.me/scratch/Gn2Mk +NONMATCH("asm/non_matching/game/char_select__CreateCharacterSelectionScreen.inc", void CreateCharacterSelectionScreen(u8 selectedCharacter)) +{ + Strc_80528AC gfx; + s32 sp38; + s8 *sp3C; + struct Task *t; + struct Task *t2; + CharSelect_20 *temp_r0_2; + CharSelect_20 *temp_r0_4; + CharSelect_20 *temp_r0_6; + CharSelect_34 *temp_r4; + CharSelect_3C *temp_r7; + CharSelect_44 *temp_r0_8; + CharSelect_Chars *temp_r2_4; + Sprite *s; + s32 temp_r1; + s32 temp_r1_6; + s8 *temp_r1_3; + s8 temp_r1_2; + u16 temp_r2; + u16 temp_r2_3; + + gTailsEnabled = FALSE; + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + sub_80535FC(); + UiGfxStackInit(); + gDispCnt = 0x1240; + gBgCntRegs[1] = 0x1907; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + + temp_r7 = TASK_DATA(TaskCreate(Task_8059F9C, sizeof(CharSelect_3C), 0x2000U, 0U, NULL)); + temp_r7->unk28 = (0x2000 + ((selectedCharacter & 3) << 8)); + temp_r1_2 = (selectedCharacter & 3) + 0x20; + temp_r7->unk2A = temp_r1_2; + temp_r7->unk2B = temp_r1_2; + temp_r7->unk2C = 0; + temp_r7->unk2D = 0; + temp_r7->unk2E = 0; + temp_r7->unk24 = 0; + temp_r7->unk39 = 0xFF; + temp_r7->unk2F = 0; + temp_r7->strc0.unk0 = 0; + temp_r7->strc0.unk2 = 0; + temp_r7->strc0.unk4 = 2; + temp_r7->strc0.unk6 = 0; + temp_r7->strc0.unk8 = 0x200; + temp_r7->strc0.unkA = 1; + + t = TaskCreate(Task_nullsub_805B980, sizeof(CharSelect_20), 0x2030U, 0U, NULL); + temp_r0_2 = TASK_DATA(t); + temp_r0_2->overB.qUnkA = 0x100; + temp_r0_2->overB.unkC = 0x40; + temp_r0_2->overB.unkE = 8; + temp_r0_2->overB.unk10 = 0; + temp_r0_2->overB.unk12 = 0xF; + temp_r0_2->overB.unk16 = 1; + temp_r0_2->overB.unk8 = 0x5A; + temp_r0_2->unk18 = 0; + temp_r0_2->unk1C = (u16)temp_r7->unk28; + temp_r0_2->unk1E = (u16)temp_r7->unk28; + temp_r7->task10 = t; + + t = TaskCreate(Task_nullsub_805B980, sizeof(CharSelect_20), 0x2040U, 0U, NULL); + temp_r0_4 = TASK_DATA(t); + temp_r0_4->overB.qUnkA = 0x100; + temp_r0_4->overB.unkC = 0x28; + temp_r0_4->overB.unkE = 1; + temp_r0_4->overB.unk10 = 1; + temp_r0_4->overB.unk12 = 0; + temp_r0_4->overB.unk16 = 1; + temp_r0_4->overB.unk8 = 0; + temp_r0_4->unk18 = 0; + temp_r0_4->unk1C = 0; + temp_r7->task1C = t; + + t = TaskCreate(Task_nullsub_805B980, sizeof(CharSelect_20), 0x2030U, 0U, NULL); + temp_r0_6 = TASK_DATA(t); + temp_r0_6->overB.qUnkA = 0; + temp_r0_6->overB.unkC = 0x54; + temp_r0_6->overB.unkE = 6; + temp_r0_6->overB.unk10 = 2; + temp_r0_6->overB.unk12 = 0; + temp_r0_6->overB.unk16 = 1; + temp_r0_6->overB.unk8 = 0x14; + temp_r0_6->unk18 = 0; + temp_r0_6->unk1C = 0; + temp_r0_6->unk1E = 0; + temp_r7->task18 = t; + + t = TaskCreate(Task_nullsub_805B980, sizeof(CharSelect_44), 0x2030U, 0U, NULL); + temp_r0_8 = TASK_DATA(t); + temp_r0_8->overB.unk16 = 1; + temp_r0_8->overB.unk10 = 3; + temp_r0_8->overB.qUnkA = 0; + temp_r0_8->overB.unkC = 0x38; + temp_r0_8->overB.unkE = 8; + temp_r0_8->overB.unk12 = 0; + temp_r0_8->overB.unk8 = 0x78; + temp_r0_8->overB2.qUnkA = 0x118; + temp_r0_8->overB2.unkC = 0x3A; + temp_r0_8->overB2.unkE = 9; + temp_r0_8->overB2.unk10 = 4; + temp_r0_8->overB2.unk12 = 0; + temp_r0_8->overB2.unk16 = 1; + temp_r0_8->overB2.unk8 = 0x64; + temp_r0_8->unk38 = 0; + temp_r0_8->unk30 = 0; + temp_r0_8->unk34 = 0x4600; + temp_r0_8->unk3C = 0x4600; + temp_r0_8->unk40 = 0; + temp_r7->task14 = t; + + t = TaskCreate(Task_805B984, sizeof(CharSelect_34), 0x2020U, 0U, NULL); + temp_r4 = TASK_DATA(t); + s = &temp_r4->s; + temp_r4->unk30 = 0; + temp_r4->unk32 = 0; + s->graphics.dest = BG_CHAR_ADDR_FROM_BGCNT(1) + 0x40; + s->graphics.size = 0; + s->frameFlags = 0x8000; + s->x = 0; + s->y = 0; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->graphics.anim = 723; + s->variant = 0; + temp_r7->task20 = t; + UpdateSpriteAnimation_BG(s); + DisplaySprite_BG(s); + + gfx.uiGfxID = 0x27; + gfx.unk2B = 0; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette + (selectedCharacter * 3); + gfx.tilesSize = 0x400; + gfx.paletteSize = 8; + gfx.unk28 = 0xF; + gfx.vramC = (u8 *)OBJ_VRAM0 + 0x0020; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = 0x28; + gfx.unk2B = 1; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x400; + gfx.paletteSize = 0x20; + gfx.unk28 = 0; + gfx.vramC = (u8 *)OBJ_VRAM0 + 0x0420; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = 0x29; + gfx.unk2B = 2; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles + (selectedCharacter * 0xC00); + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0xC00; + gfx.vramC = (u8 *)OBJ_VRAM0 + 0x1120; + gfx.paletteSize = 0x20; + gfx.unk28 = 0; + gfx.unk2A = 9; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = 0x2B; + gfx.unk2B = 3; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.tilesSize = 0x100; + gfx.vramC = (u8 *)OBJ_VRAM0 + 0x820; + gfx.paletteSize = 0x20; + gfx.unk28 = 0; + gfx.unk2A = 9; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = 0x2A; + gfx.unk2B = 4; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.tilesSize = 0x800; + gfx.vramC = (u8 *)OBJ_VRAM0 + 0x920; + gfx.paletteSize = 0x20; + gfx.unk28 = 0; + gfx.unk2A = 9; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + t2 = TaskCreate(Task_nullsub_805B980, sizeof(CharSelect_Chars), 0x2010U, 0U, NULL); + temp_r2_4 = TASK_DATA(t2); + temp_r2_4->unkC0 = 0; + temp_r2_4->unkC4 = 0; + temp_r2_4->unkC6 = 0; + temp_r2_4->unkC8 = 0; + temp_r7->taskC = t2; + + { + Sprite *s = &temp_r2_4->sprites[CIDX_MIDDLE]; + s->graphics.dest = OBJ_VRAM0 + 0x2520; + s->graphics.size = 0; + s->frameFlags = 0; + s->x = 280; + s->y = 110; + s->oamFlags = 0x7C0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->graphics.anim = 0x2D2; + s->variant = 0; + } + + { + Sprite *s = &temp_r2_4->sprites[CIDX_LEFT]; + s->graphics.dest = OBJ_VRAM0 + 0x3920; + s->graphics.size = 0; + s->frameFlags = 0; + s->x = -50; + s->y = 110; + s->oamFlags = 0x7C0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->graphics.anim = 722; + s->variant = 6; + } + + { + Sprite *s = &temp_r2_4->sprites[CIDX_RIGHT]; + s->graphics.dest = OBJ_VRAM0 + 0x4D20; + s->graphics.size = 0; + s->frameFlags = 0; + s->x = 290; + s->y = 110; + s->oamFlags = 0x7C0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->graphics.anim = 722; + s->variant = 2; + } + + { + Sprite *s = &temp_r2_4->sprites[CIDX_BLOCK]; + s->graphics.dest = OBJ_VRAM0 + 0x6120; + s->graphics.size = 0; + s->frameFlags = 0; + s->x = 290; + s->y = 110; + s->oamFlags = 0x700; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->graphics.anim = 730; + s->variant = 0; + UpdateSpriteAnimation(s); + } + + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = -1; + gBgSprites_Unknown2[1][3] = 0x20; + m4aSongNumStartOrContinue(MUS_CHARACTER_SELECTION); + sub_805423C(&temp_r7->strc0); +} +END_NONMATCH + +void Task_8059F9C(void) +{ + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + if (sub_805423C(&strc3C->strc0)) { + strc3C->strc0.unk0 = 0; + strc3C->strc0.unk2 = 1; + strc3C->strc0.unk4 = 1; + strc3C->strc0.unk6 = 0; + strc3C->strc0.unk8 = 0x200; + strc3C->strc0.unkA = 1; + gDispCnt |= 0x6000; + + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, 40); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, 240); + gWinRegs[WINREG_WIN1H] = WIN_RANGE(DISPLAY_WIDTH - 40, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN1V] = WIN_RANGE(0, 240); + gWinRegs[WINREG_WININ] = 0x3F3F; + gWinRegs[WINREG_WINOUT] = 0x1F; + gBldRegs.bldCnt = 0x1290; + gBldRegs.bldAlpha = 0x10; + gBldRegs.bldY = 8; + + strc3C->taskC->main = Task_805B1E0; + strc3C->task10->main = Task_805B52C; + strc3C->task1C->main = Task_805B11C; + strc3C->task18->main = Task_805AF24; + strc3C->task14->main = Task_805ACD8; + + gCurTask->main = Task_805A060; + } +} + +// (99.88%) https://decomp.me/scratch/WGT0R +NONMATCH("asm/non_matching/game/char_select__Task_805A060.inc", void Task_805A060()) +{ + CharSelect_20 *sp0; + CharSelect_44 *sp4; + CharSelect_20 *sp8; + CharSelect_34 *spC; + s32 temp_r2_4; + s32 var_r4; + s32 var_r6_2; + s8 temp_r0_8; + s16 var_r8; + u32 var_r0_4; + u32 i; + + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + CharSelect_Chars *temp_sl; + + sp8 = TASK_DATA(strc3C->task18); + sp0 = TASK_DATA(strc3C->task10); + temp_sl = TASK_DATA(strc3C->taskC); + sp4 = TASK_DATA(strc3C->task14); + spC = TASK_DATA(strc3C->task20); + if (IS_MULTI_PLAYER) { + for (i = 0; (i < 4) && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyInPriorityRange(0U, 0xFFFFU); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + + if (IS_MULTI_PLAYER) { + strc3C->unk2F = 0U; + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + if (i != SIO_MULTI_CNT->id) { + if (GetBit(gMultiplayerConnections, i)) { + struct MultiSioData_0_0 *data = &gMultiSioRecv[i].pat0; + if (data->unk0 > 0x20U) { + strc3C->unk2F |= BitValue(data->unk2); + } + } + } + } + } + } + + var_r8 = strc3C->unk2B; + CheckCPUPartnerUnlock(); + if ((B_BUTTON & gRepeatedKeys) && (strc3C->unk24 > 0x21U) && ((s16)var_r8 == strc3C->unk2A) && IS_SINGLE_PLAYER) { + m4aSongNumStart(SE_RETURN); + sub_805B858(); + var_r6_2 = strc3C->unk2C; + var_r4 = strc3C->unk2D; + } else { + if ((A_BUTTON & gRepeatedKeys) && (var_r8 == strc3C->unk2A) && (strc3C->unk24 > 0x21U) && !GetBit(strc3C->unk2F, (var_r8 & 0x3))) { + m4aSongNumStart(SE_SELECT); + if (IS_SINGLE_PLAYER) { + sub_805A9A4(); + } else { + strc3C->task1C->flags |= TASK_INACTIVE; + gCurTask->main = Task_805A54C; + } + } else if ((0x20 & gRepeatedKeys) && ((u32)strc3C->unk24 > 0x21U)) { + var_r8--; + if (strc3C->unk2C == 0) { + strc3C->unk2C = 2; + strc3C->unk2E = 0x10; + m4aSongNumStart(SE_SHIFT); + } + } else if ((0x10 & gRepeatedKeys) && ((u32)strc3C->unk24 > 0x21U)) { + var_r8++; + if (strc3C->unk2C == 0) { + strc3C->unk2C = 1; + strc3C->unk2E = 0x10; + m4aSongNumStart(SE_SHIFT); + } + } else { + if (var_r8 > strc3C->unk2A) { + if (strc3C->unk2C == 0) { + strc3C->unk2C = 1; + strc3C->unk2E = 0x10; + m4aSongNumStart(SE_SHIFT); + } + } else if (var_r8 < strc3C->unk2A) { + if (strc3C->unk2C == 0) { + strc3C->unk2C = 2; + strc3C->unk2E = 0x10; + m4aSongNumStart(SE_SHIFT); + } + } else { + if (GetBit(strc3C->unk2F, (var_r8 & 0x3)) && ((u32)strc3C->unk24 > 0x21U)) { + if (strc3C->unk2D != 0) { + if (1 & strc3C->unk2D) { + var_r8++; + } else { + var_r8--; + } + } else { + strc3C->unk2C = 1; + strc3C->unk2E = 0x10; + m4aSongNumStart(SE_SHIFT); + } + } + } + } + } + strc3C->unk2D = strc3C->unk2C; + if (strc3C->unk2C != 0) { + if (1 & strc3C->unk2C) { + if (strc3C->unk2E != 0) { + strc3C->unk28 += 0x10; + if (--strc3C->unk2E == 0) { + strc3C->unk2C = 0U; + } + } + } else { + if (strc3C->unk2E != 0) { + strc3C->unk28 -= 0x10; + + if (--strc3C->unk2E == 0) { + strc3C->unk2C = 0U; + } + } + } + } + strc3C->unk28 = (u16)(0x3FFF & strc3C->unk28); + temp_r0_8 = 0x3F & var_r8; + strc3C->unk2B = temp_r0_8; + if (strc3C->unk2A <= temp_r0_8) { + strc3C->unk2A = I(strc3C->unk28); + } else { + s32 v = (u16)strc3C->unk28; + v <<= 16; + temp_r2_4 = v >> 24; + strc3C->unk2A = temp_r2_4; + if (0xFF & strc3C->unk28) { + var_r0_4 = temp_r2_4 + 1; + strc3C->unk2A = (s8)var_r0_4; + } + } + strc3C->unk2A &= 0x3F; + if ((strc3C->unk2A > 0x24) && ((s32)strc3C->unk2B > 0x24) && ((strc3C->unk28 > Q(36)))) { + while (strc3C->unk2A > 0x24) { + strc3C->unk2A -= 4; + } + + while (strc3C->unk2B > 0x24) { + strc3C->unk2B -= 4; + } + + while (strc3C->unk28 > 0x2400) { + strc3C->unk28 -= 0x400; + } + } else { + if ((strc3C->unk2A < 0x1C) && (strc3C->unk2B < 0x1C) && (strc3C->unk28 < Q(28))) { + while (strc3C->unk2A < 0x1C) { + strc3C->unk2A += 4; + } + + while (strc3C->unk2B < 0x1C) { + strc3C->unk2B += 4; + } + + while (strc3C->unk28 < 0x1C00) { + strc3C->unk28 += 0x400; + } + } + } + sp8->unk1C = (0x3FF & strc3C->unk28); + sp0->unk1C = (0x3FF & strc3C->unk28); + temp_sl->unkC4 = (0x3FF & strc3C->unk28); + temp_sl->unkC6 = strc3C->unk2C; + spC->unk32 = (0x3FF & strc3C->unk28); + temp_sl->unkC8 = strc3C->unk2F; + sp4->unk38 = ++strc3C->unk24; + if (IS_MULTI_PLAYER) { + gMultiSioSend.pat0.unk0 = 0x20; + gMultiSioSend.pat0.unk2 = (u8)((u32)(0x300 & sp8->unk1C) >> 8); + } +} +END_NONMATCH + +// (89.07%) https://decomp.me/scratch/IYC6j +NONMATCH("asm/non_matching/game/char_select__Task_805A54C.inc", void Task_805A54C()) +{ + s32 temp_r0_2; + u32 i; + s32 var_r4; + s32 var_r6; + struct Task *temp_r2; + struct Task *temp_r2_2; + u16 temp_r2_3; + u8 *temp_r1_3; + u8 *var_r2; + u8 temp_r0; + u8 temp_r4; + union MultiSioData *var_r2_2; + void *temp_r1; + void *temp_r1_2; + union MultiSioData *send, *recv; + u8 charactersSelected[NUM_CHARACTERS] = { 0 }; + + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + + if (IS_MULTI_PLAYER) { + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + } + + if (B_BUTTON & gPressedKeys) { + temp_r2 = strc3C->task1C; + temp_r2->flags &= ~0x1; + gCurTask->main = Task_805A060; + } else { + struct MultiSioData_0_0 *temp_r1; + if (gMultiSioRecv->pat0.unk0 == 0x22) { + for (i = 0; i < 4; i++) { + if (GetBit(gMultiplayerConnections, i)) { + gMultiplayerCharacters[i] = gMultiSioRecv[i].pat0.unk2; + } + } + gCurTask->main = Task_805A798; + return; + } + + // TODO: Compare with SA2's Task_MultiplayerWaitForSelections() to maybe get a closer match! + for (i = 0; i < 4; i++) { + if ((((s32)gMultiplayerConnections >> i) & 1) && (i != SIO_MULTI_CNT->id)) { + temp_r1 = &gMultiSioRecv[i].pat0; + if ((temp_r1->unk0 == 0x21) && (temp_r1->unk2 == ((u32)(0x300 & strc3C->unk28) >> 8)) && (i < SIO_MULTI_CNT->id)) { + temp_r2_2 = strc3C->task1C; + temp_r2_2->flags &= 0xFFFE; + gCurTask->main = Task_805A060; + } + } + } + if (gMultiSioStatusFlags & 0x80) { + gMultiSioSend.pat0.unk0 = 0x22; + gMultiSioSend.pat0.unk2 = I(0x300 & strc3C->unk28); + for (i = 0; i < 4; i++) { + if (GetBit(gMultiplayerConnections, i)) { + temp_r1 = &gMultiSioRecv[i].pat0; + if ((temp_r1->unk0 != 0x21) || (++charactersSelected[temp_r1->unk2] > 1)) { + gMultiSioSend.pat0.unk0 = 0x21; + break; + } + } + } + } else { + gMultiSioSend.pat0.unk0 = 0x21; + gMultiSioSend.pat0.unk2 = (u8)((u32)(0x300 & strc3C->unk28) >> 8); + } + } +} +END_NONMATCH + +// (87.54%) https://decomp.me/scratch/MOYRn +NONMATCH("asm/non_matching/game/char_select__Task_805A798.inc", void Task_805A798()) +{ + s32 temp_r0_2; + u32 i; + s32 var_r6; + struct Task *temp_r2; + struct Task *temp_r2_2; + u16 temp_r2_3; + u8 *temp_r1_3; + u8 *var_r2; + void *temp_r3; + u8 temp_r0; + u8 temp_r4; + void *temp_r1; + void *temp_r1_2; + union MultiSioData *send, *recv; + + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + + if (IS_MULTI_PLAYER) { + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + } + + if (gMultiSioRecv->pat0.unk0 == 0x23) { + gUnknown_03005140 = 0; + for (i = 0; i < 4; i++) { + if (GetBit(gMultiplayerConnections, i)) { + s32 var_r0 = gMultiSioRecv[i].pat0.unk3; + if ((u32)var_r0 < (u32)gUnknown_03005140) { + var_r0 = gUnknown_03005140; + } + gUnknown_03005140 = var_r0; + if (!(gMultiSioStatusFlags & 0x80)) { + gMultiplayerCharacters[i] = gMultiSioRecv[i].pat0.unk2; + } + } + } + sub_805A9A4(); + return; + } + + if (gMultiSioRecv->pat0.unk0 == 0x21) { + gMultiSioSend.pat0.unk0 = 0x20; + strc3C->task1C->flags &= ~1; + gCurTask->main = Task_805A060; + return; + } + if (gMultiSioStatusFlags & 0x80) { + gMultiSioSend.pat0.unk0 = 0x23; + gMultiSioSend.pat0.unk2 = (u8)((u32)(0x300 & strc3C->unk28) >> 8); + gMultiSioSend.pat0.unk3 = (u8)LOADED_SAVE->unlockedLevels[gMultiSioSend.pat0.unk2]; + for (i = 0; i < 4; i++) { + if (GetBit(gMultiplayerConnections, i) && (i != 0) + && (gMultiplayerCharacters[i] = gMultiSioRecv[i].pat0.unk2, (gMultiSioRecv[i].pat0.unk0 != 0x22))) { + gMultiSioSend.pat0.unk0 = 0x22; + + if (B_BUTTON & gPressedKeys) { + gMultiSioSend.pat0.unk0 = 0x21; + } + + break; + } + } + } else { + gMultiSioSend.pat0.unk0 = 0x22; + gMultiSioSend.pat0.unk2 = (u8)((u32)(0x300 & strc3C->unk28) >> 8); + gMultiSioSend.pat0.unk3 = (u8)LOADED_SAVE->unlockedLevels[gMultiSioSend.pat0.unk2]; + } +} +END_NONMATCH + +void sub_805A9A4() +{ + Strc_80528AC gfx; + s32 strc44_2; + + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + CharSelect_Chars *chars = TASK_DATA(strc3C->taskC); + CharSelect_44 *strc44 = TASK_DATA(strc3C->task14); + + gSelectedCharacter = (s8)((u32)(0x300 & (u16)strc3C->unk28) >> 8); + chars->sprites[CIDX_MIDDLE].variant = (s8)(((u32)(0x300 & (u16)strc3C->unk28) >> 7) + 1); + strc3C->task14->main = Task_805AE84; + strc3C->taskC->main = Task_805B8C0; + strc3C->task18->main = Task_805B880; + strc3C->task10->main = Task_805B930; + TaskDestroy(strc3C->task1C); + TaskDestroy(strc3C->task20); + strc3C->unk24 = 0; + strc44->unk40 = 0xB4; + gBldRegs.bldY = 0; + strc44->unk40 = 0xB4; + + gfx.uiGfxID = 0x2C; + gfx.unk2B = 4; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.tilesSize = 0x200; + gfx.vramC = OBJ_VRAM0 + 0x920; + gfx.paletteSize = 0x20; + gfx.unk28 = 0; + gfx.unk2A = 9; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gCurTask->main = Task_805AAF8; +} + +void Task_805AAF8() +{ + u8 arr[4] = { 38, 38, 38, 38 }; + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + struct Task *task18 = strc3C->task18; + + if (++strc3C->unk24 > 0x38U) { + u8 temp_r6 = strc3C->unk39; + + TaskDestroy(task18); + TaskDestroy(strc3C->task10); + TaskDestroy(strc3C->taskC); + TaskDestroy(strc3C->task14); + TaskDestroy(gCurTask); + + gDispCnt &= 0xFFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + if (IS_MULTI_PLAYER) { + sub_801C9D8(); + } else { + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + if (temp_r6 == 8) { + m4aSongNumStart(SE_RING_COPY); + gTailsEnabled = 1; + } + if ((gGameMode == GAME_MODE_SINGLE_PLAYER) && (LOADED_SAVE->unlockedLevels[gSelectedCharacter] == 0)) { + gCurrentLevel = 0; + gMultiplayerCurrentLevel = 0; + ApplyGameStageSettings(); + return; + } + } + + CreateCourseSelect(0); + } + } else if (strc3C->unk24 > arr[gSelectedCharacter]) { + sub_805423C(&strc3C->strc0); + } +} + +void Task_805AC00(void) +{ + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + + strc3C->unk24 += 1; + strc3C->strc0.unk8 = 0x180; + strc3C->strc0.unkA = 0x10; + + if (sub_805423C(&strc3C->strc0)) { + m4aSongNumStop(MUS_CHARACTER_SELECTION); + gDispCnt &= 0xFFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + TaskDestroy(gCurTask); + + if (gGameMode == 1) { + CreateTimeAttackMenu(); + } else { + CreateMainMenu(1U); + } + + return; + } else if (strc3C->unk24 == 0x10) { + TaskDestroy(strc3C->task18); + TaskDestroy(strc3C->task10); + TaskDestroy(strc3C->taskC); + TaskDestroy(strc3C->task14); + TaskDestroy(strc3C->task1C); + TaskDestroy(strc3C->task20); + + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x14; + + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = -1; + gBgSprites_Unknown2[1][3] = 0x14; + + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = -1; + gBgSprites_Unknown2[2][3] = 0x14; + } +} + +void Task_805ACD8() +{ + s16 temp_r0; + s16 temp_r4; + s32 var_r0; + u32 temp_r0_2; + u32 temp_r1; + + const char arr[] = " !\"#$%&\' !\"#$%&\' !\"#$%&\'"; + CharSelect_44 *strc44; + + strc44 = TASK_DATA(gCurTask); + + temp_r0 = strc44->unk38; + if ((s32)temp_r0 > 0x20) { + strc44->overB.unkC = 6; + strc44->unk38 = 0; + strc44->unk3C = (u32)(strc44->unk3C - 0xB4); + gCurTask->main = sub_805ADF0; + } else { + if ((s32)temp_r0 > 0xC) { + temp_r4 = temp_r0 - 0xD; + strc44->overB.unkC = (u16)(0x38 - ((s32)((u16)gSineTable[temp_r4 * (Div(temp_r4, 10) + 0x11)] << 0x10) >> 0x18)); + strc44->unk3C = strc44->unk3C - 0xB4; + } else if ((s32)temp_r0 > 9) { + strc44->overB.qUnkA = 0; + strc44->unk3C = strc44->unk3C - 0xB4; + } else { + strc44->overB.qUnkA = (0x100 - Div(temp_r0 << 8, 10)); + strc44->unk3C = strc44->unk3C + 0xFFFFF9C0; + } + } + sub_8052F78(" ", &strc44->overB); + temp_r0_2 = strc44->unk3C; + if (strc44->unk3C > 0) { + strc44->overB2.unkE = (u16)(9 - Div(strc44->unk3C >> 6, 32)); + } else { + strc44->overB2.unkE = 9; + } + if ((s32)strc44->unk3C > 0x3C00) { + strc44->overB2.unkE = 0; + } + + if (strc44->unk3C < -1984) { + strc44->unk3C = (u32)(strc44->unk3C + 0x800); + strc44->unk30 = (strc44->unk30 + 1) & 7; + } + strc44->overB2.qUnkA = (strc44->unk3C >> 6); + strc44->overB2.unkC = strc44->overB.unkC; + sub_8052F78((const char *)&arr[strc44->unk30], &strc44->overB2); +} + +void sub_805ADF0() +{ + s16 temp_r0; + s16 temp_r4; + s32 var_r0; + u32 temp_r0_2; + u32 temp_r1; + + const char arr[] = " !\"#$%&\' !\"#$%&\' !\"#$%&\'"; + CharSelect_44 *strc44; + + strc44 = TASK_DATA(gCurTask); + strc44->overB.qUnkA = 0; + + temp_r0 = strc44->unk38; + + sub_8052F78(" ", &strc44->overB); + + strc44->unk34++; + strc44->overB2.unkC = 6; + strc44->unk3C -= 0xB4; + + temp_r0_2 = strc44->unk3C; + if (strc44->unk3C > 0) { + strc44->overB2.unkE = (u16)(9 - Div(strc44->unk3C >> 6, 32)); + } else { + strc44->overB2.unkE = 9; + } + + if (strc44->unk3C < -1984) { + strc44->unk3C = (u32)(strc44->unk3C + 0x800); + strc44->unk30 = (strc44->unk30 + 1) & 7; + } + strc44->overB2.qUnkA = (strc44->unk3C >> 6); + sub_8052F78((const char *)&arr[strc44->unk30], &strc44->overB2); +} + +void Task_805AE84() +{ + s32 temp_r1; + s32 temp_r4; + s32 var_r2; + + CharSelect_44 *strc44; + u8 arr[] = " ! ! ! ! ! ! ! ! ! ! ! !"; + + strc44 = TASK_DATA(gCurTask); + + strc44->unk34++; + strc44->overB.qUnkA = 0; + sub_805321C((u8 *)" ", &strc44->overB); + strc44->overB2.unkC = 6; + strc44->unk3C -= strc44->unk40; + + for (var_r2 = 0; var_r2 < 3; var_r2++) { + if (strc44->unk40 != 0) { + strc44->unk40--; + } + } + + if (strc44->unk3C < -1984) { + strc44->unk3C += 0x800; + strc44->unk30 = (s32)((strc44->unk30 + 1) & 7); + } + strc44->overB2.qUnkA = (strc44->unk3C >> 6); + sub_805321C(&arr[strc44->unk30], &strc44->overB2); +} + +void Task_805AF24() +{ + s16 unk18; + + CharSelect_20 *strc20 = TASK_DATA(gCurTask); + + unk18 = ++strc20->unk18; + if (unk18 > 0x21) { + strc20->overB.unkC = 0x84; + strc20->unk18 = 0; + gCurTask->main = sub_805AFC4; + } else if (unk18 > 13) { + strc20->overB.unkC = ((SIN((Div(unk18 * 103, 110) - 10) * 17) >> 0x8) + 0x54); + } else if (unk18 > 0xA) { + strc20->overB.qUnkA = gUnknown_08688570[0]; + } else { + strc20->overB.qUnkA = 0x100 - Div(unk18 << 8, 0xA); + strc20->overB.qUnkA += gUnknown_08688570[0]; + } + sub_8052F78(" !\"#$%&\'", &strc20->overB); +} + +void sub_805AFC4() +{ + Strc_80528AC gfx; + s16 var_r0_2; + s16 var_r6; + u32 var_r4; + u8 temp_r1; + s16 unk1C; + + // Note: Mirrored in the middle + u16 sp30[16] = { -31, +27, -23, +19, -15, +11, -7, +3, -3, 7, -11, +15, -19, +23, -27, +31 }; + CharSelect_20 *strc20 = TASK_DATA(gCurTask); + + unk1C = (strc20->unk1C % 256u); + if (unk1C != 0) { + u32 index = 0x300; + index &= strc20->unk1C; + var_r4 = index >> 8; + + if (unk1C - 0x7F < 0) { + var_r0_2 = (0x7F - unk1C) >> 1; + } else { + var_r0_2 = (unk1C - 0x7F) >> 1; + } + var_r6 = var_r0_2; + + if (strc20->unk1E == 0) { + var_r4 = (u32)(0x300 & strc20->unk1C) >> 8; + if ((s16)(0xFF & strc20->unk1C) > 128) { + var_r4 += 1; + } + var_r4 = var_r4 & 3; + + UiGfxStackInit(); + + gfx.uiGfxID = 0x29; + gfx.unk2B = 2; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles + (var_r4 * 0xC00); + gfx.tilesSize = 0xC00; + gfx.vramC = OBJ_VRAM0 + 0x1120; + gfx.unk2A = 9; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + } + strc20->unk1E = (var_r6); + strc20->overB.qUnkA = gUnknown_08688570[var_r4] + sp30[(strc20->unk1C % 256u) >> 4]; + } else { + const u16 *ptr = gUnknown_08688570; + s32 index = 0x300; + index &= strc20->unk1C; + strc20->overB.qUnkA = ptr[index >> 8]; + } + sub_8052F78(" !\"#$%&\'", &strc20->overB); +} + +void Task_805B11C() +{ + s16 temp_r2; + s16 temp_r4; + s32 temp_r1_2; + s32 temp_r3; + + u8 arr[0xE] = { 16, 12, 8, 4, 8, 12, 0, 194, 198, 202, 206, 202, 198, 0 }; + CharSelect_20 *strc20; + + strc20 = TASK_DATA(gCurTask); + temp_r1_2 = strc20->unk18; + temp_r3 = temp_r1_2 + 1; + strc20->unk18 = temp_r3; + temp_r2 = (s16)temp_r3; + if ((s32)temp_r2 > 0x26) { + s32 index; + u8 *ptr; + if ((s32)temp_r2 > 0x62) { + strc20->unk18 = (s32)(temp_r1_2 - 0x3B); + } + temp_r4 = (s16)Mod((s32)temp_r2, 0x3C); + strc20->overB.qUnkA = arr[Div((s32)temp_r4, 10)]; + sub_8052F78(" ", &strc20->overB); + index = Div((s32)temp_r4, 10); + ptr = &arr[7]; + strc20->overB.qUnkA = ptr[index]; + sub_8052F78("!", &strc20->overB); + return; + } + if ((u32)temp_r3 > 30) { + strc20->overB.qUnkA = (s16)(((temp_r1_2 - 0x1D) * 6) - 0x24); + sub_8052F78(" ", &strc20->overB); + strc20->overB.qUnkA = (s16)(0xF0 - ((strc20->unk18 - 0x1E) * 6)); + sub_8052F78("!", &strc20->overB); + } +} + +void Task_805B1E0() +{ + u32 *temp_r1; + u32 *temp_r1_2; + s32 temp_r0; + s32 temp_r0_2; + s32 temp_r4; + s32 temp_r5; + u32 temp_sb; + u32 mask; + + CharSelect_Chars *chars = TASK_DATA(gCurTask); + + temp_sb = (u32)(0x300 & (u16)chars->unkC4) >> 8; + temp_r1 = &chars->unkC0; + temp_r0 = *temp_r1; + temp_r0_2 = temp_r0 + 1; + *temp_r1 = temp_r0_2; + if ((u32)temp_r0_2 > 0x11U) { + temp_r5 = temp_r0 - 0x10; + chars->sprites[CIDX_MIDDLE].x = 256 - Div(temp_r5 << 7, 11); + chars->sprites[CIDX_RIGHT].x = 284 - Div(temp_r5 << 5, 11); + chars->sprites[CIDX_LEFT].x = Div(temp_r5 << 5, 11) - 32; + chars->sprites[CIDX_MIDDLE].y = 110; + if (temp_r5 <= 4) { + gWinRegs[WINREG_WIN1H] = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH); + } else { +#ifndef NON_MATCHING + gWinRegs[WINREG_WIN1H] = (((DISPLAY_WIDTH - ((temp_r0 - 0x15) * 5)) << 8) + DISPLAY_WIDTH); +#else + gWinRegs[WINREG_WIN1H] = WIN_RANGE((DISPLAY_WIDTH - ((temp_r0 - 0x15) * 5)), DISPLAY_WIDTH); +#endif + } + } + + if (chars->unkC0 > 28) { + chars->unkC0 = 0; + gWinRegs[WINREG_WIN1H] = WIN_RANGE(DISPLAY_WIDTH - 40, DISPLAY_WIDTH); + gCurTask->main = sub_805B324; + } + + mask = 3; + chars->sprites[CIDX_MIDDLE].variant = temp_sb * 2; + chars->sprites[CIDX_RIGHT].variant = ((temp_sb + 1) & mask) * 2; + chars->sprites[CIDX_LEFT].variant = ((temp_sb + 3) & mask) * 2; + UpdateSpriteAnimation(&chars->sprites[CIDX_LEFT]); + DisplaySprite(&chars->sprites[CIDX_LEFT]); + UpdateSpriteAnimation(&chars->sprites[CIDX_MIDDLE]); + DisplaySprite(&chars->sprites[CIDX_MIDDLE]); + UpdateSpriteAnimation(&chars->sprites[CIDX_RIGHT]); + DisplaySprite(&chars->sprites[CIDX_RIGHT]); +} + +// TEMP - Remove this once sub_805B324() matches! +#ifndef NON_MATCHING +#if !CPU_ARCH_X86 && defined(__APPLE__) +asm(" .section __DATA,__data"); +#else +asm(" .section .rodata"); +#endif +asm(" .global gUnknown_08688602"); +asm("gUnknown_08688602:"); +#endif + +// (94.92%) https://decomp.me/scratch/I8ghH +NONMATCH("asm/non_matching/game/char_select__sub_805B324.inc", void sub_805B324()) +{ + Sprite *temp_r4; + Sprite *temp_r4_2; + s16 *temp_r0; + s16 *temp_r0_3; + s16 *temp_r0_4; + s16 *temp_r0_5; + s16 *temp_r0_6; + s16 *temp_r0_7; + s16 *temp_r2_2; + s16 *temp_r2_3; + s16 *temp_r2_4; + s16 *temp_r2_5; + s32 temp_r1_3; + s32 temp_r1_4; + s32 temp_r1_5; + s32 temp_r2; + s8 var_r2; + s32 var_r2_2; + s32 var_r3; + s32 var_r6; + u32 temp_r0_2; + s16 var_r4; + u8 *temp_r1_2; + u8 *temp_r7_2; + u8 temp_r1; + u8 arr[2][3] = { + { 0, 1, 3 }, + { 1, 2, 0 }, + }; + CharSelect_Chars *chars = TASK_DATA(gCurTask); + temp_r0 = &chars->unkC4; + var_r4 = ((u8)chars->unkC4 % 256u) >> 4; + temp_r0_2 = (u32)(0x300 & (u16)chars->unkC4) >> 8; + + if (chars->unkC6 == 0) { + chars->sprites[CIDX_LEFT].x = -8; + chars->sprites[CIDX_MIDDLE].x = 120; + chars->sprites[CIDX_RIGHT].x = 248; + var_r6 = 0; + } else { + if (1 & chars->unkC6) { + var_r3 = 1; + var_r2 = -1; + } else { + var_r3 = 0; + var_r2 = +1; + var_r4 = (0x10 - var_r4); + } + + var_r6 = var_r2 << 0x18; + if (var_r4 == 4) { + chars->sprites[CIDX_MIDDLE].variant = ((arr[var_r3][0] + temp_r0_2) & 3) * 2; + chars->sprites[CIDX_RIGHT].variant = ((arr[var_r3][1] + temp_r0_2) & 3) * 2; + chars->sprites[CIDX_LEFT].variant = ((arr[var_r3][2] + temp_r0_2) & 3) * 2; + temp_r1_3 = var_r6 >> 0x11; + chars->sprites[CIDX_LEFT].x -= temp_r1_3; + chars->sprites[CIDX_MIDDLE].x -= temp_r1_3; + chars->sprites[CIDX_RIGHT].x -= temp_r1_3; + } + if (var_r4 <= 8) { + temp_r1_4 = var_r6 >> 0x14; + chars->sprites[CIDX_LEFT].x += temp_r1_4; + chars->sprites[CIDX_MIDDLE].x += temp_r1_4; + chars->sprites[CIDX_RIGHT].x += temp_r1_4; + } + } + + temp_r1_5 = var_r6 >> 0x18; + if (temp_r1_5 == 1) { + if (var_r4 <= 3) { + var_r2_2 = 1; + } else { + var_r2_2 = 0; + } + } else if ((temp_r1_5 != -1) || (var_r2_2 = 1, (var_r4 <= 3))) { + var_r2_2 = 0; + } + + if ((chars->unkC8 >> (((var_r2_2 - 1) + temp_r0_2) & 3)) & 1) { + chars->sprites[3].x = chars->sprites[0].x; + chars->sprites[3].y = chars->sprites[0].y; + DisplaySprite(&chars->sprites[3]); + } + UpdateSpriteAnimation(&chars->sprites[0]); + DisplaySprite(&chars->sprites[0]); + + if ((chars->unkC8 >> ((temp_r0_2 + var_r2_2) & 3)) & 1) { + chars->sprites[3].x = chars->sprites[1].x; + chars->sprites[3].y = chars->sprites[1].y; + DisplaySprite(&chars->sprites[3]); + } + UpdateSpriteAnimation(&chars->sprites[1]); + DisplaySprite(&chars->sprites[1]); + + if ((chars->unkC8 >> ((var_r2_2 + 1 + temp_r0_2) & 3)) & 1) { + chars->sprites[3].x = chars->sprites[2].x; + chars->sprites[3].y = chars->sprites[2].y; + DisplaySprite(&chars->sprites[3]); + } + UpdateSpriteAnimation(&chars->sprites[2]); + DisplaySprite(&chars->sprites[2]); +} +END_NONMATCH + +void Task_805B52C() +{ + u8 arr[2][8] = { { 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21 }, { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 } }; + CharSelect_20 *strc20 = TASK_DATA(gCurTask); + Strc_80528AC gfx; + + s16 temp_r4 = ++strc20->unk18; + if (temp_r4 > 0x21) { + strc20->unk18 = 0; + strc20->overB.unkC = 0x70; + gCurTask->main = sub_805B694; + } else if ((s32)temp_r4 > 0xD) { + strc20->overB.unkC = ((SIN((Div(temp_r4 * 0x67, 0x6E) - 0xA) * 0x11) >> 0x8) + 0x40); + } else if ((s32)temp_r4 > 0xA) { + strc20->overB.qUnkA = 0; + } else { + strc20->overB.qUnkA = (u16)(0x100 - Div(temp_r4 << 8, 0xA)); + if (temp_r4 == 1) { + u16 index = strc20->unk1C & 0x300; + index >>= 8; + gfx.uiGfxID = 0x27; + gfx.unk2B = 0; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette + (index * 3); + gfx.vramC = (u8 *)OBJ_VRAM0 + 0x20; + gfx.paletteSize = 8; + gfx.unk28 = 0xF; + gfx.unk2A = 0xC; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + } + } + sub_8052F78((const char *)&arr[0][0], &strc20->overB); + strc20->overB.unkC += 0x20; + sub_8052F78((const char *)&arr[1][0], &strc20->overB); + strc20->overB.unkC -= 0x20; +} + +// TODO: Match without asm blocks +void sub_805B694() +{ + Strc_80528AC gfx; + u16 temp_r0_2; + u32 temp_r0; + u8 temp_r1; + s32 var_r0; + s32 var_r1; + u32 var_r3; + s32 var_r4; + u8 arr[2][8] = { { 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21 }, { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 } }; + CharSelect_20 *strc20 = TASK_DATA(gCurTask); + + strc20->overB.qUnkA = 0; + temp_r1 = strc20->unk1C; + if (temp_r1 != 0) { + s32 sub0; + var_r0 = temp_r1 - 0x7F; + if (var_r0 < 0) { + var_r0 = 0x7F - temp_r1; + } + var_r0 = var_r0 << 15; + var_r0 = (u32)var_r0 >> 16; +#ifndef NON_MATCHING + asm("" ::"r"(var_r0)); +#endif + temp_r0 = var_r0; + var_r4 = temp_r0; + sub0 = 168; +#ifndef NON_MATCHING + asm("" ::"r"(sub0)); +#endif + var_r1 = var_r4 << 16; + var_r1 >>= 16; + strc20->overB.unkC = (sub0 - var_r1); + + if ((s16)strc20->unk1E == 0) { + s32 v0 = strc20->unk1C; + var_r1 = 0x300; + var_r1 &= v0; + var_r3 = (u32)var_r1 >> 8; + var_r1 = 0xFF; + var_r1 &= strc20->unk1C; + if ((var_r1) > 0x80) { + var_r3 += 1; + } + + var_r3 &= 3; + + gfx.uiGfxID = 0x27; + gfx.unk2B = 0; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette + (var_r3 * 3); + gfx.vramC = OBJ_VRAM0 + 0x20; + gfx.paletteSize = 0x8; + gfx.unk28 = 0xF; + gfx.unk2A = 0xC; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + } + strc20->unk1E = (u16)temp_r0; + } else { + strc20->overB.unkC = 0x70; + } + if (strc20->overB.unkC < 0x70) { + strc20->overB.unkC = 0x70; + } + sub_8052F78((const char *)&arr[0][0], &strc20->overB); + strc20->overB.unkC += 0x20; + sub_8052F78((const char *)&arr[1][0], &strc20->overB); + strc20->overB.unkC -= 0x20; +} + +// NOTE: const data needs to be here for matching. +const u16 sTailsUnlockKeys[] = { + /** DPAD_UP was pressed already **/ + DPAD_RIGHT, // -> TAILS + DPAD_DOWN, DPAD_RIGHT, // -> KNUCKLES + L_BUTTON, DPAD_RIGHT, // -> AMY + R_BUTTON, DPAD_RIGHT, // -> SONIC + A_BUTTON, 0, 0 // -> CPU Partner on +}; + +void CheckCPUPartnerUnlock() +{ + s8 *temp_r3; + s8 var_r0; + s32 temp_r1; + u8 temp_r0; + + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + + temp_r1 = (0x300 & strc3C->unk28) >> 8; + if (gPressedKeys != 0) { + // Start check, 1st key + if ((DPAD_UP & gPressedKeys) && (temp_r1 == 0)) { + strc3C->unk39 = 0; + return; + } else { + // Check for additional keys to unlock CPU Tails + if (strc3C->unk39 != 0xFF) { + if (gPressedKeys & sTailsUnlockKeys[strc3C->unk39]) { + strc3C->unk39++; + } else { + strc3C->unk39 = 0xFF; + } + } + } + } +} + +void sub_805B858() +{ + CharSelect_3C *strc3C = TASK_DATA(gCurTask); + strc3C->unk24 = 0; + gBldRegs.bldY = 0; + gCurTask->main = Task_805AC00; +} + +void Task_805B880(void) +{ + CharSelect_20 *strc20 = TASK_DATA(gCurTask); + + strc20->unk18++; + + sub_805321C((u8 *)" !\"#$%&\'", &strc20->overB); + + strc20->overB.qUnkA = gUnknown_08688570[(strc20->unk1C & 0x300) >> 8]; +} + +void Task_805B8C0(void) +{ + CharSelect_Chars *chars = TASK_DATA(gCurTask); + + if (chars->unkC0 < 5) { + chars->sprites[0].x -= 0x14; + chars->sprites[2].x += 0x14; + } + chars->unkC0++; + + UpdateSpriteAnimation(&chars->sprites[0]); + DisplaySprite(&chars->sprites[0]); + UpdateSpriteAnimation(&chars->sprites[1]); + DisplaySprite(&chars->sprites[1]); + UpdateSpriteAnimation(&chars->sprites[2]); + DisplaySprite(&chars->sprites[2]); +} + +void Task_805B930(void) +{ + u8 arr[2][8] = { { 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21 }, { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 } }; + CharSelect_20 *strc20 = TASK_DATA(gCurTask); + + strc20->unk18++; + strc20->overB.qUnkA = 0; + + sub_805321C(arr[0], &strc20->overB); + strc20->overB.unkC += 0x20; + sub_805321C(arr[1], &strc20->overB); + strc20->overB.unkC -= 0x20; +} + +void Task_nullsub_805B980(void) { } + +void Task_805B984(void) +{ + CharSelect_34 *strc34; + Sprite *s; + u32 index; + + u8 arr[4]; + memcpy(arr, gUnknown_08688578, sizeof(arr)); + + strc34 = TASK_DATA(gCurTask); + s = &strc34->s; + + index = (strc34->unk32 & 0xFF) >> 6; + s->prevVariant = -1; + s->graphics.anim = 723; + s->variant = arr[index]; + UpdateSpriteAnimation_BG(s); + DisplaySprite_BG(s); +} \ No newline at end of file diff --git a/sa1/src/game/collect_chaos_emeralds_msg.c b/sa1/src/game/collect_chaos_emeralds_msg.c new file mode 100644 index 0000000000..0dea04868e --- /dev/null +++ b/sa1/src/game/collect_chaos_emeralds_msg.c @@ -0,0 +1,167 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/game_over.h" +#include "game/title_screen.h" +#include "game/save.h" +#include "game/stage/ui.h" +#include "data/ui_graphics.h" + +#include "constants/animations.h" + +typedef struct CollectEmeraldsScreen { + Sprite sprites[3]; + StrcUi_805423C strc90; + u32 unk9C; +} CollectEmeraldsScreen; + +void sub_806968C(void); +void Task_80698F4(void); +void sub_8069964(void); + +extern AnimId gUnknown_0868B654[2]; +extern u8 gUnknown_0868B658[2]; +extern const u16 gUnknown_086883E4[10]; +extern const u8 gUnknown_086883F8[]; +extern const u16 gUnknown_086CC774[16]; +extern const u8 gUnknown_086CC834[]; + +void sub_806968C(void) +{ + Strc_80528AC sp00; + s8 sp28; + + UiGfxStackInit(); + +#ifndef NON_MATCHING + sp00.uiGfxID = 128; +#endif + sp00.unk2B = 0; + sp00.uiGfxID = 43; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.tilesSize = 1 * TILE_SIZE_4BPP; + sp00.palette = gUnknown_086CC774; + sp00.paletteSize = sizeof(gUnknown_086CC774); + sp00.layout = gUnknown_086CC834; + sp00.layoutSize = 0x500; + sp00.unk28 = 0; + sp00.unk29 = 0; + sp00.unk2A = 5; + sub_80528AC(&sp00); + + gBgSprites_Unknown1[0] = 1; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x14; +} + +void CreateGetAllChaosEmeraldsMessage() +{ + CollectEmeraldsScreen *strc; + Sprite *s; + StrcUi_805423C *temp_r6; + + sub_80535FC(); + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x1D03; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + sub_806968C(); + strc = TASK_DATA(TaskCreate(Task_80698F4, sizeof(CollectEmeraldsScreen), 0x2000U, 0U, NULL)); + temp_r6 = &strc->strc90; + + s = &strc->sprites[0]; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0); + s->graphics.anim = gUnknown_0868B654[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_0868B658[LOADED_SAVE->uiLanguage]; + s->x = 120; + s->y = 120; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(strc->sprites); + + s = &strc->sprites[1]; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x2000); + s->graphics.anim = SA1_ANIM_GET_THE_CHAOS_EMERALDS_EGGMAN; + strc->sprites[1].variant = 0; + s->x = 136; + s->y = 90; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + strc->sprites[1].prevVariant = -1; + strc->sprites[1].animSpeed = 0x10; + strc->sprites[1].palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &strc->sprites[2]; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x4000); + s->graphics.anim = SA1_ANIM_GET_THE_CHAOS_EMERALDS_EGGMAN; + strc->sprites[2].variant = 1; + s->x = 136; + s->y = 90; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + strc->sprites[2].prevVariant = -1; + strc->sprites[2].animSpeed = 0x10; + strc->sprites[2].palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + strc->unk9C = 0; + + temp_r6->unk0 = 0; + temp_r6->unk2 = 1; + temp_r6->unk4 = 2; + temp_r6->unk6 = 0; + temp_r6->unk8 = 0x100; + temp_r6->unkA = 8; + sub_805423C(temp_r6); +} + +void Task_80698F4() +{ + CollectEmeraldsScreen *strc = TASK_DATA(gCurTask); + StrcUi_805423C *strc90 = &strc->strc90; + + if (++strc->unk9C > 400) { + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + TaskDestroy(gCurTask); + CreateSegaLogo(); + } else { + if (strc->unk9C == 340) { + strc90->unk6 = 0; + strc90->unk4 = 1; + } + + sub_805423C(strc90); + sub_8069964(); + } +} + +void sub_8069964() +{ + u8 i; + + CollectEmeraldsScreen *strc = TASK_DATA(gCurTask); + + for (i = 0; i < (s32)ARRAY_COUNT(strc->sprites); i++) { + DisplaySprite(&strc->sprites[i]); + } +} diff --git a/sa1/src/game/course_select.c b/sa1/src/game/course_select.c new file mode 100644 index 0000000000..720302057c --- /dev/null +++ b/sa1/src/game/course_select.c @@ -0,0 +1,1053 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/character_select.h" +#include "game/gTask_03006240.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/save.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" +#include "game/time_attack/menu.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/ui_graphics.h" + +typedef struct CourseSelectState { + StrcUi_805423C strc0; + u8 fillerC[4]; + struct Task *task10; + struct Task *task14; + struct Task *task18; + Sprite s; + u32 unk4C; + u16 unk50; + s16 unk52; + u8 unk54; + u8 level; + u8 unk56; + u8 unk57; + u8 unk58; + u8 unk59; +} CourseSelectState; + +typedef struct CourseSelect_54 { + Sprite s; + u8 filler30[0x18]; + u32 unk48; + u16 unk4C; + u8 unk4E; + u8 unk4F; + u8 unk50; + u8 unk51; +} CourseSelect_54; + +typedef struct CourseSelect_2DC { + Sprite sprites[15]; + u32 unk2D0; + u16 unk2D4; + u8 unk2D6; + u8 unk2D7; + u8 unk2D8; + u8 unk2D9; + u8 unk2DA; + u8 unk2DB; +} CourseSelect_2DC; + +extern u8 gUnknown_086A17F4[]; +extern u8 gUnknown_086A2534[]; +extern u16 gUnknown_086A2A34[]; +extern u8 gUnknown_086A2C34[]; +extern u8 gUnknown_086A3DB4[]; + +extern u8 gUnknown_03005140; + +typedef struct StaticTileInfo { + void *vram; + u32 anim; + u32 variant; +} StaticTileInfo; +const StaticTileInfo gUnknown_0868B10C[15] = { + { OBJ_VRAM0 + 0x0020, 0x000002D4, 0x00000000 }, { OBJ_VRAM0 + 0x03E0, 0x000002D4, 0x00000001 }, + { OBJ_VRAM0 + 0x07A0, 0x000002D4, 0x00000002 }, { OBJ_VRAM0 + 0x0B60, 0x000002D4, 0x00000003 }, + { OBJ_VRAM0 + 0x0F20, 0x000002D4, 0x00000004 }, { OBJ_VRAM0 + 0x12E0, 0x000002D4, 0x00000005 }, + { OBJ_VRAM0 + 0x16A0, 0x000002D4, 0x00000006 }, { OBJ_VRAM0 + 0x1A60, 0x000002D4, 0x00000007 }, + { OBJ_VRAM0 + 0x1E20, 0x000002D4, 0x00000008 }, { OBJ_VRAM0 + 0x21E0, 0x000002D4, 0x00000009 }, + { OBJ_VRAM0 + 0x25A0, 0x000002D4, 0x0000000A }, { OBJ_VRAM0 + 0x2960, 0x000002D4, 0x0000000B }, + { OBJ_VRAM0 + 0x2D20, 0x000002D4, 0x0000000C }, { OBJ_VRAM0 + 0x30E0, 0x000002D4, 0x0000000D }, + { OBJ_VRAM0 + 0x34A0, 0x000002D4, 0x0000000E }, +}; + +const StaticTileInfo gUnknown_0868B1C0[8] = { + { OBJ_VRAM0 + 0x3860, 0x000002D5, 0 }, { OBJ_VRAM0 + 0x3CE0, 0x000002D6, 0 }, { OBJ_VRAM0 + 0x4160, 0x000002D7, 0 }, + { OBJ_VRAM0 + 0x45E0, 0x000002E6, 0 }, { OBJ_VRAM0 + 0x4A60, 0x000002E7, 0 }, { OBJ_VRAM0 + 0x4EE0, 0x000002E8, 0 }, + { OBJ_VRAM0 + 0x5360, 0x000002D9, 0 }, { OBJ_VRAM0 + 0x57E0, 0x000002D8, 0 }, +}; + +const u16 gUnknown_0868B220[] = { + 20, 20, 20, 20, 20, 20, 20, 36, 60, 84, 108, 132, 156, 180, 204, 228, +}; + +void sub_8061894(void); +void Task_CourseSelectInit(void); +void Task_8062A80(void); +void Task_8062E18(void); +void Task_8062C28(void); +void Task_8062140(void); +void Task_8062B38(void); +void Task_8062CB4(void); +void Task_8062540(void); +void Task_80628A4(void); +void CreateTimeAttackRecords(void); +void Task_80629E8(void); +void TaskDestructor_CourseSelect(struct Task *t); + +extern void CreateTimeAttackRecord(u8 arg0); + +void sub_8061894(void) +{ + Strc_80528AC gfx; + s8 *temp_r5; + s8 *temp_r7; + + UiGfxStackInit(); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = gUnknown_086A17F4; + gfx.tilesSize = 0xE00; + gfx.layout = gUnknown_086A2534; + gfx.layoutSize = 0x500; + gfx.unk29 = 0x1; + gfx.unk2A = 0x11; + gfx.unk0.unk4 = 0; + gfx.unk0.unk8 = 0; + gfx.unk0.unk9 = 0; + gfx.unk0.unkA = 0; + gfx.unk0.unkB = 0; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gUnknown_086A2C34; + gfx.tilesSize = 0x1180; + gfx.palette = gUnknown_086A2A34; + gfx.paletteSize = 0x200; + gfx.layout = gUnknown_086A3DB4; + gfx.layoutSize = 0x1000; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); +} + +void CreateCourseSelect(bool8 arg0) +{ + Strc_80528AC gfx; + s32 sp34; + struct Task *task0; + struct Task *task1; + u8 unlockedLevelCount; + s32 sp40; + s32 temp_r1_2; + s32 temp_r1_3; + s32 temp_r1_4; + s32 temp_r3; + s32 temp_r3_2; + CourseSelect_54 *strc54; + CourseSelectState *state; + CourseSelect_2DC *strc2DC; + CourseSelect_2DC *strc2DC_2; + struct Task *temp_r0_2; + struct Task *task2; + struct Task *task3; + Sprite *s; + u8 i; + + sp34 = arg0; + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + m4aSongNumStart(4U); + sub_80535FC(); + UiGfxStackInit(); + + if (arg0 == 1) { + unlockedLevelCount = 13; + } else { + if (IS_MULTI_PLAYER) { + unlockedLevelCount = gUnknown_03005140 + 2; + } else { + unlockedLevelCount = LOADED_SAVE->unlockedLevels[gSelectedCharacter] + 2; + } + + if (gSelectedCharacter == CHARACTER_SONIC) { + if (unlockedLevelCount == 0) { + unlockedLevelCount = 1; + } + if (unlockedLevelCount > 15) { + unlockedLevelCount = 15; + } else if (LOADED_SAVE->unlockedLevels[0] == 0xD) { + unlockedLevelCount = 14; + } + } else { + if (unlockedLevelCount == 0) { + unlockedLevelCount = 1; + } + if (unlockedLevelCount > 14) { + unlockedLevelCount = 14; + } + } + if ((gGameMode != 0) && (unlockedLevelCount > 0xDU)) { + unlockedLevelCount = 13; + } + } + + gDispCnt = 0x1340; + gBgCntRegs[0] = 0x1D83; + gBgCntRegs[1] = 0x1886; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + sub_8061894(); + + task0 = TaskCreate(Task_CourseSelectInit, sizeof(CourseSelectState), 0x2000U, 0U, TaskDestructor_CourseSelect); + state = TASK_DATA(task0); + state->unk4C = 0; + state->unk57 = 0; + state->unk50 = 0x14; + state->unk52 = 0x14; + state->unk54 = 0; + state->level = 1; + state->unk58 = unlockedLevelCount; + state->unk59 = sp34; + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 2; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x200; + state->strc0.unkA = 1; + + task1 = TaskCreate(Task_8062E18, sizeof(CourseSelect_54), 0x2030U, 0U, NULL); + strc54 = TASK_DATA(task1); + strc54->unk48 = 0; + strc54->unk4C = 0; + strc54->unk4E = 0; + strc54->unk4F = 0; + strc54->unk51 = unlockedLevelCount; + s = &strc54->s; + s->graphics.dest = OBJ_VRAM0 + 0x6400; + s->graphics.anim = SA1_ANIM_ARROW_UP; + s->variant = 0; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + state->task18 = task1; + s = &state->s; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->graphics.dest = strc54->s.graphics.dest + 0xC0; + s->oamFlags = 0x80; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_VS_MENU_WAIT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + task2 = TaskCreate(Task_8062A80, sizeof(CourseSelect_2DC), 0x2030U, 0U, NULL); + strc2DC = TASK_DATA(task2); + strc2DC->unk2D0 = 0; + strc2DC->unk2D4 = 0; + strc2DC->unk2D6 = 0; + strc2DC->unk2D7 = 0; + strc2DC->unk2DA = (u8)unlockedLevelCount; + strc2DC->unk2D9 = 0; + strc2DC->unk2DB = (u8)sp34; + + for (i = 0; i < state->unk58; i++) { + { + s = &strc2DC->sprites[i]; + temp_r1_2 = i * 0xC; + s->graphics.dest = (void *)gUnknown_0868B10C[i].vram; + s->graphics.anim = gUnknown_0868B10C[i].anim; + s->variant = gUnknown_0868B10C[i].variant; + s->oamFlags = 0x480; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + } + } + + for (; i < (s32)ARRAY_COUNT(strc2DC->sprites); i++) { + s = &strc2DC->sprites[i]; + s->graphics.dest = NULL; + } + state->task10 = task2; + + task2 = TaskCreate(Task_8062C28, sizeof(CourseSelect_2DC), 0x2030U, 0U, NULL); + strc2DC_2 = TASK_DATA(task2); + strc2DC_2->unk2D0 = 0; + strc2DC_2->unk2D4 = 0; + strc2DC_2->unk2D6 = 0; + strc2DC_2->unk2D7 = 0; + strc2DC_2->unk2DA = unlockedLevelCount; + + for (i = 0; i < 8; i++) { + s = &strc2DC_2->sprites[i]; + s->graphics.dest = gUnknown_0868B1C0[i].vram; + s->graphics.anim = gUnknown_0868B1C0[i].anim; + s->variant = gUnknown_0868B1C0[i].variant; + s->oamFlags = 0x480; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + } + + for (; i < (s32)ARRAY_COUNT(strc2DC_2->sprites); i++) { + s = &strc2DC_2->sprites[i]; + s->graphics.dest = NULL; + } + state->task14 = task2; + + if (sp34 == 1) { + gBgScrollRegs[0][1] = 0x14; + gBgCntRegs[0] = 0x9D83; + state->unk4C = 0x3F; + strc2DC->unk2D0 = 0x3F; + strc2DC_2->unk2D0 = 0x3F; + task0->main = Task_8062140; + state->task10->main = Task_8062B38; + state->task14->main = Task_8062CB4; + + gfx.uiGfxID = 62; + gfx.unk2B = 0; + gfx.tiles = gUiGraphics[62].tiles; + gfx.palette = gUiGraphics[62].palette; + gfx.tilesSize = 0x20; + gfx.paletteSize = 0x20; + gfx.unk28 = 3; + gfx.vramC = OBJ_VRAM0 + 0x20; + gfx.unk2A = 0xC; + gfx.unk0.unk4 = gUiGraphics[62].unk8; + gfx.unk0.unk8 = gUiGraphics[62].unkC; + gfx.unk0.unk9 = gUiGraphics[62].unk10; + gfx.unk0.unkA = gUiGraphics[62].unk14; + gfx.unk0.unkB = gUiGraphics[62].unk18; + sub_80528AC(&gfx); + } + sub_805423C(&state->strc0); +} + +// (86.97%) https://decomp.me/scratch/1mKl5 +NONMATCH("asm/non_matching/game/course_select__Task_CourseSelectInit.inc", void Task_CourseSelectInit()) +{ + Strc_80528AC gfx; + s32 sp38; + s32 sp3C; + u8 var_r2; + u8 var_r3; + u16 *var_r1; + + u8 var_r5 = 0; + CourseSelectState *state = TASK_DATA(gCurTask); + CourseSelect_2DC *unk2DC = TASK_DATA(state->task10); + CourseSelect_2DC *unk2DC_2 = TASK_DATA(state->task14); + CourseSelect_54 *strc54 = TASK_DATA(state->task18); + + u32 temp_r8 = state->unk4C + 1; + if ((temp_r8 == 0x3F) && (state->unk58 == 1)) { + state->unk52 = 0; + } else { + state->unk52 = 0x14; + } + + state->unk50 = 0x14; + if (temp_r8 < 11) { + gfx.uiGfxID = 62; + gfx.unk2B = 0; + gfx.tiles = gUiGraphics[62].tiles; + gfx.palette = gUiGraphics[62].palette; + gfx.tilesSize = 0x20; + gfx.paletteSize = 0x20; + gfx.unk28 = 3; + gfx.vramC = OBJ_VRAM0 + 0x20; + gfx.unk2A = 0xC; + gfx.unk0.unk4 = gUiGraphics[62].unk8; + gfx.unk0.unk8 = gUiGraphics[62].unkC; + gfx.unk0.unk9 = gUiGraphics[62].unk10; + gfx.unk0.unkA = gUiGraphics[62].unk14; + gfx.unk0.unkB = gUiGraphics[62].unk18; + sub_80528AC(&gfx); + } + state->unk4C = temp_r8; + unk2DC->unk2D0 = temp_r8; + unk2DC_2->unk2D0 = temp_r8; + strc54->unk48 = temp_r8; + unk2DC->unk2D7 = state->level; + unk2DC_2->unk2D7 = state->level; + strc54->unk4F = state->level; + state->unk50 += Div(((s16)state->unk52 - state->unk50) * 2, 10); + unk2DC->unk2D4 = state->unk50; + unk2DC_2->unk2D4 = (u16)state->unk50; + strc54->unk4C = (u16)state->unk50; + unk2DC->unk2D9 = (u8)state->unk57; + sub_805423C(&state->strc0); + + gFlags |= 4; + gHBlankCopyTarget = (void *)®_BG0HOFS; + gHBlankCopySize = 4; + var_r1 = gBgOffsetsHBlankPrimary; + + for (var_r2 = 0; var_r2 < 12; var_r2++, var_r5++) { + *var_r1++ = 0; + *var_r1++ = 0x14; + } + + for (var_r2 = 0; var_r5 < DISPLAY_HEIGHT; var_r5++, var_r2) { + var_r3 = 0; + sp3C = var_r2 * 2; + ++var_r2; + for (; var_r3 < (0x40 - temp_r8) && (var_r5 < DISPLAY_HEIGHT); var_r5++, var_r3++) { + *var_r1++ = 0; + *var_r1++ = (0 - var_r5) & 0x1FF; + } + + var_r3 = ((((sp3C + var_r2) * 8) - var_r5) + 0x20); + for (var_r2 = 0; (var_r2 < 0x18) && (var_r5 < DISPLAY_HEIGHT); var_r5++, var_r2++) { + *var_r1++ = 0; + *var_r1++ = (s16)var_r3; + } + } + + if ((temp_r8 == 0x3F) || (A_BUTTON & gPressedKeys)) { + gBgScrollRegs[0][1] = 0x14; + state->unk4C = 0x3F; + unk2DC->unk2D0 = 0x3F; + unk2DC_2->unk2D0 = 0x3F; + gBgCntRegs[0] = 0x9D83; + gFlags &= ~4; + gCurTask->main = Task_8062140; + } +} +END_NONMATCH + +void Task_8062140() +{ + Sprite *temp_r4_2; + s32 var_r0; + s32 var_r1; + u32 temp_r8; + u8 temp_r0_2; + union MultiSioData *send_recv; + u32 i; + + CourseSelectState *state = TASK_DATA(gCurTask); + CourseSelect_2DC *unk2DC = TASK_DATA(state->task10); + CourseSelect_2DC *unk2DC_2 = TASK_DATA(state->task14); + CourseSelect_54 *strc54 = TASK_DATA(state->task18); + + if (IS_MULTI_PLAYER) { + for (i = 0; (i < 4) && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + + if (IS_MULTI_PLAYER) { + send_recv = gMultiSioRecv; + + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_CHILD) { + if (send_recv->pat0.unk0 > 0x4FU) { + state->level = send_recv->pat0.unk2; + } + UpdateSpriteAnimation(&state->s); + DisplaySprite(&state->s); + } + } + } + + temp_r8 = state->unk4C; + temp_r0_2 = state->unk58; + temp_r8++; + if (((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) || (IS_SINGLE_PLAYER)) { + if (state->unk58 > 1U) { + if (DPAD_DOWN & gRepeatedKeys) { + if (state->level < (temp_r0_2 - 1)) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + state->level++; + } + } else if (DPAD_UP & gRepeatedKeys) { + if (state->level > 1U) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + state->level--; + } + } + } + } + + if (state->level > (Div(state->unk52, 24) + 5)) { + if (((gSelectedCharacter != 0) || (gCurrentLevel < 12) || (LOADED_SAVE->chaosEmeralds != ALL_ZONE_CHAOS_EMERALDS) + || (LOADED_SAVE->unlockedLevels[0] <= 12) || (LOADED_SAVE->unlockedLevels[1] <= 12) || (LOADED_SAVE->unlockedLevels[2] <= 12) + || (LOADED_SAVE->unlockedLevels[3] <= 12) || ((LOADED_SAVE->unlockedLevels[0] == 0xF) && (gMultiplayerCurrentLevel == 12))) + && (temp_r0_2 > 0xDU) && (state->level == 0xD)) { + + { + var_r1 = state->level; + var_r1 -= 5; + state->unk52 = (var_r1 * 0x18) - 8; + } + } else { + state->unk52 = (((((state->level - 5) & 0x1E) + 1) * 24) - 8); + } + } else { + if (state->level <= Div(state->unk52, 0x18)) { + var_r1 = state->level; + var_r0 = (var_r1 * 0x18) - 8; + if (var_r0 > 0x10) { + var_r1 = (u32)var_r1 >> 1; + var_r1 <<= 1; + var_r0 = state->unk52 = ((var_r1 - 1) * 0x18) - 8; + } else { + state->unk52 = (var_r1 * 0x18) - 8; + } + } + } + state->unk4C = temp_r8; + unk2DC->unk2D0 = temp_r8; + unk2DC_2->unk2D0 = temp_r8; + strc54->unk48 = temp_r8; + unk2DC->unk2D7 = state->level; + unk2DC_2->unk2D7 = state->level; + strc54->unk4F = state->level; + state->unk50 += Div((state->unk52 - state->unk50) * 2, 10); + unk2DC->unk2D4 = state->unk50; + unk2DC_2->unk2D4 = state->unk50; + strc54->unk4C = state->unk50; + unk2DC->unk2D9 = state->unk57; + sub_805423C(&state->strc0); + + if (IS_MULTI_PLAYER) { + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x50; + send_recv->pat0.unk2 = state->level; + } + + if (state->strc0.unk6 > 0x1800) { + if (state->strc0.unk4 == 2) { + if (IS_SINGLE_PLAYER) { + if (A_BUTTON & gPressedKeys) { + if (gGameMode != GAME_MODE_TIME_ATTACK) { + m4aSongNumStop(MUS_COURSE_SELECTION); + } + if (temp_r8 > 64) { + state->unk57 = 1; + gCurTask->main = Task_8062540; + m4aSongNumStart(SE_SELECT); + state->strc0.unk4 = 1; + state->strc0.unk6 = 0x2000 - state->strc0.unk6; + } + } else if ((B_BUTTON & gPressedKeys) != 0) { + m4aSongNumStop(MUS_COURSE_SELECTION); + state->unk57 = 2; + gCurTask->main = Task_8062540; + m4aSongNumStart(0x6BU); + state->strc0.unk4 = 1; + state->strc0.unk6 = 0x2000 - state->strc0.unk6; + } + } else { + if (((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) && (A_BUTTON & gPressedKeys)) { + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x51; + } + + send_recv = gMultiSioRecv; + if (send_recv->pat0.unk0 == 0x51) { + state->unk57 = 1; + gCurTask->main = Task_8062540; + m4aSongNumStart(SE_SELECT); + m4aSongNumStop(MUS_COURSE_SELECTION); + state->strc0.unk4 = 1; + state->strc0.unk6 = 0x2000 - state->strc0.unk6; + } + } + } + } + + gBgScrollRegs[0][1] = state->unk50; +} + +void Task_8062540() +{ + u8 level; + s32 unk4C; + u8 *unk58; + u32 i; + union MultiSioData *send_recv; + + CourseSelectState *state = TASK_DATA(gCurTask); + CourseSelect_2DC *unk2DC = TASK_DATA(state->task10); + CourseSelect_2DC *unk2DC_2 = TASK_DATA(state->task14); + CourseSelect_54 *strc54 = TASK_DATA(state->task18); + + if (IS_MULTI_PLAYER) { + for (i = 0; (i < 4) && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + + if (IS_MULTI_PLAYER) { + send_recv = gMultiSioRecv; + + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_CHILD) { + if (send_recv->pat0.unk0 > 0x4FU) { + state->level = send_recv->pat0.unk2; + } + } + } + } + + unk4C = state->unk4C; + unk58 = &state->unk58; + unk4C++; + + if (*unk58 == 1) { + state->unk52 = 0; + } + state->unk4C = unk4C; + unk2DC->unk2D0 = unk4C; + unk2DC_2->unk2D0 = unk4C; + strc54->unk48 = unk4C; + unk2DC->unk2D7 = (u8)state->level; + unk2DC_2->unk2D7 = state->level; + strc54->unk4F = (u8)state->level; + state->unk50 += Div((state->unk52 - state->unk50) * 2, 10); + unk2DC->unk2D4 = state->unk50; + unk2DC_2->unk2D4 = state->unk50; + strc54->unk4C = state->unk50; + unk2DC->unk2D9 = state->unk57; + sub_805423C(&state->strc0); + + if ((state->strc0.unk6 > 0x1800) && (state->strc0.unk4 == 1)) { + if (IS_SINGLE_PLAYER) { + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gBgCntRegs[0] = 0x9D03; + gBgCntRegs[1] = 0x1806; + if (state->unk57 == 1) { + if (gGameMode == GAME_MODE_TIME_ATTACK) { + level = state->level; + if (level == 0) { + gCurrentLevel = 0; + gMultiplayerCurrentLevel = 0; + } else if (level < 0x13) { + gCurrentLevel = level - 1; + gMultiplayerCurrentLevel = gCurrentLevel; + } + CreateTimeAttackRecords(); + + TaskDestroy(state->task18); + TaskDestroy(state->task14); + TaskDestroy(state->task10); + TaskDestroy(gCurTask); + } else if (state->unk59 == 1) { + CreateTimeAttackRecord((u8)(state->level - 1)); + + TaskDestroy(state->task18); + TaskDestroy(state->task14); + TaskDestroy(state->task10); + TaskDestroy(gCurTask); + } else { + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x20; + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = -1; + gBgSprites_Unknown2[1][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = -1; + gBgSprites_Unknown2[2][3] = 0x20; + gBgSprites_Unknown1[3] = 0; + gBgSprites_Unknown2[3][0] = 0; + gBgSprites_Unknown2[3][1] = 0; + gBgSprites_Unknown2[3][2] = -1; + gBgSprites_Unknown2[3][3] = 0x20; + + level = state->level; + if (level == 0) { + gCurrentLevel = 0; + gMultiplayerCurrentLevel = 0; + ApplyGameStageSettings(); + } else if ((u32)level < 19) { + gCurrentLevel = level - 1; + gMultiplayerCurrentLevel = gCurrentLevel; + ApplyGameStageSettings(); + } + + TaskDestroy(state->task18); + TaskDestroy(state->task14); + TaskDestroy(state->task10); + TaskDestroy(gCurTask); + } + } else { + u32 unk59 = state->unk59; + TaskDestroy(state->task18); + TaskDestroy(state->task14); + TaskDestroy(state->task10); + TaskDestroy(gCurTask); + + if (unk59 == 1) { + CreateTimeAttackMenu(); + } else { + CreateCharacterSelectionScreen(0); + } + } + } else { + // -> IS_MULTI_PLAYER + gCurTask->main = Task_80628A4; + goto mp_check; // TODO: remove goto + } + } else { + gBgScrollRegs[0][1] = (s16)state->unk50; + + mp_check: + if (IS_MULTI_PLAYER) { + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) { + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x51; + send_recv->pat0.unk2 = state->level; + } + } + } +} + +void Task_80628A4() +{ + union MultiSioData *send_recv; + u32 sioFlags; + u32 i, j; + + CourseSelectState *state = TASK_DATA(gCurTask); + + if (IS_MULTI_PLAYER) { + for (i = 0; (i < 4) && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + } + + send_recv = gMultiSioRecv; + if (send_recv->pat0.unk0 == 0x52) { + gCurTask->main = Task_80629E8; + } + + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) { + for (j = 1; j < 4; j++) { + if (GetBit(gMultiplayerConnections, j)) { + send_recv = &gMultiSioRecv[j]; + if (send_recv->pat0.unk0 != 0x51) { + break; + } + } + } + + if (j == 4) { + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x52; + send_recv->pat0.unk2 = state->level; + return; + } + } + + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x51; + send_recv->pat0.unk2 = state->level; +} + +void Task_80629E8() +{ + u8 level; + CourseSelectState *state = TASK_DATA(gCurTask); + + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + level = state->level; + if (level == 0) { + gCurrentLevel = 0; + gMultiplayerCurrentLevel = 0; + ApplyGameStageSettings(); + } else if (level < 19) { + gCurrentLevel = state->level - 1; + gMultiplayerCurrentLevel = gCurrentLevel; + ApplyGameStageSettings(); + } + + TaskDestroy(state->task18); + TaskDestroy(state->task14); + TaskDestroy(state->task10); + TaskDestroy(gCurTask); +} + +void Task_8062A80() +{ + Sprite *s; + s16 var_r0_2; + u8 i; + + CourseSelect_2DC *strc2DC = TASK_DATA(gCurTask); + + for (i = 1; i < strc2DC->unk2DA; i++) { + s = &strc2DC->sprites[i]; + if (i == strc2DC->unk2D7) { + s->palId = 1; + var_r0_2 = 0x4C; + } else { + s->palId = 0; + var_r0_2 = 0x48; + } + s->x = var_r0_2; + s->y = ((i - 1) * 24) + (i * (64 - strc2DC->unk2D0)) + 16; + s->frameFlags |= 0x40000; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + if (strc2DC->unk2D0 == 0x3F) { + gCurTask->main = Task_8062B38; + } +} + +void Task_8062B38() +{ + Sprite *s; + u8 *var_r1; + u8 temp_r1; + u8 temp_r8; + u8 var_r0; + u8 spriteIndex; + u32 spriteIndex_32; + u8 var_r7; + + CourseSelect_2DC *strc2DC = TASK_DATA(gCurTask); + temp_r8 = strc2DC->unk2DB; + spriteIndex_32 = (Div(strc2DC->unk2D4, 24) - 1); + spriteIndex_32 <<= 24; + var_r7 = 0; + spriteIndex = spriteIndex_32 >>= 24; + for (; var_r7 < 8; var_r7++, spriteIndex++) { + if ((spriteIndex != 0) && (spriteIndex <= (s32)(strc2DC->unk2DA - 1))) { + s = &strc2DC->sprites[spriteIndex]; + if (temp_r8 == 1) { + SPRITE_FLAG_SET(s, 18); + } + if (spriteIndex == strc2DC->unk2D7) { + temp_r1 = strc2DC->unk2D9; + if (temp_r1 == 1) { + var_r0 = strc2DC->unk2D0 & temp_r1; + if (var_r0 != 0) { + s->palId = 1; + } else { + s->palId = 0; + } + } else { + s->palId = 1; + } + s->x = 0x4C; + } else { + s->x = 0x48; + s->palId = 0; + } + s->y = (spriteIndex * 0x18) - (strc2DC->unk2D4 - 0xC); + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } +} + +void Task_8062C28() +{ + Sprite *s; + u8 i; + + CourseSelect_2DC *strc2DC = TASK_DATA(gCurTask); + + for (i = 1; i < 6; i++) { + s = &strc2DC->sprites[i - 1]; + s->palId = 0; + s->x = 212; + s->y = ((i - 1) * 48) + (i * ((64 - strc2DC->unk2D0) << 1)) + 0x21; + + if (strc2DC->unk2DA > (((i - 1) * 2) + 1)) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + + if (strc2DC->unk2D0 == 0x3F) { + gCurTask->main = Task_8062CB4; + } +} + +void Task_8062CB4() +{ + Sprite *s; + s32 temp_r0; + u8 i; + u8 var_r7; + + CourseSelect_2DC *strc2DC = TASK_DATA(gCurTask); + + if (strc2DC->unk2D4 > 0x2FU) { + u32 v = Div(strc2DC->unk2D4, 0x30) - 1; + v <<= 24; + var_r7 = 1; + i = v >>= 24; + for (; var_r7 < 7; var_r7++, i++) { + if (i < 8) { + s = &strc2DC->sprites[i]; + s->x = 212; + s->palId = 0; + temp_r0 = (strc2DC->unk2D4 - 0x37); + temp_r0 = (i * 0x30) - temp_r0; + s->y = temp_r0; + if (i == 6) { + s->y = temp_r0 - 0xC; + } + if (i == 7) { + s->y = (u16)s->y - 0x24; + } + + if (strc2DC->unk2DA > ((i * 2) + 1)) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } else if ((i == 7) && ((s8)gSelectedCharacter == CHARACTER_SONIC) && (strc2DC->unk2DA == 0xF)) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + } + } else { + u32 v = Div(strc2DC->unk2D4, 48); + v <<= 24; + var_r7 = 1; + i = v >>= 24; + for (; var_r7 < 6; var_r7++, i++) { + if (i < 8) { + s = &strc2DC->sprites[i]; + s->x = 212; + s->palId = 0; + temp_r0 = (strc2DC->unk2D4 - 0x37); + temp_r0 = (i * 0x30) - temp_r0; + s->y = temp_r0; + if (i == 6) { + s->y = temp_r0 - 0xC; + } + if (i == 7) { + s->y = (u16)s->y - 36; + if ((gSelectedCharacter == CHARACTER_SONIC) && (strc2DC->unk2DA < 16)) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } else if (strc2DC->unk2DA > ((i * 2) + 1)) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + } + } +} + +void Task_8062E18() +{ + CourseSelect_54 *strc54 = TASK_DATA(gCurTask); + Sprite *s = &strc54->s; + + if (strc54->unk4C != 0x14) { + s->frameFlags &= 0xFFFFF7FF; + s->x = 48; + s->y = 24; + UpdateSpriteAnimation(s); + DisplaySprite(s); + if (((u32)strc54->unk51 > 6U) && ((u32)strc54->unk4C < gUnknown_0868B220[strc54->unk51 - 1])) { + s->frameFlags |= 0x800; + s->x = 48; + s->y = 136; + DisplaySprite(s); + } + } else { + if (((u32)strc54->unk51 > 7U) && (strc54->unk4C < gUnknown_0868B220[(strc54->unk51 - 1)])) { + s->frameFlags |= 0x800; + s->x = 48; + s->y = 136; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } +} + +void TaskDestructor_CourseSelect(struct Task *t) { } diff --git a/sa1/src/game/dummy_task.c b/sa1/src/game/dummy_task.c new file mode 100644 index 0000000000..bfb001483e --- /dev/null +++ b/sa1/src/game/dummy_task.c @@ -0,0 +1,22 @@ +#include "core.h" +#include "task.h" + +#include "game/dummy_task.h" +#include "game/stage/stage.h" + +struct Task *gDummyTask = NULL; + +static void Task_DummyFunc(void); +static void DummyTaskOnDestroy(struct Task *); + +UNUSED void CreateDummyTask(void) { gDummyTask = TaskCreate(Task_DummyFunc, 0, 0x100, 0, DummyTaskOnDestroy); } + +UNUSED static void DestroyDummyTask(void) +{ + TaskDestroy(gDummyTask); + gDummyTask = NULL; +} + +static void Task_DummyFunc(void) { } + +UNUSED static void DummyTaskOnDestroy(struct Task *task) { gDummyTask = NULL; } diff --git a/sa1/src/game/edit_language_screen.c b/sa1/src/game/edit_language_screen.c new file mode 100644 index 0000000000..e29dd6a79d --- /dev/null +++ b/sa1/src/game/edit_language_screen.c @@ -0,0 +1,362 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/game_over.h" +#include "game/options_screen.h" // contains EditLanguageScreen +#include "game/save.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/tilemaps.h" + +#define LANGSCRN_BG_SCREENBASE 30 + +#if !WIDESCREEN_HACK +typedef u8 CoordELS; +#else +typedef u16 CoordELS; +#endif + +extern const AnimId gUnknown_0868B6D4[NUM_LANGSCRN_SPRITES_TYPE_1][2]; +extern const AnimId gUnknown_0868B6EC[][NUM_LANGSCRN_SPRITES_TYPE_2][2]; +extern const u8 gUnknown_0868B704[NUM_LANGSCRN_SPRITES_TYPE_1][2]; +extern const u8 gUnknown_0868B710[2][NUM_LANGSCRN_SPRITES_TYPE_2][2]; +extern const u8 gUnknown_0868B71C[NUM_LANGSCRN_SPRITES_TYPE_1]; +extern const u8 gUnknown_0868B722[2][NUM_LANGSCRN_SPRITES_TYPE_2]; +extern const CoordELS gUnknown_0868B728[NUM_LANGSCRN_SPRITES_TYPE_1][2]; +extern const CoordELS gUnknown_0868B734[][NUM_LANGSCRN_SPRITES_TYPE_2][2]; +extern const VoidFn sLangScreenReturnProcs[2]; +extern const CoordELS gUnknown_0868B760[][2]; +void Task_EditLanguageScreenInit(void); +void Task_806ABD4(void); +void sub_806AD44(void); +void Task_806AF04(void); +void TaskDestructor_EditLanguageScreen(struct Task *t); + +void CreateEditLanguageScreen(u8 param0) +{ + struct Task *t; + EditLanguageScreen *screen; + StrcUi_805423C *unk280; + Background *bg; + Sprite *s; + u8 i; + for (i = 0; i < 10; i++) { + gKeysFirstRepeatIntervals[i] = 0x14; + gKeysContinuedRepeatIntervals[i] = 0x8; + } + + gDispCnt = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP; + gBgCntRegs[0] = BGCNT_SCREENBASE(LANGSCRN_BG_SCREENBASE) | BGCNT_PRIORITY(3); + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + + t = TaskCreate(Task_EditLanguageScreenInit, sizeof(EditLanguageScreen), 0x2000, 0, TaskDestructor_EditLanguageScreen); + screen = TASK_DATA(t); + + unk280 = &screen->unk280; + screen->unk28C = param0; + screen->unk28D = LOADED_SAVE->language; + screen->spr250.graphics.dest = NULL; + + for (i = 0; i < NUM_LANGSCRN_SPRITES_TYPE_1; i++) { + s = &screen->sprites[i]; + s->graphics.dest = VramMalloc(gUnknown_0868B71C[i]); + + s->graphics.anim = gUnknown_0868B6D4[i][(screen->unk28D == 0) ? 0 : 1]; + s->variant = gUnknown_0868B704[i][(screen->unk28D == 0) ? 0 : 1]; + + s->x = gUnknown_0868B728[i][0]; + s->y = gUnknown_0868B728[i][1]; + + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + } + + for (; i < NUM_LANGSCRN_SPRITES_TYPE_1 + NUM_LANGSCRN_SPRITES_TYPE_2; i++) { + s = &screen->sprites[i]; + s->graphics.dest = VramMalloc(gUnknown_0868B722[screen->unk28C][i - NUM_LANGSCRN_SPRITES_TYPE_1]); + s->graphics.anim = gUnknown_0868B6EC[screen->unk28C][i - NUM_LANGSCRN_SPRITES_TYPE_1][(screen->unk28D != 0) ? 1 : 0]; + s->variant = gUnknown_0868B710[screen->unk28C][i - NUM_LANGSCRN_SPRITES_TYPE_1][(screen->unk28D != 0) ? 1 : 0]; + s->x = gUnknown_0868B734[screen->unk28C * 3][i - NUM_LANGSCRN_SPRITES_TYPE_1][0]; + s->y = gUnknown_0868B734[screen->unk28C * 3][i - NUM_LANGSCRN_SPRITES_TYPE_1][1]; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + } + + s = &screen->spr1F0; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_MENU_CURSOR); + s->graphics.anim = SA1_ANIM_MENU_CURSOR; + s->variant = 0; + s->x = 33; + s->y = 25; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + + bg = &screen->bg; + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(LANGSCRN_BG_SCREENBASE); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_TILEMAP_89; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 20; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + unk280->unk0 = 0; + unk280->unk2 = 1; + unk280->unk4 = 2; + unk280->unk6 = 0; + unk280->unk8 = 0x100; + unk280->unkA = 0x10; + sub_805423C(unk280); +} + +void Task_EditLanguageScreenInit(void) +{ + EditLanguageScreen *screen = TASK_DATA(gCurTask); + StrcUi_805423C *unk280 = &screen->unk280; + u32 inputMask; + + if (sub_805423C(unk280)) { + if (gRepeatedKeys & DPAD_DOWN) { + screen->unk28D++; + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (screen->unk28D > 4) { + screen->unk28D = 0; + } + } else if (gRepeatedKeys & DPAD_UP) { + screen->unk28D--; + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (screen->unk28D < 0) { + screen->unk28D = 4; + } + } + } + + inputMask = (screen->unk28C != 0) ? (A_BUTTON | START_BUTTON) : A_BUTTON; + + if (gPressedKeys & inputMask) { + m4aSongNumStart(SE_SELECT); + + if (screen->unk28D > 0) { + LOADED_SAVE->uiLanguage = UILANG_ENGLISH; + } else { + LOADED_SAVE->uiLanguage = UILANG_JAPANESE; + } + + LOADED_SAVE->language = screen->unk28D; + + if (screen->unk28D > 1) { + Sprite *s = &screen->spr250; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ONLY_CHAO_MSGBOX); + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ONLY_CHAO_MSGBOX; + s->variant = screen->unk28D - 2; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + + gCurTask->main = Task_806AF04; + } else { + unk280->unk4 = 1; + unk280->unk6 = 0; + gCurTask->main = Task_806ABD4; + } + } else if ((gPressedKeys & B_BUTTON) && (screen->unk28C == 0)) { + m4aSongNumStart(SE_RETURN); + + unk280->unk4 = 1; + unk280->unk6 = 0; + gCurTask->main = Task_806ABD4; + } + + sub_806AD44(); +} + +void Task_806ABD4(void) +{ + EditLanguageScreen *screen = TASK_DATA(gCurTask); + + if (sub_805423C(&screen->unk280)) { + gDispCnt &= ~0xE000; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + +#ifndef BUG_FIX + // BUG: Use after free + TaskDestroy(gCurTask); +#endif + + if (screen->unk28C == 1) { + u16 irqEnable, irqMasterEnable, dispStat; + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + irqEnable = REG_IE; + irqMasterEnable = REG_IME; + dispStat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + { + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + WriteSaveGame(); + } + REG_IE = irqEnable; + REG_IE; + REG_IME = irqMasterEnable; + REG_IME; + REG_DISPSTAT = dispStat; + REG_DISPSTAT; + m4aSoundVSyncOn(); + + gFlags &= ~FLAGS_8000; + } + + sLangScreenReturnProcs[screen->unk28C](); + +#ifdef BUG_FIX + TaskDestroy(gCurTask); +#endif + return; + } + + sub_806AD44(); +} + +void sub_806AD44(void) +{ + EditLanguageScreen *screen = TASK_DATA(gCurTask); + Sprite *s; + u8 i; + u8 loopMax; + + for (i = 0; i < NUM_LANGSCRN_SPRITES_TYPE_1; i++) { + s = &screen->sprites[i]; + + s->graphics.anim = gUnknown_0868B6D4[i][(screen->unk28D == 0) ? 0 : 1]; + s->variant = gUnknown_0868B704[i][(screen->unk28D == 0) ? 0 : 1]; + + s->x = gUnknown_0868B728[i][0]; + s->y = gUnknown_0868B728[i][1]; + s->prevVariant = -1; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + if (screen->unk28C == 1) { + loopMax = 8; + } else { + loopMax = 9; + } + + for (; i < loopMax; i++) { + s = &screen->sprites[i]; + s->graphics.anim = gUnknown_0868B6EC[screen->unk28C][i - NUM_LANGSCRN_SPRITES_TYPE_1][(screen->unk28D != 0) ? 1 : 0]; + s->variant = gUnknown_0868B710[screen->unk28C][i - NUM_LANGSCRN_SPRITES_TYPE_1][(screen->unk28D != 0) ? 1 : 0]; + s->x = gUnknown_0868B734[screen->unk28C * 3][i - NUM_LANGSCRN_SPRITES_TYPE_1][0]; + s->y = gUnknown_0868B734[screen->unk28C * 3][i - NUM_LANGSCRN_SPRITES_TYPE_1][1]; + s->prevVariant = -1; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + s = &screen->spr1F0; + s->x = gUnknown_0868B760[screen->unk28D][0]; + s->y = gUnknown_0868B760[screen->unk28D][1]; + + DisplaySprite(s); +} + +void Task_806AF04(void) +{ + EditLanguageScreen *screen = TASK_DATA(gCurTask); + Sprite *s = &screen->spr250; + StrcUi_805423C *unk280; + + DisplaySprite(s); + sub_806AD44(); + + if (gPressedKeys & A_BUTTON) { + unk280 = &screen->unk280; + unk280->unk4 = 1; + unk280->unk6 = 0; + + m4aSongNumStart(SE_SELECT); + gCurTask->main = Task_806ABD4; + } +} + +void TaskDestructor_EditLanguageScreen(struct Task *t) +{ + EditLanguageScreen *screen = TASK_DATA(t); + Sprite *s; + u8 i; + + for (i = 0; i < (s32)ARRAY_COUNT(screen->sprites); i++) { + VramFree(screen->sprites[i].graphics.dest); + } + + VramFree(screen->spr1F0.graphics.dest); + + if (screen->spr250.graphics.dest) { + VramFree(screen->spr250.graphics.dest); + } +} \ No newline at end of file diff --git a/sa1/src/game/egg_rocket_transitions.c b/sa1/src/game/egg_rocket_transitions.c new file mode 100644 index 0000000000..2a55e7b12e --- /dev/null +++ b/sa1/src/game/egg_rocket_transitions.c @@ -0,0 +1,436 @@ +#include "global.h" +#include "core.h" +#include "task.h" +#include "trig.h" +#include "flags.h" +#include "malloc_vram.h" +#include "bg_triangles.h" +#include "game/nuts_and_bolts_task.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/stage/player.h" +#include "game/stage/screen_shake.h" +#include "lib/m4a/m4a.h" + +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ struct Task *t; + /* 0x04 */ CamCoord worldY; + /* 0x04 */ u16 qUnk6; + /* 0x04 */ u16 qUnk8; + /* 0x04 */ u16 unkA; + /* 0x0C */ u16 unkC; +} EggRocketScreenShake; /* 0x10 */ + +void Task_8028CE4(void); +void Task_8028F20(void); +void Task_8029070(void); +void Task_8029194(void); +void Task_80294A8(void); +void Task_80298C0(void); + +void CreateEggRocketStageSeparation(CamCoord worldY) +{ + struct Task *t = TaskCreate(Task_8028CE4, sizeof(EggRocketScreenShake), 0x4000, 0, NULL); + EggRocketScreenShake *shake = TASK_DATA(t); + + shake->unkA = 0x100; + shake->worldY = worldY; + shake->qUnk6 = 0; + shake->qUnk8 = 0; + + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; + gPlayer.qSpeedAirX = Q(0); + gPlayer.qSpeedGround = Q(0); + + gCamera.maxY = worldY + DISPLAY_HEIGHT; +} + +// (91.87%) https://decomp.me/scratch/pMtZY +NONMATCH("asm/non_matching/game/egg_rocket_trans__Task_8028CE4.inc", void Task_8028CE4(void)) +{ + EggRocketScreenShake *shake = TASK_DATA(gCurTask); + u32 i; + + if (++gCamera.shiftY >= shake->worldY - gCamera.y + DISPLAY_CENTER_Y) { + // _08028D1C + void *tiles; + struct Task *t; + NutsAndBolts *nuts; + CamCoord prevCamX = gCamera.x, prevCamY = gCamera.y - 32; + + for (i = 0; i < 3; i++) { + s32 index = PseudoRandom32() % 8u; + s32 index2; + + t = CreateNutsAndBoltsTask(0x2000, VramMalloc(gUnknown_080BB434[index]), gUnknown_080BB41C[index], gUnknown_080BB42C[index], + TaskDestructor_NutsAndBolts); + nuts = TASK_DATA(t); + + nuts->qUnk30 = Q(prevCamX + (PseudoRandom32() & 0xFF)); + nuts->qUnk34 = Q(prevCamY); + + nuts->s.frameFlags = 0x3000; + nuts->s.oamFlags = SPRITE_OAM_ORDER(31); + nuts->qUnk3E = Q(40. / 256.); + nuts->qUnk40 = Q(1); + + index2 = PseudoRandom32() & 0x1FF; + nuts->qUnk3A = (SIN(index2) >> 6); + + nuts->qUnk3A = ABS(nuts->qUnk3A); + + nuts->qUnk38 = -(COS(index2) << 8) >> 14; + } + + for (i = 0; i < 3; i++) { + s32 index = PseudoRandom32() % 8u; + s32 index2; + + t = CreateNutsAndBoltsTask(0x2000, VramMalloc(gUnknown_080BB434[index]), gUnknown_080BB41C[index], gUnknown_080BB42C[index], + TaskDestructor_NutsAndBolts); + nuts = TASK_DATA(t); + + nuts->qUnk30 = Q(prevCamX + (PseudoRandom32() % 256u)); + nuts->qUnk34 = Q(prevCamY); + + nuts->s.frameFlags = 0x0000; + nuts->s.oamFlags = SPRITE_OAM_ORDER(16); + nuts->qUnk3E = Q(40. / 256.); + nuts->qUnk40 = Q(1); + + index2 = (PseudoRandom32() % 512u); + nuts->qUnk3A = (SIN(index2) >> 5); + nuts->qUnk3A = ABS(nuts->qUnk3A); + + nuts->qUnk38 = -(COS(index2) << 9) >> 14; + } + + shake->t = CreateScreenShake(0x800, 0x8, 0x10, 0xA, 0x80); + + m4aSongNumStart(SE_173); + + gCurTask->main = Task_8028F20; + } +} +END_NONMATCH + +void Task_8028F20(void) +{ + EggRocketScreenShake *shake = TASK_DATA(gCurTask); + s16 ip; + s16 r7; + + shake->qUnk6 += Q(8. / 256.); + shake->qUnk8 += Q(16. / 256.); + + ip = shake->worldY + I(shake->qUnk6) - gCamera.y; + r7 = shake->worldY + I(shake->qUnk8) - gCamera.y; + + if ((shake->qUnk6 >= Q(4)) && ((gBossIndex == 2) || ((-(gStageTime * 2) & 0x1FF) == 0x102))) { + gCurTask->main = Task_8029070; + shake->unkC = 0; + + if (gBossIndex == 3) { + gCamera.SA2_LABEL(unk50) |= 0x4000; + } + + Task_8029070(); + } else if ((ip > 0) && (r7 < DISPLAY_HEIGHT)) { + if (shake->worldY - gCamera.y > 0) { + SA2_LABEL(sub_80078D4)(2, 0, shake->worldY - gCamera.y, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + + SA2_LABEL(sub_8007858)(2, shake->worldY - gCamera.y, r7, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } else { + SA2_LABEL(sub_8007858)(2, 0, r7, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } + SA2_LABEL(sub_80078D4)(2, r7, DISPLAY_HEIGHT, gBgScrollRegs[2][0], gBgScrollRegs[2][1] - I(shake->qUnk8)); + } else { + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + } +} + +void Task_8029070(void) +{ + EggRocketScreenShake *shake = TASK_DATA(gCurTask); + s16 ip; + s16 r7; + + shake->qUnk6 += Q(8. / 256.); + shake->qUnk8 += Q(16. / 256.); + + ip = shake->worldY + I(shake->qUnk6) - gCamera.y; + r7 = shake->worldY + I(shake->qUnk8) - gCamera.y; + + if (shake->unkC++ > 40) { + gCurTask->main = Task_8029194; + + shake->t = CreateScreenShake(0x800, 0x8, 0x10, -1, 0xD0); + + shake->unkC = 0; + + Task_8029194(); + } else if ((ip > 0) && (r7 < DISPLAY_HEIGHT)) { + if (shake->worldY - gCamera.y > 0) { + SA2_LABEL(sub_80078D4)(2, 0, shake->worldY - gCamera.y, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + + SA2_LABEL(sub_8007858)(2, shake->worldY - gCamera.y, r7, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } else { + SA2_LABEL(sub_8007858)(2, 0, r7, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } + SA2_LABEL(sub_80078D4)(2, r7, DISPLAY_HEIGHT, gBgScrollRegs[2][0], gBgScrollRegs[2][1] - I(shake->qUnk8)); + } else { + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + } +} + +// (97.47%) https://decomp.me/scratch/CWQ2v +NONMATCH("asm/non_matching/game/egg_rocket_trans__Task_8029194.inc", void Task_8029194(void)) +{ + EggRocketScreenShake *shake = TASK_DATA(gCurTask); + s16 ip; + s16 r7; + u32 i; + s32 index; + + shake->qUnk8 += Q(2); + shake->qUnk6 += Q(1); + shake->unkA--; + + ip = shake->worldY + I(shake->qUnk6) - gCamera.y; + r7 = shake->worldY + I(shake->qUnk8) - gCamera.y; + + if ((shake->unkC++ & 0xF) == 0) { + void *tiles; + struct Task *t; + NutsAndBolts *nuts; + CamCoord prevCamX = gCamera.x, prevCamY = gCamera.y - 32; + + for (i = 0; i < 3; i++) { + s32 index2; + index = PseudoRandBetween(0, 7); + + t = CreateNutsAndBoltsTask(0x2000, VramMalloc(gUnknown_080BB434[index]), gUnknown_080BB41C[index], gUnknown_080BB42C[index], + TaskDestructor_NutsAndBolts); + nuts = TASK_DATA(t); + + nuts->qUnk30 = Q(PseudoRandBetween(prevCamX, prevCamX + 255)); + nuts->qUnk34 = Q(prevCamY); + + nuts->s.frameFlags = 0x3000; + nuts->s.oamFlags = SPRITE_OAM_ORDER(31); + nuts->qUnk3E = Q(40. / 256.); + nuts->qUnk40 = Q(1); + + index2 = PseudoRandom32() & 0x1FF; + nuts->qUnk3A = (SIN(index2) >> 6); + + nuts->qUnk3A = ABS(nuts->qUnk3A); + + nuts->qUnk38 = -(COS(index2) << 8) >> 14; + } + + for (i = 0; i < 3; i++) { + s32 index2; + index = PseudoRandBetween(0, 7); + + t = CreateNutsAndBoltsTask(0x2000, VramMalloc(gUnknown_080BB434[index]), gUnknown_080BB41C[index], gUnknown_080BB42C[index], + TaskDestructor_NutsAndBolts); + nuts = TASK_DATA(t); + + nuts->qUnk30 = Q(PseudoRandBetween(prevCamX, prevCamX + 255)); + nuts->qUnk34 = Q(prevCamY); + + nuts->s.frameFlags = 0x0000; + nuts->s.oamFlags = SPRITE_OAM_ORDER(16); + nuts->qUnk3E = Q(40. / 256.); + nuts->qUnk40 = Q(1); + + index2 = PseudoRandBetween(0, 511); + nuts->qUnk3A = (SIN(index2) >> 5); + nuts->qUnk3A = ABS(nuts->qUnk3A); + + nuts->qUnk38 = -(COS(index2) << 9) >> 14; + } + + m4aSongNumStart(SE_EXPLOSION); + } + + if ((r7 > DISPLAY_HEIGHT)) { + gCurTask->main = Task_80294A8; + Task_80294A8(); + } else { + if ((ip > 0) && (r7 < DISPLAY_HEIGHT)) { + if (shake->worldY - gCamera.y > 0) { + SA2_LABEL(sub_80078D4)(2, 0, shake->worldY - gCamera.y, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + + SA2_LABEL(sub_8007858)(2, shake->worldY - gCamera.y, r7, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } else { + SA2_LABEL(sub_8007858)(2, 0, r7, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } + SA2_LABEL(sub_80078D4)(2, r7, DISPLAY_HEIGHT, gBgScrollRegs[2][0], gBgScrollRegs[2][1] - I(shake->qUnk8)); + } else { + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + } + } +} +END_NONMATCH + +// Similar to Task_8029194 +// (97.55%) https://decomp.me/scratch/o2r28 +NONMATCH("asm/non_matching/game/egg_rocket_trans__Task_80294A8.inc", void Task_80294A8(void)) +{ + EggRocketScreenShake *shake = TASK_DATA(gCurTask); + u32 i; + s32 index; + CamCoord prevCamX, prevCamY; + + gCamera.shiftY--; + + if ((shake->unkC++ & 0xF) == 0) { + void *tiles; + struct Task *t; + NutsAndBolts *nuts; + prevCamX = gCamera.x; + prevCamY = gCamera.y - 32; + + for (i = 0; i < 3; i++) { + s32 index2; + index = PseudoRandBetween(0, 7); + + t = CreateNutsAndBoltsTask(0x2000, VramMalloc(gUnknown_080BB434[index]), gUnknown_080BB41C[index], gUnknown_080BB42C[index], + TaskDestructor_NutsAndBolts); + nuts = TASK_DATA(t); + + nuts->qUnk30 = Q(prevCamX + (PseudoRandom32() & 0xFF)); + nuts->qUnk34 = Q(prevCamY); + + nuts->s.frameFlags = 0x3000; + nuts->s.oamFlags = SPRITE_OAM_ORDER(31); + nuts->qUnk3E = Q(40. / 256.); + nuts->qUnk40 = Q(1); + + index2 = PseudoRandom32() & 0x1FF; + nuts->qUnk3A = (SIN(index2) >> 6); + + nuts->qUnk3A = ABS(nuts->qUnk3A); + + nuts->qUnk38 = -(COS(index2) << 8) >> 14; + } + + for (i = 0; i < 3; i++) { + s32 index = PseudoRandBetween(0, 7); + s32 index2; + + t = CreateNutsAndBoltsTask(0x2000, VramMalloc(gUnknown_080BB434[index]), gUnknown_080BB41C[index], gUnknown_080BB42C[index], + TaskDestructor_NutsAndBolts); + nuts = TASK_DATA(t); + + nuts->qUnk30 = Q(PseudoRandBetween(prevCamX, prevCamX + 255)); + nuts->qUnk34 = Q(prevCamY); + + nuts->s.frameFlags = 0x0000; + nuts->s.oamFlags = SPRITE_OAM_ORDER(16); + nuts->qUnk3E = Q(40. / 256.); + nuts->qUnk40 = Q(1); + + index2 = PseudoRandBetween(0, 511); + nuts->qUnk3A = (SIN(index2) >> 5); + nuts->qUnk3A = ABS(nuts->qUnk3A); + + nuts->qUnk38 = -(COS(index2) << 9) >> 14; + } + + m4aSongNumStart(SE_EXPLOSION); + } + + if (gCamera.y <= shake->worldY - DISPLAY_HEIGHT) { + gCamera.shiftY = 0; + + if (gBossIndex > 1) { + gCamera.maxY = (58 * 96); + gStageFlags &= ~FLAGS_UPDATE_BACKGROUND_PALETTES; + + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= FLAGS_EXECUTE_HBLANK_COPY; + gCourseTime = TIME(5, 0); + } + } + + if (gBossIndex > 2) { + gCamera.maxY = (34 * 96); + + gStageFlags &= ~1; + + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= FLAGS_EXECUTE_HBLANK_COPY; + gCourseTime = TIME(5, 0); + } + } + + gPlayer.moveState &= ~0x200000; + gPlayer.heldInput = 0; + + TaskDestroy(gCurTask); + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + gCamera.SA2_LABEL(unk50) &= ~0x8000; + } else if ((shake->worldY - gCamera.y) > 0) { + SA2_LABEL(sub_80078D4)(2, 0, shake->worldY - gCamera.y, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + SA2_LABEL(sub_8007858)(2, shake->worldY - gCamera.y, DISPLAY_HEIGHT, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } else { + SA2_LABEL(sub_8007858)(2, 0, DISPLAY_HEIGHT, gBgScrollRegs[2][0], (DISPLAY_HEIGHT + 80)); + } +} +END_NONMATCH + +void Task_80297E8(void) +{ + EggRocketScreenShake *shake = TASK_DATA(gCurTask); + + if ((shake->unkC & 0xF) == 0) { + m4aSongNumStart(SE_EXPLOSION); + } + + if (--shake->unkC == 0) { + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + gCourseTime = TIME(5, 0); + } + + gPlayer.moveState &= ~MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; + + TaskDestroy(gCurTask); + return; + } +} + +void CreateEggRocketLaunchScreenShakeEffect() +{ + struct Task *t = TaskCreate(Task_80298C0, sizeof(EggRocketScreenShake), 0x4000, 0, NULL); + EggRocketScreenShake *shake = TASK_DATA(t); + + shake->unkC = TIME(0, 1); + + CreateScreenShake(0x800, 8, 16, 10, SCREENSHAKE_VERTICAL); + + gCamera.minX = 0x422; + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; +} + +void Task_80298C0() +{ + EggRocketScreenShake *shake = TASK_DATA(gCurTask); + + if (--shake->unkC == 0) { + shake->unkC = TIME(0, 5); + CreateScreenShake(0x800, 8, 16, 300, (SCREENSHAKE_VERTICAL | SCREENSHAKE_RANDOM_VALUE)); + gCurTask->main = Task_80297E8; + } +} diff --git a/sa1/src/game/enemies/boss_1_egg_hammer_tank.c b/sa1/src/game/enemies/boss_1_egg_hammer_tank.c new file mode 100644 index 0000000000..605edf8b9b --- /dev/null +++ b/sa1/src/game/enemies/boss_1_egg_hammer_tank.c @@ -0,0 +1,1349 @@ +#include "global.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" +#include "game/nuts_and_bolts_task.h" +#include "game/save.h" +#include "game/stage/player_controls.h" +#include "game/stage/screen_shake.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" + +typedef struct EHTArm { + /* 0x00 */ Sprite s; + /* 0x30 */ SpriteTransform transform; + /* 0x3C */ s16 unk3C; + /* 0x3E */ s16 unk3E; + /* 0x40 */ u16 unk40; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s32 qUnk48; + /* 0x4C */ s16 qUnk4C; + /* 0x4E */ s16 qUnk4E; + /* 0x50 */ u8 unk50; +} EHTArm; /* 0x54 */ + +typedef struct EHTHammer { + /* 0x00 */ Sprite s; + /* 0x30 */ SpriteTransform transform; + /* 0x3C */ s16 unk3C; + /* 0x3E */ s16 unk3E; + /* 0x40 */ s16 unk40; + /* 0x40 */ s16 unk42; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s32 qUnk48; + /* 0x4C */ s16 qUnk4C; + /* 0x4E */ s16 qUnk4E; + /* 0x50 */ u8 unk50; +} EHTHammer; /* 0x54 */ + +typedef struct EggHammerTank { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ Sprite s2; + /* 0x74 */ struct Task *taskHammer; + /* 0x78 */ struct Task *tasksArm[5]; + /* 0x8C */ s32 qUnk8C; + /* 0x90 */ s32 qUnk90; + /* 0x94 */ s16 unk94; + /* 0x96 */ s16 unk96; + /* 0x98 */ u16 unk98; + /* 0x9A */ s8 unk9A; + /* 0x9B */ s8 unk9B; + /* 0x9C */ u8 unk9C; + /* 0x9C */ u8 unk9D; + /* 0x9C */ s16 qUnk9E; +} EggHammerTank; /* 0xA0 */ + +void Task_EHTArm(void); +void Task_80272D0(void); +void TaskDestructor_EHTArm(struct Task *t); + +struct Task *CreatePreBossCameraPan(s16, s16); +struct Task *sub_8017540(s32, s32); +void Task_802611C(); +void Task_EHTArm(); +void Task_EHTHammer(); +void Task_EggHammerTankMain(); +void Task_EggHammerTank_Intro(); +void TaskDestructor_EggHammerTank(struct Task *); +void TaskDestructor_EHTHammer(struct Task *); +void Task_8025CC4(); +void Task_8025D80(); +void Task_8025E6C(); +void Task_80264C8(); +void Task_8026C44(); +void Task_8026ED0(void); +void Task_80271E4(); +void Task_8027600(); +void Task_8027714(); + +void CreateEntity_EggHammerTank_Intro(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + EggHammerTank *tank; + Sprite *s; + Sprite *s2; + s16 tempY; + SpriteBase *base; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_EggHammerTank_Intro, sizeof(EggHammerTank), 0x2000U, 0U, TaskDestructor_EggHammerTank); + tank = TASK_DATA(t); + s = &tank->s; + base = &tank->base; + s2 = &tank->s; + base->regionX = regionX; + base->regionY = regionY; + + base->me = me; + base->meX = (u8)me->x; + base->id = id; + tank->unk94 = 0; + tank->unk98 = 0; + tank->unk9A = 0; + tank->unk96 = -4; + tank->unk9B = 0; + tank->qUnk8C = 0; + tank->unk9C = 0; + s->x = TO_WORLD_POS(me->x, regionX); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGMOBILE); + s->oamFlags = 0x4C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_EGGMOBILE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->hitboxes[1].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s2 = &tank->s2; + s2->x = TO_WORLD_POS(me->x, regionX); + s2->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGMAN); + s2->oamFlags = 0x480; + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_EGGMAN; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + gCamera.minX = s2->x - DISPLAY_WIDTH; + + if (gCamera.minX < 0) { + gCamera.minX = 0; + } + + gCamera.maxX = s2->x + 64; + tempY = s2->y + (DISPLAY_HEIGHT - 48); + CreatePreBossCameraPan((s16)(s2->y - 48), tempY); + + if (tempY > (gCamera.y + DISPLAY_HEIGHT)) { + gCamera.maxY = tempY; + } +} + +void Task_EggHammerTank_Intro(void) +{ + EggHammerTank *tank; + SpriteBase *base; + MapEntity *me; + Sprite *s, *s2; + CamCoord worldX, worldY; + + tank = TASK_DATA(gCurTask); + base = &tank->base; + s = &tank->s; + s2 = &tank->s2; + me = tank->base.me; + + worldX = TO_WORLD_POS(base->meX, base->regionX); + worldY = TO_WORLD_POS(me->y, base->regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + + if (gCamera.x < (gCamera.maxX - DISPLAY_WIDTH)) { + gCamera.minX = (u16)gCamera.x; + } else { + gCamera.minX = (u16)gCamera.maxX - DISPLAY_WIDTH; + } + + if (worldX - gCamera.x <= DISPLAY_WIDTH - 64) { + gPlayer.qSpeedGround = 0; + gPlayer.moveState |= 0x200000; + gPlayer.heldInput = 0; + s2->graphics.anim = SA1_ANIM_EGGMAN; + s2->variant = 2; + gCurTask->main = Task_8025CC4; + gMusicManagerState.unk1 = 0x11; + } +} + +void Task_8025CC4(void) +{ + EggHammerTank *tank; + SpriteBase *base; + MapEntity *me; + Sprite *s, *s2; + CamCoord worldX, worldY; + AnimCmdResult acmdRes; + + tank = TASK_DATA(gCurTask); + base = &tank->base; + s = &tank->s; + s2 = &tank->s2; + me = tank->base.me; + + worldX = TO_WORLD_POS(base->meX, base->regionX); + worldY = TO_WORLD_POS(me->y, base->regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + UpdateSpriteAnimation(s); + acmdRes = UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + + if (acmdRes == ACMD_RESULT__ENDED) { + s->graphics.anim = SA1_ANIM_EGGMOBILE; + s->variant = 1; + s2->graphics.anim = SA1_ANIM_EGGMAN; + s2->variant = 9; + gCurTask->main = Task_8025D80; + } +} + +void Task_8025D80(void) +{ + EggHammerTank *tank; + SpriteBase *base; + MapEntity *me; + Sprite *s, *s2; + CamCoord worldX, worldY; + AnimCmdResult acmdRes; + + tank = TASK_DATA(gCurTask); + base = &tank->base; + s = &tank->s; + s2 = &tank->s2; + me = tank->base.me; + + worldX = TO_WORLD_POS(base->meX, base->regionX); + worldY = TO_WORLD_POS(me->y, base->regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + acmdRes = UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + + if (acmdRes == ACMD_RESULT__ENDED) { + gCurTask->main = Task_8025E6C; + s->graphics.anim = SA1_ANIM_EGGMOBILE; + s->variant = 0; + s->frameFlags |= 0x400; + s2->graphics.anim = SA1_ANIM_EGGMAN; + s2->variant = 0; + s2->frameFlags |= 0x400; + CreatePreBossCameraPan((worldY - 48), (worldY + (DISPLAY_HEIGHT - 48))); + } +} + +void Task_8025E6C(void) +{ + EggHammerTank *tank; + SpriteBase *base; + MapEntity *me; + Sprite *s, *s2; + CamCoord worldX, worldY; + AnimCmdResult acmdRes; + + tank = TASK_DATA(gCurTask); + base = &tank->base; + s = &tank->s; + s2 = &tank->s2; + me = tank->base.me; + + tank->qUnk8C += Q(2); + + worldX = TO_WORLD_POS(base->meX, base->regionX) + I(tank->qUnk8C); + worldY = TO_WORLD_POS(me->y, base->regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + if (s->x > DISPLAY_WIDTH + 64) { + gPlayer.moveState &= ~0x200000; + gPlayer.heldInput |= gPlayerControls.jump | gPlayerControls.attack; + TaskDestroy(gCurTask); + gCamera.maxX = (s16)gRefCollision->pxWidth; + return; + } + + acmdRes = UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void CreateEntity_EggHammerTank(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + EggHammerTank *tank; + Sprite *s; + s16 tempY; + SpriteBase *base; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_EggHammerTankMain, sizeof(EggHammerTank), 0x2000U, 0U, TaskDestructor_EggHammerTank); + tank = TASK_DATA(t); + base = &tank->base; + base->regionX = regionX; + base->regionY = regionY; + + base->me = me; + base->meX = (u8)me->x; + base->id = id; + tank->unk94 = 0; + tank->unk98 = 0; + tank->unk96 = -4; + tank->unk9B = 0; + tank->qUnk8C = 0; + tank->unk9C = 0; + + if (LOADED_SAVE->difficultyLevel != DIFFICULTY_NORMAL) { + tank->unk9A = 2; + } else { + tank->unk9A = 0; + } + + s = &tank->s; + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_1_BODY); + s->oamFlags = 0x4C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_1_BODY; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->hitboxes[1].index = HITBOX_STATE_INACTIVE; + s->y = TO_WORLD_POS(me->y, regionY); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s = &tank->s2; + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_1_EGGMAN); + s->oamFlags = 0x480; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_1_EGGMAN; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + gCamera.shiftY = -56; + gCamera.maxX = s->x - 64; + + // TODO/NOTE(Jace): + // (DISPLAY_WIDTH * 1.5f) might break TAS tests, if we plan on adding those. + // + // Also, once we allow for arbitrary resolutions, it might lead to Eggman + // indefinitely moving left, without turning around... + gCamera.minX = (((float)gCamera.maxX) - (DISPLAY_WIDTH * 1.5f)); + gMusicManagerState.unk1 = 0x10; +} + +void Task_802611C(void) +{ + EHit collPlayer; + EHit collPartner; + + EggHammerTank *tank; + MapEntity *me; + Sprite *s, *s2; + CamCoord worldX, worldY; + AnimCmdResult acmdRes; + + tank = TASK_DATA(gCurTask); + s = &tank->s; + s2 = &tank->s2; + me = tank->base.me; + + tank->unk94 += tank->unk96; + if (!(tank->unk94 > -568 && tank->unk94 < 56)) { + m4aSongNumStart(SE_IMPACT); + tank->unk96 = -tank->unk96; + CreateScreenShake(0x800U, 0x40U, 0x100U, -1U, 0x80); + } + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + tank->qUnk8C += Q(1); + } else { + tank->qUnk8C -= Q(1); + } + + worldX = TO_WORLD_POS(tank->base.meX, tank->base.regionX) + I(tank->qUnk8C); + worldY = TO_WORLD_POS(me->y, tank->base.regionY); + s->frameFlags &= ~0x180; + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (tank->unk9B == 0) { + collPlayer = Coll_Player_Boss_1(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == 2) { + collPartner = Coll_Player_Boss_1(s, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + if ((collPlayer == HIT_ENEMY) || (collPartner == HIT_ENEMY)) { + tank->unk9A++; + tank->unk9B = 0x20; + if (tank->unk9A == 7) { + tank->unk9B = 0x40; + gCurTask->main = Task_80264C8; + } else if (tank->unk9A > 4) { + if (tank->unk96 > 0) { + tank->unk96 = (s8)tank->unk9A + 1; + } else { + tank->unk96 = ~(s8)tank->unk9A; + } + } + s2->variant = 2; + m4aSongNumStart(SE_BOSS_HIT); + } else if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + s2->variant = 1; + } + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = (u16)s->y; + if (worldX < (s32)(gCamera.minX - 64)) { + s->frameFlags = (s32)(s->frameFlags | 0x400); + s2->frameFlags = s2->frameFlags | 0x400; + } else if (worldX > (s32)(gCamera.maxX + 64)) { + s->frameFlags &= ~0x400; + s2->frameFlags &= ~0x400; + } + UpdateSpriteAnimation((Sprite *)s); + UpdateSpriteAnimation((Sprite *)s2); + if (s->variant == 2) { + s2->y = (u16)(s2->y - 1); + } + if (tank->unk9B != 0) { + if (--tank->unk9B > 0x10) { + if (!(tank->unk9B & 2) && PLAYER_IS_ALIVE) { + s->frameFlags = (s32)(s->frameFlags | 0x100); + gDispCnt |= 0x8000; + gWinRegs[WINREG_WINOUT] = 0x3F1F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + + DisplaySprite(s); + DisplaySprite(s2); + } else if (tank->unk9B & 2) { + DisplaySprite(s); + DisplaySprite(s2); + } + } else { + DisplaySprite(s); + DisplaySprite(s2); + } + + if (s->frameFlags & 0x400) { + SA2_LABEL(gUnknown_03001944) = 0x3FF & tank->unk94; + SA2_LABEL(gUnknown_030017F0) = 0x100; + SA2_LABEL(gUnknown_03005394) = 0x100; + SA2_LABEL(gUnknown_03002A8C) = 0; + SA2_LABEL(gUnknown_03004D58) = 0; + SA2_LABEL(gUnknown_0300194C) = tank->s.x; + SA2_LABEL(gUnknown_03002820) = tank->s.y - 0x24; + } else { + SA2_LABEL(gUnknown_03001944) = 0x3FF & tank->unk94; + SA2_LABEL(gUnknown_030017F0) = 0x100; + SA2_LABEL(gUnknown_03005394) = 0x100; + SA2_LABEL(gUnknown_03002A8C) = 0; + SA2_LABEL(gUnknown_03004D58) = 0; + SA2_LABEL(gUnknown_0300194C) = tank->s.x; + SA2_LABEL(gUnknown_03002820) = tank->s.y - 0x24; + } +} + +// (97.42%) https://decomp.me/scratch/lLJ09 +NONMATCH("asm/non_matching/game/enemies/boss_1__Task_80264C8.inc", void Task_80264C8(void)) +{ + MapEntity *me; + EggHammerTank *tank; + Sprite *s; + Sprite *s2; // sp04 + s32 sp08, sp0C; // sp08, sp0C + s16 *unk94 = &tank->unk94; // sp10 + CamCoord worldX, worldY; // sp14, sp18 + s16 theta; + EHit collPlayer, collPartner; + struct Task *t; + Strc_sub_80168F0 *strc; + u8 i; + + sp08 = 0; + sp0C = 0; + + tank = TASK_DATA(gCurTask); + s = &tank->s; + s2 = &tank->s2; + me = tank->base.me; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + tank->unk96 = (tank->unk9A * 2 - 2); + } else { + tank->unk96 = -4 - ((tank->unk9A - 3) * 2); + } + + tank->unk94 += tank->unk96; + if (tank->unk94 < -0x300) { + tank->unk94 += 0x400; + tank->qUnk8C -= COS(56) * 3; + } else if (tank->unk94 > +0x100) { + tank->unk94 -= 0x400; + tank->qUnk8C += COS(56) * 3; + } + + if ((tank->unk94 <= -568)) { + if (tank->unk9C == 0) { + tank->unk9C = 1; + + m4aSongNumStart(SE_IMPACT); + CreateScreenShake(0x800U, 0x40U, 0x100U, -1U, 0x80); + } + + theta = (0x200 - tank->unk94) & 0x3FF; + sp08 = -((s32)((COS(56) - COS(theta)) * 3) >> 9); + sp0C = -((s32)((SIN(theta) - SIN(56)) * 3) >> 9); + } else if (tank->unk94 > 55) { + if (tank->unk9C == 0) { + tank->unk9C = 1; + + m4aSongNumStart(SE_IMPACT); + CreateScreenShake(0x800U, 0x40U, 0x100U, -1U, 0x80); + } + + theta = tank->unk94 & 0x3FF; + sp08 = +((s32)((COS(56) - COS(theta)) * 3) >> 9); + sp0C = -((s32)((SIN(theta) - SIN(56)) * 3) >> 9); + } else { + if (tank->unk9C == 1) { + tank->unk9C = 0; + } + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + tank->qUnk8C += Q(1); + } else { + tank->qUnk8C -= Q(1); + } + } + + worldX = TO_WORLD_POS(tank->base.meX, tank->base.regionX) + I(tank->qUnk8C) + sp08; + worldY = TO_WORLD_POS(me->y, tank->base.regionY) + sp0C; + + s->frameFlags &= ~0x180; + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (tank->unk9B == 0) { + collPlayer = Coll_Player_Boss_1(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == 2) { + collPartner = Coll_Player_Boss_1(s, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + if ((collPlayer == HIT_ENEMY) || (collPartner == HIT_ENEMY)) { + tank->unk9A++; + tank->unk9B = 0x20; + s2->variant = 2; + tank->qUnk9E = -Q(2); + + INCREMENT_SCORE_A(1000); + + m4aSongNumStart(SE_EXPLOSION); + + for (i = 0; i < 5; i++) { + tank->tasksArm[i]->main = Task_80271E4; + } + + tank->taskHammer->main = Task_8027600; + tank->qUnk8C += Q(sp08); + tank->qUnk90 = Q(sp0C); + + tank->unk98 = 0; + s->graphics.anim = SA1_ANIM_BOSS_1_BODY_NO_BELT; + s->variant = 0; + + { + t = sub_80168F0(worldX, worldY, 16, 0x265, 0); + strc = TASK_DATA(t); + strc->qUnk46 = -Q(2); + strc->unk48 = 0; + strc->unk42 = 0; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = +Q(4); + } else { + strc->qUnk44 = -Q(4); + } + + strc->unk40 = 60; + } + + { + t = sub_80168F0(worldX, worldY, 16, 614, 0); + strc = TASK_DATA(t); + strc->qUnk46 = -Q(2); + strc->unk48 = 0; + strc->unk42 = 0; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = +Q(4); + } else { + strc->qUnk44 = -Q(4); + } + + strc->unk40 = 60; + } + + { + t = sub_80168F0(worldX, worldY, 16, 615, 0); + strc = TASK_DATA(t); + strc->qUnk46 = -Q(2); + strc->unk48 = 0; + strc->unk42 = 0; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = -Q(4); + } else { + strc->qUnk44 = +Q(4); + } + + strc->unk40 = 60; + } + + { + t = sub_80168F0(worldX, worldY, 16, 616, 0); + strc = TASK_DATA(t); + strc->qUnk46 = -Q(2); + strc->unk48 = 0; + strc->unk42 = 0; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = -Q(4); + } else { + strc->qUnk44 = +Q(4); + } + + strc->unk40 = 60; + } + + gCamera.minX = gCamera.x; + gCamera.maxX = gCamera.x + DISPLAY_WIDTH; + gCurTask->main = Task_8026C44; + gCurTask->main(); + return; + } + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + if (sp0C == 0) { + if (worldX < gCamera.minX - 64) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + s2->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } else if (worldX > gCamera.maxX + 64) { + s->frameFlags &= ~SPRITE_FLAG(X_FLIP, 1); + s2->frameFlags &= ~SPRITE_FLAG(X_FLIP, 1); + } + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + if (s->variant == 2) { +#if !TRUE + // s is incorrect here, but using it increases overall percentage by 2% + s->y--; // s2 +#else + s2->y--; // s2 +#endif + } + + if (tank->unk9B != 0) { + if (--tank->unk9B > 16) { + if (!(tank->unk9B & 2) && PLAYER_IS_ALIVE) { + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, 2); + gDispCnt |= 0x8000; + gWinRegs[WINREG_WINOUT] = 0x3F1F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + + DisplaySprite(s); + DisplaySprite(s2); + } else if (tank->unk9B & 2) { + DisplaySprite(s); + DisplaySprite(s2); + } + } else { + DisplaySprite(s); + DisplaySprite(s2); + } + + if (s->frameFlags & 0x400) { + SA2_LABEL(gUnknown_03001944) = tank->unk94 & 0x3FF; + SA2_LABEL(gUnknown_030017F0) = 0x100; + SA2_LABEL(gUnknown_03005394) = 0x100; + SA2_LABEL(gUnknown_03002A8C) = 0; + SA2_LABEL(gUnknown_03004D58) = 0; + SA2_LABEL(gUnknown_0300194C) = tank->s.x; + SA2_LABEL(gUnknown_03002820) = tank->s.y - 0x24; + } else { + SA2_LABEL(gUnknown_03001944) = tank->unk94 & 0x3FF; + SA2_LABEL(gUnknown_030017F0) = 0x100; + SA2_LABEL(gUnknown_03005394) = 0x100; + SA2_LABEL(gUnknown_03002A8C) = 0; + SA2_LABEL(gUnknown_03004D58) = 0; + SA2_LABEL(gUnknown_0300194C) = tank->s.x; + SA2_LABEL(gUnknown_03002820) = tank->s.y - 0x24; + } +} +END_NONMATCH + +void Task_8026C44(void) +{ + EggHammerTank *tank; + s32 res; + Sprite *s; + Sprite *s2; + SpriteBase *base; + MapEntity *me; + s16 rndTheta; + CamCoord worldX; + CamCoord worldY; + + tank = TASK_DATA(gCurTask); + base = &tank->base; + s = &tank->s; + s2 = &tank->s2; + me = base->me; + tank->qUnk9E += 0x28; + tank->qUnk90 += tank->qUnk9E; + worldX = TO_WORLD_POS(base->meX, base->regionX) + I(tank->qUnk8C); + worldY = TO_WORLD_POS(me->y, base->regionY) + I(tank->qUnk90); + + res = SA2_LABEL(sub_801F100)(worldY - 8, worldX, 1, 8, SA2_LABEL(sub_801EC3C)); + if (res < 0) { + tank->qUnk90 += Q(res); + + tank->qUnk9E = (tank->qUnk9E >> 2) - tank->qUnk9E; + if (tank->qUnk9E > -Q(1)) { + tank->qUnk9E = 0U; + gCurTask->main = Task_8026ED0; + } + } + s->frameFlags &= ~0x180; + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~0x8000; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + tank->unk98++; + + if (!(tank->unk98 & 7)) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY - 0x20); + sprBolts->frameFlags = 0x2000; + sprBolts->oamFlags = 0x440; + bolts->qUnk3E = Q(40. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + a0 = Q((worldX + (0x3F & rnd)) - 0x20); + a1 = (((rnd & 0x3F0000) >> 0x10)); + a1 += 32; + sub_8017540(a0, Q(worldY) - Q(a1)); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + UpdateSpriteAnimation((Sprite *)s); + UpdateSpriteAnimation((Sprite *)s2); + + if (s->variant == 2) { + s2->y--; + } + + DisplaySprite(s); + DisplaySprite(s2); +} + +void Task_8026ED0(void) +{ + EggHammerTank *tank; + s32 res; + Sprite *s; + Sprite *s2; + SpriteBase *base; + MapEntity *me; + s16 rndTheta; + CamCoord worldX; + CamCoord worldY; + + tank = TASK_DATA(gCurTask); + base = &tank->base; + s = &tank->s; + s2 = &tank->s2; + me = base->me; + + worldX = TO_WORLD_POS(base->meX, base->regionX) + I(tank->qUnk8C); + worldY = TO_WORLD_POS(me->y, base->regionY) + I(tank->qUnk90); + + if (tank->unk98++ > DISPLAY_WIDTH) { + CreatePostBossEggMobile(worldX, worldY - 32); + CreateBossCapsule(worldX, worldY); + gMusicManagerState.unk1 = 0x30; + TaskDestroy(gCurTask); + return; + } + + if (!(tank->unk98 & 7)) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY - 0x20); + sprBolts->frameFlags = 0x2000; + sprBolts->oamFlags = 0x440; + bolts->qUnk3E = Q(40. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + a0 = Q((worldX + (0x3F & rnd)) - 0x20); + a1 = (((rnd & 0x3F0000) >> 0x10)); + a1 += 32; + sub_8017540(a0, Q(worldY) - Q(a1)); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + UpdateSpriteAnimation((Sprite *)s); + UpdateSpriteAnimation((Sprite *)s2); + + if (s->variant == 2) { + s2->y--; + } + + DisplaySprite(s); + DisplaySprite(s2); +} + +struct Task *CreateEHTArm(u8 arg0) +{ + s32 sp4; + SpriteTransform *tf; + Sprite *s; + struct Task *t; + EHTArm *ehtArm; + + t = TaskCreate(Task_EHTArm, sizeof(EHTArm), 0x2000 | arg0, 0U, TaskDestructor_EHTArm); + ehtArm = TASK_DATA(t); + s = &ehtArm->s; + tf = &ehtArm->transform; + ehtArm->unk50 = arg0; + + s->x = 0; + s->y = 0; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_1_HAMMER_SEGMENT); + s->oamFlags = 0x440; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_1_HAMMER_SEGMENT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2030; + + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = arg0 * 16; + tf->y = 0; + + UpdateSpriteAnimation(s); + + return t; +} + +// (62.78%) https://decomp.me/scratch/0oTRq +NONMATCH("asm/non_matching/game/enemies/boss_1__Task_80271E4.inc", void Task_80271E4(void)) +{ + EHTArm *arm; + Sprite *s; + SpriteTransform *tf; + + arm = TASK_DATA(gCurTask); + s = &arm->s; + tf = &arm->transform; + tf->rotation = 0; + + arm->unk3C = ((COS(sa2__gUnknown_03001944) * 0x10 * arm->unk50) >> 0xE) + (gCamera.x + sa2__gUnknown_0300194C); + arm->unk3E = ((SIN(sa2__gUnknown_03001944) * 0x10 * arm->unk50) >> 0xE) + (gCamera.y + sa2__gUnknown_03002820); + + if (arm->unk50) { + arm->qUnk4C = +Q(2); + } else { + arm->qUnk4C = -Q(2); + } + + arm->qUnk4E = -Q(6); + arm->qUnk44 = 0; + arm->qUnk48 = 0; + arm->unk40 = 0; + s->frameFlags &= ~0x20; + gCurTask->main = Task_80272D0; + gCurTask->main(); +} +END_NONMATCH + +void Task_80272D0(void) +{ + s32 temp_r1; + s32 temp_r1_3; + s32 temp_r1_4; + s32 temp_r2; + s32 temp_r2_2; + s32 temp_r6; + EHTArm *arm; + Sprite *s; + + arm = TASK_DATA(gCurTask); + s = &arm->s; + + if (arm->unk40++ > 0xB4U) { + TaskDestroy(gCurTask); + return; + } + arm->qUnk4E += 0x28; + arm->qUnk44 += arm->qUnk4C; + arm->qUnk48 += arm->qUnk4E; + + if (arm->qUnk4E > 0) { + s32 res = sa2__sub_801F100(arm->unk3E + I(arm->qUnk48), arm->unk3C + I(arm->qUnk44), 1, 8, sa2__sub_801EC3C); + if (res < 0) { + arm->qUnk48 = arm->qUnk48 + Q(res); + arm->qUnk4E = (arm->qUnk4E >> 2) - arm->qUnk4E; + } + } + + temp_r1_3 = arm->unk3C + I(arm->qUnk44); + if ((temp_r1_3 > (s32)(gCamera.x + DISPLAY_WIDTH)) || (temp_r1_3 < gCamera.x)) { + arm->qUnk4C = -arm->qUnk4C; + } + + if (!(arm->unk40 & 0x7)) { + sub_8017540(Q(arm->unk3C) + arm->qUnk44, Q(arm->unk3E) + arm->qUnk48); + } + + s->x = (s16)((((s32)arm->qUnk44 >> 8) + arm->unk3C) - (u16)gCamera.x); + s->y = (s16)((((s32)arm->qUnk48 >> 8) + arm->unk3E) - (u16)gCamera.y); + DisplaySprite(s); +} + +struct Task *CreateEHTHammer(void) +{ + s32 sp4; + SpriteTransform *tf; + Sprite *s; + struct Task *t; + EHTHammer *hammer; + + t = TaskCreate(Task_EHTHammer, sizeof(EHTHammer), 0x2005, 0U, TaskDestructor_EHTHammer); + hammer = TASK_DATA(t); + s = &hammer->s; + tf = &hammer->transform; + + s->x = 0; + s->y = 0; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_1_HAMMER); + s->oamFlags = 0x440; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_1_HAMMER; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2030; + + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = 0x60; + tf->y = 0; + + UpdateSpriteAnimation(s); + + return t; +} + +// (99.53%) https://decomp.me/scratch/AmBa2 +NONMATCH("asm/non_matching/game/enemies/boss_1__Task_EHTHammer.inc", void Task_EHTHammer(void)) +{ + s16 temp_r0_4; + s16 temp_r4; + s16 temp_r5; + s32 temp_r0_3; + s32 temp_r0_5; + s32 temp_r6; + EggHammerTank *tank; + EHTHammer *hammer; + Sprite *s; + Sprite *sprTank; + SpriteTransform *tf; + u32 var_r4; + s16 x, y; + s32 res; + s16 theta; + + hammer = TASK_DATA(gCurTask); + s = &hammer->s; + tf = &hammer->transform; + tank = TASK_DATA(TASK_PARENT(gCurTask)); + sprTank = &tank->s2; + tf->rotation = 0U; + + if (tank->unk94 < 0) { + s16 temp_r1_2 = -tank->unk94 - Q(2); + if (temp_r1_2 > 0) { + tf->rotation = temp_r1_2; + } + } else if (tank->unk94 > 0) { + tf->rotation = -tank->unk94; + } + UnusedTransform((Sprite *)s, (SpriteTransform *)tf); + + { +#ifndef NON_MATCHING + register s32 x32 asm("r1"); + register s32 y32 asm("r2"); +#else + s32 x32; + s32 y32; +#endif + x32 = COS(sa2__gUnknown_03001944) * 3; + y32 = SIN(sa2__gUnknown_03001944) * 3; + x = sa2__gUnknown_0300194C + gCamera.x + (x32 >> 9); + y = sa2__gUnknown_03002820 + gCamera.y + (y32 >> 9); + } + if (tank->unk9B == 0) { + res = Coll_Player_Entity_Intersection((Sprite *)s, x, y, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + var_r4 = Coll_Player_Entity_Intersection((Sprite *)s, x, y, &gPartner); + } else { + var_r4 = 0; + } + if (res == 0x80000) { + Coll_DamagePlayer(&gPlayer); + sprTank->variant = 1; + } + if (var_r4 == 0x80000) { + Coll_DamagePlayer(&gPartner); + sprTank->variant = 1; + } + } + DisplaySprite((Sprite *)s); +} +END_NONMATCH + +// (92.28%) https://decomp.me/scratch/hvbRq +NONMATCH("asm/non_matching/game/enemies/boss_1__Task_8027600.inc", void Task_8027600(void)) +{ + s16 temp_r0_4; + s16 temp_r4; + s16 temp_r5; + s32 temp_r0_3; + s32 temp_r0_5; + s32 temp_r6; + EggHammerTank *tank; + EHTHammer *hammer; + Sprite *s; + SpriteTransform *tf; + u32 var_r4; + s16 x, y; + s32 res; + s16 theta; + + hammer = TASK_DATA(gCurTask); + s = &hammer->s; + tf = &hammer->transform; + tank = TASK_DATA(TASK_PARENT(gCurTask)); + tf->rotation = 0U; + + if (tank->unk94 < 0) { + s16 temp_r1_2 = -tank->unk94 - Q(2); + if (temp_r1_2 > 0) { + tf->rotation = temp_r1_2; + } + } else if (tank->unk94 > 0) { + tf->rotation = -tank->unk94; + tf->rotation += SA2_LABEL(gUnknown_03001944); + } + + { + s32 x32; + s32 y32; + x32 = COS(SA2_LABEL(gUnknown_03001944)) * 3; + y32 = SIN(SA2_LABEL(gUnknown_03001944)) * 3; + x = sa2__gUnknown_0300194C + gCamera.x + (x32 >> 9); + y = sa2__gUnknown_03002820 + gCamera.y + (y32 >> 9); + hammer->unk3C = x; + hammer->unk3E = y; + } + + if (x < gCamera.x + DISPLAY_CENTER_X) { + hammer->qUnk4C = +Q(2); + } else { + hammer->qUnk4C = -Q(2); + } + hammer->qUnk4E = -Q(6); + + hammer->qUnk44 = Q(0); + hammer->qUnk48 = Q(0); + hammer->unk40 = 0; + hammer->unk42 = 42; + + gCurTask->main = Task_8027714; + gCurTask->main(); +} +END_NONMATCH + +void Task_8027714(void) +{ + s32 temp_r1; + s32 temp_r1_3; + s32 temp_r1_4; + s32 temp_r2; + s32 temp_r2_2; + s32 temp_r6; + Sprite *s; + SpriteTransform *tf; + + EHTHammer *hammer = TASK_DATA(gCurTask); + s = &hammer->s; + tf = &hammer->transform; + + if (hammer->unk40++ > 0xB4U) { + TaskDestroy(gCurTask); + return; + } + hammer->qUnk4E += 0x28; + hammer->qUnk44 += hammer->qUnk4C; + hammer->qUnk48 += hammer->qUnk4E; + + if (hammer->qUnk4E > 0) { + s32 res = sa2__sub_801F100(hammer->unk3E + I(hammer->qUnk48), hammer->unk3C + I(hammer->qUnk44), 1, 8, sa2__sub_801EC3C); + if (res < 0) { + hammer->qUnk48 = hammer->qUnk48 + Q(res); + hammer->qUnk4E = (hammer->qUnk4E >> 2) - hammer->qUnk4E; + hammer->unk42 = -hammer->unk42; + } + } + + if (!(hammer->unk40 & 0x7)) { + sub_8017540(Q(hammer->unk3C) + hammer->qUnk44, Q(hammer->unk3E) + hammer->qUnk48); + } + + s->x = (s16)((((s32)hammer->qUnk44 >> 8) + hammer->unk3C) - (u16)gCamera.x); + s->y = (s16)((((s32)hammer->qUnk48 >> 8) + hammer->unk3E) - (u16)gCamera.y); + + tf->rotation = (tf->rotation + hammer->unk42) & 0x3FF; + tf->x = s->x; + tf->y = s->y; + TransformSprite(s, tf); + DisplaySprite(s); +} + +void sub_802784C(struct Task *t) +{ + EggHammerTank *tank = TASK_DATA(t); + + VramFree(tank->s.graphics.dest); + VramFree(tank->s2.graphics.dest); +} + +void Task_EggHammerTankMain(void) +{ + s32 temp_r2; + u16 temp_r0; + EggHammerTank *tank; + u8 i; + + tank = TASK_DATA(gCurTask); + if (tank->unk98++ > 120) { + for (i = 0; i < ARRAY_COUNT(tank->tasksArm); i++) { + tank->tasksArm[i] = CreateEHTArm(i); + }; + tank->taskHammer = CreateEHTHammer(); + + gCurTask->main = Task_802611C; + gCurTask->main(); + } +} + +void TaskDestructor_EggHammerTank(struct Task *t) +{ + EggHammerTank *tank = TASK_DATA(t); + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + VramFree(tank->s.graphics.dest); + VramFree(tank->s2.graphics.dest); +} + +void Task_EHTArm(void) +{ + EHTArm *arm; + Sprite *s; + SpriteTransform *tf; + + arm = TASK_DATA(gCurTask); + s = &arm->s; + + tf = &arm->transform; + tf->rotation = 0; + + UnusedTransform(s, tf); + DisplaySprite(s); +} + +void TaskDestructor_EHTArm(struct Task *t) +{ + EHTArm *arm = TASK_DATA(t); + VramFree(arm->s.graphics.dest); +} + +void TaskDestructor_EHTHammer(struct Task *t) +{ + EHTHammer *ehtHammer = TASK_DATA(t); + VramFree(ehtHammer->s.graphics.dest); +} diff --git a/sa1/src/game/enemies/boss_2_egg_press.c b/sa1/src/game/enemies/boss_2_egg_press.c new file mode 100644 index 0000000000..328e24886b --- /dev/null +++ b/sa1/src/game/enemies/boss_2_egg_press.c @@ -0,0 +1,844 @@ +#include "global.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" +#include "game/nuts_and_bolts_task.h" +#include "game/save.h" +#include "game/stage/player_controls.h" +#include "game/stage/screen_shake.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct EggPress { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved[2]; + /* 0x4C */ Sprite s2; + /* 0x3C */ Hitbox reserved2[3]; + /* 0x94 */ s32 qUnk94; + /* 0x98 */ s32 qUnk98; + /* 0x9C */ s32 qUnk9C; + /* 0xA0 */ s32 qUnkA0; + /* 0xA4 */ s32 unkA4; + /* 0xA8 */ u16 unkA8; + /* 0xAA */ s16 unkAA; + /* 0xAC */ u16 unkAC; + /* 0xAE */ s8 unkAE; + /* 0xAF */ s8 unkAF; + /* 0xB0 */ s8 unkB0; + /* 0xB1 */ u8 unkB1; + /* 0xB2 */ s16 qUnkB2; +} EggPress; + +extern s16 gUnknown_084ACDA0[]; +extern s16 gUnknown_084ACDAC[]; + +void Task_EggPressMain(void); +void sub_802D748(s16 arg0, s16 arg1); +void sub_802D870(void); +void sub_802D908(void); +void Task_802DC3C(void); +void Task_802DDCC(void); +void Task_802DEFC(void); +void Task_802E130(void); +void Task_802E290(void); +void Task_802E3DC(void); +void Task_802E500(void); +void Task_802E714(void); +void Task_802EA8C(void); +void sub_802E868(void); +void sub_802ECFC(void); +void TaskDestructor_EggPress(struct Task *t); + +static inline void sub_802EF24_inline(void) +{ + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s2 = &boss->s2; + + if ((s2->variant != 0) && (s2->frameFlags & SPRITE_FLAG(ANIM_OVER, 1))) { + s2->variant = 0U; + s2->prevVariant = 0xFF; + } +} + +static inline void sub_802EF60_inline(CamCoord worldX, CamCoord worldY) +{ + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +void sub_802D748(s16 arg0, s16 arg1) +{ + Sprite *s, *s2; + EHit collPlayer; + EHit collPartner; + u8 *regionX; + + EggPress *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s->frameFlags &= ~SPRITE_FLAG_MASK_OBJ_MODE; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (boss->unkAF == 0) { + collPlayer = Coll_Player_Bosses_2_6(&boss->s, arg0, arg1, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = Coll_Player_Bosses_2_6(&boss->s, arg0, arg1, &gPartner); + } else { + collPartner = HIT_NONE; + } + + s2 = &boss->s2; + if ((collPlayer == HIT_ENEMY) || (collPartner == HIT_ENEMY)) { + boss->unkAE++; + boss->unkAF = 0x20; + + if (boss->unkAE == 4) { + boss->unkB0 = 1; + } + + s2->variant = 2; + s2->frameFlags &= ~SPRITE_FLAG(ANIM_OVER, 1); + m4aSongNumStart(SE_BOSS_HIT); + } else if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + s2->variant = 1; + s2->frameFlags &= ~SPRITE_FLAG(ANIM_OVER, 1); + } + } +} + +// TODO: Work out matching without TASK_GET_MEMBER! +void sub_802D870(void) +{ + struct Task *t = gCurTask; + Sprite *s = &TASK_GET_MEMBER(EggPress, t, Sprite, s); + Sprite *s2 = &TASK_GET_MEMBER(EggPress, t, Sprite, s2); + s8 *unkAF = &TASK_GET_MEMBER(EggPress, t, s8, unkAF); + + if (*unkAF != 0) { + if ((--(*unkAF) > 0x10) && !((*unkAF) & 2) && PLAYER_IS_ALIVE) { + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, 2); + gDispCnt |= DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = WINOUT_WINOBJ_ALL | (WINOUT_WIN01_ALL & ~WINOUT_WIN01_CLR); + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + } + DisplaySprite(s); + DisplaySprite(s2); +} + +void sub_802D908(void) +{ + struct Task *t = gCurTask; + Sprite *s = &TASK_GET_MEMBER(EggPress, t, Sprite, s); + Sprite *s2 = &TASK_GET_MEMBER(EggPress, t, Sprite, s2); + s16 var_r0; + + s2->x = s->x; + s2->y = s->y; + if (s->graphics.anim == SA1_ANIM_BOSS_2) { + s8 index = s->dimensions->oamIndex; + index /= 5; + s2->y -= gUnknown_084ACDA0[index]; + } else { + s2->y += 46; + } +} + +void CreateEntity_EggPress(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + Sprite *s; + Sprite *s2; + u16 temp_r4_2; + struct Task *t; + EggPress *boss; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_EggPressMain, sizeof(EggPress), 0x2000U, 0U, TaskDestructor_EggPress); + boss = TASK_DATA(t); + + s = &boss->s; + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + + boss->unkA8 = 0; + boss->unkAC = 0; + boss->unkAA = -8; + boss->unkAF = 0; + boss->unkB0 = 0; + boss->qUnk94 = 0; + boss->unkB1 = 0; + + if (LOADED_SAVE->difficultyLevel != 0) { + boss->unkAE = 2; + } else { + boss->unkAE = 0; + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_2); + s->oamFlags = SPRITE_OAM_ORDER(21); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_2; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s2 = &boss->s2; + s2->x = TO_WORLD_POS(me->x, regionX); + s2->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_2_EGGMAN); + s2->oamFlags = SPRITE_OAM_ORDER(22); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_BOSS_2_EGGMAN; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + +#if PORTABLE && ((240 + 60) < DISPLAY_WIDTH) + // TODO: We need to spawn *something* at the left bound, to prevent both Player and Boss + // from leaving the designated Boss Area if the DISPLAY_WIDTH is too large. + // The Boss is programmed to land on a fixed Y-value, so it "clips through" slopes. + Bosses_SetCamBounds(s->y - (DISPLAY_HEIGHT - 16), s->y + 16, (int)((float)s->x - DISPLAY_WIDTH), s->x); +#else + Bosses_SetCamBounds(s->y - (DISPLAY_HEIGHT - 16), s->y + 16, (int)((float)s->x - (DISPLAY_WIDTH * 1.25f)), s->x); +#endif // PORTABLE + + gMusicManagerState.unk1 = 0x10; +} + +void Task_EggPressMain(void) +{ + CamCoord worldX, worldY; + MapEntity *me; + Sprite *s; + Sprite *s2; + + EggPress *boss = TASK_DATA(gCurTask); + + if (boss->unkAC++ > 120) { + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + + boss->qUnk94 = -Q(60); + boss->qUnk98 = -Q(144); + boss->qUnkA0 = 0; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + gCurTask->main = Task_802DC3C; + gCurTask->main(); + } +} + +void Task_802DC3C(void) +{ + MapEntity *me; + Sprite *s; + Sprite *s2; + CamCoord worldX, worldY; + + EggPress *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + + if (boss->qUnk98 != 0) { + boss->qUnkA0 += Q(32. / 256.); + boss->qUnk98 += boss->qUnkA0; + + if (boss->qUnk98 >= 0) { + boss->qUnk98 = 0; + s->graphics.anim = SA1_ANIM_BOSS_2; + s->variant = 1; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + m4aSongNumStart(SE_IMPACT); + } + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_802D908(); + DisplaySprite(s); + DisplaySprite(s2); + } else { + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_802D908(); + DisplaySprite(s); + DisplaySprite(s2); + + if (s->frameFlags & SPRITE_FLAG(ANIM_OVER, 1)) { + gCurTask->main = Task_802DDCC; + s->graphics.anim = SA1_ANIM_BOSS_2; + boss->s.variant = 0; + boss->s.prevVariant = 0xFF; + boss->unkAC = 120; + } + } +} + +void Task_802DDCC(void) +{ + MapEntity *me; + Sprite *s; + Sprite *s2; + CamCoord worldX, worldY; + + EggPress *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + + if (boss->s2.variant == 0) { + if (--boss->unkAC == 60) { + boss->s2.variant = 1; + boss->s2.prevVariant = 0xFF; + } + + if (boss->unkAC == 0) { + gCurTask->main = Task_802DEFC; + boss->qUnkA0 = 0; + s->graphics.anim = SA1_ANIM_BOSS_2; + boss->s.variant = 1; + boss->s.prevVariant = 0xFF; + s2->graphics.anim = SA1_ANIM_BOSS_2_EGGMAN; + boss->s2.variant = 0; + boss->s2.prevVariant = -1; + } + } else if (s2->frameFlags & SPRITE_FLAG(ANIM_OVER, 1)) { + boss->s2.variant = 0; + boss->s2.prevVariant = -1; + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_802D908(); + DisplaySprite(s); + DisplaySprite(s2); +} + +void Task_802DEFC(void) +{ + Sprite *sprOuter; + Sprite *spr2Outer; + s16 unkAE; + EggPress *boss; + MapEntity *me; + CamCoord worldX, worldY; + + struct Task *t = gCurTask; + boss = TASK_DATA(gCurTask); + sprOuter = &boss->s; + spr2Outer = &boss->s2; + me = boss->base.me; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + sub_802D748(worldX, worldY); + if (boss->unkAE > 7) { + sub_802E868(); + } else { + sub_802EF60_inline(worldX, worldY); + sub_802EF24_inline(); + UpdateSpriteAnimation(sprOuter); + UpdateSpriteAnimation(spr2Outer); + sub_802D908(); + sub_802D870(); + + if (sprOuter->frameFlags & SPRITE_FLAG(ANIM_OVER, 1)) { + if ((boss->unkB0 & 0x3) == 1) { + boss->qUnk9C = 0; + boss->qUnkA0 = -Q(10); + gCurTask->main = Task_802E500; + } else { + boss->qUnk9C = (gPlayer.qWorldX - Q(worldX)) / 72; + boss->qUnkA0 = -Q(4.5); + boss->unkA4 = 0x20; + boss->qUnk9C = (((gUnknown_084ACDAC[boss->unkAE]) * boss->qUnk9C) / 10); + boss->qUnkA0 = (((gUnknown_084ACDAC[boss->unkAE]) * boss->qUnkA0) / 10); + unkAE = gUnknown_084ACDAC[boss->unkAE]; + boss->unkA4 = ((unkAE * (unkAE * boss->unkA4)) / 100); + + if (boss->qUnk9C < 0) { + sprOuter->frameFlags &= ~SPRITE_FLAG(X_FLIP, 1); + spr2Outer->frameFlags &= ~SPRITE_FLAG(X_FLIP, 1); + } else { + sprOuter->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + spr2Outer->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + + gCurTask->main = Task_802E130; + } + + if (boss->unkB0 != 0) { + boss->unkB0++; + } + } + } +} + +void Task_802E130(void) +{ + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + boss->qUnkA0 += boss->unkA4; + boss->qUnk94 += boss->qUnk9C; + boss->qUnk98 += boss->qUnkA0; + if (boss->qUnk98 >= 0) { + boss->qUnk98 = 0; + boss->qUnk9C = 0; + boss->qUnkA0 = 0; + boss->s.variant = 1; + boss->s.prevVariant = 0xFF; + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + gCurTask->main = Task_802E290; + m4aSongNumStart(0x91U); + } + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + sub_802D748(worldX, worldY); + if (boss->unkAE > 7) { + sub_802E868(); + } else { + sub_802EF60_inline(worldX, worldY); + sub_802EF24_inline(); + sub_802D908(); + sub_802D870(); + } +} + +void Task_802E290(void) +{ + CamCoord worldX, worldY; + + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + sub_802D748(worldX, worldY); + if (boss->unkAE > 7) { + sub_802E868(); + } else { + sub_802EF60_inline(worldX, worldY); + sub_802EF24_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + sub_802D908(); + sub_802D870(); + + if (s->frameFlags & SPRITE_FLAG(ANIM_OVER, 1)) { + s32 val; + s8 index; + s->variant = 0; + s->prevVariant = -1; +#ifndef NON_MATCHING + boss->unkAC = 30; +#endif + val = 300; + boss->unkAC = (val / gUnknown_084ACDAC[boss->unkAE]); + gCurTask->main = Task_802E3DC; + } + } +} + +void Task_802E3DC(void) +{ + CamCoord worldX, worldY; + + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + sub_802D748(worldX, worldY); + if (boss->unkAE > 7) { + sub_802E868(); + } else { + sub_802EF60_inline(worldX, worldY); + sub_802EF24_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + sub_802D908(); + sub_802D870(); + + if (--boss->unkAC == 0) { + s32 val; + s8 index; + s->variant = 1; + s->prevVariant = -1; + gCurTask->main = Task_802DEFC; + } + } +} + +void Task_802E500(void) +{ + MapEntity *me; + Sprite *s2; + CamCoord worldX, worldY; + + EggPress *boss = TASK_DATA(gCurTask); + s2 = &boss->s2; + me = boss->base.me; + boss->qUnkA0 += Q(32. / 256.); + boss->qUnk98 += boss->qUnkA0; + + if (boss->qUnk98 < -Q(200)) { + boss->qUnk94 = gPlayer.qWorldX - Q(TO_WORLD_POS(boss->base.meX, boss->base.regionX)); + } + + if (boss->qUnk98 >= 0) { + boss->qUnk98 = 0; + boss->qUnkA0 = 0; + boss->unkAC = 60; + boss->s.variant = 2; + boss->s.prevVariant = 0xFF; + gCurTask->main = Task_802E714; + m4aSongNumStart(SE_IMPACT); + CreateScreenShake(0x800U, 0x40U, 0x100U, -1U, 0x80); + + if (!(gPlayer.moveState & MOVESTATE_IN_AIR) || (gPlayer.charState == CHARSTATE_65) + || ((gPlayer.moveState & MOVESTATE_4000000) && ((gPlayer.anim != SA1_CHAR_ANIM_AMY_LEAP) || (gPlayer.variant != 0)))) { + Coll_DamagePlayer(&gPlayer); + s2->variant = 1; + s2->frameFlags = s2->frameFlags & ~SPRITE_FLAG(ANIM_OVER, 1); + } + if ((gNumSingleplayerCharacters == 2) && !(gPartner.moveState & MOVESTATE_IN_AIR)) { + Coll_DamagePlayer(&gPlayer); + s2->variant = 1; + s2->frameFlags &= ~SPRITE_FLAG(ANIM_OVER, 1); + } + } + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + sub_802D748(worldX, worldY); + if (boss->unkAE > 7) { + sub_802E868(); + } else { + sub_802EF60_inline(worldX, worldY); + sub_802EF24_inline(); + sub_802D908(); + sub_802D870(); + } +} + +void Task_802E714(void) +{ + CamCoord worldX, worldY; + + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + sub_802D748(worldX, worldY); + if (boss->unkAE > 7) { + sub_802E868(); + } else { + sub_802EF60_inline(worldX, worldY); + sub_802EF24_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + sub_802D908(); + sub_802D870(); + + if (s->variant == 2) { + if (s->frameFlags & SPRITE_FLAG(ANIM_OVER, 1)) { + s->variant = 0; + s->prevVariant = -1; + } + } else if (--boss->unkAC == 0) { + s32 val; + s8 index; + s->graphics.anim = SA1_ANIM_BOSS_2; + s->variant = 1; + s->prevVariant = -1; + gCurTask->main = Task_802DEFC; + } + } +} + +void sub_802E868(void) +{ + Strc_sub_80168F0 *tSub0; + + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + s = &boss->s; + boss->qUnk98 -= Q(48); + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + s2->variant = 2; + boss->qUnkB2 = -Q(2); + m4aSongNumStart(SE_EXPLOSION); + boss->unkAC = 0; + s->graphics.anim = SA1_ANIM_BOSS_2_NO_SPRING; + s->variant = 0; + s->prevVariant = 0xFF; + + { + tSub0 = TASK_DATA(sub_80168F0(worldX, worldY, 8, SA1_ANIM_BOSS_2_SPRING, 0)); + tSub0->qUnk46 = -Q(2); + tSub0->unk48 = 0; + tSub0->unk42 = 0x80; + + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + tSub0->transform.qScaleX = -Q(1); + tSub0->qUnk44 = +Q(4); + } else { + tSub0->qUnk44 = -Q(4); + } + tSub0->unk40 = 60; + } + + { + tSub0 = TASK_DATA(sub_80168F0(worldX, worldY + 32, 8, SA1_ANIM_BOSS_2_BASE, 0)); + tSub0->qUnk46 = -Q(2); + tSub0->unk48 = 0; + tSub0->unk42 = 0x180; + + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + tSub0->transform.qScaleX = -Q(1); + tSub0->qUnk44 = +Q(4); + } else { + tSub0->qUnk44 = -Q(4); + } + tSub0->unk40 = 60; + } + + gCamera.minX = gCamera.x; + gCamera.maxX = gCamera.x + DISPLAY_WIDTH; + + INCREMENT_SCORE_A(1000); + + Task_802EA8C(); + gCurTask->main = Task_802EA8C; +} + +void Task_802EA8C(void) +{ + EggPress *boss = TASK_DATA(gCurTask); + SpriteBase *base = &boss->base; + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + s32 res; + + boss->qUnkB2 += 0x28; + boss->qUnk98 += boss->qUnkB2; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + res = sa2__sub_801F100(worldY + 0x10, worldX, 1, 8, &sa2__sub_801EC3C); + if (res < 0) { + boss->qUnk98 += Q(res); + boss->qUnkB2 = (boss->qUnkB2 >> 2) - boss->qUnkB2; + if (boss->qUnkB2 > -Q(1)) { + boss->qUnkB2 = 0U; + gCurTask->main = sub_802ECFC; + } + } + + s->frameFlags &= ~0x180; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + ++boss->unkAC; + if ((boss->unkAC & 7) == 0) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(17); + bolts->qUnk3E = Q(40. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY - ((rnd & 0x3F0000) >> 0x10))); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + sub_802D908(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void sub_802ECFC(void) +{ + EggPress *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk94); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk98); + + if (boss->unkAC++ > 240) { + CreatePostBossEggMobile(worldX, worldY - 4); + CreateBossCapsule(worldX, worldY); + gMusicManagerState.unk1 = 0x30; + TaskDestroy(gCurTask); + return; + } + + if ((boss->unkAC & 7) == 0) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(17); + bolts->qUnk3E = Q(40. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY - ((rnd & 0x3F0000) >> 0x10))); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + sub_802D908(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void TaskDestructor_EggPress(struct Task *t) +{ + EggPress *boss = TASK_DATA(t); + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void sub_802EF24(void) { sub_802EF24_inline(); } + +void sub_802EF60(CamCoord worldX, CamCoord worldY) { sub_802EF60_inline(worldX, worldY); } diff --git a/sa1/src/game/enemies/boss_3_egg_ball.c b/sa1/src/game/enemies/boss_3_egg_ball.c new file mode 100644 index 0000000000..4f495537b9 --- /dev/null +++ b/sa1/src/game/enemies/boss_3_egg_ball.c @@ -0,0 +1,1000 @@ +#include "global.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" +#include "game/nuts_and_bolts_task.h" +#include "game/save.h" +#include "game/stage/player_controls.h" +#include "game/stage/screen_shake.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct EggBall { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Sprite s2; + /* 0x6C */ struct Task *strc6C; // -> EggBall_44 + /* 0x70 */ s32 qUnk70; + /* 0x74 */ s32 qUnk74; + /* 0x78 */ s32 qUnk78; + /* 0x7C */ s32 qUnk7C; + /* 0x80 */ u8 filler80[0x4]; + /* 0x84 */ s16 unk84; + /* 0x86 */ s16 unk86; + /* 0x88 */ u16 unk88; + /* 0x8A */ s8 unk8A; + /* 0x8B */ s8 unk8B; + /* 0x8C */ u8 unk8C; + /* 0x8D */ u8 unk8D; + /* 0x8E */ u8 unk8E; + /* 0x90 */ s16 qUnk90; + /* 0x94 */ void *vram94; + /* 0x98 */ void *vram98; +} EggBall; + +typedef struct EggBall_44 { + /* 0x00 */ Sprite s; + /* 0x30 */ s32 qUnk30; + /* 0x34 */ s32 qUnk34; + /* 0x38 */ s32 qUnk38; + /* 0x3C */ s32 qUnk3C; + /* 0x42 */ u16 unk40; + /* 0x42 */ u8 unk42; +} EggBall_44; + +typedef struct EggBall_Pipe { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + s16 unk3C; + s16 unk3E; + s16 unk40; + s16 unk42; + u8 unk44; + u8 delay; + EggBall *boss; +} EggBall_Pipe; + +void Task_PipeInitialDelay(void); +void Task_EggBallMain(void); +void sub_802EF94(CamCoord worldX, CamCoord worldY); +void Task_802F0D0(void); +void Task_802F56C(void); +void Task_802F644(void); +void Task_802F804(void); +void Task_802F9F8(void); +void Task_802FE88(void); +void sub_802FB2C(void); +void Task_802FC14(void); +void Task_8030120(void); +void Task_803020C(void); +void Task_8030364(void); +void Task_8030414(void); +void Task_PipeExtend(void); +void TaskDestructor_EggBall(struct Task *t); +void TaskDestructor_EggBall_44(struct Task *t); +void TaskDestructor_8030754(struct Task *t); + +extern s16 gUnknown_084ACDC0[9]; +extern u16 gUnknown_084ACDD2[8][2][2]; +extern s32 gUnknown_084ACE24[8][4]; +extern u8 gUnknown_084ACEA4[2][2]; +extern s8 gUnknown_084ACE12[8][2]; + +static inline void sub_8030778_inline(CamCoord worldX, CamCoord worldY) +{ + EggBall_44 *boss_44 = TASK_DATA(gCurTask); + Sprite *s = &boss_44->s; + EHit collPlayer, collPartner; + + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + + if ((collPlayer == 2) || (collPartner == 2)) { + EggBall *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + + s2->variant = 1; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} + +static inline void sub_8030814_inline() +{ + EggBall *boss = TASK_DATA(gCurTask); + Sprite *s2 = &boss->s2; + + if ((s2->variant != 0) && (s2->frameFlags & 0x4000)) { + s2->variant = 0; + s2->prevVariant = -1; + } +} + +static inline void sub_8030850_inline() +{ + EggBall *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + s2->x = s->x; + s2->y = s->y; +} + +static inline void sub_8030870_inline(CamCoord worldX, CamCoord worldY) +{ + EggBall *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +void sub_802EF94(CamCoord worldX, CamCoord worldY) +{ + Sprite *s; + Sprite *s2; + s16 regionX; + EHit collPlayer; + EHit collPartner; + + EggBall *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s->frameFlags &= ~SPRITE_FLAG_MASK_OBJ_MODE; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (boss->unk8B == 0) { + collPlayer = Coll_Player_Boss(s, worldX, worldY, &gPlayer); + collPartner = 0; + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = Coll_Player_Boss(s, worldX, worldY, &gPartner); + } + + s2 = &boss->s2; + if ((collPlayer == 1) || (collPartner == 1)) { + boss->unk8A++; + boss->unk8B = 32; + + if (boss->unk8A == 4) { + boss->unk8C = 1; + } + + boss->s2.variant = 2; + s2->frameFlags &= ~SPRITE_FLAG_MASK_ANIM_OVER; + m4aSongNumStart(SE_BOSS_HIT); + } else if ((collPlayer == 2) || (collPartner == 2)) { + boss->s2.variant = 1; + s2->frameFlags &= ~SPRITE_FLAG_MASK_ANIM_OVER; + } + } +} + +void Task_802F0D0(void) +{ + EggBall *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if (boss->unk8B != 0) { + if ((--boss->unk8B > 16) && !(boss->unk8B & 2) && PLAYER_IS_ALIVE) { + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, 2); + gDispCnt |= DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = WINOUT_WINOBJ_ALL | (WINOUT_WIN01_ALL & ~WINOUT_WIN01_CLR); + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + } + + DisplaySprite(s); + DisplaySprite(s2); +} + +void CreateEntity_EggBall(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + EggBall *boss; + SpriteBase *base; + Sprite *s0; + Sprite *s; + Sprite *s2; + u8 i; + u16 unk3C, unk3E; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + gPseudoRandom = gFrameCount; + t = TaskCreate(Task_EggBallMain, sizeof(EggBall), 0x2100U, 0U, TaskDestructor_EggBall); + boss = TASK_DATA(t); + s0 = &boss->s; + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + boss->unk84 = 0; + boss->unk88 = 0; + boss->unk86 = -8; + boss->unk8B = 0; + boss->unk8C = 0; + boss->qUnk70 = 0; + boss->unk8D = 0; + boss->unk8E = 0; + + if (LOADED_SAVE->difficultyLevel != DIFFICULTY_NORMAL) { + boss->unk8A = 2; + } else { + boss->unk8A = 0; + } + + s = s0; + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_3_MOBILE); + s->oamFlags = SPRITE_OAM_ORDER(21); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_3_MOBILE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s = &boss->s2; + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_3_EGGMAN); + s->oamFlags = SPRITE_OAM_ORDER(22); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_3_EGGMAN; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + for (i = 0; i < 8; i++) { + EggBall_Pipe *strc; + Sprite *s; + t = TaskCreate(Task_PipeInitialDelay, sizeof(EggBall_Pipe), 0x2200U, 0U, TaskDestructor_8030754); + strc = TASK_DATA(t); + strc->unk44 = i; + strc->delay = TIME(0, 1.5); + strc->unk3C = unk3C = gUnknown_084ACDD2[i][0][0]; + strc->unk3E = unk3E = gUnknown_084ACDD2[i][0][1]; + strc->base.regionX = boss->base.regionX; + strc->base.regionY = boss->base.regionY; + strc->base.me = boss->base.me; + strc->base.meX = boss->base.meX; + strc->base.id = boss->base.id; + strc->boss = boss; + + s = &strc->s; + s->x = TO_WORLD_POS(me->x, regionX) + unk3C; + s->y = TO_WORLD_POS(me->y, regionY) + unk3E; + + if ((i & -3) == 0) { + void *vram = ALLOC_TILES(SA1_ANIM_EGG_BALL_PIPES); + s->graphics.dest = vram; + if (i == 0) { + boss->vram94 = vram; + } else { + boss->vram98 = vram; + } + } else { + if (!(2 & i)) { + s->graphics.dest = boss->vram94; + } else { + s->graphics.dest = boss->vram98; + } + } + + if (2 & i) { + s->oamFlags = SPRITE_OAM_ORDER(18); + } else { + s->oamFlags = SPRITE_OAM_ORDER(14); + } + + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_EGG_BALL_PIPES; + s->variant = gUnknown_084ACDD2[i][1][0]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = (s16)gUnknown_084ACDD2[i][1][1] | 0x2000; + } + + Bosses_SetCamBounds(s0->y - (DISPLAY_HEIGHT + 24), s0->y + 16, s0->x - (DISPLAY_WIDTH + 40), s0->x); + gMusicManagerState.unk1 = 0x10; +} + +void Task_EggBallMain(void) +{ + EggBall *boss = TASK_DATA(gCurTask); + + if (boss->unk88++ > 120) { + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + boss->qUnk70 = -Q(85); + boss->qUnk74 = 0; + boss->qUnk7C = -Q(1); + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk70); + worldY = TO_WORLD_POS(me->y, boss->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + + boss->unk88 = 60; + gCurTask->main = Task_802F56C; + gCurTask->main(); + } +} + +void Task_802F56C(void) +{ + struct Task *t = gCurTask; + EggBall *boss = TASK_DATA(t); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + + if (boss->qUnk74 <= -Q(80)) { + if (--boss->unk88 == 0) { + s2->variant = 1; + boss->unk88 = 60; + gCurTask->main = Task_802F644; + } + } else { + boss->qUnk74 -= Q(1); + } + + { + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk70); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk74); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + sub_8030850_inline(); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + } +} + +void Task_802F644() +{ + MapEntity *me; + Sprite *s; + Sprite *s2; + struct Task *t; + CamCoord worldX, worldY; + + EggBall *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + + if (boss->s2.variant == 0) { + if (boss->unk88 == 0) { + boss->qUnk74 -= Q(1); + if (boss->qUnk74 <= -Q(208)) { + EggBall_44 *strc44; + Sprite *spr44; + + boss->unk88 = 60; + gCurTask->main = Task_802F804; + + t = TaskCreate(Task_8030120, sizeof(EggBall_44), 0x2800U, 0U, TaskDestructor_EggBall_44); + strc44 = TASK_DATA(t); + spr44 = &strc44->s; + + strc44->qUnk30 = boss->qUnk70; + strc44->qUnk34 = boss->qUnk74; + strc44->qUnk38 = 0; + strc44->qUnk3C = 0; + strc44->unk42 = 0; + boss->strc6C = t; + + spr44->x = 0; + spr44->y = 0; + spr44->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_3_SPIKE_BALL); + spr44->oamFlags = SPRITE_OAM_ORDER(23); + spr44->graphics.size = 0; + spr44->graphics.anim = SA1_ANIM_BOSS_3_SPIKE_BALL; + spr44->variant = 0; + spr44->animCursor = 0; + spr44->qAnimDelay = 0; + spr44->prevVariant = -1; + spr44->animSpeed = SPRITE_ANIM_SPEED(1.0); + spr44->palId = 0; + spr44->hitboxes[0].index = -1; + spr44->frameFlags = 0x2000; + } + } else { + boss->unk88--; + } + } + + if ((s2->variant == 1) && (s2->frameFlags & 0x4000)) { + boss->unk88 = 60; + s2->variant = 0; + } + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk70); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk74); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_8030850_inline(); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void Task_802F804(void) +{ + Sprite *s2; + MapEntity *me; + s32 strc; + Sprite *s; + CamCoord worldX, worldY; + u32 var_r0; + + EggBall *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + if (--boss->unk88 == 0) { + EggBall_44 *strc = TASK_DATA(boss->strc6C); + s32 a; + s32 unk8E = PseudoRandom32() & 0x7; + boss->unk8E = unk8E; + a = gUnknown_084ACEA4[unk8E][0]; + boss->qUnk70 = gUnknown_084ACE24[a][0]; + boss->qUnk74 = gUnknown_084ACE24[a][1]; + boss->qUnk78 = (gUnknown_084ACE24[a][2] * gUnknown_084ACDC0[boss->unk8A]) / 10; + boss->qUnk7C = (gUnknown_084ACE24[a][3] * gUnknown_084ACDC0[boss->unk8A]) / 10; + + if (boss->qUnk70 >= -Q(140)) { + s->frameFlags &= ~0x400; + s2->frameFlags &= ~0x400; + } else { + s->frameFlags |= 0x400; + s2->frameFlags |= 0x400; + } + strc->unk42 = 0xFF; + gCurTask->main = Task_802F9F8; + } + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk70); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk74); + boss->unk8B = 0; + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_8030870_inline(worldX, worldY); + sub_8030814_inline(); + + sub_8030850_inline(); +} + +void Task_802F9F8(void) +{ + Sprite *s2; + MapEntity *me; + s32 strc; + Sprite *s; + CamCoord worldX, worldY; + u32 var_r0; + + EggBall *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + + boss->qUnk70 += boss->qUnk78; + boss->qUnk74 += boss->qUnk7C; + + if ((((u32)boss->qUnk70 + Q(312) > Q(344)) || (boss->qUnk74 < -Q(208))) || (boss->qUnk74 > Q(40))) { + EggBall_44 *strc = TASK_DATA(boss->strc6C); + boss->unk88 = 60; + gCurTask->main = Task_802F804; + } + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk70); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk74); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_802EF94(worldX, worldY); + + if (boss->unk8A >= 8) { + sub_802FB2C(); + } else { + sub_8030870_inline(worldX, worldY); + sub_8030814_inline(); + + sub_8030850_inline(); + + Task_802F0D0(); + } +} + +void sub_802FB2C() +{ + u16 minY, maxY; + + EggBall *boss = TASK_DATA(gCurTask); + Sprite *s2 = &boss->s2; + + s2->variant = 2; + boss->qUnk90 = -0x200; + m4aSongNumStart(SE_EXPLOSION); + + boss->strc6C->main = Task_8030364; + + TasksDestroyInPriorityRange(0x2010U, 0x2011U); + + gPlayer.moveState &= ~8; + gPartner.moveState &= ~8; + + gCamera.minX = gCamera.x; + gCamera.maxX = gCamera.x + DISPLAY_WIDTH; + + minY = gCamera.minY; + maxY = gCamera.maxY; + CreatePreBossCameraPan(gCamera.minY + 40, gCamera.maxY); + gCamera.minY = minY; + gCamera.maxY = maxY; + + INCREMENT_SCORE_A(1000); + + Task_802FC14(); + gCurTask->main = Task_802FC14; +} + +void Task_802FC14(void) +{ + s32 res; + + EggBall *boss = TASK_DATA(gCurTask); + SpriteBase *base = &boss->base; + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + boss->qUnk90 += 0x28; + boss->qUnk74 += boss->qUnk90; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk70); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk74); + + res = sa2__sub_801F100(worldY + 0x18, worldX, 1, 8, &sa2__sub_801EC3C); + if (res < 0) { + boss->qUnk74 += Q(res); + boss->qUnk90 = (boss->qUnk90 >> 2) - boss->qUnk90; + if (boss->qUnk90 > -Q(1)) { + boss->qUnk90 = 0U; + gCurTask->main = Task_802FE88; + } + } + + s->frameFlags &= ~0x180; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + boss->unk88++; + if ((boss->unk88 & 0x7) == 0) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY + 32); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(17); + bolts->qUnk3E = Q(40. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_8030850_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void Task_802FE88(void) +{ + EggBall *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk70); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk74); + + if (boss->unk88++ > 240) { + Strc_sub_80168F0 *strc; + CreatePostBossEggMobile(worldX, worldY - 8); + CreateBossCapsule(worldX, worldY); + gMusicManagerState.unk1 = 0x30; + + strc = TASK_DATA(sub_80168F0(worldX, worldY, 0x10, SA1_ANIM_BOSS_3_STAR_DISC, 0)); + + strc->qUnk46 = -Q(2); + strc->unk48 = +Q(0); + strc->unk42 = 0x80; + + if (s->frameFlags & 0x400) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = +Q(4); + } else { + strc->qUnk44 = -Q(4); + } + strc->unk40 = 60; + + TaskDestroy(gCurTask); + return; + } + + if ((boss->unk88 & 7) == 0) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY + 32); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(17); + bolts->qUnk3E = Q(40. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + sub_8030850_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void Task_8030120(void) +{ + Sprite *s; + CamCoord worldX, worldY; + + EggBall_44 *boss_44 = TASK_DATA(gCurTask); + EggBall *boss = TASK_DATA(TASK_PARENT(gCurTask)); + + s = &boss_44->s; + if (boss_44->unk42 != 0) { + s32 a; + a = gUnknown_084ACEA4[boss->unk8E & 0x7][1]; + boss_44->qUnk30 = gUnknown_084ACE24[a][0]; + boss_44->qUnk34 = gUnknown_084ACE24[a][1]; + boss_44->qUnk38 = (gUnknown_084ACE24[a][2] * gUnknown_084ACDC0[boss->unk8A]) / 10; + boss_44->qUnk3C = (gUnknown_084ACE24[a][3] * gUnknown_084ACDC0[boss->unk8A]) / 10; + + if (boss_44->qUnk30 >= -Q(140)) { + s->frameFlags &= ~0x400; + } else { + s->frameFlags |= 0x400; + } + + boss_44->unk42 = 0; + gCurTask->main = Task_803020C; + } +} + +void Task_803020C(void) +{ + s32 collPlayer; + s32 collPartner; + + Sprite *s; + CamCoord worldX, worldY; + EggBall_44 *boss_44 = TASK_DATA(gCurTask); + EggBall *boss = TASK_DATA(TASK_PARENT(gCurTask)); + EggBall_44 *boss_44_r4 = boss_44; + + MapEntity *me = boss->base.me; + boss_44_r4->qUnk30 += boss_44_r4->qUnk38; + boss_44_r4->qUnk34 += boss_44_r4->qUnk3C; + + if ((((u32)boss_44->qUnk30 + Q(312) > Q(344)) || (boss_44->qUnk34 < -Q(208))) || (boss_44->qUnk34 > Q(40))) { + gCurTask->main = Task_8030120; + } + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss_44->qUnk30); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss_44->qUnk34); + UpdateSpriteAnimation(&boss_44_r4->s); + + sub_8030778_inline(worldX, worldY); + + boss_44_r4->s.x = worldX - gCamera.x; + boss_44_r4->s.y = worldY - gCamera.y; + DisplaySprite(&boss_44_r4->s); +} + +void Task_8030364(void) +{ + EggBall_44 *boss_44 = TASK_DATA(gCurTask); + Sprite *s = &boss_44->s; + EggBall *boss = TASK_DATA(TASK_PARENT(gCurTask)); + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss_44->qUnk30); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss_44->qUnk34); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (worldX < gCamera.x + DISPLAY_CENTER_X) { + boss_44->qUnk38 = +Q(2); + } else { + boss_44->qUnk38 = -Q(2); + } + + if (boss_44->qUnk3C == 0) { + boss_44->qUnk3C = -Q(6); + } else if (boss_44->qUnk3C < 0) { + boss_44->qUnk3C += -Q(3); + } else { + boss_44->qUnk3C += +Q(3); + } + + boss_44->unk40 = 0; + + gCurTask->main = Task_8030414; + gCurTask->main(); +} + +void Task_8030414(void) +{ + EggBall_44 *boss_44 = TASK_DATA(gCurTask); + Sprite *s = &boss_44->s; + EggBall *boss = TASK_DATA(TASK_PARENT(gCurTask)); + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + if (boss_44->unk40++ > 0xB4) { + TaskDestroy(gCurTask); + return; + } + + boss_44->qUnk3C += Q(40. / 256.); + boss_44->qUnk30 += boss_44->qUnk38; + boss_44->qUnk34 += boss_44->qUnk3C; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss_44->qUnk30); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss_44->qUnk34); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (boss_44->qUnk3C > 0) { + s32 res = sa2__sub_801F100(worldY + 0x18, worldX, 1, 8, &sa2__sub_801EC3C); + + if (res < 0) { + boss_44->qUnk34 += Q(res); + boss_44->qUnk3C = (boss_44->qUnk3C >> 2) - boss_44->qUnk3C; + } + } + + if ((boss_44->unk40 & 0x7) == 0) { + s32 rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_PipeInitialDelay(void) +{ + EggBall_Pipe *pipe = TASK_DATA(gCurTask); + + if (--pipe->delay == 0) { + pipe->unk40 = gUnknown_084ACE12[pipe->unk44][0]; + pipe->unk42 = gUnknown_084ACE12[pipe->unk44][1]; + gCurTask->main = Task_PipeExtend; + } +} + +void Task_PipeExtend() +{ + Sprite *s; + CamCoord worldX, worldY; + s16 temp_r0; + s16 temp_r1_2; + MapEntity *me; + + EggBall_Pipe *pipe = TASK_DATA(gCurTask); + EggBall *boss = pipe->boss; + s = &pipe->s; + me = pipe->base.me; + + if (boss->unk8A > 7) { + temp_r0 = gUnknown_084ACE12[pipe->unk44][0]; + temp_r1_2 = gUnknown_084ACE12[pipe->unk44][1]; + pipe->unk40 += temp_r0 >> 4; + pipe->unk42 += (temp_r1_2 >> 4); + if ((pipe->unk40 == temp_r0) && (pipe->unk42 == (s16)temp_r1_2)) { + TaskDestroy(gCurTask); + return; + } + } else { + if (pipe->unk40 < 0) { + pipe->unk40++; + } + if (pipe->unk40 > 0) { + pipe->unk40--; + } + + if (pipe->unk42 < 0) { + pipe->unk42++; + } + if (pipe->unk42 > 0) { + pipe->unk42--; + } + } + + worldX = TO_WORLD_POS(pipe->base.meX, pipe->base.regionX) + pipe->unk3C + pipe->unk40; + worldY = TO_WORLD_POS(me->y, pipe->base.regionY) + pipe->unk3E + pipe->unk42; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + if (!(6 & pipe->unk44)) { + sub_80096B0(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + sub_80096B0(s, worldX, worldY, &gPartner); + } + } + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_EggBall(struct Task *t) +{ + EggBall *boss = TASK_DATA(t); + + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void TaskDestructor_EggBall_44(struct Task *t) +{ + EggBall_44 *boss_44 = TASK_DATA(t); + + VramFree(boss_44->s.graphics.dest); +} + +void TaskDestructor_8030754(struct Task *t) +{ + EggBall_Pipe *pipe = TASK_DATA(t); + + if ((pipe->unk44 & -3) == 0) { + VramFree(pipe->s.graphics.dest); + } +} + +// TODO: Match using sub_8030778_inline +void sub_8030778(CamCoord worldX, CamCoord worldY) +{ + EggBall_44 *boss_44 = TASK_DATA(gCurTask); + Sprite *s = &boss_44->s; + EHit collPlayer, collPartner; + + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + + if ((collPlayer == 2) || (collPartner == 2)) { + EggBall *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + + s2->variant = 1; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} + +// Same as sub_802EF24 in Boss 2 +void sub_8030814() { sub_8030814_inline(); } + +void sub_8030850() { sub_8030850_inline(); } + +void sub_8030870(CamCoord worldX, CamCoord worldY) { sub_8030870_inline(worldX, worldY); } + +void sub_80308A4(CamCoord worldX, CamCoord worldY); diff --git a/sa1/src/game/enemies/boss_4_egg_spider.c b/sa1/src/game/enemies/boss_4_egg_spider.c new file mode 100644 index 0000000000..c7278b2cf4 --- /dev/null +++ b/sa1/src/game/enemies/boss_4_egg_spider.c @@ -0,0 +1,851 @@ +#include "global.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" +#include "game/nuts_and_bolts_task.h" +#include "game/save.h" +#include "game/stage/player_controls.h" +#include "game/stage/rings_scatter.h" +#include "game/stage/screen_shake.h" +#include "game/stage/terrain_collision.h" +#include "game/water_effects.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "game/stage/underwater_effects.h" + +typedef struct EggSpider { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Sprite s2; + /* 0x6C */ s32 qUnk6C; + /* 0x70 */ s32 qUnk70; + /* 0x74 */ s32 unk74; + /* 0x78 */ s32 unk78; + /* 0x78 */ s32 unk7C; + /* 0x80 */ s32 unk80; + /* 0x84 */ u16 unk84; + /* 0x86 */ s8 unk86; + /* 0x86 */ s8 unk87; + /* 0x88 */ s16 qUnk88; + /* 0x8A */ u16 unk8A; + /* 0x8A */ u8 unk8C; +} EggSpider; /* 0x90 */ + +typedef struct IciclePlatform { + /* 0x0C */ Sprite s; + /* 0x30 */ u8 filler30[0x14]; + /* 0x44 */ CamCoord worldX; + /* 0x46 */ CamCoord worldY; + /* 0x48 */ u8 filler48[4]; + /* 0x4C */ s32 unk4C; + /* 0x50 */ s32 unk50; + /* 0x54 */ s32 unk54; + /* 0x58 */ s32 unk58; + /* 0x30 */ u8 filler5C[0xC]; +} IciclePlatform; /* 0x68 */ + +void Task_EggSpiderInit(void); +void sub_80308A4(CamCoord worldX, CamCoord worldY); +void sub_80309CC(void); +void sub_8030EE4(void); +void sub_80311D4(void); +void Task_8031480(void); +void sub_803170C(void); +void CreateIciclePlatform(EggSpider *boss); +void sub_8031AB4(void); +void TaskDestructor_8031CB4(struct Task *t); + +extern s16 gUnknown_084ACEB4[]; +extern s16 gUnknown_084ACED8[]; +extern s16 gUnknown_084ACEC6[]; + +static inline void sub_8031CD0_inline(void) +{ + EggSpider *boss = TASK_DATA(gCurTask); + Sprite *s2 = &boss->s2; + + if ((s2->variant != 0) && (s2->frameFlags & SPRITE_FLAG(ANIM_OVER, 1))) { + s2->variant = 0U; + s2->prevVariant = 0xFF; + } +} + +static inline void sub_8031D0C_inline() +{ + EggSpider *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + s2->x = s->x; + s2->y = s->y; + + if (s->graphics.anim == SA1_ANIM_BOSS_4) { + const SpriteOffset *dimensions = s->dimensions; + + s2->y -= gUnknown_084ACED8[(s8)dimensions->oamIndex]; + } +} + +static inline void sub_8031D54_inline(CamCoord worldX, CamCoord worldY) +{ + EggSpider *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +void sub_80308A4(CamCoord worldX, CamCoord worldY) +{ + Sprite *s; + Sprite *s2; + EHit collPlayer; + EHit collPartner; + EggSpider *boss; + + boss = TASK_DATA(gCurTask); + s = &boss->s; + s->frameFlags &= ~0x180; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[5] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (boss->unk87 == 0) { + collPlayer = Coll_Player_Boss(s, worldX, worldY, &gPlayer); + collPartner = 0; + + if (gNumSingleplayerCharacters == 2) { + collPartner = Coll_Player_Boss(s, worldX, worldY, &gPartner); + } + + s2 = &boss->s2; + if ((collPlayer == 1) || (collPartner == 1)) { + boss->unk86++; + boss->unk87 = 120; + s2->variant = 2; + s2->frameFlags &= ~0x4000; + m4aSongNumStart(SE_BOSS_HIT); + } else if ((collPlayer == 2) || (collPartner == 2)) { + s2->variant = 1; + s2->frameFlags &= ~0x4000; + } + } +} + +void sub_80309CC(void) +{ + EggSpider *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if (boss->unk87 != 0 && --boss->unk87 > 0) { + if (!(boss->unk87 & 2)) { + if (PLAYER_IS_ALIVE) { + s->frameFlags |= 0x100; + gDispCnt |= DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = WINOUT_WINOBJ_ALL | (WINOUT_WIN01_ALL & ~WINOUT_WIN01_CLR); + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + } + } + + DisplaySprite(s); + DisplaySprite(s2); +} + +void CreateEntity_EggSpider(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + EggSpider *boss; + Sprite *s2; + Sprite *s; + s32 temp_r0_3; + s32 temp_r1_2; + s32 temp_r4; + u16 temp_r1_4; + u8 *temp_r0; + u8 *temp_r0_2; + u8 *temp_r1_3; + struct Task *t; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_EggSpiderInit, sizeof(EggSpider), 0x2000U, 0U, TaskDestructor_8031CB4); + TaskCreate(sub_804C40C, 0U, 0xFFFDU, 0U, NULL); + + boss = TASK_DATA(t); + s = &boss->s; + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + boss->unk84 = 120; + boss->unk87 = 0; + boss->unk8A = 0; + boss->unk8C = 0; + boss->qUnk6C = Q(48); + boss->qUnk70 = Q(16); + boss->unk74 = 0; + boss->unk78 = 0; + + if (LOADED_SAVE->difficultyLevel != DIFFICULTY_NORMAL) { + boss->unk86 = 2; + } else { + boss->unk86 = 0; + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + s->graphics.dest = VramMalloc(64); + s->oamFlags = SPRITE_OAM_ORDER(22); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_4; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s2 = &boss->s2; + s2->x = TO_WORLD_POS(me->x, regionX); + s2->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s2->graphics.dest = VramMalloc(8U); + s2->oamFlags = SPRITE_OAM_ORDER(21); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_BOSS_4_EGGMAN; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = 0x10; + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0x2000; +#if PORTABLE && WIDESCREEN_HACK + Bosses_SetCamBounds(s->y, s->y + DISPLAY_HEIGHT, s->x - DISPLAY_WIDTH, s->x); +#else + Bosses_SetCamBounds(s->y, s->y + (DISPLAY_HEIGHT + 32), s->x - (DISPLAY_WIDTH + 80), s->x); +#endif + + gPlayer.qSpeedGround = 0; + gPlayer.moveState |= 0x200000; + + if ((gPlayer.character == CHARACTER_KNUCKLES) && ((gPlayer.anim == 269) || (gPlayer.anim == 207))) { + gPlayer.heldInput = DPAD_DOWN; + } else { + gPlayer.heldInput = 0; + } + + if (gRingsScatterTask != NULL) { + RingsScatter *scatter = TASK_DATA(gRingsScatterTask); + scatter->SA2_LABEL(unk2B6) |= 1; + } +} + +void Task_EggSpiderInit(void) +{ + Sprite *s; + Sprite *s2; + + EggSpider *boss = TASK_DATA(gCurTask); + MapEntity *me; + CamCoord worldX, worldY; + + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + boss->qUnk6C += boss->unk74; + boss->qUnk70 += boss->unk78; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk6C); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk70); + + sub_8031D54_inline(worldX, worldY); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_8031D0C_inline(); + sub_80309CC(); + + switch (boss->unk8C) { + case 0: { + if (--boss->unk84 == 0) { + gMusicManagerState.unk1 = 0x10; + s->variant = 0; + boss->unk74 = -0x100; + boss->unk8C++; + } + if ((gPlayer.anim == 0xD1) && (gPlayer.variant == 2)) { + gPlayer.heldInput = 0; + return; + } + } break; + + case 1: { + if (boss->qUnk6C <= -Q(120)) { + s->variant = 2; + boss->qUnk6C = -0x7800; + boss->unk74 = 0; + boss->unk84 = 60; + boss->unk8C++; + } + + if (gCamera.shiftY != -0x60) { + gCamera.shiftY--; + return; + } + } break; + + case 2: { + if (--boss->unk84 == 0) { + s2->variant = 1; + boss->unk8C++; + return; + } + } break; + + case 3: { + if (s2->frameFlags & 0x4000) { + s2->variant = 0; + boss->unk84 = 60; + boss->unk8C++; + } + } break; + + case 4: { + if (--boss->unk84 == 0) { + gCamera.shiftY = 0; + gPlayer.moveState &= 0xFFDFFFFF; + gPlayer.heldInput |= gPlayerControls.jump | gPlayerControls.attack; + boss->unk8C = 0; + boss->unk84 = 30; + gCurTask->main = sub_8030EE4; + } + } break; + } +} + +void sub_8030EE4() +{ + s32 sp4; + Sprite *s; + Sprite *s2; + s32 temp_r0_7; + + EggSpider *boss; + MapEntity *me; + CamCoord worldX, worldY; + + sp4 = 0; + boss = TASK_DATA(gCurTask); + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + boss->qUnk6C += boss->unk74; + boss->qUnk70 += boss->unk78; + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk6C); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk70); + + sub_80308A4(worldX, worldY); + if (boss->unk86 > 7) { + sub_80311D4(); + return; + } + + sub_8031D54_inline(worldX, worldY); + + sub_8031CD0_inline(); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_8031D0C_inline(); + + sub_80309CC(); + + if (boss->unk8A != 0) { + boss->unk8A--; + } + + switch (boss->unk8C) { + case 0: { + if (--boss->unk84 != 0) { + return; + } + s->variant = 0; + temp_r0_7 = (u32)PseudoRandom32() % 9U; + boss->unk80 = Q(gUnknown_084ACEC6[temp_r0_7]); + if (boss->qUnk6C == boss->unk80) { + boss->unk80 = Q(gUnknown_084ACEC6[((temp_r0_7 + 5) % 9)]); + } + if (boss->qUnk6C <= boss->unk80) { + boss->unk74 = +0x100; + boss->unk8C = 1; + } else { + boss->unk74 = -0x100; + boss->unk8C = 1; + } + } break; + + case 1: { + if (boss->unk74 > 0) { + if (boss->qUnk6C > boss->unk80) { + sp4 = 1; + } + } else { + if (boss->qUnk6C < boss->unk80) { + sp4 = (u8)-1; + } + } + + if (sp4 != 0) { + boss->qUnk6C = boss->unk80; + boss->unk74 = 0; + boss->unk84 = 30; + boss->unk8C = 2; + s->variant = 2; + } + } break; + + case 2: { + if (--boss->unk84 == 0) { + if (boss->unk8A != 0) { + boss->unk84 = 30; + boss->unk8C = 0; + } else { + boss->unk84 = 120; + boss->unk8C = 3; + s->variant = 1; + + if (PLAYER_IS_ALIVE) { + CreateScreenShake(0x400U, 0U, 0x100U, 120, 0x80U); + } + } + } + } break; + + case 3: { + if (--boss->unk84 == 0) { + boss->unk84 = 30; + boss->unk8C = 0; + boss->unk8A = 120; + s->variant = 2; + } else if (((boss->unk84 % gUnknown_084ACEB4[boss->unk86]) == 0) && PLAYER_IS_ALIVE) { + CreateIciclePlatform(boss); + m4aSongNumStart(0x91U); + } + } break; + } +} + +void sub_80311D4(void) +{ + u16 prevMinY; + u16 prevMaxY; + CamCoord worldX, worldY; + + Strc_sub_80168F0 *strc; + EggSpider *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + struct Task *t; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk6C); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk70); + s2->variant = 2; + boss->qUnk88 = 0; + m4aSongNumStart(SE_EXPLOSION); + boss->unk84 = 0; + s->graphics.anim = SA1_ANIM_BOSS_4_BODY; + s->variant = 0; + s->prevVariant = 0xFF; + + { + strc = TASK_DATA(sub_80168F0(worldX, worldY, 0x10, 0x273, 0U)); + strc->qUnk46 = 0; + strc->unk48 = 0; + strc->unk42 = 0x80; + + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = +Q(1); + } else { + strc->qUnk44 = -Q(1); + } + + strc->unk40 = 60; + } + + { + strc = TASK_DATA(sub_80168F0(worldX + 16, worldY + 16, 0xC, 0x273, 1U)); + strc->qUnk46 = 0; + strc->unk48 = 0; + strc->unk42 = 0x80; + + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = +Q(4); + } else { + strc->qUnk44 = -Q(4); + } + + strc->unk40 = 60; + } + + { + strc = TASK_DATA(sub_80168F0(worldX - 16, worldY + 16, 0xC, 0x273, 1U)); + + strc->qUnk46 = 0; + strc->unk48 = 0; + strc->unk42 = 0x380; + + strc->s.frameFlags |= SPRITE_FLAG(X_FLIP, 1); + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + strc->transform.qScaleX = -Q(1); + strc->qUnk44 = -Q(4); + } else { + strc->qUnk44 = +Q(4); + } + strc->unk40 = 60; + } + + gCamera.minX = gCamera.x; + gCamera.maxX = gCamera.x + DISPLAY_WIDTH; + + // NOTE: We have to use worldX/worldY to match this function, + // even if it doesn't make sense. + worldX = gCamera.minY; + worldY = gCamera.maxY; + CreatePreBossCameraPan(gCamera.maxY - DISPLAY_HEIGHT, (u16)gCamera.maxY); + gCamera.minY = worldX; + gCamera.maxY = worldY; + + gWater.targetWaterLevel += DISPLAY_HEIGHT; + + INCREMENT_SCORE_A(1000); + + Task_8031480(); + gCurTask->main = Task_8031480; +} + +void Task_8031480(void) +{ + s32 res; + + EggSpider *boss = TASK_DATA(gCurTask); + SpriteBase *base = &boss->base; + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + boss->qUnk88 += 0x2; + boss->qUnk70 += boss->qUnk88; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk6C); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk70); + + res = sa2__sub_801F100(worldY + 0x38, worldX, 1, 8, &sa2__sub_801EC3C); + + if (boss->unk84 > 120) + if (res < 0) { + boss->qUnk88 = 0U; + gCurTask->main = sub_803170C; + } + + s->frameFlags &= ~0x180; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + boss->unk84++; + if ((boss->unk84 & 0x7) == 0) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY + 32); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(17); + bolts->qUnk3E = Q(5. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_8031D0C_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void sub_803170C(void) +{ + EggSpider *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk6C); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk70); + + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~0x8000; + s->frameFlags &= ~0x180; + } + + if (boss->unk84++ > 300) { + Strc_sub_80168F0 *strc; + CreatePostBossEggMobile(worldX, worldY + 40); + CreateBossCapsule(worldX, worldY); + gMusicManagerState.unk1 = 0x30; + + TaskDestroy(gCurTask); + return; + } + + if ((boss->unk84 & 7) == 0) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY + 32); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(17); + bolts->qUnk3E = Q(5. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); + } + + gWinRegs[5] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + sub_8031D0C_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +// (96.94%) https://decomp.me/scratch/TvEoX +NONMATCH("asm/non_matching/game/enemies/boss_4__CreateIciclePlatform.inc", void CreateIciclePlatform(EggSpider *boss)) +{ + s32 rnd1; + s32 rnd; + IciclePlatform *icicle; + struct Task *t; + MapEntity *me; + Sprite *s; + s32 v0; +#if 0 + register u32 r7 asm("r7"); +#else + u32 r7; +#endif + u8 *ptr; + + me = boss->base.me; + t = TaskCreate(sub_8031AB4, sizeof(IciclePlatform), 0x2200U, 0U, NULL); + icicle = TASK_DATA(t); + s = &icicle->s; + icicle->worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX); + icicle->worldY = TO_WORLD_POS(me->y, boss->base.regionY); + + r7 = ((u32)PseudoRandom32() >> 1); + r7 &= 0xF; + icicle->unk4C = Q(-(((r7 << 2) + r7) << 2) - 10); + icicle->unk50 = -Q(32); + icicle->unk54 = 0; + icicle->unk58 = 0xA; + PseudoRandom32(); + icicle->unk58 = ((PseudoRandom32()) & 0xF) + 10; + + s->x = 0; + s->y = 0; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x2720); + s->oamFlags = SPRITE_OAM_ORDER(20); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_4_ICICLE; + + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; +} +END_NONMATCH + +void sub_8031AB4(void) +{ + s16 temp_r6; + s32 temp_r0; + s32 temp_r1; + s32 temp_r2; + s32 temp_r2_3; +#ifndef NON_MATCHING + register s32 var_r0 asm("r0"); + register s32 var_r1 asm("r1"); + register s32 temp_r2_2 asm("r2"); +#else + s32 var_r0; + s32 var_r1; + s32 temp_r2_2; +#endif + s32 var_r1_2; + s32 var_sl; + EggSpider *boss; + Sprite *s; + CamCoord worldX, worldY; + IciclePlatform *icicle; + s32 sp4; + + sp4 = 0; + icicle = TASK_DATA(gCurTask); + boss = TASK_DATA(TASK_PARENT(gCurTask)); + s = &icicle->s; + temp_r2 = icicle->unk50; + if (((icicle->worldY + I(icicle->unk50)) - 17) < gWater.currentWaterLevel) { + icicle->unk54 += icicle->unk58; + icicle->unk50 += icicle->unk54; + var_sl = icicle->unk54; + } else { + sp4 = 1; + if (boss->unk86 > 7) { + icicle->unk54 += icicle->unk58; + } else { + var_r1_2 = icicle->unk58; + if (var_r1_2 < 0) { + var_r1_2 += 7; + } + icicle->unk54 += var_r1_2 >> 3; + } + + var_r1 = icicle->unk54; + var_r0 = var_r1; + if (var_r1 < 0) { + var_r0 = var_r1 + 7; + } + temp_r2_2 = var_r0 >> 3; + icicle->unk50 += temp_r2_2; + var_sl = temp_r2_2; + } + + if (icicle->unk50 > Q(208)) { + TaskDestroy(gCurTask); + return; + } + + worldX = icicle->worldX + I(icicle->unk4C); + worldY = icicle->worldY + I(icicle->unk50); + UpdateSpriteAnimation(s); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((boss != TASK_PTR(NULL)) && (boss->unk86 <= 7)) { + sub_800BFEC(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + sub_800BFEC(s, worldX, worldY, &gPartner); + } + } + if (sp4 != 0) { + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer); + } + + if ((8 & gPlayer.moveState) && (gPlayer.stoodObj == s)) { + if (icicle->unk50 > Q(196)) { + gPlayer.moveState &= ~8; + } else { + gPlayer.qWorldY += Q(1) + var_sl; + } + } + if ((s8)(u8)gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner); + + if ((8 & gPartner.moveState) && (gPartner.stoodObj == s)) { + if (icicle->unk50 > Q(196)) { + gPartner.moveState &= ~8; + } else { + gPartner.qWorldY += Q(1) + var_sl; + } + } + } + DisplaySprite(s); +} + +void TaskDestructor_8031CB4(struct Task *t) +{ + EggSpider *boss = TASK_DATA(t); + + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void sub_8031CD0(void) { sub_8031CD0_inline(); } + +void sub_8031D0C(void) { sub_8031D0C_inline(); } + +// TODO: Check inline match +void sub_8031D54(CamCoord worldX, CamCoord worldY) { sub_8031D54_inline(worldX, worldY); } diff --git a/sa1/src/game/enemies/boss_5_mecha_knuckles.c b/sa1/src/game/enemies/boss_5_mecha_knuckles.c new file mode 100644 index 0000000000..1568063f7e --- /dev/null +++ b/sa1/src/game/enemies/boss_5_mecha_knuckles.c @@ -0,0 +1,1821 @@ +#include "global.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" +#include "game/nuts_and_bolts_task.h" +#include "game/save.h" +#include "game/stage/dust_effect_braking.h" +#include "game/stage/player_controls.h" +#include "game/stage/rings_scatter.h" +#include "game/stage/screen_shake.h" +#include "game/stage/terrain_collision.h" +#include "game/water_effects.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "game/stage/underwater_effects.h" + +// TODO: Automate inserting 'MECHA_KNUX_PARTS_VARIANTS' from animation itself! +#define MECHA_KNUX_PARTS_VARIANTS 6 + +typedef enum { + MKPHASE_A, + MKPHASE_B, + + MKPHASE_COUNT +} MechaKnucklesPhases; + +typedef enum { + /* 0 */ MKSTATE_ACTIVATE, + /* 1 */ MKSTATE_B, + /* 2 */ MKSTATE_C, + /* 3 */ MKPHASE_ACTIVATE_2, + /* 4 */ MKSTATE_IDLE, + /* 5 */ MKSTATE_IDLE_2, + /* 6 */ MKSTATE_SPIN, + /* 7 */ MKSTATE_GLIDE, + /* 8 */ MKSTATE_LAND, + /* 9 */ MKSTATE_LAND_2, + /* 10 */ MKSTATE_COVER, + /* 11 */ MKSTATE_SPINDASH, + /* 12 */ MKSTATE_SPIN_2, + /* 13 */ MKSTATE_PUNCH, + /* 14 */ MKSTATE_PUNCH_2, + /* 15 */ MKSTATE_LAUNCH_ROCKET, + /* 16 */ MKSTATE_LAUNCH_ROCKET_2, + /* 17 */ MKSTATE_HIT, + /* 18 */ MKSTATE_HIT_2, + /* 19 */ MKSTATE_DEFEATED, + /* 20 */ MKSTATE_DEFEATED_2, + /* 21 */ MKSTATE_DEFEATED_3, + /* 22 */ MKSTATE_EGGMOBILE, + /* 23 */ MKSTATE_EGGMOBILE_2, + /* 24 */ MKSTATE_EGGMOBILE_3, + + /* 25 */ MKSTATE_COUNT +} MechaKnucklesStates; + +typedef struct MechaKnuckles { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ Sprite s2; + /* 0x74 */ s32 qUnk74; + /* 0x78 */ s32 qUnk78; + /* 0x7C */ s16 unk7C; + /* 0x7E */ s16 unk7E; + /* 0x80 */ s16 unk80; + /* 0x82 */ s16 unk82; + /* 0x84 */ u16 unk84; + /* 0x88 */ u32 flags88; + /* 0x8C */ s32 spawnX; + /* 0x90 */ s32 spawnY; + /* 0x94 */ s8 phase; + /* 0x95 */ s8 lives; + /* 0x96 */ s8 unk96; + /* 0x97 */ s8 unk97; + /* 0x98 */ s8 unk98; + /* 0x99 */ s8 unk99; + /* 0x9A */ s8 state; + /* 0x9B */ s8 state2; +} MechaKnuckles; /* 0x9C */ + +typedef struct MechaKnucklesRocket { + /* 0x00 */ s32 unk0; + /* 0x00 */ s32 unk4; + /* 0x00 */ s16 unk8; + /* 0x00 */ s16 unkA; + /* 0x00 */ s16 unkC; + /* 0x00 */ s16 unkE; + /* 0x00 */ s16 unk10; + /* 0x00 */ s16 unk12; + /* 0x14 */ Sprite s; + /* 0x44 */ SpriteTransform transform; +} MechaKnucklesRocket; /* 0x50 */ + +typedef struct MechaKnucklesParts { + /* 0x00 */ s32 unk0; + /* 0x04 */ s32 unk4; + /* 0x08 */ s16 unk8; + /* 0x0A */ s16 unkA; + /* 0x0C */ s16 unkC; + /* 0x0E */ s16 unkE; + /* 0x10 */ s16 unk10; + /* 0x12 */ s16 unk12; + /* 0x14 */ s16 unk14; + /* 0x18 */ Sprite s; + /* 0x48 */ SpriteTransform transform; +} MechaKnucklesParts; /* 0x54 */ + +typedef bool32 (*MechaKnuxPlayerFn)(MechaKnuckles *boss, Player *p); +typedef void (*MechaKnuxFn)(MechaKnuckles *boss, Player *p); + +typedef struct Unk { + s16 anim; + u8 variant; + u8 unk3; +} Unk; + +void Task_MechaKnucklesInit(void); +void TaskDestructor_MechaKnuckles(struct Task *t); +void sub_804E8D4(MechaKnuckles *boss, s32 param1); +void sub_804EC60(MechaKnuckles *boss, MapEntity *me); + +void CreateMechaKnucklesRocket(MechaKnuckles *boss); +void Task_MechaKnucklesRocketInit(void); +void TaskDestructor_MechaKnuckles_Rocket(struct Task *t); + +struct Task *CreateMechaKnucklesParts(MechaKnuckles *boss, s32 variant); +void Task_MechaKnucklesPartsInit(void); +void TaskDestructor_MechaKnuckles_Parts(struct Task *t); + +void sub_804EB04(MechaKnuckles *boss); +void sub_804EB90(MechaKnuckles *boss); +bool32 sub_804EE20(MechaKnuckles *boss); +void sub_804FDD4(MechaKnuckles *boss); + +void sub_804F73C(MechaKnuckles *boss, Player *p); +void sub_804F760(MechaKnuckles *boss, Player *p); +void sub_804F788(MechaKnuckles *boss, Player *p); +void sub_804F78C(MechaKnuckles *boss, Player *p); +void sub_804F790(MechaKnuckles *boss, Player *p); +void sub_804F7B0(MechaKnuckles *boss, Player *p); +void sub_804F7B4(MechaKnuckles *boss, Player *p); +void sub_804F7C0(MechaKnuckles *boss, Player *p); +void sub_804F7C4(MechaKnuckles *boss, Player *p); +void sub_804F7C8(MechaKnuckles *boss, Player *p); +void sub_804F7CC(MechaKnuckles *boss, Player *p); +void sub_804F7D0(MechaKnuckles *boss, Player *p); +void sub_804F7D4(MechaKnuckles *boss, Player *p); +void sub_804F7D8(MechaKnuckles *boss, Player *p); +void sub_804F7DC(MechaKnuckles *boss, Player *p); +void sub_804F7E8(MechaKnuckles *boss, Player *p); +void sub_804F7EC(MechaKnuckles *boss, Player *p); +void sub_804F7F0(MechaKnuckles *boss, Player *p); +void sub_804F7F4(MechaKnuckles *boss, Player *p); +void sub_804F834(MechaKnuckles *boss, Player *p); +void sub_804F860(MechaKnuckles *boss, Player *p); +void sub_804F888(MechaKnuckles *boss, Player *p); +void sub_804F8D4(MechaKnuckles *boss, Player *p); +void sub_804F8D8(MechaKnuckles *boss, Player *p); +void sub_804F8DC(MechaKnuckles *boss, Player *p); +void sub_804F934(MechaKnuckles *boss, Player *p); +void sub_804F95C(MechaKnuckles *boss, Player *p); + +bool32 sub_804EEA8(MechaKnuckles *boss, Player *p); +bool32 sub_804EF18(MechaKnuckles *boss, Player *p); +bool32 sub_804EFA0(MechaKnuckles *boss, Player *p); +bool32 sub_804F020(MechaKnuckles *boss, Player *p); +bool32 sub_804F984(MechaKnuckles *boss, Player *p); +bool32 sub_804F990(MechaKnuckles *boss, Player *p); +bool32 sub_804F9B0(MechaKnuckles *boss, Player *p); +bool32 sub_804FA08(MechaKnuckles *boss, Player *p); +bool32 sub_804FA38(MechaKnuckles *boss, Player *p); +bool32 sub_804FA54(MechaKnuckles *boss, Player *p); +bool32 sub_804FA70(MechaKnuckles *boss, Player *p); +bool32 sub_804FA9C(MechaKnuckles *boss, Player *p); +bool32 sub_804FAC8(MechaKnuckles *boss, Player *p); +bool32 sub_804FAF0(MechaKnuckles *boss, Player *p); +bool32 sub_804FB10(MechaKnuckles *boss, Player *p); +bool32 sub_804FB30(MechaKnuckles *boss, Player *p); +bool32 sub_804FB5C(MechaKnuckles *boss, Player *p); +bool32 sub_804FB7C(MechaKnuckles *boss, Player *p); +bool32 sub_804FBA8(MechaKnuckles *boss, Player *p); +bool32 sub_804FBE4(MechaKnuckles *boss, Player *p); +bool32 sub_804FC28(MechaKnuckles *boss, Player *p); +bool32 sub_804FC78(MechaKnuckles *boss, Player *p); +bool32 sub_804FCA4(MechaKnuckles *boss, Player *p); +bool32 sub_804FCEC(MechaKnuckles *boss, Player *p); +bool32 sub_804FD54(MechaKnuckles *boss, Player *p); +bool32 sub_804ED80(MechaKnuckles *boss, Player *p); + +typedef struct ProcDataBoss5 { + MechaKnuxPlayerFn knuxPlayerFn; + MechaKnuxFn changeState; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; + u16 unk10; + u16 unk12; + s32 unk14; + + s8 unk18; + s8 unk19; + Unk unk1C[MKPHASE_COUNT]; +} ProcDataBoss5; /* 0x24 */ + +const ProcDataBoss5 sBoss5ProcData[MKSTATE_COUNT] = { + [MKSTATE_ACTIVATE] = { sub_804EEA8, + sub_804F73C, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x0000, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_ACTIVATE, 0, 0 }, { -1, -1, 0 } } }, + [MKSTATE_B] = { sub_804EF18, sub_804F760, 0x0000, 0x0000, 00, 00, 0x00, 0, 0x0000, 6, 14, { { -1, -1, 0 }, { -1, -1, 0 } } }, + [MKSTATE_C] = { sub_804F984, sub_804F788, 0x0000, 0x0000, 00, 00, 0x00, 0, 0x0000, 6, 14, { { -1, -1, 0 }, { -1, -1, 0 } } }, + [MKPHASE_ACTIVATE_2] = { sub_804F990, + sub_804F78C, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x0000, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_ACTIVATE, 1, 0 }, { -1, -1, 0 } } }, + [MKSTATE_IDLE] = { sub_804F9B0, + sub_804F790, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x0000, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_IDLE, 0, 0 }, { -1, -1, 0 } } }, + [MKSTATE_IDLE_2] = { sub_804FA08, + sub_804F7B0, + 0x0000, + 0x0000, + 00, + 00, + 0x5A, + 0, + 0x0200, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_IDLE, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_IDLE, 0, 0 } } }, + [MKSTATE_SPIN] = { sub_804FA38, + sub_804F7B4, + 0x0000, + 0xFB20, + 00, + 42, + 0x00, + 0, + 0x0210, + 6, + 9, + { { SA1_ANIM_BOSS_5_PHASE1_SPIN, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_SPIN, 0, 0 } } }, + [MKSTATE_GLIDE] = { sub_804EFA0, + sub_804F7C0, + 0x0300, + 0x0180, + 03, + 00, + 0x00, + 0, + 0x1210, + 6, + 6, + { { SA1_ANIM_BOSS_5_PHASE1_GLIDE, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_GLIDE, 0, 0 } } }, + [MKSTATE_LAND] = { sub_804FA54, + sub_804F7C4, + 0x0000, + 0x0000, + 00, + 42, + 0x00, + 0, + 0x0010, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_LAND, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_LAND, 0, 0 } } }, + [MKSTATE_LAND_2] = { sub_804FA70, + sub_804F7C8, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x0000, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_LAND, 1, 0 }, { SA1_ANIM_BOSS_5_PHASE2_LAND, 1, 0 } } }, + [MKSTATE_COVER] = { sub_804FA9C, + sub_804F7CC, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x1200, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_COVER, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_COVER, 0, 0 } } }, + [MKSTATE_SPINDASH] = { sub_804FAC8, + sub_804F7D0, + 0x0000, + 0x0000, + 00, + 00, + 0x3C, + 0, + 0x0900, + 6, + 9, + { { SA1_ANIM_BOSS_5_PHASE1_SPINDASH, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_SPINDASH, 0, 0 } } }, + [MKSTATE_SPIN_2] = { sub_804FAF0, + sub_804F7DC, + 0x0480, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x2400, + 6, + 9, + { { SA1_ANIM_BOSS_5_PHASE1_SPIN, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_SPIN, 0, 0 } } }, + [MKSTATE_PUNCH] = { sub_804FB10, + sub_804F7E8, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x0200, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_PUNCH, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE1_PUNCH, 0, 0 } } }, + [MKSTATE_PUNCH_2] = { sub_804FB30, + sub_804F7EC, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x0200, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE1_PUNCH, 1, 0 }, { SA1_ANIM_BOSS_5_PHASE1_PUNCH, 1, 0 } } }, + [MKSTATE_LAUNCH_ROCKET] = { sub_804FB5C, + sub_804F7F0, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x1200, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE2_LAUNCH_ROCKET, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_LAUNCH_ROCKET, 0, 0 } } }, + [MKSTATE_LAUNCH_ROCKET_2] = { sub_804FB7C, + sub_804F7F4, + 0xFB80, + 0x0000, + 96, + 00, + 0x00, + 0, + 0x6400, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE2_LAUNCH_ROCKET, 1, 0 }, { SA1_ANIM_BOSS_5_PHASE2_LAUNCH_ROCKET, 1, 0 } } }, + [MKSTATE_HIT] = { sub_804FBA8, + sub_804F834, + 0xFE80, + 0xFD00, + 00, + 42, + 0x00, + 0, + 0x1210, + 6, + 9, + { { SA1_ANIM_BOSS_5_PHASE1_HIT, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_HIT, 0, 0 } } }, + [MKSTATE_HIT_2] = { sub_804FBE4, + sub_804F860, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x0000, + 6, + 9, + { { SA1_ANIM_BOSS_5_PHASE1_GROUND, 0, 0 }, { SA1_ANIM_BOSS_5_PHASE2_HIT, 0, 0 } } }, + [MKSTATE_DEFEATED] = { sub_804FC28, + sub_804F888, + 0xFE80, + 0xFD00, + 00, + 21, + 0x00, + 0, + 0x1210, + 6, + 9, + { { SA1_ANIM_BOSS_5_PHASE2_DEFEATED, 0x00, 0 }, { SA1_ANIM_BOSS_5_PHASE2_DEFEATED, 0x00, 0 } } }, + [MKSTATE_DEFEATED_2] = { sub_804FC78, + sub_804F8D4, + 0x0000, + 0x0000, + 00, + 00, + 0x78, + 0, + 0x0000, + 6, + 9, + { { SA1_ANIM_BOSS_5_PHASE2_DEFEATED, 0x01, 0 }, { SA1_ANIM_BOSS_5_PHASE2_DEFEATED, 0x01, 0 } } }, + [MKSTATE_DEFEATED_3] = { sub_804FCA4, + sub_804F8D8, + 0x0000, + 0x0000, + 00, + 00, + 0x78, + 0, + 0x0000, + 6, + 14, + { { SA1_ANIM_BOSS_5_PHASE2_DEFEATED, 0x01, 0 }, { SA1_ANIM_BOSS_5_PHASE2_DEFEATED, 0x01, 0 } } }, + [MKSTATE_EGGMOBILE] = { sub_804FCEC, + sub_804F8DC, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x6000000, + 0, + 0, + { { SA1_ANIM_EGGMOBILE, 0x00, 0 }, { SA1_ANIM_EGGMOBILE, 0x00, 0 } } }, + [MKSTATE_EGGMOBILE_2] = { sub_804F020, + sub_804F934, + 0x0000, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x6000000, + 0, + 0, + { { SA1_ANIM_EGGMOBILE, 0x01, 0 }, { SA1_ANIM_EGGMOBILE, 0x01, 0 } } }, + [MKSTATE_EGGMOBILE_3] = { sub_804FD54, + sub_804F95C, + 0x0400, + 0x0000, + 00, + 00, + 0x00, + 0, + 0x6000000, + 0, + 0, + { { SA1_ANIM_EGGMOBILE, 0x00, 0 }, { SA1_ANIM_EGGMOBILE, 0x00, 0 } } }, +}; + +const TileInfoFirework sMechaKnucklesParts[MECHA_KNUX_PARTS_VARIANTS] = { + { SA1_ANIM_BOSS_5_PHASE2_PARTS, 0, MAX_TILES_VARIANT(SA1_ANIM_BOSS_5_PHASE2_PARTS, 0) }, + { SA1_ANIM_BOSS_5_PHASE2_PARTS, 1, MAX_TILES_VARIANT(SA1_ANIM_BOSS_5_PHASE2_PARTS, 1) }, + { SA1_ANIM_BOSS_5_PHASE2_PARTS, 2, MAX_TILES_VARIANT(SA1_ANIM_BOSS_5_PHASE2_PARTS, 2) }, + { SA1_ANIM_BOSS_5_PHASE2_PARTS, 3, MAX_TILES_VARIANT(SA1_ANIM_BOSS_5_PHASE2_PARTS, 3) }, + { SA1_ANIM_BOSS_5_PHASE2_PARTS, 4, MAX_TILES_VARIANT(SA1_ANIM_BOSS_5_PHASE2_PARTS, 4) }, + { SA1_ANIM_BOSS_5_PHASE2_PARTS, 5, MAX_TILES_VARIANT(SA1_ANIM_BOSS_5_PHASE2_PARTS, 5) }, +}; + +// TODO: Fake-match +void CreateEntity_MechaKnuckles(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + MechaKnuckles *boss; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_MechaKnucklesInit, sizeof(MechaKnuckles), 0x2000, 0, TaskDestructor_MechaKnuckles); + boss = TASK_DATA(t); + +#ifndef NON_MATCHING + { + register s32 r8 asm("r8") = 0; + asm("" ::"r"(r8)); + asm("" ::: "r2"); + } +#endif + + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + SET_MAP_ENTITY_INITIALIZED(me); + + sub_804EC60(boss, me); + + if (gRingsScatterTask != NULL) { + RingsScatter *scatter = TASK_DATA(gRingsScatterTask); + scatter->SA2_LABEL(unk2B6) |= 1; + } +} + +// (97.27%) https://decomp.me/scratch/IOy1q +NONMATCH("asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesInit.inc", void Task_MechaKnucklesInit()) +{ + Sprite *s; + Sprite *s2; + s32 sp4; + u32 var_r0; + u32 var_r5; + + Player *p = &gPlayer; + MechaKnuckles *boss; +#ifndef NON_MATCHING + asm("" ::"r"(p)); +#endif + boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + + if (IS_ALIVE(p)) { + gDispCnt &= ~0x8000; + s->frameFlags &= ~0x180; + } + + sp4 = sBoss5ProcData[boss->state].knuxPlayerFn(boss, p); + sub_804EB04(boss); + if (!(boss->flags88 & 0x04000000)) { + sub_804FDD4(boss); + } + if (!(boss->flags88 & 0x02000000)) { + sub_804EB90(boss); + } + + var_r5 = sub_800BFEC(s, boss->spawnX + I(boss->qUnk74), boss->spawnY + I(boss->qUnk78), p); + if (gNumSingleplayerCharacters == 2) { + var_r5 |= sub_800BFEC(s, boss->spawnX + I(boss->qUnk74), boss->spawnY + I(boss->qUnk78), &gPartner); + } + + if (var_r5 == 0) { + if (boss->unk97 <= 0) { +#ifndef NON_MATCHING + register Player *player asm("r3"); +#else + Player *player; +#endif + var_r5 = sub_800C0E0(s, boss->spawnX + I(boss->qUnk74), boss->spawnY + I(boss->qUnk78), p); + if (gNumSingleplayerCharacters == 2) { + var_r0 = sub_800C0E0(s, boss->spawnX + I(boss->qUnk74), boss->spawnY + I(boss->qUnk78), &gPartner); + } else { + var_r0 = 0; + } + + if (var_r5 != 0) { + if (((boss->state == MKSTATE_IDLE_2) || (boss->state == MKSTATE_COVER)) && !(p->moveState & 2)) { + if (boss->state != MKSTATE_COVER) { + sp4 = 0; + boss->state2 = MKSTATE_COVER; + player = p; + player->qSpeedAirX = -player->qSpeedAirX; + player->qSpeedGround = -player->qSpeedGround; + } + } else { + sp4 = 0; + boss->state2 = MKSTATE_HIT; + if (--boss->lives <= 0) { + boss->state2 = MKSTATE_DEFEATED; + } + boss->unk97 = 0x20; + } + } else if (var_r0 != 0) { + if (((boss->state == MKSTATE_IDLE_2) || (boss->state == MKSTATE_COVER)) && ((gPartner.moveState & 2) == 0)) { + if (boss->state != MKSTATE_COVER) { + sp4 = 0; + boss->state2 = MKSTATE_COVER; + player = &gPartner; + player->qSpeedAirX = -player->qSpeedAirX; + player->qSpeedGround = -player->qSpeedGround; + } + } else { + sp4 = 0; + boss->state2 = MKSTATE_HIT; + if (--boss->lives <= 0) { + boss->state2 = MKSTATE_DEFEATED; + } + boss->unk97 = 0x20; + } + } + } + } + + if (boss->unk97 != 0) { + if (!(gStageTime & 2) && !(gPlayer.moveState & 0x80)) { + s->frameFlags |= 0x100; + gDispCnt |= 0x8000; + gWinRegs[5] = 0x3F3F; + } + + if (boss->state2 != MKSTATE_HIT && boss->state2 != MKSTATE_HIT_2) { + boss->unk97--; + } + } + + s->x = s2->x = (boss->spawnX + I(boss->qUnk74)) - gCamera.x; + s->y = s2->y = (boss->spawnY + I(boss->qUnk78)) - gCamera.y; + + if (boss->flags88 & 0x20) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + if (boss->flags88 & 0x40) { + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + } + + if (sp4 == 0) { + boss->state = boss->state2; + sub_804E8D4(boss, boss->state); + } +} +END_NONMATCH + +void sub_804E8D4(MechaKnuckles *boss, s32 state) +{ + s32 phase; + const ProcDataBoss5 *procData; + Player *p; + Sprite *s; + s32 var_r7; + s32 var_r8; + s32 temp_r1; + s32 temp_r3; + s32 temp_r5_2; + s32 var_r2; + + procData = &sBoss5ProcData[state]; + + p = &gPlayer; + + s = &boss->s; + phase = boss->phase; + var_r7 = procData->unk8; + var_r8 = procData->unkC; + var_r2 = boss->flags88; + temp_r3 = procData->unk14; + temp_r5_2 = (0x400 & temp_r3); + if (temp_r5_2 == 0) { + var_r2 = (var_r2 & 0xFFFFF8FF) | (0x300 & temp_r3); + } + temp_r1 = 0x2000 & temp_r3; + if (temp_r1 == 0) { + var_r2 = (var_r2 & 0xFFFFC7FF) | (0x1800 & temp_r3); + } + var_r2 = ((((((((var_r2 | temp_r5_2 | temp_r1) & ~0x10) | (temp_r3 & 0x10)) & 0xFFFF3FFF) | (0xC000 & temp_r3)) & 0xFDFFFFFF) + | (0x02000000 & temp_r3)) + & 0xFBFFFFFF) + | (temp_r3 & 0x04000000); + if (var_r2 & 0x10) { + var_r2 &= ~1; + } + boss->flags88 = var_r2; + + temp_r1 = procData->unk10; + boss->unk84 = temp_r1; + + temp_r1 = procData->unk18; + if (temp_r1 != boss->unk98) { + boss->unk98 = procData->unk18; + } + + temp_r1 = procData->unk19; + if (temp_r1 != boss->unk99) { + boss->qUnk78 -= Q(boss->unk99 - temp_r1); + boss->unk99 = procData->unk19; + } + + switch (0x1800 & var_r2) { + case 0x800: { + if (I(boss->qUnk74) > 0x77) { + var_r7 = -var_r7; + var_r8 = -var_r8; + } + } break; + case 0x1000: { + if ((I(boss->qUnk74) + boss->spawnX) >= I(p->qWorldX)) { + var_r7 = -var_r7; + var_r8 = -var_r8; + } + } break; + } + boss->unk7C = var_r7; + boss->unk7E = procData->unkA; + boss->unk80 = var_r8; + boss->unk82 = procData->unkE; + + switch (0x300 & var_r2) { + case 0x100: { + if (I(boss->qUnk74) > 0x77) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } else { + SPRITE_FLAG_SET(s, X_FLIP); + } + + } break; + + case 0x200: { + if ((I(boss->qUnk74) + boss->spawnX) >= I(p->qWorldX)) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } else { + SPRITE_FLAG_SET(s, X_FLIP); + } + + } break; + } + + if ((procData->unk1C[phase].anim >= 0) + && ((s->graphics.anim != procData->unk1C[phase].anim) || (s->variant != procData->unk1C[phase].variant))) { + s->graphics.anim = procData->unk1C[phase].anim; + s->variant = procData->unk1C[phase].variant; + s->prevVariant = -1; + SPRITE_FLAG_CLEAR(s, ANIM_OVER); + s->hitboxes[0].index = -1; + s->hitboxes[1].index = -1; + } + + procData->changeState(boss, p); +} + +void sub_804EB04(MechaKnuckles *boss) +{ + s32 var_r2; + s32 var_r3; + s32 var_r4; + + var_r3 = boss->unk7C; + var_r4 = boss->unk7E; + boss->qUnk74 += var_r3; + boss->qUnk78 += var_r4; + var_r2 = var_r3 & 0x80000000; + var_r3 += boss->unk80; + + if ((boss->flags88 & 0x4000) && (var_r2 != (var_r3 & 0x80000000))) { + var_r3 = 0; + boss->unk80 = 0; + } + + boss->unk7C = var_r3; + var_r2 = var_r4; + var_r2 &= 0x80000000; + var_r4 = var_r4 + boss->unk82; + + if ((boss->flags88 & 0x8000) && (var_r2 != (var_r4 & 0x80000000))) { + var_r4 = 0; + boss->unk82 = 0; + } + + boss->unk7E = var_r4; +} + +void sub_804EB90(MechaKnuckles *boss) +{ + s32 *parts; + s32 *temp_r5_2; + s32 temp_r0; + s32 res; + s32 temp_r6; + s32 temp_r7; + + temp_r7 = boss->spawnX + I(boss->qUnk74); + temp_r6 = boss->spawnY + I(boss->qUnk78); + + boss->flags88 &= ~1; + + res = sa2__sub_801E4E4(temp_r6 + boss->unk99, temp_r7, 1, 8, NULL, sa2__sub_801EE64); + if (boss->flags88 & 0x10) { + if (res < 0) { + boss->qUnk78 += res << 8; + boss->flags88 |= 1; + } + } else if (res <= 0xA) { + boss->qUnk78 += res << 8; + boss->flags88 |= 1; + } + + boss->flags88 &= ~2; + + if (boss->unk7E < 0) { + res = sa2__sub_801E4E4(temp_r6 - boss->unk99, temp_r7, 1, -8, NULL, sa2__sub_801EE64); + + if (res < 0) { + boss->qUnk78 -= Q(res); + boss->flags88 |= 2; + } + } +} + +void sub_804EC60(MechaKnuckles *boss, MapEntity *me) +{ + Sprite *s; + s8 *ptr_r1; + s8 *ptr_r3; + s32 off_r1; + Sprite *s2; + u32 difficulty; + + boss->spawnX = TO_WORLD_POS(boss->base.meX, boss->base.regionX); + boss->spawnY = TO_WORLD_POS(me->y, boss->base.regionY); + boss->qUnk74 = Q(208); + boss->qUnk78 = -Q(32); + boss->unk7C = 0; + boss->unk7E = 0; + boss->unk80 = 0; + boss->unk82 = 0; + boss->flags88 = 0; + boss->unk84 = 0; + boss->phase = MKPHASE_A; + + ptr_r3 = &boss->lives; + off_r1 = 8; + difficulty = LOADED_SAVE->difficultyLevel; + *ptr_r3 = off_r1 -= (difficulty * 2); + ptr_r1 = &boss->unk96; + *ptr_r1 = 4 - difficulty; + + boss->unk97 = 0; + boss->unk98 = 0; + boss->unk99 = 0; + boss->state = MKSTATE_ACTIVATE; + boss->state2 = MKSTATE_ACTIVATE; + + s = &boss->s; + // TODO: ALLOC_TILES! + s->graphics.dest = VramMalloc(64); + s->oamFlags = SPRITE_OAM_ORDER(20); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->hitboxes[1].index = -1; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s2 = &boss->s2; + // TODO: ALLOC_TILES! + s2->graphics.dest = VramMalloc(30); + s2->oamFlags = SPRITE_OAM_ORDER(20); + s2->graphics.size = 0; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = 0x10; + s2->palId = 0; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sub_804E8D4(boss, boss->state); +} + +MechaKnucklesStates sub_804ED80(MechaKnuckles *boss, Player *p) +{ + s32 temp_r1; + s32 temp_r2; + s32 rnd; + u32 result; + s32 diffX; + + temp_r2 = I(p->qWorldX); + temp_r1 = boss->spawnX + I(boss->qUnk74); + diffX = temp_r2 - temp_r1; + if (diffX < 0) { + diffX = temp_r1 - temp_r2; + } + + rnd = PseudoRandom32(); + + if (boss->phase == MKPHASE_A) { + if (diffX < 80) { + if (diffX < 32) { + result = (p->moveState & MOVESTATE_IN_AIR) ? 6 : 13; + } else { + if (0x1000 & rnd) { + result = 5; + } else { + result = (rnd & 0x100) ? 11 : 6; + } + } + } else { + result = (rnd & 0x100) ? 11 : 6; + } + } else { + if (diffX >= 80) { + if (0x3000 & rnd) { + result = 0xF; + } else { + result = (rnd & 0x100) ? 11 : 6; + } + } else if (p->moveState & MOVESTATE_IN_AIR) { + result = 6; + } else { + result = (rnd & 0x100) ? 11 : 6; + } + } + + return result; +} + +bool32 sub_804EE20(MechaKnuckles *boss) +{ + u32 temp_r0; + u32 temp_r3; + s32 result = FALSE; + + if (!(gStageTime & 7)) { + struct Task *t; + NutsAndBolts *bolts; + + temp_r0 = (((u32)PseudoRandom32() & 0x1FFF00) >> 8) - 4096; + temp_r3 = (((u32)PseudoRandom32() & 0x1FFF00) >> 8) - 4096; + t = sub_8017540(boss->qUnk74 + Q(boss->spawnX) + temp_r0, boss->qUnk78 + Q(boss->spawnY) + temp_r3); + + bolts = TASK_DATA(t); + bolts->s.oamFlags = SPRITE_OAM_ORDER(19); + result = TRUE; + } + return result; +} + +bool32 sub_804EEA8(MechaKnuckles *boss, Player *p) +{ + bool32 result = TRUE; + Camera *cam = &gCamera; + +#ifndef NON_MATCHING + register s32 r2 asm("r2"); + asm("" ::"r"(r2)); +#endif + + cam->minX = cam->x; + + if (cam->maxY > boss->spawnY) { + cam->maxY--; + } else if (cam->maxY < boss->spawnY) { + cam->maxY++; + } + + if (cam->minY > boss->spawnY - DISPLAY_HEIGHT) { + cam->minY--; + } else if (cam->minY < boss->spawnY - DISPLAY_HEIGHT) { + cam->minY++; + } + + if (I(p->qWorldX) >= (boss->spawnX + 0x20)) { + boss->state2 = MKSTATE_B; + result = 0; + } + + return result; +} + +u32 sub_804EF18(MechaKnuckles *boss, Player *p) +{ + bool32 result = TRUE; + Camera *cam = &gCamera; + +#ifndef NON_MATCHING + register s32 r2 asm("r2"); + asm("" ::"r"(r2)); +#endif + + if (cam->minX < boss->spawnX) { + cam->minX++; + } + + if (cam->maxY > boss->spawnY) { + cam->maxY--; + } else if (cam->maxY < boss->spawnY) { + cam->maxY++; + } + + if (cam->minY > boss->spawnY - DISPLAY_HEIGHT) { + cam->minY--; + } else if (cam->minY < boss->spawnY - DISPLAY_HEIGHT) { + cam->minY++; + } + + if (boss->spawnX <= cam->minX) { + if (boss->spawnY >= cam->maxY) { + boss->state2 = MKSTATE_C; + result = 0; + } + } + + return result; +} + +bool32 sub_804EFA0(MechaKnuckles *boss, Player *p) +{ + s16 *temp_r0; + s16 *temp_r1; + s16 temp_r4; + s16 var_r0; + bool32 result; + u16 temp_r2; + + result = TRUE; + if (boss->unk7E < 0x80) { + boss->unk7E += 0x18; + } else { + boss->unk7E -= 0x18; + } + + if ((boss->flags88 & 0xC) || ((boss->unk7C < 0) && ((I(p->qWorldX) - (boss->spawnX + I(boss->qUnk74))) > 0x20)) + || ((boss->unk7C > 0) && (I(p->qWorldX) - (boss->spawnX + I(boss->qUnk74)) < -0x20))) { + boss->state2 = MKSTATE_LAND; + result = FALSE; + } + return result; +} + +bool32 sub_804F020(MechaKnuckles *boss, Player *p) +{ + bool32 result; + + result = TRUE; + if (gCamera.minX < gCamera.maxX - DISPLAY_WIDTH) { + gCamera.minX++; + } + if (gCamera.minX < gCamera.x) { + gCamera.minX = gCamera.x; + } + if (SPRITE_FLAG_GET(&boss->s, ANIM_OVER)) { + boss->state2 = MKSTATE_EGGMOBILE_3; + result = FALSE; + CreateBossCapsule(boss->spawnX + I(boss->qUnk74), boss->spawnY + I(boss->qUnk78)); + gMusicManagerState.unk1 = 0x32; + } + return result; +} + +void CreateMechaKnucklesRocket(MechaKnuckles *boss) +{ + s32 isFlippedX; + Sprite *s; + SpriteTransform *tf; + struct Task *t; + MechaKnucklesRocket *rocket; + t = TaskCreate(Task_MechaKnucklesRocketInit, sizeof(MechaKnucklesRocket), 0x2001U, 0U, TaskDestructor_MechaKnuckles_Rocket); + rocket = TASK_DATA(t); + + s = &rocket->s; + tf = &rocket->transform; + isFlippedX = boss->s.frameFlags & SPRITE_FLAG_MASK_X_FLIP; + + rocket->unk0 = (Q(boss->spawnX) + boss->qUnk74); + rocket->unk4 = (Q(boss->spawnY) + boss->qUnk78 - Q(6)); + rocket->unk8 = -Q(0.25); + + if (isFlippedX) { + rocket->unk8 = 0x40; + } + rocket->unkA = 0; + rocket->unkC = 0x40; + + if (PseudoRandom32() & 0x1000) { + rocket->unkC = 0x20; + } + + rocket->unk10 = 0; + rocket->unk12 = 0; + if (!isFlippedX) { + rocket->unk12 = 0x80; + } + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_5_ROCKET); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_5_PHASE2_ROCKET; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(21); + s->qAnimDelay = Q(0); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x2000; + + tf->rotation = 0; + tf->qScaleX = Q(1); + if (isFlippedX) { + tf->qScaleX = -tf->qScaleX; + } + + tf->qScaleY = Q(1); + tf->x = 0; + tf->y = 0; +} + +// (98.53%) https://decomp.me/scratch/6KEfY +NONMATCH("asm/non_matching/game/enemies/boss_5__Task_MechaKnucklesRocketInit.inc", void Task_MechaKnucklesRocketInit(void)) +{ + Sprite *s; + SpriteTransform *tf; + s32 qWorldX; + s32 qWorldY; + s32 temp_r0_2; + s32 temp_r0_3; + s32 temp_r4; + s32 screenX; + s32 screenY; + s32 temp_r0; + s32 temp_r2; + s32 temp_r2_2; + s32 temp_r6; + s32 collPlayer; + s32 collPartner; + s32 var_r0; + s32 var_r1; + u32 var_r8; + s32 var_r9; + + s32 unk8, unkA; + + MechaKnucklesRocket *rocket = TASK_DATA(gCurTask); + + s = &rocket->s; + tf = &rocket->transform; + qWorldX = rocket->unk0; + qWorldY = rocket->unk4; + var_r8 = rocket->unk12 & 0xFF; + if (rocket->unk10 > 0x18) { + s32 qPlayerX = gPlayer.qWorldX; + s32 qPlayerY = gPlayer.qWorldY; + temp_r6 = (qPlayerY - qWorldY); + + unk8 = rocket->unk8; + unkA = rocket->unkA; + var_r1 = unkA + (SIN_24_8((var_r9 = (var_r8 & 0xFF) * 4)) * 8); + var_r0 = qPlayerX - qWorldX; + var_r0 = ABS(var_r0); + temp_r0 = var_r1 * var_r0 / ABS((unk8 + ((COS_24_8((var_r8 & 0xFF) * 4)) * 8))); + + if (temp_r0 < (temp_r6 - Q(8))) { + if (unk8 > 0) { + var_r8 += 3; + } else { + var_r8 -= 3; + } + } else if (temp_r0 > temp_r6) { + if (unk8 > 0) { + var_r8 -= 3; + } else { + var_r8 += 3; + } + } + + var_r8 &= 0xFF; + rocket->unk12 = var_r8; + } + qWorldX += rocket->unk8; + qWorldY += rocket->unkA; + if (rocket->unk10 > 16) { + rocket->unk8 += I(rocket->unkC * COS_24_8((var_r8 & 0xFF) * 4)); + rocket->unkA += I(rocket->unkC * SIN_24_8((var_r8 & 0xFF) * 4)); + } + + rocket->unk0 = qWorldX; + rocket->unk4 = qWorldY; + + collPlayer = sub_800BF10(s, I(qWorldX), I(qWorldY), &gPlayer); + if (gNumSingleplayerCharacters == 2) { + collPartner = sub_800BF10(s, I(qWorldX), I(qWorldY), &gPartner); + } else { + collPartner = 0; + } + if ((collPlayer | collPartner) != 0) { + s32 q21 = Q(21); + sub_8017540(qWorldX + Q_MUL(q21, COS_24_8((0xFF & var_r8) * 4)), qWorldY + Q_MUL(q21, SIN_24_8((0xFF & var_r8) * 4))); + TaskDestroy(gCurTask); + return; + } + screenX = I(qWorldX) - gCamera.x; + screenY = I(qWorldY) - gCamera.y; + temp_r2_2 = (PseudoRandom32() & 0x3FF) - Q(26); + + CreateBrakingDustEffect(I(qWorldX + Q_MUL(temp_r2_2, COS_24_8((var_r8 & 0xFF) * 4))), + I(qWorldY + Q_MUL(temp_r2_2, SIN_24_8((var_r8 & 0xFF) * 4)))); + + if (((u32)(screenX + 32) >= DISPLAY_WIDTH + 64) || ((u32)(screenY + 64) >= DISPLAY_HEIGHT + 128)) { + TaskDestroy(gCurTask); + return; + } + + rocket->unk10++; + tf->x = screenX; + tf->y = screenY; + var_r1 = var_r8; + if (tf->qScaleX < 0) { + var_r1 += 0x80; + } + tf->rotation = ((var_r1 + 0x80) * 4) & 0x3FF; + s->frameFlags = 0x2000; + s->frameFlags |= (sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); +} +END_NONMATCH + +struct Task *CreateMechaKnucklesParts(MechaKnuckles *boss, s32 variant) +{ + struct Task *sp4; + TileInfoFirework *temp_r4; + s32 temp_r0_2; + s32 temp_r0_3; + s32 temp_r1; + s32 temp_r2; + s32 temp_r2_2; + u32 numTiles; + struct Task *t; + MechaKnucklesParts *parts; + SpriteTransform *tf; + Sprite *s; + s32 val; + + t = TaskCreate(Task_MechaKnucklesPartsInit, sizeof(MechaKnucklesParts), 0x4001U, 0U, TaskDestructor_MechaKnuckles_Parts); + parts = TASK_DATA(t); + s = &parts->s; + tf = &parts->transform; + { + const TileInfoFirework *tileInfo = &sMechaKnucklesParts[variant]; + s->graphics.dest = VramMalloc(tileInfo->numTiles); + s->graphics.anim = tileInfo->anim; + s->variant = tileInfo->variant; + } + s->oamFlags = SPRITE_OAM_ORDER(19); + s->frameFlags = 0x2000; + parts->unk0 = Q(boss->spawnX) + boss->qUnk74; + parts->unk4 = Q(boss->spawnY) + boss->qUnk78; + val = (((u32)(PseudoRandom32() << 0xD) >> 0x15) - Q(4)); + parts->unk8 = val; + { + s32 val = -((u32)(PseudoRandom32() << 15) >> 23) - Q(2); + parts->unkA = val; + } + parts->unkC = 0; + parts->unkE = (s16)(0x2A - ((u32)(0x1F00 & PseudoRandom32()) >> 8)); + parts->unk10 = 0; + parts->unk12 = ((u32)PseudoRandom32() >> 8); + val = ((u32)(PseudoRandom32() << 0xC) >> 0x14) - Q(8); + parts->unk14 = val; + s->graphics.size = 0; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = 0; + tf->y = 0; + + return t; +} + +void Task_MechaKnucklesPartsInit() +{ + Sprite *s; + SpriteTransform *tf; + Camera *cam; + s32 screenX; + s32 screenY; + + MechaKnucklesParts *parts = TASK_DATA(gCurTask); + + s = &parts->s; + tf = &parts->transform; + cam = &gCamera; + + parts->unk0 += parts->unk8; + parts->unk4 += parts->unkA; + parts->unk8 += parts->unkC; + parts->unkA += parts->unkE; + parts->unk12 += parts->unk14; + + if (parts->unk14 != 0) { + if (parts->unk14 > 0) { + parts->unk14 = parts->unk14 - 8; + + if (parts->unk14 < 0) { + parts->unk14 = 0; + } + } + + if (parts->unk14 < 0) { + parts->unk14 += 8; + + if (parts->unk14 > 0) { + parts->unk14 = 0; + } + } + } + + screenX = I(parts->unk0) - cam->x; + screenY = I(parts->unk4) - cam->y; + + if (((screenX + 0x20) > 0x12FU) || (screenY > 0xDF)) { + TaskDestroy(gCurTask); + return; + } + + tf->x = screenX; + tf->y = screenY; + tf->rotation = ((u16)parts->unk12 >> 6); + s->frameFlags &= ~0x1F; + + s->frameFlags |= (sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); +} + +void sub_804F73C(MechaKnuckles *boss, Player *p) +{ + gCamera.maxX = boss->spawnX + DISPLAY_WIDTH; + gCamera.minY = gCamera.y; + gCamera.maxY = gCamera.y + DISPLAY_HEIGHT; + boss->flags88 |= 0x20; +} + +void sub_804F760(MechaKnuckles *boss, Player *p) +{ + gCamera.minX = gCamera.x; + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + p->qSpeedAirY = 0; + p->moveState |= MOVESTATE_IGNORE_INPUT; + p->moveState &= ~MOVESTATE_FACING_LEFT; + p->heldInput = 0; + p->frameInput = 0; +} + +void sub_804F788(MechaKnuckles *boss, Player *p) { } + +void sub_804F78C(MechaKnuckles *boss, Player *p) { } + +void sub_804F790(MechaKnuckles *boss, Player *p) +{ + p->charState = CHARSTATE_39; + p->moveState |= MOVESTATE_800000; + gMusicManagerState.unk1 = 0x11; +} + +void sub_804F7B0(MechaKnuckles *boss, Player *p) { } + +void sub_804F7B4(MechaKnuckles *boss, Player *p) { m4aSongNumStart(SE_JUMP); } + +void sub_804F7C0(MechaKnuckles *boss, Player *p) { } + +void sub_804F7C4(MechaKnuckles *boss, Player *p) { } + +void sub_804F7C8(MechaKnuckles *boss, Player *p) { } + +void sub_804F7CC(MechaKnuckles *boss, Player *p) { } + +void sub_804F7D0(MechaKnuckles *boss, Player *p) { m4aSongNumStart(SE_SPIN_ATTACK); } + +void sub_804F7DC(MechaKnuckles *boss, Player *p) { m4aSongNumStart(SE_SPINDASH_RELEASE); } + +void sub_804F7E8(MechaKnuckles *boss, Player *p) { } + +void sub_804F7EC(MechaKnuckles *boss, Player *p) { } + +void sub_804F7F0(MechaKnuckles *boss, Player *p) { } + +void sub_804F7F4(MechaKnuckles *boss, Player *p) +{ + CreateMechaKnucklesRocket(boss); + m4aSongNumStart(SE_200); + CreateScreenShake(0x200U, 0x10U, 0x100U, -1U, 0x80U); + CreateScreenShake(0x400U, 0x10U, 0x80U, -1U, 0x40U); +} + +void sub_804F834(MechaKnuckles *boss, Player *p) +{ + if (boss->lives == (s8)boss->unk96) { + boss->unk80 >>= 1; + boss->unk82 >>= 1; + } +} + +void sub_804F860(MechaKnuckles *boss, Player *p) +{ + if (boss->lives == (s8)boss->unk96) { + boss->phase = MKPHASE_B; + gMusicManagerState.unk1 = 0x12; + } +} + +void sub_804F888(MechaKnuckles *boss, Player *p) { INCREMENT_SCORE_A(1000); } + +void sub_804F8D4(MechaKnuckles *boss, Player *p) { } + +void sub_804F8D8(MechaKnuckles *boss, Player *p) { } + +void sub_804F8DC(MechaKnuckles *boss, Player *p) +{ + Camera *cam = &gCamera; + boss->qUnk74 = +Q(272); // TODO: Is this (DISPLAY_WIDTH + 32)? + boss->qUnk78 = -Q(100); + cam->maxX = gRefCollision->pxWidth; + boss->s.frameFlags &= ~0x400; + boss->s2.frameFlags &= ~0x400; + boss->s2.graphics.anim = SA1_ANIM_EGGMAN; + boss->s2.variant = 3; + boss->s2.prevVariant = -1; + boss->flags88 |= 0x40; +} + +void sub_804F934(MechaKnuckles *boss, Player *p) +{ + boss->s.frameFlags &= ~0x400; + boss->s2.graphics.anim = SA1_ANIM_EGGMAN; + boss->s2.variant = 9; + boss->s2.prevVariant = -1; +} + +void sub_804F95C(MechaKnuckles *boss, Player *p) +{ + boss->s.frameFlags |= 0x400; + boss->s2.graphics.anim = SA1_ANIM_EGGMAN; + boss->s2.variant = 6; + boss->s2.prevVariant = -1; +} + +u32 sub_804F984(MechaKnuckles *boss, Player *p) +{ + boss->state2 = MKPHASE_ACTIVATE_2; + return 0; +} + +bool32 sub_804F990(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = MKSTATE_IDLE; + result = FALSE; + } + + return result; +} + +u32 sub_804F9B0(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (p->spriteInfoBody->s.frameFlags & 0x4000) { + boss->state2 = MKSTATE_IDLE_2; + result = FALSE; + p->moveState &= ~MOVESTATE_IGNORE_INPUT; + p->heldInput |= gPlayerControls.jump | gPlayerControls.attack; + p->moveState &= ~MOVESTATE_800000; + p->charState = CHARSTATE_IDLE; + } + + return result; +} + +u32 sub_804FA08(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + u16 *temp_r0; + s16 temp_r1 = boss->unk84; + boss->unk84--; + + if (temp_r1 <= 0) { + boss->state2 = sub_804ED80(boss, p); + result = FALSE; + } + return result; +} + +u32 sub_804FA38(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + if (boss->unk7E >= 0) { + boss->state2 = MKSTATE_GLIDE; + result = FALSE; + } + return result; +} + +u32 sub_804FA54(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->flags88 & 1) { + boss->state2 = MKSTATE_LAND_2; + result = FALSE; + } + + return result; +} + +u32 sub_804FA70(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = sub_804ED80(boss, p); + result = FALSE; + } + + return result; +} + +u32 sub_804FA9C(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = sub_804ED80(boss, p); + result = FALSE; + } + + return result; +} + +u32 sub_804FAC8(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + u16 *temp_r0; + s16 temp_r1 = boss->unk84; + boss->unk84--; + + if (temp_r1 <= 0) { + boss->state2 = MKSTATE_SPIN_2; + result = FALSE; + } + + return result; +} + +u32 sub_804FAF0(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->flags88 & (0x8 | 0x4)) { + boss->state2 = MKSTATE_IDLE_2; + result = FALSE; + } + + return result; +} + +u32 sub_804FB10(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = MKSTATE_PUNCH_2; + result = FALSE; + } + + return result; +} + +u32 sub_804FB30(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = sub_804ED80(boss, p); + result = FALSE; + } + + return result; +} + +u32 sub_804FB5C(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = MKSTATE_LAUNCH_ROCKET_2; + result = FALSE; + } + + return result; +} + +u32 sub_804FB7C(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = sub_804ED80(boss, p); + result = FALSE; + } + + return result; +} + +u32 sub_804FBA8(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->lives == boss->unk96) { + sub_804EE20(boss); + } + + if (boss->flags88 & 1) { + boss->state2 = MKSTATE_HIT_2; + result = FALSE; + } + + return result; +} + +u32 sub_804FBE4(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (boss->lives == boss->unk96) { + sub_804EE20(boss); + } + + if (boss->s.frameFlags & 0x4000) { + boss->state2 = sub_804ED80(boss, p); + result = FALSE; + } + + return result; +} + +u32 sub_804FC28(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + sub_804EE20(boss); + + if (boss->flags88 & 4) { + boss->unk7C = -boss->unk7C; + } + if (boss->flags88 & 8) { + boss->unk7C = -boss->unk7C; + } + if (boss->flags88 & 1) { + boss->state2 = MKSTATE_DEFEATED_2; + result = FALSE; + } + return result; +} + +u32 sub_804FC78(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + u16 *temp_r0; + s16 temp_r1; + + sub_804EE20(boss); + + temp_r1 = boss->unk84; + boss->unk84--; + + if (temp_r1 <= 0) { + boss->state2 = MKSTATE_DEFEATED_3; + result = FALSE; + } + + return result; +} + +u32 sub_804FCA4(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + if (sub_804EE20(boss)) { + boss->state2 = MKSTATE_EGGMOBILE; + result = FALSE; + + CreateMechaKnucklesParts(boss, 0); + CreateMechaKnucklesParts(boss, 1); + CreateMechaKnucklesParts(boss, 2); + CreateMechaKnucklesParts(boss, 3); + CreateMechaKnucklesParts(boss, 4); +#ifdef BUG_FIX + // One additional leg can get spawned but isn't in the original. + // It might have introduced a graphical bug or was simply forgotten. + CreateMechaKnucklesParts(boss, 5); +#endif + } + return result; +} + +u32 sub_804FCEC(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (gCamera.minX < (gCamera.maxX - DISPLAY_WIDTH)) { + gCamera.minX++; + } + + if (gCamera.minX < gCamera.x) { + gCamera.minX = gCamera.x; + } + + if (((boss->spawnX + I(boss->qUnk74) + 0x20) <= (gCamera.x + DISPLAY_WIDTH)) + && ((s32)gCamera.minX >= (s32)(gCamera.maxX - DISPLAY_WIDTH))) { + boss->state2 = MKSTATE_EGGMOBILE_2; + result = FALSE; + } + + return result; +} + +u32 sub_804FD54(MechaKnuckles *boss, Player *p) +{ + s32 result = TRUE; + + if (gCamera.minX < (gCamera.maxX - DISPLAY_WIDTH)) { + gCamera.minX++; + } + + if (gCamera.minX < gCamera.x) { + gCamera.minX = gCamera.x; + } + + if (boss->spawnX + I(boss->qUnk74) >= (gCamera.maxX + 32)) { + boss->flags88 &= ~0x60; + TaskDestroy(gCurTask); + } + + return result; +} + +void TaskDestructor_MechaKnuckles(struct Task *t) +{ + MechaKnuckles *boss = TASK_DATA(t); + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void sub_804FDD4(MechaKnuckles *boss) +{ + s32 temp_r0; + s32 temp_r0_2; + s32 var_r2; + s32 var_r3; + + var_r2 = boss->qUnk74; + var_r3 = boss->flags88; + var_r3 &= ~(0x4 | 0x8); + temp_r0 = (I(boss->qUnk74) - boss->unk98) - 6; + + if (temp_r0 < 0) { + var_r2 -= Q(temp_r0); + var_r3 |= 4; + } + + temp_r0 = (I(var_r2) + boss->unk98) - 234; + if (temp_r0 > 0) { + var_r2 -= Q(temp_r0); + var_r3 |= 8; + } + + boss->qUnk74 = var_r2; + boss->flags88 = var_r3; +} + +void TaskDestructor_MechaKnuckles_Rocket(struct Task *t) +{ + MechaKnucklesRocket *rocket = TASK_DATA(t); + Sprite *s = &rocket->s; + VramFree(s->graphics.dest); + m4aSongNumStop(SE_200); +} + +void TaskDestructor_MechaKnuckles_Parts(struct Task *t) +{ + MechaKnucklesParts *parts = TASK_DATA(t); + Sprite *s = &parts->s; + VramFree(s->graphics.dest); +} diff --git a/sa1/src/game/enemies/boss_6_egg_snake.c b/sa1/src/game/enemies/boss_6_egg_snake.c new file mode 100644 index 0000000000..ce603288c7 --- /dev/null +++ b/sa1/src/game/enemies/boss_6_egg_snake.c @@ -0,0 +1,1594 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" // CreatePreBossCameraPan +#include "game/nuts_and_bolts_task.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/results.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" + +#define NUM_SEGMENTS 9 + +typedef struct EggSnakeSegment { + /* 0x00 */ Sprite s; + /* 0x30 */ u16 unk30; + /* 0x32 */ u16 unk32; + /* 0x34 */ u8 filler34[0x4]; + /* 0x38 */ s32 unk38; + /* 0x3C */ s32 unk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ s16 unk48; + /* 0x4A */ u8 filler4A[0x8]; + /* 0x52 */ u8 unk52; +} EggSnakeSegment; + +typedef struct EggSnakeSegmentManager { + /* 0x00 */ Sprite s; + /* 0x30 */ struct Task *tasks[NUM_SEGMENTS]; + /* 0x54 */ u8 unk54; + /* 0x55 */ u8 unk55; + /* 0x56 */ u8 unk56; + /* 0x57 */ u8 unk57; + /* 0x58 */ u8 unk58; + /* 0x58 */ u8 unk59; + /* 0x58 */ s16 unk5A; + s16 unk5C; + s16 unk5E; +} EggSnakeSegmentManager; /* 0x60 */ + +typedef struct EggSnakeProjectile { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ u16 unk60; + /* 0x62 */ u16 unk62; + /* 0x64 */ s32 unk64; + /* 0x68 */ s32 unk68; + /* 0x6C */ s16 unk6C; + /* 0x6E */ s16 unk6E; + /* 0x70 */ CamCoord originX; + /* 0x72 */ CamCoord originY; +} EggSnakeProjectile; /* 0x74 */ + +typedef struct EggSnake { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ Sprite s2; + /* 0x74 */ struct Task *t; // EggSnakeSegmentManager * + /* 0x78 */ s32 qUnk78; + /* 0x7C */ s32 qUnk7C; + /* 0x80 */ s32 unk80; + /* 0x84 */ s32 unk84; + /* 0x88 */ u8 filler88[0x8]; + /* 0x90 */ s16 unk90; + /* 0x92 */ s16 unk92; + /* 0x92 */ s16 unk94; + /* 0x92 */ s16 unk96; + /* 0x98 */ u16 unk98; + /* 0x9A */ s8 unk9A; + /* 0x9B */ s8 unk9B; + /* 0x9C */ s8 unk9C; + /* 0x9E */ s16 qUnk9E; + /* 0xA0 */ s16 unkA0; + /* 0xA2 */ s16 unkA2; + /* 0xA4 */ s16 unkA4; + /* 0xA6 */ s16 unkA6; + /* 0xA8 */ u8 unkA8; + /* 0xA9 */ u8 unkA9; + /* 0xAA */ u8 unkAA; +} EggSnake; /* 0xAC */ + +// static memory at 0x03005860 +typedef struct PlayerSpeedState { + /* 0x00 */ s32 qWorldX; + /* 0x04 */ s32 qWorldY; + /* 0x08 */ s16 qSpeedAirX; + /* 0x0A */ s16 qSpeedAirY; + /* 0x0C */ u32 moveState; +} PlayerSpeedState; + +PlayerSpeedState sPlayerSpeedState; // TODO: static + +void Task_EggSnakeInit(void); +void sub_803170C(void); +void sub_8031D88(s16 worldX, s16 worldY); +void sub_8031ED0(void); +void sub_8031F74(void); +void Task_8032370(void); +void sub_80327C4(void); +void Task_8032AF8(void); +void sub_8032D44(void); +void sub_8032F58(void); +void sub_803330C(void); +void CreateProjectile(void); // TODO: static +void sub_8033878(void); +void Task_8033480(void); +void Task_8033730(void); +void Task_8033924(void); +void Task_8034098(void); // : EggSnakeSegment +void sub_80339BC(EggSnakeSegmentManager *mgr); +void Task_8033AA0(void); +void TaskDestructor_8034208(struct Task *t); +void TaskDestructor_8034224(struct Task *t); +void TaskDestructor_8034238(struct Task *t); + +s16 gUnknown_03005870[NUM_SEGMENTS]; +s16 gUnknown_03005890[NUM_SEGMENTS]; +extern const s16 gUnknown_084ACEE4[NUM_SEGMENTS]; +extern const s16 gUnknown_084ACEF6[NUM_SEGMENTS]; +extern const u16 gUnknown_084ACF08[10]; + +static inline void sub_803424C_inline() +{ + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + s2->x = s->x; + s2->y = s->y; +} + +static inline void sub_803426C__inline(CamCoord worldX, CamCoord worldY) +{ + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + MapEntity *me = boss->base.me; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +void sub_8031D88(s16 worldX, s16 worldY) +{ + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2; + enum EHit collPlayer; + enum EHit collPartner; + + s->frameFlags &= 0xFFFFFE7F; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (boss->unk9C == 0) { + collPlayer = Coll_Player_Bosses_2_6(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == 2) { + collPartner = Coll_Player_Bosses_2_6(s, worldX, worldY, &gPartner); + } else { + collPartner = HIT_NONE; + } + s2 = &boss->s2; + + if ((collPlayer == HIT_ENEMY) || (collPartner == HIT_ENEMY)) { + boss->unk9A++; + boss->unk9C = 0x20; + + if (s->variant == 2) { + s2->variant = 2; + } + + if (s->variant == 3) { + s2->variant = 5; + } + + s2->frameFlags &= 0xFFFFBFFF; + m4aSongNumStart(0x8FU); + } else if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + if (s->variant == 2) { + s2->variant = 1; + } + if (s->variant == 3) { + s2->variant = 4; + } + s2->frameFlags &= 0xFFFFBFFF; + } + } +} + +void sub_8031ED0(void) +{ + s8 temp_r1; + u8 *temp_r2; + + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if (boss->unk9C != 0) { + if ((--boss->unk9C > 0x10) && !(boss->unk9C & 2) && PLAYER_IS_ALIVE) { + s->frameFlags |= 0x100; + gDispCnt |= 0x8000; + gWinRegs[5] = 0x3F1F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + } + DisplaySprite(s); + if ((u8)boss->unkAA != 0xFF) { + DisplaySprite(s2); + } +} + +void sub_8031F74() +{ + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if ((s2->variant != 0) && (s2->variant != 3) && (s2->frameFlags & 0x4000)) { + if (s->variant == 2) { + s2->variant = 0; + } + + if (s->variant == 3) { + s2->variant = 3; + } + s2->prevVariant = 0xFF; + } +} + +// (96.34%) https://decomp.me/scratch/ULduN +NONMATCH("asm/non_matching/game/enemies/boss_6__CreateEntity_EggSnake.inc", + void CreateEntity_EggSnake(MapEntity *me, u16 regionX, u16 regionY, u8 id)) +{ + EggSnake *boss; + Sprite *s; + Sprite *s2; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + boss = TASK_DATA(TaskCreate(Task_EggSnakeInit, sizeof(EggSnake), 0x2100U, 0U, TaskDestructor_8034208)); + s = &boss->s; + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + boss->unk98 = 0x78; + boss->unk9C = 0; + boss->unkA9 = 0; + boss->unkA8 = 0; + boss->qUnk78 = 0x1000; + boss->qUnk7C = 0; + boss->unk80 = 0; + boss->unk84 = 0; + boss->unkA0 = 0; + boss->unkA2 = 0x200; + boss->unkA4 = 0; + boss->unkAA = 0; + if (LOADED_SAVE->difficultyLevel != 0) { + boss->unk9A = 2; + } else { + boss->unk9A = 0; + } + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + s->graphics.dest = VramMalloc(0x30U); + s->oamFlags = SPRITE_OAM_ORDER(22); + s->graphics.size = 0; + s->graphics.anim = 0x296; + s->variant = 3; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s2 = &boss->s2; + s2->x = TO_WORLD_POS(me->x, regionX); + s2->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + s2->graphics.dest = VramMalloc(8); + s2->oamFlags = SPRITE_OAM_ORDER(21); + s2->graphics.size = 0; + s2->graphics.anim = 0x294; + s2->variant = 3; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = 0x10; + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0x2000; +#if PORTABLE && (DISPLAY_WIDTH > 320) + Bosses_SetCamBounds(s->y - (DISPLAY_HEIGHT - 32), s->y + 32, s->x - DISPLAY_CENTER_X, s->x + DISPLAY_CENTER_X); +#else + Bosses_SetCamBounds(s->y - (DISPLAY_HEIGHT - 32), s->y + 32, s->x - 144, s->x + 176); +#endif +} +END_NONMATCH + +// (98.79%) https://decomp.me/scratch/34ZiA +NONMATCH("asm/non_matching/game/enemies/boss_6__Task_EggSnakeInit.inc", void Task_EggSnakeInit()) +{ + MapEntity *me; + Sprite *s2; + s32 var_r2; + s16 temp_r2; + s32 temp_r0_2; + s32 temp_r0_4; + s32 temp_r0_5; + s32 temp_r0_6; + Sprite *s; + s32 temp_r2_2; + u16 *temp_r1_2; + u16 *temp_r1_3; + u16 *temp_r2_3; + u16 temp_r0; + u8 *temp_r3; + u8 temp_r0_3; + CamCoord worldX, worldY; + + EggSnake *boss = TASK_DATA(gCurTask); + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + + if ((boss->unk98 == 0x78) && (boss->unkA9 == 0)) { + sub_8033878(); + sub_803330C(); + } + var_r2 = gSineTable[boss->unkA0]; + var_r2 = (var_r2 * 15) >> 0xB; + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk78) + var_r2; + temp_r2 = (var_r2 + 0x90); + if (temp_r2 >= 0) { + var_r2 = temp_r2 + 0x1F; + } else { + var_r2 = (s16)temp_r2; + } + + worldY = gUnknown_03005870[var_r2 >>= 5]; + worldY += TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk7C); + + sub_803426C__inline(worldX, worldY); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + // inline + sub_803424C_inline(); + + sub_8031ED0(); + + switch (boss->unkA9) { + case 0: + if (--boss->unk98 == 0) { + gMusicManagerState.unk1 = 0x13; + boss->unk98 = 0x3C; + boss->unkA9++; + return; + } + return; + case 1: + if (--boss->unk98 == 0) { + s2->variant = 4; + boss->unkA9++; + } + break; + case 2: + if (s2->frameFlags & 0x4000) { + s2->variant = 3; + boss->unk98 = 0x3C; + boss->unkA9++; + } + break; + case 3: + if (--boss->unk98 == 0) { + boss->unkA8 = 0xFF; + boss->unkA9 = 0; + gCurTask->main = Task_8032370; + } + break; + } +} +END_NONMATCH + +// (99.05%) https://decomp.me/scratch/wPkmW +NONMATCH("asm/non_matching/game/enemies/boss_6__Task_8032370.inc", void Task_8032370()) +{ + EggSnakeSegmentManager *strc60; + s16 temp_r2_3; + s16 temp_r3_2; + CamCoord worldX, worldY; + s32 var_r0; +#ifndef NON_MATCHING + register s32 var_r1 asm("r1"); + register s32 var_r3 asm("r3"); + register s32 var_r4 asm("r4"); +#else + s32 var_r1; + s32 var_r3; + s32 var_r4; +#endif + s32 var_r4_3; + s32 temp_r7; + s16 *ptrA; + + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + + strc60 = TASK_DATA(boss->t); + boss->unkA2 += boss->unkA4; + boss->unkA0 = (boss->unkA0 - I(boss->unkA2)); + boss->unkA0 &= 0x3FF; + temp_r7 = gSineTable[boss->unkA0]; + temp_r7 = (s32)(temp_r7 * 15) >> 11; + worldX = (TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk78) + temp_r7); + temp_r3_2 = temp_r7 + 0x80; + var_r1 = temp_r3_2; + if (temp_r3_2 < 0) { + var_r1 += 0x1F; + } + var_r1 = var_r1 >> 5; + var_r4 = (u8)var_r1; + var_r1 = temp_r3_2 - (var_r1 << 5); + ptrA = &gUnknown_03005870[var_r4]; + var_r0 = gUnknown_03005870[var_r4 + 1]; + var_r0 -= (var_r3 = *ptrA); + var_r1 = (s16)var_r1; + var_r0 *= var_r1; + if (var_r0 < 0) { + var_r0 += 0x1F; + } + temp_r2_3 = var_r3 + (var_r0 >> 5); + worldY = temp_r2_3 + (TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk7C)); + boss->unk90 = temp_r7; + boss->unk92 = temp_r2_3; + sub_8031D88(worldX, worldY); + if (boss->unk9A > 7) { + sub_80327C4(); + } else { + + sub_803426C__inline(worldX, worldY); + + sub_8031F74(); + UpdateSpriteAnimation(s); + if (boss->unkAA == 0) { + UpdateSpriteAnimation(s2); + } + + sub_803424C_inline(); + + sub_8031ED0(); + + switch (boss->unkA9) { + case 0: + if (boss->unkA2 < 0x200) { + boss->unkA2 = 0x200; + boss->unkA4 = 0; + } + var_r0 = temp_r7 + 0x90; + if (var_r0 < 0) { + var_r0 += 0x1F; + } + var_r4_3 = (u8)(var_r0 >> 5); + if ((var_r4_3 != 0) && (var_r4_3 != 8) && (strc60->unk55 != 0) && (strc60->unk55 != 8) + && ((s8)var_r4_3 >= ((s8)(strc60->unk55 - 2))) && ((s8)var_r4_3 <= (s8)(strc60->unk55 + 2)) && (strc60->unk57 != 0)) { + boss->unkA2 = 0x200; + boss->unkA4 = 0; + boss->unkA9++; + } + break; + case 1: + if (s->variant != 1) { + if (strc60->unk5C >= 0) { + return; + } + s->variant = 1; + s->prevVariant = -1; + boss->unkAA = -1; + return; + } + if (!(s->frameFlags & 0x4000)) { + return; + } + s->variant = 2; + s2->variant = 0; + s->prevVariant = -1; + boss->unkAA = 0; + boss->unk98 = gUnknown_084ACF08[(PseudoRandom32() + gStageTime) & 3]; + boss->unk9B = boss->unk9A; + boss->unkA9++; + break; + case 2: + if (boss->unk9C != 0) { + if (boss->unk9C > 16) { + return; + } + s->variant = 0; + s->prevVariant = -1; + boss->unkAA = -1; + boss->unkA9++; + break; + } + + if (--boss->unk98 == 0) { + s->variant = 0; + s->prevVariant = -1; + boss->unkAA = -1; + boss->unkA9++; + } + break; + case 3: + if (s->frameFlags & 0x4000) { + s->variant = 3; + s2->variant = 3; + s->prevVariant = -1; + boss->unkAA = 0; + boss->unkA4 = 0x40; + boss->unkA6 = gUnknown_084ACEE4[boss->unk9A]; + boss->unk98 = 0x78; + if (boss->unk9A == boss->unk9B) { + boss->unkA9 += 2; + } else { + boss->unkA9++; + } + } + break; + case 4: + if (boss->unkA2 >= boss->unkA6) { + boss->unkA2 = boss->unkA6; + boss->unkA4 = 0; + } + + if (--boss->unk98 == 0) { + boss->unkA4 = 0xFFC0; + boss->unkA9 = 0; + } + break; + case 5: + if (boss->unkA2 >= 0x200) { + boss->unkA2 = 0x200; + boss->unkA4 = 0; + boss->unkA9 = 0; + } + break; + } + } +} +END_NONMATCH + +void sub_80327C4() +{ + s16 var_r0; + s32 temp_r0; + s32 temp_r3; + s32 temp_r4; + s32 temp_r5; + s32 temp_r5_2; + s32 temp_r6; + s32 temp_r6_2; + + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Strc_sub_80168F0 *proj; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + boss->qUnk78 += Q(boss->unk90); + boss->qUnk7C += Q(boss->unk92); + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk78); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk7C); + boss->s2.variant = 2; + boss->qUnk9E = -0x80; + m4aSongNumStart(0x90U); + + { + proj = TASK_DATA(sub_80168F0(worldX, worldY, 4U, SA1_ANIM_BOSS_6_SPIKE, 0U)); + proj->qUnk46 = -Q(2); + proj->unk48 = 0; + proj->unk42 = 0x100; + if (s->frameFlags & 0x400) { + proj->transform.qScaleX = -0x100; + proj->qUnk44 = 0x100; + } else { + proj->qUnk44 = -0x100; + } + proj->unk40 = 0x3C; + } + + { + proj = TASK_DATA(sub_80168F0(worldX + 16, worldY + 16, 4U, SA1_ANIM_BOSS_6_SPIKE, 0U)); + proj->qUnk46 = -Q(2); + proj->unk48 = 0; + proj->unk42 = 0x200; + if (s->frameFlags & 0x400) { + proj->transform.qScaleX = -0x100; + proj->qUnk44 = 0x400; + } else { + proj->qUnk44 = -0x400; + } + + proj->unk40 = 0x3C; + } + + { + proj = TASK_DATA(sub_80168F0(worldX - 16, worldY + 16, 4U, SA1_ANIM_BOSS_6_SPIKE, 0U)); + proj->qUnk46 = -Q(2); + proj->unk48 = 0; + proj->unk42 = 0x300; + proj->s.frameFlags |= 0x400; + if (s->frameFlags & 0x400) { + proj->transform.qScaleX = -0x100; + proj->qUnk44 = -0x200; + } else { + proj->qUnk44 = 0x200; + } + proj->unk40 = 0x3C; + } + + { + proj = TASK_DATA(sub_80168F0(worldX - 16, worldY + 16, 4U, SA1_ANIM_BOSS_6_SPIKE, 0U)); + proj->qUnk46 = -Q(2); + proj->unk48 = 0; + proj->unk42 = 0x380; + proj->s.frameFlags |= 0x400; + if (s->frameFlags & 0x400) { + proj->transform.qScaleX = -0x100; + proj->qUnk44 = -0x80; + } else { + proj->qUnk44 = +0x80; + } + + proj->unk40 = 0x3C; + } + + gCamera.minX = gCamera.x; + gCamera.maxX = gCamera.x + DISPLAY_WIDTH; + CreatePreBossCameraPan(gCamera.maxY - DISPLAY_HEIGHT, gCamera.maxY + DISPLAY_HEIGHT); + gStageFlags |= 3; + + INCREMENT_SCORE_A(1000); + + Task_8032AF8(); + gCurTask->main = Task_8032AF8; +} + +void Task_8032AF8(void) +{ + s32 res; + + EggSnake *boss = TASK_DATA(gCurTask); + SpriteBase *base = &boss->base; + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + MapEntity *me = boss->base.me; + CamCoord worldX, worldY; + + boss->qUnk9E += 0x5; + boss->qUnk7C += boss->qUnk9E; + + worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk78); + worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk7C); + + res = sa2__sub_801F100(worldY, worldX, 1, 8, &sa2__sub_801EC3C); + + if (res < 0) { + boss->unk98 = 60; + gCurTask->main = sub_8032D44; + return; + } + + s->frameFlags &= ~0x180; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + boss->unk98++; + if ((boss->unk98 & 0x7) == 0) { + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], + gUnknown_080BB42C[rndIndex], TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY + 32); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(17); + bolts->qUnk3E = Q(5. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_803424C_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void sub_8032D44(void) +{ + MapEntity *me; + Sprite *s; + Sprite *s2; + s32 temp_r0; + s32 temp_r0_3; + s32 s2_2; + u16 *temp_r1; + u16 temp_r0_2; + + EggSnake *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + me = boss->base.me; + if (--boss->unk98 == 0) { + EggSnakeSegmentManager *strc60 = TASK_DATA(boss->t); + strc60->unk58 = -1; + gPlayer.moveState &= ~8; + gCamera.maxY = 2208 + DISPLAY_HEIGHT; + gMusicManagerState.unk1 = 0x33; + boss->unk94 = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk78); + boss->unk96 = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk7C); + boss->qUnk78 = 0; + boss->qUnk7C = 0; + boss->unk80 = 0; + boss->unk84 = -0x80; + boss->unkA9 = 0; + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGMOBILE); + s->oamFlags = 0x4C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_EGGMOBILE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = (s16)0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGMAN); + s2->oamFlags = 0x480; + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_EGGMAN; + s2->variant = 4; + s2->animCursor = 0; + s2->qAnimDelay = (s16)0; + s2->prevVariant = -1; + s2->animSpeed = 0x10; + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0x2000; + + gCurTask->main = sub_8032F58; + } else { + CamCoord worldX = TO_WORLD_POS(boss->base.meX, boss->base.regionX) + I(boss->qUnk78); + CamCoord worldY = TO_WORLD_POS(me->y, boss->base.regionY) + I(boss->qUnk7C); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_803424C_inline(); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + } +} + +void sub_8032F58(void) +{ + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + CamCoord worldX, worldY; + + boss->qUnk78 += boss->unk80; + boss->qUnk7C += boss->unk84; + worldX = I(boss->qUnk78) + boss->unk94; + worldY = I(boss->qUnk7C) + boss->unk96; + + if (boss->unkA9 <= 4U) { + sub_803426C__inline(worldX, worldY); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_803424C_inline(); + DisplaySprite(s); + DisplaySprite(s2); + } + + switch (boss->unkA9) { + case 0: + if (!(0xA & gPlayer.moveState)) { + if (!(gPlayer.moveState & 0x200000)) { + gPlayer.qSpeedAirX = Q(0); + gPlayer.qSpeedAirY = Q(0); + gPlayer.qSpeedGround = Q(0); + gPlayer.moveState |= 0x200000; + gPlayer.heldInput = 0; + + if (worldX > I(gPlayer.qWorldX)) { + gPlayer.heldInput = DPAD_RIGHT; + } else { + gPlayer.heldInput = DPAD_LEFT; + } + + gCamera.sa2__unk8 = 0; + gCamera.maxX = gCamera.x + 480; + } else { + gPlayer.heldInput = 0; + } + } + + if (boss->qUnk7C < -Q(90)) { + boss->qUnk7C = -Q(90); + boss->unk84 = 0; + } + + if ((boss->unk84 == 0) && (gPlayer.moveState & 0x200000)) { + if (worldX > I(gPlayer.qWorldX)) { + boss->unkA9 += 2; + s2->variant = 7; + s2->prevVariant = 0xFF; + } else { + boss->unkA9++; + s->variant = 1; + s2->variant = 9; + s->prevVariant = -1; + s2->prevVariant = -1; + } + } + break; + + case 1: + if (s2->frameFlags & 0x4000) { + boss->unkA9++; + s->variant = 0; + s2->variant = 7; + s->frameFlags |= 0x400; + s2->frameFlags |= 0x400; + s->prevVariant = -1; + s2->prevVariant = -1; + } + break; + + case 2: + if (0x4000 & s2->frameFlags) { + if (s2->frameFlags & 0x400) { + boss->unkA9 += 2; + s2->variant = 6; + s2->prevVariant = -1; + boss->unk80 = 0x280; + } else { + boss->unkA9++; + s->variant = 1; + s2->variant = 9; + s->prevVariant = -1; + s2->prevVariant = -1; + } + } + break; + + case 3: + if (s2->frameFlags & 0x4000) { + boss->unkA9++; + s->variant = 0; + s2->variant = 6; + s->frameFlags |= 0x400; + s2->frameFlags |= 0x400; + s->prevVariant = -1; + s2->prevVariant = -1; + s2->prevVariant = -1; + boss->unk80 = 0x280; + } + break; + + case 4: + if (I(gPlayer.qWorldX) < (worldX - 0x60)) { + gPlayer.heldInput = DPAD_RIGHT; + } + + if ((float)I(gPlayer.qWorldX) > ((float)gCamera.x + (float)(DISPLAY_WIDTH + 120))) { + gPlayer.qSpeedAirX = 0; + gPlayer.qSpeedAirY = 0; + gPlayer.qSpeedGround = 0; + gPlayer.heldInput = 0; + } + + if ((float)(worldX - gCamera.x) > (float)(DISPLAY_WIDTH + 120)) { + boss->unkA9++; + boss->unk98 = 0xB4; + CreateStageResults(gRingCount, gCourseTime); + } + break; + + case 5: + if (I(gPlayer.qWorldX) < (worldX - 96)) { + gPlayer.heldInput = DPAD_RIGHT; + } + + if ((float)I(gPlayer.qWorldX) > ((float)gCamera.x + (float)(DISPLAY_WIDTH + 120))) { + gPlayer.qSpeedAirX = 0; + gPlayer.qSpeedAirY = 0; + gPlayer.qSpeedGround = 0; + gPlayer.heldInput = 0; + } + + if (--boss->unk98 == 0) { + TaskDestroy(gCurTask); + } + break; + } +} + +void sub_803330C() +{ + EggSnake *boss = TASK_DATA(gCurTask); // NOTE: Unused, but needed for matching! + struct Task *t = TaskCreate(Task_8033480, sizeof(EggSnakeProjectile), 0x2200U, 0U, TaskDestructor_8034224); + EggSnakeProjectile *proj = TASK_DATA(t); + Sprite *s; + Sprite *s2; + void *vram; + + proj->unk60 = 0x258; + proj->unk62 = 0; + s = &proj->s; + + s->x = 0; + s->y = 0; + s->graphics.dest = VramMalloc(6U); + s->oamFlags = SPRITE_OAM_ORDER(21); + s->graphics.size = 0; + s->graphics.anim = 0x297; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + vram = s->graphics.dest; + s2 = &proj->s2; + s2->x = 0; + s2->y = 0; + s2->graphics.dest = vram; + s2->oamFlags = SPRITE_OAM_ORDER(21); + s2->graphics.size = 0; + s2->graphics.anim = 0x297; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = 0x10; + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0xC2000; +} + +void sub_803341C(void) +{ + EggSnakeProjectile *proj = TASK_DATA(gCurTask); + Sprite *sprStrc = &proj->s; + EggSnake *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s; + s16 x, y; + + x = s2->x; + y = s2->y; + sprStrc->x = x; + sprStrc->y = y; + UpdateSpriteAnimation(sprStrc); + DisplaySprite(sprStrc); + + s2 = &proj->s2; + s2->x = x; + s2->y = y; + SPRITE_FLAG_SET(s2, X_FLIP); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); +} + +// TODO: Match without goto +void Task_8033480() +{ + Sprite *s; + Sprite *s2; + s16 *temp_r1_2; + s16 *temp_r2; + s16 *temp_r7; + s16 temp_r0_2; + s8 *temp_r1; + u16 temp_r0; + u8 temp_r0_3; + + EggSnakeProjectile *proj = TASK_DATA(gCurTask); + EggSnake *boss = TASK_DATA(TASK_PARENT(gCurTask)); + + s = &proj->s; + s2 = &proj->s2; + temp_r1 = &boss->unk9A; + if (boss->unk9A > 7) { + TaskDestroy(gCurTask); + return; + } + if (boss->unkA8 != 0) { + if (proj->unk60 != 0) { + if (--proj->unk60 == 0) { + s->frameFlags &= 0xFFFFF7FF; + s2->frameFlags &= 0xFFFFF7FF; + temp_r0_3 = boss->s.variant; + if (temp_r0_3 != 2) { + if (temp_r0_3 == 3) { + s->frameFlags |= 0x800; + s2->frameFlags |= 0x800; + lbl: + s->prevVariant = 0xFF; + proj->s2.prevVariant = -1; + s->frameFlags &= 0xFFFFBFFF; + s2->frameFlags &= 0xFFFFBFFF; + proj->unk62++; + CreateProjectile(); + } else { + proj->unk60 = 1; + } + } else { + goto lbl; + } + } + } else { + if ((s->frameFlags & 0x4000) || (boss->s.variant != 2 && boss->s.variant != 3)) { + if (proj->unk62 != 3) { + proj->unk60 = 0x3C; + } else { + proj->unk60 = gUnknown_084ACEF6[boss->unk9A]; + proj->unk62 = 0; + } + } else { + sub_803341C(); + } + } + } +} + +void CreateProjectile() +{ + s16 angle; + s16 temp_r1; + s16 temp_r3; + + EggSnake *boss; + EggSnakeProjectile *newProj = TASK_DATA(gCurTask); + MapEntity *me; + + newProj = TASK_DATA(TaskCreate(Task_8033730, sizeof(EggSnakeProjectile), 0x2300U, 0U, TaskDestructor_8034224)); + boss = TASK_DATA(TASK_PARENT(gCurTask)); + me = boss->base.me; + newProj->originX = TO_WORLD_POS(boss->base.meX, boss->base.regionX); + newProj->originY = TO_WORLD_POS(me->y, boss->base.regionY); + newProj->unk64 = Q(boss->unk90 + 16); + newProj->unk68 = Q(boss->unk92); + temp_r3 = I(gPlayer.qWorldX) - (newProj->originX + I(newProj->unk64)); + temp_r1 = I(gPlayer.qWorldY) - (newProj->originY + I(newProj->unk68)); + angle = sa2__sub_8004418(temp_r1 / 2, temp_r3 / 2); + newProj->unk6C = COS_24_8(angle); + newProj->unk6E = SIN_24_8(angle); + newProj->s.x = 0; + newProj->s.y = 0; + newProj->s.graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_6_PROJ); + newProj->s.oamFlags = 0x3C0; + newProj->s.graphics.size = 0; + newProj->s.graphics.anim = SA1_ANIM_BOSS_6_PROJ; + newProj->s.variant = 0; + newProj->s.animCursor = 0; + newProj->s.qAnimDelay = 0; + newProj->s.prevVariant = 0xFF; + newProj->s.animSpeed = 0x10; + newProj->s.palId = 0; + newProj->s.hitboxes[0].index = -1; + newProj->s.frameFlags = 0x2000; +} + +void Task_8033730() +{ + EggSnakeProjectile *proj = TASK_DATA(gCurTask); + EggSnakeProjectile *prevProj = TASK_DATA(TASK_PARENT(gCurTask)); + EggSnake *boss = TASK_DATA(TASK_PARENT(TASK_PARENT(gCurTask))); + Sprite *s = &proj->s; + CamCoord worldX, worldY; + s32 bossAnim; + + proj->unk64 += proj->unk6C; + proj->unk68 += proj->unk6E; + worldX = proj->originX + I(proj->unk64); + worldY = proj->originY + I(proj->unk68); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((s->y < -32) || (s->y > (DISPLAY_HEIGHT + 16))) { + if (proj->unk6C >= 0) { + if (s->x > (DISPLAY_WIDTH + 16)) { + TaskDestroy(gCurTask); + return; + } + } else if (s->x < -32) { + TaskDestroy(gCurTask); + return; + } + } + + if (boss->unk9A <= 7) { + if (Coll_Player_Projectile(s, worldX, worldY) != 0) { + bossAnim = boss->s.graphics.anim; + if (bossAnim == SA1_ANIM_BOSS_6_BODY) { + if (boss->s.variant == 2) { + boss->s2.variant = 1; + } + if ((boss->s.graphics.anim == bossAnim) && (boss->s.variant == 3)) { + boss->s2.variant = 4; + } + } + } + } else { + sub_8017540(Q(worldX), Q(worldY)); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void sub_8033878() +{ + EggSnake *boss = TASK_DATA(gCurTask); + struct Task *t = TaskCreate(Task_8033924, sizeof(EggSnakeSegmentManager), 0x2000U, 0U, TaskDestructor_8034238); + EggSnakeSegmentManager *mgr; + Sprite *s; + Sprite *s2; + + boss->t = t; + + mgr = TASK_DATA(t); + s = &mgr->s; + + s->x = 0; + s->y = 0; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_6_SEGMENT); + s->oamFlags = 0x5C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_6_SEGMENT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; +} + +void Task_8033924() +{ + EggSnakeSegmentManager *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->s; + mgr->unk54 = 0; + mgr->unk57 = 0; + mgr->unk55 = 0; + mgr->unk56 = 0; + mgr->unk58 = 0; + + sPlayerSpeedState.qWorldX = gPlayer.qWorldX; + sPlayerSpeedState.qWorldY = gPlayer.qWorldY; + sPlayerSpeedState.qSpeedAirX = gPlayer.qSpeedAirX; + sPlayerSpeedState.qSpeedAirY = gPlayer.qSpeedAirY; + sPlayerSpeedState.moveState = gPlayer.moveState; + + DmaFill16(3, 0, gUnknown_03005870, sizeof(gUnknown_03005870)); + UpdateSpriteAnimation(s); + gCurTask->main = Task_8033AA0; + sub_80339BC(mgr); +} + +void sub_80339BC(EggSnakeSegmentManager *mgr) +{ + EggSnakeSegment *segment; + u8 i; + + EggSnake *boss = TASK_DATA(TASK_PARENT(gCurTask)); + MapEntity *me = boss->base.me; + Sprite *s = &mgr->s; + + for (i = 0; i < NUM_SEGMENTS; i++) { + mgr->tasks[i] = TaskCreate(Task_8034098, sizeof(EggSnakeSegment), (i + 0x2001), 0U, NULL); + segment = TASK_DATA(mgr->tasks[i]); + segment->unk30 = TO_WORLD_POS(boss->base.meX, boss->base.regionX); + segment->unk32 = TO_WORLD_POS(me->y, boss->base.regionY); + segment->unk38 = (i << 0xD) + 0xFFFF9000; + segment->unk3C = 0; + segment->unk40 = 0; + segment->unk44 = 0; + segment->unk48 = 0; + segment->unk52 = i; + segment->s.hitboxes[0].index = s->hitboxes[0].index; + segment->s.hitboxes[0].b.left = s->hitboxes[0].b.left; + segment->s.hitboxes[0].b.top = s->hitboxes[0].b.top; + segment->s.hitboxes[0].b.right = s->hitboxes[0].b.right; + segment->s.hitboxes[0].b.bottom = s->hitboxes[0].b.bottom; + } +} + +// NOTE: Logic not accurate. When jumping onto segments, all speed gets lost -> softlock +// (88.12%) https://decomp.me/scratch/qFcCe +NONMATCH("asm/non_matching/game/enemies/boss_6__Task_8033AA0.inc", void Task_8033AA0(void)) +{ + u8 sp0; + s32 sp4; + EggSnakeSegmentManager *mgr; + EggSnakeSegment *segment; + s16 *temp_r2_7; + s16 *temp_r4; + s16 temp_r0; + s16 temp_r1_13; + s16 temp_r1_7; + s16 temp_r2_2; + s16 var_r6; + Sprite *sprSegment; + s8 temp_r0_12; + s8 temp_r0_13; + s8 temp_r0_4; + s8 temp_r0_7; + s8 temp_r1_4; + s8 temp_r1_11; + u8 temp_r0_3; + u8 temp_r4_4; + u8 var_r1_2; + u8 var_r1_3; + s8 var_r3_2; + u8 i; + u8 standOnIndex; + CamCoord worldX, worldY; + + standOnIndex = 0; + mgr = TASK_DATA(gCurTask); + sp0 = 0; + + DmaCopy16(3, gUnknown_03005870, gUnknown_03005890, sizeof(gUnknown_03005890)); + mgr->unk5E++; + if (mgr->unk58 == 0) { + for (i = 0; i < NUM_SEGMENTS; i++) { + segment = TASK_DATA(mgr->tasks[i]); + sprSegment = &segment->s; + worldX = (segment->unk30 + I(segment->unk38)); + worldY = (segment->unk32 + I(segment->unk3C)) + gUnknown_03005870[i]; + sprSegment->x = (worldX - gCamera.x); + sprSegment->y = (worldY - gCamera.y); + if (Coll_Player_PlatformCrumbling(sprSegment, worldX, worldY, &gPlayer)) { + sp0 = -1; + standOnIndex = i; + break; + } + } + } else if (!(gPlayer.moveState & (MOVESTATE_STOOD_ON_OBJ | MOVESTATE_IN_AIR))) { + TaskDestroy(gCurTask); +#ifdef BUG_FIX + // TODO: Destruction may need to happen at the end of the function, depending on its behavior... + return; +#endif + } + + if (sp0 != 0) { + mgr->unk56 = standOnIndex; + if ((standOnIndex == 0) || (standOnIndex == 8)) { + var_r6 = 8; + } else { + var_r6 = 16; + } + + if ((sPlayerSpeedState.moveState & 2) && (sPlayerSpeedState.qSpeedAirY > Q(4))) { + mgr->unk54 = 2; + mgr->unk55 = standOnIndex; + mgr->unk57 = 0xFF; + + if (var_r6 != 8) { + var_r6 *= 2; + } + + mgr->unk5A = var_r6; + for (i = 0; i < NUM_SEGMENTS; i++) { + if (i == standOnIndex) { + mgr->unk5C = I(sPlayerSpeedState.qSpeedAirY); + gUnknown_03005870[i] += mgr->unk5C; + if (gUnknown_03005870[i] > var_r6) { + gUnknown_03005870[i] = var_r6; + } + } else { + gUnknown_03005870[i] = 0; + } + } + } else if (mgr->unk54 == 2) { + s16 value; + gUnknown_03005870[standOnIndex] += mgr->unk5C; + + if (gUnknown_03005870[standOnIndex] >= mgr->unk5A) { + gUnknown_03005870[standOnIndex] = mgr->unk5A; + mgr->unk5C = 1 - mgr->unk5C; + mgr->unk57 = 0; + } + + if (gUnknown_03005870[standOnIndex] <= (mgr->unk5A / 2)) { + gUnknown_03005870[standOnIndex] = -(mgr->unk5A / 2); + mgr->unk54 = 1; + } + + for (i = 0; i < NUM_SEGMENTS; i++) { + if (i != standOnIndex) { + temp_r0_12 = standOnIndex - i; + if (temp_r0_12 < 0) { + temp_r0_12 = -temp_r0_12; + } + + if (temp_r0_12 < 3) { + s16 v = gUnknown_03005870[standOnIndex] - ((temp_r0_12 * gUnknown_03005870[standOnIndex]) / 3); + gUnknown_03005870[i] = v; + } + } + } + + if (gUnknown_03005870[0] > 8) { + gUnknown_03005870[0] = 8; + } + if (gUnknown_03005870[8] > 8) { + gUnknown_03005870[8] = 8; + } + } else { + mgr->unk54 = 1; + if (gUnknown_03005870[standOnIndex] < 0) { + gUnknown_03005870[standOnIndex] += 2; + } else { + gUnknown_03005870[standOnIndex] += 1; + } + if (gUnknown_03005870[standOnIndex] > var_r6) { + gUnknown_03005870[standOnIndex] = var_r6; + } + + for (i = 0; i < NUM_SEGMENTS; i++) { + if (i != standOnIndex) { + var_r3_2 = (standOnIndex - i); + if (var_r3_2 < 0) { + var_r3_2 = -var_r3_2; + standOnIndex = (8 - standOnIndex); + } + temp_r1_13 = gUnknown_03005870[standOnIndex] - ((gUnknown_03005870[standOnIndex] * var_r3_2) / (standOnIndex + 1)); + if (temp_r1_13 > gUnknown_03005870[i]) { + gUnknown_03005870[i]++; + } + if (temp_r1_13 < gUnknown_03005870[i]) { + gUnknown_03005870[i]--; + } + } + } + if (gUnknown_03005870[0] > 8) { + gUnknown_03005870[0] = 8; + } + if (gUnknown_03005870[8] > 8) { + gUnknown_03005870[8] = 8; + } + } + gPlayer.qWorldY += Q(1) + Q(gUnknown_03005870[standOnIndex] - gUnknown_03005890[standOnIndex]); + } else { + if (mgr->unk54 == 2) { + gUnknown_03005870[mgr->unk55] += mgr->unk5C; + if (gUnknown_03005870[mgr->unk55] >= mgr->unk5A) { + gUnknown_03005870[mgr->unk55] = mgr->unk5A; + mgr->unk5C = 1 - mgr->unk5C; + mgr->unk57 = 0; + } + + if (gUnknown_03005870[standOnIndex] <= (mgr->unk5A / 2)) { + gUnknown_03005870[standOnIndex] = -(mgr->unk5A / 2); + mgr->unk5C = 0; + mgr->unk54 = 0; + } + + for (i = 0; i < NUM_SEGMENTS; i++) { + if (i != mgr->unk55) { + temp_r0_4 = mgr->unk55 - i; + if (temp_r0_4 < 0) { + temp_r0_4 = -temp_r0_4; + } + + if (temp_r0_4 < 3) { + s16 v = gUnknown_03005870[mgr->unk55] - ((temp_r0_4 * gUnknown_03005870[mgr->unk55]) / 3); + gUnknown_03005870[i] = v; + } + } + } + if (gUnknown_03005870[0] > 8) { + gUnknown_03005870[0] = 8; + } + if (gUnknown_03005870[8] > 8) { + gUnknown_03005870[8] = 8; + } + } else { + mgr->unk54 = 0; + + if (gUnknown_03005870[mgr->unk56] > 0) { + gUnknown_03005870[mgr->unk56]--; + } + + if (gUnknown_03005870[mgr->unk56] < 0) { + gUnknown_03005870[mgr->unk56] += 2; + if (gUnknown_03005870[mgr->unk56] > 0) { + gUnknown_03005870[mgr->unk56] = 0; + } + } + + for (i = 0; i < NUM_SEGMENTS; i++) { + if (i != mgr->unk56) { + temp_r0_7 = (mgr->unk56 - i); + var_r1_2 = mgr->unk56; + temp_r4_4 = var_r1_2; + if (temp_r0_7 < 0) { + temp_r0_7 = -temp_r0_7; + var_r1_2 = (8 - var_r1_2); + } + temp_r1_7 = gUnknown_03005870[temp_r4_4] + - ((gUnknown_03005870[temp_r4_4] * temp_r0_7) / (((var_r1_2 << 24) + (1 << 24)) >> 24)); + if (temp_r1_7 > gUnknown_03005870[i]) { + gUnknown_03005870[i]++; + } + if (temp_r1_7 < gUnknown_03005870[i]) { + gUnknown_03005870[i]--; + } + if (gUnknown_03005870[0] > 8) { + gUnknown_03005870[0] = 8; + } + if (gUnknown_03005870[8] > 8) { + gUnknown_03005870[8] = 8; + } + } + } + } + } + + sPlayerSpeedState.qWorldX = gPlayer.qWorldX; + sPlayerSpeedState.qWorldY = gPlayer.qWorldY; + sPlayerSpeedState.qSpeedAirX = gPlayer.qSpeedAirX; + sPlayerSpeedState.qSpeedAirY = gPlayer.qSpeedAirY; + sPlayerSpeedState.moveState = gPlayer.moveState; + + if ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) && (mgr->unk58 == 0)) { + for (i = 0; i < NUM_SEGMENTS; i++) { + segment = TASK_DATA(mgr->tasks[i]); + sprSegment = &segment->s; + worldX = (I(segment->unk38) + segment->unk30); + worldY = I(segment->unk3C) + segment->unk32 + gUnknown_03005870[i]; + + if (Coll_Player_PlatformCrumbling(sprSegment, worldX, worldY, &gPartner)) { + break; + } + } + } +} +END_NONMATCH + +void Task_8034098(void) +{ + s16 *sp0; + EggSnakeSegmentManager *mgr; + EggSnakeSegment *segment; + const SpriteOffset *dimensions; + Sprite *s; + OamData *oamData; + OamData *oamAllocated; + s32 temp_r2; + u16 temp_r2_2; + u16 temp_r3_2; + s16 worldX, worldY; + u8 temp_r3; + + segment = TASK_DATA(gCurTask); + mgr = TASK_DATA(TASK_PARENT(gCurTask)); + s = &mgr->s; + dimensions = s->dimensions; + worldX = (I(segment->unk38) + segment->unk30); + worldY = (I(segment->unk3C) + segment->unk32) + gUnknown_03005870[segment->unk52]; + + if (((float)(worldY - gCamera.y) < (float)-240)) { + TaskDestroy(gCurTask); + return; + } + + if ((mgr->unk58 == 0) || !(1 & mgr->unk5E)) { + if ((segment->unk52 == 0) || (s->oamBaseIndex == 0xFF)) { + s->oamBaseIndex = -1; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + DisplaySprite(s); + } else { + oamData = &gOamMallocBuffer[s->oamBaseIndex]; + oamAllocated = OamMalloc((0x7C0 & s->oamFlags) >> 6); + + if (iwram_end != oamAllocated) { + DmaCopy16(3, oamData, oamAllocated, sizeof(OamDataShort)); +#ifndef EXTENDED_OAM + oamAllocated->all.attr1 &= ~0x1FF; // x = 0 + oamAllocated->all.attr0 &= ~0xFF; // y = 0 + oamAllocated->all.attr0 += (((worldY - gCamera.y) - dimensions->offsetY) & 0xFF); + oamAllocated->all.attr1 += (((worldX - gCamera.x) - dimensions->offsetX) & 0x1FF); +#else + oamAllocated->split.y = (worldY - gCamera.y) - dimensions->offsetY; + oamAllocated->split.x = (worldX - gCamera.x) - dimensions->offsetX; +#endif + } + } + } +} + +void TaskDestructor_8034208(struct Task *t) +{ + EggSnake *boss = TASK_DATA(t); + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void TaskDestructor_8034224(struct Task *t) +{ + EggSnakeProjectile *proj = TASK_DATA(t); + VramFree(proj->s.graphics.dest); +} + +void TaskDestructor_8034238(struct Task *t) +{ + EggSnakeSegmentManager *mgr = TASK_DATA(t); + VramFree(mgr->s.graphics.dest); +} + +void sub_803424C() { sub_803424C_inline(); } + +void sub_803426C(CamCoord worldX, CamCoord worldY) +{ + EggSnake *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + MapEntity *me = boss->base.me; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} diff --git a/sa1/src/game/enemies/boss_x1_egg_wrecker.c b/sa1/src/game/enemies/boss_x1_egg_wrecker.c new file mode 100644 index 0000000000..b248a445fb --- /dev/null +++ b/sa1/src/game/enemies/boss_x1_egg_wrecker.c @@ -0,0 +1,976 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" // CreatePreBossCameraPan +#include "game/nuts_and_bolts_task.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" + +/* Sonic 1's Green Hill Zone Boss */ + +#define NUM_CHAIN_SEGMENTS 4 + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Sprite s2; + /* 0x6C */ s32 unk6C; + /* 0x70 */ s32 unk70; + /* 0x74 */ s32 unk74; + /* 0x78 */ s32 unk78; + /* 0x7C */ CamCoord worldX; + /* 0x7E */ CamCoord worldY; + /* 0x80 */ CamCoord unk80; + /* 0x82 */ CamCoord unk82; + /* 0x84 */ u16 unk84; + /* 0x86 */ s8 unk86; + /* 0x87 */ s8 unk87; + /* 0x88 */ s16 unk88; + /* 0x8A */ s16 unk8A; + /* 0x8C */ u8 unk8C; + /* 0x8D */ u8 unk8D; + /* 0x8D */ u8 unk8E; +} EggWrecker; /* 0x90 */ + +typedef struct EggWrecker_44 { + /* 0x00 */ Sprite s; + /* 0x30 */ u16 unk30; + /* 0x30 */ s16 unk32; + /* 0x30 */ s16 unk34; + /* 0x30 */ s16 unk36; + /* 0x30 */ u8 filler38[4]; + /* 0x3C */ s16 unk3C; + /* 0x3E */ s16 unk3E; + /* 0x3E */ u8 unk40; +} EggWrecker_44; + +void Task_EggWreckerInit(void); +void sub_80343E0(void); +void Task_8034718(void); +void Task_803491C(void); +void sub_8034B7C(void); +void Task_8034CA0(void); +void sub_8034EE0(CamCoord worldX, CamCoord worldY); +void sub_8035010(void); +void Task_80352C0(void); +void Task_8035354(void); +void Task_803540C(void); +void Task_80354F4(void); +void Task_8035588(void); +void Task_8035768(void); +void TaskDestructor_8035818(struct Task *t); +void TaskDestructor_EggWrecker(struct Task *t); + +static inline void sub_803582C_inline(CamCoord worldX, CamCoord worldY) +{ + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + Sprite *s = &boss_44->s; + EHit collPlayer, collPartner; + + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + + if ((collPlayer == 2) || (collPartner == 2)) { + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + + s2->variant = 1; + s2->prevVariant = -1; + s2->frameFlags &= ~0x4000; + } +} + +static inline void sub_80358C8_inline(void) +{ + EggWrecker *boss = TASK_DATA(gCurTask); + Sprite *s2 = &boss->s2; + + if ((s2->variant != 0) && (s2->frameFlags & 0x4000)) { + s2->variant = 0U; + s2->prevVariant = 0xFF; + } +} + +static inline void sub_8035904_inline() +{ + EggWrecker *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + s2->x = s->x; + s2->y = s->y; + + if (s2->graphics.anim == SA1_ANIM_EGGMAN) { + s2->y -= 3; + } +} + +static inline void setPlayerPos_inline(CamCoord worldX, CamCoord worldY) +{ + EggWrecker *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +void sub_80342A0(s16 worldX, s16 worldY) +{ + s16 temp_r6; + s16 temp_r7; + s32 temp_r0; + s32 temp_r1; + s32 temp_r2; + u16 temp_r3; + EggWrecker *boss; + Sprite *s; + Sprite *s2; + EHit collPlayer; + EHit collPartner; + + boss = TASK_DATA(gCurTask); + s = &boss->s; + s->frameFlags &= ~0x180; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (boss->unk87 == 0) { + collPlayer = Coll_Player_Boss(s, worldX, worldY, &gPlayer); + + collPartner = 0; + if (gNumSingleplayerCharacters == 2) { + collPartner = Coll_Player_Boss(s, worldX, worldY, &gPartner); + } + + s2 = &boss->s2; + if ((collPlayer == HIT_ENEMY) || (collPartner == HIT_ENEMY)) { + boss->unk86++; + boss->unk87 = 0x20U; + s2->variant = 2; + s2->prevVariant = -1; + s2->frameFlags &= 0xFFFFBFFF; + m4aSongNumStart(SE_BOSS_HIT); + return; + } + + if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + s2->variant = 1; + s2->prevVariant = -1; + s2->frameFlags &= 0xFFFFBFFF; + } + } +} + +// NOTE: Same as sub_8035AAC +void sub_80343E0(void) +{ + EggWrecker *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if (boss->unk87 != 0) { + if ((--boss->unk87 > 0x10) && !(boss->unk87 & 2) && PLAYER_IS_ALIVE) { + s->frameFlags |= 0x100; + gDispCnt |= DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = 0x3F1F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + } + + DisplaySprite(s); + DisplaySprite(s2); +} + +void CreateEntity_EggWrecker(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + s32 sp4; + s32 temp_r1_2; + s32 temp_r6; + u16 temp_r1; + u16 temp_r2; + u8 *temp_r1_3; + u8 *temp_r2_2; + struct Task *t; + EggWrecker *boss; + Sprite *s; + Sprite *s2; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_EggWreckerInit, sizeof(EggWrecker), 0x2000U, 0U, TaskDestructor_EggWrecker); + boss = TASK_DATA(t); + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + boss->unk84 = 120; + boss->unk86 = 0; + boss->unk87 = 0; + boss->unk8D = 0; + boss->unk8C = 0; + boss->unk6C = 0x4000; + boss->unk70 = -0x6000; + boss->unk74 = 0; + boss->unk78 = 0; + boss->unk88 = 0; + boss->unk8A = 0; + boss->worldX = TO_WORLD_POS(me->x, regionX); + boss->worldY = TO_WORLD_POS(me->y, regionY); + + s = &boss->s; + s->x = boss->worldX; + s->y = boss->worldY; + sp4 = 0; + s->graphics.dest = VramMalloc(30); + s->oamFlags = SPRITE_OAM_ORDER(22); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X1_EGGMOBILE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s2 = &boss->s2; + s2->x = TO_WORLD_POS(me->x, regionX); + s2->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + sp4 = 0; + s2->graphics.dest = VramMalloc(8U); + s2->oamFlags = SPRITE_OAM_ORDER(21); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_BOSS_X1_EGGMAN; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0x2000; +} + +void Task_EggWreckerInit(void) +{ + EggWrecker *boss; + + boss = TASK_DATA(gCurTask); + + switch (boss->unk8D) { + case 0: { + if (boss->worldX - DISPLAY_CENTER_X <= gCamera.x) { + gCamera.minX = boss->worldX - DISPLAY_CENTER_X; + gCamera.maxX = gCamera.minX + DISPLAY_WIDTH; + boss->unk8D = 1; + } + } break; + + case 1: { + if (boss->worldY - 64 <= gCamera.y) { + CreatePreBossCameraPan(boss->worldY, (boss->worldY + DISPLAY_HEIGHT)); + boss->unk8D = 2; + } + } break; + } + + if ((gCamera.minX == (boss->worldX - DISPLAY_CENTER_X)) && (gCamera.maxY == (boss->worldY + DISPLAY_HEIGHT))) { + boss->unk8D = 0; + boss->unk78 = 0x100; + gCurTask->main = Task_8034718; + gMusicManagerState.unk1 = 0x14; + } +} + +void Task_8034718(void) +{ + CamCoord worldX; + CamCoord worldY; + + EggWrecker *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + boss->unk6C += boss->unk74; + boss->unk70 += boss->unk78; + worldX = boss->worldX + I(boss->unk6C); + worldY = boss->worldY + I(boss->unk70); + boss->unk80 = worldX; + boss->unk82 = worldY; + + setPlayerPos_inline(worldX, worldY); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_8035904_inline(); + + sub_80343E0(); + + switch (boss->unk8D) { + case 0: { + if (boss->unk70 >= Q(32)) { + boss->unk70 = Q(32); + boss->unk74 = -Q(1); + boss->unk78 = -Q(16. / 256.); + boss->unk8D++; + } + } break; + + case 1: { + if (boss->unk6C <= 0) { + boss->unk6C = Q(0); + boss->unk74 = Q(0); + boss->unk78 = Q(0); + boss->unk84 = 4; + boss->unk8D++; + } + } break; + + case 2: { + if (--boss->unk84 == 0) { + s2->variant = 1; + s2->prevVariant = -1; + boss->unk88 = 0x100; + boss->unk8A = 0x100; + boss->unk84 = 64; + boss->unk8D++; + sub_8035010(); + } + } break; + + case 3: { + if (boss->unk84 > 0) { + boss->unk84--; + } + + if (s2->frameFlags & 0x4000) { + s2->variant = 0U; + s2->prevVariant = -1; + } + if ((s2->variant == 0) && (boss->unk84 == 0)) { + boss->unk74 = -48; + boss->unk8C = 0xFF; + boss->unk8D = 0; + gCurTask->main = Task_803491C; + + CreatePreBossCameraPan(gCamera.minY - DISPLAY_CENTER_Y, gCamera.maxY); + } + } break; + } +} + +// (97.97%) https://decomp.me/scratch/O3X8P +NONMATCH("asm/non_matching/game/enemies/boss_x1__Task_803491C.inc", void Task_803491C(void)) +{ + EggWrecker *boss = TASK_DATA(gCurTask); + CamCoord worldX; + CamCoord worldY; + Sprite *s; + Sprite *s2; + s16 var_r1; + + s = &boss->s; + s2 = &boss->s2; + boss->unk6C += boss->unk74; + boss->unk70 += boss->unk78; + boss->unk88 = (boss->unk88 - 4) & 0x3FF; + if ((0x1FF & boss->unk88) == 0x100) { + s->frameFlags ^= 0x400; + s2->frameFlags ^= 0x400; + } + + var_r1 = ((COS(((boss->unk88 + 0x100) * 2) & 0x3FF) >> 13)); + worldX = (boss->worldX + I(boss->unk6C)); + worldY = var_r1 + (boss->worldY + I(boss->unk70)); + boss->unk80 = worldX; + boss->unk82 = worldY; + + var_r1 = COS_24_8(boss->unk88); + if (var_r1 > 0xFF) { + var_r1 = 0xFF; + } + var_r1 += Q(3); + boss->unk8A = var_r1; + + sub_80342A0(worldX, worldY); + if (boss->unk86 > 3) { + sub_8034B7C(); + return; + } + + setPlayerPos_inline(worldX, worldY); + + sub_80358C8_inline(); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_8035904_inline(); + + sub_80343E0(); + + switch (boss->unk8D) { + case 0: + if ((boss->unk88 > 0x100) && boss->unk88 <= 0x300) { + boss->unk74 = 0; + boss->unk8D++; + } + return; + case 1: + if (boss->unk88 <= 0x200) { + boss->unk74 = 0xC0; + boss->unk8D++; + } + break; + case 2: + if (boss->unk88 <= 0x100) { + boss->unk74 = 0; + boss->unk8D++; + } + break; + case 3: + if ((boss->unk88 == 0) || (boss->unk88 > 0x100)) { + boss->unk74 = -0xC0; + boss->unk8D = 0; + } + break; + } +} +END_NONMATCH + +void sub_8034B7C(void) +{ + Sprite *s; + Sprite *s2; + s16 theta; + + EggWrecker *boss = TASK_DATA(gCurTask); + s = &boss->s; + s2 = &boss->s2; + + boss->unk8D = 0; + boss->unk84 = 60; + boss->unk74 = 0; + boss->unk78 = 0; + theta = ((boss->unk88 + 0x100) * 2) & 0x3FF; + boss->unk70 += Q(COS((theta)) >> 0xD); + boss->s2.variant = 2; + boss->s2.prevVariant = -1; + m4aSongNumStart(0x90U); + s->frameFlags &= ~0x180; + + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~0x8000; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + INCREMENT_SCORE_A(1000); + + Task_8034CA0(); + gCurTask->main = Task_8034CA0; +} + +void Task_8034CA0() +{ + s32 sp0; + Sprite *s; + Sprite *s2; + s32 temp_r0_4; + s32 temp_r0_5; + s32 temp_r0_6; + u16 *temp_r5; + CamCoord worldY; + CamCoord worldX; + u8 *temp_r1_5; + u8 temp_r0_3; + + EggWrecker *boss = TASK_DATA(gCurTask); + s = &boss->s; + s2 = &boss->s2; + boss->unk6C += boss->unk74; + boss->unk70 += boss->unk78; + worldX = (I(boss->unk6C) + boss->worldX); + worldY = (I(boss->unk70) + boss->worldY); + boss->unk80 = worldX; + boss->unk82 = worldY; + + if (!(7 & boss->unk84)) { + sub_8034EE0(worldX, worldY); + } + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + setPlayerPos_inline(worldX, worldY); + sub_8035904_inline(); + + DisplaySprite(s); + DisplaySprite(s2); + + switch (boss->unk8D) { + case 0: + if (--boss->unk84 == 0) { + boss->unk84 = 0x5A; + boss->unk8D++; + VramFree(boss->s2.graphics.dest); + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGMAN); + s2->graphics.anim = SA1_ANIM_EGGMAN; + boss->s2.variant = 4; + boss->s2.prevVariant = -1; + s2->oamFlags = SPRITE_OAM_ORDER(23); + return; + } + return; + case 1: + boss->unk78 += 3; + if (--boss->unk84 == 0) { + boss->unk84 = 30; + boss->unk8D++; + return; + } + break; + case 2: + boss->unk78 -= 0x18; + if (--boss->unk84 == 0) { + boss->unk74 = 0x200; + boss->unk78 = -0x40; + boss->unk84 = 1; + boss->unk8D++; + boss->s2.variant = 6; + boss->s2.prevVariant = -1; + s->frameFlags |= 0x400; + s2->frameFlags |= 0x400; + return; + } + break; + case 3: + if (boss->unk6C > 0x13000) { + gRefCollision = gCollisionTable[gCurrentLevel]; + gCamera.minY = 0; + gCamera.maxY = gRefCollision->pxHeight; + gCamera.maxX = gRefCollision->pxWidth; + gMusicManagerState.unk1 = 0x34; + TaskDestroy(gCurTask); + } + break; + } +} + +void sub_8034EE0(CamCoord worldX, CamCoord worldY) +{ + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], gUnknown_080BB42C[rndIndex], + TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(23); + bolts->qUnk3E = Q(5. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY - ((rnd & 0x3F0000) >> 0x10))); +} + +void sub_8035010(void) +{ + EggWrecker_44 *strc_44; + struct Task *t; + Sprite *s; + u8 i; + + EggWrecker *boss = TASK_DATA(gCurTask); + + t = TaskCreate(Task_80352C0, sizeof(EggWrecker_44), 0x2100U, 0U, TaskDestructor_8035818); + strc_44 = TASK_DATA(t); + strc_44->unk3C = boss->worldX + I(boss->unk6C); + strc_44->unk3E = boss->worldY + I(boss->unk70); + strc_44->unk30 = 0x40; + s = &strc_44->s; + s->graphics.dest = VramMalloc(2U); + s->oamFlags = 0x600; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X1_EGGMOBILE_DECO; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + for (i = 0; i < NUM_CHAIN_SEGMENTS; i++) { + t = TaskCreate(Task_8035354, sizeof(EggWrecker_44), 0x2100 | i, 0U, TaskDestructor_8035818); + strc_44 = TASK_DATA(t); + strc_44->unk3C = boss->worldX + I(boss->unk6C); + strc_44->unk3E = boss->worldY + I(boss->unk70); + strc_44->unk34 = 0; + strc_44->unk36 = 0; + strc_44->unk40 = i; + strc_44->unk30 = 0x40; + s = &strc_44->s; + s->graphics.dest = VramMalloc(4U); + s->oamFlags = 0x640; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X1_EGGMOBILE_DECO; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + }; + + t = TaskCreate(Task_80354F4, sizeof(EggWrecker_44), 0x2104U, 0U, TaskDestructor_8035818); + strc_44 = TASK_DATA(t); + strc_44->unk3C = boss->worldX + I(boss->unk6C); + strc_44->unk3E = boss->worldY + I(boss->unk70); + strc_44->unk34 = 0; + strc_44->unk36 = 0; + strc_44->unk30 = 0x40; + s = &strc_44->s; + s->graphics.dest = VramMalloc(0x10U); + s->oamFlags = 0x5C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X1_BALL; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + t = TaskCreate(Task_8035768, sizeof(EggWrecker_44), 0x2105U, 0U, TaskDestructor_8035818); + strc_44 = TASK_DATA(t); + strc_44->unk3C = boss->worldX + I(boss->unk6C); + strc_44->unk3E = boss->worldY + I(boss->unk70); + strc_44->unk30 = 0x40; + s = &strc_44->s; + s->graphics.dest = VramMalloc(4); + s->oamFlags = 0x600; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X1_EGGMOBILE_DECO; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; +} + +// (67.94%) https://decomp.me/scratch/mycLx +NONMATCH("asm/non_matching/game/enemies/boss_x1__Task_80352C0.inc", void Task_80352C0()) +{ + s32 temp_r5; + s16 var_r1; + s32 temp_r6; + u16 temp_r0; + CamCoord worldX, worldY; + s32 var_r5 = 0; + + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &boss_44->s; + + if (boss_44->unk30 != 0) { + u32 temp_r0; + boss_44->unk30--; + temp_r0 = boss_44->unk30; + temp_r0 <<= 8; +#ifndef NON_MATCHING + asm("" ::"r"(temp_r0)); +#endif + var_r5 = temp_r0 >> 11; + } + var_r1 = -var_r5; + + boss_44->unk3C = boss->unk80; + boss_44->unk3E = boss->unk82; + worldX = boss_44->unk3C; + worldY = var_r1 + boss_44->unk3E; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (boss->unk86 > 3) { + sub_8017540(Q(worldX), Q(worldY + 20)); + TaskDestroy(gCurTask); + return; + } +} +END_NONMATCH + +// (87.09%) https://decomp.me/scratch/gMJT8 +NONMATCH("asm/non_matching/game/enemies/boss_x1__Task_8035354.inc", void Task_8035354()) +{ + s16 temp_r0; + s32 temp_r2_2; + u16 temp_r0_3; + u16 temp_r2; + s16 var_r1; + s16 var_r2; + u16 temp_r0_2; + + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &boss_44->s; + + if (--boss_44->unk30 != 0) { + var_r2 = boss_44->unk40 * 14; + var_r2 = (var_r2 - (((((var_r2 + 21) * ((s32)Q(boss_44->unk30) >> 6)) << 8) >> 16) - 35)); + } else { + temp_r0_2 = boss_44->unk40; + var_r2 = ((temp_r0_2 * 14) + 35); + boss_44->unk30 = (temp_r0_2 * 8) + 8; + gCurTask->main = Task_803540C; + } + boss_44->unk3C = boss->unk80; + boss_44->unk3E = boss->unk82; + var_r1 = var_r2 + boss_44->unk3E; + s->x = boss_44->unk3C - gCamera.x; + s->y = (var_r1)-gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +// (79.67%) https://decomp.me/scratch/jki22 +NONMATCH("asm/non_matching/game/enemies/boss_x1__Task_803540C.inc", void Task_803540C(void)) +{ + s16 worldX; + s16 worldY; + s32 temp_r0; + s16 temp_r1_2; + s32 temp_r3; + s32 temp_r6; + u16 temp_r1; + u16 temp_r1_3; + u16 temp_r3_2; + u16 temp_r4; + + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &boss_44->s; + + temp_r1_2 = ((boss_44->unk40 * 14) + 13); + asm("" ::"r"(temp_r1_2)); + worldX = ((COS(boss->unk8A) * temp_r1_2 * 4) >> 0x10) + boss->unk80; + boss_44->unk3C = boss->unk80; + boss_44->unk3E = boss->unk82; + worldY = boss->unk82 + (((SIN(0x1FF & boss->unk8A) * temp_r1_2 * 4) >> 0x10)); + worldY + 22; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (boss->unk86 > 3) { + if (--boss_44->unk30 == 0) { + sub_8017540(Q(worldX), Q(worldY)); + TaskDestroy(gCurTask); + } + } +} +END_NONMATCH + +// (88.70%) https://decomp.me/scratch/f1HTz +NONMATCH("asm/non_matching/game/enemies/boss_x1__Task_80354F4.inc", void Task_80354F4(void)) +{ + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + EggWrecker_44 *boss_44_2 = boss_44; + Sprite *s = &boss_44->s; + s16 r1; + + if (--boss_44->unk30 != 0) { + s16 v = (((((boss_44_2->unk30 << 8) >> 6) * 93) << 8) >> 16); + r1 = 99 - v; + } else { + r1 = 99; + boss_44_2->unk30 = 60; + gCurTask->main = Task_8035588; + } + + boss_44->unk3C = boss->unk80; + boss_44->unk3E = boss->unk82; + + r1 += boss->unk82; + s->x = boss_44->unk3C - gCamera.x; + s->y = r1 - gCamera.y; + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +// (83.00%) https://decomp.me/scratch/vzRf3 +NONMATCH("asm/non_matching/game/enemies/boss_x1__Task_8035588.inc", void Task_8035588(void)) +{ + s16 temp_r4_3; + s16 temp_r5_2; + s32 temp_r0_4; + s32 temp_r1_2; + s32 temp_r2; + s32 temp_r3_2; + s32 temp_r6; + s32 temp_r7; + s32 var_r0; + u16 temp_r0_2; + u16 temp_r1; + u16 temp_r4; + + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &boss_44->s; + CamCoord worldX, worldY; + + temp_r2 = boss->unk8A; + boss_44->unk3C = boss->unk80; + worldX = boss->unk80 + ((COS(boss->unk8A) * 0x4D) >> 0xE); + boss_44->unk3E = boss->unk82; + worldY = boss->unk82 + (((SIN(0x1FF & boss->unk8A) * 0x4D) >> 0xE) + 22); + + if (boss->unk86 < 4) { + sub_803582C_inline(worldX, worldY); + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (boss->unk86 > 3) { + if (!(7 & boss_44->unk30)) { + temp_r1_2 = PseudoRandom32(); + sub_8017540(((worldX + (0x1F & temp_r1_2)) - 0xF) << 8, ((worldY + ((temp_r1_2 & 0x1F0000) >> 0x10)) - 0xF) << 8); + } + + if (--boss_44->unk30 == 0) { + TaskDestroy(gCurTask); + } + } +} +END_NONMATCH + +void Task_8035768(void) +{ + s32 temp_r2; + s32 temp_r3; + s32 temp_r5; + u16 temp_r6; + CamCoord worldX, worldY; + + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &boss_44->s; + + if ((boss->unk8C != 0) && (boss->unk74 != 0)) { + if (boss->unk6C > Q(300)) { + TaskDestroy(gCurTask); + return; + } + + s->frameFlags &= ~0x400; + s->frameFlags |= boss->s.frameFlags & 0x400; + + worldX = boss->unk80; + worldY = boss->unk82; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void TaskDestructor_EggWrecker(struct Task *t) +{ + EggWrecker *boss = TASK_DATA(t); + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void TaskDestructor_8035818(struct Task *t) +{ + EggWrecker_44 *boss_44 = TASK_DATA(t); + VramFree(boss_44->s.graphics.dest); +} + +void sub_803582C(CamCoord worldX, CamCoord worldY) +{ + EggWrecker_44 *boss_44 = TASK_DATA(gCurTask); + Sprite *s = &boss_44->s; + EHit collPlayer, collPartner; + + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + + if ((collPlayer == 2) || (collPartner == 2)) { + EggWrecker *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + + s2->variant = 1; + s2->prevVariant = -1; + s2->frameFlags &= ~0x4000; + } +} + +void sub_80358C8(void) { sub_80358C8_inline(); } + +void sub_8035904(void) { sub_8035904_inline(); } + +static void setPlayerPos(CamCoord worldX, CamCoord worldY) +{ + EggWrecker *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} diff --git a/sa1/src/game/enemies/boss_x2_egg_drillster.c b/sa1/src/game/enemies/boss_x2_egg_drillster.c new file mode 100644 index 0000000000..fcd66a0cd2 --- /dev/null +++ b/sa1/src/game/enemies/boss_x2_egg_drillster.c @@ -0,0 +1,833 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" // CreatePreBossCameraPan +#include "game/nuts_and_bolts_task.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" + +/* Sonic 2 - emerald hill boss */ + +#define NUM_WHEELS 4 + +typedef struct EggDrillster { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Sprite s2; + /* 0x6C */ s32 unk6C; + /* 0x70 */ s32 unk70; + /* 0x74 */ s32 unk74; + /* 0x78 */ s32 unk78; + /* 0x7C */ s16 worldX; + /* 0x7E */ s16 worldY; + /* 0x80 */ CamCoord unk80; + /* 0x82 */ CamCoord unk82; + /* 0x84 */ u16 unk84; + /* 0x86 */ s8 unk86; + /* 0x87 */ s8 unk87; + /* 0x88 */ s16 unk88; + /* 0x8A */ s16 unk8A; + /* 0x8C */ u8 unk8C; + /* 0x8C */ u8 unk8D; + /* 0x8D */ char filler8E[2]; +} EggDrillster; /* size = 0x90 */ + +typedef struct Component { + /* 0x00 */ Sprite s; + /* 0x30 */ u16 unk30; + /* 0x32 */ s16 unk32; + /* 0x34 */ s32 unk34; + /* 0x38 */ s32 unk38; + /* 0x3C */ s16 qUnk3C; + /* 0x3E */ s16 qUnk3E; + /* 0x40 */ CamCoord worldX; + /* 0x42 */ CamCoord worldY; + /* 0x44 */ u8 unk44; + u8 filler44[0x3]; +} Component; + +void Task_EggDrillsterInit(void); +void Task_8035DD4(void); +static void CreateFalloffComponents(void); +void Task_8035F70(void); +void sub_8035AAC(void); +void TaskDestructor_EggDrillster(struct Task *t); +void TaskDestructor_Drill(struct Task *t); +void Task_8035F70(void); + +void sub_803596C(CamCoord worldX, CamCoord worldY); +void sub_8036478(CamCoord worldX, CamCoord worldY); +void sub_8036150(void); +void Task_803623C(void); + +void sub_803673C(void); +void Task_Drill(void); +void Task_8036B94(void); +void TaskDestructor_Drill(struct Task *t); + +void Task_8036810(void); + +static inline void sub_8036CF4_inline(CamCoord worldX, CamCoord worldY) +{ + Component *drill = TASK_DATA(gCurTask); + Sprite *s = &drill->s; + EHit collPlayer, collPartner; + + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + + if ((collPlayer == 2) || (collPartner == 2)) { + EggDrillster *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + + s2->variant = 1; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} + +static inline void sub_8036D90_inline() +{ + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if ((s2->variant != 0) && (s2->frameFlags & 0x4000)) { + s2->variant = 0; + s2->prevVariant = -1; + } +} + +static inline void sub_8036DCC_inline() +{ + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + s2->x = s->x; + s2->y = s->y; +} + +static inline void setPlayerPos_inline(CamCoord worldX, CamCoord worldY) +{ + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +void sub_803596C(CamCoord worldX, CamCoord worldY) +{ + Sprite *s; + Sprite *s2; + enum EHit collPlayer; + enum EHit collPartner; + s16 temp_r6; + s16 temp_r7; + u16 temp_r3; + u8 *temp_r1; + + EggDrillster *boss = TASK_DATA(gCurTask); + s = &boss->s; + s->frameFlags &= ~0x180; + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~0x8000; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (boss->unk87 == 0) { + collPlayer = Coll_Player_Boss(s, worldX, worldY, &gPlayer); + collPartner = HIT_NONE; + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = Coll_Player_Boss(s, worldX, worldY, &gPartner); + } + s2 = &boss->s2; + if ((collPlayer == HIT_ENEMY) || (collPartner == HIT_ENEMY)) { + boss->unk86++; + boss->unk87 = 0x20; + s2->variant = 2; + s2->prevVariant = -1; + s2->frameFlags &= ~0x4000; + m4aSongNumStart(SE_BOSS_HIT); + return; + } + if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + s2->variant = 1; + s2->prevVariant = -1; + s2->frameFlags &= ~0x4000; + } + } +} + +// NOTE: Same as sub_80343E0 +void sub_8035AAC() +{ + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if (boss->unk87 != 0) { + if ((--boss->unk87 > 0x10) && !(boss->unk87 & 2) && PLAYER_IS_ALIVE) { + s->frameFlags |= 0x100; + gDispCnt |= DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = 0x3F1F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + } + DisplaySprite(s); + DisplaySprite(s2); +} + +void CreateEntity_EggDrillster(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + s32 sp4; + Sprite *s; + Sprite *s2; + s16 *temp_r1_2; + s16 *temp_r2_2; + s32 temp_r4; + s32 temp_r4_2; + + struct Task *t; + EggDrillster *boss; + + if (gBossIndex != 0) { + return; + } + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_EggDrillsterInit, sizeof(EggDrillster), 0x2000U, 0U, TaskDestructor_EggDrillster); + boss = TASK_DATA(t); + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + boss->unk84 = 120; + boss->unk86 = 0; + boss->unk87 = 0; + boss->unk8D = 0; + boss->unk8C = 0; + boss->unk6C = 0xC020; + boss->unk70 = -Q(40); + boss->unk74 = 0; + boss->unk78 = 0; + boss->unk88 = 0; + boss->unk8A = 0; + boss->worldX = TO_WORLD_POS(me->x, regionX); + boss->worldY = TO_WORLD_POS(me->y, regionY); + + s = &boss->s; + s->x = boss->worldX; + s->y = boss->worldY; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_X2_EGGDRILLSTER); + s->oamFlags = SPRITE_OAM_ORDER(22); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X2_EGGDRILLSTER; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s2 = &boss->s2; + s2->x = TO_WORLD_POS(me->x, regionX); + s2->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_X2_EGGMAN); + s2->oamFlags = SPRITE_OAM_ORDER(21); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_BOSS_X2_EGGMAN; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = 0x10; + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0x2000; +} + +void Task_EggDrillsterInit(void) +{ + EggDrillster *boss; + + boss = TASK_DATA(gCurTask); + + switch (boss->unk8D) { + case 0: { + if (boss->worldX - DISPLAY_CENTER_X <= gCamera.x) { + gCamera.minX = boss->worldX - DISPLAY_CENTER_X - 32; + gCamera.maxX = boss->worldX + DISPLAY_CENTER_X + 32; + boss->unk8D = 1; + } + } break; + + case 1: { + if (boss->worldY - 224 <= gCamera.y) { + CreatePreBossCameraPan((boss->worldY - DISPLAY_HEIGHT), boss->worldY); + boss->unk8D = 2; + } + } break; + } + + if (boss->unk8D == 2) { + boss->unk8D = 0; + boss->unk74 = -0x180; + + CreateFalloffComponents(); + + gCurTask->main = Task_8035DD4; + gMusicManagerState.unk1 = 0x15; + } +} + +// Similar to Task_8034718 +void Task_8035DD4(void) +{ + CamCoord worldX; + CamCoord worldY; + + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + boss->unk6C += boss->unk74; + boss->unk70 += boss->unk78; + worldX = boss->worldX + I(boss->unk6C); + worldY = boss->worldY + I(boss->unk70); + boss->unk80 = worldX; + boss->unk82 = worldY; + + setPlayerPos_inline(worldX, worldY); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + sub_8036DCC_inline(); + + sub_8035AAC(); + + switch (boss->unk8D) { + case 0: { + if (boss->unk6C <= Q(0)) { + boss->unk6C = Q(0); + boss->unk74 = Q(0); + boss->unk78 = Q(0); + boss->unk84 = 15; + boss->unk8D++; + } + } break; + + case 1: { + if (--boss->unk84 == 0) { + s2->variant = 1; + s2->prevVariant = -1; + boss->unk8D++; + } + } break; + + case 2: { + if (s2->frameFlags & 0x4000) { + s2->variant = 0; + s2->prevVariant = -1; + boss->unk84 = 0xF; + boss->unk8D++; + } + } break; + + case 3: { + if (--boss->unk84 == 0) { + boss->unk74 = -0x200; + boss->unk8C = 0xFF; + boss->unk8D = 0; + gCurTask->main = Task_8035F70; + } + } break; + } +} + +void Task_8035F70() +{ + Sprite *s; + Sprite *s2; + CamCoord worldX, worldY; + + EggDrillster *boss = TASK_DATA(gCurTask); + + s = &boss->s; + s2 = &boss->s2; + boss->unk6C += boss->unk74; + boss->unk70 += boss->unk78; + worldX = (boss->worldX + I(boss->unk6C)); + worldY = (boss->worldY + I(boss->unk70)); + boss->unk80 = worldX; + boss->unk82 = worldY; + sub_803596C(worldX, worldY); + if (boss->unk86 > 3) { + sub_8036150(); + return; + } + setPlayerPos_inline(worldX, worldY); + + sub_8036D90_inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + sub_8036DCC_inline(); + sub_8035AAC(); + + switch (boss->unk8D) { + case 0: + if (boss->unk6C <= -Q(192)) { + boss->unk74 = 0; + boss->unk84 = 0x1E; + boss->unk8D++; + } + break; + case 1: + if (--boss->unk84 == 0) { + boss->unk74 = 0x200; + SPRITE_FLAG_SET(s, X_FLIP); + SPRITE_FLAG_SET(s2, X_FLIP); + boss->unk8D++; + } + break; + case 2: + if (boss->unk6C > 0xBFFF) { + boss->unk74 = 0; + boss->unk84 = 0x1E; + boss->unk8D++; + } + break; + case 3: + if (--boss->unk84 == 0) { + boss->unk74 = -0x200; + SPRITE_FLAG_CLEAR(s, X_FLIP); + SPRITE_FLAG_CLEAR(s2, X_FLIP); + boss->unk8D = 0; + } + break; + } +} + +void sub_8036150(void) +{ + s32 temp_r0; + s32 temp_r5; + s32 temp_r6; + u16 temp_r3; + + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s; + + s = &boss->s; + boss->unk8D = 0; + boss->unk74 = 0; + boss->unk78 = 0; + boss->s2.variant = 2; + boss->s2.prevVariant = 0xFF; + gCamera.minX = gCamera.x; + gCamera.maxX = gCamera.x + DISPLAY_WIDTH; + m4aSongNumStart(0x90U); + s->frameFlags &= 0xFFFFFE7F; + if (PLAYER_IS_ALIVE) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + INCREMENT_SCORE_A(1000); + + Task_803623C(); + gCurTask->main = Task_803623C; +} + +void Task_803623C() +{ + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + CamCoord worldX, worldY; + s32 res; + + if (boss->unk8D < 2) { + if (boss->unk8D == 0) { + boss->unk78 += 0x10; + } + + boss->unk6C += boss->unk74; + boss->unk70 += boss->unk78; + worldX = (boss->worldX + I(boss->unk6C)); + worldY = (boss->worldY + I(boss->unk70)); + boss->unk80 = worldX; + boss->unk82 = worldY; + + if (!(7 & boss->unk84)) { + sub_8036478(worldX, worldY); + } + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + setPlayerPos_inline(worldX, worldY); + + sub_8036DCC_inline(); + DisplaySprite(s); + DisplaySprite(s2); + } + + switch (boss->unk8D) { + case 0: + boss->unk84--; + res = sa2__sub_801F100(worldY + 20, worldX, 1, 8, sa2__sub_801EC3C); + if (res < 0) { + boss->unk70 += Q(res); + boss->unk78 = 0; + boss->unk84 = DISPLAY_WIDTH; + boss->unk8D++; + } + break; + case 1: + if (--boss->unk84 == 0) { + CreatePostBossEggMobile(worldX, worldY); + gMusicManagerState.unk1 = 0x35; + sub_8017540(Q(worldX + 0x10), Q(worldY - 0x10)); + sub_8017540(Q(worldX - 0x10), Q(worldY - 0x10)); + sub_8017540(Q(worldX + 0x14), Q(worldY + 0x10)); + sub_8017540(Q(worldX - 0x14), Q(worldY + 0x10)); + boss->unk84 = DISPLAY_WIDTH; + boss->unk8D++; + } + break; + case 2: + if (--boss->unk84 == 0) { + gRefCollision = gCollisionTable[gCurrentLevel]; + gCamera.minY = 0; + gCamera.maxY = gRefCollision->pxHeight; + gCamera.maxX = gRefCollision->pxWidth; + TaskDestroy(gCurTask); + } + break; + } +} + +// Almost identical to sub_8034EE0() +void sub_8036478(CamCoord worldX, CamCoord worldY) +{ + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], gUnknown_080BB42C[rndIndex], + TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY + 16); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(23); + bolts->qUnk3E = Q(5. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); +} + +static void CreateFalloffComponents() +{ + EggDrillster *boss = TASK_DATA(gCurTask); + struct Task *t; + Component *component; + Sprite *s; + u8 i; + + component = TASK_DATA(TaskCreate(Task_Drill, sizeof(Component), 0x2100U, 0U, TaskDestructor_Drill)); + component->worldX = (boss->worldX + I(boss->unk6C)); + component->worldY = (boss->worldY + I(boss->unk70)); + component->unk30 = 0x3C; + + s = &component->s; + s->graphics.dest = VramMalloc(16); + s->oamFlags = 0x500; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X2_DRILL; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + for (i = 0; i < NUM_WHEELS; i++) { + component = TASK_DATA(TaskCreate(sub_803673C, sizeof(Component), 0x2100 | i, 0U, TaskDestructor_Drill)); + component->worldX = (boss->worldX + I(boss->unk6C)); + component->worldY = (boss->worldY + I(boss->unk70)); + component->unk34 = 0; + component->unk38 = 0; + component->unk44 = i; + + s = &component->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_X2_WHEEL); + if (1 & i) { + s->oamFlags = 0x5C0; + } else { + s->oamFlags = 0x4C0; + } + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_X2_WHEEL; + s->variant = i; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + } +} + +void sub_803673C(void) +{ + CamCoord worldX, worldY; + + EggDrillster *boss; + Component *component = TASK_DATA(gCurTask); + Sprite *s = &component->s; + + boss = TASK_DATA(TASK_PARENT(gCurTask)); + s->frameFlags &= ~0x580; + s->frameFlags |= (boss->s.frameFlags & 0x580); + worldX = boss->unk80; + worldY = boss->unk82; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + if (boss->unk74 != 0) { + UpdateSpriteAnimation(&component->s); + } + DisplaySprite(&component->s); + if (boss->unk86 > 3) { + component->worldX = boss->unk80; + component->worldY = boss->unk82; + component->unk34 = 0; + component->unk38 = 0; + component->qUnk3C = 0; + component->qUnk3E = 0; + gCurTask->main = Task_8036810; + } +} + +void Task_8036810() +{ + s32 res; + + Component *component = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + EggDrillster *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &component->s; + + if (boss->unk8D != 0) { + if (component->qUnk3C == 0) { + component->qUnk3E = -0x100; + + switch (component->unk44) { + case 0: + component->qUnk3C = -0xC0; + component->qUnk3E = -0x1B0; + break; + case 1: + component->qUnk3C = -0x100; + component->qUnk3E = -0x180; + break; + case 2: + component->qUnk3C = 0x100; + component->qUnk3E = -0x190; + break; + case 3: + component->qUnk3C = 0xE0; + component->qUnk3E = -0x1A0; + break; + } + + if (boss->s.frameFlags & 0x400) { + component->qUnk3C = -component->qUnk3C; + } + } + component->qUnk3E += 24; + component->unk34 += component->qUnk3C; + component->unk38 += component->qUnk3E; + worldX = component->worldX + I(component->unk34); + worldY = component->worldY + I(component->unk38); + res = sa2__sub_801F100(worldY + 30, worldX, 1, 8, sa2__sub_801EC3C); + + if (res < 0) { + component->unk38 += Q(res); + component->qUnk3E = -component->qUnk3E + 4; + + if (((worldX < (gCamera.x - 32))) || (worldX > (gCamera.x + DISPLAY_WIDTH + 32))) { + TaskDestroy(gCurTask); + return; + } + } + } else { + worldX = component->worldX; + worldY = component->worldY; + } + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_Drill() +{ + CamCoord worldX, worldY; + s16 sp4 = 0; + Component *drill = TASK_DATA(gCurTask); + EggDrillster *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &drill->s; + + s->frameFlags &= ~0x580; + s->frameFlags |= (boss->s.frameFlags & 0x580); + worldX = boss->unk80; + worldY = boss->unk82; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + if ((boss->unk8C != 0) && (boss->unk86 <= 3)) { + sub_8036CF4_inline(worldX, worldY); + } + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (boss->unk86 > 2) { + if (drill->unk30 != 0) { + drill->unk30--; + } else if (s->frameFlags & 0x400) { + if ((worldX + 0x10) < I(gPlayer.qWorldX)) { + sp4 = 1; + } + } else if ((worldX - 0x10) > I(gPlayer.qWorldX)) { + sp4 = 1; + } + if (boss->unk86 > 3) { + sp4 = 1; + } + + if (sp4 != 0) { + drill->unk34 = boss->unk6C; + drill->unk38 = boss->unk70; + drill->worldX = boss->worldX; + drill->worldY = boss->worldY; + drill->qUnk3E = 0; + if (s->frameFlags & 0x400) { + drill->qUnk3C = +Q(3); + } else { + drill->qUnk3C = -Q(3); + } + gCurTask->main = Task_8036B94; + } + } +} + +void Task_8036B94() +{ + CamCoord worldX, worldY; + s16 sp4 = 0; + Component *drill = TASK_DATA(gCurTask); + EggDrillster *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &drill->s; + + drill->unk34 += drill->qUnk3C; + drill->unk38 += drill->qUnk3E; + + worldX = drill->worldX + I(drill->unk34); + worldY = drill->worldY + I(drill->unk38); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + if (boss->unk86 < 4) { + sub_8036CF4_inline(worldX, worldY); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + // TODO: This condition seems very off... + if ((u32)(drill->unk34 + Q(192)) > Q(DISPLAY_WIDTH + (2 * SA1_ANIM_BOSS_X2_EGGDRILLSTER_WIDTH))) { + TaskDestroy(gCurTask); + } +} + +void TaskDestructor_EggDrillster(struct Task *t) +{ + EggDrillster *boss = TASK_DATA(t); + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void TaskDestructor_Drill(struct Task *t) +{ + Component *drill = TASK_DATA(t); + VramFree(drill->s.graphics.dest); +} + +// TODO: Does not match calling inline func. +void sub_8036CF4(CamCoord worldX, CamCoord worldY) +{ + Component *drill = TASK_DATA(gCurTask); + Sprite *s = &drill->s; + EHit collPlayer, collPartner; + + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = HIT_NONE; + } + + if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + EggDrillster *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + + s2->variant = 1; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} + +void sub_8036D90(void) { sub_8036D90_inline(); } + +void sub_8036DCC(void) { sub_8036DCC_inline(); } + +static void setPlayerPos(CamCoord worldX, CamCoord worldY) +{ + EggDrillster *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} diff --git a/sa1/src/game/enemies/boss_x3_egg_x.c b/sa1/src/game/enemies/boss_x3_egg_x.c new file mode 100644 index 0000000000..d62f11cc92 --- /dev/null +++ b/sa1/src/game/enemies/boss_x3_egg_x.c @@ -0,0 +1,2658 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/save.h" +#include "game/enemies/bosses_shared.h" // CreatePreBossCameraPan +#include "game/nuts_and_bolts_task.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/results.h" +#include "game/stage/rings_scatter.h" +#include "game/stage/screen_shake.h" +#include "game/stage/stage.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" // for ALL_ZONE_CHAOS_EMERALDS + +/* X-Zone Final Boss */ + +typedef struct EggX_10 { + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + u8 unk8; + u8 unk9; + s16 unkA; + s16 qUnkC; + u16 unkE; +} EggX_10; + +typedef struct EggX_48 { + Sprite s; + u16 unk30; + u8 filler32[0x2]; + s32 qUnk34; + s32 qUnk38; + s16 qUnk3C; + s16 qUnk3E; + u16 unk40; + u16 unk42; + u16 unk44; + u8 filler46[0x2]; +} EggX_48; + +typedef struct EggX_Sparkle { + /* 0x00 */ Sprite s; + /* 0x30 */ SpriteTransform transform; + /* 0x3C */ u16 unk3C; + /* 0x3E */ u8 filler3E[0x2]; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ s16 unk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ s16 unk4C; + /* 0x4E */ s16 unk4E; + /* 0x50 */ s16 unk50; + /* 0x52 */ s16 unk52; + /* 0x52 */ s32 unk54; + /* 0x52 */ s32 unk58; + /* 0x5C */ s16 unk5C; + /* 0x5E */ s16 unk5E; + /* 0x60 */ u8 unk60; + /* 0x61 */ u8 unk61; + /* 0x62 */ u8 unk62; +} EggX_Sparkle; + +typedef struct EggX_7C { + Sprite s; + Sprite s2; + s16 unk60; + u8 filler62[0x2]; + s32 unk64; + s32 unk68; + s32 unk6C; + s32 unk70; + u16 unk74; + u16 unk76; + u8 unk78; + u8 unk79; + u8 unk7A; + u8 unk7B; +} EggX_7C; + +typedef struct EggX { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ Sprite s2; + /* 0x80 */ s32 qUnk74; + /* 0x80 */ s32 qUnk78; + /* 0x80 */ s32 qUnk7C; + /* 0x80 */ s32 qUnk80; + /* 0x84 */ s32 unk84; + /* 0x88 */ s16 unk88; + /* 0x8A */ s16 unk8A; + /* 0x8C */ s16 unk8C; + /* 0x8E */ s16 unk8E; + /* 0x90 */ u16 unk90; + /* 0x92 */ u16 unk92; + /* 0x94 */ s8 unk94; + /* 0x95 */ s8 unk95; + /* 0x96 */ u16 unk96; + /* 0x98 */ u8 unk98; + /* 0x99 */ u8 unk99; + /* 0x9A */ u8 unk9A; + /* 0x9C */ struct Task *task9C; // -> EggX_7C +} EggX; /* 0xA0 */ + +void Task_EggXMain(void); +void sub_8036E20(CamCoord worldX, CamCoord worldY); +enum EHit sub_8036F9C(CamCoord worldX, CamCoord worldY, u8 arg2); +void sub_80370B4(void); +u8 sub_803711C(s16 arg0); +void Task_803753C(void); +void Task_803775C(void); +void sub_803803C(void); +void Task_8038154(void); +void sub_8038E34(void); +void sub_8038B38(void); +void sub_8038BC8(void); +void sub_8038C20(void); +void sub_8038D2C(void); +void sub_8038420(CamCoord worldX, CamCoord worldY); +void sub_8038F04(void); +void sub_8039074(u8 param0); +void sub_8039108(void); +void sub_803918C(u8 param0); +void Task_8039264(void); +void Task_803A2F8(void); +void sub_803967C(void); +void Task_80397A8(void); +void sub_8039940(void); +void Task_8039A64(void); +void sub_803A1D8(void); +void Task_803A46C(void); +void sub_803A54C(void); +void sub_803A594(void); +void sub_803A170(u32 param0); + +void TaskDestructor_EggX7C(struct Task *t); +void TaskDestructor_EggX_Sparkle(struct Task *t); +void sub_80472AC(Player *p); +void TaskDestructor_EggX(struct Task *t); +void TaskDestructor_EggX48(struct Task *t); + +extern const s16 gUnknown_084ACF1C[4]; +extern const s16 gUnknown_084ACF24[]; +extern const s16 gUnknown_084ACF2C[]; +extern const s16 gUnknown_084ACF34[]; + +static inline void sub_803A614__inline() +{ + DmaFill16(3, 0x7FFF, &gObjPalette[12 * 16], 0x20); + gFlags |= FLAGS_UPDATE_SPRITE_PALETTES; +} + +static inline void ChangeVariant2__inline() +{ + EggX *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + s2->variant = 3; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; +} + +static inline void sub_803A650__inline(CamCoord worldX, CamCoord worldY) +{ + enum EHit collPlayer; + enum EHit collPartner; + + EggX_7C *strc7C = TASK_DATA(gCurTask); + Sprite *s = &strc7C->s; + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = HIT_NONE; + } + + if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + EggX *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + s2->variant = 3; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} + +// sub_803A870 +static inline void ChangeVariant__inline() +{ + EggX *boss = TASK_DATA(gCurTask); + Sprite *s2 = &boss->s2; + if ((s2->variant != 0) && (s2->frameFlags & 0x4000)) { + s2->variant = 0; + s2->prevVariant = -1; + } +} + +// sub_803A8AC +static inline void CopySpritePos__inline() +{ + EggX *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + s2->x = s->x; + s2->y = s->y; +} + +// sub_803A8CC +static inline void SetSpritePos__inline(CamCoord worldX, CamCoord worldY) +{ + EggX *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +static inline void sub_803A900__inline(u8 arg) +{ + EggX_7C *strc7C = TASK_DATA(gCurTask); + switch (arg) { + case 1: + strc7C->unk78 = 8; + break; + case 2: + strc7C->unk78 = 9; + break; + case 3: + strc7C->unk78 = 10; + break; + } +} + +void sub_8036E20(s16 worldX, s16 worldY) +{ + s32 sp0; + s32 sp4; + EggX *sp8; + s32 spC; + s32 temp_r3; + u16 temp_r5; + u16 temp_r6; + u8 *temp_r1_2; + u8 *temp_r1_3; + u8 *temp_r1_4; + u8 temp_r1; + + EggX *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2; + EggX_7C *strc7C; + + if (PLAYER_IS_ALIVE) { + boss->s.palId = 0; + } + + if (boss->unk95 == 0) { + EHit collPlayer = HIT_NONE; + EHit collPartner = HIT_NONE; + s2 = &boss->s2; + strc7C = TASK_DATA(boss->task9C); + + if (!(4 & strc7C->unk7A)) { + collPlayer = Coll_Player_Boss(s, worldX, worldY, &gPlayer); + } + if (collPlayer == HIT_NONE) { + collPlayer = sub_800BFEC(s, worldX, worldY, &gPlayer); + } + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + if (!(4 & strc7C->unk7A)) { + collPartner = Coll_Player_Boss(s, worldX, worldY, &gPartner); + } + if (collPartner == HIT_NONE) { + collPartner = sub_800BFEC(s, worldX, worldY, &gPartner); + } + } + + if ((collPlayer == HIT_ENEMY) || (collPartner == HIT_ENEMY)) { + boss->unk94++; + boss->unk95 = 0x20; + s2->variant = 2; + s2->prevVariant = -1; + s2->frameFlags &= 0xFFFFBFFF; + m4aSongNumStart(0x8FU); + } else if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + s2->variant = 3; + s2->prevVariant = -1; + s2->frameFlags &= 0xFFFFBFFF; + } + } +} + +enum EHit sub_8036F9C(CamCoord worldX, CamCoord worldY, u8 arg2) +{ + enum EHit collPlayer; + enum EHit collPartner; + EggX_Sparkle *sparkle = TASK_DATA(gCurTask); + Sprite *s = &sparkle->s; + + if (arg2 == 0) { + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = HIT_NONE; + } + } else { + collPlayer = sub_800C2B8(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = HIT_NONE; + } + } + if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + EggX *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + s2->variant = 3; + s2->frameFlags &= 0xFFFFBFFF; + s2->prevVariant = -1; + } + + if ((arg2 != 0) && (collPlayer == HIT_PLAYER) && (gRingCount == 0)) { + Coll_DamagePlayer(&gPlayer); + collPlayer = HIT_NONE; + } + + return collPlayer; +} + +void sub_80370B4() +{ + s8 *temp_r2; + s8 temp_r1; + + EggX *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + + if (boss->unk95 != 0) { + if ((--boss->unk95 > 16) && !(boss->unk95 & 2) && PLAYER_IS_ALIVE) { + s->palId = 253; + } + } + + DisplaySprite(s); + DisplaySprite(s2); +} + +u8 sub_803711C(s16 arg0) +{ + const s16 *ptr; + s16 temp_r0; + s16 temp_r1; + s16 var_r0; + s32 temp_r0_2; + s16 var_r2_2; + s32 var_r1; + u8 i; + + var_r2_2 = I(gPlayer.qWorldX) - arg0; + if (var_r2_2 < 0) { + var_r2_2 = ABS(var_r2_2); + } + + if (gPlayer.moveState & 2) { + if (var_r2_2 > 120) { + ptr = &gUnknown_084ACF34[0]; + } else { + ptr = &gUnknown_084ACF24[0]; + } + } else { + if (var_r2_2 > 120) { + ptr = &gUnknown_084ACF2C[0]; + } else { + ptr = &gUnknown_084ACF1C[0]; + } + } + + var_r1 = PseudoRandom32() % 100U; + + for (i = 0; i < 4; i++) { + var_r1 -= ptr[i]; + + if (var_r1 <= 0) { + break; + } + } + + return ++i; +} + +// (84.16%) https://decomp.me/scratch/wRxPL + +void CreateEntity_EggX(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + s16 sp4; + s16 *temp_r1_2; + s16 *temp_r6; + u8 *temp_r0; + u8 *temp_r0_2; + EggX *boss; + Sprite *s; + Sprite *s2; + + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + boss = TASK_DATA(TaskCreate(Task_EggXMain, sizeof(EggX), 0x2000U, 0U, TaskDestructor_EggX)); + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + boss->unk92 = 120; + boss->unk95 = 0; + boss->unk99 = 0; + boss->unk98 = 0; + boss->qUnk74 = Q(116); + boss->qUnk78 = Q(232); + boss->qUnk7C = 0; + boss->qUnk80 = 0; + boss->unk84 = 0; + boss->unk96 = 0; + if (LOADED_SAVE->difficultyLevel != 0) { + boss->unk94 = 2; + } else { + boss->unk94 = 0; + } + + boss->unk88 = (me->x * 8) + (regionX << 8); + temp_r1_2 = &boss->unk8A; + boss->unk8A = (me->y * 8) + (regionY << 8); + SET_MAP_ENTITY_INITIALIZED(me); + s = &boss->s; + s->x = boss->unk88; + s->y = boss->unk8A; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGX_BODY); + s->oamFlags = SPRITE_OAM_ORDER(22); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_EGGX_BODY; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x2000; + + s2 = &boss->s2; + s2->x = boss->unk88; + s2->y = boss->unk8A; + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGX_EGGMAN); + s2->oamFlags = SPRITE_OAM_ORDER(21); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_EGGX_EGGMAN; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0x2000; + + if (PLAYER_IS_ALIVE) { + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] = 0x1F1F; + gWinRegs[WINREG_WINOUT] = 0x1F1F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0xC; + gDispCnt |= 0x2000; + } + + sub_803A614__inline(); +} + +void Task_EggXMain() +{ + EggX *boss = TASK_DATA(gCurTask); + + switch (boss->unk99) { + case 0: + if ((boss->unk88 - DISPLAY_CENTER_X) <= gCamera.x) { + gCamera.minX = (u16)boss->unk88 - (DISPLAY_CENTER_X + 24); + gCamera.maxX = (u16)boss->unk88 + (DISPLAY_CENTER_X + 24); + boss->unk99 = 1; + return; + } + return; + case 1: + if ((boss->unk8A - 40) <= gCamera.y) { + CreatePreBossCameraPan((s16)(boss->unk8A - 40), (s16)(boss->unk8A + DISPLAY_HEIGHT)); + boss->unk99 = 2; + return; + } + break; + case 2: + if ((gCamera.minY == (boss->unk8A - 40)) && (gCamera.maxY == (boss->unk8A + DISPLAY_HEIGHT))) { + boss->unk99 = 3; + return; + } + break; + case 3: + boss->unk99 = 0; + boss->qUnk80 = -Q(1); + boss->unk8C = boss->unk88 + I(boss->qUnk74); + boss->unk8E = boss->unk8A + I(boss->qUnk78); + sub_8038F04(); + gCurTask->main = Task_803753C; + CreateScreenShake(0x400U, 4U, 0x100U, 0x7AU, 0x80U); + gMusicManagerState.unk1 = 0x16; + break; + } +} + +void Task_803753C() +{ + EggX *boss = TASK_DATA(gCurTask); + EggX_7C *strc7C = TASK_DATA(boss->task9C); + Sprite *s = &boss->s; + Sprite *s2 = &boss->s2; + CamCoord worldX, worldY; + + boss->qUnk74 += boss->qUnk7C; + boss->qUnk78 += boss->qUnk80; + worldX = I(boss->qUnk74) + boss->unk88; + worldY = I(boss->qUnk78) + boss->unk8A; + + if (boss->qUnk80 == 0) { + boss->unk90 += 8; + boss->unk90 &= 0x3FF; + worldY += COS_24_8(boss->unk90) >> 6; + } else { + boss->unk90 = 0; + } + + boss->unk8C = worldX; + boss->unk8E = worldY; + + SetSpritePos__inline(worldX, worldY); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + CopySpritePos__inline(); + + sub_80370B4(); + switch (boss->unk99) { + case 0: + if (boss->qUnk78 <= Q(110)) { + boss->qUnk78 = Q(110); + boss->qUnk7C = 0; + boss->qUnk80 = 0; + boss->unk92 = 15; + boss->unk99++; + } + + break; + case 1: + if (--boss->unk92 == 0) { + strc7C->unk79 = 1; + boss->unk99++; + } + break; + case 2: + if (strc7C->unk79 == 4) { + s2->variant = 1; + s2->prevVariant = -1; + boss->unk99++; + } + break; + case 3: + if (s2->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + strc7C->unk79 = 5; + s2->variant = 0; + s2->prevVariant = -1; + boss->unk99++; + } + break; + case 4: + if (strc7C->unk79 == 7) { + boss->unk92 = 0xF; + boss->unk99++; + } + break; + case 5: + if (--boss->unk92 == 0) { + boss->unk98 = 0xFF; + boss->unk99 = 0; + gCurTask->main = Task_803775C; + } + break; + } +} + +// (84.16%) https://decomp.me/scratch/wRxPL +NONMATCH("asm/non_matching/game/enemies/boss_x3__Task_803775C.inc", void Task_803775C()) +{ + Sprite *s2; + s32 sp8 = 0; + Sprite *spC; + Rect8 sp10; + Sprite *sp14; + Rect8 sp18; + Sprite *s; + s16 temp_r1_10; + s16 temp_r1_11; + s16 var_r0_2; + s16 var_r5; + s32 *temp_r0_14; + s32 *temp_r3_5; + s32 temp_r1; + s32 temp_r1_3; + s32 temp_r1_8; + s32 temp_r4_2; + s32 var_r0_4; + s32 var_r0_6; + s32 var_r2; + s32 var_r4_3; + s32 var_r6; + u16 *temp_r2; + s16 temp_r5_2; + s16 var_r1_2; + u16 var_r1_3; + s16 var_r3; + CamCoord worldX, worldY; + u16 var_r4_2; + + EggX *boss = TASK_DATA(gCurTask); + EggX_7C *strc7C; + strc7C = TASK_DATA(boss->task9C); + s = &boss->s; + s2 = &boss->s2; + + if (s->frameFlags & 0x400) { + boss->qUnk7C += boss->unk84; + boss->qUnk74 -= boss->qUnk7C; + } else { + boss->qUnk7C += boss->unk84; + boss->qUnk74 += boss->qUnk7C; + } + + temp_r1 = boss->qUnk78 + boss->qUnk80; + boss->qUnk78 = temp_r1; + worldX = boss->unk88 + I(boss->qUnk74); + worldY = boss->unk8A + I(temp_r1); + if (boss->qUnk80 == 0) { + boss->unk90 = (boss->unk90 + 8); + boss->unk90 &= 0x3FF; + worldY += (COS_24_8(boss->unk90) >> 6); + } else { + boss->unk90 = 0; + } + + boss->unk8C = worldX; + boss->unk8E = worldY; + sub_8036E20(worldX, worldY); + + if (boss->unk94 > 7) { + sub_803803C(); + return; + } + + SetSpritePos__inline(worldX, worldY); + + ChangeVariant__inline(); + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + CopySpritePos__inline(); + sub_80370B4(); + + switch (boss->unk99) { + s32 rnd; + case 0x0: + boss->unk9A = 0; + strc7C->unk79 = 8; + boss->unk99++; + rnd = ((u32)PseudoRandom32() & 0x30) >> 4; + switch (rnd) { + case 3: + case 0: + boss->unk92 = 0x5A; + break; + case 1: + boss->unk92 = 0xB4; + break; + case 2: + boss->unk92 = 0xF0; + break; + } + + // fallthrough + case 0x1: + if (--boss->unk92 != 0) { + return; + } + + boss->unk9A = sub_803711C(worldX); + if (boss->unk9A != 4) { + boss->unk92 = 10; + boss->unk99++; + } else { + strc7C->unk79 = 10; + boss->unk92 = 0x14; + boss->unk99 = 64; + } + + break; + case 0x2: + strc7C->unk7A = strc7C->unk7A & 0x1; + if (strc7C->unk7A == 0) { + return; + } + + if (--boss->unk92 == 0) { + boss->unk92 = 0xA; + boss->unk99++; + strc7C->unk79 = 0xA; + } + + break; + case 0x3: + if (!(2 & strc7C->unk7A)) { + return; + } + + if (--boss->unk92 != 0) { + return; + } + strc7C->unk79 = 0xD; + boss->unk99 = boss->unk9A * 0x10; + + if (boss->unk9A == 2) { + boss->unk92 = 0x1E; + m4aSongNumStart(0xACU); + } else if (boss->unk9A == 1) { + boss->unk92 = 0; + } + + break; + case 0x4: + strc7C->unk79 = 0xF; + boss->unk9A = 0; + boss->unk99++; + break; + case 0x10: + sub_803967C(); + boss->unk92++; + boss->qUnk7C = 0x200; + boss->unk84 = -0x40; + boss->unk99++; + break; + case 0x11: + var_r2 = 0; + if (boss->qUnk7C <= 0) { + temp_r1_8 = boss->unk84; + if (temp_r1_8 < 0) { + var_r0_4 = temp_r1_8 + 3; + } else { + var_r0_4 = temp_r1_8; + } + boss->unk84 -= (var_r0_4 >> 2); + } + if (s->frameFlags & 0x400) { + if (boss->qUnk74 >= -0x7400) { + boss->qUnk74 = -0x7400; + var_r2 = 1; + } + } else { + if (boss->qUnk74 <= 0x7400) { + boss->qUnk74 = 0x7400; + var_r2 = 0xFF; + } + } + + if (var_r2 != 0) { + boss->qUnk7C = 0; + temp_r0_14 = &boss->unk84; + boss->unk84 = 0; + if (boss->unk92 != 0) { + boss->unk99 = 4; + } else { + boss->unk99 = 0x10; + } + } + + break; + + case 0x20: + if (--boss->unk92 == 0) { + boss->unk99 = 4; + if (PLAYER_IS_ALIVE || (gNumLives != 0)) { + gWinRegs[WINREG_WININ] = 0x1F1F; + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + } + break; + } + + if (PLAYER_IS_ALIVE || (gNumLives != 0)) { + gWinRegs[4] = 0x3F3F; + } + + var_r1_2 = boss->unk92 - 15; + if (var_r1_2 < 0) { + var_r1_2 = -var_r1_2; + } + var_r1_3 = (15 - (s16)var_r1_2); + var_r4_2 = var_r1_3; + if ((s16)var_r1_3 > 0xB) { + var_r1_3 = 0xC; + var_r4_2 = 0xB; + } + + temp_r1_10 = var_r1_3; + var_r5 = s->y - var_r1_3; + temp_r1_11 = s->y + var_r1_3; + var_r3 = (u16)temp_r1_11; + if (temp_r1_11 > DISPLAY_HEIGHT) { + var_r3 = DISPLAY_HEIGHT; + } + + if (s->frameFlags & 0x400) { + u16 some_r0, some_v; + if (PLAYER_IS_ALIVE || (gNumLives != 0)) { + gWinRegs[WINREG_WIN0H] = WIN_RANGE(s->x + 32, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(var_r5, var_r3); + } + + { + // Likely easily matchable once sub_803A6EC__inline() matches + u16 v0; + var_r5 = gCamera.x + DISPLAY_CENTER_X; + v0 = ((u16)s->x - 88); + spC = NULL; + sp10.left = -v0; + sp10.right = 120; + sp10.top = -temp_r4_2; + sp10.bottom = +temp_r4_2; + + var_r6 = sub_800C1E8(spC, sp10, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + var_r0_6 = sub_800C1E8(spC, sp10, worldX, worldY, &gPlayer); + } else { + var_r0_6 = 0; + } + } + } + if (PLAYER_IS_ALIVE || (gNumLives != 0)) { + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, s->x - 0x20); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, (s16)var_r3 | ((temp_r5_2 << 0x10) >> 8)); + } + + // Likely easily matchable once sub_803A6EC__inline() matches + var_r5 = (u16)gCamera.x + DISPLAY_CENTER_X; + sp14 = 0; + sp18.left = 88; + sp18.right = s->x - 0x98; + sp18.top = -var_r4_2; + sp18.bottom = +var_r4_2; + + var_r6 = sub_800C1E8(sp14, sp18, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + var_r0_6 = sub_800C1E8(sp14, sp18, worldX, worldY, &gPlayer); + } else { + var_r0_6 = 0; + } + if ((var_r6 | var_r0_6) == 2) { + ChangeVariant2__inline(); + } + + break; + case 0x30: + sub_8039940(); + boss->unk99++; + break; + case 0x32: + boss->unk99 = 4; + break; + case 0x33: + boss->qUnk7C = -Q(2); + boss->unk92 = 0; + boss->unk99++; + break; + case 0x34: + if (boss->unk92 != 0) { + strc7C->unk79 = 0xF; + boss->unk92 = 0; + } + var_r2 = 0; + if (s->frameFlags & 0x400) { + if (boss->qUnk74 >= +0xD000) { + sp8 = 0xD000; + var_r2 = 1; + } + } else { + if (boss->qUnk74 <= -0xD000) { + sp8 = -0xD000; + var_r2 = 0xFF; + } + } + + if (var_r2 != 0) { + boss->qUnk74 = sp8; + s->frameFlags ^= 0x400; + s2->frameFlags ^= 0x400; + boss->unk99++; + } + break; + case 0x35: + var_r2 = 0; + if (s->frameFlags & 0x400) { + if (boss->qUnk74 >= -0x7400) { + sp8 = -0x7400; + var_r2 = 1; + } + } else { + if (boss->qUnk74 <= 0x7400) { + sp8 = 0x7400; + var_r2 = 0xFF; + } + } + + if (var_r2 != 0) { + boss->qUnk74 = sp8; + boss->qUnk7C = 0; + boss->unk99 = 0; + } + break; + + case 0x40: + if (2 & strc7C->unk7A) { + if (--boss->unk92 == 0) { + boss->qUnk7C = -0x300; + boss->unk99++; + break; + } + } + break; + + case 0x41: + var_r2 = 0; + if (s->frameFlags & 0x400) { + if (boss->qUnk74 >= 0xD000) { + sp8 = 0xD000; + var_r2 = 1; + } + } else if (boss->qUnk74 <= -Q(208)) { + sp8 = -Q(208); + var_r2 = 0xFF; + } + + if (var_r2 != 0) { + boss->qUnk7C = -0x200; + strc7C->unk79 = 0x13; + boss->qUnk74 = sp8; + s->frameFlags ^= 0x400; + s2->frameFlags ^= 0x400; + boss->unk99++; + break; + } + break; + + case 0x42: + var_r2 = 0; + if (s->frameFlags & 0x400) { + if (boss->qUnk74 >= -Q(116)) { + boss->qUnk74 = -Q(116); + boss->qUnk7C = 0; + var_r2 = 1; + } + } else { + if (boss->qUnk74 <= +Q(116)) { + boss->qUnk74 = +Q(116); + boss->qUnk7C = 0; + var_r2 = 0xFF; + } + } + + if (var_r2 != 0) { + if (4 & strc7C->unk7A) { + boss->unk99 = 0; + break; + } + } + + break; + + case 0x5: + if (4 & strc7C->unk7A) { + boss->unk99 = 0; + break; + } + break; + } +} +END_NONMATCH + +void sub_803803C(void) +{ + EggX *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + boss->unk99 = 0; + boss->qUnk7C = 0; + boss->qUnk80 = 0; + boss->s2.variant = 2; + boss->s2.prevVariant = 0xFF; + gCamera.minX = gCamera.x; + gCamera.maxX = gCamera.x + DISPLAY_WIDTH; + m4aSongNumStart(SE_EXPLOSION); + + s->frameFlags &= ~0x180; + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + } + + gPlayer.qSpeedGround = 0; + gPlayer.moveState |= 0x200000; + gPlayer.heldInput = 0; + gPlayer.frameInput = 0; + gStageFlags |= 3; + + INCREMENT_SCORE_A(1000); + + Task_8038154(); + gCurTask->main = Task_8038154; +} + +void Task_8038154() +{ + Sprite *s; + Sprite *s2; + s32 res; + + CamCoord worldX = 0; + CamCoord worldY = 0; + + EggX *boss = TASK_DATA(gCurTask); + s = &boss->s; + s2 = &boss->s2; + + if (boss->unk99 <= 1U) { + if (boss->unk99 == 0) { + boss->qUnk80 += 0x10; + } + + boss->qUnk74 += boss->qUnk7C; + boss->qUnk78 += boss->qUnk80; + worldX = boss->unk88 + I(boss->qUnk74); + worldY = boss->unk8A + I(boss->qUnk78); + boss->unk8C = (s16)worldX; + boss->unk8E = (s16)worldY; + if (!(7 & boss->unk92)) { + sub_8038420(worldX, worldY); + } + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + SetSpritePos__inline(worldX, worldY); + CopySpritePos__inline(); + DisplaySprite(s); + DisplaySprite(s2); + } + + switch (boss->unk99) { + case 0: + boss->unk92--; + res = sa2__sub_801F100(worldY + 20, worldX, 1, 8, sa2__sub_801EC3C); + if (res < 0) { + boss->qUnk78 += Q(res); + boss->qUnk80 = (boss->qUnk80 >> 2) - boss->qUnk80; + if (boss->qUnk80 > -Q(1)) { + boss->qUnk80 = 0; + boss->unk92 = 240; + boss->unk99++; + if ((gSelectedCharacter == CHARACTER_SONIC) // + && (gCurrentLevel > 0xB) // + && (LOADED_SAVE->chaosEmeralds == ALL_ZONE_CHAOS_EMERALDS) // + && (LOADED_SAVE->unlockedLevels[0] > 0xCU) // + && (LOADED_SAVE->unlockedLevels[1] > 0xCU) // + && (LOADED_SAVE->unlockedLevels[2] > 0xCU) // + && (LOADED_SAVE->unlockedLevels[3] > 0xCU) // + && ((LOADED_SAVE->unlockedLevels[0] != 0xF) || (gMultiplayerCurrentLevel != 0xC))) { + sub_803A54C(); + } else { + sub_803A594(); + } + } + } + break; + + case 1: + if (--boss->unk92 == 0) { + if ((gSelectedCharacter == CHARACTER_SONIC) // + && (gCurrentLevel > 0xB) // + && (LOADED_SAVE->chaosEmeralds == ALL_ZONE_CHAOS_EMERALDS) // + && (LOADED_SAVE->unlockedLevels[0] > 0xCU) // + && (LOADED_SAVE->unlockedLevels[1] > 0xCU) // + && (LOADED_SAVE->unlockedLevels[2] > 0xCU) // + && (LOADED_SAVE->unlockedLevels[3] > 0xCU) // + && ((LOADED_SAVE->unlockedLevels[0] != 0xF) || (gMultiplayerCurrentLevel != 0xC))) { + CreatePostBossEggMobile(worldX, worldY - 8); + } + + gMusicManagerState.unk1 = 0x36; + sub_8017540(Q(worldX), (worldY - 24) << 8); + sub_8017540(Q(worldX - 16), Q(worldY)); + sub_8017540(Q(worldX + 16), Q(worldY)); + sub_8017540(Q(worldX), Q(worldY + 24)); + boss->unk99++; + } + break; + + case 2: + TaskDestroy(gCurTask); + return; + + break; + } +} + +// NOTE: The contents of this function might originally have been from a macro or inline proc? +// Many bosses calling CreateNutsAndBoltsTask have this same structure, almost identically. +void sub_8038420(CamCoord worldX, CamCoord worldY) +{ + struct Task *t; + NutsAndBolts *bolts; + Sprite *sprBolts; + s32 rndIndex = PseudoRandom32() % ARRAY_COUNT(gUnknown_080BB41C); + s32 rndTheta; + s32 a0, a1; + s32 rnd; + t = CreateNutsAndBoltsTask(0x2000U, VramMalloc(gUnknown_080BB434[rndIndex]), gUnknown_080BB41C[rndIndex], gUnknown_080BB42C[rndIndex], + TaskDestructor_NutsAndBolts); + bolts = TASK_DATA(t); + sprBolts = &bolts->s; + bolts->qUnk30 = Q(worldX); + bolts->qUnk34 = Q(worldY + 16); + sprBolts->frameFlags = SPRITE_FLAG(PRIORITY, 2); + sprBolts->oamFlags = SPRITE_OAM_ORDER(23); + bolts->qUnk3E = Q(5. / 256.); + bolts->qUnk40 = Q(32. / 256.); + rndTheta = PseudoRandom32(); + bolts->qUnk3A = (-(SIN(rndTheta & 0x1FF) * 0x600)) >> 0xE; + bolts->qUnk38 = (-(COS(rndTheta & 0x1FF) * 0x600)) >> 0xE; + + rnd = PseudoRandom32(); + sub_8017540(Q((worldX + (0x3F & rnd)) - 32), Q(worldY + 32 - ((rnd & 0x3F0000) >> 0x10))); +} + +void Task_8038554() +{ + EggX_10 *strc10 = TASK_DATA(gCurTask); + + switch (strc10->unk8) { + case 0: { + if (strc10->unk6 != 0) { + strc10->unk6--; + } else if (!(gPlayer.moveState & 2)) { + gPlayer.heldInput = 0x10; + gRefCollision = gCollisionTable[gCurrentLevel]; + gCamera.maxX = gRefCollision->pxWidth; + strc10->unk8++; + } + } break; + + case 1: { + if (gPlayer.qWorldX >= Q(3680)) { + gPlayer.heldInput = 0x20; + strc10->unk6 = 0xCU; + sub_8038C20(); + strc10->unk8++; + Bosses_SetCamBounds(gCamera.minY, gCamera.maxY, ((gPlayer.qWorldX >> 8) - 96), gCamera.maxX); + } + } break; + + case 2: { + if (--strc10->unk6 == 0) { + gPlayer.heldInput = 0; + gPlayer.charState = 0x34; + gPlayer.moveState |= 0x400000; + strc10->unk6 = 0x3CU; + strc10->unk8++; + } + } break; + + case 3: { + if (--strc10->unk6 == 0) { + strc10->unk6 = CreateStageResults(gRingCount, gCourseTime); + strc10->unk8++; + } + } break; + + case 4: { + gPlayer.sa2__unk72 = 0x3C; + + if (--strc10->unk6 == 0) { + gPlayer.charState = CHARSTATE_50; + gPlayer.moveState |= 0x400000; + gPlayer.qWorldY -= Q(16); + strc10->unkE = 0; + strc10->qUnkC = 0; + strc10->unk6 = 0; + strc10->unk8++; + break; + } + } break; + + case 5: { + if (++strc10->unk6 == 0x22) { + sub_8038B38(); + } + + if (strc10->unk6 > 0x99U) { + gPlayer.charState = 0x33; + strc10->qUnkC = Q(1); + strc10->unk6 = 120; + strc10->unk8++; + break; + } + + if (strc10->unk6 > 33) { + s16 theta; + s16 v; + strc10->unkE = ((strc10->unkE + 0x10)); + strc10->unkE &= ONE_CYCLE; + theta = strc10->unkE; + v = SIN(theta); + v >>= 11; + gPlayer.qWorldY = Q(strc10->unkA + (v)); + } else if (strc10->unk6 > 0x1FU) { + strc10->qUnkC += Q(4); + gPlayer.qWorldY += strc10->qUnkC; + strc10->unkA = I(gPlayer.qWorldY); + } else if (strc10->unk6 > 0x19U) { + strc10->qUnkC -= Q(1.5); + gPlayer.qWorldY += strc10->qUnkC; + } + } break; + + case 6: { + if (gPlayer.qWorldX <= Q(3872)) { + strc10->qUnkC += Q(0.5); + gPlayer.qWorldX += strc10->qUnkC; + } else { + gPlayer.moveState |= 0x100000; + } + + if (--strc10->unk6 == 0) { + sub_8038D2C(); + strc10->unk6 = 0xB4U; + strc10->unk8++; + break; + } + } break; + + case 7: { + if (--strc10->unk6 == 0) { + gWinRegs[4] = 0x3F3F; + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0; + gDispCnt |= 0x2000; + gDispCnt &= 0xBFFF; + strc10->unk6 = 0; + strc10->unk8++; + break; + } + } break; + + case 8: { + if (++strc10->unk6 > 0x80U) { + TasksDestroyInPriorityRange(0x2000U, 0x2FFFU); + TaskDestroy(gCurTask); + GoToNextLevel(); + } else { + gBldRegs.bldY = strc10->unk6 >> 3; + } + } break; + } + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + s32 v = (u8)strc10->unk8; + if (v >= 0) { + if (v <= 4) { + switch (strc10->unk9) { + case 0: + if (gPartner.qWorldX >= Q(3632)) { + gPartner.moveState |= 0x200000; + gPartner.frameInput = 0; + gPartner.heldInput = DPAD_LEFT; + strc10->unk9++; + } + break; + + case 1: + if (gPartner.qSpeedGround <= Q(0.5)) { + gPartner.heldInput = 0; + strc10->unk9++; + } + break; + + case 2: + if (gPartner.charState == 0) { + gPartner.moveState |= 0x400000; + strc10->unk9++; + } + /* fallthrough */ + case 3: + sub_80472AC(&gPartner); + break; + } + } else if (gPartner.charState != 0x3D) { + gPartner.charState = 0x3D; + } + } else { + if (gPartner.charState != 0x3D) { + gPartner.charState = 0x3D; + } + } + } +} + +void Task_Strc10_803891C() +{ + const Collision *temp_r0_7; + s32 rndX, rndY; + CamCoord x, y; + + EggX_10 *strc10 = TASK_DATA(gCurTask); + + if ((++strc10->unk4 & 3) == 0) { + rndX = PseudoRandom32(); + x = (rndX % DISPLAY_WIDTH) + gCamera.x; + rndY = PseudoRandom32(); + y = (rndY % DISPLAY_HEIGHT) + gCamera.y; + sub_8038420(x, y); + } + + if (++strc10->unk2 >= strc10->unk0) { + strc10->unk2 = 0; + strc10->unk0 -= 2; + if (strc10->unk0 < 4) { + strc10->unk0 = 4; + } + + x = I(gPlayer.qWorldX) - 48; + y = I(gPlayer.qWorldY); + sub_8038420(x, y); + } + + switch (strc10->unk8) { + case 0: + if (strc10->unk6 != 0) { + strc10->unk6--; + } else if (!(gPlayer.moveState & MOVESTATE_IN_AIR)) { + gPlayer.heldInput = 0x10; + gRefCollision = gCollisionTable[gCurrentLevel]; + gCamera.maxX = gRefCollision->pxWidth; + + strc10->unk8++; + } + + break; + case 1: + if ((s32)gPlayer.qWorldX > 0xBFFFF) { + gWinRegs[4] = 0x3F3F; + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0; + gDispCnt |= 0x2000; + gDispCnt &= 0xBFFF; + strc10->unk6 = 0; + strc10->unk8++; + } + break; + + case 2: + if (++strc10->unk6 > 128) { + gPlayer.heldInput = 0; + gPlayer.qSpeedAirX = 0; + gPlayer.qSpeedAirY = 0; + gPlayer.qSpeedGround = 0; + gPlayer.moveState |= 0x100000; + TasksDestroyInPriorityRange(0x2000U, 0x2FFFU); + CreateStageResults((u32)gRingCount, gCourseTime); + TaskDestroy(gCurTask); + gBldRegs.bldCnt &= 0xFFEF; + return; + } else { + gBldRegs.bldY = strc10->unk6 >> 3; + gCamera.shiftX = 0 - ((u16)strc10->unk6 >> 1); + } + break; + } +} + +void sub_8038B38(void) +{ + struct Task *t; + EggX_48 *strc48; + Sprite *s; + + // Needed for matching... (puts IWRAM-address to the beginning of the func) + EggX_10 *strc10 = TASK_DATA(gCurTask); + + strc48 = TASK_DATA(TaskCreate(sub_8038BC8, sizeof(EggX_48), 0x2100U, 0U, TaskDestructor_EggX48)); + strc48->unk30 = 0xF; + strc48->s.graphics.dest = VramMalloc(0x38U); + strc48->s.oamFlags = 0x440; + strc48->s.graphics.size = 0; + strc48->s.graphics.anim = SA1_ANIM_SUPER_SONIC_TRANSFORM; + strc48->s.variant = 1; + strc48->s.animCursor = 0; + strc48->s.qAnimDelay = 0; + strc48->s.prevVariant = 0xFF; + strc48->s.animSpeed = SPRITE_ANIM_SPEED(1.0); + strc48->s.palId = 0; + strc48->s.frameFlags = 0x2000; +} + +void sub_8038BC8(void) +{ + EggX_48 *strc48 = TASK_DATA(gCurTask); + + Sprite *s = &strc48->s; + s->x = I(gPlayer.qWorldX) - gCamera.x; + s->y = I(gPlayer.qWorldY) - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (--strc48->unk30 == 0) { + TaskDestroy(gCurTask); + } +} + +void sub_8038C20(void) +{ + EggX_Sparkle *sparkle; + Sprite *s; + SpriteTransform *tf; + + sparkle = TASK_DATA(TaskCreate(sub_8038E34, sizeof(EggX_Sparkle), 0x2100U, 0U, TaskDestructor_EggX_Sparkle)); + sparkle->unk50 = 0xEF4; + sparkle->unk52 = 0x120; + sparkle->unk54 = 0; + sparkle->unk58 = 0; + sparkle->unk5C = -8; + sparkle->unk5E = 4; + sparkle->unk4A = 0x1000; + sparkle->unk4C = -1; + sparkle->unk3C = 0x258; + + s = &sparkle->s; + s->graphics.dest = VramMalloc(4U); + s->oamFlags = 0x5C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_FINAL_CUTSCENE_SPARKLE_A; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2030; + + tf = &sparkle->transform; + tf->rotation = 0; + tf->qScaleX = 0x100; + tf->qScaleY = 0x100; +} + +void sub_8038D2C(void) +{ + EggX_Sparkle *sparkle; + Sprite *s; + SpriteTransform *tf; + + sparkle = TASK_DATA(TaskCreate(sub_8038E34, sizeof(EggX_Sparkle), 0x2100U, 0U, TaskDestructor_EggX_Sparkle)); + sparkle->unk50 = 0xEF4; + sparkle->unk52 = 0x120; + sparkle->unk54 = 0; + sparkle->unk58 = 0; + sparkle->unk5C = -12; + sparkle->unk5E = 6; + sparkle->unk4A = 0x1000; + sparkle->unk4C = -1; + sparkle->unk3C = 0x258; + + s = &sparkle->s; + s->graphics.dest = VramMalloc(16); + s->oamFlags = 0x5C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_FINAL_CUTSCENE_SPARKLE_B; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2030; + + tf = &sparkle->transform; + tf->rotation = 0; + tf->qScaleX = 0x100; + tf->qScaleY = 0x100; +} + +void sub_8038E34() +{ + SpriteTransform *tf; + + EggX_Sparkle *sparkle = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + + tf = &sparkle->transform; + sparkle->unk54 += sparkle->unk5C; + sparkle->unk58 += sparkle->unk5E; + worldX = sparkle->unk50 + I(sparkle->unk54); + worldY = sparkle->unk52 + I(sparkle->unk58); + tf->x = worldX - gCamera.x; + tf->y = worldY - gCamera.y; + sparkle->unk4A += sparkle->unk4C; + + if (sparkle->unk4A <= Q(8)) { + sparkle->unk4A = Q(8); + } + + tf->qScaleX = sparkle->unk4A >> 4; + tf->qScaleY = sparkle->unk4A >> 4; + UpdateSpriteAnimation(&sparkle->s); + TransformSprite(&sparkle->s, tf); + DisplaySprite(&sparkle->s); + + if (--sparkle->unk3C == 0) { + TaskDestroy(gCurTask); + } +} + +void sub_8038F04(void) +{ + Sprite *s; + Sprite *s2; + EggX_7C *strc7C; + EggX *boss = TASK_DATA(gCurTask); + struct Task *t; + CamCoord worldX, worldY; + + t = TaskCreate(Task_8039264, sizeof(EggX_7C), 0x2001U, 0U, TaskDestructor_EggX7C); + boss->task9C = t; + strc7C = TASK_DATA(t); + strc7C->unk74 = boss->unk88 + I(boss->qUnk74); + strc7C->unk76 = boss->unk8A + I(boss->qUnk78); + strc7C->unk64 = 0; + strc7C->unk68 = 0xFFFFE900; + strc7C->unk6C = 0; + strc7C->unk70 = 0; + strc7C->unk78 = 0; + strc7C->unk79 = 0; + strc7C->unk7A = 0; + s = &strc7C->s; + s->graphics.dest = VramMalloc(0xCU); + s->oamFlags = 0x500; + s->graphics.size = 0; + s->graphics.anim = 0x2B0; + s->variant = 8; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s2 = &strc7C->s2; + s2->graphics.dest = VramMalloc(0xCU); + s2->oamFlags = 0x500; + s2->graphics.size = 0; + s2->graphics.anim = 0x2B0; + s2->variant = 0xB; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->frameFlags = 0x2000; +} + +void sub_8039074(u8 param0) +{ + u8 var_r0; + + EggX_7C *strc7C = TASK_DATA(gCurTask); + + switch (param0) { + case 1: + strc7C->s.variant = 4; + strc7C->s2.variant = 5; + strc7C->s.prevVariant = -1; + strc7C->s2.prevVariant = -1; + strc7C->unk78 = 4; + break; + case 2: + strc7C->s.variant = 2; + strc7C->s2.variant = 3; + strc7C->s.prevVariant = -1; + strc7C->s2.prevVariant = -1; + strc7C->unk78 = 2; + break; + case 3: + strc7C->s.variant = 6; + strc7C->s2.variant = 7; + strc7C->s.prevVariant = -1; + strc7C->s2.prevVariant = -1; + strc7C->unk78 = 6; + break; + } +} + +void sub_8039108(void) +{ + EggX_7C *strc7C = TASK_DATA(gCurTask); + + switch (strc7C->s.variant) { + case 4: + strc7C->s.variant = 0xE; + strc7C->s2.variant = 17; + strc7C->s.prevVariant = -1; + strc7C->s2.prevVariant = -1; + strc7C->unk78 = 14; + break; + case 2: + strc7C->s.variant = 15; + strc7C->s2.variant = 18; + strc7C->s.prevVariant = -1; + strc7C->s2.prevVariant = -1; + strc7C->unk78 = 15; + break; + case 6: + strc7C->s.variant = 16; + strc7C->s2.variant = 19; + strc7C->s.prevVariant = -1; + strc7C->s2.prevVariant = -1; + strc7C->unk78 = 16; + break; + } +} + +void sub_803918C(u8 param0) +{ + EggX_7C *strc7C = TASK_DATA(gCurTask); + Sprite *s = &strc7C->s; + Sprite *s2 = &strc7C->s2; + + if (s->frameFlags & 0x4000) { + if (s->variant == param0) { + strc7C->unk7A |= 1; + return; + } else { + switch (s->variant - 8) { + case 0: + case 6: + s->variant = 10; + s2->variant = 13; + break; + case 1: + case 7: + s->variant = 8; + s2->variant = 11; + break; + case 2: + case 8: + s->variant = 9; + s2->variant = 12; + break; + } + s->prevVariant = 0xFF; + s2->prevVariant = -1; + } + } + + strc7C->unk7A &= ~1; +} + +void Task_8039264() +{ + enum EHit collPlayer; + enum EHit collPartner; + s16 temp_r2; + s32 worldX32, worldY32; + CamCoord worldX, worldY; + s32 temp_r0_4; + s32 temp_r0_7; + s32 temp_r0_8; + s32 temp_r1; + s32 temp_r3_2; + s32 var_r0; + s32 var_r0_2; + u16 temp_r0_6; + u16 temp_r0_9; + u16 temp_r2_2; + u8 *temp_r1_2; + u8 *temp_r1_4; + u8 *temp_r1_5; + u8 *temp_r3; + u8 *temp_r4_2; + u8 *var_r0_3; + u8 temp_r0_5; + u8 var_r0_4; + u8 var_r1; + u8 var_r1_2; + + u32 mask; + + EggX_7C *strc7C = TASK_DATA(gCurTask); + EggX *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s = &strc7C->s; + Sprite *s2 = &strc7C->s2; + s->frameFlags &= 0xFFFFFBFF; + s2->frameFlags &= 0xFFFFFBFF; + mask = boss->s.frameFlags & 0x400; + s->frameFlags |= mask; + s2->frameFlags |= mask; + + if (boss->s.palId != 0) { + s2->palId = s->palId = 254; + } else { + s2->palId = s->palId = 0; + } + + strc7C->unk74 = boss->unk8C; + strc7C->unk76 = boss->unk8E; + if (boss->unk94 > 7) { + if (strc7C->unk79 != 0) { + if (s->variant != 6) { + sub_8039108(); + } + strc7C->unk79 = 0; + } + strc7C->unk6C = 0; + strc7C->unk70 = 0; + if (boss->unk99 > 1U) { + TaskDestroy(gCurTask); + return; + } + } else { + switch (strc7C->unk79) { + case 0: + break; + case 1: { + EggX_7C *strc7C_ = TASK_DATA(gCurTask); + strc7C_->unk78 = 8; + if (1 & strc7C->unk7A) { + strc7C->unk60 = 30; + goto lbl; + } + } break; + case 2: + if (--strc7C->unk60 == 0) { + strc7C->unk70 = 0x100; + strc7C->unk79++; + break; + } + break; + case 3: + if ((strc7C->unk68 + strc7C->unk70) >= 0) { + strc7C->unk68 = 0; + strc7C->unk70 = 0; + strc7C->unk79++; + } + break; + case 4: + break; + case 5: + strc7C->unk70 = -0x100; + strc7C->unk79++; + break; + case 7: + break; + case 8: + strc7C->unk68 = -0x1700; + strc7C->unk78 = 0; + strc7C->unk79++; + /* fallthrough */ + case 9: + if (boss->unk9A != 0) { + sub_803A900__inline(boss->unk9A); + } + break; + case 10: + strc7C->unk70 = 0x200; + strc7C->unk79++; + /* fallthrough */ + case 11: + if ((strc7C->unk68 + strc7C->unk70) >= 0) { + strc7C->unk68 = 0; + strc7C->unk70 = 0; + strc7C->unk79++; + break; + } + break; + case 12: + break; + case 13: + sub_8039074(boss->unk9A); + strc7C->unk79++; + break; + case 14: + break; + case 15: + sub_8039108(); + strc7C->unk60 = 0xA; + strc7C->unk79++; + /* fallthrough */ + case 16: + if (--strc7C->unk60 == 0) { + strc7C->unk70 = -Q(2); + strc7C->unk79++; + break; + } + break; + case 18: + break; + case 19: + strc7C->unk79++; + strc7C->unk70 = -Q(2); + strc7C->unk79++; + break; + case 6: + case 17: + case 21: + if ((strc7C->unk68 + strc7C->unk70) <= -0x1700) { + strc7C->unk68 = -0x1700; + strc7C->unk70 = 0; + lbl: + strc7C->unk79++; + break; + } + break; + case 22: + break; + } + } + strc7C->unk64 += strc7C->unk6C; + strc7C->unk68 += strc7C->unk70; + + if (strc7C->unk68 <= -Q(23)) { + strc7C->unk7A |= 0x4; + } else { + strc7C->unk7A &= ~0x4; + } + if ((s32)strc7C->unk68 >= 0) { + strc7C->unk7A |= 0x2; + } else { + strc7C->unk7A &= ~0x2; + } + + worldX = worldX32 = I(strc7C->unk64) + strc7C->unk74; + worldY = worldY32 = I(strc7C->unk68) + strc7C->unk76; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + sub_803918C(strc7C->unk78); + + if ((boss->unk98 != 0) && (boss->unk95 == 0) && (boss->unk94 < 8)) { + sub_803A650__inline(worldX, worldY); + } + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); +} + +void sub_803967C(void) +{ + s32 rnd = PseudoRandom32() & 0x800; + EggX *boss = TASK_DATA(gCurTask); + Sprite *s; + struct Task *t; + EggX_48 *strc48; + s32 r2; + s32 v; + t = TaskCreate(Task_80397A8, sizeof(EggX_48), 0x2100, 0, TaskDestructor_EggX48); + strc48 = TASK_DATA(t); + strc48->unk40 = boss->unk88; + strc48->unk42 = boss->unk8A; + strc48->qUnk34 = boss->qUnk74; + strc48->qUnk38 = boss->qUnk78; + + if (rnd) { + strc48->unk44 = 40; + strc48->qUnk3E = -Q(2); + r2 = Q(3); + } else { + strc48->unk44 = 48; + strc48->qUnk3E = -Q(5); + r2 = Q(1.5); + } + + if (boss->s.frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + strc48->qUnk34 += Q(20); + strc48->qUnk3C = +r2; + } else { + strc48->qUnk34 -= Q(20); + strc48->qUnk3C = -r2; + } + + s = &strc48->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_EGGX_BALL); + s->oamFlags = 0x5C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_EGGX_BALL; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + m4aSongNumStart(SE_IMPACT); +} + +void Task_80397A8(void) +{ + s32 sp4; + enum EHit temp_r8; + enum EHit var_r0_2; + s32 var_r0; + s32 temp_r0; + s32 res; + s32 temp_r1; + s32 temp_r3; + CamCoord worldX, worldY; + u16 temp_r0_4; + u16 temp_r2; + u16 temp_r6; + EggX *boss; + Sprite *s; + + EggX_48 *strc48 = TASK_DATA(gCurTask); + boss = TASK_DATA(TASK_PARENT(gCurTask)); + s = &strc48->s; + strc48->qUnk3E += strc48->unk44; + strc48->qUnk34 += strc48->qUnk3C; + strc48->qUnk38 += strc48->qUnk3E; + worldX = I(strc48->qUnk34) + strc48->unk40; + worldY = I(strc48->qUnk38) + strc48->unk42; + res = sa2__sub_801F100(worldY + 8, worldX, 1, 8, sa2__sub_801EC3C); + if (res < 0) { + s32 v16; + s32 v; + strc48->qUnk38 += Q(res); + v16 = -(u16)strc48->qUnk3E; + var_r0 = +strc48->qUnk3E; + if (var_r0 < 0) { + var_r0 += 3; + } + strc48->qUnk3E = v16 + (var_r0 >> 2); + } + + if (boss->unk94 <= 7) { + sub_803A650__inline(worldX, worldY); + } + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); + if ((strc48->qUnk34 + 0xD000) > 0x1A000U) { + TaskDestroy(gCurTask); + } +} + +void sub_8039940() +{ + SpriteTransform *tf; + s16 var_r0; + s16 var_r0_2; + u32 temp_r0_2; + u8 *temp_r0; + u8 *temp_r1; + + EggX *boss = TASK_DATA(gCurTask); + struct Task *t; + EggX_Sparkle *sparkle; + Sprite *s; + + t = TaskCreate(Task_8039A64, sizeof(EggX_Sparkle), 0x2100U, 0U, TaskDestructor_EggX_Sparkle); + sparkle = TASK_DATA(t); + sparkle->unk50 = boss->unk88 + I(boss->qUnk74); + sparkle->unk52 = boss->unk8A + I(boss->qUnk78); + sparkle->unk40 = Q(14); + sparkle->unk48 = -Q(2); + sparkle->unk4A = 0; + if (boss->s.frameFlags & 0x400) { + sparkle->unk50 += 0x1A; + } else { + sparkle->unk50 -= 0x1A; + } + sparkle->unk3C = 0x11; + sparkle->unk61 = 0; + sparkle->unk62 = 0; + + s = &sparkle->s; + s->graphics.dest = VramMalloc(0x40U); + s->oamFlags = 0x5C0; + s->graphics.size = 0; + s->graphics.anim = 0x2B1; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = (boss->s.frameFlags & 0x400) | 0x2030; + + tf = &sparkle->transform; + tf->rotation = 0; + if (s->frameFlags & 0x400) { + tf->qScaleX = -0x100; + } else { + tf->qScaleX = 0x100; + } + tf->qScaleY = 0x100; +} + +// (97.65%) https://decomp.me/scratch/tCZo7 +NONMATCH("asm/non_matching/game/enemies/boss_x3__Task_8039A64.inc", void Task_8039A64()) +{ + s32 worldX, worldY; + s32 temp_r0; + s16 temp_r1_3; + s32 temp_r2_4; + s16 var_r6; + s16 var_ip; + u8 temp_r2_5; + s32 qX, qY; + + EggX *boss; + SpriteTransform *tf; + s32 sp8 = 0; + EggX_Sparkle *sparkle = TASK_DATA(gCurTask); + Sprite *s; + boss = TASK_DATA(TASK_PARENT(gCurTask)); + s = &sparkle->s; + tf = &sparkle->transform; + if (boss->unk94 <= 7) { + sparkle->unk50 = boss->unk8C; + sparkle->unk52 = boss->unk8E; + if (s->frameFlags & 0x400) { + sparkle->unk50 += 0x1A; + } else { + sparkle->unk50 -= 0x1A; + } + } + sparkle->unk40 += sparkle->unk48; + sparkle->unk4E = sparkle->unk4A; + var_r6 = sparkle->unk4A; + var_ip = sparkle->unk4A; + + if (s->frameFlags & 0x400) { + var_r6 = (-var_r6 - Q(2)); + var_r6 &= 0x3FF; + var_ip = (-(var_ip << 16) >> 16) & 0x3FF; + } + worldX = COS(var_r6); + worldX >>= 6; + worldX *= sparkle->unk40; + worldX = I((worldX) >> 8); // NOTE: Technically I(Q_MUL())! + worldY = SIN(var_r6); + worldY >>= 6; + worldY *= sparkle->unk40; + worldY = I((worldY) >> 8); + worldX += sparkle->unk50; + worldY += sparkle->unk52; + tf->x = worldX - gCamera.x; + tf->y = worldY - gCamera.y; + tf->rotation = var_ip; + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + if (boss->unk94 > 7) { + sparkle->unk48 = 0; + sparkle->unk54 = Q(worldX); + sparkle->unk58 = Q(worldY); + s->oamFlags = 0x5C0; + sparkle->unk3C = 0x50; + gCurTask->main = Task_803A46C; + return; + } + + { + switch (sparkle->unk61) { + case 0: + case 1: { + sp8 = sub_8036F9C(worldX, worldY, 0); + } break; + + case 2: { + sp8 = sub_8036F9C(worldX, worldY, 1); + } break; + } + } + + switch (sparkle->unk61) { + case 0: + if (--sparkle->unk3C == 0) { + temp_r0 = PseudoRandom32(); + sparkle->unk48 = 0; + sparkle->unk61++; + if (((temp_r0 % 100) - 35) <= 0) { + sparkle->unk3C = 0xB4; + } else if (((temp_r0 % 100) - 70) <= 0) { + sparkle->unk3C = 0x3C; + } else if (((temp_r0 % 100) - 90) <= 0) { + sparkle->unk3C = 0x12; + } else { + sparkle->unk3C = 0x12C; + } + } + break; + case 1: + worldX = sparkle->unk50 - I(gPlayer.qWorldX); + worldY = sparkle->unk52 - I(gPlayer.qWorldY); + + worldX = ABS(worldX); + + worldX = (u16)sa2__sub_8004418(worldY, worldX); + if ((u32)((u32)((worldX - 225) + 0xFF1F0000) >> 0x10) < 0x11F) { + worldX = 224; + } + if ((u32)((u32)((worldX << 0x10) + 0xFDFF0000) >> 0x10) < 0x11F) { + worldX = 800; + } + + temp_r1_3 = (sparkle->unk4A << 6); + if (temp_r1_3 > (temp_r0 = ((worldX << 22) >> 16))) { + if (temp_r1_3 >= (temp_r0 + Q(1.5))) { + sparkle->unk4A -= 6; + } else { + goto lbl2; + } + } else if (temp_r1_3 < temp_r0) { + if (temp_r1_3 > (temp_r0 - Q(1.5))) { + lbl2: + sparkle->unk4A = (s16)worldX; + } else { + sparkle->unk4A += 6; + } + } + sparkle->unk4A &= 0x3FF; + + if (--sparkle->unk3C == 0) { + temp_r0 = sparkle->unk50 - I(gPlayer.qWorldX); + temp_r2_4 = sparkle->unk52 - I(gPlayer.qWorldY); + sparkle->unk44 = -(Sqrt(Q(SQUARE(temp_r0)) + Q(SQUARE(temp_r2_4))) * 16) - Q(16); + sparkle->unk48 = -Q(6); + sparkle->unk60 = 0; + sparkle->unk61++; + s->oamFlags = 0x3C0; + s->variant = 1; + s->prevVariant = -1; + m4aSongNumStart(0xB3U); + } + break; + case 2: + temp_r2_5 = (((I(-sparkle->unk40) - 20) >> 4) + 1); + if (sparkle->unk60 < temp_r2_5) { + sparkle->unk60 = temp_r2_5; + sub_803A1D8(); + } + + if (sp8 == 2) { + sparkle->unk62 = 0xFF; + sparkle->unk48 = 0; + sparkle->unk61 = 7; + s->variant = 2; + s->prevVariant = -1; + Player_TransitionCancelFlyingAndBoost(&gPlayer); + + gPlayer.qWorldX = Q(worldX); + gPlayer.qWorldY = Q(worldY); + gPlayer.qSpeedAirX = 0; + gPlayer.qSpeedAirY = 0; + gPlayer.qSpeedGround = 0; + gPlayer.moveState |= 0xE00100; + + if (s->frameFlags & 0x400) { + gPlayer.rotation = (-sparkle->unk4A) >> 2; + } else { + gPlayer.rotation = (+sparkle->unk4A) >> 2; + } + gPlayer.charState = CHARSTATE_40; + gPlayer.heldInput = 0; + gPlayer.frameInput = 0; + } else if (sparkle->unk40 <= sparkle->unk44) { + sparkle->unk48 = 0; + sparkle->unk61++; + s->variant = 2; + s->prevVariant = -1; + } + break; + case 3: + if (s->frameFlags & 0x4000) { + sparkle->unk48 = 0x200; + sparkle->unk61++; + } + break; + case 4: + if (sparkle->unk40 >= -Q(20)) { + sparkle->unk40 = -0x1400; + sparkle->unk48 = 0; + s->oamFlags = 0x5C0; + s->variant = 0; + s->prevVariant = -1; + sparkle->unk61++; + } + break; + case 5: + if (sparkle->unk4A == 0) { + s->oamFlags = 0x5C0; + sparkle->unk48 = 0x100; + sparkle->unk61++; + break; + } else if (sparkle->unk4A > 0x200) { + sparkle->unk4A = (sparkle->unk4A + 6) & 0x3FF; + if (sparkle->unk4A >= 7) { + break; + } + sparkle->unk4A = 0; + } else { + sparkle->unk4A = (sparkle->unk4A - 6) & 0x3FF; + if (sparkle->unk4A <= 0x200) { + break; + } + sparkle->unk4A = 0; + } + break; + case 6: + if (sparkle->unk40 >= 0xE00) { + if (sparkle->unk62 == 0) { + boss->unk99++; + } else { + boss->unk92 = 1; + } + TaskDestroy(gCurTask); + return; + } + break; + case 7: + gPlayer.qWorldX = Q(worldX); + gPlayer.qWorldY = Q(worldY); + if (s->frameFlags & 0x400) { + gPlayer.rotation = (-sparkle->unk4A) >> 2; + } else { + gPlayer.rotation = (+sparkle->unk4A) >> 2; + } + if (s->frameFlags & 0x4000) { + sparkle->unk48 = 0x600; + sparkle->unk61++; + } + break; + case 8: + gPlayer.qWorldX = Q(worldX); + gPlayer.qWorldY = Q(worldY); + if (s->frameFlags & 0x400) { + gPlayer.rotation = (-sparkle->unk4A) >> 2; + } else { + gPlayer.rotation = (+sparkle->unk4A) >> 2; + } + + if (sparkle->unk40 >= -0x2400) { + sparkle->unk40 = -0x2400; + sparkle->unk48 = 0; + sparkle->unk4C = 0x10; + sparkle->unk3C = 0; + sparkle->unk61++; + } + break; + case 9: + gPlayer.qWorldX = Q(worldX); + gPlayer.qWorldY = Q(worldY); + + if (s->frameFlags & 0x400) { + gPlayer.rotation = (-sparkle->unk4A) >> 2; + } else { + gPlayer.rotation = (+sparkle->unk4A) >> 2; + } + + sparkle->unk4A = (sparkle->unk4A + sparkle->unk4C) & 0x3FF; + if (sparkle->unk4A > 0x1FF) { + u16 lostRingsCount = gRingCount; + if ((lostRingsCount > 0) && (sparkle->unk4C < 0)) { + if ((u32)lostRingsCount > 5U) { + lostRingsCount = 5; + } + InitScatteringRings(I(gPlayer.qWorldX), I(gPlayer.qWorldY), lostRingsCount); + gRingCount -= lostRingsCount; + } + sparkle->unk4C = 0x10; + } + if ((u16)(sparkle->unk4A + -Q(1)) < Q(1)) { + sparkle->unk4C = -0x10; + if (++sparkle->unk3C == 4) { + boss->unk99 = 0x33; + } + + if (sparkle->unk3C == 5) { + sub_803A170(s->frameFlags & 0x400); + sparkle->unk61 = 5; + } + } + break; + } +} +END_NONMATCH + +// (99.10%) https://decomp.me/scratch/xmkJN +NONMATCH("asm/non_matching/game/enemies/boss_x3__sub_803A170.inc", void sub_803A170(u32 arg0)) +{ + s16 var_r0; + + gPlayer.timerInvulnerability = 0x78; + if (arg0 != 0) { + gPlayer.qSpeedAirX = -Q(2); + } else { + gPlayer.qSpeedAirX = +Q(2); + } + + gPlayer.qSpeedAirY = -0x5E0; + gPlayer.rotation = 0; + gPlayer.moveState = (gPlayer.moveState & 0xFF1FFAC3) | 2; + gPlayer.charState = 0xF; + Player_HandleSpriteYOffsetChange(&gPlayer, 0xE); + gPlayer.spriteOffsetX = 6; + gPlayer.spriteOffsetY = 0xE; + gPlayer.sa2__unk61 = 0; + gPlayer.sa2__unk62 = 0; +} +END_NONMATCH + +void sub_803A1D8() +{ + s32 sp4; + SpriteTransform *tf; + s16 var_r0; + struct Task *t; + EggX_Sparkle *sparkle; + EggX_Sparkle *sparkleParent; + Sprite *s; + + sparkleParent = TASK_DATA(gCurTask); + + t = TaskCreate(Task_803A2F8, sizeof(EggX_Sparkle), 0x2101U, 0U, TaskDestructor_EggX_Sparkle); + sparkle = TASK_DATA(t); + sparkle->unk50 = sparkleParent->unk50; + sparkle->unk52 = sparkleParent->unk52; + sparkle->unk4A = sparkleParent->unk4E; + sparkle->unk60 = sparkleParent->unk60; + s = &sparkle->s; + sparkle->s.graphics.dest = ALLOC_TILES(SA1_ANIM_EGGX_BALL); + sparkle->s.oamFlags = SPRITE_OAM_ORDER(24); + sparkle->s.graphics.size = 0; + sparkle->s.graphics.anim = SA1_ANIM_EGGX_BALL; + sparkle->s.variant = 0; + sparkle->s.animCursor = 0; + sparkle->s.qAnimDelay = 0; + sparkle->s.prevVariant = -1; + sparkle->s.animSpeed = SPRITE_ANIM_SPEED(1.0); + sparkle->s.palId = 0; + sparkle->s.hitboxes[0].index = -1; + sparkle->s.frameFlags = (sparkleParent->s.frameFlags & 0x400) | 0x2030; + + tf = &sparkle->transform; + tf->rotation = 0; + if (sparkle->s.frameFlags & 0x400) { + tf->qScaleX = -Q(1); + } else { + tf->qScaleX = +Q(1); + } + tf->qScaleY = 0x100; +} + +void Task_803A2F8() +{ + s32 worldX, worldY; + s16 temp_r0; + s16 var_r4; + u16 var_r6; + + EggX_Sparkle *sparkle; + EggX_Sparkle *sparkleParent; + SpriteTransform *tf; + EggX *boss; + Sprite *s; + + sparkle = TASK_DATA(gCurTask); + s = &sparkle->s; + sparkleParent = TASK_DATA(TASK_PARENT(gCurTask)); + boss = TASK_DATA(TASK_PARENT(TASK_PARENT(gCurTask))); + + tf = &sparkle->transform; + sparkle->unk50 = sparkleParent->unk50; + sparkle->unk52 = sparkleParent->unk52; + var_r4 = var_r6 = sparkleParent->unk4E; + if (s->frameFlags & 0x400) { + temp_r0 = (s16)var_r6; + var_r4 = ((-temp_r0 - Q(2))) % 1024u; + var_r6 = (-temp_r0) % 1024u; + } + + sparkle->unk40 = sparkleParent->unk40 + (Q((sparkle->unk60 * 0x10) + 8)); + worldX = COS(var_r4); + worldX >>= 6; + worldX *= sparkle->unk40; + worldX = I((worldX) >> 8); + worldY = SIN(var_r4); + worldY >>= 6; + worldY *= sparkle->unk40; + worldY = I((worldY) >> 8); + worldX += sparkle->unk50; + worldY += sparkle->unk52; + + tf->x = worldX - gCamera.x; + tf->y = worldY - gCamera.y; + tf->rotation = var_r6; + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + if ((sparkle->unk40 > 0x800) || (sparkleParent->unk61 == 6)) { + TaskDestroy(gCurTask); + } + if (boss->unk94 > 7) { + sparkle->unk48 = 0; + sparkle->unk54 = worldX << 8; + sparkle->unk58 = worldY << 8; + gCurTask->main = Task_803A46C; + sparkle->unk3C = (0x50 - (sparkle->unk60 * 4)); + } +} + +void Task_803A46C() +{ + EggX_Sparkle *sparkle; + EggX_Sparkle *sparkleParent; + SpriteTransform *tf; + EggX *boss; + Sprite *s; + Sprite *s2; + CamCoord worldX, worldY; + s32 res; + + sparkle = TASK_DATA(gCurTask); + s = &sparkle->s; + tf = &sparkle->transform; + + sparkle->unk48 += 0x20; + sparkle->unk58 += sparkle->unk48; + + worldX = I(sparkle->unk54); + worldY = I(sparkle->unk58); + + res = SA2_LABEL(sub_801F100)(worldY + 8, worldX, 1, 8, sa2__sub_801EC3C); + + if (res < 0) { + sparkle->unk58 += Q(res); + sparkle->unk48 = (sparkle->unk48 >> 2) - sparkle->unk48; + } + + tf->x = worldX - gCamera.x; + tf->y = worldY - gCamera.y; + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + if ((--sparkle->unk3C == 0)) { + sub_8017540(Q(worldX), Q(worldY)); + TaskDestroy(gCurTask); + } +} + +void TaskDestructor_EggX(struct Task *t) +{ + EggX *boss = TASK_DATA(t); + VramFree(boss->s.graphics.dest); + VramFree(boss->s2.graphics.dest); +} + +void sub_803A54C(void) +{ + EggX_10 *strc10; + u16 temp_r0; + + temp_r0 = LOADED_SAVE->unlockedLevels[0]; + if (temp_r0 < 0xE) { + temp_r0 = 0xE; + } + LOADED_SAVE->unlockedLevels[0] = temp_r0; + + strc10 = TASK_DATA(TaskCreate(Task_8038554, sizeof(EggX_10), 0x1FFFU, 0U, NULL)); + strc10->unk6 = 0x1A4; + strc10->unk9 = 0; + strc10->unk8 = 0; +} + +void sub_803A594(void) +{ + EggX_10 *strc10; + + strc10 = TASK_DATA(TaskCreate(Task_Strc10_803891C, sizeof(EggX_10), 0x1FFFU, 0U, NULL)); + strc10->unk0 = 32; + strc10->unk2 = 0; + strc10->unk4 = 0; + strc10->unk6 = 120; + strc10->unk8 = 0; +} + +void TaskDestructor_EggX7C(struct Task *t) +{ + EggX_7C *strc7C = TASK_DATA(t); + VramFree(strc7C->s.graphics.dest); + VramFree(strc7C->s2.graphics.dest); +} + +void TaskDestructor_EggX48(struct Task *t) +{ + EggX_48 *strc48 = TASK_DATA(t); + VramFree(strc48->s.graphics.dest); +} + +void TaskDestructor_EggX_Sparkle(struct Task *t) +{ + EggX_Sparkle *strc48 = TASK_DATA(t); + VramFree(strc48->s.graphics.dest); +} + +void sub_803A614(void) { sub_803A614__inline(); } + +void sub_803A650(CamCoord worldX, CamCoord worldY) +{ + enum EHit collPlayer; + enum EHit collPartner; + + EggX_7C *strc7C = TASK_DATA(gCurTask); + Sprite *s = &strc7C->s; + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = HIT_NONE; + } + + if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + EggX *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + s2->variant = 3; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} + +// Belongs to sub_803A6EC, might be able to be removed once matched... +typedef struct Test { + Sprite *s; +} Test; + +// (70.86%) https://decomp.me/scratch/rf3AU +NONMATCH("asm/non_matching/game/enemies/boss_x3__sub_803A6EC.inc", + void sub_803A6EC(CamCoord worldX, CamCoord worldY, u8 param2, u8 param3, u8 param4, u8 param5)) +{ + EHit collPlayer, collPartner; + const Test test = { .s = NULL }; + Rect8 rect; + rect.left = param2; + rect.right = param3; + rect.top = param4; + rect.bottom = param5; + + collPlayer = sub_800C1E8(test.s, rect, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800C1E8(test.s, rect, worldX, worldY, &gPartner); + } else { + collPartner = 0; + } + + if ((collPlayer | collPartner) == HIT_PLAYER) { + EggX *strc7C = TASK_DATA(gCurTask); + Sprite *s2 = &strc7C->s2; + s2->variant = 3; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} +END_NONMATCH + +void sub_803A7D4(CamCoord worldX, CamCoord worldY) +{ + EggX_7C *strc7C = TASK_DATA(gCurTask); + Sprite *s = &strc7C->s; + EHit collPlayer, collPartner; + + collPlayer = sub_800BF10(s, worldX, worldY, &gPlayer); + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + collPartner = sub_800BF10(s, worldX, worldY, &gPartner); + } else { + collPartner = HIT_NONE; + } + + if ((collPlayer == HIT_PLAYER) || (collPartner == HIT_PLAYER)) { + EggX *boss = TASK_DATA(TASK_PARENT(gCurTask)); + Sprite *s2 = &boss->s2; + + s2->variant = 3; + s2->frameFlags &= ~0x4000; + s2->prevVariant = -1; + } +} + +static void ChangeVariant(void) { ChangeVariant__inline(); } + +void sub_803A8AC(void) { CopySpritePos__inline(); } + +void sub_803A8CC(CamCoord worldX, CamCoord worldY) +{ + EggX *boss = TASK_DATA(gCurTask); + Sprite *s = &boss->s; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; +} + +void sub_803A900(u8 arg0) { sub_803A900__inline(arg0); } \ No newline at end of file diff --git a/sa1/src/game/enemies/boss_xtra_super_egg_robot.c b/sa1/src/game/enemies/boss_xtra_super_egg_robot.c new file mode 100644 index 0000000000..f06811be20 --- /dev/null +++ b/sa1/src/game/enemies/boss_xtra_super_egg_robot.c @@ -0,0 +1,1676 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "bg_triangles.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" // CreatePreBossCameraPan +#include "game/nuts_and_bolts_task.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/save.h" +#include "game/stage/dust_effect_braking.h" +#include "game/stage/extra_stage.h" +#include "game/stage/player.h" // sub_804A8A8 +#include "game/stage/terrain_collision.h" +#include "game/enemies/boss_xtra_super_egg_robo.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" + +/* Extra Zone Boss - Super Egg Robot */ + +void sub_804B2BC(s32 a, s32 b); +bool32 sub_80520B8(SuperEggRobo *boss); +void sub_80523D4(SuperEggRobo *boss); +void sub_80523F8(SuperEggRobo *boss); +void sub_8052424(SuperEggRobo *boss); +void sub_8052468(SuperEggRobo *boss); + +ExtraBossTaskData gExtraBossTaskData = { 0 }; + +const u8 gUnknown_084AE560[] = { 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0 }; + +SomeTaskManager_7C *sub_8052474(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3); +SomeTaskManager_7C *sub_80524F0(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3); +SomeTaskManager_7C *sub_8052578(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3); +SomeTaskManager_7C *sub_80525E0(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3); +SomeTaskManager_7C *sub_805265C(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3); +SomeTaskManager_7C *sub_8052838(SuperEggRobo *boss, s32 param1, s32 param2, s32 param3); + +SomeTaskManager_7C *sub_80526C4(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4); +SomeTaskManager_7C *sub_8052724(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4); +SomeTaskManager_7C *sub_8052780(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4); +SomeTaskManager_7C *sub_80527DC(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4); + +void sub_804B570(s32, s32); +bool32 sub_8052150(s32 arg0, s32 arg1, u16 arg2, SomeTaskManager_7C *arg3); + +void Task_SuperEggRobotInit() +{ + SuperEggRobo *boss = TASK_DATA(gCurTask); + + if (!(boss->flags58 & SER_FLAG__400000)) { + if (boss->flags58 & SER_FLAG__2) { + sub_8052424(boss); + sub_8052468(boss); + sub_80523F8(boss); + } else { + sub_80523D4(boss); + sub_8052424(boss); + } + } + + switch (boss->unk6E) { + case 2: { + if (!(boss->flags58 & SER_FLAG__2)) { + boss->unk6F++; + } + } break; + + case 3: { + if (boss->qUnk54++ >= 60) { + boss->unk6F++; + } + } break; + + case 9: { + if (boss->qUnk54++ >= 300) { + boss->qUnk56 = 0; + boss->unk6F++; + } + } break; + + case 4: + case 5: + case 6: + case 7: + case 8: + case 10: + case 11: { + if (boss->unk5C != 0) { + boss->unk6F++; + } + } break; + + case 12: { + if (boss->unk5C == 0) { + + } else { + if (++boss->qUnk56 < 4) { + boss->unk6F = 0xB; + } else { + boss->unk6F = 3; + } + } + } break; + + case 0: { + if (boss->qUnk44 < Q(416)) { + boss->qUnk48 = -Q(128); + boss->qUnk4E = 0; + boss->qUnk4C = Q(4); + } else { + boss->qUnk50 = -0x10; + boss->unk6F = 1; + } + } break; + + case 1: { + if (boss->qUnk44 < Q(416)) { + boss->qUnk50 = 0; + boss->qUnk4C = 0; + boss->qUnk44 = Q(416); + boss->unk6F = 2; + } else { + boss->qUnk4C = MAX(-Q(2), boss->qUnk4C); + } + } break; + + case 13: { + if (boss->unk5C != 0) { + boss->unk6F = 0xE; + } + } break; + + case 14: { + if (!(boss->flags58 & SER_FLAG__2)) { + boss->qUnk50 = -0x10; + if (boss->qUnk4C < -Q(6)) { + boss->qUnk4C = -Q(6); + boss->qUnk50 = 0; + } + if (boss->qUnk44 <= -Q(120)) { + boss->qUnk4C = 0; + } + } + } break; + + default: { + boss->qUnk4C = 0; + boss->qUnk50 = 0; + } break; + } + if (boss->flags58 & SER_FLAG__80) { + s32 fade = boss->qUnk54 - 120; + if (fade < 0) { + fade = 0; + } + fade >>= 2; + if (fade > 0x10) { + fade = 0x10; + } + + if (boss->unk69 == 0) { + gDispCnt &= 0x7FFF; + gWinRegs[WINREG_WINOUT] = 0x3F3F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = fade; + } + + if (fade == 0x10) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + CreateExtraStageResults(); + return; + } + sub_80520B8(boss); + + if (++boss->qUnk54 < 0) { + boss->qUnk54--; + } + } else if (boss->unk6E > 1) { + if (--boss->unk6C <= 0) { + boss->unk6C = 240; + sub_804B2BC(Q(boss->unk60) + boss->qUnk44 + -Q(21), Q(boss->qUnk64) + boss->qUnk48 + -Q(10)); + } + } + + if (boss->unk6E != boss->unk6F) { + s32 i; + for (i = 0; i < (s32)ARRAY_COUNT(gExtraBossTaskData.parts); i++) { + SomeTaskManager_7C *parts = gExtraBossTaskData.parts[i]; + parts->unk0.unk2 = 0; + parts->unk0.unk4 = 0; + } + + boss->unk5C = 0; + boss->qUnk54 = 0; + boss->unk6E = boss->unk6F; + } +} + +// (90.35%) https://decomp.me/scratch/a1vhA +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_8050194.inc", s32 sub_8050194(SuperEggRobo *boss)) +{ + SuperEggRobo *sp4; + u32 sp8; + u32 spC; + SomeTaskManager_7C *temp_r8; + SomeTaskManager_7C *temp_r8_2; + s32 temp_r0; + s32 temp_r0_2; + s32 temp_r1; + s32 temp_r1_3; + s32 temp_r1_6; + s32 temp_r2_3; + s32 temp_r3; + s32 temp_r4; + s32 temp_r4_2; + s32 temp_r5_3; + s32 temp_r6; + s32 temp_r7; + s32 temp_sb; + s32 temp_sb_2; + s32 var_r0; + s32 var_r0_2; + s32 var_r0_3; + s32 var_r1; + s32 var_r3; + s32 var_r4; + s32 var_r6; + s32 var_r7; + s32 var_r7_2; + s32 var_sl; + u16 temp_r5; + u32 temp_r5_2; + s16 temp_r1_2; + s16 theta; + s16 temp_r1_5; + u32 temp_r2; + u32 temp_r2_2; + s32 sinV; + + BrakeDustEffect *brakeDust; + + sp4 = boss; + temp_r8 = gExtraBossTaskData.parts[0xE]; + temp_r5 = gExtraBossTaskData.parts[0xE]->unk70; + sp8 = gExtraBossTaskData.parts[0xD]->unk70; + var_r7 = I(temp_r8->unk0.qUnk50) + (gStageTime * 8); + temp_r1 = var_r7 - 72; + if (temp_r1 >= 0xA80) { + var_r7 = temp_r1; + var_r7 = Mod(var_r7, 0xA80) + 72; + } + temp_r1_2 = temp_r5 >> 6; + var_r3 = I(temp_r8->unk0.qUnk54); + sinV = (SIN_24_8(temp_r1_2) << 0xC); + temp_r6 = var_r3 + ((((COS_24_8(temp_r1_2) * Q(9)) - (sinV)) >> 0x10) + 6); + temp_sb = sa2__sub_801F100(temp_r6, var_r7 + 0x10, 1, 8, sa2__sub_801EC3C); + temp_r4 = I(temp_r8->unk0.qUnk54); + temp_r2 = sp8 >> 6; + temp_r4 = (temp_r4 + (((((SIN_24_8(temp_r2)) * Q(21)) + (COS_24_8(temp_r2) << 0xB)) >> 0x10))) + 6; + var_sl = sa2__sub_801F100(temp_r4, var_r7 + 21, 1, 8, sa2__sub_801EC3C); + if (var_sl > temp_sb) { + var_sl = temp_sb; + } + if ((var_sl <= 0) && (sp4->unk6E != 1) && (gStageTime & 1)) { + if (!(PseudoRandom32() & 0x30000)) { + s32 var = I(temp_r8->unk0.qUnk50); + var_r0_2 = temp_r4; + if (var_r0_2 < temp_r6) { + var_r0_2 = temp_r6; + } + brakeDust = TASK_DATA(CreateBrakingDustEffect(var, var_r0_2 - 2)); + brakeDust->unk4 = -4; + } + } + + temp_r8_2 = gExtraBossTaskData.parts[0x11]; + temp_r5_2 = gExtraBossTaskData.parts[0x11]->unk70; + spC = gExtraBossTaskData.parts[0x10]->unk70; + + var_r7_2 = (temp_r8_2->unk0.qUnk50 >> 8); + var_r7_2 += (gStageTime * 8); + if (var_r7_2 - 72 >= 0xA80) { + var_r7_2 = Mod(var_r7_2 - 72, 0xA80) + 72; + } + var_r3 = I(temp_r8_2->unk0.qUnk54); + sinV = ((SIN_24_8(temp_r5_2 >> 6)) << 0xC); + temp_r5_3 = var_r3 + (((((COS_24_8(temp_r5_2 >> 6)) * Q(9)) - sinV) >> 0x10) + 6); + temp_sb_2 = sa2__sub_801F100(temp_r5_3, var_r7_2 + 16, 1, 8, sa2__sub_801EC3C); + temp_r4_2 = I(temp_r8_2->unk0.qUnk54); + temp_r4_2 += ((((SIN_24_8(spC >> 6)) * Q(21)) + ((COS_24_8(spC >> 6)) << 0xB)) >> 0x10) + 6; + var_r6 = sa2__sub_801F100(temp_r4_2, var_r7_2 + 21, 1, 8, sa2__sub_801EC3C); + if (var_r6 > temp_sb_2) { + var_r6 = temp_sb_2; + } + if ((var_r6 <= 0) && (sp4->unk6E != 1) && !(gStageTime & 1)) { + if (!(PseudoRandom32() & 0x30000)) { + s32 var = I(temp_r8_2->unk0.qUnk50); + var_r0_3 = temp_r4_2; + if (var_r0_3 < temp_r5_3) { + var_r0_3 = temp_r5_3; + } + brakeDust = TASK_DATA(CreateBrakingDustEffect(var, var_r0_3 - 2)); + brakeDust->unk4 = -4; + } + } + + theta = (gExtraBossTaskData.parts[0]->unk70 >> 6); + temp_r2_3 = COS_24_8(theta); + temp_r3 = SIN_24_8(theta); + temp_r7 = I(gExtraBossTaskData.parts[0]->unk0.qUnk54) + (((temp_r3 * Q(27)) - (temp_r2_3 * Q(22))) >> 0x10); + var_r4 = I(gExtraBossTaskData.parts[0]->unk0.qUnk50) + (((temp_r2_3 * Q(27)) + (temp_r3 * Q(22))) >> 0x10) + (gStageTime * 8); + + if (var_r4 - 72 >= 0xA80) { + var_r4 = Mod(var_r4 - 72, 0xA80) + 72; + } + + var_r0 = sa2__sub_801F100(temp_r7, var_r4, 1, 8, sa2__sub_801EC3C); + var_r1 = var_r6; + if (var_r1 > var_sl) { + var_r1 = var_sl; + } + if (var_r0 > var_r1) { + var_r0 = var_r1; + } + return var_r0; +} +END_NONMATCH + +// (92.84%) https://decomp.me/scratch/fY0bw +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_80504DC.inc", void sub_80504DC(SuperEggRobo *boss, MapEntity *me)) +{ + GfxInfo gfx; + GfxInfo gfx2; + SomeTaskManager_7C *strc, *prevStrc; + s32 index; + + ExtraBossTaskData *extraBoss; + SomeTaskManager_7C *parts; + Sprite *s; + + boss->unk60 = 0; + boss->qUnk64 = TO_WORLD_POS(me->y, boss->base.regionY); + boss->qUnk44 = -0x10000; + boss->qUnk48 = -0x3600; + boss->qUnk4C = 0; + boss->qUnk4E = 0; + boss->qUnk50 = 0; + boss->qUnk52 = 0; + boss->flags58 = 0x400002; + boss->unk5C = 0; + boss->qUnk54 = 0; + boss->qUnk56 = 0; + boss->unk6C = 240; + boss->unk68 = 8; + boss->unk68 -= (LOADED_SAVE->difficultyLevel * 2); + boss->unk69 = 0; + boss->unk6A = 0x24; + boss->unk6B = 0x36; + boss->unk6E = 0; + boss->unk6F = 0; + + extraBoss = &gExtraBossTaskData; + index = 0; + prevStrc = sub_8052838(boss, 0, 0, 21); + extraBoss->parts[index] = prevStrc; + prevStrc->unk0.unk0 = index; + index = 1; + prevStrc = sub_8052474(prevStrc, 0x400, 0xFFFFE400, 0x16); + extraBoss->parts[index] = prevStrc; + prevStrc->unk0.unk0 = index; + index = 2; + + prevStrc = sub_80524F0(extraBoss->parts[0], 0xB00, 0xFFFFE900, 0xF); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + index = 3; + prevStrc = sub_8052578(extraBoss->parts[index - 1], 0, 0x1400, 0x10); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + index = 4; + prevStrc = sub_80525E0(extraBoss->parts[index - 1], 0, 0x1200, 0xF); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + index = 5; + prevStrc = sub_8052578(extraBoss->parts[index - 1], 0, 0x1200, 0x10); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + index = 6; + prevStrc = sub_805265C(extraBoss->parts[index - 1], 0, 0x800, 0xE); + prevStrc = prevStrc; + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + + index = 7; + prevStrc = sub_80524F0(extraBoss->parts[0], 0xFFFFFB00, 0xFFFFE700, 0x1B); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + index = 8; + prevStrc = sub_8052578(prevStrc, 0, 0x1400, 0x1C); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + index = 9; + prevStrc = sub_80525E0(prevStrc, 0, 0x1200, 0x1B); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + index = 10; + prevStrc = sub_8052578(prevStrc, 0, 0x1200, 0x1C); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + index = 11; + prevStrc = sub_805265C(prevStrc, 0, 0x800, 0x1A); + extraBoss->parts[index] = prevStrc; + extraBoss->parts[index]->unk0.unk0 = index; + + gfx.tileInfo.anim = 0x29B; + gfx.tileInfo.variant = 0; + gfx.vram = VramMalloc(0x10U); + index = 12; + strc = sub_80526C4(extraBoss->parts[0], 0x200, 0x500, &gfx, 0x14); + extraBoss->parts[index] = strc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk76 = 0xE000; + extraBoss->parts[index]->unk72 = 0x100; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + + { + SomeTaskManager_7C *strcInner; + gfx.tileInfo.anim = 0x29D; + gfx.tileInfo.variant = 0; + gfx.vram = VramMalloc(9U); + strcInner = sub_8052724(strc, 0, 0, &gfx, 0x13); + strcInner->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&strcInner->unk0.s, PRIORITY, 1); + } + + gfx.tileInfo.anim = 0x29C; + gfx.tileInfo.variant = 0; + gfx.vram = VramMalloc(64); + index = 13; + strc = sub_8052780(strc, 0xFFFFF700, 0xC00, &gfx, 0x12); + extraBoss->parts[index] = strc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + + gfx.tileInfo.anim = 0x29B; + gfx.tileInfo.variant = 2; + gfx.vram = VramMalloc(0x10U); + index = 14; + extraBoss->parts[index] = sub_80527DC(strc, 0x300, 0x1B00, &gfx, 0x11); + strc = extraBoss->parts[index]; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk0.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + SPRITE_FLAG_SET_VALUE(&extraBoss->parts[index]->unk0.s, PRIORITY, 1); + + gfx2.tileInfo.anim = 0x29B; + gfx2.tileInfo.variant = 1; + gfx2.vram = VramMalloc(0x10U); + index = 15; + strc = sub_80526C4(extraBoss->parts[0], 0xFFFFFA00, 0x500, &gfx2, 0x17); + extraBoss->parts[index] = strc; + extraBoss->parts[index]->unk0.unk0 = index; + extraBoss->parts[index]->unk76 = 0x2000; + extraBoss->parts[index]->unk72 = -0x100; + + { + SomeTaskManager_7C *strcInner; + gfx2.tileInfo.anim = 0x29C; + gfx2.tileInfo.variant = 1; + gfx2.vram = VramMalloc(0x40U); + index = 16; + strc = sub_8052780(strc, 0xFFFFF700, 0xB00, &gfx2, 0x16); + extraBoss->parts[index] = strc; + extraBoss->parts[index]->unk0.unk0 = index; + } + + gfx2.tileInfo.anim = 0x29B; + gfx2.tileInfo.variant = 3; + gfx2.vram = VramMalloc(0x10U); + index = 17; + extraBoss->parts[index] = sub_80527DC(strc, 0x300, 0x1B00, &gfx2, 0x18); + extraBoss->parts[index]->unk0.unk0 = index; + + if (gInput == (B_BUTTON | START_BUTTON | DPAD_VERTICAL | DPAD_SIDEWAYS)) { + boss->flags58 |= 0x80000000; + } +} +END_NONMATCH + +void sub_8050888() +{ + Sprite *s; + SuperEggRobo *boss; + Player *p; + Camera *cam; + s32 screenY; + s32 screenX; + u16 *var_r0; + u16 var_r1; + s16 var_r1_2; + + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + + boss = gExtraBossTaskData.boss; + s = &strc->unk0.s; + p = &gPlayer; + cam = &gCamera; + strc->unk0.qUnk50 = strc->unk60 + ((boss->unk60 << 8) + boss->qUnk44); + strc->unk0.qUnk54 = strc->unk64 + ((boss->qUnk64 << 8) + boss->qUnk48); + strc->unk70 = strc->unk76; + screenX = I(strc->unk0.qUnk50) - cam->x; + screenY = I(strc->unk0.qUnk54) - cam->y; + if ((p->timerInvulnerability == 0) && !(boss->flags58 & 0x80)) { + sub_800BFEC(s, I(strc->unk0.qUnk50), I(strc->unk0.qUnk54), p); + } + s->x = 0x80; + s->y = 0x80; + s->frameFlags = (s->frameFlags & 0xFFFE7FFF) | 0x10000; + UpdateSpriteAnimation_BG(s); + DisplaySprite_BG(s); + sa2__sub_8003EE4((strc->unk70 >> 6), 0x100, 0x100, 0x7C, 0x80, screenX, screenY, gBgAffineRegs); + + switch (boss->unk6E) { + case 4: + case 5: + var_r1_2 = (gExtraBossTaskData.parts[2]->unk76 - Q(64)); + var_r1_2 >>= 2; + if (boss->unk6E == 4) { + sub_804CFE0(&strc->unk76, var_r1_2, 64); + } else { + strc->unk76 = var_r1_2; + } + + break; + case 6: + case 7: + var_r1_2 = (gExtraBossTaskData.parts[7]->unk76 - Q(64)); + var_r1_2 >>= 2; + if (boss->unk6E == 6) { + sub_804CFE0(&strc->unk76, var_r1_2, 64); + } else { + strc->unk76 = var_r1_2; + } + + break; + case 0: + var_r0 = &strc->unk76; + var_r1 = 0x800; + sub_804CFE0(var_r0, var_r1, 0x80); + break; + case 1: + var_r0 = &strc->unk76; + var_r1 = 0xF800; + sub_804CFE0(var_r0, var_r1, 0x80); + break; + case 13: + var_r0 = &strc->unk76; + var_r1 = 0; + sub_804CFE0(var_r0, var_r1, 0x80); + break; + case 14: + sub_804CFE0(&strc->unk76, 0x4000U, 0x200); + break; + default: + sub_804CFE0(&strc->unk76, 0U, 0x80); + break; + } +} + +// (98.30%) https://decomp.me/scratch/4qGD5 +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_8050A88.inc", void sub_8050A88()) +{ + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + SomeTaskManager_7C *strc2 = strc->unk0.unk8; + SuperEggRobo *boss = gExtraBossTaskData.boss; + Sprite *s = &strc->unk0.s; + SpriteTransform *tf = &strc->unk0.transform; + s32 sp4, sp8; + s32 temp_r2_4; + + u16 *unk70 = &strc2->unk70; + strc->unk60 = ((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (strc->unk6C * SIN_24_8(strc2->unk70 >> 6))) >> 8; + strc->unk64 = ((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (strc->unk6C * COS_24_8(strc2->unk70 >> 6))) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + sp4 = I(strc->unk0.qUnk50) - gCamera.x; + sp8 = I(strc->unk0.qUnk54) - gCamera.y; + + if ((gPlayer.sa2__unk62 != 0) && (sub_800C0E0(s, I(strc->unk0.qUnk50), I(strc->unk0.qUnk54), &gPlayer))) { + if (!(boss->flags58 & SER_FLAG__80) && (boss->unk69 <= 0)) { + boss->unk69 = 0x20; + gPlayer.sa2__unk62 = 0; + gPlayer.timerInvulnerability = 8; + gPlayer.qSpeedAirX = -Q(2); + gPlayer.qSpeedGround = -Q(2); + + if (--boss->unk68 <= 0) { + gDispCnt &= 0xDFFF; + gBldRegs.bldCnt = 0; + gFlags &= ~4; + boss->unk6E = 0xD; + boss->unk6F = 0xD; + boss->qUnk4C = 0x180; + boss->qUnk4E = 0xFF00; + boss->flags58 |= SER_FLAG__80; + boss->qUnk54 = 0; + gStageFlags |= 1; + + INCREMENT_SCORE_A(1000); + } + } + } else { + if ((gPlayer.timerInvulnerability == 0) && !(boss->flags58 & SER_FLAG__80)) { + sub_800BFEC(s, I(strc->unk0.qUnk50), I(strc->unk0.qUnk54), &gPlayer); + } + } + s->frameFlags &= ~0x180; + if (!(boss->flags58 & SER_FLAG__80) || (boss->unk69 != 0)) { + if (PLAYER_IS_ALIVE) { + gDispCnt &= ~DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = 0; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + if (boss->unk69 != 0) { + if (!(gStageTime & 2)) { + s->frameFlags |= 0x100; + gDispCnt |= DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = 0x3F1F; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + } + + boss->unk69--; + } + } + tf->x = sp4; + tf->y = sp8; + tf->rotation = (strc->unk70 >> 6); + s->frameFlags &= ~0x1F; + s->frameFlags |= (sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + switch (boss->unk6E) { + case 2: + case 3: + sub_804CFE0(&strc->unk76, 0, 0x200); + break; + case 10: + if (sub_804CFE0(&strc->unk76, 0xF000, 0x200) != 0) { + boss->unk5C |= 1 << strc->unk0.unk0; + } + break; + case 11: + gDispCnt &= 0xDFFF; + if (strc->unk0.unk4 == 0) { + s->graphics.anim = 0x299; + s->variant = 1; + s->prevVariant = -1; + m4aSongNumStart(0x9BU); + } + if (strc->unk0.unk4 == 10) { + m4aSongNumStop(0x9BU); + } + + if (strc->unk0.unk4 > 0xF) { + boss->unk5C |= 1 << strc->unk0.unk0; + gBldRegs.bldCnt = 0; + gFlags &= ~4; + s->graphics.anim = 0x299; + s->variant = 0; + s->prevVariant = 0xFF; + } else { + u16 a = (((Q(1) - COS_24_8((((strc->unk0.unk4 << 10) >> 6) & 0x3FF))) * 32) + Q(92)); + if (PLAYER_IS_ALIVE) { + if ((sub_8052150(sp4, sp8, a, strc) == 0)) + gFlags &= ~4; + } + + strc->unk0.unk4 += 1; + } + + break; + case 12: + if (!(7 & strc->unk0.unk4)) { + temp_r2_4 = ((strc->unk0.qUnk50 - (strc->unk0.unk4 << 0xA)) - Q(100)); + if (temp_r2_4 < -Q(32)) { + boss->unk5C |= 1 << strc->unk0.unk0; + } else { + sub_804B570(temp_r2_4, Q(boss->qUnk64)); + } + } + + strc->unk0.unk4 += 1; + break; + case 13: + sub_804CFE0(&strc->unk76, 0x1800, 0x100); + break; + case 14: + sub_804CFE0(&strc->unk76, 0x2000, 0x100); + break; + default: + sub_804CFE0(&strc->unk76, 0, 0x100); + break; + } +} +END_NONMATCH + +// (97.48%) https://decomp.me/scratch/4UTeN +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_8050FB4.inc", void sub_8050FB4()) +{ + SpriteTransform *sp0; + Sprite *s; + SpriteTransform *tf; + SuperEggRobo *boss; + s32 var_r0_2; + s32 var_r0_3; + s32 var_r0_4; + s32 var_r1_2; + u16 *var_r0; + u16 var_r1; + SomeTaskManager_7C *strc2; + u32 var_r2; + s32 screenX, screenY; + + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + boss = gExtraBossTaskData.boss; + s = &strc->unk0.s; + tf = &strc->unk0.transform; + sp0 = tf; + strc2 = strc->unk0.unk8; + strc->unk60 = ((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (SIN_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk64 = ((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (COS_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = I(strc->unk0.qUnk50) - gCamera.x; + screenY = I(strc->unk0.qUnk54) - gCamera.y; + tf->x = screenX; + tf->y = screenY; + s->frameFlags &= ~0x1F; + s->frameFlags |= (u8)(sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + switch (boss->unk6E) { + case 2: + sub_804CFE0(&strc->unk76, 0U, 0x100); + break; + case 3: + if (1 & gUnknown_084AE560[strc->unk0.unk0]) { + var_r0 = &strc->unk76; + var_r1 = 0x1000; + } else { + var_r0 = &strc->unk76; + var_r1 = 0x2000; + } + sub_804CFE0(var_r0, var_r1, 0x200); + break; + case 4: + if (1 & gUnknown_084AE560[strc->unk0.unk0]) { + u16 v = 0x6000; + sub_804CFE0(&strc->unk76, v, 0x100); + if (strc->unk76 == v) { + if (strc->unk0.unk4++ >= 0x1E) { + boss->unk5C |= 1 << strc->unk0.unk0; + } + } + } + + break; + case 5: + if (1 & gUnknown_084AE560[strc->unk0.unk0]) { + var_r0_2 = strc->unk0.unk4; + if (var_r0_2 > 0x10) { + var_r0_2 = 0x10; + } + var_r2 = (u32)((Q(1) - COS_24_8(((u32)(var_r0_2 << 0x1A) >> 0x16))) << 0x10) >> 0xA; + var_r0_3 = 0x5800; + + sub_804CFE0(&strc->unk76, (var_r0_3 - var_r2), 0x800); + if (strc->unk0.unk4++ >= 76) { + boss->unk5C |= 1 << strc->unk0.unk0; + } + } + break; + case 6: + if (!(gUnknown_084AE560[strc->unk0.unk0] & 0x1)) { + u16 v = 0x6000; + sub_804CFE0(&strc->unk76, v, 0x100); + if (strc->unk76 == v) { + if (strc->unk0.unk4++ >= 0x1E) { + boss->unk5C |= 1 << strc->unk0.unk0; + } + } + } + break; + case 7: + if (!(1 & gUnknown_084AE560[strc->unk0.unk0])) { + u16 val; + var_r0_4 = strc->unk0.unk4; + if (var_r0_4 > 0x10) { + var_r0_4 = 0x10; + } + var_r2 = ((u32)((0x100 - COS_24_8(((u32)(var_r0_4 << 0x1A) >> 0x16))) << 0x10) >> 0xA); + var_r0_3 = 0x6000; + + sub_804CFE0(&strc->unk76, (var_r0_3 - var_r2), 0x800); + if (strc->unk0.unk4++ >= 0x4C) { + boss->unk5C |= (1 << strc->unk0.unk0); + } + } + break; + case 8: + case 9: + if (sub_804CFE0(&strc->unk76, 0xF000U, 0x100) != 0) { + if (boss->qUnk54++ >= 0x3C) { + boss->unk5C |= (1 << strc->unk0.unk0); + asm(""); + } + } + break; + case 13: + sub_804CFE0(&strc->unk76, 0xD000U, 0x400); + return; + case 14: + sub_804CFE0(&strc->unk76, 0xF000U, 0x100); + return; + default: + sub_804CFE0(&strc->unk76, 0U, 0x100); + break; + } +} +END_NONMATCH + +// (99.44%) https://decomp.me/scratch/6H87B +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_8051344.inc", void sub_8051344()) +{ + u16 *var_r0_2; + u16 *var_r0_3; + s32 var_r0_4; + s32 var_r1_2; + u16 var_r1_3; + u16 *var_r0; + u16 var_r1; + u16 v_r1; + u32 var_r2; + + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + SomeTaskManager_7C *strc2 = strc->unk0.unk8; + SuperEggRobo *boss = gExtraBossTaskData.boss; + Sprite *s = &strc->unk0.s; + SpriteTransform *tf = &strc->unk0.transform; + s32 screenX, screenY; + strc->unk60 = ((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (SIN_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk64 = ((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (COS_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = I(strc->unk0.qUnk50) - gCamera.x; + screenY = I(strc->unk0.qUnk54) - gCamera.y; + tf->x = screenX; + tf->y = screenY; + s->frameFlags &= ~0x1F; + s->frameFlags |= (u8)(sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + switch (boss->unk6E) { + case 2: + sub_804CFE0((&strc->unk76), 0U, 0x100U); + break; + case 3: + if (1 & gUnknown_084AE560[strc->unk0.unk0]) { + sub_804CFE0(&strc->unk76, 0x6000, 0x200U); + } else { + sub_804CFE0(&strc->unk76, 0x6800, 0x200U); + } + + break; + case 4: + if (1 & gUnknown_084AE560[strc->unk0.unk0]) { + var_r0_2 = &strc->unk76; + var_r1_2 = 0x6000; + sub_804CFE0(var_r0_2, var_r1_2, 0x100U); + } + break; + case 5: + if (1 & gUnknown_084AE560[strc->unk0.unk0]) { + var_r0_3 = &strc->unk76; + var_r1_3 = 0x1000; + sub_804CFE0(var_r0_3, var_r1_3, 0x400U); + } + break; + case 6: + if (!(1 & gUnknown_084AE560[strc->unk0.unk0])) { + var_r0_2 = &strc->unk76; + var_r1_2 = 0x6000; + sub_804CFE0(var_r0_2, var_r1_2, 0x100U); + } + break; + case 7: + if (!(1 & gUnknown_084AE560[strc->unk0.unk0])) { + var_r0_3 = &strc->unk76; + var_r1_3 = 0x1000; + sub_804CFE0(var_r0_3, var_r1_3, 0x400U); + } + break; + case 8: + var_r0 = &strc->unk76; + var_r1 = 0x4000; + sub_804CFE0(var_r0, var_r1, 0x200U); + break; + case 9: + v_r1 = 0x4000; + v_r1 -= ((u32)(PseudoRandom32() << 0xC) >> 0x14); + sub_804CFE0((&strc->unk76), v_r1, 0x1000U); + break; + case 13: + var_r0_3 = &strc->unk76; + var_r1_3 = 0x2000; + sub_804CFE0(var_r0_3, var_r1_3, 0x400U); + break; + case 14: + var_r0_2 = &strc->unk76; + var_r1_2 = 0x1000; + sub_804CFE0(var_r0_2, var_r1_2, 0x100U); + break; + default: + sub_804CFE0((&strc->unk76), 0U, 0x100U); + break; + } +} +END_NONMATCH + +// (86.20%) https://decomp.me/scratch/UI7fC +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_8051604.inc", void sub_8051604()) +{ + SpriteTransform *sp0; + u16 mask; + Sprite *s; + SpriteTransform *tf; + SuperEggRobo *boss; + u16 *var_r0_2; + s32 var_r0_3; + s32 var_r0_4; + s32 var_r1_2; + u16 *var_r0; + u16 var_r1; + SomeTaskManager_7C *strc2; + u32 var_r2; + s32 screenX, screenY; + + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + strc2 = strc->unk0.unk8; + boss = gExtraBossTaskData.boss; + s = &strc->unk0.s; + tf = &strc->unk0.transform; + sp0 = tf; + strc->unk60 = ((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (SIN_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + mask = 0x3FF; + strc->unk64 = ((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (COS_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = I(strc->unk0.qUnk50) - gCamera.x; + screenY = I(strc->unk0.qUnk54) - gCamera.y; + + if ((gPlayer.timerInvulnerability == 0) && !(boss->flags58 & 0x80)) { + s32 temp_r2_5 = ((((u32)strc->unk70 - Q(64)) << 0x10) >> 0x16) & mask; + sub_800BFEC(s, (strc->unk0.qUnk50 + (-(COS_24_8(temp_r2_5) * Q(23)) >> 0x10)), + (strc->unk0.qUnk54 + ((0 - SIN_24_8(temp_r2_5) * 0x1700) >> 0x10)), &gPlayer); + } + + tf->x = screenX; + tf->y = screenY; + tf->y = ((((u32)strc->unk70 - Q(64)) << 16) >> 22); + s->frameFlags &= ~0x1F; + s->frameFlags |= (u8)(sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + switch (boss->unk6E) { + case 2: + var_r0 = &strc->unk76; + var_r1 = 0x4000; + sub_804CFE0((u16 *)var_r0, var_r1, 0x200U); + break; + case 3: + sub_804CFE0(&strc->unk76, 0U, 0x200); + break; + case 8: + sub_804CFE0(&strc->unk76, -strc->unk70, 0x200U); + break; + case 9: + sub_804CFE0(&strc->unk76, -strc->unk70, 0x200U); + if (!(gStageTime & 0x1F)) { + s32 qX = strc->unk0.qUnk50; + s32 qY = strc->unk0.qUnk54 + 0x1700; + bool32 var_r2_2 = 0; + if (!(PseudoRandom32() & 0x30000)) { + var_r2_2 = 1; + } + sub_804A8A8(qX, qY, var_r2_2); + } + break; + case 13: + sub_804CFE0((u16 *)(&strc->unk76), 0xB000U, 0x400U); + break; + case 14: + var_r0_2 = &strc->unk76; + var_r2 = 0x100; + sub_804CFE0((u16 *)var_r0_2, 0U, var_r2); + break; + default: + sub_804CFE0((u16 *)(&strc->unk76), 0U, 0x100U); + break; + } +} +END_NONMATCH + +void sub_80518E8() +{ + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + SomeTaskManager_7C *strc2 = strc->unk0.unk8; + Sprite *s = &strc->unk0.s; + Camera *cam = &gCamera; + s32 screenX, screenY; + + strc->unk60 + = (s32)((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (((s32)((u16)SIN(strc2->unk70 >> 6) << 0x10) >> 0x16) * strc->unk6C)) >> 8; + strc->unk64 + = (s32)((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (((s32)((u16)COS(strc2->unk70 >> 6) << 0x10) >> 0x16) * strc->unk6C)) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = I(strc->unk0.qUnk50) - cam->x; + screenY = I(strc->unk0.qUnk54) - cam->y; + s->x = screenX; + s->y = screenY; + UpdateSpriteAnimation(s); + DisplaySprite(s); + sub_804CFE0(&strc->unk76, 0U, 0x100U); +} + +// (99.62%) https://decomp.me/scratch/OHVMq +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_80519E8.inc", void sub_80519E8()) +{ + u16 *var_r0; + u16 var_r1; + u16 v_r1; + u32 var_r2; + + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + SomeTaskManager_7C *strc2 = strc->unk0.unk8; + SuperEggRobo *boss = gExtraBossTaskData.boss; + Sprite *s = &strc->unk0.s; + SpriteTransform *tf = &strc->unk0.transform; + s32 screenX, screenY; + strc->unk60 = ((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (SIN_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk64 = ((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (COS_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = I(strc->unk0.qUnk50) - gCamera.x; + screenY = I(strc->unk0.qUnk54) - gCamera.y; + tf->x = screenX; + tf->y = screenY; + tf->rotation = strc->unk70 >> 6; + s->frameFlags &= ~0x1F; + s->frameFlags |= (u8)(sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + switch (boss->unk6E) { + case 2: + case 3: + sub_804CFE0(&strc->unk76, 0U, 0x200U); + break; + case 4: + sub_804CFE0(&strc->unk76, strc2->unk76, 0x100U); + break; + case 5: + if (!(1 & gUnknown_084AE560[strc->unk0.unk0])) { + sub_804CFE0(&strc->unk76, 0xE800U, 0x200); + } + break; + case 6: + break; + case 7: + if (1 & gUnknown_084AE560[strc->unk0.unk0]) { + sub_804CFE0(&strc->unk76, 0xE800U, 0x200); + } + break; + case 0: + sub_804CFE0(&strc->unk76, 0x1000U, 0x80U); + break; + case 13: + sub_804CFE0(&strc->unk76, 0x4000U, 0x200U); + if ((boss->unk69 == 0) && (strc->unk76 == 0x4000)) { + boss->unk5C |= 1 << strc->unk0.unk0; + } + break; + case 14: + var_r0 = &strc->unk76; + var_r1 = 0xE800; + sub_804CFE0(var_r0, var_r1, 0x100U); + return; + default: + var_r0 = &strc->unk76; + var_r1 = 0; + sub_804CFE0(var_r0, var_r1, 0x80U); + break; + } +} +END_NONMATCH + +// (99.59%) https://decomp.me/scratch/pfoQe +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_8051C44.inc", void sub_8051C44()) +{ + u16 *var_r0; + u16 var_r1; + u16 v_r1; + u32 var_r2; + + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + SomeTaskManager_7C *strc2 = strc->unk0.unk8; + SuperEggRobo *boss = gExtraBossTaskData.boss; + Sprite *s = &strc->unk0.s; + SpriteTransform *tf = &strc->unk0.transform; + s32 screenX, screenY; + strc->unk60 = ((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (SIN_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk64 = ((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (COS_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = I(strc->unk0.qUnk50) - gCamera.x; + screenY = I(strc->unk0.qUnk54) - gCamera.y; + tf->x = screenX; + tf->y = screenY; + tf->rotation = strc->unk70 >> 6; + s->frameFlags &= ~0x1F; + s->frameFlags |= (u8)(sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + switch (boss->unk6E) { + case 2: + sub_804CFE0(&strc->unk76, 0U, 0x200U); + break; + case 8: + case 9: + sub_804CFE0(&strc->unk76, 0, 0x200U); + break; + case 0: + sub_804CFE0(&strc->unk76, 0x2000U, 0x80U); + break; + case 1: + sub_804CFE0(&strc->unk76, 0xE000U, 0x80U); + break; + case 13: + sub_804CFE0(&strc->unk76, 0, 0x400); + break; + case 14: + sub_804CFE0(&strc->unk76, 0x1800, 0x100U); + break; + default: + sub_804CFE0(&strc->unk76, 0x2000, 0x100U); + break; + } +} +END_NONMATCH + +// (99.12%) https://decomp.me/scratch/HWqI4 +NONMATCH("asm/non_matching/game/enemies/boss_xtra__sub_8051E38.inc", void sub_8051E38()) +{ + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + SomeTaskManager_7C *strc2 = strc->unk0.unk8; + SuperEggRobo *boss = gExtraBossTaskData.boss; + Sprite *s = &strc->unk0.s; + SpriteTransform *tf = &strc->unk0.transform; + s32 screenX, screenY; + strc->unk60 = ((strc->unk68 * COS_24_8(strc2->unk70 >> 6)) - (SIN_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk64 = ((strc->unk68 * SIN_24_8(strc2->unk70 >> 6)) + (COS_24_8(strc2->unk70 >> 6) * strc->unk6C)) >> 8; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = I(strc->unk0.qUnk50) - gCamera.x; + screenY = I(strc->unk0.qUnk54) - gCamera.y; + tf->x = screenX; + tf->y = screenY; + tf->rotation = strc->unk70 >> 6; + s->frameFlags &= ~0x1F; + s->frameFlags |= (u8)(sa2__gUnknown_030054B8++ | 0x20); + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + switch (boss->unk6E) { + case 2: + case 3: + break; + case 4: + case 5: + case 6: + case 7: + if (strc->unk70 < 0x1000) { + sub_804CFE0(&strc->unk76, -strc->unk70, 0x100U); + } else { + sub_804CFE0(&strc->unk76, 0, 0x100U); + } + break; + case 0: + case 11: + case 12: + sub_804CFE0(&strc->unk76, 0xE000U, 0x100U); + break; + case 13: + sub_804CFE0(&strc->unk76, 0xF800, 0x400); + break; + case 14: + sub_804CFE0(&strc->unk76, 0, 0x100U); + break; + default: + sub_804CFE0(&strc->unk76, 0, 0x100U); + break; + } +} +END_NONMATCH + +void sub_805202C() +{ + u16 *temp_r1; + s32 screenX, screenY; + + SomeTaskManager_7C *strc = TASK_DATA(gCurTask); + SomeTaskManager_7C *strc2 = strc->unk0.unk8; + Sprite *s = &strc->unk0.s; + Camera *cam = &gCamera; + strc->unk0.qUnk50 = strc->unk60 + strc2->unk0.qUnk50; + strc->unk0.qUnk54 = strc->unk64 + strc2->unk0.qUnk54; + strc->unk70 = strc->unk76 + strc2->unk70; + screenX = ((s32)strc->unk0.qUnk50 >> 8) - cam->x; + screenY = ((s32)strc->unk0.qUnk54 >> 8) - cam->y; + s->x = screenX; + s->y = screenY; + UpdateSpriteAnimation(s); + DisplaySprite(s); + sub_804CFE0(&strc->unk76, 0U, 0x100U); +} + +bool32 sub_80520B8(SuperEggRobo *boss) +{ + bool32 result = FALSE; + s32 temp_r0; + NutsAndBolts *bolts; + s32 temp_r3; + + if (!(0xF & gStageTime) || ((boss->unk6E == 0xE) && !(gStageTime & 7))) { + s32 a, b; + temp_r0 = (((u32)PseudoRandom32() << 10) >> 18) - Q(32); + temp_r3 = (((u32)PseudoRandom32() << 9) >> 17) - Q(64); + a = boss->qUnk44 + Q(boss->unk60) + temp_r0; + b = boss->qUnk48 + Q(boss->qUnk64) + temp_r3; + bolts = TASK_DATA(sub_8017540(a, b)); + bolts->s.frameFlags = 0x1000; + bolts->s.oamFlags = 0x380; + + result = TRUE; + } + + return result; +} + +bool32 sub_8052150(s32 arg0, s32 arg1, u16 arg2, SomeTaskManager_7C *arg3) +{ + int_vcount sp0[8]; + s32 sp8; + s32 temp_r4_2; + s32 temp_r2_2; + s32 temp_r5; + s32 temp_r6; + s32 var_r0; + s32 var_r1; + s32 var_r2; + s32 var_r3; + s32 var_r4; + s32 var_r4_2; + s32 var_r5; + s32 var_r6; + s32 var_r7; + s32 var_r8; + s32 var_sb; + s32 var_sl; + + s32 v; + + temp_r5 = COS_24_8(arg3->unk70 >> 6); + temp_r6 = SIN_24_8(arg3->unk70 >> 6); + v = (temp_r5 * 0xF00); + var_r7 = arg0 + (((temp_r6 << 0xC) - v) >> 0x10); + v = (temp_r6 * 0xF00); + var_r5 = arg1 + (((0 - (temp_r5 << 0xC)) - v) >> 0x10); + var_r6 = var_r5 + 3; + var_sl = 0; + sp8 = 0; + temp_r4_2 = (s16)Div(SIN_24_8(arg2 >> 6) << 8, COS_24_8(arg2 >> 6)); + temp_r2_2 = Div(0x10000, temp_r4_2); + var_r1 = var_r5 - ((var_r7 * temp_r4_2) >> 8); + var_r8 = var_r1 + 3; + if (var_r7 > (DISPLAY_WIDTH - 1)) { + var_r0 = I(temp_r4_2 * (DISPLAY_WIDTH - var_r7)); + var_r5 += var_r0; + var_r6 += var_r0; + var_r7 = (DISPLAY_WIDTH - 1); + } + + if (var_r5 >= (DISPLAY_HEIGHT - 1)) { + return FALSE; + } + + { + var_sb = var_r7; + var_r4 = var_r7; + if (var_r5 < 0) { + var_r4 = var_r7 - ((var_r5 * temp_r2_2) >> 8); + var_r5 = 0; + if (var_r6 < 0) { + var_sb = var_r7 - ((var_r6 * temp_r2_2) >> 8); + var_r6 = 0; + } + } + + var_r5 = CLAMP_32(var_r5, 0, (DISPLAY_HEIGHT - 1)); + var_r6 = CLAMP_32(var_r6, 0, (DISPLAY_HEIGHT - 1)); + + if (var_r8 > (DISPLAY_HEIGHT - 1)) { + s32 r8 = (DISPLAY_HEIGHT - var_r8); + sp8 += (r8 * temp_r2_2) >> 8; + var_r8 = (DISPLAY_HEIGHT - 1); + if (var_r1 > (DISPLAY_HEIGHT - 1)) { + var_sl += (temp_r2_2 * (DISPLAY_HEIGHT - var_r1)) >> 8; + var_r1 = (DISPLAY_HEIGHT - 1); + } + } + if ((var_sl >= (DISPLAY_WIDTH - 1)) || (var_r5 >= (DISPLAY_HEIGHT - 1)) || (var_r7 == var_sl) || (var_r5 == var_r1) + || (var_r6 == var_r8)) { + return FALSE; + } + + var_sl = CLAMP_32(var_sl, 0, DISPLAY_WIDTH - 1); + var_r2 = CLAMP_32(sp8, 0, (DISPLAY_WIDTH - 1)); + + sp0[0] = var_r4; + sp0[1] = var_r5; + sp0[2] = var_sl; + sp0[3] = var_r1; + sp0[4] = var_sb; + sp0[5] = var_r6; + sp0[6] = var_r2; + sp0[7] = var_r8; + SA2_LABEL(sub_8006DB4)(0U, (TriParam1 *)&sp0, 0, var_r7 + 1); + + if (var_r5 >= 0) { + var_r4_2 = var_r5; + if (var_r4_2 > (DISPLAY_HEIGHT - 1)) { + var_r4_2 = (DISPLAY_HEIGHT - 1); + } + } else { + var_r4_2 = 0; + } + + var_r3 = CLAMP_32(var_r8, 0, (DISPLAY_HEIGHT - 1)); + + gDispCnt |= 0x2000; + gWinRegs[2] = (var_r4_2 << 8) | var_r3; + gWinRegs[5] = 0x1F1F; + gWinRegs[4] = 0x3F3F; + gBldRegs.bldCnt = 0x3FBF; + gBldRegs.bldY = 0xE; + } + + return TRUE; +} + +void CreateEntity_SuperEggRobot(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if (IS_MULTI_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } else { + struct Task *t = TaskCreate(Task_SuperEggRobotInit, sizeof(SuperEggRobo), 0x2000, 0, NULL); + SuperEggRobo *boss = TASK_DATA(t); + + boss->base.regionX = regionX; + boss->base.regionY = regionY; + boss->base.me = me; + boss->base.meX = me->x; + boss->base.id = id; + SET_MAP_ENTITY_INITIALIZED(me); + + sub_80504DC(boss, me); + + gExtraBossTaskData.boss = boss; + } +} + +static void TaskDestructor_unused(struct Task *t) +{ + SuperEggRobo *boss = TASK_DATA(t); + VramFree(boss->unusedSprite.graphics.dest); +} + +void sub_80523D4(SuperEggRobo *boss) +{ + s32 temp_r0; + + temp_r0 = sub_8050194(boss); + if (temp_r0 <= 3) { + boss->qUnk4E = Q(temp_r0); + } else { + boss->flags58 |= 2; + } +} + +void sub_80523F8(SuperEggRobo *boss) +{ + s32 temp_r0; + + temp_r0 = sub_8050194(boss); + if (temp_r0 < 0) { + boss->qUnk48 += Q(temp_r0); + boss->flags58 &= ~2; + boss->qUnk4E = 0; + } +} + +void sub_8052424(SuperEggRobo *boss) +{ + boss->qUnk44 += boss->qUnk4C; + boss->qUnk48 += boss->qUnk4E; + boss->qUnk4C += boss->qUnk50; + boss->qUnk4E += boss->qUnk52; +} + +void sub_8052468(SuperEggRobo *boss) { boss->qUnk4E += Q(16. / 256.); } + +SomeTaskManager_7C *sub_8052474(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3) +{ + SomeTaskManager_7C *strc2; + GfxInfo gfx; + struct Task *t; + Sprite *s; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_HEAD; + gfx.tileInfo.variant = 0; + gfx.vram = ALLOC_TILES(SA1_ANIM_BOSS_XTRA_HEAD); + t = CreateSomeTaskManager_7C_Task(&gfx, sub_8050A88, TaskDestructor_SomeTaskManager_60_Common); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk72 = 0xFFC0; + strc2->unk0.s.oamFlags = (param3 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} + +SomeTaskManager_7C *sub_80524F0(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3) +{ + SomeTaskManager_7C *strc2; + GfxInfo gfx; + struct Task *t; + Sprite *s; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_ARM_BEARING; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_BEARING; + t = CreateSomeTaskManager_7C_Task(&gfx, sub_8050FB4, NULL); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk76 = 0; + strc2->unk72 = 0x80; + strc2->unk0.s.oamFlags = (param3 << 6); + strc2->unk0.s.frameFlags = 0x2040; + strc2->unk0.transform.qScaleX = Q(1.5); + strc2->unk0.transform.qScaleY = Q(1.5); + return strc2; +} + +SomeTaskManager_7C *sub_8052578(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3) +{ + SomeTaskManager_7C *strc2; + GfxInfo gfx; + struct Task *t; + Sprite *s; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_ARM_BEARING; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_BEARING; + t = CreateSomeTaskManager_7C_Task(&gfx, sub_80518E8, NULL); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk0.s.oamFlags = (param3 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} + +SomeTaskManager_7C *sub_80525E0(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3) +{ + SomeTaskManager_7C *strc2; + GfxInfo gfx; + struct Task *t; + Sprite *s; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_ARM_BEARING; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_BEARING; + t = CreateSomeTaskManager_7C_Task(&gfx, sub_8051344, NULL); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk72 = 0x80; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk0.s.oamFlags = (param3 << 6); + strc2->unk0.s.frameFlags = 0x2040; + strc2->unk0.transform.qScaleX = Q(1.25); + strc2->unk0.transform.qScaleY = Q(1.25); + return strc2; +} + +SomeTaskManager_7C *sub_805265C(SomeTaskManager_7C *strc, s32 param1, s32 param2, s32 param3) +{ + SomeTaskManager_7C *strc2; + GfxInfo gfx; + struct Task *t; + Sprite *s; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_ARM; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_ARM; + t = CreateSomeTaskManager_7C_Task(&gfx, sub_8051604, NULL); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk0.s.oamFlags = (param3 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} + +SomeTaskManager_7C *sub_80526C4(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4) +{ + SomeTaskManager_7C *strc2; + struct Task *t; + Sprite *s; + + t = CreateSomeTaskManager_7C_Task(gfx, sub_80519E8, TaskDestructor_SomeTaskManager_60_Common); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk76 = 0; + strc2->unk72 = 0x100; + strc2->unk0.s.oamFlags = (param4 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} + +SomeTaskManager_7C *sub_8052724(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4) +{ + SomeTaskManager_7C *strc2; + struct Task *t; + Sprite *s; + + t = CreateSomeTaskManager_7C_Task(gfx, sub_805202C, TaskDestructor_SomeTaskManager_60_Common); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk76 = 0; + strc2->unk72 = 0; + strc2->unk0.s.oamFlags = (param4 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} + +SomeTaskManager_7C *sub_8052780(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4) +{ + SomeTaskManager_7C *strc2; + struct Task *t; + Sprite *s; + + t = CreateSomeTaskManager_7C_Task(gfx, sub_8051C44, TaskDestructor_SomeTaskManager_60_Common); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk76 = 0; + strc2->unk72 = 0x80; + strc2->unk0.s.oamFlags = (param4 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} + +SomeTaskManager_7C *sub_80527DC(SomeTaskManager_7C *strc, s32 param1, s32 param2, GfxInfo *gfx, s32 param4) +{ + SomeTaskManager_7C *strc2; + struct Task *t; + Sprite *s; + + t = CreateSomeTaskManager_7C_Task(gfx, sub_8051E38, TaskDestructor_SomeTaskManager_60_Common); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = strc; + strc2->unk68 = param1; + strc2->unk6C = param2; + strc2->unk76 = 0; + strc2->unk72 = 0x80; + strc2->unk0.s.oamFlags = (param4 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} + +// TODO: This taking a (SuperEggRobo *) as first param is odd... +// Just like it is set strc2->unk0.unk8 to it. +SomeTaskManager_7C *sub_8052838(SuperEggRobo *boss, s32 param1, s32 param2, s32 param3) +{ + SomeTaskManager_7C *strc2; + GfxInfo gfx; + struct Task *t; + Sprite *s; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_PALETTE; + gfx.tileInfo.variant = 0; + gfx.vram = ((void *)BG_VRAM + 0x4040); + t = CreateSomeTaskManager_7C_Task(&gfx, sub_8050888, NULL); + strc2 = TASK_DATA(t); + strc2->unk0.unk8 = (void *)boss; + strc2->unk60 = param1; + strc2->unk64 = param2; + strc2->unk72 = 0; + strc2->unk0.s.oamFlags = (param3 << 6); + strc2->unk0.s.frameFlags = 0x2000; + return strc2; +} diff --git a/sa1/src/game/enemies/bosses_egg_mobile.c b/sa1/src/game/enemies/bosses_egg_mobile.c new file mode 100644 index 0000000000..d054b8f601 --- /dev/null +++ b/sa1/src/game/enemies/bosses_egg_mobile.c @@ -0,0 +1,186 @@ +#include // M_PI +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +/* TODO: Maybe inline this file into bosses_misc.c ? */ + +typedef struct PostBossEggMobile { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ CamCoord worldX; + /* 0x62 */ CamCoord worldY; + /* 0x64 */ s16 offsetX; + /* 0x66 */ s16 offsetY; + /* 0x68 */ u16 stunDelay; +} PostBossEggMobile; + +#ifdef BUG_FIX +#define EGGMOBILE_DESPAWN_X (DISPLAY_WIDTH + 120) +#else +// NOTE(Jace): I don't think they intended to use a double for this... +#define EGGMOBILE_DESPAWN_X (DISPLAY_WIDTH + 120.0) +#endif + +void Task_EggMobileAscent(void); +void Task_EggMobileTurnAround(void); +void Task_EggMobileEscape(void); + +void CreatePostBossEggMobile(CamCoord worldX, CamCoord worldY) +{ + struct Task *t; + PostBossEggMobile *eggMobile; + Sprite *s; + + t = TaskCreate(Task_EggMobileAscent, sizeof(PostBossEggMobile), 0x2000U, 0U, NULL); + eggMobile = TASK_DATA(t); + + eggMobile->worldX = worldX; + eggMobile->worldY = worldY; + eggMobile->offsetX = 0; + eggMobile->offsetY = 0; + eggMobile->stunDelay = 0; + + s = &eggMobile->s; + s->x = worldX; + s->y = worldY; + s->graphics.dest = VRAM_RESERVED_BOSS_EGGMOBILE; + s->oamFlags = SPRITE_OAM_ORDER(21); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_EGGMOBILE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + s = &eggMobile->s2; + s->x = worldX; + s->y = worldY; + s->graphics.dest = VRAM_RESERVED_EGGMAN; + s->oamFlags = SPRITE_OAM_ORDER(19); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_EGGMAN; + s->variant = 4; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; +} + +void Task_EggMobileAscent() +{ + PostBossEggMobile *eggMobile = TASK_DATA(gCurTask); + Sprite *s; + Sprite *s2; + + s = &eggMobile->s; + s2 = &eggMobile->s2; + eggMobile->s.x = eggMobile->worldX - gCamera.x; + eggMobile->s.y = (eggMobile->worldY + I(eggMobile->offsetY)) - gCamera.y; + s2->x = eggMobile->s.x; + s2->y = eggMobile->s.y; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + if (eggMobile->stunDelay > TIME(0, 0.75)) { + eggMobile->offsetY -= Q(1); + + if (eggMobile->offsetY <= -Q(80)) { + gCurTask->main = Task_EggMobileTurnAround; + + eggMobile->s.graphics.anim = SA1_ANIM_EGGMOBILE; + eggMobile->s.variant = 1; + + s2->graphics.anim = SA1_ANIM_EGGMAN; + eggMobile->s2.variant = 9; + + // NOTE(Jace): I think this is the first time a value is used + // both as a Q-value and a regular integer. + eggMobile->offsetY = I(eggMobile->offsetY); + } + } else { + ++eggMobile->stunDelay; + } +} + +void Task_EggMobileTurnAround(void) +{ + PostBossEggMobile *eggMobile = TASK_DATA(gCurTask); + Sprite *s; + Sprite *s2; + AnimCmdResult acmdRes; + + s = &eggMobile->s; + s2 = &eggMobile->s2; + eggMobile->s.x = eggMobile->worldX - gCamera.x; + eggMobile->s.y = (eggMobile->worldY + eggMobile->offsetY) - gCamera.y; + s2->x = eggMobile->s.x; + s2->y = eggMobile->s.y; + + acmdRes = UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + if (acmdRes == ACMD_RESULT__ENDED) { + gCurTask->main = Task_EggMobileEscape; + s->graphics.anim = SA1_ANIM_EGGMOBILE; + s->variant = 0; + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + s2->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + s2->graphics.anim = SA1_ANIM_EGGMAN; + s2->variant = 0; + + if ((gCurrentLevel == 12) && (eggMobile->worldX >= Q(8))) { + s2->variant = 8; + } + } +} + +void Task_EggMobileEscape() +{ + s16 *temp_r1; + s16 temp_r0; + s16 temp_r3; + s32 temp_ret; + + PostBossEggMobile *eggMobile = TASK_DATA(gCurTask); + Sprite *s = &eggMobile->s; + Sprite *s2 = &eggMobile->s2; + + eggMobile->offsetX += 4; + eggMobile->s.x = (eggMobile->worldX + eggMobile->offsetX) - gCamera.x; + eggMobile->s.y = (eggMobile->worldY + eggMobile->offsetY) - gCamera.y; + s2->x = eggMobile->s.x; + s2->y = eggMobile->s.y; + + if (s->x > EGGMOBILE_DESPAWN_X) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); +} diff --git a/sa1/src/game/enemies/bosses_misc.c b/sa1/src/game/enemies/bosses_misc.c new file mode 100644 index 0000000000..cbab1afc48 --- /dev/null +++ b/sa1/src/game/enemies/bosses_misc.c @@ -0,0 +1,1015 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/enemies/bosses_shared.h" +#include "game/nuts_and_bolts_task.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/screen_shake.h" +#include "game/stage/results.h" // CreateStageResults +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct BossCapsule { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ SpriteTransform transform; + /* 0x6C */ CamCoord worldX; + /* 0x6E */ CamCoord worldY; + /* 0x70 */ s16 offsetX; + /* 0x72 */ s16 offsetY; + /* 0x74 */ s16 unk74; + /* 0x74 */ u16 unk76; +} BossCapsule; + +typedef struct Strc_sub_801749C { + /* 0x00 */ s16 unk0; + /* 0x02 */ s16 unk2; + /* 0x04 */ s16 unk4; + /* 0x06 */ u16 unk6; + /* 0x08 */ u16 unk8; + /* 0x0A */ u16 unkA; +} Strc_sub_801749C; + +typedef struct Strc_sub_8016D80 { + /* 0x00 */ Sprite s; + /* 0x30 */ s32 qUnk30; + /* 0x30 */ s32 qUnk34; + /* 0x38 */ s16 unk38; + /* 0x38 */ s16 unk3A; + /* 0x38 */ s16 qUnk3C; + /* 0x38 */ s16 qUnk3E; + /* 0x38 */ s16 qUnk40; +} Strc_sub_8016D80; + +typedef struct Strc_sub_8016F44 { + /* 0x00 */ Sprite s; + /* 0x30 */ SpriteTransform transform; + /* 0x3C */ s32 unk3C; + /* 0x40 */ s32 unk40; + /* 0x40 */ u16 unk44; + /* 0x40 */ s16 unk46; + /* 0x40 */ s16 qUnk48; + /* 0x48 */ u8 filler4A[0x2]; + /* 0x40 */ u16 unk4C; + /* 0x40 */ s16 unk4E; + /* 0x40 */ u16 unk50; + /* 0x40 */ s16 unk52; +} Strc_sub_8016F44; /* 0x54 */ + +typedef struct CameraPanning { + /* 0x00 */ CamCoord unk0; + /* 0x02 */ CamCoord unk2; + /* 0x04 */ CamCoord unk4; + /* 0x06 */ CamCoord unk6; +} CameraPanning; + +typedef struct Strc_sub_801766C { + /* 0x00 */ s16 unk0; + /* 0x02 */ s16 unk2; + /* 0x04 */ Player *p; +} Strc_sub_801766C; + +void Task_BossCapsuleInit(void); +void Task_801623C(void); +void Task_8016650(void); +void Task_BossCapsuleUpdate(void); +void sub_801766C(Player *p); +struct Task *sub_801749C(CamCoord worldX, CamCoord worldY); +void Task_801685C(void); +void Task_8016A14(void); // :Strc_sub_80168F0 +void Task_8016B6C(void); // :Strc_sub_801749C +struct Task *sub_8016D80(CamCoord worldX, CamCoord worldY, AnimId anim, u8 variant); // -> Strc_sub_8016D80 +struct Task *sub_8016F44(CamCoord worldX, CamCoord worldY, AnimId anim, u8 variant); // -> Strc_sub_8016F44 + +void sub_8017054(void); +void Task_8017244(void); // :CameraPanning +void Task_8017400(void); + +void TaskDestructor_BossCapsule(struct Task *t); +void TaskDestructor_sub_80168F0(struct Task *t); + +extern u16 gUnknown_080BB43C[5][3]; + +void CreateBossCapsule(CamCoord worldX, CamCoord worldY) +{ + struct Task *t; + BossCapsule *capsule; + Sprite *s; + SpriteTransform *tf; + + t = TaskCreate(Task_BossCapsuleInit, sizeof(BossCapsule), 0x2000U, 0U, TaskDestructor_BossCapsule); + capsule = TASK_DATA(t); + + capsule->worldX = worldX; + capsule->worldY = worldY; + capsule->offsetX = 0; + capsule->offsetY = 0; + capsule->unk74 = 0x800; + + s = &capsule->s; + s->x = worldX; + s->y = worldY; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_CAPSULE_LARGE); + s->oamFlags = SPRITE_OAM_ORDER(19); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_CAPSULE_SMALL; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2030; + + s = &capsule->s2; + s->x = worldX; + s->y = worldY; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOSS_CAPSULE_SWITCH); + s->oamFlags = SPRITE_OAM_ORDER(20); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BOSS_CAPSULE_SWITCH; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + tf = &capsule->transform; + tf->rotation = 0; + tf->qScaleX = Q(0.25); + tf->qScaleY = Q(0.25); +} + +void Task_BossCapsuleInit() +{ + BossCapsule *matchCapsule = TASK_DATA(gCurTask); + BossCapsule *capsule = matchCapsule; + SpriteTransform *tf = &capsule->transform; + Sprite *s = &capsule->s; + + tf->x = capsule->worldX - gCamera.x; + tf->y = (capsule->worldY - gCamera.y) - capsule->offsetY; + if (tf->qScaleX < Q(1)) { + tf->qScaleY = tf->qScaleX = tf->qScaleX + 8; + } + tf->rotation += 0x10; + + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + capsule->unk74 -= 0x10; + capsule->offsetY += I(capsule->unk74); + + if (capsule->offsetY > 0xE0) { + gCurTask->main = Task_801623C; + capsule->unk76 = 0; + s->graphics.anim = 0x23F; + s->variant = 0; + s->frameFlags &= ~0x20; + } +} + +// TODO: Register fake-match... +void Task_801623C() +{ + Player *p; + Sprite *s; + Sprite *s2; + s32 res; + s32 sideX; + s32 i; + + BossCapsule *capsule = TASK_DATA(gCurTask); + + s = &capsule->s; + s2 = &capsule->s2; + s->x = DISPLAY_CENTER_X; + s->y = (capsule->worldY - gCamera.y) - capsule->offsetY; + s2->x = s->x; + s2->y = s->y; + if (s->y >= 0) { + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + } + + capsule->unk74 -= 0x10; + capsule->offsetY += I(capsule->unk74); + if (s->y < 96) { + return; + } + + res = sa2__sub_801F100(gCamera.y + s->y + 8, gCamera.x + s->x, 1, 8, sa2__sub_801EC3C); + if (res > 0) { + return; + } + capsule->worldY = (capsule->worldY - capsule->offsetY) + res; + gCurTask->main = Task_BossCapsuleUpdate; + capsule->worldX = gCamera.x + DISPLAY_CENTER_X; + CreateScreenShake(0x800U, 0x40U, 0x100U, -1U, 0x80U); + m4aSongNumStart(SE_136); + + i = 0; + do { +#ifndef NON_MATCHING + register s32 r0 asm("r0"); +#endif + p = &PLAYER(i); + + if ((Coll_Player_Entity_Intersection(s, capsule->worldX, capsule->worldY, p) & 0x80000) + || (Coll_Player_Entity_Intersection(s2, capsule->worldX, capsule->worldY, p) & 0x80000)) { + p->timerInvulnerability = TIME(0, 2); + if (I(p->qWorldX) < gCamera.x + DISPLAY_CENTER_X) { + p->qSpeedAirX = -Q(2); + sideX = (capsule->worldX + s->hitboxes[0].b.left) - p->spriteOffsetX; + if (I(p->qWorldX) > sideX) { + p->qWorldX = Q(sideX); + } + } else { + p->qSpeedAirX = +Q(2); + sideX = (capsule->worldX + s->hitboxes[0].b.right) + p->spriteOffsetX; + if (I(p->qWorldX) < sideX) { + p->qWorldX = Q(sideX); + } + } + + if (MOVESTATE_IN_WATER & p->moveState) { + p->qSpeedAirY = -0x2A0; + } else { + p->qSpeedAirY = -0x4E0; + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_SPINDASH; + p->moveState &= ~MOVESTATE_100; + p->charState = CHARSTATE_15; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14) + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + } + +#ifndef NON_MATCHING + r0 = 1; + i += r0; + asm("" ::"r"(r0)); +#else + i++; +#endif + } while (i < gNumSingleplayerCharacters); +} + +void Task_BossCapsuleUpdate(void) +{ + s32 var_r4; + s32 var_sl; + + BossCapsule *capsule; + s32 sp4; + Sprite *s; + Sprite *s2; + + sp4 = 0; + capsule = TASK_DATA(gCurTask); + s = &capsule->s; + s2; + + s2 = &capsule->s2; + s->x = capsule->worldX - gCamera.x; + s->y = capsule->worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y; + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + DisplaySprite(s2); + + { + s32 i = 0; + do { + Player *p = &PLAYER(i); + + if (p->charState != CHARSTATE_15) { + CamCoord prevPlayerY = I(gPlayer.qWorldY); + sub_80096B0(s, capsule->worldX, capsule->worldY, p); + + if (PLAYER_IS_ALIVE && ((prevPlayerY < I(gPlayer.qWorldY)) || (capsule->worldY < I(gPlayer.qWorldY)))) { + p->qWorldX = Q((capsule->worldX + s->hitboxes[0].b.left) - p->spriteOffsetX); + p->qWorldY = Q(capsule->worldY - p->spriteOffsetY); + } + + if ((8 & sub_80096B0(s2, capsule->worldX, capsule->worldY, p)) + || (Coll_AmyHammer_Spring(s2, capsule->worldX, capsule->worldY, p) != 0)) { + sp4 = 1; + } + } + } while (++i < gNumSingleplayerCharacters); + } + + if (sp4) { + gCurTask->main = Task_8016650; + gStageFlags |= 3; + s->graphics.anim = SA1_ANIM_BOSS_CAPSULE_LARGE; + s->variant = 1; + m4aSongNumStart(0x89U); + + { + s32 i = 0; + + do { + Player *p = &PLAYER(i); + p->qSpeedGround = 0; + p->moveState |= 0x200000; + p->heldInput = 0; + sub_801766C(p); + } while (++i < gNumSingleplayerCharacters); + } + } +} + +void Task_8016650(void) +{ + s32 var_r4; + s32 var_sl; + + BossCapsule *capsule; + Sprite *s; + Sprite *s2; + AnimCmdResult acmdRes; + + capsule = TASK_DATA(gCurTask); + s = &capsule->s; + s2 = &capsule->s2; + s->x = capsule->worldX - gCamera.x; + s->y = capsule->worldY - gCamera.y; + s2->x = s->x; + s2->y = s->y + 4; + acmdRes = UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + { + s32 i = 0; + do { + Player *p = &PLAYER(i); + + if (p->charState != CHARSTATE_15) { + CamCoord prevPlayerY = I(gPlayer.qWorldY); + sub_80096B0(s, capsule->worldX, capsule->worldY, p); + sub_80096B0(s2, capsule->worldX, capsule->worldY + 4, p); + } + } while (++i < gNumSingleplayerCharacters); + } + + DisplaySprite(s); + DisplaySprite(s2); + + if (acmdRes == ACMD_RESULT__ENDED) { + Strc_sub_80168F0 *strcA; + Strc_sub_80168F0 *strcB; + s32 i = 0; + + do { + Player *p = &PLAYER(i); + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s2)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + } while (++i < gNumSingleplayerCharacters); + + gCurTask->main = Task_801685C; + s->graphics.anim = SA1_ANIM_BOSS_CAPSULE_LARGE; + s->variant = 2; + + strcA = TASK_DATA(sub_80168F0(capsule->worldX, capsule->worldY, 0x40, 0x241, 0U)); + strcA->qUnk44 = -Q(1); + strcA->qUnk46 = -Q(2); + strcA->unk48 = 0; + strcA->unk42 = 4; + strcA->unk40 = 0x3C; + + strcB = TASK_DATA(sub_80168F0(capsule->worldX, capsule->worldY, 0x40, 0x241, 0U)); + strcB->qUnk44 = +Q(1); + strcB->qUnk46 = -Q(2); + strcB->unk48 = 0; + strcB->unk42 = 4; + strcB->transform.qScaleX = -Q(1); + strcB->unk40 = 0x3C; + + sub_801749C(capsule->worldX, capsule->worldY); + } +} + +void Task_801685C(void) +{ + BossCapsule *capsule = TASK_DATA(gCurTask); + Sprite *s = &capsule->s; + + s->x = capsule->worldX - gCamera.x; + s->y = capsule->worldY - gCamera.y; + UpdateSpriteAnimation(s); + + { + s32 i = 0; + + do { + Player *p = &PLAYER(i); + + if (p->charState != CHARSTATE_15) { + sub_80096B0(s, capsule->worldX, capsule->worldY, p); + } + } while (++i < gNumSingleplayerCharacters); + } + + DisplaySprite(s); +} + +struct Task *sub_80168F0(CamCoord worldX, CamCoord worldY, u16 numTiles, AnimId anim, u8 variant) +{ + SpriteTransform *spC; + s32 sp10; + SpriteTransform *temp_r2; + struct Task *t; + Strc_sub_80168F0 *strc; + + t = TaskCreate(Task_8016A14, sizeof(Strc_sub_80168F0), 0x2000U, 0U, TaskDestructor_sub_80168F0); + + strc = TASK_DATA(t); + temp_r2 = &strc->transform; + strc->unk40 = 0x3C; + strc->unk3C = worldX; + strc->unk3E = worldY; + strc->qUnk44 = +Q(1); + strc->qUnk46 = -Q(2); + strc->unk48 = 8; + spC = temp_r2; + sp10 = 0; + strc->s.graphics.dest = VramMalloc(numTiles); + strc->s.oamFlags = SPRITE_OAM_ORDER(20); + strc->s.graphics.size = 0; + strc->s.graphics.anim = anim; + strc->s.variant = variant; + strc->s.animCursor = 0; + strc->s.qAnimDelay = 0; + strc->s.prevVariant = -1; + strc->s.animSpeed = SPRITE_ANIM_SPEED(1.0); + strc->s.palId = 0; + strc->s.frameFlags = 0x70; + temp_r2->rotation = 0; + temp_r2->qScaleX = Q(1); + temp_r2->qScaleY = Q(1); + temp_r2->x = worldX; + temp_r2->y = worldY; + UpdateSpriteAnimation(&strc->s); + return t; +} + +void Task_8016A14() +{ + Strc_sub_80168F0 *strc = TASK_DATA(gCurTask); + SpriteTransform *tf; + + tf = &strc->transform; + if (strc->unk40-- == 0) { + TaskDestroy(gCurTask); + return; + } + + strc->qUnk46 += Q(40. / 256.); + + strc->unk3C += I(strc->qUnk44); + strc->unk3E += I(strc->qUnk46); + tf->x = strc->unk3C - gCamera.x; + tf->y = strc->unk3E - gCamera.y; + + if (strc->qUnk44 > 0) { + tf->rotation = (tf->rotation + strc->unk42) & 0x3FF; + if (tf->qScaleX > -Q(2)) { + tf->qScaleX -= strc->unk48; + } + + if (tf->qScaleX >= 0) { + tf->qScaleY = tf->qScaleX; + } else { + tf->qScaleY = -tf->qScaleX; + } + } else { + tf->rotation = (tf->rotation - strc->unk42) & 0x3FF; + + if (tf->qScaleX < +Q(2)) { + tf->qScaleX += strc->unk48; + } + + if (tf->qScaleX >= 0) { + tf->qScaleY = tf->qScaleX; + } else { + tf->qScaleY = -tf->qScaleX; + } + } + + if (0x20 & strc->s.frameFlags) { + strc->s.frameFlags = strc->s.frameFlags & ~0x1F; + strc->s.frameFlags |= sa2__gUnknown_030054B8++; + TransformSprite(&strc->s, tf); + } else { + strc->s.x = tf->x; + strc->s.y = tf->y; + } + DisplaySprite(&strc->s); +} + +void Task_8016B6C(void) +{ + s32 temp_r0_2; + s32 temp_r0_4; + s32 var_r4; + u16 temp_r1; + + Strc_sub_801749C *strc; + Strc_sub_8016D80 *strc44; + Strc_sub_8016F44 *strc54; + + strc = TASK_DATA(gCurTask); + + if ((strc->unk4++ & 0x3) == 0) { + if (strc->unk4 != 5) { + strc44 = TASK_DATA(sub_8016D80(strc->unk0, strc->unk2 - 32, gUnknown_080BB43C[LEVEL_TO_ZONE(gCurrentLevel)][0], 0)); + var_r4 = PseudoRandom32(); + strc44->qUnk3E += var_r4 & 0xFF; + if (1 & strc->unk8) { + strc44->qUnk3E = -strc44->qUnk3E; + } + strc44->qUnk3C += ((u32)(0x1F00 & var_r4) >> 4); + strc44->qUnk40 = strc44->qUnk3C; + } + + strc44 = TASK_DATA(sub_8016D80(strc->unk0, strc->unk2 - 32, gUnknown_080BB43C[LEVEL_TO_ZONE(gCurrentLevel)][1], 0)); + var_r4 = PseudoRandom32(); + strc44->qUnk3E += var_r4 & 0xFF; + if (!(1 & strc->unk8)) { + strc44->qUnk3E = -strc44->qUnk3E; + } + strc44->qUnk3C += ((u32)(0x1F00 & var_r4) >> 4); + strc44->qUnk40 = strc44->qUnk3C; + if (strc->unk4 != 5) { + strc54 = TASK_DATA(sub_8016F44(strc->unk0, strc->unk2 - 32, 0x1C0, 0)); + var_r4 = PseudoRandom32(); + strc54->unk52 += (var_r4 & 7); + if (1 & strc->unk8) { + strc54->unk52 = -strc54->unk52; + strc54->unk50 = 0x200; + } + strc54->unk4E = ((s32)gPlayer.qWorldY >> 8) - 0x20; + } + strc54 = TASK_DATA(sub_8016F44(strc->unk0, strc->unk2 - 32, 0x1BA, 0)); + var_r4 >>= 8; + strc54->unk52 += ((var_r4)&7); + if (1 & strc->unk8) { + strc54->unk52 = -strc54->unk52; + strc54->unk50 = 0x200; + } + strc54->unk4E = I(gPlayer.qWorldY) - 32; + strc->unk8++; + } + if (strc->unk4 > 12) { + strc->unk4 = 0; + strc->unk6 = 0; + TaskDestroy(gCurTask); + } +} + +void sub_8016E54(void); +void TaskDestructor_sub_8017658(struct Task *t); + +struct Task *sub_8016D80(s16 worldX, s16 worldY, u16 anim, u8 variant) +{ + struct Task *t; + Strc_sub_8016D80 *strc; + + t = TaskCreate(sub_8016E54, sizeof(Strc_sub_8016D80), 0x2000U, 0U, TaskDestructor_sub_8017658); + + strc = TASK_DATA(t); + strc->unk38 = (u16)worldX; + strc->unk3A = (u16)worldY; + strc->qUnk3C = -Q(4); + strc->qUnk40 = -Q(4); + strc->qUnk3E = Q(1); + strc->qUnk34 = 0; + strc->qUnk30 = 0; + strc->s.graphics.dest = VramMalloc(4U); + strc->s.oamFlags = 0x3C0; + strc->s.graphics.size = 0; + strc->s.graphics.anim = anim; + strc->s.variant = variant; + strc->s.animCursor = 0; + strc->s.qAnimDelay = 0; + strc->s.prevVariant = 0xFF; + strc->s.animSpeed = 0x10; + strc->s.palId = 0; + strc->s.frameFlags = 0x2000; + + return t; +} + +void sub_8016E54() +{ + Strc_sub_8016D80 *strc = TASK_DATA(gCurTask); + Sprite *s = &strc->s; + + strc->qUnk3C += Q(40. / 256.); + strc->qUnk34 += strc->qUnk3C; + strc->qUnk30 += strc->qUnk3E; + + if ((strc->qUnk3C > 0) + && (sa2__sub_801F100(strc->unk3A + I(strc->qUnk34), strc->unk38 + I(strc->qUnk30), 1, 8, sa2__sub_801EC3C) < 0)) { + strc->qUnk3C = strc->qUnk40; + + if ((I(strc->qUnk30) < -32) && (strc->qUnk3E < 0)) { + strc->qUnk3E = -strc->qUnk3E; + } else if ((I(strc->qUnk30) > 32) && (strc->qUnk3E > 0)) { + strc->qUnk3E = -strc->qUnk3E; + } + } + + if (strc->qUnk3E < 0) { + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + } else { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } + + s->x = (I(strc->qUnk30) + strc->unk38) - gCamera.x; + s->y = (I(strc->qUnk34) + strc->unk3A) - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +struct Task *sub_8016F44(CamCoord worldX, CamCoord worldY, AnimId anim, u8 variant) +{ + Strc_sub_8016F44 *strc; + struct Task *t; + SpriteTransform *tf; + Sprite *s; + + t = TaskCreate(sub_8017054, sizeof(Strc_sub_8016F44), 0x2000U, 0U, TaskDestructor_sub_8017658); + strc = TASK_DATA(t); + s = &strc->s; + tf = &strc->transform; + strc->unk44 = worldX; + strc->unk46 = worldY; + strc->qUnk48 = -Q(4); + strc->unk40 = 0; + strc->unk3C = 0; + strc->unk4C = 0; + strc->unk4E = 0; + strc->unk50 = 0; + strc->unk52 = 1; + s->graphics.dest = VramMalloc(4U); + s->oamFlags = 0x500; + s->graphics.size = 0; + s->graphics.anim = anim; + s->variant = variant; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2070; + tf->rotation = 0; + tf->qScaleX = 0x100; + tf->qScaleY = 0x100; + + return t; +} + +void sub_8017054() +{ + Strc_sub_8016F44 *strc; + SpriteTransform *tf; + s16 *temp_r1; + s16 *temp_r2; + s16 *temp_r3; + s16 temp_r0; + s16 var_r0_2; + u16 temp_r2_2; + u16 temp_r2_3; + u16 var_r0; + u8 temp_r1_2; + s32 sinA, sinB; + s32 cosA; + s16 cosB; + Sprite *s; + + strc = TASK_DATA(gCurTask); + s = &strc->s; + tf = &strc->transform; + strc->unk4C = (strc->unk4C + 0x10) & 0x3FF; + strc->unk50 = (strc->unk50 + strc->unk52) & 0x3FF; + sinA = SIN(strc->unk4C); + strc->unk40 = sinA >> 2; + strc->unk3C = SIN(strc->unk50); + cosA = COS(strc->unk50); + cosB = (cosA >> 8) + Q(1); + tf->qScaleY = cosB; + + if (tf->qScaleY > Q(1)) { + s->oamFlags = 0x3C0; + } else { + s->oamFlags = 0x440; + } + + if (strc->unk52 > 0) { + if (((strc->unk50 - Q(1)) & 0x200)) { + tf->qScaleX = -cosB; + } else { + tf->qScaleX = cosB; + } + } else { + if ((strc->unk50 - Q(1)) & 0x200) { + tf->qScaleX = cosB; + } else { + tf->qScaleX = -cosB; + } + } + + temp_r0 = strc->unk46 - strc->unk4E; + if (temp_r0 > 0) { + strc->unk46--; + } else if (temp_r0 < 0) { + strc->unk46++; + } + + tf->x = (strc->unk44 + I(strc->unk3C)) - gCamera.x; + tf->y = (strc->unk46 + I(strc->unk40)) - gCamera.y; + s->frameFlags &= ~0x1F; + s->frameFlags |= sa2__gUnknown_030054B8++; + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); +} + +struct Task *Bosses_SetCamBounds(CamCoord minY, CamCoord maxY, CamCoord minX, CamCoord maxX) +{ + s16 temp_r1; + struct Task *t; + CameraPanning *temp_r2; + + t = TaskCreate(Task_8017244, 8U, 0x2000U, 0U, NULL); + temp_r2 = TASK_DATA(t); + temp_r2->unk0 = minY; + temp_r2->unk2 = maxY; + temp_r2->unk4 = minX; + temp_r2->unk6 = maxX; + gCamera.minY = gCamera.y; + gCamera.maxY = gCamera.y + DISPLAY_HEIGHT; + gCamera.minX = gCamera.x; + gCamera.maxX = maxX; + if (temp_r2->unk2 > gCamera.maxY) { + gCamera.maxY = gCamera.y + 320; + } + return t; +} + +void Task_8017244() +{ + CameraPanning *strc = TASK_DATA(gCurTask); + + if (strc->unk0 > gCamera.minY) { + gCamera.minY++; + } else if (strc->unk0 < gCamera.minY) { + gCamera.minY--; + } + + if (strc->unk2 > gCamera.maxY) { + gCamera.maxY++; + } else if (strc->unk2 < gCamera.maxY) { + gCamera.maxY--; + } + + if (strc->unk4 > gCamera.minX) { + gCamera.minX++; + } else if (strc->unk4 < gCamera.minX) { + gCamera.minX--; + } + if ((strc->unk0 == gCamera.minY) && (strc->unk2 == gCamera.maxY) && (strc->unk4 == gCamera.minX) && (strc->unk6 == gCamera.maxX)) { + TaskDestroy(gCurTask); + } +} + +void Task_PreBossCameraPan(void) +{ + CameraPanning *strc = TASK_DATA(gCurTask); + + if (strc->unk0 > gCamera.minY) { + gCamera.minY++; + } else if (strc->unk0 < gCamera.minY) { + gCamera.minY--; + } + + if (strc->unk2 > gCamera.maxY) { + gCamera.maxY++; + } else if (strc->unk2 < gCamera.maxY) { + gCamera.maxY--; + } + + if ((strc->unk0 == gCamera.minY) && (strc->unk2 == gCamera.maxY)) { + TaskDestroy(gCurTask); + } +} + +void Task_8017334() +{ + Player *p; + s16 screenX; + u32 temp_r1; + u32 temp_r3; + + Strc_sub_801766C *strc = TASK_DATA(gCurTask); + + p = strc->p; + screenX = I(p->qWorldX) - gCamera.x; + + if (screenX > DISPLAY_CENTER_X) { + p->moveState |= MOVESTATE_IGNORE_INPUT; + p->heldInput = DPAD_RIGHT; + if ((200 - (p->playerID * 8)) < screenX) { + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + p->moveState |= MOVESTATE_IGNORE_INPUT; + p->heldInput = 0; + p->moveState |= MOVESTATE_FACING_LEFT; + p->charState = CHARSTATE_ACT_CLEAR_B; + p->moveState |= 0x800000; + strc->unk0 = 0; + strc->unk2 = 0; + gCurTask->main = Task_8017400; + } + } else { + p->moveState |= MOVESTATE_IGNORE_INPUT; + p->heldInput = DPAD_LEFT; + if (((p->playerID * 8) + 40) > screenX) { + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + p->moveState |= MOVESTATE_IGNORE_INPUT; + p->heldInput = 0; + p->moveState |= MOVESTATE_FACING_LEFT; + p->charState = CHARSTATE_ACT_CLEAR_B; + p->moveState |= 0x800000; + strc->unk0 = 0; + strc->unk2 = 0; + gCurTask->main = Task_8017400; + } + } +} + +void Task_8017400(void) +{ + u16 temp_r0; + u16 temp_r0_2; + + Strc_sub_801766C *strc = TASK_DATA(gCurTask); + Player *p = strc->p; + + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->charState = CHARSTATE_ACT_CLEAR_B; + } + + if (p->playerID == PLAYER_1) { + if (p->spriteInfoBody->s.frameFlags & 0x4000) { + if (strc->unk0++ > 60) { + CreateStageResults(gRingCount, gCourseTime); + TaskDestroy(gCurTask); + } + } + if (strc->unk0 == 0) { + if (strc->unk2++ > 240) { + CreateStageResults(gRingCount, gCourseTime); + TaskDestroy(gCurTask); + } + } + } +} + +struct Task *sub_801749C(s16 worldX, s16 worldY) +{ + struct Task *t; + Strc_sub_801749C *strc; + t = TaskCreate(Task_8016B6C, sizeof(Strc_sub_801749C), 0x2000U, 0U, NULL); + strc = TASK_DATA(t); + strc->unk4 = 0; + strc->unk8 = 0; + strc->unk0 = worldX; + strc->unk2 = worldY; + + return t; +} + +void Task_PreBossCameraPan(void); + +struct Task *CreatePreBossCameraPan(s16 yMin, s16 yMax) +{ + struct Task *t; + CameraPanning *pan; + + t = TaskCreate(Task_PreBossCameraPan, 8U, 0x2000U, 0U, NULL); + pan = TASK_DATA(t); + + pan->unk0 = yMin; + pan->unk2 = yMax; + gCamera.minY = (s16)(u16)gCamera.y; + gCamera.maxY = gCamera.y + DISPLAY_HEIGHT; + if ((s32)pan->unk2 > gCamera.maxY) { + gCamera.maxY = gCamera.y + 320; + } + return (struct Task *)t; +} + +struct Task *sub_8017540(s32 qParam0, s32 qParam1) +{ + struct Task *t = NULL; + s32 temp_r0_2; + NutsAndBolts *bolts; + Sprite *s; + + t = CreateNutsAndBoltsTask(0x2000U, (void *)(OBJ_VRAM0 + 0x1000), 0x263U, 0U, NULL); + bolts = TASK_DATA(t); + s = &bolts->s; + bolts->qUnk30 = qParam0; + bolts->qUnk34 = qParam1; + s->frameFlags = 0x2000; + s->oamFlags = 0x500; + s->frameFlags |= ((PseudoRandom32() & 0xC00) | 0x2000); + return t; +} + +void TaskDestructor_BossCapsule(struct Task *t) +{ + BossCapsule *capsule = TASK_DATA(t); + VramFree(capsule->s.graphics.dest); + VramFree(capsule->s2.graphics.dest); +} + +void TaskDestructor_sub_80168F0(struct Task *t) +{ + Strc_sub_80168F0 *strc = TASK_DATA(t); + VramFree(strc->s.graphics.dest); +} + +void sub_80175D8(void) +{ + u16 temp_r0; + u16 temp_r0_2; + + // NOTE(Jace): Struct type is speculative. + // This function seems to never get called. + CameraPanning *strc = TASK_DATA(gCurTask); + Player *p = &gPlayer; + + { + if (p->spriteInfoBody->s.frameFlags & 0x4000) { + if (strc->unk4++ > 60) { + CreateStageResults(gRingCount, gCourseTime); + TaskDestroy(gCurTask); + } + } + if (strc->unk4 == 0) { + if (strc->unk6++ > 240) { + CreateStageResults(gRingCount, gCourseTime); + TaskDestroy(gCurTask); + } + } + } +} + +void TaskDestructor_sub_8017658(struct Task *t) +{ + Strc_sub_8016D80 *strc = TASK_DATA(t); + VramFree(strc->s.graphics.dest); +} + +void sub_801766C(Player *p) +{ + struct Task *t = TaskCreate(Task_8017334, sizeof(Strc_sub_801766C), 0x2000, 0, NULL); + Strc_sub_801766C *strc = TASK_DATA(t); + strc->unk0 = 0; + strc->p = p; +} \ No newline at end of file diff --git a/sa1/src/game/enemies/buzzer.c b/sa1/src/game/enemies/buzzer.c new file mode 100644 index 0000000000..7fafaf9605 --- /dev/null +++ b/sa1/src/game/enemies/buzzer.c @@ -0,0 +1,306 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + EntityShared shared; + s32 qUnk3C; + u8 unk40; + u8 unk41; + s16 qUnk42; + s16 qUnk44; +} Buzzer; + +typedef struct { + Sprite s; + s32 qUnk30; + s32 qUnk34; + s16 qUnk38; + s16 qUnk3A; + u8 filler3c[4]; +} BuzzerProjectile; + +void Task_BuzzerInit(void); +void Task_801E034(void); +void Task_Buzzer_801E190(void); +void CreateBuzzerProjectile(CamCoord worldX, CamCoord worldY); +void Task_BuzzerProjectileMain(void); + +void CreateEntity_Buzzer(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if (LEVEL_TO_ZONE(gCurrentLevel) != ZONE_1 || LOADED_SAVE->difficultyLevel == DIFFICULTY_NORMAL) { + struct Task *t = TaskCreate(Task_BuzzerInit, sizeof(Buzzer), 0x2000, 0, TaskDestructor_EntityShared); + Buzzer *buzzer = TASK_DATA(t); + Sprite *s = &buzzer->shared.s; + + buzzer->shared.base.regionX = regionX; + buzzer->shared.base.regionY = regionY; + buzzer->shared.base.me = me; + buzzer->shared.base.meX = me->x; + buzzer->shared.base.id = id; + + buzzer->unk40 = 0; + buzzer->unk41 = 0; + buzzer->qUnk42 = -Q(1); + buzzer->qUnk3C = Q(0); + buzzer->unk40 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BUZZER); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BUZZER; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (I(gPlayer.qWorldX) >= TO_WORLD_POS(buzzer->shared.base.meX, buzzer->shared.base.regionX)) { + buzzer->qUnk42 = Q(1); + SPRITE_FLAG_SET(s, X_FLIP); + } + + UpdateSpriteAnimation(s); + } +} + +void Task_BuzzerInit(void) +{ + Buzzer *buzzer = TASK_DATA(gCurTask); + Sprite *s = &buzzer->shared.s; + MapEntity *me = buzzer->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + + worldX = TO_WORLD_POS(buzzer->shared.base.meX, buzzer->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, buzzer->shared.base.regionY); + + buzzer->qUnk3C += buzzer->qUnk42; + + worldX += I(buzzer->qUnk3C); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, buzzer->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (I(buzzer->qUnk3C) <= me->d.sData[0] * TILE_WIDTH) { + buzzer->qUnk42 = +Q(1.00); + s->prevVariant = -1; + s->variant = 2; + gCurTask->main = Task_Buzzer_801E190; + SPRITE_FLAG_SET(s, X_FLIP); + } else if (I(buzzer->qUnk3C) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + buzzer->qUnk42 = -Q(1.00); + s->prevVariant = -1; + s->variant = 2; + gCurTask->main = Task_Buzzer_801E190; + SPRITE_FLAG_CLEAR(s, X_FLIP); + } else if (buzzer->unk41 == 0) { + if ((worldY <= I(gPlayer.qWorldY)) && (worldY + 96 >= I(gPlayer.qWorldY))) { + s16 r8 = I(gPlayer.qWorldY) - worldY; + s32 playerX = I(gPlayer.qWorldX); + s16 r2; + s16 r6; + playerX = worldX - playerX; + r6 = playerX * 17 / 10; + r2 = playerX * 10 / 17; + + // TODO: Is the &= a @BUG ? + if (s->frameFlags &= SPRITE_FLAG_MASK_X_FLIP) { + r2 = -r2; + r6 = -r6; + } + + if ((r6 >= r8) && (r2 <= r8)) { + s->prevVariant = -1; + s->variant = 1; + + buzzer->qUnk44 = 0; + gCurTask->main = Task_801E034; + } + } + } +} + +void Task_801E034(void) +{ + Buzzer *buzzer = TASK_DATA(gCurTask); + Sprite *s = &buzzer->shared.s; + MapEntity *me = buzzer->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + + worldX = TO_WORLD_POS(buzzer->shared.base.meX, buzzer->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, buzzer->shared.base.regionY); + + worldX += I(buzzer->qUnk3C); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (++buzzer->qUnk44 == 10) { + CreateBuzzerProjectile(worldX, worldY + 6); + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, buzzer->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (buzzer->qUnk44 >= 30) { + s->prevVariant = -1; + s->variant = 0; + gCurTask->main = Task_BuzzerInit; + buzzer->unk41 = 1; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_Buzzer_801E190(void) +{ + Buzzer *buzzer = TASK_DATA(gCurTask); + Sprite *s = &buzzer->shared.s; + MapEntity *me = buzzer->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + + worldX = TO_WORLD_POS(buzzer->shared.base.meX, buzzer->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, buzzer->shared.base.regionY); + + worldX += I(buzzer->qUnk3C); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, buzzer->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + buzzer->unk41 = 0; + buzzer->unk40 = 0; + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 0; + gCurTask->main = Task_BuzzerInit; + } + + DisplaySprite(s); +} + +void CreateBuzzerProjectile(CamCoord worldX, CamCoord worldY) +{ + s32 i; + + struct Task *t = TaskCreate(Task_BuzzerProjectileMain, sizeof(BuzzerProjectile), 0x9000, 0, NULL); + BuzzerProjectile *proj = TASK_DATA(t); + Sprite *s = &proj->s; + s16 res; + + res = SA2_LABEL(sub_8004418)(I(gPlayer.qWorldY) - worldY, I(gPlayer.qWorldX) - worldX); + proj->qUnk38 = Div(COS(res), 38); + proj->qUnk3A = Div(SIN(res), 38); + + proj->qUnk30 = Q(worldX); + proj->qUnk34 = Q(worldY); + s->x = worldX; + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_BUZZER_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BUZZER_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_BuzzerProjectileMain(void) +{ + BuzzerProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s32 oldWorldX, oldWorldY; + s16 screenX, screenY; + s32 worldX; + + proj->qUnk30 += proj->qUnk38; + proj->qUnk34 += proj->qUnk3A; + + s->x = I(proj->qUnk30); + s->y = I(proj->qUnk34); + + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (80 / 2)) > DISPLAY_WIDTH + 80) || (s->y + (80 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 40))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} diff --git a/sa1/src/game/enemies/drisame.c b/sa1/src/game/enemies/drisame.c new file mode 100644 index 0000000000..5dcbc16674 --- /dev/null +++ b/sa1/src/game/enemies/drisame.c @@ -0,0 +1,404 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ Sprite s3; + /* 0x90 */ s16 unk90; + /* 0x92 */ s16 unk92; + /* 0x94 */ s16 unk94[4]; + /* 0x9C */ s16 unk9C[4]; + /* 0xA4 */ s16 unkA4[4]; + /* 0xAC */ s16 unkAC[4]; + /* 0xB4 */ s16 qUnkB4[4]; + /* 0xBC */ s8 unkBC; + /* 0xBD */ bool8 shattered; +} IceBlock; + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3c */ s32 unk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ s32 unk48; + /* 0x4C */ s32 worldX; + /* 0x50 */ s32 worldY; + /* 0x54 */ struct Task *iceBlock; // -> IceBlock * +} Drisame; /* 0x58 */ + +void Task_DrisameInit(void); +void sub_8072E68(void); +struct Task *CreateIceBlock(s16 worldX, s16 worldY); +void Task_IceBlockInit(void); +void Task_IceBlock_8073364(void); +void TaskDestructor_IceBlock(struct Task *t); + +void CreateEntity_Drisame(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_DrisameInit, sizeof(Drisame), 0x2000, 0, TaskDestructor_EntityShared); + Drisame *drisame = TASK_DATA(t); + Sprite *s = &drisame->shared.s; + + drisame->shared.base.regionX = regionX; + drisame->shared.base.regionY = regionY; + drisame->shared.base.me = me; + drisame->shared.base.meX = me->x; + drisame->shared.base.id = id; + + drisame->unk44 = 0; + drisame->unk48 = 0; + drisame->unk3C = 0; + drisame->unk40 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_DRISAME); + s->oamFlags = SPRITE_OAM_ORDER(11); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_DRISAME; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 1); + + UpdateSpriteAnimation(s); + + drisame->iceBlock = CreateIceBlock(s->x, s->y); +} + +// (91.58%) https://decomp.me/scratch/5vT74 +NONMATCH("asm/non_matching/game/enemies/Drisame__Task_DrisameInit.inc", void Task_DrisameInit(void)) +{ + Drisame *drisame = TASK_DATA(gCurTask); + Sprite *s = &drisame->shared.s; + MapEntity *me = drisame->shared.base.me; + IceBlock *iceBlock; + s16 worldX, worldY; + s32 worldX2, worldY2; + s16 res; + s32 some, someX, someY; + + worldX = TO_WORLD_POS(drisame->shared.base.meX, drisame->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, drisame->shared.base.regionY); + + drisame->worldX = worldX2 = worldX; + drisame->worldY = worldY2 = worldY; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, drisame->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + res = CLAMP_SIN_PERIOD(SA2_LABEL(sub_8004418)(I(gPlayer.qWorldY) - worldY, I(gPlayer.qWorldX) - worldX)); + + if (res >= 385 && res < 640) { + some = I(gPlayer.qWorldY) - worldY; + someY = some * some; + some = I(gPlayer.qWorldX) - worldX; + someX = some * some; + someY += someX; + + if (someY < SQUARE(80)) { + IceBlock *iceBlock = TASK_DATA(drisame->iceBlock); + iceBlock->shattered = TRUE; + + SPRITE_FLAG_CLEAR(s, X_FLIP); + + if (Div(COS(res), 35) < 0) { + drisame->unk3C = +Div(COS(res), 35); + } else { + drisame->unk3C = -Div(COS(res), 35); + } + drisame->unk40 = +Div(SIN(res), 35); + drisame->unk44 = 0; + drisame->unk48 = 0; + gCurTask->main = sub_8072E68; + } + } + // 1aa + + if (res < 128 || res > 896) { + some = I(gPlayer.qWorldY) - worldY; + someY = some * some; + some = I(gPlayer.qWorldX) - worldX; + someX = some * some; + someY += someX; + + if (someY < SQUARE(80)) { + IceBlock *iceBlock = TASK_DATA(drisame->iceBlock); + iceBlock->shattered = TRUE; + + SPRITE_FLAG_SET(s, X_FLIP); + + drisame->unk3C = +Div(COS(res), 35); + drisame->unk40 = +Div(SIN(res), 35); + drisame->unk44 = 0; + drisame->unk48 = 0; + gCurTask->main = sub_8072E68; + } + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void sub_8072E68(void) +{ + Drisame *drisame = TASK_DATA(gCurTask); + Sprite *s = &drisame->shared.s; + MapEntity *me = drisame->shared.base.me; + IceBlock *iceBlock; + s16 worldX, worldY; + s32 worldX2, worldY2; + s16 res; + s32 some, someX, someY; + + drisame->unk44 += drisame->unk3C; + drisame->unk48 += drisame->unk40; + + worldX = TO_WORLD_POS(drisame->shared.base.meX, drisame->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, drisame->shared.base.regionY); + + worldX += I(drisame->unk44); + worldY += I(drisame->unk48); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + +#ifndef BUG_FIX + // The buggy version uses drisame->worldX for both macro params, not X and Y! + if (IS_OUT_OF_DISPLAY_RANGE(drisame->worldX, drisame->worldX) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) +#else + if (IS_OUT_OF_DISPLAY_RANGE(drisame->worldX, drisame->worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) +#endif + { + SET_MAP_ENTITY_NOT_INITIALIZED(me, drisame->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +struct Task *CreateIceBlock(s16 worldX, s16 worldY) +{ + s8 arr[4][2] = { { 16, 0 }, { 0, 8 }, { -16, 0 }, { 0, -8 } }; // maybe u8[4][2]? + struct Task *t; + Sprite *s; + Sprite *s2; + Sprite *s3; + IceBlock *iceBlock; + u8 i; + t = TaskCreate(Task_IceBlockInit, sizeof(IceBlock), 0x3000, 0, TaskDestructor_IceBlock); + iceBlock = TASK_DATA(t); + s = &iceBlock->s; + s2 = &iceBlock->s2; + s3 = &iceBlock->s3; + + iceBlock->unk90 = worldX; + iceBlock->unk92 = worldY; + + iceBlock->unkBC = 0; + iceBlock->shattered = FALSE; + + // TODO: This array limit is weird. + for (i = 0; i < (s32)(ARRAY_COUNT(iceBlock->unkAC) / 2); i++) { + iceBlock->qUnkB4[i] = -Q(1); + + if ((i % 2u) != 0) { + iceBlock->unkAC[i] = -2; + } else { + iceBlock->unkAC[i] = +3; + } + + iceBlock->unkA4[i] = (worldX + arr[i][0]) * 4; + iceBlock->unk94[i] = worldX + arr[i][0]; + iceBlock->unk9C[i] = worldY + arr[i][1]; + } + + for (; i < ARRAY_COUNT(arr); i++) { + iceBlock->qUnkB4[i] = -Q(1.3125); + + if ((i % 2u) != 0) { + iceBlock->unkAC[i] = +2; + } else { + iceBlock->unkAC[i] = -3; + } + + iceBlock->unkA4[i] = (worldX + arr[i][0]) * 4; + iceBlock->unk94[i] = worldX + arr[i][0]; + iceBlock->unk9C[i] = worldY + arr[i][1]; + } + + s->y = worldY; + s->x = worldX; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_LARGE); + s->oamFlags = SPRITE_OAM_ORDER(10); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_LARGE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 1); + + s2->y = worldY; + s2->x = worldX; + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_SMALL); + s2->oamFlags = SPRITE_OAM_ORDER(10); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_DRISAME_ICEBLOCK_DEBRIS_SMALL; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 1); + + s3->y = worldY; + s3->x = worldX; + s3->graphics.dest = ALLOC_TILES(SA1_ANIM_DRISAME_ICEBLOCK); + s3->oamFlags = SPRITE_OAM_ORDER(10); + s3->graphics.size = 0; + s3->graphics.anim = SA1_ANIM_DRISAME_ICEBLOCK; + s3->variant = 0; + s3->animCursor = 0; + s3->qAnimDelay = Q(0); + s3->prevVariant = -1; + s3->animSpeed = SPRITE_ANIM_SPEED(1.0); + s3->palId = 0; + s3->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s3->frameFlags = SPRITE_FLAG(PRIORITY, 1); + + return t; +} + +void Task_IceBlockInit(void) +{ + struct Task *t; + Sprite *s3; + IceBlock *iceBlock; + CamCoord screenX, screenY; + u8 i; + iceBlock = TASK_DATA(gCurTask); + s3 = &iceBlock->s3; + + screenX = iceBlock->unk90; + screenY = iceBlock->unk92; + + s3->x = iceBlock->unk90 - gCamera.x; + s3->y = iceBlock->unk92 - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(screenX, screenY) && IS_OUT_OF_CAM_RANGE(s3->x, s3->y)) { + TaskDestroy(gCurTask); + return; + } + + if (iceBlock->shattered) { + gCurTask->main = Task_IceBlock_8073364; + } + + UpdateSpriteAnimation(s3); + + s3->x = screenX - gCamera.x; + s3->y = screenY - gCamera.y; + + DisplaySprite(s3); +} + +void Task_IceBlock_8073364(void) +{ + IceBlock *iceBlock; + struct Task *t; + Sprite *s; + Sprite *s2; + CamCoord worldX, worldY; + s32 r0; + u8 i; + + iceBlock = TASK_DATA(gCurTask); + s = &iceBlock->s; + s2 = &iceBlock->s2; + + if (++iceBlock->unkBC >= 30) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + + if (iceBlock->unkBC & 0x2) { + for (i = 0; i < 4; i++) { + if (i & 0x1) { + iceBlock->unkA4[i] += iceBlock->unkAC[i]; + iceBlock->unk94[i] = iceBlock->unkA4[i] / 4; + iceBlock->qUnkB4[i] += Q(20. / 256.); + iceBlock->unk9C[i] += I(iceBlock->qUnkB4[i]); + s->x = iceBlock->unk94[i] - gCamera.x; + s->y = iceBlock->unk9C[i] - gCamera.y; + + DisplaySprite(s); + } else { + iceBlock->unkA4[i] += iceBlock->unkAC[i]; + iceBlock->unk94[i] = iceBlock->unkA4[i] / 4; + iceBlock->qUnkB4[i] += Q(20. / 256.); + iceBlock->unk9C[i] += I(iceBlock->qUnkB4[i]); + s2->x = iceBlock->unk94[i] - gCamera.x; + s2->y = iceBlock->unk9C[i] - gCamera.y; + + DisplaySprite(s2); + } + } + } +} + +void TaskDestructor_IceBlock(struct Task *t) +{ + IceBlock *iceBlock = TASK_DATA(t); + VramFree(iceBlock->s.graphics.dest); + VramFree(iceBlock->s2.graphics.dest); + VramFree(iceBlock->s3.graphics.dest); +} diff --git a/sa1/src/game/enemies/fireball.c b/sa1/src/game/enemies/fireball.c new file mode 100644 index 0000000000..3232a72047 --- /dev/null +++ b/sa1/src/game/enemies/fireball.c @@ -0,0 +1,273 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +#define NUM_SPARKS 2 +#define FIREBALL_SPAWN_RATE TIME(0, 4) + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s16 unk4; + /* 0x06 */ u8 meX; + /* 0x08 */ u16 regionX; + /* 0x0A */ u16 regionY; +} FireballSpawner; + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s16 qUnk3C; + /* 0x3E */ s16 unk3E; + /* 0x40 */ s16 unk40; + /* 0x44 */ s32 unk44; +} Fireball; /* 0x48 */ + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s16 unk30; + /* 0x32 */ u16 unk32; + /* 0x34 */ s16 qUnk34; + /* 0x36 */ u16 unk36; +} FireballSpark; /* 0x38 */ + +void Task_Fireball(void); +void Task_FireballSpark(void); +void CreateFireballSparks(s16 screenX, s16 screenY); +void Task_FireballUpdateRise(void); +void Task_FireballExtinguish(void); + +void Task_Fireball(void) +{ + FireballSpawner *spawner = TASK_DATA(gCurTask); + MapEntity *me = spawner->me; + CamCoord worldX, worldY; + s32 sb; + + worldX = TO_WORLD_POS(spawner->meX, spawner->regionX); + worldY = TO_WORLD_POS(me->y, spawner->regionY); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spawner->meX); + TaskDestroy(gCurTask); + return; + } + + if (Mod(gStageTime + spawner->unk4, FIREBALL_SPAWN_RATE) == 0) { + struct Task *t = TaskCreate(Task_FireballUpdateRise, sizeof(Fireball), 0x2000, 0, TaskDestructor_EntityShared); + Fireball *fireball = TASK_DATA(t); + Sprite *s = &fireball->shared.s; + fireball->shared.base.regionX = spawner->regionX; + fireball->shared.base.regionY = spawner->regionY; + fireball->shared.base.me = spawner->me; + fireball->shared.base.meX = spawner->meX; + fireball->qUnk3C = -Q(6); + fireball->unk3E = worldX; + fireball->unk40 = worldY + 24; + fireball->unk44 = fireball->unk40; + + s->x = TO_WORLD_POS(me->x, spawner->regionX); + s->y = TO_WORLD_POS(me->y, spawner->regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_FIREBALL); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_FIREBALL; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} + +void Task_FireballUpdateRise(void) +{ + Fireball *fireball = TASK_DATA(gCurTask); + Sprite *s = &fireball->shared.s; + MapEntity *me = fireball->shared.base.me; + + s->x = fireball->unk3E - gCamera.x; + fireball->qUnk3C += Q(0.25); + fireball->unk40 += I(fireball->qUnk3C); + s->y = fireball->unk40 - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(fireball->unk3E, fireball->unk44) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, fireball->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (IS_ALIVE(&gPlayer)) { + if (Coll_Player_Entity_Intersection(s, fireball->unk3E, fireball->unk40, &gPlayer)) { + Coll_DamagePlayer(&gPlayer); + } + } + + if (fireball->qUnk3C >= Q(0)) { + CreateFireballSparks(fireball->unk3E, fireball->unk40 - 16); + s->prevVariant = -1; + s->variant = 1; + gCurTask->main = Task_FireballExtinguish; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +// TODO: One of the Destroy calls is likely bugged? +// One has a SET_MAP_ENTITY_NOT_INITIALIZED() call, one does not. +void Task_FireballExtinguish(void) +{ + Fireball *fireball = TASK_DATA(gCurTask); + Sprite *s = &fireball->shared.s; + MapEntity *me = fireball->shared.base.me; + + s->x = fireball->unk3E - gCamera.x; + fireball->qUnk3C += Q(0.25); + fireball->unk40 += I(fireball->qUnk3C); + s->y = fireball->unk40 - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(fireball->unk3E, fireball->unk44) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, fireball->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (IS_ALIVE(&gPlayer)) { + if (Coll_Player_Entity_Intersection(s, fireball->unk3E, fireball->unk40, &gPlayer)) { + Coll_DamagePlayer(&gPlayer); + } + } + + if (fireball->qUnk3C >= Q(2)) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +// Reg-swap +// (99.61%) https://decomp.me/scratch/MmGb6 +NONMATCH("asm/non_matching/game/enemies/fireball__CreateFireballSparks.inc", void CreateFireballSparks(s16 screenX, s16 screenY)) +{ + struct Task *t; + FireballSpark *spark; + Sprite *s; + s32 i; + s32 v; + + for (i = 0; i < NUM_SPARKS; i++) { + t = TaskCreate(Task_FireballSpark, sizeof(FireballSpark), 0x3000, 0, NULL); + spark = TASK_DATA(t); + s = &spark->s; + + v = screenX * 4; + spark->unk30 = v; + spark->qUnk34 = -Q(2); + spark->unk32 = 6; + + if (i != 0) { + s32 six = -spark->unk32; + spark->unk32 = six; + s->x = screenX - 8; + } else { + spark->unk30 = screenX * 4; + s->x = screenX + 8; + } + + s->y = screenY; + + s->graphics.dest = VRAM_RESERVED_EN_FIREBALL_SPARK; + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_FIREBALL_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} +END_NONMATCH + +void Task_FireballSpark(void) +{ + FireballSpark *fireball = TASK_DATA(gCurTask); + Sprite *s = &fireball->s; + CamCoord oldWorldX, oldWorldY; + s32 worldX; + + fireball->unk30 += fireball->unk32; + + worldX = fireball->unk30; + if (worldX < 0) { + worldX += 3; + } + + s->x = worldX >> 2; + + fireball->qUnk34 += Q(40. / 256.); + s->y += I(fireball->qUnk34); + oldWorldX = fireball->s.x; + oldWorldY = fireball->s.y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + fireball->s.x -= gCamera.x; + fireball->s.y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY; +} + +void CreateEntity_Fireball(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Fireball, sizeof(FireballSpawner), 0x2000, 0, NULL); + FireballSpawner *spawner = TASK_DATA(t); + + spawner->me = me; + spawner->unk4 = 0; + spawner->meX = me->x; + spawner->regionX = regionX; + spawner->regionY = regionY; + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/gamigami.c b/sa1/src/game/enemies/gamigami.c new file mode 100644 index 0000000000..5867306429 --- /dev/null +++ b/sa1/src/game/enemies/gamigami.c @@ -0,0 +1,278 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ EntityShared shared; + /* 0x3C */ s32 unk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s16 unk44; + /* 0x46 */ s16 unk46; + /* 0x48 */ s32 unk48; + /* 0x4C */ u8 meData3; +} GamiGami; + +typedef struct { + Sprite s; + s32 unk30; + s32 unk34; + s16 qUnk38; +} GamiGamiProjectile; + +void Task_GamiGamiInit(void); +void Task_806C2A4(void); +void CreateGamiGamiProjectiles(CamCoord worldX, CamCoord worldY); +void Task_GamiGamiProjectile(void); + +void CreateEntity_GamiGami(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_GamiGamiInit, sizeof(GamiGami), 0x2000, 0, TaskDestructor_EntityShared); + GamiGami *gamigami = TASK_DATA(t); + Sprite *s = &gamigami->shared.s; + + gamigami->shared.base.regionX = regionX; + gamigami->shared.base.regionY = regionY; + gamigami->shared.base.me = me; + gamigami->shared.base.meX = me->x; + gamigami->shared.base.id = id; + + gamigami->unk3C = -160; + gamigami->unk40 = 0; + gamigami->unk44 = 0; + gamigami->unk46 = 0; + gamigami->unk48 = 0; + gamigami->meData3 = me->d.uData[3]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_GAMIGAMI); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_GAMIGAMI; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + + if (I(gPlayer.qWorldX) >= TO_WORLD_POS(gamigami->shared.base.meX, gamigami->shared.base.regionX)) { + gamigami->unk3C = 160; + gamigami->unk48 |= 0x400; + } +} + +void Task_GamiGamiInit(void) +{ + GamiGami *gamigami = TASK_DATA(gCurTask); + Sprite *s = &gamigami->shared.s; + MapEntity *me = gamigami->shared.base.me; + u8 sp08; + s32 prevWorldX, prevWorldY, worldX, worldY; + + worldX = TO_WORLD_POS(gamigami->shared.base.meX, gamigami->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, gamigami->shared.base.regionY); + + prevWorldX = worldX; + prevWorldY = worldY; + gamigami->unk40 += gamigami->unk3C; + worldX += Div(gamigami->unk40, 0x100); + + worldY -= 6; + worldY += gamigami->unk44; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(prevWorldX, prevWorldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gamigami->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + if (gamigami->meData3 != 0) { + gamigami->unk44 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, 8, &sp08, SA2_LABEL(sub_801EE64)); + } else { + gamigami->unk44 += SA2_LABEL(sub_801F07C)(worldY, worldX, 0, 8, &sp08, SA2_LABEL(sub_801EE64)); + } + + if (Div(gamigami->unk40, 0x100) <= me->d.sData[0] * TILE_WIDTH) { + if (~gamigami->unk48 & 0x400) { + gamigami->unk3C = 160; + gamigami->unk46 = 0; + gamigami->unk48 |= 0x400; + s->variant = 1; + gCurTask->main = Task_806C2A4; + } + } else if (Div(gamigami->unk40, 0x100) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + if (gamigami->unk48 & 0x400) { + gamigami->unk3C = -160; + gamigami->unk46 = 0; + gamigami->unk48 &= ~0x400; + s->variant = 1; + gCurTask->main = Task_806C2A4; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_806C2A4(void) +{ + GamiGami *gamigami = TASK_DATA(gCurTask); + Sprite *s = &gamigami->shared.s; + MapEntity *me = gamigami->shared.base.me; + u8 sp08; + s32 prevWorldX, prevWorldY, worldX, worldY; + + worldX = TO_WORLD_POS(gamigami->shared.base.meX, gamigami->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, gamigami->shared.base.regionY); + + prevWorldX = worldX; + prevWorldY = worldY; + worldX += Div(gamigami->unk40, 0x100); + + worldY -= 6; + worldY += gamigami->unk44; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (++gamigami->unk46 == 15) { + CreateGamiGamiProjectiles(worldX, worldY - 20); + } + + if (IS_OUT_OF_DISPLAY_RANGE(prevWorldX, prevWorldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gamigami->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + if (gamigami->meData3 != 0) { + gamigami->unk44 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, 8, &sp08, SA2_LABEL(sub_801EE64)); + } else { + gamigami->unk44 += SA2_LABEL(sub_801F07C)(worldY, worldX, 0, 8, &sp08, SA2_LABEL(sub_801EE64)); + } + + if (gamigami->unk46 > 18) { + s->variant = 0; + gCurTask->main = Task_GamiGamiInit; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateGamiGamiProjectiles(CamCoord worldX, CamCoord worldY) +{ + s32 i; + + for (i = 0; i < 2; i++) { + { + struct Task *t = TaskCreate(Task_GamiGamiProjectile, sizeof(GamiGamiProjectile), 0x3000, 0, NULL); + GamiGamiProjectile *proj = TASK_DATA(t); + Sprite *s = &proj->s; +#ifndef NON_MATCHING + s32 matchWorldX = worldX + 8; +#endif + s32 maxX = +6; + s32 minX = -6; + + proj->unk30 = worldX * 4; + proj->qUnk38 = -Q(2); + proj->unk34 = maxX; + + if (i != 0) { + proj->unk34 = minX; + proj->unk30 = (worldX - 14) * 4; + + s->x = worldX - 8; + } else { + // proj->unk34 = +6; + proj->unk30 = (worldX + 14) * 4; + + s->x = worldX + 8; + } + + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_GAMIGAMI_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_GAMIGAMI_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } + } +} + +// Almost copy-paste of Task_FireballSpark() +void Task_GamiGamiProjectile(void) +{ + GamiGamiProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s32 oldWorldX, oldWorldY; + s16 screenX, screenY; + s32 worldX; + + proj->unk30 += proj->unk34; + + s->x = proj->unk30 >> 2; + + proj->qUnk38 += Q(40. / 256.); + s->y += I(proj->qUnk38); + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY; +} diff --git a/sa1/src/game/enemies/hanabii.c b/sa1/src/game/enemies/hanabii.c new file mode 100644 index 0000000000..ac7f1f272c --- /dev/null +++ b/sa1/src/game/enemies/hanabii.c @@ -0,0 +1,334 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s16 qUnk44; + /* 0x46 */ s16 unk46; + /* 0x48 */ s16 unk48; +} Hanabii; + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s32 unk30; + /* 0x34 */ s16 qUnk34; + /* 0x36 */ u8 unk36; +} HanabiiProjectile; + +void Task_HanabiiInit(void); +void Task_806D804(void); + +void CreateHanabiiProjectile(s16 a, s16 b); +void Task_HanabiiProjectile(void); +void Task_HanabiiProjectile2(void); +void TaskDestructor_HanabiiProjectile(struct Task *t); + +void CreateEntity_Hanabii(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_HanabiiInit, sizeof(Hanabii), 0x2000, 0, TaskDestructor_EntityShared); + Hanabii *hanabii = TASK_DATA(t); + Sprite *s = &hanabii->shared.s; + + hanabii->shared.base.regionX = regionX; + hanabii->shared.base.regionY = regionY; + hanabii->shared.base.me = me; + hanabii->shared.base.meX = me->x; + hanabii->shared.base.id = id; + + hanabii->qUnk44 = -Q(0.625); + hanabii->qUnk3C = Q(0); + hanabii->unk40 = 0; + hanabii->unk46 = 0; + hanabii->unk48 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_HANABII); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_HANABII; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_HanabiiInit(void) +{ + Hanabii *hanabii = TASK_DATA(gCurTask); + Sprite *s = &hanabii->shared.s; + MapEntity *me = hanabii->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + CamCoord deltaX, deltaY; + CamCoord xSquared, ySquared; + + worldX = TO_WORLD_POS(hanabii->shared.base.meX, hanabii->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, hanabii->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + hanabii->qUnk3C += hanabii->qUnk44; + + deltaX = worldX2 + I(hanabii->qUnk3C); + deltaY = worldY2 + hanabii->unk40; + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, hanabii->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + hanabii->unk40 += SA2_LABEL(sub_801F07C)(deltaY, deltaX, 1, +8, NULL, SA2_LABEL(sub_801EE64)); + + xSquared = I(gPlayer.qWorldX) - deltaX; + xSquared = xSquared * xSquared; + ySquared = I(gPlayer.qWorldY) - deltaY; + ySquared = ySquared * ySquared; + + if (I(hanabii->qUnk3C) <= (me->d.sData[0] + 1) * TILE_WIDTH) { + if (~s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + SPRITE_FLAG_SET(s, X_FLIP); + hanabii->qUnk44 = +Q(0.625); + } + } else if (I(hanabii->qUnk3C) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + hanabii->qUnk44 = -Q(0.625); + } + } else if (hanabii->unk48 != 0) { + hanabii->unk48--; + } else { + if (xSquared + ySquared < 100 * 100) { + hanabii->unk46 = 0; + hanabii->unk48 = 100; + s->variant = 1; + s->prevVariant = -1; + gCurTask->main = Task_806D804; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_806D804(void) +{ + Hanabii *hanabii = TASK_DATA(gCurTask); + Sprite *s = &hanabii->shared.s; + MapEntity *me = hanabii->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp08; + CamCoord deltaX, deltaY; + CamCoord xSquared, ySquared; + + worldX = TO_WORLD_POS(hanabii->shared.base.meX, hanabii->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, hanabii->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + deltaX = worldX2 + I(hanabii->qUnk3C); + deltaY = worldY2 + hanabii->unk40; + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, hanabii->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + hanabii->unk40 += SA2_LABEL(sub_801F07C)(deltaY, deltaX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (++hanabii->unk46 == 7) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + CreateHanabiiProjectile(deltaX + 4, deltaY - 20); + } else { + CreateHanabiiProjectile(deltaX - 6, deltaY - 20); + } + } + + if (hanabii->unk46 == 19) { + hanabii->unk46 = 0; + s->prevVariant = -1; + s->variant = 0; + gCurTask->main = Task_HanabiiInit; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateHanabiiProjectile(CamCoord worldX, CamCoord worldY) +{ + struct Task *t = TaskCreate(Task_HanabiiProjectile, sizeof(HanabiiProjectile), 0x3000, 0, TaskDestructor_HanabiiProjectile); + HanabiiProjectile *proj = TASK_DATA(t); + Sprite *s = &proj->s; + + proj->unk30 = worldX * 4; + proj->qUnk34 = -Q(3.6875); + proj->unk36 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = worldX; + s->y = worldY; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_HANABII_FIREWORK); /* MAX_TILES(SA1_ANIM_HANABII_FIREWORK, SA1_ANIM_HANABII_PROJ) */ + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_HANABII_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_HanabiiProjectile(void) +{ + HanabiiProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 oldWorldX, oldWorldY; + s32 worldX; + + // proj->unk30 += proj->unk32; + + worldX = proj->unk30; + if (worldX < 0) { + worldX += 3; + } + + s->x = worldX >> 2; + + proj->qUnk34 += Q(44. / 256.); + s->y += I(proj->qUnk34); + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (120 / 2)) > DISPLAY_WIDTH + 120) || (s->y + (120 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 140))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (proj->qUnk34 > -16) { + s->graphics.anim = SA1_ANIM_HANABII_FIREWORK; + s->variant = 0; + s->prevVariant = -1; + gCurTask->main = Task_HanabiiProjectile2; + } + + s->x = oldWorldX; + s->y = oldWorldY; +} + +void Task_HanabiiProjectile2(void) +{ + HanabiiProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 oldWorldX, oldWorldY; + s32 worldX; + u32 unk36; + + // proj->unk30 += proj->unk32; + + worldX = proj->unk30; + if (worldX < 0) { + worldX += 3; + } + + s->x = worldX >> 2; + + s->y += I(proj->qUnk34); + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + unk36 = proj->unk36 + 1; + proj->unk36 = unk36; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (120 / 2)) > DISPLAY_WIDTH + 120) || (s->y + (120 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 140) || ((u8)unk36 > 20))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + SPRITE_FLAG_SET(s, Y_FLIP); + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, Y_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); + + s->x = oldWorldX; + s->y = oldWorldY; +} + +void TaskDestructor_HanabiiProjectile(struct Task *t) +{ + HanabiiProjectile *proj = TASK_DATA(t); + VramFree(proj->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/kerokero.c b/sa1/src/game/enemies/kerokero.c new file mode 100644 index 0000000000..fd2314b9d6 --- /dev/null +++ b/sa1/src/game/enemies/kerokero.c @@ -0,0 +1,265 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" + +typedef struct { + EntityShared shared; + s32 qUnk3C; + s16 qUnk40; + s16 unk42; + s16 qUnk44; // Q() ? + u8 unk46; + u8 unk47; + s16 unk48; + s16 unk4A; +} KeroKero; + +void Task_KeroKeroInit(void); +void Task_806D804(void); +void Task_806D124(void); +void Task_806D2B8(void); + +void CreateEntity_KeroKero(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_KeroKeroInit, sizeof(KeroKero), 0x2000, 0, TaskDestructor_EntityShared); + KeroKero *kerokero = TASK_DATA(t); + Sprite *s = &kerokero->shared.s; + + kerokero->shared.base.regionX = regionX; + kerokero->shared.base.regionY = regionY; + kerokero->shared.base.me = me; + kerokero->shared.base.meX = me->x; + kerokero->shared.base.id = id; + + kerokero->qUnk40 = -Q(1); + kerokero->qUnk3C = Q(0); + kerokero->unk42 = 0; + kerokero->qUnk44 = Q(0); + kerokero->unk46 = 0; + kerokero->unk47 = 0; + kerokero->unk48 = 0; + kerokero->unk4A = me->d.uData[3]; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_KEROKERO); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_KEROKERO; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_KeroKeroInit(void) +{ + const u8 arr[8] = { 54, 43, 34, 32, 12, 100, 25, 32 }; + KeroKero *kerokero = TASK_DATA(gCurTask); + Sprite *s = &kerokero->shared.s; + MapEntity *me = kerokero->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp10; + + worldX = TO_WORLD_POS(kerokero->shared.base.meX, kerokero->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, kerokero->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX = worldX + I(kerokero->qUnk3C); + worldY = worldY + kerokero->unk42; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, kerokero->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + kerokero->unk48++; + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + if (kerokero->unk4A != 0) { + kerokero->unk42 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp10, SA2_LABEL(sub_801EE64)); + } else { + kerokero->unk42 += SA2_LABEL(sub_801F07C)(worldY, worldX, 0, +8, &sp10, SA2_LABEL(sub_801EE64)); + } + + if (I(gPlayer.qWorldX) > worldX) { + SPRITE_FLAG_SET(s, X_FLIP); + } else { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } + + if (kerokero->unk48 > 250) { + kerokero->unk46 = 0; + kerokero->unk48 -= 250; + s->variant = 1; + gCurTask->main = Task_806D124; + } else if (kerokero->unk46 != 0) { + kerokero->unk46--; + } else { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if ((I(kerokero->qUnk3C) <= (me->d.sData[0] + me->d.uData[2] - 8) * TILE_WIDTH) && (I(gPlayer.qWorldX) >= worldX) + && (worldX + 80 >= I(gPlayer.qWorldX))) { + kerokero->qUnk44 = -Q(5); + s->variant = 0; + gCurTask->main = Task_806D2B8; + + kerokero->unk48 += arr[kerokero->unk47++]; + kerokero->unk47 &= 0x7; + } + } else if (I(kerokero->qUnk3C) >= ((me->d.sData[0] + 8) * TILE_WIDTH) && (I(gPlayer.qWorldX) <= worldX) + && (worldX - 80 <= I(gPlayer.qWorldX))) { + { + kerokero->qUnk44 = -Q(5); + s->variant = 0; + gCurTask->main = Task_806D2B8; + kerokero->unk48 += arr[kerokero->unk47++]; + kerokero->unk47 &= 0x7; + } + } + } + + DisplaySprite(s); +} + +void Task_806D124(void) +{ + KeroKero *kerokero = TASK_DATA(gCurTask); + Sprite *s = &kerokero->shared.s; + MapEntity *me = kerokero->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp10; + + worldX = TO_WORLD_POS(kerokero->shared.base.meX, kerokero->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, kerokero->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX = worldX + I(kerokero->qUnk3C); + worldY = worldY + kerokero->unk42; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, kerokero->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + if (kerokero->unk4A != 0) { + kerokero->unk42 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp10, SA2_LABEL(sub_801EE64)); + } else { + kerokero->unk42 += SA2_LABEL(sub_801F07C)(worldY, worldX, 0, +8, &sp10, SA2_LABEL(sub_801EE64)); + } + + if (++kerokero->unk46 > 60) { + kerokero->unk46 = 0; + s->variant = 0; + gCurTask->main = Task_KeroKeroInit; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_806D2B8(void) +{ + KeroKero *kerokero = TASK_DATA(gCurTask); + Sprite *s = &kerokero->shared.s; + MapEntity *me = kerokero->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp10; + s32 res; + + worldX = TO_WORLD_POS(kerokero->shared.base.meX, kerokero->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, kerokero->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + kerokero->qUnk44 += Q(0.25); + kerokero->unk42 += Div(kerokero->qUnk44, Q(1)); + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + kerokero->qUnk3C += Q(1); + } else { + kerokero->qUnk3C -= Q(1); + } + + worldX = worldX + I(kerokero->qUnk3C); + worldY = worldY + kerokero->unk42; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, kerokero->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + if (kerokero->unk4A != 0) { + res = SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp10, SA2_LABEL(sub_801EE64)); + } else { + res = SA2_LABEL(sub_801F07C)(worldY, worldX, 0, +8, &sp10, SA2_LABEL(sub_801EE64)); + } + + if (res <= 0) { + kerokero->unk46 = 5; + kerokero->unk42 += res; + + s->variant = 1; + UpdateSpriteAnimation(s); + s->variant = 0; + gCurTask->main = Task_KeroKeroInit; + + if (I(gPlayer.qWorldX) > worldX) { + SPRITE_FLAG_SET(s, X_FLIP); + } else { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/kiki.c b/sa1/src/game/enemies/kiki.c new file mode 100644 index 0000000000..8ae23c624a --- /dev/null +++ b/sa1/src/game/enemies/kiki.c @@ -0,0 +1,494 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +/* TODO: Streamline all the gamespecific differences (using const etc.) */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s8 unk3C; + /* 0x3D */ s8 unk3D; + /* 0x3E */ u8 unk3E; + /* 0x3F */ u8 unk3F; +} Sprite_Kiki; /* size: 0x40 */ + +typedef struct { + Sprite s; + u16 unk30; + s16 unk32; + s16 unk34; + s16 unk36; + s16 unk38; +} Kiki_Proj; /* 0x3C */ + +static void Task_KikiMain(void); +#if (GAME == GAME_SA1) +static void SA2_LABEL(Task_8053A38)(void); +#elif (GAME == GAME_SA2) +static void SA2_LABEL(Task_8053A38)(void); +#endif + +static void CreateKikiProjectile(s16, s16); +static void Task_KikiProjMain(void); +static void Task_KikiProjSplit(void); + +static void CreateKikiProjectilePiece(s16, s16); +static void Task_ProjPieceMain(void); + +static void TaskDestructor_KikiProj(struct Task *); + +void CreateEntity_Kiki(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY) +{ +#if (GAME == GAME_SA1) + const s32 taskPriority = 0x2000; + const TaskDestructor dtor = TaskDestructor_EntityShared; +#else + const s32 taskPriority = 0x4020; + const TaskDestructor dtor = TaskDestructor_80095E8; +#endif + struct Task *t = TaskCreate(Task_KikiMain, sizeof(Sprite_Kiki), taskPriority, 0, dtor); + Sprite_Kiki *kiki = TASK_DATA(t); + Sprite *s = &kiki->s; + + kiki->base.regionX = spriteRegionX; + kiki->base.regionY = spriteRegionY; + kiki->base.me = me; +#if (GAME == GAME_SA1) + kiki->base.meX = me->x; +#elif (GAME == GAME_SA2) + // TODO: Rename + kiki->base.spriteX = me->x; +#endif + kiki->base.id = spriteY; + + kiki->unk3C = 1; + kiki->unk3D = 0; + kiki->unk3E = 0; + kiki->unk3F = 0; + + s->x = TO_WORLD_POS(me->x, spriteRegionX); + s->y = TO_WORLD_POS(me->y, spriteRegionY); + SET_MAP_ENTITY_INITIALIZED(me); + +#if (GAME == GAME_SA1) + s->graphics.dest = ALLOC_TILES(SA1_ANIM_KIKI); +#elif (GAME == GAME_SA2) + // s->graphics.dest = ALLOC_TILES(SA2_ANIM_KIKI); + s->graphics.dest = VramMalloc(0x14); +#endif + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; +#if (GAME == GAME_SA1) + s->graphics.anim = SA1_ANIM_KIKI; + s->variant = 1; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_KIKI; + s->variant = 0; +#endif + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +static void Task_KikiMain(void) +{ + Sprite_Kiki *kiki = TASK_DATA(gCurTask); + Sprite *s = &kiki->s; + MapEntity *me = kiki->base.me; + s16 x, y; + +#if (GAME == GAME_SA1) + x = TO_WORLD_POS(kiki->base.meX, kiki->base.regionX); +#elif (GAME == GAME_SA2) + x = TO_WORLD_POS(kiki->base.spriteX, kiki->base.regionX); +#endif + y = TO_WORLD_POS(me->y, kiki->base.regionY); + + kiki->unk3D += kiki->unk3C; + y += kiki->unk3D; + + s->x = x - gCamera.x; + s->y = y - gCamera.y; + + if (ENEMY_CROSSED_TOP_BORDER_RAW(kiki, me, kiki->unk3D)) { + kiki->unk3E++; + kiki->unk3C = 1; + if (!(kiki->unk3E & 1)) { + kiki->unk3F = 0; +#if (GAME == GAME_SA1) + s->variant = 2; +#elif (GAME == GAME_SA2) + s->variant = 1; +#endif + gCurTask->main = sa2__Task_8053A38; + } + } else if (ENEMY_CROSSED_BOTTOM_BORDER_RAW(kiki, me, kiki->unk3D)) { + kiki->unk3C = -1; + } + +#if (GAME == GAME_SA1) + if (Coll_Player_Enemy_Attack(s, x, y)) +#elif (GAME == GAME_SA2) + if (Coll_Player_Enemy_Attack(s, x, y, 0)) +#endif + { + TaskDestroy(gCurTask); + return; + } + +#if (GAME == GAME_SA1) + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) +#elif (GAME == GAME_SA2) + if (IS_OUT_OF_CAM_RANGE(s->x, s->y - kiki->unk3D)) +#endif + { +#if (GAME == GAME_SA1) + SET_MAP_ENTITY_NOT_INITIALIZED(me, kiki->base.meX); +#elif (GAME == GAME_SA2) + SET_MAP_ENTITY_NOT_INITIALIZED(me, kiki->base.spriteX); +#endif + TaskDestroy(gCurTask); + return; + } + + if (I(gPlayer.qWorldX) < x) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } else { + SPRITE_FLAG_SET(s, X_FLIP); +#if (GAME == GAME_SA1) + s->x -= 8; +#elif (GAME == GAME_SA2) + s->x += 8; +#endif + } + + ENEMY_UPDATE_EX_RAW(s, QS(x), QS(y), {}); +} + +static void sa2__Task_8053A38(void) +{ + Sprite_Kiki *kiki = TASK_DATA(gCurTask); + Sprite *s = &kiki->s; + MapEntity *me = kiki->base.me; + s16 x, y; + +#if (GAME == GAME_SA1) + x = TO_WORLD_POS(kiki->base.meX, kiki->base.regionX); +#elif (GAME == GAME_SA2) + x = TO_WORLD_POS(kiki->base.spriteX, kiki->base.regionX); +#endif + y = TO_WORLD_POS(me->y, kiki->base.regionY); + + y += kiki->unk3D; + + s->x = x - gCamera.x; + s->y = y - gCamera.y; + +#if (GAME == GAME_SA1) + if (Coll_Player_Enemy_Attack(s, x, y)) +#elif (GAME == GAME_SA2) + if (Coll_Player_Enemy_Attack(s, x, y, 0)) +#endif + { + TaskDestroy(gCurTask); + return; + } + +#if (GAME == GAME_SA1) + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) +#elif (GAME == GAME_SA2) + if (IS_OUT_OF_CAM_RANGE(s->x, s->y - kiki->unk3D)) +#endif + { +#if (GAME == GAME_SA1) + SET_MAP_ENTITY_NOT_INITIALIZED(me, kiki->base.meX); +#elif (GAME == GAME_SA2) + SET_MAP_ENTITY_NOT_INITIALIZED(me, kiki->base.spriteX); +#endif + TaskDestroy(gCurTask); + return; + } + + if (I(gPlayer.qWorldX) < x) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } else { + SPRITE_FLAG_SET(s, X_FLIP); +#if (GAME == GAME_SA1) + s->x -= 8; +#elif (GAME == GAME_SA2) + s->x += 8; +#endif + } + + kiki->unk3F++; + +#if (GAME == GAME_SA1) + if (kiki->unk3F > 14) { + gCurTask->main = Task_KikiMain; + s->variant = 1; + +#if (GAME == GAME_SA1) + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + CreateKikiProjectile(x - 18, y - 8); + } else { + CreateKikiProjectile(x + 8, y - 8); + } +#elif (GAME == GAME_SA2) + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + CreateKikiProjectile(x - 4, y + 2); + } else { + CreateKikiProjectile(x + 9, y + 2); + } +#endif + } +#elif (GAME == GAME_SA2) + Player_UpdateHomingPosition(QS(x), QS(y)); + + if (kiki->unk3F == 0x12) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + CreateKikiProjectile(x - 4, y + 2); + } else { + CreateKikiProjectile(x + 9, y + 2); + } + } +#endif + +#if (GAME == GAME_SA1) + UpdateSpriteAnimation(s); +#elif (GAME == GAME_SA2) + if (UpdateSpriteAnimation(s) == 0) { + gCurTask->main = Task_KikiMain; + s->variant = 0; + }; +#endif + DisplaySprite(s); +} + +static void CreateKikiProjectile(s16 x, s16 y) +{ +#if (GAME == GAME_SA1) + const u16 prio = 0x2000; + const TaskDestructor dtor = NULL; +#elif (GAME == GAME_SA2) + const u16 prio = 0x4028; + const TaskDestructor dtor = TaskDestructor_KikiProj; +#endif + + struct Task *t = TaskCreate(Task_KikiProjMain, sizeof(Kiki_Proj), prio, 0, dtor); + Kiki_Proj *proj = TASK_DATA(t); + Sprite *s = &proj->s; + + proj->unk32 = -512; + proj->unk30 = 0; + proj->unk36 = 0; + proj->unk38 = x; + if (I(gPlayer.qWorldX) < x) { + proj->unk34 = -Div((x - I(gPlayer.qWorldX)) * 400, 800); + if (proj->unk34 < -0x3C) { + proj->unk34 = -60; + } + } else { + proj->unk34 = Div((I(gPlayer.qWorldX) - x) * 400, 800); + + if (proj->unk34 >= 0x3D) { + proj->unk34 = 60; + } + } + + s->x = x; + s->y = y; + +#if (GAME == GAME_SA1) + s->graphics.dest = VRAM_RESERVED_EN_KIKI_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(18); +#elif (GAME == GAME_SA2) + s->graphics.dest = VramMalloc(4); + s->oamFlags = SPRITE_OAM_ORDER(17); +#endif + s->graphics.size = 0; +#if (GAME == GAME_SA1) + s->graphics.anim = SA1_ANIM_KIKI_PROJ; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_KIKI; +#endif + s->variant = 0; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +static void Task_KikiProjMain(void) +{ + Kiki_Proj *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 x, y; + + proj->unk32 += 40; + proj->unk36 += proj->unk34; + + s->x = proj->unk38 + Div(proj->unk36, 0x28); + s->y += Q_8_8_TO_INT(proj->unk32); + + if (proj->unk32 && proj->unk32 > -1) { + s32 delta = SA2_LABEL(sub_801F07C)(s->y, s->x, 1, 8, 0, SA2_LABEL(sub_801EE64)); + if (delta < 0) { + s->y += delta; + if (proj->unk30 == 0) { + proj->unk32 = -(proj->unk32 >> 2); + proj->unk30 += 1; + } else { + gCurTask->main = Task_KikiProjSplit; + proj->unk30 = 0; + proj->unk32 = 0; + } + } + } + + x = s->x; + y = s->y; + if (Coll_Player_Projectile(s, x, y) != 0) { + s->prevVariant = -1; +#if (GAME == GAME_SA1) + s->graphics.anim = SA1_ANIM_DUST_CLOUD; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_DUST_CLOUD; +#endif + s->variant = 0; + CreateKikiProjectilePiece(x, y); + TaskDestroy(gCurTask); + return; + } + s->x -= gCamera.x; + s->y -= gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); + s->x = x; + s->y = y; +} + +static void Task_KikiProjSplit(void) +{ + Kiki_Proj *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 x, y; + + x = s->x; + y = s->y; + if (proj->unk30++ >= 0x60) { + CreateKikiProjectilePiece(x, y); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Projectile(s, x, y) != 0) { + CreateKikiProjectilePiece(x, y); + TaskDestroy(gCurTask); + return; + } + + s->x -= gCamera.x; + s->y -= gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); + s->x = x; + s->y = y; +} + +static void CreateKikiProjectilePiece(s16 x, s16 y) +{ + struct Task *t = TaskCreate(Task_ProjPieceMain, sizeof(Kiki_Proj), 0x2000, 0, TaskDestructor_KikiProj); + Kiki_Proj *proj = TASK_DATA(t); + Sprite *s = &proj->s; + + proj->unk32 = -512; + proj->unk30 = 0; + + if (I(gPlayer.qWorldX) < x) { + proj->unk34 = -1; + } else { + proj->unk34 = 1; + } + + s->x = x; + s->y = y; + s->graphics.dest = VramMalloc(16); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; +#if (GAME == GAME_SA1) + s->graphics.anim = SA1_ANIM_KIKI_PROJ_EXPLOSION; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_KIKI_PROJ_EXPLOSION; +#endif + s->variant = 0; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +static void Task_ProjPieceMain(void) +{ + Sprite *s2 = &gPlayerBodyPSI.s; + Kiki_Proj *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 x, y; + + x = s->x; + y = s->y; + if ((s->hitboxes[0].index != -1) && (s2->hitboxes[0].index != -1)) { + s32 x1, x2; + // TODO: HITBOX macros!!! + // TODO: .b struct alignment +#if (GAME == GAME_SA1) + x1 = x + s->hitboxes[0].b.left; + x2 = I(gPlayer.qWorldX) + s2->hitboxes[0].b.left; + if ((x1 <= x2 && x1 + (s->hitboxes[0].b.right - s->hitboxes[0].b.left) >= x2) + || (x1 >= x2 && x2 + (s2->hitboxes[0].b.right - s2->hitboxes[0].b.left) >= x1)) { + s32 y1, y2; + y1 = y + s->hitboxes[0].b.top; + y2 = I(gPlayer.qWorldY) + s2->hitboxes[0].b.top; + if ((y1 <= y2 && y1 + (s->hitboxes[0].b.bottom - s->hitboxes[0].b.top) >= y2) + || (y1 >= y2 && y2 + (s2->hitboxes[0].b.bottom - s2->hitboxes[0].b.top) >= y1)) { + Coll_DamagePlayer(&gPlayer); + } + } +#elif (GAME == GAME_SA2) + x1 = x + s->hitboxes[0].left; + x2 = I(gPlayer.qWorldX) + s2->hitboxes[0].left; + if ((x1 <= x2 && x1 + (s->hitboxes[0].right - s->hitboxes[0].left) >= x2) + || (x1 >= x2 && x2 + (s2->hitboxes[0].right - s2->hitboxes[0].left) >= x1)) { + s32 y1, y2; + y1 = y + s->hitboxes[0].top; + y2 = I(gPlayer.qWorldY) + s2->hitboxes[0].top; + if ((y1 <= y2 && y1 + (s->hitboxes[0].bottom - s->hitboxes[0].top) >= y2) + || (y1 >= y2 && y2 + (s2->hitboxes[0].bottom - s2->hitboxes[0].top) >= y1)) { + Coll_DamagePlayer(&gPlayer); + } + } +#endif + } + s->x -= gCamera.x; + s->y -= gCamera.y; + if (UpdateSpriteAnimation(s) == 0) { + TaskDestroy(gCurTask); + return; + } + DisplaySprite(s); + s->x = x; + s->y = y; +} + +static void TaskDestructor_KikiProj(struct Task *t) +{ + Kiki_Proj *proj = TASK_DATA(t); + VramFree(proj->s.graphics.dest); +} diff --git a/sa1/src/game/enemies/kuraa.c b/sa1/src/game/enemies/kuraa.c new file mode 100644 index 0000000000..912b0197b2 --- /dev/null +++ b/sa1/src/game/enemies/kuraa.c @@ -0,0 +1,177 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s16 qUnk40; + /* 0x42 */ s16 unk42; + /* 0x44 */ s16 unk44; + /* 0x46 */ s16 unk46; +} Kuraa; + +void Task_KuraaInit(void); +void Task_80737A8(void); + +void CreateEntity_Kuraa(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_KuraaInit, sizeof(Kuraa), 0x2000, 0, TaskDestructor_EntityShared); + Kuraa *kuraa = TASK_DATA(t); + Sprite *s = &kuraa->shared.s; + + kuraa->shared.base.regionX = regionX; + kuraa->shared.base.regionY = regionY; + kuraa->shared.base.me = me; + kuraa->shared.base.meX = me->x; + kuraa->shared.base.id = id; + + kuraa->qUnk40 = -Q(0.25); + kuraa->qUnk3C = Q(0); + kuraa->unk44 = 0; + kuraa->unk42 = 0; + kuraa->unk46 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_KURAA); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_KURAA; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_KuraaInit(void) +{ + Kuraa *kuraa = TASK_DATA(gCurTask); + Sprite *s = &kuraa->shared.s; + MapEntity *me = kuraa->shared.base.me; + s16 worldX, worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(kuraa->shared.base.meX, kuraa->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, kuraa->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + kuraa->qUnk3C += kuraa->qUnk40; + + worldX = worldX + I(kuraa->qUnk3C); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, kuraa->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + // _08073704 + + if (I(kuraa->qUnk3C) <= me->d.sData[0] * TILE_WIDTH) { + kuraa->qUnk40 = +Q(0.25); + } else if (I(kuraa->qUnk3C) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + kuraa->qUnk40 = -Q(0.25); + } else if (kuraa->unk46 != 0) { + kuraa->unk46--; + } else { + kuraa->unk42 = 0; + kuraa->unk46 = 500; + + s->prevVariant = -1; + s->variant = 1; + + gCurTask->main = Task_80737A8; + } + + UpdateSpriteAnimation(s); + + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +// (97.49%) https://decomp.me/scratch/DL0Fb +NONMATCH("asm/non_matching/game/enemies/Kuraa__Task_80737A8.inc", void Task_80737A8(void)) +{ + Kuraa *kuraa = TASK_DATA(gCurTask); + Sprite *s = &kuraa->shared.s; + MapEntity *me = kuraa->shared.base.me; + s16 worldX, worldY; + +#ifndef NON_MATCHING + register s32 r9 asm("r9"); + register s32 sl asm("sl"); +#else + s32 r9; + s32 sl; +#endif + s16 offsetWorldX; + + worldX = TO_WORLD_POS(kuraa->shared.base.meX, kuraa->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, kuraa->shared.base.regionY); + + r9 = worldY; + sl = worldY; + + offsetWorldX = worldX + I(kuraa->qUnk3C); + + s->x = offsetWorldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, kuraa->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (s->hitboxes[0].index != HITBOX_STATE_INACTIVE) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + + if (++kuraa->unk42 >= 120) { + s->prevVariant = -1; + s->variant = 0; + + gCurTask->main = Task_KuraaInit; + } + + UpdateSpriteAnimation(s); + + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} +END_NONMATCH diff --git a/sa1/src/game/enemies/leon.c b/sa1/src/game/enemies/leon.c new file mode 100644 index 0000000000..87fb095469 --- /dev/null +++ b/sa1/src/game/enemies/leon.c @@ -0,0 +1,244 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/save.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s16 qUnk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ s16 unk4C; + /* 0x4E */ s16 unk4E; +} Leon; + +void Task_LeonInit(void); +void Task_806ED3C(void); +void Task_806EEA4(void); + +void CreateEntity_Leon(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if ((LEVEL_TO_ZONE(gCurrentLevel) != ZONE_5) || (LOADED_SAVE->difficultyLevel == DIFFICULTY_NORMAL)) { + // _0806E9C4 + + struct Task *t = TaskCreate(Task_LeonInit, sizeof(Leon), 0x2000, 0, TaskDestructor_EntityShared); + Leon *leon = TASK_DATA(t); + Sprite *s = &leon->shared.s; + + leon->shared.base.regionX = regionX; + leon->shared.base.regionY = regionY; + leon->shared.base.me = me; + leon->shared.base.meX = me->x; + leon->shared.base.id = id; + + leon->qUnk48 = -Q(0.625); + leon->qUnk44 = Q(0); + leon->unk4C = 0; + leon->unk4A = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_LEON); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_LEON; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} + +// (93.69%) https://decomp.me/scratch/u2nil +NONMATCH("asm/non_matching/game/enemies/Leon__Task_LeonInit.inc", void Task_LeonInit(void)) +{ + Leon *leon = TASK_DATA(gCurTask); + Sprite *s = &leon->shared.s; + MapEntity *me = leon->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp08; + + worldX = TO_WORLD_POS(leon->shared.base.meX, leon->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, leon->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + leon->qUnk44 += leon->qUnk48; + + worldX += I(leon->qUnk44); + worldY += leon->unk4C; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, leon->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + leon->unk4C += SA2_LABEL(sub_801F07C)(worldY + 3, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (I(leon->qUnk44) <= me->d.sData[0] * TILE_WIDTH) { + if (~s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + leon->qUnk48 = +Q(0.625); + leon->unk4A = 0; + s->variant = 2; + gCurTask->main = Task_806ED3C; + SPRITE_FLAG_SET(s, X_FLIP); + } + } else if (I(leon->qUnk44) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + leon->qUnk48 = -Q(0.625); + leon->unk4A = 0; + s->variant = 2; + SPRITE_FLAG_CLEAR(s, X_FLIP); + gCurTask->main = Task_806ED3C; + } + } else { + if (leon->unk4E == 0) { + if ((I(gPlayer.qWorldY) <= worldY + 8) && (worldY - 32 <= I(gPlayer.qWorldY))) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if (I(gPlayer.qWorldX) >= worldX && (worldX + 80 >= I(gPlayer.qWorldX))) { + leon->unk4E = 60; + leon->unk4A = 0; + s->variant = 1; + gCurTask->main = Task_806EEA4; + } + } else { + if ((I(gPlayer.qWorldX) <= worldX) && (worldX - 80 <= I(gPlayer.qWorldX))) { + leon->unk4E = 60; + leon->unk4A = 0; + s->variant = 1; + gCurTask->main = Task_806EEA4; + } + } + } + } else { + leon->unk4C--; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void Task_806ED3C(void) +{ + Leon *leon = TASK_DATA(gCurTask); + Sprite *s = &leon->shared.s; + MapEntity *me = leon->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp08; + + worldX = TO_WORLD_POS(leon->shared.base.meX, leon->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, leon->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX = worldX2 + I(leon->qUnk44); + worldY = worldY2 + leon->unk4C; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, leon->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + leon->unk4C += SA2_LABEL(sub_801F07C)(worldY + 3, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (++leon->unk4A == 14) { + s->variant = 0; + gCurTask->main = Task_LeonInit; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_806EEA4(void) +{ + Leon *leon = TASK_DATA(gCurTask); + Sprite *s = &leon->shared.s; + MapEntity *me = leon->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp08; + + worldX = TO_WORLD_POS(leon->shared.base.meX, leon->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, leon->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX += I(leon->qUnk44); + worldY += leon->unk4C; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, leon->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (HITBOX_IS_ACTIVE(s->hitboxes[1])) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + + leon->unk4C += SA2_LABEL(sub_801F07C)(worldY + 3, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (++leon->unk4A == 31) { + s->variant = 0; + gCurTask->main = Task_LeonInit; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/mirror.c b/sa1/src/game/enemies/mirror.c new file mode 100644 index 0000000000..f8fb77bc17 --- /dev/null +++ b/sa1/src/game/enemies/mirror.c @@ -0,0 +1,256 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef enum { + DIR_LEFT = 0, + DIR_RIGHT = 1, +} MirrorDir; + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s16 qUnk40; + /* 0x42 */ s16 frames; + /* 0x44 */ u16 unk44; + /* 0x46 */ s16 unk46; +} Mirror; /* 0x48 */ + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s32 qWorldX; + /* 0x34 */ s16 qSpeed; +} MirrorProjectile; /* 0x48 */ + +void Task_Mirror(void); +void Task_MirrorShoot(void); + +void CreateMirrorProjectile(CamCoord worldX, CamCoord worldY, u8); +void Task_MirrorProjectile(void); + +#define PROJ_SPEED Q(2) + +void CreateEntity_Mirror(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if ((LEVEL_TO_ZONE(gCurrentLevel) != ZONE_6) || (LOADED_SAVE->difficultyLevel == DIFFICULTY_NORMAL)) { + struct Task *t = TaskCreate(Task_Mirror, sizeof(Mirror), 0x2000, 0, TaskDestructor_EntityShared); + Mirror *mirror = TASK_DATA(t); + Sprite *s = &mirror->shared.s; + + mirror->shared.base.regionX = regionX; + mirror->shared.base.regionY = regionY; + + mirror->shared.base.me = me; + mirror->shared.base.meX = me->x; + mirror->shared.base.id = id; + + mirror->qUnk40 = -Q(0.625); + mirror->qUnk3C = Q(0); + mirror->unk44 = 0; + mirror->frames = 0; + mirror->unk46 = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_MIRROR); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MIRROR; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} + +void Task_Mirror(void) +{ + Mirror *mirror = TASK_DATA(gCurTask); + Sprite *s = &mirror->shared.s; + MapEntity *me = mirror->shared.base.me; + s32 prevWorldX, prevWorldY; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(mirror->shared.base.meX, mirror->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, mirror->shared.base.regionY); + + prevWorldX = worldX; + prevWorldY = worldY; + + mirror->qUnk3C += mirror->qUnk40; + + worldX += I(mirror->qUnk3C); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(prevWorldX, prevWorldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, mirror->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (s->hitboxes[0].index != HITBOX_STATE_INACTIVE) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + + if (I(mirror->qUnk3C) <= me->d.sData[0] * TILE_WIDTH) { + mirror->qUnk40 = +Q(0.625); + } else if (I(mirror->qUnk3C) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + mirror->qUnk40 = -Q(0.625); + } else if (mirror->unk46 != 0) { + mirror->unk46--; + } else { + if (I(gPlayer.qWorldX) > worldX) { + SPRITE_FLAG_SET(s, X_FLIP); + } else { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } + + mirror->unk46 = 90; + mirror->frames = 0; + s->variant = 1; + gCurTask->main = Task_MirrorShoot; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_MirrorShoot(void) +{ + Mirror *mirror = TASK_DATA(gCurTask); + Sprite *s = &mirror->shared.s; + MapEntity *me = mirror->shared.base.me; + s32 prevWorldX, prevWorldY; + s16 screenX, screenY; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(mirror->shared.base.meX, mirror->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, mirror->shared.base.regionY); + + prevWorldX = worldX; + prevWorldY = worldY; + + screenX = s->x; + screenY = s->y; + + worldX += I(mirror->qUnk3C); + s->x = (worldX)-gCamera.x; + s->y = (prevWorldY)-gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(prevWorldX, prevWorldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, mirror->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY) != 0) { + TaskDestroy(gCurTask); + return; + } + + if (++mirror->frames == 20) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + CreateMirrorProjectile(worldX + 8, worldY - 16, DIR_RIGHT); + } else { + CreateMirrorProjectile(worldX - 8, worldY - 16, DIR_LEFT); + } + } + + if (mirror->frames == TIME(0, 1)) { + s->variant = 0; + gCurTask->main = Task_Mirror; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateMirrorProjectile(CamCoord worldX, CamCoord worldY, u8 dir) +{ + struct Task *t = TaskCreate(Task_MirrorProjectile, sizeof(MirrorProjectile), 0x3000, 0, NULL); + MirrorProjectile *proj = TASK_DATA(t); + Sprite *s = &proj->s; + + if (dir != DIR_LEFT) { + s->x = worldX; + proj->qSpeed = +PROJ_SPEED; + } else { + s->x = worldX; + proj->qSpeed = -PROJ_SPEED; + } + + proj->qWorldX = Q(worldX); + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_MIRROR_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MIRROR_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + + UpdateSpriteAnimation(s); +} + +void Task_MirrorProjectile(void) +{ + MirrorProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 oldWorldX, oldWorldY; + s16 screenX, screenY; + s32 worldX; + + proj->qWorldX += proj->qSpeed; + + s->x = I(proj->qWorldX); + + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY; +} diff --git a/sa1/src/game/enemies/mole.c b/sa1/src/game/enemies/mole.c new file mode 100644 index 0000000000..fa47833cb1 --- /dev/null +++ b/sa1/src/game/enemies/mole.c @@ -0,0 +1,158 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s16 frames; + /* 0x3E */ u8 unk3E; +} Mole; + +void Task_Mole(void); +void Task_Mole_8071640(void); +void Task_Mole2(void); + +void CreateEntity_Mole(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + Mole *mole; + Sprite *s; + + if (me->d.sData[1] != 0) { + t = TaskCreate(Task_Mole, sizeof(Mole), 0x2000, 0, TaskDestructor_EntityShared); + } else { + t = TaskCreate(Task_Mole2, sizeof(Mole), 0x2000, 0, TaskDestructor_EntityShared); + } + + mole = TASK_DATA(t); + s = &mole->shared.s; + + mole->shared.base.regionX = regionX; + mole->shared.base.regionY = regionY; + mole->shared.base.me = me; + mole->shared.base.meX = me->x; + mole->shared.base.id = id; + mole->frames = 0; + mole->unk3E = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_MOLE); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MOLE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_Mole(void) +{ + Mole *mole = TASK_DATA(gCurTask); + Sprite *s = &mole->shared.s; + MapEntity *me = mole->shared.base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(mole->shared.base.meX, mole->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, mole->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, mole->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (++mole->frames >= TIME(0, 1)) { + mole->frames = 0; + s->variant = 1; + + if (worldX > I(gPlayer.qWorldX)) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } else { + SPRITE_FLAG_SET(s, X_FLIP); + } + + gCurTask->main = Task_Mole_8071640; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_Mole_8071640(void) +{ + Mole *mole = TASK_DATA(gCurTask); + Sprite *s = &mole->shared.s; + MapEntity *me = mole->shared.base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(mole->shared.base.meX, mole->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, mole->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, mole->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (++mole->frames >= TIME(0, 1)) { + mole->frames = 0; + s->variant = 0; + gCurTask->main = Task_Mole; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY) != 0) { + s->variant = 0; + me->d.sData[1] = 0; + gCurTask->main = Task_Mole2; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_Mole2(void) +{ + Mole *mole = TASK_DATA(gCurTask); + Sprite *s = &mole->shared.s; + MapEntity *me = mole->shared.base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(mole->shared.base.meX, mole->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, mole->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, mole->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} diff --git a/sa1/src/game/enemies/oct.c b/sa1/src/game/enemies/oct.c new file mode 100644 index 0000000000..343f1b16bf --- /dev/null +++ b/sa1/src/game/enemies/oct.c @@ -0,0 +1,356 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s16 qUnk40; + /* 0x42 */ s16 unk42; + /* 0x44 */ s16 unk44; + /* 0x46 */ bool8 unk46; +} Oct; + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s32 qUnk30; + /* 0x34 */ s32 qUnk34; + /* 0x38 */ u8 filler38[2]; + /* 0x3A */ s16 qSpeedY; +} OctProjectile; + +void Task_OctInit(void); +void Task_OctInit(void); +void sub_807033C(void); +void sub_807051C(void); +void sub_80706F0(void); +void CreateOctProjectile(CamCoord worldX, CamCoord worldY); +void Task_OctProjectile(void); + +void CreateEntity_Oct(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_OctInit, sizeof(Oct), 0x2000, 0, TaskDestructor_EntityShared); + Oct *oct = TASK_DATA(t); + Sprite *s = &oct->shared.s; + + oct->shared.base.regionX = regionX; + oct->shared.base.regionY = regionY; + oct->shared.base.me = me; + oct->shared.base.meX = me->x; + oct->shared.base.id = id; + + oct->qUnk40 = -Q(0.75); + oct->qUnk3C = 0; + oct->unk42 = 0; + oct->unk44 = 0; + oct->unk46 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_OCT); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_OCT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_OctInit(void) +{ + Oct *oct = TASK_DATA(gCurTask); + Sprite *s = &oct->shared.s; + MapEntity *me = oct->shared.base.me; + s16 worldX, worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(oct->shared.base.meX, oct->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, oct->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, oct->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + // _08073704 + + if ((worldX - 120 < I(gPlayer.qWorldX)) && (worldX + 120 > I(gPlayer.qWorldX))) { + s->variant = 0; + + gCurTask->main = sub_807033C; + } + + UpdateSpriteAnimation(s); + + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +void sub_807033C(void) +{ + Oct *oct = TASK_DATA(gCurTask); + Sprite *s = &oct->shared.s; + MapEntity *me = oct->shared.base.me; + s16 worldX, worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(oct->shared.base.meX, oct->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, oct->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + oct->qUnk3C += oct->qUnk40; + + worldX += I(oct->qUnk3C); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, oct->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (I(oct->qUnk3C) <= (me->d.sData[0]) * TILE_WIDTH) { + if (oct->unk46 == FALSE) { + oct->unk46 = TRUE; + oct->qUnk40 = +Q(0.75); + oct->unk42 = 0; + gCurTask->main = sub_807051C; + } + } else if (I(oct->qUnk3C) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + if (oct->unk46 == FALSE) { + oct->unk46 = TRUE; + oct->qUnk40 = -Q(0.75); + oct->unk42 = 0; + gCurTask->main = sub_807051C; + } + } else { + oct->unk46 = FALSE; + + if (oct->unk44 != 0) { + oct->unk44--; + } else { + oct->unk44 = 60; + oct->unk42 = 0; + s->variant = 1; + gCurTask->main = sub_80706F0; + } + } + + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +void sub_807051C(void) +{ + Oct *oct = TASK_DATA(gCurTask); + Sprite *s = &oct->shared.s; + MapEntity *me = oct->shared.base.me; + s16 worldX, worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(oct->shared.base.meX, oct->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, oct->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + if (oct->qUnk40 < 0) { + oct->qUnk3C += Div(SIN((Div(0x400, 30) * oct->unk42)), 55); + } else { + oct->qUnk3C -= Div(SIN((Div(0x400, 30) * oct->unk42)), 55); + } + + worldX += I(oct->qUnk3C); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, oct->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (++oct->unk42 >= 30) { + s->prevVariant = -1; + s->graphics.anim = 433; + s->variant = 0; + gCurTask->main = sub_807033C; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +void sub_80706F0(void) +{ + Oct *oct = TASK_DATA(gCurTask); + Sprite *s = &oct->shared.s; + MapEntity *me = oct->shared.base.me; + s16 worldX, worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(oct->shared.base.meX, oct->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, oct->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX += I(oct->qUnk3C); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, oct->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (++oct->unk42 == 20) { + CreateOctProjectile(worldX, worldY - 2); + } + if (oct->unk42 == 26) { + s->prevVariant = -1; + s->graphics.anim = 433; + s->variant = 0; + gCurTask->main = sub_807033C; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +void CreateOctProjectile(CamCoord worldX, CamCoord worldY) +{ + struct Task *t = TaskCreate(Task_OctProjectile, sizeof(OctProjectile), 0x3000, 0, NULL); + OctProjectile *proj = TASK_DATA(t); + Sprite *s = &proj->s; + + proj->qUnk30 = Q(worldX); + proj->qUnk34 = Q(worldY); + proj->qSpeedY = Q(2); + + // NOTE: x|y set to world- not screen-pos! + s->x = worldX; + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_OCT_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_OCT_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_OctProjectile(void) +{ + OctProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + CamCoord oldWorldX, oldWorldY; + u32 unk36; + + s->x = I(proj->qUnk30); + proj->qUnk34 += proj->qSpeedY; + + s->y = I(proj->qUnk34); + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + s->x -= gCamera.x; + s->y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY; +} diff --git a/sa1/src/game/enemies/pen_mk1.c b/sa1/src/game/enemies/pen_mk1.c new file mode 100644 index 0000000000..9471e16be1 --- /dev/null +++ b/sa1/src/game/enemies/pen_mk1.c @@ -0,0 +1,489 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +// NOTE: Not the same jet-powered Pen enemy as in SA2. +// This one shoots ice balls that slide on the ground. + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s16 qUnk30; + /* 0x32 */ s16 qUnk32; + /* 0x34 */ s32 qUnk34; + /* 0x38 */ s32 qUnk38; + /* 0x3C */ s32 qWorldX; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s32 qWorldY; + /* 0x48 */ u16 unk48; + /* 0x4A */ u8 unk4A; + /* 0x4B */ bool8 unk4B; +} PenMk1Debris; + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s16 qUnk30; + /* 0x32 */ s16 qUnk32; + /* 0x34 */ s32 qUnk34; + /* 0x38 */ s32 qUnk38; + /* 0x3C */ s32 unk3C; + /* 0x40 */ s32 unused40; + /* 0x44 */ s32 unk44; + /* 0x48 */ u16 unk48; + /* 0x4A */ u8 unk4A; + /* 0x4B */ bool8 unk4B; +} PenMk1Snowball; + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s16 qUnk44; + /* 0x46 */ s16 unk46; + /* 0x48 */ s16 unk48; +} PenMk1; + +void Task_PenMk1Main(void); +void Task_8073CC4(void); +void CreatePenMk1Snowball(CamCoord worldX, CamCoord worldY, u8 dir); +void Task_PenMk1Snowball(void); +void CreatePenMk1SnowballDebris(CamCoord worldX, CamCoord worldY); +void Task_SnowballDebris(void); + +void CreateEntity_PenMk1(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if (LEVEL_TO_ZONE(gCurrentLevel) != ZONE_4 || (LOADED_SAVE->difficultyLevel == DIFFICULTY_NORMAL)) { + struct Task *t = TaskCreate(Task_PenMk1Main, sizeof(PenMk1), 0x2000, 0, TaskDestructor_EntityShared); + PenMk1 *pen = TASK_DATA(t); + Sprite *s = &pen->shared.s; + + pen->shared.base.regionX = regionX; + pen->shared.base.regionY = regionY; + pen->shared.base.me = me; + pen->shared.base.meX = me->x; + pen->shared.base.id = id; + + pen->qUnk44 = -Q(0.625); + pen->qUnk3C = 0; + pen->unk40 = 0; + pen->unk46 = 0; + pen->unk48 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PEN); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PEN; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} + +void Task_PenMk1Main(void) +{ + PenMk1 *pen = TASK_DATA(gCurTask); + Sprite *s = &pen->shared.s; + MapEntity *me = pen->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + s32 xSquared, ySquared; + + worldX = TO_WORLD_POS(pen->shared.base.meX, pen->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, pen->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + pen->qUnk3C += pen->qUnk44; + + worldX += I(pen->qUnk3C); + worldY += pen->unk40; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pen->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + pen->unk40 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, NULL, SA2_LABEL(sub_801EE64)); + + xSquared = I(gPlayer.qWorldX) - worldX; + xSquared = xSquared * xSquared; + ySquared = I(gPlayer.qWorldY) - worldY; + ySquared = ySquared * ySquared; + + if (I(pen->qUnk3C) <= (me->d.sData[0] + 1) * TILE_WIDTH) { + if (~s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + SPRITE_FLAG_SET(s, X_FLIP); + pen->qUnk44 = +Q(0.625); + } + } else if (I(pen->qUnk3C) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + pen->qUnk44 = -Q(0.625); + } + } else if (pen->unk48 != 0) { + pen->unk48--; + } else { + if (xSquared + ySquared < SQUARE(80)) { + pen->unk46 = 0; + pen->unk48 = 60; + s->variant = 1; + s->prevVariant = -1; + gCurTask->main = Task_8073CC4; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8073CC4(void) +{ + PenMk1 *pen = TASK_DATA(gCurTask); + Sprite *s = &pen->shared.s; + MapEntity *me = pen->shared.base.me; + CamCoord worldY, worldX; + s32 worldX2, worldY2; + u8 sp08; + + worldX = TO_WORLD_POS(pen->shared.base.meX, pen->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, pen->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX += I(pen->qUnk3C); + worldY += pen->unk40; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + pen->unk40 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + pen->unk46++; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pen->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (pen->unk46 == 13) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + CreatePenMk1Snowball(worldX + 4, worldY, 1); + } else { + CreatePenMk1Snowball(worldX - 6, worldY, 0); + } + } + + pen->unk40 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (pen->unk46 > 16) { + pen->unk46 = 0; + s->prevVariant = -1; + s->variant = 0; + gCurTask->main = Task_PenMk1Main; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreatePenMk1Snowball(CamCoord worldX, CamCoord worldY, u8 dir) +{ + struct Task *t = TaskCreate(Task_PenMk1Snowball, sizeof(PenMk1Snowball), 0x3000, 0, NULL); + PenMk1Snowball *proj = TASK_DATA(t); + Sprite *s = &proj->s; + u8 sp08; + + proj->unk4A = 0; + + if (dir != 0) { + proj->qUnk30 = +Q(2); + } else { + proj->qUnk30 = -Q(2); + } + + proj->qUnk32 = 0; + proj->qUnk34 = 0; + proj->qUnk38 = 0; + proj->unk3C = worldX; + proj->unk44 = worldY; + + proj->unk4B = 0; + proj->unk48 = 800; + + // TODO: It doesn't make sense for proj->qUnk38 to be a Q() value, as result of sub_801F07C! + proj->qUnk38 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + // NOTE: x|y set to world- not screen-pos! + s->x = worldX; + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_PEN_MK1_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PEN_PROJ_2; // main image + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +NONMATCH("asm/non_matching/game/enemies/Pen__Task_PenMk1Snowball.inc", void Task_PenMk1Snowball(void)) +{ + PenMk1Snowball *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + CamCoord oldWorldX, oldWorldY; + s16 divRes; + s32 res; + u8 sp08; + s32 divisor; + + if (proj->unk4B) { + proj->qUnk32 += Q(60. / 256.); + } + + proj->qUnk34 += proj->qUnk30; + proj->qUnk38 += proj->qUnk32; + + // World pos + s->x = proj->unk3C + I(proj->qUnk34); + s->y = proj->unk44 + I(proj->qUnk38); + + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + divRes = Div(SIN(proj->unk4A * 4), 1000); + + // Check for slopes (pn the right?). + if ((divRes < 0) && ((s32)(divRes + proj->qUnk30) > (u16)-2)) { + proj->qUnk30 = -1; // TODO: Q = -1? + } else { + proj->qUnk30 += Div(SIN((proj->unk4A * 4) & ONE_CYCLE), 1000); + } + // _08074048 + + proj->qUnk38 += Div(COS(proj->unk4A * 4), 1000); + + if (proj->unk48 != 0) { + proj->unk48--; + } + // _0807407E + + if (Coll_Player_Projectile(s, oldWorldX, oldWorldY) || (proj->unk48 == 0)) { + CreatePenMk1SnowballDebris(oldWorldX, oldWorldY); + + TaskDestroy(gCurTask); + return; + } + // _080740B0 + + // Screen pos + s->x -= gCamera.x; + s->y -= gCamera.y; + + res = SA2_LABEL(sub_801F07C)(oldWorldY, oldWorldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (res > 0) { + if (proj->unk4B == 0) { + proj->qUnk32 = 0; + } + + proj->unk4B = 1; + } else { + // _080740F8 + if (proj->unk4B != 0) { + proj->unk4A = 0; + + if (proj->qUnk32 > Q(4)) { + CreatePenMk1SnowballDebris(oldWorldX, oldWorldY); + + TaskDestroy(gCurTask); + return; + } + } + + if (res < 0) { + proj->unk4B = 0; + } + } + // _08074120 + + if (!proj->unk4B) { + s8 rot; + u8 urot; + + if (res < 0) { + proj->qUnk38 += Q(res); + proj->qUnk32 = 0; + } else { + // _08074138 + proj->qUnk32 += (res << 6); + } + // _08074144 + + rot = urot = proj->unk4A - sp08; + if (rot < 0) + urot = ABS(rot); + + if ((s8)urot >= Q(0.25)) { + CreatePenMk1SnowballDebris(oldWorldX, oldWorldY); + + TaskDestroy(gCurTask); + return; + } + + proj->unk4A = sp08; + } + // _08074174 + + if (res >= -5 && res <= 0) { + // TODO: Improve condition + if ((u8)(sp08 + 63) <= 28) { + CreatePenMk1SnowballDebris(oldWorldX, oldWorldY); + + TaskDestroy(gCurTask); + return; + } + + if ((u8)(sp08 + 93) <= 28) { + CreatePenMk1SnowballDebris(oldWorldX, oldWorldY); + + TaskDestroy(gCurTask); + return; + } + } else { + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (120 / 2)) > DISPLAY_WIDTH + 120) || (s->y + (120 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 140))) { + TaskDestroy(gCurTask); + return; + } + } + // _08074198 + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void CreatePenMk1SnowballDebris(CamCoord worldX, CamCoord worldY) +{ + struct Task *t = TaskCreate(Task_SnowballDebris, sizeof(PenMk1Debris), 0x3000, 0, NULL); + PenMk1Debris *proj = TASK_DATA(t); + Sprite *s = &proj->s; + + proj->qUnk30 = -Q(1); + proj->qUnk32 = -Q(3.75); + proj->qUnk34 = 0; + proj->qUnk38 = 0; + proj->qWorldX = Q(worldX); + proj->qUnk40 = proj->qWorldX; + proj->qWorldY = Q(worldY); + proj->unk4B = 0; + + proj->qUnk38 += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, NULL, SA2_LABEL(sub_801EE64)); + + // World pos + s->x = worldX; + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_PEN_MK1_PROJ3; + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PEN_PROJ_3; // debris + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_SnowballDebris(void) +{ + PenMk1Debris *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + + // World pos + proj->qWorldX += proj->qUnk30; + proj->qUnk40 -= proj->qUnk30; + s->x = I(proj->qWorldX); + + proj->qUnk32 += Q(60. / 256.); + proj->qWorldY += proj->qUnk32; + s->y = I(proj->qWorldY); + + // Screen pos +#ifndef NON_MATCHING + { + // This is so stupid... but it matches! + u16 screenX = s->x; + s->x = screenX - gCamera.x; + s->y -= gCamera.y; + } +#else + s->x -= gCamera.x; + s->y -= gCamera.y; +#endif + + if (s->y > DISPLAY_HEIGHT + 80) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = I(proj->qUnk40) - gCamera.x; + DisplaySprite(s); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/pierrot.c b/sa1/src/game/enemies/pierrot.c new file mode 100644 index 0000000000..ebe39e0eb2 --- /dev/null +++ b/sa1/src/game/enemies/pierrot.c @@ -0,0 +1,151 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/move_states.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ Hitbox ball; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s16 qUnk48; + /* 0x4A */ s16 unk4A; +} Pierrot; + +void Task_Pierrot(void); + +void CreateEntity_Pierrot(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + Pierrot *pierrot; + Sprite *s; + + t = TaskCreate(Task_Pierrot, sizeof(Pierrot), 0x2000, 0, TaskDestructor_EntityShared); + + pierrot = TASK_DATA(t); + s = &pierrot->shared.s; + + pierrot->shared.base.regionX = regionX; + pierrot->shared.base.regionY = regionY; + pierrot->shared.base.me = me; + pierrot->shared.base.meX = me->x; + pierrot->shared.base.id = id; + pierrot->qUnk48 = -Q(0.625); + pierrot->qUnk44 = 0; + pierrot->unk4A = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PIERROT); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PIERROT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +// (96.18%) https://decomp.me/scratch/pMzfF +NONMATCH("asm/non_matching/game/enemies/Task_Pierrot.inc", void Task_Pierrot(void)) +{ + Pierrot *pierrot = TASK_DATA(gCurTask); + Sprite *s = &pierrot->shared.s; + MapEntity *me = pierrot->shared.base.me; + s32 worldX32, worldY32; + s16 worldX, worldY; + u8 sp08[4]; + + worldX32 = TO_WORLD_POS(pierrot->shared.base.meX, pierrot->shared.base.regionX); + worldY32 = TO_WORLD_POS(me->y, pierrot->shared.base.regionY); + + worldX = worldX32; + worldY = worldY32; + + pierrot->qUnk44 += pierrot->qUnk48; + worldX += I(pierrot->qUnk44); + worldY += pierrot->unk4A; + worldY -= Q(0.1875); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pierrot->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + // _0806DE7C + + if (PLAYER_IS_ALIVE) { + if (s->hitboxes[1].index != HITBOX_STATE_INACTIVE) { + // _0806DEA0 + if (HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + if (gPlayer.moveState & MOVESTATE_4) { + if (gPlayer.moveState & MOVESTATE_FACING_LEFT) { + if (gPlayer.qSpeedGround > 0) { + gPlayer.qWorldX += gPlayer.qSpeedGround; + } else { + gPlayer.qWorldX -= gPlayer.qSpeedGround; + } + + gPlayer.moveState &= ~MOVESTATE_FACING_LEFT; + } else { + // _0806DF7C + if (gPlayer.qSpeedGround < 0) { + gPlayer.qWorldX += gPlayer.qSpeedGround; + } else { + gPlayer.qWorldX -= gPlayer.qSpeedGround; + } + + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + } + + NEGATE(gPlayer.qSpeedGround); + NEGATE(gPlayer.qSpeedAirX); + } else { + // _0806DFB0 + Coll_DamagePlayer(&gPlayer); + } + } + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } + } + // _0806DFB6 + + pierrot->unk4A += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, 8, sp08, SA2_LABEL(sub_801EE64)); + + if (I(pierrot->qUnk44) <= me->d.sData[0] * TILE_WIDTH) { + pierrot->qUnk48 = +Q(0.625); + SPRITE_FLAG_SET(s, X_FLIP); + } else if (I(pierrot->qUnk44) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + // _0806E024 + pierrot->qUnk48 = -Q(0.625); + SPRITE_FLAG_CLEAR(s, X_FLIP); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH diff --git a/sa1/src/game/enemies/rhinotank.c b/sa1/src/game/enemies/rhinotank.c new file mode 100644 index 0000000000..f2829e0479 --- /dev/null +++ b/sa1/src/game/enemies/rhinotank.c @@ -0,0 +1,270 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s16 unk3C; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s16 unk44; + /* 0x46 */ s16 qSpeedX; + /* 0x48 */ bool8 doTackle; + /* 0x49 */ u8 unk49; +} Rhinotank; + +void Task_RhinotankInit(void); +void Task_806CBD0(void); +void Task_806C9A0(void); + +void CreateEntity_Rhinotank(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_RhinotankInit, sizeof(Rhinotank), 0x2000, 0, TaskDestructor_EntityShared); + Rhinotank *rhinotank = TASK_DATA(t); + Sprite *s = &rhinotank->shared.s; + + rhinotank->shared.base.regionX = regionX; + rhinotank->shared.base.regionY = regionY; + rhinotank->shared.base.me = me; + rhinotank->shared.base.meX = me->x; + rhinotank->shared.base.id = id; + + rhinotank->qSpeedX = -Q(0.625); + rhinotank->qUnk40 = 0; + rhinotank->unk3C = Q(0); + rhinotank->unk44 = 0; + rhinotank->doTackle = FALSE; + rhinotank->unk49 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_RHINOTANK); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_RHINOTANK; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_RhinotankInit(void) +{ + Rhinotank *rhinotank = TASK_DATA(gCurTask); + Sprite *s = &rhinotank->shared.s; + MapEntity *me = rhinotank->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp08; + + worldX = TO_WORLD_POS(rhinotank->shared.base.meX, rhinotank->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, rhinotank->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + rhinotank->qUnk40 += rhinotank->qSpeedX; + + if (rhinotank->unk49 > 0) { + rhinotank->unk49--; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + rhinotank->qUnk40 += rhinotank->unk49 * 13; + } else { + rhinotank->qUnk40 -= rhinotank->unk49 * 13; + } + } + + worldX += Div(rhinotank->qUnk40, 0x100); + worldY += rhinotank->unk3C; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, rhinotank->shared.base.meX); + TaskDestroy(gCurTask); + return; + } else if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } else { + rhinotank->unk3C += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (I(rhinotank->qUnk40) <= (me->d.sData[0] + 1) * TILE_WIDTH) { + if (~s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if (rhinotank->doTackle) { + rhinotank->qUnk40 += Q(3); + } + + rhinotank->unk44 = 0; + rhinotank->qSpeedX = +Q(0.625); + s->variant = 2; + gCurTask->main = Task_806C9A0; + } + } else if (I(rhinotank->qUnk40) >= ((me->d.sData[0] + me->d.uData[2]) - 1) * TILE_WIDTH) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if (rhinotank->doTackle) { + rhinotank->qUnk40 -= Q(3); + } + + rhinotank->unk44 = 0; + rhinotank->qSpeedX = -Q(0.625); + s->variant = 2; + gCurTask->main = Task_806C9A0; + } + } else if (!rhinotank->doTackle && I(gPlayer.qWorldY) <= (worldY + 8) && (worldY - 32 <= I(gPlayer.qWorldY))) { + // Rev-up and tackle player + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if ((I(gPlayer.qWorldX) >= worldX) && (worldX + 80 >= I(gPlayer.qWorldX))) { + rhinotank->doTackle = TRUE; + rhinotank->unk44 = 0; + rhinotank->qSpeedX = +Q(3); + s->variant = 1; + gCurTask->main = Task_806CBD0; + } + } else { + if ((I(gPlayer.qWorldX) <= worldX) && (worldX - 80 <= I(gPlayer.qWorldX))) { + rhinotank->doTackle = TRUE; + rhinotank->unk44 = 0; + rhinotank->qSpeedX = -Q(3); + s->variant = 1; + gCurTask->main = Task_806CBD0; + } + } + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_806C9A0(void) +{ + Rhinotank *rhinotank = TASK_DATA(gCurTask); + Sprite *s = &rhinotank->shared.s; + MapEntity *me = rhinotank->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp08; + + worldX = TO_WORLD_POS(rhinotank->shared.base.meX, rhinotank->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, rhinotank->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX = worldX2 + I(rhinotank->qUnk40); + worldY = worldY2 + rhinotank->unk3C; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, rhinotank->shared.base.meX); + TaskDestroy(gCurTask); + return; + } else if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } else { + s32 divisor; + rhinotank->unk3C += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (rhinotank->doTackle) { + divisor = 32; + } else { + divisor = 64; + } + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + rhinotank->qUnk40 += Div(COS(rhinotank->unk44 * 21), divisor); + } else { + rhinotank->qUnk40 -= Div(COS(rhinotank->unk44 * 21), divisor); + } + + if (++rhinotank->unk44 == 24) { + s->variant = 0; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + rhinotank->qUnk40 += rhinotank->qSpeedX; + rhinotank->qSpeedX = -Q(0.625); + SPRITE_FLAG_CLEAR(s, X_FLIP); + } else { + rhinotank->qUnk40 += rhinotank->qSpeedX; + rhinotank->qSpeedX = +Q(0.625); + SPRITE_FLAG_SET(s, X_FLIP); + } + + if (rhinotank->doTackle) { + rhinotank->unk49 = 0; + } + + rhinotank->doTackle = FALSE; + gCurTask->main = Task_RhinotankInit; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_806CBD0(void) +{ + Rhinotank *rhinotank = TASK_DATA(gCurTask); + Sprite *s = &rhinotank->shared.s; + MapEntity *me = rhinotank->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + u8 sp08; + + worldX = TO_WORLD_POS(rhinotank->shared.base.meX, rhinotank->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, rhinotank->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX = worldX2 + I(rhinotank->qUnk40); + worldY = worldY2 + rhinotank->unk3C; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, rhinotank->shared.base.meX); + TaskDestroy(gCurTask); + return; + } else if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + TaskDestroy(gCurTask); + return; + } else { + u32 divisor; + rhinotank->unk3C += SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (++rhinotank->unk44 == 25) { + s->variant = 0; + gCurTask->main = Task_RhinotankInit; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/senbon.c b/sa1/src/game/enemies/senbon.c new file mode 100644 index 0000000000..152283ac65 --- /dev/null +++ b/sa1/src/game/enemies/senbon.c @@ -0,0 +1,178 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/save.h" +#include "game/sa1_sa2_shared/entities_manager.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ EntityShared shared; + /* 0x3C */ s16 unk3C; + /* 0x3E */ s16 unk3E; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s16 unk44; + /* 0x46 */ s16 unk46; + /* 0x48 */ s16 qUnk48; +} Senbon; /* 0x4C */ + +void Task_SenbonInit(void); +void Task_8070CB4(void); + +void CreateEntity_Senbon(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + Senbon *senbon; + Sprite *s; + + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_2) // + && (LOADED_SAVE->difficultyLevel != DIFFICULTY_NORMAL)) { + return; + } + + t = TaskCreate(Task_SenbonInit, sizeof(Senbon), 0x2000, 0, TaskDestructor_EntityShared); + senbon = TASK_DATA(t); + s = &senbon->shared.s; + + senbon->shared.base.regionX = regionX; + senbon->shared.base.regionY = regionY; + senbon->shared.base.me = me; + senbon->shared.base.meX = me->x; + senbon->shared.base.id = id; + + senbon->qUnk48 = -Q(0.625); + senbon->qUnk40 = 0; + senbon->unk3C = 0; + senbon->unk44 = 0; + senbon->unk46 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SENBON); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SENBON; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +// (93.28%) https://decomp.me/scratch/MhFur +NONMATCH("asm/non_matching/game/enemies/Senbon__Task_SenbonInit.inc", void Task_SenbonInit(void)) +{ + Senbon *senbon = TASK_DATA(gCurTask); + Sprite *s = &senbon->shared.s; + MapEntity *me = senbon->shared.base.me; + s16 worldX, worldY; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(senbon->shared.base.meX, senbon->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, senbon->shared.base.regionY); + + senbon->qUnk40 += senbon->qUnk48; + offsetWorldX = worldX + I(senbon->qUnk40); + + s->x = offsetWorldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, senbon->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, offsetWorldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (I(senbon->qUnk40) <= ((me->d.sData[0] + 1) * TILE_WIDTH)) { + senbon->qUnk48 = +Q(0.625); // TODO: DISPLAY_HEIGHT? + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } else if (I(senbon->qUnk40) >= ((me->d.sData[0] + me->d.uData[2] - 1) * TILE_WIDTH)) { + senbon->qUnk48 = -Q(0.625); // TODO: DISPLAY_HEIGHT? + s->frameFlags &= ~SPRITE_FLAG(X_FLIP, 1); + } else if (senbon->unk46 != 0) { + senbon->unk46--; + } else { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if ((I(gPlayer.qWorldX) >= offsetWorldX) // + && ((offsetWorldX + 80) >= I(gPlayer.qWorldX))) { + senbon->unk44 = 0; + + s->variant = 1; + gCurTask->main = Task_8070CB4; + } + } else { + if ((I(gPlayer.qWorldX) <= offsetWorldX) // + && ((offsetWorldX - 80) <= I(gPlayer.qWorldX))) { + senbon->unk44 = 0; + + s->variant = 1; + gCurTask->main = Task_8070CB4; + } + } + } + // _08070C8C + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void Task_8070CB4(void) +{ + MapEntity *me; + Sprite *s; + s16 screenX, screenY; + s32 worldX, worldY; + s32 worldX32, worldY32; + + Senbon *senbon = TASK_DATA(gCurTask); + + s = &senbon->shared.s; + me = senbon->shared.base.me; + worldX32 = TO_WORLD_POS(senbon->shared.base.meX, senbon->shared.base.regionX); + worldY32 = TO_WORLD_POS(me->y, senbon->shared.base.regionY); + worldX = (CamCoord)worldX32; + worldY = (CamCoord)worldY32; + screenX = worldX + I(senbon->qUnk40); + screenY = worldY + (senbon->unk3C & 0xFFFF); + s->x = screenX - gCamera.x; + s->y = screenY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, senbon->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (s->hitboxes[0].index != -1) { + if (HB_COLLISION(screenX, screenY, s->hitboxes[0].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + + if (++senbon->unk44 >= 60) { + senbon->unk46 = 120; + s->variant = 0; + gCurTask->main = Task_SenbonInit; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} diff --git a/sa1/src/game/enemies/slot.c b/sa1/src/game/enemies/slot.c new file mode 100644 index 0000000000..a8695f060f --- /dev/null +++ b/sa1/src/game/enemies/slot.c @@ -0,0 +1,360 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s16 unk30; + /* 0x32 */ u16 unk32; + /* 0x34 */ s32 qUnk34[6]; + /* 0x4C */ s16 qUnk4C[6]; + /* 0x58 */ s16 unk58[6]; + /* 0x64 */ s16 unk64[6]; + /* 0x70 */ s32 unk70[6]; + /* 0x88 */ u8 unk88[6]; +} SlotProjectile; + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s16 qUnk3C; + /* 0x3E */ s16 qUnk3E; + /* 0x40 */ s16 unk40; + /* 0x42 */ s16 unk42; + /* 0x44 */ u16 unk44; + /* 0x46 */ s16 unk46; +} Slot; + +void Task_SlotInit(void); +void sub_806E374(void); +void CreateSlotProjectile(s16 worldX, s16 worldY); +void Task_SlotProjectileMain(void); +void sub_806E7E0(void); + +void CreateEntity_Slot(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if ((LEVEL_TO_ZONE(gCurrentLevel) != ZONE_3) || (LOADED_SAVE->difficultyLevel == DIFFICULTY_NORMAL)) { + struct Task *t = TaskCreate(Task_SlotInit, sizeof(Slot), 0x2000, 0, TaskDestructor_EntityShared); + Slot *slot = TASK_DATA(t); + Sprite *s = &slot->shared.s; + + slot->shared.base.regionX = regionX; + slot->shared.base.regionY = regionY; + slot->shared.base.me = me; + slot->shared.base.meX = me->x; + slot->shared.base.id = id; + + slot->qUnk3E = -Q(0.625); + slot->qUnk3C = Q(0); + slot->unk44 = 0; + slot->unk40 = 0; + slot->unk42 = 0; + slot->unk46 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SLOT); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SLOT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} + +void Task_SlotInit(void) +{ + Slot *slot = TASK_DATA(gCurTask); + Sprite *s = &slot->shared.s; + MapEntity *me = slot->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(slot->shared.base.meX, slot->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, slot->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + slot->unk46 = ((slot->unk46 + 1) & 0x1F); + slot->unk44 = Div(SIN(slot->unk46 * 16), 800); + slot->qUnk3C += slot->qUnk3E; + + worldX = worldX2 + I(slot->qUnk3C); + worldY = worldY2 - slot->unk44; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, slot->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (I(slot->qUnk3C) <= (me->d.sData[0]) * TILE_WIDTH) { + slot->qUnk3E = +Q(0.625); + } else if (I(slot->qUnk3C) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + slot->qUnk3E = -Q(0.625); + } else if (slot->unk42 != 0) { + slot->unk42--; + } else { + if ((I(gPlayer.qWorldX) <= worldX + 16) && (I(gPlayer.qWorldX) >= worldX - 16)) { + slot->unk42 = 100; + s->variant = 1; + + CreateSlotProjectile(worldX, worldY - 6); + gCurTask->main = sub_806E374; + } + } + + UpdateSpriteAnimation(s); + + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +void sub_806E374(void) +{ + Slot *slot = TASK_DATA(gCurTask); + Sprite *s = &slot->shared.s; + MapEntity *me = slot->shared.base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + + worldX = TO_WORLD_POS(slot->shared.base.meX, slot->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, slot->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + worldX = worldX2 + I(slot->qUnk3C); + worldY = worldY2 - slot->unk44; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, slot->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + if (++slot->unk40 > 19) { + slot->unk40 = 0; + s->variant = 0; + gCurTask->main = Task_SlotInit; + } + + UpdateSpriteAnimation(s); + + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +void CreateSlotProjectile(s16 worldX, s16 worldY) +{ + struct Task *t = TaskCreate(Task_SlotProjectileMain, sizeof(SlotProjectile), 0x3000, 0, NULL); + SlotProjectile *proj = TASK_DATA(t); + Sprite *s = &proj->s; + + proj->qUnk34[0] = Q(worldX); + proj->qUnk4C[0] = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = worldX; + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_SLOT_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SLOT_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +// Stack allocs +// (99.88%) https://decomp.me/scratch/GHyrC +NONMATCH("asm/non_matching/game/enemies/Slot__Task_SlotProjectileMain.inc", void Task_SlotProjectileMain(void)) +{ + SlotProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + CamCoord oldWorldX, oldWorldY; + u8 sp08; + s32 sb; + u32 v; + bool32 playerWasHit; + u8 i; // r7 + + s->x = Div(proj->qUnk34[0], 0x100); + proj->qUnk4C[0] += Q(40. / 256.); + s->y += I(proj->qUnk4C[0]); + oldWorldX = proj->s.x; + oldWorldY = proj->s.y; + + v = Coll_Player_Projectile(s, oldWorldX, oldWorldY); + playerWasHit = (-v | v) >> 31; // TODO: work this out! + + // WorldPos -> ScreenPos + s->x -= gCamera.x; + s->y -= gCamera.y; + + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + sb = SA2_LABEL(sub_801F07C)(oldWorldY, oldWorldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (sb <= 0 || playerWasHit) { + s32 unk34; + s16 qUnk4C; + if (playerWasHit) { + sp08 = 0; + } + + qUnk4C = proj->qUnk4C[0]; + + unk34 = proj->qUnk34[0]; + proj->unk30 = 45; + + for (i = 0; i < 6; i++) { + s32 r4 = qUnk4C * 10; // ??? + s32 modRes = Mod(PseudoRandom32(), 4) + 0x10; + s32 r0 = Div(-r4, modRes); + + proj->qUnk4C[i] = (r0 * SIN(((sp08 * 4) & 0x7F) + 0x100)) / 20000; + proj->unk58[i] = oldWorldX; + proj->unk64[i] = oldWorldY + sb; + proj->qUnk34[i] = unk34; + proj->unk70[i] = Div(SIN(((sp08 - 24 + i * 8) * 4) & ONE_CYCLE), 30); + proj->unk88[i] = 1; + } + + s->prevVariant = -1; + s->graphics.dest = VRAM_RESERVED_EN_SLOT_PROJ2; + s->graphics.anim = SA1_ANIM_YUKIMARU_PROJ; + s->variant = 0; + gCurTask->main = sub_806E7E0; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY; +} +END_NONMATCH + +void sub_806E7E0() +{ + SlotProjectile *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s32 res; + u8 sp08; + u8 i; + + UpdateSpriteAnimation(s); + + if (--proj->unk30 == 0) { + TaskDestroy(gCurTask); + return; + } + + for (i = 0; i < 6; i++) { + if (proj->unk88[i] != 0) { + CamCoord worldX, worldY; + + proj->qUnk4C[i] = Div(proj->qUnk4C[i] * 1000, 1045 - proj->unk30); + proj->qUnk34[i] += proj->unk70[i]; + proj->unk58[i] = I(proj->qUnk34[i]); + proj->qUnk4C[i] += Q(40. / 256.); + proj->unk64[i] += I(proj->qUnk4C[i]); + + // World pos + s->x = proj->unk58[i]; // r8 + s->y = proj->unk64[i]; // sp0C + + worldX = s->x; + worldY = s->y; + + // Screen pos + s->x -= gCamera.x; + s->y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + proj->unk88[i] = 0; + continue; + } + + res = SA2_LABEL(sub_801F07C)(worldY, worldX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (res <= 0) { + proj->unk64[i] += res; + proj->qUnk4C[i] = Div(-(proj->qUnk4C[i] * 10), 21); + proj->unk70[i] += Div(SIN(sp08 * 4), 30); + } + + if (proj->unk30 < 30) { + if (proj->unk30 & 0x2) { + DisplaySprite(s); + } + } else { + DisplaySprite(s); + } + + s->x = worldX; + s->y = worldY; + } + } +} \ No newline at end of file diff --git a/sa1/src/game/enemies/tentou.c b/sa1/src/game/enemies/tentou.c new file mode 100644 index 0000000000..80316366cf --- /dev/null +++ b/sa1/src/game/enemies/tentou.c @@ -0,0 +1,398 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +#define NUM_PROJECTILES 2 +#define TENTOU_ATTACK_INIT_DISTANCE 80 + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s32 unk30; + /* 0x34 */ s32 unk34; + /* 0x36 */ s16 unk38; +} TentouProj; /* 0x3C */ + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s16 unk44; + /* 0x46 */ s16 unk46; + /* 0x48 */ s32 unk48; + /* 0x4C */ u8 unk4C; + /* 0x4E */ u16 unk4E; + /* 0x50 */ s32 unk50; + /* 0x54 */ s32 unk54; + /* 0x58 */ s16 unk58; + /* 0x5A */ s16 unk5A; +} Tentou; + +void Task_TentouMain(void); +void sub_8074928(void); +void CreateTentouProjectiles(s16 x, s16 y); +void sub_8074C50(void); +void TaskDestructor_TentouProjectiles(struct Task *); + +void CreateEntity_Tentou(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_TentouMain, sizeof(Tentou), 0x2000, 0, TaskDestructor_EntityShared); + Tentou *tentou = TASK_DATA(t); + Sprite *s = &tentou->shared.s; + + tentou->shared.base.regionX = regionX; + tentou->shared.base.regionY = regionY; + tentou->shared.base.me = me; + tentou->shared.base.meX = me->x; + tentou->shared.base.id = id; + + tentou->qUnk3C = -Q(0.625); + tentou->qUnk40 = Q(0); + tentou->unk44 = 0; + tentou->unk46 = 0; + tentou->unk48 = 0; + tentou->unk4C = me->d.sData[1]; + tentou->unk50 = 0; + tentou->unk54 = 0; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TENTOU); + s->graphics.anim = SA1_ANIM_TENTOU; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (I(gPlayer.qWorldX) >= TO_WORLD_POS(tentou->shared.base.meX, tentou->shared.base.regionX)) { + tentou->qUnk3C = +Q(0.625); + tentou->unk48 |= 0x400; + } + + if (me->d.sData[0] >= 0) { + tentou->unk58 = 8; + tentou->unk4E = 0; + tentou->unk5A = 0; + } else { + tentou->unk58 = 8; + tentou->unk4E = 0x40; + tentou->unk5A = 0; + } + + // NOTE: *sigh* Why did they even set this in the if-else above? + tentou->unk5A = 8; + + tentou->unk4E = 0; + + UpdateSpriteAnimation(s); +} + +// (91.64%) https://decomp.me/scratch/CVrOt +NONMATCH("asm/non_matching/game/enemies/Tentou__Task_TantouMain.inc", void Task_TentouMain(void)) +{ + Tentou *tentou; + // register Sprite *s asm("r5"); + Sprite *s; + MapEntity *me; + s32 worldX; + s32 worldY; + s32 worldX2, worldY2; + s16 offsetWorldX; + s32 dtUnk50; + s32 dtUnk54; + s32 dtUnk50Shift; + s32 dtUnk54Shift; + s32 v; + + tentou = TASK_DATA(gCurTask); + s = &tentou->shared.s; + me = tentou->shared.base.me; + + worldX = TO_WORLD_POS(tentou->shared.base.meX, tentou->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, tentou->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + dtUnk50 = tentou->unk50; + tentou->unk50 = QS(me->d.uData[2] * TILE_WIDTH) * SIN((tentou->unk58 * (tentou->unk4E & 0x7F)) & ONE_CYCLE) >> 14; + dtUnk50Shift = tentou->unk50 - dtUnk50; + + dtUnk54 = tentou->unk54; + tentou->unk54 = QS(me->d.uData[3] * TILE_WIDTH) * COS((tentou->unk5A * (tentou->unk4E & 0x3F)) & ONE_CYCLE) >> 14; + dtUnk54Shift = tentou->unk54 - dtUnk54; + + tentou->unk4E++; + if (tentou->unk4E == 0x40 || tentou->unk4E == 0x80) { + tentou->unk46 = 0; + tentou->shared.s.variant = 0; + gCurTask->main = sub_8074928; + } + tentou->unk4E = tentou->unk4E & 0x7F; + + s->x = worldX2 - gCamera.x + (dtUnk50 = (dtUnk50Shift >> 5)); + + if ((s->y = Mod(dtUnk54Shift >> 4, 0x40)) != 0x3F) { + s->y = worldY2 - gCamera.y - Mod(dtUnk54Shift >> 4, 0x40); + + if (Coll_Player_Enemy_Attack(s, worldX + dtUnk50, worldY - (dtUnk54Shift >> 4))) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + } else { + if (Coll_Player_Enemy_Attack(s, worldX + dtUnk50, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + s->y = worldY2 - gCamera.y; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, tentou->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} +END_NONMATCH + +void Task_807473C(void) +{ + Tentou *tentou = TASK_DATA(gCurTask); + Sprite *s = &tentou->shared.s; + MapEntity *me = tentou->shared.base.me; + s32 worldX, worldY; + s32 invUnk50, prevUnk54; + s32 r6; + + worldX = TO_WORLD_POS(tentou->shared.base.meX, tentou->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, tentou->shared.base.regionY); + + invUnk50 = -tentou->unk50; + + tentou->unk50 = QS(me->d.uData[2] * TILE_WIDTH) * SIN((tentou->unk58 * ((tentou->unk4E - 1) & 0x7F)) & ONE_CYCLE) >> 14; + prevUnk54 = tentou->unk54; + tentou->unk54 = QS(me->d.uData[3] * TILE_WIDTH) * COS((tentou->unk5A * ((tentou->unk4E - 1) & 0x3F)) & ONE_CYCLE) >> 14; + + r6 = tentou->unk54 - prevUnk54; + + s->x = worldX - gCamera.x + (invUnk50 >> 5); + s->y = worldY - gCamera.y - (r6 >> 4); + + if (++tentou->unk46 == 15) { + CreateTentouProjectiles(worldX + (invUnk50 >> 5), worldY - (r6 >> 4) - 5); + } + // _0807482A + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, tentou->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX + (invUnk50 >> 5), worldY - (r6 >> 4))) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + // _080748CC + + if (tentou->unk46 > 32) { + s->variant = 1; + gCurTask->main = Task_TentouMain; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} + +// (90.29%) https://decomp.me/scratch/L6r3C +NONMATCH("asm/non_matching/game/enemies/Tentou__sub_8074928.inc", void sub_8074928(void)) +{ + Tentou *tentou = TASK_DATA(gCurTask); + Sprite *s = &tentou->shared.s; + MapEntity *me = tentou->shared.base.me; + s32 worldX, worldY; + s32 worldX2, worldY2; + s32 invUnk50, prevUnk54; + s32 r6; + s32 dtPlayerEnX, dtPlayerEnY; + + worldX = TO_WORLD_POS(tentou->shared.base.meX, tentou->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, tentou->shared.base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + invUnk50 = -tentou->unk50; + + tentou->unk50 = QS(me->d.uData[2] * TILE_WIDTH) * SIN((tentou->unk58 * ((tentou->unk4E - 1) & 0x7F)) & ONE_CYCLE) >> 14; + prevUnk54 = tentou->unk54; + tentou->unk54 = QS(me->d.uData[3] * TILE_WIDTH) * COS((tentou->unk5A * ((tentou->unk4E - 1) & 0x3F)) & ONE_CYCLE) >> 14; + + r6 = tentou->unk54 - prevUnk54; + + s->x = worldX - gCamera.x + (invUnk50 >> 5); + s->y = worldY - gCamera.y - (r6 >> 4); + + ++tentou->unk46; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, tentou->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX2 + (invUnk50 >> 5), worldY2 - (r6 >> 4))) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + + dtPlayerEnX = (I(gPlayer.qWorldX) - gCamera.x) - s->x; + dtPlayerEnX = SQUARE(dtPlayerEnX); + + dtPlayerEnY = (I(gPlayer.qWorldY) - gCamera.y) - s->y; + dtPlayerEnY = SQUARE(dtPlayerEnY); + + if (dtPlayerEnX + dtPlayerEnY < SQUARE(TENTOU_ATTACK_INIT_DISTANCE)) { + tentou->unk46 = 0; + s->variant = 2; + gCurTask->main = Task_807473C; + } else if (tentou->unk46 >= 60) { + tentou->unk46 = 0; + s->variant = 1; + gCurTask->main = Task_TentouMain; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + SPRITE_FLAG_SET(s, X_FLIP); + DisplaySprite(s); + SPRITE_FLAG_CLEAR(s, X_FLIP); +} +END_NONMATCH + +// NOTE: Very from to Fireball enemy's projectile creation. +// TODO: Maybe add macros for code sharing? +void CreateTentouProjectiles(s16 screenX, s16 screenY) +{ + TentouProj *proj; + struct Task *t; + Sprite *s; + s32 i; + s32 v; + + for (i = 0; i < NUM_PROJECTILES; i++) { + t = TaskCreate(sub_8074C50, sizeof(TentouProj), 0x3000, 0, TaskDestructor_TentouProjectiles); + proj = TASK_DATA(t); + s = &proj->s; + + proj->unk30 = screenX * 4; + proj->unk38 = 0; + proj->unk34 = 6; + + if (i != 0) { + s32 six = -proj->unk34; + proj->unk34 = six; + proj->unk30 = (screenX - 6) * 4; + s->x = screenX - 8; + } else { + proj->unk30 = (screenX + 6) * 4; + s->x = screenX + 8; + } + + s->y = screenY; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_GAMIGAMI_PROJ); + s->oamFlags = SPRITE_OAM_ORDER(9); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_GAMIGAMI_PROJ; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} + +void sub_8074C50(void) +{ + TentouProj *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s32 oldWorldX, oldWorldY; + s16 screenX, screenY; + s32 worldX; + + proj->unk30 += proj->unk34; + + worldX = proj->unk30; + + s->x = worldX >> 2; + + proj->unk38 += Q(40. / 256.); + s->y += I(proj->unk38); + oldWorldX = s->x; + oldWorldY = s->y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY; +} + +void TaskDestructor_TentouProjectiles(struct Task *t) +{ + TentouProj *proj = TASK_DATA(t); + VramFree(proj->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/wamu.c b/sa1/src/game/enemies/wamu.c new file mode 100644 index 0000000000..b84b9269ce --- /dev/null +++ b/sa1/src/game/enemies/wamu.c @@ -0,0 +1,350 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +#define NUM_STORED_POSITIONS 64 + +typedef struct { + /* 0x000 */ SpriteBase base; + /* 0x00C */ Sprite s; + /* 0x03C */ u8 filler3C[0xC]; + /* 0x048 */ Sprite s2; + /* 0x078 */ u8 filler78[0xC]; + /* 0x084 */ Sprite s3; + /* 0x0B4 */ s32 qUnkB4; + /* 0x0B4 */ s32 unkB8; + /* 0x0BC */ s16 unkBC; + /* 0x0BE */ s16 qUnkBE; + /* 0x0C0 */ s16 worldXs[NUM_STORED_POSITIONS]; + /* 0x140 */ s16 worldYs[NUM_STORED_POSITIONS]; + /* 0x1C0 */ bool8 unk1C0; + /* 0x1C1 */ u8 unk1C1; +} Wamu; + +void Task_Wamu(void); +void TaskDestructor_Wamu(struct Task *); + +void CreateEntity_Wamu(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Wamu, sizeof(Wamu), 0x2000, 0, TaskDestructor_Wamu); + Wamu *wamu = TASK_DATA(t); + Sprite *s = &wamu->s; +#ifdef BUG_FIX + CamCoord worldX, worldY; +#endif + u8 i; + + wamu->base.regionX = regionX; + wamu->base.regionY = regionY; + wamu->base.me = me; + wamu->base.meX = me->x; + wamu->base.id = id; + + wamu->qUnkBE = -Q(0.625); + wamu->qUnkB4 = Q(0); + wamu->unkB8 = 0; + wamu->unkBC = 100; + wamu->unk1C0 = TRUE; + + /* Head */ + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + +#ifdef BUG_FIX + // Assuming it is wanted behavior to set s->x|y to world pos on init, as this happens a lot, + // we reserve the actual values, so that s2 and s3 can be set to them, too. + worldX = s->x; + worldY = s->y; +#endif + + for (i = 0; i < 64; i++) { + wamu->worldXs[i] = s->x; + wamu->worldYs[i] = s->y; + } + + wamu->unk1C1 = 0; + +#ifndef BUG_FIX + SET_MAP_ENTITY_INITIALIZED(me); +#endif + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_WAMU); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_WAMU; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + + /* Body */ + + s = &wamu->s2; +#ifndef BUG_FIX + s->x = TO_WORLD_POS(me->x, regionX); // BUG: These are WRONG! + s->y = TO_WORLD_POS(me->y, regionY); // NOTE: SET_MAP_ENTITY_INITIALIZED() is called before, + // so me->x is -1, not its initial value. +#else + s->x = worldX; + s->y = worldY; +#endif + +#ifndef BUG_FIX + SET_MAP_ENTITY_INITIALIZED(me); +#endif + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_WAMU); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_WAMU; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + + /* Tail */ + s = &wamu->s3; + +#ifndef BUG_FIX + s->x = TO_WORLD_POS(me->x, regionX); // BUG: These are WRONG! + s->y = TO_WORLD_POS(me->y, regionY); // NOTE: SET_MAP_ENTITY_INITIALIZED() is called before, + // so me->x is -1, not its initial value. +#else + s->x = worldX; + s->y = worldY; +#endif + + // BUG-Prevention: Only call this after all s->x|ys were set. + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_WAMU); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_WAMU; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +// (86.18%) https://decomp.me/scratch/0Ocix +NONMATCH("asm/non_matching/game/enemies/Wamu__Task_Wamu.inc", void Task_Wamu(void)) +{ + MapEntity *me; + Wamu *wamu; + CamCoord worldX, worldY; + Sprite *s; + Sprite *s2; + Sprite *s3; + bool32 sp0C; + s32 v; + s32 worldX2, worldY2; + + sp0C = FALSE; + wamu = TASK_DATA(gCurTask); + s = &wamu->s; + s2 = &wamu->s2; + s3 = &wamu->s3; + me = wamu->base.me; + + worldX = TO_WORLD_POS(wamu->base.meX, wamu->base.regionX); + worldY = TO_WORLD_POS(me->y, wamu->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + wamu->qUnkB4 += Div(COS(wamu->unkBC & ONE_CYCLE), 80 - me->d.uData[3] * (TILE_WIDTH / 2)); + worldX += I(wamu->qUnkB4); + wamu->unkB8 += Div(SIN(wamu->unkBC & ONE_CYCLE), 80); + worldY += I(wamu->unkB8); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + // Facing right + if (wamu->unk1C0) { + wamu->unkBC += 5; + + if ((u16)((wamu->unkBC & ONE_CYCLE) - 101) < 823) { + wamu->unkBC = 100; + wamu->unk1C0 = FALSE; + sp0C = TRUE; + } + } else { + // _0806F428 + wamu->unkBC -= 5; + + if ((u16)((wamu->unkBC & ONE_CYCLE) - 101) < 823) { + wamu->unkBC = 924; + wamu->unk1C0 = TRUE; + sp0C = TRUE; + } + } + } else { + // Facing left + // _0806F44C + if (wamu->unk1C0) { + wamu->unkBC += 5; + + if ((u32)(wamu->unkBC & ONE_CYCLE) > 612) { + wamu->unkBC = 612; + wamu->unk1C0 = FALSE; + sp0C = TRUE; + } + } else { + // _0806F47C + wamu->unkBC -= 8; + + if ((u32)(wamu->unkBC & ONE_CYCLE) < 412) { + wamu->unkBC = 412; + wamu->unk1C0 = TRUE; + sp0C = TRUE; + } + } + } + // _0806F49A + + { + wamu->worldXs[(++wamu->unk1C1) % ARRAY_COUNT(wamu->worldXs)] = worldX; + wamu->worldYs[(wamu->unk1C1) % ARRAY_COUNT(wamu->worldYs)] = worldY; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wamu->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, worldX, worldY)) { + // Enemy defeated + TaskDestroy(gCurTask); + return; + } + // _0806F560 + + if (I(wamu->qUnkB4) <= (me->d.sData[0] * TILE_WIDTH)) { + if ((~s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) && sp0C) { + wamu->qUnkBE = +Q(0.625); + SPRITE_FLAG_SET(s, X_FLIP); + SPRITE_FLAG_SET(s2, X_FLIP); + SPRITE_FLAG_SET(s3, X_FLIP); + + wamu->unkBC ^= 0x100; + } + } else if (I(wamu->qUnkB4) >= ((me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH)) { + // _0806F5A8 + if ((s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) && sp0C) { + wamu->qUnkBE = -Q(0.625); + SPRITE_FLAG_CLEAR(s, X_FLIP); + SPRITE_FLAG_CLEAR(s2, X_FLIP); + SPRITE_FLAG_CLEAR(s3, X_FLIP); + + wamu->unkBC ^= 0x100; + } + } + // _0806F5F6 + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s3->x = s->x - (wamu->worldXs[(wamu->unk1C1 - 24) % ARRAY_COUNT(wamu->worldXs)] - gCamera.x); + v = (s3->x >> 1); + + s3->x = (wamu->worldXs[(wamu->unk1C1 - 24) % ARRAY_COUNT(wamu->worldXs)] - (s3->x >> 1)) - gCamera.x; + s3->y = wamu->worldYs[(wamu->unk1C1 - 40) % ARRAY_COUNT(wamu->worldYs)] - gCamera.y; + + UpdateSpriteAnimation(s3); + DisplaySprite(s3); + + if (HITBOX_IS_ACTIVE(s3->hitboxes[0])) { + if (HB_COLLISION(worldX, worldY, s3->hitboxes[0].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + // _0806F716 + } + + { + s3->x = s->x - (wamu->worldXs[(wamu->unk1C1 - 19) % ARRAY_COUNT(wamu->worldXs)] - gCamera.x); + v = (s3->x >> 1); + s3->x = (wamu->worldXs[(wamu->unk1C1 - 19) % ARRAY_COUNT(wamu->worldXs)] - v) - gCamera.x; + s3->y = (wamu->worldYs[(wamu->unk1C1 - 30) % ARRAY_COUNT(wamu->worldYs)]) - gCamera.y; + + DisplaySprite(s3); + + if (HITBOX_IS_ACTIVE(s3->hitboxes[0])) { + if (HB_COLLISION(worldX, worldY, s3->hitboxes[0].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + // _0806F716 + } + + { + s2->x = s->x - (wamu->worldXs[(wamu->unk1C1 - 14) % ARRAY_COUNT(wamu->worldXs)] - gCamera.x); + v = (s2->x >> 1); + s2->x = (wamu->worldXs[(wamu->unk1C1 - 14) % ARRAY_COUNT(wamu->worldXs)] - v) - gCamera.x; + s2->y = (wamu->worldYs[(wamu->unk1C1 - 20) % ARRAY_COUNT(wamu->worldYs)] - gCamera.y); + + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + // _0806F5F6 + + if (HITBOX_IS_ACTIVE(s2->hitboxes[0])) { + if (HB_COLLISION(worldX, worldY, s2->hitboxes[0].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + + s2->x = s->x - (wamu->worldXs[(wamu->unk1C1 - 7) % ARRAY_COUNT(wamu->worldXs)] - gCamera.x); + v = (s2->x >> 1); + s2->x = ((wamu->worldXs[(wamu->unk1C1 - 7) % ARRAY_COUNT(wamu->worldXs)]) - v) - gCamera.x; + s2->y = wamu->worldYs[(wamu->unk1C1 - 10) % ARRAY_COUNT(wamu->worldYs)] - gCamera.y; + + DisplaySprite(s2); + + if (HITBOX_IS_ACTIVE(s2->hitboxes[0])) { + if (HB_COLLISION(worldX, worldY, s2->hitboxes[0].b, I(gPlayer.qWorldX), I(gPlayer.qWorldY), gPlayerBodyPSI.s.hitboxes[0].b)) { + Coll_DamagePlayer(&gPlayer); + } + } + // _0806F716 + } +} +END_NONMATCH + +void TaskDestructor_Wamu(struct Task *t) +{ + Wamu *wamu = TASK_DATA(t); + + VramFree(wamu->s.graphics.dest); + VramFree(wamu->s2.graphics.dest); + VramFree(wamu->s3.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/enemies/yukimaru.c b/sa1/src/game/enemies/yukimaru.c new file mode 100644 index 0000000000..bd1149462e --- /dev/null +++ b/sa1/src/game/enemies/yukimaru.c @@ -0,0 +1,732 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/stage/terrain_collision.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ s16 unk30; + /* 0x30 */ s16 qUnk32; + /* 0x30 */ s16 qUnk34; +} Snowball; + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ SpriteBase base2; + /* 0x48 */ Sprite s2; + /* 0x78 */ s16 qUnk78; + /* 0x7A */ s16 qUnk7A; + /* 0x7C */ s16 qUnk7C; + /* 0x7E */ s16 qUnk7E; + /* 0x80 */ s16 unk80; + /* 0x82 */ u8 data0; +} Yukimaru; + +void Task_YukimaruGroundInit(void); +void Task_8071BFC(void); +void TaskDestructor_YukimaruGround(struct Task *t); +void CreateSnowball(s16, s16); +void CreateSnowball2(s16, s16, u8); +void Task_Snowball(void); +void sub_80723C0(void); +void sub_80727B4(void); +void Task_Snowball2(void); + +void Task_YukimaruWallInit(void); +void Task_YukimaruWallInit2(void); +void TaskDestructor_YukimaruWall(struct Task *t); + +void CreateEntity_Yukimaru(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_YukimaruGroundInit, sizeof(Yukimaru), 0x2000, 0, TaskDestructor_YukimaruGround); + Yukimaru *yukimaru = TASK_DATA(t); + Sprite *s = &yukimaru->s; + + yukimaru->base.regionX = regionX; + yukimaru->base.regionY = regionY; + yukimaru->base.me = me; + yukimaru->base.meX = me->x; + yukimaru->base.id = id; + + yukimaru->qUnk78 = -Q(0.625); + yukimaru->qUnk7A = +Q(0); + yukimaru->qUnk7C = +Q(0); + yukimaru->qUnk7E = +Q(0); + yukimaru->unk80 = +Q(0); + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_YUKIMARU); + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_YUKIMARU; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + + s = &yukimaru->s2; + yukimaru->base2.regionX = regionX; + yukimaru->base2.regionY = regionY; + yukimaru->base2.me = me; + yukimaru->base2.meX = me->x; + yukimaru->base2.id = id; + + yukimaru->qUnk78 = -Q(0.625); + yukimaru->qUnk7A = +Q(0); + yukimaru->qUnk7C = +Q(0); + yukimaru->qUnk7E = +Q(0); + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_YUKIMARU); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_YUKIMARU; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +NONMATCH("asm/non_matching/game/enemies/Yukimaru__YukimaruGroundInit.inc", void Task_YukimaruGroundInit(void)) +{ + Yukimaru *yukimaru = TASK_DATA(gCurTask); + Sprite *s = &yukimaru->s; + Sprite *s2 = &yukimaru->s2; + MapEntity *me = yukimaru->base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + CamCoord deltaX, deltaY; + + worldX = TO_WORLD_POS(yukimaru->base.meX, yukimaru->base.regionX); + worldY = TO_WORLD_POS(me->y, yukimaru->base.regionY); + + yukimaru->qUnk7A += yukimaru->qUnk78; + + deltaX = worldX + I(yukimaru->qUnk7A); + deltaY = worldY - 6; + deltaY += +yukimaru->qUnk7C; + + worldX2 = worldX; + worldY2 = worldY; + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + s2->x = deltaX - gCamera.x; + s2->y = deltaY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, yukimaru->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + yukimaru->qUnk7C += SA2_LABEL(sub_801F07C)(deltaY, deltaX, 1, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (I(yukimaru->qUnk7A) <= (me->d.sData[0]) * TILE_WIDTH) { + yukimaru->qUnk78 = +Q(0.625); + } else if (I(yukimaru->qUnk7A) >= (me->d.sData[0] + me->d.uData[2]) * TILE_WIDTH) { + yukimaru->qUnk78 = -Q(0.625); + } else if (yukimaru->unk80 != 0) { + yukimaru->unk80--; + } else { + if ((I(gPlayer.qWorldY) <= deltaY) && (I(gPlayer.qWorldX) <= deltaX + 8) && (deltaX - 8 <= I(gPlayer.qWorldX))) { + yukimaru->unk80 = 60; + yukimaru->qUnk7E = Q(0); + s->variant = 0; + s2->variant = 0; + gCurTask->main = Task_8071BFC; + } + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + SPRITE_FLAG_SET(s2, X_FLIP); + DisplaySprite(s2); + SPRITE_FLAG_CLEAR(s2, X_FLIP); +} +END_NONMATCH + +void Task_8071BFC(void) +{ + Yukimaru *yukimaru = TASK_DATA(gCurTask); + Sprite *s = &yukimaru->s; + Sprite *s2 = &yukimaru->s2; + MapEntity *me = yukimaru->base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + CamCoord deltaX, deltaY; + u8 sp08; + + worldX = TO_WORLD_POS(yukimaru->base.meX, yukimaru->base.regionX); + worldY = TO_WORLD_POS(me->y, yukimaru->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + deltaX = worldX + I(yukimaru->qUnk7A); + deltaY = worldY - 6; + deltaY += +yukimaru->qUnk7C; + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + s2->x = deltaX - gCamera.x; + s2->y = deltaY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, yukimaru->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + yukimaru->qUnk7C += SA2_LABEL(sub_801F07C)(deltaY, deltaX, 1, +8, &sp08, SA2_LABEL(sub_801EE64)); + + yukimaru->qUnk7E++; + + if (yukimaru->qUnk7E == 4) { + CreateSnowball(deltaX, deltaY - 18); + } + + if (yukimaru->qUnk7E == 13) { + s->variant = 1; + s2->variant = 1; + gCurTask->main = Task_YukimaruGroundInit; + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + SPRITE_FLAG_SET(s2, X_FLIP); + DisplaySprite(s2); + SPRITE_FLAG_CLEAR(s2, X_FLIP); +} + +void CreateSnowball(s16 worldX, s16 worldY) +{ + struct Task *t = TaskCreate(Task_Snowball, sizeof(Snowball), 0x3000, 0, NULL); + Snowball *snowball = TASK_DATA(t); + Sprite *s = &snowball->s; + s32 speed = worldX * 4; + + snowball->qUnk34 = -Q(5); + snowball->qUnk32 = +Q(0); + snowball->unk30 = speed; + + s->x = worldX - 8; + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_YUKIMARU_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(1); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PEN_PROJ_1; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + + UpdateSpriteAnimation(s); +} + +void Task_Snowball(void) +{ + Snowball *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 oldWorldX, oldWorldY, oldWorldY32; + s16 screenX, screenY; + s32 worldX; + + worldX = proj->unk30; + if (worldX < 0) { + worldX += 3; + } + + s->x = worldX >> 2; + + proj->qUnk34 += Q(40. / 256.); + s->y += I(proj->qUnk34); + oldWorldX = s->x; + oldWorldY32 = s->y; + + Coll_Player_Projectile(s, s->x, oldWorldY32); + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY32; +} + +void TaskDestructor_YukimaruGround(struct Task *t) +{ + Yukimaru *yukimaru = TASK_DATA(t); + VramFree(yukimaru->s.graphics.dest); + VramFree(yukimaru->s2.graphics.dest); +} + +void CreateEntity_Yukimaru_Wall(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + + if (me->d.sData[0] != 0) { + t = TaskCreate(Task_YukimaruWallInit, sizeof(Yukimaru), 0x2000, 0, TaskDestructor_YukimaruWall); + } else { + t = TaskCreate(Task_YukimaruWallInit2, sizeof(Yukimaru), 0x2000, 0, TaskDestructor_YukimaruWall); + } + { + Yukimaru *yukimaru = TASK_DATA(t); + Sprite *s = &yukimaru->s; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_YUKIMARU); + yukimaru->base.regionX = regionX; + yukimaru->base.regionY = regionY; + yukimaru->base.me = me; + yukimaru->base.meX = me->x; + yukimaru->base.id = id; + + yukimaru->qUnk78 = -Q(0.625); + yukimaru->qUnk7A = +Q(0); + yukimaru->qUnk7C = +Q(0); + yukimaru->qUnk7E = +Q(0); + yukimaru->unk80 = +Q(0); + yukimaru->data0 = me->d.sData[0]; + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_YUKIMARU_SIDEWAYS; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + + if (me->d.sData[0] != 1) { + SPRITE_FLAG_SET(s, X_FLIP); + } + + s = &yukimaru->s2; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_YUKIMARU_SIDEWAYS); + yukimaru->base2.regionX = regionX; + yukimaru->base2.regionY = regionY; + yukimaru->base2.me = me; + yukimaru->base2.meX = me->x; + yukimaru->base2.id = id; + + yukimaru->qUnk78 = -Q(0.625); + yukimaru->qUnk7A = +Q(0); + yukimaru->qUnk7C = +Q(0); + yukimaru->qUnk7E = +Q(0); + + // NOTE: x|y set to world- not screen-pos! + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_YUKIMARU_SIDEWAYS; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] != 1) { + SPRITE_FLAG_SET(s, X_FLIP); + } + + UpdateSpriteAnimation(s); + } +} + +void Task_YukimaruWallInit(void) +{ + Yukimaru *yukimaru = TASK_DATA(gCurTask); + Sprite *s = &yukimaru->s; + Sprite *s2 = &yukimaru->s2; + MapEntity *me = yukimaru->base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + CamCoord deltaX, deltaY; + + worldX = TO_WORLD_POS(yukimaru->base.meX, yukimaru->base.regionX); + worldY = TO_WORLD_POS(me->y, yukimaru->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + yukimaru->qUnk7C += yukimaru->qUnk78; + + deltaY = worldY + I(yukimaru->qUnk7C); + deltaX = worldX + yukimaru->qUnk7A; + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + s2->x = deltaX - gCamera.x; + s2->y = deltaY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, yukimaru->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + yukimaru->qUnk7A += SA2_LABEL(sub_801F07C)(deltaX, deltaY, 1, +8, NULL, SA2_LABEL(sub_801ED24)); + + if (I(yukimaru->qUnk7C) <= (me->d.sData[1]) * TILE_WIDTH) { + yukimaru->qUnk78 = +Q(0.625); + } else if (I(yukimaru->qUnk7C) >= (me->d.sData[1] + me->d.uData[3]) * TILE_WIDTH) { + yukimaru->qUnk78 = -Q(0.625); + } else if (yukimaru->unk80 != 0) { + yukimaru->unk80--; + } else { + if ((I(gPlayer.qWorldX) <= deltaX) && (I(gPlayer.qWorldY) <= deltaY + 8) && (deltaY - 8 <= I(gPlayer.qWorldY))) { + yukimaru->unk80 = 60; + yukimaru->qUnk7E = Q(0); + s->variant = 0; + s2->variant = 0; + gCurTask->main = sub_80723C0; + } + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + SPRITE_FLAG_SET(s2, Y_FLIP); + DisplaySprite(s2); + SPRITE_FLAG_CLEAR(s2, Y_FLIP); +} + +void sub_80723C0(void) +{ + Yukimaru *yukimaru = TASK_DATA(gCurTask); + Sprite *s = &yukimaru->s; + Sprite *s2 = &yukimaru->s2; + MapEntity *me = yukimaru->base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + CamCoord deltaX, deltaY; + u8 sp08; + + worldX = TO_WORLD_POS(yukimaru->base.meX, yukimaru->base.regionX); + worldY = TO_WORLD_POS(me->y, yukimaru->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + deltaX = worldX + yukimaru->qUnk7A; + deltaY = worldY + I(yukimaru->qUnk7C); + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + s2->x = deltaX - gCamera.x; + s2->y = deltaY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, yukimaru->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + yukimaru->qUnk7E++; + + if (yukimaru->qUnk7E == 4) { + CreateSnowball2(deltaX - 10, deltaY, 0); + } + + if (yukimaru->qUnk7E == 18) { + s->variant = 1; + s2->variant = 1; + gCurTask->main = Task_YukimaruWallInit; + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + SPRITE_FLAG_SET(s2, Y_FLIP); + DisplaySprite(s2); + SPRITE_FLAG_CLEAR(s2, Y_FLIP); +} + +void Task_YukimaruWallInit2(void) +{ + Yukimaru *yukimaru = TASK_DATA(gCurTask); + Sprite *s = &yukimaru->s; + Sprite *s2 = &yukimaru->s2; + MapEntity *me = yukimaru->base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + CamCoord deltaX, deltaY; + + worldX = TO_WORLD_POS(yukimaru->base.meX, yukimaru->base.regionX); + worldY = TO_WORLD_POS(me->y, yukimaru->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + yukimaru->qUnk7C += yukimaru->qUnk78; + + deltaY = worldY + I(yukimaru->qUnk7C); + deltaX = worldX + yukimaru->qUnk7A; + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + s2->x = deltaX - gCamera.x; + s2->y = deltaY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, yukimaru->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + yukimaru->qUnk7A -= SA2_LABEL(sub_801F07C)(deltaX, deltaY, 1, -8, NULL, SA2_LABEL(sub_801ED24)); + + if (I(yukimaru->qUnk7C) <= (me->d.sData[1]) * TILE_WIDTH) { + yukimaru->qUnk78 = +Q(0.625); + } else if (I(yukimaru->qUnk7C) >= (me->d.sData[1] + me->d.uData[3]) * TILE_WIDTH) { + yukimaru->qUnk78 = -Q(0.625); + } else if (yukimaru->unk80 != 0) { + yukimaru->unk80--; + } else { + if ((I(gPlayer.qWorldX) >= deltaX) && (I(gPlayer.qWorldY) <= deltaY + 8) && (deltaY - 8 <= I(gPlayer.qWorldY))) { + yukimaru->unk80 = 60; + yukimaru->qUnk7E = Q(0); + s->variant = 0; + s2->variant = 0; + gCurTask->main = sub_80727B4; + } + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + SPRITE_FLAG_SET(s2, Y_FLIP); + DisplaySprite(s2); + SPRITE_FLAG_CLEAR(s2, Y_FLIP); +} + +void sub_80727B4(void) +{ + Yukimaru *yukimaru = TASK_DATA(gCurTask); + Sprite *s = &yukimaru->s; + Sprite *s2 = &yukimaru->s2; + MapEntity *me = yukimaru->base.me; + CamCoord worldX, worldY; + s32 worldX2, worldY2; + CamCoord deltaY, deltaX; + u8 sp08; + + worldX = TO_WORLD_POS(yukimaru->base.meX, yukimaru->base.regionX); + worldY = TO_WORLD_POS(me->y, yukimaru->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + deltaX = worldX + yukimaru->qUnk7A; + deltaY = worldY + I(yukimaru->qUnk7C); + + s->x = deltaX - gCamera.x; + s->y = deltaY - gCamera.y; + + s2->x = deltaX - gCamera.x; + s2->y = deltaY - gCamera.y; + + yukimaru->qUnk7E++; + + if (yukimaru->qUnk7E == 4) { + CreateSnowball2(deltaX + 10, deltaY, 1); + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, yukimaru->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Coll_Player_Enemy_Attack(s, deltaX, deltaY)) { + TaskDestroy(gCurTask); + return; + } + + if (yukimaru->qUnk7E == 18) { + s->variant = 1; + s2->variant = 1; + gCurTask->main = Task_YukimaruWallInit2; + } + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s); + SPRITE_FLAG_SET(s2, Y_FLIP); + DisplaySprite(s2); + SPRITE_FLAG_CLEAR(s2, Y_FLIP); +} + +void CreateSnowball2(s16 worldX, s16 worldY, u8 param2) +{ + struct Task *t = TaskCreate(Task_Snowball2, sizeof(Snowball), 0x3000, 0, NULL); + Snowball *snowball = TASK_DATA(t); + Sprite *s = &snowball->s; + + snowball->qUnk34 = 0; + + if (param2) { + snowball->qUnk32 = -3; + } else { + snowball->qUnk32 = +3; + } + + snowball->unk30 = worldX * 4; + + s->x = worldX - 8; + s->y = worldY; + + s->graphics.dest = VRAM_RESERVED_EN_YUKIMARU_PROJ; + s->oamFlags = SPRITE_OAM_ORDER(1); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PEN_PROJ_1; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + + UpdateSpriteAnimation(s); +} + +void Task_Snowball2(void) +{ + Snowball *proj = TASK_DATA(gCurTask); + Sprite *s = &proj->s; + s16 oldWorldX, oldWorldY; + s16 screenX, screenY; + s32 worldX; + + s->x -= proj->qUnk32; + + proj->qUnk34 += Q(23. / 256.); + s->y += I(proj->qUnk34); + + oldWorldX = s->x; + oldWorldY = s->y; + + Coll_Player_Projectile(s, oldWorldX, oldWorldY); + + // WorldPos -> ScreenPos + proj->s.x -= gCamera.x; + proj->s.y -= gCamera.y; + + // TODO: + // if(IS_OUT_OF_RANGE_OLD(u16, s->x, s->y, 40)) + if ((((u16)(s->x + (40 / 2)) > DISPLAY_WIDTH + 36) || (s->y + (40 / 2) < 0) || (s->y > DISPLAY_HEIGHT + 80))) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s->x = oldWorldX; + s->y = oldWorldY; +} + +void TaskDestructor_YukimaruWall(struct Task *t) +{ + Yukimaru *yukimaru = TASK_DATA(t); + VramFree(yukimaru->s.graphics.dest); + VramFree(yukimaru->s2.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/extra_stage_results.c b/sa1/src/game/extra_stage_results.c new file mode 100644 index 0000000000..befe1b8bde --- /dev/null +++ b/sa1/src/game/extra_stage_results.c @@ -0,0 +1,2532 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "game/credits.h" +#include "game/gTask_03006240.h" +#include "game/game_over.h" +#include "game/save.h" +#include "game/stage/results.h" +#include "game/stage/ui.h" +#include "data/ui_graphics.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/text.h" + +typedef struct CongratulationsAnim_48 { + StrcUi_805423C strc0; + struct Task *taskC; + struct Task *task10; + struct Task *task14; + struct Task *task18; // -> ExtraStageResults_164 + struct Task *task1C; + struct Task *task20; + struct Task *task24; + struct Task *task28; + struct Task *task2C; + struct Task *tasks30[4]; // ExtraStageResults_64_2 + s16 unk40; + s8 unk42; + s16 unk44; + s16 unk46; +} CongratulationsAnim_48; + +typedef struct ExtraStageResults_64 { + Sprite s; + SpriteTransform transform; + u32 unk3C; + s32 unk40; + // TODO: Could these be two 2x2 matrices? + s32 qUnk44[4]; + s32 qUnk54[4]; +} ExtraStageResults_64; + +// TODO: +// This might just have been struct ExtraStageResults_164 all along? +typedef struct ExtraStageResults_64_2 { + Sprite s; + SpriteTransform transform; + u16 unk3C; + s32 qUnk40; + // TODO: Could these be two 2x2 matrices? + s32 qUnk44[4]; + s32 qUnk54[4]; +} ExtraStageResults_64_2; + +typedef struct ExtraStageResults_164 { + Sprite s; + SpriteTransform transform; + u16 unk3C; + s32 unk40; + s32 unk44; + s32 unk48; + s32 unk4C; + s16 unk50[64]; + u8 fillerD0[0x6]; + s16 unkD6[15]; + u8 fillerF4[0x54]; + u16 unk148; + u8 filler14A[0x12]; + s8 unk15C; + u8 filler15E[0x7]; +} ExtraStageResults_164; + +typedef struct ExtraStageResultsState { + StrcUi_805423C strc0; // -> ExtraStageResults_64 + struct Task *taskC; // -> ExtraStageResults_64 + struct Task *task10; // -> ExtraStageResults_64 + struct Task *task14; // -> ExtraStageResults_64 + struct Task *task18; // -> ExtraStageResults_64 + struct Task *task1C; // -> ExtraStageResults_64 + struct Task *tasks20[3]; // -> ExtraStageResults_164 + struct Task *tasks2C[3]; // -> ExtraStageResults_64_2 + s32 unk38; + s32 unk3C; + u8 unk40; + s32 unk44; + s32 unk48; + u8 filler4C[8]; +} ExtraStageResultsState; /* 0x54 */ + +void Task_8065F5C_48(void); +void Task_8066E5C(void); +void Task_nullsub_8066DC8_164(void); +void Task_nullsub_8067050(void); +void Task_80661A8_48(void); +void Task_806636C_48(void); +void sub_80683D8(void); +void Task_80663EC_48(void); +void Task_8066478(void); +void Task_8066520(void); +void Task_8066628(void); +void Task_80666E0(void); +void Task_8066768(void); +void Task_80669A0(void); +void Task_8066A5C_164(void); +void Task_8066ACC(void); +void Task_8066BA4(void); +void Task_8066C78_164(void); +void Task_8066D64(void); +void Task_8066DD0_164(void); +void Task_8066E58_164(void); +void Task_8066F14_164(void); +void Task_8066F30(void); +void Task_8066FDC(void); +void Task_8067020_164(void); +void Task_8067054(void); +void Task_8067084(void); +void sub_80677C4(s32 i); +void Task_8067824(void); +void sub_8067928(void); +void Task_80679E4(void); +void Task_8067B9C(void); +void Task_8067C24(void); +void Task_8067E68(void); +void Task_8067F38(void); +void Task_8067F9C(void); +void Task_8068004(void); +void Task_806806C(void); +void Task_8068148(void); +void Task_8068214(void); +void Task_8068360(void); +void Task_nullsub_8068448(void); +void Task_80684B4(void); +void Task_806853C(void); +void Task_8068570(void); +void Task_80685C8(void); +void Task_8067B14(void); +void sub_806844C(void); +void Task_806856C(void); +void Task_8068620(void); +void Task_8068624(void); +void Task_8068628(void); +void Task_806862C(void); + +void Task_8066EBC(void); +void Task_8066F90(void); +void Task_8066DF4(void); +void Task_80662D0_48(void); + +extern const u16 gUnknown_0868B3D8[NUM_CHARACTERS][2]; +extern const u16 gUnknown_0868B3E8[NUM_CHARACTERS][2]; +extern const u16 gUnknown_0868B3F8[NUM_CHARACTERS][2]; +extern const u16 gUnknown_0868B408[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B418[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B428[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B438[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B448[NUM_CHARACTERS][2]; +extern const u16 gUnknown_0868B458[NUM_CHARACTERS][2]; +extern const u16 gUnknown_0868B468[NUM_CHARACTERS][2]; +extern const u16 gUnknown_0868B478[NUM_CHARACTERS][2]; +extern const s8 gUnknown_0868B488[2][NUM_CHARACTERS][2]; +extern const s8 gUnknown_0868B498[8][2]; +extern const u16 gUnknown_0868B4A8[NUM_CHARACTERS][2]; +extern const s16 gUnknown_0868B4B8[2]; +extern const s16 gUnknown_0868B4BE[2]; + +extern const u16 gUnknown_086BBC34[256]; +extern const u8 gUnknown_086BBE34[0x2980]; +extern const u8 gUnknown_086BE7B4[0x1000]; + +extern const u16 gUnknown_086C5B74[256]; +extern const u8 gUnknown_086C5D74[0x1EC0]; +extern const u8 gUnknown_086C7C34[0xA00]; + +extern const u16 gUnknown_086BF7B4[256]; +extern const u8 gUnknown_086BF9B4[0x57C0]; +extern const u8 gUnknown_086C5174[0xA00]; + +extern const u16 gUnknown_086C8634[256]; +extern const u8 gUnknown_086C8834[0x3540]; +extern const u8 gUnknown_086CBD74[0xA00]; + +static inline void sub_80684F4__inline(s32 comp) +{ + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + if (comp == 25) { + UiGfxStackInit(); + sub_80538BC(); + } else if (comp == 30) { + state->unk3C = CreateStageResults((u32)gRingCount, gCourseTime); + return; + } +} + +void CreateCongratulationsAnimation(void) +{ + struct Task *tasks[3]; + Strc_80528AC gfx; + ExtraStageResults_164 *strc164; + CongratulationsAnim_48 *state; + struct Task *sp40; + struct Task *sp44; + struct Task *sp48; + struct Task *sp4C; + struct Task *sp50; + struct Task *temp_r0; + Sprite *s; + u8 i; + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + { + u16 prevIME, prevIE, prevDispstat; + + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + + prevIE = REG_IE; + prevIME = REG_IME; + prevDispstat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + + WriteSaveGame(); + + REG_IE = prevIE; + REG_IE; + REG_IME = prevIME; + REG_IME; + REG_DISPSTAT = prevDispstat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + + gFlags &= ~FLAGS_8000; + } + + sub_80535FC(); + UiGfxStackInit(); + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x9D86; + gBgCntRegs[1] = 0x1B8B; + gBgCntRegs[2] = 0x9880; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + + sp44 = TaskCreate(Task_8066DD0_164, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + strc164 = TASK_DATA(sp44); + s = &strc164->s; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x20; + s->graphics.anim = gUnknown_0868B3D8[gSelectedCharacter][0]; + s->variant = gUnknown_0868B3D8[gSelectedCharacter][1]; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + strc164->unk3C = 0; + strc164->unk44 = 0x780; + strc164->unk40 = Q(DISPLAY_CENTER_X); + strc164->unk4C = 0; + strc164->unk48 = Q(DISPLAY_CENTER_Y); + + sp4C = TaskCreate(Task_8066E58_164, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + strc164 = TASK_DATA(sp4C); + s = &strc164->s; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x7D00; + s->graphics.anim = gUnknown_0868B3F8[gSelectedCharacter][0]; + s->variant = gUnknown_0868B3F8[gSelectedCharacter][1]; + s->x = 0x12C; + s->y = 0x6C; + s->oamFlags = 0x240; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + strc164->unk3C = 0; + strc164->unk44 = 0x780; + strc164->unk40 = Q(0x12C); + strc164->unk4C = 0; + strc164->unk48 = Q(0x6C); + + sp48 = TaskCreate(Task_8066F14_164, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + strc164 = TASK_DATA(sp48); + s = &strc164->s; + s->graphics.dest = (void *)OBJ_VRAM0 + 0xBA0; + s->graphics.anim = 0x2E0; + s->variant = 0; + s->x = 0x12C; + s->y = 0x6C; + s->oamFlags = 0x300; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + strc164->unk3C = 0; + strc164->unk44 = 0x780; + strc164->unk40 = Q(0x12C); + strc164->unk4C = 0; + strc164->unk48 = Q(0x6C); + + sp40 = TaskCreate(Task_8066A5C_164, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + strc164 = TASK_DATA(sp40); + s = &strc164->s; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x0940; + s->graphics.anim = 0x314; + s->variant = 0; + s->x = 0xF8; + s->y = 0x50; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + strc164->unk3C = 0; + strc164->unk44 = 0x100; + strc164->unk40 = Q(0xF8); + strc164->unk4C = 0; + strc164->unk48 = Q(0x50); + strc164->unk15C = 0; + + sp50 = TaskCreate(Task_8067020_164, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + strc164 = TASK_DATA(sp50); + s = &strc164->s; + strc164->unk3C = 0; + strc164->unk4C = 0; + strc164->unk48 = 0; + strc164->unk44 = 0; + strc164->unk40 = 0; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x4020; + s->graphics.anim = gUnknown_0868B3E8[gSelectedCharacter][0]; + s->variant = gUnknown_0868B3E8[gSelectedCharacter][1]; + s->x = 0x78; + s->y = 0x50; + s->oamFlags = 0xC0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + + temp_r0 = TaskCreate(Task_8066C78_164, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + strc164 = TASK_DATA(temp_r0); + s = &strc164->s; + strc164->unk3C = 0; + strc164->unk4C = 0xF; + strc164->unk48 = 0; + strc164->unk44 = 0; + strc164->unk40 = 0; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x09C0; + s->graphics.anim = 0x308; + s->variant = 0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + + for (i = 0; i < 3; i++) { + tasks[i] = TaskCreate(Task_nullsub_8066DC8_164, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + strc164 = TASK_DATA(tasks[i]); + s = &strc164->s; + strc164->unk3C = 0; + strc164->unk4C = 0xF; + strc164->unk48 = 0; + strc164->unk44 = i; + strc164->unk40 = 0; + + if (i == 0) { + s->graphics.dest = OBJ_VRAM0 + 0x1AA0; + s->graphics.anim = 0x311; + s->variant = 0; + } else if (i == 1) { + s->graphics.dest = OBJ_VRAM0 + 0x2340; + s->graphics.anim = 0x311; + s->variant = 1; + } else { + s->graphics.dest = OBJ_VRAM0 + 0x2820; + s->graphics.anim = 0x311; + s->variant = 2; + } + + s->x = 0xB4; + s->y = 80; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + } + + state = TASK_DATA(TaskCreate(Task_8065F5C_48, sizeof(CongratulationsAnim_48), 0x2100U, 0U, NULL)); + state->unk40 = 0; + state->unk42 = 1; + state->taskC = sp50; + state->task24 = tasks[0]; + state->task28 = tasks[1]; + state->task2C = tasks[2]; + state->task18 = sp44; + state->task10 = temp_r0; + state->task14 = sp40; + state->task1C = sp48; + state->task20 = sp4C; + state->unk44 = 0; + state->unk46 = 0; + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 8; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + sub_80543A4(&state->strc0); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086BBE34[0]; + gfx.tilesSize = sizeof(gUnknown_086BBE34); + gfx.palette = &gUnknown_086BBC34[0]; + gfx.paletteSize = sizeof(gUnknown_086BBC34); + gfx.layout = &gUnknown_086BE7B4[0]; + gfx.layoutSize = sizeof(gUnknown_086BE7B4); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + m4aSongNumStart(MUS_CUTSCENE_TORNADO_RESCUE); +} + +void Task_8065F5C_48(void) +{ + struct Task *tasks[4]; + ExtraStageResults_64_2 *sp14; + ExtraStageResults_64_2 *sp18; + ExtraStageResults_64_2 *sp1C; + ExtraStageResults_64_2 *temp_sl; + s16 var_r0; + s8 *temp_r3_2; + struct Task *t; + u16 temp_r3; + u32 var_r7; + u8 var_r6; + CongratulationsAnim_48 *state = TASK_DATA(gCurTask); + + sp14 = TASK_DATA(state->taskC); + sp18 = TASK_DATA(state->task18); + sp1C = TASK_DATA(state->task1C); + temp_sl = TASK_DATA(state->task20); + var_r7 = state->unk40 + 1; + sub_805423C(&state->strc0); + if (var_r7 == 0xB4) { + for (var_r6 = 0; var_r6 < 4; var_r6++) { + ExtraStageResults_64_2 *strc64; + Sprite *s; + tasks[var_r6] = TaskCreate(sub_806844C, sizeof(ExtraStageResults_64_2), 0x2120U, 0U, NULL); + strc64 = TASK_DATA(tasks[var_r6]); + s = &strc64->s; + // TODO: Ugly cast + *((u32 *)&strc64->unk3C) = 0; + if (var_r6 == 0) { + strc64->qUnk54[0] = 0xC800; + strc64->qUnk44[0] = 0x3C00; + strc64->qUnk44[1] = 0x80; + strc64->qUnk54[1] = 0xFFFFFC40; + s->graphics.dest = OBJ_VRAM0 + 0x2E80; + s->graphics.anim = 0x316; + s->variant = 0; + s->oamFlags = 0x4C0; + } else if (var_r6 == 1) { + strc64->qUnk54[0] = 0xC800; + strc64->qUnk44[0] = 0; + strc64->qUnk44[1] = 0x40; + strc64->qUnk54[1] = 0xFFFFFC00; + s->graphics.dest = OBJ_VRAM0 + 0x2FC0; + s->graphics.anim = 0x317; + s->variant = 0; + s->oamFlags = 0x480; + } else if (var_r6 == 2) { + strc64->qUnk54[0] = 0xC800; + strc64->qUnk44[0] = 0x7800; + strc64->qUnk44[1] = 0x100; + strc64->qUnk54[1] = 0xFFFFFC80; + s->graphics.dest = OBJ_VRAM0 + 0x3260; + s->graphics.anim = 0x318; + s->variant = 0; + s->oamFlags = 0x440; + } else { + strc64->qUnk54[0] = 0xC800; + strc64->qUnk44[0] = 0xB400; + strc64->qUnk44[1] = 0xC0; + strc64->qUnk54[1] = 0xFFFFFB80; + s->graphics.dest = OBJ_VRAM0 + 0x3620; + s->graphics.anim = 0x319; + s->variant = 0; + s->oamFlags = 0x400; + } + s->x = 0xB4; + s->y = 0x50; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + state->tasks30[var_r6] = tasks[var_r6]; + } + } + if (var_r7 == 0x168) { + state->tasks30[0]->main = Task_80684B4; + state->tasks30[1]->main = Task_80684B4; + state->tasks30[2]->main = Task_80684B4; + state->tasks30[3]->main = Task_80684B4; + } + if (var_r7 > 0x190U) { + var_r7 = 0; + TaskDestroy(state->task10); + state->task20->main = Task_8066E5C; + state->task1C->main = Task_8066F30; + state->task18->main = Task_8066628; + state->taskC->main = Task_nullsub_8067050; + gCurTask->main = Task_80661A8_48; + } + state->unk40 = var_r7; + sp14->unk3C = var_r7; + sp18->unk3C = var_r7; + sp1C->unk3C = var_r7; + temp_sl->unk3C = var_r7; +} + +void Task_80661A8_48() +{ + ExtraStageResults_164 *sp0; + ExtraStageResults_164 *sp4; + ExtraStageResults_164 *sp8; + s16 *temp_r3; + u32 var_r5; + void *temp_r1; + void *temp_r3_2; + void *temp_r4; + void *strc64_2; + void *strc64_3; + void *strc64_4; + struct Task *task14; + struct Task *task18; + struct Task *task1C; + struct Task *task20; + ExtraStageResults_164 *strc164_t14; + ExtraStageResults_164 *strc164_t18; + ExtraStageResults_164 *strc164_t1C; + ExtraStageResults_164 *strc164_t20; + ExtraStageResults_164 *strc164_t34; + + // TODO: There's something weird with its typing. + // Maybe we have multiple 0x164-byte structs, actually? + ExtraStageResults_64_2 *strc64; + + CongratulationsAnim_48 *state = TASK_DATA(gCurTask); + + sp0 = TASK_DATA(state->task18); + sp4 = TASK_DATA(state->task1C); + sp8 = TASK_DATA(state->task20); + var_r5 = state->unk40 + 1; + if (var_r5 == 0xD0) { + + strc64 = TASK_DATA(state->tasks30[0]); + strc64->qUnk44[0] = -Q(30); + strc64->qUnk54[0] = -Q(120); + strc64->qUnk44[1] = Q(0.5); + strc64->qUnk54[1] = 0; + + strc64 = TASK_DATA(state->tasks30[1]); + strc64->qUnk44[0] = -Q(60); + strc64->qUnk54[0] = -Q(90); + strc64->qUnk44[1] = Q(1.25); + strc64->qUnk54[1] = 0; + + strc64 = TASK_DATA(state->tasks30[2]); + strc64->qUnk44[0] = -Q(90); + strc64->qUnk54[0] = -Q(60); + strc64->qUnk44[1] = Q(1.00); + strc64->qUnk54[1] = 0; + + strc64 = TASK_DATA(state->tasks30[3]); + strc64->qUnk44[0] = -Q(120); + strc64->qUnk54[0] = -Q(30); + strc64->qUnk44[1] = Q(0.75); + strc64->qUnk54[1] = 0; + + state->tasks30[0]->main = sub_80683D8; + state->tasks30[1]->main = sub_80683D8; + state->tasks30[2]->main = sub_80683D8; + state->tasks30[3]->main = sub_80683D8; + } + if (var_r5 > 0x118U) { + var_r5 = 0; + state->task20->main = Task_8066EBC; + state->task1C->main = Task_8066F90; + state->task18->main = Task_8066DF4; + gCurTask->main = Task_80662D0_48; + } + state->unk40 = (s16)var_r5; + sp0->unk3C = (s16)var_r5; + sp4->unk3C = (s16)var_r5; + sp8->unk3C = (s16)var_r5; +} + +void Task_80662D0_48(void) +{ + s16 *temp_r2; + struct Task *task14; + struct Task *task18; + struct Task *task1C; + struct Task *task20; + ExtraStageResults_164 *strc164_t18; + ExtraStageResults_164 *strc164_t1C; + ExtraStageResults_164 *strc164_t20; + u32 unk3C; + + CongratulationsAnim_48 *state = TASK_DATA(gCurTask); + + task18 = state->task18; + strc164_t18 = TASK_DATA(task18); + task1C = state->task1C; + strc164_t1C = TASK_DATA(task1C); + task20 = state->task20; + strc164_t20 = TASK_DATA(task20); + unk3C = state->unk40 + 1; + if (unk3C > 16) { + unk3C = 0; + state->tasks30[0]->main = Task_8068360; + state->tasks30[1]->main = Task_8068360; + state->tasks30[2]->main = Task_8068360; + state->tasks30[3]->main = Task_8068360; + task20->main = Task_80669A0; + task1C->main = Task_8066FDC; + task18->main = Task_80666E0; + gCurTask->main = Task_806636C_48; + } + + state->unk40 = unk3C; + strc164_t18->unk3C = unk3C; + strc164_t1C->unk3C = unk3C; + strc164_t20->unk3C = unk3C; +} + +void Task_806636C_48(void) +{ + s16 *temp_r2; + struct Task *task14; + struct Task *task18; + struct Task *task1C; + struct Task *task20; + ExtraStageResults_164 *strc164_t14; + ExtraStageResults_164 *strc164_t18; + ExtraStageResults_164 *strc164_t1C; + ExtraStageResults_164 *strc164_t20; + u32 unk3C; + + CongratulationsAnim_48 *state = TASK_DATA(gCurTask); + + task18 = state->task18; + strc164_t18 = TASK_DATA(task18); + task1C = state->task1C; + strc164_t1C = TASK_DATA(task1C); + task20 = state->task20; + strc164_t20 = TASK_DATA(task20); + unk3C = state->unk40 + 1; + if (unk3C > 400) { + unk3C = 0; + state->task14->main = Task_8066ACC; + gCurTask->main = Task_80663EC_48; + } + if (unk3C == 0x12C) { + strc164_t20->unk50[0] = 1; + } + state->unk40 = unk3C; + strc164_t18->unk3C = unk3C; + strc164_t1C->unk3C = unk3C; + strc164_t20->unk3C = unk3C; +} + +void Task_80663EC_48(void) +{ + s16 *temp_r2; + struct Task *task14; + struct Task *task18; + struct Task *task1C; + struct Task *task20; + ExtraStageResults_164 *strc164_t14; + ExtraStageResults_164 *strc164_t18; + ExtraStageResults_164 *strc164_t1C; + ExtraStageResults_164 *strc164_t20; + u32 unk3C; + + CongratulationsAnim_48 *state = TASK_DATA(gCurTask); + + task18 = state->task18; + strc164_t18 = TASK_DATA(task18); + task14 = state->task14; + strc164_t14 = TASK_DATA(task14); + task1C = state->task1C; + strc164_t1C = TASK_DATA(task1C); + task20 = state->task20; + strc164_t20 = TASK_DATA(task20); + unk3C = state->unk40 + 1; + if (unk3C == 0x3C) { + task14->main = Task_8066BA4; + } + if (unk3C > 200) { + unk3C = 0; + state->taskC->main = Task_8067054; + gCurTask->main = Task_8066478; + } + state->unk40 = unk3C; + strc164_t18->unk3C = (unk3C + 0x3FF); + strc164_t14->unk3C = unk3C; + strc164_t1C->unk3C = unk3C; + strc164_t20->unk3C = unk3C; +} + +void Task_8066478(void) +{ + s16 *temp_r2; + struct Task *temp_r6; + struct Task *task14; + struct Task *task18; + struct Task *task1C; + ExtraStageResults_164 *strc164; + ExtraStageResults_164 *strc164_2; + ExtraStageResults_164 *strc164_3; + ExtraStageResults_164 *strc164_4; + ExtraStageResults_164 *strc164_5; + u32 var_r3; + + CongratulationsAnim_48 *state = TASK_DATA(gCurTask); + + task18 = state->task18; + strc164_5 = TASK_DATA(task18); + task14 = state->task14; + strc164_2 = TASK_DATA(state->task14); + task1C = state->task1C; + strc164_3 = TASK_DATA(task1C); + strc164 = TASK_DATA(state->task20); + var_r3 = state->unk40 + 1; + if (var_r3 > 0xF0U) { + var_r3 = 0; + state->task24->main = Task_8066D64; + state->task28->main = Task_8066D64; + state->task2C->main = Task_8066D64; + task18->main = Task_8066768; + state->taskC->main = Task_8067084; + gCurTask->main = Task_8066520; + } + if (var_r3 == 1) { + strc164->unk50[0] = var_r3; + } + state->unk40 = var_r3; + strc164_5->unk3C = var_r3; + strc164_2->unk3C = var_r3; + strc164_3->unk3C = var_r3; + strc164->unk3C = var_r3; +} + +// (96.54%) https://decomp.me/scratch/bDXGb +NONMATCH("asm/non_matching/game/extra_stage_results__Task_8066520.inc", void Task_8066520(void)) +{ + ExtraStageResults_164 *sp0; + ExtraStageResults_164 *sp4; + ExtraStageResults_164 *sp8; + u32 temp_r5; + ExtraStageResults_164 *temp_r6; + ExtraStageResults_164 *temp_r7; + ExtraStageResults_164 *temp_r8; + ExtraStageResults_164 *temp_sl; + ExtraStageResults_164 *temp_sb; + CongratulationsAnim_48 *state = TASK_DATA(gCurTask); + StrcUi_805423C *strc0; + strc0 = &state->strc0; + + temp_sl = TASK_DATA(state->taskC); + sp0 = TASK_DATA(state->task24); + sp4 = TASK_DATA(state->task28); + sp8 = TASK_DATA(state->task2C); + temp_sb = TASK_DATA(state->task18); + temp_r8 = TASK_DATA(state->task14); + temp_r7 = TASK_DATA(state->task1C); + temp_r6 = TASK_DATA(state->task20); + + temp_r5 = state->unk40 + 1; + if (temp_r5 > 0x2BCU) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + CreateStaffCredits(); + return; + } else { + if (temp_r5 >= 0x29E) { + if (temp_r5 == 0x29E) { + strc0->unk0 = 0; + strc0->unk2 = 1; + strc0->unk4 = 1; + strc0->unk6 = 0; + strc0->unk8 = 0xC0; + strc0->unkA = 1; + } + sub_805423C(strc0); + } + + state->unk40 = temp_r5; + temp_sl->unk3C = temp_r5; + sp0->unk3C = temp_r5; + sp4->unk3C = temp_r5; + sp8->unk3C = temp_r5; + temp_sb->unk3C = temp_r5; + temp_r8->unk3C = temp_r5; + temp_r7->unk3C = temp_r5; + temp_r6->unk3C = temp_r5; + } +} +END_NONMATCH + +void Task_8066628() +{ + s32 temp_r0; + s32 temp_r0_2; + u16 unk3C; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + unk3C = strc164->unk3C; + if (unk3C == 15) { + s->graphics.anim = gUnknown_0868B418[gSelectedCharacter][0]; + s->variant = gUnknown_0868B418[gSelectedCharacter][1]; + s->prevVariant = -1; + } else if (unk3C == 20) { + s->graphics.anim = gUnknown_0868B428[gSelectedCharacter][0]; + s->variant = gUnknown_0868B428[gSelectedCharacter][1]; + s->prevVariant = -1; + } else if (unk3C == 30) { + s->graphics.anim = gUnknown_0868B438[gSelectedCharacter][0]; + s->variant = gUnknown_0868B438[gSelectedCharacter][1]; + s->prevVariant = -1; + } + + if (unk3C > 20) { + strc164->unk48 -= Q(8); + if (strc164->unk48 < -Q(64)) { + strc164->unk48 = -Q(64); + } + s->y = I(strc164->unk48); + + strc164->unk40 -= strc164->unk44; + if (strc164->unk40 < 0) { + strc164->unk40 = 0; + } + s->x = I(strc164->unk40); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_80666E0() +{ + s32 temp_r0; + u32 temp_r4; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + temp_r4 = strc164->unk3C; + if (temp_r4 == 0x12C) { + s->graphics.anim = gUnknown_0868B448[gSelectedCharacter][0]; + s->variant = gUnknown_0868B448[gSelectedCharacter][1]; + s->prevVariant = 0xFF; + } + + strc164->unk48 = strc164->unk48 + (SIN((temp_r4 % 256u) * 4) >> 8); + s->y = I(strc164->unk48); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066768() +{ + SpriteTransform *tf; + s32 temp_r0; + s16 temp_r0_2; + s16 temp_r0_3; + s32 var_r1; + u16 unk3C; + u16 var_r0; + void *temp_r2; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + tf = &strc164->transform; + unk3C = strc164->unk3C; + if (unk3C == 1) { + s->graphics.anim = gUnknown_0868B458[gSelectedCharacter][0]; + s->variant = gUnknown_0868B458[gSelectedCharacter][1]; + s->prevVariant = -1; + } else if (unk3C == 0xF0) { + s->graphics.anim = gUnknown_0868B468[gSelectedCharacter][0]; + s->variant = gUnknown_0868B468[gSelectedCharacter][1]; + s->prevVariant = -1; + strc164->unk4C = -0x400; + } + if (unk3C >= 0x12C) { + if (unk3C == 0x12C) { + s->graphics.anim = gUnknown_0868B478[gSelectedCharacter][0]; + s->variant = gUnknown_0868B478[gSelectedCharacter][1]; + s->prevVariant = -1; + tf->rotation = 0; + temp_r0 = Div(Q(7), 10); + tf->qScaleX = temp_r0; + tf->qScaleY = temp_r0; + tf->x = (s16)(u16)s->x; + tf->y = (s16)(u16)s->y; + } + strc164->unk4C += 0x1E; + strc164->unk48 += strc164->unk4C; + } else { + strc164->unk48 += (SIN_24_8(((unk3C % 256u) * 4)) >> 0x2); + } + + s->y = I(strc164->unk48); + + if (unk3C >= 300) { + if (unk3C == 300) { + tf->x = tf->x - gUnknown_0868B488[0][gSelectedCharacter][0]; + tf->y = s->y - gUnknown_0868B488[0][gSelectedCharacter][0]; + } else if (unk3C == 301) { + tf->x = gUnknown_0868B488[1][gSelectedCharacter][0] + (SIN_24_8(44) >> 6) + tf->x; + tf->y = gUnknown_0868B488[1][gSelectedCharacter][0] + s->y; + } else { + tf->x = (SIN(((unk3C - 300) * 12) + 0x20) >> 12) + (u16)tf->x; + tf->y = (u16)s->y; + } + + tf->qScaleX += Q(4. / 256.); + if (tf->qScaleX > Q(1.5)) { + tf->qScaleX = Q(1.5); + } + + tf->qScaleY += Q(4. / 256.); + if (tf->qScaleY > Q(1.5)) { + tf->qScaleY = Q(1.5); + } + s->frameFlags = 0x1061; + TransformSprite(s, tf); + } else { + s->frameFlags = 0x1000; + } + UpdateSpriteAnimation(s); + if (unk3C <= 360) { + DisplaySprite(s); + } +} + +void Task_80669A0() +{ + u8 *var_r1; + s32 temp_r0; + u16 unk3C; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + unk3C = strc164->unk3C; + if (unk3C == 0x12C) { + if (strc164->unk50[0] != 0) { + s->graphics.anim = gUnknown_0868B408[gSelectedCharacter][0]; + s->variant = gUnknown_0868B408[gSelectedCharacter][1]; + s->prevVariant = -1; + strc164->unk50[0] = 0; + } + } else if (unk3C == 1) { + if (strc164->unk50[0] != 0) { + s->graphics.anim = gUnknown_0868B3F8[gSelectedCharacter][0]; + s->variant = gUnknown_0868B3F8[gSelectedCharacter][1]; + s->prevVariant = -1; + strc164->unk50[0] = 0; + } + } + + strc164->unk48 += I(SIN((unk3C % 256u) * 4)); + s->y = I(strc164->unk48); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066A5C_164() +{ + s32 modRes; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + u16 unk3C = strc164->unk3C; + + if (++strc164->unk15C > 63) { + strc164->unk15C = 0; + } + + modRes = Mod(unk3C, 64); + strc164->unk50[strc164->unk15C] = SIN(modRes * 8) >> 10; + strc164->unkD6[strc164->unk15C] = SIN(modRes * 8) >> 10; +} + +void Task_8066ACC(void) +{ + s16 *temp_r4; + s32 temp_r1; + s32 temp_r2; + u8 *temp_r5; + u8 i; + s32 modRes; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + u16 unk3C = strc164->unk3C; + + if (++strc164->unk15C > 63) { + strc164->unk15C = 0; + } + + modRes = Mod(unk3C, 64); + strc164->unk50[strc164->unk15C] = SIN(modRes * 8) >> 10; + strc164->unkD6[strc164->unk15C] = SIN(modRes * 8) >> 10; + UpdateSpriteAnimation(s); + + for (i = 0; i < ARRAY_COUNT(gUnknown_0868B498); i++) { + s32 index; + s32 v = gUnknown_0868B498[i][0] + 0xF8; + s->x = v - unk3C; + index = ((u8)strc164->unk15C + i * 8) & 0x3F; + s->y = gUnknown_0868B498[i][1] + DISPLAY_CENTER_Y + strc164->unkD6[index]; + DisplaySprite(s); + } +} + +void Task_8066BA4(void) +{ + s16 *temp_r4; + s32 temp_r1; + s32 temp_r2; + u8 *temp_r5; + u8 i; + s32 modRes; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + u16 unk3C = strc164->unk3C; + + if (++strc164->unk15C > 63) { + strc164->unk15C = 0; + } + + modRes = Mod(unk3C, 64); + strc164->unk50[strc164->unk15C] = SIN(modRes * 8) >> 10; + strc164->unkD6[strc164->unk15C] = SIN(modRes * 8) >> 10; + UpdateSpriteAnimation(s); + + for (i = 0; i < 8; i++) { + s32 index; + s32 v; + s->x = gUnknown_0868B498[i][0] + 0xBC; + index = ((u8)strc164->unk15C + i * 8) & 0x3F; + s->y = gUnknown_0868B498[i][1] + DISPLAY_CENTER_Y + strc164->unkD6[index]; + DisplaySprite(s); + } +} + +void Task_8066C78_164() +{ + u32 unk3C; + s32 sp0; + s32 temp_r0_3; + s32 temp_r0_4; + s32 temp_r2; + s32 var_r4; + u16 *temp_r1; + u16 temp_r0; + u8 *temp_r5; + u8 *var_r2; + u8 *var_r3; + u8 temp_r0_2; + u8 var_r8; + + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + unk3C = ++strc164->unk3C; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + for (var_r8 = 0; var_r8 < 15; var_r8++) { + if ((unk3C + var_r8) & 0xF) { + temp_r2 = var_r8 * 2; + strc164->unkD6[var_r8] -= 0x10; + } else { + s32 rnd2; + temp_r0_3 = PseudoRandom32(); + strc164->unkD6[var_r8] = Mod(temp_r0_3, 40) + 0x8C; + rnd2 = PseudoRandom32(); + strc164->unk50[var_r8] = Mod(rnd2, 0xDC) + 0x14; + var_r3 = temp_r5; + } + s->x = strc164->unk50[var_r8]; + s->y = strc164->unkD6[var_r8]; + DisplaySprite(s); + } +} + +void Task_8066D64() +{ + u32 unk3C; + + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + unk3C = strc64->unk3C; + // TODO: Potential signedness bug? + if (unk3C > gUnknown_0868B4BE[strc64->qUnk44[0]]) { + unk3C -= gUnknown_0868B4BE[strc64->qUnk44[0]]; + unk3C *= 3; + s->x = DISPLAY_CENTER_X; + s->y = 180 - unk3C; + if (s->y < gUnknown_0868B4B8[strc64->qUnk44[0]]) { + s->y = gUnknown_0868B4B8[strc64->qUnk44[0]]; + } + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_nullsub_8066DC8_164(void) { ExtraStageResults_164 *strc164; } + +void Task_nullsub_8066DCC(void) { } + +void Task_8066DD0_164() +{ + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066DF4() +{ + s32 temp_r0; + s32 temp_r0_2; + + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + u16 unk3C = strc64->unk3C; + + strc64->qUnk40 += strc64->qUnk44[0]; + + s->x = I(strc64->qUnk40) - 20; + + strc64->qUnk44[1] += Q(8); + s->y = (s16)((s32)strc64->qUnk44[1] >> 8); + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +// unused, inline? +void sub_8066E34(void) +{ + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066E58_164(void) { } + +// Literally identical to Task_8066F30() +void Task_8066E5C() +{ + s32 temp_r0; + s32 temp_r0_2; + + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + u16 unk3C = strc64->unk3C; + + strc64->qUnk40 -= strc64->qUnk44[0]; + if (strc64->qUnk40 < 0) { + strc64->qUnk40 = 0; + } + + s->x = I(strc64->qUnk40); + + if (unk3C > 20) { + strc64->qUnk44[1] -= Q(8); + if (strc64->qUnk44[1] < -Q(30)) { + strc64->qUnk44[1] = -Q(30); + } + s->y = (s16)((s32)strc64->qUnk44[1] >> 8); + } + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066EBC() +{ + s32 temp_r0; + s32 temp_r0_2; + + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + u16 unk3C = strc64->unk3C; + + strc64->qUnk40 += strc64->qUnk44[0]; + if (strc64->qUnk40 < 0) { + strc64->qUnk40 = 0; + } + + s->x = I(strc64->qUnk40); + + strc64->qUnk44[1] += Q(8); + + if (strc64->qUnk44[1] < -Q(30)) { + strc64->qUnk44[1] = -Q(30); + } + s->y = (s16)((s32)strc64->qUnk44[1] >> 8); + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066F14_164(void) +{ + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + UpdateSpriteAnimation(s); +} + +void Task_8066F30() +{ + s32 temp_r0; + s32 temp_r0_2; + + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + u16 unk3C = strc64->unk3C; + + strc64->qUnk40 -= strc64->qUnk44[0]; + if (strc64->qUnk40 < 0) { + strc64->qUnk40 = 0; + } + + s->x = I(strc64->qUnk40); + + if (unk3C > 20) { + strc64->qUnk44[1] -= Q(8); + if (strc64->qUnk44[1] < -Q(30)) { + strc64->qUnk44[1] = -Q(30); + } + s->y = (s16)((s32)strc64->qUnk44[1] >> 8); + } + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066F90() +{ + s32 temp_r0; + s32 temp_r0_2; + + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + strc64->qUnk40 += strc64->qUnk44[0]; + if (strc64->qUnk40 < 0) { + strc64->qUnk40 = 0; + } + s->x = I(strc64->qUnk40); + strc64->qUnk44[1] += Q(8); + s->y = I(strc64->qUnk44[1]); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8066FDC(void) +{ + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + u16 unk3C = strc64->unk3C; + + strc64->qUnk44[1] += (SIN((unk3C & 0xFF) * 4) >> 8); + s->y = I(strc64->qUnk44[1]); + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8067020_164(void) +{ + ExtraStageResults_164 *strc164 = TASK_DATA(gCurTask); + Sprite *s = &strc164->s; + + if (Mod(strc164->unk3C, 2) == 0) { + gBgScrollRegs[0][1]++; + } +} + +void Task_nullsub_8067050(void) { } + +void Task_8067054(void) +{ + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + s->prevVariant = -1; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8067084() +{ + ExtraStageResults_64_2 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + if (strc64->unk3C >= 360) { + if (strc64->unk3C == 360) { + s->graphics.anim = gUnknown_0868B4A8[gSelectedCharacter][0]; + s->variant = gUnknown_0868B4A8[gSelectedCharacter][1]; + s->prevVariant = -1; + } + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void CreateExtraStageResults(void) +{ + struct Task *tasks[4]; + Strc_80528AC gfx; + struct Task *task64_0; + struct Task *task64_2; + struct Task *task64_1; + StrcUi_805423C *temp_r0_11; + s16 var_r0; + s16 var_r1; + s8 *temp_r1_5; + s8 *temp_r1_6; + struct Task *task64_3; + struct Task *task64_4; + struct Task *temp_r2_6; + ExtraStageResultsState *state; + ExtraStageResults_64 *strc64; + Sprite *s; + u8 i, i2; + + i = 0; + LOADED_SAVE->unlockedLevels[0] = 0xF; + LOADED_SAVE->unk424 = 1; + { + u16 prevIME, prevIE, prevDispstat; + + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + + prevIE = REG_IE; + prevIME = REG_IME; + prevDispstat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + + WriteSaveGame(); + + REG_IE = prevIE; + REG_IE; + REG_IME = prevIME; + REG_IME; + REG_DISPSTAT = prevDispstat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + + gFlags &= ~FLAGS_8000; + } + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + sub_80535FC(); + UiGfxStackInit(); + gDispCnt = 0x1740; + gBgCntRegs[0] = 0x8583; + gBgCntRegs[1] = 0x9E86; + gBgCntRegs[2] = 0x9B89; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + task64_0 = TaskCreate(Task_8068628, sizeof(ExtraStageResults_64), 0x2120U, 0U, NULL); + strc64 = TASK_DATA(task64_0); + s = &strc64->s; + strc64->unk3C = 0; + strc64->qUnk44[0] = Q(160); + strc64->qUnk54[0] = -Q(32); + s->graphics.dest = OBJ_VRAM0 + 0x2560; + s->graphics.anim = SA1_ANIM_FINAL_CUTSCENE_SPARKLE_B; + s->variant = 0; +#ifdef BUG_FIX + s->x = 160; + s->y = -32; +#else + s->x = Q(160); // NOTE: These shouldn't be Q()! + s->y = -Q(32); // NOTE: These shouldn't be Q()! +#endif + s->oamFlags = SPRITE_OAM_ORDER(3); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + + task64_1 = TaskCreate(Task_8068620, sizeof(ExtraStageResults_64), 0x2120U, 0U, NULL); + strc64 = TASK_DATA(task64_1); + s = &strc64->s; + strc64->unk3C = 0; + strc64->qUnk44[0] = Q(DISPLAY_CENTER_X); + strc64->qUnk54[0] = Q(DISPLAY_CENTER_Y + 10); + s->graphics.dest = OBJ_VRAM0 + 0x440; + s->graphics.anim = SA1_END_CUTSCENE_PILOT_FACE; + s->variant = 1; // Tails + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->oamFlags = SPRITE_OAM_ORDER(3); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + + task64_2 = TaskCreate(Task_8068624, sizeof(ExtraStageResults_64), 0x2120U, 0U, NULL); + strc64 = TASK_DATA(task64_2); + s = &strc64->s; + strc64->unk3C = 0; + strc64->qUnk44[0] = Q(DISPLAY_CENTER_X); + strc64->qUnk54[0] = Q(DISPLAY_CENTER_Y + 10); + s->graphics.dest = OBJ_VRAM0 + 0x560; + s->graphics.anim = SA1_ANIM_FINAL_CUTSCENE_TORNADO_SIDE; + s->variant = 0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->oamFlags = SPRITE_OAM_ORDER(6); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + + task64_3 = TaskCreate(Task_806806C, sizeof(ExtraStageResults_64), 0x2120U, 0U, NULL); + strc64 = TASK_DATA(task64_3); + s = &strc64->s; + strc64->unk3C = 0; + strc64->qUnk44[0] = 105; + strc64->qUnk54[0] = 17; + strc64->qUnk44[1] = 47; + strc64->qUnk54[1] = 95; + strc64->qUnk44[2] = 213; + strc64->qUnk54[2] = 69; + strc64->qUnk44[3] = 168; + strc64->qUnk54[3] = 95; + s->graphics.dest = OBJ_VRAM0 + 0x20; + s->graphics.anim = 731; + s->variant = 0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + + for (i2 = 0; i2 < ARRAY_COUNT(tasks); i2++) { + struct Task *t = TaskCreate(Task_nullsub_8068448, sizeof(ExtraStageResults_64_2), 0x2120U, 0U, NULL); + tasks[i2] = t; + strc64 = TASK_DATA(t); + s = &strc64->s; + strc64->unk3C = 0; + if (i2 == 0) { + strc64->qUnk54[0] = Q(50); + strc64->qUnk44[0] = Q(80); + strc64->qUnk44[1] = 0x80; + strc64->qUnk54[1] = 0; + s->graphics.dest = OBJ_VRAM0 + 0x6060; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_XS; + s->variant = 0; + } else if (i2 == 1) { + strc64->qUnk54[0] = Q(100); + strc64->qUnk44[0] = Q(40); + strc64->qUnk44[1] = 0x40; + strc64->qUnk54[1] = 0U; + s->graphics.dest = OBJ_VRAM0 + 0x61A0; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_S; + s->variant = 0; + } else if (i2 == 2) { + strc64->qUnk54[0] = Q(120); + strc64->qUnk44[0] = Q(120); + strc64->qUnk44[1] = 0x100; + strc64->qUnk54[1] = 0U; + s->graphics.dest = OBJ_VRAM0 + 0x6440; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_M; + s->variant = 0; + } else { + strc64->qUnk54[0] = Q(20); + strc64->qUnk44[0] = Q(160); + strc64->qUnk44[1] = 0xC0; + strc64->qUnk54[1] = 0U; + s->graphics.dest = OBJ_VRAM0 + 0x70A0; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_L; + s->variant = 0; + } + + s->x = 180; + s->y = 80; + s->oamFlags = SPRITE_OAM_ORDER(12); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + } + + task64_4 = TaskCreate(Task_8067F38, sizeof(ExtraStageResults_64), 0x2120U, 0U, NULL); + strc64 = TASK_DATA(task64_4); + s = &strc64->s; + strc64->unk3C = 0; + strc64->qUnk54[0] = 0; + strc64->qUnk44[0] = 0; + strc64->qUnk54[1] = 0; + strc64->qUnk44[1] = 0; + strc64->qUnk54[2] = 0; + strc64->qUnk44[2] = 0; + s->graphics.dest = OBJ_VRAM0 + 0xA0; + if (LOADED_SAVE->uiLanguage != UILANG_JAPANESE) { + s->graphics.anim = SA1_ANIM_A_FEW_DAYS_LATER_EN; + s->variant = 0; + } else { + s->graphics.anim = SA1_ANIM_A_FEW_DAYS_LATER_JP; + s->variant = 0; + } + s->x = 120; + s->y = 80; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x80; + temp_r2_6 = TaskCreate(Task_8067824, sizeof(ExtraStageResultsState), 0x2100U, 0U, NULL); + state = TASK_DATA(temp_r2_6); + state->unk38 = 0; + state->unk3C = 0x3C; + state->unk40 = 1; + state->taskC = task64_4; + state->task14 = task64_0; + state->task10 = task64_3; + state->task18 = task64_2; + state->task1C = task64_1; + state->tasks20[0] = tasks[0]; + state->tasks20[1] = tasks[1]; + state->tasks20[2] = tasks[2]; + state->tasks2C[0] = tasks[3]; + state->unk44 = 0; + state->unk48 = 0; + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 8; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + sub_80543A4(&state->strc0); + + gfx.uiGfxID = 128; + gfx.unk2B = 2; + gfx.tiles = &gUnknown_086C5D74[0]; + gfx.tilesSize = sizeof(gUnknown_086C5D74); + gfx.palette = &gUnknown_086C5B74[0]; + gfx.paletteSize = sizeof(gUnknown_086C5B74); + gfx.layout = &gUnknown_086C7C34[0]; + gfx.layoutSize = sizeof(gUnknown_086C7C34); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + + gfx.uiGfxID = 128; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086BF9B4[0]; + gfx.tilesSize = sizeof(gUnknown_086BF9B4); + gfx.palette = &gUnknown_086BF7B4[0]; + gfx.paletteSize = sizeof(gUnknown_086BF7B4); + gfx.layout = &gUnknown_086C5174[0]; + gfx.layoutSize = sizeof(gUnknown_086C5174); + gfx.unk28 = 0; + gfx.unk29 = 2; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + + gfx.uiGfxID = 128; + gfx.unk2B = 1; + gfx.tiles = &gUnknown_086C8834[0]; + gfx.tilesSize = sizeof(gUnknown_086C8834); + gfx.palette = &gUnknown_086C8634[0]; + gfx.paletteSize = sizeof(gUnknown_086C8634); + gfx.layout = &gUnknown_086CBD74[0]; + gfx.layoutSize = sizeof(gUnknown_086CBD74); + gfx.unk28 = 0; + gfx.unk29 = 1; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); +} + +void sub_80677C4(s32 i) +{ + Strc_80528AC gfx; + + if (i == 1) { + UiGfxStackInit(); + gfx.uiGfxID = 128; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086BBE34[0]; + gfx.tilesSize = sizeof(gUnknown_086BBE34); + gfx.palette = &gUnknown_086BBC34[0]; + gfx.paletteSize = sizeof(gUnknown_086BBC34); + gfx.layout = &gUnknown_086BE7B4[0]; + gfx.layoutSize = sizeof(gUnknown_086BE7B4); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + } +} + +void Task_8067824(void) +{ + ExtraStageResultsState *state = TASK_DATA(gCurTask); + ExtraStageResults_64 *strc64_0 = TASK_DATA(state->taskC); + ExtraStageResults_64 *strc64_1 = TASK_DATA(state->task10); + s32 v0; + s32 v1; + + u32 temp_r6 = (state->unk38 + 1); + sub_80684F4__inline(temp_r6); + + if (temp_r6 == state->unk3C) { + m4aSongNumStart(MUS_CUTSCENE_A_FEW_DAYS_LATER); + } + + v0 = Div(0x2000, 0x80); + v1 = state->unk3C; + v1 += 0x21C; + if ((v0 + v1) < temp_r6) { + temp_r6 = 0; + state->unk38 = temp_r6; + strc64_0->unk3C = temp_r6; + TaskDestroy(state->task10); + state->taskC->main = Task_806853C; + gCurTask->main = sub_8067928; + } else { + s32 divRes2 = Div(0x2000, 0x80); + s32 v0 = Div(0x2000, 0x80); + s32 v1 = state->unk3C; + v1 += 0x21C; + if ((divRes2 + v1 - v0) == temp_r6) { + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 1; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + } + + sub_805423C(&state->strc0); + state->unk38 = temp_r6; + strc64_0->unk3C = temp_r6; + strc64_1->unk3C = temp_r6; + strc64_0->unk40 = state->unk3C; + strc64_1->unk40 = state->unk3C; + } +} + +void sub_8067928() +{ + ExtraStageResults_64 *task; + u32 var_r5; + + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + task = TASK_DATA(state->taskC); + var_r5 = state->unk38 + 1; + if ((u32)(Div(0x2000, 0x80) + 600) < var_r5) { + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x9B83; + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 2; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + sub_805423C(&state->strc0); + var_r5 = 0; + state->tasks20[0]->main = Task_8068360; + state->tasks20[1]->main = Task_8068360; + state->tasks20[2]->main = Task_8068360; + state->tasks2C[0]->main = Task_8068360; + state->task14->main = Task_806862C; + state->task18->main = Task_8068214; + state->task1C->main = Task_8068148; + state->taskC->main = Task_806856C; + gCurTask->main = Task_80679E4; + } + + state->unk38 = var_r5; + task->unk3C = var_r5; +} + +void Task_80679E4() +{ + ExtraStageResults_64 *sp0; + ExtraStageResults_64 *sp4; + ExtraStageResults_64 *temp_sb; + ExtraStageResults_64 *temp_sl; + u32 temp_r5; + + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + temp_sb = TASK_DATA(state->taskC); + sp0 = TASK_DATA(state->task1C); + sp4 = TASK_DATA(state->task14); + temp_sl = TASK_DATA(state->task18); + temp_r5 = state->unk38 + 1; + sub_80677C4(temp_r5); + gBgScrollRegs[0][1] = 0x128; + if (temp_r5 > 0x336U) { + temp_r5 = 0; + state->unk38 = 0; + temp_sb->unk3C = 0U; + TaskDestroy(state->tasks20[0]); + TaskDestroy(state->tasks20[1]); + TaskDestroy(state->tasks20[2]); + TaskDestroy(state->tasks2C[0]); + TaskDestroy(state->task1C); + TaskDestroy(state->task14); + TaskDestroy(state->task18); + state->taskC->main = Task_8068570; + gCurTask->main = Task_8067B14; + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x14; + gBgScrollRegs[0][1] = 0; + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 2; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + } else { + if ((0x336 - Div(0x2000, 0x80)) == temp_r5) { + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 1; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + } + sub_805423C(&state->strc0); + state->unk38 = (s32)temp_r5; + temp_sb->unk3C = temp_r5; + sp0->unk3C = temp_r5; + sp4->unk3C = temp_r5; + temp_sl->unk3C = temp_r5; + } +} + +void Task_8067B14() +{ + ExtraStageResults_64 *sp0; + ExtraStageResults_64 *sp4; + ExtraStageResults_64 *temp_sb; + ExtraStageResults_64 *temp_sl; + u32 temp_r5; + + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + temp_sb = TASK_DATA(state->taskC); + sp0 = TASK_DATA(state->task1C); + sp4 = TASK_DATA(state->task14); + temp_sl = TASK_DATA(state->task18); + temp_r5 = state->unk38 + 1; + if (temp_r5 > 400) { + temp_r5 = 0; + state->unk38 = 0; + temp_sb->unk3C = 0U; + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 2; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + state->taskC->main = Task_80685C8; + gCurTask->main = Task_8067B9C; + } else { + if ((400 - Div(0x2000, 0x80)) == temp_r5) { + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 1; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + } + + sub_805423C(&state->strc0); + state->unk38 = (s32)temp_r5; + temp_sb->unk3C = temp_r5; + } +} + +void Task_8067B9C() +{ + ExtraStageResults_64 *sp0; + ExtraStageResults_64 *sp4; + ExtraStageResults_64 *temp_sb; + ExtraStageResults_64 *temp_sl; + u32 temp_r5; + + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + temp_sb = TASK_DATA(state->taskC); + sp0 = TASK_DATA(state->task1C); + sp4 = TASK_DATA(state->task14); + temp_sl = TASK_DATA(state->task18); + temp_r5 = state->unk38 + 1; + if (temp_r5 > 400) { + temp_r5 = 0; + state->unk38 = 0; + temp_sb->unk3C = 0U; + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 2; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + state->taskC->main = Task_8067F9C; + gCurTask->main = Task_8067C24; + } else { + if ((400 - Div(0x2000, 0x80)) == temp_r5) { + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 1; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + } + + sub_805423C(&state->strc0); + state->unk38 = (s32)temp_r5; + temp_sb->unk3C = temp_r5; + } +} + +// (81.56%) https://decomp.me/scratch/L5YKY +NONMATCH("asm/non_matching/game/extra_stage_results__Task_8067C24.inc", void Task_8067C24()) +{ + struct Task *tasks[3]; + u32 sp10; + ExtraStageResults_64 *sp14; + ExtraStageResults_164 *temp_r3_2; + Sprite *s; + s32 temp_r0; + s32 var_r0; + s32 var_r0_2; + s32 var_r3; + u16 var_r8_2; + s8 *temp_r1_5; + struct Task *temp_r0_5; + u16 temp_r0_3; + u16 temp_r0_4; + u16 temp_r1; + u16 temp_r1_2; + u16 temp_r1_4; + u16 var_r8; + u32 temp_r0_2; + u32 temp_r1_3; + u32 temp_r2; + u32 temp_r3; + u32 temp_r4; + u32 temp_r5; + u32 temp_r6; + u32 temp_r7; + + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + sp14 = TASK_DATA(state->taskC); + temp_r0 = state->unk38; + sp10 = temp_r0 + 1; + temp_r0_2 = temp_r0 - 0xB3; + if (temp_r0_2 <= 0x80U) { + temp_r7 = temp_r0_2 >> 4; + for (var_r8 = 2; var_r8 < 16; var_r8++) { + temp_r1 = gUiPaletteSoundTestBox3[var_r8]; + temp_r3 = 0x1F; + temp_r3 &= temp_r1; + temp_r5 = (u32)(0x3E0 & temp_r1) >> 5; + temp_r4 = (u32)(0x7C00 & temp_r1) >> 0xA; + temp_r1_2 = gUiPaletteSoundTestBox4[var_r8]; + temp_r2 = 0x1F & temp_r1_2; + temp_r6 = (u32)(0x3E0 & temp_r1_2) >> 5; + temp_r1_3 = (u32)(0x7C00 & temp_r1_2) >> 0xA; + if (temp_r3 > temp_r2) { + var_r3 = (temp_r3 - ((u32)(temp_r7 * (temp_r3 - temp_r2)) >> 3)) & 0x1F; + } else { + var_r3 = (temp_r3 + ((u32)(temp_r7 * (temp_r2 - temp_r3)) >> 3)) & 0x1F; + } + if (temp_r5 > temp_r6) { + var_r0 = temp_r5 - ((u32)(temp_r7 * (temp_r5 - temp_r6)) >> 3); + } else { + var_r0 = temp_r5 + ((u32)(temp_r7 * (temp_r6 - temp_r5)) >> 3); + } + if (temp_r4 > temp_r1_3) { + var_r0_2 = (temp_r4 - ((u32)(temp_r7 * (temp_r4 - temp_r1_3)) >> 3)) & 0x1F; + } else { + var_r0_2 = (temp_r4 + ((u32)(temp_r7 * (temp_r1_3 - temp_r4)) >> 3)) & 0x1F; + } + gObjPalette[14 * 16 + var_r8] = (var_r0_2 << 0xA) | (var_r3 | ((var_r0 & 0x1F) << 5)); + } + + gFlags |= FLAGS_UPDATE_SPRITE_PALETTES; + } + + if (sp10 > 0x190U) { + sp10 = 0; + for (var_r8_2 = 0; var_r8_2 < 3; var_r8_2++) { + temp_r0_5 = TaskCreate(Task_8066D64, sizeof(ExtraStageResults_164), 0x2120U, 0U, NULL); + tasks[var_r8_2] = temp_r0_5; + temp_r3_2 = TASK_DATA(temp_r0_5); + s = &temp_r3_2->s; + temp_r3_2->unk3C = 0; + temp_r3_2->unk4C = 0xF; + temp_r3_2->unk48 = 0; + temp_r3_2->unk44 = var_r8_2; + temp_r3_2->unk40 = 0; + if (var_r8_2 == 0) { + s->graphics.dest = OBJ_VRAM0 + 0x6060; + s->graphics.anim = 0x311; + s->variant = 0; + } else if (var_r8_2 == 1) { + s->graphics.dest = OBJ_VRAM0 + 0x6920; + s->graphics.anim = 0x311; + s->variant = 1; + } else { + s->graphics.dest = OBJ_VRAM0 + 0x6E20; + s->graphics.anim = 0x311; + s->variant = 2; + } + s->x = 0xB4; + s->y = 0x50; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + state->tasks20[var_r8_2] = tasks[var_r8_2]; + } + state->taskC->main = Task_8068004; + gCurTask->main = Task_8067E68; + } + sub_805423C(&state->strc0); + state->unk38 = (s32)sp10; + sp14->unk3C = sp10; +} +END_NONMATCH + +void Task_8067E68() +{ + ExtraStageResults_64_2 *tasks[3]; + ExtraStageResults_64 *temp_r8; + s16 temp_r1; + s32 temp_r7; + u32 temp_r5; + + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + temp_r8 = TASK_DATA(state->taskC); +#ifndef BUG_FIX + // [0] gets initialized, but not really used... + tasks[0] = TASK_DATA(state->tasks2C[0]); + // These never get initialized or used + tasks[1] = TASK_DATA(state->tasks2C[1]); + tasks[2] = TASK_DATA(state->tasks2C[2]); +#endif + temp_r7 = state->unk38; + temp_r5 = temp_r7 + 1; + if (temp_r5 > 0x190U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + CreateStaffCredits(); + return; + } else { + if ((0x190 - Div(0x2000, 0x80)) == temp_r5) { + state->strc0.unk0 = 0; + state->strc0.unk2 = 1; + state->strc0.unk4 = 1; + state->strc0.unk6 = 0; + state->strc0.unk8 = 0x80; + state->strc0.unkA = 1; + } + sub_805423C(&state->strc0); + state->unk38 = (s32)temp_r5; + temp_r8->unk3C = temp_r5; +#ifndef BUG_FIX + tasks[0]->unk3C = temp_r7 + 0x14B; + tasks[1]->unk3C = temp_r7 + 0x14B; + tasks[2]->unk3C = temp_r7 + 0x14B; +#endif + } +} + +void Task_8067F38() +{ + s32 temp_r0; + s32 temp_r0_2; + s32 temp_r0_3; + s32 temp_r0_4; + s32 temp_r0_5; + s32 temp_r0_6; + u32 unk3C; + + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + + unk3C = strc64->unk3C; + if ((strc64->unk40 + 60) <= unk3C) { + strc64->qUnk54[0] += Q(85. / 256.); + gBgScrollRegs[0][1] = I(strc64->qUnk54[0]); + if (gBgScrollRegs[0][1] > 71) { + gBgScrollRegs[0][1] = 71; + } + + strc64->qUnk54[1] += Q(96. / 256.); + gBgScrollRegs[1][1] = I(strc64->qUnk54[1]); + if (gBgScrollRegs[1][1] > 80) { + gBgScrollRegs[1][1] = 80; + } + + strc64->qUnk54[2] += Q(0.75); + gBgScrollRegs[2][1] = I(strc64->qUnk54[2]); + if (gBgScrollRegs[2][1] > 160) { + gBgScrollRegs[2][1] = 160; + } + } +} + +void Task_8067F9C() +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + + if (strc64->unk3C == 0) { + strc64->s.prevVariant = -1; + strc64->s.graphics.dest = OBJ_VRAM0 + 0x26E0; + strc64->s.graphics.anim = SA1_ANIM_FINAL_CUTSCENE_ART_B; + strc64->s.variant = 0; + strc64->s.x = DISPLAY_CENTER_X; + strc64->s.y = DISPLAY_CENTER_Y; + strc64->s.oamFlags = 0x3C0; + strc64->s.frameFlags = 0x2000; + } + UpdateSpriteAnimation(&strc64->s); + DisplaySprite(&strc64->s); +} + +void Task_8068004() +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + + if (strc64->unk3C == 0) { + strc64->s.prevVariant = -1; + strc64->s.graphics.dest = OBJ_VRAM0 + 0x26E0; + strc64->s.graphics.anim = SA1_ANIM_FINAL_CUTSCENE_ART_B; + strc64->s.variant = 1; + strc64->s.x = DISPLAY_CENTER_X; + strc64->s.y = DISPLAY_CENTER_Y; + strc64->s.oamFlags = 0x3C0; + strc64->s.frameFlags = 0x2000; + } + UpdateSpriteAnimation(&strc64->s); + DisplaySprite(&strc64->s); +} + +void Task_806806C() +{ + s32 temp_r4; + u8 remainder; + u8 whole; + s32 unk3C; + s32 *ptr; + + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s; + + temp_r4 = strc64->unk3C; + unk3C = strc64->unk3C; + if (unk3C > (u32)strc64->unk40) { + whole = Div(unk3C - strc64->unk40, 0x10); + remainder = Mod(unk3C - strc64->unk40, 0x10); + + if (whole == 0 || whole == 2) { + if (whole == 2) { + whole = 3; + } + s = &strc64->s; + if (remainder == 0) { + s->prevVariant = -1; + } + s->x = strc64->qUnk44[whole]; + s->y = strc64->qUnk54[whole]; + UpdateSpriteAnimation(&strc64->s); + DisplaySprite(&strc64->s); + } else if (whole == 1) { + s = &strc64->s; + if (remainder == 0) { + s->prevVariant = -1; + } + + ptr = &strc64->qUnk44[1]; + s->x = *ptr; + ptr = &strc64->qUnk54[1]; + s->y = *ptr; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + ptr = &strc64->qUnk44[2]; + s->x = *ptr; + ptr = &strc64->qUnk54[2]; + s->y = *ptr; + DisplaySprite(s); + } + } +} + +void Task_8068148(void) +{ + u32 angle; + + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + angle = strc64->unk3C; + if (angle == 0x78) { + s->graphics.anim = 0xBF; + s->variant = 0; + s->prevVariant = -1; + } else if (angle == 0x1E0) { + s->graphics.anim = 0xBF; + s->variant = 1; + s->prevVariant = -1; + } + if ((u32)angle <= 0x257U) { + int index = (angle & 0xFF); + strc64->qUnk54[0] += SIN(index * 4) >> 9; + } else if (angle < 663) { + strc64->qUnk54[0] += Div(SIN((angle - 600) * 4), 0x1A); + } else { + strc64->qUnk44[0] = 0x8C00; + } + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8068214() +{ + s16 temp_r4; + s32 temp_r2; + u32 angle; + s32 val; + SpriteTransform *tf; + + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + tf = &strc64->transform; + angle = strc64->unk3C; + if ((u32)angle <= 0x257U) { + angle &= 0xFF; + val = (SIN(angle * 4) >> 9); + strc64->qUnk54[0] += val; + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); + } else if ((u32)angle <= 0x296U) { + val = Div(SIN((angle - 600) * 4), 0x1A); + strc64->qUnk54[0] += val; + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); + } else if ((u32)angle <= 0x2BBU) { + strc64->qUnk44[0] = 0xB400; + strc64->qUnk54[0] = 0xB400; + if (angle == 0x2BB) { + s->graphics.anim = 0x2DF; + s->variant = 0; + s->prevVariant = -1; + s->frameFlags = 0x106B; + UpdateSpriteAnimation(s); + } + } else { + temp_r4 = SIN((0x3BB - angle) * 4); + strc64->qUnk54[0] += Div((s32)temp_r4, 36); + strc64->qUnk44[0] += Div((s32)temp_r4, 18); + temp_r2 = angle + 0xFFFFFD44; + tf->rotation = (s16)(0x3FF & ~(temp_r2 * 2)); + tf->qScaleX = Q(1.5) - (temp_r2 * 3); + tf->qScaleY = Q(1.5) - (temp_r2 * 3); + tf->x = I(strc64->qUnk44[0]); + tf->y = I(strc64->qUnk54[0]); + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + TransformSprite(s, tf); + DisplaySprite(s); + } +} + +void Task_8068360() +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + strc64->qUnk44[0] += strc64->qUnk44[1]; + if (strc64->qUnk44[0] > Q(272)) { + strc64->qUnk44[0] = -Q(120); + } + if (strc64->qUnk44[0] < -Q(120)) { + strc64->qUnk44[0] = Q(272); + } + + strc64->qUnk54[0] += strc64->qUnk54[1]; + if (strc64->qUnk54[0] > Q(172)) { + strc64->qUnk54[0] = -Q(16); + } + if (strc64->qUnk54[0] < -Q(16)) { + strc64->qUnk54[0] = Q(172); + } + + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void sub_80683D8(void) +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + strc64->qUnk44[0] += Q(8); + strc64->qUnk54[0] += Q(8); + strc64->qUnk44[0] += strc64->qUnk44[1]; + if (strc64->qUnk44[0] > Q(272)) { + strc64->qUnk44[0] -= Q(300); + } + + strc64->qUnk54[0] += strc64->qUnk54[1]; + if (strc64->qUnk54[0] > Q(172)) { + strc64->qUnk54[0] -= Q(300); + } + + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_nullsub_8068448(void) { } + +void sub_806844C() +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + strc64->qUnk54[0] += strc64->qUnk54[1]; + + if (strc64->qUnk54[0] < -Q(16)) { + strc64->qUnk54[0] = +Q(172); + strc64->qUnk44[0] += strc64->qUnk44[1] * 200; + + if (strc64->qUnk44[0] > Q(272)) { + strc64->qUnk44[0] -= Q(300); + } + } + + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_80684B4() +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + if (strc64->qUnk54[0] >= -Q(16)) { + strc64->qUnk54[0] += strc64->qUnk54[1]; + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void sub_80684F4(s32 comp) +{ + ExtraStageResultsState *state = TASK_DATA(gCurTask); + + if (comp == 25) { + UiGfxStackInit(); + sub_80538BC(); + } else if (comp == 30) { + state->unk3C = CreateStageResults((u32)gRingCount, gCourseTime); + return; + } +} + +void sub_8068538(void) { } + +void Task_806853C(void) +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + if (strc64->unk3C < 600) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_806856C(void) { } + +void Task_8068570() +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + u32 temp_r3; + + if (strc64->unk3C == 0) { + strc64->s.prevVariant = -1; + strc64->s.graphics.dest = OBJ_VRAM0 + 0x26E0; + strc64->s.graphics.anim = SA1_ANIM_FINAL_CUTSCENE_ART_A; + strc64->s.variant = 0; + strc64->s.x = DISPLAY_CENTER_X; + strc64->s.y = DISPLAY_CENTER_Y; + strc64->s.frameFlags = 0; + } + UpdateSpriteAnimation(&strc64->s); + DisplaySprite(&strc64->s); +} + +void Task_80685C8() +{ + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + u32 temp_r3; + + if (strc64->unk3C == 0) { + strc64->s.prevVariant = -1; + strc64->s.graphics.dest = OBJ_VRAM0 + 0x26E0; + strc64->s.graphics.anim = SA1_ANIM_FINAL_CUTSCENE_ART_A; + strc64->s.variant = 1; + strc64->s.x = DISPLAY_CENTER_X; + strc64->s.y = DISPLAY_CENTER_Y; + strc64->s.frameFlags = 0; + } + UpdateSpriteAnimation(&strc64->s); + DisplaySprite(&strc64->s); +} + +void Task_8068620(void) { } + +void Task_8068624(void) { } + +void Task_8068628(void) { } + +void Task_806862C() +{ + s32 temp_r0; + s32 temp_r0_2; + + ExtraStageResults_64 *strc64 = TASK_DATA(gCurTask); + Sprite *s = &strc64->s; + + if (strc64->unk3C > 180) { + strc64->qUnk44[0] -= Q(96. / 256.); + if (strc64->qUnk44[0] < -Q(64)) { + strc64->qUnk44[0] = -Q(64); + } + strc64->qUnk54[0] += 0x30; + if (strc64->qUnk54[0] > Q(32)) { + strc64->qUnk54[0] = Q(32); + } + + s->x = I(strc64->qUnk44[0]); + s->y = I(strc64->qUnk54[0]); + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} diff --git a/sa1/src/game/game.c b/sa1/src/game/game.c new file mode 100644 index 0000000000..ba4eb187cd --- /dev/null +++ b/sa1/src/game/game.c @@ -0,0 +1,195 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "task.h" + +#include "game/game.h" +#include "game/save.h" + +#include "game/title_screen.h" +#include "game/options_screen.h" +#include "game/multiboot/connection.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/player.h" +//#include "game/sa1_sa2_shared/entities_manager.h" + +#include "game/character_select.h" +#include "game/stage/tilemap_table.h" +#include "game/stage/stage.h" +//#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/stage/underwater_effects.h" +#include "game/stage/dust_effect_braking.h" +#include "game/stage/rings_scatter.h" + +#include "game/dummy_task.h" +#include "game/water_effects.h" + +#if (GAME == GAME_SA1) +#include "game/gTask_03006240.h" +#endif + +#if TAS_TESTING +#include "data/recordings.h" +#endif + +#include "data/sprite_tables.h" + +void CreateEmptySaveGame(void); + +void GameInit(void) +{ + u32 i; + bool32 hasProfile = FALSE; + + // NOTE: cast because of const + gTilemapsRef = (Tilemap **)gTilemaps; + gRefSpriteTables = &gSpriteTables; + +#if (GAME != GAME_SA1) + gUnknown_03004D54 = gBgOffsetsBuffer[0]; + gBgOffsetsSecondary = gBgOffsetsBuffer[1]; +#endif + + gStageFlags = sa2__gUnknown_0300544C = STAGE_FLAG__CLEAR; + +#if (GAME == GAME_SA1) + // "Cheat Code" Tails + gTailsEnabled = FALSE; +#endif + + gRingsScatterTask = NULL; + gDummyTask = NULL; + gGameStageTask = NULL; + gPlayer.spriteTask = NULL; +#if (GAME == GAME_SA1) + // "Cheat Code" Tails + gPartner.spriteTask = NULL; +#endif + gCamera.movementTask = NULL; + + gDustEffectBrakingTask.t = NULL; + gWater.t = NULL; + + sa2__gUnknown_0300543C = 0; + gGameMode = GAME_MODE_SINGLE_PLAYER; + gEntitiesManagerTask = NULL; + gSmallAirBubbleCount = 0; + gDemoPlayCounter = 0; + gDestroySpotlights = FALSE; + + for (i = 0; i < 4; i++) { + gMultiplayerPlayerTasks[i] = NULL; + } + +#if (GAME == GAME_SA1) + gTask_03006240 = NULL; +#endif + + for (i = 0; i < 4; i++) { + gMultiplayerCharacters[i] = 0; + gMultiplayerRanks[i] = 0; + gMultiplayerMissingHeartbeats[i] = 0; + } + +#if (GAME == GAME_SA2) + SaveInit(); +#endif + + if (SaveGameExists() != TRUE) { + CreateEmptySaveGame(); + hasProfile = TRUE; + } + + // This flag is only set in EngineInit + if (gFlags & FLAGS_200) { + ShowSinglePakResults(); + return; + } + + if (gFlags & FLAGS_NO_FLASH_MEMORY) { +#if DEBUG + CreateCharacterSelectionScreen(CHARACTER_TAILS); +#else + CreateSegaLogo(); +#endif +#if (GAME == GAME_SA1) + for (i = 0; i < NUM_CHARACTERS; i++) { + LOADED_SAVE->unlockedLevels[i] = 0xF; + } +#elif (GAME == GAME_SA2) + LoadCompletedSaveGame(); +#endif + return; + } + +#if (GAME == GAME_SA1) + if (hasProfile) { + CreateEditLanguageScreen(1); + return; + } +#elif (GAME == GAME_SA2) + if (!hasProfile) { + CreateNewProfileScreen(); + } +#endif + + // When a special button combination is pressed + // skip the intro and go straight to the + // title screen + if (gFlags & FLAGS_SKIP_INTRO) { +#if (GAME == GAME_SA1) +#if DEBUG + CreateCharacterSelectionScreen(CHARACTER_TAILS); +#else + CreateTitleScreen(1); +#endif +#elif (GAME == GAME_SA2) + CreateTitleScreenAndSkipIntro(); +#endif + gFlags &= ~FLAGS_SKIP_INTRO; + return; + } + +#if (GAME == GAME_SA1) +#if DEBUG + CreateCharacterSelectionScreen(CHARACTER_TAILS); +#else + CreateSegaLogo(); +#endif +#elif (GAME == GAME_SA2) + CreateTitleScreen(); +#endif +} + +void CreateEmptySaveGame(void) +{ + u32 i; + + DmaFill32(3, 0, &gLoadedSaveGame, sizeof(gLoadedSaveGame)); + LOADED_SAVE->unk4 = 0; + LOADED_SAVE->unk420 = 50000; + LOADED_SAVE->difficultyLevel = DIFFICULTY_NORMAL; + + for (i = 0; i < ARRAY_COUNT(LOADED_SAVE->unlockedLevels); i++) { + LOADED_SAVE->unlockedLevels[i] = 0; + } + + for (i = 0; i < 10; i++) { + u32 charIndex; + + LOADED_SAVE->multiplayerScores[i].data.split.wins |= 0xFF; + for (charIndex = 0; charIndex < (s32)ARRAY_COUNT(LOADED_SAVE->multiplayerScores[i].data.split.playerName); charIndex++) { + LOADED_SAVE->multiplayerScores[i].data.split.playerName[charIndex] = ' '; + } + } + + DmaFill32(3, MAX_COURSE_TIME, &LOADED_SAVE->timeRecords, sizeof(LOADED_SAVE->timeRecords)); + + LOADED_SAVE->uiLanguage = UILANG_DEFAULT; + LOADED_SAVE->language = LANG_JAPANESE; + LOADED_SAVE->timeLimitDisabled = 0; + LOADED_SAVE->btnConfig = BTNCONFIG_NORMAL; + LOADED_SAVE->score = 0; +} diff --git a/sa1/src/game/game_2_1.c b/sa1/src/game/game_2_1.c new file mode 100644 index 0000000000..1262113305 --- /dev/null +++ b/sa1/src/game/game_2_1.c @@ -0,0 +1,1239 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/gTask_03006240.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/save.h" +#include "game/special_stage/main.h" +#include "game/stage/stage.h" + +#include "constants/ui_graphics.h" +#include "constants/vram_hardcoded.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct Game_2_1_2C { + u8 filler0[0xC]; + struct Task *taskC; + struct Task *task10; + struct Task *task14; + struct Task *task18; + struct Task *task1C; + struct Task *task20; + struct Task *task24; + s16 unk28; + u16 unk2A; +} Game_2_1_2C; + +typedef struct Game_2_1_34 { + union { + // TODO: This union might actually be their shared global type? + GameOverB overB; + Strc_8052C84 strc0; + } u; + s32 unk18; + s32 unk1C; + u16 unk20; + u16 unk22; + u16 unk24; + u16 unk26; + u8 unk28; + u8 unk29; + u8 unk2A; + u8 unk2B[7]; +} Game_2_1_34; + +void sub_805C900(u8 arg0); +void sub_805C994(u8 arg0); +void Task_805D684(void); +void Task_805D720(void); +void sub_805D81C(void); +void Task_805D8EC(void); +void sub_805D9E4(void); +void Task_805DB04(void); +void Task_805DD10(void); +void Task_805DF2C(void); +void sub_805E018(void); +void sub_805D4F0(void); +void TaskDestructor_805E1E4(struct Task *t); + +extern u8 gUnknown_08487134[NUM_TIME_ATTACK_ZONES * ACTS_PER_ZONE]; + +void sub_805C900(u8 arg0) +{ + s16 var_r4; + s32 temp_r0_2; + s32 strc34_2; + u8 *temp_r5; + s32 var_r6; + s32 temp_r0_3; + Game_2_1_34 *strc34; + + strc34 = TASK_DATA(gCurTask); + if (0) { + } else if (arg0 == 0) { + var_r6 = strc34->unk26 * 100; + } else if (arg0 == 1) { + var_r6 = strc34->unk18; + } else if (arg0 == 2) { + var_r6 = strc34->unk1C; + } else if (arg0 == 3) { + var_r6 = strc34->unk2A; + } + + for (var_r4 = 6; var_r4 >= 0; var_r4--) { + u8 *ptrUnk2B = strc34->unk2B; + temp_r0_2 = Div(var_r6, 10); + temp_r5 = &ptrUnk2B[var_r4]; + strc34_2 = ((temp_r0_2 << 3) + (temp_r0_2 << 1)); + temp_r0_3 = ((var_r6 - strc34_2) + 32); + *temp_r5 = temp_r0_3; + if ((var_r6 != strc34_2) && (arg0 == 3)) { + *temp_r5 = (temp_r0_3 + 0xB); + } + var_r6 = temp_r0_2; + } +} + +void sub_805C994(u8 arg0) +{ + Strc_80528AC gfx; + + gfx.uiGfxID = UIGFX_STGRESULT_HEADLINE_BACK; + gfx.unk2B = 8; + gfx.tiles = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].tiles; + gfx.palette = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].palette; + gfx.tilesSize = 0x200; + gfx.paletteSize = 0x20; + gfx.unk28 = 14; + gfx.vramC = OBJ_VRAM0 + 0x77A0; + gfx.unk2A = 13; + gfx.unk0.unk4 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk8; + gfx.unk0.unk8 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unkC; + gfx.unk0.unk9 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk10; + gfx.unk0.unkA = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk14; + gfx.unk0.unkB = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk18; + sub_80528AC(&gfx); + + if (arg0 != 0) { + gfx.uiGfxID = UIGFX_51; + gfx.unk2B = 2; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0xE00; + gfx.paletteSize = 0x20; + gfx.unk28 = 0xF; + gfx.vramC = OBJ_VRAM0 + 0x69A0; + gfx.unk2A = 13; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_STGRESULT_SONIC + gSelectedCharacter; + gfx.unk2B = 2; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x600; + gfx.paletteSize = 0xC; + gfx.unk28 = 15; + gfx.vramC = OBJ_VRAM0 + 0x63a0; + gfx.unk2A = 13; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + } else { + gfx.uiGfxID = UIGFX_53; + gfx.unk2B = 2; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x1400; + gfx.paletteSize = 0x20; + gfx.unk28 = 0xF; + gfx.vramC = OBJ_VRAM0 + 0x63A0; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + } + + gfx.uiGfxID = UIGFX_52; + gfx.unk2B = 3; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x1100; + gfx.paletteSize = 0x20; + gfx.unk28 = 0xE; + gfx.vramC = OBJ_VRAM0 + 0x52A0; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_54; + gfx.unk2B = 4; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x600; + gfx.paletteSize = 0x20; + gfx.unk28 = 0xD; + gfx.vramC = OBJ_VRAM0 + 0x4CA0; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_56; + gfx.unk2B = 5; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x20; + gfx.paletteSize = 0x20; + gfx.unk28 = 0xC; + gfx.vramC = OBJ_VRAM0 + 0x4CA0; + gfx.unk2A = 0xC; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_57; + gfx.unk2B = 5; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x20; + gfx.paletteSize = 0x20; + gfx.unk28 = 0xB; + gfx.vramC = OBJ_VRAM0 + 0x4CA0; + gfx.unk2A = 0xC; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_58; + gfx.unk2B = 5; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x20; + gfx.paletteSize = 0x20; + gfx.unk28 = 10; + gfx.vramC = OBJ_VRAM0 + 0x4CA0; + gfx.unk2A = 0xC; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_ASCII_CHARS; + gfx.unk2B = 6; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles + 0x400; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.vramC = OBJ_VRAM0 + 0x4A20; + gfx.tilesSize = 0x280; + gfx.paletteSize = 0x20; + gfx.unk28 = 0x9; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); +} + +// (91.64%) https://decomp.me/scratch/oLMqr +NONMATCH("asm/non_matching/game/game2_1__sub_805D048.inc", void sub_805D048(u8 arg0)) +{ + struct Task *task18; + struct Task *task1C; + struct Task *taskC; + struct Task *task24; + struct Task *task10; + struct Task *task14; + struct Task *t; + u32 sp20; + s32 sp24; + struct Task *task20; + Game_2_1_2C *temp_r0_10; + Game_2_1_34 *temp_r2; + s32 var_r8; + u16 temp_sl; + u16 var_r7; + u8 temp_r0; + u8 temp_sb; + + sub_80535FC(); + + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + gBgScrollRegs[3][0] = 0; + gBgScrollRegs[3][1] = 0; + + if (gSpecialStageCollectedRings >= gSpecialStageTargetRings) { + m4aSongNumStart(MUS_047); + sp24 = 1; + sp20 = 0x2710; + if (GetBit(LOADED_SAVE->chaosEmeralds, gUnknown_08487134[gCurrentLevel])) { + var_r8 = 1; + } else { + SetBit(LOADED_SAVE->chaosEmeralds, gUnknown_08487134[gCurrentLevel]); + var_r8 = 0; + } + } else { + m4aSongNumStart(MUS_SPECIAL_STAGE_RESULT_LOSE); + var_r8 = 0; + sp24 = 0; + sp20 = 0; + } + temp_sb = LOADED_SAVE->chaosEmeralds; + temp_sl = gSpecialStageCollectedRings; + temp_r0 = gUnknown_0300507C + var_r8; + SA2_LABEL(gUnknown_0300543C) = SA2_LABEL(gUnknown_0300543C) + temp_r0; + + INCREMENT_SCORE_A(sp20 + temp_sl * 100); + + if (sp20 > (temp_sl * 100)) { + var_r7 = Div(sp20, 100); + } else { + var_r7 = temp_sl; + } + + UiGfxStackInit(); + + task1C = TaskCreate(Task_805D684, sizeof(Game_2_1_34), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(task1C); + temp_r2->unk20 = 0; + temp_r2->unk22 = var_r7; + temp_r2->unk24 = 0; + temp_r2->u.strc0.unkA = 0xF0; + temp_r2->u.strc0.unkC = 0x7E; + temp_r2->u.strc0.byteCount = 8; + temp_r2->u.strc0.unk10 = 8; + temp_r2->u.strc0.unk12 = 0xE; + temp_r2->u.strc0.unk16 = 1; + temp_r2->u.strc0.unk8 = 0xA; + temp_r2->unk28 = sp24; + temp_r2->unk29 = temp_sb; + temp_r2->unk2A = temp_r0; + temp_r2->unk26 = temp_sl; + temp_r2->unk18 = sp20; + temp_r2->unk1C = 0; + + task18 = TaskCreate(Task_805D720, sizeof(Game_2_1_34), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(task18); + temp_r2->unk20 = 0; + temp_r2->unk22 = var_r7; + temp_r2->unk24 = 0; + temp_r2->u.strc0.unkA = 0x100; + temp_r2->u.strc0.unkC = 0x80; + temp_r2->u.strc0.byteCount = 9; + temp_r2->u.strc0.unk10 = 2; + temp_r2->u.strc0.unk12 = 0xF; + temp_r2->u.strc0.unk16 = 1; + temp_r2->u.strc0.unk8 = 0; + temp_r2->unk28 = sp24; + temp_r2->unk29 = temp_sb; + temp_r2->unk2A = temp_r0; + temp_r2->unk26 = temp_sl; + temp_r2->unk18 = sp20; + temp_r2->unk1C = 0; + + taskC = TaskCreate(Task_805D8EC, sizeof(Game_2_1_34), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(taskC); + temp_r2->unk20 = 0; + temp_r2->unk22 = var_r7; + temp_r2->unk24 = 0; + temp_r2->u.strc0.unk0 = 0x100; + temp_r2->u.strc0.unk2 = 0; + temp_r2->u.strc0.unk4 = 0; + temp_r2->u.strc0.unk6 = 0; + temp_r2->u.strc0.unkA = 0x39; + temp_r2->u.strc0.unkC = 0x49; + temp_r2->u.strc0.byteCount = 3; + temp_r2->u.strc0.unk10 = 3; + temp_r2->u.strc0.unk12 = 0xE; + temp_r2->u.strc0.unk16 = 1; + temp_r2->u.strc0.unk8 = 0x18; + temp_r2->unk28 = sp24; + temp_r2->unk29 = temp_sb; + temp_r2->unk2A = temp_r0; + temp_r2->unk26 = temp_sl; + temp_r2->unk18 = sp20; + temp_r2->unk1C = 0; + + task24 = TaskCreate(Task_805DB04, sizeof(Game_2_1_34), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(task24); + temp_r2->unk20 = 0; + temp_r2->unk22 = var_r7; + temp_r2->unk24 = 0; + temp_r2->u.strc0.unk0 = 0x100; + temp_r2->u.strc0.unk2 = 0; + temp_r2->u.strc0.unk4 = 0; + temp_r2->u.strc0.unk6 = 1; + temp_r2->u.strc0.unkA = 0x39; + temp_r2->u.strc0.unkC = 0x39; + temp_r2->u.strc0.byteCount = 3; + temp_r2->u.strc0.unk10 = 3; + temp_r2->u.strc0.unk12 = 0xE; + temp_r2->u.strc0.unk16 = 1; + temp_r2->u.strc0.unk8 = 0x10; + temp_r2->unk28 = sp24; + temp_r2->unk29 = temp_sb; + temp_r2->unk2A = temp_r0; + temp_r2->unk26 = temp_sl; + temp_r2->unk18 = sp20; + temp_r2->unk1C = 0; + + task10 = TaskCreate(Task_805DD10, sizeof(Game_2_1_34), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(task10); + temp_r2->unk20 = 0; + temp_r2->unk22 = var_r7; + temp_r2->unk24 = 0; + temp_r2->u.strc0.unk0 = 0x100; + temp_r2->u.strc0.unk2 = 0; + temp_r2->u.strc0.unk4 = 0; + temp_r2->u.strc0.unk6 = 2; + temp_r2->u.strc0.unkA = 0x39; + temp_r2->u.strc0.unkC = 0x39; + temp_r2->u.strc0.byteCount = 3; + temp_r2->u.strc0.unk10 = 3; + temp_r2->u.strc0.unk12 = 0xE; + temp_r2->u.strc0.unk16 = 1; + temp_r2->u.strc0.unk8 = 8; + temp_r2->unk28 = sp24; + temp_r2->unk29 = temp_sb; + temp_r2->unk2A = temp_r0; + temp_r2->unk26 = temp_sl; + temp_r2->unk18 = sp20; + temp_r2->unk1C = 0; + + task14 = TaskCreate(Task_805DF2C, sizeof(Game_2_1_34), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(task14); + temp_r2->unk20 = 0; + temp_r2->unk22 = var_r7; + temp_r2->unk24 = 0; + temp_r2->u.strc0.unk0 = 0x100; + temp_r2->u.strc0.unk2 = 0; + temp_r2->u.strc0.unk4 = 0; + temp_r2->u.strc0.unk6 = 3; + temp_r2->u.strc0.unkA = 0x39; + temp_r2->u.strc0.unkC = 0x39; + temp_r2->u.strc0.byteCount = 3; + temp_r2->u.strc0.unk10 = 3; + temp_r2->u.strc0.unk12 = 0xE; + temp_r2->u.strc0.unk16 = 1; + temp_r2->u.strc0.unk8 = 0; + temp_r2->unk28 = sp24; + temp_r2->unk29 = temp_sb; + temp_r2->unk2A = temp_r0; + temp_r2->unk26 = temp_sl; + temp_r2->unk18 = sp20; + temp_r2->unk1C = 0; + + task20 = TaskCreate(sub_805E018, sizeof(Game_2_1_34), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(task20); + temp_r2->unk20 = 0; + temp_r2->unk22 = var_r7; + temp_r2->unk24 = 0; + temp_r2->u.strc0.unkA = 0; + temp_r2->u.strc0.unkC = 0x29; + temp_r2->u.strc0.byteCount = 1; + temp_r2->u.strc0.unk10 = 4; + temp_r2->u.strc0.unk12 = 0xD; + temp_r2->u.strc0.unk16 = 1; + temp_r2->u.strc0.unk8 = 0; + temp_r2->unk28 = sp24; + temp_r2->unk29 = temp_sb; + temp_r2->unk2A = temp_r0; + temp_r2->unk26 = temp_sl; + temp_r2->unk18 = sp20; + temp_r2->unk1C = 0; + + temp_r0_10 = TASK_DATA(TaskCreate(sub_805D4F0, sizeof(Game_2_1_2C), 0x2100U, 0U, TaskDestructor_805E1E4)); + temp_r0_10->unk28 = 0; + temp_r0_10->unk2A = var_r7; + temp_r0_10->task1C = task1C; + temp_r0_10->task18 = task18; + temp_r0_10->taskC = taskC; + temp_r0_10->task24 = task24; + temp_r0_10->task10 = task10; + temp_r0_10->task14 = task14; + temp_r0_10->task20 = task20; + + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x20; + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = -1; + gBgSprites_Unknown2[1][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = -1; + gBgSprites_Unknown2[2][3] = 0x20; + gBgSprites_Unknown1[3] = 0; + gBgSprites_Unknown2[3][0] = 0; + gBgSprites_Unknown2[3][1] = 0; + gBgSprites_Unknown2[3][2] = -1; + gBgSprites_Unknown2[3][3] = 0x20; + + sub_805C994(arg0); +} +END_NONMATCH + +// (91.30%) https://decomp.me/scratch/ayTm4 +NONMATCH("asm/non_matching/game/game2_1__sub_805D4F0.inc", void sub_805D4F0()) +{ + u8 unused[4]; + s32 temp_r6; + + Game_2_1_2C *strc2C = TASK_DATA(gCurTask); + Game_2_1_34 *subA = TASK_DATA(strc2C->task1C); + Game_2_1_34 *subB = TASK_DATA(strc2C->task18); + Game_2_1_34 *subC = TASK_DATA(strc2C->taskC); + Game_2_1_34 *subD = TASK_DATA(strc2C->task24); + Game_2_1_34 *subE = TASK_DATA(strc2C->task10); + Game_2_1_34 *subF = TASK_DATA(strc2C->task14); + Game_2_1_34 *subG = TASK_DATA(strc2C->task20); + + subA->unk20 = strc2C->unk28; + subB->unk20 = strc2C->unk28; + subC->unk20 = strc2C->unk28; + subD->unk20 = strc2C->unk28; + subE->unk20 = strc2C->unk28; + subF->unk20 = strc2C->unk28; + subG->unk20 = strc2C->unk28; + + if (strc2C->unk28 > 0xA9) { + if (subF->unk26 != 0) { + if (--subF->unk26 == 0) { + subF->unk26 = 0; // lol + } + + subD->unk1C += 100; + } + + if (subE->unk18 != 0) { + subE->unk18 -= 100; + subD->unk1C += 100; + } + } + + if ((strc2C->unk2A + 615) < ++strc2C->unk28) { + gPlayer.checkPointX -= 16; + gPlayer.checkPointY -= 16; + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + temp_r6 = gCourseTime; + CreateGameStage(); + gPlayer.checkPointX = gSpecialStageReturnX; + gPlayer.checkPointY = gSpecialStageReturnY; + gPlayer.SA2_LABEL(unk99)[1] = 1; + gCourseTime = temp_r6; + return; + } + + if (strc2C->unk28 == (strc2C->unk2A + 0xAA)) { + if (subC->unk2A != 0) { + m4aSongNumStart(0x9AU); + } else { + m4aSongNumStart(0x8DU); + } + } + + if ((strc2C->unk28 > 0xAA) && (strc2C->unk28 < (strc2C->unk2A + 0xAA)) && (Mod(strc2C->unk28, 4) == 0)) { + m4aSongNumStart(0x8CU); + } +} +END_NONMATCH + +void Task_805D684(void) +{ + s16 unk20; + s16 temp_r1; + Game_2_1_34 *temp_r2; + + temp_r2 = TASK_DATA(gCurTask); + + unk20 = temp_r2->unk20; + if (unk20 > ((u16)temp_r2->unk22 + 0x221)) { + if (temp_r2->u.overB.qUnkA < -32) { + temp_r2->u.overB.qUnkA += 32; + if (temp_r2->u.strc0.byteCount != 0) { + temp_r2->u.strc0.byteCount--; + } + } + temp_r2->u.overB.qUnkA -= 0x1A; + } else if (unk20 > 0x31) { + temp_r2->u.strc0.unkC = 0x11U; + } else if (unk20 > 0x21) { + temp_r2->u.strc0.unkC -= 6; + } else if (unk20 > 0x19) { + temp_r2->u.overB.qUnkA = 0xFFF0U; + } else if (unk20 > 0xF) { + temp_r2->u.overB.qUnkA -= 0x1A; + if (temp_r2->u.overB.qUnkA < -0x10) { + temp_r2->u.overB.qUnkA = -0x10; + } + } + sub_8052F78(" ", &temp_r2->u.overB); +} + +void Task_805D720() +{ + s16 var_r0_2; + s16 unk20; + Game_2_1_34 *strc34; + + const char sp00[] = " !\"#$%&'() !\"#$%&'() !\"#$%&'()"; + + strc34 = TASK_DATA(gCurTask); + unk20 = strc34->unk20; + if (unk20 > ((u16)strc34->unk22 + 0x221)) { + strc34->u.overB.qUnkA -= 0x1C; + if (strc34->u.overB.qUnkA < -0x1F) { + if (strc34->u.overB.unkE != 0) { + strc34->u.overB.unkE--; + } + strc34->u.overB.qUnkA += 0x20; + strc34->unk24 = Mod(strc34->unk24 + 1, 10); + } + + sub_8052F78((const char *)&sp00[strc34->unk24], &strc34->u.overB); + } else if (unk20 > 49) { + strc34->u.overB.unkC = 0x13; + strc34->u.overB.qUnkA -= 2; + + if (strc34->u.overB.qUnkA < -0x1F) { + strc34->u.overB.qUnkA += 0x20; + strc34->unk24 = Mod(strc34->unk24 + 1, 0xA); + } + + sub_8052F78((const char *)&sp00[strc34->unk24], &strc34->u.overB); + } else if (unk20 > 33) { + strc34->u.overB.unkC -= 6; + strc34->u.overB.qUnkA -= 2; + + if (strc34->u.overB.qUnkA < -0x1F) { + strc34->u.overB.qUnkA += 0x20; + strc34->unk24 = Mod(strc34->unk24 + 1, 0xA); + } + + sub_8052F78((const char *)&sp00[strc34->unk24], &strc34->u.overB); + } else if (unk20 > 0x19) { + strc34->u.overB.qUnkA -= 2; + strc34->u.overB.unkE = 9; + + if (strc34->u.overB.qUnkA < -0x1F) { + strc34->u.overB.qUnkA += 0x20; + strc34->unk24 = Mod(strc34->unk24 + 1, 0xA); + } + + sub_8052F78((const char *)&sp00[strc34->unk24], &strc34->u.overB); + } else if (unk20 > 0xF) { + strc34->u.overB.qUnkA -= 0x1C; + if (strc34->u.overB.qUnkA < 0xF0) { + strc34->u.overB.unkE = 9 - (strc34->u.overB.qUnkA >> 0x5); + if (strc34->u.overB.qUnkA < -0x1F) { + strc34->u.overB.qUnkA += 0x20; + strc34->unk24 = Mod((u16)strc34->unk24 + 1, 0xA); + } + sub_8052F78((const char *)&sp00[strc34->unk24], &strc34->u.overB); + } + } +} + +void sub_805D81C(void) +{ + s32 strc34_3; + u16 temp_r7; + u16 temp_r8; + s16 var_r6; + u8 var_r5; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + + temp_r7 = strc34->u.strc0.unkA; + temp_r8 = strc34->u.strc0.unkC; + if (strc34->unk20 <= (strc34->unk22 + 558)) { + if (strc34->unk20 > (strc34->unk22 + 545)) { + s32 v1 = (strc34->unk20 - 545); + var_r6 = (v1 - strc34->unk22) * 0x1C; + } else { + var_r6 = 0; + } + sub_805C900(3); + + for (var_r5 = 0; var_r5 < 7; var_r5++) { + if (strc34->unk2B[var_r5] != 0x20) { + break; + } + } + + if (strc34->u.strc0.unk2 == 0x100) { + strc34->u.strc0.unkC = 0x7EU; + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = (179 - var_r6); + sub_8052F78((const char *)&strc34->unk2B[var_r5], &strc34->u.overB); + } else { + s32 divResB = Div(strc34->u.strc0.unk2, 25); + s32 divResA = (strc34->u.strc0.unk2 / 16); + strc34->u.strc0.unkC = ((143 - divResA) - divResB); + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = 0xA3U; + sub_8052C84((const char *)&strc34->unk2B[var_r5], &strc34->u.strc0); + } + + strc34->u.strc0.unkA = temp_r7; + strc34->u.strc0.unkC = temp_r8; + } +} + +void Task_805D8EC() +{ + s16 temp_r0_2; + s32 temp_r0_3; + u16 temp_r0; + u16 temp_r1_2; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + s16 unk20 = strc34->unk20; + u8 unk2A = strc34->unk2A; + + if (unk2A != 0) { + if ((unk20 >= (strc34->unk22 + 0xAA))) { + strc34->u.overB.unkE = 3; + strc34->u.overB.unk10 = 3; + strc34->u.overB.unk12 = 0xE; + if (unk20 > (strc34->unk22 + 0x221)) { + strc34->u.overB.unkC = 0x81; + strc34->u.overB.qUnkA -= 0x1C; + if (strc34->u.overB.qUnkA < -0x80) { + strc34->u.overB.unkE = 0; + strc34->u.overB.qUnkA = -0x80; + } else { + sub_8052F78(")*+", &strc34->u.overB); + } + + sub_805D81C(); + } else if (unk20 > 39) { + strc34->u.strc0.unk2 += 0x20; + + if (strc34->u.strc0.unk2 >= 0x100) { + strc34->u.strc0.unk2 = 0x100; + strc34->u.strc0.unkA = 0x29; + strc34->u.strc0.unkC = 0x81; + sub_8052F78(")*+", &strc34->u.overB); + } else { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x8B - (strc34->u.strc0.unk2 >> 4)); + sub_8052C84(")*+", &strc34->u.strc0); + } + + sub_805D81C(); + } else if (unk20 > 0x21) { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x8B - (strc34->u.strc0.unk2 >> 4)); + strc34->u.strc0.unk2 += 0x20; + sub_8052C84(")*+", &strc34->u.strc0); + sub_805D81C(); + } + } + } +} + +void sub_805D9E4() +{ + s32 temp_r0; + s16 temp_r2_2; + s32 temp_r1_3; + s32 var_r0; + u16 temp_r1; + u16 temp_r1_2; + u16 temp_r2; + u16 temp_r7; + u16 temp_r8; + s16 var_r6; + u8 var_r5; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + + temp_r7 = strc34->u.strc0.unkA; + temp_r8 = strc34->u.strc0.unkC; + if (strc34->unk20 <= (strc34->unk22 + 558)) { + if (strc34->unk20 > (strc34->unk22 + 545)) { + s32 v = (strc34->unk20 - 545); + var_r6 = (v - strc34->unk22) * 0x1C; + } else { + var_r6 = 0; + } + strc34->u.strc0.unk10 = 6; + strc34->u.strc0.unk12 = 9; + sub_805C900(2); + for (var_r5 = 0; var_r5 < 7; var_r5++) + + { + if (strc34->unk2B[var_r5] != 0x20) + break; + } + + if (strc34->u.strc0.unk2 == 0x100) { + strc34->u.strc0.unkC = 0x6AU; + if (strc34->unk1C != 0) { + s32 v; + s32 w = 7 - var_r5; + strc34->u.strc0.byteCount = w; + v = 195; + v -= var_r6; + strc34->u.strc0.unkA = (v - (w * 8)); + sub_8052F78((const char *)&strc34->unk2B[var_r5], &strc34->u.overB); + } else { + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = (0xBB - var_r6); + sub_8052F78(" ", &strc34->u.overB); + } + } else { + s32 divResB = Div((s32)strc34->u.strc0.unk2, 25); + s32 divResA = (strc34->u.strc0.unk2 >> 4); + strc34->u.strc0.unkC = ((0x77 - divResA) - divResB); + if (strc34->unk1C != 0) { + temp_r0 = 7 - var_r5; + strc34->u.strc0.byteCount = temp_r0; + strc34->u.strc0.unkA = (u16)(((6 - temp_r0) * 8) + 0x8F); + sub_8052C84((const char *)&strc34->unk2B[var_r5], &strc34->u.strc0); + } else { + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = 0xB7U; + sub_8052C84(" ", &strc34->u.strc0); + } + } + strc34->u.strc0.unkA = temp_r7; + strc34->u.strc0.unkC = temp_r8; + } +} + +void Task_805DB04(void) +{ + s16 temp_r0_2; + s32 temp_r0_3; + u16 temp_r0; + u16 temp_r1_2; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + s16 unk20 = strc34->unk20; + u8 unk2A = strc34->unk2A; + + strc34->u.overB.unkE = 3; + strc34->u.overB.unk10 = 3; + strc34->u.overB.unk12 = 0xE; + if (unk20 > (strc34->unk22 + 0x221)) { + strc34->u.overB.unkC = 0x6D; + strc34->u.overB.qUnkA -= 0x1C; + if (strc34->u.overB.qUnkA < -0x80) { + strc34->u.overB.unkE = 0; + strc34->u.overB.qUnkA = -0x80; + } else { + sub_8052F78("&'(", &strc34->u.overB); + } + + sub_805D9E4(); + } else if (unk20 > 45) { + strc34->u.strc0.unk2 += 0x20; + + if (strc34->u.strc0.unk2 >= 0x100) { + strc34->u.strc0.unk2 = 0x100; + strc34->u.strc0.unkA = 0x29; + strc34->u.strc0.unkC = 0x6D; + sub_8052F78("&'(", &strc34->u.overB); + } else { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x77 - (strc34->u.strc0.unk2 >> 4)); + sub_8052C84("&'(", &strc34->u.strc0); + } + + sub_805D9E4(); + } else if (unk20 > 0x27) { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x77 - (strc34->u.strc0.unk2 >> 4)); + strc34->u.strc0.unk2 += 0x20; + + if (strc34->u.strc0.unk2 >= 0x100) { + strc34->u.strc0.unk2 = 0x100; + } + + sub_8052C84("&'(", &strc34->u.strc0); + sub_805D9E4(); + } +} + +void sub_805DBF0(void) +{ + s32 temp_r0; + s16 temp_r2_2; + s32 temp_r1_3; + s32 var_r0; + u16 temp_r1; + u16 temp_r1_2; + u16 temp_r2; + u16 temp_r7; + u16 temp_r8; + s16 var_r6; + u8 var_r5; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + + temp_r7 = strc34->u.strc0.unkA; + temp_r8 = strc34->u.strc0.unkC; + if (strc34->unk20 <= (strc34->unk22 + 558)) { + if (strc34->unk20 > (strc34->unk22 + 545)) { + s32 v = (strc34->unk20 - 545); + var_r6 = (v - strc34->unk22) * 0x1C; + } else { + var_r6 = 0; + } + strc34->u.strc0.unk10 = 6; + strc34->u.strc0.unk12 = 9; + sub_805C900(1); + for (var_r5 = 0; var_r5 < 7; var_r5++) + + { + if (strc34->unk2B[var_r5] != 0x20) + break; + } + + if (strc34->u.strc0.unk2 == 0x100) { + strc34->u.strc0.unkC = 0x58; + if (strc34->unk18 != 0) { + s32 v; + s32 w = 7 - var_r5; + strc34->u.strc0.byteCount = w; + v = 195; + v -= var_r6; + strc34->u.strc0.unkA = (v - (w * 8)); + sub_8052F78((const char *)&strc34->unk2B[var_r5], &strc34->u.overB); + } else { + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = (0xBB - var_r6); + sub_8052F78(" ", &strc34->u.overB); + } + } else { + s32 divResB = Div((s32)strc34->u.strc0.unk2, 25); + s32 divResA = (strc34->u.strc0.unk2 >> 4); + strc34->u.strc0.unkC = ((0x65 - divResA) - divResB); + if (strc34->unk18 != 0) { + temp_r0 = 7 - var_r5; + strc34->u.strc0.byteCount = temp_r0; + strc34->u.strc0.unkA = (u16)(((6 - temp_r0) * 8) + 0x8F); + sub_8052C84((const char *)&strc34->unk2B[var_r5], &strc34->u.strc0); + } else { + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = 0xB7U; + sub_8052C84(" ", &strc34->u.strc0); + } + } + strc34->u.strc0.unkA = temp_r7; + strc34->u.strc0.unkC = temp_r8; + } +} + +void Task_805DD10(void) +{ + s16 temp_r0_2; + s32 temp_r0_3; + u16 temp_r0; + u16 temp_r1_2; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + s16 unk20 = strc34->unk20; + + if (strc34->unk28) { + strc34->u.overB.unkE = 3; + strc34->u.overB.unk10 = 3; + strc34->u.overB.unk12 = 0xE; + if (unk20 > (strc34->unk22 + 0x221)) { + strc34->u.overB.unkC = 0x5B; + strc34->u.overB.qUnkA -= 0x1C; + if (strc34->u.overB.qUnkA < -0x80) { + strc34->u.overB.unkE = 0; + strc34->u.overB.qUnkA = -0x80; + } else { + sub_8052F78("#$%", &strc34->u.overB); + } + + sub_805DBF0(); + } else if (unk20 > 51) { + strc34->u.strc0.unk2 += 0x20; + + if (strc34->u.strc0.unk2 >= 0x100) { + strc34->u.strc0.unk2 = 0x100; + strc34->u.strc0.unkA = 0x29; + strc34->u.strc0.unkC = 0x5B; + sub_8052F78("#$%", &strc34->u.overB); + } else { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x65 - (strc34->u.strc0.unk2 >> 4)); + sub_8052C84("#$%", &strc34->u.strc0); + } + + sub_805DBF0(); + } else if (unk20 > 0x2D) { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x65 - (strc34->u.strc0.unk2 >> 4)); + strc34->u.strc0.unk2 += 0x20; + + if (strc34->u.strc0.unk2 >= 0x100) { + strc34->u.strc0.unk2 = 0x100; + } + + sub_8052C84("#$%", &strc34->u.strc0); + sub_805DBF0(); + } + } +} + +void sub_805DE0C(void) +{ + s32 temp_r0; + s16 temp_r2_2; + s32 temp_r1_3; + s32 var_r0; + u16 temp_r1; + u16 temp_r1_2; + u16 temp_r2; + u16 temp_r7; + u16 temp_r8; + s16 var_r6; + u8 var_r5; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + + temp_r7 = strc34->u.strc0.unkA; + temp_r8 = strc34->u.strc0.unkC; + if (strc34->unk20 <= (strc34->unk22 + 558)) { + if (strc34->unk20 > (strc34->unk22 + 545)) { + s32 v = (strc34->unk20 - 545); + var_r6 = (v - strc34->unk22) * 0x1C; + } else { + var_r6 = 0; + } + strc34->u.strc0.unk10 = 6; + strc34->u.strc0.unk12 = 9; + sub_805C900(0); + for (var_r5 = 0; var_r5 < 7; var_r5++) + + { + if (strc34->unk2B[var_r5] != 0x20) + break; + } + + if (strc34->u.strc0.unk2 == 0x100) { + strc34->u.strc0.unkC = 0x46; + if (strc34->unk26 != 0) { + s32 v; + s32 w = 7 - var_r5; + strc34->u.strc0.byteCount = w; + v = 195; + v -= var_r6; + strc34->u.strc0.unkA = (v - (w * 8)); + sub_8052F78((const char *)&strc34->unk2B[var_r5], &strc34->u.overB); + } else { + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = (0xBB - var_r6); + sub_8052F78(" ", &strc34->u.overB); + } + } else { + s32 divResB = Div((s32)strc34->u.strc0.unk2, 25); + s32 divResA = (strc34->u.strc0.unk2 >> 4); + strc34->u.strc0.unkC = ((0x53 - divResA) - divResB); + if (strc34->unk26 != 0) { + temp_r0 = 7 - var_r5; + strc34->u.strc0.byteCount = temp_r0; + strc34->u.strc0.unkA = (u16)(((6 - temp_r0) * 8) + 0x8F); + sub_8052C84((const char *)&strc34->unk2B[var_r5], &strc34->u.strc0); + } else { + strc34->u.strc0.byteCount = 1; + strc34->u.strc0.unkA = 0xB7U; + sub_8052C84(" ", &strc34->u.strc0); + } + } + strc34->u.strc0.unkA = temp_r7; + strc34->u.strc0.unkC = temp_r8; + } +} + +void Task_805DF2C(void) +{ + s16 temp_r0_2; + s32 temp_r0_3; + u16 temp_r0; + u16 temp_r1_2; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + s16 unk20 = strc34->unk20; + + strc34->u.overB.unkE = 3; + strc34->u.overB.unk10 = 3; + strc34->u.overB.unk12 = 0xE; + if (unk20 > (strc34->unk22 + 0x221)) { + strc34->u.overB.unkC = 0x49; + strc34->u.overB.qUnkA -= 0x1C; + if (strc34->u.overB.qUnkA < -0x80) { + strc34->u.overB.unkE = 0; + strc34->u.overB.qUnkA = -0x80; + } else { + sub_8052F78(" !\"", &strc34->u.overB); + } + + sub_805DE0C(); + } else if (unk20 > 57) { + strc34->u.strc0.unk2 += 0x20; + + if (strc34->u.strc0.unk2 >= 0x100) { + strc34->u.strc0.unk2 = 0x100; + strc34->u.strc0.unkA = 0x29; + strc34->u.strc0.unkC = 0x49; + sub_8052F78(" !\"", &strc34->u.overB); + } else { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x53 - (strc34->u.strc0.unk2 >> 4)); + sub_8052C84(" !\"", &strc34->u.strc0); + } + + sub_805DE0C(); + } else if (unk20 > 0x33) { + strc34->u.strc0.unkA = 0x19U; + strc34->u.strc0.unkC = (0x53 - (strc34->u.strc0.unk2 >> 4)); + strc34->u.strc0.unk2 += 0x20; + + if (strc34->u.strc0.unk2 >= 0x100) { + strc34->u.strc0.unk2 = 0x100; + } + + sub_8052C84(" !\"", &strc34->u.strc0); + sub_805DE0C(); + } +} + +void sub_805E018() +{ + s32 temp_r0; + s32 temp_r1_2; + s32 temp_r4; + u16 temp_r1; + u16 temp_r2; + u16 var_r5; + u8 *var_r0; + u8 *var_r0_2; + u8 *var_r0_3; + u8 i; + + Game_2_1_34 *strc34 = TASK_DATA(gCurTask); + + temp_r1 = strc34->unk20; + if (temp_r1 > (strc34->unk22 + 545)) { + s32 v = temp_r1; + s16 w; + s32 x; + v -= 545; + var_r5 = (u16)(v - strc34->unk22); + temp_r0 = (var_r5 * 0x1C) << 16; + i = 0; + var_r5 = temp_r0 >> 16; + x = ((temp_r0 >>= 16) - 5); + for (i = 0; i < 7; i++) { + s32 var; + strc34->u.overB.qUnkA = ((i << 5) - x); + var = var_r5 - 5; + if (((i << 5) - var) > -0x20) { + if (GetBit(strc34->unk29, i)) { + strc34->u.overB.unk12 = (u16)(0xD - (i >> 1)); + if (i & 1) { + sub_8052F78("!", &strc34->u.overB); + } else { + sub_8052F78(" ", &strc34->u.overB); + } + } else { + strc34->u.overB.unk12 = 0xB; + sub_8052F78("\"", &strc34->u.overB); + } + } + } + } else if ((u32)temp_r1 > 0x86U) { + for (i = 0; i < 7; i++) { + strc34->u.overB.qUnkA = (i << 5) + 5; + if ((strc34->unk29 >> i) & 1) { + strc34->u.overB.unk12 = (13 - (i >> 1)); + if (i & 1) { + sub_8052F78("!", &strc34->u.overB); + } else { + sub_8052F78(" ", &strc34->u.overB); + } + } else { + strc34->u.overB.unk12 = 0xB; + sub_8052F78("\"", &strc34->u.overB); + } + } + } else if (temp_r1 > 0x31U) { + for (i = 0; i < 7; i++) { + var_r5 = (temp_r1 - 0x31); + temp_r0 = i * 5; + if (var_r5 >= temp_r0) { + var_r5 = (var_r5 - temp_r0); + if (var_r5 > 50) { + var_r5 = 50; + } + temp_r4 = Div(COS(0), 80); + strc34->u.overB.qUnkA = ((i << 5) + (temp_r4 + 5)) - Div(SIN(var_r5 * 5), 80); + if ((strc34->unk29 >> i) & 1) { + strc34->u.overB.unk12 = (u16)(0xD - (i >> 1)); + if (i & 1) { + sub_8052F78("!", &strc34->u.overB); + } else { + sub_8052F78(" ", &strc34->u.overB); + } + } else { + strc34->u.overB.unk12 = 0xB; + sub_8052F78("\"", &strc34->u.overB); + } + } + } + } +} + +void TaskDestructor_805E1E4(struct Task *t) { } diff --git a/sa1/src/game/game_2_3.c b/sa1/src/game/game_2_3.c new file mode 100644 index 0000000000..0b325f67b3 --- /dev/null +++ b/sa1/src/game/game_2_3.c @@ -0,0 +1,534 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/gTask_03006240.h" +#include "game/multiplayer/chao.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct Game_2_3_54 { + u8 filler0[0x48]; + s32 unk48; + s16 unk4C; + u8 unk4E; + u8 unk4F; + u8 unk50; + u8 unk51; +} Game_2_3_54; + +typedef struct Game_2_3_5C { + StrcUi_805423C strc0; + struct Task *taskC; // -> Game_2_3_54 + struct Task *task10; // -> Game_2_3_2DC + u8 filler14[0x8]; + Sprite s; + s32 unk4C; + s16 unk50; + s16 unk52; + u8 unk54; + u8 unk55; + u8 unk56; + u8 unk57; + u8 unk58; +} Game_2_3_5C; + +typedef struct Game_2_3_2DC { + Sprite sprites[5]; + u8 fillerF0[0x1E0]; + s32 unk2D0; + s16 unk2D4; + u8 unk2D6; + u8 unk2D7; + u8 unk2D8; + u8 unk2D9; + u8 unk2DA; +} Game_2_3_2DC; + +void sub_8062EDC(void); +void Task_80631E8(void); +void Task_80632B4(void); +void Task_80634EC(void); +void Task_8063638(void); +void Task_8063824(void); +void Task_80638B0(void); +void TaskDestructor_8063910(struct Task *t); +void Task_8063914(void); + +extern u8 gUnknown_086A17F4[]; +extern u8 gUnknown_086A2534[]; +extern u8 gUnknown_086A4FB4[]; +extern u16 gUnknown_086A4DB4[256]; +extern u8 gUnknown_086A5834[]; + +typedef struct TileInfo32 { + void *vram; + u32 anim; + u32 variant; +} TileInfo32; + +// TODO: Inline the data, otherwise the VRAM pointers will be wrong and crash! +const TileInfo32 gUnknown_0868B240[5] = { // + { + OBJ_VRAM0 + 0x20, + SA1_ANIM_ZONE_SELECT_ACTS, + 15, + }, + { + OBJ_VRAM0 + 0x360, + SA1_ANIM_ZONE_SELECT_ACTS, + 16, + }, + { + OBJ_VRAM0 + 0x6A0, + SA1_ANIM_ZONE_SELECT_ACTS, + 17, + }, + { + OBJ_VRAM0 + 0x9E0, + SA1_ANIM_ZONE_SELECT_ACTS, + 18, + }, + { + OBJ_VRAM0 + 0xF00, + SA1_ANIM_ZONE_SELECT_ACTS, + 0, + } +}; + +void sub_8062EDC(void) +{ + Strc_80528AC gfx; + s8 *temp_r5; + + UiGfxStackInit(); + + gfx.uiGfxID = 128; + gfx.unk2B = 1; + gfx.tiles = gUnknown_086A17F4; + gfx.tilesSize = 0xE00; + gfx.layout = gUnknown_086A2534; + gfx.layoutSize = 0x500; + gfx.unk29 = 1; + gfx.unk2A = 0x11; + gfx.unk0.unk4 = 0; + gfx.unk0.unk8 = 0; + gfx.unk0.unk9 = 0; + gfx.unk0.unkA = 0; + gfx.unk0.unkB = 0; + sub_80528AC(&gfx); + + gfx.uiGfxID = 128; + gfx.unk2B = 0; + gfx.tiles = gUnknown_086A4FB4; + gfx.tilesSize = 0x1CC0; + gfx.palette = gUnknown_086A4DB4; + gfx.paletteSize = 0x200; + gfx.layout = gUnknown_086A5834; + gfx.layoutSize = 0x1000; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); +} + +void sub_8062F90(void) +{ + struct Task *t; + Game_2_3_54 *strc54; + Game_2_3_5C *strc5C; + Game_2_3_2DC *strc2DC; + Sprite *s; + s32 four; + u8 i; + + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + + m4aSongNumStart(MUS_COURSE_SELECTION); + four = 4; + sub_80535FC(); + gDispCnt = 0x1340; + gBgCntRegs[0] = 0x1D83; + gBgCntRegs[1] = 0x1886; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + sub_8062EDC(); + + strc5C = TASK_DATA(TaskCreate(Task_80631E8, sizeof(Game_2_3_5C), 0x2000U, 0U, TaskDestructor_8063910)); + strc5C->unk4C = 0; + strc5C->unk57 = 0; + strc5C->unk50 = 0x14; + strc5C->unk52 = 0x14; + strc5C->unk54 = 0; + strc5C->unk55 = 0; + strc5C->unk58 = 4; + + strc5C->strc0.unk0 = 0; + strc5C->strc0.unk2 = 1; + strc5C->strc0.unk4 = 2; + strc5C->strc0.unk6 = 0; + strc5C->strc0.unk8 = 0x200; + strc5C->strc0.unkA = 1; + + t = TaskCreate(Task_8063914, sizeof(Game_2_3_54), 0x2030U, 0U, NULL); + strc54 = TASK_DATA(t); + strc54->unk48 = 0; + strc54->unk4C = 0; + strc54->unk4E = 0; + strc54->unk51 = 4; + strc54->unk4F = 0; + strc5C->taskC = t; + + t = TaskCreate(Task_8063824, sizeof(Game_2_3_2DC), 0x2030U, 0U, NULL); + strc2DC = TASK_DATA(t); + strc2DC->unk2D0 = 0; + strc2DC->unk2D4 = 0; + strc2DC->unk2D6 = 0; + strc2DC->unk2D7 = 0; + strc2DC->unk2DA = four; + strc2DC->unk2D9 = 0; + + for (i = 0; i < (s32)ARRAY_COUNT(strc2DC->sprites); i++) { + s = &strc2DC->sprites[i]; + s->graphics.dest = gUnknown_0868B240[i].vram; + s->graphics.anim = gUnknown_0868B240[i].anim; + s->variant = gUnknown_0868B240[i].variant; + s->oamFlags = 0x480; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + } + + strc5C->task10 = t; + + s = &strc5C->s; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->graphics.dest = OBJ_VRAM0 + 0xF00; + s->oamFlags = 0x80; + s->graphics.size = 0; + s->graphics.anim = 905; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + sub_805423C(&strc5C->strc0); +} + +void Task_80631E8() +{ + s32 *temp_r1; + s32 temp_r4; + u8 *temp_r1_2; + Game_2_3_5C *strc5C = TASK_DATA(gCurTask); + Game_2_3_54 *strc54 = TASK_DATA(strc5C->taskC); + Game_2_3_2DC *strc2DC = TASK_DATA(strc5C->task10); + + temp_r4 = strc5C->unk4C + 1; + strc5C->unk4C = temp_r4; + strc54->unk48 = temp_r4; + temp_r1 = &strc2DC->unk2D0; + *temp_r1 = temp_r4; + temp_r1_2 = &strc5C->unk55; + strc54->unk4F = *temp_r1_2; + strc2DC->unk2D7 = *temp_r1_2; + strc2DC->unk2D9 = strc5C->unk57; + sub_805423C(&strc5C->strc0); + if ((temp_r4 == 0x40) || (1 & gPressedKeys)) { + strc5C->unk4C = 0x40; + *temp_r1 = 0x40; + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gCurTask->main = Task_80632B4; + } +} + +void Task_80632B4() +{ + Sprite *s; + s32 unk4C; + struct MultiSioData_0_0 *multisioRecv; + u32 i; + + Game_2_3_5C *strc5C = TASK_DATA(gCurTask); + Game_2_3_54 *strc54 = TASK_DATA(strc5C->taskC); + Game_2_3_2DC *strc2DC = TASK_DATA(strc5C->task10); + + if (IS_MULTI_PLAYER) { + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + } + + multisioRecv = &gMultiSioRecv->pat0; + if (!(gMultiSioStatusFlags & 0x80)) { + if (multisioRecv->unk0 >= 80) { + strc5C->unk55 = multisioRecv->unk2; + } + + s = &strc5C->s; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + unk4C = strc5C->unk4C; + unk4C++; + + if ((gMultiSioStatusFlags & 0x80) && ((u32)strc5C->unk58 > 1U)) { + if (0x80 & gRepeatedKeys) { + if (strc5C->unk55 < 3) { + strc5C->unk55++; + } + } else if (0x40 & gRepeatedKeys) { + if (strc5C->unk55 != 0) { + strc5C->unk55--; + } + } + } + + if (strc5C->unk55 > (Div(strc5C->unk52, 24) + 5)) { + strc5C->unk52 = ((strc5C->unk55 - 5) * 24) - 8; + } else if (strc5C->unk55 <= Div(strc5C->unk52, 0x18)) { + strc5C->unk52 = ((strc5C->unk55) * 24) - 8; + } + + strc5C->unk4C = unk4C; + strc54->unk48 = unk4C; + strc2DC->unk2D0 = unk4C; + strc54->unk4F = strc5C->unk55; + strc2DC->unk2D7 = strc5C->unk55; + strc2DC->unk2D9 = strc5C->unk57; + sub_805423C(&strc5C->strc0); + gMultiSioSend.pat0.unk0 = 0x50; + gMultiSioSend.pat0.unk2 = strc5C->unk55; + if ((gMultiSioStatusFlags & 0x80) && (1 & gPressedKeys)) { + gMultiSioSend.pat0.unk0 = 0x51; + } + + multisioRecv = &gMultiSioRecv->pat0; + if (multisioRecv->unk0 == 0x51) { + strc5C->unk57 = 1; + gCurTask->main = Task_80634EC; + m4aSongNumStart(0x6AU); + m4aSongNumStop(3U); + strc5C->strc0.unk4 = 1; + strc5C->strc0.unk6 = 0x2000 - (u16)strc5C->strc0.unk6; + } +} + +void Task_80634EC(void) +{ + Sprite *s; + s32 unk4C; + struct MultiSioData_0_0 *multisioRecv; + u32 i; + + Game_2_3_5C *strc5C = TASK_DATA(gCurTask); + Game_2_3_54 *strc54 = TASK_DATA(strc5C->taskC); + Game_2_3_2DC *strc2DC = TASK_DATA(strc5C->task10); + + if (IS_MULTI_PLAYER) { + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + } + + multisioRecv = &gMultiSioRecv->pat0; + if (!(gMultiSioStatusFlags & 0x80)) { + if (multisioRecv->unk0 >= 80) { + strc5C->unk55 = multisioRecv->unk2; + } + } + + unk4C = strc5C->unk4C; + unk4C++; + + strc5C->unk4C = unk4C; + strc54->unk48 = unk4C; + strc2DC->unk2D0 = unk4C; + strc54->unk4F = strc5C->unk55; + strc2DC->unk2D7 = strc5C->unk55; + strc2DC->unk2D9 = strc5C->unk57; + sub_805423C(&strc5C->strc0); + + if ((strc5C->strc0.unk6 > 0x1800) && (strc5C->strc0.unk4 == 1)) { + gCurTask->main = Task_8063638; + } +} + +// NOTE: Incomplete +// Related to MP Chao Hunt +// (67.58%) https://decomp.me/scratch/7bJhx +NONMATCH("asm/non_matching/game/game2_3__Task_8063638.inc", void Task_8063638()) +{ + Sprite *s; + s32 unk4C; + struct MultiSioData_0_0 *multisioRecv; + u32 i; + + s32 temp_r0_2; + u32 var_r3_4; + s32 var_r3_5; + u32 rand; + u32 temp_r0_4; + u32 temp_r1; + + Game_2_3_5C *strc5C = TASK_DATA(gCurTask); + + if (IS_MULTI_PLAYER) { + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + if (!CheckBit(gMultiSioStatusFlags, i)) { + if (gMultiplayerMissingHeartbeats[i]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + } + + if (gMultiSioRecv->pat0.unk0 == 0x52) { + struct Task **chaoTasks; + gCurTask->main = Task_80638B0; + + chaoTasks = gChaoTasks; + + for (i = 0; i < 3; i++) { + chaoTasks[i] = (void *)(uintptr_t)gMultiSioRecv->pat0.unk3; + } + } + if (gMultiSioStatusFlags & 0x80) { + i = 1; + if (!(((s32)gMultiplayerConnections >> 1) & 1) || (gMultiSioRecv[1].pat0.unk0 == 0x51)) { + loop_15: + i += 1; + if ((u32)i <= 3U) { + if (!(((s32)gMultiplayerConnections >> i) & 1) || (gMultiSioRecv[i].pat0.unk0 == 0x51)) { + goto loop_15; + } + } + } + if (i == 4) { + gMultiSioSend.pat0.unk0 = 0x52; + gMultiSioSend.pat0.unk2 = strc5C->unk55; + + while (gMultiSioSend.pat0.unk3 == ((PseudoRandom32() >> 8) & 7)) + ; + while (gMultiSioSend.pat0.unk4 == ((PseudoRandom32() >> 8) & 7)) + ; + + // gMultiSioSend.pat0.unk5 = (s8) (var_r3_5 & 7); + return; + } + goto block_27; + } +block_27: + gMultiSioSend.pat0.unk0 = 0x51; + gMultiSioSend.pat0.unk2 = strc5C->unk55; +} +END_NONMATCH + +void Task_8063824() +{ + Sprite *s; + u8 *var_r1; + u8 var_r0; + u8 i; + + Game_2_3_2DC *strc2DC = TASK_DATA(gCurTask); + + for (i = 0; i < 4; i++) { + s = &strc2DC->sprites[i]; + + if (i == strc2DC->unk2D7) { + if (strc2DC->unk2D9 != 0) { + if ((strc2DC->unk2D0 & 1) != 0) { + s->palId = 1; + } else { + s->palId = 0; + } + } else { + s->palId = 1; + } + s->x = 104; + } else { + s->x = 100; + s->palId = 0; + } + s->y = (i << 5) + 24; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_80638B0(void) +{ + u16 chaoHuntStageId; + + Game_2_3_5C *strc5C = TASK_DATA(gCurTask); + + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + chaoHuntStageId = strc5C->unk55; + gCurrentLevel = NUM_LEVEL_IDS_SP + chaoHuntStageId; + + ApplyGameStageSettings(); + TaskDestroy(strc5C->taskC); + TaskDestroy(strc5C->task10); + TaskDestroy(gCurTask); +} + +void TaskDestructor_8063910(struct Task *t) { } + +void Task_8063914(void) { } diff --git a/sa1/src/game/game_over.c b/sa1/src/game/game_over.c new file mode 100644 index 0000000000..85780043f3 --- /dev/null +++ b/sa1/src/game/game_over.c @@ -0,0 +1,1026 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "malloc_vram.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/camera.h" +#if DEBUG +#include "game/sa1_sa2_shared/unused_level_select.h" +#endif +#include "game/save.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" +#include "game/title_screen.h" +#include "data/ui_graphics.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/zones.h" + +void Task_GameOverScreenInit(void); +void Task_8056100(void); +void Task_805618C(void); +void Task_8056218(void); +void Task_8056348(void); +void Task_805648C(void); +void Task_80565C4(void); +void Task_8056970(void); +void Task_8056AC8(void); +void Task_8056CE0(void); +void Task_8056D30(void); +void Task_8056D80(void); +void Task_8056DD0(void); +void Task_8056E24(void); +void Task_8056E64(void); +void Task_8056EC4(void); +void Task_8056F54(void); +void Task_8056F80(void); +void Task_8056FA0(void); +void Task_DestroyGameOverD(void); +void Task_DestroyGameOverC(void); +void TaskDestructor_GameOverScreen(struct Task *t); +void TaskDestructor_8056F30(struct Task *t); + +// NOTE: param0[param1->byteCount (offset: 0xE)] +extern const u16 gUnknown_086883E4[10]; +extern const u8 gUnknown_086883F8[]; + +// NOTE: Not sure whether proc is part of game__stage__ui.s or game__game_over.s +// It is only called in game_over, so it should be here? +// But it also references gUiGraphics. +void sub_8055C50(Strc_8055C50 *param0) +{ + Strc_80528AC sp00; + UiGfxStackInit(); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 4; + sp00.tiles = gUiGraphics[UIGFX_TIMER_DIGITS].tiles; + sp00.palette = gUiGraphics[UIGFX_TIMER_DIGITS].palette; + sp00.tilesSize = 40 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram4; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_TIMER_DIGITS].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_TIMER_DIGITS].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_TIMER_DIGITS].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_TIMER_DIGITS].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_TIMER_DIGITS].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_OK; + sp00.unk2B = 5; + sp00.tiles = gUiGraphics[UIGFX_OK].tiles; + sp00.palette = gUiGraphics[UIGFX_OK].palette; + sp00.tilesSize = 16 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram0; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_OK].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_OK].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_OK].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_OK].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_OK].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_CHAR_SELECT_BLACK_BOX_2; + sp00.unk2B = 14; + sp00.tiles = gUiGraphics[UIGFX_CHAR_SELECT_BLACK_BOX_2].tiles; + sp00.palette = gUiGraphics[UIGFX_CHAR_SELECT_BLACK_BOX_2].palette; + sp00.tilesSize = 16 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram8; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_CHAR_SELECT_BLACK_BOX_2].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_CHAR_SELECT_BLACK_BOX_2].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_CHAR_SELECT_BLACK_BOX_2].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_CHAR_SELECT_BLACK_BOX_2].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_CHAR_SELECT_BLACK_BOX_2].unk18; + sub_80528AC(&sp00); +} + +void CreateGameOverScreen(LostLifeCause lostLifeCause) +{ + struct Task *t = NULL; + struct Task *t2; + GameOverScreen *screen; + Sprite *s; + Strc_8055C50 strc; + + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) { + gCamera.SA2_LABEL(unk50) |= 0x2000; + } + + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, 0); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, 0); + gWinRegs[WINREG_WIN1H] = WIN_RANGE(0, 0); + gWinRegs[WINREG_WIN1V] = WIN_RANGE(0, 0); + + t2 = TaskCreate(Task_GameOverScreenInit, sizeof(GameOverScreen), 0x2000, 0, TaskDestructor_GameOverScreen); + screen = TASK_DATA(t2); + + screen->frames = 0; + screen->lostLifeCause = lostLifeCause; + screen->unk80 = 0; + + s = &screen->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_GAME_OVER); + s->graphics.size = 0; + s->frameFlags = 0x80; + s->x = DISPLAY_WIDTH + 16; + s->y = 0; + s->oamFlags = 3; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + + m4aSongNumStart(MUS_GAME_OVER); + + if ((lostLifeCause & 0x3) != 0) { + s->graphics.anim = SA1_ANIM_GAME_OVER; + s->variant = 0; + } else if (lostLifeCause & 0x4) { + s->graphics.anim = SA1_ANIM_GAME_OVER; + s->variant = 2; + } + + s = &screen->s2; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_GAME_OVER); + s->graphics.size = 0; + s->frameFlags = 0x80; + s->x = 20; + s->y = 120; + s->oamFlags = 3; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + + if ((lostLifeCause & 0x3) != 0) { + s->graphics.anim = SA1_ANIM_GAME_OVER; + s->variant = 1; + } else if (lostLifeCause & 0x4) { + s->graphics.anim = SA1_ANIM_GAME_OVER; + s->variant = 3; + } + + { + GameOverB0 *overB0; + GameOverC *overC; + GameOverD *overD; + + if ((lostLifeCause & 0x5) != 0) { + t2 = TaskCreate(Task_8056F54, sizeof(GameOverB0), 0x2000, 0, NULL); + overB0 = TASK_DATA(t2); + overB0->unk18 = 0; + overB0->unk0.qUnkA = -Q(1); + overB0->unk0.unkC = 90; + overB0->unk0.unkE = 8; + overB0->unk0.unk10 = 14; + overB0->unk0.unk12 = 6; + overB0->unk0.unk16 = 1; + overB0->unk0.unk8 = 10; + overB0->vram1C = VramMalloc(16); // TODO: ALLOC_TILES()! + + t = TaskCreate(Task_8056CE0, sizeof(GameOverC), 0x2000, 0, TaskDestructor_8056F30); + overC = TASK_DATA(t); + overC->unk18 = 0; + overC->unk0.unk0 = 0; + overC->unk0.unk2 = 1; + overC->unk0.unk4 = 1; + overC->unk0.unk6 = 0; + overC->unk0.unk8 = 64; + overC->unk0.unkA = 1; + + t2 = TaskCreate(Task_8056FA0, sizeof(GameOverD), 0x2000, 0, NULL); + overD = TASK_DATA(t2); + overD->unk24 = 0; + overD->unk28 = 9; + overD->vram2C = VramMalloc(40); // TODO: ALLOC_TILES()! + overD->vram30 = VramMalloc(16); // TODO: ALLOC_TILES()! + overD->unk1C = overB0; + overD->unk18 = screen; + overD->unk20 = overC; + strc.vram8 = overB0->vram1C; + strc.vram0 = overD->vram30; + strc.vram4 = overD->vram2C; + overC->unk14 = strc.vram8; + overC->unkC = strc.vram0; + overC->unk10 = strc.vram4; + } else if ((lostLifeCause & 0x2) != 0) { + t = TaskCreate(Task_8056E24, sizeof(GameOverC), 0x2000, 0, TaskDestructor_8056F30); + overC = TASK_DATA(t); + overC->unk18 = 0; + overC->unk0.unk0 = 0; + overC->unk0.unk2 = 1; + overC->unk0.unk4 = 1; + overC->unk0.unk6 = 0; + overC->unk0.unk8 = 96; + overC->unk0.unkA = 1; + strc.vram8 = VramMalloc(16); // TODO: ALLOC_TILES()! + strc.vram0 = VramMalloc(16); // TODO: ALLOC_TILES()! + strc.vram4 = VramMalloc(40); // TODO: ALLOC_TILES()! + overC->unk14 = strc.vram8; + overC->unkC = strc.vram0; + overC->unk10 = strc.vram4; + } + } + + sub_8055C50(&strc); +} + +void Task_GameOverScreenInit(void) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + s16 frames = screen->frames; + Sprite *s; + Sprite *s2; + + screen->s.x = DISPLAY_WIDTH + 64; + screen->s.y = 60; + screen->s2.x = DISPLAY_WIDTH + 64; + screen->s2.y = 60; + + screen->frames = ++frames; + + if (frames >= TIME(0, 1)) { + screen->s.frameFlags = 0; + screen->s2.frameFlags = 0; + gCurTask->main = Task_8056100; + } + + s = &screen->s; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &screen->s2; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8056100(void) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + s16 frames = screen->frames; + s16 frames_2; + Sprite *s; + Sprite *s2; + s16 x; + s32 diff; + + frames_2 = frames - 60; + +#ifndef NON_MATCHING + { + register s32 _184 asm("r1") = 184; + asm("mul %0, %1, %2" : "=r"(diff) : "r"(_184), "r"(frames_2)); + } +#else + diff = (184 * (frames_2)); +#endif + + x = DISPLAY_WIDTH - (diff / 30); + screen->s.x = x + 64; + screen->s.y = 60; + screen->s2.x = x + 64; + screen->s2.y = 60; + + screen->frames = ++frames; + + if (frames >= TIME(0, 1.5)) { + gCurTask->main = Task_805618C; + } + + s = &screen->s; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &screen->s2; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_805618C(void) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + s16 frames = screen->frames; + Sprite *s = &screen->s; + Sprite *s2 = &screen->s2; + + s->x = 128; + s->y = 60; + s2->x = 128; + s2->y = 60; + + screen->frames = ++frames; + + if (frames >= TIME(0, 2)) { + s->frameFlags = SPRITE_OAM_ORDER(2); + s2->frameFlags = SPRITE_OAM_ORDER(2); + + if (screen->lostLifeCause & 0x1) { + gCurTask->main = Task_8056348; + } else if (screen->lostLifeCause & 0x2) { + gCurTask->main = Task_8056218; + } else { + gCurTask->main = Task_80565C4; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + UpdateSpriteAnimation(s2); + DisplaySprite(s2); +} + +void Task_8056218(void) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + s16 frames = screen->frames; + Sprite *s = &screen->s; + Sprite *s2 = &screen->s2; + SpriteTransform transform; + + screen->frames = ++frames; + + if (frames >= 217) { + s16 r0; + u16 r1; + s2->frameFlags = SPRITE_FLAG(OBJ_MODE, 1) | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + s->frameFlags = SPRITE_FLAG(OBJ_MODE, 1) | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + + r1 = frames - 248; + r0 = (32 - (r1)); + + transform.rotation = 0; + transform.qScaleX = COS_24_8(r0 * 16); + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + + transform.qScaleY = Q(1.0); + transform.x = 127; + transform.y = 60; + TransformSprite(s, &transform); + + transform.rotation = 0; + transform.qScaleX = COS_24_8(r0 * 16); + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + + transform.qScaleY = Q(1.0); + transform.x = transform.x; // LOL + transform.y = 60; + TransformSprite(s2, &transform); + } + + if (frames >= 233) { + if (frames >= 248) { + gCurTask->main = Task_8056AC8; + } + } else { + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + } +} + +// (96.84%) https://decomp.me/scratch/HKhxZ +NONMATCH("asm/non_matching/game/game_over__Task_8056348.inc", void Task_8056348(void)) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + s16 frames = screen->frames; + Sprite *s = &screen->s; + Sprite *s2 = &screen->s2; + SpriteTransform transform; + s32 qScaleX; + s16 aaa; + u32 r0; + s32 r2; + + r0 = (u16)(frames - 120); + r0 <<= 8; +#if 0 + // Matches more %, but logically wrong + r0 *= 12; + r2 = r0 << 4; +#else + r2 = r0 << 12; +#endif + + s->frameFlags = SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, 1); + + transform.rotation = 0; + transform.qScaleX = COS_24_8(r2 >> 16); + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + transform.qScaleY = Q(1.0); + + transform.x = 127; + transform.y = 60; + TransformSprite(s, &transform); + + s2->frameFlags = 0x20 | SA2_LABEL(gUnknown_030054B8)++; + s2->frameFlags |= 0x80; + transform.rotation = 0; + transform.qScaleX = COS_24_8(r2 >> 16); + + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + + transform.qScaleY = Q(1.0); + transform.x = transform.x; + transform.y = 60; + TransformSprite(s2, &transform); + + screen->frames = ++frames; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + if (frames >= 136) { + s->graphics.anim = SA1_ANIM_GAME_OVER; + s->variant = 2; + s2->graphics.anim = SA1_ANIM_GAME_OVER; + s2->variant = 3; + + gCurTask->main = Task_805648C; + } +} +END_NONMATCH + +// (91.56%) https://decomp.me/scratch/Rl7oS +NONMATCH("asm/non_matching/game/game_over__Task_805648C.inc", void Task_805648C(void)) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + s16 frames = screen->frames; + Sprite *s = &screen->s; + Sprite *s2 = &screen->s2; + SpriteTransform transform; + + { + s32 r0_32; + s16 r0; + u16 r1; + + r1 = ((frames) - (136)); + r0 = (256 - r1); + + s->frameFlags = SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, 1); + + transform.rotation = 0; + + transform.qScaleX = COS_24_8(r0); + transform.qScaleX = transform.qScaleX + 1; + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + + transform.qScaleY = Q(1.0); + transform.x = 127; + transform.y = 60; + TransformSprite(s, &transform); + + s2->frameFlags = SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + s2->frameFlags |= SPRITE_FLAG(OBJ_MODE, 1); + + transform.rotation = 0; + transform.qScaleX = COS_24_8(r0); + transform.qScaleX = transform.qScaleX + 1; + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + + transform.qScaleY = Q(1.0); + transform.x = 128; // LOL + transform.y = 60; + TransformSprite(s2, &transform); + } + + screen->frames = ++frames; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + if (frames >= 152) { + gCurTask->main = Task_80565C4; + } +} +END_NONMATCH + +void Task_80565C4(void) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + s16 frames = screen->frames; + Sprite *s = &screen->s; + Sprite *s2 = &screen->s2; + SpriteTransform transform; + s32 qScaleX; + s16 aaa; + s16 r0; + s16 r2; + u16 r1; + + s->x = 128; + s->y = 60; + s->frameFlags = SPRITE_FLAG(OBJ_MODE, 1); + + s2->x = 128; + s2->y = 60; + s2->frameFlags = SPRITE_FLAG(OBJ_MODE, 1); + + screen->frames = ++frames; + + if (frames >= 1433) { + s2->frameFlags = SPRITE_FLAG(OBJ_MODE, 1) | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + s->frameFlags = SPRITE_FLAG(OBJ_MODE, 1) | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + + r1 = frames - 1464; + + r2 = 32 - r1; + + transform.rotation = 0; + transform.qScaleX = COS_24_8(r2 * 16); + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + transform.qScaleY = Q(1.0); + + transform.x = 127; + transform.y = 60; + TransformSprite(s, &transform); + + transform.rotation = 0; + transform.qScaleX = COS_24_8(r2 * 16); + + if (transform.qScaleX < Q(10. / 256.)) { + transform.qScaleX = Q(10. / 256.); + } + + transform.qScaleY = Q(1.0); + transform.x = transform.x; + transform.y = 60; + TransformSprite(s2, &transform); + } + + if (frames >= 1449) { + if (frames >= 1464) { + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gCurTask->main = Task_8056AC8; + } + + } else { + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + } +} + +void Task_8056714(void) +{ + GameOverB0 *overB0 = TASK_DATA(gCurTask); + s16 unk18 = overB0->unk18; + overB0->unk18 = unk18 += 1; + overB0->unk0.qUnkA += Q(12. / 256.); + + if (overB0->unk0.qUnkA > 0) { + overB0->unk0.qUnkA = 0; + } + + sub_80530CC((const char *)&gUnknown_086883F8[0], &overB0->unk0); + + if (unk18 >= 182) { + gCurTask->main = Task_8056F80; + overB0->unk0.qUnkA = Q(0); + overB0->unk18 = 0; + } +} + +// (98.85%) https://decomp.me/scratch/Sz0mp +NONMATCH("asm/non_matching/game/game_over__Task_805676C.inc", void Task_805676C(void)) +{ + GameOverD *overD = TASK_DATA(gCurTask); + s16 unk24 = overD->unk24; + Strc_8052C84 sp00; + GameOverB0 *overB0; + u8 *ptrArr; + u8 arr[1]; + s16 temp; + u32 temp32; + + sp00.unkC = 0x5B; + sp00.unk12 = 6; + sp00.unk8 = 0; + sp00.unk10 = 4; + sp00.byteCount = ARRAY_COUNT(arr); + sp00.unk16 = 1; + + temp = (unk24 / 120); + temp32 = (41 - (u16)temp); + ptrArr = &arr[0]; + *ptrArr = temp32; + + temp = (unk24 % 120); + + if (temp > 80) { + temp -= 80; + sp00.unkA = ((temp * 116) / 18) + 116; + + if (*ptrArr >= 32) { + sp00.unk0 = 256; + sp00.unk2 = 256; + sp00.unk4 = 0; + sp00.unk6 = SA2_LABEL(gUnknown_030054B8)++; + sub_8052C84((const char *)&*ptrArr, &sp00); + } + } else if (temp > 20) { + temp -= 20; + sp00.unk0 = 497 - temp * 4; + sp00.unk2 = sp00.unk0; + sp00.unk4 = 0; + sp00.unk6 = SA2_LABEL(gUnknown_030054B8)++; + sp00.unkA = 104; + sp00.unkC = 83; + sub_8052C84((const char *)&*ptrArr, &sp00); + } else { + sp00.unkA = (temp * 116) / 20; + + if (*ptrArr >= 32) { + sp00.unk0 = 256; + sp00.unk2 = 256; + sp00.unk4 = 0; + sp00.unk6 = SA2_LABEL(gUnknown_030054B8)++; + sub_8052C84((const char *)arr, &sp00); + } + } + + if (unk24 >= TIME(0, 20)) { + gCurTask->main = Task_DestroyGameOverD; + } + + if (gPressedKeys & B_BUTTON) { + s32 r3; + + temp = (unk24 / 120); + temp++; + unk24 = temp * 120; + + overB0 = overD->unk1C; + r3 = 1200; + overB0->unk18 = r3 - ((10 - temp) * 120); + overD->unk20->unk18 = 0x566 - ((10 - temp) * 120); + overD->unk18->frames = overD->unk20->unk18; + } + + if (gPressedKeys & A_BUTTON) { + gCurTask->main = Task_8056970; + overD->unk24 = 0; + overD->unk18->unk80 = 1; + } else { + temp = unk24 + 1; + overD->unk24 = temp; + } + + if ((overD->unk24 % 120) == 60) { + // TODO: Different way to remove volatile*? + u16 songId = gUnknown_086883E4[((volatile GameOverD *)overD)->unk24 / 120]; + m4aSongNumStart(songId); + } +} +END_NONMATCH + +void Task_8056970(void) +{ + GameOverD *overD = TASK_DATA(gCurTask); + s16 unk24 = overD->unk24; + Strc_8052C84 sp00; + GameOverB0 *overB0; + u8 *ptrArr; + u8 arr[1]; + s16 temp; + u32 temp32; + + sp00.unkC = 0x54; + sp00.unk12 = 6; + sp00.unk8 = 0; + sp00.unk10 = 5; + sp00.byteCount = ARRAY_COUNT(arr); + sp00.unk16 = 1; + + ptrArr = &arr[0]; + *ptrArr = 32; + + temp = unk24; + + if (temp > 80) { + temp -= 80; + sp00.unkA = ((temp * 116) / 18) + 116; + + if (*ptrArr >= 32) { + sp00.unk0 = 256; + sp00.unk2 = 256; + sp00.unk4 = 0; + sp00.unk6 = SA2_LABEL(gUnknown_030054B8)++; + sub_8052C84((const char *)&*ptrArr, &sp00); + } + } else if (temp > 20) { + temp -= 20; + sp00.unk0 = 497 - temp * 4; + sp00.unk2 = sp00.unk0; + sp00.unk4 = 0; + sp00.unk6 = SA2_LABEL(gUnknown_030054B8)++; + sp00.unkA = 88; + sp00.unkC = 68; + sub_8052C84((const char *)&*ptrArr, &sp00); + } else { + sp00.unkA = (temp * 116) / 20; + + if (*ptrArr >= 32) { + sp00.unk0 = 256; + sp00.unk2 = 256; + sp00.unk4 = 0; + sp00.unk6 = SA2_LABEL(gUnknown_030054B8)++; + sub_8052C84((const char *)arr, &sp00); + } + } + + if (unk24 >= 0x78) { + GameOverC *overC; + gCurTask->main = Task_DestroyGameOverD; + overD->unk20->unk18 = 1382; + overD->unk18->frames = 1464; + } + + temp = unk24 + 1; + overD->unk24 = temp; +} + +void Task_8056AC8(void) +{ + GameOverScreen *screen = TASK_DATA(gCurTask); + struct MP2KPlayerState *info = gMPlayTable[gSongTable[MUS_GAME_OVER].ms].info; + + gBldRegs.bldCnt = 0xFF; + gBldRegs.bldY = 0x10; + + if (((info->status & 0xFFFF) == 0) || (info->status & 0x80000000)) { + // _08056B10 + u16 prevIME, prevIE, prevDispstat; + + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + + prevIE = REG_IE; + prevIME = REG_IME; + prevDispstat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + + WriteSaveGame(); + + REG_IE = prevIE; + REG_IE; + REG_IME = prevIME; + REG_IME; + REG_DISPSTAT = prevDispstat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + + gFlags &= ~FLAGS_8000; + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + + if (screen->unk80 != 0) { + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + ApplyGameStageSettings(); + } else { + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + +#if DEBUG + CreateUnusedLevelSelect(); +#else + CreateSegaLogo(); +#endif + } + } +} + +void TaskDestructor_GameOverScreen(struct Task *t) +{ + GameOverScreen *screen = TASK_DATA(t); + VramFree(screen->s.graphics.dest); + VramFree(screen->s2.graphics.dest); + + gBldRegs.bldCnt = 0xFF; + gBldRegs.bldY = 0x10; +} + +void Task_8056CE0(void) +{ + GameOverC *overC = TASK_DATA(gCurTask); + s16 unk18 = overC->unk18; + + overC->unk18 = unk18 += 1; + + if (unk18 >= 120) { + // TODO: Why is this set, then reset? + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + gDispCnt |= DISPCNT_WIN0_ON; + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + + gCurTask->main = Task_8056D30; + } +} + +void Task_8056D30(void) +{ + GameOverC *overC = TASK_DATA(gCurTask); + s16 unk18 = overC->unk18; + + sub_805423C(&overC->unk0); + + gDispCnt |= DISPCNT_WIN0_ON; + + overC->unk18 = unk18 += 1; + + if (unk18 >= 136) { + gCurTask->main = Task_8056D80; + } +} + +void Task_8056D80(void) +{ + GameOverC *overC = TASK_DATA(gCurTask); + s16 unk18 = overC->unk18; + + sub_805423C(&overC->unk0); + + gDispCnt |= DISPCNT_WIN0_ON; + + overC->unk18 = unk18 += 1; + + if (unk18 >= 152) { + gCurTask->main = Task_8056DD0; + } +} + +void Task_8056DD0(void) +{ + GameOverC *overC = TASK_DATA(gCurTask); + s16 unk18 = overC->unk18; + + overC->unk18 = unk18 += 1; + + sub_80543A4(&overC->unk0); + + gDispCnt |= DISPCNT_WIN0_ON; + + if (unk18 >= 1382) { + gCurTask->main = Task_8056EC4; + } +} + +void Task_8056E24(void) +{ + GameOverC *overC = TASK_DATA(gCurTask); + s16 unk18 = overC->unk18; + + overC->unk18 = unk18 += 1; + + if (unk18 >= 120) { + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + gCurTask->main = Task_8056E64; + } +} + +void Task_8056E64(void) +{ + GameOverC *overC = TASK_DATA(gCurTask); + s16 unk18 = overC->unk18; + u16 r0, r5; + s32 r0_s; + + r0 = (unk18 - 120); + r0_s = r0 * 32; + r5 = r0_s / 96; + + sub_805423C(&overC->unk0); + + gDispCnt |= DISPCNT_WIN0_ON; + + overC->unk18 = unk18 += 1; + + if (r5 >= 96) { + gCurTask->main = Task_DestroyGameOverC; + } +} + +void Task_8056EC4(void) +{ + GameOverC *overC = TASK_DATA(gCurTask); + s16 unk18 = overC->unk18; + u16 r0, r5; + s32 r0_s; + + overC->unk18 = unk18 += 1; + + sub_805423C(&overC->unk0); + + gDispCnt |= DISPCNT_WIN0_ON; + + if (unk18 + 14 >= 1478) { + gCurTask->main = Task_DestroyGameOverC; + } +} + +void Task_DestroyGameOverC(void) { TaskDestroy(gCurTask); } + +void TaskDestructor_8056F30(struct Task *t) +{ + GameOverC *overC = TASK_DATA(t); + + VramFree(overC->unkC); + VramFree(overC->unk14); + VramFree(overC->unk10); +} + +void Task_8056F54(void) +{ + GameOverB0 *overB0 = TASK_DATA(gCurTask); + s16 unk18 = overB0->unk18; + + overB0->unk18 = unk18 += 1; + + if (unk18 >= 162) { + gCurTask->main = Task_8056714; + } +} +void Task_8056F80(void) +{ + GameOverB0 *overB0 = TASK_DATA(gCurTask); + s16 unk18 = overB0->unk18; + + sub_80530CC((const char *)&gUnknown_086883F8[0], &overB0->unk0); +} + +void Task_8056FA0(void) +{ + GameOverD *overD = TASK_DATA(gCurTask); + s16 unk24 = overD->unk24; + + overD->unk24 = unk24 += 1; + + if (unk24 >= 182) { + overD->unk24 = 0; + gCurTask->main = Task_805676C; + } +} + +void Task_DestroyGameOverD(void) { TaskDestroy(gCurTask); } \ No newline at end of file diff --git a/sa1/src/game/interactables/034.c b/sa1/src/game/interactables/034.c new file mode 100644 index 0000000000..b586ce2ee5 --- /dev/null +++ b/sa1/src/game/interactables/034.c @@ -0,0 +1,99 @@ +#include "global.h" +#include "task.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/stage/player.h" +#include "game/entity.h" + +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s32 worldX; + /* 0x08 */ s32 worldY; + /* 0x0C */ s32 left; + /* 0x10 */ s32 right; + /* 0x14 */ s32 top; + /* 0x18 */ s32 bottom; + /* 0x1C */ u8 unk1C; + /* 0x1D */ u8 meX; +} IA034; /* 0x20 */ + +void Task_Interactable034(void); + +// (96.64%) https://decomp.me/scratch/7a3DS +NONMATCH("asm/non_matching/game/interactables/Task_Interactable034.inc", void Task_Interactable034(void)) +{ + IA034 *ia = TASK_DATA(gCurTask); + + s32 i = 0; + do { + Player *p = &PLAYER(i); + + s32 playerX = I(p->qWorldX); + s32 playerY = I(p->qWorldY); + + if (IS_OUT_OF_DISPLAY_RANGE(ia->worldX, ia->worldY)) { + p->moveState &= ~MOVESTATE_8000; + SET_MAP_ENTITY_NOT_INITIALIZED(ia->me, ia->meX); + TaskDestroy(gCurTask); + return; + } + + if ((ia->left <= playerX) && (playerX < ia->right) && (ia->top <= playerY) && (playerY < ia->bottom)) { + if (!IS_ALIVE(p)) { + return; + } + + Player_TransitionCancelFlyingAndBoost(p); + p->moveState |= MOVESTATE_200 | MOVESTATE_4; + p->moveState |= MOVESTATE_IGNORE_INPUT; + p->heldInput = 0; + p->frameInput = 0; + p->charState = CHARSTATE_SPINATTACK; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 9); + + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + + // TODO: Is using gPlayer instead of 'p' a bug? + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + + if (p->character != CHARACTER_AMY) { + m4aSongNumStartOrChange(SE_SPIN_ATTACK); + } + } + + i++; + } while (i < gNumSingleplayerCharacters); +} +END_NONMATCH + +void CreateEntity_Interactable034(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Interactable034, sizeof(IA034), 0x2000, 0, NULL); + IA034 *ia = TASK_DATA(t); + s32 worldX, worldY; + + ia->me = me; + ia->meX = me->x; + ia->unk1C = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + + ia->worldX = worldX; + ia->worldY = worldY; + + worldX += (me->d.sData[0] * TILE_WIDTH); + ia->left = worldX; + worldY += (me->d.sData[1] * TILE_WIDTH); + ia->top = worldY; + worldX += (me->d.uData[2] * TILE_WIDTH); + ia->right = worldX; + worldY += (me->d.uData[3] * TILE_WIDTH); + ia->bottom = worldY; + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/039.c b/sa1/src/game/interactables/039.c new file mode 100644 index 0000000000..2ac1f85b27 --- /dev/null +++ b/sa1/src/game/interactables/039.c @@ -0,0 +1,78 @@ +#include "global.h" +#include "task.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/entity.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s32 worldX; + /* 0x08 */ s32 worldY; + /* 0x0C */ s32 left; + /* 0x10 */ s32 right; + /* 0x14 */ s32 top; + /* 0x18 */ s32 bottom; + /* 0x1C */ u8 unk1C; + /* 0x1D */ u8 meX; +} IA039; /* 0x20 */ + +void Task_Interactable039Main(void); + +void Task_Interactable039Main(void) +{ + IA039 *ia = TASK_DATA(gCurTask); + + s32 i = 0; + do { + Player *p = &PLAYER(i); + + s32 playerX = I(p->qWorldX); + s32 playerY = I(p->qWorldY); + + if (IS_OUT_OF_DISPLAY_RANGE(ia->worldX, ia->worldY)) { + p->moveState &= ~MOVESTATE_8000; + SET_MAP_ENTITY_NOT_INITIALIZED(ia->me, ia->meX); + TaskDestroy(gCurTask); + return; + } + + if ((ia->left <= playerX) && (playerX < ia->right) && (ia->top <= playerY) && (playerY < ia->bottom)) { + if (!IS_ALIVE(p)) { + return; + } + + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = -Q(4.5); + } + } + + i++; + } while (i < gNumSingleplayerCharacters); +} + +void CreateEntity_Interactable039(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Interactable039Main, sizeof(IA039), 0x2000, 0, NULL); + IA039 *ia = TASK_DATA(t); + s32 worldX, worldY; + + ia->me = me; + ia->meX = me->x; + ia->unk1C = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + + ia->worldX = worldX; + ia->worldY = worldY; + + worldX += (me->d.sData[0] * TILE_WIDTH); + ia->left = worldX; + worldY += (me->d.sData[1] * TILE_WIDTH); + ia->top = worldY; + worldX += (me->d.uData[2] * TILE_WIDTH); + ia->right = worldX; + worldY += (me->d.uData[3] * TILE_WIDTH); + ia->bottom = worldY; + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/096.c b/sa1/src/game/interactables/096.c new file mode 100644 index 0000000000..581c5f9136 --- /dev/null +++ b/sa1/src/game/interactables/096.c @@ -0,0 +1,66 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/stage/player.h" + +#include "constants/char_states.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x30]; + /* 0x3C */ u8 unk3C; +} IA096; + +void Task_Interactable096(void); + +void Task_Interactable096(void) +{ + IA096 *ia = TASK_DATA(gCurTask); + MapEntity *me = ia->base.me; + s16 worldX, worldY; + s16 screenX, screenY; + s32 i; + + worldX = TO_WORLD_POS(ia->base.meX, ia->base.regionX); + worldY = TO_WORLD_POS(me->y, ia->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((worldX - 8 <= I(PLAYER(i).qWorldX)) && ((worldX + 8) >= I(PLAYER(i).qWorldX)) && (worldY - 8 <= I(PLAYER(i).qWorldY)) + && ((worldY + 8) >= I(PLAYER(i).qWorldY))) { + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).charState = CHARSTATE_SPINATTACK; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ia->base.meX); + TaskDestroy(gCurTask); + return; + } +} + +void CreateEntity_Interactable096(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Interactable096, sizeof(IA096), 0x2000, 0, NULL); + IA096 *ia = TASK_DATA(t); + + ia->base.regionX = regionX; + ia->base.regionY = regionY; + ia->base.me = me; + ia->base.meX = me->x; + ia->base.id = id; + ia->unk3C = 0; + + SET_MAP_ENTITY_INITIALIZED(me); +} diff --git a/sa1/src/game/interactables/107.c b/sa1/src/game/interactables/107.c new file mode 100644 index 0000000000..e67dba56af --- /dev/null +++ b/sa1/src/game/interactables/107.c @@ -0,0 +1,178 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x40 */ u16 unk40[NUM_SINGLEPLAYER_CHARS_MAX]; +} IA107; + +void Task_Interactable107(void); +void TaskDestructor_SmallFallBlock(struct Task *t); + +void CreateEntity_Interactable107(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + IA107 *ia; + s32 i; + + t = TaskCreate(Task_Interactable107, sizeof(IA107), 0x2000, 0, NULL); + + ia = TASK_DATA(t); + + ia->base.regionX = regionX; + ia->base.regionY = regionY; + ia->base.me = me; + ia->base.meX = me->x; + ia->base.id = id; + + ia->unk3C = 0; + ia->unk3D = me->d.sData[0]; + + i = 0; + do { + ia->unk3E[i] = 0; + ia->unk40[i] = 0; + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_INITIALIZED(me); +} + +void Task_Interactable107(void) +{ + IA107 *ia = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + s16 screenX, screenY; + s16 sp10; + s16 sp14; + s32 sp18; + MapEntity *me = ia->base.me; + s32 i; + + worldX = TO_WORLD_POS(ia->base.meX, ia->base.regionX); + worldY = TO_WORLD_POS(me->y, ia->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + do { + s16 theta; + + sp10 = 0; + sp14 = 0; + + if (PLAYER(i).moveState & MOVESTATE_DEAD) { + continue; + } + + if (GetBit(ia->unk3C, i)) { + if (ia->unk3D == 0) { + sp18 = 4; + + if (PLAYER(i).frameInput & DPAD_RIGHT) { + sp10 = Q(9); + } else if (PLAYER(i).frameInput & DPAD_DOWN) { + sp14 = Q(9); + } + } else if (ia->unk3D == 1) { + sp18 = 0; + + if (PLAYER(i).frameInput & DPAD_RIGHT) { + sp10 = Q(7); + sp14 = Q(8); + } else if (PLAYER(i).frameInput & DPAD_LEFT) { + sp10 = -Q(9); + sp14 = Q(7); + } + } else if (ia->unk3D == 2) { + sp18 = 0; + + if (PLAYER(i).frameInput & DPAD_RIGHT) { + sp10 = Q(9); + } + } else if (ia->unk3D == 3) { + sp18 = 0; + + if (PLAYER(i).frameInput & DPAD_DOWN) { + sp14 = Q(9); + } + } + + ia->unk40[i] += 4; + + if (ia->unk40[i] > SIN_PERIOD) { + s32 theta = -SIN_PERIOD; + ia->unk40[i] += theta; + } + + PLAYER(i).qWorldX = Q(worldX) + Div(COS((ia->unk40[i] * 8) & ONE_CYCLE), 16); + PLAYER(i).qWorldY = Q(worldY - sp18) + Div(SIN((ia->unk40[i] * 8) & ONE_CYCLE), 16); + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + if (sp10 != 0 || sp14 != 0) { + PLAYER(i).qWorldX = Q(worldX); + PLAYER(i).qWorldY = Q(worldY); + + ia->unk3E[i] = 20; + ClearBit(ia->unk3C, i); + + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).rotation = 0; + PLAYER(i).qSpeedAirY = sp14; + PLAYER(i).qSpeedAirX = sp10; + PLAYER(i).qSpeedGround = sp10; + } + } else if (ia->unk3E[i] > 0) { + ia->unk3E[i]--; + } else { + if (((worldX - 10 <= I(PLAYER(i).qWorldX)) && (worldX + 10 >= I(PLAYER(i).qWorldX))) + && ((worldY - 10 <= I(PLAYER(i).qWorldY)) && (worldY + 10 >= I(PLAYER(i).qWorldY)))) { + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + ia->unk40[i] = 0; + PLAYER(i).qWorldX = Q(worldX); + PLAYER(i).qWorldY = Q(worldY); + + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedGround = 0; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_SPRING); + + SetBit(ia->unk3C, i); + } + } + } while (++i < gNumSingleplayerCharacters); + + if ((ia->unk3C & 0x3) == 0) { + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ia->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} \ No newline at end of file diff --git a/sa1/src/game/interactables/113.c b/sa1/src/game/interactables/113.c new file mode 100644 index 0000000000..1ef890c8e5 --- /dev/null +++ b/sa1/src/game/interactables/113.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/stage/player_controls.h" + +#include "constants/move_states.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x30]; + /* 0x3C */ s8 unk3C; +} IA113; /* 0x40 */ + +void Task_Interactable113(void); + +void Task_Interactable113(void) +{ + IA113 *ia = TASK_DATA(gCurTask); + MapEntity *me = ia->base.me; + Player *player, *partner; + s16 worldX, worldY; + s16 screenX, screenY; + s32 i; + + worldX = TO_WORLD_POS(ia->base.meX, ia->base.regionX); + worldY = TO_WORLD_POS(me->y, ia->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + player = &gPlayer; + partner = &gPartner; + do { + if ((worldX <= I(PLAYER(i).qWorldX)) && ((worldX + (me->d.uData[2] * TILE_WIDTH)) >= I(PLAYER(i).qWorldX)) + && (worldY <= I(PLAYER(i).qWorldY)) && ((worldY + (me->d.uData[3] * TILE_WIDTH)) >= I(PLAYER(i).qWorldY))) { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD) && !GetBit(ia->unk3C, i)) { + SetBit(ia->unk3C, i); + PLAYER(i).moveState |= MOVESTATE_IGNORE_INPUT; + PLAYER(i).frameInput = 0; + PLAYER(i).heldInput = 0; + } + } else if (GetBit(ia->unk3C, i)) { + ClearBit(ia->unk3C, i); + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + } while (++i < gNumSingleplayerCharacters); + + if (ia->unk3C == 0) { + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ia->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} + +void CreateEntity_Interactable113(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Interactable113, sizeof(IA113), 0x2000, 0, NULL); + IA113 *ia = TASK_DATA(t); + + ia->base.regionX = regionX; + ia->base.regionY = regionY; + ia->base.me = me; + ia->base.meX = me->x; + ia->base.id = id; + ia->unk3C = 0; + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/air_bubbles.c b/sa1/src/game/interactables/air_bubbles.c new file mode 100644 index 0000000000..d158f05187 --- /dev/null +++ b/sa1/src/game/interactables/air_bubbles.c @@ -0,0 +1,305 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x3E */ u16 unk3E; + /* 0x40 */ u16 unk40; + /* 0x40 */ s16 unk42; +} AirBubbles; + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3D */ s8 unk3D; + /* 0x3E */ u16 unk3E; + /* 0x40 */ s16 worldX; + /* 0x42 */ s16 worldY; +} AirBubbleBig; + +const u16 gUnknown_086CEE60[] = { + 0x012D, 0x00F1, 0x0079, 0x0105, 0x012D, 0x0079, 0x00C9, 0x0079, +}; + +void Task_AirBubbles(void); +void CreateBubbleContainingAir(CamCoord worldX, CamCoord worldY, u8 param2); +void Task_BubbleContainingAir(void); +void sub_80914F8(CamCoord worldX, CamCoord worldY, u8 param2); +void Task_809141C(void); +void Task_80915F0(void); +void TaskDestructor_AirBubbles(struct Task *t); +void TaskDestructor_AirBubbleBig(struct Task *t); + +void CreateEntity_AirBubbles(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_AirBubbles, sizeof(AirBubbles), 0x2000, 0, TaskDestructor_AirBubbles); + AirBubbles *bubbles = TASK_DATA(t); + Sprite *s = &bubbles->s; + + bubbles->base.regionX = regionX; + bubbles->base.regionY = regionY; + bubbles->base.me = me; + bubbles->base.meX = me->x; + bubbles->base.id = id; + + bubbles->unk3E = 120; + bubbles->unk40 = 0; + bubbles->unk3C = 60; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_MINIBUBBLES); + s->graphics.anim = SA1_ANIM_MINIBUBBLES; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_AirBubbles(void) +{ + AirBubbles *bubbles = TASK_DATA(gCurTask); + Sprite *s = &bubbles->s; + MapEntity *me = bubbles->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(bubbles->base.meX, bubbles->base.regionX); + worldY = TO_WORLD_POS(me->y, bubbles->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (--bubbles->unk3E == 0) { + CreateBubbleContainingAir(worldX, worldY - 4, 4); + bubbles->unk3E = gUnknown_086CEE60[bubbles->unk40]; + bubbles->unk40 = ((bubbles->unk40 + 1) % ARRAY_COUNT(gUnknown_086CEE60)); + } + + if (--bubbles->unk3C == 0) { + sub_80914F8(worldX, (worldY - 4), (bubbles->unk3E >> 3) + gStageTime); + bubbles->unk3C = Div(gUnknown_086CEE60[gStageTime % ARRAY_COUNT(gUnknown_086CEE60)], 2); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bubbles->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateBubbleContainingAir(CamCoord worldX, CamCoord worldY, u8 param2) +{ + struct Task *t = TaskCreate(Task_BubbleContainingAir, sizeof(AirBubbleBig), 0x2000, 0, TaskDestructor_AirBubbleBig); + AirBubbleBig *bubbles = TASK_DATA(t); + Sprite *s = &bubbles->s; + MapEntity *me = bubbles->base.me; + + bubbles->unk3C = param2; + bubbles->unk3E = 0; + bubbles->worldX = worldX; + bubbles->worldY = worldY; + + s->x = worldX; + s->y = worldY; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_AIR_BUBBLES); + s->graphics.anim = SA1_ANIM_AIR_BUBBLES; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +// (98.78%) https://decomp.me/scratch/enfXg +NONMATCH("asm/non_matching/game/interactables/air_bubbles__Task_BubbleContainingAir.inc", void Task_BubbleContainingAir(void)) +{ + AirBubbleBig *bubbles = TASK_DATA(gCurTask); + Sprite *s = &bubbles->s; + + s->x = bubbles->worldX - gCamera.x + (SIN((bubbles->unk3E * 3) & (SIN_PERIOD - 1)) >> 11); + s->y = bubbles->worldY - gCamera.y - (bubbles->unk3E >> 1); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y) || (gWater.currentWaterLevel < 0) + || (bubbles->worldY - (bubbles->unk3E >> 1) < gWater.currentWaterLevel)) { + TaskDestroy(gCurTask); + return; + } + + if (bubbles->unk3C * 8 > ++bubbles->unk3E) { + UpdateSpriteAnimation(s); + } else if (bubbles->unk3C == 4) { + // _080911FC + UpdateSpriteAnimation(s); + } + // _0809120A + + if ((bubbles->unk3C == 4) && (bubbles->unk3E >= 80)) { + // _08091220 + s32 i; + + i = 0; + do { + if (Coll_Player_Entity_Intersection(s, s->x + gCamera.x, s->y + gCamera.y, &PLAYER(i))) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_27; + // _0809128A + + if (PLAYER(i).moveState & MOVESTATE_4) { + // _080912AA + PLAYER(i).moveState &= ~MOVESTATE_4; + // _080912C4 + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + if (PLAYER(i).moveState & MOVESTATE_IN_AIR) { + // _08091300 + PLAYERFN_SET_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + } else { + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + } + } + + // _0809133A + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedGround = 0; + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).framesUntilDrownCountDecrement = GBA_FRAMES_PER_SECOND; + PLAYER(i).secondsUntilDrown = 30; + + if (PLAYER(i).playerID == PLAYER_1) { + m4aSongNumStop(MUS_DROWNING); + } + m4aSongNumStart(SE_AIR_BUBBLE); + + gCurTask->main = Task_809141C; + bubbles->unk3D = 0x10; + } + } while (++i < gNumSingleplayerCharacters); + } + + DisplaySprite(s); +} +END_NONMATCH + +void Task_809141C(void) +{ + AirBubbleBig *bubbles = TASK_DATA(gCurTask); + Sprite *s = &bubbles->s; + + s->x = bubbles->worldX - gCamera.x + (SIN((bubbles->unk3E * 3) & (SIN_PERIOD - 1)) >> 11); + s->y = bubbles->worldY - gCamera.y - (bubbles->unk3E >> 1); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y) || (--bubbles->unk3D < 0) || (gWater.currentWaterLevel < 0) + || (bubbles->worldY - (bubbles->unk3E >> 1) < gWater.currentWaterLevel)) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void sub_80914F8(CamCoord worldX, CamCoord worldY, u8 param2) +{ + struct Task *t = TaskCreate(Task_80915F0, sizeof(AirBubbleBig), 0x2000, 0, TaskDestructor_AirBubbleBig); + AirBubbleBig *bubbles = TASK_DATA(t); + Sprite *s = &bubbles->s; + MapEntity *me = bubbles->base.me; + + bubbles->unk3C = param2 & 0xF; + bubbles->unk3E = 0; + bubbles->worldX = worldX - 8; + bubbles->worldY = worldY; + + s->x = worldX; + s->y = worldY; + + if (param2 & 0x1) { + s->graphics.dest = VRAM_RESERVED_BUBBLES_GROUP; + s->graphics.anim = SA1_ANIM_BUBBLES_GROUP; + s->variant = 0; + } else { + s->graphics.dest = VRAM_RESERVED_BUBBLES_SMALL; + s->graphics.anim = SA1_ANIM_BUBBLES_SMALL; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_80915F0(void) +{ + AirBubbleBig *bubbles = TASK_DATA(gCurTask); + Sprite *s = &bubbles->s; + + s->x = bubbles->worldX - gCamera.x + (SIN((bubbles->unk3E * 3) & (SIN_PERIOD - 1)) >> 11) + bubbles->unk3C; + s->y = bubbles->worldY - gCamera.y - (bubbles->unk3E >> 1); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y) || (gWater.currentWaterLevel < 0) + || (bubbles->worldY - (bubbles->unk3E >> 1) < gWater.currentWaterLevel)) { + TaskDestroy(gCurTask); + return; + } + + bubbles->unk3E++; + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_AirBubbles(struct Task *t) +{ + AirBubbles *bubbles = TASK_DATA(t); + VramFree(bubbles->s.graphics.dest); +} + +void TaskDestructor_AirBubbleBig(struct Task *t) +{ + AirBubbleBig *bubbles = TASK_DATA(t); + + if (bubbles->unk3C == 4) { + VramFree(bubbles->s.graphics.dest); + } +} diff --git a/sa1/src/game/interactables/booster.c b/sa1/src/game/interactables/booster.c new file mode 100644 index 0000000000..08ea832726 --- /dev/null +++ b/sa1/src/game/interactables/booster.c @@ -0,0 +1,344 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; +} Booster; + +void Task_Booster(void); +void TaskDestructor_Booster(struct Task *); + +void CreateEntity_Booster(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Booster, sizeof(Booster), 0x2000, 0, TaskDestructor_Booster); + Booster *booster = TASK_DATA(t); + Sprite *s = &booster->s; + + booster->base.regionX = regionX; + booster->base.regionY = regionY; + booster->base.me = me; + booster->base.meX = me->x; + booster->base.id = id; + + booster->unk3C = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOOSTER); + s->graphics.anim = SA1_ANIM_BOOSTER; + s->variant = 0; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (booster->unk3C != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } +} + +void CreateEntity_Booster_SlightLeft(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Booster, sizeof(Booster), 0x2000, 0, TaskDestructor_Booster); + Booster *booster = TASK_DATA(t); + Sprite *s = &booster->s; + + booster->base.regionX = regionX; + booster->base.regionY = regionY; + booster->base.me = me; + booster->base.meX = me->x; + booster->base.id = id; + + booster->unk3C = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_BOOSTER, 2); + s->graphics.anim = SA1_ANIM_BOOSTER; + s->variant = 2; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (booster->unk3C != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } +} + +void CreateEntity_Booster_SlightRight(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Booster, sizeof(Booster), 0x2000, 0, TaskDestructor_Booster); + Booster *booster = TASK_DATA(t); + Sprite *s = &booster->s; + + booster->base.regionX = regionX; + booster->base.regionY = regionY; + booster->base.me = me; + booster->base.meX = me->x; + booster->base.id = id; + + booster->unk3C = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_BOOSTER, 2); + s->graphics.anim = SA1_ANIM_BOOSTER; + s->variant = 1; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (booster->unk3C != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } +} + +void CreateEntity_Booster_Wall(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Booster, sizeof(Booster), 0x2000, 0, TaskDestructor_Booster); + Booster *booster = TASK_DATA(t); + Sprite *s = &booster->s; + + booster->base.regionX = regionX; + booster->base.regionY = regionY; + booster->base.me = me; + booster->base.meX = me->x; + booster->base.id = id; + + booster->unk3C = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOOSTER_VERT); + s->graphics.anim = SA1_ANIM_BOOSTER_VERT; + s->variant = 0; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (booster->unk3C != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } +} + +void CreateEntity_Booster_Steep(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Booster, sizeof(Booster), 0x2000, 0, TaskDestructor_Booster); + Booster *booster = TASK_DATA(t); + Sprite *s = &booster->s; + + booster->base.regionX = regionX; + booster->base.regionY = regionY; + booster->base.me = me; + booster->base.meX = me->x; + booster->base.id = id; + + booster->unk3C = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOOSTER_STEEP_COUNTER_CLOCKWISE); + s->graphics.anim = SA1_ANIM_BOOSTER_STEEP_COUNTER_CLOCKWISE; + s->variant = 0; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (booster->unk3C != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } +} + +void CreateEntity_Booster_Steep2(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Booster, sizeof(Booster), 0x2000, 0, TaskDestructor_Booster); + Booster *booster = TASK_DATA(t); + Sprite *s = &booster->s; + + booster->base.regionX = regionX; + booster->base.regionY = regionY; + booster->base.me = me; + booster->base.meX = me->x; + booster->base.id = id; + + booster->unk3C = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOOSTER_STEEP_CLOCKWISE); + s->graphics.anim = SA1_ANIM_BOOSTER_STEEP_CLOCKWISE; + s->variant = 0; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (booster->unk3C != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } +} + +void Task_Booster(void) +{ + CamCoord worldX, worldY; + Sprite *s; + MapEntity *me; + Booster *booster; + s32 i; + + booster = TASK_DATA(gCurTask); + s = &booster->s; + me = booster->base.me; + + worldX = TO_WORLD_POS(booster->base.meX, booster->base.regionX); + worldY = TO_WORLD_POS(me->y, booster->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), (1 - PLAYER(i).spriteOffsetY), +(PLAYER(i).spriteOffsetX + 5), + (PLAYER(i).spriteOffsetY - 1) }; + + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(PLAYER(i).qWorldX), I(PLAYER(i).qWorldY), (*((Rect8 *)&arr)))) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + m4aSongNumStart(SE_BOOSTER); + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if (PLAYER(i).charState == CHARSTATE_BRAKE) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } + + if ((PLAYER(i).charState != CHARSTATE_SPINATTACK) && (PLAYER(i).charState != CHARSTATE_SPINDASH) + && (PLAYER(i).charState != CHARSTATE_7)) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + if (PLAYER(i).qSpeedGround > -Q(9)) { + PLAYER(i).qSpeedGround = -Q(12); + PLAYER(i).qSpeedAirX = -Q(12); + } + + PLAYER(i).SA2_LABEL(unk62) = 0; + } else { + if (PLAYER(i).charState == CHARSTATE_BRAKE) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } + + if ((PLAYER(i).charState != CHARSTATE_SPINATTACK) && (PLAYER(i).charState != CHARSTATE_SPINDASH) + && (PLAYER(i).charState != CHARSTATE_7)) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } + + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + + if (PLAYER(i).qSpeedGround < +Q(9)) { + PLAYER(i).qSpeedGround = +Q(12); + PLAYER(i).qSpeedAirX = +Q(12); + } + + PLAYER(i).SA2_LABEL(unk62) = 0; + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, booster->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_Booster(struct Task *t) +{ + Booster *booster = TASK_DATA(t); + VramFree(booster->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/boulder_spawner.c b/sa1/src/game/interactables/boulder_spawner.c new file mode 100644 index 0000000000..12c7552fe5 --- /dev/null +++ b/sa1/src/game/interactables/boulder_spawner.c @@ -0,0 +1,434 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +#define BOULDER_SPAWN_RATE TIME(0, 2) + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C[0x74]; + /* 0xB0 */ u8 unkB0; + /* 0xB1 */ u8 unkB1; + /* 0xB2 */ u8 fillerB2[0x2]; + /* 0xB4 */ u8 fillerB4[0x7]; + /* 0xBB */ u8 unkBB; +} BoulderSpawner; /* 0xBC */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 filler3C[0x60]; + /* 0x9C */ s32 qUnk9C; + /* 0xA0 */ s32 qUnkA0; + /* 0xA4 */ s32 qUnkA4; + /* 0xA8 */ s32 qUnkA8; + /* 0xAC */ s32 qUnkAC; + /* 0xB0 */ u8 unkB0; + /* 0xB1 */ u8 unkB1; + /* 0xB2 */ s16 unkB2; + /* 0xB4 */ s16 unkB4; + /* 0x3C */ u8 fillerB6[0x6]; +} Boulder; /* 0xBC */ + +typedef struct { + /* 0x00 */ Sprite sprites[4]; + /* 0xC0 */ SpriteTransform transforms[4]; + /* 0xF0 */ u16 unkF0; + /* 0xF2 */ s16 qUnkF2; +} BoulderDebris; /* 0xF4 */ + +void Task_BoulderMain(void); +void Task_BoulderDebris(void); +void Task_BoulderSpawnerMain(void); +void TaskDestructor_Boulder(struct Task *t); +void TaskDestructor_BoulderDebris(struct Task *t); +void CreateBoulderDebris(s32 x, s32 y); + +void Task_BoulderSpawnerMain(void) +{ + CamCoord worldX, worldY; + BoulderSpawner *spawner; + MapEntity *me; + + spawner = TASK_DATA(gCurTask); + me = spawner->base.me; + + worldX = TO_WORLD_POS(spawner->base.meX, spawner->base.regionX); + worldY = TO_WORLD_POS(me->y, spawner->base.regionY); + + if (Mod(gStageTime, BOULDER_SPAWN_RATE) == 0) { + struct Task *t = TaskCreate(Task_BoulderMain, sizeof(Boulder), 0x2000, 0, TaskDestructor_Boulder); + + Boulder *boulder = TASK_DATA(t); + Sprite *s = &boulder->s; + + boulder->base.regionX = spawner->base.regionX; + boulder->base.regionY = spawner->base.regionY; + boulder->base.meX = spawner->base.meX; + // TODO: Isn't this reading undefined memory? + boulder->base.id = spawner->unkBB; + boulder->qUnk9C = Q(0); + boulder->qUnkA0 = Q(0.25); + boulder->qUnkA4 = Q(0); + boulder->qUnkA8 = Q(0); + boulder->qUnkAC = Q(0); + boulder->unkB0 = 0; + boulder->unkB1 = spawner->unkB1; + + boulder->unkB2 = s->x = worldX; + boulder->unkB4 = s->y = worldY; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_FALLING_BOULDER); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_FALLING_BOULDER; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spawner->base.meX); + TaskDestroy(gCurTask); + return; + } +} + +void Task_BoulderMain(void) +{ + Boulder *boulder = TASK_DATA(gCurTask); + Sprite *s = &boulder->s; + s16 unkB2 = boulder->unkB2; + s16 unkB4 = boulder->unkB4; + s32 res; + s32 i; + u8 sp08[4]; + + s->x = unkB2 + I(boulder->qUnkA8) - gCamera.x; + s->y = unkB4 + I(boulder->qUnkAC) - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(unkB2, unkB4) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (Coll_Player_Entity_Intersection(s, unkB2 + I(boulder->qUnkA8), unkB4 + I(boulder->qUnkAC), &PLAYER(i))) { + Coll_DamagePlayer(&PLAYER(i)); + } + } + } while (++i < gNumSingleplayerCharacters); + + if (boulder->unkB0) { + res = SA2_LABEL(sub_801F07C)(unkB4 + I(boulder->qUnkAC), unkB2 + I(boulder->qUnkA8), 1, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (res >= 0) { + boulder->qUnkA4 += 32; + } else { + boulder->qUnkA4 = 0; + boulder->unkB0 = 0; + + if (boulder->unkB0 != 0) { + boulder->unkB0--; + } else { + if (boulder->unkB1 != 0) { + boulder->unkB1--; + } else { + SA2_LABEL(gUnknown_0300194C) = s->x; + SA2_LABEL(gUnknown_03002820) = s->y; + + CreateBoulderDebris(unkB2 + I(boulder->qUnkA8) - SA2_LABEL(gUnknown_0300194C), + unkB4 + I(boulder->qUnkAC) - SA2_LABEL(gUnknown_03002820)); + + if (!IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + m4aSongNumStart(SE_EXPLOSION); + } + + TaskDestroy(gCurTask); + return; + } + } + } + } else { + res = SA2_LABEL(sub_801F07C)(unkB4 + I(boulder->qUnkAC), unkB2 + I(boulder->qUnkA8), 1, +8, sp08, SA2_LABEL(sub_801EE64)); + + if (res > 5) { + boulder->qUnkA4 += ABS2(Div(boulder->qUnkA0 * 2, 5)); + boulder->unkB0 = 1; + } else { + boulder->qUnkA0 += Div(COS(sp08[0] * 4), 1250); + boulder->qUnkAC += Q(res + 2); + } + } + + boulder->qUnkA8 += boulder->qUnkA0; + boulder->qUnkAC += boulder->qUnkA4; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateBoulderDebris(s32 x, s32 y) +{ + struct Task *t = TaskCreate(Task_BoulderDebris, sizeof(BoulderDebris), 0x2000, 0, TaskDestructor_BoulderDebris); + BoulderDebris *debris = TASK_DATA(t); + + Sprite *s; + SpriteTransform *tf; + + { + s = &debris->sprites[0]; + tf = &debris->transforms[0]; + + debris->unkF0 = 0; + debris->qUnkF2 = -Q(2); +#ifdef BUG_FIX + // BUG: Allocated wrong amount of VRAM data + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ROCK_DEBRIS_S); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ROCK_DEBRIS_S; +#else + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ROCK_DEBRIS_L); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ROCK_DEBRIS_S; +#endif + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 16); + + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = x; + tf->y = y; + + UpdateSpriteAnimation(s); + +#ifdef BUG_FIX + DmaCopy16(3, s, &debris->sprites[1], sizeof(debris->sprites[1])); + s = &debris->sprites[1]; + DmaCopy16(3, tf, &debris->transforms[1], sizeof(debris->transforms[1])); + tf = &debris->transforms[1]; +#else + DmaCopy16(3, s, (s = &debris->sprites[1]), sizeof(*s)); + DmaCopy16(3, tf, (tf = &debris->transforms[1]), sizeof(*tf)); +#endif + + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 17); + tf->y = y - 16; + } + + s = &debris->sprites[2]; + +#ifdef BUG_FIX + DmaCopy16(3, tf, &debris->transforms[2], sizeof(debris->transforms[1])); + tf = &debris->transforms[2]; +#else + DmaCopy16(3, tf, (tf = &debris->transforms[2]), sizeof(*tf)); +#endif + { +#ifdef BUG_FIX + // BUG: Allocated wrong amount of VRAM data + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ROCK_DEBRIS_L); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ROCK_DEBRIS_L; +#else + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ROCK_DEBRIS_S); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ROCK_DEBRIS_L; +#endif + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 18); + + tf->y = y; + + UpdateSpriteAnimation(s); + +#ifdef BUG_FIX + DmaCopy16(3, s, &debris->sprites[3], sizeof(debris->sprites[3])); + s = &debris->sprites[3]; + DmaCopy16(3, tf, &debris->transforms[3], sizeof(debris->transforms[3])); + tf = &debris->transforms[3]; +#else + DmaCopy16(3, s, (s = &debris->sprites[3]), sizeof(*s)); + DmaCopy16(3, tf, (tf = &debris->transforms[3]), sizeof(*tf)); +#endif + + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 19); + tf->y = y - 16; + } +} + +void Task_BoulderDebris(void) +{ + BoulderDebris *debris = TASK_DATA(gCurTask); + Sprite *s = &debris->sprites[0]; + SpriteTransform *tf; + s16 prevTransformX, prevTransformY; + s16 scale; + + if (debris->unkF0++ > 60) { + TaskDestroy(gCurTask); + return; + } + + debris->qUnkF2 += Q(40. / 256.); + + { // 0 + tf = &debris->transforms[0]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x -= debris->unkF0 * 2; + + scale = tf->qScaleX + Q(8. / 256.); + if (scale > Q(2)) { + scale = Q(2); + } + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation -= Q(42. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } + + { // 1 + s = &debris->sprites[1]; + tf = &debris->transforms[1]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x += debris->unkF0; + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation += Q(42. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } + + { // 2 + s = &debris->sprites[2]; + tf = &debris->transforms[2]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x += debris->unkF0 * 2; + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation += Q(14. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } + + { // 3 + s = &debris->sprites[3]; + tf = &debris->transforms[3]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x -= debris->unkF0; + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation -= Q(14. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } +} + +void CreateEntity_BoulderSpawner(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_BoulderSpawnerMain, sizeof(BoulderSpawner), 0x2000, 0, NULL); + BoulderSpawner *spawner = TASK_DATA(t); + + spawner->base.regionX = regionX; + spawner->base.regionY = regionY; + spawner->base.me = me; + spawner->base.meX = me->x; + spawner->base.id = id; + + spawner->unkB1 = me->d.sData[0]; + + SET_MAP_ENTITY_INITIALIZED(me); +} + +void TaskDestructor_Boulder(struct Task *t) +{ + Boulder *boulder = TASK_DATA(t); + VramFree(boulder->s.graphics.dest); +} + +void TaskDestructor_BoulderDebris(struct Task *t) +{ + BoulderDebris *debris = TASK_DATA(t); + VramFree(debris->sprites[0].graphics.dest); + VramFree(debris->sprites[2].graphics.dest); +} diff --git a/sa1/src/game/interactables/bounce_block.c b/sa1/src/game/interactables/bounce_block.c new file mode 100644 index 0000000000..eb609881d7 --- /dev/null +++ b/sa1/src/game/interactables/bounce_block.c @@ -0,0 +1,182 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 bounceOffset; + /* 0x40 */ u8 unk40; +} BounceBlock; + +void Task_BounceBlock(void); +void Task_80752A4(void); +bool32 sub_80753D0(Sprite *s, s32 worldX, s32 worldY); +void TaskDestructor_BounceBlock(struct Task *t); + +extern const AnimId sBounceBlockAnims[NUM_LEVEL_IDS]; + +void CreateEntity_BounceBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_BounceBlock, sizeof(BounceBlock), 0x2000, 0, TaskDestructor_BounceBlock); + BounceBlock *block = TASK_DATA(t); + Sprite *s = &block->s; + + block->base.regionX = regionX; + block->base.regionY = regionY; + block->base.me = me; + block->base.meX = me->x; + block->base.id = id; + + block->bounceOffset = 0; + block->unk40 = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOUNCE_BLOCK_1); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = sBounceBlockAnims[gCurrentLevel]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_BounceBlock(void) +{ + BounceBlock *block = TASK_DATA(gCurTask); + Sprite *s = &block->s; + MapEntity *me = block->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(block->base.meX, block->base.regionX); + worldY = TO_WORLD_POS(me->y, block->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (sub_80753D0(s, worldX, worldY)) { + block->unk40 = 30; + block->bounceOffset = 0; + s->variant = 0; + + gCurTask->main = Task_80752A4; + m4aSongNumStart(SE_SPRING); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, block->base.meX); + TaskDestroy(gCurTask); + return; + } else { + DisplaySprite(s); + } +} + +void Task_80752A4(void) +{ + BounceBlock *block = TASK_DATA(gCurTask); + Sprite *s = &block->s; + MapEntity *me = block->base.me; + CamCoord worldX, worldY; + s32 newBounceOffset; + + worldX = TO_WORLD_POS(block->base.meX, block->base.regionX); + worldY = TO_WORLD_POS(me->y, block->base.regionY); + + s->x = worldX - gCamera.x; + newBounceOffset = Div(SIN(block->bounceOffset & (SIN_PERIOD - 1)), SIN_PERIOD); + s->y = worldY - gCamera.y + newBounceOffset; + + if (sub_80753D0(s, worldX, worldY)) { + block->unk40 = 30; + block->bounceOffset = 0; + s->variant = 0; + + m4aSongNumStart(SE_SPRING); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, block->base.meX); + TaskDestroy(gCurTask); + return; + } else { + block->bounceOffset += Q(360. / 1024.); + + if (--block->unk40 == 0) { + gCurTask->main = Task_BounceBlock; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +bool32 sub_80753D0(Sprite *s, s32 worldX, s32 worldY) +{ + bool32 result = FALSE; + s32 i; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((sub_80096B0(s, worldX, worldY, &PLAYER(i)) & 0x8)) { + if (gGameMode == 3 || gGameMode == 5) { + PLAYER(i).timerInvulnerability = 30; + } + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + if (gSelectedCharacter == CHARACTER_AMY) { + PLAYER(i).moveState |= MOVESTATE_2000000; + } + + if (PLAYER(i).heldInput & DPAD_LEFT) { + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + } else if (PLAYER(i).heldInput & DPAD_RIGHT) { + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + } + + PLAYER(i).qSpeedAirY = -Q(5); + PLAYER(i).charState = CHARSTATE_BOUNCE; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + result = TRUE; + } + } + + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +void TaskDestructor_BounceBlock(struct Task *t) +{ + BounceBlock *block = TASK_DATA(t); + VramFree(block->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/bowl.c b/sa1/src/game/interactables/bowl.c new file mode 100644 index 0000000000..826683bc94 --- /dev/null +++ b/sa1/src/game/interactables/bowl.c @@ -0,0 +1,376 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C[2]; + /* 0x40 */ u16 unk40[2]; + /* 0x44 */ u16 unk44; + /* 0x48 */ u32 unk48[2]; + /* 0x50 */ u8 unk50; + /* 0x51 */ u8 unk51; +} Bowl; + +void Task_Bowl(void); +void Task_BowlRotating(void); +void Task_Bowl3(void); +void TaskDestructor_Bowl(struct Task *t); + +ALIGNED(4) +const AnimId sBowlAnimations[NUM_LEVEL_IDS] = { + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // Zone 1 + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // Zone 2 + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // Zone 3 + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // Zone 4 + SA1_ANIM_BOWL_5, SA1_ANIM_BOWL_5, // Zone 5 + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // Zone 6 + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // Zone 7 + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // MP 1, 2 + SA1_ANIM_BOWL_3, SA1_ANIM_BOWL_3, // MP 3, 4 +}; + +void CreateEntity_Bowl(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Bowl, sizeof(Bowl), 0x2000, 0, TaskDestructor_Bowl); + Bowl *bowl = TASK_DATA(t); + Sprite *s = &bowl->s; + + bowl->base.regionX = regionX; + bowl->base.regionY = regionY; + bowl->base.me = me; + bowl->base.meX = me->x; + bowl->base.id = id; + + bowl->unk50 = 0; + bowl->unk40[0] = 0; + bowl->unk40[1] = 0; + bowl->unk48[0] = 0; + bowl->unk48[1] = 0; + bowl->unk3C[0] = 0; + bowl->unk3C[1] = 0; + bowl->unk51 = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOWL_3); + s->oamFlags = SPRITE_OAM_ORDER(5); + s->graphics.size = 0; + s->graphics.anim = sBowlAnimations[gCurrentLevel]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_Bowl(void) +{ + Bowl *bowl = TASK_DATA(gCurTask); + Sprite *s = &bowl->s; + MapEntity *me = bowl->base.me; + CamCoord worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(bowl->base.meX, bowl->base.regionX); + worldY = TO_WORLD_POS(me->y, bowl->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bowl->base.meX); + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + s16 diff; + + if (I(PLAYER(i).qWorldX) > worldX) { + diff = +10; + } else { + diff = -10; + } + + if (Coll_Player_Entity_Intersection(s, worldX - diff, worldY + 5, &PLAYER(i))) { + SetBit(bowl->unk51, i); + bowl->unk40[i] = ABS2(PLAYER(i).qSpeedAirX) << 2; + + bowl->unk3C[i] = (Div((I(PLAYER(i).qWorldX) - worldX + (SA1_ANIM_BOWL_3_WIDTH / 2)) << 9, SA1_ANIM_BOWL_3_WIDTH) < 0) + ? (0x300 - Div((I(PLAYER(i).qWorldX) - worldX + (SA1_ANIM_BOWL_3_WIDTH / 2)) << 9, SA1_ANIM_BOWL_3_WIDTH)) + & (SIN_PERIOD - 1) + : (0x300 + Div((I(PLAYER(i).qWorldX) - worldX + (SA1_ANIM_BOWL_3_WIDTH / 2)) << 9, SA1_ANIM_BOWL_3_WIDTH)) + & (SIN_PERIOD - 1); + + bowl->unk48[i] = 0; + bowl->unk50 = 0; + bowl->unk44 = 0; + + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + m4aSongNumStart(SE_BOWL); + gCurTask->main = Task_BowlRotating; + + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } while (++i < gNumSingleplayerCharacters); + + DisplaySprite(s); +} + +// (97.80%) https://decomp.me/scratch/rNMbG +NONMATCH("asm/non_matching/game/interactables/bowl__Task_BowlRotating.inc", void Task_BowlRotating(void)) +{ + Sprite *s; + Bowl *bowl; + s32 sp08; + CamCoord worldX, worldY; + MapEntity *me; + s32 i; + + bowl = TASK_DATA(gCurTask); + s = &bowl->s; + me = bowl->base.me; + + worldX = TO_WORLD_POS(bowl->base.meX, bowl->base.regionX); + worldY = TO_WORLD_POS(me->y, bowl->base.regionY); + + s->x = worldX - gCamera.x; + + if (bowl->unk48[0] > bowl->unk48[1]) { + s->y = worldY - gCamera.y + (bowl->unk48[0] >> 13); + sp08 = (bowl->unk48[0] >> 13); + } else { + s->y = worldY - gCamera.y + (bowl->unk48[1] >> 13); + sp08 = (bowl->unk48[1] >> 13); + } + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + s32 unk48; + s16 diff; + + if (!GetBit(bowl->unk51, i)) { + if (I(PLAYER(i).qWorldX) > worldX) { + diff = +10; + } else { + diff = -10; + } + + if (Coll_Player_Entity_Intersection(s, worldX - diff, 13 + worldY + sp08, &PLAYER(i))) { + if (bowl->unk40[0] > bowl->unk40[1]) { + bowl->unk40[1] = bowl->unk40[0]; + bowl->unk48[1] = bowl->unk48[0]; + } else { + bowl->unk40[0] = bowl->unk40[1]; + bowl->unk48[0] = bowl->unk48[1]; + } + + SetBit(bowl->unk51, i); + + (unk48 = I(bowl->unk48[0])); + bowl->unk3C[i] = (Div((I(PLAYER(i).qWorldX) - worldX + (SA1_ANIM_BOWL_3_WIDTH / 2)) << 9, SA1_ANIM_BOWL_3_WIDTH) < 0) + ? (unk48 + 0x300 - Div((I(PLAYER(i).qWorldX) - worldX + (SA1_ANIM_BOWL_3_WIDTH / 2)) << 9, SA1_ANIM_BOWL_3_WIDTH)) + & (SIN_PERIOD - 1) + : (unk48 + 0x300 + Div((I(PLAYER(i).qWorldX) - worldX + (SA1_ANIM_BOWL_3_WIDTH / 2)) << 9, SA1_ANIM_BOWL_3_WIDTH)) + & (SIN_PERIOD - 1); + + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + } while (++i < gNumSingleplayerCharacters); + + i = 0; + do { + if ((GetBit(bowl->unk51, i))) { + s16 diff; + s32 theta = ((I(bowl->unk48[i]) + bowl->unk3C[i] + ((bowl->unk50 & 0xF) << 6)) & (SIN_PERIOD - 1)); + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + PLAYER(i).qWorldX = Q(worldX) + Div(SIN(theta) * 25, bowl->unk50 * 4 + 50); + PLAYER(i).qWorldY = Q(worldY) - Q(17) + (bowl->unk48[i] >> 5); + } + } + } while (++i < gNumSingleplayerCharacters); + + i = 0; + do { + if (GetBit(bowl->unk51, i)) { + if ((bowl->unk48[i] >= 885000)) { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + PLAYER(i).qSpeedAirY = ((bowl->unk40[i] >> 2) - 0x7D0) * 2; + } + } else { + { + bowl->unk40[i] += Q(0.25); + } + } + + if (bowl->unk40[i] > 0x8000) { + bowl->unk40[i] = 0x8000; + } + + s->animSpeed = Div(bowl->unk40[i] * 35, 0xA000); + if (s->animSpeed > SPRITE_ANIM_SPEED(1.0)) { + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + } + + bowl->unk48[i] += bowl->unk40[i]; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bowl->base.meX); + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { + if ((GetBit(bowl->unk51, i)) && (bowl->unk48[i] >= 885000)) { + bowl->unk48[i] = 885000; + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (bowl->unk50 < 16) { + PLAYER(i).qWorldY += bowl->unk50 * (Q(11.25) / 16); + } else { + PLAYER(i).qWorldY += Q(11.25); + } + } + + if (i == PLAYER_1) { + bowl->unk50++; + } + + if (bowl->unk50 > 64) { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedGround = 0; + PLAYER(i).qWorldX = Q(worldX); + ClearBit(bowl->unk51, i); + } + + gCurTask->main = Task_Bowl3; + + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (++bowl->unk44 > 240) { + bowl->unk44 = 240; + } + + if (bowl->unk44 == 56) { + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + m4aSongNumStart(SE_BOWL_2); + } + } while (++i < gNumSingleplayerCharacters); + } else if (bowl->unk44 == 112) { + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + m4aSongNumStart(SE_BOWL_3); + } + } while (++i < gNumSingleplayerCharacters); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void Task_Bowl3(void) +{ + Bowl *bowl = TASK_DATA(gCurTask); + Sprite *s = &bowl->s; + MapEntity *me = bowl->base.me; + CamCoord worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(bowl->base.meX, bowl->base.regionX); + worldY = TO_WORLD_POS(me->y, bowl->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + 108; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bowl->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (++bowl->unk44 > 240) { + bowl->unk44 = 240; + } + + if (bowl->unk44 == 56) { + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + m4aSongNumStart(SE_BOWL_2); + } + } while (++i < gNumSingleplayerCharacters); + } else if (bowl->unk44 == 112) { + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + m4aSongNumStart(SE_BOWL_3); + } + } while (++i < gNumSingleplayerCharacters); + } + + DisplaySprite(s); +} + +void TaskDestructor_Bowl(struct Task *t) +{ + Bowl *bowl = TASK_DATA(t); + VramFree(bowl->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/breakable_wall.c b/sa1/src/game/interactables/breakable_wall.c new file mode 100644 index 0000000000..caa4f6406d --- /dev/null +++ b/sa1/src/game/interactables/breakable_wall.c @@ -0,0 +1,304 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +// TODO: Rename +#define NUM_OUTER_ELEMS 8 +#define NUM_INNER_ELEMS 4 + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s16 qUnk3C; + /* 0x3C */ s16 qUnk3E; + /* 0x40 */ u8 filler40[4]; +} Wall; + +extern u16 gUnknown_080BB544[NUM_LEVEL_IDS]; + +void Task_BreakableWall(void); +void Task_BreakableWall2(void); +void TaskDestructor_BreakableWall(struct Task *); + +void CreateEntity_BreakableWall(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_BreakableWall, sizeof(Wall), 0x2000, 0, TaskDestructor_BreakableWall); + Wall *wall = TASK_DATA(t); + Sprite *s = &wall->s; + + wall->base.regionX = regionX; + wall->base.regionY = regionY; + wall->base.me = me; + wall->base.meX = me->x; + wall->base.id = id; + + SET_MAP_ENTITY_INITIALIZED(me); + wall->qUnk3C = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BREAKABLE_WALL_1); + s->graphics.anim = gUnknown_080BB544[gCurrentLevel]; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + + UpdateSpriteAnimation(s); +} + +// TODO: Fake-match +// (100.0%) https://decomp.me/scratch/3KiDd +void Task_BreakableWall(void) +{ + CamCoord worldX, worldY; + MapEntity *me; + Sprite *s; + s32 i; + +#ifndef NON_MATCHING + register Wall *wall asm("r6"); + register s32 offset asm("r1") = gCurTask->data; + asm("add %0, %1, %2" : "=r"(wall) : "r"(offset), "r"(IWRAM_START)); + asm("add r0, #0xC"); + asm("add r0, r1"); + asm("mov %0, r0" : "=r"(s)); +#else + Wall *wall; + wall = TASK_DATA(gCurTask); + s = &wall->s; +#endif + me = wall->base.me; + + worldX = TO_WORLD_POS(wall->base.meX, wall->base.regionX); + worldY = TO_WORLD_POS(me->y, wall->base.regionY); + + i = 0; + do { + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == s)) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + } + + wall->qUnk3C = 0; + wall->qUnk3E = 0; + + gCurTask->main = Task_BreakableWall2; + + m4aSongNumStart(SE_173); + } else if (Coll_Player_Gate(s, worldX, worldY, &PLAYER(i), 1) & COLL_FLAG_8) { + m4aSongNumStart(SE_173); + gCurTask->main = Task_BreakableWall2; + + wall->qUnk3C = 0; + + if ((wall->qUnk3E = PLAYER(i).qSpeedAirX >> 1) == 0) { + s16 qVal; + if (worldX < I(PLAYER(i).qWorldX)) + qVal = -Q(1); + else + qVal = +Q(1); + + wall->qUnk3E = qVal; + } + + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == s)) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + } + +#ifndef NON_MATCHING + // NOTE: This is entirely unnecessary because it's handled in the codeblock above. + if ((gNumSingleplayerCharacters == 2) && ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s))) { + gPartner.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPartner.moveState |= MOVESTATE_IN_AIR; + } +#endif + + if (IS_MULTI_PLAYER) { + RoomEvent_PlatformChange *event = CreateRoomEvent(); + event->type = ROOMEVENT_TYPE_PLATFORM_CHANGE; + event->x = wall->base.regionX; + event->y = wall->base.regionY; + event->id = wall->base.id; + event->action = 1; + } + + break; + } + } while (++i < gNumSingleplayerCharacters); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wall->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +// (76.51%) https://decomp.me/scratch/Hx9vh +NONMATCH("asm/non_matching/game/interactables/BreakableWall__Task_BreakableWall2.inc", void Task_BreakableWall2(void)) +{ + CamCoord worldX, worldY; + MapEntity *me; + Sprite *s; + const u16 *oamData; + u8 i, j; + const u16 *oamDataEntry; + u16 *oamDataAlloc; + s16 sp0C; + u8 r1, r8, sb; + s16 r5, temp, temp2; + + Wall *wall = TASK_DATA(gCurTask); + s = &wall->s; + me = wall->base.me; + + worldX = TO_WORLD_POS(wall->base.meX, wall->base.regionX); + worldY = TO_WORLD_POS(me->y, wall->base.regionY); + + sp0C = gCamera.y - worldY + DISPLAY_HEIGHT; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + wall->qUnk3C++; + + if (((worldX) > gCamera.x + ((DISPLAY_WIDTH) + (CAM_REGION_WIDTH / 2)) || (worldX) < gCamera.x - (CAM_REGION_WIDTH / 2)) + && (((u16)(s->x + (CAM_REGION_WIDTH / 2)) > DISPLAY_WIDTH + CAM_REGION_WIDTH))) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wall->base.meX); + TaskDestroy(gCurTask); + return; + } + + oamData = gRefSpriteTables->oamData[GET_SPRITE_ANIM(s)]; + oamDataEntry = &oamData[s->dimensions->oamIndex * (sizeof(OamDataShort) / 2)]; + + for (i = 0; i < NUM_OUTER_ELEMS; i++) { + for (j = 0; j < NUM_INNER_ELEMS; j++) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + sb = (NUM_INNER_ELEMS - 1) - j; + } else { + sb = j; + } + // _08027E6E + + if (wall->qUnk3E >= Q(0)) { + r1 = j; + } else { + r1 = (NUM_INNER_ELEMS - 1) - j; + } + // _08027E86 + + r8 = i * 4 + sb; + + temp = (wall->qUnk3C - r1 * 10) - ((NUM_OUTER_ELEMS - 1) - i) * 2; + + if (temp > 0) { + r5 = I(temp * ((temp * 42) - Q(2))); + temp2 = I(temp * wall->qUnk3E); + + if (r5 > sp0C) { + if (sp0C >= Q(0)) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + // _08027F1C + if (r8 == 3) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wall->base.meX); + TaskDestroy(gCurTask); + return; + } else { + continue; + } + } else { + // _08027EF0 + if (r8 == 0) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wall->base.meX); + TaskDestroy(gCurTask); + return; + } else { + continue; + } + } + } else { + // _08027EF8 + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + // _08027F1C + if (r8 == 0) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wall->base.meX); + TaskDestroy(gCurTask); + return; + } else { + continue; + } + } else { + // _08027EF0 + if (r8 == 3) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wall->base.meX); + TaskDestroy(gCurTask); + return; + } else { + continue; + } + } + } + } // else goto _08027F3C + } else { + // _08027F38 + temp2 = 0; + r5 = 0; + } + // _08027F3C + + oamDataAlloc = (u16 *)OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end == oamDataAlloc) { + return; + } + + oamDataAlloc[0] = (r5 + (s->y + i * 8)) & 0xFF; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + oamDataAlloc[1] = (((s->x - sb * 8) - 8 + temp2) & 0x1FF) | 0x1000; + } else { + // _08027FA0 + oamDataAlloc[1] = (((s->x + sb * 8) + temp2) & 0x1FF); + } + // _08027FB4 + + oamDataAlloc[2] = ((oamDataEntry[2] + s->palId) & ~0xFFF) | ((s->frameFlags & SPRITE_FLAG_MASK_PRIORITY) >> 2) + | (GET_TILE_NUM(s->graphics.dest) + r8); + } + } +} +END_NONMATCH + +void TaskDestructor_BreakableWall(struct Task *t) +{ + Wall *wall = TASK_DATA(t); + VramFree(wall->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/bumpers.c b/sa1/src/game/interactables/bumpers.c new file mode 100644 index 0000000000..81f198eae0 --- /dev/null +++ b/sa1/src/game/interactables/bumpers.c @@ -0,0 +1,1308 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/mp_player.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x40 */ s32 unk40; // Q + /* 0x44 */ s32 unk44; // Q + /* 0x48 */ s16 unk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ s16 unk4C; + /* 0x4E */ u8 unk4E; +} BumperA; + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x40 */ s32 unk40; // Q + /* 0x44 */ s32 unk44; // Q + /* 0x48 */ s16 unk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ u16 unk4C; + /* 0x4E */ u8 unk4E; + /* 0x4F */ u8 unk4F; + /* 0x50 */ u8 unk50; + /* 0x51 */ u8 unk51; +} BumperB; + +// Triangular Bumpers +// TODO: Might be equivalent to BumperA? +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x40 */ s32 unk40; // Q + /* 0x44 */ s32 unk44; // Q + /* 0x48 */ s16 unk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ u8 unk4C; + /* 0x4D */ u8 unk4D; + /* 0x4E */ u8 unk4E; +} BumperC; + +void Task_BumperHexagon(void); +void Task_BumperHexagon2(void); +void TaskDestructor_BumperHexagon(struct Task *t); +void Task_BumperRound_LinearMov2(void); +void Task_BumperRound_LinearMov(void); +void Task_BumperRound_CircularMov(void); +void Task_BumperRound_CircularMov2(void); +void Task_BumperTriHorizontal(void); +void Task_BumperTriHorizontal2(void); +void Task_BumperTriVertical(void); +void Task_BumperTriVertical2(void); +void Task_BumperTriBig(void); +void Task_BumperTriBig2(void); + +bool32 BumperCheckCollAndPosA1(BumperA *bumper, Sprite *s, s32 worldX, s32 worldY); +bool32 BumperCheckCollAndPosA2(BumperA *bumper, Sprite *s, s32 worldX, s32 worldY); +bool32 BumperCheckCollAndPosB(BumperB *bumper, Sprite *s, s32 worldX, s32 worldY); +bool32 BumperCheckCollAndPosC1(BumperC *bumper, Sprite *s, s32 worldX, s32 worldY); +bool32 BumperCheckCollAndPosC2(BumperC *bumper, Sprite *s, s32 worldX, s32 worldY); +bool32 BumperCheckCollAndPosC3(BumperC *bumper, Sprite *s, s32 worldX, s32 worldY); + +void CreateEntity_BumperHexagon(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_BumperHexagon, sizeof(BumperA), 0x2000, 0, TaskDestructor_BumperHexagon); + BumperA *bumper = TASK_DATA(t); + Sprite *s = &bumper->s; + + bumper->base.regionX = regionX; + bumper->base.regionY = regionY; + bumper->base.me = me; + bumper->base.meX = me->x; + bumper->base.id = id; + + bumper->unk40 = 0; + bumper->unk44 = 0; + bumper->unk4C = 0; + bumper->unk4E = 0; + + if (me->d.sData[0] >= 0) { + bumper->unk48 = 4; + bumper->unk3C = 0; + bumper->unk4A = 0; + } else { + bumper->unk48 = 4; + bumper->unk3C = 0x80; + bumper->unk4A = 0; + } + +#ifndef NON_MATCHING + // TODO: + if (!(*((u32 *)&me->d.uData[1]) & 0x00FFFF00)) +#else + if (!me->d.uData[2] && !me->d.uData[3]) +#endif + { + bumper->unk48 = 0; + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BUMPER_BIG); + s->graphics.anim = SA1_ANIM_BUMPER_BIG; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_BumperHexagon(void) +{ + BumperA *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (bumper->unk48 != 0) { + s32 r2 = Q(me->d.uData[2] * TILE_WIDTH); + + bumper->unk40 = (r2 * SIN(((bumper->unk48 * ((gStageTime + bumper->unk3C) & 0xFF)) & ONE_CYCLE))) >> 14; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + s->x = worldX - gCamera.x + I(bumper->unk40); + s->y = worldY - gCamera.y + I(bumper->unk44); + + if (BumperCheckCollAndPosA1(bumper, s, worldX, worldY)) { + gCurTask->main = Task_BumperHexagon2; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_BumperHexagon2(void) +{ + BumperA *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (++bumper->unk4E > 8) { + gCurTask->main = Task_BumperHexagon; + } + + if (bumper->unk48 != 0) { + s32 r2 = Q(me->d.uData[2] * TILE_WIDTH); + + bumper->unk40 = (r2 * SIN(((bumper->unk48 * ((gStageTime + bumper->unk3C) & 0xFF)) & ONE_CYCLE))) >> 14; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + BumperCheckCollAndPosA1(bumper, s, worldX, worldY); + + s->x = worldX - gCamera.x + I(bumper->unk40) - (COS(bumper->unk4E * 128) >> 12); + s->y = worldY - gCamera.y + I(bumper->unk44) + (SIN(bumper->unk4E * 128) >> 12); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +bool32 BumperCheckCollAndPosA1(BumperA *bumper, Sprite *s, s32 worldX, s32 worldY) +{ + s32 i; + bool32 result = FALSE; + s32 rot; + + i = 0; + do { + s32 qTempPlayerX = PLAYER(i).qWorldX; + + if (Coll_Player_Entity_Intersection(s, worldX + I(bumper->unk40), worldY + I(bumper->unk44), &PLAYER(i)) + && !(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + PLAYERFN_SET_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + + rot = SA2_LABEL(sub_8004418)(I(PLAYER(i).qWorldY) - worldY - I(bumper->unk44), + I(PLAYER(i).qWorldX) - worldX - I(bumper->unk40)); + + if ((u32)(rot - 0x40) > (s32)(0.875 * SIN_PERIOD)) { + PLAYER(i).qSpeedAirX = +Q(6.3984375); + } else if ((u32)(rot - (s32)(0.4375 * SIN_PERIOD) - 1) <= (s32)(0.1328125 * SIN_PERIOD)) { + PLAYER(i).qSpeedAirX = -Q(6.3984375); + } else { + if ((u32)rot > 0x249) { + if ((u32)rot > (s32)(0.75 * SIN_PERIOD)) { + PLAYER(i).qSpeedAirX = +0x297; + PLAYER(i).qSpeedAirY = -0x5D9; + } else { + PLAYER(i).qSpeedAirX = -0x297; + PLAYER(i).qSpeedAirY = -0x5D9; + } + } else if ((u32)rot > (s32)(0.25 * SIN_PERIOD)) { + PLAYER(i).qSpeedAirX = -0x297; + PLAYER(i).qSpeedAirY = 0x5D9; + } else { + PLAYER(i).qSpeedAirX = 0x297; + PLAYER(i).qSpeedAirY = 0x5D9; + } + } + + m4aSongNumStart(SE_BUMPER_A); + + bumper->unk4E = 0; + result = TRUE; + } + + PLAYER(i).qWorldX = qTempPlayerX; + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +void TaskDestructor_BumperHexagon(struct Task *t) +{ + BumperA *bumper = TASK_DATA(t); + VramFree(bumper->s.graphics.dest); +} + +void CreateEntity_BumperRound_LinearMov(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_BumperRound_LinearMov, sizeof(BumperA), 0x2000, 0, NULL); + BumperA *bumper = TASK_DATA(t); + Sprite *s = &bumper->s; + + bumper->base.regionX = regionX; + bumper->base.regionY = regionY; + bumper->base.me = me; + bumper->base.meX = me->x; + bumper->base.id = id; + + bumper->unk40 = 0; + bumper->unk44 = 0; + bumper->unk4E = 0; + bumper->unk4C = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + bumper->unk48 = 4; + bumper->unk3C = 0; + bumper->unk4A = 0; + } else { + bumper->unk48 = 4; + bumper->unk3C = 0x80; + bumper->unk4A = 0; + } + } else { + if (me->d.sData[1] >= 0) { + bumper->unk48 = 0; + bumper->unk4A = 4; + bumper->unk3C = 0; + } else { + bumper->unk48 = 0; + bumper->unk4A = 4; + bumper->unk3C = 0x80; + } + } + +#ifndef NON_MATCHING + // TODO: + if (!(*((u32 *)&me->d.uData[1]) & 0x00FFFF00)) +#else + if (!me->d.uData[2] && !me->d.uData[3]) +#endif + { + bumper->unk48 = 0; + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_BUMPER; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BUMPER_ROUND; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_BumperRound_LinearMov(void) +{ + BumperA *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (bumper->unk48 != 0) { + s32 r2 = Q(me->d.uData[2] * TILE_WIDTH); + + bumper->unk40 = (r2 * SIN(((bumper->unk48 * ((gStageTime + bumper->unk3C) & 0xFF)) & ONE_CYCLE))) >> 14; + } + + if (bumper->unk4A != 0) { + s32 r2 = Q(me->d.uData[3] * TILE_WIDTH); + + bumper->unk44 = (r2 * SIN(((bumper->unk4A * ((gStageTime + bumper->unk3C) & 0xFF)) & ONE_CYCLE))) >> 14; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + s->x = worldX - gCamera.x + I(bumper->unk40); + s->y = worldY - gCamera.y + I(bumper->unk44); + + if (BumperCheckCollAndPosA2(bumper, s, worldX, worldY)) { + gCurTask->main = Task_BumperRound_LinearMov2; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_BumperRound_LinearMov2(void) +{ + BumperA *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (++bumper->unk4E > 8) { + gCurTask->main = Task_BumperRound_LinearMov; + } + + if (bumper->unk48 != 0) { + s32 r2 = Q(me->d.uData[2] * TILE_WIDTH); + + bumper->unk40 = (r2 * SIN(((bumper->unk48 * ((gStageTime + bumper->unk3C) & 0xFF)) & ONE_CYCLE))) >> 14; + } + + if (bumper->unk4A != 0) { + s32 r2 = Q(me->d.uData[3] * TILE_WIDTH); + + bumper->unk44 = (r2 * SIN(((bumper->unk4A * ((gStageTime + bumper->unk3C) & 0xFF)) & ONE_CYCLE))) >> 14; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + BumperCheckCollAndPosA2(bumper, s, worldX, worldY); + + s->x = worldX - gCamera.x + I(bumper->unk40) - (COS(bumper->unk4E * 128) >> 12); + s->y = worldY - gCamera.y + I(bumper->unk44) + (SIN(bumper->unk4E * 128) >> 12); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +bool32 BumperCheckCollAndPosA2(BumperA *bumper, Sprite *s, s32 worldX, s32 worldY) +{ + s32 i; + bool32 result = FALSE; + s32 rot; + + i = 0; + do { + s32 qTempPlayerX = PLAYER(i).qWorldX; + + if (Coll_Player_Entity_Intersection(s, worldX + I(bumper->unk40), worldY + I(bumper->unk44), &PLAYER(i)) + && !(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + rot = SA2_LABEL(sub_8004418)( // + I(PLAYER(i).qWorldY) - worldY - I(bumper->unk44), // + I(PLAYER(i).qWorldX) - worldX - I(bumper->unk40)); + + PLAYER(i).qSpeedAirX = Div(COS(rot), 15); + PLAYER(i).qSpeedGround = Div(COS(rot), 15); + PLAYER(i).qSpeedAirY = Div(SIN(rot), 15); + + if (PLAYER(i).qSpeedAirX == Q(0)) { + PLAYER(i).qSpeedAirX = +Q(8. / 256.); + } + + INCREMENT_SCORE(10); + + m4aSongNumStart(SE_BUMPER_A); + + bumper->unk4E = 0; + result = TRUE; + } + + PLAYER(i).qWorldX = qTempPlayerX; + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +void CreateEntity_BumperRound_CircularMov(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_BumperRound_CircularMov, sizeof(BumperB), 0x2000, 0, NULL); + BumperB *bumper = TASK_DATA(t); + Sprite *s = &bumper->s; + + bumper->base.regionX = regionX; + bumper->base.regionY = regionY; + bumper->base.me = me; + bumper->base.meX = me->x; + bumper->base.id = id; + + bumper->unk40 = 0; + bumper->unk44 = 0; + bumper->unk48 = 0; + bumper->unk4A = 0; + + { // Circ + bumper->unk3C = Q(me->d.sData[0] & 0x7); + bumper->unk50 = me->d.sData[1]; + bumper->unk51 = 0; + bumper->unk4C = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + bumper->unk4F = me->d.uData[2]; + bumper->unk4E = 1; + } else { + bumper->unk4F = me->d.uData[3]; + bumper->unk4E = 0; + } + + if (me->d.sData[0] == 0) { + bumper->unk48 = 0; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_BUMPER; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BUMPER_ROUND; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_BumperRound_CircularMov(void) +{ + BumperB *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (bumper->unk4E != 0) { + bumper->unk40 = (SIN((((+me->d.sData[1] * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + bumper->unk44 = (COS((((+(me->d.sData[1]) * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + } else { + bumper->unk40 = (SIN((((-me->d.sData[1] * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + bumper->unk44 = (COS((((-(me->d.sData[1]) * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + s->x = worldX - gCamera.x + (I(bumper->unk40) >> 3); + s->y = worldY - gCamera.y + (I(bumper->unk44) >> 3); + + if (BumperCheckCollAndPosB(bumper, s, worldX, worldY)) { + gCurTask->main = Task_BumperRound_CircularMov2; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + s->y += SIN(bumper->unk4C) >> 12; + + DisplaySprite(s); +} + +void Task_BumperRound_CircularMov2(void) +{ + BumperB *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (++bumper->unk51 > 8) { + gCurTask->main = Task_BumperRound_CircularMov; + } + + if (bumper->unk4E != 0) { + bumper->unk40 = (SIN((((+me->d.sData[1] * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + bumper->unk44 = (COS((((+(me->d.sData[1]) * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + } else { + bumper->unk40 = (SIN((((-me->d.sData[1] * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + bumper->unk44 = (COS((((-(me->d.sData[1]) * gStageTime) + bumper->unk3C) & 0x7FF) >> 1)) * bumper->unk4F; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + s->x = worldX - gCamera.x + I(bumper->unk40 >> 3) - (COS(bumper->unk51 * 128) >> 12); + s->y = worldY - gCamera.y + I(bumper->unk44 >> 3) + (SIN(bumper->unk51 * 128) >> 12); + + BumperCheckCollAndPosB(bumper, s, worldX, worldY); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + s->y += SIN(bumper->unk4C) >> 12; + + DisplaySprite(s); +} + +bool32 BumperCheckCollAndPosB(BumperB *bumper, Sprite *s, s32 worldX, s32 worldY) +{ + s32 i; + bool32 result = FALSE; + s32 rot; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (Coll_Player_Entity_Intersection(s, worldX + I(bumper->unk40 >> 3), worldY + I(bumper->unk44 >> 3), &PLAYER(i))) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + rot = SA2_LABEL(sub_8004418)( // + I(PLAYER(i).qWorldY) - worldY - I(bumper->unk44), // + I(PLAYER(i).qWorldX) - worldX - I(bumper->unk40)); + + PLAYER(i).qSpeedAirX = Div(COS(rot), 15); + PLAYER(i).qSpeedGround = Div(COS(rot), 15); + PLAYER(i).qSpeedAirY = Div(SIN(rot), 15); + + if (PLAYER(i).qSpeedAirX == Q(0)) { + PLAYER(i).qSpeedAirX = +Q(8. / 256.); + } + + INCREMENT_SCORE(10); + + m4aSongNumStart(SE_BUMPER_A); + + bumper->unk51 = 0; + result = TRUE; + } + } + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +void CreateEntity_BumperTriHorizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + Sprite *s = NULL; // for matching + struct Task *t = TaskCreate(Task_BumperTriHorizontal, sizeof(BumperC), 0x2000, 0, NULL); + BumperC *bumper = TASK_DATA(t); + s = &bumper->s; + + bumper->base.regionX = regionX; + bumper->base.regionY = regionY; + bumper->base.me = me; + bumper->base.meX = me->x; + bumper->base.id = id; + + bumper->unk40 = 0; + bumper->unk44 = 0; + bumper->unk4A = 0; + bumper->unk48 = 0; + bumper->unk4C = 0; + bumper->unk4D = 1; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_BUMPER_TRI; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BUMPER_TRI_H; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] == 0) { + SPRITE_FLAG_SET(s, Y_FLIP); + } + + UpdateSpriteAnimation(s); +} + +void CreateEntity_BumperTriVertical(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + Sprite *s = NULL; // for matching + struct Task *t = TaskCreate(Task_BumperTriVertical, sizeof(BumperC), 0x2000, 0, NULL); + BumperC *bumper = TASK_DATA(t); + s = &bumper->s; + + bumper->base.regionX = regionX; + bumper->base.regionY = regionY; + bumper->base.me = me; + bumper->base.meX = me->x; + bumper->base.id = id; + + bumper->unk40 = 0; + bumper->unk44 = 0; + bumper->unk4A = 0; + bumper->unk48 = 0; + bumper->unk4C = 0; + bumper->unk4D = 2; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_BUMPER_TRI_2; + s->graphics.anim = SA1_ANIM_BUMPER_TRI_V; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] == 0) { + SPRITE_FLAG_SET(s, X_FLIP); + } + + UpdateSpriteAnimation(s); +} + +void CreateEntity_BumperTriBig(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + Sprite *s = NULL; // for matching + struct Task *t = TaskCreate(Task_BumperTriBig, sizeof(BumperC), 0x2000, 0, NULL); + BumperC *bumper = TASK_DATA(t); + s = &bumper->s; + + bumper->base.regionX = regionX; + bumper->base.regionY = regionY; + bumper->base.me = me; + bumper->base.meX = me->x; + bumper->base.id = id; + + bumper->unk40 = 0; + bumper->unk44 = 0; + bumper->unk4A = 0; + bumper->unk48 = 0; + bumper->unk4C = 0; + bumper->unk4D = 4; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_BUMPER_TRI_BIG; + s->graphics.anim = SA1_ANIM_BUMPER_RIGHTANG; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] == 0) { + SPRITE_FLAG_SET(s, X_FLIP); + } + + if (me->d.sData[1] == 0) { + SPRITE_FLAG_SET(s, Y_FLIP); + } + + UpdateSpriteAnimation(s); +} + +void Task_BumperTriHorizontal(void) +{ + BumperC *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + s->x = worldX - gCamera.x + (I(bumper->unk40)); + s->y = worldY - gCamera.y + (I(bumper->unk44)); + + if (BumperCheckCollAndPosC1(bumper, s, worldX, worldY)) { + gCurTask->main = Task_BumperTriHorizontal2; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_BumperTriHorizontal2(void) +{ + BumperC *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (++bumper->unk4C > 8) { + gCurTask->main = Task_BumperTriHorizontal; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + s->x = worldX - gCamera.x + (COS(bumper->unk4C * 128) >> 12); + } else { + s->x = worldX - gCamera.x - (COS(bumper->unk4C * 128) >> 12); + } + + s->y = worldY - gCamera.y + (SIN(bumper->unk4C * 128) >> 12); + + BumperCheckCollAndPosC1(bumper, s, worldX, worldY); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_BumperTriVertical(void) +{ + BumperC *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + s->x = worldX - gCamera.x + I(bumper->unk40); + s->y = worldY - gCamera.y + I(bumper->unk44); + + if (BumperCheckCollAndPosC2(bumper, s, worldX, worldY) != 0) { + gCurTask->main = Task_BumperTriVertical2; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_BumperTriVertical2(void) +{ + BumperC *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (++bumper->unk4C > 8) { + gCurTask->main = Task_BumperTriVertical; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + BumperCheckCollAndPosC2(bumper, s, worldX, worldY); + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + s->x = worldX - gCamera.x + (COS(bumper->unk4C * 128) >> 12); + } else { + s->x = worldX - gCamera.x - (COS(bumper->unk4C * 128) >> 12); + } + + s->y = worldY - gCamera.y + (SIN(bumper->unk4C * 128) >> 12); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_BumperTriBig(void) +{ + BumperC *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (BumperCheckCollAndPosC3(bumper, s, worldX, worldY)) { + gCurTask->main = Task_BumperTriBig2; + } + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_BumperTriBig2(void) +{ + BumperC *bumper = TASK_DATA(gCurTask); + Sprite *s = &bumper->s; + MapEntity *me = bumper->base.me; + CamCoord worldX, worldY; + + if (++bumper->unk4C > 8) { + gCurTask->main = Task_BumperTriBig; + } + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + s->x = worldX - gCamera.x + (COS(bumper->unk4C * 128) >> 12); + } else { + s->x = worldX - gCamera.x - (COS(bumper->unk4C * 128) >> 12); + } + + s->y = worldY - gCamera.y + (SIN(bumper->unk4C * 128) >> 12); + + BumperCheckCollAndPosC3(bumper, s, worldX, worldY); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +// (94.48%) https://decomp.me/scratch/LOH2M +NONMATCH("asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC1.inc", + bool32 BumperCheckCollAndPosC1(BumperC *bumper, Sprite *s, s32 worldX, s32 worldY)) +{ + s32 i; + bool32 result = FALSE; + bool32 sp10 = FALSE; + s32 rot; + + i = 0; + do { + s32 qTempPlayerX = PLAYER(i).qWorldX; + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((gGameMode == 3 || gGameMode == 5)) { + u8 j; + for (j = 0; j < 4 && gMultiplayerPlayerTasks[j]; j++) { + if (j != SIO_MULTI_CNT->id) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[j]); + if (mpp->unk5C & 0x4) { + sp10 = TRUE; + } + } + } + } + + if (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE) || sp10) { + if (Coll_Player_Entity_Intersection(s, worldX + I(bumper->unk40), worldY + I(bumper->unk44), &PLAYER(i))) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + if (gGameMode == 3 || gGameMode == 5) { + PLAYER(i).timerInvulnerability = 30; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + rot = SA2_LABEL(sub_8004418)( // + I(PLAYER(i).qWorldY) - worldY - I(bumper->unk44), // + I(PLAYER(i).qWorldX) - worldX - I(bumper->unk40)); + + if (s->frameFlags & SPRITE_FLAG_MASK_Y_FLIP) { + if ((u32)rot >= 0x200) { + PLAYER(i).qSpeedAirY = -Q(6.3984375); + } else if ((u32)rot < 0x100) { + PLAYER(i).qSpeedAirX = +0x297; + PLAYER(i).qSpeedAirY = +0x5D9; + } else { + PLAYER(i).qSpeedAirX = -0x297; + PLAYER(i).qSpeedAirY = +0x5D9; + } + } else { + if ((u32)rot > (s32)(0.482421875 * SIN_PERIOD)) { + if ((u32)rot > (s32)(0.75 * SIN_PERIOD)) { + PLAYER(i).qSpeedAirX = +0x297; + PLAYER(i).qSpeedAirY = -0x5D9; + } else { + PLAYER(i).qSpeedAirX = -0x297; + PLAYER(i).qSpeedAirY = -0x5D9; + } + } else { + if ((u32)rot < 0x15) { + PLAYER(i).qSpeedAirX = +0x297; + PLAYER(i).qSpeedAirY = -0x5D9; + } else { + PLAYER(i).qSpeedAirY = +Q(6.3984375); + } + } + } + + m4aSongNumStart(SE_BUMPER_B); + + bumper->unk4C = 0; + result = TRUE; + } + } + } + + PLAYER(i).qWorldX = qTempPlayerX; + } while (++i < gNumSingleplayerCharacters); + + return result; +} +END_NONMATCH + +bool32 BumperCheckCollAndPosC2(BumperC *bumper, Sprite *s, s32 worldX, s32 worldY) +{ + s32 i; + bool32 result = FALSE; + s32 rot; + + i = 0; + do { + s32 qTempPlayerX = PLAYER(i).qWorldX; + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + + if (Coll_Player_Entity_Intersection(s, worldX + I(bumper->unk40), worldY + I(bumper->unk44), &PLAYER(i))) { + if (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + rot = SA2_LABEL(sub_8004418)( // + I(PLAYER(i).qWorldY) - worldY - I(bumper->unk44), // + I(PLAYER(i).qWorldX) - worldX - I(bumper->unk40)); + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if ((u32)rot - 0xFD >= 0x207) { + PLAYER(i).qSpeedAirX = +Q(6.3984375); + } else if ((u32)rot > 0x200) { + PLAYER(i).qSpeedAirX = -0x5D9; + PLAYER(i).qSpeedAirY = -0x297; + } else { + PLAYER(i).qSpeedAirX = -0x5D9; + PLAYER(i).qSpeedAirY = +0x297; + } + } else { + if ((u32)(rot - 0x104) <= (s32)(0.4921875 * SIN_PERIOD)) { + PLAYER(i).qSpeedAirX = -0x666; + } else { + if ((u32)rot > 0x200) { + PLAYER(i).qSpeedAirX = +0x5D9; + PLAYER(i).qSpeedAirY = -0x297; + } else { + PLAYER(i).qSpeedAirX = +0x5D9; + PLAYER(i).qSpeedAirY = +0x297; + } + } + } + + m4aSongNumStart(SE_BUMPER_B); + + bumper->unk4C = 0; + result = TRUE; + } + } + } + + PLAYER(i).qWorldX = qTempPlayerX; + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +// (90.80%) https://decomp.me/scratch/FTsLY +NONMATCH("asm/non_matching/game/interactables/bumpers__BumperCheckCollAndPosC3.inc", + bool32 BumperCheckCollAndPosC3(BumperC *bumper, Sprite *s, s32 worldX, s32 worldY)) +{ + s32 i; +#ifndef NON_MATCHING + register bool32 result asm("r9") = FALSE; +#else + bool32 result = FALSE; +#endif + bool32 sp0C = FALSE; + s32 rot; + + i = 0; + do { + s32 qTempPlayerX = PLAYER(i).qWorldX; + + if (Coll_Player_Entity_Intersection(s, worldX, worldY, &PLAYER(i))) { + if ((gGameMode == 3 || gGameMode == 5)) { + u8 j; + for (j = 0; j < 4 && gMultiplayerPlayerTasks[j]; j++) { + if (j != SIO_MULTI_CNT->id) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[j]); + if (mpp->unk5C & 0x4) { + sp0C = TRUE; + } + } + } + } + if (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE) || sp0C) { + if (s->frameFlags & SPRITE_FLAG_MASK_Y_FLIP) { + if ((s->frameFlags & SPRITE_FLAG_MASK_X_FLIP)) { + if ((I(PLAYER(i).qWorldY) - worldY) < 65 - (worldX - I(qTempPlayerX))) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + if ((gGameMode == 3 || gGameMode == 5)) { + PLAYER(i).timerInvulnerability = 30; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + PLAYER(i).qSpeedAirX = -Q(4.6875); + PLAYER(i).qSpeedAirY = +Q(4.6875); + +#if 01 + goto lbl2; +#else + m4aSongNumStart(SE_BUMPER_B); + + bumper->unk4C = 0; + result = TRUE; +#endif + } + } else { + if ((I(PLAYER(i).qWorldY) - worldY) < 65 - (I(qTempPlayerX) - worldX)) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + if ((gGameMode == 3 || gGameMode == 5)) { + PLAYER(i).timerInvulnerability = 30; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + PLAYER(i).qSpeedAirX = +Q(4.6875); + PLAYER(i).qSpeedAirY = +Q(4.6875); + +#if 01 + goto lbl; +#else + m4aSongNumStart(SE_BUMPER_B); + + bumper->unk4C = 0; + result = TRUE; +#endif + } + } + } else { // !Y_FLIP + if ((s->frameFlags & SPRITE_FLAG_MASK_X_FLIP)) { + if ((I(PLAYER(i).qWorldY) - worldY) > worldX - I(qTempPlayerX) - 60) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + if ((gGameMode == 3 || gGameMode == 5)) { + PLAYER(i).timerInvulnerability = 30; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + PLAYER(i).qSpeedAirX = -Q(4.6875); + PLAYER(i).qSpeedAirY = -Q(4.6875); + + asm(""); + lbl: + m4aSongNumStart(SE_BUMPER_B); + + bumper->unk4C = 0; + result = TRUE; + asm(""); + } + } else { + if ((I(PLAYER(i).qWorldY) - worldY) > I(qTempPlayerX) - worldX - 60) { + if (((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) + && (PLAYER(i).SA2_LABEL(unk61) != 0)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + + if ((gGameMode == 3 || gGameMode == 5)) { + PLAYER(i).timerInvulnerability = 30; + } + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + (&PLAYER(i))->spriteOffsetX = 6; + (&PLAYER(i))->spriteOffsetY = 9; + + PLAYER(i).qSpeedAirX = +Q(4.6875); + PLAYER(i).qSpeedAirY = -Q(4.6875); + + lbl2: + m4aSongNumStart(SE_BUMPER_B); + + bumper->unk4C = 0; + result = TRUE; + } + } + } + } + } + + PLAYER(i).qWorldX = qTempPlayerX; + } while (++i < gNumSingleplayerCharacters); + + return result; +} +END_NONMATCH \ No newline at end of file diff --git a/sa1/src/game/interactables/carousel.c b/sa1/src/game/interactables/carousel.c new file mode 100644 index 0000000000..b97e72641a --- /dev/null +++ b/sa1/src/game/interactables/carousel.c @@ -0,0 +1,440 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" // gPlayerControls +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s1; + /* 0x3C */ Sprite s2; + /* 0x6C */ u16 unk6C; + /* 0x6E */ u16 unk6E; + /* 0x70 */ u32 unk70; + /* 0x74 */ u16 unk74; + /* 0x74 */ u16 unk76; + /* 0x78 */ u8 unk78; + /* 0x79 */ u8 unk79; +} Carousel; + +void Task_CarouselIdle(void); +void Task_RidingCarousel(void); +void Task_ExitCarousel(void); +void TaskDestructor_Carousel(struct Task *t); + +void CreateEntity_Carousel(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_CarouselIdle, sizeof(Carousel), 0x2000, 0, TaskDestructor_Carousel); + Carousel *carousel = TASK_DATA(t); + Sprite *s1 = &carousel->s1; + Sprite *s2 = &carousel->s2; + CamCoord worldX, worldY; + + carousel->base.regionX = regionX; + carousel->base.regionY = regionY; + carousel->base.me = me; + carousel->base.meX = me->x; + carousel->base.id = id; + + carousel->unk70 = 0; + carousel->unk76 = 0; + carousel->unk74 = 0; + carousel->unk6E = 0; + carousel->unk6C = 0; + carousel->unk78 = 0; + carousel->unk79 = 0; + + { + // // NOTE: Initializing sprite pos to world pos + s1->x = TO_WORLD_POS(me->x, regionX); + s1->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s1->graphics.dest = ALLOC_TILES(SA1_ANIM_CAROUSEL); + s1->oamFlags = SPRITE_OAM_ORDER(18); + s1->graphics.size = 0; + s1->graphics.anim = SA1_ANIM_CAROUSEL; + s1->variant = 0; + s1->animCursor = 0; + s1->qAnimDelay = Q(0); + s1->prevVariant = -1; + s1->animSpeed = SPRITE_ANIM_SPEED(1.0); + s1->palId = 0; + s1->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s1->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + + { + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_CAROUSEL_POLE); + s2->graphics.anim = SA1_ANIM_CAROUSEL_POLE; + s2->variant = 0; + s2->oamFlags = SPRITE_OAM_ORDER(18); + s2->graphics.size = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + + UpdateSpriteAnimation(s1); + UpdateSpriteAnimation(s2); +} + +// (97.13%) +NONMATCH("asm/non_matching/game/interactables/carousel__Task_CarouselIdle.inc", void Task_CarouselIdle(void)) +{ + Carousel *carousel = TASK_DATA(gCurTask); + Sprite *s1 = &carousel->s1; + Sprite *s2 = &carousel->s2; + CamCoord worldX, worldY; + MapEntity *me = carousel->base.me; + s32 i; + + worldX = TO_WORLD_POS(carousel->base.meX, carousel->base.regionX); + worldY = TO_WORLD_POS(me->y, carousel->base.regionY); + + s1->x = worldX - gCamera.x; + s1->y = worldY - gCamera.y; + s2->x = s1->x; + s2->y = s1->y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s1->x, s1->y)) { + // _080857BC + SET_MAP_ENTITY_NOT_INITIALIZED(me, carousel->base.meX); + TaskDestroy(gCurTask); + return; + } + + // _080857DC + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (PLAYER(i).character == CHARACTER_KNUCKLES) { + // _08085832 + if ((PLAYER(i).charState == CHARSTATE_70) || (PLAYER(i).charState == CHARSTATE_71) || (PLAYER(i).charState == CHARSTATE_72) + || (PLAYER(i).charState == CHARSTATE_73) || (PLAYER(i).charState == CHARSTATE_74) + || (PLAYER(i).charState == CHARSTATE_75)) { + continue; + } + } + // _08085906 + + Coll_Player_PlatformCrumbling(s1, worldX, worldY, &PLAYER(i)); + + if ((worldX - 8 <= I(PLAYER(i).qWorldX)) && (worldX + 8 >= I(PLAYER(i).qWorldX)) && (worldY - 48 <= I(PLAYER(i).qWorldY)) + && (worldY + 12 >= I(PLAYER(i).qWorldY))) { + // _080859AA + s32 tempX; + SetBit(carousel->unk79, i); + + carousel->unk6E = ABS2(PLAYER(i).qSpeedAirX) << 2; + + carousel->unk6C = (Div(Q(I(PLAYER(i).qWorldX) - worldX + 48) << 1, 0x60) < 0) + ? (0x300 - Div(Q(I(PLAYER(i).qWorldX) - worldX + 48) << 1, 0x60)) & 0x3FF + : (0x300 + Div(Q(I(PLAYER(i).qWorldX) - worldX + 48) << 1, 0x60)) & 0x3FF; + // _08085A66 + + carousel->unk70 = 0; + carousel->unk76 = 0; + carousel->unk74 = 0; + PLAYER(i).qSpeedAirX = Q(0); + // _08085A8A + + if (PLAYER(i).qSpeedGround > Q(0)) { + carousel->unk78 = 1; + PLAYER(i).qSpeedGround = +Q(7.5); + } else { + // _08085AC2 + carousel->unk78 = 0; + PLAYER(i).qSpeedGround = -Q(7.5); + } + // _08085ADC + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_33; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + m4aSongNumStart(SE_CAROUSEL_A); + gCurTask->main = Task_RidingCarousel; + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } while (++i < gNumSingleplayerCharacters); + + DisplaySprite(s1); + DisplaySprite(s2); +} +END_NONMATCH + +// (94.31%) https://decomp.me/scratch/YMgk7 +NONMATCH("asm/non_matching/game/interactables/carousel__Task_RidingCarousel.inc", void Task_RidingCarousel(void)) +{ + Carousel *carousel = TASK_DATA(gCurTask); + Sprite *s1 = &carousel->s1; + Sprite *s2 = &carousel->s2; + CamCoord worldX, worldY; + MapEntity *me = carousel->base.me; + s32 i; + + worldX = TO_WORLD_POS(carousel->base.meX, carousel->base.regionX); + worldY = TO_WORLD_POS(me->y, carousel->base.regionY); + + s1->x = worldX - gCamera.x; + s1->y = worldY - gCamera.y + (carousel->unk70 >> 13) + 2; + s2->x = s1->x; + s2->y = s1->y + 2; + + i = 0; + do { + // _08085C2C_loop + if (!(PLAYER(i).moveState & MOVESTATE_DEAD) && GetBit(carousel->unk79, i)) { + // _08085C6E + 0x4 + PLAYER(i).qWorldX = Q(worldX); + PLAYER(i).qWorldY = Q(worldY + (carousel->unk70 >> 13)); + } + // TODO: Redundant? + if (!GetBit(carousel->unk79, i)) { + // _08085CBC + s32 yVal = worldY + ((carousel->unk70 << 3) >> 16); + u32 res = Coll_Player_PlatformCrumbling(s1, worldX, yVal, &PLAYER(i)); + if ((res & COLL_FLAG_8) && !GetBit(carousel->unk79, i)) { + PLAYER(i).qWorldY = Q(yVal); + } else { + // _08085D14 + + if (!Coll_Player_Entity_Intersection(s1, worldX, yVal, &PLAYER(i))) { + if (!GetBit(carousel->unk79, i)) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } + // _08085D6A + + if ((worldX - 8 <= I(PLAYER(i).qWorldX)) && (worldX + 8 >= I(PLAYER(i).qWorldX)) && (worldY - 48 <= I(PLAYER(i).qWorldY)) + && (worldY + 12 >= I(PLAYER(i).qWorldY))) { + // _08085DF6 + if (carousel->unk70 < 0x3C2A58) { + SetBit(carousel->unk79, i); + PLAYER(i).qSpeedAirX = Q(0); + + if (PLAYER(i).qSpeedGround > Q(0)) { + // _08085E3C + PLAYER(i).qSpeedGround = +Q(7.5); + } else { + // _08085E4E + PLAYER(i).qSpeedGround = -Q(7.5); + } + // _08085E60 + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_33; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + } while (++i < gNumSingleplayerCharacters); + // _08085EF8 + + if (carousel->unk70 >= 0x3C2A58) { + s32 i = 0; + do { + // _08085F12_loop + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (GetBit(carousel->unk79, i)) { + PLAYER(i).qSpeedAirX = Div((((carousel->unk6E >> 2) - 0x7D0) << 1), 3); + PLAYER(i).qSpeedGround = Div((((carousel->unk6E >> 2) - 0x7D0) << 1), 3); + } + } + } while (++i < gNumSingleplayerCharacters); + } else { + // _08085F9C + carousel->unk6E += 0x40; + } + + if (carousel->unk6E > 0x8000) { + carousel->unk6E = 0x8000; + } + + s1->animSpeed = Div(carousel->unk6E * 35, 0xA000); + + if (s1->animSpeed > SPRITE_ANIM_SPEED(1.0)) { + s1->animSpeed = SPRITE_ANIM_SPEED(1.0); + } + + // _08085FDC + ??? + carousel->unk70 += carousel->unk6E; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s1->x, s1->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, carousel->base.meX); + TaskDestroy(gCurTask); + return; + } + + // _08086064 + i = 0; + do { + // _08086074_loop + if (!(PLAYER(i).moveState & MOVESTATE_DEAD) && GetBit(carousel->unk79, i)) { + if (carousel->unk70 >= 0x3C2A58) { + carousel->unk70 = 0x3C2A58; + + if (i == 0) { + carousel->unk76++; + } + // _080860BC + + if (carousel->unk76 >= 300 || PLAYER(i).heldInput & DPAD_SIDEWAYS) { + // _080860E8 + s32 qSpeed; + carousel->unk76 = 300; + + if (PLAYER(i).heldInput & DPAD_LEFT) { + if (PLAYER(i).qSpeedGround > 0) { + PLAYER(i).qSpeedGround *= -1; + PLAYER(i).qSpeedAirX = PLAYER(i).qSpeedGround; + } else { + PLAYER(i).qSpeedAirX = PLAYER(i).qSpeedGround; + } + } + // _0808615C + else if (PLAYER(i).heldInput & DPAD_RIGHT) { + if (PLAYER(i).qSpeedGround < 0) { + PLAYER(i).qSpeedGround *= -1; + PLAYER(i).qSpeedAirX = PLAYER(i).qSpeedGround; + } else { + PLAYER(i).qSpeedAirX = PLAYER(i).qSpeedGround; + } + } else if (carousel->unk78 == 0) { + PLAYER(i).qSpeedGround *= -1; + PLAYER(i).qSpeedAirX = PLAYER(i).qSpeedGround; + } else { + PLAYER(i).qSpeedAirX = PLAYER(i).qSpeedGround; + } + { + // _080861C8 + + ClearBit(carousel->unk79, i); + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).charState = CHARSTATE_WALK_A; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + PLAYER(i).qSpeedAirY = Q(0); + // _080862C2 + + PLAYER(i).qWorldX = Q(worldX); + gCurTask->main = Task_ExitCarousel; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + { + PlayerSpriteInfo **psi = &PLAYER(i).spriteInfoBody; + (*psi)->s.oamFlags = SPRITE_OAM_ORDER(16); + } + } + } + } + } else if (PLAYER(i).moveState & MOVESTATE_DEAD) { + // _08086314 + if (carousel->unk70 > 0x3C2A58) { + carousel->unk70 = 0x3C2A58; + } + // _0808633A + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + + if (i == 0) { + carousel->unk76++; + } + + if (carousel->unk76 > 300) { + gCurTask->main = Task_ExitCarousel; + } + } + } while (++i < gNumSingleplayerCharacters); + // _0808638A + + carousel->unk74++; + + if (carousel->unk6E < Q(50)) { + if (carousel->unk6E != Q(0)) { + if (Mod(carousel->unk74, 25) == 0) { + m4aSongNumStart(SE_CAROUSEL_A); + } + } + } else if (carousel->unk6E < Q(75)) { + if (Mod(carousel->unk74, 16) == 0) { + m4aSongNumStart(SE_CAROUSEL_B); + } + } else { + if (Mod(carousel->unk74, 8) == 0) { + m4aSongNumStart(SE_CAROUSEL_C); + } + } + + UpdateSpriteAnimation(s1); + DisplaySprite(s1); + DisplaySprite(s2); +} +END_NONMATCH + +void Task_ExitCarousel(void) +{ + Carousel *carousel = TASK_DATA(gCurTask); + Sprite *s1 = &carousel->s1; + Sprite *s2 = &carousel->s2; + CamCoord worldX, worldY; + MapEntity *me = carousel->base.me; + s32 i; + + worldX = TO_WORLD_POS(carousel->base.meX, carousel->base.regionX); + worldY = TO_WORLD_POS(me->y, carousel->base.regionY); + + s1->x = worldX - gCamera.x; + s1->y = worldY - gCamera.y + (carousel->unk70 >> 13); + s2->x = s1->x; + s2->y = s1->y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + Coll_Player_PlatformCrumbling(s1, worldX, worldY + (carousel->unk70 >> 13), &PLAYER(i)); + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s1->x, s1->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, carousel->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s1); + DisplaySprite(s2); +} + +void TaskDestructor_Carousel(struct Task *t) +{ + Carousel *carousel = TASK_DATA(t); + VramFree(carousel->s1.graphics.dest); + VramFree(carousel->s2.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/checkpoint.c b/sa1/src/game/interactables/checkpoint.c new file mode 100644 index 0000000000..57accfdc3f --- /dev/null +++ b/sa1/src/game/interactables/checkpoint.c @@ -0,0 +1,197 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/egg_rocket_transitions.h" + +#include "constants/animations.h" +#include "constants/move_states.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; +} Checkpoint; /* 0x3C */ + +void Task_CheckpointMain(void); +void Task_Checkpoint1(void); +void Task_Checkpoint2(void); + +void CreateEntity_Checkpoint(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + Checkpoint *checkpoint; + Sprite *s; + + if (me->d.sData[0] <= gBossIndex) { + t = TaskCreate(Task_Checkpoint2, sizeof(Checkpoint), 0x2000, 0, TaskDestructor_EntityShared); + } else { + t = TaskCreate(Task_CheckpointMain, sizeof(Checkpoint), 0x2000, 0, TaskDestructor_EntityShared); + } + + checkpoint = TASK_DATA(t); + + checkpoint->shared.base.regionX = regionX; + checkpoint->shared.base.regionY = regionY; + checkpoint->shared.base.me = me; + checkpoint->shared.base.meX = me->x; + checkpoint->shared.base.id = id; + + s = &checkpoint->shared.s; + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CHECKPOINT); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_CHECKPOINT; + + if (me->d.sData[0] <= gBossIndex) { + s->variant = 2; + } else { + s->variant = 0; + } + + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_CheckpointMain(void) +{ + Checkpoint *checkpoint = TASK_DATA(gCurTask); + Sprite *s = &checkpoint->shared.s; + MapEntity *me = checkpoint->shared.base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(checkpoint->shared.base.meX, checkpoint->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, checkpoint->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (((gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) && (HB_LEFT(worldX, checkpoint->shared.s.hitboxes[0].b) <= I(gPlayer.qWorldX)) + && (HB_RIGHT(worldX, checkpoint->shared.s.hitboxes[0].b) >= I(gPlayer.qWorldX)) + && (HB_TOP(worldY, checkpoint->shared.s.hitboxes[0].b) <= I(gPlayer.qWorldY)) + && (HB_BOTTOM(worldY, checkpoint->shared.s.hitboxes[0].b) >= I(gPlayer.qWorldY))) + || ((gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) + && (((me->d.sData[0] == 1) && (I(gPlayer.qWorldX) > worldX)) + || ((me->d.sData[0] != 1) && (I(gPlayer.qWorldY) + gPlayer.spriteOffsetY < worldY + 4))))) { + if (!(gPlayer.moveState & MOVESTATE_IA_OVERRIDE)) { + gBossIndex = me->d.sData[0]; + gPlayer.checkPointX = worldX; + gPlayer.checkPointY = worldY - gPlayer.spriteOffsetY; + gPlayer.checkpointTime = gCheckpointTime; + + s->variant = 1; + + gCurTask->main = Task_Checkpoint1; + gCurTask->main(); + + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) { + if (gBossIndex == 1) { + gPlayer.qSpeedAirX = 0; + gPlayer.qSpeedGround = 0; + CreateEggRocketLaunchScreenShakeEffect(); + } + + if (gBossIndex == 2) { + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__ACT_START; + } + + CreateEggRocketStageSeparation((58 * METATILE_DIM) - 1); + } + + if (gBossIndex == 3) { + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__ACT_START; + } + + CreateEggRocketStageSeparation((34 * METATILE_DIM) - 1); + } + } + } + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, checkpoint->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) { + // In Egg Rocket, checkpoints are invisible + // Screen shakes indicate the Player they reached one, instead. + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_Checkpoint1(void) +{ + Checkpoint *checkpoint = TASK_DATA(gCurTask); + Sprite *s = &checkpoint->shared.s; + MapEntity *me = checkpoint->shared.base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(checkpoint->shared.base.meX, checkpoint->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, checkpoint->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, checkpoint->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1) || UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 2; + gCurTask->main = Task_Checkpoint2; + } + + if (gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) { + // In Egg Rocket, checkpoints are invisible + // Screen shakes indicate the Player they reached one, instead. + DisplaySprite(s); + } +} + +void Task_Checkpoint2(void) +{ + Checkpoint *checkpoint = TASK_DATA(gCurTask); + Sprite *s = &checkpoint->shared.s; + MapEntity *me = checkpoint->shared.base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(checkpoint->shared.base.meX, checkpoint->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, checkpoint->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, checkpoint->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + if (gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) { + // In Egg Rocket, checkpoints are invisible + // Screen shakes indicate the Player they reached one, instead. + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} diff --git a/sa1/src/game/interactables/conveyor_belt_movement.c b/sa1/src/game/interactables/conveyor_belt_movement.c new file mode 100644 index 0000000000..3213758cbb --- /dev/null +++ b/sa1/src/game/interactables/conveyor_belt_movement.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/stage/terrain_collision.h" + +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x30]; + /* 0x3C */ s8 type; +} ConveyorBeltMvt; + +void Task_ConveyorBeltMvt(void); +void Task_SlowingSnow(void); + +#define CONVEYOR_BELT_SPEED (0.625) + +void Task_ConveyorBeltMvt(void) +{ + ConveyorBeltMvt *mvt = TASK_DATA(gCurTask); + CamCoord x, y; + MapEntity *me = mvt->base.me; + s32 res; + s32 qRes; + s32 i; + + // x/y: World-Pos + x = TO_WORLD_POS(mvt->base.meX, mvt->base.regionX); + y = TO_WORLD_POS(me->y, mvt->base.regionY); + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((x <= I(PLAYER(i).qWorldX)) && (x + me->d.uData[2] * TILE_WIDTH >= I(PLAYER(i).qWorldX)) && (y <= I(PLAYER(i).qWorldY)) + && (y + me->d.uData[3] * TILE_WIDTH >= I(PLAYER(i).qWorldY)) && !(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + if (mvt->type != 0) { + PLAYER(i).qWorldX += Q(CONVEYOR_BELT_SPEED); + + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) + 8, I(PLAYER(i).qWorldY), PLAYER(i).layer, +8, + SA2_LABEL(sub_801EB44)); + + if (res < 0) { + qRes = Q(SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) + 8, I(PLAYER(i).qWorldY), PLAYER(i).layer, +8, + SA2_LABEL(sub_801EB44))); + PLAYER(i).qWorldX += qRes; + } + } else { + PLAYER(i).qWorldX -= Q(CONVEYOR_BELT_SPEED); + } + + res = (SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) - 8, I(PLAYER(i).qWorldY), PLAYER(i).layer, -8, SA2_LABEL(sub_801EB44))); + + if (res < 0) { + qRes = Q(SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) - 8, I(PLAYER(i).qWorldY), PLAYER(i).layer, -8, + SA2_LABEL(sub_801EB44))); + + if (i != 0) { + PLAYER(i).qWorldX -= qRes; + } else { + PLAYER(i).qWorldX -= qRes; + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + // x/y: Screen-Pos + x -= gCamera.x; + y -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, mvt->base.meX); + + TaskDestroy(gCurTask); + return; + } +} + +void Task_SlowingSnow(void) +{ + ConveyorBeltMvt *mvt = TASK_DATA(gCurTask); + MapEntity *me = mvt->base.me; + CamCoord x, y; + s32 i; + + // x/y: World-Pos + x = TO_WORLD_POS(mvt->base.meX, mvt->base.regionX); + y = TO_WORLD_POS(me->y, mvt->base.regionY); + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((x <= I(PLAYER(i).qWorldX)) && (x + me->d.uData[2] * TILE_WIDTH >= I(PLAYER(i).qWorldX)) && (y <= I(PLAYER(i).qWorldY)) + && (y + me->d.uData[3] * TILE_WIDTH >= I(PLAYER(i).qWorldY)) && !(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + // Reduce Player's speed by 5% each frame + s32 qSpeed = Div(PLAYER(i).qSpeedGround * 95, 100); + PLAYER(i).qSpeedGround = qSpeed; + } + } + } while (++i < gNumSingleplayerCharacters); + + // x/y: Screen-Pos + x -= gCamera.x; + y -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, mvt->base.meX); + + TaskDestroy(gCurTask); + return; + } +} + +void CreateEntity_ConveyorBelt(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + ConveyorBeltMvt *mvt; + u8 zone; + + zone = LEVEL_TO_ZONE(gCurrentLevel); + if (zone == ZONE_4) { + t = TaskCreate(Task_SlowingSnow, sizeof(ConveyorBeltMvt), 0x2000, 0, NULL); + } else { + t = TaskCreate(Task_ConveyorBeltMvt, sizeof(ConveyorBeltMvt), 0x2000, 0, NULL); + } + + mvt = TASK_DATA(t); + + mvt->base.regionX = regionX; + mvt->base.regionY = regionY; + mvt->base.me = me; + mvt->base.meX = me->x; + mvt->base.id = id; + mvt->type = me->d.sData[0]; + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/conveyor_belt_object.c b/sa1/src/game/interactables/conveyor_belt_object.c new file mode 100644 index 0000000000..3f1e2cb394 --- /dev/null +++ b/sa1/src/game/interactables/conveyor_belt_object.c @@ -0,0 +1,121 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 unk3C; + /* 0x3C */ u8 unk40; +} ConveyorBeltObject; /* 0x44 */ + +void Task_ConveyorBeltObject(void); +void TaskDestructor_ConveyorBeltObject(struct Task *t); + +void CreateEntity_ConveyorBeltObject(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_ConveyorBeltObject, sizeof(ConveyorBeltObject), 0x2000, 0, TaskDestructor_ConveyorBeltObject); + ConveyorBeltObject *belt = TASK_DATA(t); + Sprite *s = &belt->s; + + belt->base.regionX = regionX; + belt->base.regionY = regionY; + belt->base.me = me; + belt->base.meX = me->x; + belt->base.id = id; + belt->unk3C = 0; + belt->unk40 = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + if ((gCurrentLevel & 0x1) != ACT_1) { + if (me->d.sData[0] == 0) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_6_WIDE); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_6_WIDE; + s->variant = 0; + } else if (me->d.sData[0] == 1) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_6_WIDE); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_6_WIDE; + s->variant = 1; + } else if (me->d.sData[0] == 2) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_6_SLIM); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_6_SLIM; + s->variant = 0; + } else if (me->d.sData[0] == 3) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_6_SLIM); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_6_SLIM; + s->variant = 1; + } + } else { + if (me->d.sData[0] == 0) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_2_WIDE); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_2_WIDE; + s->variant = 0; + } else if (me->d.sData[0] == 1) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_2_WIDE); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_2_WIDE; + s->variant = 1; + } else if (me->d.sData[0] == 2) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_2_SLIM); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_2_SLIM; + s->variant = 0; + } else if (me->d.sData[0] == 3) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONVEYOR_BELT_2_SLIM); + s->graphics.anim = SA1_ANIM_CONVEYOR_BELT_2_SLIM; + s->variant = 1; + } + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_ConveyorBeltObject(void) +{ + ConveyorBeltObject *belt = TASK_DATA(gCurTask); + Sprite *s = &belt->s; + MapEntity *me = belt->base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(belt->base.meX, belt->base.regionX); + worldY = TO_WORLD_POS(me->y, belt->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + sub_80096B0(s, worldX, worldY, &gPlayer); + + if (gNumSingleplayerCharacters == 2) { + sub_80096B0(s, worldX, worldY, &gPartner); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, belt->base.meX); + TaskDestroy(gCurTask); + return; + } else { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void TaskDestructor_ConveyorBeltObject(struct Task *t) +{ + ConveyorBeltObject *belt = TASK_DATA(t); + VramFree(belt->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/crane_claw_and_lift.c b/sa1/src/game/interactables/crane_claw_and_lift.c new file mode 100644 index 0000000000..b55eae516f --- /dev/null +++ b/sa1/src/game/interactables/crane_claw_and_lift.c @@ -0,0 +1,813 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Sprite s2; + /* 0x6C */ Sprite s3; + /* 0x9C */ u16 unk9C; + /* 0x9E */ u16 unk9E; + /* 0xA0 */ s8 playerID; +} CraneClaw; + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Sprite s2; +#ifndef NON_MATCHING + /* 0x6C */ Sprite unused; +#endif + /* 0x9C */ u16 unk9C; + /* 0x9E */ u16 unk9E; + /* 0xA0 */ s8 playerID; +} Lift; + +void Task_CraneClawMain(void); +void Task_CraneClaw2(void); +void Task_CraneClaw3(void); +void Task_CraneClaw4(void); +void Task_CraneClaw5(void); +void Task_CraneClaw6(void); +void Task_CraneClaw7(void); +void Task_CraneClaw8(void); +void Task_LiftMain(void); +void Task_Lift2(void); +void Task_Lift3(void); +void Task_Lift4(void); +void TaskDestructor_CraneClaw(struct Task *t); +void TaskDestructor_Lift(struct Task *t); + +void CreateEntity_CraneClaw(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_CraneClawMain, sizeof(CraneClaw), 0x2000, 0, TaskDestructor_CraneClaw); + CraneClaw *crane = TASK_DATA(t); + Sprite *s = &crane->s; + Sprite *s2 = &crane->s2; + Sprite *s3 = &crane->s3; + + crane->base.regionX = regionX; + crane->base.regionY = regionY; + crane->base.me = me; + crane->base.meX = me->x; + crane->base.id = id; + + crane->unk9C = 0; + crane->unk9E = 0; + crane->playerID = PLAYER_1; + + SET_MAP_ENTITY_INITIALIZED(me); + + // s->graphics.dest = ALLOC_TILES_MAX(SA1_ANIM_STEAM_EXHAUST, SA1_ANIM_STEAM_EXHAUST_LID); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CRANE_CLAW_2); + s->graphics.anim = SA1_ANIM_CRANE_CLAW_2; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s2->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_CRANE_CLAW_2, 3); + s2->graphics.anim = SA1_ANIM_CRANE_CLAW_2; + s2->variant = 3; + s2->oamFlags = SPRITE_OAM_ORDER(17); + s2->graphics.size = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s3->graphics.dest = ALLOC_TILES(SA1_ANIM_ANCHOR_HANDLES); + s3->graphics.anim = SA1_ANIM_ANCHOR_HANDLES; + s3->variant = 0; + s3->oamFlags = SPRITE_OAM_ORDER(17); + s3->graphics.size = 0; + s3->animCursor = 0; + s3->qAnimDelay = Q(0); + s3->prevVariant = -1; + s3->animSpeed = SPRITE_ANIM_SPEED(1.0); + s3->palId = 0; + s3->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s3->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_CraneClawMain(void) +{ + s32 i = 0; + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s2 = &crane->s2; + Sprite *s3 = &crane->s3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + 48; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x; + s3->y = worldY - gCamera.y; + + do { + Player *p = &PLAYER(i); + + if (Coll_Player_Entity_Intersection(s, worldX, worldY + 48, p)) { + crane->unk9C = 0; + crane->playerID = p->playerID; + s->variant = 1; + p->moveState |= MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + gCurTask->main = Task_CraneClaw2; + m4aSongNumStart(SE_LIFT); + break; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y + 24; + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void Task_CraneClaw2(void) +{ + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s2 = &crane->s2; + Sprite *s3 = &crane->s3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + 48; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x; + s3->y = worldY - gCamera.y; + + { + Player *p = &PLAYER(crane->playerID); + + if (IS_ALIVE(p)) { + p->qWorldX = Q(worldX); + p->qWorldY = Q(worldY + 104); + } + + if (++crane->unk9C >= 4) { + crane->unk9C = 0; + + if (IS_ALIVE(p)) { + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + p->qSpeedAirY = Q(0); + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_38; + } + gCurTask->main = Task_CraneClaw3; + } + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y + 24; + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void Task_CraneClaw3(void) +{ + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + s16 sp08; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s2 = &crane->s2; + Sprite *s3 = &crane->s3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + sp08 = Div((30 - crane->unk9C) * 48, 30); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + sp08; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x; + s3->y = worldY - gCamera.y; + + { + Player *p = &PLAYER(crane->playerID); + + if (IS_ALIVE(p)) { + p->qWorldX = Q(worldX); + p->qWorldY = Q(worldY + sp08 + 56); + } + + if (++crane->unk9C > 30) { + crane->unk9C = 0; + + if (IS_ALIVE(p)) { + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + p->qSpeedAirY = Q(0); + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_38; + } + gCurTask->main = Task_CraneClaw4; + } + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y + (sp08 >> 1); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void Task_CraneClaw4(void) +{ + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s3 = &crane->s3; + s16 r3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + r3 = (crane->unk9C * 2); + s->x = worldX - gCamera.x + r3; + s->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x + r3; + s3->y = worldY - gCamera.y; + + { + Player *p = &PLAYER(crane->playerID); + + if (IS_ALIVE(p)) { + p->qWorldX = Q(worldX + r3); + p->qWorldY = Q(worldY + 56); + } + + if (r3 > me->d.uData[2] * TILE_WIDTH) { + + if (IS_ALIVE(p)) { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + p->qSpeedAirY = Q(0); + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_18; + } + + crane->unk9E = 0; + s->variant = 2; + m4aSongNumStop(SE_LIFT); + + gCurTask->main = Task_CraneClaw5; + p->itemEffect &= ~0x80; + } else { + crane->unk9C++; + } + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void Task_CraneClaw5(void) +{ + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s3 = &crane->s3; + s16 r3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + r3 = (crane->unk9C * 2); + s->x = worldX - gCamera.x + r3; + s->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x + r3; + s3->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (++crane->unk9E > 30) { + gCurTask->main = Task_CraneClaw6; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void Task_CraneClaw6(void) +{ + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s3 = &crane->s3; + s16 r3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + r3 = (crane->unk9C * 2); + s->x = worldX - gCamera.x + r3; + s->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x + r3; + s3->y = worldY - gCamera.y; + + if (crane->unk9C == 0) { + gCurTask->main = Task_CraneClaw7; + } else { + crane->unk9C--; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void Task_CraneClaw7(void) +{ + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + s16 sp08; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s2 = &crane->s2; + Sprite *s3 = &crane->s3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + sp08 = 48 - Div((30 - crane->unk9C) * 48, 30); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + sp08; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x; + s3->y = worldY - gCamera.y; + + if (++crane->unk9C > 30) { + crane->unk9C = 0; + gCurTask->main = Task_CraneClaw8; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y + (sp08 >> 1); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void Task_CraneClaw8(void) +{ + CraneClaw *crane = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = crane->base.me; + Sprite *s = &crane->s; + Sprite *s2 = &crane->s2; + Sprite *s3 = &crane->s3; + + worldX = TO_WORLD_POS(crane->base.meX, crane->base.regionX); + worldY = TO_WORLD_POS(me->y, crane->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + 48; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y; + s3->x = worldX - gCamera.x; + s3->y = worldY - gCamera.y; + + if (++crane->unk9C > 3) { + crane->unk9C = 0; + crane->playerID = PLAYER_1; + gCurTask->main = Task_CraneClawMain; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, crane->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y + 24; + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + + UpdateSpriteAnimation(s3); + DisplaySprite(s3); +} + +void CreateEntity_Lift(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_LiftMain, sizeof(Lift), 0x2000, 0, TaskDestructor_Lift); + Lift *lift = TASK_DATA(t); + Sprite *s = &lift->s; + Sprite *s2 = &lift->s2; + + lift->base.regionX = regionX; + lift->base.regionY = regionY; + lift->base.me = me; + lift->base.meX = me->x; + lift->base.id = id; + + lift->unk9C = 0; + lift->unk9E = 0; + + SET_MAP_ENTITY_INITIALIZED(me); + + // s->graphics.dest = ALLOC_TILES_MAX(SA1_ANIM_STEAM_EXHAUST, SA1_ANIM_STEAM_EXHAUST_LID); + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_LIFT, 1); + s->graphics.anim = SA1_ANIM_LIFT; + s->variant = 1; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s2->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_LIFT, 0); + s2->graphics.anim = SA1_ANIM_LIFT; + s2->variant = 0; + s2->oamFlags = SPRITE_OAM_ORDER(17); + s2->graphics.size = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + UpdateSpriteAnimation(s2); +} + +void Task_LiftMain(void) +{ + s32 i = 0; + Lift *lift = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = lift->base.me; + Sprite *s = &lift->s; + Sprite *s2 = &lift->s2; + + worldX = TO_WORLD_POS(lift->base.meX, lift->base.regionX); + worldY = TO_WORLD_POS(me->y, lift->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y - 16; + + do { + Player *p = &PLAYER(i); + + if (Coll_Player_Entity_Intersection(s, worldX, worldY, p)) { + lift->unk9C = 0; + lift->playerID = p->playerID; + p->moveState |= MOVESTATE_IA_OVERRIDE; + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + p->qSpeedAirY = Q(0); + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_38; + m4aSongNumStart(SE_LIFT); + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + gCurTask->main = Task_Lift2; + break; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, lift->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); + + DisplaySprite(s2); + s2->y = worldY - gCamera.y - (48 + (0 * SA1_ANIM_LIFT_VAR0_HEIGHT)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - (48 + (1 * SA1_ANIM_LIFT_VAR0_HEIGHT)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - (48 + (2 * SA1_ANIM_LIFT_VAR0_HEIGHT)); + DisplaySprite(s2); +} + +void Task_Lift2(void) +{ + Lift *lift = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + s16 sp08; + MapEntity *me = lift->base.me; + Sprite *s = &lift->s; + Sprite *s2 = &lift->s2; + + worldX = TO_WORLD_POS(lift->base.meX, lift->base.regionX); + worldY = TO_WORLD_POS(me->y, lift->base.regionY); + + sp08 = 128 - Div((64 - lift->unk9C) * 128, 64); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y - sp08; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y - sp08 - 16; + + { + Player *p = &PLAYER(lift->playerID); + + if (IS_ALIVE(p)) { + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + p->qWorldX = Q(worldX - 3); + } else { + p->qWorldX = Q(worldX + 8); + } + + p->qWorldY = Q(worldY - sp08 + 26); + } else { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + + if (++lift->unk9C > 64) { + lift->unk9C = 0; + + m4aSongNumStop(SE_LIFT); + + gCurTask->main = Task_Lift3; + } + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, lift->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); + + DisplaySprite(s2); + s2->y = worldY - gCamera.y - sp08 - (48 + (0 * SA1_ANIM_LIFT_VAR0_HEIGHT)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - sp08 - (48 + (1 * SA1_ANIM_LIFT_VAR0_HEIGHT)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - sp08 - (48 + (2 * SA1_ANIM_LIFT_VAR0_HEIGHT)); + DisplaySprite(s2); +} + +void Task_Lift3(void) +{ + Lift *lift = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + MapEntity *me = lift->base.me; + Sprite *s = &lift->s; + Sprite *s2 = &lift->s2; + s16 r3; + s32 sp08 = 0; + + worldX = TO_WORLD_POS(lift->base.meX, lift->base.regionX); + worldY = TO_WORLD_POS(me->y, lift->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y - 0x80; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y - 0x90; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, lift->base.meX); + TaskDestroy(gCurTask); + return; + } + + { + Player *p = &PLAYER(lift->playerID); + + if (IS_ALIVE(p)) { + if (p->frameInput & gPlayerControls.jump) { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + p->qSpeedAirY = -Q(4); + Player_TransitionCancelFlyingAndBoost(p); + lift->unk9C = 0; + lift->unk9E = 60; + gCurTask->main = Task_Lift4; + + if (p->character != CHARACTER_AMY) { + p->charState = CHARSTATE_SPINATTACK; + } else { + p->charState = CHARSTATE_85; + } + + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } else { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + lift->unk9C = 0; + lift->unk9E = 60; + gCurTask->main = Task_Lift4; + } + } + + DisplaySprite(s); + + // TODO: 160 = DISPLAY_HEIGHT? + DisplaySprite(s2); + s2->y = worldY - gCamera.y - sp08 - (160 + (0 * 16)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - sp08 - (160 + (1 * 16)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - sp08 - (160 + (2 * 16)); + DisplaySprite(s2); +} + +void Task_Lift4(void) +{ + Lift *lift = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + s16 offsetY; + MapEntity *me = lift->base.me; + Sprite *s = &lift->s; + Sprite *s2 = &lift->s2; + + worldX = TO_WORLD_POS(lift->base.meX, lift->base.regionX); + worldY = TO_WORLD_POS(me->y, lift->base.regionY); + + offsetY = Div((30 - lift->unk9C) * 128, 30); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y - offsetY; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y - offsetY - 16; + + if (lift->unk9E > 0) { + lift->unk9E--; + } else if (++lift->unk9C > 30) { + lift->unk9C = 0; + lift->playerID = PLAYER_1; + gCurTask->main = Task_LiftMain; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, lift->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); + + DisplaySprite(s2); + s2->y = worldY - gCamera.y - offsetY - (48 + (0 * 16)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - offsetY - (48 + (1 * 32)); + DisplaySprite(s2); + + s2->y = worldY - gCamera.y - offsetY - (48 + (2 * 32)); + DisplaySprite(s2); +} + +void TaskDestructor_CraneClaw(struct Task *t) +{ + CraneClaw *crane = TASK_DATA(t); + VramFree(crane->s.graphics.dest); + VramFree(crane->s2.graphics.dest); + VramFree(crane->s3.graphics.dest); +} + +void TaskDestructor_Lift(struct Task *t) +{ + Lift *lift = TASK_DATA(t); + VramFree(lift->s.graphics.dest); + VramFree(lift->s2.graphics.dest); +} diff --git a/sa1/src/game/interactables/decoration.c b/sa1/src/game/interactables/decoration.c new file mode 100644 index 0000000000..eafa0e1e57 --- /dev/null +++ b/sa1/src/game/interactables/decoration.c @@ -0,0 +1,367 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/dust_cloud.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; +} Decoration; + +typedef struct { + /* 0x00 */ Sprite s1; + /* 0x30 */ Sprite s2; + /* 0x60 */ Sprite s3; + /* 0x90 */ Sprite s4; + /* 0xC0 */ SpriteTransform transform1; + /* 0xCC */ SpriteTransform transform2; + /* 0xD8 */ SpriteTransform transform3; + /* 0xE4 */ SpriteTransform transform4; + /* 0xF0 */ u16 unkF0; + /* 0xF2 */ s16 qUnkF2; +} DecorationDebris; /* 0xF4 */ + +void Task_DecorationMain(void); +void CreateDecorationDebris(s16 vecX, s16 vecY); +void Task_DecorationDebrisMain(void); +void TaskDestructor_DecorationDebris(struct Task *t); + +void CreateEntity_Decoration(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_DecorationMain, sizeof(Decoration), 0x2000, 0, TaskDestructor_EntityShared); + Decoration *deco = TASK_DATA(t); + Sprite *s = &deco->shared.s; + + deco->shared.base.regionX = regionX; + deco->shared.base.regionY = regionY; + deco->shared.base.me = me; + deco->shared.base.meX = me->x; + deco->shared.base.id = id; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ROCK); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ROCK; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_DecorationMain(void) +{ + Decoration *deco = TASK_DATA(gCurTask); + Sprite *s = &deco->shared.s; + MapEntity *me = deco->shared.base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(deco->shared.base.meX, deco->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, deco->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + CreateDustCloud(worldX, worldY); + m4aSongNumStart(SE_ITEM_BOX); + + SA2_LABEL(gUnknown_0300194C) = s->x; + SA2_LABEL(gUnknown_03002820) = s->y; + + CreateDecorationDebris(worldX - s->x, worldY - s->y - 16); + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + + TaskDestroy(gCurTask); + return; + } else { + if (sub_800C394(s, worldX, worldY, &gPlayer) + || (gPlayer.character == CHARACTER_AMY && Coll_AmyHammer_Spring(s, worldX, worldY, &gPlayer)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) && sub_800C394(s, worldX, worldY, &gPartner))) { + CreateDustCloud(worldX, worldY); + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + if ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s)) { + gPartner.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPartner.moveState |= MOVESTATE_IN_AIR; + } + } + + m4aSongNumStart(SE_ITEM_BOX); + + SA2_LABEL(gUnknown_0300194C) = s->x; + SA2_LABEL(gUnknown_03002820) = s->y; + + CreateDecorationDebris(worldX - s->x, worldY - s->y - 16); + + if (IS_MULTI_PLAYER) { + RoomEvent_PlatformChange *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLATFORM_CHANGE; + roomEvent->x = deco->shared.base.regionX; + roomEvent->y = deco->shared.base.regionY; + roomEvent->id = deco->shared.base.id; + roomEvent->action = 0; + } + + TaskDestroy(gCurTask); + return; + } else { + sub_80096B0(s, worldX, worldY, &gPlayer); + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + sub_80096B0(s, worldX, worldY, &gPartner); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, deco->shared.base.meX); + TaskDestroy(gCurTask); + return; + } else { + DisplaySprite(s); + } + } + } +} + +void CreateDecorationDebris(s16 vecX, s16 vecY) +{ + struct Task *t = TaskCreate(Task_DecorationDebrisMain, sizeof(DecorationDebris), 0x2000, 0, TaskDestructor_DecorationDebris); + DecorationDebris *debris = TASK_DATA(t); + Sprite *s = &debris->s1; + SpriteTransform *tf = &debris->transform1; + s32 tfOffsetY; + + debris->unkF0 = 0; + debris->qUnkF2 = -Q(2); + + /* Sprite/Transform 1 */ + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ROCK_DEBRIS_S); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ROCK_DEBRIS_S; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 16); + + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = vecX; + tf->y = vecY; + UpdateSpriteAnimation(s); + + /* Sprite/Transform 2 */ +#ifdef BUG_FIX + DmaCopy16(3, s, &debris->s2, sizeof(debris->s2)); + s = &debris->s2; + DmaCopy16(3, tf, &debris->transform2, sizeof(debris->transform2)); + tf = &debris->transform2; +#else + DmaCopy16(3, s, (s = &debris->s2), sizeof(debris->s2)); + DmaCopy16(3, tf, (tf = &debris->transform2), sizeof(debris->transform2)); +#endif + + s->frameFlags = SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 17); + tf->y = vecY - 16; + + /* Sprite/Transform 3 */ + s = &debris->s3; +#ifndef NON_MATCHING + DmaCopy16(3, tf, (tf = &debris->transform3), sizeof(*tf)); +#else + DmaCopy16(3, tf, &debris->transform3, sizeof(*tf)); + tf = &debris->transform3; +#endif + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ROCK_DEBRIS_L); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ROCK_DEBRIS_L; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 18); + + tf->y = vecY; + UpdateSpriteAnimation(s); + + /* Sprite/Transform 4 */ +#ifdef BUG_FIX + DmaCopy16(3, s, &debris->s4, sizeof(debris->s4)); + s = &debris->s4; + DmaCopy16(3, tf, &debris->transform4, sizeof(debris->transform4)); + tf = &debris->transform4; +#else + DmaCopy16(3, s, (s = &debris->s4), sizeof(debris->s4)); + DmaCopy16(3, tf, (tf = &debris->transform4), sizeof(debris->transform4)); +#endif + + s->frameFlags = SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 19); + tf->y = vecY - 16; +} + +void Task_DecorationDebrisMain(void) +{ + DecorationDebris *debris = TASK_DATA(gCurTask); + Sprite *s = &debris->s1; + SpriteTransform *tf; + u16 oldTransformX, oldTransformY; + s16 qScale; + + if (debris->unkF0++ > 60) { + TaskDestroy(gCurTask); + return; + } + // _080236D8 + + debris->qUnkF2 += Q(40. / 256.); + + tf = &debris->transform1; + tf->y += I(debris->qUnkF2); + oldTransformX = tf->x; + oldTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x -= debris->unkF0 * 2; + + qScale = tf->qScaleX + 8; + + if (qScale > Q(2)) { + qScale = Q(2); + } + + tf->qScaleX = qScale; + tf->qScaleY = qScale; + tf->rotation -= 42; + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + + tf->x = oldTransformX; + tf->y = oldTransformY; + + /* Sprite/Transform 2 */ + s = &debris->s2; + tf = &debris->transform2; + tf->y += I(debris->qUnkF2); + oldTransformX = tf->x; + oldTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x += debris->unkF0; + + tf->qScaleX = qScale; + tf->qScaleY = qScale; + tf->rotation += 42; + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + + tf->x = oldTransformX; + tf->y = oldTransformY; + + /* Sprite/Transform 3 */ + s = &debris->s3; + tf = &debris->transform3; + tf->y += I(debris->qUnkF2); + oldTransformX = tf->x; + oldTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x += debris->unkF0 * 2; + + tf->qScaleX = qScale; + tf->qScaleY = qScale; + tf->rotation += 14; + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + + tf->x = oldTransformX; + tf->y = oldTransformY; + + /* Sprite/Transform 4 */ + s = &debris->s4; + tf = &debris->transform4; + tf->y += I(debris->qUnkF2); + oldTransformX = tf->x; + oldTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x -= debris->unkF0; + + tf->qScaleX = qScale; + tf->qScaleY = qScale; + tf->rotation -= 14; + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + + tf->x = oldTransformX; + tf->y = oldTransformY; +} + +void TaskDestructor_DecorationDebris(struct Task *t) +{ + DecorationDebris *debris = TASK_DATA(t); + VramFree(debris->s1.graphics.dest); + VramFree(debris->s3.graphics.dest); +} diff --git a/sa1/src/game/interactables/fadein_to_be_continued.c b/sa1/src/game/interactables/fadein_to_be_continued.c new file mode 100644 index 0000000000..7e18b8f351 --- /dev/null +++ b/sa1/src/game/interactables/fadein_to_be_continued.c @@ -0,0 +1,86 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ u16 regionX; + /* 0x06 */ u16 regionY; + /* 0x08 */ u8 meX; + /* 0x09 */ u8 id; + /* 0x0A */ u16 unkA; + /* 0x0C */ s16 blend; +} TextTBC; + +// TODO: Make static +void Task_ToBeContinuedText(void); +void Task_DestroyActiveTasks(void); +void CreateToBeContinuedScreen(void); +void Task_80256D4(void); + +void Task_ToBeContinuedText(void) +{ + TextTBC *tbc = TASK_DATA(gCurTask); + MapEntity *me = tbc->me; + + s16 worldX = TO_WORLD_POS(tbc->meX, tbc->regionX); + s16 worldY = TO_WORLD_POS(me->y, tbc->regionY); + s32 playerX = I(gPlayer.qWorldX); + + if (playerX > worldX) { + gStageFlags |= STAGE_FLAG__ACT_START; + gBldRegs.bldCnt = (BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_ALL); + gBldRegs.bldY = 0; + + tbc->blend = 0; + tbc->unkA = 0; + + gCurTask->main = Task_80256D4; + + m4aMPlayFadeOut(&gMPlayInfo_BGM, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 4); + } else if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, tbc->meX); + TaskDestroy(gCurTask); + return; + } +} + +void Task_80256D4(void) +{ + TextTBC *tbc = TASK_DATA(gCurTask); + tbc->blend += Q(0.25); + gBldRegs.bldY = I(tbc->blend); + + if (tbc->blend >= Q(16)) { + gBldRegs.bldY = 16; + gCurTask->main = Task_DestroyActiveTasks; + } +} + +void Task_DestroyActiveTasks(void) +{ + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + CreateToBeContinuedScreen(); +} + +void CreateEntity_ToBeContinuedText(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_ToBeContinuedText, sizeof(TextTBC), 0x2000, 0, NULL); + TextTBC *tbc = TASK_DATA(t); + + tbc->regionX = regionX; + tbc->regionY = regionY; + tbc->me = me; + tbc->meX = me->x; + + SET_MAP_ENTITY_INITIALIZED(me); +} diff --git a/sa1/src/game/interactables/ferris_wheel.c b/sa1/src/game/interactables/ferris_wheel.c new file mode 100644 index 0000000000..aa7c55f2ae --- /dev/null +++ b/sa1/src/game/interactables/ferris_wheel.c @@ -0,0 +1,257 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Sprite s2; + /* 0x6C */ Sprite s3; + /* 0xA4 */ u16 unk9C; + /* 0xA0 */ s32 unkA0; + /* 0xA4 */ s32 unkA4; + /* 0xA8 */ s32 unkA8; + /* 0xAC */ s16 unkAC; + /* 0xAE */ s16 unkAE; + /* 0xB0 */ u16 qUnkB0; + /* 0xB4 */ u8 unkB2; + /* 0xB4 */ u8 unkB3; + /* 0xB4 */ u8 unkB4; + /* 0xB5 */ u8 unkB5; + /* 0xB6 */ u8 unkB6; +} FerrisWheel; /* 0xB8 */ + +void Task_FerrisWheel(void); +void TaskDestructor_FerrisWheel(struct Task *t); + +const u16 gUnknown_086CEE2C[NUM_LEVEL_IDS] = { + SA1_ANIM_PLATFORM_HORZ_1, SA1_ANIM_PLATFORM_HORZ_1, SA1_ANIM_PLATFORM_HORZ_2, SA1_ANIM_PLATFORM_HORZ_2, + SA1_ANIM_PLATFORM_HORZ_3, SA1_ANIM_PLATFORM_HORZ_3, SA1_ANIM_PLATFORM_HORZ_4, SA1_ANIM_PLATFORM_HORZ_4, + SA1_ANIM_PLATFORM_HORZ_5, SA1_ANIM_PLATFORM_HORZ_5, SA1_ANIM_PLATFORM_HORZ_6_1, SA1_ANIM_PLATFORM_HORZ_6_2, + SA1_ANIM_PLATFORM_HORZ_6_1, SA1_ANIM_PLATFORM_HORZ_6_1, SA1_ANIM_PLATFORM_HORZ_1, SA1_ANIM_PLATFORM_HORZ_2, + SA1_ANIM_PLATFORM_HORZ_3, SA1_ANIM_PLATFORM_HORZ_6_2, +}; + +void CreateEntity_FerrisWheel(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_FerrisWheel, sizeof(FerrisWheel), 0x2000, 0, TaskDestructor_FerrisWheel); + FerrisWheel *wheel = TASK_DATA(t); + CamCoord worldX, worldY; + Sprite *s, *s2, *s3; + + wheel->base.regionX = regionX; + wheel->base.regionY = regionY; + wheel->base.me = me; + wheel->base.meX = me->x; + wheel->base.id = id; + + wheel->unkA4 = 0; + wheel->unkA8 = 0; + wheel->unkAC = 0; + wheel->unkAE = 0; + + wheel->unk9C = (me->d.sData[0] & 0xF) << 7; + wheel->unkB4 = me->d.sData[1]; + wheel->unkB5 = 0; + wheel->qUnkB0 = 0; + wheel->unkA0 = 0; + wheel->unkB6 = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + wheel->unkB3 = me->d.uData[2]; + wheel->unkB2 = 1; + } else { + wheel->unkB3 = me->d.uData[3]; + wheel->unkB2 = 0; + } + + s = &wheel->s; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_HORZ_3); + s->graphics.anim = gUnknown_086CEE2C[gCurrentLevel]; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + + s3 = &wheel->s3; + s3->graphics.dest = VRAM_RESERVED_FERRIS_WHEEL_HOOK; + s3->oamFlags = SPRITE_OAM_ORDER(18); + s3->graphics.size = 0; + s3->graphics.anim = SA1_ANIM_FERRIS_WHEEL_HOOK; + s3->variant = 0; + s3->animCursor = 0; + s3->qAnimDelay = Q(0); + s3->prevVariant = -1; + s3->animSpeed = SPRITE_ANIM_SPEED(1.0); + s3->palId = 0; + s3->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s3->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s3); + + s2 = &wheel->s2; + s2->graphics.dest = VRAM_RESERVED_FERRIS_WHEEL_SEGMENT; + s2->oamFlags = SPRITE_OAM_ORDER(18); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_FERRIS_WHEEL_SEGMENT; + s2->variant = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s2); +} + +void Task_FerrisWheel(void) +{ + Sprite *s; + Sprite *s3; + Sprite *s2; + FerrisWheel *wheel; + s32 data1; + CamCoord worldX; + CamCoord worldY; + MapEntity *me; + s32 sp14; + s32 sp18; + s32 i; + u8 j; + + wheel = TASK_DATA(gCurTask); + s = &wheel->s; + s3 = &wheel->s3; + s2 = &wheel->s2; + me = wheel->base.me; + + if (wheel->unkB2) { + wheel->unkA4 = SIN(((+me->d.sData[1] * gStageTime + wheel->unk9C) & 0x7FF) >> 1) * wheel->unkB3; + wheel->unkA8 = COS(((+me->d.sData[1] * gStageTime + wheel->unk9C) & 0x7FF) >> 1) * wheel->unkB3; + } else { + wheel->unkA4 = SIN(((-me->d.sData[1] * gStageTime + wheel->unk9C) & 0x7FF) >> 1) * wheel->unkB3; + wheel->unkA8 = COS(((-me->d.sData[1] * gStageTime + wheel->unk9C) & 0x7FF) >> 1) * wheel->unkB3; + } + + worldX = TO_WORLD_POS(wheel->base.meX, wheel->base.regionX); + worldY = TO_WORLD_POS(me->y, wheel->base.regionY); + + sp14 = wheel->unkA4 >> 11; + sp18 = wheel->unkA8 >> 11; + + s->x = worldX - gCamera.x + sp14; + s->y = worldY - gCamera.y + sp18; + + if ((LEVEL_TO_ZONE(gCurrentLevel) != ZONE_3) && (gCurrentLevel != ACT_CHAO_HUNT_C)) { + s3->x = worldX - gCamera.x; + s3->y = worldY - gCamera.y; + } + + i = 0; + do { + if (GetBit(wheel->unkB6, i)) { + if (gStageTime & 0x1) { + PLAYER(i).qWorldX += ((wheel->unkA4 - wheel->unkA0) >> 3) + 1; + } else { + PLAYER(i).qWorldX += ((wheel->unkA4 - wheel->unkA0) >> 3) + 0; + } + } + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + Coll_Player_PlatformCrumbling(s, worldX + sp14, worldY + sp18, &PLAYER(i)); + + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && PLAYER(i).stoodObj == s) { + SetBit(wheel->unkB6, i); + + wheel->qUnkB0 += Q(0.0625); + + if (wheel->qUnkB0 > Q(1.0)) { + wheel->qUnkB0 = Q(1.0); + } + + if (PLAYER(i).moveState & (MOVESTATE_SPINDASH | MOVESTATE_4)) { + PLAYER(i).qWorldY = Q((worldY + sp18) - 15); + } else { + PLAYER(i).qWorldY = Q((worldY + sp18) - 20); + } + + } else { + ClearBit(wheel->unkB6, i); + + if (wheel->qUnkB0 > Q(0.0625)) { + wheel->qUnkB0 -= Q(0.0625); + } else { + wheel->qUnkB0 = Q(0); + } + } + } else { + if (GetBit(wheel->unkB6, i)) { + ClearBit(wheel->unkB6, i); + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wheel->base.meX); + TaskDestroy(gCurTask); + return; + } + + { + s32 r8 = 0; + s32 r4 = 0; + + s->y += Div(SIN(wheel->qUnkB0), 2500); + + DisplaySprite(s); + + if ((LEVEL_TO_ZONE(gCurrentLevel) != ZONE_3) && (gCurrentLevel != ACT_CHAO_HUNT_C)) { + DisplaySprite(s3); + + sp14 = Div(wheel->unkA4, 3); + sp18 = Div(wheel->unkA8, 3); + + for (j = 0; j < 2; j++) { + r8 += sp14; + r4 += sp18; + + s2->x = worldX - gCamera.x + (r8 >> 11); + s2->y = worldY - gCamera.y + (r4 >> 11); + + DisplaySprite(s2); + } + } + } + + wheel->unkA0 = wheel->unkA4; +} + +void TaskDestructor_FerrisWheel(struct Task *t) +{ + FerrisWheel *wheel = TASK_DATA(t); + VramFree(wheel->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/flipper_small_blue.c b/sa1/src/game/interactables/flipper_small_blue.c new file mode 100644 index 0000000000..80d04ecf05 --- /dev/null +++ b/sa1/src/game/interactables/flipper_small_blue.c @@ -0,0 +1,199 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E; + /* 0x3F */ u8 unk3F; + /* 0x40 */ s32 qUnk40[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x48 */ s32 qUnk48[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x50 */ s32 qUnk50[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x58 */ u8 unk58[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x5A */ u8 unk5A[NUM_SINGLEPLAYER_CHARS_MAX]; +} BlueFlipper; + +void Task_Flipper_SmallBlue(void); +void TaskDestructor_Flipper_SmallBlue(struct Task *t); + +void CreateEntity_Flipper_SmallBlue(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Flipper_SmallBlue, sizeof(BlueFlipper), 0x2000 + me->d.sData[1], 0, TaskDestructor_Flipper_SmallBlue); + BlueFlipper *flipper = TASK_DATA(t); + Sprite *s = &flipper->s; + s32 i; + + flipper->base.regionX = regionX; + flipper->base.regionY = regionY; + flipper->base.me = me; + flipper->base.meX = me->x; + flipper->base.id = id; + + flipper->unk3D = me->d.sData[0]; + flipper->unk3C = 0; + + i = 0; + do { + flipper->unk58[i] = 0; + flipper->qUnk40[i] = 0; + flipper->qUnk50[i] = 0; + flipper->qUnk48[i] = 0; + flipper->unk5A[i] = 0; + } while (++i < gNumSingleplayerCharacters); + + flipper->unk3E = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BLUE_FLIPPER); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_BLUE_FLIPPER; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + + if (me->d.uData[2]) { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(X_FLIP, 1); + } else { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + UpdateSpriteAnimation(s); +} + +void Task_Flipper_SmallBlue(void) +{ + CamCoord worldX, worldY; + BlueFlipper *flipper = TASK_DATA(gCurTask); + Sprite *s = &flipper->s; + MapEntity *me = flipper->base.me; + s32 i; + + worldX = TO_WORLD_POS(flipper->base.meX, flipper->base.regionX); + worldY = TO_WORLD_POS(me->y, flipper->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (GetBit(flipper->unk3C, i)) { + if ((flipper->unk5A[i] != 0) && (--flipper->unk5A[i] == 0)) { + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 0; + s->prevVariant = -1; + } + + flipper->qUnk40[i] += Q(42. / 256.); + flipper->qUnk48[i] += flipper->qUnk40[i]; + PLAYER(i).qWorldY = flipper->qUnk48[i]; + PLAYER(i).qWorldX = flipper->qUnk50[i]; + PLAYER(i).qSpeedAirY = flipper->qUnk40[i]; + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedGround = 0; + + if (++flipper->unk58[i] >= flipper->unk3D) { + if (PLAYER(i).SA2_LABEL(unk99)[0] == flipper->unk3E) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + } + + PLAYER(i).qSpeedAirY = flipper->qUnk40[i]; + ClearBit(flipper->unk3C, i); + flipper->unk5A[i] = 0; + } else { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedGround = 0; + PLAYER(i).charState = CHARSTATE_32; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + SetBit(flipper->unk3C, i); + } + } else { + // !GetBit(flipper->unk3C, i) + + if (flipper->unk5A[i] != 0) { + if (--flipper->unk5A[i] == 0) { + s->graphics.anim = SA1_ANIM_BLUE_FLIPPER; + s->variant = 0; + s->prevVariant = -1; + } + } else if (PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE) { + if (PLAYER(i).SA2_LABEL(unk99)[0] < flipper->unk3E) { + if (Coll_Player_Entity_Intersection(s, worldX, worldY, &PLAYER(i))) { + flipper->unk58[i] = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).SA2_LABEL(unk99)[0] = flipper->unk3E; + flipper->qUnk48[i] = PLAYER(i).qWorldY; + flipper->qUnk50[i] = PLAYER(i).qWorldX; + flipper->qUnk40[i] = -Q(12.5625); + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedGround = 0; + PLAYER(i).charState = CHARSTATE_32; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_BUMPER_A); + + SetBit(flipper->unk3C, i); + flipper->unk5A[i] = 24; + + s->graphics.anim = SA1_ANIM_BLUE_FLIPPER; + s->variant = 1; + s->prevVariant = -1; + } + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (((flipper->unk3C & 0x3) == 0) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + s32 i = 0; + do { + if (GetBit(flipper->unk3C, i) & 0x1) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, flipper->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_Flipper_SmallBlue(struct Task *t) +{ + BlueFlipper *flipper = TASK_DATA(t); + VramFree(flipper->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/flippers.c b/sa1/src/game/interactables/flippers.c new file mode 100644 index 0000000000..d590426138 --- /dev/null +++ b/sa1/src/game/interactables/flippers.c @@ -0,0 +1,472 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 unk3C; + /* 0x40 */ u8 unk40; + /* 0x41 */ u8 unk41; +} Flipper; + +void Task_Flipper_Horizontal(void); +void Task_Flipper_Horizontal_2(void); +void Task_Flipper_Vertical(void); +void Task_Flipper_Vertical_2(void); +void TaskDestructor_Flipper(struct Task *t); + +void CreateEntity_Flipper(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Flipper_Horizontal, sizeof(Flipper), 0x2000, 0, TaskDestructor_Flipper); + Flipper *flipper = TASK_DATA(t); + Sprite *s = &flipper->s; + + flipper->base.regionX = regionX; + flipper->base.regionY = regionY; + flipper->base.me = me; + flipper->base.meX = me->x; + flipper->base.id = id; + + flipper->unk3C = 0; + flipper->unk40 = 0; + flipper->unk41 = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_FLIPPER, 1); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + + if (me->d.sData[0] == 0) { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(X_FLIP, 1); + } else { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(X_FLIP, 0); + } + + UpdateSpriteAnimation(s); +} + +void Task_Flipper_Horizontal() +{ + Sprite *s; + CamCoord worldX; + CamCoord worldY; + s32 pxHalf; + MapEntity *me; + Flipper *flipper; + s16 px; + s32 i; + + flipper = TASK_DATA(gCurTask); + + s = &flipper->s; + me = flipper->base.me; + worldX = TO_WORLD_POS(flipper->base.meX, flipper->base.regionX); + worldY = TO_WORLD_POS(me->y, flipper->base.regionY); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + px = worldX - I(PLAYER(i).qWorldX); + } else { + px = I(PLAYER(i).qWorldX) - worldX; + } + pxHalf = (s32)(u16)(px >> 1); + if (Coll_Player_Entity_Intersection(s, worldX, worldY, &PLAYER(i))) { + if ((PLAYER(i).character == CHARACTER_KNUCKLES) + && ((PLAYER(i).charState == CHARSTATE_70) || (PLAYER(i).charState == CHARSTATE_71) || (PLAYER(i).charState == CHARSTATE_72) + || (PLAYER(i).charState == CHARSTATE_73) || (PLAYER(i).charState == CHARSTATE_74) + || (PLAYER(i).charState == CHARSTATE_75))) { + if (PLAYER(i).charState != CHARSTATE_73) { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + + if ((PLAYER(i).moveState & 8) && (PLAYER(i).stoodObj == s)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYER(i).moveState &= ~8; + PLAYER(i).moveState |= 4; + PLAYER(i).moveState |= 2; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + PLAYER(i).moveState |= 1; + } else { + PLAYER(i).moveState &= ~1; + } + } + } + } else { + if (((PLAYER(i).qSpeedAirY >= 0) || ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == s))) + && (PLAYER(i).qWorldY < Q(worldY) + Q(19)) && (PLAYER(i).moveState & 2)) { + if ((gPressedKeys & gPlayerControls.jump) && GetBit(flipper->unk41, i)) { + ClearBit(flipper->unk41, i); + PLAYER(i).moveState &= ~0x8; + PLAYER(i).moveState |= 2; + PLAYER(i).moveState &= ~0x100; + PLAYER(i).moveState |= 4; + PLAYER(i).moveState &= ~0x10; + if (DPAD_LEFT & gInput) { + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + } else if (DPAD_RIGHT & gInput) { + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + } + PLAYER(i).qSpeedAirY = 0xFFFFF840 - (px * 16); + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + PLAYER(i).qSpeedAirX = -(px * 32); + PLAYER(i).qSpeedGround = -(px * 32); + } else { + PLAYER(i).qSpeedAirX = +(px * 32); + PLAYER(i).qSpeedGround = +(px * 32); + } + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = 5; + flipper->unk40 = 8; + flipper->unk3C = 0; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + PLAYER(i).moveState &= 0xFFDFFFFF; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 1; + s->prevVariant = -1; + + m4aSongNumStart(0xB7U); + gCurTask->main = Task_Flipper_Horizontal_2; + } else { + + if ((s->frameFlags & SPRITE_FLAG_MASK_X_FLIP)) { + if (PLAYER(i).qWorldY > Q(worldY + (s16)pxHalf - 17)) { + PLAYER(i).qWorldY = Q(worldY + (s16)pxHalf - 17) + 1; + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedAirX = -Q(0.3125); + SetBit(flipper->unk41, i); + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + PLAYER(i).rotation = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= 0x200000; + PLAYER(i).moveState |= 4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + if (GetBit(flipper->unk41, i)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= 2; + PLAYER(i).moveState &= ~0x100; + PLAYER(i).moveState |= 4; + PLAYER(i).moveState &= ~0x10; + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + PLAYER(i).qWorldY = Q(worldY + (s16)pxHalf - 17) + 1; + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedAirX = -Q(0.3125); + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + PLAYER(i).moveState |= 0x200000; + } else { + PLAYER(i).moveState &= 0xFFDFFFFF; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + } + } else { + if (PLAYER(i).qWorldY > Q(worldY + (s16)pxHalf - 17)) { + PLAYER(i).qWorldY = Q(worldY + (s16)pxHalf - 17) + 1; + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedAirX = +Q(0.3125); + SetBit(flipper->unk41, i); + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + PLAYER(i).rotation = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= 0x200000; + PLAYER(i).moveState |= 4; + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + } else { + if (GetBit(flipper->unk41, i)) { + PLAYER(i).moveState |= 2; + PLAYER(i).moveState &= ~0x100; + PLAYER(i).moveState |= 4; + PLAYER(i).moveState &= ~0x10; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + + PLAYER(i).qWorldY = Q((worldY + (s16)pxHalf) - 17) + 1; + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedAirX = +Q(0.3125); + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + PLAYER(i).moveState |= 0x200000; + } else { + PLAYER(i).moveState &= 0xFFDFFFFF; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + } + } + } + } else { + if (PLAYER(i).qWorldY <= Q(worldY)) { + PLAYER(i).moveState |= 2; + } else if (PLAYER(i).qWorldY < Q(worldY) + Q(24)) { + PLAYER(i).qWorldY = Q(worldY) + Q(24); + PLAYER(i).qSpeedAirY = 10; + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedGround = 0; + } + } + } + } else { + if (GetBit(flipper->unk41, i)) { + PLAYER(i).moveState &= 0xFFDFFFFF; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + PLAYER(i).qSpeedAirX = -Q(1); + } else { + PLAYER(i).qSpeedAirX = +Q(1); + } + } + ClearBit(flipper->unk41, i); + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + s32 i = 0; + do { + if (GetBit(flipper->unk41, i)) { + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, flipper->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_Flipper_Horizontal_2(void) +{ + Flipper *flipper = TASK_DATA(gCurTask); + Sprite *s = &flipper->s; + MapEntity *me = flipper->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(flipper->base.meX, flipper->base.regionX); + worldY = TO_WORLD_POS(me->y, flipper->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, flipper->base.meX); + TaskDestroy(gCurTask); + return; + } + + flipper->unk40--; + + if (flipper->unk40 == 0) { + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 0; + s->prevVariant = -1; + + gCurTask->main = Task_Flipper_Horizontal; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateEntity_Flipper_Vertical(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Flipper_Vertical, sizeof(Flipper), 0x2000, 0, TaskDestructor_Flipper); + Flipper *flipper = TASK_DATA(t); + Sprite *s = &flipper->s; + + flipper->base.regionX = regionX; + flipper->base.regionY = regionY; + flipper->base.me = me; + flipper->base.meX = me->x; + flipper->base.id = id; + + flipper->unk3C = 0; + flipper->unk40 = 0; + flipper->unk41 = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_FLIPPER, 3); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_Flipper_Vertical(void) +{ + Sprite *s; + CamCoord worldX, worldY; + MapEntity *me; + Flipper *flipper; + s32 i; + + flipper = TASK_DATA(gCurTask); + s = &flipper->s; + me = flipper->base.me; + + worldX = TO_WORLD_POS(flipper->base.meX, flipper->base.regionX); + worldY = TO_WORLD_POS(me->y, flipper->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((PLAYER(i).moveState & MOVESTATE_IN_AIR) || GetBit(flipper->unk41, i)) { + if (sub_80096B0(s, worldX, worldY, &PLAYER(i)) & COLL_FLAG_8) { + SetBit(flipper->unk41, i); + + if (!Coll_Player_Entity_Intersection(s, worldX, worldY, &PLAYER(i))) { + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && PLAYER(i).stoodObj == s) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + continue; + } + } + } else { + if (GetBit(flipper->unk41, i)) { + ClearBit(flipper->unk41, i); + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } else { + if (Q(worldY) < PLAYER(i).qWorldY) { + if (Q(worldX) > PLAYER(i).qWorldX) { + if (Coll_Player_Entity_Intersection(s, worldX - 6, worldY, &PLAYER(i))) { + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + PLAYER(i).qSpeedAirX = -Q(10); + PLAYER(i).qSpeedGround = -Q(10); + + SPRITE_FLAG_SET(s, X_FLIP); + + flipper->unk40 = 8; + + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 3; + s->prevVariant = -1; + m4aSongNumStart(SE_BUMPER_A); + + gCurTask->main = Task_Flipper_Vertical_2; + } + } else { + if (Coll_Player_Entity_Intersection(s, worldX + 7, worldY, &PLAYER(i))) { + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + PLAYER(i).qSpeedAirX = +Q(10); + PLAYER(i).qSpeedGround = +Q(10); + + SPRITE_FLAG_CLEAR(s, X_FLIP); + + flipper->unk40 = 8; + + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 3; + s->prevVariant = -1; + m4aSongNumStart(SE_BUMPER_A); + + gCurTask->main = Task_Flipper_Vertical_2; + } + } + } + } + } else { + if (GetBit(flipper->unk41, i)) { + ClearBit(flipper->unk41, i); + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, flipper->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_Flipper_Vertical_2(void) +{ + Flipper *flipper = TASK_DATA(gCurTask); + Sprite *s = &flipper->s; + MapEntity *me = flipper->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(flipper->base.meX, flipper->base.regionX); + worldY = TO_WORLD_POS(me->y, flipper->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, flipper->base.meX); + TaskDestroy(gCurTask); + return; + } + + flipper->unk40--; + + if (flipper->unk40 == 0) { + s->graphics.anim = SA1_ANIM_FLIPPER; + s->variant = 2; + s->prevVariant = -1; + + gCurTask->main = Task_Flipper_Vertical; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_Flipper(struct Task *t) +{ + Flipper *flipper = TASK_DATA(t); + VramFree(flipper->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/forced_slide.c b/sa1/src/game/interactables/forced_slide.c new file mode 100644 index 0000000000..efb2ea3d7e --- /dev/null +++ b/sa1/src/game/interactables/forced_slide.c @@ -0,0 +1,218 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player_controls.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3D */ u8 unk3D[NUM_SINGLEPLAYER_CHARS_MAX]; +} ForcedSlide; + +const AnimId ALIGNED(4) gAnimSlideSplashes[NUM_LEVEL_IDS] = { + [LEVEL_INDEX(ZONE_1, ACT_1)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_1, ACT_2)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_2, ACT_1)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_2, ACT_2)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_3, ACT_1)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_3, ACT_2)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_4, ACT_1)] = SA1_ANIM_ICE_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_4, ACT_2)] = SA1_ANIM_ICE_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_5, ACT_1)] = SA1_ANIM_MUD_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_5, ACT_2)] = SA1_ANIM_MUD_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_6, ACT_1)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_6, ACT_2)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_7, ACT_1)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [LEVEL_INDEX(ZONE_7, ACT_2)] = SA1_ANIM_WATER_SLIDE_SPLASH, + [ACT_CHAO_HUNT_A] = SA1_ANIM_WATER_SLIDE_SPLASH, + [ACT_CHAO_HUNT_B] = SA1_ANIM_WATER_SLIDE_SPLASH, + [ACT_CHAO_HUNT_C] = SA1_ANIM_WATER_SLIDE_SPLASH, + [ACT_CHAO_HUNT_D] = SA1_ANIM_WATER_SLIDE_SPLASH, +}; + +void Task_ForcedSlide(void); +void TaskDestructor_ForcedSlide(struct Task *t); + +void CreateEntity_ForcedSlide(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_ForcedSlide, sizeof(ForcedSlide), me->d.sData[1] + 0x1000, 0, TaskDestructor_ForcedSlide); + ForcedSlide *slide = TASK_DATA(t); + Sprite *s = &slide->s; + + slide->base.regionX = regionX; + slide->base.regionY = regionY; + slide->base.me = me; + slide->base.meX = me->x; + + slide->unk3C = me->d.sData[0]; + slide->unk3D[PLAYER_1] = 0; + slide->unk3D[PLAYER_2] = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + // TODO: Automatically allocate enough for any water splash in gAnimSlideSplashes + s->graphics.dest = ALLOC_TILES(SA1_ANIM_WATER_SLIDE_SPLASH); + s->graphics.anim = gAnimSlideSplashes[gCurrentLevel]; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(3); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (slide->unk3C != 0) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } +} + +void Task_ForcedSlide(void) +{ + ForcedSlide *slide; + Sprite *s; + CamCoord x; + CamCoord y; + MapEntity *me; + u32 sp14; + s32 i; + + sp14 = ((1 << 1) | (1 << 0)); + slide = TASK_DATA(gCurTask); + s = &slide->s; + me = slide->base.me; + + // x|y = world-coords + x = TO_WORLD_POS(slide->base.meX, slide->base.regionX); + y = TO_WORLD_POS(me->y, slide->base.regionY); + + i = 0; + do { + if (i != 0) { + if (gPartner.moveState & MOVESTATE_DEAD) + continue; + } else { + if (gPlayer.moveState & MOVESTATE_DEAD) + continue; + } + + if ((x <= I(PLAYER(i).qWorldX)) && (x + me->d.uData[2] * TILE_WIDTH >= I(PLAYER(i).qWorldX)) && (y <= I(PLAYER(i).qWorldY)) + && (y + me->d.uData[3] * TILE_WIDTH >= I(PLAYER(i).qWorldY))) { + if (slide->unk3D[i] == 0) { + s32 res; + + res = SA2_LABEL(sub_801F07C)(I(PLAYER(i).qWorldY), I(PLAYER(i).qWorldX), PLAYER(i).layer, +8, 0, SA2_LABEL(sub_801EE64)); + + if (res > 3) { + goto set_sp14; + } + } + + if (!(PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ)) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + if (slide->unk3D[i] == 0 && LEVEL_TO_ZONE(gCurrentLevel) == ZONE_5) { + m4aSongNumStart(SE_201); + } + + slide->unk3D[i] = 1; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).moveState |= MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + + if (slide->unk3C != 0) { + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + PLAYER(i).qSpeedGround = -Q(4); + PLAYER(i).qSpeedAirX = -Q(4); + } else { + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + PLAYER(i).qSpeedGround = +Q(4); + PLAYER(i).qSpeedAirX = +Q(4); + } + + PLAYER(i).qSpeedAirY = +Q(0); + PLAYER(i).charState = CHARSTATE_HIT_AIR; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + s->x = I(PLAYER(i).qWorldX) - gCamera.x; + s->y = I(PLAYER(i).qWorldY) - gCamera.y; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } else { + if ((slide->unk3D[i] != 0) && (--slide->unk3D[i] == 0)) { + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + } + } + set_sp14: + + sp14 &= ~(1 << i); + } else { + if (slide->unk3D[i] == 1) { + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + slide->unk3D[i] = 0; + + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } else if (slide->unk3D[i] > 0) { + slide->unk3D[i]--; + } + } + + } while (++i < gNumSingleplayerCharacters); + + if (sp14 & ((1 << NUM_SINGLEPLAYER_CHARS_MAX) - 1)) { + return; + } + + x = x - gCamera.x; + y = y - gCamera.y; + + // x|y = screen-coords + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + s32 i = 0; + do { + if (slide->unk3D[i] != 0) { + m4aSongNumStop(SE_201); + + slide->unk3D[i] = 0; + + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, slide->base.meX); + TaskDestroy(gCurTask); + return; + } +} + +void TaskDestructor_ForcedSlide(struct Task *t) +{ + ForcedSlide *slide = TASK_DATA(t); + VramFree(slide->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/grind_rail.c b/sa1/src/game/interactables/grind_rail.c new file mode 100644 index 0000000000..edc3d54125 --- /dev/null +++ b/sa1/src/game/interactables/grind_rail.c @@ -0,0 +1,226 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/parameters/characters.h" +#include "game/stage/grind_effect_1.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" + +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct { + u16 frameCount; +} GrindRailUnk; + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ u16 regionX; + /* 0x06 */ u16 regionY; + /* 0x08 */ u8 meX; +} GrindRail; + +#ifndef NON_MATCHING +#define GRINDRAIL_SIZE 9 +#define GRINDRAIL_UNK_SIZE 2 +#else +#define GRINDRAIL_SIZE sizeof(GrindRail) +#define GRINDRAIL_UNK_SIZE sizeof(GrindRailUnk) +#endif + +void Task_GrindRailStart(void); +void Task_GrindRailEnd(void); +void Task_8023EFC(void); + +// (96.59%) https://decomp.me/scratch/oIXga +NONMATCH("asm/non_matching/game/interactables/grind_rail__Task_GrindRailStart.inc", void Task_GrindRailStart(void)) +{ + struct Task *grindTask; + GrindRail *rail; + MapEntity *me; + u8 meX; + u16 regionX, regionY; + s16 worldX, worldY; + s16 screenX, screenY; + + if (gPlayer.character == CHARACTER_TAILS || // + gPlayer.character == CHARACTER_KNUCKLES) { + return; + } + + rail = TASK_DATA(gCurTask); + + me = rail->me; + meX = TASK_GET_MEMBER(GrindRail, gCurTask, u8, meX); + regionX = TASK_GET_MEMBER(GrindRail, gCurTask, u16, regionX); + regionY = TASK_GET_MEMBER(GrindRail, gCurTask, u16, regionY); + + worldX = TO_WORLD_POS(meX, regionX); + worldY = TO_WORLD_POS(me->y, regionY); + + if (PLAYER_IS_ALIVE) { + // NOTE: The collision check does not take left/top (data[0] | data[1]) into account, + // because they are always placed on the left side of a rail ending. + if ((worldX <= I(gPlayer.qWorldX)) // + && (worldX + me->d.uData[2] * TILE_WIDTH >= I(gPlayer.qWorldX)) // + && (worldY <= I(gPlayer.qWorldY)) // + && (worldY + me->d.uData[3] * TILE_WIDTH >= I(gPlayer.qWorldY)) // + && !(gPlayer.moveState & MOVESTATE_1000000) && (gPlayer.qSpeedAirY >= Q(0)) && (gPlayer.qSpeedAirX > Q(0))) // + { + gPlayer.qSpeedAirX = MAX(Q(0.5), gPlayer.qSpeedAirX); + + gPlayer.moveState |= MOVESTATE_1000000; + gPlayer.layer ^= 1; + gPlayerBodyPSI.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + gPlayerBodyPSI.s.frameFlags |= SPRITE_FLAG(PRIORITY, 1); + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__80; + + if (gPlayer.character == CHARACTER_AMY) { + m4aSongNumStart(SE_AMY_GRINDING); + } else { + m4aSongNumStart(SE_GRINDING); + } + + grindTask = CreateGrindEffect(); + } + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, meX); + TaskDestroy(gCurTask); + return; + } + } +} +END_NONMATCH + +void Task_GrindRailEnd(void) +{ + GrindRail *rail; + MapEntity *me; + u8 meX; + u16 regionX, regionY; + s16 worldX, worldY; + s16 screenX, screenY; + + if (gPlayer.character == CHARACTER_TAILS || // + gPlayer.character == CHARACTER_KNUCKLES) { + return; + } + + rail = TASK_DATA(gCurTask); + + me = rail->me; + meX = TASK_GET_MEMBER(GrindRail, gCurTask, u8, meX); + regionX = TASK_GET_MEMBER(GrindRail, gCurTask, u16, regionX); + regionY = TASK_GET_MEMBER(GrindRail, gCurTask, u16, regionY); + + worldX = TO_WORLD_POS(meX, regionX); + worldY = TO_WORLD_POS(me->y, regionY); + + if (PLAYER_IS_ALIVE) { + // NOTE: The collision check does not take left/top (data[0] | data[1]) into account, + // because they are always placed on the left side of a rail ending. + if ((worldX <= I(gPlayer.qWorldX)) // + && (worldX + me->d.uData[2] * TILE_WIDTH >= I(gPlayer.qWorldX)) // + && (worldY <= I(gPlayer.qWorldY)) // + && (worldY + me->d.uData[3] * TILE_WIDTH >= I(gPlayer.qWorldY)) // + && (gPlayer.moveState & MOVESTATE_1000000)) // + { + if (I(gPlayer.qWorldX) > worldX + ((me->d.uData[2] * TILE_WIDTH) >> 1)) { + /* Jump off of the rail */ + + gPlayer.qSpeedAirY = -Q(PLAYER_RAIL_JUMP_HEIGHT); + + if (gPlayer.character == CHARACTER_AMY) { + m4aSongNumStop(SE_AMY_GRINDING); + } else { + m4aSongNumStop(SE_GRINDING); + } + + m4aSongNumStart(SE_JUMP); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = CHARSTATE_17; + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.moveState &= ~MOVESTATE_1000000; + gPlayer.layer ^= 1; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__80; + gPlayerBodyPSI.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + gPlayerBodyPSI.s.frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } else if (gInput & gPlayerControls.jump) { + gPlayer.qSpeedAirY = -Q(PLAYER_RAIL_EXTRA_JUMP_HEIGHT); + + if (gPlayer.character == CHARACTER_AMY) { + m4aSongNumStop(SE_AMY_GRINDING); + } else { + m4aSongNumStop(SE_GRINDING); + } + + m4aSongNumStart(SE_JUMP); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = CHARSTATE_RAIL_EXTRA_JUMP; + gPlayerBodyPSI.s.variant = 0; + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.moveState &= ~MOVESTATE_1000000; + gPlayer.layer ^= 1; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__80; + gPlayerBodyPSI.s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + gPlayerBodyPSI.s.frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } + } + + // _08023E5E + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, meX); + TaskDestroy(gCurTask); + return; + } + } +} + +// Unused? +void sub_8023ED0(void) +{ + struct Task *t = TaskCreate(Task_8023EFC, GRINDRAIL_UNK_SIZE, 0x2000, 0, NULL); + TASK_SET_MEMBER(GrindRailUnk, t, u16, frameCount, 0); +} + +void Task_8023EFC(void) +{ + GrindRailUnk *unk = TASK_DATA(gCurTask); + + if (++unk->frameCount > 60) { + m4aSongNumStart(SE_GRINDING); + TaskDestroy(gCurTask); + } +} + +void CreateEntity_GrindRail_Start(MapEntity *me, u16 regionX, u16 regionY, u8 spriteY) +{ + struct Task *t = TaskCreate(Task_GrindRailStart, GRINDRAIL_SIZE, 0x2000, 0, NULL); + + TASK_SET_MEMBER(GrindRail, t, u16, regionX, regionX); + TASK_SET_MEMBER(GrindRail, t, u16, regionY, regionY); + TASK_SET_MEMBER(GrindRail, t, MapEntity *, me, me); + TASK_SET_MEMBER(GrindRail, t, u8, meX, me->x); + + SET_MAP_ENTITY_INITIALIZED(me); +} + +void CreateEntity_GrindRail_End(MapEntity *me, u16 regionX, u16 regionY, u8 spriteY) +{ + struct Task *t = TaskCreate(Task_GrindRailEnd, GRINDRAIL_SIZE, 0x900, 0, NULL); + + TASK_SET_MEMBER(GrindRail, t, u16, regionX, regionX); + TASK_SET_MEMBER(GrindRail, t, u16, regionY, regionY); + TASK_SET_MEMBER(GrindRail, t, MapEntity *, me, me); + TASK_SET_MEMBER(GrindRail, t, u8, meX, me->x); + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/half_pipe.c b/sa1/src/game/interactables/half_pipe.c new file mode 100644 index 0000000000..f59b79e50a --- /dev/null +++ b/sa1/src/game/interactables/half_pipe.c @@ -0,0 +1,283 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/stage/player_controls.h" + +#include "constants/char_states.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s32 worldX; + /* 0x08 */ s32 worldY; + /* 0x0C */ s32 left; + /* 0x10 */ s32 right; + /* 0x14 */ s32 top; + /* 0x18 */ s32 bottom; + /* 0x1C */ s32 qOffsetY; + /* 0x20 */ u8 unk20; + /* 0x24 */ u8 meX; +} HalfPipe; + +void Task_HalfPipeStart(void); +void Task_HalfPipeEnd(void); +void sub_804D4A0(s32 param0, s32 unusedParam1, Player *p); + +void Task_HalfPipeStart(void) +{ + HalfPipe *halfpipe = TASK_DATA(gCurTask); + s32 i; + + i = 0; + do { + Player *p = &PLAYER(i); + s32 oldWorldX, oldWorldY; + + oldWorldX = I(p->qWorldX); + oldWorldY = I(p->qWorldY); + + if ((halfpipe->worldX > gCamera.x + DISPLAY_WIDTH + 128) || (halfpipe->worldX < gCamera.x - 800) + || (halfpipe->worldY > gCamera.y + DISPLAY_HEIGHT + 128) || (halfpipe->worldY < gCamera.y - 128)) { + p->moveState &= ~MOVESTATE_8000; + + halfpipe->me->x = halfpipe->meX; + TaskDestroy(gCurTask); + return; + } + + if ((halfpipe->left <= oldWorldX) && (oldWorldX < halfpipe->right) && (halfpipe->top <= oldWorldY) + && (oldWorldY < halfpipe->bottom)) { + if (p->qSpeedAirX > +Q(2.25)) { + if (!(p->moveState & MOVESTATE_IN_AIR) && (p->SA2_LABEL(unk62) == 0)) { + p->moveState |= MOVESTATE_8000; + halfpipe->qOffsetY = p->qWorldY + Q(p->spriteOffsetY); + } else { + p->moveState &= ~MOVESTATE_8000; + } + } else { + p->moveState &= ~MOVESTATE_8000; + } + } else { + if ((p->moveState & MOVESTATE_8000) && (halfpipe->right <= oldWorldX)) { + s16 qSpeed; + if (!IS_ALIVE(p)) { + return; + } + + qSpeed = p->qSpeedAirX + Q(2.25) - 1; + if ((qSpeed >= Q(0) && qSpeed < Q(4.5) - 1) || (p->frameInput & gPlayerControls.jump)) { + p->moveState &= ~MOVESTATE_8000; + + if (p->charState == CHARSTATE_24 || p->charState == CHARSTATE_25 || p->charState == CHARSTATE_26) { + p->charState = CHARSTATE_WALK_A; + } + + } else if ((p->qSpeedAirX >= +Q(2.25))) { + sub_804D4A0(oldWorldX - halfpipe->right, halfpipe->qOffsetY, p); + } + } + } + } while (++i < gNumSingleplayerCharacters); +} + +void Task_HalfPipeEnd(void) +{ + HalfPipe *halfpipe = TASK_DATA(gCurTask); + s32 i; + + i = 0; + do { + Player *p = &PLAYER(i); + s32 oldWorldX, oldWorldY; + + oldWorldX = I(p->qWorldX); + oldWorldY = I(p->qWorldY); + + if ((halfpipe->worldX > gCamera.x + DISPLAY_WIDTH + 800) || (halfpipe->worldX < gCamera.x - 128) + || (halfpipe->worldY > gCamera.y + DISPLAY_HEIGHT + 128) || (halfpipe->worldY < gCamera.y - 128)) { + p->moveState &= ~MOVESTATE_8000; + + halfpipe->me->x = halfpipe->meX; + TaskDestroy(gCurTask); + return; + } + + if ((halfpipe->left <= oldWorldX) && (oldWorldX < halfpipe->right) && (halfpipe->top <= oldWorldY) + && (oldWorldY < halfpipe->bottom)) { + if (p->qSpeedAirX < -Q(2.25)) { + if (!(p->moveState & MOVESTATE_IN_AIR) && (p->SA2_LABEL(unk62) == 0)) { + p->moveState |= MOVESTATE_8000; + halfpipe->qOffsetY = p->qWorldY + Q(p->spriteOffsetY); + } else { + p->moveState &= ~MOVESTATE_8000; + } + } else { + p->moveState &= ~MOVESTATE_8000; + } + } else { + if ((p->moveState & MOVESTATE_8000) && (oldWorldX < halfpipe->left)) { + s16 qSpeed; + if (!IS_ALIVE(p)) { + return; + } + + qSpeed = p->qSpeedAirX + Q(2.25) - 1; + if ((qSpeed >= Q(0) && qSpeed < Q(4.5) - 1) || (p->frameInput & gPlayerControls.jump)) { + p->moveState &= ~MOVESTATE_8000; + + if (p->charState == CHARSTATE_24 || p->charState == CHARSTATE_25 || p->charState == CHARSTATE_26) { + p->charState = CHARSTATE_WALK_A; + } + + } else if ((p->qSpeedAirX <= -Q(2.25))) { + sub_804D4A0(oldWorldX - halfpipe->left + Q(2.625), halfpipe->qOffsetY, p); + } + } + } + } while (++i < gNumSingleplayerCharacters); +} + +// (93.82%) https://decomp.me/scratch/Qgh0B +NONMATCH("asm/non_matching/game/interactables/half_pipe__sub_804D4A0.inc", void sub_804D4A0(s32 param0, s32 unusedParam1, Player *p)) +{ +#ifndef NON_MATCHING + register HalfPipe *halfpipe asm("r8") = TASK_DATA(gCurTask); + register s32 r6 asm("r6") = 0; + register s32 r5 asm("r5"); +#else + HalfPipe *halfpipe = TASK_DATA(gCurTask); + s32 r6 = 0; + s32 r5; +#endif + s32 r3; + s32 divParam0; + s32 r0; + s32 r1; + u16 theta; + + if (param0 >= 0 && param0 < 0x2A0) { + s16 qSpeedAirX = (ABS(p->qSpeedAirX) - Q(2.25)) >> 2; + + if (qSpeedAirX >= Q(0)) { + if (qSpeedAirX > Q(1)) { + qSpeedAirX = Q(1); + } + } else { + qSpeedAirX = 0; + } + + r6 = SIN_24_8((u16)qSpeedAirX); + + r5 = Q(1); + if (r6 > r5) { + r6 = r5; + } + // _0804D50C + + if (param0 < 0x150) { + divParam0 = (param0) << 15; + } else { + divParam0 = ((param0 - Q(2.625)) << 15); + } + + theta = (divParam0 / 0x150); + theta >>= 6; +#ifndef NON_MATCHING + r1 = -SIN(theta + r5); +#else + r1 = -COS(theta); +#endif + r0 = ((r1 * 3 >> 2) + Q(48)); + r0 *= r6; + r0 = I(r0); + r6 = r0; + } + // _0804D550 + + if (!(p->moveState & MOVESTATE_4)) { + // __0804D55A + if (p->SA2_LABEL(unk62) == 0) { + if (p->charState == CHARSTATE_WALK_A + || (p->charState == CHARSTATE_24 || p->charState == CHARSTATE_25 || p->charState == CHARSTATE_26)) { + if (r6 < Q(8)) { + p->charState = CHARSTATE_WALK_A; + } else if (r6 < Q(24)) { + p->charState = CHARSTATE_24; + } else if (r6 < Q(48)) { + p->charState = CHARSTATE_25; + } else { + p->charState = CHARSTATE_26; + } + } + } + } + // _0804D5B8 + + p->moveState &= ~MOVESTATE_IN_AIR; + p->qSpeedAirY = 0; + + r1 = halfpipe->qOffsetY; + r1 -= r6; + r1 -= Q(p->spriteOffsetY); + r1 -= p->qWorldY; + + r3 = p->qWorldY; + if (r1 >= -Q(6)) { + if (r1 > Q(6)) { + r1 = Q(6); + } + } else { + r1 = -Q(6); + } + + p->qWorldY = r3 + r1; +} +END_NONMATCH + +void CreateEntity_HalfPipeStart(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_HalfPipeStart, sizeof(HalfPipe), 0x2000, 0, NULL); + HalfPipe *halfpipe = TASK_DATA(t); + s32 worldX, worldY; + + halfpipe->me = me; + halfpipe->meX = me->x; + halfpipe->unk20 = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + + halfpipe->worldX = worldX; + halfpipe->worldY = worldY; + + halfpipe->left = worldX + me->d.sData[0] * TILE_WIDTH; + halfpipe->top = worldY + me->d.sData[1] * TILE_WIDTH; + halfpipe->right = halfpipe->left + me->d.uData[2] * TILE_WIDTH; + halfpipe->bottom = halfpipe->top + me->d.uData[3] * TILE_WIDTH; + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} + +void CreateEntity_HalfPipeEnd(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_HalfPipeEnd, sizeof(HalfPipe), 0x2000, 0, NULL); + HalfPipe *halfpipe = TASK_DATA(t); + s32 worldX, worldY; + + halfpipe->me = me; + halfpipe->meX = me->x; + halfpipe->unk20 = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + + halfpipe->worldX = worldX; + halfpipe->worldY = worldY; + + halfpipe->left = worldX + me->d.sData[0] * TILE_WIDTH; + halfpipe->top = worldY + me->d.sData[1] * TILE_WIDTH; + halfpipe->right = halfpipe->left + me->d.uData[2] * TILE_WIDTH; + halfpipe->bottom = halfpipe->top + me->d.uData[3] * TILE_WIDTH; + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} diff --git a/sa1/src/game/interactables/hang_bar.c b/sa1/src/game/interactables/hang_bar.c new file mode 100644 index 0000000000..2269752a99 --- /dev/null +++ b/sa1/src/game/interactables/hang_bar.c @@ -0,0 +1,162 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player_controls.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x30]; + /* 0x3C */ u8 isPlayerOnBits; + /* 0x40 */ s32 qPlayerWorldX[NUM_SINGLEPLAYER_CHARS_MAX]; +} HangBar; + +void Task_HangBar(void); + +const s8 sBarCharacterYOffsets[NUM_CHARACTERS] = { 16, 16, 16, 16 }; + +void Task_HangBar(void) +{ + HangBar *bar; + CamCoord barX, barY; + MapEntity *me; + s32 i; + + bar = TASK_DATA(gCurTask); + me = bar->base.me; + + // World Pos + barX = TO_WORLD_POS(bar->base.meX, bar->base.regionX); + barY = TO_WORLD_POS(me->y, bar->base.regionY); + + i = 0; + do { + if (GetBit(bar->isPlayerOnBits, i)) { + if ((PLAYER(i).moveState & MOVESTATE_DEAD)) { + ClearBit(bar->isPlayerOnBits, i); + continue; + } + // _0808C0D8 + + if (PLAYER(i).heldInput & DPAD_RIGHT) { + PLAYER(i).charState = CHARSTATE_36; + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + PLAYER(i).qWorldX = bar->qPlayerWorldX[i] + Q(2); + } else if (PLAYER(i).heldInput & DPAD_LEFT) { + // _0808C1AC + PLAYER(i).charState = CHARSTATE_36; + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + PLAYER(i).qWorldX = bar->qPlayerWorldX[i] - Q(2); + } else { + PLAYER(i).charState = CHARSTATE_35; + } + // _0808C1C6 + + PLAYER(i).qWorldY = Q(barY + sBarCharacterYOffsets[PLAYER(i).character]); + // _0808C206 + + bar->qPlayerWorldX[i] = PLAYER(i).qWorldX; + + if ((PLAYER(i).frameInput & gPlayerControls.jump) + || ((barX + (me->d.sData[0] * TILE_WIDTH) > I(PLAYER(i).qWorldX)) + || (barX + (me->d.sData[0] * TILE_WIDTH) + (me->d.uData[2] * TILE_WIDTH) < I(PLAYER(i).qWorldX)))) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).qSpeedAirY = Q(0); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + + PLAYER(i).qWorldY = Q(barY) + Q(22); + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).charState = CHARSTATE_18; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + if (PLAYER(i).heldInput & DPAD_RIGHT) { + PLAYER(i).qSpeedGround = +Q(2); + PLAYER(i).qSpeedAirX = +Q(2); + } else if (PLAYER(i).heldInput & DPAD_LEFT) { + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + PLAYER(i).qSpeedGround = -Q(2); + PLAYER(i).qSpeedAirX = -Q(2); + } else { + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + } + + ClearBit(bar->isPlayerOnBits, i); + } + + } else { + if (PLAYER(i).moveState & MOVESTATE_DEAD) { + continue; + } + + if (PLAYER(i).qSpeedAirY > Q(0)) { + if ((barX + (me->d.sData[0] * TILE_WIDTH) <= I(PLAYER(i).qWorldX)) + && (barX + (me->d.sData[0] * TILE_WIDTH) + (me->d.uData[2] * TILE_WIDTH) >= I(PLAYER(i).qWorldX)) + && (barY + (me->d.sData[1] * TILE_WIDTH) <= I(PLAYER(i).qWorldY)) + && (barY + (me->d.sData[1] * TILE_WIDTH) + (me->d.uData[3] * TILE_WIDTH) >= I(PLAYER(i).qWorldY))) { + PLAYER(i).rotation = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState &= ~MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + + if (PLAYER(i).heldInput & DPAD_RIGHT) { + PLAYER(i).charState = CHARSTATE_36; + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + } else if (PLAYER(i).heldInput & DPAD_LEFT) { + PLAYER(i).charState = CHARSTATE_36; + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + } else { + PLAYER(i).charState = CHARSTATE_35; + } + + PLAYER(i).qWorldY = Q(barY) + Q(18); + SetBit(bar->isPlayerOnBits, i); + bar->qPlayerWorldX[i] = PLAYER(i).qWorldX; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if ((bar->isPlayerOnBits & ((1 << NUM_SINGLEPLAYER_CHARS_MAX) - 1)) == 0) { + // Screen Pos + barX -= gCamera.x; + barY -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(barX, barY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bar->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} + +void CreateEntity_HangBar(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_HangBar, sizeof(HangBar), 0x8000, 0, NULL); + HangBar *bar = TASK_DATA(t); + + bar->base.regionX = regionX; + bar->base.regionY = regionY; + bar->base.me = me; + bar->base.meX = me->x; + bar->base.id = id; + + bar->isPlayerOnBits = 0; + + SET_MAP_ENTITY_INITIALIZED(me); +} diff --git a/sa1/src/game/interactables/hook_rail.c b/sa1/src/game/interactables/hook_rail.c new file mode 100644 index 0000000000..ac21ec9189 --- /dev/null +++ b/sa1/src/game/interactables/hook_rail.c @@ -0,0 +1,738 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/stage/player.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 unk3C; + /* 0x40 */ s32 qAcceleration; + /* 0x44 */ s32 unk44; + /* 0x48 */ s32 qStartX; + /* 0x4C */ s32 qVelocity; + /* 0x50 */ bool8 hitLowerRail; +} HookRail; + +void Task_HookRail_Type0(void); +void Task_HookRail_Type1(void); +void Task_HookRail_Type0_2(void); +void Task_HookRail_Type1_2(void); +void Task_HookRail_Type2_0(void); +void Task_HookRail_Type2_1(void); +void Task_HookRail_Type2(void); +void Task_HookRail_Shared0(void); +void Task_HookRail_Shared1(void); +void TaskDestructor_HookRail(struct Task *t); + +#define HOOK_PLAYER_OFFSET_X (+6) +#define HOOK_PLAYER_OFFSET_T1_2_X (+5) +#define HOOK_PLAYER_OFFSET_T2_0_X (+4) +#define HOOK_PLAYER_OFFSET_Y (+36) +#define HOOK_PLAYER_OFFSET_2_Y (+38) +#define HOOK_RAIL_TYPES_1_2_LENGTH 480 + +void CreateEntity_HookRail(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + TaskMain taskFunc; + struct Task *t; + Sprite *s; + HookRail *hookRail; + + if (me->d.sData[0] == 1) { + t = TaskCreate(Task_HookRail_Type1, sizeof(HookRail), 0x2000, 0, TaskDestructor_HookRail); + } else if (me->d.sData[0] == 2) { + t = TaskCreate(Task_HookRail_Type2, sizeof(HookRail), 0x2000, 0, TaskDestructor_HookRail); + } else { + t = TaskCreate(Task_HookRail_Type0, sizeof(HookRail), 0x2000, 0, TaskDestructor_HookRail); + } + + hookRail = TASK_DATA(t); + s = &hookRail->s; + + hookRail->base.regionX = regionX; + hookRail->base.regionY = regionY; + hookRail->base.me = me; + hookRail->base.meX = me->x; + hookRail->base.id = id; + + hookRail->unk3C = 0; + hookRail->qAcceleration = 0; + hookRail->unk44 = 0; +#ifdef BUG_FIX + hookRail->qStartX = 0; +#endif + hookRail->qVelocity = 0; + hookRail->hitLowerRail = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_4) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_HOOK_RAIL_3); + s->graphics.anim = SA1_ANIM_HOOK_RAIL_3; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_HOOK_RAIL_2, 0); + s->graphics.anim = SA1_ANIM_HOOK_RAIL_2; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_HookRail_Type1(void) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (PLAYER_IS_ALIVE) { + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) || (gPlayer.stoodObj == s)) { + if (Coll_Player_Entity_Intersection(s, worldX, worldY, &gPlayer)) { + Player_TransitionCancelFlyingAndBoost(&gPlayer); + + gPlayer.moveState = MOVESTATE_IA_OVERRIDE; + gPlayer.qSpeedAirY = Q(0); + gPlayer.charState = CHARSTATE_38; + + gPlayer.qWorldY = Q(worldY + HOOK_PLAYER_OFFSET_Y); + gPlayer.qWorldX = Q(worldX - HOOK_PLAYER_OFFSET_X); + + hookRail->qAcceleration = ABS(gPlayer.qSpeedGround); + + if (hookRail->qAcceleration < Q(1)) { + hookRail->qAcceleration = Q(1); + } + hookRail->unk44 = 0; + hookRail->qStartX = gPlayer.qWorldX; + + gPlayer.rotation = 0; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + + m4aSongNumStart(SE_HOOK_RAIL); + + gCurTask->main = Task_HookRail_Type1_2; + + // NOTE(Jace): |= not needed for matching *here*, but I feel + // like they used a macro. + gPlayer.moveState |= gPlayer.moveState | MOVESTATE_STOOD_ON_OBJ; + gPlayer.stoodObj = s; + + // |= Needed for matching + gPlayer.itemEffect |= gPlayer.itemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +// (95.41%) https://decomp.me/scratch/YaCLF +NONMATCH("asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type1_2.inc", void Task_HookRail_Type1_2(void)) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + s32 qWorldX, qWorldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + if (PLAYER_IS_ALIVE) { + // _080868D8 + + if (gPlayer.charState != CHARSTATE_38) { + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = CHARSTATE_38; + } + + gPlayer.qSpeedAirY = 0; + if (I(gPlayer.qWorldX - hookRail->qStartX) > HOOK_RAIL_TYPES_1_2_LENGTH) { + s32 rotation; + m4aSongNumStop(SE_HOOK_RAIL); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.charState = CHARSTATE_WALK_A; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + + gCurTask->main = Task_HookRail_Shared0; + + gPlayer.qSpeedGround = hookRail->qAcceleration; + + gPlayer.qWorldY -= Q(10); + gPlayer.rotation = 0; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } else { + // _08086984 + hookRail->qAcceleration += Q(16. / 256.); + hookRail->qVelocity += hookRail->qAcceleration; + + qWorldX = Q(worldX); + qWorldX -= Q(HOOK_PLAYER_OFFSET_X); + gPlayer.qWorldX = qWorldX + hookRail->qVelocity; + qWorldY = (Q(worldY) + Q(HOOK_PLAYER_OFFSET_Y)); + gPlayer.qWorldY = qWorldY + (hookRail->qVelocity >> 1); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = CHARSTATE_38; + } + + if (IS_MULTI_PLAYER) { + struct MultiSioData_0_4 *sioData = &gMultiSioRecv[SIO_MULTI_CNT->id].pat4; + s->x = (sioData->x - gCamera.x) + HOOK_PLAYER_OFFSET_T1_2_X; + s->y = (sioData->y - gCamera.y) - HOOK_PLAYER_OFFSET_Y; + } else { + // _08086A0C + s->x = I(gPlayer.qWorldX) - gCamera.x + HOOK_PLAYER_OFFSET_T1_2_X; + s->y = I(gPlayer.qWorldY) - gCamera.y - HOOK_PLAYER_OFFSET_Y; + } + + screenX = I(gPlayer.qWorldX) - gCamera.x + HOOK_PLAYER_OFFSET_T1_2_X; + screenY = I(gPlayer.qWorldY) - gCamera.y - HOOK_PLAYER_OFFSET_Y; + } else { + // _08086A50 + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + // _08086A68 + + hookRail->qAcceleration += Q(16. / 256.); + hookRail->qVelocity += hookRail->qAcceleration; + + s->x = (worldX + (I(hookRail->qVelocity))) - gCamera.x; + s->y = (worldY + (I(hookRail->qVelocity) >> 1)) - gCamera.y; + + screenX = s->x; + screenY = s->y; + + if (I(hookRail->qVelocity) > Q(1.875)) { + m4aSongNumStop(SE_HOOK_RAIL); + gCurTask->main = Task_HookRail_Shared0; + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } + // _08086AD2 + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} +END_NONMATCH + +void Task_HookRail_Type0(void) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + screenX = s->x; + screenY = s->y; + + if (PLAYER_IS_ALIVE) { + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) || (gPlayer.stoodObj == s)) { + if (Coll_Player_Entity_Intersection(s, worldX, worldY, &gPlayer)) { + hookRail->qAcceleration = -ABS(gPlayer.qSpeedGround); + hookRail->unk44 = 0; + + gPlayer.qWorldY = Q(worldY + HOOK_PLAYER_OFFSET_Y); + gPlayer.qWorldX = Q(worldX); + hookRail->qStartX = gPlayer.qWorldX; + + Player_TransitionCancelFlyingAndBoost(&gPlayer); + + gPlayer.moveState = MOVESTATE_IA_OVERRIDE; + + gPlayer.rotation = 0; + gPlayer.qSpeedAirY = Q(0); + gPlayer.charState = CHARSTATE_38; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + + m4aSongNumStart(SE_HOOK_RAIL); + + gCurTask->main = Task_HookRail_Type0_2; + + // |= Needed for matching + gPlayer.moveState |= gPlayer.moveState | MOVESTATE_STOOD_ON_OBJ; + gPlayer.stoodObj = s; + + // |= Needed for matching + gPlayer.itemEffect |= gPlayer.itemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +// (95.02%) https://decomp.me/scratch/YVBaR +NONMATCH("asm/non_matching/game/interactables/hook_rail__Task_HookRail_Type0_2.inc", void Task_HookRail_Type0_2(void)) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + if (PLAYER_IS_ALIVE) { + s32 qWorldX, qWorldY; + if (gPlayer.charState != CHARSTATE_38) { + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = CHARSTATE_38; + } + + gPlayer.qSpeedAirY = 0; + + if (hookRail->hitLowerRail) { + hookRail->qAcceleration += Q(20. / 256.); + hookRail->qVelocity += hookRail->qAcceleration; + + qWorldX = Q(worldX); + qWorldX -= Q(6); + gPlayer.qWorldX = qWorldX + hookRail->qVelocity; + qWorldY = Q(worldY + 276); + qWorldY += (hookRail->qVelocity >> 1); + gPlayer.qWorldY = qWorldY; + s->y = worldY + I(hookRail->qVelocity >> 1) - gCamera.y + (240); + + if (I(hookRail->qVelocity) > 2) { + m4aSongNumStop(SE_HOOK_RAIL); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.charState = CHARSTATE_WALK_A; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + + gCurTask->main = Task_HookRail_Shared0; + + gPlayer.qSpeedGround = hookRail->qAcceleration; + + gPlayer.qWorldY -= Q(10); + s->y = worldY + I(hookRail->qVelocity >> 1) - gCamera.y + 120; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } else { + s32 qWorldX, qWorldY; + hookRail->qAcceleration -= Q(9. / 256.); + + if (hookRail->qAcceleration < -Q(6)) { + hookRail->qAcceleration = -Q(6); + } + + hookRail->qVelocity += hookRail->qAcceleration; + + qWorldX = Q(worldX); + qWorldX -= Q(6); + qWorldX += hookRail->qVelocity; + gPlayer.qWorldX = qWorldX; + qWorldY = Q(worldY + 38); + qWorldY -= (hookRail->qVelocity >> 1); + gPlayer.qWorldY = qWorldY; + s->y = worldY - I(hookRail->qVelocity >> 1) - gCamera.y; + + if (I(gPlayer.qWorldX - hookRail->qStartX) < -244) { + hookRail->hitLowerRail = TRUE; + } + } + + if (IS_MULTI_PLAYER) { + struct MultiSioData_0_4 *sioData = &gMultiSioRecv[SIO_MULTI_CNT->id].pat4; + s->x = (sioData->x - gCamera.x) + HOOK_PLAYER_OFFSET_T1_2_X; + s->y = (sioData->y - gCamera.y) - HOOK_PLAYER_OFFSET_Y; + } else { + s->x = I(gPlayer.qWorldX) - gCamera.x + HOOK_PLAYER_OFFSET_T1_2_X; + s->y = I(gPlayer.qWorldY) - gCamera.y - HOOK_PLAYER_OFFSET_Y; + } + + screenX = I(gPlayer.qWorldX) - gCamera.x + HOOK_PLAYER_OFFSET_T1_2_X; + screenY = I(gPlayer.qWorldY) - gCamera.y - HOOK_PLAYER_OFFSET_Y; + } else { + if (hookRail->hitLowerRail) { + hookRail->qAcceleration += Q(20. / 256.); + hookRail->qVelocity += hookRail->qAcceleration; + + s->y = (worldY + (I(hookRail->qVelocity) >> 1)) - gCamera.y + 240; + + if (I(hookRail->qVelocity) > 2) { + m4aSongNumStop(SE_HOOK_RAIL); + gCurTask->main = Task_HookRail_Shared1; + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + + } else { + hookRail->qAcceleration -= Q(9. / 256.); + + if (hookRail->qAcceleration < -Q(6)) { + hookRail->qAcceleration = -Q(6); + } + + hookRail->qVelocity += hookRail->qAcceleration; + + if (I(Q(worldX) + hookRail->qVelocity - hookRail->qStartX) < -(244)) { + hookRail->hitLowerRail = TRUE; + } + + screenX = s->x; + screenY = s->y; + s->y = worldY - I(hookRail->qVelocity >> 1) - gCamera.y; + } + + s->x = worldX + I(hookRail->qVelocity) - gCamera.x; + + screenX = s->x; + screenY = s->y; + } + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} +END_NONMATCH + +void Task_HookRail_Shared0(void) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + s->x = worldX - gCamera.x + 480; + s->y = worldY - gCamera.y + 240; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_HookRail_Shared1(void) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + 240; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_HookRail_Type2(void) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (PLAYER_IS_ALIVE) { + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) || (gPlayer.stoodObj == s)) { + if (Coll_Player_Entity_Intersection(s, worldX, worldY, &gPlayer)) { + hookRail->qAcceleration = +ABS(gPlayer.qSpeedGround); + hookRail->unk44 = 0; + + gPlayer.qWorldY = Q(worldY + HOOK_PLAYER_OFFSET_2_Y); + gPlayer.qWorldX = Q(worldX); + hookRail->qStartX = gPlayer.qWorldX; + gPlayer.rotation = 0; + + Player_TransitionCancelFlyingAndBoost(&gPlayer); + + gPlayer.moveState = (MOVESTATE_IA_OVERRIDE | MOVESTATE_FACING_LEFT); + gPlayer.qSpeedAirY = Q(0); + gPlayer.charState = CHARSTATE_38; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + + m4aSongNumStart(SE_HOOK_RAIL); + + gCurTask->main = Task_HookRail_Type2_0; + + // NOTE(Jace): |= not needed for matching *here*, but I feel + // like they used a macro. + gPlayer.moveState |= gPlayer.moveState | MOVESTATE_STOOD_ON_OBJ; + gPlayer.stoodObj = s; + + // |= Needed for matching + gPlayer.itemEffect |= gPlayer.itemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_HookRail_Type2_0(void) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + s32 qWorldX, qWorldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + if (PLAYER_IS_ALIVE) { + if (gPlayer.charState != CHARSTATE_38) { + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = CHARSTATE_38; + } + + gPlayer.qSpeedAirY = 0; + if (I(hookRail->qStartX - gPlayer.qWorldX) > HOOK_RAIL_TYPES_1_2_LENGTH) { + s32 rotation; + m4aSongNumStop(SE_HOOK_RAIL); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + gPlayer.charState = CHARSTATE_WALK_A; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + + gCurTask->main = Task_HookRail_Type2_1; + + gPlayer.qSpeedGround = -hookRail->qAcceleration; + + gPlayer.qWorldY -= Q(2); + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } else { + hookRail->qAcceleration += Q(16. / 256.); + hookRail->qVelocity += hookRail->qAcceleration; + + qWorldX = Q(worldX + HOOK_PLAYER_OFFSET_X); + gPlayer.qWorldX = qWorldX - hookRail->qVelocity; + qWorldY = (Q(worldY) + Q(HOOK_PLAYER_OFFSET_2_Y)); + gPlayer.qWorldY = qWorldY + (hookRail->qVelocity >> 1); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = CHARSTATE_38; + } + + if (IS_MULTI_PLAYER) { + struct MultiSioData_0_4 *sioData = &gMultiSioRecv[SIO_MULTI_CNT->id].pat4; + s->x = (sioData->x - gCamera.x) - HOOK_PLAYER_OFFSET_T2_0_X; + s->y = (sioData->y - gCamera.y) - 36; + } else { + s->x = I(gPlayer.qWorldX) - gCamera.x - HOOK_PLAYER_OFFSET_T2_0_X; + s->y = I(gPlayer.qWorldY) - gCamera.y - HOOK_PLAYER_OFFSET_Y; + } + + screenX = I(gPlayer.qWorldX) - gCamera.x - HOOK_PLAYER_OFFSET_T2_0_X; + screenY = I(gPlayer.qWorldY) - gCamera.y - HOOK_PLAYER_OFFSET_Y; + } else { + hookRail->qAcceleration += Q(16. / 256.); + hookRail->qVelocity += hookRail->qAcceleration; + + s->x = (worldX - (I(hookRail->qVelocity))) - gCamera.x; + s->y = (worldY + (I(hookRail->qVelocity) >> 1)) - gCamera.y; + + screenX = s->x; + screenY = s->y; + + if (I(hookRail->qStartX - (Q(worldX) - hookRail->qVelocity)) > 480) { + m4aSongNumStop(SE_HOOK_RAIL); + gCurTask->main = Task_HookRail_Type2_1; + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_HookRail_Type2_1(void) +{ + HookRail *hookRail = TASK_DATA(gCurTask); + Sprite *s = &hookRail->s; + MapEntity *me = hookRail->base.me; + CamCoord worldX, worldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(hookRail->base.meX, hookRail->base.regionX); + worldY = TO_WORLD_POS(hookRail->base.me->y, hookRail->base.regionY); + + s->x = worldX - gCamera.x - 480; + s->y = worldY - gCamera.y + 240; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.stoodObj = NULL; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hookRail->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void TaskDestructor_HookRail(struct Task *t) +{ + HookRail *hookRail = TASK_DATA(t); + VramFree(hookRail->s.graphics.dest); +}; \ No newline at end of file diff --git a/sa1/src/game/interactables/ice_block.c b/sa1/src/game/interactables/ice_block.c new file mode 100644 index 0000000000..6ce2cd1dc1 --- /dev/null +++ b/sa1/src/game/interactables/ice_block.c @@ -0,0 +1,419 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/dust_cloud.h" +#include "game/sa1_sa2_shared/entities_manager.h" // TaskDestructor_EntityShared +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ EntityShared shared; +} IceBlock; + +typedef struct { + /* 0x00 */ Sprite sprites[4]; + /* 0xC0 */ SpriteTransform transforms[4]; + /* 0xF0 */ u16 unkF0; + /* 0xF2 */ s16 qUnkF2; +} IceBlockShards; /* 0xF4 */ + +void Task_IceBlock(void); +void Task_IceBlockShards(void); +void TaskDestructor_IceBlockShards(struct Task *t); +void CreateIceBlockShards(CamCoord worldX, CamCoord worldY); +u32 sub_8091E88(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p); + +void CreateEntity_IceBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_IceBlock, sizeof(IceBlock), 0x2000, 0, TaskDestructor_EntityShared); + IceBlock *block = TASK_DATA(t); + Sprite *s = &block->shared.s; + + block->shared.base.regionX = regionX; + block->shared.base.regionY = regionY; + block->shared.base.me = me; + block->shared.base.meX = me->x; + block->shared.base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ICE_BLOCK); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ICE_BLOCK; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +// (98.28%) https://decomp.me/scratch/DNDs3 +NONMATCH("asm/non_matching/game/interactables/ice_block__Task_IceBlock.inc", void Task_IceBlock(void)) +{ + MapEntity *me; + IceBlock *block; + s32 i = 0; + Sprite *s; + CamCoord worldX, worldY; + + block = TASK_DATA(gCurTask); + s = &block->shared.s; + me = block->shared.base.me; + + worldX = TO_WORLD_POS(block->shared.base.meX, block->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, block->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + CreateDustCloud(worldX, worldY); + m4aSongNumStart(SE_ITEM_BOX); + + SA2_LABEL(gUnknown_0300194C) = s->x; + SA2_LABEL(gUnknown_03002820) = s->y; + + CreateIceBlockShards(worldX - s->x, worldY - 16 - s->y); + + TaskDestroy(gCurTask); + return; + } else { + // _080918AC + // i = 0; + do { + // _080918C0_loop + Player *p = &PLAYER(i); + if (!(p->moveState & MOVESTATE_DEAD)) { + bool32 r8 = 0; + if (p->charState == CHARSTATE_SPINATTACK) { + u32 res = sub_80096B0(s, worldX, worldY, p); + + if (p->character != CHARACTER_AMY) { + r8 = (-(res & COLL_FLAG_8)) >> 31; + } else { + r8 = 0; + } + } else { +#ifndef NON_MATCHING + register s32 r3 asm("r3"); + asm("mov %0, #0\n" + "" + : "=r"(r3), "=r"(r8)); + r8 = r3; +#else + r8 = 0; +#endif + } + // _08091920 + + if (sub_800C394(s, worldX, worldY, p) || sub_8091E88(s, worldX, worldY, p) || r8) { + // _0809194E + s32 j = 0; + do { + Player *p = &PLAYER(j); + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && p->stoodObj == s) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + } while (++j < gNumSingleplayerCharacters); + + CreateDustCloud(worldX, worldY); + m4aSongNumStart(SE_ITEM_BOX); + + SA2_LABEL(gUnknown_0300194C) = s->x; + SA2_LABEL(gUnknown_03002820) = s->y; + + CreateIceBlockShards(worldX - s->x, worldY - 16 - s->y); + + if (IS_MULTI_PLAYER) { + RoomEvent_PlatformChange *roomEvent; + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLATFORM_CHANGE; + roomEvent->x = block->shared.base.regionX; + roomEvent->y = block->shared.base.regionY; + roomEvent->id = block->shared.base.id; + roomEvent->action = 0; + } + + m4aSongNumStart(SE_193); + TaskDestroy(gCurTask); + return; + } + } + + sub_80096B0(s, worldX, worldY, p); + } while (++i < gNumSingleplayerCharacters); + // _08091A22 + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, block->shared.base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); + } +} +END_NONMATCH + +/* NOTE: Ice Shard code almost entirely code-pasted from boulder_spawner.c + We might be able to inline them? +*/ + +void CreateIceBlockShards(CamCoord x, CamCoord y) +{ + struct Task *t = TaskCreate(Task_IceBlockShards, sizeof(IceBlockShards), 0x2000, 0, TaskDestructor_IceBlockShards); + IceBlockShards *debris = TASK_DATA(t); + + Sprite *s; + SpriteTransform *tf; + + { + s = &debris->sprites[0]; + tf = &debris->transforms[0]; + + debris->unkF0 = 0; + debris->qUnkF2 = -Q(2); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ICE_BLOCK_SHARDS_S); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ICE_BLOCK_SHARDS_S; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 16); + + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = x; + tf->y = y; + + UpdateSpriteAnimation(s); + +#ifdef BUG_FIX + DmaCopy16(3, s, &debris->sprites[1], sizeof(debris->sprites[1])); + s = &debris->sprites[1]; + DmaCopy16(3, tf, &debris->transforms[1], sizeof(debris->transforms[1])); + tf = &debris->transforms[1]; +#else + DmaCopy16(3, s, (s = &debris->sprites[1]), sizeof(*s)); + DmaCopy16(3, tf, (tf = &debris->transforms[1]), sizeof(*tf)); +#endif + + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 17); + tf->y = y - 16; + } + + s = &debris->sprites[2]; + +#ifdef BUG_FIX + DmaCopy16(3, tf, &debris->transforms[2], sizeof(debris->transforms[1])); + tf = &debris->transforms[2]; +#else + DmaCopy16(3, tf, (tf = &debris->transforms[2]), sizeof(*tf)); +#endif + { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ICE_BLOCK_SHARDS_L); + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ICE_BLOCK_SHARDS_L; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 18); + + tf->y = y; + + UpdateSpriteAnimation(s); + +#ifdef BUG_FIX + DmaCopy16(3, s, &debris->sprites[3], sizeof(debris->sprites[3])); + s = &debris->sprites[3]; + DmaCopy16(3, tf, &debris->transforms[3], sizeof(debris->transforms[3])); + tf = &debris->transforms[3]; +#else + DmaCopy16(3, s, (s = &debris->sprites[3]), sizeof(*s)); + DmaCopy16(3, tf, (tf = &debris->transforms[3]), sizeof(*tf)); +#endif + + s->frameFlags = SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 19); + tf->y = y - 16; + } +} + +void Task_IceBlockShards(void) +{ + IceBlockShards *debris = TASK_DATA(gCurTask); + Sprite *s = &debris->sprites[0]; + SpriteTransform *tf; + s16 prevTransformX, prevTransformY; + s16 scale; + + if (debris->unkF0++ > 80) { + TaskDestroy(gCurTask); + return; + } + + debris->qUnkF2 += Q(40. / 256.); + + { // 0 + tf = &debris->transforms[0]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x -= debris->unkF0 * 2; + + scale = tf->qScaleX + Q(1. / 256.); + if (scale > Q(2)) { + scale = Q(2); + } + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation -= Q(42. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } + + { // 1 + s = &debris->sprites[1]; + tf = &debris->transforms[1]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x += debris->unkF0; + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation += Q(42. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } + + { // 2 + s = &debris->sprites[2]; + tf = &debris->transforms[2]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x += debris->unkF0 * 2; + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation += Q(14. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } + + { // 3 + s = &debris->sprites[3]; + tf = &debris->transforms[3]; + tf->y += I(debris->qUnkF2); + + prevTransformX = tf->x; + prevTransformY = tf->y; + tf->x -= gCamera.x; + tf->y -= gCamera.y; + tf->x -= debris->unkF0; + + tf->qScaleX = scale; + tf->qScaleY = scale; + tf->rotation -= Q(14. / 256.); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + SA2_LABEL(sub_8004E14)(s, tf); + DisplaySprite(s); + tf->x = prevTransformX; + tf->y = prevTransformY; + } +} + +u32 sub_8091E88(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p) +{ + u32 result = 0; + + if ((p->character == CHARACTER_AMY) + && (p->charState == 87 || p->charState == 88 || p->charState == 89 || p->charState == 92 || p->charState == 90) + && (p->spriteInfoBody->s.hitboxes[1].index != HITBOX_STATE_INACTIVE) + && (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b))) { + result = TRUE; + } + + else if ((p->character == CHARACTER_TAILS) + && (p->charState == 53 || p->charState == 54 || p->charState == 5 || p->charState == 6 || p->charState == 7) + && (p->spriteInfoBody->s.hitboxes[1].index != HITBOX_STATE_INACTIVE) + && (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b))) { + result = TRUE; + } + + else if ((p->character == CHARACTER_SONIC) && (p->charState == 5 || p->charState == 6 || p->charState == 7) + && (p->spriteInfoBody->s.hitboxes[1].index != HITBOX_STATE_INACTIVE) + && HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b)) { + result = TRUE; + } + + else if ((p->character == CHARACTER_KNUCKLES) + && (p->charState == 62 || p->charState == 63 || p->charState == 64 || p->charState == 65 || p->charState == 66 + || p->charState == 67 || p->charState == 68 || p->charState == 69 || p->charState == 5 || p->charState == 6 + || p->charState == 7) + && (p->spriteInfoBody->s.hitboxes[1].index != HITBOX_STATE_INACTIVE) + && HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b)) { + result = TRUE; + } + + return result; +} + +void TaskDestructor_IceBlockShards(struct Task *t) +{ + IceBlockShards *debris = TASK_DATA(t); + VramFree(debris->sprites[0].graphics.dest); + VramFree(debris->sprites[2].graphics.dest); +} diff --git a/sa1/src/game/interactables/incline_ramp.c b/sa1/src/game/interactables/incline_ramp.c new file mode 100644 index 0000000000..acee760e88 --- /dev/null +++ b/sa1/src/game/interactables/incline_ramp.c @@ -0,0 +1,136 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/stage/player.h" +#include "lib/m4a/m4a.h" + +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" + +typedef struct { + // SpriteBase-ish + /* 0x00 */ MapEntity *me; + /* 0x04 */ u16 regionX; + /* 0x06 */ u16 regionY; + /* 0x08 */ u8 meX; + /* 0x09 */ u8 incline; // TODO: might just be the ID after all? +} InclineRamp; + +#ifndef NON_MATCHING +#define INCLINE_RAMP_DATA_SIZE 0xA +#else +#define INCLINE_RAMP_DATA_SIZE sizeof(InclineRamp) +#endif + +// (97.59%) https://decomp.me/scratch/SNEeF +NONMATCH("asm/non_matching/game/interactables/Task_InclineRamp.inc", void Task_InclineRamp(void)) +{ + InclineRamp *ramp = TASK_DATA(gCurTask); + MapEntity *me = TASK_GET_MEMBER(InclineRamp, gCurTask, MapEntity *, me); + u8 meX = TASK_GET_MEMBER(InclineRamp, gCurTask, u8, meX); + + u16 regionX = TASK_GET_MEMBER(InclineRamp, gCurTask, u16, regionX); + u16 regionY = TASK_GET_MEMBER(InclineRamp, gCurTask, u16, regionY); + u8 incline = TASK_GET_MEMBER(InclineRamp, gCurTask, u8, incline); + s16 worldX, worldY; + s16 screenX, screenY; + s32 i; + + worldX = TO_WORLD_POS(meX, regionX); + worldY = TO_WORLD_POS(me->y, regionY); + + i = 0; + do { + // _08075678_loop + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (worldX > I(PLAYER(i).qWorldX)) { + continue; + } + // _080756E6 + + if (worldX + me->d.uData[2] * TILE_WIDTH < I(PLAYER(i).qWorldX)) { + continue; + } + + if (worldY > I(PLAYER(i).qWorldY)) { + continue; + } + + if (worldY + me->d.uData[3] * TILE_WIDTH < I(PLAYER(i).qWorldY)) { + continue; + } + + if (incline != 0) { + if (PLAYER(i).qSpeedAirX > Q(4)) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_4; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + PLAYER(i).qSpeedAirY = -Q(8); + PLAYER(i).qSpeedAirX += +Q(4); + + if (PLAYER(i).qSpeedAirX > Q(17)) { + PLAYER(i).qSpeedAirX = Q(17); + } + // _08075880 + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_17; + + m4aSongNumStart(SE_SPRING); + continue; + } + } else if (PLAYER(i).qSpeedAirX < -Q(4)) { + // _080758AC + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_4; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + PLAYER(i).qSpeedAirY = -Q(8); + PLAYER(i).qSpeedAirX += -Q(4); + + if (PLAYER(i).qSpeedAirX < -Q(17)) { + PLAYER(i).qSpeedAirX = -Q(17); + } + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_17; + + m4aSongNumStart(SE_SPRING); + } + } + } while (++i < gNumSingleplayerCharacters); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + // _08075A54 + SET_MAP_ENTITY_NOT_INITIALIZED(me, meX); + TaskDestroy(gCurTask); + return; + } +} +END_NONMATCH + +void CreateEntity_InclineRamp(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_InclineRamp, INCLINE_RAMP_DATA_SIZE, 0x2000, 0, NULL); + + // *sigh* + // Don't do this! + TASK_SET_MEMBER(InclineRamp, t, u16, regionX, regionX); + TASK_SET_MEMBER(InclineRamp, t, u16, regionY, regionY); + TASK_SET_MEMBER(InclineRamp, t, MapEntity *, me, me); + TASK_SET_MEMBER(InclineRamp, t, u8, incline, me->d.sData[0]); + TASK_SET_MEMBER(InclineRamp, t, u8, meX, me->x); + + SET_MAP_ENTITY_INITIALIZED(me); +} diff --git a/sa1/src/game/interactables/iron_ball.c b/sa1/src/game/interactables/iron_ball.c new file mode 100644 index 0000000000..5abcd41a4d --- /dev/null +++ b/sa1/src/game/interactables/iron_ball.c @@ -0,0 +1,135 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x40 */ s32 unk40; // TODO: Q() value? + /* 0x44 */ s32 unk44; // TODO: Q() value? + /* 0x48 */ s16 unk48; + /* 0x4C */ s16 unk4A; + /* 0x4C */ s16 unk4C; +} IronBall; + +void Task_IronBallMain(void); +void TaskDestructor_IronBall(struct Task *); + +void CreateEntity_IronBall(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_IronBallMain, sizeof(IronBall), 0x2000, 0, TaskDestructor_IronBall); + IronBall *ball = TASK_DATA(t); + Sprite *s = &ball->s; + + ball->base.regionX = regionX; + ball->base.regionY = regionY; + ball->base.me = me; + ball->base.meX = me->x; + ball->base.id = id; + ball->unk40 = 0; + ball->unk44 = 0; + ball->unk4C = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + ball->unk48 = 4; + ball->unk3C = 0; + ball->unk4A = 0; + } else { + ball->unk48 = 4; + ball->unk3C = 0x80; + ball->unk4A = 0; + } + } else { + if (me->d.sData[1] >= 0) { + ball->unk48 = 0; + ball->unk4A = 4; + ball->unk3C = 0; + } else { + ball->unk48 = 0; + ball->unk4A = 4; + ball->unk3C = 0x80; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_5) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_IRON_BALL_5); + s->graphics.anim = SA1_ANIM_IRON_BALL_5; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_IRON_BALL); + s->graphics.anim = SA1_ANIM_IRON_BALL; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_IronBallMain(void) +{ + IronBall *ball = TASK_DATA(gCurTask); + Sprite *s = &ball->s; + s16 worldX, worldY; + MapEntity *me = ball->base.me; + s32 i; + + if (ball->unk48 != 0) { + s32 r2 = Q(me->d.uData[2] * TILE_WIDTH); + ball->unk40 = (r2 * SIN((ball->unk48 * ((gStageTime + ball->unk3C) & 0xFF)) & ONE_CYCLE)) >> 14; + } + + if (ball->unk4A != 0) { + s32 r2 = Q(me->d.uData[3] * TILE_WIDTH); + ball->unk44 = (r2 * SIN((ball->unk4A * ((gStageTime + ball->unk3C) & 0xFF)) & ONE_CYCLE)) >> 14; + } + + worldX = TO_WORLD_POS(ball->base.meX, ball->base.regionX); + worldY = TO_WORLD_POS(me->y, ball->base.regionY); + + s->x = (worldX - gCamera.x) + I(ball->unk40); + s->y = (worldY - gCamera.y) + I(ball->unk44); + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (Coll_Player_Entity_Intersection(s, worldX + I(ball->unk40), worldY + I(ball->unk44), &PLAYER(i))) { + Coll_DamagePlayer(&PLAYER(i)); + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ball->base.meX); + TaskDestroy(gCurTask); + return; + } else { + DisplaySprite(s); + } +} + +void TaskDestructor_IronBall(struct Task *t) +{ + IronBall *ball = TASK_DATA(t); + VramFree(ball->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/lava.c b/sa1/src/game/interactables/lava.c new file mode 100644 index 0000000000..dc20f0c7be --- /dev/null +++ b/sa1/src/game/interactables/lava.c @@ -0,0 +1,101 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/move_states.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x28]; + /* 0x34 */ u16 regionX; + /* 0x36 */ u16 regionY; + /* 0x38 */ u16 unk38; + /* 0x3A */ u16 unk3A; + /* 0x3C */ u8 meX; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E; +} Lava; /* 0x40 */ + +#ifndef NON_MATCHING +#define LAVA_DATA_SIZE 0x3F +#else +#define LAVA_DATA_SIZE sizeof(Lava) +#endif + +void Task_Lava(void) +{ + Lava *lava = TASK_DATA(gCurTask); + MapEntity *me = lava->base.me; + u8 meX = TASK_GET_MEMBER(Lava, gCurTask, u8, meX); + u16 regionX = TASK_GET_MEMBER(Lava, gCurTask, u16, regionX); + u16 regionY = TASK_GET_MEMBER(Lava, gCurTask, u16, regionY); + Player *player; + Player *partner; + CamCoord x, y; // Need to not split screen/world pos to match... + s16 screenX, screenY; + s32 i; + + x = TO_WORLD_POS(meX, regionX); + y = TO_WORLD_POS(me->y, regionY); + x -= gCamera.x; + y -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + i = 0; + + do { + if (TASK_GET_MEMBER(Lava, gCurTask, u16, unk3A) == 1) { +#ifndef NON_MATCHING + PLAYER(i).qSpeedAirY = Div(PLAYER(i).qSpeedAirY, 2); +#else + PLAYER(i).qSpeedAirY >>= 1; +#endif + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, meX); + TaskDestroy(gCurTask); + return; + } else { + x = (x + gCamera.x); + y = (y + gCamera.y); + + i = 0; + + do { + if (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE) && (x <= I(PLAYER(i).qWorldX)) + && (x + (me->d.uData[2] * TILE_WIDTH) >= I(PLAYER(i).qWorldX)) && (y <= I(PLAYER(i).qWorldY)) + && (y + (me->d.uData[3] * TILE_WIDTH) >= I(PLAYER(i).qWorldY)) && !(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (me->d.sData[0] == 0) { + if (~PLAYER(i).itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY) { + Coll_DamagePlayer(&PLAYER(i)); + } + } else { + PLAYER(i).moveState |= MOVESTATE_DEAD; + } + } + } while (++i < gNumSingleplayerCharacters); + } +} + +void CreateEntity_Lava(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Lava, LAVA_DATA_SIZE, 0x2000, 0, NULL); + + TASK_SET_MEMBER(Lava, t, u16, regionX, regionX); + TASK_SET_MEMBER(Lava, t, u16, regionY, regionY); + TASK_SET_MEMBER(Lava, t, u16, unk38, 0); + TASK_SET_MEMBER(Lava, t, u16, unk3A, 0); +#ifndef NON_MATCHING + // *sigh* + TASK_SET_MEMBER(Lava, t, u16, unk3A, 0); + TASK_SET_MEMBER(Lava, t, u16, unk3A, 0); +#endif + TASK_SET_MEMBER(Lava, t, MapEntity *, base.me, me); + TASK_SET_MEMBER(Lava, t, u8, unk3D, 0); + TASK_SET_MEMBER(Lava, t, u8, unk3E, 0); + TASK_SET_MEMBER(Lava, t, u8, meX, me->x); + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/marble_track.c b/sa1/src/game/interactables/marble_track.c new file mode 100644 index 0000000000..dc7e12c595 --- /dev/null +++ b/sa1/src/game/interactables/marble_track.c @@ -0,0 +1,720 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" // gPlayerControls +#include "game/stage/ui.h" // sub_80549FC +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3C */ u8 unk3D; + /* 0x3D */ u8 unk3E[2]; + /* 0x44 */ s32 unk40[2]; + /* 0x44 */ s32 unk48[2]; + /* 0x44 */ s32 unk50[2]; + /* 0x44 */ s32 unk58[2]; + /* 0x44 */ s32 unk60[2]; + /* 0x68 */ u8 unk68; +} MarbleTrackDir; /* 0x6C */ + +/* The chopped-up pipes in Secret Base, which automatically "warp" you downwards */ +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 unk3C[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x44 */ u16 unk44[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x48 */ u16 unk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ u8 unk4C; + /* 0x4D */ u8 unk4D; +} SecretBasePipe; /* 0x50 */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x3E */ u8 unk3E; + /* 0x3F */ u8 unk3F; + /* 0x44 */ s32 unk40[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x48 */ s16 unk48; + /* 0x48 */ s16 unk4A; +} MarbleTrackEntrance; /* 0x4C */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 unk3C; + /* 0x40 */ u8 unk40; + /* 0x41 */ u8 unk41; + /* 0x44 */ s32 unk44[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x4C */ s32 unk4C[NUM_SINGLEPLAYER_CHARS_MAX]; +} MarbleTrackExit; /* 0x54 */ + +void Task_MarbleTrack_Dir(void); +void Task_MarbleTrack_Unk(void); +void Task_MarbleTrack_Entrance(void); +void TaskDestructor_MarbleTrack_Entrance(struct Task *t); +void Task_MarbleTrack_Exit(void); +void TaskDestructor_MarbleTrack_Exit(struct Task *t); + +void CreateEntity_MarbleTrack_Dir(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_MarbleTrack_Dir, sizeof(MarbleTrackDir), 0x2000 | me->d.uData[3], 0, NULL); + MarbleTrackDir *dir = TASK_DATA(t); + s32 i; + + dir->base.regionX = regionX; + dir->base.regionY = regionY; + dir->base.me = me; + dir->base.meX = me->x; + dir->base.id = id; + + dir->unk3D = me->d.uData[2]; + for (i = 0; i < 2; i++) { + dir->unk3E[i] = 0; + dir->unk40[i] = 0; + dir->unk48[i] = 0; + dir->unk58[i] = 0; + dir->unk60[i] = 0; + } + + dir->unk50[0] = me->d.sData[0] * 8; + dir->unk50[1] = me->d.sData[1] * 8; + + dir->unk68 = 0; + dir->unk3C = me->d.uData[3]; + + SET_MAP_ENTITY_INITIALIZED(me); +} + +NONMATCH("asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Dir.inc", void Task_MarbleTrack_Dir(void)) +{ + CamCoord worldX, worldY; + s16 screenX, screenY; + MapEntity *me; + MarbleTrackDir *dir = TASK_DATA(gCurTask); + s32 i; + me = dir->base.me; + + worldX = TO_WORLD_POS(dir->base.meX, dir->base.regionX); + worldY = TO_WORLD_POS(me->y, dir->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (GetBit(dir->unk68, i)) { + if (((PLAYER(i).SA2_LABEL(unk99)[0] == dir->unk3C))) { + s32 x, y; + + x = Div(dir->unk50[0] * dir->unk3E[i], dir->unk3D); + y = Div(dir->unk50[1] * dir->unk3E[i], dir->unk3D); + + PLAYER(i).qWorldX = Q(dir->unk40[i] + x); + PLAYER(i).qWorldY = Q(dir->unk48[i] + y); + + PLAYER(i).qSpeedAirX = PLAYER(i).qWorldX - dir->unk58[i]; + PLAYER(i).qSpeedAirY = PLAYER(i).qWorldY - dir->unk60[i]; + + if ((++dir->unk3E[i] >= dir->unk3D) || (PLAYER(i).SA2_LABEL(unk99)[0] > dir->unk3C)) { + if ((PLAYER(i).SA2_LABEL(unk99)[0] == dir->unk3C)) { + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + PLAYER(i).qSpeedAirY = 0; + PLAYER(i).qSpeedAirX = 0; + PLAYER(i).qSpeedGround = +Q(0); + } + ClearBit(dir->unk68, i); + } else { + PLAYER(i).moveState |= MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + PLAYER(i).qSpeedGround = +Q(0); + PLAYER(i).heldInput = 0; + PLAYER(i).frameInput = 0; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + SetBit(dir->unk68, i); + } + + dir->unk58[i] = PLAYER(i).qWorldX; + dir->unk60[i] = PLAYER(i).qWorldY; + } else { + ClearBit(dir->unk68, i); + } + } else { + // !GetBit(dir->unk68, i) + if (((PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE) && (PLAYER(i).SA2_LABEL(unk99)[0] < dir->unk3C)) || !dir->unk3C) { + if ((worldX - 8 <= I(PLAYER(i).qWorldX)) && (worldX + 8 >= I(PLAYER(i).qWorldX)) + && (worldY - 10 <= I(PLAYER(i).qWorldY)) && (worldY + 10 >= I(PLAYER(i).qWorldY))) { + dir->unk3E[i] = 0; + + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IGNORE_INPUT; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + dir->unk40[i] = I(PLAYER(i).qWorldX); + dir->unk48[i] = I(PLAYER(i).qWorldY); + + PLAYER(i).qSpeedAirY = -Q(0); + PLAYER(i).qSpeedAirX = +Q(0); + PLAYER(i).qSpeedGround = +Q(0); + PLAYER(i).heldInput = +Q(0); + PLAYER(i).frameInput = +Q(0); + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_SPRING); + + // NOTE (for Matching): Same problem as Task_MarbleTrack_Exit. + // An unnecessary 'mov r2, #0 ' was inserted in the original... + SetBit(dir->unk68, i); + + PLAYER(i).SA2_LABEL(unk99)[0] = dir->unk3C; + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (!(dir->unk68 & 0x3)) { + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, dir->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} +END_NONMATCH + +void CreateEntity_MarbleTrack_Pipe(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_MarbleTrack_Unk, sizeof(SecretBasePipe), 0x2000 + me->d.sData[1], 0, NULL); + SecretBasePipe *basePipe = TASK_DATA(t); + + basePipe->base.regionX = regionX; + basePipe->base.regionY = regionY; + basePipe->base.me = me; + basePipe->base.meX = me->x; + basePipe->base.id = id; + + basePipe->unk48 = me->d.uData[2] * 3; + basePipe->unk4C = 0; + basePipe->unk44[PLAYER_1] = 0; + basePipe->unk3C[PLAYER_1] = 0; + basePipe->unk44[PLAYER_2] = 0; + basePipe->unk3C[PLAYER_2] = 0; + basePipe->unk4A = me->d.sData[0] * 8; + basePipe->unk4D = me->d.sData[1]; + + SET_MAP_ENTITY_INITIALIZED(me); +} + +// (99.04%) https://decomp.me/scratch/cMq5a +// TODO: This IA might have been left unused due to the X/Y bug? +NONMATCH("asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Unk.inc", void Task_MarbleTrack_Unk(void)) +{ + CamCoord worldX, worldY; + s16 screenY, screenX; + s16 sp0C; + SecretBasePipe *basePipe = TASK_DATA(gCurTask); + MapEntity *me = basePipe->base.me; + s32 i; + + worldX = TO_WORLD_POS(basePipe->base.meX, basePipe->base.regionX); + worldY = TO_WORLD_POS(me->y, basePipe->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (GetBit(basePipe->unk4C, i)) { + s8 zone; + PLAYER(i).qSpeedAirY += Q(42. / 256.); + + PLAYER(i).qWorldY += PLAYER(i).qSpeedAirY; + basePipe->unk3C[i] += PLAYER(i).qSpeedAirY; + + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_2) || (gCurrentLevel == 15)) { + if (PLAYER(i).qWorldX < Q(worldX)) { + PLAYER(i).qWorldX += Q(0.5); + + if (PLAYER(i).qWorldX > Q(worldX)) { + PLAYER(i).qWorldX = Q(worldX); + } + } else { + PLAYER(i).qWorldX -= Q(0.5); + + if (PLAYER(i).qWorldX < Q(worldX)) + PLAYER(i).qWorldX = Q(worldX); + } + } + + if (((PLAYER(i).SA2_LABEL(unk99)[0] > basePipe->unk4D)) + || ((++basePipe->unk44[i] >= basePipe->unk48) || (I(basePipe->unk3C[i]) > basePipe->unk4A))) { + if ((PLAYER(i).SA2_LABEL(unk99)[0] == basePipe->unk4D)) { + PLAYER(i).SA2_LABEL(unk99)[0] = 0x7F; + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + ClearBit(basePipe->unk4C, i); + } else { + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + PLAYER(i).qSpeedAirX = +Q(0); + PLAYER(i).qSpeedGround = +Q(0); + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + SetBit(basePipe->unk4C, i); + } + + } else { + // !GetBit(basePipe->unk4C, i) + if ((((PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE) && (PLAYER(i).SA2_LABEL(unk99)[0] < basePipe->unk4D)) + || !basePipe->unk4D)) { + if ((worldX - 12 <= I(PLAYER(i).qWorldX)) && (worldX + 12 >= I(PLAYER(i).qWorldX)) + && (worldY - 12 <= I(PLAYER(i).qWorldY)) && (worldY + 12 >= I(PLAYER(i).qWorldY))) { + basePipe->unk44[i] = 0; + basePipe->unk3C[i] = 0; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + PLAYER(i).qSpeedAirY = -Q(0); + PLAYER(i).qSpeedAirX = +Q(0); + PLAYER(i).qSpeedGround = +Q(0); + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_SPRING); + + // NOTE (for Matching): Same problem as Task_MarbleTrack_Exit. + // An unnecessary 'mov r2, #0 ' was inserted in the original... + SetBit(basePipe->unk4C, i); + + PLAYER(i).SA2_LABEL(unk99)[0] = basePipe->unk4D; + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + } else { + if (GetBit(basePipe->unk4C, i)) { + ClearBit(basePipe->unk4C, i); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (!(basePipe->unk4C & 0x3)) { + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + s32 i = 0; + do { + if (PLAYER(i).SA2_LABEL(unk99)[0] == basePipe->unk4D) { + if (GetBit(basePipe->unk4C, i)) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + } + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, basePipe->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} +END_NONMATCH + +void CreateEntity_MarbleTrack_Entrance(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_MarbleTrack_Entrance, sizeof(MarbleTrackEntrance), 0x1900 + me->d.uData[3], 0, + TaskDestructor_MarbleTrack_Entrance); + MarbleTrackEntrance *entrance = TASK_DATA(t); + Sprite *s = &entrance->s; + + entrance->base.regionX = regionX; + entrance->base.regionY = regionY; + entrance->base.me = me; + entrance->base.meX = me->x; + entrance->base.id = id; + + entrance->unk3F = me->d.sData[0]; + entrance->unk3C[PLAYER_1] = 0; + entrance->unk40[PLAYER_1] = 0; + entrance->unk3C[PLAYER_2] = 0; + entrance->unk40[PLAYER_2] = 0; + entrance->unk48 = me->d.uData[2]; + entrance->unk3E = 0; + entrance->unk4A = me->d.sData[1]; + + SET_MAP_ENTITY_INITIALIZED(me); + +#ifdef BUG_FIX + // NOTE: Technically this is wrong, too, but at least it's consistent with most other interactables/gimmicks. + s->x = TO_WORLD_POS(me->x, regionX); // What the..? + s->y = TO_WORLD_POS(me->y, regionY); +#else + s->x = TO_WORLD_POS_INV(0xFE, regionX); // What the..? + s->y = TO_WORLD_POS(me->y, regionY); +#endif + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_MARBLE_TRACK_EXIT); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MARBLE_TRACK_EXIT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_MarbleTrack_Entrance(void) +{ + CamCoord worldX, worldY; + s16 screenY, screenX; + s16 sp0C; + MarbleTrackEntrance *entrance = TASK_DATA(gCurTask); + Sprite *s = &entrance->s; + MapEntity *me = entrance->base.me; + s32 i; + + worldX = TO_WORLD_POS(entrance->base.meX, entrance->base.regionX); + worldY = TO_WORLD_POS(me->y, entrance->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + s32 sp1C; + if (GetBit(entrance->unk3E, i)) { + PLAYER(i).qSpeedAirY += Q(42. / 256.); + + sp1C = Q(worldX + Div(entrance->unk4A * entrance->unk3C[i], entrance->unk3F)); + + PLAYER(i).qWorldY += PLAYER(i).qSpeedAirY; + entrance->unk40[i] = entrance->unk40[i] + PLAYER(i).qSpeedAirY; + PLAYER(i).qWorldX = sp1C; + PLAYER(i).SA2_LABEL(unk80) += 4; + + if (PLAYER(i).SA2_LABEL(unk80) > 0x100) { + PLAYER(i).SA2_LABEL(unk80) = 0x100; + } + + PLAYER(i).SA2_LABEL(unk82) = PLAYER(i).SA2_LABEL(unk80); + + if (entrance->unk3C[i] == 25) { + Player_Tails_InitGfxMarbleTrack(&PLAYER(i)); + } + + if ((++entrance->unk3C[i] >= entrance->unk3F) || (I(entrance->unk40[i]) > entrance->unk48) + || ((PLAYER(i).SA2_LABEL(unk99)[0] != 0x7F) && PLAYER(i).SA2_LABEL(unk99)[0] > me->d.uData[3])) { + ClearBit(entrance->unk3E, i); + } else { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).qSpeedAirX = +Q(0); + PLAYER(i).qSpeedGround = +Q(0); + PLAYER(i).charState = CHARSTATE_32; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + SetBit(entrance->unk3E, i); + } + } else { + // !GetBit(entrance->unk3E, i) + sp1C = PLAYER(i).qWorldX; + + if (sub_80549FC() && (PLAYER(i).charState != CHARSTATE_73)) { + if (PLAYER(i).qWorldY > Q(worldY) + Q(12)) { + if (sub_80096B0(s, worldX, worldY, &PLAYER(i)) & 0x10000) { + PLAYER(i).qWorldY = Q(worldY + 23); + } + } + } else if ((PLAYER(i).SA2_LABEL(unk99)[0] == 0x7F) && sub_80096B0(s, worldX, worldY, &PLAYER(i)) & 0x8) { + entrance->unk3C[i] = 0; + entrance->unk40[i] = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).SA2_LABEL(unk99)[0] = me->d.uData[3]; + + PLAYER(i).qSpeedAirY = -Q(0); + PLAYER(i).qSpeedAirX = +Q(0); + PLAYER(i).qSpeedGround = +Q(0); + PLAYER(i).frameInput = 0; + PLAYER(i).heldInput = 0; + PLAYER(i).charState = CHARSTATE_32; + PLAYER(i).SA2_LABEL(unk80) = 0xB0; + PLAYER(i).SA2_LABEL(unk82) = 0xB0; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_SPRING); + + SetBit(entrance->unk3E, i); + + PLAYER(i).qWorldX = sp1C; +#if 01 + { + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } +#else + // NOTE: For matching..? + if (i != 0) { + gPartner.itemEffect |= gPartner.itemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + } else { + gPlayer.itemEffect |= gPlayer.itemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + } +#endif + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (!(entrance->unk3E & 0x3)) { + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + s32 i = 0; + do { + if (GetBit(entrance->unk3E, i)) { + if (me->d.uData[3] == PLAYER(i).SA2_LABEL(unk99)[0]) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, entrance->base.meX); + TaskDestroy(gCurTask); + return; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_MarbleTrack_Entrance(struct Task *t) +{ + MarbleTrackEntrance *entrance = TASK_DATA(t); + VramFree(entrance->s.graphics.dest); +} + +void CreateEntity_MarbleTrack_Exit(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t + = TaskCreate(Task_MarbleTrack_Exit, sizeof(MarbleTrackExit), 0x2100 + me->d.sData[1], 0, TaskDestructor_MarbleTrack_Exit); + MarbleTrackExit *exit = TASK_DATA(t); + Sprite *s = &exit->s; + + exit->base.regionX = regionX; + exit->base.regionY = regionY; + exit->base.me = me; + exit->base.meX = me->x; + exit->base.id = id; + + exit->unk40 = 0; + exit->unk44[PLAYER_1] = 0; + exit->unk4C[PLAYER_1] = 0; + exit->unk44[PLAYER_2] = 0; + exit->unk4C[PLAYER_2] = 0; + exit->unk3C = me->d.sData[0] * 8; + exit->unk41 = me->d.uData[2]; + + SET_MAP_ENTITY_INITIALIZED(me); + + s->x = TO_WORLD_POS_INV(0xFE, regionX); // TODO: What the..? + s->y = TO_WORLD_POS(me->y, regionY); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_MARBLE_TRACK_EXIT); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MARBLE_TRACK_EXIT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +// (99.44%) +NONMATCH("asm/non_matching/game/interactables/marble_track_exit__Task_MarbleTrack_Exit.inc", void Task_MarbleTrack_Exit(void)) +{ + CamCoord worldX, worldY; + s16 screenX, screenY; + s16 sp0C; + MarbleTrackExit *exit = TASK_DATA(gCurTask); + Sprite *s = &exit->s; + MapEntity *me = exit->base.me; + s32 i; + + worldX = TO_WORLD_POS(exit->base.meX, exit->base.regionX); + worldY = TO_WORLD_POS(me->y, exit->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (exit->unk41 != 0) { + sp0C = -24; + } else { + sp0C = 0; + } + // _08083868 + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + // _080838A0 + if (GetBit(exit->unk40, i)) { + // _080838B4 + PLAYER(i).qSpeedAirY += Q(42. / 256.); + // _080838C6 + + exit->unk4C[i] += PLAYER(i).qSpeedAirY; + PLAYER(i).qWorldY = exit->unk4C[i]; + PLAYER(i).qWorldX = exit->unk44[i]; + // _08083906 + PLAYER(i).SA2_LABEL(unk80) -= 4; + // _08083920 + + if (PLAYER(i).SA2_LABEL(unk80) < 0xB0) { + PLAYER(i).SA2_LABEL(unk80) = 0xB0; + } + // _0808395E + + PLAYER(i).SA2_LABEL(unk82) = PLAYER(i).SA2_LABEL(unk80); + PLAYER(i).moveState |= MOVESTATE_IGNORE_INPUT; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + // _080839C8 + + if (PLAYER(i).qSpeedAirY > Q(0)) { + // _080839E0 + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + // _08083A64 + ClearBit(exit->unk40, i); + PLAYER(i).SA2_LABEL(unk80) = 0x100; + PLAYER(i).SA2_LABEL(unk82) = 0x100; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } else { + // !GetBit(exit->unk40, i) + // _08083ADC + if (PLAYER(i).SA2_LABEL(unk99)[0] != 0x7F) { + // _08083AF0 + if ((worldX + sp0C <= I(PLAYER(i).qWorldX)) && (worldX + sp0C + 24 >= I(PLAYER(i).qWorldX)) + && (worldY - 24 <= I(PLAYER(i).qWorldY)) && (worldY + 24 >= I(PLAYER(i).qWorldY))) { + // _08083B80 + if (!GetBit(exit->unk40, i)) { + exit->unk44[i] = PLAYER(i).qWorldX; + exit->unk4C[i] = PLAYER(i).qWorldY; + } + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState |= MOVESTATE_IGNORE_INPUT; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + PLAYER(i).qSpeedAirY = -Q(5); + PLAYER(i).qSpeedAirX = +Q(0); + PLAYER(i).qSpeedGround = +Q(0); + PLAYER(i).heldInput = +Q(0); + PLAYER(i).frameInput = +Q(0); + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_SPRING); + + PLAYER(i).SA2_LABEL(unk99)[0] = 0x7F; + + SetBit(exit->unk40, i); + +#if 0 + { + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } +#else + // NOTE: For matching..? + if (i != 0) { + gPartner.itemEffect |= gPartner.itemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + } else { + gPlayer.itemEffect |= gPlayer.itemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + } +#endif + } + } + // _08083D26 + + if (!(PLAYER(i).moveState & MOVESTATE_IGNORE_INPUT)) { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + } + } + } while (++i < gNumSingleplayerCharacters); + // _08083D7E + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + // _08083DA4 + + s32 i = 0; + do { + if (GetBit(exit->unk40, i)) { + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, exit->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void TaskDestructor_MarbleTrack_Exit(struct Task *t) +{ + MarbleTrackExit *exit = TASK_DATA(t); + VramFree(exit->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/maze_air_corner.c b/sa1/src/game/interactables/maze_air_corner.c new file mode 100644 index 0000000000..41c344178c --- /dev/null +++ b/sa1/src/game/interactables/maze_air_corner.c @@ -0,0 +1,95 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/stage/player.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/vram_hardcoded.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; +} TrackAirCorner; + +void Task_TrackAirCorner(void); + +u32 Coll_Player_PlatformCrumbling(Sprite *s, s16 worldX, s16 worldY, Player *p); + +void CreateEntity_TrackAirCorner(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_TrackAirCorner, sizeof(TrackAirCorner), 0x2000, 0, NULL); + TrackAirCorner *ia = TASK_DATA(t); + Sprite *s = &ia->s; + + ia->base.regionX = regionX; + ia->base.regionY = regionY; + ia->base.me = me; + ia->base.meX = me->x; + ia->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_TRACK_AIR_CORNER; + s->graphics.anim = SA1_ANIM_MAZE_AIR_CORNER; + s->variant = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] == 1) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } else if (me->d.sData[0] == 2) { + s->frameFlags |= SPRITE_FLAG(Y_FLIP, 1); + } else if (me->d.sData[0] == 3) { + s->frameFlags |= SPRITE_FLAG(Y_FLIP, 1); + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + UpdateSpriteAnimation(s); +} + +void Task_TrackAirCorner(void) +{ + TrackAirCorner *ia = TASK_DATA(gCurTask); + Sprite *s = &ia->s; + MapEntity *me = ia->base.me; + s16 worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(ia->base.meX, ia->base.regionX); + worldY = TO_WORLD_POS(me->y, ia->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) { + u32 res = Coll_Player_PlatformCrumbling(s, worldX, worldY, &PLAYER(i)); + + if (res & 0x8) { + PLAYER(i).qWorldY += Q(2); + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ia->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} diff --git a/sa1/src/game/interactables/mini_loop.c b/sa1/src/game/interactables/mini_loop.c new file mode 100644 index 0000000000..cbe5c9638b --- /dev/null +++ b/sa1/src/game/interactables/mini_loop.c @@ -0,0 +1,182 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s32 worldX; + /* 0x08 */ s32 worldY; + /* 0x0C */ s32 left; + /* 0x10 */ s32 right; + /* 0x14 */ s32 top; + /* 0x18 */ s32 bottom; + /* 0x1C */ u8 unk1C; + /* 0x1D */ u8 meX; +} MiniLoop; + +void Task_MiniLoop_StartBoost(void); +void Task_MiniLoop_Exit(void); +void Task_MiniLoop_Entrance(void); + +void Task_MiniLoop_StartBoost(void) +{ + MiniLoop *loop = TASK_DATA(gCurTask); + s32 i; + + i = 0; + do { + Player *p = &PLAYER(i); + s32 worldX, worldY; + + worldX = I(p->qWorldX); + worldY = I(p->qWorldY); + + if (IS_OUT_OF_DISPLAY_RANGE(loop->worldX, loop->worldY)) { + p->moveState &= ~MOVESTATE_8000; + SET_MAP_ENTITY_NOT_INITIALIZED(loop->me, loop->meX); + TaskDestroy(gCurTask); + return; + } + + if ((loop->left <= worldX) && (worldX < loop->right) && (loop->top <= worldY) && (worldY < loop->bottom)) { + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = +Q(9.00); + } + } + } while (++i < gNumSingleplayerCharacters); +} + +void Task_MiniLoop_Exit(void) +{ + MiniLoop *loop = TASK_DATA(gCurTask); + s32 i; + + i = 0; + do { + Player *p = &PLAYER(i); + s32 worldX, worldY; + + worldX = I(p->qWorldX); + worldY = I(p->qWorldY); + + if (IS_OUT_OF_DISPLAY_RANGE(loop->worldX, loop->worldY)) { + p->moveState &= ~MOVESTATE_8000; + SET_MAP_ENTITY_NOT_INITIALIZED(loop->me, loop->meX); + TaskDestroy(gCurTask); + return; + } + + if ((loop->left <= worldX) && (worldX < loop->right) && (loop->top <= worldY) && (worldY < loop->bottom)) { + if (!IS_ALIVE(p)) { + return; + } + + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = -Q(7.25); + } + } + } while (++i < gNumSingleplayerCharacters); +} + +void CreateEntity_MiniLoop_StartBoost(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_MiniLoop_StartBoost, sizeof(MiniLoop), 0x2000, 0, NULL); + MiniLoop *loop = TASK_DATA(t); + s32 worldX, worldY; + + loop->me = me; + loop->meX = me->x; + loop->unk1C = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + loop->worldX = worldX; + loop->worldY = worldY; + + loop->left = worldX + (me->d.sData[0] * TILE_WIDTH); + loop->top = worldY + (me->d.sData[1] * TILE_WIDTH); + loop->right = loop->left + (me->d.uData[2] * TILE_WIDTH); + loop->bottom = loop->top + (me->d.uData[3] * TILE_WIDTH); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} + +void CreateEntity_MiniLoop_Exit(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_MiniLoop_Exit, sizeof(MiniLoop), 0x2000, 0, NULL); + MiniLoop *loop = TASK_DATA(t); + s32 worldX, worldY; + + loop->me = me; + loop->meX = me->x; + loop->unk1C = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + loop->worldX = worldX; + loop->worldY = worldY; + + loop->left = worldX + (me->d.sData[0] * TILE_WIDTH); + loop->top = worldY + (me->d.sData[1] * TILE_WIDTH); + loop->right = loop->left + (me->d.uData[2] * TILE_WIDTH); + loop->bottom = loop->top + (me->d.uData[3] * TILE_WIDTH); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} + +void Task_MiniLoop_Entrance(void) +{ + MiniLoop *loop = TASK_DATA(gCurTask); + s32 i; + + i = 0; + do { + Player *p = &PLAYER(i); + s32 worldX, worldY; + + worldX = I(p->qWorldX); + worldY = I(p->qWorldY); + + if (IS_OUT_OF_DISPLAY_RANGE(loop->worldX, loop->worldY)) { + p->moveState &= ~MOVESTATE_8000; + SET_MAP_ENTITY_NOT_INITIALIZED(loop->me, loop->meX); + TaskDestroy(gCurTask); + return; + } + + if ((loop->left <= worldX) && (worldX < loop->right) && (loop->top <= worldY) && (worldY < loop->bottom)) { + if (!IS_ALIVE(p)) { + return; + } + + p->rotation = Q(0.5); + + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = -p->qSpeedGround; + } + } + } while (++i < gNumSingleplayerCharacters); +} + +void CreateEntity_MiniLoop_Entrance(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_MiniLoop_Entrance, sizeof(MiniLoop), 0x2000, 0, NULL); + MiniLoop *loop = TASK_DATA(t); + s32 worldX, worldY; + + loop->me = me; + loop->meX = me->x; + loop->unk1C = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + loop->worldX = worldX; + loop->worldY = worldY; + + loop->left = worldX + (me->d.sData[0] * TILE_WIDTH); + loop->top = worldY + (me->d.sData[1] * TILE_WIDTH); + loop->right = loop->left + (me->d.uData[2] * TILE_WIDTH); + loop->bottom = loop->top + (me->d.uData[3] * TILE_WIDTH); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/mini_loop_boost.c b/sa1/src/game/interactables/mini_loop_boost.c new file mode 100644 index 0000000000..ad8f55a9a3 --- /dev/null +++ b/sa1/src/game/interactables/mini_loop_boost.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "task.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/stage/player_controls.h" +#include "game/entity.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s32 worldX; + /* 0x08 */ s32 worldY; + /* 0x0C */ s32 left; + /* 0x10 */ s32 right; + /* 0x14 */ s32 top; + /* 0x18 */ s32 bottom; + /* 0x1C */ u8 unk1C; + /* 0x1D */ u8 meX; +} MiniLoopBoost; /* 0x20 */ + +void Task_MiniLoop_Base(void); + +void Task_MiniLoop_Base(void) +{ + MiniLoopBoost *boost = TASK_DATA(gCurTask); + + s32 i = 0; + do { + Player *p = &PLAYER(i); + + s32 playerX = I(p->qWorldX); + s32 playerY = I(p->qWorldY); + + if (IS_OUT_OF_DISPLAY_RANGE(boost->worldX, boost->worldY)) { + p->moveState &= ~MOVESTATE_8000; + SET_MAP_ENTITY_NOT_INITIALIZED(boost->me, boost->meX); + TaskDestroy(gCurTask); + return; + } + + if ((boost->left <= playerX) && (playerX < boost->right) && (boost->top <= playerY) && (playerY < boost->bottom)) { + if (!IS_ALIVE(p)) { + return; + } + + p->moveState &= ~MOVESTATE_200; + + if (p->moveState & MOVESTATE_IGNORE_INPUT) { + p->moveState &= ~MOVESTATE_IGNORE_INPUT; + + p->heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + + i++; + } while (i < gNumSingleplayerCharacters); +} + +void CreateEntity_MiniLoop_Base(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_MiniLoop_Base, sizeof(MiniLoopBoost), 0x2000, 0, NULL); + MiniLoopBoost *ia = TASK_DATA(t); + s32 worldX, worldY; + + ia->me = me; + ia->meX = me->x; + ia->unk1C = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + + ia->worldX = worldX; + ia->worldY = worldY; + + worldX += (me->d.sData[0] * TILE_WIDTH); + ia->left = worldX; + worldY += (me->d.sData[1] * TILE_WIDTH); + ia->top = worldY; + worldX += (me->d.uData[2] * TILE_WIDTH); + ia->right = worldX; + worldY += (me->d.uData[3] * TILE_WIDTH); + ia->bottom = worldY; + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/moving_spring.c b/sa1/src/game/interactables/moving_spring.c new file mode 100644 index 0000000000..c8e92fc8d4 --- /dev/null +++ b/sa1/src/game/interactables/moving_spring.c @@ -0,0 +1,326 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/stage/ui.h" // for sub_80549FC +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s16 unk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ u16 unk4C; +} MovingSpring; + +void Task_MovingSpringMain(void); +void Task_808B5AC(void); +void TaskDestructor_MovingSpring(struct Task *t); +bool32 sub_808B7A0(MovingSpring *spring, Sprite *s, s32 worldX, s32 worldY); +bool32 sub_808BB44(Sprite *s, s32 worldX, s32 worldY, Rect8 *rect, Player *p); + +// TODO: Fake-match +void CreateEntity_MovingSpring(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ +#ifndef NON_MATCHING + register u32 zone asm("r9") = (u8)LEVEL_TO_ZONE(gCurrentLevel); +#else + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); +#endif + + struct Task *t = TaskCreate(Task_MovingSpringMain, sizeof(MovingSpring), 0x2000, 0, TaskDestructor_MovingSpring); + MovingSpring *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + spring->qUnk40 = 0; + spring->qUnk44 = 0; + spring->unk4C = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + spring->unk48 = 4; + spring->unk3C = 0; + spring->unk4A = 0; + } else { + spring->unk48 = 4; + spring->unk3C = 0x80; + spring->unk4A = 0; + } + } else { + if (me->d.sData[1] >= 0) { + spring->unk48 = 0; + spring->unk4A = 4; + spring->unk3C = 0; + } else { + spring->unk48 = 0; + spring->unk4A = 4; + spring->unk3C = 0x80; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + if (zone == ZONE_4) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING_PLATFORM_4); + s->graphics.anim = SA1_ANIM_SPRING_PLATFORM_4; + s->variant = 1; + } else if ((zone == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING_PLATFORM_6); + s->graphics.anim = SA1_ANIM_SPRING_PLATFORM_6; + s->variant = 1; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING_PLATFORM_5); + s->graphics.anim = SA1_ANIM_SPRING_PLATFORM_5; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_MovingSpringMain(void) +{ + CamCoord worldX, worldY; + MovingSpring *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + + if (spring->unk48 != 0) { + spring->qUnk40 = ((me->d.uData[2] << 11) * SIN((spring->unk48 * ((gStageTime + spring->unk3C) & 0xFF)) & (SIN_PERIOD - 1))) >> 14; + } + + if (spring->unk4A != 0) { + spring->qUnk44 = ((me->d.uData[3] << 11) * SIN((spring->unk4A * ((gStageTime + spring->unk3C) & 0xFF)) & (SIN_PERIOD - 1))) >> 14; + } + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x + I(spring->qUnk40); + s->y = worldY - gCamera.y + I(spring->qUnk44); + + if (sub_808B7A0(spring, s, worldX, worldY)) { + gCurTask->main = Task_808B5AC; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_808B5AC(void) +{ + CamCoord worldX, worldY; + MovingSpring *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + + if (spring->unk48 != 0) { + spring->qUnk40 = ((me->d.uData[2] << 11) * SIN((spring->unk48 * ((gStageTime + spring->unk3C) & 0xFF)) & (SIN_PERIOD - 1))) >> 14; + } + + if (spring->unk4A != 0) { + spring->qUnk44 = ((me->d.uData[3] << 11) * SIN((spring->unk4A * ((gStageTime + spring->unk3C) & 0xFF)) & (SIN_PERIOD - 1))) >> 14; + } + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + sub_808B7A0(spring, s, worldX, worldY); + + s->x = worldX - gCamera.x + I(spring->qUnk40); + s->y = worldY - gCamera.y + I(spring->qUnk44); + + if (++spring->unk4C > 12) { + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); + if (zone == ZONE_4) { + s->variant = 1; + } else if ((zone == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + s->variant = 1; + } else { + s->variant = 0; + } + + gCurTask->main = Task_MovingSpringMain; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +bool32 sub_808B7A0(MovingSpring *spring, Sprite *s, s32 worldX, s32 worldY) +{ + bool32 result = FALSE; + + s32 i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), (1 - PLAYER(i).spriteOffsetY), +(PLAYER(i).spriteOffsetX + 5), + (PLAYER(i).spriteOffsetY - 1) }; + + s32 r5 = Coll_AmyHammer_Spring(s, worldX + I(spring->qUnk40), worldY + I(spring->qUnk44), &PLAYER(i)); + s32 qPrevPlayerX; + + if (((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == s)) || r5) { + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).charState = CHARSTATE_17; + PLAYER_SPR_INFO(i).s.prevVariant = -1; + PLAYER(i).qSpeedAirY = -Q(7.5); + + if (r5) { + if (!(PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ)) { + PLAYER(i).qSpeedAirY += PLAYER(i).qSpeedAirY >> 1; + } + } + + spring->unk4C = 0; + + if (zone == ZONE_4) { + s->variant = 0; + } else if ((zone == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + s->variant = 0; + } else { + s->variant = 1; + } + + m4aSongNumStart(SE_SPRING); + result = TRUE; + } + + qPrevPlayerX = PLAYER(i).qWorldX; + + sub_808BB44(s, worldX + I(spring->qUnk40), worldY + I(spring->qUnk44), (Rect8 *)arr, &PLAYER(i)); + + { + s32 r5 = sub_80096B0(s, worldX + I(spring->qUnk40), worldY + I(spring->qUnk44), &PLAYER(i)); + + if (PLAYER(i).charState == CHARSTATE_17) { + PLAYER(i).qWorldX = qPrevPlayerX; + } + + if ((r5 & (COLL_FLAG_100000 | COLL_FLAG_40000 | COLL_FLAG_20000 | COLL_FLAG_10000)) && sub_80549FC()) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + } + + if (!(r5 & COLL_FLAG_20)) { + if (PLAYER(i).moveState & MOVESTATE_20) { + PLAYER(i).moveState &= ~MOVESTATE_20; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_WALK_A; + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +// TODO: Very fake-match! :( +bool32 sub_808BB44(Sprite *s, s32 worldX, s32 worldY, Rect8 *rect, Player *p) +{ + s32 res; + s32 qPlayerX; +#ifndef NON_MATCHING + register s32 r1 asm("r1"); + register s32 v1 asm("r2"); +#else + s32 r1; + s32 v1; +#endif + + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*rect))) { + s32 v0 = worldX + s->hitboxes[0].b.left - rect->right; + v1 = v0 + 8; + qPlayerX = p->qWorldX; + if (I(qPlayerX) <= v1) { + r1 = Q(v0); + p->qWorldX = r1; + } else { +#ifndef NON_MATCHING + register s32 v0 asm("r0") = worldX + s->hitboxes[0].b.right - rect->left; +#else + s32 v0 = worldX + s->hitboxes[0].b.right - rect->left; +#endif + v1 = v0 - 8; + if (I(qPlayerX) >= v1) { + r1 = Q(v0); + p->qWorldX = r1; + } else { + return FALSE; + } + } + + res = SA2_LABEL(sub_801E4E4)(I(p->qWorldY) + 9, I(r1), p->layer, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + res = SA2_LABEL(sub_801E4E4)(I(p->qWorldY), I(p->qWorldX), p->layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + return TRUE; + } + + return FALSE; +} +void TaskDestructor_MovingSpring(struct Task *t) +{ + MovingSpring *spring = TASK_DATA(t); + VramFree(spring->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/panel_gate.c b/sa1/src/game/interactables/panel_gate.c new file mode 100644 index 0000000000..471d9753ca --- /dev/null +++ b/sa1/src/game/interactables/panel_gate.c @@ -0,0 +1,406 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; +} PanelGate; + +void Task_PanelGate_Vertical(void); +void Task_PanelGate_Vertical2(void); +void Task_PanelGate_Horizontal(void); +void Task_PanelGate_Horizontal2(void); +void TaskDestructor_PanelGate(struct Task *t); +bool32 sub_8081C04(PanelGate *gate, Sprite *s, s32 worldX, s32 worldY); +bool32 sub_8081F50(PanelGate *gate, Sprite *s, s32 worldX, s32 worldY); + +void CreateEntity_PanelGate_Vertical(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PanelGate_Vertical, sizeof(PanelGate), 0x2000, 0, TaskDestructor_PanelGate); + PanelGate *gate = TASK_DATA(t); + Sprite *s = &gate->s; + + gate->base.regionX = regionX; + gate->base.regionY = regionY; + gate->base.me = me; + gate->base.meX = me->x; + gate->base.id = id; + + gate->unk3C = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PANEL_GATE_SIDEWAYS); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PANEL_GATE_SIDEWAYS; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] != 0) { + SPRITE_FLAG_SET(s, X_FLIP); +#ifndef BUG_FIX + // NOTE: Already set above. + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); +#endif + } + + UpdateSpriteAnimation(s); +} + +void Task_PanelGate_Vertical(void) +{ + PanelGate *gate = TASK_DATA(gCurTask); + Sprite *s = &gate->s; + MapEntity *me = gate->base.me; + CamCoord worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(gate->base.meX, gate->base.regionX); + worldY = TO_WORLD_POS(me->y, gate->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (sub_8081C04(gate, s, worldX, worldY)) { + gCurTask->main = Task_PanelGate_Vertical2; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gate->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_PanelGate_Vertical2(void) +{ + PanelGate *gate = TASK_DATA(gCurTask); + Sprite *s = &gate->s; + MapEntity *me = gate->base.me; + CamCoord worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(gate->base.meX, gate->base.regionX); + worldY = TO_WORLD_POS(me->y, gate->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gate->base.meX); + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + u32 res = Coll_Player_Entity_Intersection(s, worldX - 6, worldY, &PLAYER(i)); + if (res) { + if (PLAYER(i).qSpeedAirX > Q(0)) { + Coll_Player_Gate(s, worldX, worldY, &PLAYER(i), 0); + } + } + } else { + u32 res = Coll_Player_Entity_Intersection(s, worldX + 6, worldY, &PLAYER(i)); + if (res) { + if (PLAYER(i).qSpeedAirX < Q(0)) { + Coll_Player_Gate(s, worldX, worldY, &PLAYER(i), 0); + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (--gate->unk3C == 0) { + s->variant = 0; + gCurTask->main = Task_PanelGate_Vertical; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateEntity_PanelGate_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PanelGate_Horizontal, sizeof(PanelGate), 0x2000, 0, TaskDestructor_PanelGate); + PanelGate *gate = TASK_DATA(t); + Sprite *s = &gate->s; + + gate->base.regionX = regionX; + gate->base.regionY = regionY; + gate->base.me = me; + gate->base.meX = me->x; + gate->base.id = id; + + gate->unk3C = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PANEL_GATE_UPDOWN); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PANEL_GATE_UPDOWN; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[0] != 0) { + SPRITE_FLAG_SET(s, Y_FLIP); +#ifndef BUG_FIX + // NOTE: Already set above. + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); +#endif + } + + UpdateSpriteAnimation(s); +} + +void Task_PanelGate_Horizontal(void) +{ + PanelGate *gate = TASK_DATA(gCurTask); + Sprite *s = &gate->s; + MapEntity *me = gate->base.me; + CamCoord worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(gate->base.meX, gate->base.regionX); + worldY = TO_WORLD_POS(me->y, gate->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (sub_8081F50(gate, s, worldX, worldY)) { + gCurTask->main = Task_PanelGate_Horizontal2; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gate->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_PanelGate_Horizontal2(void) +{ + PanelGate *gate = TASK_DATA(gCurTask); + Sprite *s = &gate->s; + MapEntity *me = gate->base.me; + CamCoord worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(gate->base.meX, gate->base.regionX); + worldY = TO_WORLD_POS(me->y, gate->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gate->base.meX); + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (s->frameFlags & SPRITE_FLAG_MASK_Y_FLIP) { + u32 res = Coll_Player_Entity_Intersection(s, worldX, worldY + 5, &PLAYER(i)); + if (res) { + if (PLAYER(i).qSpeedAirY > Q(0)) { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + } + } else { + u32 res = Coll_Player_Entity_Intersection(s, worldX, worldY - 5, &PLAYER(i)); + if (res) { + if (PLAYER(i).qSpeedAirY < Q(0)) { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (--gate->unk3C == 0) { + s->variant = 1; + gCurTask->main = Task_PanelGate_Horizontal; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +bool32 sub_8081C04(PanelGate *gate, Sprite *s, s32 worldX, s32 worldY) +{ + s32 i; + bool32 result = FALSE; + s32 qTempPlayerY; + + i = 0; + do { + qTempPlayerY = PLAYER(i).qWorldY; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + if ((worldX <= I(PLAYER(i).qWorldX)) && (worldX + 32 >= I(PLAYER(i).qWorldX)) && (worldY - 40 <= I(PLAYER(i).qWorldY)) + && (worldY + 40 >= I(PLAYER(i).qWorldY))) { + if ((worldX <= I(PLAYER(i).qWorldX)) && (worldX + 32 >= I(PLAYER(i).qWorldX))) { + if (PLAYER(i).qSpeedAirX < Q(0)) { + gate->unk3C = 0x7D; + s->variant = 1; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_PANEL_GATE); + + result = TRUE; + } else { + Coll_Player_Gate(s, worldX, worldY, &PLAYER(i), 0); + } + } else { + if (PLAYER(i).qSpeedAirX < Q(0)) { + Coll_Player_Gate(s, worldX, worldY, &PLAYER(i), 0); + PLAYER(i).qSpeedGround = 0; + PLAYER(i).qSpeedAirX = 0; + } + } + } + } else { + if ((worldX - 32 <= I(PLAYER(i).qWorldX)) && (worldX + 16 >= I(PLAYER(i).qWorldX)) && (worldY - 40 <= I(PLAYER(i).qWorldY)) + && (worldY + 40 >= I(PLAYER(i).qWorldY))) { + if ((worldX - 32 <= I(PLAYER(i).qWorldX)) && (worldX >= I(PLAYER(i).qWorldX))) { + if (PLAYER(i).qSpeedAirX > Q(0)) { + gate->unk3C = 0x7D; + s->variant = 1; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_PANEL_GATE); + + result = TRUE; + } else { + Coll_Player_Gate(s, worldX, worldY, &PLAYER(i), 0); + } + } else { + if (PLAYER(i).qSpeedAirX < Q(0)) { + Coll_Player_Gate(s, worldX, worldY, &PLAYER(i), 0); + PLAYER(i).qSpeedGround = 0; + PLAYER(i).qSpeedAirX = 0; + } + } + } + } + + PLAYER(i).qWorldY = qTempPlayerY; + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +bool32 sub_8081F50(PanelGate *gate, Sprite *s, s32 worldX, s32 worldY) +{ + s32 i; + bool32 result = FALSE; + s32 qTempPlayerY; + + i = 0; + do { + qTempPlayerY = PLAYER(i).qWorldY; + + if (s->frameFlags & SPRITE_FLAG_MASK_Y_FLIP) { + if ((worldX <= I(PLAYER(i).qWorldX)) && (worldX + 32 >= I(PLAYER(i).qWorldX)) && (worldY <= I(PLAYER(i).qWorldY)) + && (worldY + 28 >= I(PLAYER(i).qWorldY))) { + + if (PLAYER(i).qSpeedAirY < Q(0)) { + gate->unk3C = 0x7D; + s->variant = 0; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_PANEL_GATE); + + result = TRUE; + } else { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + + } else { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + } else { + if ((worldX <= I(PLAYER(i).qWorldX)) && (worldX + 32 >= I(PLAYER(i).qWorldX)) && (worldY - 28 <= I(PLAYER(i).qWorldY)) + && (worldY >= I(PLAYER(i).qWorldY))) { + + if (PLAYER(i).qSpeedAirY > Q(0)) { + gate->unk3C = 0x7D; + s->variant = 0; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_PANEL_GATE); + + result = TRUE; + } else { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + + } else { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + } + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +void TaskDestructor_PanelGate(struct Task *t) +{ + PanelGate *gate = TASK_DATA(t); + VramFree(gate->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/party_balloon.c b/sa1/src/game/interactables/party_balloon.c new file mode 100644 index 0000000000..81cc0e9a1e --- /dev/null +++ b/sa1/src/game/interactables/party_balloon.c @@ -0,0 +1,187 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/interactables/party_balloon.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/stage/player.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +void Task_PartyBalloon(void); +void Task_PartyBalloonPopped(void); +void TaskDestructor_PartyBalloon(struct Task *); + +void CreateEntity_PartyBalloon(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PartyBalloon, sizeof(PartyBalloon), 0x2000, 0, TaskDestructor_PartyBalloon); + PartyBalloon *balloon = TASK_DATA(t); + Sprite *s = &balloon->s; + + balloon->base.regionX = regionX; + balloon->base.regionY = regionY; + balloon->base.me = me; + balloon->base.meX = me->x; + balloon->base.id = id; + + balloon->unk3C = 0; + balloon->unk40 = 0; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BALLOON_BLUE); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + + switch (me->d.sData[0]) { + case PBCOLOR_BLUE: { + s->graphics.anim = SA1_ANIM_BALLOON_BLUE; + } break; + + case PBCOLOR_RED: { + s->graphics.anim = SA1_ANIM_BALLOON_RED; + } break; + + case PBCOLOR_YELLOW: { + s->graphics.anim = SA1_ANIM_BALLOON_YELLOW; + } break; + } + + s->variant = 0; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +// (99.96%) https://decomp.me/scratch/hdl15 +NONMATCH("asm/non_matching/game/interactables/Task_PartyBalloon.inc", void Task_PartyBalloon(void)) +{ + PartyBalloon *balloon = TASK_DATA(gCurTask); + Sprite *s = &balloon->s; + MapEntity *me = balloon->base.me; + CamCoord worldX, worldY; + s32 i; + s32 r9; + + worldX = TO_WORLD_POS(balloon->base.meX, balloon->base.regionX); + worldY = TO_WORLD_POS(me->y, balloon->base.regionY); + + s->x = (worldX - gCamera.x); + s->y = (worldY - gCamera.y); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, balloon->base.meX); + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { +#ifndef NON_MATCHING + asm("mov r0, #1\n" + "mov %0, r0" ::"r"(r9)); +#else + r9 = 1; +#endif + loopJmp: + // _0807EFDE_loop + if (Coll_Player_Entity_Intersection(s, worldX, worldY, &PLAYER(i))) { + // _0807EFFA + if (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + PLAYER(i).qSpeedAirY = -Q(6); + PLAYER(i).charState = CHARSTATE_SPRING_B; + + if (i != 0) { + gPlayerBodyPSI.s.prevVariant = -1; + } else { + gPartnerBodyPSI.s.prevVariant = -1; + } + + balloon->unk40 = 0x21; + s->prevVariant = -1; + s->variant = r9; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_BALLOON_POP); + gCurTask->main = Task_PartyBalloonPopped; + + if (IS_MULTI_PLAYER) { + RoomEvent_BalloonPopped *roomEvent = CreateRoomEvent(); + s32 type = r9; + roomEvent->type = type; + roomEvent->x = balloon->base.regionX; + roomEvent->y = balloon->base.regionY; + roomEvent->id = balloon->base.id; + type = r9; + roomEvent->unk4 = type; + } + } + } + // _0807F1A0 + + if (IS_MULTI_PLAYER && ((s8)me->x == -3)) { + balloon->unk40 = 33; + s->prevVariant = -1; + s->variant = r9; + + m4aSongNumStart(SE_BALLOON_POP); + gCurTask->main = Task_PartyBalloonPopped; + } + } while (++i < gNumSingleplayerCharacters); + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void Task_PartyBalloonPopped(void) +{ + PartyBalloon *balloon = TASK_DATA(gCurTask); + Sprite *s = &balloon->s; + MapEntity *me = balloon->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(balloon->base.meX, balloon->base.regionX); + worldY = TO_WORLD_POS(me->y, balloon->base.regionY); + + s->x = (worldX - gCamera.x); + s->y = (worldY - gCamera.y); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, balloon->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (--balloon->unk40 == 0) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, balloon->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_PartyBalloon(struct Task *t) +{ + PartyBalloon *balloon = TASK_DATA(t); + VramFree(balloon->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/pipe.c b/sa1/src/game/interactables/pipe.c new file mode 100644 index 0000000000..3c9d8a5dd2 --- /dev/null +++ b/sa1/src/game/interactables/pipe.c @@ -0,0 +1,871 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/dust_cloud.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E; + /* 0x3F */ u8 unk3F; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ s32 unk48; + /* 0x4C */ s32 unk4C; + /* 0x50 */ s32 unk50; + /* 0x54 */ s32 unk54; + /* 0x58 */ u8 unk58; + /* 0x59 */ u8 unk59; +} PipeEntrance; + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E; + /* 0x3F */ u8 unk3F; + /* 0x40 */ u16 unk40; +} PipeExit; + +void Task_PipeEntrance(void); +void Task_8095D28(void); +void Task_8095E90(void); +void TaskDestructor_PipeEntrance(struct Task *t); +void Task_PipeExit(void); +void Task_809656C(void); +void Task_8096724(void); +void TaskDestructor_PipeExit(struct Task *t); + +void CreateEntity_PipeEntrance(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + s32 i; + + i = 0; + do { + struct Task *t = TaskCreate(Task_PipeEntrance, sizeof(PipeEntrance), me->d.uData[3] | 0x2000, 0, TaskDestructor_PipeEntrance); + PipeEntrance *pipe = TASK_DATA(t); + Sprite *s = &pipe->s; + + pipe->base.regionX = regionX; + pipe->base.regionY = regionY; + pipe->base.me = me; + pipe->base.meX = me->x; + pipe->base.id = id; + + pipe->unk3C = i; + pipe->unk3E = 20; + pipe->unk3F = 0; + + pipe->unk40 = 0; + pipe->unk44 = 0; + pipe->unk50 = 0; + pipe->unk54 = 0; + + pipe->unk48 = me->d.sData[0] * TILE_WIDTH; + pipe->unk4C = me->d.sData[1] * TILE_WIDTH; + + pipe->unk58 = 0; + pipe->unk3D = me->d.uData[3]; + pipe->unk59 = me->d.uData[2]; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + if (pipe->unk59 == 0 || pipe->unk59 == 1) { + s->frameFlags = 0; + + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + if ((gCurrentLevel & 0x1) != ACT_1) { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_ENTER_6_2_V) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_ENTER_6_2_V; + + s->variant = 0; + + if (pipe->unk59 == 0) { + SPRITE_FLAG_SET(s, Y_FLIP); + } + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_ENTER_6_1_V) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_ENTER_6_1_V; + + s->variant = 0; + + if (pipe->unk59 != 0) { + SPRITE_FLAG_SET(s, Y_FLIP); + } + } + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_GATE_2_V) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_GATE_2_V; + + s->variant = 0; + + if (pipe->unk59 != 0) { + SPRITE_FLAG_SET(s, Y_FLIP); + } + } + + s->oamFlags = SPRITE_OAM_ORDER(5); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + } else { + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + if ((gCurrentLevel & 0x1) != ACT_1) { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_ENTER_6_2_H) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_ENTER_6_2_H; + + s->variant = 0; + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_ENTER_6_1_H) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_ENTER_6_1_H; + + s->variant = 0; + } + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_GATE_2_H) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_GATE_2_H; + + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(5); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + + if ((pipe->unk59 & 0x1) != 0) { + s->frameFlags = SPRITE_FLAG(X_FLIP, 1); + } + } + + if (i != 0) { + s->frameFlags |= (SPRITE_FLAG_MASK_18 | SPRITE_FLAG_MASK_19); + } + + UpdateSpriteAnimation(s); + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_INITIALIZED(me); +} + +void Task_PipeEntrance(void) +{ + s32 qPlayerX, qPlayerY; + s16 screenX, screenY; + s32 collided; + MapEntity *me; + Sprite *s; + CamCoord worldX; + CamCoord worldY; + Player *p; + PipeEntrance *pipe; + u32 mask; + u32 res; + pipe = TASK_DATA(gCurTask); + me = pipe->base.me; + s = &pipe->s; + p = &PLAYER(pipe->unk3C); + + worldX = TO_WORLD_POS(pipe->base.meX, pipe->base.regionX); + worldY = TO_WORLD_POS(me->y, pipe->base.regionY); + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + collided = 0; + + if (IS_ALIVE(p)) { + if (pipe->unk59 == 0 || pipe->unk59 == 1) { + qPlayerX = p->qWorldX; + qPlayerY = p->qWorldY; + + if (pipe->unk59 != 0) { + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_2)) { + if (GRAVITY_IS_INVERTED) { + mask = 0x100008; + } else { + mask = 0x10000; + } + + if (sub_80096B0(s, worldX, worldY, p) & mask) { + collided = 1; + } + } else { + if (GRAVITY_IS_INVERTED) { + mask = 0x10000; + } else { + mask = 0x100008; + } + + if (sub_80096B0(s, worldX, worldY, p) & mask) { + collided = 1; + } + } + } else { + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_2)) { + if (GRAVITY_IS_INVERTED) { + mask = 0x10000; + } else { + mask = 0x100008; + } + + if (sub_80096B0(s, worldX, worldY, p) & mask) { + collided = 1; + } + } else { + if (GRAVITY_IS_INVERTED) { + mask = 0x100008; + } else { + mask = 0x10000; + } + + if (sub_80096B0(s, worldX, worldY, p) & mask) { + collided = 1; + } + } + } + + if (collided) { + Player_TransitionCancelFlyingAndBoost(p); + pipe->unk3F = 90; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState &= ~MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_4; + p->moveState |= MOVESTATE_IA_OVERRIDE; + + p->qWorldX = qPlayerX; + p->qWorldY = qPlayerY; + p->charState = CHARSTATE_SPINATTACK; + p->qSpeedAirY = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + p->SA2_LABEL(unk99)[0] = 0; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + gCurTask->main = Task_8095D28; + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } else { + qPlayerX = p->qWorldX; + qPlayerY = p->qWorldY; + + res = sub_80096B0(s, worldX, worldY, p); + + if (res & 0x60000) { + if ((res & 0x40000) && pipe->unk59 == 2) { + Player_TransitionCancelFlyingAndBoost(p); + pipe->unk3F = 90; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_4; + p->moveState |= MOVESTATE_IA_OVERRIDE; + + p->qWorldX = qPlayerX; + p->qWorldY = qPlayerY; + p->charState = CHARSTATE_SPINATTACK; + p->qSpeedAirY = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + + p->SA2_LABEL(unk99)[0] = 0; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + gCurTask->main = Task_8095D28; + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } else if ((res & 0x20000) && pipe->unk59 == 3) { + pipe->unk3F = 90; + Player_TransitionCancelFlyingAndBoost(p); + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_4; + p->moveState |= MOVESTATE_IA_OVERRIDE; + + p->qWorldX = qPlayerX; + p->qWorldY = qPlayerY; + p->charState = CHARSTATE_SPINATTACK; + p->qSpeedAirY = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + + p->SA2_LABEL(unk99)[0] = 0; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + gCurTask->main = Task_8095D28; + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + } else { + Player_TransitionCancelFlyingAndBoost(p); + p->moveState |= MOVESTATE_DEAD; // NOTE: This OR is redundant... + p->charState = CHARSTATE_DEAD; + } + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + if (pipe->unk58) { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + } + + if (pipe->unk3C == 0) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pipe->base.meX); + } + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + + if (pipe->unk3C == 0) { + DisplaySprite(s); + } +} + +void Task_8095D28(void) +{ + PipeEntrance *pipe = TASK_DATA(gCurTask); + MapEntity *me = pipe->base.me; + Sprite *s = &pipe->s; + Player *p = &PLAYER(pipe->unk3C); + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pipe->base.meX, pipe->base.regionX); + worldY = TO_WORLD_POS(me->y, pipe->base.regionY); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_ALIVE(p)) { + if (pipe->unk3F != 0) { + if (p->qWorldY != Q(worldY)) { + if (p->qWorldY < Q(worldY)) { + p->qWorldY += Q(1.5); + + if (p->qWorldY > Q(worldY)) { + p->qWorldY = Q(worldY); + } + } else { + p->qWorldY -= Q(1.5); + + if (p->qWorldY < Q(worldY)) { + p->qWorldY = Q(worldY); + } + } + } + + if (p->qWorldX != Q(worldX)) { + if (p->qWorldX < Q(worldX)) { + p->qWorldX += Q(1.5); + + if (p->qWorldX > Q(worldX)) { + p->qWorldX = Q(worldX); + } + } else { + p->qWorldX -= Q(1.5); + + if (p->qWorldX < Q(worldX)) { + p->qWorldX = Q(worldX); + } + } + } + + if (--pipe->unk3F == 45) { + m4aSongNumStart(SE_SPIN_ATTACK); + } + } else { + pipe->unk40 = worldX; + pipe->unk44 = worldY; + + pipe->unk58 = 1; + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gCurTask->main = Task_8095E90; + } + + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_SPINATTACK; + } else { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + } + + UpdateSpriteAnimation(s); + + if (pipe->unk3C == 0) { + DisplaySprite(s); + } +} + +void Task_8095E90(void) +{ + Sprite *s; + s16 screenX, screenY; + CamCoord worldX, worldY; + Player *p; + s32 test; + PipeEntrance *pipe = TASK_DATA(gCurTask); + MapEntity *me = pipe->base.me; + s = &pipe->s; + + p = &PLAYER(pipe->unk3C); + + worldX = TO_WORLD_POS(pipe->base.meX, pipe->base.regionX); + worldY = TO_WORLD_POS(me->y, pipe->base.regionY); + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (pipe->unk58) { + if (IS_ALIVE(p)) { + if (p->SA2_LABEL(unk99)[0] == pipe->unk3D) { + s32 r6 = Div(pipe->unk48 * pipe->unk3F, pipe->unk3E); + s32 res2 = Div(pipe->unk4C * pipe->unk3F, pipe->unk3E); + + p->qWorldX = Q(pipe->unk40 + r6); + p->qWorldY = Q(pipe->unk44 + res2); + + p->qSpeedAirY = p->qWorldY - pipe->unk54; + p->qSpeedGround = p->qWorldX - pipe->unk50; + p->qSpeedAirX = p->qSpeedGround; + + pipe->unk3F++; + + if ((I(p->qWorldX) == pipe->unk40 + pipe->unk48) && (I(p->qWorldY) == pipe->unk44 + pipe->unk4C)) { + if (p->SA2_LABEL(unk99)[0] == pipe->unk3D) { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + + pipe->unk58 = 0; + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + + } else { + Player_TransitionCancelFlyingAndBoost(p); + do { + p->moveState |= MOVESTATE_IA_OVERRIDE; + + p->charState = CHARSTATE_SPINATTACK; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } while (0); + + pipe->unk58 = 1; + } + + pipe->unk50 = p->qWorldX; + pipe->unk54 = p->qWorldY; + } else { + pipe->unk58 = 0; + } + } else { + pipe->unk58 = 0; + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + } + } else { + gCurTask->main = Task_PipeEntrance; + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + if (pipe->unk58) { + if (p->SA2_LABEL(unk99)[0] == pipe->unk3D) { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } + + if (pipe->unk3C == 0) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pipe->base.meX); + } + TaskDestroy(gCurTask); + return; + } + } + + UpdateSpriteAnimation(s); + + if (pipe->unk3C == 0) { + DisplaySprite(s); + } +} + +void TaskDestructor_PipeEntrance(struct Task *t) +{ + PipeEntrance *pipe = TASK_DATA(t); + + if (pipe->unk3C == 0) { + VramFree(pipe->s.graphics.dest); + } +} + +void CreateEntity_PipeExit(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + s32 i; + + i = 0; + do { + struct Task *t = TaskCreate(Task_PipeExit, sizeof(PipeExit), me->d.uData[3] | 0x2000, 0, TaskDestructor_PipeExit); + PipeExit *pipe = TASK_DATA(t); + Sprite *s = &pipe->s; + + pipe->base.regionX = regionX; + pipe->base.regionY = regionY; + pipe->base.me = me; + pipe->base.meX = me->x; + pipe->base.id = id; + + pipe->unk3C = i; + pipe->unk3E = 0; + pipe->unk3D = me->d.uData[3]; + pipe->unk3F = me->d.uData[2]; + pipe->unk40 = (me->d.sData[1] * TILE_WIDTH) * 8; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + s->oamFlags = SPRITE_OAM_ORDER(5); + + if (pipe->unk3F == 0 || pipe->unk3F == 1) { + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + if ((gCurrentLevel & 0x1) != ACT_1) { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_ENTER_6_2_V) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_ENTER_6_2_V; + s->variant = 1; + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_EXIT_6_1_V) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_EXIT_6_1_V; + s->variant = 0; + } + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_GATE_2_V) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_GATE_2_V; + s->variant = 1; + } + + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + + if (pipe->unk3F != 0) { + SPRITE_FLAG_SET(s, Y_FLIP); + } + } else { + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + if ((gCurrentLevel & 0x1) != ACT_1) { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_ENTER_6_2_H) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_ENTER_6_2_H; + s->variant = 1; + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_EXIT_6_1_H) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_EXIT_6_1_H; + s->variant = 0; + } + } else { + s->graphics.dest = (i == 0) ? ALLOC_TILES(SA1_ANIM_PIPE_GATE_2_H) : NULL; + s->graphics.anim = SA1_ANIM_PIPE_GATE_2_H; + s->variant = 1; + } + + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + + if ((pipe->unk3F & 0x1) != 0) { + s->frameFlags = SPRITE_FLAG(X_FLIP, 1); + } + } + + if (i != 0) { + s->frameFlags |= (SPRITE_FLAG_MASK_18 | SPRITE_FLAG_MASK_19); + } + + UpdateSpriteAnimation(s); + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_INITIALIZED(me); +} + +// (98.25%) https://decomp.me/scratch/rvdlH +NONMATCH("asm/non_matching/game/interactables/pipe__Task_PipeExit.inc", void Task_PipeExit(void)) +{ + Sprite *s; + s16 screenX, screenY; + CamCoord worldX, worldY; + PipeEntrance *pipe; + s32 test; + Player *p; + MapEntity *me; +#ifndef NON_MATCHING + register SpriteBase *base asm("r3"); +#else + SpriteBase *base; +#endif + + pipe = TASK_DATA(gCurTask); + me = pipe->base.me; + + s = &pipe->s; + + p = &PLAYER(pipe->unk3C); + + base = &pipe->base; + + worldX = TO_WORLD_POS(base->meX, base->regionX); + worldY = TO_WORLD_POS(me->y, base->regionY); + screenX = worldX - gCamera.x; + s->x = worldX - gCamera.x; + screenY = worldY - gCamera.y; + s->y = worldY - gCamera.y; + + if (IS_ALIVE(p)) { + if (p->moveState & MOVESTATE_IA_OVERRIDE) { + if (p->SA2_LABEL(unk99)[0] < pipe->unk3D) { + if (Coll_Player_Entity_Intersection(s, worldX, worldY, p)) { + pipe->unk3E = 0; + Player_TransitionCancelFlyingAndBoost(p); + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState &= ~MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_4; + p->moveState |= MOVESTATE_IA_OVERRIDE; + + p->charState = CHARSTATE_SPINATTACK; + + p->qWorldY = Q(worldY); + p->qWorldX = Q(worldX); + p->qSpeedAirY = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + p->heldInput = 0; + p->frameInput = 0; + p->SA2_LABEL(unk99)[0] = 0x7F; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + gCurTask->main = Task_809656C; + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } else { + sub_80096B0(s, worldX, worldY, p); + } + } else { + Player_TransitionCancelFlyingAndBoost(p); + p->moveState |= MOVESTATE_DEAD; // NOTE: This OR is redundant... + p->charState = CHARSTATE_DEAD; + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + if (pipe->unk3C == 0) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pipe->base.meX); + } + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + + if (pipe->unk3C == 0) { + DisplaySprite(s); + } +} +END_NONMATCH + +void Task_809656C(void) +{ + PipeExit *pipe = TASK_DATA(gCurTask); + MapEntity *me = pipe->base.me; + Sprite *s = &pipe->s; + Player *p = &PLAYER(pipe->unk3C); + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pipe->base.meX, pipe->base.regionX); + worldY = TO_WORLD_POS(me->y, pipe->base.regionY); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_ALIVE(p)) { + if (pipe->unk3E != 0) { + if (p->qWorldY != Q(worldY)) { + if (p->qWorldY < Q(worldY)) { + p->qWorldY += Q(1.5); + + if (p->qWorldY > Q(worldY)) { + p->qWorldY = Q(worldY); + } + } else { + p->qWorldY -= Q(1.5); + + if (p->qWorldY < Q(worldY)) { + p->qWorldY = Q(worldY); + } + } + } + + if (p->qWorldX != Q(worldX)) { + if (p->qWorldX < Q(worldX)) { + p->qWorldX += Q(1.5); + + if (p->qWorldX > Q(worldX)) { + p->qWorldX = Q(worldX); + } + } else { + p->qWorldX -= Q(1.5); + + if (p->qWorldX < Q(worldX)) { + p->qWorldX = Q(worldX); + } + } + } + + --pipe->unk3E; + } else { + if (pipe->unk3F == 0 || pipe->unk3F == 1) { + if (pipe->unk3F & 0x1) { + p->qSpeedAirY = -pipe->unk40; + p->qSpeedAirX = 0; + p->qSpeedGround = 0; + } else { + p->qSpeedAirY = +pipe->unk40; + p->qSpeedAirX = 0; + p->qSpeedGround = 0; + } + + pipe->unk3E = 15; + } else { + if (pipe->unk3F & 0x1) { + p->moveState |= MOVESTATE_FACING_LEFT; + p->qSpeedAirY = 0; + p->qSpeedAirX = -pipe->unk40; + p->qSpeedGround = -pipe->unk40; + } else { + p->moveState &= ~MOVESTATE_FACING_LEFT; + p->qSpeedAirY = 0; + p->qSpeedAirX = +pipe->unk40; + p->qSpeedGround = +pipe->unk40; + } + pipe->unk3E = 15; + } + + gCurTask->main = Task_8096724; + } + + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_SPINATTACK; + p->moveState |= MOVESTATE_IN_AIR; + } + + UpdateSpriteAnimation(s); + + if (pipe->unk3C == 0) { + DisplaySprite(s); + } +} + +void Task_8096724(void) +{ + PipeExit *pipe = TASK_DATA(gCurTask); + MapEntity *me = pipe->base.me; + Sprite *s = &pipe->s; + Player *p = &PLAYER(pipe->unk3C); + CamCoord worldX, worldY; + s16 screenX, screenY; + + worldX = TO_WORLD_POS(pipe->base.meX, pipe->base.regionX); + worldY = TO_WORLD_POS(me->y, pipe->base.regionY); + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (pipe->unk3E != 0) { + if (IS_ALIVE(p)) { + pipe->unk3E--; + p->qWorldX += p->qSpeedAirX; + p->qWorldY += p->qSpeedAirY; + + if (pipe->unk3E == 0) { + p->moveState &= ~MOVESTATE_IGNORE_INPUT; + p->heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + p->SA2_LABEL(unk99)[0] = 0x7F; + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } else { + gCurTask->main = Task_PipeExit; + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + if (pipe->unk3C == 0) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pipe->base.meX); + } + TaskDestroy(gCurTask); + return; + } + } + + UpdateSpriteAnimation(s); + + if (pipe->unk3C == 0) { + DisplaySprite(s); + } +} + +void TaskDestructor_PipeExit(struct Task *t) +{ + PipeExit *pipe = TASK_DATA(t); + + if (pipe->unk3C == 0) { + VramFree(pipe->s.graphics.dest); + } +} \ No newline at end of file diff --git a/sa1/src/game/interactables/platform_crumbling.c b/sa1/src/game/interactables/platform_crumbling.c new file mode 100644 index 0000000000..8ee975124a --- /dev/null +++ b/sa1/src/game/interactables/platform_crumbling.c @@ -0,0 +1,368 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player_controls.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s16 unk3C; +} PlatformCrumbling; + +void Task_PlatformCrumbling(void); +void Task_8025008(void); +void Task_8025190(void); +void Task_8025400(void); +void TaskDestructor_PlatformCrumbling(struct Task *t); + +const AnimId sPlatformCrumblingAnims[NUM_LEVEL_IDS] = { + SA1_ANIM_CRUMBLE_PLATFORM_1, + SA1_ANIM_CRUMBLE_PLATFORM_1, // + SA1_ANIM_CRUMBLE_PLATFORM_2_3, + SA1_ANIM_CRUMBLE_PLATFORM_2_3, // + SA1_ANIM_CRUMBLE_PLATFORM_2_3, + SA1_ANIM_CRUMBLE_PLATFORM_2_3, // + SA1_ANIM_CRUMBLE_PLATFORM_4, + SA1_ANIM_CRUMBLE_PLATFORM_4, // + SA1_ANIM_CRUMBLE_PLATFORM_5, + SA1_ANIM_CRUMBLE_PLATFORM_5, // + SA1_ANIM_CRUMBLE_PLATFORM_6_1, + SA1_ANIM_CRUMBLE_PLATFORM_6_2, // + SA1_ANIM_CRUMBLE_PLATFORM_6_1, + SA1_ANIM_CRUMBLE_PLATFORM_6_1, // + SA1_ANIM_CRUMBLE_PLATFORM_1, + SA1_ANIM_CRUMBLE_PLATFORM_2_3, // + SA1_ANIM_CRUMBLE_PLATFORM_2_3, + SA1_ANIM_CRUMBLE_PLATFORM_6_2, // +}; + +void CreateEntity_PlatformCrumbling(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PlatformCrumbling, sizeof(PlatformCrumbling), 0x2000, 0, TaskDestructor_PlatformCrumbling); + PlatformCrumbling *platform = TASK_DATA(t); + SpriteBase *base = &platform->base; + Sprite *s = &platform->s; + + base->regionX = regionX; + base->regionY = regionY; + base->me = me; + base->meX = me->x; + base->id = id; + SET_MAP_ENTITY_INITIALIZED(me); + + platform->unk3C = 0; + + // @BUG Loads the -2 set through SET_MAP_ENTITY_INITIALIZED + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CRUMBLE_PLATFORM); + +#ifdef BUG_FIX + // Prevent overflow + s->graphics.anim = sPlatformCrumblingAnims[gCurrentLevel % ARRAY_COUNT(sPlatformCrumblingAnims)]; +#else + s->graphics.anim = sPlatformCrumblingAnims[gCurrentLevel]; +#endif + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x2000; + + if (me->d.sData[0] != 0) { + s->frameFlags |= 0x400; + } + + UpdateSpriteAnimation(s); +} + +void Task_PlatformCrumbling(void) +{ + PlatformCrumbling *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer) & 0x8) || +#if (GAME == GAME_SA1) + ((gNumSingleplayerCharacters == 2) && Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner) & 0x8) +#endif + ) { + gCurTask->main = Task_8025008; + platform->unk3C = 0; + } + + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + platform->unk3C = 0; + gCurTask->main = Task_8025190; +#if (GAME == GAME_SA1) + m4aSongNumStart(SE_CRUMBLING_PLATFORM); +#endif + } + + if ((worldX > gCamera.x + DISPLAY_WIDTH + (CAM_REGION_WIDTH / 2) || (worldX < gCamera.x - (CAM_REGION_WIDTH / 2)) + || (worldY > gCamera.y + DISPLAY_HEIGHT + (CAM_REGION_WIDTH / 2)) || (worldY < gCamera.y - (CAM_REGION_WIDTH / 2))) + && (IS_OUT_OF_CAM_RANGE(s->x, s->y))) { + me->x = platform->base.meX; + TaskDestroy(gCurTask); + } else { + DisplaySprite(s); + } +} + +void Task_8025008(void) +{ + PlatformCrumbling *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer); +#if (GAME == GAME_SA1) + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner); +#endif + + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + platform->unk3C = 0; + gCurTask->main = Task_8025190; +#if (GAME == GAME_SA1) + m4aSongNumStart(SE_CRUMBLING_PLATFORM); +#endif + } else if (platform->unk3C++ > 30) { + platform->unk3C = 0; + gCurTask->main = Task_8025190; +#if (GAME == GAME_SA1) + m4aSongNumStart(SE_CRUMBLING_PLATFORM); + + if (IS_MULTI_PLAYER) { + { + RoomEvent_PlatformChange *roomEvent; + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLATFORM_CHANGE; + roomEvent->x = platform->base.regionX; + roomEvent->y = platform->base.regionY; + roomEvent->id = platform->base.id; + roomEvent->action = 1; + } + } +#endif + } + + if ((worldX > gCamera.x + DISPLAY_WIDTH + (CAM_REGION_WIDTH / 2) || (worldX < gCamera.x - (CAM_REGION_WIDTH / 2)) + || (worldY > gCamera.y + DISPLAY_HEIGHT + (CAM_REGION_WIDTH / 2)) || (worldY < gCamera.y - (CAM_REGION_WIDTH / 2))) + && (IS_OUT_OF_CAM_RANGE(s->x, s->y))) { + me->x = platform->base.meX; + TaskDestroy(gCurTask); + } else { + DisplaySprite(s); + } +} + +void Task_8025190(void) +{ + PlatformCrumbling *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + s16 worldX, worldY; + s16 otherPos; + u8 r6, x, y; + const u16 *oam_ptr; + const u16 *oam; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + otherPos = (gCamera.y - worldY) + DISPLAY_HEIGHT; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + platform->unk3C++; + + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer); +#if (GAME == GAME_SA1) + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner); +#endif + + if (worldX > gCamera.x + DISPLAY_WIDTH + (CAM_REGION_WIDTH / 2) || (worldX < gCamera.x - (CAM_REGION_WIDTH / 2))) { + if ((u16)(s->x + (CAM_REGION_WIDTH / 2)) > (u16)(DISPLAY_WIDTH + CAM_REGION_WIDTH)) { + me->x = platform->base.meX; + TaskDestroy(gCurTask); + return; + } + } + + oam_ptr = gRefSpriteTables->oamData[s->graphics.anim]; + oam = &oam_ptr[s->dimensions->oamIndex * 3]; + + r6 = 0; + for (y = 0; y < 4; y++) { + for (x = 0; x < 8; r6++, x++) { + s16 r4; + OamData *pointer; + s16 value = -31; + value = r6 + value + platform->unk3C; + + if (value > 0) { + if (r6 == 0 && value == 1) { + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && gPlayer.stoodObj == s) { + gPlayer.moveState = ((gPlayer.moveState & (~MOVESTATE_STOOD_ON_OBJ)) | MOVESTATE_IN_AIR); + } +#if (GAME == GAME_SA1) + if (gNumSingleplayerCharacters == 2) { + if ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s)) { + gPartner.moveState = ((gPartner.moveState & (~MOVESTATE_STOOD_ON_OBJ)) | MOVESTATE_IN_AIR); + } + } +#endif + gCurTask->main = Task_8025400; + } + + r4 = (((((s16)value * 42) * (s16)value) << 8) >> 16); + + if (r4 > otherPos) { + if (r6 == 0) + TaskDestroy(gCurTask); + return; + } + } else { + r4 = 0; + } + + pointer = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + if (iwram_end == pointer) + return; + +#if !EXTENDED_OAM + pointer->all.attr0 = ((s16)(r4 + ((y * TILE_WIDTH) + s->y))) & 0xFF; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + pointer->all.attr1 = ((s->x - x * TILE_WIDTH - 8) & 0x1FF) | 0x1000; + } else { + pointer->all.attr1 = (s->x + x * TILE_WIDTH) & 0x1FF; + } +#else + pointer->split.y = (r4 + ((y * TILE_WIDTH) + s->y)); + pointer->split.affineMode = 0; + pointer->split.objMode = 0; + pointer->split.mosaic = 0; + pointer->split.bpp = 0; + pointer->split.shape = 0; + + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + pointer->split.x = (s->x - x * TILE_WIDTH - 8); + pointer->split.matrixNum = 0x8; // x-flip, actually + } else { + pointer->split.x = (s->x + x * TILE_WIDTH); + } +#endif + + pointer->all.attr2 + = (((oam[2] + s->palId) & ~0xFFF) | (SPRITE_FLAG_GET(s, PRIORITY) << 10) | (u16)(GET_TILE_NUM(s->graphics.dest) + r6)); + } + } +} + +void Task_8025400(void) +{ + PlatformCrumbling *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + + s16 worldX, worldY; + s16 otherPos; + u8 r6, x, y; + const u16 *oam_ptr; + const u16 *oam; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + otherPos = (gCamera.y - worldY) + DISPLAY_HEIGHT; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + platform->unk3C++; + + if (worldX > gCamera.x + DISPLAY_WIDTH + (CAM_REGION_WIDTH / 2) || (worldX < gCamera.x - (CAM_REGION_WIDTH / 2))) { + if ((u16)(s->x + (CAM_REGION_WIDTH / 2)) > (u16)(DISPLAY_WIDTH + CAM_REGION_WIDTH)) { + me->x = platform->base.meX; + TaskDestroy(gCurTask); + return; + } + } + + oam_ptr = gRefSpriteTables->oamData[s->graphics.anim]; + oam = &oam_ptr[s->dimensions->oamIndex * 3]; + + r6 = 0; + for (y = 0; y < 4; y++) { + for (x = 0; x < 8; r6++, x++) { + s16 r4; + OamData *pointer; + s16 value = -31; + value = r6 + value + platform->unk3C; + + r4 = (((((s16)value * 42) * (s16)value) << 8) >> 16); + + if (r4 > otherPos) { + if (r6 == 0) { + TaskDestroy(gCurTask); + me->x = platform->base.meX; + } + return; + } + + pointer = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + if (iwram_end == pointer) { + return; + } + + pointer->all.attr0 = ((s16)(r4 + ((y * TILE_WIDTH) + s->y))) & 0xFF; + + if (s->frameFlags & 0x400) { + pointer->all.attr1 = ((s->x - x * TILE_WIDTH - 8) & 0x1FF) | 0x1000; + } else { + pointer->all.attr1 = (s->x + x * TILE_WIDTH) & 0x1FF; + } + + pointer->all.attr2 + = (((oam[2] + s->palId) & ~0xFFF) | ((s->frameFlags & 0x3000) >> 2) | (u16)(GET_TILE_NUM(s->graphics.dest) + r6)); + } + } +} + +void TaskDestructor_PlatformCrumbling(struct Task *t) +{ + PlatformCrumbling *platform = TASK_DATA(t); + VramFree(platform->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/platform_spiked.c b/sa1/src/game/interactables/platform_spiked.c new file mode 100644 index 0000000000..eefcd1b4e1 --- /dev/null +++ b/sa1/src/game/interactables/platform_spiked.c @@ -0,0 +1,396 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s32 qUnk48; + /* 0x4C */ u16 unk4C; + /* 0x4E */ u8 unk4E; + /* 0x4F */ u8 unk4F; + /* 0x50 */ u8 facingUp; +} PlatformSpiked; + +void Task_Platform_Spiked(void); +void TaskDestructor_Platform_Spiked(struct Task *t); +bool32 sub_80805C8(Sprite *s, s32 worldX, s32 worldY, Rect8 *rect, Player *p); + +void CreateEntity_Platform_Spiked(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Platform_Spiked, sizeof(PlatformSpiked), 0x2000, 0, TaskDestructor_Platform_Spiked); + PlatformSpiked *platform = TASK_DATA(t); + Sprite *s = &platform->s; + + platform->base.regionX = regionX; + platform->base.regionY = regionY; + platform->base.me = me; + platform->base.meX = me->x; + platform->base.id = id; + + platform->qUnk3C = 0; + platform->qUnk40 = 0; + platform->unk4F = 0; + platform->unk4E = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + platform->qUnk44 = 4; + platform->unk4C = 0; + platform->qUnk48 = 0; + } else { + platform->qUnk44 = 4; + platform->unk4C = 0x80; + platform->qUnk48 = 0; + } + } else { + if (me->d.sData[1] >= 0) { + platform->qUnk44 = 0; + platform->qUnk48 = 4; + platform->unk4C = 0; + } else { + platform->qUnk44 = 0; + platform->qUnk48 = 4; + platform->unk4C = 0x80; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_3) || (gCurrentLevel == ACT_CHAO_HUNT_C)) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SPIKED_3); + s->graphics.anim = SA1_ANIM_PLATFORM_SPIKED_3; + s->variant = 0; + platform->facingUp = 1; + } else { + if (me->d.sData[0] == 0) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SPIKED_5_UP); + s->graphics.anim = SA1_ANIM_PLATFORM_SPIKED_5_UP; + s->variant = 0; + platform->facingUp = 1; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SPIKED_5_DOWN); + s->graphics.anim = SA1_ANIM_PLATFORM_SPIKED_5_DOWN; + s->variant = 0; + platform->facingUp = 0; + } + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_Platform_Spiked(void) +{ + Sprite *s; + PlatformSpiked *platform; + CamCoord worldX, worldY; + MapEntity *me; + s32 diff; + s32 qUnk4A; + s32 qPrevWorldX, qPrevWorldY; + u32 flags; + s32 res; + s32 i; + + s32 sp20 = 0; + s32 sp24 = 0; + + platform = TASK_DATA(gCurTask); + s = &platform->s; + me = platform->base.me; + + // NOTE: Non-match Ripped from Task_PlatformThin() in platform_thin.c + if (platform->qUnk44 != 0) { +#ifndef NON_MATCHING + register s32 diff asm("r5") = platform->qUnk3C; +#else + s32 diff = platform->qUnk3C; +#endif + platform->qUnk3C = (((me->d.uData[2] << 11) * SIN(platform->qUnk44 * (((gStageTime + platform->unk4C) & 0xFF)) & 0x3FF)) >> 14); + diff = platform->qUnk3C - diff; + asm("" ::"r"(diff)); + sp20 = diff; + } + + if (platform->qUnk48 != 0) { +#ifndef NON_MATCHING + register s32 diff asm("r5") = platform->qUnk40; +#else + s32 diff = platform->qUnk40; +#endif + platform->qUnk40 = (((me->d.uData[3] << 11) * SIN(platform->qUnk48 * (((gStageTime + platform->unk4C) & 0xFF)) & 0x3FF)) >> 14); + diff = platform->qUnk40 - diff; + asm("" ::"r"(diff)); + sp24 = diff; + } + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x + I(platform->qUnk3C); + s->y = worldY - gCamera.y + I(platform->qUnk40); + + i = 0; + do { + if ((!(PLAYER(i).moveState & MOVESTATE_DEAD)) && !(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) { + qPrevWorldX = PLAYER(i).qWorldX; + + if (GetBit(platform->unk4E, i)) { + PLAYER(i).qWorldX += sp20; + PLAYER(i).qWorldY += sp24 + Q(1); + + if (sp20 > Q(0)) { + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) + 4, I(PLAYER(i).qWorldY) + 0, PLAYER(i).layer, +8, + SA2_LABEL(sub_801EB44)); + + if (res < 0) { + PLAYER(i).qWorldX += Q(res); + } + } else { + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) + 0, I(PLAYER(i).qWorldY) + 0, PLAYER(i).layer, -8, + SA2_LABEL(sub_801EB44)); + + if (res < 0) { + PLAYER(i).qWorldX -= Q(res); + } + } + + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldY) - 5, I(PLAYER(i).qWorldX) + 0, PLAYER(i).layer, -8, + SA2_LABEL(sub_801EC3C)); + + if (res < 0) { + if (platform->qUnk48 != Q(0)) { + PLAYER(i).qWorldX = qPrevWorldX; + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + } + } else { + if (!Coll_Player_Entity_Intersection(s, worldX + I(platform->qUnk3C), worldY + I(platform->qUnk40), &PLAYER(i))) { + ClearBit(platform->unk4E, i); + } + } + } else { + // // !GetBit(platform->unk4E, i) + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), (1 - PLAYER(i).spriteOffsetY), +(PLAYER(i).spriteOffsetX + 5), + (PLAYER(i).spriteOffsetY - 1) }; + + sub_80805C8(s, worldX + I(platform->qUnk3C), worldY + I(platform->qUnk40), (Rect8 *)&arr[0], &PLAYER(i)); + + qPrevWorldX = PLAYER(i).qWorldX; + qPrevWorldY = PLAYER(i).qWorldY; + + flags = sub_80096B0(s, worldX + I(platform->qUnk3C), worldY + I(platform->qUnk40), &PLAYER(i)); + + if (flags & 0x70000) { + SetBit(platform->unk4F, i); + + if (flags & 0x40000) { + if (platform->qUnk44 != Q(0)) { + if (gInput & DPAD_LEFT) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).qWorldX -= Q(2); + PLAYER(i).moveState |= MOVESTATE_20; + } + } + + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) + 0, I(PLAYER(i).qWorldY) + 0, PLAYER(i).layer, -8, + SA2_LABEL(sub_801EB44)); + + if (res < 0) { + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + } + } + } else if (flags & 0x20000) { + if (platform->qUnk44 != Q(0)) { + if (gInput & DPAD_RIGHT) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).qWorldX += Q(2); + PLAYER(i).moveState |= MOVESTATE_20; + } + } + + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) + 0, I(PLAYER(i).qWorldY) + 0, PLAYER(i).layer, +8, + SA2_LABEL(sub_801EB44)); + + if (res < 0) { + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + } + } + } else { + if (platform->qUnk48 != Q(0)) { + PLAYER(i).qWorldX = qPrevWorldX; + + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).qWorldX = qPrevWorldX; + PLAYER(i).qWorldY = qPrevWorldY; + + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + } else { + if (!platform->facingUp) { + Coll_DamagePlayer(&PLAYER(i)); + } + } + } else { + if (!platform->facingUp) { + Coll_DamagePlayer(&PLAYER(i)); + } + } + } + } else { + if (GetBit(platform->unk4F, i)) { + if (PLAYER(i).charState == CHARSTATE_14) { + ClearBit(platform->unk4F, i); + PLAYER(i).qSpeedGround = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_20; + + if (PLAYER(i).charState == CHARSTATE_14) { + if (PLAYER(i).character != CHARACTER_AMY) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } else { + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + PLAYER(i).charState = CHARSTATE_85; + } + } + } else { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } else { + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + PLAYER(i).charState = CHARSTATE_85; + } + } + } + } + } + } + } + } + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (PLAYER(i).qSpeedAirY >= Q(0)) { + if (worldY + I(platform->qUnk40) > I(PLAYER(i).qWorldY)) { + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), (1 - PLAYER(i).spriteOffsetY), +(PLAYER(i).spriteOffsetX + 5), + (PLAYER(i).spriteOffsetY - 1) }; + u32 flags; + + sub_80805C8(s, worldX + I(platform->qUnk3C), worldY + I(platform->qUnk40), (Rect8 *)&arr[0], &PLAYER(i)); + + flags = sub_80096B0(s, worldX + I(platform->qUnk3C), worldY + I(platform->qUnk40) - 8, &PLAYER(i)); + + if (flags & 0x8) { + if (platform->facingUp) { + Coll_DamagePlayer(&PLAYER(i)); + } else { + SetBit(platform->unk4E, i); + PLAYER(i).qWorldY += Q(8); + } + } + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +// (99.64%) https://decomp.me/scratch/E9idQ +NONMATCH("asm/non_matching/game/interactables/platform_spiked__sub_80805C8.inc", + bool32 sub_80805C8(Sprite *s, s32 worldX, s32 worldY, Rect8 *rect, Player *p)) +{ + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*rect))) { + s32 res; + s32 valX = (worldX + s->hitboxes[0].b.left - rect->right + 8); + + if (I(p->qWorldX) <= valX) { + p->qWorldX = Q(worldX + s->hitboxes[0].b.left - rect->right); + if (p->qSpeedAirX > Q(0)) { + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + } + } else { + s32 valX = (worldX + s->hitboxes[0].b.right - rect->left); + + if (I(p->qWorldX) >= valX - 8) { + p->qWorldX = Q(valX); + + if (p->qSpeedAirX < 0) { + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + } + } else { + return FALSE; + } + } + res = SA2_LABEL(sub_801E4E4)(I(p->qWorldY) + 9, I(p->qWorldX), p->layer, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + res = SA2_LABEL(sub_801E4E4)(I(p->qWorldY), I(p->qWorldX), p->layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + + return TRUE; + } + + return FALSE; +} +END_NONMATCH + +void TaskDestructor_Platform_Spiked(struct Task *t) +{ + PlatformSpiked *platform = TASK_DATA(t); + VramFree(platform->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/platform_square.c b/sa1/src/game/interactables/platform_square.c new file mode 100644 index 0000000000..da972303ed --- /dev/null +++ b/sa1/src/game/interactables/platform_square.c @@ -0,0 +1,643 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x48 */ s32 qUnk3C; // Barrel of Doom movement delta? + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ u16 unk48; + /* 0x4A */ s16 unk4A; + /* 0x4C */ s16 unk4C; + /* 0x4E */ u8 unk4E; + /* 0x4F */ u8 unk4F; + /* 0x50 */ u8 unk50; +} PlatformSq; + +void Task_Platform_Square(void); +void TaskDestructor_Platform_Square(struct Task *t); +void Task_BarrelOfDoomMini(void); +bool32 sub_807E914(Sprite *s, s32 worldX, s32 worldY, Rect8 *unk08, Player *p); + +void CreateEntity_Platform_Square(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); + struct Task *t = TaskCreate(Task_Platform_Square, sizeof(PlatformSq), 0x2000, 0, TaskDestructor_Platform_Square); + PlatformSq *platform = TASK_DATA(t); + Sprite *s = &platform->s; + CamCoord worldX, worldY; + + platform->base.regionX = regionX; + platform->base.regionY = regionY; + platform->base.me = me; + platform->base.meX = me->x; + platform->base.id = id; + + platform->qUnk40 = 0; + platform->qUnk44 = 0; + platform->unk4F = 0; + platform->unk4E = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + platform->unk4A = 4; + platform->unk48 = 0; + platform->unk4C = 0; + } else { + platform->unk4A = 4; + platform->unk48 = 0x80; + platform->unk4C = 0; + } + platform->unk50 = me->d.sData[1]; + } else { + if (me->d.sData[1] >= 0) { + platform->unk4A = 0; + platform->unk4C = 4; + platform->unk48 = 0; + } else { + platform->unk4A = 0; + platform->unk4C = 4; + platform->unk48 = 0x80; + } + platform->unk50 = me->d.sData[0]; + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + if ((zone == ZONE_3) || (gCurrentLevel == ACT_CHAO_HUNT_C)) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SQU_3); + s->graphics.anim = SA1_ANIM_PLATFORM_SQU_3; + s->variant = 0; + } else if ((zone == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + if (((gCurrentLevel & 0x1) != ACT_1) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + // Act 2 + if (platform->unk50) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_LONG_6_2); + s->graphics.anim = SA1_ANIM_PLATFORM_LONG_6_2; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SQU_6_2); + s->graphics.anim = SA1_ANIM_PLATFORM_SQU_6_2; + s->variant = 0; + } + } else { + // Act 1 + if (platform->unk50) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_LONG_6_1); + s->graphics.anim = SA1_ANIM_PLATFORM_LONG_6_1; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SQU_6_1); + s->graphics.anim = SA1_ANIM_PLATFORM_SQU_6_1; + s->variant = 0; + } + } + } else if (zone == ZONE_5) { + if (platform->unk50) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_LONG_H_5); + s->graphics.anim = SA1_ANIM_PLATFORM_LONG_H_5; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_LONG_V_5); + s->graphics.anim = SA1_ANIM_PLATFORM_LONG_V_5; + s->variant = 0; + } + } else if (zone == ZONE_4) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SQU_4); + s->graphics.anim = SA1_ANIM_PLATFORM_SQU_4; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_SQU_3); + s->graphics.anim = SA1_ANIM_PLATFORM_SQU_3; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); +} + +void Task_Platform_Square(void) +{ + Sprite *s; + CamCoord worldX, worldY; + PlatformSq *platform; + MapEntity *me; + s16 screenX, screenY; + s32 qPrevWorldX; + s32 i; + s32 sp20 = 0; + s32 sp24 = 0; + s32 sp28 = 0; + s32 sp2C; + s32 res2, r3, r4, r6; + s32 unk4A, unk4C; + + platform = TASK_DATA(gCurTask); + s = &platform->s; + me = platform->base.me; + + if (platform->unk4A != 0) { + s32 prevUnk40 = platform->qUnk40; + s32 r3 = (me->d.uData[2] << 11); + s32 r0; + + r0 = ((r3 * SIN(((platform->unk4A * ((gStageTime + platform->unk48) & 0xFF)) & ONE_CYCLE))) >> 14); + platform->qUnk40 = r0; + prevUnk40 = r6 = r0 -= prevUnk40; + sp20 = prevUnk40; + } + + if (platform->unk4C != 0) { + s32 prevUnk44 = platform->qUnk44; + s32 r3 = (me->d.uData[3] << 11); + s32 r0; + + r0 = (r3 * SIN(((platform->unk4C * ((gStageTime + platform->unk48) & 0xFF)) & ONE_CYCLE))) >> 14; + platform->qUnk44 = r0; + prevUnk44 = r6 = r0 -= prevUnk44; + sp24 = prevUnk44; + } + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = screenX = worldX - gCamera.x + I(platform->qUnk40); + s->y = screenY = worldY - gCamera.y + I(platform->qUnk44); + + i = 0; + do { + if (PLAYER(i).moveState & MOVESTATE_DEAD) { + continue; + } + + if (PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE) { + continue; + } + + qPrevWorldX = PLAYER(i).qWorldX; + + if (GetBit(platform->unk4E, i)) { + PLAYER(i).qWorldX += sp20; + PLAYER(i).qWorldY += sp24 + Q(1); + + if (sp20 > Q(0)) { + r4 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX) + (PLAYER(i).spriteOffsetX + 2), I(PLAYER(i).qWorldY), PLAYER(i).layer, +8, + NULL, SA2_LABEL(sub_801ED24)); + + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX) + (PLAYER(i).spriteOffsetX + 2), + I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, PLAYER(i).layer, +8, NULL, + SA2_LABEL(sub_801ED24)); + + if (res2 > r4) { + res2 = r4; + } + + if (res2 < 0) { + PLAYER(i).qWorldX += Q(res2); + } + } else { + r4 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX) - (PLAYER(i).spriteOffsetX + 2), I(PLAYER(i).qWorldY), PLAYER(i).layer, -8, + NULL, SA2_LABEL(sub_801ED24)); + + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX) - (PLAYER(i).spriteOffsetX + 2), + I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, PLAYER(i).layer, -8, NULL, + SA2_LABEL(sub_801ED24)); + + if (res2 > r4) { + res2 = r4; + } + + if (res2 < 0) { + PLAYER(i).qWorldX -= Q(res2); + } + } + + r4 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, I(PLAYER(i).qWorldX) - PLAYER(i).spriteOffsetX, + PLAYER(i).layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, I(PLAYER(i).qWorldX) + PLAYER(i).spriteOffsetX, + PLAYER(i).layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + if (res2 > r4) { + res2 = r4; + } + + if (res2 < 0) { + if (platform->unk4C != 0) { + PLAYER(i).qWorldX = qPrevWorldX; + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + } + } else { + if (!Coll_Player_Entity_Intersection(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), &PLAYER(i))) { + ClearBit(platform->unk4E, i); + } + } + } else { + // !GetBit(platform->unk4E, i) + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), (1 - PLAYER(i).spriteOffsetY), +(PLAYER(i).spriteOffsetX + 5), + (PLAYER(i).spriteOffsetY - 1) }; + + qPrevWorldX = PLAYER(i).qWorldX; + sp2C = PLAYER(i).qWorldY; + + // TODO/MATCHING: Maybe this isn't the right place for this check? + r4 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, I(PLAYER(i).qWorldX) - PLAYER(i).spriteOffsetX, + PLAYER(i).layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, I(PLAYER(i).qWorldX) + PLAYER(i).spriteOffsetX, + PLAYER(i).layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + if (res2 > r4) { + res2 = r4; + } + + if (res2 < 0) { + sub_807E914(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), (Rect8 *)&arr, &PLAYER(i)); + } else { + sp28 = sub_80096B0(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), &PLAYER(i)); + } + if (sp28 & 0x170000) { + SetBit(platform->unk4F, i); + + if (sp28 & 0x40000) { + if (platform->unk4A != 0) { + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX) + PLAYER(i).spriteOffsetX, I(PLAYER(i).qWorldY), PLAYER(i).layer, + +8, NULL, SA2_LABEL(sub_801ED24)); + + if (res2 <= 0) { + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + } else { + if (PLAYER(i).heldInput & DPAD_LEFT) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).qWorldX -= Q(1); + PLAYER(i).moveState |= MOVESTATE_20; + } + } + } + } + } else if (sp28 & 0x20000) { + if (platform->unk4A != 0) { + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX) - PLAYER(i).spriteOffsetX, I(PLAYER(i).qWorldY), PLAYER(i).layer, + -8, NULL, SA2_LABEL(sub_801ED24)); + + if (res2 < 0) { + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + } else { + if (PLAYER(i).heldInput & DPAD_RIGHT) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).qWorldX += Q(1); + PLAYER(i).moveState |= MOVESTATE_20; + } + } + } + } + } else if (sp28 & 0x10000) { + PLAYER(i).qWorldX = qPrevWorldX; + + if (platform->unk4C != 0) { + r4 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) + PLAYER(i).spriteOffsetY, + I(PLAYER(i).qWorldX) - PLAYER(i).spriteOffsetX, PLAYER(i).layer, +8, NULL, + SA2_LABEL(sub_801EE64)); + + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) + PLAYER(i).spriteOffsetY, + I(PLAYER(i).qWorldX) + PLAYER(i).spriteOffsetX, PLAYER(i).layer, +8, NULL, + SA2_LABEL(sub_801EE64)); + + if (res2 > r4) { + res2 = r4; + } + + if (res2 <= 0) { + s32 y = worldY + I(platform->qUnk44) + s->hitboxes[0].b.bottom; + + if (y < I(PLAYER(i).qWorldY)) { + PLAYER(i).qWorldX = qPrevWorldX; + PLAYER(i).qWorldY = sp2C; + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + } + } + } + } else if (platform->unk4C != 0) { + r4 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, + I(PLAYER(i).qWorldX) - PLAYER(i).spriteOffsetX, PLAYER(i).layer, -8, NULL, + SA2_LABEL(sub_801EE64)); + + res2 = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - PLAYER(i).spriteOffsetY, + I(PLAYER(i).qWorldX) + PLAYER(i).spriteOffsetX, PLAYER(i).layer, -8, NULL, + SA2_LABEL(sub_801EE64)); + + if (res2 > r4) { + res2 = r4; + } + + if (res2 < 0) { + s32 y = worldY + I(platform->qUnk44) + s->hitboxes[0].b.bottom; + + if (y < I(PLAYER(i).qWorldY)) { + PLAYER(i).qWorldX = qPrevWorldX; + PLAYER(i).qWorldY = sp2C; + PLAYER(i).moveState &= ~MOVESTATE_20; + PLAYER(i).moveState |= MOVESTATE_DEAD; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + } + } + } + } else { + if (GetBit(platform->unk4F, i)) { + if (PLAYER(i).charState == CHARSTATE_14) { + ClearBit(platform->unk4F, i); + PLAYER(i).qSpeedGround = Q(0); + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_20; + + if (PLAYER(i).charState == CHARSTATE_14) { + if (PLAYER(i).character != CHARACTER_AMY) { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } else { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + } else { + if (!(PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + PLAYER(i).charState = CHARSTATE_WALK_A; + } else { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } + } + } + } + } + } + } + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (PLAYER(i).qSpeedAirY >= Q(0)) { + if (worldY + I(platform->qUnk44) > I(PLAYER(i).qWorldY)) { + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), (1 - PLAYER(i).spriteOffsetY), +(PLAYER(i).spriteOffsetX + 5), + (PLAYER(i).spriteOffsetY - 1) }; + + sub_807E914(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), (Rect8 *)&arr[0], &PLAYER(i)); + + qPrevWorldX = PLAYER(i).qWorldX; + + sp28 = sub_80096B0(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), &PLAYER(i)); + + if (sp28 & 0x8) { + SetBit(platform->unk4E, i); + PLAYER(i).qWorldY += Q(1); + } else if (sp28 & 0x10000) { + PLAYER(i).qWorldX = qPrevWorldX; + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateEntity_BarrelOfDoomMini(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); + struct Task *t = TaskCreate(Task_BarrelOfDoomMini, sizeof(PlatformSq), 0x2000, 0, TaskDestructor_Platform_Square); + PlatformSq *platform = TASK_DATA(t); + Sprite *s = &platform->s; + CamCoord worldX, worldY; + + platform->base.regionX = regionX; + platform->base.regionY = regionY; + platform->base.me = me; + platform->base.meX = me->x; + platform->base.id = id; + + platform->qUnk40 = 0; + platform->qUnk44 = 0; + platform->unk4E = 0; + platform->qUnk3C = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BARREL_OF_DOOM_MINI); + s->graphics.anim = SA1_ANIM_BARREL_OF_DOOM_MINI; + s->variant = 0; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); +} + +// (96.69%) https://decomp.me/scratch/jpuHI +NONMATCH("asm/non_matching/game/interactables/platform_sq__Task_BarrelOfDoomMini.inc", void Task_BarrelOfDoomMini(void)) +{ + PlatformSq *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + CamCoord worldX, worldY; + s32 i; + s32 qSpeedsY[NUM_SINGLEPLAYER_CHARS_MAX]; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + if (platform->qUnk44 != Q(0)) { + if (platform->qUnk44 < 0) { + platform->qUnk3C += Q(48. / 256.); + } else { + platform->qUnk3C -= Q(48. / 256.); + } + } + // _0807E4F0 + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + I(platform->qUnk44); + + i = 0; + do { + // _0807E526_loop + qSpeedsY[i] = PLAYER(i).qSpeedAirY; + + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == s)) { + // _0807E586 + PLAYER(i).qSpeedAirY = Q(0); + PLAYER(i).qWorldY += platform->qUnk3C; + // _0807E5AC + if ((PLAYER(i).frameInput & gPlayerControls.attack) && (PLAYER(i).heldInput & DPAD_DOWN)) { + // _0807E5E6 + if (PLAYER(i).character == CHARACTER_AMY) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).qSpeedAirY = -Q(6); + } + } else if ((PLAYER(i).frameInput & gPlayerControls.jump) && (PLAYER(i).heldInput & DPAD_DOWN)) { + // _0807E638 + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + } else { + // _0807E6C0 + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } else { + // _0807E6D8 + if (PLAYER(i).frameInput & gPlayerControls.jump) { + PLAYER(i).qSpeedAirY = (platform->qUnk3C >> 1) - Q(4); + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } else { + // _0807E72E + PLAYER(i).qWorldY += Q(8); + PLAYER(i).qSpeedAirY = 1; + // _0807E756 + if (!Coll_Player_PlatformCrumbling(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), &PLAYER(i))) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).qWorldY -= Q(8); + } + + PLAYER(i).qSpeedAirY = Q(0); + } + } + } else { + // _0807E7D4 + if (Coll_Player_PlatformCrumbling(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), &PLAYER(i)) & COLL_FLAG_8) { + platform->qUnk3C += Div(qSpeedsY[i] * 6, 10); + } + } + } while (++i < gNumSingleplayerCharacters); + // _0807E83A + + // platform->qUnk3C *= 99% + platform->qUnk3C = Div(platform->qUnk3C * 9900, 10000); + + if ((platform->qUnk3C > -48 && platform->qUnk3C < +48) && ((platform->qUnk44 > -Q(3))) && ((platform->qUnk44 < +Q(3)))) { + { + platform->qUnk3C = Q(0); + } + } + + // _0807E864 + platform->qUnk44 += platform->qUnk3C; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} +END_NONMATCH + +// (99.24%) https://decomp.me/scratch/5MxXq +NONMATCH("asm/non_matching/game/interactables/platform_sq__sub_807E914.inc", + bool32 sub_807E914(Sprite *s, s32 worldX, s32 worldY, Rect8 *rect, Player *p)) +{ + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*rect))) { + // _0807E9AA + s32 playerY = I(p->qWorldY); + s32 res; + + if (playerY > (worldY + s->hitboxes[0].b.top - rect->bottom + 2)) { + s32 val = ((worldX + (s->hitboxes[0].b.left) - rect->right) + 8); + s32 playerX = I(p->qWorldX); + s32 qPlayerX; + + if (playerX <= val) { + p->qWorldX = qPlayerX = Q(worldX + (s->hitboxes[0].b.left) - rect->right); + + res = SA2_LABEL(sub_801E4E4)(playerY + 9, I(p->qWorldX), p->layer, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + res = SA2_LABEL(sub_801E4E4)(I(p->qWorldY), I(p->qWorldX), p->layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + + return TRUE; + } else if (playerX >= (worldX + s->hitboxes[0].b.right - rect->left) - 7) { + qPlayerX = ((worldX + s->hitboxes[0].b.right - rect->left) + 1); + p->qWorldX = Q(qPlayerX); + + res = SA2_LABEL(sub_801E4E4)(playerY + 9, I(p->qWorldX), p->layer, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + res = SA2_LABEL(sub_801E4E4)(I(p->qWorldY), I(p->qWorldX), p->layer, -8, NULL, SA2_LABEL(sub_801EE64)); + + if (res < 0) { + p->qWorldY += Q(res); + } + + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + + return TRUE; + } + } + } + + return FALSE; +} +END_NONMATCH + +void TaskDestructor_Platform_Square(struct Task *t) +{ + PlatformSq *platform = TASK_DATA(t); + VramFree(platform->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/platform_thin.c b/sa1/src/game/interactables/platform_thin.c new file mode 100644 index 0000000000..20a4386ee0 --- /dev/null +++ b/sa1/src/game/interactables/platform_thin.c @@ -0,0 +1,453 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s16 qUnk48; + /* 0x4A */ s16 qUnk4A; + /* 0x4C */ u16 unk4C; +} PlatformThin; + +void Task_PlatformThin(void); +void Task_PlatformThin_Falling(void); +void Task_802473C(void); +void Task_802492C(void); +void TaskDestructor_PlatformThin(struct Task *t); + +const AnimId sPlatformThinAnims[NUM_LEVEL_IDS] = { + SA1_ANIM_PLATFORM_HORZ_1, SA1_ANIM_PLATFORM_HORZ_1, // Zone 1 + SA1_ANIM_PLATFORM_HORZ_2, SA1_ANIM_PLATFORM_HORZ_2, // Zone 2 + SA1_ANIM_PLATFORM_HORZ_3, SA1_ANIM_PLATFORM_HORZ_3, // Zone 3 + SA1_ANIM_PLATFORM_HORZ_4, SA1_ANIM_PLATFORM_HORZ_4, // Zone 4 + SA1_ANIM_PLATFORM_HORZ_5, SA1_ANIM_PLATFORM_HORZ_5, // Zone 5 + SA1_ANIM_PLATFORM_HORZ_6_1, SA1_ANIM_PLATFORM_HORZ_6_2, // Zone 6 + SA1_ANIM_PLATFORM_HORZ_7_1, SA1_ANIM_PLATFORM_HORZ_6_1, // Zone 7 + SA1_ANIM_PLATFORM_HORZ_1, SA1_ANIM_PLATFORM_HORZ_2, // MP 1, 2 + SA1_ANIM_PLATFORM_HORZ_3, SA1_ANIM_PLATFORM_HORZ_6_2, // MP 3, 4 +}; + +void CreateEntity_PlatformThin(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PlatformThin, sizeof(PlatformThin), 0x2010, 0, TaskDestructor_PlatformThin); + PlatformThin *platform = TASK_DATA(t); + SpriteBase *base = &platform->base; + Sprite *s = &platform->s; + + base->regionX = regionX; + base->regionY = regionY; + base->me = me; + base->meX = me->x; + base->id = id; + + platform->qUnk40 = 0; + platform->qUnk44 = 0; + platform->unk4C = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + platform->qUnk48 = 4; + platform->unk3C = 0; + platform->qUnk4A = 0; + } else { + platform->qUnk48 = 4; + platform->unk3C = 0x80; + platform->qUnk4A = 0; + } + } else { + if (me->d.sData[1] >= 0) { + platform->qUnk48 = 0; + platform->qUnk4A = 4; + platform->unk3C = 0; + } else { + platform->qUnk48 = 0; + platform->qUnk4A = 4; + platform->unk3C = 0x80; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_HORZ_1); + + s->variant = 0; + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#ifdef BUG_FIX + // Prevent overflow + s->graphics.anim = sPlatformThinAnims[gCurrentLevel % ARRAY_COUNT(sPlatformThinAnims)]; +#else + s->graphics.anim = sPlatformThinAnims[gCurrentLevel]; +#endif + } else { + s->graphics.anim = SA1_ANIM_PLATFORM_HORZ_1; + } + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +// TODO: Fake-match +void Task_PlatformThin(void) +{ + s32 sp00 = 0; + s32 sp04 = 0; + s32 i = 0; + PlatformThin *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + CamCoord worldX, worldY; + s32 diff; + s32 qUnk4A; + + if (platform->qUnk48 != 0) { +#ifndef NON_MATCHING + register s32 diff asm("r5") = platform->qUnk40; +#else + s32 diff = platform->qUnk40; +#endif + platform->qUnk40 = (((me->d.uData[2] << 11) * SIN(platform->qUnk48 * (((gStageTime + platform->unk3C) & 0xFF)) & 0x3FF)) >> 14); + diff = platform->qUnk40 - diff; + asm("" ::"r"(diff)); + sp00 = diff; + } + + if (platform->qUnk4A != 0) { +#ifndef NON_MATCHING + register s32 diff asm("r5") = platform->qUnk44; +#else + s32 diff = platform->qUnk44; +#endif + platform->qUnk44 = (((me->d.uData[3] << 11) * SIN(platform->qUnk4A * (((gStageTime + platform->unk3C) & 0xFF)) & 0x3FF)) >> 14); + diff = platform->qUnk44 - diff; + asm("" ::"r"(diff)); + sp04 = diff; + } + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x + I(platform->qUnk40); + s->y = worldY - gCamera.y + I(platform->qUnk44); + + i = 0; + do { + Player *p = &PLAYER(i); + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->qWorldX += sp00; + + if (!GRAVITY_IS_INVERTED) { + p->qWorldY += +Q(1) + sp04; + } else { + p->qWorldY += -Q(2) + sp04; + } + } + + if (!(p->moveState & MOVESTATE_IA_OVERRIDE)) { + Coll_Player_PlatformCrumbling(s, worldX + I(platform->qUnk40), worldY + I(platform->qUnk44), p); + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (!(gPlayer.moveState & MOVESTATE_IA_OVERRIDE)) { + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) && (gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) + && (gPartner.stoodObj == s))) { + if (platform->unk4C != 0x100) { + platform->unk4C += 0x10; + } + } else { + if (platform->unk4C != 0) { + platform->unk4C -= 0x10; + } + } + + if (!GRAVITY_IS_INVERTED) { + s->y += SIN(platform->unk4C) >> 12; + } else { + s->y -= SIN(platform->unk4C) >> 12; + } + } + + DisplaySprite(s); +} + +void CreateEntity_PlatformThin_Falling(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PlatformThin_Falling, sizeof(PlatformThin), 0x2000, 0, TaskDestructor_PlatformThin); + PlatformThin *platform = TASK_DATA(t); + SpriteBase *base = &platform->base; + Sprite *s = &platform->s; + + base->regionX = regionX; + base->regionY = regionY; + base->me = me; + base->meX = me->x; + base->id = id; + + platform->qUnk40 = 0; + platform->qUnk44 = 0; + platform->unk4C = 0; + platform->qUnk48 = 0; + platform->qUnk4A = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_HORZ_1); + + s->variant = 0; + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#ifdef BUG_FIX + // Prevent overflow + s->graphics.anim = sPlatformThinAnims[gCurrentLevel % ARRAY_COUNT(sPlatformThinAnims)]; +#else + s->graphics.anim = sPlatformThinAnims[gCurrentLevel]; +#endif + } else { + s->graphics.anim = SA1_ANIM_PLATFORM_HORZ_1; + } + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_PlatformThin_Falling(void) +{ + s32 sp00 = 0; + s32 sp04 = 0; + s32 i = 0; + PlatformThin *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + CamCoord worldX, worldY; + s32 diff; + s32 qUnk4A; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer) & 0x8) + || (Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner) & 0x8)) { + gCurTask->main = Task_802473C; + platform->unk3C = 30; + } + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + platform->unk3C = 0; + gCurTask->main = Task_802492C; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + // if(!(gPlayer.moveState & MOVESTATE_IA_OVERRIDE)) + { + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) && (gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) + && (gPartner.stoodObj == s))) { + if (platform->unk4C != 0x100) { + platform->unk4C += 0x10; + } + } else { + if (platform->unk4C != 0) { + platform->unk4C -= 0x10; + } + } + + s->y += SIN(platform->unk4C) >> 12; + } + + DisplaySprite(s); +} + +void Task_802473C(void) +{ + s32 sp00 = 0; + s32 sp04 = 0; + s32 i = 0; + PlatformThin *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + MapEntity *me = platform->base.me; + CamCoord worldX, worldY; + s32 diff; + s32 qUnk4A; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer); + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner); + + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + platform->unk3C = 0; + gCurTask->main = Task_802492C; + } else if (--platform->unk3C == 0) { + platform->unk3C = 0; + gCurTask->main = Task_802492C; + + if (IS_MULTI_PLAYER) { + RoomEvent_PlatformChange *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLATFORM_CHANGE; + roomEvent->x = platform->base.regionX; + roomEvent->y = platform->base.regionY; + roomEvent->id = platform->base.id; + roomEvent->action = 1; + } + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + // if(!(gPlayer.moveState & MOVESTATE_IA_OVERRIDE)) + { + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) && (gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) + && (gPartner.stoodObj == s))) { + if (platform->unk4C != 0x100) { + platform->unk4C += 0x10; + } + } else { + if (platform->unk4C != 0) { + platform->unk4C -= 0x10; + } + } + + s->y += SIN(platform->unk4C) >> 12; + } + + DisplaySprite(s); +} + +void Task_802492C(void) +{ + s32 i = 0; + PlatformThin *platform = TASK_DATA(gCurTask); + Sprite *s = &platform->s; + CamCoord worldX, worldY; + MapEntity *me; + s32 diff; + me = platform->base.me; + + platform->qUnk4A += 42; + platform->qUnk44 += platform->qUnk4A; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + I(platform->qUnk44); + + platform->unk3C++; + + i = 0; + do { + Player *p = &PLAYER(i); + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + if (gPlayer.charState == 14) { + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.charState = 4; + } + + if (platform->unk3C > 32) { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->qSpeedAirY = platform->qUnk4A; + } else { + p->qWorldX += platform->qUnk48; + p->qWorldY += platform->qUnk4A + Q(1); + } + } + + if (platform->unk3C < 32) { + Coll_Player_PlatformCrumbling(s, worldX, worldY + I(platform->qUnk44), p); + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + // if(!(gPlayer.moveState & MOVESTATE_IA_OVERRIDE)) + { + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) && (gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) + && (gPartner.stoodObj == s))) { + if (platform->unk4C != 0x100) { + platform->unk4C += 0x10; + } + } else { + if (platform->unk4C != 0) { + platform->unk4C -= 0x10; + } + } + + s->y += SIN(platform->unk4C) >> 12; + } + + DisplaySprite(s); +} + +void TaskDestructor_PlatformThin(struct Task *t) +{ + PlatformThin *platform = TASK_DATA(t); + VramFree(platform->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/platforms_085_089.c b/sa1/src/game/interactables/platforms_085_089.c new file mode 100644 index 0000000000..6b3710a582 --- /dev/null +++ b/sa1/src/game/interactables/platforms_085_089.c @@ -0,0 +1,327 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/ui.h" // for sub_80549FC + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +/* Platform that falls and slides once the player steps on it */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x3E */ u16 unk3E; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ u16 unk48; + /* 0x4A */ u16 unk4A; + /* 0x4C */ s32 unk4C; + /* 0x50 */ u8 unk50; +} Platform085_089; + +void Task_Platform085(void); +void Task_Platform089(void); +void TaskDestructor_Platforms_085_089(struct Task *t); + +const u16 gUnknown_086CEDC0[NUM_LEVEL_IDS][3] = { + { SA1_ANIM_PLATFORM_HORZ_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_1) }, + { SA1_ANIM_PLATFORM_HORZ_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_1) }, + { SA1_ANIM_PLATFORM_HORZ_2, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_2) }, + { SA1_ANIM_PLATFORM_HORZ_2, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_2) }, + { SA1_ANIM_PLATFORM_HORZ_3, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_3) }, + { SA1_ANIM_PLATFORM_HORZ_3, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_3) }, + { SA1_ANIM_PLATFORM_SQU_4_PURPLE, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_SQU_4_PURPLE) }, + { SA1_ANIM_PLATFORM_SQU_4_PURPLE, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_SQU_4_PURPLE) }, + { SA1_ANIM_PLATFORM_SQU_ARROW, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_SQU_ARROW) }, + { SA1_ANIM_PLATFORM_SQU_ARROW, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_SQU_ARROW) }, + { SA1_ANIM_PLATFORM_HORZ_6_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_6_1) }, + { SA1_ANIM_PLATFORM_HORZ_6_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_6_1) }, + { SA1_ANIM_PLATFORM_HORZ_6_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_6_1) }, + { SA1_ANIM_PLATFORM_HORZ_6_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_6_1) }, + { SA1_ANIM_PLATFORM_HORZ_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_1) }, + { SA1_ANIM_PLATFORM_HORZ_2, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_2) }, + { SA1_ANIM_PLATFORM_HORZ_3, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_3) }, + { SA1_ANIM_PLATFORM_HORZ_6_1, 0x0000, MAX_TILES(SA1_ANIM_PLATFORM_HORZ_6_1) }, +}; + +void CreateEntity_Platform_SlowDescent(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Platform085, sizeof(Platform085_089), 0x2000, 0, TaskDestructor_Platforms_085_089); + Platform085_089 *platform = TASK_DATA(t); + Sprite *s = &platform->s; + + platform->base.regionX = regionX; + platform->base.regionY = regionY; + platform->base.me = me; + platform->base.meX = me->x; + platform->base.id = id; + + platform->unk40 = 0; + platform->unk44 = 0; + platform->unk50 = 0; + platform->unk4C = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + platform->unk48 = 4; + platform->unk3C = 0; + platform->unk4A = 0; + } else { + platform->unk48 = 4; + platform->unk3C = 0x80; + platform->unk4A = 0; + } + } else { + if (me->d.sData[1] >= 0) { + platform->unk48 = 0; + platform->unk4A = 4; + platform->unk3C = 0; + } else { + platform->unk48 = 0; + platform->unk4A = 4; + platform->unk3C = 0x80; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VramMalloc(gUnknown_086CEDC0[gCurrentLevel][2]); + s->graphics.anim = gUnknown_086CEDC0[gCurrentLevel][0]; + s->variant = gUnknown_086CEDC0[gCurrentLevel][1]; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_Platform085(void) +{ + Platform085_089 *platform; + Sprite *s; + CamCoord worldX, worldY; + MapEntity *me; + s32 i; + u32 layer = 0; + platform = TASK_DATA(gCurTask); + s = &platform->s; + me = platform->base.me; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + i = 0; + do { + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == s)) { + s8 sl = SA2_LABEL(sub_801F07C)(worldY + I(platform->unk44) + 22, worldX, PLAYER(i).layer, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (!Coll_Player_Entity_Intersection(s, worldX + I(platform->unk40), worldY + I(platform->unk44) - 4, &PLAYER(i))) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).stoodObj = NULL; + ClearBit(platform->unk50, i); + } else { + s8 res; + SetBit(platform->unk50, i); + + if (sl >= 0) { + PLAYER(i).qWorldY += Q(0.75); + } + + res = SA2_LABEL(sub_801F07C)(I(PLAYER(i).qWorldY) + 16, I(PLAYER(i).qWorldX) + 0, PLAYER(i).layer, +8, NULL, + SA2_LABEL(sub_801EE64)); + + if (res < 0) { + PLAYER(i).qWorldY += Q(res); + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } else { + if (Coll_Player_PlatformCrumbling(s, worldX, worldY + I(platform->unk44), &PLAYER(i)) & COLL_FLAG_8) { + if (!(PLAYER(i).moveState & SPRITE_FLAG(X_FLIP, 1))) { + PLAYER(i).qWorldY -= Q(2); + } + SetBit(platform->unk50, i); + } else { + ClearBit(platform->unk50, i); + } + } + + if (i == 0) { + layer = gPlayer.layer; + } + } while (++i < gNumSingleplayerCharacters); + + if (platform->unk50 != 0) { + s8 res = SA2_LABEL(sub_801F07C)(worldY + I(platform->unk44) + 22, worldX, layer, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (res >= 0) { + platform->unk44 += Q(0.75); + } + } else { + if (platform->unk44 != 0) { + platform->unk44 -= Q(0.75); + } + } + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + I(platform->unk44); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void CreateEntity_Platform089(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Platform089, sizeof(Platform085_089), 0x2000, 0, TaskDestructor_Platforms_085_089); + Platform085_089 *platform = TASK_DATA(t); + Sprite *s = &platform->s; + + platform->base.regionX = regionX; + platform->base.regionY = regionY; + platform->base.me = me; + platform->base.meX = me->x; + platform->base.id = id; + + platform->unk40 = 0; + platform->unk44 = 0; + platform->unk4C = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + platform->unk48 = 4; + platform->unk3C = 0; + platform->unk4A = 0; + } else { + platform->unk48 = 4; + platform->unk3C = 0x80; + platform->unk4A = 0; + } + } else { + if (me->d.sData[1] >= 0) { + platform->unk48 = 0; + platform->unk4A = 4; + platform->unk3C = 0; + } else { + platform->unk48 = 0; + platform->unk4A = 4; + platform->unk3C = 0x80; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_HORZ_4); + s->graphics.anim = SA1_ANIM_PLATFORM_HORZ_4; + s->variant = 0; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_Platform089(void) +{ + Platform085_089 *platform; + Sprite *s; + CamCoord worldX, worldY; + MapEntity *me; + s32 i; + u32 sp0C = 0; + u32 sp10 = 0; + platform = TASK_DATA(gCurTask); + s = &platform->s; + me = platform->base.me; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y - I(platform->unk44); + + i = 0; + do { + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && (PLAYER(i).stoodObj == s)) { + sp0C = 1; + + if (!Coll_Player_Entity_Intersection(s, worldX + I(platform->unk40), worldY - I(platform->unk44) - 4, &PLAYER(i))) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } else { + s8 res; + + PLAYER(i).qWorldY -= Q(0.75); + + if (I(platform->unk44) > me->d.uData[3] * 8) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_DEAD; + } + } + } else { + if (!(Coll_Player_PlatformCrumbling(s, worldX, worldY - I(platform->unk44), &PLAYER(i)) & COLL_FLAG_8)) { + sp10 = 1; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (sp0C) { + { + platform->unk44 += Q(0.75); + } + } else { + if (sp10) { + if (platform->unk44 != 0) { + platform->unk44 -= Q(0.75); + } + } + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void TaskDestructor_Platforms_085_089(struct Task *t) +{ + Platform085_089 *platform = TASK_DATA(t); + VramFree(platform->s.graphics.dest); +} diff --git a/sa1/src/game/interactables/propeller.c b/sa1/src/game/interactables/propeller.c new file mode 100644 index 0000000000..c8fbc835b3 --- /dev/null +++ b/sa1/src/game/interactables/propeller.c @@ -0,0 +1,72 @@ +#include "global.h" +#include "malloc_vram.h" +#include "game/entity.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; +} Propeller; + +void Task_PropellerMain(void); +void TaskDestructor_Propeller(struct Task *); + +#if 01 +void CreateEntity_Propeller(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PropellerMain, sizeof(Propeller), 0x2000, 0, TaskDestructor_Propeller); + Propeller *propeller = TASK_DATA(t); + Sprite *s = &propeller->s; + + propeller->base.regionX = regionX; + propeller->base.regionY = regionY; + propeller->base.me = me; + + propeller->base.meX = me->x; + propeller->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PROPELLER); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PROPELLER; + s->variant = 0; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(18, 1); + s->frameFlags |= SPRITE_FLAG(PRIORITY, 2); +} +#endif + +void Task_PropellerMain(void) +{ + Propeller *propeller = TASK_DATA(gCurTask); + Sprite *s = &propeller->s; + MapEntity *me = propeller->base.me; + + s16 screenX, screenY; + screenX = TO_WORLD_POS(propeller->base.meX, propeller->base.regionX); + screenY = TO_WORLD_POS(me->y, propeller->base.regionY); + + s->x = screenX - gCamera.x; + s->y = screenY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, propeller->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_Propeller(struct Task *t) +{ + Propeller *propeller = TASK_DATA(t); + VramFree(propeller->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/red_flag_and_pole.c b/sa1/src/game/interactables/red_flag_and_pole.c new file mode 100644 index 0000000000..14c497713d --- /dev/null +++ b/sa1/src/game/interactables/red_flag_and_pole.c @@ -0,0 +1,630 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 data1; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E; // charState + /* 0x3F */ u8 tuggingPlayerIndex; +} RedFlagPole; + +void Task_RedFlag(void); +void Task_8077760(void); +void Task_8077918(void); +void Task_8077C5C(void); +void Task_8077D1C(void); +void Task_8077E9C(void); +bool32 sub_8077FA4(RedFlagPole *pole, Sprite *s, s32 worldX, s32 worldY); +bool32 sub_80780B4(RedFlagPole *pole, Sprite *s, s32 worldX, s32 worldY); +bool32 sub_80781E4(RedFlagPole *pole, Sprite *s, s32 worldX, s32 worldY); +void TaskDestructor_RedFlag(struct Task *t); + +void CreateEntity_RedFlag(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_RedFlag, sizeof(RedFlagPole), 0x2000, 0, TaskDestructor_RedFlag); + RedFlagPole *pole = TASK_DATA(t); + Sprite *s = &pole->s; + + pole->base.regionX = regionX; + pole->base.regionY = regionY; + pole->base.me = me; + pole->base.meX = me->x; + pole->base.id = id; + + pole->data1 = me->d.sData[1]; + pole->unk3D = 0; + pole->unk3E = 0; + pole->tuggingPlayerIndex = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_RED_FLAG_V); + s->graphics.anim = SA1_ANIM_RED_FLAG_V; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->d.sData[1]) { + SPRITE_FLAG_SET(s, X_FLIP); + } + + UpdateSpriteAnimation(s); +} + +void Task_RedFlag(void) +{ +#ifndef NON_MATCHING + register struct Task **t asm("r8") = &gCurTask; +#else + struct Task **t = &gCurTask; +#endif + RedFlagPole *pole = TASK_DATA(*t); + Sprite *s = &pole->s; + MapEntity *me = pole->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pole->base.meX, pole->base.regionX); + worldY = TO_WORLD_POS(me->y, pole->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (PLAYER_IS_ALIVE) { + bool32 res; + if (pole->data1) { + res = sub_8077FA4(pole, s, worldX, worldY); + } else { + res = sub_80780B4(pole, s, worldX, worldY); + } + + if (res) { + (*t)->main = Task_8077760; + } + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pole->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8077760(void) +{ + RedFlagPole *pole = TASK_DATA(gCurTask); + Sprite *s = &pole->s; + MapEntity *me = pole->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pole->base.meX, pole->base.regionX); + worldY = TO_WORLD_POS(me->y, pole->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pole->base.meX); + TaskDestroy(gCurTask); + return; + } + + { + Player *p = &PLAYER(pole->tuggingPlayerIndex); + if (PLAYER_IS_ALIVE) { + if (pole->unk3D > 6) { + if (pole->unk3D == 7) { + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + p->qWorldX -= Q(10); + } else { + p->qWorldX += Q(10); + } + } else { + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + p->qWorldX -= Q(7.5); + } else { + p->qWorldX += Q(7.5); + } + } + } + + if (++pole->unk3D > 13) { + p->charState = pole->unk3E; + p->moveState &= ~MOVESTATE_4; + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + if (p->charState == CHARSTATE_BRAKE) { + p->charState = CHARSTATE_WALK_A; + } + + if (p->qSpeedGround < +Q(10.5)) { + p->qSpeedGround = +Q(10.5); + p->qSpeedAirX = +Q(10.5); + } + } else { + if (p->charState == CHARSTATE_BRAKE) { + p->charState = CHARSTATE_WALK_A; + } + + if (p->qSpeedGround > -Q(10.5)) { + p->qSpeedGround = -Q(10.5); + p->qSpeedAirX = -Q(10.5); + } + } + + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + gCurTask->main = Task_8077918; + } + } else { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8077918(void) +{ + RedFlagPole *pole = TASK_DATA(gCurTask); + Sprite *s = &pole->s; + MapEntity *me = pole->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pole->base.meX, pole->base.regionX); + worldY = TO_WORLD_POS(me->y, pole->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pole->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + pole->unk3D = 0; + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_RED_FLAG_V; + s->variant = 0; + (gCurTask)->main = Task_RedFlag; + } + + DisplaySprite(s); +} + +void CreateEntity_WallPole_Left(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); + struct Task *t = TaskCreate(Task_8077C5C, sizeof(RedFlagPole), 0x2000, 0, TaskDestructor_RedFlag); + RedFlagPole *pole = TASK_DATA(t); + Sprite *s = &pole->s; + + pole->base.regionX = regionX; + pole->base.regionY = regionY; + pole->base.me = me; + pole->base.meX = me->x; + pole->base.id = id; + + pole->data1 = me->d.sData[1]; + pole->unk3D = 0; + pole->unk3E = 0; + pole->tuggingPlayerIndex = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + if ((zone == ZONE_1) || (gCurrentLevel == ACT_CHAO_HUNT_A)) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOUNCY_BAR); + s->graphics.anim = SA1_ANIM_BOUNCY_BAR; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_RED_FLAG_H); + s->graphics.anim = SA1_ANIM_RED_FLAG_H; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void CreateEntity_WallPole_Right(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); + struct Task *t = TaskCreate(Task_8077C5C, sizeof(RedFlagPole), 0x2000, 0, TaskDestructor_RedFlag); + RedFlagPole *pole = TASK_DATA(t); + Sprite *s = &pole->s; + + pole->base.regionX = regionX; + pole->base.regionY = regionY; + pole->base.me = me; + pole->base.meX = me->x; + pole->base.id = id; + + pole->data1 = me->d.sData[1]; + pole->unk3D = 0; + pole->unk3E = 0; + pole->tuggingPlayerIndex = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + if ((zone == ZONE_1) || (gCurrentLevel == ACT_CHAO_HUNT_A)) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_BOUNCY_BAR); + s->graphics.anim = SA1_ANIM_BOUNCY_BAR; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_RED_FLAG_H); + s->graphics.anim = SA1_ANIM_RED_FLAG_H; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(X_FLIP, 1); +} + +void Task_8077C5C(void) +{ + RedFlagPole *pole = TASK_DATA(gCurTask); + Sprite *s = &pole->s; + MapEntity *me = pole->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pole->base.meX, pole->base.regionX); + worldY = TO_WORLD_POS(me->y, pole->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (PLAYER_IS_ALIVE) { + bool32 res = sub_80781E4(pole, s, worldX, worldY); + + if (res) { + gCurTask->main = Task_8077D1C; + } + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pole->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8077D1C(void) +{ + s16 arr[15] = { + 1, 1, 1, 1, 1, 1, 1, 1, 16, 7, 7, 7, 7, 7, 7, + }; + RedFlagPole *pole = TASK_DATA(gCurTask); + Sprite *s = &pole->s; + MapEntity *me = pole->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pole->base.meX, pole->base.regionX); + worldY = TO_WORLD_POS(me->y, pole->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pole->base.meX); + TaskDestroy(gCurTask); + return; + } + + { + Player *p = &PLAYER(pole->tuggingPlayerIndex); + if (PLAYER_IS_ALIVE) { + if (pole->unk3D > 6) { + p->qWorldY -= Q(arr[pole->unk3D]); + } else { + p->qWorldY += Q(arr[pole->unk3D]); + } + + if (++pole->unk3D > 13) { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + p->charState = CHARSTATE_SPRING_B; + p->qSpeedAirY = -Q(7.5); + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + gCurTask->main = Task_8077E9C; + } + } else { + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8077E9C(void) +{ + u8 zone = LEVEL_TO_ZONE(gCurrentLevel); + RedFlagPole *pole = TASK_DATA(gCurTask); + Sprite *s = &pole->s; + MapEntity *me = pole->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(pole->base.meX, pole->base.regionX); + worldY = TO_WORLD_POS(me->y, pole->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, pole->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + pole->unk3D = 0; + s->prevVariant = -1; + if ((zone == ZONE_1) || (gCurrentLevel == ACT_CHAO_HUNT_A)) { + s->graphics.anim = SA1_ANIM_BOUNCY_BAR; + s->variant = 0; + } else { + s->graphics.anim = SA1_ANIM_RED_FLAG_H; + s->variant = 0; + } + + (gCurTask)->main = Task_8077C5C; + } + + DisplaySprite(s); +} + +// (96.54%) https://decomp.me/scratch/8M1w5 +NONMATCH("asm/non_matching/game/interactables/red_flag__sub_8077FA4.inc", + bool32 sub_8077FA4(RedFlagPole *pole, Sprite *s, s32 worldX, s32 worldY)) +{ + s32 qWorldX; + u8 *ptrPrevVariant; +#ifndef NON_MATCHING + register s32 i asm("r9"); + register u8 *ptrItemEffect asm("r8"); + register bool32 result asm("sl") = FALSE; +#else + s32 i; + u8 *ptrItemEffect; + bool32 result = FALSE; +#endif + + i = 0; + qWorldX = Q(worldX + 15); + ptrItemEffect = &gPlayer.itemEffect; + ptrPrevVariant = &s->prevVariant; + do { + Player *p = &PLAYER(i); + u32 res; + + res = Coll_Player_Entity_Intersection(s, worldX, worldY, p); + + if (!(res & 0x80000) || (p->moveState & MOVESTATE_IN_AIR)) { + continue; + } + + if (!(p->moveState & MOVESTATE_4) && (p->qSpeedGround >= -Q(3))) { + continue; + } else if ((p->moveState & MOVESTATE_4) && (p->qSpeedGround >= -Q(5.25))) { + continue; + } + + if (p->moveState & MOVESTATE_FACING_LEFT) { + u8 itemEffect; + Player_TransitionCancelFlyingAndBoost(p); + m4aSongNumStart(SE_POLE); + + p->qWorldX = qWorldX; + p->moveState |= MOVESTATE_IA_OVERRIDE; + itemEffect = *ptrItemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + *ptrItemEffect = itemEffect; + + *ptrPrevVariant = -1; + s->graphics.anim = SA1_ANIM_RED_FLAG_V; + s->variant = 1; + + pole->tuggingPlayerIndex = p->playerID; + pole->unk3E = p->charState; + + p->charState = CHARSTATE_30; + + result = TRUE; + } + } while (++i < gNumSingleplayerCharacters); + + return result; +} +END_NONMATCH + +// (59.64%) https://decomp.me/scratch/VtSQc +NONMATCH("asm/non_matching/game/interactables/red_flag__sub_80780B4.inc", + bool32 sub_80780B4(RedFlagPole *pole, Sprite *s, s32 worldX, s32 worldY)) +{ + s32 qWorldX; + u8 *ptrPrevVariant; +#ifndef NON_MATCHING + register s32 i asm("r9"); + register u8 *ptrItemEffect asm("r8"); + register bool32 result asm("sl") = FALSE; +#else + s32 i; + u8 *ptrItemEffect; + bool32 result = FALSE; +#endif + + i = 0; + qWorldX = Q(worldX - 15); + ptrItemEffect = &gPlayer.itemEffect; + ptrPrevVariant = &s->prevVariant; + do { + Player *p = &PLAYER(i); + u32 res; + + res = Coll_Player_Entity_Intersection(s, worldX, worldY, p); + + if (!(res & 0x80000) || (p->moveState & MOVESTATE_IN_AIR)) { + continue; + } + + if (!(p->moveState & MOVESTATE_4) && (p->qSpeedGround <= +Q(3))) { + if ((p->qSpeedGround > Q(5.25)) && !(p->moveState & MOVESTATE_FACING_LEFT)) { + Player_TransitionCancelFlyingAndBoost(p); + m4aSongNumStart(SE_POLE); + p->qWorldX = qWorldX; + } else { + continue; + } + } + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + u8 itemEffect; + Player_TransitionCancelFlyingAndBoost(p); + m4aSongNumStart(SE_POLE); + + p->qWorldX = qWorldX; + + p->moveState |= MOVESTATE_IA_OVERRIDE; + itemEffect = *ptrItemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + *ptrItemEffect = itemEffect; + + *ptrPrevVariant = -1; + s->graphics.anim = SA1_ANIM_RED_FLAG_V; + s->variant = 1; + + pole->tuggingPlayerIndex = p->playerID; + pole->unk3E = p->charState; + + p->charState = CHARSTATE_30; + + result = TRUE; + } + } while (++i < gNumSingleplayerCharacters); + + return result; +} +END_NONMATCH + +// (83.63%) https://decomp.me/scratch/cEJMI +NONMATCH("asm/non_matching/game/interactables/red_flag__sub_80781E4.inc", + bool32 sub_80781E4(RedFlagPole *pole, Sprite *s, s32 worldX, s32 worldY)) +{ + u8 *ptrPrevVariant; + u8 zone; + s32 i; + u8 *ptrItemEffect; + bool32 result = FALSE; + + i = 0; + zone = LEVEL_TO_ZONE(gCurrentLevel); + ptrItemEffect = &gPlayer.itemEffect; + ptrPrevVariant = &s->prevVariant; + do { + Player *p = &PLAYER(i); + u32 res; + u8 itemEffect; + + res = Coll_Player_Entity_Intersection(s, worldX, worldY, p); + + if (!(res & 0x80000) || ((p->character == CHARACTER_TAILS || p->character == CHARACTER_KNUCKLES) && (p->SA2_LABEL(unk61) != 0))) { + continue; + } + + Player_TransitionCancelFlyingAndBoost(p); + m4aSongNumStart(SE_POLE); + p->moveState |= MOVESTATE_IA_OVERRIDE; + + itemEffect = *ptrItemEffect | PLAYER_ITEM_EFFECT__TELEPORT; + *ptrItemEffect = itemEffect; + p->qWorldY = Q(worldY + 16); + + if (s->frameFlags & SPRITE_FLAG(X_FLIP, 1)) { + p->qWorldX = Q(worldX - 8); + p->moveState &= ~MOVESTATE_FACING_LEFT; + } else { + p->qWorldX = Q(worldX + 8); + p->moveState |= MOVESTATE_FACING_LEFT; + } + + s->prevVariant = -1; + if ((zone == ZONE_1) || (gCurrentLevel == ACT_CHAO_HUNT_A)) { + s->graphics.anim = SA1_ANIM_BOUNCY_BAR; + s->variant = 1; + } else { + s->graphics.anim = SA1_ANIM_RED_FLAG_H; + s->variant = 1; + } + + pole->tuggingPlayerIndex = p->playerID; + pole->unk3E = p->charState; + + p->charState = CHARSTATE_31; + + result = TRUE; + } while (++i < gNumSingleplayerCharacters); + + return result; +} +END_NONMATCH + +// Shared with WallPole +void TaskDestructor_RedFlag(struct Task *t) +{ + RedFlagPole *pole = TASK_DATA(t); + VramFree(pole->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/run_wheel.c b/sa1/src/game/interactables/run_wheel.c new file mode 100644 index 0000000000..7df5b477cf --- /dev/null +++ b/sa1/src/game/interactables/run_wheel.c @@ -0,0 +1,364 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s32 qUnk3C; + /* 0x40 */ s32 qUnk40; + /* 0x44 */ s32 qUnk44; + /* 0x48 */ s32 unk48; + /* 0x4C */ u16 unk4C; + /* 0x4E */ u8 unk4E; +} RunWheel; + +void Task_RunWheel(void); +bool32 sub_808EA80(RunWheel *wheel, Sprite *s, s32 worldX, s32 worldY, Player *p); +bool32 sub_808EC84(RunWheel *wheel, Sprite *s, s32 worldX, s32 worldY, Player *p); +void TaskDestructor_RunWheel(struct Task *t); + +void CreateEntity_RunWheel(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_RunWheel, sizeof(RunWheel), 0x2000, 0, TaskDestructor_RunWheel); + RunWheel *wheel = TASK_DATA(t); + Sprite *s = &wheel->s; + + wheel->base.regionX = regionX; + wheel->base.regionY = regionY; + wheel->base.me = me; + wheel->base.meX = me->x; + wheel->base.id = id; + + wheel->qUnk3C = me->d.uData[2] * Q(16.875); + wheel->qUnk40 = Q(0); + wheel->unk4E = me->d.sData[0]; + wheel->qUnk44 = Q(0); + wheel->unk4C = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_RUN_WHEEL); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_RUN_WHEEL; + s->variant = 1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_RunWheel(void) +{ + RunWheel *wheel = TASK_DATA(gCurTask); + Sprite *s = &wheel->s; + MapEntity *me = wheel->base.me; + s32 worldX, worldY; + s32 worldX32, worldY32; + s32 theta; + s32 i; + + worldX = TO_WORLD_POS(wheel->base.meX, wheel->base.regionX); + worldY = TO_WORLD_POS(me->y, wheel->base.regionY); + + theta = (wheel->unk4E << 7) & ONE_CYCLE; + worldX32 = worldX + Div(COS(theta), 0x1770) * Div(wheel->qUnk40, 0xC80); + + theta = (wheel->unk4E << 7) & ONE_CYCLE; + worldY32 = worldY + Div(SIN(theta), 0x1770) * Div(wheel->qUnk40, 0xC80); + + s->x = worldX32 - gCamera.x; + s->y = worldY32 - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, wheel->base.meX); + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { + if ((PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ) && PLAYER(i).stoodObj == s) { + sub_808EC84(wheel, s, worldX, worldY, &PLAYER(i)); + } else { + sub_808EA80(wheel, s, worldX, worldY, &PLAYER(i)); + } + } while (++i < gNumSingleplayerCharacters); + + if (wheel->qUnk44) { + UpdateSpriteAnimation(s); + } + + DisplaySprite(s); +} + +bool32 sub_808EA80(RunWheel *wheel, Sprite *s, s32 worldX, s32 worldY, Player *p) +{ + MapEntity *me = wheel->base.me; + s32 worldX32, worldY32; + u32 theta; + s32 i; + u32 newVariant; + + if (IS_ALIVE(p)) { + if (sub_80549FC()) { + worldX32 = (CamCoord)(worldX + Div(COS(((wheel->unk4E * 0x80) & ONE_CYCLE)), 0x1770) * Div(wheel->qUnk40, 0xC80)); + worldY32 = (CamCoord)(worldY + Div(SIN(((wheel->unk4E * 0x80) & ONE_CYCLE)), 0x1770) * Div(wheel->qUnk40, 0xC80)); + + sub_80096B0(s, worldX32, worldY32, p); + } else { + if (sub_80096B0(s, s->x + gCamera.x, s->y + gCamera.y, p) & COLL_FLAG_8) { + p->moveState |= MOVESTATE_STOOD_ON_OBJ; + p->stoodObj = s; + wheel->unk48 = 0; + wheel->unk4C = 0; + + p->qSpeedGround = wheel->qUnk44; + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + } + } + } + + if (p->playerID == PLAYER_1) { + s32 v; + if (Div(wheel->qUnk44, 0x1C) < 0) { + v = -Div(wheel->qUnk44, 0x1C); + } else { + v = +Div(wheel->qUnk44, 0x1C); + } + s->animSpeed = v; + + wheel->qUnk44 -= Q(12. / 256.); + wheel->qUnk40 += wheel->qUnk44; + + if (wheel->qUnk40 > wheel->qUnk3C) { + wheel->qUnk40 = wheel->qUnk3C; + } + + if (wheel->qUnk40 < Q(0)) { + wheel->qUnk40 = 0; + wheel->qUnk44 = 0; + } + + newVariant = ((u32)~wheel->qUnk44 >> 31); + if (s->variant != newVariant) { + s->variant = newVariant; + s->prevVariant = -1; + } + + wheel->unk4C++; + + if ((u32)wheel->qUnk44 + Q(5) - 1 < Q(10) - 1) { + if (wheel->qUnk44 != Q(0)) { + if (Mod(wheel->unk4C, 25) == 0) { + m4aSongNumStart(SE_RUN_WHEEL_A); + } + } + } else if ((u32)wheel->qUnk44 + 0x81F < 0x103F) { + if (Mod(wheel->unk4C, 16) == 0) { + m4aSongNumStart(SE_RUN_WHEEL_B); + } + } else { + if (Mod(wheel->unk4C, 8) == 0) { + m4aSongNumStart(SE_RUN_WHEEL_C); + } + } + } + return TRUE; +} + +// (97.92%) https://decomp.me/scratch/zk7wj +NONMATCH("asm/non_matching/game/interactables/run_wheel__sub_808EC84.inc", + bool32 sub_808EC84(RunWheel *wheel, Sprite *s, s32 worldX, s32 worldY, Player *p)) +{ + MapEntity *me = wheel->base.me; + s32 worldX32, worldY32; + u32 theta; + s32 i; + u32 newVariant; + s16 qSpeed; + + if (p->charState != 15 && IS_ALIVE(p)) { + if (sub_80549FC()) { + worldX32 = (CamCoord)(worldX + Div(COS(((wheel->unk4E * 0x80) & ONE_CYCLE)), 0x1770) * Div(wheel->qUnk40, 0xC80)); + worldY32 = (CamCoord)(worldY + Div(SIN(((wheel->unk4E * 0x80) & ONE_CYCLE)), 0x1770) * Div(wheel->qUnk40, 0xC80)); + + // u32 sub_80096B0(Sprite *, CamCoord x, CamCoord y, Player *) + sub_80096B0(s, worldX32, worldY32, p); + } else if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && p->stoodObj == s) { + p->qWorldY = Q(s->y + gCamera.y + s->hitboxes[0].b.top - p->spriteOffsetY); + + if ((p->moveState & MOVESTATE_IN_AIR) || p->SA2_LABEL(unk62)) { + wheel->unk4C = 0; + + if (p->moveState & MOVESTATE_IN_AIR) { + p->stoodObj = NULL; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + + if ((p->character != CHARACTER_AMY) || !(p->moveState & MOVESTATE_4000000)) { + const s32 qSpeedConst = Q(1.125); +#if 01 + s16 qSpeed = CLAMP_16(p->qSpeedAirX, -qSpeedConst, +qSpeedConst); + p->qSpeedAirX = qSpeed; +#else + if (p->qSpeedAirX < -qSpeedConst) { + p->qSpeedAirX = -qSpeedConst; + } else if (p->qSpeedAirX > +qSpeedConst) { + p->qSpeedAirX = +qSpeedConst; + } +#endif + } else { + wheel->qUnk44 = 0; + } + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } else { + // 17a + if (sub_80096B0(s, s->x + gCamera.x, s->y + gCamera.y, p) & COLL_FLAG_8) { + p->moveState |= MOVESTATE_STOOD_ON_OBJ; + p->stoodObj = s; + + qSpeed = CLAMP_16(p->qSpeedGround, -0x240, +0x240); + p->qSpeedGround = qSpeed; + + p->itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } else { + // 1d8 + p->qWorldX = Q(worldX + Div(COS(((wheel->unk4E * 0x80) & ONE_CYCLE)), 0x1770) * Div(wheel->qUnk40, 0xC80)) - p->qSpeedAirX; + } + if (p->playerID == PLAYER_1) { + if (Div(wheel->qUnk44, 0x1C) < 0) { + s->animSpeed = -Div(wheel->qUnk44, 0x1C); + } else { + s->animSpeed = +Div(wheel->qUnk44, 0x1C); + } + + if ((p->character != CHARACTER_AMY) || (p->charState != 2)) { + wheel->qUnk44 = p->qSpeedGround - Q(16. / 256.); + } else { + wheel->qUnk44 = p->qSpeedGround; + } + + if (wheel->qUnk44 > 0) { + wheel->qUnk44 *= 2; + } + + if (wheel->qUnk44 > Q(11.125)) { + wheel->qUnk44 = Q(11.125); + } + + wheel->qUnk40 += wheel->qUnk44; + + if (wheel->qUnk40 > wheel->qUnk3C) { + wheel->qUnk40 = wheel->qUnk3C; + + if (wheel->qUnk44 < Q(0)) { + wheel->qUnk44 = Q(0); + } + } + + if (wheel->qUnk44 < Q(0)) { + if (p->qSpeedGround <= Q(0)) { + if ((p->character != CHARACTER_SONIC) || (p->SA2_LABEL(unk62) != 3)) { + p->qSpeedGround -= Q(0.25); + } + } + } + // 2f2 + + qSpeed = p->qSpeedGround; + p->qSpeedGround = (p->qSpeedGround < -Q(9)) ? -Q(9) : (qSpeed > +Q(4.5)) ? Q(4.5) : qSpeed; + + if (wheel->qUnk40 < Q(0)) { + wheel->qUnk40 = 0; + wheel->qUnk44 = 0; + + if ((p->SA2_LABEL(unk62) == 0) && (qSpeed << 16) < 0) { + p->qSpeedGround = 0; + } + + s->prevVariant = -1; + s->variant = 1; + } + + if (wheel->qUnk44 >= Q(0)) { + if (wheel->unk48 <= 0) { + s->prevVariant = -1; + s->variant = 1; + } + } else { + if (wheel->unk48 >= 0) { + s->prevVariant = -1; + s->variant = 0; + } + } + + wheel->unk4C++; + + if ((u32)wheel->qUnk44 + Q(5) - 1 < Q(10) - 1) { + if (wheel->qUnk44 != Q(0)) { + if (Mod(wheel->unk4C, 25) == 0) { + m4aSongNumStart(SE_RUN_WHEEL_A); + } + } + } else if ((u32)wheel->qUnk44 + 0x81F < 0x103F) { + if (Mod(wheel->unk4C, 16) == 0) { + m4aSongNumStart(SE_RUN_WHEEL_B); + } + } else { + if (Mod(wheel->unk4C, 8) == 0) { + m4aSongNumStart(SE_RUN_WHEEL_C); + } + } + + wheel->unk48 = wheel->qUnk44; + } else if (wheel->qUnk44 > 0) { + p->qSpeedGround = (wheel->qUnk44 >> 1); + } else { + p->qSpeedGround = (wheel->qUnk44); + } + + } else { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && p->stoodObj == s) { + p->stoodObj = NULL; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + } else { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && p->stoodObj == s) { + p->stoodObj = NULL; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } + + return TRUE; +} +END_NONMATCH + +void TaskDestructor_RunWheel(struct Task *t) +{ + RunWheel *wheel = TASK_DATA(t); + VramFree(wheel->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/security_gate.c b/sa1/src/game/interactables/security_gate.c new file mode 100644 index 0000000000..8e78e36b1f --- /dev/null +++ b/sa1/src/game/interactables/security_gate.c @@ -0,0 +1,160 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" + +#include "constants/animations.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s8 unk3C; + /* 0x3D */ u8 unk3D; + /* 0x3E */ s16 unk3E; +} SecurityGate; + +void Task_SecurityGateMain(void); +void Task_SecurityGate1(void); +void Task_SecurityGate2(void); +void TaskDestructor_SecurityGateMain(struct Task *t); + +// (97.55%) https://decomp.me/scratch/12dTu +NONMATCH("asm/non_matching/game/interactables/CreateEntity_SecurityGate.inc", + void CreateEntity_SecurityGate(MapEntity *me, u16 regionX, u16 regionY, u8 id)) +{ + struct Task *t = TaskCreate(Task_SecurityGateMain, sizeof(SecurityGate), 0x2000, 0, TaskDestructor_SecurityGateMain); + SecurityGate *gate = TASK_DATA(t); + Sprite *s = &gate->s; + + gate->base.regionX = regionX; + gate->base.regionY = regionY; + gate->base.me = me; + gate->base.meX = me->x; + gate->base.id = id; + + gate->unk3C = 0; + gate->unk3D = 0; + + if (me->d.sData[0] == 0) { + gate->unk3E = me->d.uData[2] * TILE_WIDTH - 10; + } else { + gate->unk3E = -10; + } + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SECURITY_GATE); + s->graphics.anim = SA1_ANIM_SECURITY_GATE; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} +END_NONMATCH + +void Task_SecurityGateMain(void) +{ + SecurityGate *gate = TASK_DATA(gCurTask); + MapEntity *me = gate->base.me; + Sprite *s = &gate->s; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(gate->base.meX, gate->base.regionX); + worldY = TO_WORLD_POS(me->y, gate->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (PLAYER_IS_ALIVE && ((worldX - gate->unk3E) <= I(gPlayer.qWorldX)) + && ((worldX - gate->unk3E + me->d.uData[2] * TILE_WIDTH) >= I(gPlayer.qWorldX)) && ((worldY) <= I(gPlayer.qWorldY)) + && ((worldY + me->d.uData[3] * TILE_WIDTH) >= I(gPlayer.qWorldY))) { + gate->unk3C = 0; + gate->unk3D = 8; + gCurTask->main = Task_SecurityGate1; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gate->base.meX); + TaskDestroy(gCurTask); + return; + } else { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_SecurityGate1(void) +{ + SecurityGate *gate = TASK_DATA(gCurTask); + MapEntity *me = gate->base.me; + Sprite *s = &gate->s; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(gate->base.meX, gate->base.regionX); + worldY = TO_WORLD_POS(me->y, gate->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + gate->unk3C; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gate->base.meX); + TaskDestroy(gCurTask); + return; + } else { + if (--gate->unk3D == 0) { + gate->unk3C = 48; + gCurTask->main = Task_SecurityGate2; + } else { + gate->unk3C += 6; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_SecurityGate2(void) +{ + SecurityGate *gate; + Sprite *s; + s16 worldX, worldY; + MapEntity *me; + s32 i; + + gate = TASK_DATA(gCurTask); + me = gate->base.me; + s = &gate->s; + + worldX = TO_WORLD_POS(gate->base.meX, gate->base.regionX); + worldY = TO_WORLD_POS(me->y, gate->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + gate->unk3C; + + i = 0; + do { + Player *p = &PLAYER(i); + + if (IS_ALIVE(p)) { + Coll_Player_Gate(s, worldX, worldY + gate->unk3C, p, 0); + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, gate->base.meX); + TaskDestroy(gCurTask); + return; + } else { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void TaskDestructor_SecurityGateMain(struct Task *t) +{ + SecurityGate *gate = TASK_DATA(t); + VramFree(gate->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/sega_sonic_letters.c b/sa1/src/game/interactables/sega_sonic_letters.c new file mode 100644 index 0000000000..51e11715cf --- /dev/null +++ b/sa1/src/game/interactables/sega_sonic_letters.c @@ -0,0 +1,176 @@ +#include // memcpy +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" + +typedef struct { + SpriteBase base; + Sprite s; + u8 letter; + u8 unk3D; + u8 duration; + u8 unk3F; + u8 delay; +} Letter; /* 0x44 */ + +void Task_SegaSonicLetter(void); +void TaskDestructor_SegaSonicLetter(struct Task *t); + +ALIGNED(8) const u16 gUnknown_086CED90[] = { 500, 0x190, 0x12C }; + +// (100.0%) https://decomp.me/scratch/AVFO8 +// It's just the memcpy... +NONMATCH("asm/non_matching/game/interactables/CreateEntity_SegaSonicLetter.inc", + void CreateEntity_SegaSonicLetter(MapEntity *me, u16 regionX, u16 regionY, u8 id)) +{ + struct Task *t; + Letter *letter; + Sprite *s; +#if 0 + // This matches... but can't be right, the data is used in Task_SegaSonicLetter + u16 arr[3] = { 500, 400, 300 }; +#else + // memcpy gets optimized away... + u16 arr[3]; + memcpy(arr, gUnknown_086CED90, sizeof(arr)); +#endif + t = TaskCreate(Task_SegaSonicLetter, sizeof(Letter), 0x2000, 0, TaskDestructor_SegaSonicLetter); + letter = TASK_DATA(t); + s = &letter->s; + + letter->base.regionX = regionX; + letter->base.regionY = regionY; + letter->base.me = me; + letter->base.meX = me->x; + letter->base.id = id; + + letter->letter = me->d.sData[0]; + letter->unk3D = 0; + letter->duration = me->d.uData[1] & 0x3; + letter->unk3F = ((arr[me->d.uData[1] & 0x3] - 161) >> 1); + + letter->delay = me->d.uData[2]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SEGA_SONIC_LETTERS); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SEGA_SONIC_LETTERS; + s->variant = letter->letter * 4; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} +END_NONMATCH + +// (100.0%) https://decomp.me/scratch/AF9HF +// It's just the memcpy... +NONMATCH("asm/non_matching/game/interactables/Task_SegaSonicLetter.inc", void Task_SegaSonicLetter(void)) +{ + Letter *letter; + Sprite *s; + MapEntity *me; + CamCoord worldX, worldY; + s32 i; + s32 sl; // isSolid? + u32 r1; + +#if 0 + // This matches... but can't be right, the data is used in CreateEntity_SegaSonicLetter + AnimId arr[3] = { 500, 400, 300 }; +#else + // memcpy gets optimized away... + AnimId arr[3]; + memcpy(arr, gUnknown_086CED90, sizeof(arr)); +#endif + + letter = TASK_DATA(gCurTask); + s = &letter->s; + me = letter->base.me; + + worldX = TO_WORLD_POS(letter->base.meX, letter->base.regionX); + worldY = TO_WORLD_POS(me->y, letter->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, letter->base.meX); + TaskDestroy(gCurTask); + return; + } + + sl = 0; + + r1 = Mod(gStageTime - letter->delay, arr[letter->duration]); + + if (r1 < 58) { + sl = 1; + + if (r1 == 0) { + sl = 0; + + s->prevVariant = -1; + s->variant = letter->letter * 4 + 1; + } + } else if (r1 < letter->unk3F + 58) { + sl = 1; + + if (r1 == 58) { + s->prevVariant = -1; + s->variant = letter->letter * 4 + 3; + asm(""); + } + } else if (r1 < arr[letter->duration] - letter->unk3F) { + sl = 1; + + if (r1 == letter->unk3F + 58) { + sl = 0; + s->prevVariant = -1; + s->variant = letter->letter * 4 + 0; + } + } else { + if (r1 == arr[letter->duration] - letter->unk3F) { + s->prevVariant = -1; + s->variant = letter->letter * 4 + 2; + } + + i = 0; + do { + u32 res = Coll_Player_Entity_Intersection(s, worldX, worldY, &PLAYER(i)); + if (res != 0) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } while (++i < gNumSingleplayerCharacters); + } + + i = 0; + do { + if (sl == 1) { + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } + } while (++i < gNumSingleplayerCharacters); + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void TaskDestructor_SegaSonicLetter(struct Task *t) +{ + Letter *letter = TASK_DATA(t); + VramFree(letter->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/ship_swing.c b/sa1/src/game/interactables/ship_swing.c new file mode 100644 index 0000000000..9889652ca1 --- /dev/null +++ b/sa1/src/game/interactables/ship_swing.c @@ -0,0 +1,236 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite sprShip; + /* 0x3C */ Sprite sprSegment; + /* 0x6C */ Sprite sprHook; + /* 0x9C */ s32 unk9C[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0xA4 */ u8 unkA4; + /* 0xA5 */ u8 unkA5[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0xA7 */ u8 unkA7; +} ShipSwing; + +void Task_ShipSwing(void); +void TaskDestructor_ShipSwing(struct Task *t); + +#define SHIP_SWING_NUM_SEGMENTS 5 + +void CreateEntity_ShipSwing(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_ShipSwing, sizeof(ShipSwing), 0x7000, 0, TaskDestructor_ShipSwing); + ShipSwing *swing = TASK_DATA(t); + Sprite *sprShip = &swing->sprShip; + Sprite *sprSegment = &swing->sprSegment; + Sprite *sprHook = &swing->sprHook; + CamCoord worldX, worldY; + + swing->base.regionX = regionX; + swing->base.regionY = regionY; + swing->base.me = me; + swing->base.meX = me->x; + swing->base.id = id; + + swing->unkA4 = 0; + swing->unkA7 = 0; + swing->unk9C[PLAYER_1] = 0; + swing->unk9C[PLAYER_2] = 0; + swing->unkA5[PLAYER_2] = 0; + swing->unkA5[PLAYER_1] = 0; + + sprShip->x = TO_WORLD_POS(me->x, regionX); + sprShip->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); + + sprShip->graphics.dest = ALLOC_TILES(SA1_ANIM_SHIP_SWING); + sprShip->oamFlags = SPRITE_OAM_ORDER(4); + sprShip->graphics.size = 0; + sprShip->graphics.anim = SA1_ANIM_SHIP_SWING; + sprShip->variant = 0; + sprShip->animCursor = 0; + sprShip->qAnimDelay = Q(0); + sprShip->prevVariant = -1; + sprShip->animSpeed = SPRITE_ANIM_SPEED(1.0); + sprShip->palId = 0; + sprShip->hitboxes[0].index = HITBOX_STATE_INACTIVE; + sprShip->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + sprHook->graphics.dest = ALLOC_TILES(SA1_ANIM_SHIP_SWING_HOOK); + sprHook->oamFlags = SPRITE_OAM_ORDER(18); + sprHook->graphics.size = 0; + sprHook->graphics.anim = SA1_ANIM_SHIP_SWING_HOOK; + sprHook->variant = 0; + sprHook->animCursor = 0; + sprHook->qAnimDelay = Q(0); + sprHook->prevVariant = -1; + sprHook->animSpeed = SPRITE_ANIM_SPEED(1.0); + sprHook->palId = 0; + sprHook->hitboxes[0].index = HITBOX_STATE_INACTIVE; + sprHook->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + sprSegment->graphics.dest = ALLOC_TILES(SA1_ANIM_SHIP_SWING_SEGMENT); + sprSegment->oamFlags = SPRITE_OAM_ORDER(18); + sprSegment->graphics.size = 0; + sprSegment->graphics.anim = SA1_ANIM_SHIP_SWING_SEGMENT; + sprSegment->variant = 0; + sprSegment->animCursor = 0; + sprSegment->qAnimDelay = Q(0); + sprSegment->prevVariant = -1; + sprSegment->animSpeed = SPRITE_ANIM_SPEED(1.0); + sprSegment->palId = 0; + sprSegment->hitboxes[0].index = HITBOX_STATE_INACTIVE; + sprSegment->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(sprShip); + UpdateSpriteAnimation(sprHook); + UpdateSpriteAnimation(sprSegment); +} + +void Task_ShipSwing(void) +{ + Sprite *sprShip; + Sprite *sprHook; + Sprite *sprSegment; + CamCoord worldX, worldY; + CamCoord worldX2, worldY2; + s32 dirX, dirY; + s32 dtDirX; + s32 dtDirY; + u32 modRes; + s16 sinRes; + s32 theta; + s8 r3; + s32 i; + u8 j; + MapEntity *me; + ShipSwing *swing; + + swing = TASK_DATA(gCurTask); + sprShip = &swing->sprShip; + sprSegment = &swing->sprSegment; + sprHook = &swing->sprHook; + me = swing->base.me; + dtDirX = 0; + dtDirY = 0; + + worldX = TO_WORLD_POS(swing->base.meX, swing->base.regionX); + worldY = TO_WORLD_POS(me->y, swing->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + modRes = Mod(gStageTime * 2, 0x200); + + if (modRes > 0x100) { + modRes -= 0x100; + modRes = 0x100 - modRes; + + r3 = (SIN(modRes * 2) >> 8); + } else { + r3 = -(SIN(modRes * 2) >> 8); + } + + sinRes = SIN(((modRes - 0x7E) & 0x1FF) * 2); + theta = ((sinRes >> 7) & 0x1FF); + theta *= 2; + dirX = SIN(theta); + dirY = COS(theta) + r3; + + sprShip->x = worldX - gCamera.x; + sprShip->y = worldY - gCamera.y; + sprHook->x = worldX - gCamera.x; + sprHook->y = worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(sprShip->x, sprShip->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, swing->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(sprHook); + + // Inside this loop dtDirX|Y is used for segments, + // afterwards it's the position-delta of the ship. + for (j = 0; j < SHIP_SWING_NUM_SEGMENTS; j++) { + dtDirX += Div(dirX * 110, 100); + dtDirY += Div(dirY * 110, 100); + + sprSegment->x = worldX - gCamera.x + (dtDirX >> 10); + sprSegment->y = worldY - gCamera.y + (dtDirY >> 10); + + if (j == SHIP_SWING_NUM_SEGMENTS - 1) { + sprSegment->oamFlags = SPRITE_OAM_ORDER(3); + } else { + sprSegment->oamFlags = SPRITE_OAM_ORDER(18); + } + + DisplaySprite(sprSegment); + } + + sprShip->x = sprSegment->x; + sprShip->y = sprSegment->y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (Q(worldY - 4) > PLAYER(i).qWorldY) { + if (Coll_Player_PlatformCrumbling(sprHook, worldX, worldY, &PLAYER(i)) & COLL_FLAG_8) { + if (!GetBit(swing->unkA7, i)) { + SetBit(swing->unkA7, i); + } + } else { + if (GetBit(swing->unkA7, i)) { + ClearBit(swing->unkA7, i); + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState &= ~MOVESTATE_20; + } + } + } + + if (swing->unkA5[i] > 0) { + swing->unkA5[i]--; + } else { + if (Coll_Player_PlatformCrumbling(sprShip, (dtDirX >> 10) + worldX, (dtDirY >> 10) + worldY, &PLAYER(i)) & COLL_FLAG_8) { + if (!GetBit(swing->unkA4, i)) { + SetBit(swing->unkA4, i); + } else { + PLAYER(i).qWorldX += Q((worldX + (dtDirX >> 10)) - swing->unk9C[i]); + PLAYER(i).qWorldY = Q((worldY - 5 + (dtDirY >> 10))); + } + + swing->unk9C[i] = worldX + (dtDirX >> 10); + } else { + if (GetBit(swing->unkA4, i)) { + ClearBit(swing->unkA4, i); + swing->unkA5[i] = 5; + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState &= ~MOVESTATE_20; + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + DisplaySprite(sprShip); + SPRITE_FLAG_SET(sprShip, X_FLIP); + DisplaySprite(sprShip); + SPRITE_FLAG_CLEAR(sprShip, X_FLIP); +} + +void TaskDestructor_ShipSwing(struct Task *t) +{ + ShipSwing *swing = TASK_DATA(t); + + VramFree(swing->sprShip.graphics.dest); + VramFree(swing->sprSegment.graphics.dest); + VramFree(swing->sprHook.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/shrubbery.c b/sa1/src/game/interactables/shrubbery.c new file mode 100644 index 0000000000..b96959629f --- /dev/null +++ b/sa1/src/game/interactables/shrubbery.c @@ -0,0 +1,154 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" + +#include "constants/animations.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ u8 filler0[0x0C]; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; + /* 0x48 */ u16 unk48; + /* 0x4C */ s32 worldX; + /* 0x50 */ s32 worldY; +} ShrubberyParticles; /* 0x54 */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; +} Shrubbery; /* 0x40 */ + +void Task_ShrubberyMain(void); +void Task_ShrubberyParticles(void); +void CreateShrubberyParticles(CamCoord worldX, CamCoord worldY); +void TaskDestructor_ShrubberyParticles(struct Task *t); + +void Task_ShrubberyMain(void) +{ + Shrubbery *shrubbery = TASK_DATA(gCurTask); + Sprite *s = &shrubbery->s; + MapEntity *me = shrubbery->base.me; + s32 worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(shrubbery->base.meX, shrubbery->base.regionX); + worldY = TO_WORLD_POS(me->y, shrubbery->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if ((worldX <= I(PLAYER(i).qWorldX)) && (worldX + (me->d.uData[2] * TILE_WIDTH) >= I(PLAYER(i).qWorldX)) + && (worldY <= I(PLAYER(i).qWorldY)) && (worldY + (me->d.uData[3] * TILE_WIDTH) >= I(PLAYER(i).qWorldY))) { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (!GetBit(shrubbery->unk3C, i)) { + CreateShrubberyParticles(I(PLAYER(i).qWorldX) + (((u32)PseudoRandom32() & 0x1F00) >> 8) - 16, + I(PLAYER(i).qWorldY) + (((u32)PseudoRandom32() & 0x0F00) >> 8) - 8); + m4aSongNumStart(SE_SHRUBBERY); + } + + SetBit(shrubbery->unk3C, i); + } + } else { + // _080766BE_else + shrubbery->unk3C &= ~(1 << i); + } + } while (++i < gNumSingleplayerCharacters); + + // TODO: Does this match using other vars as target? (screenX|Y) + worldX -= gCamera.x; + worldY -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE_TYPED(u32, worldX, worldY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, shrubbery->base.meX); + TaskDestroy(gCurTask); + return; + } +} + +void CreateShrubberyParticles(CamCoord worldX, CamCoord worldY) +{ + struct Task *t = TaskCreate(Task_ShrubberyParticles, sizeof(ShrubberyParticles), 0x3000, 0, TaskDestructor_ShrubberyParticles); + ShrubberyParticles *parts = TASK_DATA(t); + Sprite *s = &parts->s; + + parts->unk40 = worldX * 4; + parts->unk48 = 0; + parts->unk44 = 1; + parts->unk3C = 52; + parts->worldX = worldX; + parts->worldY = worldY; + + // NOTE: Initializing sprite pos to world pos + s->x = worldX; + s->y = worldY; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SHRUBBERY); + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SHRUBBERY; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); +} + +void Task_ShrubberyParticles(void) +{ + ShrubberyParticles *parts = TASK_DATA(gCurTask); + Sprite *s = &parts->s; + + s->x = parts->worldX - gCamera.x; + s->y = parts->worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + TaskDestroy(gCurTask); + return; + } + + if (--parts->unk3C == 0) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateEntity_Shrubbery(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_ShrubberyMain, sizeof(Shrubbery), 0x2000, 0, NULL); + Shrubbery *shrubbery = TASK_DATA(t); + + // NOTE: This entity itself actually doesn't make use of any Sprites, only ShrubberyParticles does + Sprite *s = &shrubbery->s; + + shrubbery->base.regionX = regionX; + shrubbery->base.regionY = regionY; + shrubbery->base.me = me; + shrubbery->base.meX = me->x; + shrubbery->base.id = id; + shrubbery->unk3C = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); +} + +void TaskDestructor_ShrubberyParticles(struct Task *t) +{ + ShrubberyParticles *parts = TASK_DATA(t); + VramFree(parts->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/skating_stone.c b/sa1/src/game/interactables/skating_stone.c new file mode 100644 index 0000000000..e5a0803e2e --- /dev/null +++ b/sa1/src/game/interactables/skating_stone.c @@ -0,0 +1,723 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/ui.h" // for sub_80549FC + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +/* Platform that falls and slides once the player steps on it */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 filler3C[0x60]; + /* 0x9C */ s32 unk9C; + /* 0xA0 */ s32 qUnkA0; + /* 0xA4 */ s32 qUnkA4; + /* 0xA8 */ s32 qUnkA8; + /* 0xAC */ s32 qUnkAC; + /* 0xB0 */ u8 unkB0; + /* 0xB1 */ u8 unkB1; + /* 0xB2 */ u8 unkB2; + /* 0xB3 */ u8 unkB3; +} SkatingStone; + +typedef struct { + /* 0x00 */ Sprite s[4]; + /* 0xC0 */ SpriteTransform transform[4]; + /* 0xF0 */ u16 unkF0; + /* 0xF2 */ s16 qUnkF2; +} SkatingStoneDebris; /* 0xF4 */ + +void Task_SkatingStoneInit(void); +void Task_SkatingStone2(void); +void CreateSkatingStoneDebris(CamCoord worldX, CamCoord worldY); +void Task_SkatingStoneDebris(void); +void TaskDestructor_SkatingStone(struct Task *t); +void TaskDestructor_SkatingStoneDebris(struct Task *t); + +void CreateEntity_SkatingStone(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_SkatingStoneInit, sizeof(SkatingStone), 0x2000, 0, TaskDestructor_SkatingStone); + SkatingStone *stone = TASK_DATA(t); + Sprite *s = &stone->s; + + stone->base.regionX = regionX; + stone->base.regionY = regionY; + stone->base.me = me; + stone->base.meX = me->x; + stone->base.id = id; + + stone->unk9C = 0; + stone->qUnkA0 = 0; + stone->qUnkA4 = 0; + stone->qUnkA8 = 0; + stone->qUnkAC = 0; + stone->unkB0 = 0; + stone->unkB1 = me->d.sData[0]; + stone->unkB2 = 0; + stone->unkB3 = me->d.sData[1]; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_4) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SKATING_STONE_4); + s->graphics.anim = SA1_ANIM_SKATING_STONE_4; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SKATING_STONE); + s->graphics.anim = SA1_ANIM_SKATING_STONE; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_SkatingStoneInit(void) +{ + bool32 sl = FALSE; + SkatingStone *stone = TASK_DATA(gCurTask); + Sprite *s = &stone->s; + CamCoord worldX, worldY; + MapEntity *me = stone->base.me; + s32 i; + + worldX = TO_WORLD_POS(stone->base.meX, stone->base.regionX); + worldY = TO_WORLD_POS(me->y, stone->base.regionY); + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (sub_80549FC()) { + if (PLAYER(i).qWorldY > Q(worldY)) { + if (PLAYER(i).charState != CHARSTATE_73) { + if (Coll_Player_SkatingStone(s, worldX, worldY, &PLAYER(i)) & COLL_FLAG_10000) { + PLAYER(i).qWorldY = Q(worldY + 6); + } + } + } else { + if (PLAYER(i).charState != CHARSTATE_72) { + Coll_Player_SkatingStone(s, worldX, worldY, &PLAYER(i)); + } + } + } else { + if (Coll_Player_SkatingStone(s, worldX, worldY, &PLAYER(i)) & COLL_FLAG_8) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + PLAYER(i).qWorldY = Q(worldY) - Q(44); + + SetBit(stone->unkB2, i); + stone->qUnkA0 = 0; + stone->qUnkA4 = 0; + stone->qUnkA8 = 0; + stone->qUnkAC = 0; + + sl = TRUE; + + if (IS_MULTI_PLAYER) { + RoomEvent_PlatformChange *roomEvent = CreateRoomEvent(); + roomEvent->type = sl; + roomEvent->x = stone->base.regionX; + roomEvent->y = stone->base.regionY; + roomEvent->id = stone->base.id; + roomEvent->action = 1; + } else { + continue; + } + } + } + } + + if (IS_MULTI_PLAYER) { + if ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE) { + sl = TRUE; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (sl) { + gCurTask->main = Task_SkatingStone2; + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, stone->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_SkatingStone2(void) +{ + Sprite *s; + MapEntity *me; + SkatingStone *stone; + CamCoord worldX, worldY; + u8 sp08; + s32 i; + s32 res; + u8 layer; + layer = PLAYER_LAYER__FRONT; + stone = TASK_DATA(gCurTask); + s = &stone->s; + worldX, worldY; + me = stone->base.me; + + worldX = TO_WORLD_POS(stone->base.meX, stone->base.regionX); + worldY = TO_WORLD_POS(me->y, stone->base.regionY); + + stone->qUnkAC += stone->qUnkA4; + + s->y = I(stone->qUnkAC) + worldY - gCamera.y; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + m4aSongNumStop(SE_198); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, stone->base.meX); + TaskDestroy(gCurTask); + return; + } + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (i == PLAYER_1) { + layer = gPlayer.layer; + } + + if (GetBit(stone->unkB2, i)) { + if (!(PLAYER(i).moveState & (MOVESTATE_SPINDASH | MOVESTATE_4))) { + PLAYER(i).qWorldY = Q(worldY) + stone->qUnkAC - Q(46); + } else { + PLAYER(i).qWorldY = Q(worldY) + stone->qUnkAC - Q(42); + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (stone->unkB0 != 0) { + res = SA2_LABEL(sub_801F07C)(worldY + I(stone->qUnkAC), worldX + I(stone->qUnkA8), layer, +8, NULL, SA2_LABEL(sub_801EE64)); + + if (res >= 0) { + stone->qUnkA4 += Q(32. / 256.); + } else { + stone->qUnkA4 = Q(0); + + stone->unkB0 = 0; + + if (stone->unkB1 != 0) { + m4aSongNumStart(SE_198); + stone->unkB1--; + } else { + s32 i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD) && GetBit(stone->unkB2, i)) { + PLAYER(i).qSpeedAirY = -Q(3); + PLAYER(i).qSpeedAirX = stone->qUnkA0; + PLAYER(i).qSpeedGround = stone->qUnkA0; + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).stoodObj = NULL; + + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + PLAYER(i).charState = CHARSTATE_85; + } + + ClearBit(stone->unkB2, i); + } + } while (++i < gNumSingleplayerCharacters); + + m4aSongNumStop(SE_198); + + SA2_LABEL(gUnknown_0300194C) = s->x; + SA2_LABEL(gUnknown_03002820) = s->y; + + CreateSkatingStoneDebris(worldX + I(stone->qUnkA8) - s->x, worldY + I(stone->qUnkAC) - 20 - s->y); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, stone->base.meX); + TaskDestroy(gCurTask); + return; + } + } + } else { + res = SA2_LABEL(sub_801E4E4)(worldY + I(stone->qUnkAC), worldX + I(stone->qUnkA8), layer, +8, &sp08, SA2_LABEL(sub_801EE64)); + + if (res > 5) { + m4aSongNumStop(SE_198); + + if (LEVEL_TO_ZONE(gCurrentLevel) != ZONE_4) { + stone->qUnkA4 += -ABS2(Div(stone->qUnkA0 * 3, 5)); + } else { + stone->qUnkA4 += +ABS2(Div(stone->qUnkA0 * 2, 5)); + } + stone->unkB0 = 1; + } else { + s32 i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD) && GetBit(stone->unkB2, i)) { + if (stone->unkB3 != 0) { + PLAYER(i).qWorldX += Div(COS(sp08 * 4), 6070); + } else { + PLAYER(i).qWorldX -= Div(COS(sp08 * 4), 6070); + } + } + } while (++i < gNumSingleplayerCharacters); + + if (stone->unkB3 != 0) { + stone->qUnkA0 -= Div(COS(sp08 * 4), 1440); + } else { + stone->qUnkA0 += Div(COS(sp08 * 4), 1440); + } + + stone->qUnkAC += Q(res + 3); + } + } + + { + s32 res = SA2_LABEL(sub_801F07C)(worldX + I(stone->qUnkA8) + 18, worldY + I(stone->qUnkAC) - 30, layer, +8, &sp08, + SA2_LABEL(sub_801ED24)); + + if (res < 0) { + s32 i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD) && GetBit(stone->unkB2, i)) { + PLAYER(i).qSpeedAirY = -Q(3); + PLAYER(i).qSpeedAirX = stone->qUnkA0; + PLAYER(i).qSpeedGround = stone->qUnkA0; + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).stoodObj = NULL; + + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + PLAYER(i).charState = CHARSTATE_85; + } + + ClearBit(stone->unkB2, i); + } + } while (++i < gNumSingleplayerCharacters); + _0808D2B2: + + m4aSongNumStop(SE_198); + + SA2_LABEL(gUnknown_0300194C) = s->x; + SA2_LABEL(gUnknown_03002820) = s->y; + + CreateSkatingStoneDebris(worldX + I(stone->qUnkA8) - s->x, worldY + I(stone->qUnkAC) - 20 - s->y); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, stone->base.meX); + TaskDestroy(gCurTask); + return; + } else { + s32 i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (GetBit(stone->unkB2, i)) { + if (PLAYER(i).moveState & MOVESTATE_IN_AIR) { + ClearBit(stone->unkB2, i); + } else { + s32 res; + + PLAYER(i).moveState &= ~MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + res = SA2_LABEL(sub_801F07C)(I(PLAYER(i).qWorldX), I(PLAYER(i).qWorldY), PLAYER(i).layer, +8, NULL, + SA2_LABEL(sub_801ED24)); + + if (res < 0) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + + ClearBit(stone->unkB2, i); + + PLAYER(i).qWorldX += Q(res); + } + + res = SA2_LABEL(sub_801F07C)(I(PLAYER(i).qWorldX), I(PLAYER(i).qWorldY), PLAYER(i).layer, -8, NULL, + SA2_LABEL(sub_801ED24)); + + if (res < 0) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + + ClearBit(stone->unkB2, i); + + PLAYER(i).qWorldX -= Q(res); + } + + if (Coll_Player_Entity_Intersection(s, worldX + I(stone->qUnkA8), worldY + I(stone->qUnkAC) - 12, &PLAYER(i))) { + PLAYER(i).qWorldX += stone->qUnkA0 * 2; + + res = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX + stone->qUnkA0 * 2), I(PLAYER(i).qWorldY), + PLAYER(i).layer, +8, NULL, SA2_LABEL(sub_801ED24)); + + if (res < 0) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + PLAYER(i).charState = CHARSTATE_85; + } + + PLAYER(i).stoodObj = NULL; + + ClearBit(stone->unkB2, i); + + PLAYER(i).qWorldX += Q(res); + PLAYER(i).qSpeedAirX = Q(0); + } else { + res = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldX + stone->qUnkA0 * 2), I(PLAYER(i).qWorldY), + PLAYER(i).layer, -8, NULL, SA2_LABEL(sub_801ED24)); + + if (res < 0) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + PLAYER(i).charState = CHARSTATE_85; + } + + PLAYER(i).stoodObj = NULL; + + ClearBit(stone->unkB2, i); + + PLAYER(i).qWorldX -= Q(res); + PLAYER(i).qSpeedAirX = Q(0); + } + } + + if (!(PLAYER(i).moveState & (MOVESTATE_SPINDASH | MOVESTATE_4))) { + s->y = I(PLAYER(i).qWorldY) - gCamera.y + 46; + } else { + s->y = I(PLAYER(i).qWorldY) - gCamera.y + 42; + } + } else { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + + ClearBit(stone->unkB2, i); + continue; + } + } + } else { + u32 collRes = Coll_Player_PlatformCrumbling(s, worldX + I(stone->qUnkA8), worldY + I(stone->qUnkAC), &PLAYER(i)); + + if (collRes & COLL_FLAG_8) { + PLAYER(i).qWorldY += Q(1); + + SetBit(stone->unkB2, i); + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState |= MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState &= ~MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).moveState &= ~MOVESTATE_4; + + PLAYER(i).charState = CHARSTATE_WALK_A; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + } + } + } + } while (++i < gNumSingleplayerCharacters); + + stone->qUnkA8 += stone->qUnkA0 * 2; + + s->x = worldX + I(stone->qUnkA8) - gCamera.x; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } +} + +void CreateSkatingStoneDebris(CamCoord worldX, CamCoord worldY) +{ + struct Task *t = TaskCreate(Task_SkatingStoneDebris, sizeof(SkatingStoneDebris), 0x2000, 0, TaskDestructor_SkatingStoneDebris); + SkatingStoneDebris *debris = TASK_DATA(t); + Sprite *s = &debris->s[0]; + SpriteTransform *tf = &debris->transform[0]; + + debris->unkF0 = 0; + debris->qUnkF2 = -Q(2); + + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_4) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SKATING_STONE_DEBRIS_4_S); + s->graphics.anim = SA1_ANIM_SKATING_STONE_DEBRIS_4_S; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SKATING_STONE_DEBRIS_S); + s->graphics.anim = SA1_ANIM_SKATING_STONE_DEBRIS_S; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = (SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 12)); + + tf->rotation = 0; + tf->qScaleX = Q(0.75); + tf->qScaleY = Q(0.75); + tf->x = worldX; + tf->y = worldY; + + UpdateSpriteAnimation(s); + +#ifndef BUG_FIX + DmaCopy16(3, s, ++s, sizeof(*s)); + DmaCopy16(3, tf, ++tf, sizeof(*tf)); + + s->frameFlags = (SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 13)); + + tf->y = worldY - 16; + s++; + DmaCopy16(3, tf, ++tf, sizeof(*tf)); +#else + DmaCopy16(3, s, (s + 1), sizeof(*s)); + s = (s + 1); + DmaCopy16(3, tf, (tf + 1), sizeof(*tf)); + tf = (tf + 1); + + s->frameFlags = (SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 13)); + + tf->y = worldY - 16; + s++; + DmaCopy16(3, tf, (tf + 1), sizeof(*tf)); + tf = (tf + 1); +#endif + + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_4) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SKATING_STONE_DEBRIS_4_L); + s->graphics.anim = SA1_ANIM_SKATING_STONE_DEBRIS_4_L; + s->variant = 0; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SKATING_STONE_DEBRIS_L); + s->graphics.anim = SA1_ANIM_SKATING_STONE_DEBRIS_L; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(8); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = (SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 14)); + tf->y = worldY; + + UpdateSpriteAnimation(s); + +#ifndef BUG_FIX + DmaCopy16(3, s, ++s, sizeof(*s)); + DmaCopy16(3, tf, ++tf, sizeof(*tf)); +#else + DmaCopy16(3, s, (s + 1), sizeof(*s)); + s = (s + 1); + DmaCopy16(3, tf, (tf + 1), sizeof(*tf)); + tf = (tf + 1); +#endif + + s->frameFlags = (SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE, 15)); + + tf->y = worldY - 16; + + m4aSongNumStart(SE_BOSS_HIT); +} + +void Task_SkatingStoneDebris(void) +{ + SkatingStoneDebris *debris = TASK_DATA(gCurTask); + Sprite *s = &debris->s[0]; + SpriteTransform *tf; + s16 oldTfX, oldTfY; + s16 qScaleX; + + if (debris->unkF0++ > GBA_FRAMES_PER_SECOND) { + TaskDestroy(gCurTask); + return; + } + + debris->qUnkF2 += Q(40. / 256.); + + { // 0 + tf = &debris->transform[0]; + tf->y += I(debris->qUnkF2); + oldTfX = tf->x; + oldTfY = tf->y; + tf->x = tf->x - gCamera.x; + tf->y = tf->y - gCamera.y; + + tf->x -= debris->unkF0 * 2; + + // TODO: Can these be matched via CLAMP/MIN macros? + qScaleX = tf->qScaleX + Q(8. / 256.); + if (qScaleX > Q(2)) { + qScaleX = Q(2); + } + + tf->qScaleX = qScaleX; + tf->qScaleY = qScaleX; + tf->rotation = (tf->rotation - Q(42. / 256.)) & (SIN_PERIOD - 1); + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + + DisplaySprite(s); + + tf->x = oldTfX; + tf->y = oldTfY; + } + + { // 1 + s = &debris->s[1]; + tf = &debris->transform[1]; + + tf->y += I(debris->qUnkF2); + oldTfX = tf->x; + oldTfY = tf->y; + tf->x = tf->x - gCamera.x; + tf->y = tf->y - gCamera.y; + + tf->x += debris->unkF0; + tf->qScaleX = qScaleX; + tf->qScaleY = qScaleX; + tf->rotation = (tf->rotation + Q(42. / 256.)) & (SIN_PERIOD - 1); + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + + DisplaySprite(s); + + tf->x = oldTfX; + tf->y = oldTfY; + } + + { // 2 + s = &debris->s[2]; + tf = &debris->transform[2]; + + tf->y += I(debris->qUnkF2); + oldTfX = tf->x; + oldTfY = tf->y; + tf->x = tf->x - gCamera.x; + tf->y = tf->y - gCamera.y; + + tf->x += debris->unkF0 * 2; + tf->qScaleX = qScaleX; + tf->qScaleY = qScaleX; + tf->rotation = (tf->rotation + Q(14. / 256.)) & (SIN_PERIOD - 1); + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + + DisplaySprite(s); + + tf->x = oldTfX; + tf->y = oldTfY; + } + + { // 3 + s = &debris->s[3]; + tf = &debris->transform[3]; + + tf->y += I(debris->qUnkF2); + oldTfX = tf->x; + oldTfY = tf->y; + tf->x = tf->x - gCamera.x; + tf->y = tf->y - gCamera.y; + + tf->x -= debris->unkF0; + tf->qScaleX = qScaleX; + tf->qScaleY = qScaleX; + tf->rotation = (tf->rotation - Q(14. / 256.)) & (SIN_PERIOD - 1); + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, SA2_LABEL(gUnknown_030054B8)++); + + SA2_LABEL(sub_8004E14)(s, tf); + + DisplaySprite(s); + + tf->x = oldTfX; + tf->y = oldTfY; + } +} + +void TaskDestructor_SkatingStone(struct Task *t) +{ + SkatingStone *stone = TASK_DATA(t); + VramFree(stone->s.graphics.dest); + m4aSongNumStop(SE_198); +} + +void TaskDestructor_SkatingStoneDebris(struct Task *t) +{ + SkatingStoneDebris *debris = TASK_DATA(t); + VramFree(debris->s[0].graphics.dest); + VramFree(debris->s[2].graphics.dest); +} diff --git a/sa1/src/game/interactables/small_fall_block.c b/sa1/src/game/interactables/small_fall_block.c new file mode 100644 index 0000000000..059b829298 --- /dev/null +++ b/sa1/src/game/interactables/small_fall_block.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/multiplayer_event_mgr.h" + +#include "constants/animations.h" + +/* Blocks that fall down after stepping on them, in X-Zone */ + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 unk3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 qUnk44; // + /* 0x48 */ s16 qUnk48; // worldX? + /* 0x4A */ s16 qUnk4A; // worldY? + /* 0x4C */ u16 unk4C; +} SmallFallBlock; + +void Task_SmallFallBlockMain(void); +void Task_SmallFallBlock1(void); +void Task_SmallFallBlock2(void); +void TaskDestructor_SmallFallBlock(struct Task *t); + +void CreateEntity_SmallFallBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + SmallFallBlock *block; + Sprite *s; + + t = TaskCreate(Task_SmallFallBlockMain, sizeof(SmallFallBlock), 0x2000, 0, TaskDestructor_SmallFallBlock); + + block = TASK_DATA(t); + s = &block->s; + + block->base.regionX = regionX; + block->base.regionY = regionY; + block->base.me = me; + block->base.meX = me->x; +#ifdef BUG_FIX + // NOTE(Jace): In Task_SmallFallBlock1() a Multiplayer-Event gets triggered, + // but without this fix, block->base.id never gets set. + // + // So the call will just trigger the event for a random ID, + // instead of the specific one this entity is referred to. + // + // This bug could be the reason why these blocks only appear in the X-Zone. + block->base.id = id; +#endif + + block->unk40 = 0; + block->qUnk44 = 0; + block->unk4C = 0; + block->qUnk48 = 0; + block->qUnk4A = 0; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_FALLING_BRICK_XZONE); + s->variant = 0; + s->graphics.anim = SA1_ANIM_FALLING_BRICK_XZONE; + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_SmallFallBlockMain(void) +{ + SmallFallBlock *block = TASK_DATA(gCurTask); + Sprite *s = &block->s; + CamCoord worldX, worldY; + MapEntity *me = block->base.me; + u32 res; + + worldX = TO_WORLD_POS(block->base.meX, block->base.regionX); + worldY = TO_WORLD_POS(me->y, block->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + res = Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer); + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + res |= Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner); + } + + if ((res & COLL_FLAG_8) && (gPlayer.stoodObj == s)) { + gCurTask->main = Task_SmallFallBlock1; + block->unk3C = 30; + } + + if (IS_MULTI_PLAYER) { + block->unk3C = 0; + gCurTask->main = Task_SmallFallBlock2; + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, block->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) + && ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s)))) { + if (block->unk4C != 0x100) { + block->unk4C += 0x10; + } + } else { + if (block->unk4C != 0) { + block->unk4C -= 0x10; + } + } + + s->y += (SIN(block->unk4C) >> 12); + + DisplaySprite(s); +} + +void Task_SmallFallBlock1(void) +{ + SmallFallBlock *block = TASK_DATA(gCurTask); + Sprite *s = &block->s; + CamCoord worldX, worldY; + MapEntity *me = block->base.me; + + worldX = TO_WORLD_POS(block->base.meX, block->base.regionX); + worldY = TO_WORLD_POS(me->y, block->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPlayer); + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + Coll_Player_PlatformCrumbling(s, worldX, worldY, &gPartner); + } + + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + block->unk3C = 0; + gCurTask->main = Task_SmallFallBlock2; + } else if (--block->unk3C == 0) { + block->unk3C = 0; + gCurTask->main = Task_SmallFallBlock2; + + if (IS_MULTI_PLAYER) { + RoomEvent_PlatformChange *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLATFORM_CHANGE; + roomEvent->x = block->base.regionX; + roomEvent->y = block->base.regionY; + roomEvent->id = block->base.id; + roomEvent->action = 1; + } + } + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, block->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) + && ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s)))) { + if (block->unk4C != 0x100) { + block->unk4C += 0x10; + } + } else { + if (block->unk4C != 0) { + block->unk4C -= 0x10; + } + } + + s->y += (SIN(block->unk4C) >> 12); + + DisplaySprite(s); +} + +void Task_SmallFallBlock2(void) +{ + SmallFallBlock *block = TASK_DATA(gCurTask); + Sprite *s = &block->s; + CamCoord worldX, worldY; + MapEntity *me = block->base.me; + u32 res; + s32 i; + + block->qUnk4A += 0x2A; + block->qUnk44 += block->qUnk4A; + + worldX = TO_WORLD_POS(block->base.meX, block->base.regionX); + worldY = TO_WORLD_POS(me->y, block->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + I(block->qUnk44); + block->unk3C++; + + i = 0; + do { + Player *p = &PLAYER(i); + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + if (block->unk3C > 32) { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->qSpeedAirY = block->qUnk4A; + } else { + p->qWorldX += block->qUnk48; + p->qWorldY += Q(1) + block->qUnk4A; + } + } + + if (block->unk3C < 32) { + Coll_Player_PlatformCrumbling(s, worldX, worldY + I(block->qUnk44), p); + } + + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, block->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) + && ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s)))) { + if (block->unk4C != 0x100) { + block->unk4C += 0x10; + } + } else { + if (block->unk4C != 0) { + block->unk4C -= 0x10; + } + } + + s->y += (SIN(block->unk4C) >> 12); + + DisplaySprite(s); +} + +void TaskDestructor_SmallFallBlock(struct Task *t) +{ + SmallFallBlock *block = TASK_DATA(t); + VramFree(block->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/special_spring.c b/sa1/src/game/interactables/special_spring.c new file mode 100644 index 0000000000..bf577b1f50 --- /dev/null +++ b/sa1/src/game/interactables/special_spring.c @@ -0,0 +1,218 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "lib/m4a/m4a.h" +#include "malloc_vram.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/special_stage/main.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u16 camX; + /* 0x3E */ u16 camY; +} SpecialSpring; + +void Task_SpecialSpringMain(void); +void Task_TransitionSpStage(void); +void TaskDestructor_SpecialSpring(struct Task *t); + +void CreateEntity_SpecialSpring(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if (gGameMode != GAME_MODE_SINGLE_PLAYER) { + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + { + struct Task *t = TaskCreate(Task_SpecialSpringMain, sizeof(SpecialSpring), 0x2000, 0, TaskDestructor_SpecialSpring); + SpecialSpring *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPECIAL_SPRING); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPECIAL_SPRING; + s->variant = 1; + + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + } +} + +void Task_SpecialSpringMain(void) +{ + u32 res = 0; // result of Coll_AmyHammer_Spring() + SpecialSpring *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((s->variant == 0) && (s->frameFlags & SPRITE_FLAG(ANIM_OVER, 1))) { + s->variant = 1; + s->prevVariant = -1; + } + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + if (sub_80096B0(s, worldX, worldY, &gPartner) & COLL_FLAG_8) { + SA2_LABEL(sub_8021BE0)(&gPartner); + gPartner.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPartner.moveState |= MOVESTATE_IN_AIR; + gPartner.moveState &= ~MOVESTATE_100; + gPartner.qSpeedAirY = -Q(7.5); + gPartner.charState = CHARSTATE_SPRING_B; + s->variant = 0; + s->prevVariant = -1; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPartner, 6, 14); + m4aSongNumStart(SE_SPRING); + } + } + + if (PLAYER_IS_ALIVE) { + // NOTE: The 'res =' assignment inside the if is correct!!! + if ((sub_80096B0(s, worldX, worldY, &gPlayer) & COLL_FLAG_8) || (res = Coll_AmyHammer_Spring(s, worldX, worldY, &gPlayer))) { + SA2_LABEL(sub_8021BE0)(&gPlayer); + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.moveState &= ~MOVESTATE_100; + + gPlayer.qSpeedAirY = -Q(7.5); + if (res) { + s16 qSpeed = gPlayer.qSpeedAirY; + qSpeed += (qSpeed >> 1); + gPlayer.qSpeedAirY = qSpeed; + } + + gPlayer.charState = CHARSTATE_SPRING_B; + + spring->camX = gCamera.x; + spring->camY = gCamera.y; + + if (gPlayer.SA2_LABEL(unk99)[1] == 0) { + gPlayer.moveState |= MOVESTATE_IA_OVERRIDE; + gStageFlags |= STAGE_FLAG__ACT_START; + } + + s->variant = 0; + s->prevVariant = -1; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + m4aSongNumStart(SE_SPRING); + gCurTask->main = Task_TransitionSpStage; + } + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } else { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_TransitionSpStage(void) +{ + SpecialSpring *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + if (sub_80096B0(s, worldX, worldY, &gPartner) & COLL_FLAG_8) { + SA2_LABEL(sub_8021BE0)(&gPartner); + gPartner.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPartner.moveState |= MOVESTATE_IN_AIR; + gPartner.moveState &= ~MOVESTATE_100; + gPartner.qSpeedAirY = -Q(7.5); + gPartner.charState = CHARSTATE_SPRING_B; + s->variant = 0; + s->prevVariant = -1; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPartner, 6, 14); + m4aSongNumStart(SE_SPRING); + } + } + + if (gPlayer.SA2_LABEL(unk99)[1] == 0) { + gCamera.x = spring->camX; + gCamera.y = spring->camY; + + gPlayer.qWorldY -= Q(7.5); + + if (I(gPlayer.qWorldY) - gCamera.y < -128) { + gSpecialStageReturnX = gPlayer.checkPointX; + gSpecialStageReturnY = gPlayer.checkPointY; + + gPlayer.checkPointX = worldX; + gPlayer.checkPointY = worldY; + + TaskDestroy(gCurTask); + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + CreateSpecialStageIntro(); + return; + } else { + UpdateSpriteAnimation(s); + } + } else { + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_SPECIAL_SPRING; + s->variant = 1; + gCurTask->main = Task_SpecialSpringMain; + UpdateSpriteAnimation(s); + } + } + DisplaySprite(s); +} + +void TaskDestructor_SpecialSpring(struct Task *t) +{ + SpecialSpring *spring = TASK_DATA(t); + VramFree(spring->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/spiked_barrel.c b/sa1/src/game/interactables/spiked_barrel.c new file mode 100644 index 0000000000..ebccdbcbd1 --- /dev/null +++ b/sa1/src/game/interactables/spiked_barrel.c @@ -0,0 +1,232 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; + + /* 0x44 */ u16 unk44; + /* 0x46 */ u16 unk46; + /* 0x48 */ s32 unk48; + /* 0x4C */ s32 unk4C; + /* 0x50 */ s16 unk50; + /* 0x52 */ s16 unk52; + /* 0x54 */ u16 unk54; + /* 0x56 */ u8 unk56; + /* 0x57 */ u8 unk57; +} SpikedBarrel; + +void Task_SpikedBarrel(void); +void TaskDestructor_SpikedBarrel(struct Task *t); + +// TODO: Unused except for the 1st element... +const TileInfoBarrel gUnknown_086CEE50[4] = { + { SA1_ANIM_SPIKED_BARREL, 0 }, + { SA1_ANIM_SPIKED_BARREL, 1 }, + { SA1_ANIM_SPIKED_BARREL, 2 }, + { SA1_ANIM_SPIKED_BARREL, 3 }, +}; + +void CreateEntity_SpikedBarrel(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_SpikedBarrel, sizeof(SpikedBarrel), 0x2000, 0, TaskDestructor_SpikedBarrel); + SpikedBarrel *barrel = TASK_DATA(t); + Sprite *s = &barrel->s; + + barrel->base.regionX = regionX; + barrel->base.regionY = regionY; + barrel->base.me = me; + barrel->base.meX = me->x; + barrel->base.id = id; + + barrel->unk48 = 0; + barrel->unk4C = 0; + barrel->unk54 = 0; + barrel->unk56 = 0; + barrel->unk57 = 0x10; + + if (me->d.uData[2] > me->d.uData[3]) { + if (me->d.sData[0] >= 0) { + barrel->unk50 = 4; + barrel->unk44 = 0; + barrel->unk52 = 0; + } else { + barrel->unk50 = 4; + barrel->unk44 = 0x80; + barrel->unk52 = 0; + } + } else { + if (me->d.sData[1] >= 0) { + barrel->unk50 = 0; + barrel->unk52 = 4; + barrel->unk44 = 0; + } else { + barrel->unk50 = 0; + barrel->unk52 = 4; + barrel->unk44 = 0x80; + } + } + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPIKED_BARREL); + s->graphics.anim = gUnknown_086CEE50[0].anim; + s->variant = gUnknown_086CEE50[0].variant; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +// (97.43%) https://decomp.me/scratch/qM0DE +NONMATCH("asm/non_matching/game/interactables/spiked_barrel__Task_SpikedBarrel.inc", void Task_SpikedBarrel(void)) +{ + SpikedBarrel *barrel; + Sprite *s; + s32 unk50; + Player *p; + CamCoord worldX; + CamCoord worldY; // sp00, sp04 + MapEntity *me; + s32 qSp0C; + s32 qSp10 = 0; + s32 r3; + s32 r6; + s32 r8; + s32 theta; + s32 i; + qSp10 = 0; + barrel = TASK_DATA(gCurTask); + s = &barrel->s; + me = barrel->base.me; + unk50 = barrel->unk50; + + if (barrel->unk50 != 0) { + r8 = barrel->unk48; + r3 = Q(me->d.uData[2] * TILE_WIDTH); + theta = CLAMP_SIN_PERIOD(barrel->unk50 * ((gStageTime + barrel->unk44) & 0xFF)); + barrel->unk48 = (r3 * SIN(theta)) >> 14; + qSp0C = barrel->unk48 - r8; + } else { + // _080909F4 + qSp0C = 0; + barrel->unk48 = qSp10; + } + // _080909FC + + if (barrel->unk52 != 0) { + r6 = barrel->unk4C; + r3 = Q(me->d.uData[3] * TILE_WIDTH); + theta = CLAMP_SIN_PERIOD(barrel->unk52 * ((gStageTime + barrel->unk44) & 0xFF)); + barrel->unk4C = (r3 * SIN(theta)) >> 14; + r6 = barrel->unk4C - r6; + qSp10 = r6; + } else { + // _08090A4C + r6 = 0; + qSp10 = 0; + barrel->unk4C = 0; + } + // _08090A52 + + worldX = TO_WORLD_POS(barrel->base.meX, barrel->base.regionX); + worldY = TO_WORLD_POS(me->y, barrel->base.regionY); + + s->x = worldX - gCamera.x + Div(barrel->unk48, 0x100); + s->y = worldY - gCamera.y + Div(barrel->unk4C, 0x100); + + i = 0; + do { + // _08090AB2_loop + p = &PLAYER(i); + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->qWorldX += qSp0C; + p->qWorldY += Q(1) + qSp10; + } + // _08090AE2 + + Coll_Player_PlatformCrumbling(s, I(barrel->unk48) + worldX, I(barrel->unk4C) + worldY, p); + + if ((barrel->unk56 == 0) || (barrel->unk56 == 2)) { + if (s->hitboxes[1].index != HITBOX_STATE_INACTIVE) { + // _08090B2C + s32 r0, r2; + + // r0 = worldX + Div(barrel->unk48, 0x100) + s->hitboxes[1].b.left; + // r2 = I(p->qWorldX) + p->spriteInfoBody->s.hitboxes[0].b.left; + + // RECT_COLLISION(x0,y0,hb0,x1,y1,hb1) + if (RECT_COLLISION(worldX + Div(barrel->unk48, 0x100), worldY + Div(barrel->unk4C, 0x100), &s->hitboxes[1].b, I(p->qWorldX), + I(p->qWorldY), &p->spriteInfoBody->s.hitboxes[0].b)) { + if (PLAYER_IS_ALIVE) { + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + } + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + // _08090C9C + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, barrel->base.meX); + TaskDestroy(gCurTask); + return; + } else if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || ((gNumSingleplayerCharacters == 2) && ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s)))) { + // _08090D1C + if (barrel->unk54 != 0x100) { + barrel->unk54 += 0x10; + } + } else { + if (barrel->unk54 != 0x0) { + barrel->unk54 -= 0x10; + } + } + + s->y += (SIN(barrel->unk54) >> 12); + + if (--barrel->unk57 == 0) { + if (barrel->unk56 == 0 || barrel->unk56 == 2) { + barrel->unk57 = 0x30; + } else { + barrel->unk57 = 0x10; + } + // _08090DB6 + + barrel->unk56 = (barrel->unk56 + 1) % 4u; + s->prevVariant = -1; + s->variant = barrel->unk56; + } + + // _08090DD4 + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +END_NONMATCH + +void TaskDestructor_SpikedBarrel(struct Task *t) +{ + SpikedBarrel *barrel = TASK_DATA(t); + VramFree(barrel->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/spikes.c b/sa1/src/game/interactables/spikes.c new file mode 100644 index 0000000000..5a41d30e9c --- /dev/null +++ b/sa1/src/game/interactables/spikes.c @@ -0,0 +1,841 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/mp_player.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u32 movestateBuffer[NUM_SINGLEPLAYER_CHARS_MAX]; +} Spikes; + +void Task_Spikes_Up(void); +void Task_Spikes_Down(void); +void Task_Spikes_Horizontal(void); +void Task_Spikes_HidingUp(void); +void Task_Spikes_HidingDown(void); + +bool32 sub_8020D44(Sprite *s, MapEntity *me, Spikes *spikes, Player *p); +bool32 sub_8020E98(Sprite *s, MapEntity *me, Spikes *spikes, Player *p); +bool32 sub_8020F2C(Sprite *s, MapEntity *me, Spikes *spikes, Player *p, bool32 *out); +bool32 sub_8021208(Sprite *s, MapEntity *me, Spikes *spikes, Player *p, bool32 *out); + +void TaskDestructor_Spikes(struct Task *t); + +void CreateEntity_Spikes_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spikes_Up, sizeof(Spikes), 0x2000, 0, NULL); + Spikes *spikes = TASK_DATA(t); + Sprite *s = &spikes->s; + CamCoord worldX, worldY; + + spikes->movestateBuffer[PLAYER_2] = 0; + spikes->movestateBuffer[PLAYER_1] = 0; + + spikes->base.regionX = regionX; + spikes->base.regionY = regionY; + spikes->base.me = me; + spikes->base.meX = me->x; + spikes->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_SPIKES; + s->oamFlags = SPRITE_OAM_ORDER(17); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void CreateEntity_Spikes_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spikes_Down, sizeof(Spikes), 0x2000, 0, NULL); + Spikes *spikes = TASK_DATA(t); + Sprite *s = &spikes->s; + CamCoord worldX, worldY; + + spikes->movestateBuffer[PLAYER_2] = 0; + spikes->movestateBuffer[PLAYER_1] = 0; + + spikes->base.regionX = regionX; + spikes->base.regionY = regionY; + spikes->base.me = me; + spikes->base.meX = me->x; + spikes->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = VRAM_RESERVED_SPIKES; + s->oamFlags = SPRITE_OAM_ORDER(17); +#ifdef BUG_FIX + // TODO: I'm confused. + // The Up-Spikes set this, but not the Down-Spikes? + s->graphics.size = 0; +#endif + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(Y_FLIP, 1); + UpdateSpriteAnimation(s); +} + +void Task_Spikes_Up(void) +{ + Spikes *spikes = TASK_DATA(gCurTask); + Sprite *s = &spikes->s; + MapEntity *me = spikes->base.me; + CamCoord worldX, worldY; + s32 i, j; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (me->d.sData[0] != 0) || (SA2_LABEL(gUnknown_030053E0) != 0)) { + i = 0; + do { + // This if-else is the only diff between Up/Down + if (!GRAVITY_IS_INVERTED) { + sub_8020D44(s, me, spikes, &PLAYER(i)); + } else { + sub_8020E98(s, me, spikes, &PLAYER(i)); + } + } while (++i < gNumSingleplayerCharacters); + } + + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) && (me->d.sData[0] == 0) && (SA2_LABEL(gUnknown_030053E0) == 0)) { + j = 0; + do { + if (spikes->movestateBuffer[j] & 0x20) { + PLAYER(j).moveState &= ~MOVESTATE_20; + } + + if (spikes->movestateBuffer[j] & 0x8) { + PLAYER(j).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } while (++j < gNumSingleplayerCharacters); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spikes->base.meX); + TaskDestroy(gCurTask); + return; + } + + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (me->d.sData[0] != 0) || (SA2_LABEL(gUnknown_030053E0) != 0)) { + DisplaySprite(s); + } +} + +void Task_Spikes_Down(void) +{ + Spikes *spikes = TASK_DATA(gCurTask); + Sprite *s = &spikes->s; + MapEntity *me = spikes->base.me; + CamCoord worldX, worldY; + s32 i, j; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (me->d.sData[0] != 0) || (SA2_LABEL(gUnknown_030053E0) != 0)) { + i = 0; + do { + // This if-else is the only diff between Up/Down + if (!GRAVITY_IS_INVERTED) { + sub_8020E98(s, me, spikes, &PLAYER(i)); + } else { + sub_8020D44(s, me, spikes, &PLAYER(i)); + } + } while (++i < gNumSingleplayerCharacters); + } + + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) && (me->d.sData[0] == 0) && (SA2_LABEL(gUnknown_030053E0) == 0)) { + j = 0; + do { + if (spikes->movestateBuffer[j] & MOVESTATE_20) { + PLAYER(j).moveState &= ~MOVESTATE_20; + } + + if (spikes->movestateBuffer[j] & MOVESTATE_STOOD_ON_OBJ) { + PLAYER(j).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } while (++j < gNumSingleplayerCharacters); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spikes->base.meX); + TaskDestroy(gCurTask); + return; + } + + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (me->d.sData[0] != 0) || (SA2_LABEL(gUnknown_030053E0) != 0)) { + DisplaySprite(s); + } +} + +void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spikes_Horizontal, sizeof(Spikes), 0x2000, 0, TaskDestructor_Spikes); + Spikes *spikes = TASK_DATA(t); + Sprite *s = &spikes->s; + CamCoord worldX, worldY; + + spikes->movestateBuffer[PLAYER_2] = 0; + spikes->movestateBuffer[PLAYER_1] = 0; + + spikes->base.regionX = regionX; + spikes->base.regionY = regionY; + spikes->base.me = me; + spikes->base.meX = me->x; + spikes->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPIKES); + s->oamFlags = SPRITE_OAM_ORDER(17); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 3; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (gGameMode == 6) { + if (me->index == 2) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } + } else { + if (me->index == 3) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } + } + UpdateSpriteAnimation(s); +} + +void Task_Spikes_Horizontal(void) +{ + Spikes *spikes = TASK_DATA(gCurTask); + Sprite *s = &spikes->s; + MapEntity *me = spikes->base.me; + CamCoord worldX, worldY; + s32 i, j; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (me->d.sData[0] != 0) || (SA2_LABEL(gUnknown_030053E0) != 0)) { + i = 0; + do { + u32 res = sub_80096B0(s, worldX, worldY, &PLAYER(i)); + s32 r2; + + if (res & 0x10008) { + continue; + } + + r2 = 3; + if (gGameMode == 6) { + r2 = 2; + } + + if (res & 0x20000) { + if (r2 == me->index) { + if (Coll_DamagePlayer(&PLAYER(i))) { + m4aSongNumStart(SE_171); + } + } else { + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), -(PLAYER(i).spriteOffsetY + 1), +(PLAYER(i).spriteOffsetX + 5), + +(PLAYER(i).spriteOffsetY + 1) }; + + PLAYER(i).qWorldX = Q(worldX + s->hitboxes[0].b.right - arr[0] + 1); + } + } else if (res & 0x40000) { + if ((r2 + 1) == me->index) { + if (Coll_DamagePlayer(&PLAYER(i))) { + m4aSongNumStart(SE_171); + } + } else { + s8 arr[4] = { -(PLAYER(i).spriteOffsetX + 5), -(PLAYER(i).spriteOffsetY + 1), +(PLAYER(i).spriteOffsetX + 5), + +(PLAYER(i).spriteOffsetY + 1) }; + + PLAYER(i).qWorldX = Q(worldX + s->hitboxes[0].b.left - arr[2] - 1); + } + } + } while (++i < gNumSingleplayerCharacters); + } + + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) && (me->d.sData[0] == 0) && (SA2_LABEL(gUnknown_030053E0) == 0)) { + j = 0; + do { + if (spikes->movestateBuffer[j] & MOVESTATE_20) { + PLAYER(j).moveState &= ~MOVESTATE_20; + } + + if (spikes->movestateBuffer[j] & MOVESTATE_STOOD_ON_OBJ) { + PLAYER(j).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + } while (++j < gNumSingleplayerCharacters); + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spikes->base.meX); + TaskDestroy(gCurTask); + return; + } + + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (me->d.sData[0] != 0) || (SA2_LABEL(gUnknown_030053E0) != 0)) { + DisplaySprite(s); + } +} + +void CreateEntity_Spikes_HidingUp(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spikes_HidingUp, sizeof(Spikes), 0x2000, 0, TaskDestructor_Spikes); + Spikes *spikes = TASK_DATA(t); + Sprite *s = &spikes->s; + CamCoord worldX, worldY; + + spikes->movestateBuffer[PLAYER_2] = 0; + spikes->movestateBuffer[PLAYER_1] = 0; + + spikes->base.regionX = regionX; + spikes->base.regionY = regionY; + spikes->base.me = me; + spikes->base.meX = me->x; + spikes->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPIKES); + s->oamFlags = SPRITE_OAM_ORDER(17); + s->graphics.size = 0; + s->graphics.anim = -1; + s->variant = -1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_Spikes_HidingUp(void) +{ + bool32 sp04 = 0; + Spikes *spikes = TASK_DATA(gCurTask); + Sprite *s = &spikes->s; + MapEntity *me = spikes->base.me; + CamCoord worldX, worldY; + s32 i, j; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spikes->base.meX); + TaskDestroy(gCurTask); + return; + } + + { + bool32 res; + i = 0; + do { + // This if-else is the only diff between Up/Down + if (!GRAVITY_IS_INVERTED) { + res = sub_8020F2C(s, me, spikes, &PLAYER(i), &sp04); + } else { + res = sub_8021208(s, me, spikes, &PLAYER(i), &sp04); + } + } while (++i < gNumSingleplayerCharacters); + + if (res) { + DisplaySprite(s); + } + } +} + +void CreateEntity_Spikes_HidingDown(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spikes_HidingDown, sizeof(Spikes), 0x2000, 0, TaskDestructor_Spikes); + Spikes *spikes = TASK_DATA(t); + Sprite *s = &spikes->s; + CamCoord worldX, worldY; + + spikes->movestateBuffer[PLAYER_2] = 0; + spikes->movestateBuffer[PLAYER_1] = 0; + + spikes->base.regionX = regionX; + spikes->base.regionY = regionY; + spikes->base.me = me; + spikes->base.meX = me->x; + spikes->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPIKES); + s->oamFlags = SPRITE_OAM_ORDER(17); + s->graphics.size = 0; + s->graphics.anim = -1; + s->variant = -1; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(Y_FLIP, 1); +} + +void Task_Spikes_HidingDown(void) +{ + bool32 sp04 = 0; + Spikes *spikes = TASK_DATA(gCurTask); + Sprite *s = &spikes->s; + MapEntity *me = spikes->base.me; + CamCoord worldX, worldY; + s32 i, j; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spikes->base.meX); + TaskDestroy(gCurTask); + return; + } + + { + bool32 res; + i = 0; + do { + // This if-else is the only diff between Up/Down + if (!GRAVITY_IS_INVERTED) { + res = sub_8021208(s, me, spikes, &PLAYER(i), &sp04); + } else { + res = sub_8020F2C(s, me, spikes, &PLAYER(i), &sp04); + } + } while (++i < gNumSingleplayerCharacters); + + if (res) { + DisplaySprite(s); + } + } +} + +bool32 sub_8020D44(Sprite *s, MapEntity *me, Spikes *spikes, Player *p) +{ + s32 tempPlayerID = p->playerID; + CamCoord worldX, worldY; + u32 movestate; + s32 i; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) && (me->d.sData[0] == 0) && (SA2_LABEL(gUnknown_030053E0) == 30) + && (Coll_Player_Entity_Intersection(s, worldX, worldY, p) == 0x80000)) { + s8 arr[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), +(p->spriteOffsetX + 5), (p->spriteOffsetY - 1) }; + + if (!GRAVITY_IS_INVERTED) { + p->qWorldY = Q(worldY + s->hitboxes[0].b.top - arr[3]); + } else { + p->qWorldY = Q(worldY + s->hitboxes[0].b.bottom + arr[3]); + } + + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + return TRUE; + } + } + + movestate = sub_80096B0(s, worldX, worldY, p); + spikes->movestateBuffer[tempPlayerID] = movestate; + + if (movestate & MOVESTATE_STOOD_ON_OBJ) { + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + return TRUE; + } + } + + return FALSE; +} + +bool32 sub_8020E98(Sprite *s, MapEntity *me, Spikes *spikes, Player *p) +{ + s32 tempPlayerID = p->playerID; + CamCoord worldX, worldY; + u32 movestate; + s32 i; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (!(p->moveState & MOVESTATE_IA_OVERRIDE)) { + movestate = sub_80096B0(s, worldX, worldY, p); + spikes->movestateBuffer[tempPlayerID] = movestate; + + if (movestate & MOVESTATE_10000) { + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + return TRUE; + } + } + } + + return FALSE; +} + +bool32 sub_8020F2C(Sprite *s, MapEntity *me, Spikes *spikes, Player *p, bool32 *out) +{ + CamCoord worldX, worldY; + u32 sp0C; + s32 tempPlayerID; + s32 i; + + sp0C = gStageTime % 128u; + tempPlayerID = p->playerID; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (sp0C < 60) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + return FALSE; + } else if (sp0C < 62) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 0; + UpdateSpriteAnimation(s); + } else if (sp0C < 64) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 1; + UpdateSpriteAnimation(s); + } else if (sp0C < 124) { +#ifndef NON_MATCHING + // TODO: Register fake-match + register u32 res asm("r0"); +#else + u32 res; +#endif + u8 variant = s->variant; + u8 pid = p->playerID; + + if ((variant != 2) || ((pid != PLAYER_1) && (*out))) { + if (pid == PLAYER_1) { + { + *out = TRUE; + } + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 2; + UpdateSpriteAnimation(s); + + if (Coll_Player_Entity_Intersection(s, worldX, worldY, p) == COLL_FLAG_80000) { + s8 arr[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), +(p->spriteOffsetX + 5), (p->spriteOffsetY - 1) }; + + if (!GRAVITY_IS_INVERTED) { + p->qWorldY = Q(worldY + s->hitboxes[0].b.top - arr[3]); + } else { + p->qWorldY = Q(worldY + s->hitboxes[0].b.bottom + arr[3]); + } + + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + } + } else { + res = sub_80096B0(s, worldX, worldY, p); + + if (res & COLL_FLAG_8) { + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + } + } + } + } else { + res = sub_80096B0(s, worldX, worldY, p); + spikes->movestateBuffer[tempPlayerID] = res; + + test: + if (res & COLL_FLAG_8) { + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + } + } + } + } else if (sp0C < 126) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 1; + UpdateSpriteAnimation(s); + } else { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 0; + UpdateSpriteAnimation(s); + } + + return TRUE; +} + +bool32 sub_8021208(Sprite *s, MapEntity *me, Spikes *spikes, Player *p, bool32 *out) +{ + CamCoord worldX, worldY; + u32 sp0C; + s32 tempPlayerID; + s32 i; + + sp0C = gStageTime % 128u; + tempPlayerID = p->playerID; + + worldX = TO_WORLD_POS(spikes->base.meX, spikes->base.regionX); + worldY = TO_WORLD_POS(me->y, spikes->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (sp0C < 60) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + return FALSE; + } else if (sp0C < 62) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 0; + UpdateSpriteAnimation(s); + } else if (sp0C < 64) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 1; + UpdateSpriteAnimation(s); + } else if (sp0C < 124) { +#ifndef NON_MATCHING + // TODO: Register fake-match + register u32 res asm("r0"); +#else + u32 res; +#endif + u8 variant = s->variant; + u8 pid = p->playerID; + + if ((variant != 2) || ((pid != PLAYER_1) && (*out))) { + if (pid == PLAYER_1) { + { + *out = TRUE; + } + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 2; + UpdateSpriteAnimation(s); + + if (Coll_Player_Entity_Intersection(s, worldX, worldY, p) == COLL_FLAG_80000) { + s8 arr[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), +(p->spriteOffsetX + 5), (p->spriteOffsetY - 1) }; + + // Change 1 from sub_8020F2C: change Y-offsets + if (!GRAVITY_IS_INVERTED) { + p->qWorldY = Q(worldY + s->hitboxes[0].b.bottom - arr[1]); + } else { + p->qWorldY = Q(worldY + s->hitboxes[0].b.top + arr[1]); + } + + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + } + } + // Change 2 from sub_8020F2C: removed else-block here + } else { + res = sub_80096B0(s, worldX, worldY, p); + spikes->movestateBuffer[tempPlayerID] = res; + + // Change 3 from sub_8020F2C: COLL_FLAG_10000 not COLL_FLAG_8 + if (res & COLL_FLAG_10000) { + if (Coll_DamagePlayer(p)) { + m4aSongNumStart(SE_171); + } + } + } + } else if (sp0C < 126) { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 1; + UpdateSpriteAnimation(s); + } else { + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + if (spikes->movestateBuffer[tempPlayerID] & MOVESTATE_20) { + p->moveState &= ~MOVESTATE_20; + spikes->movestateBuffer[tempPlayerID] = 0; + } + + s->graphics.anim = SA1_ANIM_SPIKES; + s->variant = 0; + UpdateSpriteAnimation(s); + } + + return TRUE; +} + +void TaskDestructor_Spikes(struct Task *t) +{ + Spikes *spikes = TASK_DATA(t); + VramFree(spikes->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/spring.c b/sa1/src/game/interactables/spring.c new file mode 100644 index 0000000000..b583920ad0 --- /dev/null +++ b/sa1/src/game/interactables/spring.c @@ -0,0 +1,1080 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/multiplayer/mp_player.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player_controls.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; +} SpringA; + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; +} SpringB; + +void Task_Spring_Normal_Up(void); +void Task_8021BC0(void); +void Task_8021E70(void); +void Task_Spring_Normal_Down(void); +void Task_Spring_Horizontal(void); +void Task_Spring_Big_Up(void); +void Task_80220FC(void); +void Task_8022354(void); +void Task_Spring_Small_Up(void); +void Task_8022594(void); +void TaskDestructor_Spring(struct Task *t); + +bool32 sub_8022640(Sprite *s, MapEntity *me, SpringA *spring, Player *p); +bool32 sub_8022804(Sprite *s, MapEntity *me, SpringA *spring, Player *p); +bool32 sub_80228D0(Sprite *s, MapEntity *me, SpringA *spring, Player *p); +bool32 sub_8022AB4(Sprite *s, MapEntity *me, SpringB *spring, Player *p); +bool32 sub_8022E14(Sprite *s, MapEntity *me, SpringB *spring, Player *p); + +const s16 sData0Accel[4] = { Q(7.5), Q(9.0), Q(10.5), Q(12.0) }; + +void CreateEntity_Spring_Normal_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spring_Normal_Up, sizeof(SpringA), 0x2000, 0, TaskDestructor_Spring); + SpringA *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPRING; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + + if (!(me->d.sData[0] & 0x2)) { + DmaCopy32(3, &gRefSpriteTables->palettes[288 * sizeof(u16)], &gObjPalette[8 * 16], 16 * sizeof(u16)); + gFlags |= FLAGS_UPDATE_SPRITE_PALETTES; + s->frameFlags = (SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(18, 1)); + s->palId = 1; + } else { + s->frameFlags = (SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(18, 0)); + } + + UpdateSpriteAnimation(s); +} + +void Task_Spring_Normal_Up(void) +{ + SpringA *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + struct Task **t; + TaskMain func; + + i = 0; + t = &gCurTask; + func = Task_8021BC0; + do { + bool32 res; + + if (!GRAVITY_IS_INVERTED) { + res = sub_8022640(s, me, spring, &PLAYER(i)); + } else { + res = sub_8022804(s, me, spring, &PLAYER(i)); + } + + if (res) { + (*t)->main = func; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_8021BC0(void) +{ + SpringA *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + if (!GRAVITY_IS_INVERTED) { + res = sub_8022640(s, me, spring, &PLAYER(i)); + } else { + res = sub_8022804(s, me, spring, &PLAYER(i)); + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 0; + UpdateSpriteAnimation(s); + + gCurTask->main = Task_Spring_Normal_Up; + } + DisplaySprite(s); +} + +void CreateEntity_Spring_Normal_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spring_Normal_Down, sizeof(SpringA), 0x2000, 0, TaskDestructor_Spring); + SpringA *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPRING; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + + s->frameFlags = (SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(Y_FLIP, 1)); + + UpdateSpriteAnimation(s); +} + +void Task_Spring_Normal_Down(void) +{ + SpringA *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + struct Task **t; + TaskMain func; + + i = 0; + t = &gCurTask; + func = Task_8021E70; + do { + bool32 res; + + if (!GRAVITY_IS_INVERTED) { + res = sub_8022804(s, me, spring, &PLAYER(i)); + } else { + res = sub_8022640(s, me, spring, &PLAYER(i)); + } + + if (res) { + (*t)->main = func; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_8021E70(void) +{ + SpringA *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + if (!GRAVITY_IS_INVERTED) { + res = sub_8022804(s, me, spring, &PLAYER(i)); + } else { + res = sub_8022640(s, me, spring, &PLAYER(i)); + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 0; + UpdateSpriteAnimation(s); + + gCurTask->main = Task_Spring_Normal_Down; + } + DisplaySprite(s); +} + +// NOTE: IA_010 = Left, IA_011 = Right +void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spring_Horizontal, sizeof(SpringA), 0x2000, 0, TaskDestructor_Spring); + SpringA *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPRING; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = (SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(18, 0)); + + if (gGameMode == 6) { + // IA__SPRING__LEFT - Multiplayer_Ver + if (me->index == 8) { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + } else { + if (me->index == IA__SPRING__LEFT) { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + } + + UpdateSpriteAnimation(s); +} + +void Task_Spring_Horizontal(void) +{ + SpringA *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + res = sub_80228D0(s, me, spring, &PLAYER(i)); + + if (res) { + gCurTask->main = Task_80220FC; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_80220FC(void) +{ + SpringA *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + sub_80228D0(s, me, spring, &PLAYER(i)); + + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 2; + UpdateSpriteAnimation(s); + + gCurTask->main = Task_Spring_Horizontal; + } + DisplaySprite(s); +} + +void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spring_Big_Up, sizeof(SpringB), 0x2000, 0, TaskDestructor_Spring); + SpringB *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPRING; + s->variant = 4; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (gGameMode == 6) { + // IA__SPRING__LEFT - Multiplayer_Ver + if (me->index == 10) { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + } else { + if (me->index == IA__SPRING__BIG_UPLEFT) { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + } + + UpdateSpriteAnimation(s); +} + +void Task_Spring_Big_Up(void) +{ + SpringB *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + res = sub_8022AB4(s, me, spring, &PLAYER(i)); + + if (res) { + gCurTask->main = Task_8022354; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_8022354(void) +{ + SpringB *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + sub_8022AB4(s, me, spring, &PLAYER(i)); + + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 4; + UpdateSpriteAnimation(s); + + gCurTask->main = Task_Spring_Big_Up; + } + DisplaySprite(s); +} + +void CreateEntity_Spring_Small_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spring_Small_Up, sizeof(SpringB), 0x2000, 0, TaskDestructor_Spring); + SpringB *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + // NOTE: Initializing sprite pos to world pos + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPRING; + s->variant = 6; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (me->index == 14) { + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } + + UpdateSpriteAnimation(s); +} + +void Task_Spring_Small_Up(void) +{ + SpringB *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + res = sub_8022E14(s, me, spring, &PLAYER(i)); + + if (res) { + gCurTask->main = Task_8022594; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + DisplaySprite(s); +} + +void Task_8022594(void) +{ + SpringB *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + s32 i; + + i = 0; + do { + bool32 res; + + sub_8022E14(s, me, spring, &PLAYER(i)); + + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 6; + UpdateSpriteAnimation(s); + + gCurTask->main = Task_Spring_Small_Up; + } + DisplaySprite(s); +} + +// (94.11%) https://decomp.me/scratch/h1tYL +NONMATCH("asm/non_matching/game/interactables/Spring__sub_8022640.inc", + bool32 sub_8022640(Sprite *s, MapEntity *me, SpringA *spring, Player *p)) +{ +#ifndef NON_MATCHING + register bool32 hitWithHammer asm("sb") = 0; + register bool32 r6 asm("r6") = FALSE; +#else + bool32 hitWithHammer = 0; + bool32 r6 = FALSE; +#endif + CamCoord worldX, worldY; + u8 i; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + for (i = 0; i < MULTI_SIO_PLAYERS_MAX && gMultiplayerPlayerTasks[i]; i++) { + if (i != SIO_MULTI_CNT->id) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + + if (mpp->unk5C & 0x4) { + r6 = TRUE; + } + } + // _080226CE + } + } + // _080226E2 + + if (!(p->moveState & MOVESTATE_IA_OVERRIDE) || r6) { + // _080226F2 + + if (!(sub_80096B0(s, worldX, worldY, p) & COLL_FLAG_8)) { + hitWithHammer = Coll_AmyHammer_Spring(s, worldX, worldY, p); + + if (!hitWithHammer) { + return FALSE; + } + } + // _08022724 + + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + SA2_LABEL(sub_8021BE0)(p); + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->SA2_LABEL(unk61) = 0; + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirY = -(me->d.uData[1] << 4); + } else { + p->qSpeedAirY = -(sData0Accel[me->d.sData[0] & 0x3]); + } + + if (hitWithHammer) { + // p->qSpeedAirY * 1.5 + s16 qNewSpeed = (p->qSpeedAirY >> 1); + qNewSpeed += p->qSpeedAirY; + p->qSpeedAirY = qNewSpeed; + } + + if (me->d.sData[0] & 0x1) { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_SPRING_B; + } else { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_17; + } + // _080227C0 + + p->spriteInfoBody->s.prevVariant = -1; + s->variant = 1; + s->prevVariant = -1; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + m4aSongNumStart(SE_SPRING); + + return TRUE; + } + + return FALSE; +} +END_NONMATCH + +bool32 sub_8022804(Sprite *s, MapEntity *me, SpringA *spring, Player *p) +{ + s32 sb = 0; + bool32 r6 = FALSE; + CamCoord worldX, worldY; + u8 i; + u32 collRes; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + // _080226F2 + + collRes = sub_80096B0(s, worldX, worldY, p); + if (collRes & COLL_FLAG_10000) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->SA2_LABEL(unk61) = 0; + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirY = +(me->d.uData[1] << 4); + } else { + p->qSpeedAirY = +(sData0Accel[me->d.sData[0] & 0x3]); + } + + s->variant = 1; + s->prevVariant = -1; + + m4aSongNumStart(SE_SPRING); + + return TRUE; + } else if (collRes & 0x28) { + SA2_LABEL(sub_8021BE0)(p); + } + + return FALSE; +} + +bool32 sub_80228D0(Sprite *s, MapEntity *me, SpringA *spring, Player *p) +{ + s32 sb = 0; + bool32 r6 = FALSE; + CamCoord worldX, worldY; + u8 i; + u32 collRes; + s32 iaIndex; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + // _080226F2 + + collRes = Coll_Player_Spring_Sideways(s, worldX, worldY, p); + if (collRes & COLL_FLAG_20000) { + iaIndex = 10; + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + iaIndex = 8; + } + + if (iaIndex == me->index) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirX = -(me->d.uData[1] << 4); + p->qSpeedGround = -(me->d.uData[1] << 4); + } else { + p->qSpeedAirX = -(sData0Accel[me->d.sData[0] & 0x3]); + p->qSpeedGround = -(sData0Accel[me->d.sData[0] & 0x3]); + } + + Player_TransitionCancelFlyingAndBoost(p); + + if (p->moveState & MOVESTATE_4) { + p->charState = CHARSTATE_SPINATTACK; + } else { + p->charState = CHARSTATE_WALK_A; + } + + p->rotation = 0; + p->moveState |= MOVESTATE_FACING_LEFT; + + s->variant = 3; + s->prevVariant = -1; + m4aSongNumStart(SE_SPRING); + + return TRUE; + } else { + SA2_LABEL(sub_8021BE0)(p); + + if (!(collRes & 0x20)) { + return FALSE; + } + + p->moveState |= 0x20; + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + } + } else { + if (!(collRes & COLL_FLAG_40000)) { + return FALSE; + } + + iaIndex = 11; + if (gGameMode == 6) { + iaIndex = 9; + } + + if (iaIndex == me->index) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirX = +(me->d.uData[1] << 4); + p->qSpeedGround = +(me->d.uData[1] << 4); + } else { + p->qSpeedAirX = +(sData0Accel[me->d.sData[0] & 0x3]); + p->qSpeedGround = +(sData0Accel[me->d.sData[0] & 0x3]); + } + + Player_TransitionCancelFlyingAndBoost(p); + + if (p->moveState & MOVESTATE_4) { + p->charState = CHARSTATE_SPINATTACK; + } else { + p->charState = CHARSTATE_WALK_A; + } + + p->rotation = 0; + p->moveState &= ~MOVESTATE_FACING_LEFT; + + s->variant = 3; + s->prevVariant = -1; + m4aSongNumStart(SE_SPRING); + + return TRUE; + } else { + SA2_LABEL(sub_8021BE0)(p); + + if (!(collRes & 0x20)) { + return FALSE; + } + + p->moveState |= 0x20; + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + } + } + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + return FALSE; +} + +bool32 sub_8022AB4(Sprite *s, MapEntity *me, SpringB *spring, Player *p) +{ + u8 arr[4] = { -(p->spriteOffsetX + 6), -(p->spriteOffsetY + 1), +(p->spriteOffsetX + 6), +(p->spriteOffsetY + 1) }; + s32 sb = 0; + bool32 r6 = FALSE; + CamCoord worldX, worldY; + u8 i; + bool32 hitWithHammer; + s32 iaIndex; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (p->moveState & MOVESTATE_DEAD) { + return FALSE; + } + + hitWithHammer = Coll_AmyHammer_Spring(s, worldX, worldY, p); + + if (hitWithHammer || HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(p->qWorldX), I(p->qWorldY), (*((Rect8 *)&arr)))) { + iaIndex = IA__SPRING__BIG_UPLEFT; + + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + // IA__SPRING__BIG_UPLEFT - Multiplayer + iaIndex = 10; + } + + if ((iaIndex == me->index) && (hitWithHammer || (worldX - ({ I(p->qWorldX) + 20; })) > 0)) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->SA2_LABEL(unk61) = 0; + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirY = -(me->d.uData[1] << 4); + p->qSpeedAirX = -(me->d.uData[1] << 4); + } else { + p->qSpeedAirY = -(sData0Accel[me->d.sData[0] & 0x3]); + p->qSpeedAirX = -(sData0Accel[me->d.sData[0] & 0x3]); + } + + if (hitWithHammer) { + // qSpeedAirX|Y *= 1.5 + p->qSpeedAirX = p->qSpeedAirX + (p->qSpeedAirX >> 1); + p->qSpeedAirY = p->qSpeedAirY + (p->qSpeedAirY >> 1); + } + + if (GRAVITY_IS_INVERTED) { + p->qSpeedAirY = -p->qSpeedAirY; + } + + if (me->d.sData[0] & 0x1) { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_SPRING_B; + } else { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_17; + } + + p->spriteInfoBody->s.prevVariant = -1; + s->variant = 5; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + m4aSongNumStart(SE_SPRING); + + return TRUE; + } else if (hitWithHammer || worldX - I(p->qWorldX) + 20 < 0) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->SA2_LABEL(unk61) = 0; + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirY = -(me->d.uData[1] << 4); + p->qSpeedAirX = +(me->d.uData[1] << 4); + } else { + p->qSpeedAirY = -(sData0Accel[me->d.sData[0] & 0x3]); + p->qSpeedAirX = +(sData0Accel[me->d.sData[0] & 0x3]); + } + + if (hitWithHammer) { + // qSpeedAirX|Y *= 1.5 + p->qSpeedAirX = p->qSpeedAirX + (p->qSpeedAirX >> 1); + p->qSpeedAirY = p->qSpeedAirY + (p->qSpeedAirY >> 1); + } + + if (GRAVITY_IS_INVERTED) { + p->qSpeedAirY = -p->qSpeedAirY; + } + + if (me->d.sData[0] & 0x1) { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_SPRING_B; + } else { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_17; + } + + p->spriteInfoBody->s.prevVariant = -1; + s->variant = 5; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + m4aSongNumStart(SE_SPRING); + + return TRUE; + } else { + sub_80096B0(s, worldX, worldY, p); + } + } else { + sub_80096B0(s, worldX, worldY, p); + } + + return FALSE; +} + +bool32 sub_8022E14(Sprite *s, MapEntity *me, SpringB *spring, Player *p) +{ + u8 arr[4] = { -(p->spriteOffsetX + 6), -(p->spriteOffsetY + 1), +(p->spriteOffsetX + 6), +(p->spriteOffsetY + 1) }; + s32 sb = 0; + bool32 r6 = FALSE; + CamCoord worldX, worldY; + u8 i; + bool32 hitWithHammer; + s32 iaIndex; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (p->moveState & MOVESTATE_DEAD) { + return FALSE; + } + + hitWithHammer = Coll_AmyHammer_Spring(s, worldX, worldY, p); + + if (hitWithHammer || HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(p->qWorldX), I(p->qWorldY), (*((Rect8 *)&arr)))) { + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + iaIndex = IA__SPRING__SMALL_UPLEFT; + + if ((iaIndex == me->index) && (hitWithHammer || (worldX - ({ I(p->qWorldX) + 20; })) > 0)) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->SA2_LABEL(unk61) = 0; + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirY = -(me->d.uData[1] << 4); + p->qSpeedAirX = -(me->d.uData[1] << 4); + } else { + p->qSpeedAirY = -(sData0Accel[me->d.sData[0] & 0x3]); + p->qSpeedAirX = -(sData0Accel[me->d.sData[0] & 0x3]); + } + + if (hitWithHammer) { + // qSpeedAirX|Y *= 1.5 + p->qSpeedAirX = p->qSpeedAirX + (p->qSpeedAirX >> 1); + p->qSpeedAirY = p->qSpeedAirY + (p->qSpeedAirY >> 1); + } + + if (GRAVITY_IS_INVERTED) { + p->qSpeedAirY = -p->qSpeedAirY; + } + + if (me->d.sData[0] & 0x1) { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_SPRING_B; + } else { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_17; + } + + p->spriteInfoBody->s.prevVariant = -1; + s->variant = 7; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + m4aSongNumStart(SE_SPRING); + + return TRUE; + } else if (hitWithHammer || worldX - I(p->qWorldX) + 20 < 0) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 2; + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->SA2_LABEL(unk61) = 0; + + if (me->d.sData[0] >= (s32)ARRAY_COUNT(sData0Accel)) { + p->qSpeedAirY = -(me->d.uData[1] << 4); + p->qSpeedAirX = +(me->d.uData[1] << 4); + } else { + p->qSpeedAirY = -(sData0Accel[me->d.sData[0] & 0x3]); + p->qSpeedAirX = +(sData0Accel[me->d.sData[0] & 0x3]); + } + + if (hitWithHammer) { + // qSpeedAirX|Y *= 1.5 + p->qSpeedAirX = p->qSpeedAirX + (p->qSpeedAirX >> 1); + p->qSpeedAirY = p->qSpeedAirY + (p->qSpeedAirY >> 1); + } + + if (GRAVITY_IS_INVERTED) { + p->qSpeedAirY = -p->qSpeedAirY; + } + + if (me->d.sData[0] & 0x1) { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_SPRING_B; + } else { + Player_TransitionCancelFlyingAndBoost(p); + p->charState = CHARSTATE_17; + } + + p->spriteInfoBody->s.prevVariant = -1; + s->variant = 7; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + m4aSongNumStart(SE_SPRING); + + return TRUE; + } else { + sub_80096B0(s, worldX, worldY, p); + } + } else { + sub_80096B0(s, worldX, worldY, p); + } + + return FALSE; +} + +void TaskDestructor_Spring(struct Task *t) +{ + SpringA *spring = TASK_DATA(t); + VramFree(spring->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/spring_hiding.c b/sa1/src/game/interactables/spring_hiding.c new file mode 100644 index 0000000000..6e528ec8b9 --- /dev/null +++ b/sa1/src/game/interactables/spring_hiding.c @@ -0,0 +1,173 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct { + SpriteBase base; + Sprite s; +} SpringHiding; + +void Task_Spring_Hiding(void); +void Task_8095158(void); +bool32 sub_8095224(SpringHiding *spring, Sprite *s, s32 worldX, s32 worldY); +void TaskDestructor_Spring_Hiding(struct Task *t); + +void CreateEntity_Spring_Hiding(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Spring_Hiding, sizeof(SpringHiding), 0x2000, 0, TaskDestructor_Spring_Hiding); + SpringHiding *spring = TASK_DATA(t); + Sprite *s = &spring->s; + + spring->base.regionX = regionX; + spring->base.regionY = regionY; + spring->base.me = me; + spring->base.meX = me->x; + spring->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SPRING); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SPRING; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_Spring_Hiding(void) +{ + SpringHiding *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (sub_8095224(spring, s, worldX, worldY)) { + gCurTask->main = Task_8095158; + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } +} + +void Task_8095158(void) +{ + SpringHiding *spring = TASK_DATA(gCurTask); + Sprite *s = &spring->s; + MapEntity *me = spring->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(spring->base.meX, spring->base.regionX); + worldY = TO_WORLD_POS(me->y, spring->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, spring->base.meX); + TaskDestroy(gCurTask); + return; + } + + sub_8095224(spring, s, worldX, worldY); + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 0; + UpdateSpriteAnimation(s); + gCurTask->main = Task_Spring_Hiding; + } + + DisplaySprite(s); +} + +// (93.31%) https://decomp.me/scratch/LSXV2 +NONMATCH("asm/non_matching/game/interactables/spring_hiding__sub_8095224.inc", + bool32 sub_8095224(SpringHiding *spring, Sprite *s, s32 worldX, s32 worldY)) +{ + bool32 result = FALSE; + MapEntity *me = spring->base.me; + bool32 sp0C = FALSE; + s32 i = 0; + + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (!(PLAYER(i).moveState & MOVESTATE_IA_OVERRIDE)) { + if (!Coll_Player_Entity_Intersection(s, worldX, worldY, &PLAYER(i))) { + sp0C = Coll_AmyHammer_Spring(s, worldX, worldY, &PLAYER(i)); + if (!sp0C) { + continue; + } + } + + SA2_LABEL(sub_8021BE0)(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).SA2_LABEL(unk61) = 0; + PLAYER(i).qSpeedAirY = -(me->d.uData[1] << 6); + // _08095360 + + if (sp0C) { + s16 qSpeed = PLAYER(i).qSpeedAirY >> 1; + PLAYER(i).qSpeedAirY += qSpeed; + } + // _08095390 + + if (me->d.uData[0] & 0x1) { + Sprite *infoSprite; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_SPRING_B; + PLAYER_SPR_INFO(i).s.prevVariant = -1; + asm(""); + } else { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_17; + PLAYER_SPR_INFO(i).s.prevVariant = -1; + } + + s->variant = 1; + s->prevVariant = -1; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + m4aSongNumStart(SE_SPRING); + result = TRUE; + } + } + } while (++i < gNumSingleplayerCharacters); + + return result; +} +END_NONMATCH + +void TaskDestructor_Spring_Hiding(struct Task *t) +{ + SpringHiding *spring = TASK_DATA(t); + VramFree(spring->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/stage_goal.c b/sa1/src/game/interactables/stage_goal.c new file mode 100644 index 0000000000..fb3295e318 --- /dev/null +++ b/sa1/src/game/interactables/stage_goal.c @@ -0,0 +1,618 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/multiplayer/finish.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/parameters/characters.h" +#include "game/stage/player.h" +#include "game/stage/results.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + // NOTE: EntityShared HAS to be the first element, + // as long as TaskDestructor_EntityShared is used. + /* 0x00 */ EntityShared shared; + /* 0x3C */ u16 unk3C; + /* 0x3E */ s8 unk3E; +} StageGoal; + +void Task_StageGoal(void); +void Task_StageGoal2(void); +void Task_StageGoal3(void); +void Task_StageGoal4(void); +void Task_StageGoal5(void); +void Task_StageGoal6(void); +void Task_ShowResults(void); +void TaskDestructor_EntityShared(struct Task *t); + +void CreateEntity_StageGoal(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + if (me->d.sData[1] == 0) { + if (IS_SINGLE_PLAYER) { + return; + } + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) { + if (IS_MULTI_PLAYER) { + return; + } + } + + { + struct Task *t = TaskCreate(Task_StageGoal, sizeof(StageGoal), 0x2000, 0, TaskDestructor_EntityShared); + StageGoal *goal = TASK_DATA(t); + Sprite *s = &goal->shared.s; + + goal->shared.base.regionX = regionX; + goal->shared.base.regionY = regionY; + goal->shared.base.me = me; + goal->shared.base.meX = me->x; + goal->shared.base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_GOAL); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_GOAL; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); + } +} + +// (91.49%) https://decomp.me/scratch/VAW5A +NONMATCH("asm/non_matching/game/interactables/stage_goal__Task_StageGoal.inc", void Task_StageGoal(void)) +{ + StageGoal *goal; + Sprite *s; +#ifndef BUG_FIX + MultiplayerPlayer *mpp; +#else + // NOTE: This is moreso to increase debugability, rather than a "fix". + MultiplayerPlayer *mpp = NULL; +#endif + CamCoord worldX, worldY; + MapEntity *me; + u8 i; + + if (IS_MULTI_PLAYER) { + mpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + } + + goal = TASK_DATA(gCurTask); + s = &goal->shared.s; + me = goal->shared.base.me; + + worldX = TO_WORLD_POS(goal->shared.base.meX, goal->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, goal->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + bool32 sp08 = TRUE; + + if (I(gPlayer.qWorldX) > worldX) { + // _0801F336 + + if ((gCurrentLevel != LEVEL_INDEX(ZONE_4, ACT_2)) || I(gPlayer.qWorldY) <= worldY - DISPLAY_CENTER_Y) { + // _0801F34C + if (IS_MULTI_PLAYER) { + if ((gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) && (I(gPlayer.qWorldY) < worldY)) { + goto _0801F3D2; + } else { + goto _0801F3C4; + } + } else { + // _0801F380 + // TODO: Use RECT_COLLISION macro? + if ((gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) + || (RECT_LEFT(I(gPlayer.qWorldX), &gPlayer.spriteInfoBody->s.hitboxes[0].b) > worldX) + || (RECT_RIGHT(I(gPlayer.qWorldX), &gPlayer.spriteInfoBody->s.hitboxes[0].b) < worldX) + || (RECT_TOP(I(gPlayer.qWorldY), &gPlayer.spriteInfoBody->s.hitboxes[0].b) > worldY) + || (RECT_BOTTOM(I(gPlayer.qWorldY), &gPlayer.spriteInfoBody->s.hitboxes[0].b) < worldY)) { + _0801F3C4: + if ((gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_2)) || (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1))) { +#if 1 + goto _0801F4B8; +#else + gCamera.maxX = gRefCollision->pxWidth; + mpp->unk5C &= ~0x1; +#endif + } + } + } + } + _0801F3D2: + mpp->unk5C |= 0x1; + gCamera.maxX = worldX + DISPLAY_CENTER_X; + + i = 0; + if (gMultiplayerPlayerTasks[i] != NULL) { + for (i = 0; i < MULTI_SIO_PLAYERS_MAX && gMultiplayerPlayerTasks[i] != NULL; i++) { + MultiplayerPlayer *mpp; // TODO: Extra decl. might not be necessary? + if (i != SIO_MULTI_CNT->id) { + s32 r2, r3; + mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + + r2 = (gMultiplayerConnections & (0x10 << i)) >> (i + 4); + r3 = (gMultiplayerConnections & (0x10 << SIO_MULTI_CNT->id)) >> (SIO_MULTI_CNT->id + 4); + + if (r2 == r3) { + if (!(mpp->unk54 & 0x100)) { + sp08 = FALSE; + } + } + } + // _0801F44C: continue + } + } + // _0801F460 + + if (sp08) { + if (gMultiplayerRanks[SIO_MULTI_CNT->id] != -1) { + // _0801F482 + s->variant = 1; + gCurTask->main = Task_StageGoal3; + // goto _0801F606; + gCurTask->main(); + return; + } else { + goto _0801F5DA; + } + // _0801F5DA + } + } else { + _0801F4B8: + gCamera.maxX = gRefCollision->pxWidth; + mpp->unk5C &= ~0x1; + } + } else if (I(gPlayer.qWorldX) > worldX) { + // _0801F4D8 + 0x10 + // _0801F4E6 + if ((gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_2) && (I(gPlayer.qWorldY) > worldY - DISPLAY_CENTER_Y)) + || (((IS_MULTI_PLAYER && (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1) && I(gPlayer.qWorldY) < worldY)) + || (IS_SINGLE_PLAYER + && ((gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) + && ((RECT_LEFT(I(gPlayer.qWorldX), &gPlayer.spriteInfoBody->s.hitboxes[0].b) <= worldX) + && (RECT_RIGHT(I(gPlayer.qWorldX), &gPlayer.spriteInfoBody->s.hitboxes[0].b) >= worldX) + && (RECT_TOP(I(gPlayer.qWorldY), &gPlayer.spriteInfoBody->s.hitboxes[0].b) <= worldY) + && (RECT_BOTTOM(I(gPlayer.qWorldY), &gPlayer.spriteInfoBody->s.hitboxes[0].b) >= worldY)))))) + || !((gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_2)) || (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)))) { + if (IS_MULTI_PLAYER) { + if (gMultiplayerRanks[SIO_MULTI_CNT->id] != -1) { + goto _30C; + } + } else { + // _0801F5A4 + if (gMultiplayerRanks[0] != -1) { + _30C: + s->variant = 1; + gCurTask->main = Task_StageGoal3; + gCurTask->main(); + return; + } else { + gStageFlags |= (FLAGS_UPDATE_BACKGROUND_PALETTES | FLAGS_UPDATE_SPRITE_PALETTES); + } + } + + _0801F5DA: + if (gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) { + // Don't play the goal SFX in Egg Rocket, because it's not the Goal Post. + m4aSongNumStart(SE_GOAL); + } + // _0801F5EA + + goal->unk3C = 0; + goal->unk3E = 0; + + s->variant = 1; + gCurTask->main = Task_StageGoal2; + gCurTask->main(); + return; + } + } + // _0801F572 + + { + //_0801F620: + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, goal->shared.base.meX); + TaskDestroy(gCurTask); + return; + } else if (me->d.sData[0] != 0) { + DisplaySprite(s); + } + } +} +END_NONMATCH + +void Task_StageGoal2(void) +{ + StageGoal *goal = TASK_DATA(gCurTask); + Sprite *s = &goal->shared.s; + MapEntity *me = goal->shared.base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(goal->shared.base.meX, goal->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, goal->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_SINGLE_PLAYER) { + // Singleplayer + if (gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) { + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = DPAD_RIGHT; + + if (gCamera.shiftY > -56) + gCamera.shiftY--; + + if (gPlayer.qSpeedGround > Q(PLAYER_POST_GOAL_RUN_SPEED)) + gPlayer.qSpeedGround = Q(PLAYER_POST_GOAL_RUN_SPEED); + + } else { + gPlayer.moveState |= MOVESTATE_IA_OVERRIDE; + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + + if ((gCurrentLevel != LEVEL_INDEX(ZONE_6, ACT_1)) && (goal->unk3C > 30) && (goal->unk3E == 0)) { + goal->unk3E = 1; + TaskCreate(Task_ShowResults, 0, 0x2000, 0, NULL); + } + + gMultiplayerRanks[0] = 0; + + if (goal->unk3C++ > 120) { + if ((gPlayer.charState == CHARSTATE_28) || (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1))) { + TaskDestroy(gCurTask); + + CreateStageResults(gRingCount, gCourseTime); + return; + } + } + } else if (gGameMode == GAME_MODE_RACE) { + // MP Race + s32 count = 0; + u32 i; + struct Task **mppTasks = &gMultiplayerPlayerTasks[0]; + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + gPlayer.itemEffect &= ~(PLAYER_ITEM_EFFECT__CONFUSION); + gPlayer.timerConfusion = count; + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX && gMultiplayerPlayerTasks[i]; i++) { + MultiplayerPlayer *mppLoop = TASK_DATA(gMultiplayerPlayerTasks[i]); + + if (mppLoop->unk5C & 0x1) { + ++count; + } + } + + CreateMultiplayerFinishResult(SIO_MULTI_CNT->id, count); + mpp->unk5C |= 0x1; + + if (count == 0) { + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + gCourseTime = TIME(1, 0); + } + + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = DPAD_RIGHT; + + { + RoomEvent *roomEvent; + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_REACHED_STAGE_GOAL; + } + + gCurTask->main = Task_StageGoal4; + + gCamera.SA2_LABEL(unk50) |= 0x4; + return; + } else { + // MP Other + s32 r8 = 0; + u32 i; + s32 r2, r3; + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + + gPlayer.itemEffect &= ~(PLAYER_ITEM_EFFECT__CONFUSION); + gPlayer.timerConfusion = r8; + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX && gMultiplayerPlayerTasks[i] != NULL; i++) { + mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + + r2 = (gMultiplayerConnections & (0x10 << i)) >> (i + 4); + r3 = (gMultiplayerConnections & (0x10 << SIO_MULTI_CNT->id)) >> (SIO_MULTI_CNT->id + 4); + + if (r2 != r3) { + if (gMultiplayerRanks[i] == 0) { + r8 = 1; + break; + } + } + } + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + struct Task *t = gMultiplayerPlayerTasks[i]; + if (t == NULL) + break; + + if (gMultiplayerRanks[i] == -1) { + mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + + r2 = (gMultiplayerConnections & (0x10 << i)) >> (i + 4); + r3 = (gMultiplayerConnections & (0x10 << SIO_MULTI_CNT->id)) >> (SIO_MULTI_CNT->id + 4); + + if (r2 == r3) { + CreateMultiplayerFinishResult(i, r8); + } else { + CreateMultiplayerFinishResult(i, (r8 ^ 0x1)); + } + } + } + + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + gCourseTime = TIME(1, 0); + + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = DPAD_RIGHT; + + { + RoomEvent *roomEvent; + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_REACHED_STAGE_GOAL; + } + + gCurTask->main = Task_StageGoal4; + + gCamera.SA2_LABEL(unk50) |= 0x4; + return; + } + + if (me->d.sData[0] != 0) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_StageGoal3(void) +{ + StageGoal *goal = TASK_DATA(gCurTask); + Sprite *s = &goal->shared.s; + MapEntity *me = goal->shared.base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(goal->shared.base.meX, goal->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, goal->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (me->d.sData[0] != 0) { + if (IS_MULTI_PLAYER && ((worldX + 32) <= I(gPlayer.qWorldX))) { + s->variant = 2; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +// TODO: Fake-match +void Task_StageGoal4(void) +{ + s32 sioId; + StageGoal *goal; + s32 sp04; + s8 sp08; + Sprite *s; + MapEntity *me; + CamCoord worldX, worldY; + s16 r4; + s32 r6; + u32 i; + + sioId = SIO_MULTI_CNT->id; + sp04 = 0; + goal = TASK_DATA(gCurTask); + s = &goal->shared.s; + me = goal->shared.base.me; + + worldX = TO_WORLD_POS(goal->shared.base.meX, goal->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, goal->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (gMultiplayerRanks[sioId] == -1) { + return; + } + + r6 = gMultiplayerRanks[sioId]; + + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + s32 count = 0; + u32 i; + s32 r2, r3; + struct Task **mppTasks; + MultiplayerPlayer *mpp; + mppTasks = &gMultiplayerPlayerTasks[0]; + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX && gMultiplayerPlayerTasks[i] && i != sioId; i++) { + mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + + r2 = (gMultiplayerConnections & (0x10 << i)) >> (i + 4); + r3 = (gMultiplayerConnections & (0x10 << SIO_MULTI_CNT->id)) >> (SIO_MULTI_CNT->id + 4); + + if (r2 == r3) { + r6++; + } + } + } + + r4 = (r6 + 1) * 32; + + if (me->d.sData[0] != 0) { + if (worldX + 32 <= I(gPlayer.qWorldX)) { + s->variant = 2; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + if (gPlayer.qSpeedAirX > Q(0)) { + MultiplayerPlayer *mpp; + s32 zero; + gPlayer.heldInput = DPAD_RIGHT; + + if (worldX + r4 < I(gPlayer.qWorldX)) { + gPlayer.qWorldX = Q(worldX + r4); + Player_TransitionCancelFlyingAndBoost(&gPlayer); + + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.moveState &= ~MOVESTATE_4; + gPlayer.moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.moveState &= ~MOVESTATE_SPINDASH; + gPlayer.moveState &= ~MOVESTATE_100; + + gPlayer.charState = CHARSTATE_HIT_AIR; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + +#ifndef NON_MATCHING + asm("mov %0, #0" : "=r"(zero) : "r"(&gPlayer.SA2_LABEL(unk61))); +#else + zero = 0; +#endif + gPlayer.SA2_LABEL(unk61) = zero; + gPlayer.SA2_LABEL(unk62) = gPlayer.SA2_LABEL(unk61); + + gPlayer.qSpeedGround = zero; + gPlayer.qSpeedAirX = zero; + + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = zero; + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + + gPlayer.charState = CHARSTATE_ACT_CLEAR_B; + gPlayer.moveState |= MOVESTATE_800000; + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX && gMultiplayerPlayerTasks[i]; i++) { + struct Task *t = gMultiplayerPlayerTasks[i]; + if (t == NULL) + break; + + mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + + if (mpp->unk54 & 0x100) { + sp04++; + } + } + + if (sp04 >= (i - 1) || gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + u32 j; + for (j = 0; j < MULTI_SIO_PLAYERS_MAX && gMultiplayerPlayerTasks[j]; j++) { + struct Task *t = gMultiplayerPlayerTasks[j]; + if (t == NULL) + break; + + mpp = TASK_DATA(gMultiplayerPlayerTasks[j]); + + if (!(mpp->unk5C & 0x1) && (gGameMode != GAME_MODE_MULTI_PLAYER) && (gGameMode != GAME_MODE_TEAM_PLAY)) { + CreateMultiplayerFinishResult(j, i - 1); + mpp->unk5C |= 0x1; + + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; + } + } + + goal->unk3C = 0; + gCurTask->main = Task_StageGoal6; + CreateMultiplayerFinishHandler(); + } else { + gCurTask->main = Task_StageGoal5; + } + } + } else { + gPlayer.heldInput = DPAD_LEFT; + + if (worldX + r4 > I(gPlayer.qWorldX)) { + gPlayer.heldInput = DPAD_RIGHT; + } + } +} + +void Task_StageGoal5(void) +{ + StageGoal *goal = TASK_DATA(gCurTask); + Sprite *s = &goal->shared.s; + MapEntity *me = goal->shared.base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(goal->shared.base.meX, goal->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, goal->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (me->d.sData[0] != 0) { + DisplaySprite(s); + } +} + +void Task_StageGoal6(void) +{ + StageGoal *goal = TASK_DATA(gCurTask); + Sprite *s = &goal->shared.s; + MapEntity *me = goal->shared.base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(goal->shared.base.meX, goal->shared.base.regionX); + worldY = TO_WORLD_POS(me->y, goal->shared.base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (me->d.sData[0] != 0) { + if ((worldX + 32) <= I(gPlayer.qWorldX)) { + s->variant = 2; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_ShowResults(void) +{ + if (!(gPlayer.moveState & MOVESTATE_IN_AIR) && gPlayer.qSpeedGround >= Q(2.25)) { + SA2_LABEL(sub_8021BE0)(&gPlayer); + gPlayer.charState = CHARSTATE_28; + gPlayer.moveState |= MOVESTATE_800000; + TaskDestroy(gCurTask); + return; + } +} \ No newline at end of file diff --git a/sa1/src/game/interactables/steam_exhaust.c b/sa1/src/game/interactables/steam_exhaust.c new file mode 100644 index 0000000000..3bde91e089 --- /dev/null +++ b/sa1/src/game/interactables/steam_exhaust.c @@ -0,0 +1,266 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ Sprite s2; + /* 0x78 */ u8 unk74; + /* 0x78 */ s32 qLidAcceleration; + /* 0x7C */ s32 qLidOffsetY; + /* 0x80 */ s32 unk80; + /* 0x80 */ s32 unk84; +} SteamExhaust; /* 0x88 */ + +void Task_SteamExhaust(void); +void Task_SteamExhaust2(void); +void TaskDestructor_SteamExhaust(struct Task *); + +void CreateEntity_SteamExhaust(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_SteamExhaust, sizeof(SteamExhaust), 0x2000, 0, TaskDestructor_SteamExhaust); + SteamExhaust *exhaust = TASK_DATA(t); + Sprite *s = &exhaust->s; + Sprite *s2 = &exhaust->s2; + + exhaust->base.regionX = regionX; + exhaust->base.regionY = regionY; + exhaust->base.me = me; + exhaust->base.meX = me->x; + exhaust->base.id = id; + + exhaust->qLidAcceleration = 0; + exhaust->qLidOffsetY = 0; + exhaust->unk74 = 0; + exhaust->unk80 = 0; + exhaust->unk84 = 0; + + SET_MAP_ENTITY_INITIALIZED(me); + + // s->graphics.dest = ALLOC_TILES_MAX(SA1_ANIM_STEAM_EXHAUST, SA1_ANIM_STEAM_EXHAUST_LID); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_STEAM_EXHAUST); + s->graphics.anim = SA1_ANIM_STEAM_EXHAUST_LID; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s2->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_STEAM_EXHAUST_LID, 2); + s2->graphics.anim = SA1_ANIM_STEAM_EXHAUST_LID; + s2->variant = 2; + s2->oamFlags = SPRITE_OAM_ORDER(17); + s2->graphics.size = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_SteamExhaust(void) +{ + SteamExhaust *exhaust = TASK_DATA(gCurTask); + MapEntity *me = exhaust->base.me; + Sprite *s = &exhaust->s; + Sprite *s2 = &exhaust->s2; + CamCoord worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(exhaust->base.meX, exhaust->base.regionX); + worldY = TO_WORLD_POS(me->y, exhaust->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y; + + i = 0; + do { + if (sub_80096B0(s2, worldX, worldY, &PLAYER(i)) & COLL_FLAG_8) { + PLAYER(i).qWorldY += Q(1); + continue; + } else { + if (((PLAYER(i).stoodObj == s) +#ifdef BUG_FIX + // TODO: Either we check for s2, or this 2nd check can go away entirely! + || (PLAYER(i).stoodObj == s2) +#else + || (PLAYER(i).stoodObj == s) +#endif + ) + && (PLAYER(i).moveState & MOVESTATE_STOOD_ON_OBJ)) { + if (PLAYER(i).frameInput & gPlayerControls.jump) { + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).stoodObj = NULL; + } + + { + s32 res = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - 19, I(PLAYER(i).qWorldX), PLAYER(i).layer, -8, NULL, + SA2_LABEL(sub_801EE64)); + + if (res < 0) { + PLAYER(i).qWorldY += Q(res); + } + } + } else { + if (sub_80096B0(s, worldX, worldY, &PLAYER(i))) { + s32 res = SA2_LABEL(sub_801E4E4)(I(PLAYER(i).qWorldY) - 19, I(PLAYER(i).qWorldX), PLAYER(i).layer, -8, NULL, + SA2_LABEL(sub_801EE64)); + + if (res < 0) { + PLAYER(i).qWorldY += Q(res); + } + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, exhaust->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Mod(gStageTime, 160) == 0) { + exhaust->unk84 = 0x66; + exhaust->unk74 = 0; + exhaust->qLidAcceleration = -Q(5); + exhaust->qLidOffsetY = +Q(0); + exhaust->unk80 = 3; + + s->graphics.anim = SA1_ANIM_STEAM_EXHAUST; + s->variant = 0; + s->prevVariant = -1; + + m4aSongNumStart(SE_LAVA_PLATFORM_SPURT); + + gCurTask->main = Task_SteamExhaust2; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); +} + +void Task_SteamExhaust2(void) +{ + SteamExhaust *exhaust = TASK_DATA(gCurTask); + MapEntity *me = exhaust->base.me; + CamCoord worldX, worldY; + Sprite *s = &exhaust->s; + Sprite *s2 = &exhaust->s2; + s32 i; + + worldX = TO_WORLD_POS(exhaust->base.meX, exhaust->base.regionX); + worldY = TO_WORLD_POS(me->y, exhaust->base.regionY); + + exhaust->qLidAcceleration += Q(37. / 256.); + exhaust->qLidOffsetY += exhaust->qLidAcceleration; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y + I(exhaust->qLidOffsetY); + + i = 0; + do { + if (GetBit(exhaust->unk74, i)) { + PLAYER(i).qWorldY += exhaust->qLidAcceleration; + + if (PLAYER(i).moveState & MOVESTATE_IN_AIR) { + ClearBit(exhaust->unk74, i); + } + + if (!Coll_Player_Entity_Intersection(s2, worldX, worldY + I(exhaust->qLidOffsetY), &PLAYER(i))) { + ClearBit(exhaust->unk74, i); + } + } + + if (Coll_Player_PlatformCrumbling(s2, worldX, worldY + I(exhaust->qLidOffsetY), &PLAYER(i))) { + SetBit(exhaust->unk74, i); + + PLAYER(i).qWorldY += Q(1); + } + + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } while (++i < gNumSingleplayerCharacters); + + if (exhaust->qLidOffsetY >= 0) { + if (--exhaust->unk80 != 0) { + exhaust->qLidAcceleration = -Div(exhaust->qLidAcceleration * 2, 5); + exhaust->unk74 = 0; + exhaust->qLidOffsetY = 0; + } else { + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_STEAM_EXHAUST_LID; + s->variant = 0; + gCurTask->main = Task_SteamExhaust; + } + } + + if (--exhaust->unk84 == 48) { + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_STEAM_EXHAUST; + s->variant = 1; + + UpdateSpriteAnimation(s); + } else if (((exhaust->unk84 + 1) >= 50) && ((exhaust->unk84 + 1) < 97)) { + s32 i = 0; + do { + Hitbox *hb = &PLAYER_SPR_INFO(i).s.hitboxes[0]; + if (hb->index != HITBOX_STATE_INACTIVE + && HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(PLAYER(i).qWorldX), I(PLAYER(i).qWorldY), + (&PLAYER_SPR_INFO(i).s.hitboxes[0])->b)) { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + Coll_DamagePlayer(&PLAYER(i)); + } + } + } while (++i < gNumSingleplayerCharacters); + + UpdateSpriteAnimation(s); + } else if (exhaust->unk84 < 48) { + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_STEAM_EXHAUST_LID; + s->variant = 0; + } + + UpdateSpriteAnimation(s); + } + + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); +} + +void TaskDestructor_SteamExhaust(struct Task *t) +{ + SteamExhaust *exhaust = TASK_DATA(t); + VramFree(exhaust->s.graphics.dest); + VramFree(exhaust->s2.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/swing_rope.c b/sa1/src/game/interactables/swing_rope.c new file mode 100644 index 0000000000..e3edd596e1 --- /dev/null +++ b/sa1/src/game/interactables/swing_rope.c @@ -0,0 +1,224 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/char_states.h" +#include "constants/move_states.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x30]; + /* 0x3C */ u8 unk3C; + /* 0x3D */ u8 unk3D[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x40 */ s32 unk40[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x48 */ s32 unk48[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x50 */ s32 unk50[NUM_SINGLEPLAYER_CHARS_MAX]; +} SwingRope; + +void Task_SwingRope(void); + +// (99.13%) https://decomp.me/scratch/zWpSE +NONMATCH("asm/non_matching/game/interactables/swing_rope__Task_SwingRope.inc", void Task_SwingRope(void)) +{ + SwingRope *rope = TASK_DATA(gCurTask); + CamCoord x, y; + MapEntity *me = rope->base.me; + s32 i; + + // world-pos + x = TO_WORLD_POS(rope->base.meX, rope->base.regionX); + y = TO_WORLD_POS(me->y, rope->base.regionY); + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + // _08088890 + if (GetBit(rope->unk3C, i)) { + // _080888A4 + if (rope->unk40[i] < Q(0.90625)) { + rope->unk40[i] += Q(0.0625); + } + + if (rope->unk40[i] > Q(9)) { + rope->unk40[i] = Q(9); + } + // _080888C6 + + rope->unk48[i] += rope->unk40[i]; + + PLAYER(i).qWorldY = Q(y) + Q(1); + // _080888EC + if ((x + me->d.sData[0] * TILE_WIDTH) <= I(PLAYER(i).qWorldX) + && (x + me->d.sData[0] * TILE_WIDTH + me->d.uData[2] * TILE_WIDTH) >= I(PLAYER(i).qWorldX)) { + s8 res; + + PLAYER(i).qWorldX += rope->unk40[i]; + + if (PLAYER(i).heldInput & DPAD_RIGHT) { + rope->unk40[i] += 0x10; + } else if (PLAYER(i).heldInput & DPAD_LEFT) { + if (rope->unk40[i] > Q(0.90625)) { + rope->unk40[i] -= 0x10; + } + } + + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldX) - 8, I(PLAYER(i).qWorldY), PLAYER(i).layer, -8, + SA2_LABEL(sub_801EB44)); + + if (res < 0) { + PLAYER(i).qWorldX -= Q(res); + } + } + PLAYER(i).qSpeedAirY = 0; + // _08088A0A + + if (PLAYER(i).frameInput & gPlayerControls.jump) { + if (rope->unk40[i] < 0) { + PLAYER(i).qWorldX = Q(x + (me->d.sData[0] * TILE_WIDTH) + 2); + rope->unk40[i] = 0; + return; + } + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_IGNORE_INPUT; + PLAYER(i).heldInput |= gPlayerControls.jump | gPlayerControls.attack; + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + if (PLAYER(i).heldInput & DPAD_VERTICAL) { + if (PLAYER(i).heldInput & DPAD_UP) { + PLAYER(i).qSpeedAirY = -Q(6.75); + } else { + PLAYER(i).qSpeedAirY = +Q(6.75); + } + + } else { + if (Div(rope->unk50[i], 15) != 0) { + PLAYER(i).qSpeedAirY = +Q(6.75); + } else { + PLAYER(i).qSpeedAirY = -Q(6.75); + } + } + + PLAYER(i).charState = CHARSTATE_SPINATTACK; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + + PLAYER(i).qWorldY = Q(y) + Q(9); + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + + ClearBit(rope->unk3C, i); + + rope->unk50[i] = 0; + rope->unk3D[i] = 20; + + (&PLAYER(i))->spriteInfoBody->s.frameFlags &= ~0x3000; + (&PLAYER(i))->spriteInfoBody->s.frameFlags |= 0x2000; + } + // _08088CD6 + +#ifndef NON_MATCHING + rope->unk50[i] = Mod(++rope->unk50[i], 30); +#else + rope->unk50[i] = (rope->unk50[i] + 1) % 30; +#endif + + } else { + // _08088CF8 - not on rope + if (rope->unk3D[i] > 0) { + rope->unk3D[i]--; + continue; + } else { + // _08088D0A + if ((x + me->d.sData[0] * TILE_WIDTH) <= I(PLAYER(i).qWorldX) + && (x + me->d.sData[0] * TILE_WIDTH + me->d.uData[2] * TILE_WIDTH) >= I(PLAYER(i).qWorldX) + && (y + me->d.sData[1] * TILE_WIDTH) <= I(PLAYER(i).qWorldY) + && (y + me->d.sData[1] * TILE_WIDTH + me->d.uData[3] * TILE_WIDTH) >= I(PLAYER(i).qWorldY)) { + // _08088DB2 + rope->unk40[i] = PLAYER(i).qSpeedGround >> 1; + + // TODO: Clamp macro? + if (rope->unk40[i] < 0) + rope->unk40[i] = 0; + // _08088DDE + + if (PLAYER(i).qWorldX > Q(x)) { + // _08088DFA + rope->unk48[i] = (PLAYER(i).qWorldX - Q(x)); + } else { + // _08088E16 + rope->unk48[i] = (Q(x) - PLAYER(i).qWorldX); + } + // _08088E2E+0x2 + + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState &= ~MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + // _08088E98 + + SetBit(rope->unk3C, i); + PLAYER(i).charState = CHARSTATE_34; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + rope->unk50[i] = 0; + + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } + } else { + // _08088F1C - Player dead + if (GetBit(rope->unk3C, i)) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + ClearBit(rope->unk3C, i); + } + } + } while (++i < gNumSingleplayerCharacters); + + // _08088F68 + if ((rope->unk3C & 0x3) == 0) { + // screen-pos + x -= gCamera.x; + y -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, rope->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} +END_NONMATCH + +void CreateEntity_SwingRope(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_SwingRope, sizeof(SwingRope), 0x2000, 0, NULL); + SwingRope *rope = TASK_DATA(t); + s32 i; + + rope->base.regionX = regionX; + rope->base.regionY = regionY; + rope->base.me = me; + rope->base.meX = me->x; + rope->base.id = id; + + rope->unk3C = 0; + + for (i = 0; i < NUM_SINGLEPLAYER_CHARS_MAX; i++) { + rope->unk40[i] = 0; + rope->unk48[i] = 0; + rope->unk3D[i] = 0; + } + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/swinging_hook.c b/sa1/src/game/interactables/swinging_hook.c new file mode 100644 index 0000000000..98afa7f078 --- /dev/null +++ b/sa1/src/game/interactables/swinging_hook.c @@ -0,0 +1,413 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" // gPlayerControls +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s1; + /* 0x3C */ Sprite s2; + /* 0x6C */ Sprite s3; + /* 0x9C */ SpriteTransform transform; + /* 0xA8 */ s32 qUnkA8; + /* 0xAC */ s32 qUnkAC; + /* 0xB0 */ u8 unkB0[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0xB2 */ u16 unkB2; + /* 0xB4 */ u8 unkB4; +} SwingingHook; + +void Task_SwingingHook(void); +void TaskDestructor_SwingingHook(struct Task *t); + +void CreateEntity_SwingingHook(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_SwingingHook, sizeof(SwingingHook), 0x2000, 0, TaskDestructor_SwingingHook); + SwingingHook *hook = TASK_DATA(t); + Sprite *s1 = &hook->s1; + Sprite *s2 = &hook->s2; + Sprite *s3 = &hook->s3; + SpriteTransform *tf = &hook->transform; + CamCoord worldX, worldY; + + hook->base.regionX = regionX; + hook->base.regionY = regionY; + hook->base.me = me; + hook->base.meX = me->x; + hook->base.id = id; + + hook->unkB4 = 0; + hook->qUnkA8 = 0; + hook->qUnkAC = 0; + hook->unkB0[0] = 0; + hook->unkB0[1] = 0; + + if (me->d.sData[0] != 0) { + hook->unkB2 = 0x100; + } else { + hook->unkB2 = 0; + } + + { + s1->x = TO_WORLD_POS(me->x, regionX) - gCamera.x; + s1->y = TO_WORLD_POS(me->y, regionY) - gCamera.y; + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); + + s1->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_HOOK_RAIL_2, 1); + s1->oamFlags = SPRITE_OAM_ORDER(18); + s1->graphics.size = 0; + s1->graphics.anim = SA1_ANIM_HOOK_RAIL_2; + s1->variant = 1; + s1->animCursor = 0; + s1->qAnimDelay = Q(0); + s1->prevVariant = -1; + s1->animSpeed = SPRITE_ANIM_SPEED(1.0); + s1->palId = 0; + s1->hitboxes[0].index = HITBOX_STATE_INACTIVE; + + if (me->d.sData[0]) { + s1->frameFlags = SPRITE_FLAG(PRIORITY, SA2_LABEL(gUnknown_030054B8)++) | SPRITE_FLAG_ENABLE_ROTATION(30); + } else { + s1->frameFlags = SPRITE_FLAG(PRIORITY, SA2_LABEL(gUnknown_030054B8)++) | SPRITE_FLAG_ENABLE_ROTATION(31); + } + } + + { + s3->x = TO_WORLD_POS(me->x, regionX) - gCamera.x; + s3->y = TO_WORLD_POS(me->y, regionY) - gCamera.y - 8; + + s3->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_ANCHOR_HANDLES, 2); + s3->oamFlags = SPRITE_OAM_ORDER(18); + s3->graphics.size = 0; + s3->graphics.anim = SA1_ANIM_ANCHOR_HANDLES; + s3->variant = 2; + s3->animCursor = 0; + s3->qAnimDelay = Q(0); + s3->prevVariant = -1; + s3->animSpeed = SPRITE_ANIM_SPEED(1.0); + s3->palId = 0; + s3->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s3->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + + { + s2->x = TO_WORLD_POS(me->x, regionX) - gCamera.x; + s2->y = TO_WORLD_POS(me->y, regionY) - gCamera.y; + + s2->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_ANCHOR_HANDLES, 1); + s2->oamFlags = SPRITE_OAM_ORDER(18); + s2->graphics.size = 0; + s2->graphics.anim = SA1_ANIM_ANCHOR_HANDLES; + s2->variant = 1; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + + worldX = TO_WORLD_POS(hook->base.meX, hook->base.regionX); + worldY = TO_WORLD_POS(me->y, hook->base.regionY); + + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = worldX - gCamera.x; + tf->y = worldY - gCamera.y; + + UpdateSpriteAnimation(s3); + UpdateSpriteAnimation(s2); +} + +// (93.44%) https://decomp.me/scratch/7o7Wd +NONMATCH("asm/non_matching/game/interactables/hook__Task_SwingingHook.inc", void Task_SwingingHook(void)) +{ + SpriteTransform *tf; + CamCoord worldX, worldY; + SwingingHook *hook; + Sprite *s1; + Sprite *s2; + Sprite *s3; + s32 sp18; + s32 sp1C; + u32 modRes; + s32 sinVal; + MapEntity *me; + CamCoord worldX2, worldY2; + s32 cosVal; + s32 i; + s8 r2; + + hook = TASK_DATA(gCurTask); + s1 = &hook->s1; + tf = &hook->transform; + s2 = &hook->s2; + s3 = &hook->s3; + me = hook->base.me; + + sp18 = 0; + sp1C = 0; + + worldX = TO_WORLD_POS(hook->base.meX, hook->base.regionX); + worldY = TO_WORLD_POS(me->y, hook->base.regionY); + + worldX2 = worldX; + worldY2 = worldY; + + modRes = Mod(Div(gStageTime * 8, 3) + hook->unkB2, Q(2)); + + if (modRes > Q(1)) { + modRes -= Q(1); + modRes = Q(1) - modRes; + + r2 = +(SIN(modRes * 2) >> 8); + } else { + // _080879FC + r2 = -(SIN(modRes * 2) >> 8); + } + // _08087A10 + + modRes = SIN(((modRes - 0x7E) & 0x1FF) * 2) >> 7; + modRes &= 0x1FF; + + if (modRes < Q(1)) { + modRes >>= 1; + } else { + modRes = (Q(2) - ((Q(2) - modRes) >> 1)); + } + // _08087A3E + + modRes <<= 1; + + sinVal = (SIN(modRes & ONE_CYCLE) + r2); + cosVal = (COS(modRes & ONE_CYCLE) + r2); + + s1->x = worldX - gCamera.x; + s1->y = worldY - gCamera.y; + + s3->x = worldX - gCamera.x; + s3->y = worldY - gCamera.y - 8; + + if (IS_OUT_OF_DISPLAY_RANGE(worldX2, worldY2) && IS_OUT_OF_CAM_RANGE(s1->x, s1->y)) { + // _08087B00 + i = 0; + do { + // _08087B14_loop + + if (PLAYER_I_ON_SPRITE(i, s1)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).stoodObj = NULL; + PLAYER(i).qSpeedAirX = Q(0); + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).qSpeedAirY = Q(0); + + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + } else { + // _08087C5C + PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).charState = CHARSTATE_85; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + } + } + } while (++i < gNumSingleplayerCharacters); + // _08087CC0 + + SET_MAP_ENTITY_NOT_INITIALIZED(me, hook->base.meX); + TaskDestroy(gCurTask); + return; + } else { + // _08087CE4 + DisplaySprite(s3); + + { + u8 i; + for (i = 0; i < 3; i++) { + // _08087CF6_loop + sp18 += Div(sinVal * 90, 100); + sp1C += Div(cosVal * 90, 100); + + s2->x = worldX - gCamera.x + (sp18 >> 10); + s2->y = worldY - gCamera.y + (sp1C >> 10); + + if (i == 4) { + // TODO: Unreachable? + s2->oamFlags = SPRITE_OAM_ORDER(3); + } else { + s2->oamFlags = SPRITE_OAM_ORDER(18); + } + + DisplaySprite(s2); + } + } + // _08087D48 + 0x14 + + sp18 += Div(sinVal * 110, 100); + sp1C += Div(cosVal * 110, 100); + + i = 0; + do { + // _08087D88_loop + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (GetBit(hook->unkB4, i)) { + // _08087DB2 + PLAYER(i).qWorldX = Q(worldX + Div(sp18, 780) - 4); + // _08087DD0 + if (PLAYER(i).moveState & MOVESTATE_FACING_LEFT) { + PLAYER(i).qWorldX += Q(10); + } + // _08087E00 + + PLAYER(i).qWorldY = Q(worldY + Div(sp1C, 680) + 2); + PLAYER(i).rotation = 0; + // _08087E2A + + if (PLAYER(i).frameInput & gPlayerControls.jump) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState |= MOVESTATE_100; + PLAYER(i).qSpeedAirY = -Q(5); + PLAYER(i).stoodObj = NULL; + PLAYER(i).moveState &= ~MOVESTATE_STOOD_ON_OBJ; + // _08087EEA + + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + if (PLAYER(i).heldInput & (DPAD_LEFT | DPAD_RIGHT)) { + // _08087F1E + if (PLAYER(i).heldInput & DPAD_LEFT) { + PLAYER(i).moveState |= MOVESTATE_FACING_LEFT; + PLAYER(i).qSpeedAirX = -Q(2); + PLAYER(i).qSpeedGround = -Q(2); + } else { + // _08087F70 + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + PLAYER(i).qSpeedAirX = +Q(2); + PLAYER(i).qSpeedGround = +Q(2); + } + } else { + // _08087FB0 + PLAYER(i).qSpeedAirX = Q(0); + PLAYER(i).qSpeedGround = Q(0); + } + // _08087FC8 + + if (PLAYER(i).character != CHARACTER_AMY) { + // _08087FEA + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).charState = CHARSTATE_SPINATTACK; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + } else { + // _08088048 + // PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).charState = CHARSTATE_85; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + } + // _08088084 + + hook->unkB0[i] = 20; + ClearBit(hook->unkB4, i); + } else { + // !(PLAYER(i).frameInput & gPlayerControls.jump) + PLAYER(i).qSpeedAirY = Q(0); + } + } else { + // !GetBit(hook->unkB4, i) + // _080880B2 + if (hook->unkB0[i]) { + hook->unkB0[i]--; + } else { + // _080880C4 + + if ((worldX + Div(sp18, 950) - 16 <= I(PLAYER(i).qWorldX)) && (worldX + Div(sp18, 950) + 16 >= I(PLAYER(i).qWorldX)) + && (worldY + Div(sp1C, 950) - 16 <= I(PLAYER(i).qWorldY)) + && (worldY + Div(sp1C, 950) + 16 >= I(PLAYER(i).qWorldY))) { + // _08088176 + SetBit(hook->unkB4, i); + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).stoodObj = s1; + PLAYER(i).moveState |= MOVESTATE_STOOD_ON_OBJ; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).qSpeedAirX = Q(0); + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).qSpeedAirY = Q(0); + // _080881F8 + + PLAYER(i).charState = CHARSTATE_38; + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + // _08088230 + } else { + } + } + } + } else if (GetBit(hook->unkB4, i)) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + hook->unkB0[i] = 20; + ClearBit(hook->unkB4, i); + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + } while (++i < gNumSingleplayerCharacters); + // _080882A4 + + tf->rotation = 0x3FF & ~(0x3FF & modRes); + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = worldX - gCamera.x + (sp18 >> 10); + tf->y = worldY - gCamera.y + (sp1C >> 10); + + if (me->d.sData[0]) { + s1->frameFlags = SPRITE_FLAG(PRIORITY, SA2_LABEL(gUnknown_030054B8)++) | SPRITE_FLAG_ENABLE_ROTATION(30); + } else { + s1->frameFlags = SPRITE_FLAG(PRIORITY, SA2_LABEL(gUnknown_030054B8)++) | SPRITE_FLAG_ENABLE_ROTATION(31); + } + +#ifndef BUG_FIX + // BUG: UpdateSpriteAnimation() sets s1->dimensions, + // so it has to be called first, + // otherwise it's a nullpointer on the first call. + TransformSprite(s1, tf); + UpdateSpriteAnimation(s1); +#else + UpdateSpriteAnimation(s1); + TransformSprite(s1, tf); +#endif + + // TODO: Do we need to call this twice? + // I don't think the Hook needs to be flipped? + DisplaySprite(s1); + s1->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + DisplaySprite(s1); + s1->frameFlags &= ~SPRITE_FLAG(X_FLIP, 1); + } +} +END_NONMATCH + +void TaskDestructor_SwingingHook(struct Task *t) +{ + SwingingHook *hook = TASK_DATA(t); + VramFree(hook->s1.graphics.dest); + VramFree(hook->s2.graphics.dest); + VramFree(hook->s3.graphics.dest); +} diff --git a/sa1/src/game/interactables/teleport_orb.c b/sa1/src/game/interactables/teleport_orb.c new file mode 100644 index 0000000000..f85ead6ad2 --- /dev/null +++ b/sa1/src/game/interactables/teleport_orb.c @@ -0,0 +1,149 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x30]; + /* 0x3C */ s16 v1x; + /* 0x3E */ s16 v1y; + /* 0x40 */ s16 unk40; + /* 0x42 */ s16 unk42; + /* 0x44 */ s16 unk44; + /* 0x46 */ u16 v2x; + /* 0x48 */ u16 v2y; +} TeleportOrb; + +void Task_TeleportOrb(void); + +void CreateEntity_TeleportOrb(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_TeleportOrb, sizeof(TeleportOrb), 0x2000, 0, NULL); + TeleportOrb *orb = TASK_DATA(t); + + orb->base.regionX = regionX; + orb->base.regionY = regionY; + orb->base.me = me; + orb->base.meX = me->x; + orb->base.id = id; + + orb->v1x = Q(me->d.sData[0]); + orb->v1y = Q(me->d.sData[1]); + orb->v2x = Q(me->d.uData[2]); + orb->v2y = Q(me->d.uData[3]); + + orb->unk40 = 0; + orb->unk42 = 0; + orb->unk44 = 0; + + SET_MAP_ENTITY_INITIALIZED(me); +} + +// (98.15%) https://decomp.me/scratch/HjIjG +NONMATCH("asm/non_matching/game/interactables/TeleportOrb__Task_TeleportOrb.inc", void Task_TeleportOrb(void)) +{ + TeleportOrb *orb = TASK_DATA(gCurTask); + CamCoord worldX, worldY; + s16 screenX, screenY; + MapEntity *me; + s32 i; + + me = orb->base.me; + + worldX = TO_WORLD_POS(orb->base.meX, orb->base.regionX); + worldY = TO_WORLD_POS(me->y, orb->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + do { + if (GetBit(orb->unk44, i)) { + // _08084A64 + if ((gCamera.x == orb->unk40 && gCamera.y == orb->unk42) && (gCamera.x <= I(PLAYER(i).qWorldX)) + && (gCamera.x + DISPLAY_WIDTH >= I(PLAYER(i).qWorldX)) && (gCamera.y <= I(PLAYER(i).qWorldY)) + && (gCamera.y + DISPLAY_HEIGHT >= I(PLAYER(i).qWorldY))) { + // _08084AF0 + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + ClearBit(orb->unk44, i); + PLAYER(i).qSpeedAirY = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } else { + // _08084B72 + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).qSpeedAirY = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + SetBit(orb->unk44, i); + } + // _08084C1A + + if ((PLAYER(i).moveState & MOVESTATE_DEAD)) { + ClearBit(orb->unk44, i); + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + + if (PLAYER(i).playerID == PLAYER_1) { + PLAYER(i).qWorldY = Q(gCamera.y + DISPLAY_CENTER_Y); + PLAYER(i).qWorldX = Q(gCamera.x + DISPLAY_CENTER_X); + gCamera.SA2_LABEL(unkC) = 0; + gCamera.SA2_LABEL(unk8) = 0; + } + } + // _08084CB8 + + orb->unk40 = gCamera.x; + orb->unk42 = gCamera.y; + } else /* !GetBit(orb->unk44, i) */ { + // _08084CCC + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((worldX - 12 <= I(PLAYER(i).qWorldX)) && (worldX + 12 >= I(PLAYER(i).qWorldX)) && (worldY - 12 <= I(PLAYER(i).qWorldY)) + && (worldY + 12 >= I(PLAYER(i).qWorldY))) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + + PLAYER(i).qWorldX = Q(orb->v1x) + orb->v2x; + PLAYER(i).qWorldY = Q(orb->v1y) + orb->v2y; + PLAYER(i).qSpeedAirY = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + m4aSongNumStart(SE_SPRING); + SetBit(orb->unk44, i); + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + + orb->unk40 = gCamera.x; + orb->unk42 = gCamera.y; + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (!(orb->unk44 & 0x3)) { + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, orb->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} +END_NONMATCH \ No newline at end of file diff --git a/sa1/src/game/interactables/toggle_gravity.c b/sa1/src/game/interactables/toggle_gravity.c new file mode 100644 index 0000000000..9e0c4810c6 --- /dev/null +++ b/sa1/src/game/interactables/toggle_gravity.c @@ -0,0 +1,135 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ u8 fillerC[0x30]; + /* 0x3C */ s32 qWorld; + /* 0x40 */ u8 unk40; + /* 0x41 */ u8 kind; +} ToggleGravity; + +void Task_ToggleGravity(void); + +// (95.78%) https://decomp.me/scratch/YPlUl +NONMATCH("asm/non_matching/game/interactables/toggle_gravity__Task_ToggleGravity.inc", void Task_ToggleGravity(void)) +{ + ToggleGravity *ia = TASK_DATA(gCurTask); + MapEntity *me = ia->base.me; + CamCoord worldX, worldY; + s16 screenX, screenY; + s32 left; + + worldX = TO_WORLD_POS(ia->base.meX, ia->base.regionX); + worldY = TO_WORLD_POS(me->y, ia->base.regionY); + + if (PLAYER_IS_ALIVE) { + u8 kind = ia->kind; + if (kind > 2) { + left = worldX + me->d.sData[0] * TILE_WIDTH; + + if ((left <= I(gPlayer.qWorldX)) && ((left + me->d.uData[2] * TILE_WIDTH) >= I(gPlayer.qWorldX))) { + if (ia->qWorld > Q(worldY)) { + if (gPlayer.qWorldY < Q(worldY)) { + if (kind == 3) { + goto k_3; + } else if (kind == 4) { + goto k_4; + } else { + gStageFlags |= STAGE_FLAG__GRAVITY_INVERTED; + } + } + } else if (ia->qWorld < Q(worldY)) { + if (gPlayer.qWorldY > Q(worldY)) { + if (kind == 3) { + k_3: + if (!(gStageFlags & STAGE_FLAG__GRAVITY_INVERTED)) { + gStageFlags |= STAGE_FLAG__GRAVITY_INVERTED; + } else { + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + } + } else if (kind == 4) { + k_4: + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + } else { + gStageFlags |= STAGE_FLAG__GRAVITY_INVERTED; + } + } + } + } + + ia->qWorld = gPlayer.qWorldY; + } else { + // _0809558C + s32 top = worldY + me->d.sData[1] * TILE_WIDTH; + + if ((top <= I(gPlayer.qWorldY)) && ((top + me->d.uData[3] * TILE_WIDTH) >= I(gPlayer.qWorldY))) { + if (ia->qWorld > Q(worldX)) { + if (gPlayer.qWorldX < Q(worldX)) { + if (kind == 0) { + goto test; + } else if (kind == 1) { + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + } else { + gStageFlags |= STAGE_FLAG__GRAVITY_INVERTED; + } + } + } else if (ia->qWorld < Q(worldX)) { + if (gPlayer.qWorldX > Q(worldX)) { + if (kind == 0) { + test: + if (!(gStageFlags & STAGE_FLAG__GRAVITY_INVERTED)) { + gStageFlags |= STAGE_FLAG__GRAVITY_INVERTED; + } else { + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + } + } else if (kind == 1) { + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + } else { + gStageFlags |= STAGE_FLAG__GRAVITY_INVERTED; + } + } + } + } + + ia->qWorld = gPlayer.qWorldX; + } + } + // _08095616 + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ia->base.meX); + TaskDestroy(gCurTask); + return; + } +} +END_NONMATCH + +void CreateEntity_ToggleGravity(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = NULL; + ToggleGravity *ia; + t = TaskCreate(Task_ToggleGravity, sizeof(ToggleGravity), 0x2000, 0, NULL); + ia = TASK_DATA(t); + + ia->base.regionX = regionX; + ia->base.regionY = regionY; + ia->base.me = me; + ia->base.meX = me->x; + ia->base.id = id; + ia->unk40 = 0; + + if (me->d.uData[2] > me->d.uData[3]) { + ia->kind = me->d.uData[1]; + ia->qWorld = gPlayer.qWorldY; + } else { + ia->kind = me->d.uData[0]; + ia->qWorld = gPlayer.qWorldX; + } + + SET_MAP_ENTITY_INITIALIZED(me); +} diff --git a/sa1/src/game/interactables/toggle_player_float.c b/sa1/src/game/interactables/toggle_player_float.c new file mode 100644 index 0000000000..2bd45cb485 --- /dev/null +++ b/sa1/src/game/interactables/toggle_player_float.c @@ -0,0 +1,179 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/parameters/characters.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" + +#include "constants/char_states.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ u8 filler4[0x30]; + /* 0x34 */ u16 regionX; + /* 0x36 */ u16 regionY; + /* 0x3A */ u8 unk38[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x3A */ u8 unk3A[NUM_SINGLEPLAYER_CHARS_MAX]; + /* 0x3C */ u8 meX; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E; +} TogglePlayerFloat; + +#ifndef NON_MATCHING +#define PLAYERFLOAT_DATA_SIZE 0x3F +#else +#define PLAYERFLOAT_DATA_SIZE sizeof(TogglePlayerFloat) +#endif + +void Task_PlayerFloatMain(void); + +void Task_PlayerFloatMain(void) +{ + TogglePlayerFloat *toggle; + MapEntity *me; + u8 meX; + u16 regionX; + u16 regionY; + u8 unk3D; + CamCoord x, y; + u8 unk3E; + u8 ptrCharstatePlayer; + u8 ptrCharstatePartner; + s32 res; + s32 i; + + toggle = TASK_DATA(gCurTask); + me = toggle->me; + meX = toggle->meX; + regionX = TASK_GET_MEMBER(TogglePlayerFloat, gCurTask, u16, regionX); + regionY = TASK_GET_MEMBER(TogglePlayerFloat, gCurTask, u16, regionY); + unk3D = TASK_GET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk3D); + unk3E = TASK_GET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk3E); + + // World x|y + x = TO_WORLD_POS(meX, regionX); + y = TO_WORLD_POS(me->y, regionY); + + // Sprite x|y + x -= gCamera.x; + y -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + s32 i; + + i = 0; + do { + if (TASK_GET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk3A[i]) == 1) { +#ifndef NON_MATCHING + // A Div() call for halving the speed, really? D: + PLAYER(i).qSpeedAirY = Div(PLAYER(i).qSpeedAirY, 2); +#else + Player *p = &PLAYER(i); + s32 qSpeed = p->qSpeedAirY; + p->qSpeedAirY = qSpeed >> 1; +#endif + } + } while (++i < gNumSingleplayerCharacters); + + if (unk3D == 1) { + m4aSongNumStop(SE_200); + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, meX); + TaskDestroy(gCurTask); + return; + } + + // World x|y + x += gCamera.x; + y += gCamera.y; + + i = 0; + do { + if (PLAYER(i).charState != CHARSTATE_37) { + if (unk3D != 0) { + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + unk3D = 0; + } + } + + if (PLAYER(i).moveState & MOVESTATE_DEAD) { + continue; + } + + if ((x <= I(PLAYER(i).qWorldX)) && (x + me->d.uData[2] * TILE_WIDTH >= I(PLAYER(i).qWorldX)) && (y <= I(PLAYER(i).qWorldY)) + && (y + me->d.uData[3] * TILE_WIDTH >= I(PLAYER(i).qWorldY))) { + if (unk3D == 0) { + if (PLAYER(i).charState != CHARSTATE_37) { + if (me->d.sData[0] == 0) { + unk3D = 1; + m4aSongNumStart(SE_200); + } + } + } + + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + PLAYER(i).qSpeedAirY -= Q(PLAYER_FLOATING_UPDRAFT); + } + + if (PLAYER(i).qSpeedAirY < -Q(PLAYER_MAX_FLOATING_SPEED)) { + PLAYER(i).qSpeedAirY = -Q(PLAYER_MAX_FLOATING_SPEED); + } + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + + if (me->d.sData[0] == 0) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_37; + } else { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_17; + } + + if (PLAYER(i).character == CHARACTER_AMY) { + PLAYER(i).moveState |= MOVESTATE_2000000; + } + + res = SA2_LABEL(sub_801F100)(I(PLAYER(i).qWorldY), I(PLAYER(i).qWorldX), PLAYER(i).layer, 8, SA2_LABEL(sub_801EC3C)); + + if (res > 4) { + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + } + TASK_SET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk3A[i], TASK_GET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk38[i])); + } else { + TASK_SET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk38[i], 0); + TASK_SET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk3A[i], TASK_GET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk38[i])); + } + + } while (++i < gNumSingleplayerCharacters); + + TASK_SET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk3D, unk3D); + TASK_SET_MEMBER(TogglePlayerFloat, gCurTask, u8, unk3E, unk3E); +} + +void CreateEntity_Toggle_PlayerFloat(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_PlayerFloatMain, PLAYERFLOAT_DATA_SIZE, 0x2000, 0, NULL); + + TASK_SET_MEMBER(TogglePlayerFloat, t, u16, regionX, regionX); + TASK_SET_MEMBER(TogglePlayerFloat, t, u16, regionY, regionY); +#ifndef NON_MATCHING + TASK_SET_MEMBER(TogglePlayerFloat, t, u16, unk38, 0); + TASK_SET_MEMBER(TogglePlayerFloat, t, u16, unk3A, 0); +#else + TASK_SET_MEMBER(TogglePlayerFloat, t, u8, unk38[0], 0); + TASK_SET_MEMBER(TogglePlayerFloat, t, u8, unk38[1], 0); + TASK_SET_MEMBER(TogglePlayerFloat, t, u8, unk3A[0], 0); + TASK_SET_MEMBER(TogglePlayerFloat, t, u8, unk3A[1], 0); +#endif + TASK_SET_MEMBER(TogglePlayerFloat, t, MapEntity *, me, me); + TASK_SET_MEMBER(TogglePlayerFloat, t, u8, unk3D, 0); + TASK_SET_MEMBER(TogglePlayerFloat, t, u8, unk3E, 0); + TASK_SET_MEMBER(TogglePlayerFloat, t, u8, meX, me->x); + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/toggle_player_layer.c b/sa1/src/game/interactables/toggle_player_layer.c new file mode 100644 index 0000000000..cb9ee6a134 --- /dev/null +++ b/sa1/src/game/interactables/toggle_player_layer.c @@ -0,0 +1,101 @@ +#include "global.h" +#include "core.h" +#include "sprite.h" +#include "game/stage/camera.h" +#include "game/entity.h" + +#include "constants/interactables.h" + +typedef struct { + /* 0x00 */ u8 x; + /* 0x01 */ u8 y; + /* 0x02 */ u8 index; + + /* 0x03 */ s8 unused3; + /* 0x04 */ s8 unused4; + /* 0x05 */ u8 width; + /* 0x06 */ u8 height; +} MapEntity_Toggle_PlayerLayer; + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ u16 regionX; + /* 0x06 */ u16 regionY; + /* 0x08 */ u8 meX; +} TogglePlayerLayer; + +#ifndef NON_MATCHING +#define TOGGLE_PLAYER_LAYER_SIZE 9 +#else +#define TOGGLE_PLAYER_LAYER_SIZE sizeof(TogglePlayerLayer) +#endif + +void Task_Toggle_PlayerLayer(void); + +void Task_Toggle_PlayerLayer(void) +{ + TogglePlayerLayer *ia = TASK_DATA(gCurTask); + MapEntity_Toggle_PlayerLayer *me = (MapEntity_Toggle_PlayerLayer *)ia->me; + u8 meX = TASK_GET_MEMBER(TogglePlayerLayer, gCurTask, u16, meX); + u16 regionX = TASK_GET_MEMBER(TogglePlayerLayer, gCurTask, u16, regionX); + u16 regionY = TASK_GET_MEMBER(TogglePlayerLayer, gCurTask, u16, regionY); + s32 i; + + CamCoord screenX = TO_WORLD_POS(meX, regionX); + CamCoord screenY = TO_WORLD_POS(me->y, regionY); + + i = 0; + do { + if ((screenX <= I(PLAYER(i).qWorldX)) && (screenX + (me->width * TILE_WIDTH) >= I(PLAYER(i).qWorldX)) + && (screenY <= I(PLAYER(i).qWorldY)) && (screenY + (me->height * TILE_WIDTH) >= I(PLAYER(i).qWorldY))) { + s32 frontIAIndex = IA__TOGGLE_PLAYER_LAYER__FRONT; + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + frontIAIndex = IA__MP_TOGGLE_PLAYER_LAYER__FRONT; + } + + // The interactable-index determines, whether the layer we switch to + // should be the foreground- or the background layer. + if (frontIAIndex == me->index) { + if (i != 0) { + ClearBit(gPartner.layer, 0); + } else { + ClearBit(gPlayer.layer, 0); + } + } else { + if (i != 0) { + SetBit(gPartner.layer, 0); + } else { + SetBit(gPlayer.layer, 0); + } + } + } + } while (++i < gNumSingleplayerCharacters); + + screenX -= gCamera.x; + screenY -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + me->x = meX; + TaskDestroy(gCurTask); + } +} + +void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Toggle_PlayerLayer, TOGGLE_PLAYER_LAYER_SIZE, 0x2000, 0, NULL); +#ifndef NON_MATCHING + TASK_SET_MEMBER(TogglePlayerLayer, t, u16, regionX, regionX); + TASK_SET_MEMBER(TogglePlayerLayer, t, u16, regionY, regionY); + TASK_SET_MEMBER(TogglePlayerLayer, t, MapEntity *, me, me); + TASK_SET_MEMBER(TogglePlayerLayer, t, u8, meX, me->x); +#else + TogglePlayerLayer *ia = TASK_DATA(t); + + ia->regionX = regionX; + ia->regionY = regionY; + ia->me = me; + ia->meX = me->x; +#endif + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/toggle_player_visibility.c b/sa1/src/game/interactables/toggle_player_visibility.c new file mode 100644 index 0000000000..d81bf95e2c --- /dev/null +++ b/sa1/src/game/interactables/toggle_player_visibility.c @@ -0,0 +1,67 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" + +typedef struct { + SpriteBase base; + u8 fillerC[0x30]; + s8 visibility; // 0 = Visible, 1 = Invisible +} TogglePlayerVisibility; + +void Task_Toggle_PlayerVisibility(void); + +void Task_Toggle_PlayerVisibility(void) +{ + TogglePlayerVisibility *ia = TASK_DATA(gCurTask); + MapEntity *me = ia->base.me; + Player *player, *partner; + s16 worldX, worldY; + s16 screenX, screenY; + s32 i; + + worldX = TO_WORLD_POS(ia->base.meX, ia->base.regionX); + worldY = TO_WORLD_POS(me->y, ia->base.regionY); + + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + player = &gPlayer; + partner = &gPartner; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if ((worldX <= I(PLAYER(i).qWorldX)) && ((worldX + (me->d.uData[2] * TILE_WIDTH)) >= I(PLAYER(i).qWorldX)) + && (worldY <= I(PLAYER(i).qWorldY)) && ((worldY + (me->d.uData[3] * TILE_WIDTH)) >= I(PLAYER(i).qWorldY))) { + if (ia->visibility) { + PLAYER(i).moveState |= MOVESTATE_100000; + } else { + PLAYER(i).moveState &= ~MOVESTATE_100000; + } + } + } else { + PLAYER(i).moveState &= ~MOVESTATE_100000; + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ia->base.meX); + TaskDestroy(gCurTask); + return; + } +} + +void CreateEntity_Toggle_PlayerVisibility(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Toggle_PlayerVisibility, sizeof(TogglePlayerVisibility), 0x2000 | me->d.uData[3], 0, NULL); + TogglePlayerVisibility *ia = TASK_DATA(t); + + ia->base.regionX = regionX; + ia->base.regionY = regionY; + ia->base.me = me; + ia->base.meX = me->x; + ia->base.id = id; + + ia->visibility = me->d.uData[0]; + + SET_MAP_ENTITY_INITIALIZED(me); +} diff --git a/sa1/src/game/interactables/torch.c b/sa1/src/game/interactables/torch.c new file mode 100644 index 0000000000..e7444bcc6a --- /dev/null +++ b/sa1/src/game/interactables/torch.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "malloc_vram.h" +#include "game/entity.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; +} Torch; + +static void Task_TorchMain(void); +static void TaskDestructor_Torch(struct Task *); + +// Cosmic Angel: Antigravity field elements +// (They kind of look like torches, I guess?) + +void CreateEntity_Torch(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_TorchMain, sizeof(Torch), 0x2000, 0, TaskDestructor_Torch); + Torch *torch = TASK_DATA(t); + Sprite *s = &torch->s; + + torch->base.regionX = regionX; + torch->base.regionY = regionY; + torch->base.me = me; + + torch->base.meX = me->x; + torch->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + // Allocate sprites for Cosmic Angel-themed stages + + if (me->d.sData[0] != 0) { + // Single "antigrav" unit + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TORCH6_1); + s->graphics.anim = SA1_ANIM_TORCH6_1; + s->variant = 0; + } else { + // Double "antigrav" units + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TORCH6_2); + s->graphics.anim = SA1_ANIM_TORCH6_2; + s->variant = 0; + } + } else { + // Allocate sprites for Angel Island stages + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TORCH5); + s->graphics.anim = SA1_ANIM_TORCH5; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(28); + s->graphics.size = 0; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +static void Task_TorchMain(void) +{ + Torch *torch = TASK_DATA(gCurTask); + Sprite *s = &torch->s; + MapEntity *me = torch->base.me; + + s16 screenX, screenY; + screenX = TO_WORLD_POS(torch->base.meX, torch->base.regionX); + screenY = TO_WORLD_POS(me->y, torch->base.regionY); + + s->x = screenX - gCamera.x; + s->y = screenY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, torch->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +static void TaskDestructor_Torch(struct Task *t) +{ + Torch *torch = TASK_DATA(t); + VramFree(torch->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/track.c b/sa1/src/game/interactables/track.c new file mode 100644 index 0000000000..27bc001f33 --- /dev/null +++ b/sa1/src/game/interactables/track.c @@ -0,0 +1,181 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/dust_cloud.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/interactables.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C[2]; + /* 0x3E */ u8 unk3E; + /* 0x3F */ u8 unk3F[2]; + /* 0x44 */ s32 unk44[2]; + /* 0x4C */ s32 unk4C[2]; + /* 0x54 */ s32 unk54; + /* 0x58 */ s32 unk58; + /* 0x5C */ s32 unk5C[2]; + /* 0x64 */ s32 unk64[2]; + /* 0x6C */ u8 unk6C; +} Track; + +void Task_Track(void); + +void CreateEntity_Track(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Track, sizeof(Track), me->d.uData[3] | 0x2000, 0, NULL); + Track *track = TASK_DATA(t); + + track->base.regionX = regionX; + track->base.regionY = regionY; + track->base.me = me; + track->base.meX = me->x; + track->base.id = id; + + track->unk3E = me->d.uData[2]; + track->unk3F[0] = 0; + track->unk44[0] = 0; + track->unk4C[0] = 0; + track->unk5C[0] = 0; + track->unk64[0] = 0; + track->unk3F[1] = 0; + track->unk44[1] = 0; + track->unk4C[1] = 0; + track->unk5C[1] = 0; + track->unk64[1] = 0; + + track->unk54 = me->d.sData[0] * TILE_WIDTH; + track->unk58 = me->d.sData[1] * TILE_WIDTH; + + track->unk6C = 0; + track->unk3C[0] = me->d.uData[3]; + track->unk3C[1] = me->d.uData[3]; + + SET_MAP_ENTITY_INITIALIZED(me); +} + +void Task_Track(void) +{ + CamCoord worldX, worldY; + s16 screenX, screenY; + Track *track = TASK_DATA(gCurTask); + MapEntity *me = track->base.me; + s32 i; + + worldX = TO_WORLD_POS(track->base.meX, track->base.regionX); + worldY = TO_WORLD_POS(me->y, track->base.regionY); + screenX = worldX - gCamera.x; + screenY = worldY - gCamera.y; + + i = 0; + do { + if (GetBit(track->unk6C, i)) { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (PLAYER(i).SA2_LABEL(unk99)[0] == track->unk3C[i]) { + s32 resA, resB; + resA = Div(track->unk3F[i] * track->unk54, track->unk3E); + resB = Div(track->unk3F[i] * track->unk58, track->unk3E); + + PLAYER(i).qWorldX = Q(track->unk44[i] + resA); + PLAYER(i).qWorldY = Q(track->unk4C[i] + resB); + PLAYER(i).qSpeedAirY = PLAYER(i).qWorldY - track->unk64[i]; + PLAYER(i).qSpeedGround = PLAYER(i).qWorldX - track->unk5C[i]; + PLAYER(i).qSpeedAirX = PLAYER(i).qSpeedGround; + track->unk3F[i]++; + + if ((I(PLAYER(i).qWorldX) == track->unk44[i] + track->unk54) + && (I(PLAYER(i).qWorldY) == track->unk4C[i] + track->unk58)) { + if (PLAYER(i).SA2_LABEL(unk99)[0] == track->unk3C[i]) { + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } + + ClearBit(track->unk6C, i); + } else { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState &= ~MOVESTATE_FACING_LEFT; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).charState = CHARSTATE_SPINATTACK; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + SetBit(track->unk6C, i); + } + + track->unk5C[i] = PLAYER(i).qWorldX; + track->unk64[i] = PLAYER(i).qWorldY; + + } else { + ClearBit(track->unk6C, i); + } + } else { + PLAYER(i).moveState &= ~MOVESTATE_100000; + PLAYER(i).moveState &= ~MOVESTATE_IA_OVERRIDE; + + ClearBit(track->unk6C, i); + } + } else { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + if (PLAYER(i).SA2_LABEL(unk99)[0] < track->unk3C[i] || track->unk3C[i] == 0) { + if ((worldX - 10 <= I(PLAYER(i).qWorldX)) && (worldX + 10 >= I(PLAYER(i).qWorldX)) + && (worldY - 10 <= I(PLAYER(i).qWorldY)) && (worldY + 10 >= I(PLAYER(i).qWorldY))) { + track->unk3F[i] = 0; + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).moveState |= MOVESTATE_4; + PLAYER(i).moveState |= MOVESTATE_IA_OVERRIDE; + PLAYER(i).qWorldX = Q(worldX); + PLAYER(i).qWorldY = Q(worldY); + + track->unk44[i] = worldX; + track->unk4C[i] = worldY; + + PLAYER(i).qSpeedAirY = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).charState = CHARSTATE_SPINATTACK; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&PLAYER(i), 6, 14); + + do { + // For matching + m4aSongNumStart(SE_202); + } while (0); + + SetBit(track->unk6C, i); + + PLAYER(i).SA2_LABEL(unk99)[0] = track->unk3C[i]; + PLAYER(i).itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } + } else { + PLAYER(i).moveState &= ~MOVESTATE_100000; + } + } + } while (++i < gNumSingleplayerCharacters); + + if (!(track->unk6C & 0x3)) { + if (IS_OUT_OF_CAM_RANGE(screenX, screenY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, track->base.meX); + TaskDestroy(gCurTask); + return; + } + } +} \ No newline at end of file diff --git a/sa1/src/game/interactables/trampoline.c b/sa1/src/game/interactables/trampoline.c new file mode 100644 index 0000000000..f239cf44d1 --- /dev/null +++ b/sa1/src/game/interactables/trampoline.c @@ -0,0 +1,179 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/stage/player.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; +} Trampoline; + +void Task_Trampoline(void); +void Task_Trampoline1(void); +bool32 sub_8074FB0(Sprite *s, s16 worldX, s16 worldY); +void TaskDestructor_Trampoline(struct Task *); + +void CreateEntity_Trampoline(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Trampoline, sizeof(Trampoline), 0x2000, 0, TaskDestructor_Trampoline); + Trampoline *trampoline = TASK_DATA(t); + Sprite *s = &trampoline->s; + + trampoline->base.regionX = regionX; + trampoline->base.regionY = regionY; + trampoline->base.me = me; + trampoline->base.meX = me->x; + trampoline->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_2) || (gCurrentLevel == ACT_CHAO_HUNT_B)) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TRAMPOLINE2); + s->graphics.anim = SA1_ANIM_TRAMPOLINE2; + } else if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) || (gCurrentLevel == ACT_CHAO_HUNT_D)) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TRAMPOLINE2); + s->graphics.anim = SA1_ANIM_TRAMPOLINE2; + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TRAMPOLINE1); + s->graphics.anim = SA1_ANIM_TRAMPOLINE1; + } + + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +void Task_Trampoline(void) +{ + Trampoline *trampoline = TASK_DATA(gCurTask); + Sprite *s = &trampoline->s; + MapEntity *me = trampoline->base.me; + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(trampoline->base.meX, trampoline->base.regionX); + worldY = TO_WORLD_POS(me->y, trampoline->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (sub_8074FB0(s, worldX, worldY)) { + m4aSongNumStart(SE_TRAMPOLINE); + s->variant = 1; + gCurTask->main = Task_Trampoline1; + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, trampoline->base.meX); + TaskDestroy(gCurTask); + return; + } else { + DisplaySprite(s); + } +} + +void Task_Trampoline1(void) +{ + Trampoline *trampoline = TASK_DATA(gCurTask); + Sprite *s = &trampoline->s; + MapEntity *me = trampoline->base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(trampoline->base.meX, trampoline->base.regionX); + worldY = TO_WORLD_POS(me->y, trampoline->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (sub_8074FB0(s, worldX, worldY)) { + m4aSongNumStart(SE_TRAMPOLINE); + s->variant = 1; + s->prevVariant = -1; + } + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, trampoline->base.meX); + TaskDestroy(gCurTask); + return; + } else if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->variant = 0; + UpdateSpriteAnimation(s); + + gCurTask->main = Task_Trampoline; + } + + DisplaySprite(s); +} + +bool32 sub_8074FB0(Sprite *s, s16 worldX, s16 worldY) +{ + bool32 result = FALSE; + s32 i; + + i = 0; + do { + Player *p = &PLAYER(i); + s32 qSpeedAirY = p->qSpeedAirY; + u32 res = sub_80096B0(s, worldX, worldY, p); + + if (res & 0x8) { + s32 a; + Player_TransitionCancelFlyingAndBoost(p); + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); + + if (qSpeedAirY == 0) { + p->qWorldY -= Q(8); + } + + a = ((qSpeedAirY >> 5) - (qSpeedAirY + (qSpeedAirY >> 2))); + p->qSpeedAirY = a; + + if (p->qSpeedAirY < -Q(10.9921875)) { + p->qSpeedAirY = -Q(10.9921875); + } + + if (p->qSpeedAirY > -Q(3.75)) { + p->qSpeedAirY = -Q(3.75); + } + + p->charState = CHARSTATE_SPRING_B; + + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + p->timerInvulnerability = 30; + } + + result = TRUE; + } + } while (++i < gNumSingleplayerCharacters); + + return result; +} + +void TaskDestructor_Trampoline(struct Task *t) +{ + Trampoline *trampoline = TASK_DATA(t); + VramFree(trampoline->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/underwater_lava_platform.c b/sa1/src/game/interactables/underwater_lava_platform.c new file mode 100644 index 0000000000..11401d85cf --- /dev/null +++ b/sa1/src/game/interactables/underwater_lava_platform.c @@ -0,0 +1,270 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/water_effects.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +#define LAVA_SPURT_RATE TIME(0, 1.7) + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ Hitbox reserved; + /* 0x44 */ Sprite s2; + /* 0x74 */ u8 unk74; + /* 0x78 */ s32 qUnk78; + /* 0x7C */ s32 qUnk7C; + /* 0x80 */ s32 unk80; + /* 0x84 */ s32 unk84; +} UnderwaterLavaPlatform; /* 0x88 */ + +void Task_UnderwaterLavaPlatform(void); +void Task_80929A0(void); +void TaskDestructor_UnderwaterLavaPlatform(struct Task *t); + +void CreateEntity_UnderwaterLavaPlatform(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t + = TaskCreate(Task_UnderwaterLavaPlatform, sizeof(UnderwaterLavaPlatform), 0x2000, 0, TaskDestructor_UnderwaterLavaPlatform); + UnderwaterLavaPlatform *platform = TASK_DATA(t); + Sprite *s = &platform->s; + Sprite *s2 = &platform->s2; + + platform->base.regionX = regionX; + platform->base.regionY = regionY; + platform->base.me = me; + platform->base.meX = me->x; + platform->base.id = id; + + platform->qUnk78 = 0; + platform->qUnk7C = 0; + platform->unk74 = 0; + platform->unk80 = 0; + platform->unk84 = 0; + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_LAVA_SPURT); + s->graphics.anim = SA1_ANIM_PLATFORM_LAVA; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s2->graphics.dest = ALLOC_TILES(SA1_ANIM_PLATFORM_HORZ_4_PURPLE); + s2->graphics.anim = SA1_ANIM_PLATFORM_HORZ_4_PURPLE; + s2->variant = 0; + s2->oamFlags = SPRITE_OAM_ORDER(17); + s2->graphics.size = 0; + s2->animCursor = 0; + s2->qAnimDelay = Q(0); + s2->prevVariant = -1; + s2->animSpeed = SPRITE_ANIM_SPEED(1.0); + s2->palId = 0; + s2->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s2->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_UnderwaterLavaPlatform(void) +{ + CamCoord worldX, worldY; + UnderwaterLavaPlatform *platform; + MapEntity *me; + Sprite *s; + Sprite *s2; + s32 i; + + platform = TASK_DATA(gCurTask); + me = platform->base.me; + s = &platform->s; + s2 = &platform->s2; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y - 3; + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y; + + i = 0; + do { + s32 qPrevPlayerX = PLAYER(i).qWorldX; + + if (Coll_Player_PlatformCrumbling(s2, worldX, worldY, &PLAYER(i)) & COLL_FLAG_8) { + PLAYER(i).qWorldY = Q(worldY - 27); + PLAYER(i).moveState &= ~MOVESTATE_IN_AIR; + } + + PLAYER(i).qWorldX = qPrevPlayerX; + + sub_80096B0(s, worldX, worldY, &PLAYER(i)); + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, platform->base.meX); + TaskDestroy(gCurTask); + return; + } + + if (Mod(gStageTime, LAVA_SPURT_RATE) == 0) { + platform->unk84 = LAVA_SPURT_RATE; + platform->unk74 = 0; + platform->qUnk78 = -Q(5); + platform->qUnk7C = +Q(0); + platform->unk80 = 3; + + s->graphics.anim = SA1_ANIM_PLATFORM_LAVA_SPURT; + s->variant = 0; + s->prevVariant = -1; + m4aSongNumStart(SE_LAVA_PLATFORM_SPURT); + gCurTask->main = Task_80929A0; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); +} + +// (97.66%) https://decomp.me/scratch/cj6rs +NONMATCH("asm/non_matching/game/interactables/lava_platform__Task_80929A0.inc", void Task_80929A0(void)) +{ + CamCoord worldX, worldY; + UnderwaterLavaPlatform *platform; + MapEntity *me; + Sprite *s; + Sprite *s2; + s32 i; + + platform = TASK_DATA(gCurTask); + me = platform->base.me; + s = &platform->s; + s2 = &platform->s2; + + worldX = TO_WORLD_POS(platform->base.meX, platform->base.regionX); + worldY = TO_WORLD_POS(me->y, platform->base.regionY); + + platform->qUnk78 += Q(37. / 256.); + platform->qUnk7C += platform->qUnk78; + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y - 3; + + s2->x = worldX - gCamera.x; + s2->y = worldY - gCamera.y + I(platform->qUnk7C); + + i = 0; + do { + // _08092A34_loop + if (GetBit(platform->unk74, i)) { + if (!Coll_Player_Entity_Intersection(s2, worldX, worldY + I(platform->qUnk7C), &PLAYER(i))) { + ClearBit(platform->unk74, i); + // asm(""); + } else { + PLAYER(i).qWorldY += platform->qUnk78; + } + } else { + // _08092AC8 + if (Coll_Player_PlatformCrumbling(s2, worldX, worldY + I(platform->qUnk7C), &PLAYER(i))) { + PLAYER(i).qWorldY = Q(worldY + I(platform->qUnk7C) - 27); + SetBit(platform->unk74, i); + + if (PLAYER(i).moveState & MOVESTATE_IN_AIR) { + ClearBit(platform->unk74, i); + } + + if (PLAYER(i).qSpeedAirY == Q(0)) { + if (PLAYER(i).charState != CHARSTATE_WALK_A) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = CHARSTATE_WALK_A; + } + } + } else { + ClearBit(platform->unk74, i); + // asm(""); + } + } + } while (++i < gNumSingleplayerCharacters); + // _08092BF4 + + if (--platform->unk84 == 48) { + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_PLATFORM_LAVA; + s->variant = 0; + + // goto _08092E54; + UpdateSpriteAnimation(s); + } else if ((platform->unk84 >= 49) && (platform->unk84 < 96)) { + // _08092C2E + i = 0; + do { + if (PLAYER_SPR_INFO_HITBOX(i, 0)->index != HITBOX_STATE_INACTIVE) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(PLAYER(i).qWorldX), I(PLAYER(i).qWorldY), + PLAYER_SPR_INFO_HITBOX(i, 0)->b + + )) { + Coll_DamagePlayer(&PLAYER(i)); + } + } + } while (++i < gNumSingleplayerCharacters); + + UpdateSpriteAnimation(s); + + } else if (platform->unk84 < 48) { + // _08092E68 + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_PLATFORM_LAVA; + s->variant = 0; + } + UpdateSpriteAnimation(s); + } + // _08092E92 + + if (platform->qUnk7C >= Q(0)) { + if (--platform->unk80 != 0) { + platform->qUnk78 = -Div(platform->qUnk78 * 2, 5); + platform->unk74 = 0; + platform->qUnk7C = Q(0); + } else { + // _08092EC8 + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_PLATFORM_LAVA; + s->variant = 0; + + gCurTask->main = Task_UnderwaterLavaPlatform; + } + } + + // _08092EE6 + DisplaySprite(s); + UpdateSpriteAnimation(s2); + DisplaySprite(s2); +} +END_NONMATCH + +void TaskDestructor_UnderwaterLavaPlatform(struct Task *t) +{ + UnderwaterLavaPlatform *platform = TASK_DATA(t); + VramFree(platform->s.graphics.dest); + VramFree(platform->s2.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/updraft.c b/sa1/src/game/interactables/updraft.c new file mode 100644 index 0000000000..f47319e8c2 --- /dev/null +++ b/sa1/src/game/interactables/updraft.c @@ -0,0 +1,88 @@ +#include "global.h" +#include "malloc_vram.h" +#include "game/entity.h" + +#include "constants/animations.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; +} IA097; + +void Task_Interactable097(void); +void TaskDestructor_Interactable097(struct Task *); + +#if 0 +#endif + +void CreateEntity_Interactable097(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_Interactable097, sizeof(IA097), 0x2000, 0, TaskDestructor_Interactable097); + IA097 *ia = TASK_DATA(t); + Sprite *s = &ia->s; + s32 worldX, worldY; + + ia->base.regionX = regionX; + ia->base.regionY = regionY; + ia->base.me = me; + ia->base.meX = me->x; + ia->base.id = id; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); + + if (me->d.sData[0] == 0) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_DEBRIS_A); + s->graphics.anim = SA1_ANIM_DEBRIS_A; + s->variant = 0; + } else if (me->d.sData[0] == 1) { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_DEBRIS_C); + s->graphics.anim = SA1_ANIM_DEBRIS_C; + s->variant = 0; + asm(""); + } else { + s->graphics.dest = ALLOC_TILES(SA1_ANIM_DEBRIS_B); + s->graphics.anim = SA1_ANIM_DEBRIS_B; + s->variant = 0; + } + + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_Interactable097(void) +{ + IA097 *ia = TASK_DATA(gCurTask); + Sprite *s = &ia->s; + MapEntity *me = ia->base.me; + s16 worldX, worldY; + + worldX = TO_WORLD_POS(ia->base.meX, ia->base.regionX); + worldY = TO_WORLD_POS(me->y, ia->base.regionY); + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(s->x, s->y)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, ia->base.meX); + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_Interactable097(struct Task *t) +{ + IA097 *ia = TASK_DATA(t); + VramFree(ia->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/wall_bumper.c b/sa1/src/game/interactables/wall_bumper.c new file mode 100644 index 0000000000..467a047211 --- /dev/null +++ b/sa1/src/game/interactables/wall_bumper.c @@ -0,0 +1,83 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ SpriteBase base; + /* 0x0C */ Sprite s; + /* 0x3C */ s8 unk3C; +} WallBumper; + +void Task_WallBumper(void) +{ + WallBumper *bumper = TASK_DATA(gCurTask); + MapEntity *me = bumper->base.me; + s16 worldX, worldY; + s32 i; + + worldX = TO_WORLD_POS(bumper->base.meX, bumper->base.regionX); + worldY = TO_WORLD_POS(me->y, bumper->base.regionY); + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD) && worldX <= I(PLAYER(i).qWorldX) + && worldX + me->d.uData[2] * TILE_WIDTH >= I(PLAYER(i).qWorldX) && worldY <= I(PLAYER(i).qWorldY) + && worldY + me->d.uData[3] * TILE_WIDTH >= I(PLAYER(i).qWorldY)) { + m4aSongNumStart(SE_BUMPER_B); + PLAYER(i).moveState &= ~MOVESTATE_100; + PLAYER(i).moveState |= MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + + if (bumper->unk3C & 0x1) { + PLAYER(i).qSpeedAirX = +Q(5); + } else { + PLAYER(i).qSpeedAirX = -Q(5); + } + + // NOTE/BUG(?): Positive and negative are not the same! + if (bumper->unk3C < 3) { + PLAYER(i).qSpeedAirY = -Q(7); + } else { + PLAYER(i).qSpeedAirY = +Q(6); + } + + if ((PLAYER(i).character == CHARACTER_TAILS) || (PLAYER(i).character == CHARACTER_KNUCKLES)) { + + if (PLAYER(i).SA2_LABEL(unk61)) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + PLAYER(i).charState = 5; + PLAYER(i).moveState |= MOVESTATE_4; + + PLAYERFN_SET_SHIFT_OFFSETS(&PLAYER(i), 6, 9); + } + } + } + } while (++i < gNumSingleplayerCharacters); + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, bumper->base.meX); + TaskDestroy(gCurTask); + return; + } +} + +void CreateEntity_WallBumper(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_WallBumper, sizeof(WallBumper), 0x2000, 0, NULL); + WallBumper *bumper = TASK_DATA(t); + + bumper->base.regionX = regionX; + bumper->base.regionY = regionY; + bumper->base.me = me; + bumper->base.meX = me->x; + bumper->base.id = id; + + bumper->unk3C = me->d.sData[0]; + + SET_MAP_ENTITY_INITIALIZED(me); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/water_bridge.c b/sa1/src/game/interactables/water_bridge.c new file mode 100644 index 0000000000..12b9e89cf9 --- /dev/null +++ b/sa1/src/game/interactables/water_bridge.c @@ -0,0 +1,199 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +// Visual diameter of the bridge's water arc, in pixels +#define WATER_BRIDGE_DIAMETER 32 + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s32 worldX; + /* 0x08 */ s32 worldY; + /* 0x0C */ s32 left; + /* 0x10 */ s32 right; + /* 0x14 */ s32 top; + /* 0x18 */ s32 bottom; + /* 0x1C */ s32 width; + /* 0x20 */ s32 height; + /* 0x24 */ Sprite s; + /* 0x54 */ u8 unk54; + /* 0x55 */ u8 meX; +} WaterBridge; + +void Task_WaterBridge(void); +void TaskDestructor_WaterBridge(struct Task *t); + +void CreateEntity_WaterBridge(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_WaterBridge, sizeof(WaterBridge), 0x2000, 0, TaskDestructor_WaterBridge); + WaterBridge *bridge = TASK_DATA(t); + Sprite *s; + s32 worldX, worldY; + s32 width, height; + + bridge->me = me; + bridge->meX = me->x; + bridge->unk54 = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + + width = me->d.uData[2] * TILE_WIDTH; + height = me->d.uData[3] * TILE_WIDTH; + + bridge->worldX = worldX; + bridge->worldY = worldY; + bridge->left = worldX + me->d.sData[0] * TILE_WIDTH; + bridge->top = worldY + me->d.sData[1] * TILE_WIDTH; + bridge->right = bridge->left + width; + bridge->bottom = bridge->top + height; + bridge->width = width; + bridge->height = height; + + s = &bridge->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_WATER_SLIDE_SPLASH); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_WATER_SLIDE_SPLASH; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->qAnimDelay = Q(0); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 1); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} + +// (77.37%) https://decomp.me/scratch/5TZch +NONMATCH("asm/non_matching/game/interactables/water_bridge__Task_WaterBridge.inc", void Task_WaterBridge(void)) +{ + WaterBridge *bridge = TASK_DATA(gCurTask); + Sprite *s; + Player *p; + s32 playerWorldX, playerWorldY; + s32 i; + + i = 0; + do { + p = &PLAYER(i); + + playerWorldX = I(p->qWorldX); + playerWorldY = I(p->qWorldY) + p->spriteOffsetY; + + if (IS_OUT_OF_DISPLAY_RANGE(bridge->worldX, bridge->worldY)) { + bridge->me->x = bridge->meX; + p->moveState &= ~MOVESTATE_8000; + TaskDestroy(gCurTask); + break; // TODO: Is the break needed here for matching? + } + // _0804DC10 + + if ((bridge->left <= playerWorldX) && (playerWorldX < bridge->right) && (bridge->top <= playerWorldY) + && (playerWorldY <= bridge->bottom)) { + s32 theta; + s32 x, y; + + if (!IS_ALIVE(p)) { + break; + } + + theta = (QS((playerWorldX - bridge->left) * 2) / bridge->width); + + if (theta >= 0) { + if (theta > (SIN_PERIOD / 2) - 1) { + theta = (SIN_PERIOD / 2) - 1; + } + } else { + theta = 0; + } + + y = (SIN_24_8(theta) * bridge->height); + y = (QS(bridge->bottom) - ((y))) >> 8; + + if ((playerWorldY >= y) && (playerWorldY <= y + WATER_BRIDGE_DIAMETER)) { + s32 qCos = COS_24_8(theta); + s32 qSpeedX, qSpeedY; + + if (!(p->moveState & MOVESTATE_8000)) { + m4aSongNumStart(SE_WATER_BRIDGE_SPLASH); + p->moveState |= MOVESTATE_8000; + } + // _0804DCAA + + if (p->moveState & MOVESTATE_IN_AIR) { + qSpeedX = p->qSpeedAirX + Q(0.25); + } else { + qSpeedX = p->qSpeedGround + Q(0.25); + } + + if (qSpeedX < -Q(8)) { + qSpeedX = -Q(8); + } else if (qSpeedX > Q(8)) { + qSpeedX = Q(8); + } + + p->qSpeedGround = qSpeedX; + p->qSpeedAirX = qSpeedX; + + qSpeedY = (((-bridge->height * qCos) * qSpeedX) >> 16) - Q(42. / 256.); + if (qSpeedY < -Q(8)) { + qSpeedY = -Q(8); + } else if (qSpeedY > Q(8)) { + qSpeedY = Q(8); + } + + p->qSpeedAirY = qSpeedY; + + Player_TransitionCancelFlyingAndBoost(p); + + p->charState = CHARSTATE_HIT_AIR; + p->moveState &= ~MOVESTATE_4; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 9); + p->moveState |= MOVESTATE_IGNORE_INPUT; + + p->frameInput = 0; + p->heldInput = 0; + + s = &bridge->s; +#ifndef BUG_FIX + s->x = playerWorldX - gCamera.x; + // This should reverse the offset added to playerWorldY at the top of the loop + s->y = (playerWorldY - p->spriteOffsetX) - gCamera.y; +#else + // But also it looks more "as expected" with the x-offset added here. + s->x = (playerWorldX + p->spriteOffsetX) - gCamera.x; + s->y = (playerWorldY - p->spriteOffsetY) - gCamera.y; +#endif + UpdateSpriteAnimation(s); + DisplaySprite(s); + continue; + } + // _0804DD6C + } + + if (p->moveState & MOVESTATE_IGNORE_INPUT) { + p->moveState &= ~MOVESTATE_IGNORE_INPUT; + p->heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + } + p->moveState &= ~MOVESTATE_8000; + } while (++i < gNumSingleplayerCharacters); +} +END_NONMATCH + +void TaskDestructor_WaterBridge(struct Task *t) +{ + WaterBridge *bridge = TASK_DATA(t); + Sprite *s = &bridge->s; + VramFree(s->graphics.dest); +} diff --git a/sa1/src/game/interactables/water_bridge_splash.c b/sa1/src/game/interactables/water_bridge_splash.c new file mode 100644 index 0000000000..976f35a04e --- /dev/null +++ b/sa1/src/game/interactables/water_bridge_splash.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "malloc_vram.h" +#include "game/entity.h" + +#include "constants/animations.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ s32 worldX; + /* 0x08 */ s32 worldY; + /* 0x0C */ Sprite s; + /* 0x3C */ u8 unk3C; + /* 0x3D */ u8 meX; +} WaterBridgeSplash; + +void Task_WaterBridgeSplash(void); +void TaskDestructor_WaterBridgeSplash(struct Task *); + +void CreateEntity_WaterBridgeSplash(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t = TaskCreate(Task_WaterBridgeSplash, sizeof(WaterBridgeSplash), 0x2000, 0, TaskDestructor_WaterBridgeSplash); + WaterBridgeSplash *splash = TASK_DATA(t); + Sprite *s; + s32 worldX, worldY; + + splash->me = me; + + splash->meX = me->x; + splash->unk3C = 0; + + worldX = TO_WORLD_POS_INV(me->x, regionX); + worldY = TO_WORLD_POS_INV(me->y, regionY); + + splash->worldX = worldX; + splash->worldY = worldY; + + s = &splash->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_WATER_BRIDGE_SPLASH); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_WATER_BRIDGE_SPLASH; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->qAnimDelay = Q(0); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 1); + + SET_MAP_ENTITY_INITIALIZED_SIMPLE(me); +} + +void Task_WaterBridgeSplash(void) +{ + WaterBridgeSplash *splash = TASK_DATA(gCurTask); + Sprite *s = &splash->s; + + if (IS_OUT_OF_DISPLAY_RANGE(splash->worldX, splash->worldY)) { + SET_MAP_ENTITY_NOT_INITIALIZED(splash->me, splash->meX); + TaskDestroy(gCurTask); + return; + } + + s->x = splash->worldX - gCamera.x; + s->y = splash->worldY - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_WaterBridgeSplash(struct Task *t) +{ + WaterBridgeSplash *splash = TASK_DATA(t); + Sprite *s = &splash->s; + VramFree(s->graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/interactables/waterfall.c b/sa1/src/game/interactables/waterfall.c new file mode 100644 index 0000000000..1e76f4dbcc --- /dev/null +++ b/sa1/src/game/interactables/waterfall.c @@ -0,0 +1,328 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" // for gPlayerControls +#include "game/stage/ui.h" // sub_80549FC + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct { + /* 0x00 */ MapEntity *me; + /* 0x04 */ Sprite s; + /* 0x34 */ u16 regionX; + /* 0x36 */ u16 regionY; + /* 0x38 */ u8 unk38[2]; + /* 0x38 */ u8 unk3A[2]; + /* 0x3C */ u8 meX; + /* 0x3D */ u8 unk3D; + /* 0x3E */ u8 unk3E; +} Waterfall; + +#if !defined(NON_MATCHING) +#define WATERFALL_SIZE 0x3F +#else +#define WATERFALL_SIZE sizeof(Waterfall) +#endif + +void Task_Waterfall(void); +void Task_WaterfallZone5(void); +void TaskDestructor_Waterfall(struct Task *t); + +extern AnimId gUnknown_086CED28[NUM_LEVEL_IDS]; + +void CreateEntity_Waterfall(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + Sprite *s; + Waterfall *waterfall; + s32 zero; + + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_5) { + t = TaskCreate(Task_WaterfallZone5, WATERFALL_SIZE, 0x2000, 0, TaskDestructor_Waterfall); + } else { + t = TaskCreate(Task_Waterfall, WATERFALL_SIZE, 0x2000, 0, TaskDestructor_Waterfall); + } + + TASK_SET_MEMBER(Waterfall, t, u16, regionX, regionX); + TASK_SET_MEMBER(Waterfall, t, u16, regionY, regionY); + TASK_SET_MEMBER(Waterfall, t, u16, unk38, 0); + TASK_SET_MEMBER(Waterfall, t, u16, unk3A, 0); + TASK_SET_MEMBER(Waterfall, t, u16, unk3A, 0); + TASK_SET_MEMBER(Waterfall, t, u16, unk3A, 0); + TASK_SET_MEMBER(Waterfall, t, MapEntity *, me, me); + + s = &TASK_GET_MEMBER(Waterfall, t, Sprite, s); + TASK_SET_MEMBER(Waterfall, t, u8, unk3D, 0); + TASK_SET_MEMBER(Waterfall, t, u8, unk3E, 0); + TASK_SET_MEMBER(Waterfall, t, u8, meX, me->x); + + SET_MAP_ENTITY_INITIALIZED(me); + + // TODO: ALLOC_TILES() max from SA1_ANIM_WATER_SPLASH_1 | 5 + s->graphics.dest = ALLOC_TILES(SA1_ANIM_WATER_SPLASH); +#ifndef NON_MATCHING + asm("mov %0, #0" : "=r"(zero)); +#else + zero = 0; +#endif + s->oamFlags = SPRITE_OAM_ORDER(5); + s->graphics.size = zero; + s->graphics.anim = gUnknown_086CED28[gCurrentLevel]; + s->variant = 0; + s->animCursor = zero; + s->qAnimDelay = zero; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +void Task_Waterfall(void) +{ + u8 meX; + u16 regionX; + u16 regionY; + CamCoord x, y; + u8 unk3D; + u8 unk3E; + s32 i; + Sprite *s; + MapEntity *me; + + me = TASK_GET_MEMBER(Waterfall, gCurTask, MapEntity *, me); + meX = TASK_GET_MEMBER(Waterfall, gCurTask, u8, meX); + regionX = TASK_GET_MEMBER(Waterfall, gCurTask, u16, regionX); + regionY = TASK_GET_MEMBER(Waterfall, gCurTask, u16, regionY); + s = &TASK_GET_MEMBER(Waterfall, gCurTask, Sprite, s); + unk3D = TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk3D); + unk3E = TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk3E); + + // world x|y + x = TO_WORLD_POS(meX, regionX); + y = TO_WORLD_POS(me->y, regionY); + + // screen x|y + x -= gCamera.x; + y -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + s32 i = 0; + do { + if (TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk3A[i]) == 1) { +#ifndef NON_MATCHING + PLAYER(i).qSpeedAirY = Div(PLAYER(i).qSpeedAirY, 2); +#else + PLAYER(i).qSpeedAirY >>= 1; +#endif + } + } while (++i < gNumSingleplayerCharacters); + + SET_MAP_ENTITY_NOT_INITIALIZED(me, meX); + TaskDestroy(gCurTask); + return; + } + + // world x|y + x += gCamera.x; + y += gCamera.y; + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + // NOTE: Changing something unrelated matches this if, so it might not be the nonmatch-cause + if ((x <= I(PLAYER(i).qWorldX)) && (x + me->d.uData[2] * TILE_WIDTH >= I(PLAYER(i).qWorldX)) + && (y + me->d.sData[1] * TILE_WIDTH <= I(PLAYER(i).qWorldY)) + && (y + me->d.sData[1] * TILE_WIDTH + me->d.uData[3] * TILE_WIDTH) >= I(PLAYER(i).qWorldY)) { + if (!sub_80549FC()) { +#ifndef NON_MATCHING + // NOTE: Redundant check + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) +#endif + { + PLAYER(i).qSpeedAirY += Q(16 / 256.); + } + } + + s->x = I(PLAYER(i).qWorldX) - gCamera.x; + s->y = I(PLAYER(i).qWorldY) - gCamera.y + 10; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3A[i], TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk38[i])); + } else { + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk38[i], 0); + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3A[i], TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk38[i])); + } + } + } while (++i < gNumSingleplayerCharacters); + + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3D, unk3D); + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3E, unk3E); +} + +void Task_WaterfallZone5(void) +{ + u8 meX; + u16 regionX; + u16 regionY; + CamCoord x, y; + Sprite *s; + u8 unk3D; + u8 unk3E; + s32 i; + MapEntity *me; + + me = TASK_GET_MEMBER(Waterfall, gCurTask, MapEntity *, me); + meX = TASK_GET_MEMBER(Waterfall, gCurTask, u8, meX); + regionX = TASK_GET_MEMBER(Waterfall, gCurTask, u16, regionX); + regionY = TASK_GET_MEMBER(Waterfall, gCurTask, u16, regionY); + s = &TASK_GET_MEMBER(Waterfall, gCurTask, Sprite, s); + unk3D = TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk3D); + unk3E = TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk3E); + + // world x|y + x = TO_WORLD_POS(meX, regionX); + y = TO_WORLD_POS(me->y, regionY); + + // screen x|y + x -= gCamera.x; + y -= gCamera.y; + + if (IS_OUT_OF_CAM_RANGE(x, y)) { + s32 i = 0; + do { + if (TASK_GET_MEMBER(Waterfall, gCurTask, u16, unk3A) == 1) { +#ifndef NON_MATCHING + PLAYER(i).qSpeedAirY = Div(PLAYER(i).qSpeedAirY, 2); +#else + PLAYER(i).qSpeedAirY >>= 1; +#endif + } + } while (++i < gNumSingleplayerCharacters); + + if (unk3D != 0) { + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + } + + SET_MAP_ENTITY_NOT_INITIALIZED(me, meX); + TaskDestroy(gCurTask); + return; + } + + // world x|y + x += gCamera.x; + y += gCamera.y; + + UpdateSpriteAnimation(s); + + i = 0; + do { + if (!(PLAYER(i).moveState & MOVESTATE_DEAD)) { + // NOTE: Changing something unrelated matches this if, so it might not be the nonmatch-cause + if ((x <= I(PLAYER(i).qWorldX)) && (x + me->d.uData[2] * TILE_WIDTH >= I(PLAYER(i).qWorldX)) + && (y + me->d.sData[1] * TILE_WIDTH <= I(PLAYER(i).qWorldY)) + && (y + me->d.sData[1] * TILE_WIDTH + me->d.uData[3] * TILE_WIDTH) >= I(PLAYER(i).qWorldY)) { + if ((PLAYER(i).qSpeedAirY >= 0) && (!(PLAYER(i).moveState & MOVESTATE_DEAD))) { + { + if (unk3D == 0) { + unk3D = 1; + m4aSongNumStart(SE_201); + } + if (PLAYER(i).frameInput & gPlayerControls.jump) { + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + if (PLAYER(i).character != CHARACTER_AMY) { + PLAYER(i).charState = CHARSTATE_SPINATTACK; + } else { + PLAYER(i).charState = CHARSTATE_85; + } + +#ifndef NON_MATCHING + PLAYER(i).qSpeedAirY = -Div(Q(4.875), 2); +#else + PLAYER(i).qSpeedAirY = -(Q(4.875) >> 1); +#endif + } else { + /* Jump Button NOT held */ + + if (PLAYER(i).character == CHARACTER_KNUCKLES) { + if (PLAYER(i).charState == CHARSTATE_KNUCKLES_GLIDE) { + PLAYER(i).charState = CHARSTATE_WALK_A; + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + + if (PLAYER(i).moveState & MOVESTATE_FACING_LEFT) { + // TODO: Uhh, this is kinda stupid? + PLAYER(i).moveState = MOVESTATE_FACING_LEFT; + } else { + PLAYER(i).moveState = 0; + } + } + + if ((PLAYER(i).moveState & MOVESTATE_IN_AIR)) { + if ((PLAYER(i).frameInput & gPlayerControls.attack)) { + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + } + } else { + if (PLAYER(i).frameInput & gPlayerControls.jump) { + PLAYER(i).qSpeedGround = Q(0); + PLAYER(i).qSpeedAirX = Q(0); + } + } + } + Player_TransitionCancelFlyingAndBoost(&PLAYER(i)); + + PLAYER(i).moveState &= ~MOVESTATE_IN_AIR; + PLAYER(i).moveState &= ~MOVESTATE_4; + PLAYER(i).charState = CHARSTATE_WALK_A; + PLAYER(i).qWorldY += Q(0.6875); + + if (PLAYER(i).qSpeedAirY > Q(0)) { + PLAYER(i).qSpeedAirY = Q(0); + } + + if (PLAYER(i).heldInput & DPAD_LEFT) { + PLAYER(i).qSpeedGround += Q(4. / 256.); + } else if (PLAYER(i).heldInput & DPAD_RIGHT) { + PLAYER(i).qSpeedGround -= Q(4. / 256.); + } else { + PLAYER(i).qSpeedGround -= Div(PLAYER(i).qSpeedGround, 20); + } + } + } + } + + s->x = I(PLAYER(i).qWorldX) - gCamera.x; + s->y = I(PLAYER(i).qWorldY) - gCamera.y + 10; + + DisplaySprite(s); + + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3A[i], TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk38[i])); + } else { + if (unk3D == 1) { + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + unk3D = 0; + } else if (unk3D != 0) { + unk3D--; + } + + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk38[i], 0); + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3A[i], TASK_GET_MEMBER(Waterfall, gCurTask, u8, unk38[i])); + } + } + } while (++i < gNumSingleplayerCharacters); + + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3D, unk3D); + TASK_SET_MEMBER(Waterfall, gCurTask, u8, unk3E, unk3E); +} + +void TaskDestructor_Waterfall(struct Task *t) { VramFree((&TASK_GET_MEMBER(Waterfall, t, Sprite, s))->graphics.dest); } \ No newline at end of file diff --git a/sa1/src/game/intro_animation.c b/sa1/src/game/intro_animation.c new file mode 100644 index 0000000000..136790448a --- /dev/null +++ b/sa1/src/game/intro_animation.c @@ -0,0 +1,1768 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "constants/ui_graphics.h" +#include "game/entity.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/sa1_sa2_shared/spot_light_beam_task.h" +#include "game/stage/ui.h" +#include "game/title_screen.h" + +#include "constants/animations.h" +#include "constants/songs.h" + +#define INTRO_SPOTLIGHT_COUNT 2 + +#define EMERALD_START_X DISPLAY_CENTER_X +#define EMERALD_START_Y -36 +typedef struct IntroSprite { + Sprite s; + u16 unk30; + u8 unk32; + s32 unk34; + s32 qUnk38; + s32 qUnk3C; + s32 qUnk40; +} IntroSprite; /* 0x44 */ + +typedef struct Intro_C8 { + Sprite sprites[3]; + u8 filler60[0x24]; + u16 unkB4; + u8 fillerB6[0x12]; +} Intro_C8; /* 0xC8 */ + +typedef struct Intro_54 { + StrcUi_805423C strc0; + struct Task *taskC; + struct Task *beamTasks[INTRO_SPOTLIGHT_COUNT]; // -> SpotlightBeam + struct Task *tasks18[NUM_CHARACTERS]; // -> Intro_C8 + u8 filler28[0x24]; + s16 unk4C; + u8 unk4E; + u16 unk50; + u16 unk52; +} Intro_54; /* 0x54 */ + +void Task_IntroChaosEmeraldUpdate(void); +void sub_8063B8C(void); +void sub_8063C4C(void); +void sub_8063D0C(void); +void sub_8063DCC(void); +void sub_8063E8C(u16 arg0); +void Task_80640C8(void); +void sub_8064244(void); +void sub_80645E4(void); +void sub_80648D4(void); +void sub_8064BB4(void); +void sub_8064E84(void); +void IntroOpenTitlescreenSilent(void); +void IntroOpenTitlescreenPlayMusic(void); +void Task_8065058(void); +void Task_806515C(void); +void Task_RenderSonic(void); +void Task_IntroRenderTails(void); +void Task_IntroRenderKnuckles(void); +void Task_IntroRenderAmy(void); +void Task_806562C(void); +void sub_80656A4(void); +void sub_806571C(void); +void sub_8065794(void); +void TaskDestructor_8065810(struct Task *t); + +extern u16 gUnknown_086B1AB4[16][16]; +extern u8 gUnknown_086B1CB4[0x540]; +extern u8 gUnknown_086B21F4[0x800]; +extern u16 gUnknown_086B29F4[256]; +extern u8 gUnknown_086B2BF4[0x1E00]; +extern u8 gUnknown_086B49F4[0x800]; +extern u16 gUnknown_086B51F4[16][16]; +extern u8 gUnknown_086B53F4[0x1B80]; + +extern u8 gUnknown_086B6F74[0x800]; +extern u16 gUnknown_086B7774[256]; +extern u8 gUnknown_086B7974[0x1880]; + +extern u8 gUnknown_086B91F4[0x800]; +extern u16 gUnknown_086B99F4[256]; +extern u8 gUnknown_086B9BF4[0x1840]; +extern u16 gUnknown_086B1B14[16]; +extern u8 gUnknown_086BB434[0x800]; + +extern u16 gUnknown_086A5D34[256]; +extern u8 gUnknown_086A5F34[0x2E00]; +extern u8 gUnknown_086A8E34[1]; + +extern u8 gUnknown_086A9834[0x2840]; +extern u8 gUnknown_086AC074[0x8C0]; + +extern u8 gUnknown_086B13F4[0x6C0]; +extern u8 gUnknown_086AFFB4[0x1440]; + +extern u8 gUnknown_086ACB34[0x2840]; +extern u8 gUnknown_086AF4F4[0x8C0]; + +const s16 gUnknown_0868B27C[2] = { 0x14, 0x70 }; +const s16 gUnknown_0868B280[2] = { 0x5C, 0x5A }; +const s16 gUnknown_0868B284[2] = { 0x58, 0x70 }; +const s16 gUnknown_0868B288[2] = { 0x1C, 0x5A }; +// TODO: This struct already appeared somewhere else. Merge them! +typedef struct LocalTileInfo { + u32 anim; + u32 variant; + void *vram; +} LocalTileInfo; +const LocalTileInfo gUnknown_0868B28C[6] = { + { SA1_ANIM_INTRO_TEXTS_SONIC, 0, OBJ_VRAM0 + 0x2840 }, // + { SA1_ANIM_INTRO_TEXTS_SONIC, 1, OBJ_VRAM0 + 0x2B40 }, // + { SA1_ANIM_INTRO_TEXTS_SONIC, 2, OBJ_VRAM0 + 0x2F40 }, // + { SA1_ANIM_INTRO_TEXTS_SONIC, 3, OBJ_VRAM0 + 0x3240 }, // + { SA1_ANIM_INTRO_TEXTS_SONIC, 4, OBJ_VRAM0 + 0x3440 }, // + { SA1_ANIM_INTRO_TEXTS_SONIC, 5, OBJ_VRAM0 + 0x3740 }, // +}; +const LocalTileInfo gUnknown_0868B2D4[6] = { + { SA1_ANIM_INTRO_TEXTS_TAILS, 0, OBJ_VRAM0 + 0x6440 }, // + { SA1_ANIM_INTRO_TEXTS_TAILS, 1, OBJ_VRAM0 + 0x6740 }, // + { SA1_ANIM_INTRO_TEXTS_TAILS, 2, OBJ_VRAM0 + 0x6B40 }, // + { SA1_ANIM_INTRO_TEXTS_TAILS, 3, OBJ_VRAM0 + 0x6D40 }, // + { SA1_ANIM_INTRO_TEXTS_TAILS, 4, OBJ_VRAM0 + 0x7040 }, // + { SA1_ANIM_INTRO_TEXTS_TAILS, 5, OBJ_VRAM0 + 0x7440 }, // +}; +const LocalTileInfo gUnknown_0868B31C[9] = { + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 0, + OBJ_VRAM0 + 0x6440, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 1, + OBJ_VRAM0 + 0x6640, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 2, + OBJ_VRAM0 + 0x6840, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 3, + OBJ_VRAM0 + 0x6B40, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 4, + OBJ_VRAM0 + 0x6E40, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 5, + OBJ_VRAM0 + 0x7140, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 6, + OBJ_VRAM0 + 0x7440, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 7, + OBJ_VRAM0 + 0x7640, + }, + { + SA1_ANIM_INTRO_TEXTS_KNUCKLES, + 8, + OBJ_VRAM0 + 0x7840, + }, +}; +const LocalTileInfo gUnknown_0868B388[4] = { + { + SA1_ANIM_INTRO_TEXTS_AMY, + 0, + OBJ_VRAM0 + 0x2840, + }, // + { + SA1_ANIM_INTRO_TEXTS_AMY, + 1, + OBJ_VRAM0 + 0x2D40, + }, // + { + SA1_ANIM_INTRO_TEXTS_AMY, + 2, + OBJ_VRAM0 + 0x3240, + }, // + { + SA1_ANIM_INTRO_TEXTS_AMY, + 3, + OBJ_VRAM0 + 0x3740, + }, // +}; + +const u16 gUnknown_0868B3B8[2][2] = { { SA1_ANIM_INTRO_CHARACTERS, 0 }, { SA1_ANIM_INTRO_CHARACTERS, 1 } }; + +const u16 gUnknown_0868B3C0[2][2] = { { SA1_ANIM_INTRO_CHARACTERS, 2 }, { SA1_ANIM_INTRO_CHARACTERS, 3 } }; + +const u16 gUnknown_0868B3C8[2][2] = { { SA1_ANIM_INTRO_CHARACTERS, 4 }, { SA1_ANIM_INTRO_CHARACTERS, 5 } }; + +const u16 gUnknown_0868B3D0[2][2] = { { SA1_ANIM_INTRO_CHARACTERS, 6 }, { SA1_ANIM_INTRO_CHARACTERS, 7 } }; + +void CreateIntroAnimation(void) +{ + s32 temp_r0_2; + s32 temp_r1; + s32 temp_r6; + s32 temp_r6_2; + u16 temp_r2; + u16 temp_r3; + u16 temp_r5; + u8 i; + struct Task *t, *t2; + Sprite *s; + IntroSprite *emerald; + IntroSprite *introSpr; + Intro_54 *strc54; + StrcUi_805423C *strc0; + s32 qVal; + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + sub_80535FC(); + + UiGfxStackInit(); + gDispCnt = (DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + gBgCntRegs[0] = 0x9D86; + gBgCntRegs[1] = 0x1B8B; + gBgCntRegs[2] = 0x9880; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + t = TaskCreate(Task_IntroChaosEmeraldUpdate, sizeof(IntroSprite), 0x2120U, 0U, NULL); + emerald = TASK_DATA(t); + s = &emerald->s; + emerald->unk30 = 0; + qVal = -Q(36); + emerald->unk34 = 0; + emerald->qUnk38 = qVal; + emerald->qUnk3C = qVal; + emerald->qUnk40 = Q(2.25); + s->graphics.dest = OBJ_VRAM0 + 0x20; + s->graphics.anim = SA1_ANIM_INTRO_EMERALD; + s->variant = 0; + s->x = EMERALD_START_X; + s->y = EMERALD_START_Y; + s->oamFlags = SPRITE_OAM_ORDER(3); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + + for (i = 0; i < 8; i++) { + s32 chunkOffset; + t2 = TaskCreate(Task_8065058, sizeof(IntroSprite), (i * 2) | 0x6800, 0U, NULL); + introSpr = TASK_DATA(t2); + s = &introSpr->s; + introSpr->unk30 = (0x2F - (i * 6)); + introSpr->unk32 = i; + introSpr->unk34 = introSpr->unk30; + introSpr->qUnk38 = qVal; + introSpr->qUnk3C = qVal; + introSpr->qUnk40 = Q(2.25); + chunkOffset = (i * (4 * TILE_SIZE_4BPP)); + s->graphics.dest = (chunkOffset + OBJ_VRAM0 + (31 * TILE_SIZE_4BPP)); + s->graphics.anim = SA1_ANIM_SUPER_SONIC_SPARKLE; + s->variant = 0; + s->x = EMERALD_START_X + Div(SIN(i << 6), 650); + s->y = EMERALD_START_Y; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + } + + t2 = TaskCreate(Task_80640C8, sizeof(Intro_54), 0x2100U, 0U, TaskDestructor_8065810); + strc54 = TASK_DATA(t2); + strc54->unk4C = 0; + strc54->unk4E = 1; + strc54->taskC = t; + strc54->beamTasks[0] = NULL; + strc54->beamTasks[1] = NULL; + strc54->tasks18[CHARACTER_SONIC] = NULL; + strc54->tasks18[CHARACTER_TAILS] = NULL; + strc54->tasks18[CHARACTER_KNUCKLES] = NULL; + strc54->tasks18[CHARACTER_AMY] = NULL; + strc54->unk50 = 0; + strc54->unk52 = 0; + + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 2; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x80; + strc54->strc0.unkA = 1; + sub_805423C(&strc54->strc0); + m4aSongNumStart(1U); +} + +void sub_8063B8C(void) +{ + Strc_80528AC gfx; + s8 *temp_r6; + s8 *temp_r7; + + UiGfxStackInit(); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086B1CB4[0]; + gfx.tilesSize = sizeof(gUnknown_086B1CB4); + gfx.palette = &gUnknown_086B1AB4[0][0]; + gfx.paletteSize = sizeof(gUnknown_086B1AB4); + gfx.layout = &gUnknown_086B21F4[0]; + gfx.layoutSize = sizeof(gUnknown_086B21F4); + gfx.unk28 = 0; + gfx.unk29 = 1; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = &gUnknown_086B2BF4[0]; + gfx.tilesSize = sizeof(gUnknown_086B2BF4); + gfx.palette = &gUnknown_086B29F4[0]; + gfx.paletteSize = sizeof(gUnknown_086B29F4); + gfx.layout = &gUnknown_086B49F4[0]; + gfx.layoutSize = sizeof(gUnknown_086B49F4); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); +} + +void sub_8063C4C(void) +{ + Strc_80528AC gfx; + s8 *temp_r6; + s8 *temp_r7; + + UiGfxStackInit(); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086B1CB4[0]; + gfx.tilesSize = sizeof(gUnknown_086B1CB4); + gfx.palette = &gUnknown_086B1AB4[1][0]; + gfx.paletteSize = sizeof(gUnknown_086B1AB4[1]); + gfx.layout = &gUnknown_086B21F4[0]; + gfx.layoutSize = sizeof(gUnknown_086B21F4); + gfx.unk28 = 0; + gfx.unk29 = 1; + gfx.unk2A = 0x14; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = &gUnknown_086B53F4[0]; + gfx.tilesSize = sizeof(gUnknown_086B53F4); + gfx.palette = &gUnknown_086B51F4[0][0]; + gfx.paletteSize = sizeof(gUnknown_086B51F4); + gfx.layout = &gUnknown_086B6F74[0]; + gfx.layoutSize = sizeof(gUnknown_086B6F74); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); +} + +void sub_8063D0C(void) +{ + Strc_80528AC gfx; + s8 *temp_r6; + s8 *temp_r7; + + UiGfxStackInit(); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086B1CB4[0]; + gfx.tilesSize = sizeof(gUnknown_086B1CB4); + gfx.palette = &gUnknown_086B1AB4[2][0]; + gfx.paletteSize = sizeof(gUnknown_086B1AB4[2]); + gfx.layout = &gUnknown_086B21F4[0]; + gfx.layoutSize = sizeof(gUnknown_086B21F4); + gfx.unk28 = 0; + gfx.unk29 = 1; + gfx.unk2A = 0x14; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = &gUnknown_086B7974[0]; + gfx.tilesSize = sizeof(gUnknown_086B7974); + gfx.palette = &gUnknown_086B7774[0]; + gfx.paletteSize = sizeof(gUnknown_086B7774); + gfx.layout = &gUnknown_086B91F4[0]; + gfx.layoutSize = sizeof(gUnknown_086B91F4); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); +} + +void sub_8063DCC(void) +{ + Strc_80528AC gfx; + s8 *temp_r6; + s8 *temp_r7; + + UiGfxStackInit(); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086B1CB4[0]; + gfx.tilesSize = sizeof(gUnknown_086B1CB4); + gfx.palette = &gUnknown_086B1B14[0]; + gfx.paletteSize = sizeof(gUnknown_086B1B14); + gfx.layout = &gUnknown_086B21F4[0]; + gfx.layoutSize = sizeof(gUnknown_086B21F4); + gfx.unk28 = 0; + gfx.unk29 = 1; + gfx.unk2A = 0x14; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = &gUnknown_086B9BF4[0]; + gfx.tilesSize = sizeof(gUnknown_086B9BF4); + gfx.palette = &gUnknown_086B99F4[0]; + gfx.paletteSize = sizeof(gUnknown_086B99F4); + gfx.layout = &gUnknown_086BB434[0]; + gfx.layoutSize = sizeof(gUnknown_086BB434); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); +} + +void sub_8063E8C(u16 arg0) +{ + Strc_80528AC gfx; + s32 temp_r1; + s32 temp_r1_2; + s32 temp_r1_3; + s32 chunkOffset; + s32 var_r1; + s8 var_r0; + u16 temp_r6; + s32 qVal; + u8 i; + struct Task *t; + IntroSprite *introSpr; + Sprite *s; + + if (arg0 == 0) { + for (i = 0; i < 8; i++) { + t = TaskCreate(Task_806515C, sizeof(IntroSprite), (i * 2) | 0x6801, 0U, NULL); + introSpr = TASK_DATA(t); + introSpr->unk30 = (u16)(i * 6); + introSpr->unk32 = i; + qVal = -Q(36); + introSpr->unk34 = (s32)introSpr->unk30; + introSpr->qUnk38 = qVal; + introSpr->qUnk3C = qVal; + introSpr->qUnk40 = Q(2.25); + + s = &introSpr->s; + chunkOffset = (i * (4 * TILE_SIZE_4BPP)); + s->graphics.dest = (OBJ_VRAM0 + 0xBE0 + chunkOffset); + s->graphics.anim = SA1_ANIM_SUPER_SONIC_SPARKLE; + s->variant = 1; + s->x = (Div(SIN(i << 6), 650) + 120); + s->y = -36; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x1000; + UpdateSpriteAnimation((Sprite *)s); + } + } else if (arg0 == 1) { + gDispCnt = 0x1240; + gfx.uiGfxID = 0x80; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086A5F34[0]; + gfx.tilesSize = 0x2F00; + gfx.palette = &gUnknown_086A5D34[0]; + gfx.paletteSize = 0x200; + gfx.layout = &gUnknown_086A8E34[0]; + gfx.layoutSize = 0x800; + gfx.unk28 = 0; + gfx.unk29 = 1; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + } else if (arg0 == 2) { + gDispCnt = 0x1340; + gfx.uiGfxID = 0x80; + gfx.unk2B = 1; + gfx.tiles = &gUnknown_086A9834[0]; + gfx.tilesSize = sizeof(gUnknown_086A9834); + gfx.layout = &gUnknown_086AC074[0]; + gfx.layoutSize = sizeof(gUnknown_086AC074); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); + } else if (arg0 == 3) { + gDispCnt = 0x1740; + gfx.uiGfxID = 0x80; + gfx.unk2B = 0; + gfx.tiles = &gUnknown_086AFFB4[0]; + gfx.tilesSize = sizeof(gUnknown_086AFFB4); + gfx.layout = &gUnknown_086B13F4[0]; + gfx.layoutSize = sizeof(gUnknown_086B13F4); + gfx.unk28 = 0; + gfx.unk29 = 2; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); + } else if (arg0 == 310) { + gfx.uiGfxID = 0x80; + gfx.unk2B = 1; + gfx.tiles = &gUnknown_086ACB34[0]; + gfx.tilesSize = sizeof(gUnknown_086ACB34); + gfx.layout = &gUnknown_086AF4F4[0]; + gfx.layoutSize = sizeof(gUnknown_086AF4F4); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); + } +} + +static inline u32 maskColor(u32 c) { return Div(c, 40) & 0x1F; } + +static inline u32 maskRedColor(u32 c) +{ +#ifndef NON_MATCHING + u32 result; + asm("mov %0, #0x1F\n" + "and %0, %1\n" + : "=r"(result) + : "r"(c)); + return result; +#else + return (c % 32u); +#endif +} + +// (99.14%) https://decomp.me/scratch/gBBjz +NONMATCH("asm/non_matching/game/intro_anim__Task_80640C8.inc", void Task_80640C8()) +{ + s16 *temp_r2; + s16 temp_r0; + s16 temp_r0_3; + u32 r, g, b; + u16 temp_r0_2; + u16 temp_r6; + u16 colorIndex; + u32 unk4C; + u32 var_r7; + + Intro_54 *strc54 = TASK_DATA(gCurTask); + IntroSprite *introSpr = TASK_DATA(strc54->taskC); + + introSpr->unk30 = (u16)strc54->unk4C; + if ((A_BUTTON | B_BUTTON | START_BUTTON) & gPressedKeys) { + gCurTask->main = IntroOpenTitlescreenPlayMusic; + return; + } + + if (strc54->unk4C > 0x97) { + var_r7 = (u32)((strc54->unk4C - 0x98) << 0xF) >> 0x10; + if (var_r7 > 40) { + var_r7 = 40; + } + + for (colorIndex = 0; colorIndex < 32; colorIndex++) { + u16 color = gUnknown_086A5D34[colorIndex]; + r = (maskRedColor(color) >> 0); + g = ((color & RGB_GREEN) >> 5); + b = ((color & RGB_BLUE) >> 10); + + { + r = maskColor(r * var_r7); + g = maskColor(g * var_r7); + b = maskColor(b * var_r7); + gBgPalette[colorIndex] = RGB16(r, g, b); + } + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; + } + } + + if (strc54->unk4C > 0xB5) { + gBgScrollRegs[0][1] += 2; + if (gBgScrollRegs[0][1] > 100) { + gBgScrollRegs[0][1] = 100; + } + if (gBgScrollRegs[0][1] > 80) { + gBgScrollRegs[2][1] = gBgScrollRegs[0][1] - 0x50; + } + } + gBgScrollRegs[1][1] += 0xA; + sub_8063E8C(strc54->unk4C); + if (strc54->unk4C > 0x13F) { + strc54->unk4C = 0; + gCurTask->main = sub_8064244; + } else { + sub_805423C(&strc54->strc0); + } + strc54->unk4C++; +} +END_NONMATCH + +void sub_8064244() +{ + Sprite *s; + s16 *temp_r3; + s16 temp_r0; + s16 temp_r1; + u32 temp_r4; + s32 temp_r0_4; + s32 temp_r0_6; + s32 temp_r1_3; + s8 *temp_r1_2; + u16 temp_r0_3; + u16 temp_r0_5; + u16 temp_r2; + u16 temp_r7; + u8 i; + void *temp_r7_2; + void *var_r0; + struct Task *t; + + Intro_C8 *temp_r0_7; + Intro_54 *strc54 = TASK_DATA(gCurTask); + + temp_r4 = strc54->unk4C; + + if ((A_BUTTON | B_BUTTON | START_BUTTON) & gPressedKeys) { + gCurTask->main = IntroOpenTitlescreenPlayMusic; + return; + } + + if (temp_r4 < 0x60) { + TasksDestroyInPriorityRange(0x6800U, ((temp_r4 >> 2) + 0x6802)); + } + if (temp_r4 == 0x3C) { + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 1; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x40; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + } + gBgScrollRegs[1][1] += 10; + if (++strc54->unk4C >= 506) { + TaskDestroy(strc54->taskC); + strc54->taskC = NULL; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + strc54->unk50 = 0x4000; + strc54->unk52 = 0; + strc54->unk4C = 0; + TaskDestroy(strc54->beamTasks[0]); + strc54->beamTasks[0] = NULL; + TaskDestroy(strc54->beamTasks[1]); + strc54->beamTasks[1] = NULL; + gDispCnt = 0; // needed for matching + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gDispCnt = 0x1340; + gBgCntRegs[0] = 0x1D86; + gBgCntRegs[1] = 0x1883; + t = TaskCreate(Task_RenderSonic, sizeof(Intro_C8), 0x2210U, 0U, NULL); + strc54->tasks18[CHARACTER_SONIC] = t; + temp_r0_7 = TASK_DATA(t); + temp_r0_7->unkB4 = 0; + + for (i = 0; i < 2; i++) { + s = &temp_r0_7->sprites[i]; + if (i != 0) { + s->graphics.dest = OBJ_VRAM0 + 0x4000; + } else { + s->graphics.dest = OBJ_VRAM0 + 0x1440; + } + s->graphics.anim = 0x301; + s->variant = 0; + s->x = 0xB4; + s->y = 0x82; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x80; + UpdateSpriteAnimation(s); + } + + for (i = 0; i < 6; i++) { + IntroSprite *introSpr; + t = TaskCreate(Task_806562C, sizeof(IntroSprite), 0x6820U, 0U, NULL); + introSpr = TASK_DATA(t); + s = &introSpr->s; + introSpr->unk30 = 0; + introSpr->unk32 = 0; + introSpr->unk34 = i; + introSpr->qUnk3C = gUnknown_0868B27C[0] + 0x118; + s->graphics.dest = gUnknown_0868B28C[i].vram; + s->graphics.anim = gUnknown_0868B28C[i].anim; + s->variant = gUnknown_0868B28C[i].variant; + s->x = 280; + s->y = 70; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x80; + UpdateSpriteAnimation(s); + } + gCurTask->main = sub_80645E4; + } else { + if ((s32)strc54->unk4C > 0xE0) { + SpotlightBeam *beam; + + if (strc54->unk4C == 0xE1) { + struct Task *tBeam = CreateSpotlightBeamTask(); + strc54->beamTasks[0] = tBeam; + beam = TASK_DATA(tBeam); + beam->unk6 = 120; + beam->unk8 = 250; + beam->unk0 = 0; + beam->unk2 = 0; + beam->unk4 = 0; + beam->bg = 2; + beam->unkB = 6; + tBeam = CreateSpotlightBeamTask(); + strc54->beamTasks[1] = tBeam; + beam = TASK_DATA(tBeam); + beam->unk6 = 120; + beam->unk8 = 250; + beam->unk0 = 0; + beam->unk2 = 0; + beam->unk4 = 0; + beam->bg = 3; + beam->unkB = 6; + gDispCnt |= 0x6000; + gWinRegs[4] = 0x1F1F; + gWinRegs[5] = 0x3F; + gBldRegs.bldCnt = 0x3FDF; + gBldRegs.bldY = 8; + return; + } + temp_r4 = strc54->unk4C - 0xE1; + beam = TASK_DATA(strc54->beamTasks[0]); + beam->unk0 = (s16)((0x18 - Mod(temp_r4, 25)) * 6); + if (((u32)temp_r4 <= 0x3FU) && (Mod(temp_r4, 6) == 0)) { + beam->unkB++; + } + beam = TASK_DATA(strc54->beamTasks[1]); + beam->unk0 = (s16)(((0x18 - Mod(temp_r4, 0x19)) * 6) + 0x370); + if (((u32)temp_r4 <= 0x3FU) && (Mod(temp_r4, 6) == 0)) { + beam->unkB++; + } + } else { + if (temp_r4 >= 30 && temp_r4 < 120) { + sub_805423C(&strc54->strc0); + } + } + } +} + +void sub_80645E4() +{ + Sprite *s; + s16 *temp_r3; + s16 temp_r0; + s16 temp_r1; + s16 temp_r4; + s32 temp_r0_4; + s32 temp_r0_6; + s32 temp_r1_3; + s8 *temp_r1_2; + u16 temp_r0_3; + u16 temp_r0_5; + u16 temp_r2; + u16 temp_r7; + u8 i; + void *temp_r7_2; + void *var_r0; + u32 unk4C; + struct Task *t; + + Intro_C8 *strcC8; + Intro_54 *strc54 = TASK_DATA(gCurTask); + StrcUi_805423C *strc0; + + strcC8 = TASK_DATA(strc54->tasks18[CHARACTER_SONIC]); + temp_r4 = strc54->unk4C; + strcC8->unkB4 = temp_r4; + strc54->unk50 -= 0x20; + strc54->unk52 += 0x20; + + gBgScrollRegs[0][0] = I(strc54->unk50); + gBgScrollRegs[0][1] = I(strc54->unk52); + + if ((A_BUTTON | B_BUTTON | START_BUTTON) & gPressedKeys) { + gCurTask->main = IntroOpenTitlescreenPlayMusic; + return; + } + + unk4C = strc54->unk4C; + if (unk4C < 30) { + if (unk4C == 1) { + sub_8063B8C(); + } + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 2; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 42) { + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 8; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x100; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 102) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 242) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 0x16A) { + sub_805423C(&strc54->strc0); + } + if (++strc54->unk4C >= 414) { + TasksDestroyInPriorityRange(0x6820, 0x6821); + TaskDestroy(strc54->tasks18[CHARACTER_SONIC]); + strc54->tasks18[CHARACTER_SONIC] = NULL; + strc54->unk50 = 0xE000; + strc54->unk52 = 0x6000; + strc54->unk4C = 0; + + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 2; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + + t = TaskCreate(Task_IntroRenderTails, sizeof(Intro_C8), 0x2280U, 0U, NULL); + strc54->tasks18[CHARACTER_TAILS] = t; + strcC8 = TASK_DATA(t); + strcC8->unkB4 = 0; + + for (i = 0; i < 3; i++) { + s = &strcC8->sprites[i]; + if (i == 2) { + s->graphics.dest = OBJ_VRAM0 + 0x3280; + } else if (i == 1) { + s->graphics.dest = OBJ_VRAM0 + 0x1980; + } else { + s->graphics.dest = OBJ_VRAM0 + 0x400; + } + s->graphics.anim = 0x301; + s->variant = 1; + s->x = 48; + s->y = 108; + s->oamFlags = 0x300; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x80; + + if (i == 0) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + + for (i = 0; i < 6; i++) { + IntroSprite *introSpr; + t = TaskCreate(sub_80656A4, sizeof(IntroSprite), 0x6820U, 0U, NULL); + introSpr = TASK_DATA(t); + s = &introSpr->s; + introSpr->unk30 = 0; + introSpr->unk32 = 0; + introSpr->unk34 = i; + introSpr->qUnk3C = gUnknown_0868B280[0] + 0x118; + s->graphics.dest = gUnknown_0868B2D4[i].vram; + s->graphics.anim = gUnknown_0868B2D4[i].anim; + s->variant = gUnknown_0868B2D4[i].variant; + s->x = 280; + s->y = 70; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x80; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + gCurTask->main = sub_80648D4; + } else { + if (strc54->unk4C > 0x160) { + if (strc54->unk4C == 0x161) { + strc54->strc0.unk4 = 4; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x180; + } + sub_805423C(&strc54->strc0); + } + } +} + +void sub_80648D4() +{ + Sprite *s; + s16 *temp_r3; + s16 temp_r0; + s16 temp_r1; + s16 temp_r4; + s32 temp_r0_4; + s32 temp_r0_6; + s32 temp_r1_3; + s8 *temp_r1_2; + u16 temp_r0_3; + u16 temp_r0_5; + u16 temp_r2; + u16 temp_r7; + u8 i; + void *temp_r7_2; + void *var_r0; + u32 unk4C; + struct Task *t; + + Intro_C8 *strcC8; + Intro_54 *strc54 = TASK_DATA(gCurTask); + StrcUi_805423C *strc0; + + strcC8 = TASK_DATA(strc54->tasks18[CHARACTER_TAILS]); + temp_r4 = strc54->unk4C; + strcC8->unkB4 = temp_r4; + strc54->unk50 += 0x20; + strc54->unk52 -= 0x20; + + gBgScrollRegs[0][0] = I(strc54->unk50); + gBgScrollRegs[0][1] = I(strc54->unk52); + + if ((A_BUTTON | B_BUTTON | START_BUTTON) & gPressedKeys) { + gCurTask->main = IntroOpenTitlescreenPlayMusic; + return; + } + + unk4C = strc54->unk4C; + if (unk4C < 30) { + if (unk4C == 1) { + sub_8063C4C(); + } + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 42) { + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 8; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x100; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 102) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 242) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 0x16A) { + sub_805423C(&strc54->strc0); + } + if (++strc54->unk4C >= 414) { + TasksDestroyInPriorityRange(0x6820, 0x6821); + strc54->unk50 = 0xE000; + strc54->unk52 = 0x1000; + TaskDestroy(strc54->tasks18[CHARACTER_TAILS]); + strc54->tasks18[CHARACTER_TAILS] = NULL; + strc54->unk4C = 0; + + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 2; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + + t = TaskCreate(Task_IntroRenderKnuckles, sizeof(Intro_C8), 0x2230U, 0U, NULL); + strc54->tasks18[CHARACTER_KNUCKLES] = t; + strcC8 = TASK_DATA(t); + strcC8->unkB4 = 0; + + for (i = 0; i < 3; i++) { + s = &strcC8->sprites[i]; + if (i == 2) { + s->graphics.dest = OBJ_VRAM0 + 0x3280; + } else if (i == 1) { + s->graphics.dest = OBJ_VRAM0 + 0x1980; + } else { + s->graphics.dest = OBJ_VRAM0 + 0x80; + } + s->graphics.anim = 0x301; + s->variant = 2; + s->x = 48; + s->y = 130; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x80; + + if (i == 0) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + + for (i = 0; i < 9; i++) { + IntroSprite *introSpr; + t = TaskCreate(sub_806571C, sizeof(IntroSprite), 0x6820U, 0U, NULL); + introSpr = TASK_DATA(t); + s = &introSpr->s; + introSpr->unk30 = 0; + introSpr->unk32 = 0; + introSpr->unk34 = i; + introSpr->qUnk3C = gUnknown_0868B284[0] + 0x118; + s->graphics.dest = gUnknown_0868B31C[i].vram; + s->graphics.anim = gUnknown_0868B31C[i].anim; + s->variant = gUnknown_0868B31C[i].variant; + s->x = 280; + s->y = 70; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x40080; + UpdateSpriteAnimation(s); + } + gCurTask->main = sub_8064BB4; + } else { + if (strc54->unk4C > 0x160) { + if (strc54->unk4C == 0x161) { + strc54->strc0.unk4 = 4; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x180; + } + sub_805423C(&strc54->strc0); + } + } +} + +void sub_8064BB4() +{ + Sprite *s; + s16 *temp_r3; + s16 temp_r0; + s16 temp_r1; + s16 temp_r4; + s32 temp_r0_4; + s32 temp_r0_6; + s32 temp_r1_3; + s8 *temp_r1_2; + u16 temp_r0_3; + u16 temp_r0_5; + u16 temp_r2; + u16 temp_r7; + u8 i; + void *temp_r7_2; + void *var_r0; + u32 unk4C; + struct Task *t; + + Intro_C8 *strcC8; + Intro_54 *strc54 = TASK_DATA(gCurTask); + StrcUi_805423C *strc0; + + strcC8 = TASK_DATA(strc54->tasks18[CHARACTER_KNUCKLES]); + temp_r4 = strc54->unk4C; + strcC8->unkB4 = temp_r4; + strc54->unk50 += 0x00; + strc54->unk52 += 0x20; + + gBgScrollRegs[0][0] = I(strc54->unk50); + gBgScrollRegs[0][1] = I(strc54->unk52); + + if ((A_BUTTON | B_BUTTON | START_BUTTON) & gPressedKeys) { + gCurTask->main = IntroOpenTitlescreenPlayMusic; + return; + } + + unk4C = strc54->unk4C; + if (unk4C < 30) { + if (unk4C == 1) { + sub_8063D0C(); + } + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 42) { + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 8; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x100; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 102) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 242) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 0x16A) { + sub_805423C(&strc54->strc0); + } + if (++strc54->unk4C >= 414) { + TasksDestroyInPriorityRange(0x6820, 0x6821); + strc54->unk50 = 0x3000; + strc54->unk52 = 0x5000; + TaskDestroy(strc54->tasks18[CHARACTER_KNUCKLES]); + strc54->tasks18[CHARACTER_KNUCKLES] = NULL; + strc54->unk4C = 0; + + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 2; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + + t = TaskCreate(Task_IntroRenderAmy, sizeof(Intro_C8), 0x2230U, 0U, NULL); + strc54->tasks18[CHARACTER_AMY] = t; + strcC8 = TASK_DATA(t); + strcC8->unkB4 = 0; + + for (i = 0; i < 2; i++) { + s = &strcC8->sprites[i]; + if (i != 0) { + s->graphics.dest = OBJ_VRAM0 + 0x6400; + } else { + s->graphics.dest = OBJ_VRAM0 + 0x1440; + } + s->graphics.anim = 0x301; + s->variant = 3; + s->x = 180; + s->y = 108; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x80; + UpdateSpriteAnimation(s); + + if (i == 0) { + DisplaySprite(s); + } + } + + for (i = 0; i < ARRAY_COUNT(gUnknown_0868B388); i++) { + IntroSprite *introSpr; + t = TaskCreate(sub_8065794, sizeof(IntroSprite), 0x6820U, 0U, NULL); + introSpr = TASK_DATA(t); + s = &introSpr->s; + introSpr->unk30 = 0; + introSpr->unk32 = 0; + introSpr->unk34 = i; + introSpr->qUnk3C = gUnknown_0868B288[0] + 0x118; + s->graphics.dest = gUnknown_0868B388[i].vram; + s->graphics.anim = gUnknown_0868B388[i].anim; + s->variant = gUnknown_0868B388[i].variant; + s->x = 280; + s->y = 70; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x40080; + UpdateSpriteAnimation(s); + } + gCurTask->main = sub_8064E84; + } else { + if (strc54->unk4C > 0x160) { + if (strc54->unk4C == 0x161) { + strc54->strc0.unk4 = 4; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x180; + } + sub_805423C(&strc54->strc0); + } + } +} + +void sub_8064E84() +{ + Sprite *s; + s16 *temp_r3; + s16 temp_r0; + s16 temp_r1; + s16 temp_r4; + s32 temp_r0_4; + s32 temp_r0_6; + s32 temp_r1_3; + s8 *temp_r1_2; + u16 temp_r0_3; + u16 temp_r0_5; + u16 temp_r2; + u16 temp_r7; + u8 i; + void *temp_r7_2; + void *var_r0; + u32 unk4C; + struct Task *t; + + Intro_C8 *strcC8; + Intro_54 *strc54 = TASK_DATA(gCurTask); + StrcUi_805423C *strc0; + + strcC8 = TASK_DATA(strc54->tasks18[CHARACTER_AMY]); + temp_r4 = strc54->unk4C; + strcC8->unkB4 = temp_r4; + strc54->unk50 -= 0x20; + strc54->unk52 -= 0x20; + + gBgScrollRegs[0][0] = I(strc54->unk50); + gBgScrollRegs[0][1] = I(strc54->unk52); + + if ((A_BUTTON | B_BUTTON | START_BUTTON) & gPressedKeys) { + gCurTask->main = IntroOpenTitlescreenPlayMusic; + return; + } + + unk4C = strc54->unk4C; + if (unk4C < 30) { + if (unk4C == 1) { + sub_8063DCC(); + } + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 42) { + strc54->strc0.unk0 = 0; + strc54->strc0.unk2 = 1; + strc54->strc0.unk4 = 8; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x100; + strc54->strc0.unkA = 1; + sub_80543A4(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 102) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 242) { + sub_805423C(&strc54->strc0); + } else if (unk4C >= 0 && unk4C < 0x16A) { + sub_805423C(&strc54->strc0); + } + if (++strc54->unk4C >= 414) { + gCurTask->main = IntroOpenTitlescreenSilent; + sub_805423C(&strc54->strc0); + } else { + if (strc54->unk4C > 0x160) { + if (strc54->unk4C == 0x161) { + strc54->strc0.unk4 = 4; + strc54->strc0.unk6 = 0; + strc54->strc0.unk8 = 0x180; + } + sub_805423C(&strc54->strc0); + } + } +} + +void IntroOpenTitlescreenSilent(void) +{ + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + gBgScrollRegs[3][0] = 0; + gBgScrollRegs[3][1] = 0; + + CreateTitleScreen(TITLESCREEN_PARAM__BOOT_SILENT); +} + +void IntroOpenTitlescreenPlayMusic(void) +{ + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + m4aSongNumStop(MUS_INTRO); + + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + gBgScrollRegs[3][0] = 0; + gBgScrollRegs[3][1] = 0; + + CreateTitleScreen(TITLESCREEN_PARAM__PLAY_MUSIC); +} + +void Task_8065058(void) +{ + s16 unk30; + + IntroSprite *introSpr = TASK_DATA(gCurTask); + Sprite *s = &introSpr->s; + + unk30 = ++introSpr->unk30; + if (unk30 < 90 || unk30 >= 234) { + introSpr->qUnk3C += introSpr->qUnk40; + } + if (unk30 < 90) { + introSpr->qUnk40 -= 6; + if (introSpr->qUnk40 < 0) { + introSpr->qUnk40 = 0; + } + } + + if (unk30 == 0xE9) { + introSpr->qUnk40 = 0x140; + } + + if (introSpr->qUnk3C > Q(180)) { + introSpr->qUnk3C = Q(180); + } + + if (introSpr->unk34 == 0) { + s->prevVariant = -1; + introSpr->unk34 = 0x2F; + introSpr->qUnk38 = introSpr->qUnk3C; + } + + introSpr->qUnk38 -= Div(SIN((0x100 - (introSpr->unk34 * 6)) % 256u), 24); + s->x = Div(SIN(((introSpr->unk34 * 12) + (unk30 << 5)) & 0x3FF), 650) + 120; + s->y = I(introSpr->qUnk38); + + introSpr->unk34 -= 1; + + if (1 & introSpr->unk32) { + s->oamFlags = SPRITE_OAM_ORDER(0); + } else { + s->oamFlags = SPRITE_OAM_ORDER(6); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_806515C(void) +{ + s16 unk30; + + IntroSprite *introSpr = TASK_DATA(gCurTask); + Sprite *s = &introSpr->s; + + unk30 = ++introSpr->unk30; + if (unk30 < 90 || unk30 >= 234) { + introSpr->qUnk3C += introSpr->qUnk40; + } + if (unk30 < 90) { + introSpr->qUnk40 -= 6; + if (introSpr->qUnk40 < 0) { + introSpr->qUnk40 = 0; + } + } + + if (unk30 == 0xE9) { + introSpr->qUnk40 = Q(1.25); + } + + if (introSpr->qUnk3C > Q(212)) { + introSpr->qUnk3C = Q(212); + } + + if (introSpr->unk34 == 0) { + s->prevVariant = -1; + introSpr->unk34 = 0x2F; + introSpr->qUnk38 = introSpr->qUnk3C; + } + + introSpr->qUnk38 -= Div(SIN((introSpr->unk34 * 6)), 24); + s->x = 120 - Div(SIN(((introSpr->unk34 * 12) + (unk30 << 5)) & 0x3FF), 650); + s->y = I(introSpr->qUnk38); + + introSpr->unk34 -= 1; + + if (1 & introSpr->unk32) { + s->oamFlags = SPRITE_OAM_ORDER(0); + } else { + s->oamFlags = SPRITE_OAM_ORDER(6); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_RenderSonic(void) +{ + Intro_C8 *strcC8 = TASK_DATA(gCurTask); + s16 unkB4 = strcC8->unkB4; + u8 i; + u8 count = 1; + + for (i = 0; i < count; i++) { + Sprite *s = &strcC8->sprites[i]; + + if (unkB4 == 0x1E) { + s->prevVariant = -1; + s->graphics.anim = gUnknown_0868B3B8[i * 2][0]; + s->variant = gUnknown_0868B3B8[i * 2][1]; + UpdateSpriteAnimation(s); + } + + if (unkB4 > 0) { + if (unkB4 > 0x161) { + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } else if (unkB4 > 0xBD) { + if (unkB4 == 0xBE) { + s->prevVariant = 0xFF; + s->graphics.anim = gUnknown_0868B3B8[i * 2 + 1][0]; + s->variant = gUnknown_0868B3B8[i * 2 + 1][1]; + } + UpdateSpriteAnimation(s); + } + DisplaySprite(s); + } + } +} + +void Task_IntroRenderTails(void) +{ + Intro_C8 *strcC8 = TASK_DATA(gCurTask); + s16 temp_r0 = strcC8->unkB4; + Intro_C8 *sp0; + u8 var_r6; + u8 count = 1; + for (var_r6 = 0; var_r6 < count; var_r6++) { + Sprite *s = &strcC8->sprites[var_r6]; + if (temp_r0 == 0x1E) { + if (var_r6 == 2) { + s->graphics.dest = (void *)OBJ_VRAM0 + 0x3280; + } else if (var_r6 == 1) { + s->graphics.dest = (void *)OBJ_VRAM0 + 0x1980; + } else { + s->graphics.dest = (void *)OBJ_VRAM0 + 0x80; + } + s->prevVariant = 0xFF; + s->graphics.anim = gUnknown_0868B3C0[var_r6 * 2][0]; + s->variant = gUnknown_0868B3C0[var_r6 * 2][1]; + UpdateSpriteAnimation(s); + } + if (temp_r0 >= 0) { + if (temp_r0 <= 0x1D) { + UpdateSpriteAnimation(s); + } + if (temp_r0 > 0x161) { + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } else if (temp_r0 > 0xBD) { + if (temp_r0 == 0xBE) { + s->prevVariant = -1; + s->graphics.anim = gUnknown_0868B3C0[var_r6 * 2 + 1][0]; + s->variant = gUnknown_0868B3C0[var_r6 * 2 + 1][1]; + } + UpdateSpriteAnimation(s); + } + if ((temp_r0 > 0x1D) || (var_r6 == 0)) { + DisplaySprite(s); + } + } + } +} + +void Task_IntroRenderKnuckles(void) +{ + Intro_C8 *strcC8 = TASK_DATA(gCurTask); + s16 temp_r0 = strcC8->unkB4; + Intro_C8 *sp0; + u8 var_r6; + u8 count = 1; + for (var_r6 = 0; var_r6 < count; var_r6++) { + Sprite *s = &strcC8->sprites[var_r6]; + if (var_r6 == 2) { + s->graphics.dest = (void *)OBJ_VRAM0 + 0x3280; + } else if (var_r6 == 1) { + s->graphics.dest = (void *)OBJ_VRAM0 + 0x1980; + } else { + s->graphics.dest = (void *)OBJ_VRAM0 + 0x80; + } + + if (temp_r0 == 0x1E) { + s->prevVariant = -1; + s->graphics.anim = gUnknown_0868B3C8[var_r6 * 2][0]; + s->variant = gUnknown_0868B3C8[var_r6 * 2][1]; + } + if (temp_r0 >= 0) { + if (temp_r0 > 0x161) { + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } else if (temp_r0 > 0xEA) { + if (temp_r0 == 0xEB) { + s->prevVariant = -1; + s->graphics.anim = gUnknown_0868B3C8[var_r6 * 2 + 1][0]; + s->variant = gUnknown_0868B3C8[var_r6 * 2 + 1][1]; + } + } + if ((temp_r0 > 0x1D) || (var_r6 == 0)) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + } +} + +void Task_IntroRenderAmy(void) +{ + Intro_C8 *strcC8 = TASK_DATA(gCurTask); + s16 unkB4 = strcC8->unkB4; + u8 i; + u8 count = 1; + + if (unkB4 > 410) { + return; + } + + for (i = 0; i < count; i++) { + Sprite *s = &strcC8->sprites[i]; + + if (strcC8->unkB4 == 0x161) { + s->frameFlags = 0; + } + if (unkB4 == 0x1E) { + s->prevVariant = -1; + s->graphics.anim = gUnknown_0868B3D0[i * 2][0]; + s->variant = gUnknown_0868B3D0[i * 2][1]; + UpdateSpriteAnimation(s); + } + + if (unkB4 >= 0) { + if (unkB4 > 353) { + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } else if (unkB4 > 164) { + if (unkB4 == 165) { + s->prevVariant = 0xFF; + s->graphics.anim = gUnknown_0868B3D0[i * 2 + 1][0]; + s->variant = gUnknown_0868B3D0[i * 2 + 1][1]; + } + UpdateSpriteAnimation(s); + } + DisplaySprite(s); + } + } +} + +void Task_806562C() +{ + IntroSprite *introSpr = TASK_DATA(gCurTask); + Sprite *s = &introSpr->s; + s16 temp_r0 = ++introSpr->unk30; + + if ((introSpr->unk30) == 0x161) { + s->frameFlags = 0; + } + + if (temp_r0 > 90) { + temp_r0 -= 90; + if ((introSpr->unk34 * 0xF) < temp_r0) { + introSpr->qUnk3C -= 0x10; + if (introSpr->qUnk3C < gUnknown_0868B27C[0]) { + introSpr->qUnk3C = gUnknown_0868B27C[0]; + } + s->x = introSpr->qUnk3C; + s->y = gUnknown_0868B27C[1]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } +} + +void sub_80656A4(void) +{ + IntroSprite *introSpr = TASK_DATA(gCurTask); + Sprite *s = &introSpr->s; + s16 temp_r0 = ++introSpr->unk30; + + if ((introSpr->unk30) == 353) { + s->frameFlags = 0; + } + + if (temp_r0 > 90) { + temp_r0 -= 90; + if ((introSpr->unk34 * 0xF) < temp_r0) { + introSpr->qUnk3C -= 0x10; + if (introSpr->qUnk3C < gUnknown_0868B280[0]) { + introSpr->qUnk3C = gUnknown_0868B280[0]; + } + s->x = introSpr->qUnk3C; + s->y = gUnknown_0868B280[1]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } +} + +void sub_806571C(void) +{ + + IntroSprite *introSpr = TASK_DATA(gCurTask); + Sprite *s = &introSpr->s; + s16 temp_r0 = ++introSpr->unk30; + + if ((introSpr->unk30) == 353) { + s->frameFlags = 0; + } + + if (temp_r0 > 90) { + temp_r0 -= 90; + if ((introSpr->unk34 * 0xF) < temp_r0) { + introSpr->qUnk3C -= 0x10; + if (introSpr->qUnk3C < gUnknown_0868B284[0]) { + introSpr->qUnk3C = gUnknown_0868B284[0]; + } + s->x = introSpr->qUnk3C; + s->y = gUnknown_0868B284[1]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } +} + +void sub_8065794(void) +{ + + IntroSprite *introSpr = TASK_DATA(gCurTask); + Sprite *s = &introSpr->s; + s16 temp_r0 = ++introSpr->unk30; + + if (temp_r0 > 410) { + return; + } + + if ((introSpr->unk30) == 0x161) { + s->frameFlags = 0; + } + + if (temp_r0 > 90) { + temp_r0 -= 90; + if ((introSpr->unk34 * 0xF) < temp_r0) { + introSpr->qUnk3C -= 0x10; + if (introSpr->qUnk3C < gUnknown_0868B288[0]) { + introSpr->qUnk3C = gUnknown_0868B288[0]; + } + s->x = introSpr->qUnk3C; + s->y = gUnknown_0868B288[1]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } +} + +void TaskDestructor_8065810(struct Task *t) { } + +void Task_IntroChaosEmeraldUpdate() +{ + IntroSprite *introSpr = TASK_DATA(gCurTask); + Sprite *s = &introSpr->s; + s16 unk30 = introSpr->unk30; + + if ((unk30 < 90) || (unk30 > 233)) { + introSpr->qUnk3C += introSpr->qUnk40; + } + + if (unk30 < 90) { + introSpr->qUnk40 -= Q(6. / 256.); + if (introSpr->qUnk40 < Q(0)) { + introSpr->qUnk40 = Q(0); + } + } + + if (unk30 == 233) { + introSpr->qUnk40 = Q(1.25); + } + + if (introSpr->qUnk3C > Q(180)) { + introSpr->qUnk3C = Q(180); + } + + s->y = I(introSpr->qUnk3C); + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} diff --git a/sa1/src/game/mp_chao.c b/sa1/src/game/mp_chao.c new file mode 100644 index 0000000000..5e0237726e --- /dev/null +++ b/sa1/src/game/mp_chao.c @@ -0,0 +1,569 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/multiplayer/chao.h" +#include "game/multiplayer/mp_player.h" +#include "game/stage/terrain_collision.h" +#include "game/entity.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +/* Chao that spawns in the Chao Hunt minigame */ + +#define SPAWN_INDEX_COUNT 8 + +typedef struct Chao { + Sprite s; + s32 qWorldX; + s32 qWorldY; + s16 qDistanceToPlayer; + s16 qSpeedX; + s16 qSpeedY; + u16 angle; + u8 id; + u8 playerIdA; + u8 playerIdB; +} Chao; + +static void Task_802816C(void); +static void Task_8028388(void); +static void Task_8028518(void); +static void Task_80286B0(void); +static void sub_802888C(void); +static void sub_8028910(void); +static void Task_8028A1C(void); +static bool32 UpdateChaoPosition(CamCoord x, CamCoord y); +static void TaskDestructor_Chao(struct Task *t); + +const u16 sChaoSpawnPositions[NUM_LEVEL_IDS_MP][SPAWN_INDEX_COUNT][2] = { // + [ACT_CHAO_HUNT_A - NUM_LEVEL_IDS_SP] = { + { 906, 290 }, + { 1250, 267 }, + { 1348, 700 }, + { 1054, 843 }, + { 753, 889 }, + { 475, 554 }, + { 475, 1035 }, + { 1740, 215 }, + }, + [ACT_CHAO_HUNT_B - NUM_LEVEL_IDS_SP] = { + { 817, 483 }, + { 817, 815 }, + { 1400, 286 }, + { 1177, 864 }, + { 1506, 579 }, + { 404, 480 }, + { 1594, 1009 }, + { 1029, 482 }, + }, + [ACT_CHAO_HUNT_C - NUM_LEVEL_IDS_SP] = { + { 458, 192 }, + { 447, 578 }, + { 534, 864 }, + { 332, 1248 }, + { 1023, 1250 }, + { 433, 1536 }, + { 410, 1728 }, + { 650, 1728 }, + }, + [ACT_CHAO_HUNT_D - NUM_LEVEL_IDS_SP] = { + { 633, 335 }, + { 1289, 335 }, + { 722, 576 }, + { 1162, 576 }, + { 945, 960 }, + { 706, 1057 }, + { 1219, 1057 }, + { 1009, 1008 }, + } +}; + +struct Task *CreateMultiplayerChao(u8 spawnIndex, u8 id) +{ + Chao *chao; + Sprite *s; + struct Task *t; + CamCoord x, y; + +#ifdef BUG_FIX + spawnIndex %= ARRAY_COUNT(sChaoSpawnPositions[0]); +#endif + + t = TaskCreate(Task_802816C, sizeof(Chao), 0x2000U, 0U, TaskDestructor_Chao); + chao = TASK_DATA(t); + + s = &chao->s; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + x = sChaoSpawnPositions[gCurrentLevel - NUM_LEVEL_IDS_SP][spawnIndex][0]; + if ((gCurrentLevel == ACT_CHAO_HUNT_D) && (spawnIndex > 4U)) { + SPRITE_FLAG_SET(s, Y_FLIP); + SPRITE_FLAG_SET_VALUE(s, PRIORITY, 2); + y = sChaoSpawnPositions[gCurrentLevel - NUM_LEVEL_IDS_SP][spawnIndex][1] + 16; + } else { + y = sChaoSpawnPositions[gCurrentLevel - NUM_LEVEL_IDS_SP][spawnIndex][1] - 16; + } + + chao->id = id; + chao->playerIdA = -1; + chao->playerIdB = -1; + chao->qWorldX = Q(x); + chao->qWorldY = Q(y); + chao->qDistanceToPlayer = 0; + chao->angle = 0; + + s->x = I(chao->qWorldX) - gCamera.x; + s->y = I(chao->qWorldY) - gCamera.y; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CHAO_SITTING); + s->oamFlags = SPRITE_OAM_ORDER(16 - id); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_CHAO_SITTING; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + + return t; +} + +void Task_802816C(void) +{ + Chao *chao = TASK_DATA(gCurTask); + Sprite *s = &chao->s; + + s->graphics.anim = 0x2C0; + s->variant = 0; + UpdateSpriteAnimation(s); + if (chao->playerIdA != 0xFF) { + chao->playerIdB = chao->playerIdA; + if (chao->id == 0) { + gCurTask->main = Task_8028388; + } else if (chao->id == 1) { + gCurTask->main = Task_8028518; + } else { + gCurTask->main = Task_80286B0; + } + } else { + u32 pid; + for (pid = 0; pid < 4; pid++) { + struct Task **mpTasks = gMultiplayerPlayerTasks; + MultiplayerPlayer *mpp; + if (mpTasks[pid] == NULL) + break; + + mpp = TASK_DATA(gMultiplayerPlayerTasks[pid]); + if (!(mpp->unk54 & 0x4)) { + if (HB_COLLISION(I(chao->qWorldX), I(chao->qWorldY), s->hitboxes[0].b, mpp->pos.x, mpp->pos.y, mpp->s.hitboxes[0].b)) { + mpp->unk5C |= (0x10000 << chao->id); + chao->playerIdA = pid; + chao->playerIdB = pid; + + if (chao->id == 0) { + gCurTask->main = Task_8028388; + } else if (chao->id == 1) { + gCurTask->main = Task_8028518; + } else { + gCurTask->main = Task_80286B0; + } + + m4aSongNumStart(0xA3U); + break; + } + } + } + } + + s->x = I(chao->qWorldX) - gCamera.x; + s->y = I(chao->qWorldY) - gCamera.y; + DisplaySprite(s); +} + +// TODO: Fake-match +void Task_8028388(void) +{ + s32 theta; + MultiplayerPlayer *mpp; + u16 worldX; + u16 worldY; + u32 angle; + s32 valueY; + s32 sinVal; + + Chao *chao = TASK_DATA(gCurTask); + Sprite *sprChao; + + if (chao->playerIdA != chao->playerIdB) { + chao->playerIdB = chao->playerIdA; + sub_802888C(); + return; + } + chao->playerIdB = chao->playerIdA; + mpp = TASK_DATA(gMultiplayerPlayerTasks[chao->playerIdA]); + sprChao = &chao->s; + angle = gStageTime * 0x10; + chao->angle = angle; + if (mpp->s.frameFlags & 0x800) { +#ifndef NON_MATCHING + register u32 r0 asm("r0"); + register u32 mask asm("r3"); +#else + u32 r0; + u32 mask; +#endif + sprChao->frameFlags |= 0x800; + worldY = mpp->pos.y + 28; + theta = (angle + 0x200); + mask = 0x3FF; + +#ifndef NON_MATCHING + asm("mov %0, %1" : "=r"(r0) : "r"(mask)); +#else + r0 = mask; +#endif + theta &= r0; + } else { + sprChao->frameFlags &= ~0x800; + worldY = mpp->pos.y - 28; + theta = angle & 0x3FF; + } + + if (mpp->s.frameFlags & 0x400) { + worldX = mpp->pos.x - 20; + } else { + worldX = mpp->pos.x + 20; + } + + if ((s16)worldX == ((s32)chao->qWorldX >> 8)) { + s32 charAnim = (mpp->s.graphics.anim - (s16)gPlayerCharacterIdleAnims[gMultiplayerCharacters[mpp->unk56]]); + if (charAnim == SA1_CHAR_ANIM_1) { + sprChao->graphics.anim = SA1_ANIM_CHAO_TURN; + sprChao->variant = 0; + } else { + sprChao->graphics.anim = SA1_ANIM_CHAO_FACE_DIAGONAL_R; + sprChao->variant = 0; + } + } else { + sprChao->graphics.anim = 0x2BB; + sprChao->variant = 0; + } + UpdateChaoPosition(worldX, worldY); + sprChao->x = I(chao->qWorldX) - gCamera.x; + sprChao->y = (I(chao->qWorldY) - ((sinVal = SIN(theta)) >> 11)) - gCamera.y; + UpdateSpriteAnimation(sprChao); + DisplaySprite(sprChao); +} + +void Task_8028518() +{ + s32 theta; + MultiplayerPlayer *mpp; + CamCoord worldX, worldY; + u32 angle; + s32 valueY; + s32 sinVal; + + Chao *chao = TASK_DATA(gCurTask); + Sprite *sprChao; + + if (chao->playerIdA != chao->playerIdB) { + chao->playerIdB = chao->playerIdA; + sub_802888C(); + return; + } + chao->playerIdB = chao->playerIdA; + mpp = TASK_DATA(gMultiplayerPlayerTasks[chao->playerIdA]); + sprChao = &chao->s; + if (mpp->s.frameFlags & 0x800) { + sprChao->frameFlags |= 0x800; + worldY = mpp->pos.y + mpp->s.hitboxes[0].b.bottom + 16; + theta = chao->angle & (SIN_PERIOD - 1); + } else { + sprChao->frameFlags &= ~0x800; + worldY = mpp->pos.y + mpp->s.hitboxes[0].b.top - 16; + theta = chao->angle & (SIN_PERIOD - 1); + } + + worldX = mpp->pos.x; + + if (mpp->pos.x == ((s32)chao->qWorldX >> 8)) { + s32 charAnim = (mpp->s.graphics.anim - (s16)gPlayerCharacterIdleAnims[gMultiplayerCharacters[mpp->unk56]]); + if (charAnim == SA1_CHAR_ANIM_1) { + sprChao->graphics.anim = SA1_ANIM_CHAO_TURN; + sprChao->variant = 0; + } else { + sprChao->graphics.anim = SA1_ANIM_CHAO_FACE_DIAGONAL_R; + sprChao->variant = 0; + } + } else { + sprChao->graphics.anim = 0x2BB; + sprChao->variant = 0; + } + + if (UpdateChaoPosition(worldX, worldY)) { + sprChao->graphics.anim = SA1_ANIM_CHAO_SITTING; + sprChao->variant = 0; + sprChao->x = I(chao->qWorldX) - gCamera.x; + sprChao->y = I(chao->qWorldY) - gCamera.y; + } else { + sprChao->x = I(chao->qWorldX) - gCamera.x; + sprChao->y = (I(chao->qWorldY) - ((sinVal = SIN(theta)) >> 11)) - gCamera.y; + } + UpdateSpriteAnimation(sprChao); + DisplaySprite(sprChao); +} + +void Task_80286B0() +{ + s32 theta; + struct Task *chaoTask; + Chao *chaoZero; + MultiplayerPlayer *mpp; + u16 worldX; + u16 worldY; + u32 angle; + s32 valueY; + s32 sinVal; + + Chao *chao = TASK_DATA(gCurTask); + Sprite *sprChao; + + if (chao->playerIdA != chao->playerIdB) { + chao->playerIdB = chao->playerIdA; + sub_802888C(); + return; + } + chao->playerIdB = chao->playerIdA; + mpp = TASK_DATA(gMultiplayerPlayerTasks[chao->playerIdA]); + sprChao = &chao->s; + angle = gStageTime * 0x10; + chao->angle = angle; + if (mpp->s.frameFlags & 0x800) { +#ifndef NON_MATCHING + register u32 r0 asm("r0"); + register u32 mask asm("r3"); +#else + u32 r0; + u32 mask; +#endif + sprChao->frameFlags |= 0x800; + worldY = mpp->pos.y + 16; + theta = (angle + 0x200); + mask = 0x3FF; + +#ifndef NON_MATCHING + asm("mov %0, %1" : "=r"(r0) : "r"(mask)); +#else + r0 = mask; +#endif + theta &= r0; + } else { + sprChao->frameFlags &= 0xFFFFF7FF; + worldY = mpp->pos.y - 16; + theta = angle & 0x3FF; + } + + if (mpp->s.frameFlags & 0x400) { + worldX = mpp->pos.x - 20; + } else { + worldX = mpp->pos.x + 20; + } + + if ((s16)worldX == ((s32)chao->qWorldX >> 8)) { + s32 charAnim = (mpp->s.graphics.anim - (s16)gPlayerCharacterIdleAnims[gMultiplayerCharacters[mpp->unk56]]); + if (charAnim == SA1_CHAR_ANIM_1) { + sprChao->graphics.anim = SA1_ANIM_CHAO_TURN; + sprChao->variant = 0; + } else { + sprChao->graphics.anim = SA1_ANIM_CHAO_FACE_DIAGONAL_R; + sprChao->variant = 0; + } + } else { + sprChao->graphics.anim = 0x2BB; + sprChao->variant = 0; + } + + chaoZero = TASK_DATA(gChaoTasks[0]); + + if (UpdateChaoPosition(worldX, worldY) && (chaoZero->playerIdA == chao->playerIdA)) { + sprChao->graphics.anim = SA1_ANIM_CHAO_SITTING; + sprChao->variant = 0; + sprChao->x = I(chao->qWorldX) - gCamera.x; + sprChao->y = (I(chao->qWorldY) - ((sinVal = SIN(theta)) >> 11)) - gCamera.y; + } else { + sprChao->x = I(chao->qWorldX) - gCamera.x; + sprChao->y = (I(chao->qWorldY) - ((sinVal = SIN(theta)) >> 11)) - gCamera.y; + } + UpdateSpriteAnimation(sprChao); + DisplaySprite(sprChao); +} + +void sub_802888C() +{ + Chao *chao = TASK_DATA(gCurTask); + Sprite *s = &chao->s; + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[chao->playerIdA]); + + if (chao->s.frameFlags & 0x400) { + chao->qSpeedX = -Q(1.5); + } else { + chao->qSpeedX = +Q(1.5); + } + + if (mpp->s.frameFlags & 0x800) { + chao->qSpeedY = +Q(3.0); + } else { + chao->qSpeedY = -Q(3.0); + } + + s->graphics.anim = 0x2BA; + s->variant = 0; + gCurTask->main = sub_8028910; +} + +void sub_8028910() +{ + s32 res; + + Chao *chao = TASK_DATA(gCurTask); + Sprite *s = &chao->s; + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[chao->playerIdA]); + + if (mpp->s.frameFlags & 0x800) { + chao->qSpeedY -= 0x28; + } else { + chao->qSpeedY += 0x28; + } + chao->qWorldX += chao->qSpeedX; + chao->qWorldY += chao->qSpeedY; + + if (mpp->s.frameFlags & 0x800) { + res = SA2_LABEL(sub_801F100)(I(chao->qWorldY), I(chao->qWorldX), (mpp->unk54 >> 7) % 2u, -8, SA2_LABEL(sub_801EC3C)); + if (res < 0) { + chao->qWorldY -= Q(res); + s->graphics.anim = SA1_ANIM_CHAO_SHOCKED; + s->variant = 2; + gCurTask->main = Task_8028A1C; + } + } else { + res = SA2_LABEL(sub_801F100)(I(chao->qWorldY), I(chao->qWorldX), (mpp->unk54 >> 7) % 2u, +8, SA2_LABEL(sub_801EC3C)); + if (res < 0) { + chao->qWorldY += Q(res); + s->graphics.anim = SA1_ANIM_CHAO_SHOCKED; + s->variant = 2; + gCurTask->main = Task_8028A1C; + } + } + s->x = I(chao->qWorldX) - gCamera.x; + s->y = I(chao->qWorldY) - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8028A1C() +{ + Chao *chao = TASK_DATA(gCurTask); + Sprite *s = &chao->s; + + chao->s.x = I(chao->qWorldX) - gCamera.x; + chao->s.y = I(chao->qWorldY) - gCamera.y; + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + if (chao->playerIdA != 0xFF) { + if (chao->id == 0) { + gCurTask->main = Task_8028388; + } else if (chao->id == 1) { + gCurTask->main = Task_8028518; + } else { + gCurTask->main = Task_80286B0; + } + } else { + gCurTask->main = Task_802816C; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +// Returns whether a Chao's position is identical to the input player pos +bool32 UpdateChaoPosition(CamCoord playerX, CamCoord playerY) +{ + s16 vecChaoPlayerY; + s16 vecChaoPlayerX; + s16 dirX; + s16 dirY; + s16 angle; + s32 qDistance; + + Chao *chao = TASK_DATA(gCurTask); + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[chao->playerIdA]); + Sprite *s = &chao->s; + + vecChaoPlayerX = playerX - I(chao->qWorldX); + vecChaoPlayerY = playerY - I(chao->qWorldY); + if ((vecChaoPlayerX > 0) || ((vecChaoPlayerX == 0) && (mpp->s.frameFlags & 0x400))) { + s->frameFlags |= 0x400; + } else { + s->frameFlags &= ~0x400; + } + if ((vecChaoPlayerX == 0) && (vecChaoPlayerY == 0)) { + return 1U; + } + + dirX = vecChaoPlayerX; + dirY = vecChaoPlayerY; + if ((vecChaoPlayerX != 0) && (vecChaoPlayerY != 0)) { + while ((ABS(dirX) > 0x7F) || (ABS(dirY) > 0x7F)) { + dirX /= 2; + dirY /= 2; + if ((ABS(dirX) <= 1) || ABS(dirY) <= 1) { + break; + } + } + } + + if ((ABS(dirX) <= 1) && (ABS(dirY) > 1)) { + if (dirY > 0) { + angle = DEG_TO_SIN(90); + } else { + angle = DEG_TO_SIN(270); + } + } else { + if ((ABS(dirY) <= 1) && (ABS(dirX) > 1)) { + if (dirX > 0) { + angle = DEG_TO_SIN(0); + } else { + angle = DEG_TO_SIN(180); + } + } else { + angle = (u16)SA2_LABEL(sub_8004418)(dirY, dirX); + } + } + + qDistance = Q(Sqrt((vecChaoPlayerX * vecChaoPlayerX) + (vecChaoPlayerY * vecChaoPlayerY))); + + if (qDistance > Q(2.0)) { + qDistance = Q(2.0); + } else if (qDistance == 0) { + qDistance = 1; + } + chao->qDistanceToPlayer = qDistance; + + if (chao->qDistanceToPlayer != 0) { + chao->qWorldX += (chao->qDistanceToPlayer * COS(angle)) >> 14; + chao->qWorldY += (chao->qDistanceToPlayer * SIN(angle)) >> 14; + } + return 0U; +} + +void TaskDestructor_Chao(struct Task *t) +{ + Chao *chao = TASK_DATA(t); + VramFree(chao->s.graphics.dest); +} diff --git a/sa1/src/game/multiboot/collect_rings/time_display.c b/sa1/src/game/multiboot/collect_rings/time_display.c new file mode 100644 index 0000000000..dcbb17f449 --- /dev/null +++ b/sa1/src/game/multiboot/collect_rings/time_display.c @@ -0,0 +1,332 @@ +#include "core.h" +#include "malloc_vram.h" +#include "flags.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/multiboot/collect_rings/time_display.h" + +#include "constants/animations.h" + +#ifndef COLLECT_RINGS_ROM +#define NUM_TILES 9 +#else +#define NUM_TILES 0xC +#endif + +typedef struct { + Sprite unk0; + Sprite unk30[11]; +} TimeDisplay; /* 0x240*/ + +void sub_80832E0(struct Task *); +void sub_808328C(void); + +u32 gUnknown_03005B6C = 0; + +const u8 SA2_LABEL(gUnknown_080E0234)[] = { + 0, 2, 3, 5, 7, 8, 16, 18, 19, 21, 23, 24, 32, 34, 35, 37, 39, 40, 48, 50, + 51, 53, 55, 56, 64, 66, 67, 69, 71, 72, 80, 82, 83, 85, 87, 88, 96, 98, 99, 101, + 103, 104, 112, 114, 115, 117, 119, 120, 128, 130, 131, 133, 135, 136, 144, 146, 147, 149, 151, 152, +}; + +#if (GAME == GAME_SA2) +// const u16 gUnknown_080E0270[] = INCBIN_U16("graphics/80E0270.gbapal"); +#endif + +#if 0 +void CreateCollectRingsTimeDisplay(void) +{ + u32 i; + TimeDisplay *timeDisplay; + Sprite *s; + struct Task *t = TaskCreate(sub_808328C, sizeof(TimeDisplay), 0x2102, 0, sub_80832E0); + gUnknown_03005B6C = 0; + timeDisplay = TASK_DATA(t); + + s = &timeDisplay->unk0; + s->oamFlags = SPRITE_OAM_ORDER(5); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x40000; + +#ifndef COLLECT_RINGS_ROM + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) +#endif + { + s->graphics.dest = VramMalloc(NUM_TILES); + s->graphics.anim = SA2_ANIM_MULTIPLAYER_UI_RING; + s->variant = 0; + } + + UpdateSpriteAnimation(s); + + for (i = 0; i < 11; i++) { + s = &timeDisplay->unk30[i]; + s->x = 0; + s->y = 0; + s->oamFlags = SPRITE_OAM_ORDER(4); + s->graphics.size = 0; + s->graphics.anim = SA2_ANIM_ASCII; + s->variant = i + SA2_ANIM_ASCII_CHAR('0'); + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0; + + if (i == 0) { + s->graphics.dest = VramMalloc(22); + } else { + s->graphics.dest = timeDisplay->unk30[0].graphics.dest + (i * 0x40); + } + + UpdateSpriteAnimation(s); + } + + for (i = 0; i < 16; i++) { + gObjPalette[i + 0x70] = gUnknown_080E0270[i]; + } + + gFlags |= FLAGS_UPDATE_SPRITE_PALETTES; +} + +void sub_8082E9C(TimeDisplay *timeDisplay) +{ + s16 x, y; + u16 temp4; + u32 temp; + Sprite *s; + u8 palId; + u16 index; + u8 digit1; + u32 temp2; + u32 temp3; + u16 temp6; + + temp = Div(gCourseTime, 60); + index = gCourseTime - (temp * 60); + temp *= 0x10000; + temp /= 0x10000; + digit1 = SA2_LABEL(gUnknown_080E0234)[index]; + + temp2 = Div(temp, 60); + temp -= (temp2 * 60); + temp *= 0x10000; + while (0) + ; + index = temp / 0x10000; + temp2 *= 0x10000; + temp2 /= 0x10000; + temp6 = Base10DigitsToHexNibbles(index); + + temp3 = Div(temp2, 60); + index = temp2 - (temp3 * 60); + temp4 = Base10DigitsToHexNibbles(index); + + palId = 0; + if (gCourseTime < 3600) { + palId = (-(gStageTime & 0x10)) >> 0x1F; + } + + x = 8; + y = 38; + s = &timeDisplay->unk30[temp4 % 16]; + s->x = x; + s->y = y; + s->palId = palId; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[10]; + s->x = x; + s->y = y; + s->palId = 0; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[(temp6 / 16) % 16]; + s->x = x; + s->y = y; + s->palId = palId; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[temp6 % 16]; + s->x = x; + s->y = y; + s->palId = palId; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[10]; + s->x = x; + s->y = y; + s->palId = 0; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[(digit1 / 16) % 16]; + s->x = x; + s->y = y; + s->palId = palId; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[digit1 % 16]; + s->x = x; + s->y = y; + s->palId = palId; + DisplaySprite(s); +} + +void sub_8083040(TimeDisplay *timeDisplay) +{ + Sprite *s; + + u16 i, j; + s16 x, y; + u32 temp; + + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + s = &timeDisplay->unk0; + s->x = i * 26; + s->y = 0; + s->palId = i; + DisplaySprite(s); + + j = Base10DigitsToHexNibbles(gMultiplayerCharRings[i]); + x = s->x + 0x17; + y = s->y + 0x13; + do { + s = &timeDisplay->unk30[j % 16]; + s->x = x; + s->y = y; + s->palId = 0; + DisplaySprite(s); + x -= 8; + y = y; + } while (j /= 16); + } +} + +void sub_8083104(TimeDisplay *timeDisplay) +{ + s16 x, y; + u16 temp4; + u32 temp; + Sprite *s; + u16 index; + u8 digit1; + u32 temp2; + u32 temp3; + u16 temp6; + + temp = Div(gUnknown_03005B6C, 60); + index = gUnknown_03005B6C - (temp * 60); + temp *= 0x10000; + temp /= 0x10000; + digit1 = SA2_LABEL(gUnknown_080E0234)[index]; + + temp2 = Div(temp, 60); + temp -= (temp2 * 60); + temp *= 0x10000; + +#ifndef NON_MATCHING + while (0) + ; +#endif + + index = temp / 0x10000; + temp2 *= 0x10000; + temp2 /= 0x10000; + temp6 = Base10DigitsToHexNibbles(index); + + temp3 = Div(temp2, 60); + index = temp2 - (temp3 * 60); + temp4 = Base10DigitsToHexNibbles(index); + + x = 8; + y = 54; + +#ifndef NON_MATCHING + while (0) + ; +#endif + + s = &timeDisplay->unk30[temp4 % 16]; + s->x = x; + s->y = y; + s->palId = 1; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[10]; + s->x = x; + s->y = y; + s->palId = 0; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[(temp6 / 16) % 16]; + s->x = x; + s->y = y; + s->palId = 1; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[temp6 % 16]; + s->x = x; + s->y = y; + s->palId = 1; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[10]; + s->x = x; + s->y = y; + s->palId = 0; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[(digit1 / 16) % 16]; + s->x = x; + s->y = y; + s->palId = 1; + DisplaySprite(s); + + x += 8; + s = &timeDisplay->unk30[digit1 % 16]; + s->x = x; + s->y = y; + s->palId = 1; + DisplaySprite(s); +} + +void sub_808328C(void) +{ + if (!(gStageFlags & STAGE_FLAG__TURN_OFF_HUD)) { + TimeDisplay *timeDisplay = TASK_DATA(gCurTask); + Sprite *s = &timeDisplay->unk0; + if (!(gStageFlags & STAGE_FLAG__TURN_OFF_TIMER)) { + sub_8082E9C(timeDisplay); + + if (gUnknown_03005B6C != 0) { + sub_8083104(timeDisplay); + } + } + sub_8083040(timeDisplay); + } +} + +void sub_80832E0(struct Task *t) +{ + TimeDisplay *timeDisplay = TASK_DATA(t); + VramFree(timeDisplay->unk0.graphics.dest); + VramFree(timeDisplay->unk30[0].graphics.dest); +} +#endif diff --git a/sa1/src/game/multiplayer/chao_message.c b/sa1/src/game/multiplayer/chao_message.c new file mode 100644 index 0000000000..744acab573 --- /dev/null +++ b/sa1/src/game/multiplayer/chao_message.c @@ -0,0 +1,921 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "bg_triangles.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/gTask_03006240.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/save.h" +#include "game/title_screen.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/text.h" +#include "constants/tilemaps.h" + +#define CM_BACKGROUND_COLOR RGB16_REV(0, 27, 30) + +typedef struct ChaoMessage { + /* 0x00 */ Background bg; + /* 0x40 */ u8 unk40[2][4]; + /* 0x48 */ s16 unk48[4]; + /* 0x48 */ s16 unk50; + /* 0x48 */ u16 unk52; + /* 0x54 */ u8 unk54; + /* 0x55 */ u8 mode; + /* 0x56 */ u8 unk56; +} ChaoMessage; /* 0x58 */ + +typedef struct ChaoMsgSprite { + /* 0x00 */ Sprite s; + /* 0x30 */ s16 unk30; + /* 0x32 */ s16 unk32; + /* 0x34 */ u8 unk34; +} ChaoMsgSprite; /* 0x38 */ + +typedef struct ChaoMsg68 { + GameOverB overBs[4]; + s16 unk60; + s16 unk62; + void *vram64; +} ChaoMsg68; + +extern u8 gUnknown_03005008[MULTI_SIO_PLAYERS_MAX]; + +static u8 gUnknown_030058A8[6][2]; +static u8 gUnknown_030058B4; +static u8 gUnknown_030058B8[4]; + +void sub_803AB60(ChaoMessage *message); +void Task_ChaoMessageInit(void); +void Task_803C130(void); +void Task_803B7AC(void); +void sub_803B944(void); +void sub_803BAD4(void); +void sub_803BC64(void); +void sub_803BE0C(void); +void sub_803BEB8(void); +void sub_803BFE8(void); +void TaskDestructor_803C184(struct Task *t); +void TaskDestructor_803C198(struct Task *t); + +extern void sub_8018538(void); +extern void CreateMultiplayerContinueScreen(void); + +void CreateMultiplayerResultsScreen(u8 mode) +{ + s32 sp4; + Background *bg; + ChaoMessage *message; + u8 *temp_r0; + u8 temp_r0_2; + u8 temp_r0_3; + u8 var_r2; + + gUnknown_030058B8[0] = 0; + gUnknown_030058B8[1] = 0; + gUnknown_030058B8[2] = 0; + gUnknown_030058B8[3] = 0; + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + gUnknown_030058B4 = 0; + + for (var_r2 = 0; var_r2 < 4; var_r2++) { + if (GetBit(gMultiplayerConnections, var_r2)) { + gUnknown_030058B4 += 1; + } + }; + + message = TASK_DATA(TaskCreate(Task_ChaoMessageInit, sizeof(ChaoMessage), 0x2000U, 0U, NULL)); + bg = &message->bg; + message->mode = mode; + message->unk54 = gUnknown_030058B4; + sub_803AB60(message); + message->unk48[0] = 0xFF10; + message->unk48[1] = 0xF0; + message->unk48[2] = 0xFF10; + message->unk48[3] = 0xF0; + gDispCnt = 0x3140; + gBgCntRegs[0] = (DISPCNT_WIN1_ON) | DISPCNT_BG3_ON | DISPCNT_MODE_3; + gBgScrollRegs[0][0] = 256; + gBgScrollRegs[0][1] = 0; + + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] = 0x31; + gWinRegs[WINREG_WINOUT] = 0x31; + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + + DmaFill32(3, 0, BG_VRAM + 0x1FE0, 0x40); + + gBgSprites_Unknown1[0] = 0xFF; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x40; + + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0xFF; + bg->layoutVram = (u16 *)(BG_VRAM + 0x4000); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = 0x58; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 20; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + *gBgPalette = CM_BACKGROUND_COLOR; + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; + + switch (message->mode) { + case 0: + m4aSongNumStart(MUS_006); + break; + case 1: + temp_r0_3 = message->unk56; + if (temp_r0_3 == 0) { + m4aSongNumStart(MUS_007); + } else if (temp_r0_3 == 1) { + m4aSongNumStart(MUS_008); + } else { + m4aSongNumStart(MUS_009); + } + break; + case 2: + m4aSongNumStart(SE_VS_MULTIPAK_CONN_CLOSE); + break; + } +} + +// (99.02%) https://decomp.me/scratch/HVYh9 +NONMATCH("asm/non_matching/game/multiplayer/chao_message__sub_803AB60.inc", void sub_803AB60(ChaoMessage *message)) +{ + u8 sp0; + u8 sp4; + s16 var_r0; + s32 var_r3; + u8 var_r2_3; + u8 i; + u8 var_r6; + + switch (message->unk54) { + case 2: + message->unk50 = 0x28; + break; + case 3: + message->unk50 = 0x14; + break; + default: + case 0: + case 1: + case 4: + message->unk50 = 0; + break; + } + + switch (message->mode) { + case 0: + sp0 = 0; + sp4 = 0; + for (i = 0; i < message->unk54; i++) { + u32 unk5008 = gUnknown_03005008[i]; + if (i != (SIO_MULTI_CNT->id)) { + if (unk5008 < 10) { + gUnknown_030058A8[i][0] = LOADED_SAVE->multiplayerScores[unk5008].data.split.wins; + gUnknown_030058A8[i][1] = LOADED_SAVE->multiplayerScores[unk5008].data.split.losses; + } else { + gUnknown_030058A8[i][0] = 0; + gUnknown_030058A8[i][1] = 0; + } + + if (gUnknown_030058A8[i][0] > gUnknown_030058A8[i][1]) { + message->unk40[1][i] = 6; + message->unk40[0][i] = 6; + sp0++; + } else if (gUnknown_030058A8[i][0] < gUnknown_030058A8[i][1]) { + message->unk40[1][i] = 1; + message->unk40[0][i] = 1; + sp4++; + } else { + message->unk40[1][i] = 0; + message->unk40[0][i] = 0; + } + } + } + + if (sp0 > sp4) { + message->unk40[1][SIO_MULTI_CNT->id] = 1; + message->unk40[0][SIO_MULTI_CNT->id] = 1; + } else if (sp0 < sp4) { + message->unk40[1][SIO_MULTI_CNT->id] = 6; + message->unk40[0][SIO_MULTI_CNT->id] = 6; + } else { + message->unk40[1][SIO_MULTI_CNT->id] = 0; + message->unk40[0][SIO_MULTI_CNT->id] = 0; + } + break; + case 1: + if ((gUnknown_030058B4 == 2) || (gGameMode == 3) || (gGameMode == 5)) { + for (i = 0; i < message->unk54; i++) { + switch (gMultiplayerRanks[i]) { + case 0: + message->unk40[1][i] = 2; + message->unk40[0][i] = 2; + if (i == (SIO_MULTI_CNT->id)) { + + } else if (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0) { + if ((gGameMode != 3) && (gGameMode != 5)) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws = 99; + } + } + } else { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses = 99; + } + } + break; + default: + case 1: + message->unk40[1][i] = 3; + message->unk40[0][i] = 3; + if (i != (SIO_MULTI_CNT->id)) { + if (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins = 99; + } + } else if ((gGameMode != 3) && (gGameMode != 5)) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws = 99; + } + } + } + break; + case 4: + message->unk40[1][i] = 4; + message->unk40[0][i] = 4; + if ((i != (SIO_MULTI_CNT->id)) + && (((gGameMode != 3) && (gGameMode != 5)) + || (((s32)(gMultiplayerConnections & (0x10 << i)) >> (i + 4)) + != ((s32)(gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) + >> ((SIO_MULTI_CNT->id) + 4))))) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws = 99; + } + } + break; + } + } + + if (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0) { + message->unk56 = 0; + if (++LOADED_SAVE->unk425 > 99) { + LOADED_SAVE->unk425 = 99; + } + } else { + if ((gMultiplayerRanks[SIO_MULTI_CNT->id] == 4)) { + message->unk56 = 2; + if (++LOADED_SAVE->unk427 > 99) { + LOADED_SAVE->unk427 = 99; + } + } else { + message->unk56 = 1; + if (++LOADED_SAVE->unk426 > 99) { + LOADED_SAVE->unk426 = 99; + } + } + } + } else if (gGameMode == 4) { + for (i = 0, var_r2_3 = 0; i < message->unk54; i++) { + if (gMultiplayerRanks[i] == 0) { + var_r2_3 += 1; + } + } + if (var_r2_3 == 1) { + for (i = 0; i < message->unk54; i++) { + if (gMultiplayerRanks[i] == 0) { + message->unk40[1][i] = 2; + message->unk40[0][i] = 2; + + if (i != (SIO_MULTI_CNT->id)) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses = 99; + } + } + } else { + message->unk40[1][i] = 3; + message->unk40[0][i] = 3; + + if ((i != (SIO_MULTI_CNT->id)) && (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0)) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins = 99; + } + } + } + } + + if (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0) { + message->unk56 = 0; + if (++LOADED_SAVE->unk425 > 99) { + LOADED_SAVE->unk425 = 99; + } + } else { + message->unk56 = 1; + if (++LOADED_SAVE->unk426 > 99) { + LOADED_SAVE->unk426 = 99; + } + } + } else if (var_r2_3 == 0) { + for (i = 0; i < message->unk54; i++) { + message->unk40[1][i] = 4; + message->unk40[0][i] = 4; + + if (i != (SIO_MULTI_CNT->id)) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws = 99; + } + } + } + message->unk56 = 2; + if (++LOADED_SAVE->unk427 > 99) { + LOADED_SAVE->unk427 = 99; + } + } else { + for (i = 0; i < message->unk54; i++) { + if (gMultiplayerRanks[i] == 0) { + message->unk40[1][i] = 4; + message->unk40[0][i] = 4; + if (i != (SIO_MULTI_CNT->id)) { + if (gMultiplayerRanks[SIO_MULTI_CNT->id] != 0) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses = 99; + } + } else { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws = 99; + } + } + } + } else { + message->unk40[1][i] = 3; + message->unk40[0][i] = 3; + if (i != (SIO_MULTI_CNT->id)) { + if (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins = 99; + } + } else { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws = 99; + } + } + } + } + } + + if (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0) { + message->unk56 = 2; + if (++LOADED_SAVE->unk427 > 99) { + LOADED_SAVE->unk427 = 99; + } + } else { + message->unk56 = 1; + if (++LOADED_SAVE->unk426 > 99) { + LOADED_SAVE->unk426 = 99; + } + } + } + } else { + for (var_r6 = 0, i = 0; i < message->unk54; i++) { + if (gMultiplayerRanks[i] == 4) { + var_r6++; + } + } + + if (var_r6 == message->unk54) { + for (i = 0; i < message->unk54; i++) { + message->unk40[1][i] = 4; + message->unk40[0][i] = 4; + } + } else { + for (i = 0; i < message->unk54; i++) { + switch (gMultiplayerRanks[i]) { + case 0: + message->unk40[1][i] = 7; + message->unk40[0][i] = 2; + break; + case 1: + message->unk40[1][i] = 8; + message->unk40[0][i] = 4; + break; + case 2: + message->unk40[1][i] = 9; + if (message->unk54 == 3) { + message->unk40[0][i] = 3; + } else { + message->unk40[0][i] = 4; + } + break; + case 3: + message->unk40[1][i] = 10; + message->unk40[0][i] = 3; + break; + case 4: + message->unk40[1][i] = 3; + message->unk40[0][i] = 3; + break; + case 5: + message->unk40[1][i] = 3; + message->unk40[0][i] = 3; + break; + } + + if (i != SIO_MULTI_CNT->id) { + if (gMultiplayerRanks[SIO_MULTI_CNT->id] < gMultiplayerRanks[i]) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.wins = 99; + } + } else if (gMultiplayerRanks[SIO_MULTI_CNT->id] == gMultiplayerRanks[i]) { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.draws = 99; + } + + } else { + ++LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses; + if (LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses > 99) { + LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.losses = 99; + } + } + } + } + } + if (gMultiplayerRanks[SIO_MULTI_CNT->id] == 0) { + message->unk56 = 0; + ++LOADED_SAVE->unk425; + if (LOADED_SAVE->unk425 > 99) { + LOADED_SAVE->unk425 = 99; + } + } else if ((gMultiplayerRanks[SIO_MULTI_CNT->id] != 4) || (var_r6 != message->unk54)) { + message->unk56 = 1; + ++LOADED_SAVE->unk426; + if (LOADED_SAVE->unk426 > 99) { + LOADED_SAVE->unk426 = 99; + } + } else { + message->unk56 = 2; + ++LOADED_SAVE->unk427; + if (LOADED_SAVE->unk427 > 99) { + LOADED_SAVE->unk427 = 99; + } + } + } + break; + case 2: + for (i = 0; i < message->unk54; i++) { + message->unk40[1][i] = 5; + message->unk40[0][i] = 5; + } + break; + } +} +END_NONMATCH + +void Task_ChaoMessageInit(void) +{ + u8 i; + Sprite *s; + + ChaoMessage *message; + ChaoMsgSprite *msgSprite; + + MultiPakHeartbeat(); + + message = TASK_DATA(gCurTask); + for (i = 0; i < message->unk54; i++) { + msgSprite = TASK_DATA(TaskCreate(Task_803C130, sizeof(ChaoMsgSprite), 0x2100U, 0U, TaskDestructor_803C184)); + msgSprite->unk30 = 0x2D; + msgSprite->unk32 = (i * 0x28 + 2); + msgSprite->unk34 = i; + + s = &msgSprite->s; + s->graphics.dest = VramMalloc(40); + s->graphics.anim = SA1_ANIM_MP_CHAO_AVATAR; + s->variant = message->unk40[0][i]; + s->oamFlags = SPRITE_OAM_ORDER(16); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x3000; + + msgSprite = TASK_DATA(TaskCreate(Task_803C130, sizeof(ChaoMsgSprite), 0x2100U, 0U, TaskDestructor_803C184)); + msgSprite->unk30 = 0xA9; + msgSprite->unk32 = (i * 0x28 + 0x14); + msgSprite->unk34 = i; + + s = &msgSprite->s; + s->graphics.dest = VramMalloc(26); + if (gLoadedSaveGame.uiLanguage == UILANG_JAPANESE) { + s->graphics.anim = SA1_ANIM_MP_PLAYER_MSG_JP; + } else { + s->graphics.anim = SA1_ANIM_MP_PLAYER_MSG_EN; + } + s->variant = message->unk40[1][i]; + s->oamFlags = SPRITE_OAM_ORDER(16); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x3000; + } + sub_80535FC(); + sub_803BEB8(); + message->unk52 = 0; + gCurTask->main = Task_803B7AC; + Task_803B7AC(); +} + +void Task_803B7AC() +{ + ChaoMessage *message; + u8 var_r6 = 0; + + MultiPakHeartbeat(); + + message = TASK_DATA(gCurTask); + message->unk52++; + + switch (message->unk54) { + case 0: + break; + case 4: + if (message->unk52 >= 0x10) { + if (message->unk48[3] != 0) { + message->unk48[3] -= 0x10; + } else { + var_r6++; + } + } + /* fallthrough */ + case 3: + if (message->unk52 > 0xAU) { + if (message->unk48[2] != 0) { + message->unk48[2] += 0x10; + } else { + var_r6++; + } + } + /* fallthrough */ + case 2: + if (message->unk52 > 5U) { + if (message->unk48[1] != 0) { + message->unk48[1] = (u16)message->unk48[1] - 0x10; + } else { + var_r6++; + } + } + if (message->unk52 != 0) { + if (message->unk48[0] != 0) { + message->unk48[0] += 0x10; + } else { + var_r6++; + } + } + break; + } + if (var_r6 == message->unk54) { + gCurTask->main = sub_803B944; + } + if (gBldRegs.bldY != 0) { + gBldRegs.bldY -= 1; + } + sub_803BE0C(); +} + +void sub_803B944() +{ + ChaoMessage *message; + u8 var_r6 = 0; + u32 i; + + MultiPakHeartbeat(); + + message = TASK_DATA(gCurTask); + + if (message->mode != 1) { + if (++message->unk52 >= 240) { + gCurTask->main = sub_803BAD4; + message->unk52 = 0; + } + + if (message->unk52 == 0x2D) { + if (message->mode == 0) { + m4aSongNumStart(SE_156); + } else { + m4aSongNumStart(SE_160); + } + } + } else { + ++message->unk52; + + for (i = 0; i < 4; i++) { + if (gMultiSioRecv[i].pat0.unk0 == 0xB0) { + var_r6 = 1; + } + } + + if ((A_BUTTON & gPressedKeys) || (message->unk52 > 0x707U) || (var_r6 != 0)) { + gCurTask->main = sub_803BAD4; + message->unk52 = 0; + if (var_r6 == 0) { + gMultiSioSend.pat0.unk0 = 0xB0; + } + } + + if (message->unk52 == 0x2D) { + if (message->unk56 == 0) { + m4aSongNumStart(SE_157); + } else if (message->unk56 == 1) { + m4aSongNumStart(SE_158); + } else { + m4aSongNumStart(SE_159); + } + } + } + sub_803BE0C(); +} + +void sub_803BAD4() +{ + ChaoMessage *message; + u8 var_r6 = 0; + + MultiPakHeartbeat(); + + message = TASK_DATA(gCurTask); + message->unk52++; + + switch (message->unk54) { + case 0: + break; + case 4: + if (message->unk52 != 0) { + if (message->unk48[3] != 240) { + message->unk48[3] += 0x10; + } else { + var_r6++; + } + } + /* fallthrough */ + case 3: + if (message->unk52 > 5) { + if (message->unk48[2] != -240) { + message->unk48[2] -= 0x10; + } else { + var_r6++; + } + } + /* fallthrough */ + case 2: + if (message->unk52 > 10) { + if (message->unk48[1] != 240) { + message->unk48[1] = (u16)message->unk48[1] + 0x10; + } else { + var_r6++; + } + } + if (message->unk52 >= 0x10) { + if (message->unk48[0] != -240) { + message->unk48[0] -= 0x10; + } else { + var_r6++; + } + } + break; + } + if (var_r6 == message->unk54) { + gCurTask->main = sub_803BC64; + } + sub_803BE0C(); +} + +void sub_803BC64() +{ + ChaoMessage *message = TASK_DATA(gCurTask); + u32 mode; + + if ((0x1F & gBldRegs.bldY) < 0x10) { + gBldRegs.bldY += 1; + sub_803BE0C(); + return; + } + + mode = message->mode; + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + if (mode == 0) { + sub_8018538(); + } else if (message->mode == 1) { + { + u16 irqEnable, irqMasterEnable, dispStat; + + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + irqEnable = REG_IE; + irqMasterEnable = REG_IME; + dispStat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + + WriteSaveGame(); + + REG_IE = irqEnable; + REG_IE; + REG_IME = irqMasterEnable; + REG_IME; + REG_DISPSTAT = dispStat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + + gFlags &= ~FLAGS_8000; + } + + CreateMultiplayerContinueScreen(); + } else { + gMultiSioEnabled = 0; + MultiSioStop(); + MultiSioInit(0); + CreateTitleScreen(TITLESCREEN_PARAM__PLAY_MUSIC); + } + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; +} + +void sub_803BE0C() +{ + s16 var_r4; + u32 var_r6; + + ChaoMessage *message = TASK_DATA(gCurTask); + + var_r4 = message->unk50; + if (message->unk50 != 0) { + SA2_LABEL(sub_80078D4)(0U, 0U, var_r4, DISPLAY_WIDTH, 0U); + } + + for (var_r6 = 0; var_r6 < message->unk54; var_r6++) { + u32 mask = 0x1FF; +#ifndef NON_MATCHING + SA2_LABEL(sub_80078D4)(0U, var_r4, var_r4 += 0x28, ~message->unk48[var_r6] & mask, (-message->unk50)); +#else + SA2_LABEL(sub_80078D4)(0U, var_r4, var_r4 + 0x28, ~message->unk48[var_r6] & mask, (-message->unk50)); + var_r4 += 0x28; +#endif + } + + if (var_r4 < DISPLAY_HEIGHT) { + SA2_LABEL(sub_80078D4)(0U, var_r4, DISPLAY_HEIGHT, DISPLAY_WIDTH, 0U); + } +} + +void sub_803BEB8(void) +{ + Strc_80528AC gfx; + ChaoMsg68 *strc68; + u8 i; + + strc68 = TASK_DATA(TaskCreate(sub_803BFE8, sizeof(ChaoMsg68), 0x2200U, 0U, TaskDestructor_803C198)); + gfx.uiGfxID = 0; + gfx.unk2B = 1; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[TM_SPECIAL_STAGE_BG_FRAME_5].palette; + gfx.vramC = VramMalloc(0xE0U); + gfx.tilesSize = 0x1C00; + gfx.paletteSize = 0x20; + gfx.unk28 = 1; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + strc68->vram64 = gfx.vramC; + strc68->unk60 = 0xA; + strc68->unk62 = 0x14; + + for (i = 0; i < 4; i++) { + GameOverB *temp_r0 = &strc68->overBs[i]; + temp_r0->qUnkA = 0xA; + temp_r0->unkC = 0x14; + temp_r0->unkE = 1; + temp_r0->unk10 = 1; + temp_r0->unk12 = 1; + temp_r0->unk16 = 1; + temp_r0->unk8 = 0; + } +} + +void sub_803BFE8() +{ + ChaoMsg68 *strc68 = TASK_DATA(gCurTask); + ChaoMessage *parent = TASK_DATA(TASK_PARENT(gCurTask)); + u8 charIndex; + u8 i; + + for (i = 0; i < parent->unk54; i++) { + for (charIndex = 0; charIndex < 6; charIndex++) { + GameOverB *overB = &strc68->overBs[i]; + overB->qUnkA = parent->unk48[i] + strc68->unk60 + (charIndex * 8); + overB->unkC = parent->unk50 + (i * 40) + strc68->unk62; + + if (SIO_MULTI_CNT->id == i) { + if ((u8)(LOADED_SAVE->playerName[charIndex] - 0x70) < 26) { + overB->unkC += 8; + } + sub_8052F78((const char *)&LOADED_SAVE->playerName[charIndex], overB); + } else { + if ((u8)(LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.playerName[charIndex] - 0x70) < 26) { + overB->unkC += 8; + } + sub_8052F78((const char *)&LOADED_SAVE->multiplayerScores[gUnknown_03005008[i]].data.split.playerName[charIndex], overB); + } + } + } +} + +void Task_803C130(void) +{ + ChaoMsgSprite *msgSprite = TASK_DATA(gCurTask); + Sprite *s = &msgSprite->s; + + ChaoMessage *message = TASK_DATA(TASK_PARENT(gCurTask)); + s->x = msgSprite->unk30 + message->unk48[msgSprite->unk34]; + s->y = msgSprite->unk32 + message->unk50; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_803C184(struct Task *t) +{ + ChaoMsgSprite *msgSprite = TASK_DATA(t); + VramFree(msgSprite->s.graphics.dest); +} + +void TaskDestructor_803C198(struct Task *t) +{ + ChaoMsg68 *strc68 = TASK_DATA(t); + VramFree(strc68->vram64); +} diff --git a/sa1/src/game/multiplayer/communication_outcome.c b/sa1/src/game/multiplayer/communication_outcome.c new file mode 100644 index 0000000000..0825642260 --- /dev/null +++ b/sa1/src/game/multiplayer/communication_outcome.c @@ -0,0 +1,370 @@ +#include "global.h" +#include "core.h" +#include "task.h" +#include "sprite.h" +#include "multi_sio.h" +#include "flags.h" + +#include "lib/m4a/m4a.h" + +#include "game/character_select.h" +#include "game/save.h" +#include "game/title_screen.h" +#include "game/multiplayer/communication_outcome.h" +#include "game/multiplayer/multipak_connection.h" +#if (GAME == GAME_SA1) +#include "game/multiplayer/results.h" +#endif + +#include "game/stage/tilemap_table.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/text.h" +#include "constants/tilemaps.h" + +struct CommunicationOutcomeScreen { + Background unk0; + Sprite spr40; + Sprite spr70; + Sprite sprA0; + Sprite sprD0; + Sprite spr100; + u8 filler130[204]; + s32 unk1FC; + u16 unk200; + u8 filler202; + u8 unk203; + u8 unk204[2]; + u8 unk206; + u8 unk207[21]; +}; /* size 0x21C */ + +static void Task_MultipackOutcomeScreen(void); + +#if (GAME == GAME_SA1) +extern const u8 gUnknown_084ADA08[2]; +extern const u16 gUnknown_084ADA10[5]; +extern const u16 sBackgroundAnims[2]; +extern const u8 sBackgroundVariants[2]; +extern const TileInfo sCommMessages[][7]; +extern u16 gUnknown_084ADA0A[2]; +extern u8 gUnknown_084ADA0E[2]; +static const u16 sTilemapIds[2] = { TM_MP_CONNECTION_SUCCESS, TM_MP_CONNECTION_ERROR }; +static const u16 sResultSongs[2] = { SE_301, SE_302 }; +#elif (GAME == GAME_SA2) +static const u16 sBackgroundAnims[2] = { SA2_ANIM_MULTIPLAYER_CHEESE_SITTING, SA2_ANIM_MULTIPLAYER_CHEESE_SITTING }; +static const u8 sBackgroundVariants[2] + = { SA2_ANIM_VARIANT_MULTIPLAYER_CHEESE_SITTING_HAPPY, SA2_ANIM_VARIANT_MULTIPLAYER_CHEESE_SITTING_SAD }; +static const TileInfo sCommMessages[][7] = { + { + TextElementAlt2(LANG_DEFAULT, SA2_ANIM_VARIANT_MP_COMM_MSG_COMMUNICATION_ERROR, 51, SA2_ANIM_MP_MSG), + TextElementAlt2(LANG_JAPANESE, SA2_ANIM_VARIANT_MP_COMM_MSG_COMMUNICATION_ERROR, 51, SA2_ANIM_MP_MSG), + TextElementAlt2(LANG_ENGLISH, SA2_ANIM_VARIANT_MP_COMM_MSG_COMMUNICATION_ERROR, 75, SA2_ANIM_MP_COMM_MSG_EN), + TextElementAlt2(LANG_GERMAN, SA2_ANIM_VARIANT_MP_COMM_MSG_COMMUNICATION_ERROR, 75, SA2_ANIM_MP_COMM_MSG_DE), + TextElementAlt2(LANG_FRENCH, SA2_ANIM_VARIANT_MP_COMM_MSG_COMMUNICATION_ERROR, 57, SA2_ANIM_MP_COMM_MSG_FR), + TextElementAlt2(LANG_SPANISH, SA2_ANIM_VARIANT_MP_COMM_MSG_COMMUNICATION_ERROR, 45, SA2_ANIM_MP_COMM_MSG_ES), + TextElementAlt2(LANG_ITALIAN, SA2_ANIM_VARIANT_MP_COMM_MSG_COMMUNICATION_ERROR, 51, SA2_ANIM_MP_COMM_MSG_IT), + }, + { + TextElementAlt2(LANG_DEFAULT, SA2_ANIM_VARIANT_MP_COMM_MSG_LETS_PLAY_WITH_2P, 66, SA2_ANIM_MP_MSG), + TextElementAlt2(LANG_JAPANESE, SA2_ANIM_VARIANT_MP_COMM_MSG_LETS_PLAY_WITH_2P, 66, SA2_ANIM_MP_MSG), + TextElementAlt2(LANG_ENGLISH, SA2_ANIM_VARIANT_MP_COMM_MSG_LETS_PLAY_WITH_2P, 68, SA2_ANIM_MP_COMM_MSG_EN), + TextElementAlt2(LANG_GERMAN, SA2_ANIM_VARIANT_MP_COMM_MSG_LETS_PLAY_WITH_2P, 88, SA2_ANIM_MP_COMM_MSG_DE), + TextElementAlt2(LANG_FRENCH, SA2_ANIM_VARIANT_MP_COMM_MSG_LETS_PLAY_WITH_2P, 60, SA2_ANIM_MP_COMM_MSG_FR), + TextElementAlt2(LANG_SPANISH, SA2_ANIM_VARIANT_MP_COMM_MSG_LETS_PLAY_WITH_2P, 68, SA2_ANIM_MP_COMM_MSG_ES), + TextElementAlt2(LANG_ITALIAN, SA2_ANIM_VARIANT_MP_COMM_MSG_LETS_PLAY_WITH_2P, 60, SA2_ANIM_MP_COMM_MSG_IT), + }, +}; +#endif + +void CreateMultipackOutcomeScreen(u8 outcome) +{ + u8 i; + u8 count; + struct Task *t; + struct CommunicationOutcomeScreen *outcomeScreen; + Sprite *s; + Background *background; + gDispCnt = 0x3140; + gBgCntRegs[0] = 0x803; + gBgScrollRegs[0][0] = 0x100; + gBgScrollRegs[0][1] = 0; + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] = 0x31; + gWinRegs[WINREG_WINOUT] = 0x31; + + gBldRegs.bldCnt = 0xBF; + gBldRegs.bldY = 0x10; + + t = TaskCreate(Task_MultipackOutcomeScreen, sizeof(struct CommunicationOutcomeScreen), 0x2000, 0, NULL); + outcomeScreen = TASK_DATA(t); + + outcomeScreen->unk203 = outcome; + outcomeScreen->unk200 = 0x78; + outcomeScreen->unk1FC = 0; + + for (i = 0, count = 0; i < 4; i++) { + if (GetBit(gMultiplayerConnections, i)) { + count++; + } + } + + outcomeScreen->unk206 = count; + +#if (GAME == GAME_SA1) + s = &outcomeScreen->sprA0; + s->x = 93; + s->y = 85; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x300; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_084ADA0A[outcome]; + s->variant = gUnknown_084ADA0E[outcome]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +#elif (GAME == GAME_SA2) + s = &outcomeScreen->spr100; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_HEIGHT - 20; + s->graphics.dest = (void *)OBJ_VRAM0; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = SA2_ANIM_MP_MSG; + s->variant = outcome + SA2_ANIM_VARIANT_MP_MSG_OK; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +#endif + +#if (GAME == GAME_SA1) + s = &outcomeScreen->spr40; + s->x = 0; + s->y = 32; + s->graphics.dest = (void *)OBJ_VRAM0; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MP_OUTCOME_MESSAGES_EN; + s->variant = outcomeScreen->unk203 + 8; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +#elif (GAME == GAME_SA2) + s = &outcomeScreen->sprD0; + s->x = DISPLAY_CENTER_X; + s->y = 36; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x2000; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = sBackgroundAnims[outcome]; + s->variant = sBackgroundVariants[outcome]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +#endif + +#if (GAME == GAME_SA1) + s = &outcomeScreen->spr70; + s->x = 0; + s->y = 21; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x180; + s->oamFlags = SPRITE_OAM_ORDER(16); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_OPTS_BLACK_RECT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +#elif (GAME == GAME_SA2) + s = &outcomeScreen->sprA0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_HEIGHT - 40; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x4000; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = sBackgroundAnims[outcome]; + s->variant = sBackgroundVariants[outcome]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +#endif + + background = &outcomeScreen->unk0; + background->graphics.dest = (void *)BG_SCREEN_ADDR(0); + background->graphics.anim = 0; + background->layoutVram = (void *)BG_SCREEN_ADDR(8); + background->unk18 = 0; + background->unk1A = 0; + background->unk1E = 0; + background->unk20 = 0; + background->unk22 = 0; + background->unk24 = 0; + background->targetTilesX = 0x1E; + background->targetTilesY = 0x14; + background->paletteOffset = 0; + background->flags = BACKGROUND_FLAGS_BG_ID(0); +#if (GAME == GAME_SA1) + background->tilemapId = sTilemapIds[outcome]; + DrawBackground(background); +#elif (GAME == GAME_SA2) + background->tilemapId = TM_MP_MESSAGE_BOX_UNKNOWN; + DrawBackground(background); + m4aMPlayAllStop(); +#endif + +#if (GAME == GAME_SA1) + m4aSongNumStart(sResultSongs[outcome]); +#elif (GAME == GAME_SA2) + if (outcome != OUTCOME_CONNECTION_SUCCESS) { + m4aSongNumStart(MUS_VS_MISS); + } else { + m4aSongNumStart(MUS_VS_SUCCESS); + } +#endif +} + +static void Task_MultipackOutcomeScreen(void) +{ + Sprite *s; + struct CommunicationOutcomeScreen *outcomeScreen = TASK_DATA(gCurTask); + u32 i; + + s = &outcomeScreen->sprA0; + UpdateSpriteAnimation(s); +#if (GAME == GAME_SA2) + DisplaySprite(s); +#endif + + if (outcomeScreen->unk203 == OUTCOME_CONNECTION_SUCCESS) { +#if (GAME == GAME_SA1) + u32 unk206 = outcomeScreen->unk206; + u32 offset; + s->x = gUnknown_084ADA10[outcomeScreen->unk206]; + + while (unk206 != 0) { + DisplaySprite(s); + s->x += 0x2A; + unk206--; + } +#elif (GAME == GAME_SA2) + const TileInfo *unk9090; + u32 unk206 = outcomeScreen->unk206; + u32 offset; + s = &outcomeScreen->sprD0; + unk9090 = sCommMessages[0]; + offset = LOADED_SAVE->language + 7; + + s->graphics.anim = unk9090[offset].anim; + offset = LOADED_SAVE->language + 7; + s->variant = unk9090[offset].variant + unk206 - 2; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + DisplaySprite(s); +#endif + } else { +#if (GAME == GAME_SA1) + DisplaySprite(s); +#elif (GAME == GAME_SA2) + const TileInfo *unk9090; + s = &outcomeScreen->sprD0; + unk9090 = sCommMessages[0]; + + s->graphics.anim = unk9090[LOADED_SAVE->language].anim; + s->variant = unk9090[LOADED_SAVE->language].variant; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + DisplaySprite(s); +#endif + } + +#if (GAME == GAME_SA1) + { + s32 unk203 = gUnknown_084ADA08[outcomeScreen->unk203]; + s32 v, v0; + + outcomeScreen->unk1FC += 0x80; + if (outcomeScreen->unk1FC > Q(unk203)) { + outcomeScreen->unk1FC -= Q(unk203); + } + s = &outcomeScreen->spr40; + UpdateSpriteAnimation(s); + + v0 = I(outcomeScreen->unk1FC) - unk203; + while (251 - v0 > -11) { + s->x = 251 - v0; + DisplaySprite(s); + v0 += unk203; + } + s = &outcomeScreen->spr70; + s->y = 21; + for (i = 0; i < 8; i++) { + s->x = i << 5; + DisplaySprite(s); + } + } +#elif (GAME == GAME_SA2) + s = &outcomeScreen->spr100; + UpdateSpriteAnimation(s); + DisplaySprite(s); +#endif + + if (outcomeScreen->unk200 != 0) { + outcomeScreen->unk200--; + if (gBldRegs.bldY != 0) { + gBldRegs.bldY--; + } + return; + } + + if (gBldRegs.bldY != 0x10) { + gBldRegs.bldY++; + } else { + u8 outcome = outcomeScreen->unk203; + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + if (outcome == OUTCOME_CONNECTION_SUCCESS) { + +#if (GAME == GAME_SA1) + CreateMultiplayerResultsScreen(0); +#elif (GAME == GAME_SA2) + CreateCharacterSelectionScreen(gSelectedCharacter, gMultiplayerUnlockedCharacters & CHARACTER_BIT(CHARACTER_AMY)); +#endif + } else { + gMultiSioEnabled = FALSE; + MultiSioStop(); + MultiSioInit(0); + + gTilemapsRef = (Tilemap **)gTilemaps; +#if (GAME == GAME_SA1) + CreateMainMenu(1); +#elif (GAME == GAME_SA2) + CreateTitleScreenAndSkipIntro(); +#endif + } + } +} diff --git a/sa1/src/game/multiplayer/continue_screen.c b/sa1/src/game/multiplayer/continue_screen.c new file mode 100644 index 0000000000..1c0dafea89 --- /dev/null +++ b/sa1/src/game/multiplayer/continue_screen.c @@ -0,0 +1,350 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "malloc_vram.h" +#include "game/game_over.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/multiplayer/results.h" +#include "game/save.h" +#include "game/stage/ui.h" + +#include "constants/text.h" + +typedef struct ContinueScreen { + Background bg; + Sprite sprites[3]; + Sprite sprD0; + Sprite spr100; + Sprite spr130; + StrcUi_805423C strc160; + u8 unk16C; + u16 unk16E; + u8 unk170; +} ContinueScreen; /* 0x174 */ + +void Task_MultiplayerContinueScreen(void); +void TaskDestructor_MultiplayerContinueScreen(struct Task *t); +void sub_806B534(void); +void sub_806B5A4(void); +extern void sub_8018538(void); + +extern u16 gUnknown_0868B76C[3][UILANG_COUNT]; +extern u8 gUnknown_0868B778[3][UILANG_COUNT]; +extern AnimId gUnknown_0868B782[UILANG_COUNT]; +extern AnimId gUnknown_0868B786[UILANG_COUNT]; +extern u8 gUnknown_0868B77E[3]; +extern u8 gUnknown_0868B78A[3][2]; +extern u8 gUnknown_0868B790[3]; + +void CreateMultiplayerContinueScreen(void) +{ + s32 uiLang; + Background *bg; + StrcUi_805423C *strc160; + s32 temp_r4; + s8 *temp_r0_2; + s8 *temp_r0_3; + ContinueScreen *screen; + u8 *temp_r1_2; + u8 *temp_r1_3; + u8 *temp_r1_4; + u8 i; + Sprite *s; + + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + m4aSongNumStart(0x9BU); + uiLang = LOADED_SAVE->uiLanguage; + + for (i = 0; i < 10; i++) { + gKeysFirstRepeatIntervals[i] = 0x14; + gKeysContinuedRepeatIntervals[i] = 8; + } + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x1E00; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + + screen = TASK_DATA( + TaskCreate(Task_MultiplayerContinueScreen, sizeof(ContinueScreen), 0x2000U, 0U, TaskDestructor_MultiplayerContinueScreen)); + strc160 = &screen->strc160; + screen->unk16C = 0; + screen->unk16E = 0; + screen->unk170 = 0; + bg = &screen->bg; + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0; + bg->layoutVram = (u16 *)(BG_VRAM + 0xF000); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = 0x50; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 20; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + for (i = 0; i < 3; i++) { + s = &screen->sprites[i]; + s->graphics.dest = VramMalloc(gUnknown_0868B77E[i]); + s->graphics.anim = gUnknown_0868B76C[i][uiLang]; + s->variant = gUnknown_0868B778[i][uiLang]; + s->x = gUnknown_0868B78A[i][0]; + s->y = gUnknown_0868B78A[i][1]; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0; + } + + s = &screen->sprD0; + s->graphics.dest = VramMalloc(0x1CU); + s->graphics.anim = 0x35A; + screen->sprD0.variant = 0; + s->x = 23; + s->y = 57; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0; + + s = &screen->spr100; + s->graphics.dest = VramMalloc(0x23U); + s->graphics.anim = gUnknown_0868B782[UILANG_ENGLISH]; + s->variant = gUnknown_0868B786[UILANG_ENGLISH]; + s->x = 101; + s->y = 81; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0; + s = &screen->spr130; + + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->graphics.dest = VramMalloc(0xCU); + s->oamFlags = 0x80; + s->graphics.size = 0; + s->graphics.anim = 0x389; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + screen->spr130.animSpeed = 0x10; + screen->spr130.palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + strc160->unk0 = 0; + strc160->unk2 = 1; + strc160->unk4 = 2; + strc160->unk6 = 0; + strc160->unk8 = 0x100; + strc160->unkA = 0x10; + sub_805423C(strc160); +} + +void Task_MultiplayerContinueScreen() +{ + Sprite *s; + StrcUi_805423C *strc160; + s16 *temp_r1_2; + s32 var_r5; + s8 *temp_r2_2; + s8 *temp_r5; + s8 var_r0; + u16 temp_r0; + u32 var_r2_2; + u32 var_r3; + u8 *var_r2; + u8 temp_r0_2; + u8 temp_r4; + + ContinueScreen *screen = TASK_DATA(gCurTask); + union MultiSioData *recv_send; + + strc160 = &screen->strc160; + if (screen->unk16E > 120) { + if (IS_MULTI_PLAYER) { + for (var_r3 = 0; var_r3 < 4 && GetBit(gMultiplayerConnections, var_r3); var_r3++) { + if (!CheckBit(gMultiSioStatusFlags, var_r3)) { + if (gMultiplayerMissingHeartbeats[var_r3]++ > 0xB4U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[var_r3] = 0; + } + } + } + } else { + screen->unk16E++; + } + + if (sub_805423C(strc160) != 0) { + gDispCnt &= 0x9FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + recv_send = &gMultiSioRecv[0]; + if (recv_send->pat0.unk0 == 0xA0) { + if (screen->unk16C != recv_send->pat0.unk2) { + m4aSongNumStart(0x6CU); + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_CHILD) { + screen->unk16C = recv_send->pat0.unk2; + } + } + } else if (recv_send->pat0.unk0 == 0xA1) { + if (screen->unk16C != recv_send->pat0.unk2) { + m4aSongNumStart(0x6CU); + screen->unk16C = recv_send->pat0.unk2; + } + + m4aSongNumStart(0x6AU); + strc160->unk4 = 1; + strc160->unk6 = 0; + gCurTask->main = sub_806B534; + } + + recv_send = &gMultiSioSend; + recv_send->pat0.unk0 = 0xA0; + recv_send->pat0.unk2 = screen->unk16C; + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) { + if (screen->unk170 == 0) { + if ((DPAD_RIGHT & gRepeatedKeys)) { + screen->unk16C = 1; + } else if ((DPAD_LEFT & gRepeatedKeys)) { + screen->unk16C = 0; + } + + recv_send->pat0.unk2 = (u8)screen->unk16C; + if (A_BUTTON & gPressedKeys) { + var_r5 = 1; + for (var_r2_2 = 0; var_r2_2 < 4; var_r2_2++) { + if (var_r2_2 != SIO_MULTI_CNT->id) { + struct MultiSioData_0_0 *pat0; + if (!GetBit(gMultiplayerConnections, var_r2_2)) { + break; + } + + recv_send = &gMultiSioRecv[var_r2_2]; + if (recv_send->pat0.unk0 != 0xA0) { + var_r5 = 0; + } + } + } + + if (var_r5 != 0) { + gMultiSioSend.pat0.unk0 = 0xA1; + screen->unk170 = 1; + } + } + } else { + recv_send->pat0.unk0 = 0xA1; + } + } else { + s = &screen->spr130; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + + s = &screen->spr100; + s->graphics.anim = gUnknown_0868B782[screen->unk16C]; + s->variant = (u8)gUnknown_0868B786[screen->unk16C]; + sub_806B5A4(); + return; +} + +void sub_806B534(void) +{ + ContinueScreen *screen; + u8 temp_r4_2; + + screen = TASK_DATA(gCurTask); + if (sub_805423C(&screen->strc160)) { + gDispCnt &= ~0xE000; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + temp_r4_2 = screen->unk16C; + m4aSongNumStop(0x9BU); + TaskDestroy(gCurTask); + + if (temp_r4_2 == 0) { + sub_8018538(); + } else { + CreateMultiplayerResultsScreen(2U); + } + + // return after TaskDestroy()! + return; + } else { + sub_806B5A4(); + } +} + +void sub_806B5A4(void) +{ + Sprite *s; + ContinueScreen *screen; + u8 temp_r7; + u8 i; + u8 unk16C; + + screen = TASK_DATA(gCurTask); + unk16C = screen->unk16C; + + for (i = 0; i < 3; i++) { + s = &screen->sprites[i]; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + s = &screen->sprD0; + s->x = gUnknown_0868B790[unk16C]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &screen->spr100; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_MultiplayerContinueScreen(struct Task *t) +{ + ContinueScreen *screen = TASK_DATA(t); + u8 i; + + for (i = 0; i < 3; i++) { + VramFree(screen->sprites[i].graphics.dest); + } + + VramFree(screen->sprD0.graphics.dest); + VramFree(screen->spr100.graphics.dest); + VramFree(screen->spr130.graphics.dest); +} diff --git a/sa1/src/game/multiplayer/finish.c b/sa1/src/game/multiplayer/finish.c new file mode 100644 index 0000000000..6c69cdb8b7 --- /dev/null +++ b/sa1/src/game/multiplayer/finish.c @@ -0,0 +1,601 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "task.h" +#include "game/save.h" + +#include "game/stage/player.h" +#include "game/stage/camera.h" + +#include "game/multiplayer/finish.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/results.h" +#include "game/multiplayer/multiplayer_event_mgr.h" + +#include "game/multiboot/collect_rings/results.h" + +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/text.h" + +#if (GAME == GAME_SA1) && !(defined NON_MATCHING) +// Once CreateMultiplayerFinishHandler matches in SA1, +// this can go away. +#if !CPU_ARCH_X86 && defined(__APPLE__) +asm(" .section __DATA,__data"); +#else +asm(" .section .rodata"); +#endif +asm(".align 2, 0"); +asm(".global gUnknown_080BB490"); +asm("gUnknown_080BB490:"); +// NOTE: +// As long as gUnknown_080BB490 is above data with this layout, this works out: +// asm(".byte 0, 1, 2, 3:"); +// But once CreateMultiplayerFinishHandler matches, +// the label won't be necessary. It's only here because +// the asm file out of asm/non_matching/ references it. +#endif + +typedef struct { + Sprite s; + u8 unk30; + u8 unk31; +} MpFinish1; /* size: 0x34 */ + +typedef struct { + u16 unk0; +} Finish2; /* size: 4 */ + +void SA2_LABEL(Task_801A04C)(void); +void Task_TransitionToResultsScreen(void); + +void SA2_LABEL(Task_8019E70)(void); +void SA2_LABEL(TaskDestructor_8019EF4)(struct Task *); + +#ifndef COLLECT_RINGS_ROM + +// TODO: split finish result +#if (GAME == GAME_SA1) +extern const TileInfo sMPFinishTileInfo[2][7]; +#elif (GAME == GAME_SA2) +const TileInfo sMPFinishTileInfo[2][7] = { { + // Japanese + { 0, SA2_ANIM_MP_RESULT_JP, SA2_ANIM_MP_RESULT_WIN }, + { 0, SA2_ANIM_MP_RESULT_JP, SA2_ANIM_MP_RESULT_LOSE }, + { 0, SA2_ANIM_MP_RESULT_JP, SA2_ANIM_MP_RESULT_DRAW }, + { 0, SA2_ANIM_MP_RESULT_JP, SA2_ANIM_MP_RESULT_1ST }, + { 0, SA2_ANIM_MP_RESULT_JP, SA2_ANIM_MP_RESULT_2ND }, + { 0, SA2_ANIM_MP_RESULT_JP, SA2_ANIM_MP_RESULT_3RD }, + { 0, SA2_ANIM_MP_RESULT_JP, SA2_ANIM_MP_RESULT_4TH }, + }, + { + // English + { 0, SA2_ANIM_MP_RESULT, SA2_ANIM_MP_RESULT_WIN }, + { 0, SA2_ANIM_MP_RESULT, SA2_ANIM_MP_RESULT_LOSE }, + { 0, SA2_ANIM_MP_RESULT, SA2_ANIM_MP_RESULT_DRAW }, + { 0, SA2_ANIM_MP_RESULT, SA2_ANIM_MP_RESULT_1ST }, + { 0, SA2_ANIM_MP_RESULT, SA2_ANIM_MP_RESULT_2ND }, + { 0, SA2_ANIM_MP_RESULT, SA2_ANIM_MP_RESULT_3RD }, + { 0, SA2_ANIM_MP_RESULT, SA2_ANIM_MP_RESULT_4TH }, + } }; + +#define GET_MP_FINISH_RESULT_TILE_INFO(_id) \ + ({ \ + const TileInfo *source; \ + u8 *info = (u8 *)sMPFinishTileInfo; \ + \ + s32 index; \ + \ + index = ((LOADED_SAVE->language == LANG_DEFAULT) || (LOADED_SAVE->language == LANG_JAPANESE)) ? 0 : (7 * sizeof(TileInfo)); \ + source = (TileInfo *)(info + index); \ + \ + (source + (_id)); \ + }) +#endif + +void CreateMultiplayerFinishResult(u8 sioId, u8 count) +{ + u32 i = 0; + +#if (GAME == GAME_SA2) + if (gMultiplayerRanks[sioId] == -1) +#endif + { + struct Task *t = TaskCreate(SA2_LABEL(Task_8019E70), sizeof(MpFinish1), 0x2010, 0, SA2_LABEL(TaskDestructor_8019EF4)); + MpFinish1 *finish = TASK_DATA(t); + struct Task **mpt = &gMultiplayerPlayerTasks[0]; + Sprite *s; + + for (; i < ARRAY_COUNT(gMultiplayerPlayerTasks); i++) { + if (*mpt == NULL) + break; + else + mpt++; + } + + if (count < 6) { + gMultiplayerRanks[sioId] = count; + } else { + // BUG(?): Value underflows if i is 0 + gMultiplayerRanks[sioId] = i - 1; + } + + finish->unk30 = sioId; + finish->unk31 = count; + + s = &finish->s; + s->graphics.size = 0; + +#if (GAME == GAME_SA1) + s->graphics.anim = 904; + + if (count == 5) { + s->variant = 1; + s->graphics.dest = VramMalloc(12); + } else if (count == 4) { + s->variant = 2; + s->graphics.dest = VramMalloc(12); + } else if ((i == 2) || (gGameMode == GAME_MODE_CHAO_HUNT) || (gGameMode == GAME_MODE_MULTI_PLAYER) + || (gGameMode == GAME_MODE_TEAM_PLAY)) { + s->variant = count; + s->graphics.dest = VramMalloc(12); + } else { + s->variant = count + 3; + s->graphics.dest = VramMalloc(8); + } +#elif (GAME == GAME_SA2) + s->graphics.dest = VramMalloc(12); + if (count == 5) { + s->graphics.anim = GET_MP_FINISH_RESULT_TILE_INFO(1)->anim; + s->variant = GET_MP_FINISH_RESULT_TILE_INFO(1)->variant; + } else if (count == 4) { + s->graphics.anim = GET_MP_FINISH_RESULT_TILE_INFO(2)->anim; + s->variant = GET_MP_FINISH_RESULT_TILE_INFO(2)->variant; + } else if ((i == 2) || gGameMode == GAME_MODE_TEAM_PLAY) { + s->graphics.anim = GET_MP_FINISH_RESULT_TILE_INFO(0)->anim; + s->variant = count + GET_MP_FINISH_RESULT_TILE_INFO(0)->variant; + } else { + s->graphics.anim = GET_MP_FINISH_RESULT_TILE_INFO(3)->anim; + s->variant = count + GET_MP_FINISH_RESULT_TILE_INFO(3)->variant; + } +#endif + + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + } +} + +void SA2_LABEL(Task_8019E70)(void) +{ + MpFinish1 *finish = TASK_DATA(gCurTask); + Sprite *s = &finish->s; + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[finish->unk30]); + + s->x = mpp->pos.x - gCamera.x; + + if (!GRAVITY_IS_INVERTED) { + s->y = (mpp->pos.y - gCamera.y) - 32; + } else { + s->y = (mpp->pos.y - gCamera.y) + 32; + } + + DisplaySprite(s); +} + +void SA2_LABEL(TaskDestructor_8019EF4)(struct Task *t) +{ + MpFinish1 *finish = TASK_DATA(t); + Sprite *s = &finish->s; + VramFree(s->graphics.dest); +} + +#if (GAME == GAME_SA1) +extern const u8 gUnknown_080BB490[4]; +// (97.32%) https://decomp.me/scratch/nE6RC +NONMATCH("asm/non_matching/game/multiplayer/finish__CreateMultiplayerFinishHandler.inc", void CreateMultiplayerFinishHandler(void)) +#elif (GAME == GAME_SA2) +void CreateMultiplayerFinishHandler(void) +#endif +{ + u32 i; + u32 r2; + u8 r6; +#if (GAME == GAME_SA1) +#ifndef NON_MATCHING + u8 arr[4]; + u8 arr2[4]; + // Once CreateMultiplayerFinishHandler matches in SA1, + // this can go away. + memcpy(arr, &gUnknown_080BB490, 4); + memset(arr2, 0, 4); +#else + u8 arr[4] = { 0, 1, 2, 3 }; + u8 arr2[4] = { 0 }; +#endif +#endif + { + struct Task *mpt; + struct Task *t = TaskCreate(SA2_LABEL(Task_801A04C), sizeof(Finish2), 0x2000, 0, NULL); + Finish2 *f2 = TASK_DATA(t); + + // from M2C + u32 var_r6; + u32 var_r4; + u32 var_ip; + u8 *temp_r1_4; + u8 var_r5; + // end of m2c vars + + f2->unk0 = 0; + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#if (GAME == GAME_SA1) + gMusicManagerState.unk0 = 0xFF; + m4aSongNumStart(304); +#endif + } else { +#if (GAME == GAME_SA2) + return; +#endif + } + +#if (GAME == GAME_SA1) + if (gGameMode == 4) { + *((u32 *)arr2) = *((u32 *)gMultiplayerCharRings); + + for (var_r6 = 0, var_ip = 3; var_r6 < 4; var_r6++) { + u32 var_r8 = var_ip; + for (var_r4 = 0; var_r4 < var_r8; var_r4++) { + if (arr2[var_r4 + 0] < arr2[var_r4 + 1]) { + XOR_SWAP(arr2[var_r4 + 0], arr2[var_r4 + 1]); + XOR_SWAP(arr[var_r4 + 0], arr[var_r4 + 1]); + } + } +#ifndef NON_MATCHING + asm("mov r1, #1\n" + "neg r1, r1\n" + "add %0, r1" + : "=r"(var_ip)); +#else + var_ip--; +#endif + } + for (var_r6 = 0; var_r6 < 4; var_r6++) { + u8 *ptr = &arr[var_r6]; + + if (var_r6 != 0) { + if (arr2[var_r6] != arr2[0]) { + gMultiplayerRanks[*ptr] = 1; + } else { + gMultiplayerRanks[*ptr] = 4; + } + } else if (arr2[0] == arr2[1]) { + gMultiplayerRanks[*ptr] = 4; + } else { + gMultiplayerRanks[arr[0]] = var_r6; + } + } + + for (var_r6 = 0; var_r6 < 4; var_r6++) { + if (gMultiplayerPlayerTasks[var_r6] != NULL) { + CreateMultiplayerFinishResult(var_r6, (u8)gMultiplayerRanks[var_r6]); + } + } + } else if (gGameMode == 5) { + for (var_r6 = 0; var_r6 < 4 && (gMultiplayerPlayerTasks[var_r6] != NULL); var_r6++) { + temp_r1_4 = &arr2[(gMultiplayerConnections & (0x10 << var_r6)) >> (var_r6 + 4)]; + *temp_r1_4 += gMultiplayerCharRings[var_r6]; + } + + if ((u32)arr2[0] < (u32)arr2[1]) { + XOR_SWAP(arr2[0], arr2[1]) + XOR_SWAP(arr[0], arr[1]) + } + if (arr2[0] == arr2[1]) { + for (var_r6 = 0; var_r6 < 4; var_r6++) { + if (gMultiplayerPlayerTasks[var_r6] != NULL) { + gMultiplayerRanks[var_r6] = 4; + } + } + } else { + for (var_r6 = 0; var_r6 < 4; var_r6++) { + if (gMultiplayerPlayerTasks[var_r6] != NULL) { + if (((gMultiplayerConnections & (0x10 << var_r6)) >> (var_r6 + 4)) == arr[0]) { + gMultiplayerRanks[var_r6] = 0; + } else { + gMultiplayerRanks[var_r6] = 1; + } + } + } + } + for (var_r6 = 0; var_r6 < 4; var_r6++) { + if (gMultiplayerPlayerTasks[var_r6] != NULL) { + CreateMultiplayerFinishResult(var_r6, gMultiplayerRanks[var_r6]); + } + } + } else if (gGameMode != 6) { + LOADED_SAVE->score += (s16)gRingCount; + if (((u32)gCourseTime > MAX_COURSE_TIME) || ((STAGE_FLAG__TIMER_REVERSED & gStageFlags) && (gCourseTime == 0))) { + u32 var_r2 = 0; + if ((gGameMode != 3) && (gGameMode != 5)) { + for (var_r4 = 0; var_r4 < 4 && (gMultiplayerPlayerTasks[var_r4] != NULL); var_r4++) { + if (gMultiplayerRanks[var_r4] != -1) { + var_r2 += 1; + } + } + + if (var_r2 == 0) { + var_r5 = 4; + } else if (var_r2 == (var_r4 - 1)) { + var_r5 = (u8)var_r2; + } else { + var_r5 = 5; + } + } else { + var_r5 = 4; + } + + for (var_r4 = 0; var_r4 < 4 && (gMultiplayerPlayerTasks[var_r4] != NULL); var_r4++) { + if ((gMultiplayerRanks[var_r4] == -1) || (gGameMode == 3) || (gGameMode == 5)) { + CreateMultiplayerFinishResult(var_r4, var_r5); + } + } + } + } +#elif (GAME == GAME_SA2) + gMusicManagerState.unk0 = 0xFF; + LOADED_SAVE->score += (s16)gRingCount; + + if (gCourseTime <= MAX_COURSE_TIME) { + if (!(gStageFlags & STAGE_FLAG__TIMER_REVERSED) || (gCourseTime != 0)) { + return; + } + } + + r2 = 0; + + if (gGameMode != GAME_MODE_TEAM_PLAY) { + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + if (gMultiplayerPlayerTasks[i] == NULL) { + break; + } + + if (gMultiplayerRanks[i] != -1) { + r2++; + } + } + + if (r2 == 0) { + r6 = 4; + } else if (r2 == (i - 1)) { + r6 = r2; + } else { + r6 = 5; + } + } else { + r6 = 4; + } + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + if (gMultiplayerPlayerTasks[i] == NULL) { + break; + } + + if (gMultiplayerRanks[i] == -1) { + MultiplayerPlayer *mpp; + mpt = gMultiplayerPlayerTasks[i]; + mpp = TASK_DATA(mpt); + mpp->unk5C |= 1; + CreateMultiplayerFinishResult(i, r6); + } + } +#endif + } +} +#if (GAME == GAME_SA1) +END_NONMATCH +#endif + +#endif // COLLECT_RINGS_ROM + +void SA2_LABEL(Task_801A04C)(void) +{ + u32 x = 0; + Finish2 *f2 = TASK_DATA(gCurTask); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + x = DISPLAY_WIDTH; + } + + if (gRoomEventQueueWritePos == gRoomEventQueueSendPos) { + if (f2->unk0++ > x) { + gBldRegs.bldCnt = (BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_ALL); + gBldRegs.bldY = 0; + + m4aMPlayFadeOut(&gMPlayInfo_BGM, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 4); + + f2->unk0 = 0; + gCurTask->main = Task_TransitionToResultsScreen; + } + } +} + +#if 01 +void Task_TransitionToResultsScreen(void) +{ + u32 i; // r7 + + Finish2 *f2 = TASK_DATA(gCurTask); + f2->unk0 += Q(0.25); + + gBldRegs.bldY = I(f2->unk0); + + if (f2->unk0 >= 0x1000) { + // _0801A110 + gBldRegs.bldCnt = (BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_ALL); + gBldRegs.bldY = 0; + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + u8 sp00[4] = { 0, 1, 2, 3 }; + u8 sp04[4] = { 0 }; + +#if (GAME == GAME_SA2) + m4aMPlayAllStop(); +#endif + *((u32 *)sp04) = *((u32 *)gMultiplayerCharRings); + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + s32 m; + + for (m = 0; m < (3 - i); m++) { + if (sp04[m] < sp04[m + 1]) { + XOR_SWAP(sp04[m], sp04[m + 1]); + XOR_SWAP(sp00[m], sp00[m + 1]); + } + } + } + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + + if (i != 0) { + if (sp04[i] != sp04[0]) { + gMultiplayerRanks[sp00[i]] = i; + gMultiplayerCharacters[sp00[i]] = 1; + } else { +#ifndef NON_MATCHING + // TODO: Match without goto + goto else_block; +#else + gMultiplayerRanks[sp00[i]] = i; + gMultiplayerCharacters[sp00[i]] = 2; +#endif + } + } else { + // _0801A1F4 + if (sp04[0] == sp04[1]) { +#ifndef NON_MATCHING + else_block: +#endif + gMultiplayerRanks[sp00[i]] = i; + gMultiplayerCharacters[sp00[i]] = 2; + } else { + gMultiplayerRanks[sp00[0]] = i; + gMPRingCollectWins[sp00[0]]++; + gMultiplayerCharacters[sp00[0]] = i; + } + } + } + +#if (GAME == GAME_SA2) + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#ifndef NON_MATCHING + // TODO: Match without goto + goto _0801A2DA; +#else + TasksDestroyAll(); + + { // TODO: This is a macro! + PAUSE_BACKGROUNDS_QUEUE(); + gUnknown_03005390 = 0; + PAUSE_GRAPHICS_QUEUE(); + } + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + DmaFill32(3, 0, &gMultiSioSend, sizeof(struct MultiSioData_0_0)); + CreateMultiplayerResultsScreen(1); + } else { + DmaFill32(3, 0, &gMultiSioSend, sizeof(struct MultiSioData_0_0)); + CreateMultiplayerSinglePakResultsScreen(1); + } + + return; +#endif + } +#endif + } + // _0801A232 + +#if (GAME == GAME_SA2) && !(defined COLLECT_RINGS_ROM) + { + s16 pid; + s32 foeResult; + s16 ownResult = 0; + for (pid = 0; pid < MULTI_SIO_PLAYERS_MAX; pid++) { + + if (!((gMultiplayerConnections >> pid) & 0x1)) + continue; + + if (pid == SIO_MULTI_CNT->id) + continue; + + if (gMultiplayerRanks[SIO_MULTI_CNT->id] < gMultiplayerRanks[pid]) { + foeResult = 0; + } else if (gMultiplayerRanks[SIO_MULTI_CNT->id] > gMultiplayerRanks[pid]) { + foeResult = 1; + ownResult = 1; + } else { + foeResult = 2; + + if (ownResult != 1) { + ownResult = 2; + } + } + // _0801A2A8 + RecordMultiplayerResult(gMultiplayerIds[pid], &gMultiplayerNames[pid][0], foeResult); + } + + RecordOwnMultiplayerResult(ownResult); + WriteSaveGame(); + } +#endif +#ifndef NON_MATCHING + _0801A2DA: +#endif + TasksDestroyAll(); + + { // TODO: This is a macro! + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + } + +#ifndef COLLECT_RINGS_ROM + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + DmaFill32(3, 0, &gMultiSioSend, sizeof(struct MultiSioData_0_0)); + CreateMultiplayerResultsScreen(1); + } else +#endif + { +#ifndef COLLECT_RINGS_ROM + DmaFill32(3, 0, &gMultiSioSend, sizeof(struct MultiSioData_0_0)); +#endif + CreateMultiplayerSinglePakResultsScreen(1); + } + + return; + } +} +#endif + +#if COLLECT_RINGS_ROM +void CreateMultiplayerFinishHandler(void) +{ + u32 i; + u32 r2; + u8 r6; + struct Task *mpt; + struct Task *t = TaskCreate(SA2_LABEL(Task_801A04C), sizeof(Finish2), 0x2000, 0, NULL); + Finish2 *f2 = TASK_DATA(t); + f2->unk0 = 0; +} +#endif diff --git a/sa1/src/game/multiplayer/hud.c b/sa1/src/game/multiplayer/hud.c new file mode 100644 index 0000000000..3d016d14a0 --- /dev/null +++ b/sa1/src/game/multiplayer/hud.c @@ -0,0 +1,234 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/text.h" +#include "constants/tilemaps.h" +#include "constants/zones.h" + +/* Used by Chao Hunt and Collect Rings as HUD task */ + +typedef struct ChaoHuntHUD { + Sprite s0; + Sprite spritesA[11]; + Sprite spritesB[11]; +} ChaoHuntHUD; + +void Task_ChaoHuntHUD(void); +void TaskDestructor_ChaoHuntHUD(struct Task *t); + +extern const u8 SA2_LABEL(gUnknown_080E0234)[60]; + +void CreateChaoHuntHUD(void) +{ + Sprite *s; + u32 i; + + ChaoHuntHUD *hud = TASK_DATA(TaskCreate(Task_ChaoHuntHUD, sizeof(ChaoHuntHUD), 0x2000U, 0U, TaskDestructor_ChaoHuntHUD)); + + s = &hud->s0; + s->x = 0; + s->y = 8; + s->oamFlags = SPRITE_OAM_ORDER(5); + s->graphics.size = 0; + if (gGameMode == 6) { + s->graphics.dest = VramMalloc(12); + s->graphics.anim = SA1_ANIM_COLLECT_RINGS_COUNTER_BACKDROP; + s->variant = 0; + } else { + s->graphics.dest = VramMalloc(16); + s->graphics.anim = SA1_ANIM_CHAO_HUNT_COUNTER_BACKDROP; + s->variant = 0; + } + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x40000; + UpdateSpriteAnimation(s); + + for (i = 0; i < 11; i++) { + s = &hud->spritesA[i]; + s->x = 0; + s->y = 0; + if (i == 0) { + s->graphics.dest = VramMalloc(22); + } else { + s->graphics.dest = hud->spritesA[0].graphics.dest + (i * (2 * TILE_SIZE_4BPP)); + } + s->oamFlags = 0x100; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MP_TIMER_DIGITS; + s->variant = i; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &hud->spritesB[i]; + s->x = 0; + s->y = 0; + if (i == 0) { + s->graphics.dest = VramMalloc(22); + } else { + s->graphics.dest = hud->spritesB[0].graphics.dest + (i * (2 * TILE_SIZE_4BPP)); + } + s->oamFlags = 0x100; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MP_TIMER_DIGITS; + s->variant = i + 11; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } +} + +// (84.64%) https://decomp.me/scratch/y4y6F +NONMATCH("asm/non_matching/game/multiplayer/results_2__Task_ChaoHuntHUD.inc", void Task_ChaoHuntHUD(void)) +{ + ChaoHuntHUD *hud; + Sprite *s0; + Sprite *s; + Sprite *timerSprites; + u16 temp_r0; + u16 temp_r5; + u16 var_r0; + u16 var_r4; + u32 var_r2; + u8 var_r2_2; + u32 var_r5; + u8 var_sb; + + hud = TASK_DATA(gCurTask); + + // Show the red timer every 2 frames, lasting 2 frames + if (((u32)gCourseTime < TIME(1, 0)) && (gCourseTime & 2)) { + timerSprites = hud->spritesB; + } else { + timerSprites = hud->spritesA; + } + if (!(1 & gStageFlags) && (gCourseTime < TIME(1, 0)) && (Mod(gCourseTime, 60) == 0)) { + m4aSongNumStart(SE_TIMER); + } + s = &timerSprites[10]; + s->y = 32; + s->x = 24; + DisplaySprite(s); + s->x = 0x30; + DisplaySprite(s); + temp_r5 = Div(gCourseTime, 60); + var_r4 = SA2_LABEL(gUnknown_080E0234)[gCourseTime - (temp_r5 * 60)]; + s = &timerSprites[var_r4 >> 4]; + s->x = 56; + s->y = 32; + DisplaySprite(s); + s = &timerSprites[0xF & var_r4]; + s->x = 64; + s->y = 32; + DisplaySprite(s); + var_r4 = Div(temp_r5, 60); + temp_r0 = Base10DigitsToHexNibbles((temp_r5 - (var_r4 * 60))); + s = &timerSprites[(temp_r0 >> (1 * 4)) & 0xF]; + s->x = 32; + s->y = 32; + DisplaySprite(s); + s = &timerSprites[0xF & temp_r0]; + s->x = 40; + s->y = 32; + DisplaySprite(s); + s = &timerSprites[0xF & Base10DigitsToHexNibbles((var_r4 - (Div(var_r4, 60) * 60)))]; + s->x = 16; + s->y = 32; + DisplaySprite(s); + + for (var_r5 = 0; var_r5 < 4; var_r5++) { + Sprite *timerSprites; + if (!GetBit(gMultiplayerConnections, var_r5) || (gGameMode == 5 && var_r5 == 2)) { + break; + } + timerSprites = hud->spritesA; + s0 = &hud->s0; + s0->x = (var_r5 * 0x14) + 8; + s0->y = 8; + if (gGameMode == 6) { + s0->palId = var_r5; + } else if (gGameMode == 4) { + s0->palId = (u8)gMultiplayerCharacters[var_r5]; + } else { + for (var_r2 = 0; var_r2 < 4; var_r2++) { + if (var_r5 == ((gMultiplayerConnections & (0x10 << var_r2)) >> (var_r2 + 4))) { + break; + } + } + s0->palId = (u8)gMultiplayerCharacters[var_r2]; + } + DisplaySprite(&hud->s0); + if (gGameMode == 5) { + var_r4 = 0; + for (var_r2_2 = 0; var_r2_2 < 4; var_r2_2++) { + if (gMultiplayerPlayerTasks[var_r2_2] == NULL) { + break; + } + + if (var_r5 == (CheckBit(gMultiplayerConnections, (0x10 << var_r2_2)) >> (var_r2_2 + 4))) { + var_r4 += gMultiplayerCharRings[var_r2_2]; + } + } + + var_r4 = Base10DigitsToHexNibbles(var_r4); + } else { + var_r4 = Base10DigitsToHexNibbles(gMultiplayerCharRings[var_r5]); + } + if (var_r4 >= 0x100) { + s = &timerSprites[(var_r4 >> (2 * 4)) & 0xF]; + s->x = s0->x + 3; + s->y = 0xE; + DisplaySprite(s); + s = &timerSprites[(var_r4 >> (1 * 4)) & 0xF]; + s->x = s0->x + 0xB; + s->y = 0xE; + DisplaySprite(s); + s = &timerSprites[(var_r4 >> (0 * 4)) & 0xF]; + s->x = s0->x + 0x13; + s->y = 0xE; + DisplaySprite(s); + } else if (var_r4 >= 0x10) { + s = &timerSprites[(var_r4 >> (1 * 4)) & 0xF]; + s->x = s0->x + 7; + s->y = 0xE; + DisplaySprite(s); + s = &timerSprites[(var_r4 >> (0 * 4)) & 0xF]; + s->x = s0->x + 0xF; + s->y = 0xE; + DisplaySprite(s); + } else { + s = &timerSprites[(var_r4 >> (0 * 4)) & 0xF]; + s->x = s0->x + 0xB; + s->y = 0xE; + DisplaySprite(s); + } + } +} +END_NONMATCH + +void TaskDestructor_ChaoHuntHUD(struct Task *t) +{ + ChaoHuntHUD *hud = TASK_DATA(t); + + VramFree(hud->s0.graphics.dest); + VramFree(hud->spritesA[0].graphics.dest); + VramFree(hud->spritesB[0].graphics.dest); +} diff --git a/sa1/src/game/multiplayer/indicators.c b/sa1/src/game/multiplayer/indicators.c new file mode 100644 index 0000000000..db71a5f366 --- /dev/null +++ b/sa1/src/game/multiplayer/indicators.c @@ -0,0 +1,329 @@ +#include "global.h" +#include "sprite.h" +#include "trig.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/camera.h" +#include "game/multiplayer/mp_player.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" + +typedef struct { + /* 0x00 */ u8 playerId; + /* 0x04 */ SpriteTransform transform; + /* 0x10 */ Sprite spr; +} OpponentIndicator; /* size: 0x40 */ + +typedef struct { + /* 0x00 */ Sprite spr; +} SelfIndicator; /* size: 0x40 */ + +// TODO: static +static void SA2_LABEL(Task_801951C)(void); +void SA2_LABEL(Task_8019898)(void); +static void Task_SelfPositionIndicator(void); +static void TaskDestructor_OpponentPositionIndicator(struct Task *); + +#define RETURN_IF_PLAYER_ONSCREEN(posX, posY, camX, camY) \ + if (((posX) - (camX) >= 0) && ((posX) - (camX) <= DISPLAY_WIDTH)) { \ + if ((((posY) - (camY)) >= 0)) { \ + if ((((posY) - (camY)) <= DISPLAY_HEIGHT)) { \ + return; \ + } \ + } \ + } + +// This was likely not a macro and instead a copy and paste, but it's +// nicer that we can clean up this code a bit to re-use the logic +#define UPDATE_INDICATOR(targetX, targetY, s, transf) \ + ({ \ + s32 opponentDistSq; \ + s16 rot, tfx, tfy; \ + s16 r1 = (targetX); \ + s16 r4 = (targetY); \ + \ + if (((targetX) != 0) && ((targetY) != 0)) { \ + while ((ABS(r1) >= 128) || (ABS(r4) >= 128)) { \ + r1 = r1 / 2; \ + r4 = r4 / 2; \ + \ + if (ABS(r1) < 2) { \ + break; \ + } \ + \ + if (ABS(r4) < 2) { \ + break; \ + } \ + } \ + } \ + \ + if (ABS(r1) < 2) { \ + if (r4 > 0) { \ + rot = 256; \ + } else { \ + rot = 768; \ + } \ + } else if (ABS(r4) < 2) { \ + rot = 512; \ + if (r1 > 0) { \ + rot = 0; \ + } \ + } else { \ + rot = SA2_LABEL(sub_8004418)(r4, r1); \ + } \ + \ + (transf)->rotation = (rot + 256) & ONE_CYCLE; \ + opponentDistSq = SQUARE((targetX)) + SQUARE((targetY)); \ + \ + if (opponentDistSq < 0x10000) { \ + (s)->animSpeed = opponentDistSq < 0x10000 ? SPRITE_ANIM_SPEED(1.5) : SPRITE_ANIM_SPEED(1.0); \ + } else { \ + (s)->animSpeed = SPRITE_ANIM_SPEED(1.0); \ + } \ + \ + if (opponentDistSq > 0x06000000) { \ + (transf)->qScaleX = Q(0.25); \ + (transf)->qScaleY = Q(0.25); \ + } else if (opponentDistSq < SQUARE(256)) { \ + (transf)->qScaleX = Q(1.875); \ + (transf)->qScaleY = Q(1.875); \ + } else { \ + s32 dist = (0x06000000 - opponentDistSq) >> 16; \ + s32 scale = Div(dist * Q(1.625), Q(5.99609375)) + Q(0.25); \ + (transf)->qScaleX = scale; \ + (transf)->qScaleY = scale; \ + } \ + \ + if (rot == 0) { \ + tfy = DISPLAY_CENTER_Y; \ + tfx = DISPLAY_WIDTH; \ + } else if (rot == 256) { \ + tfy = DISPLAY_HEIGHT; \ + tfx = DISPLAY_CENTER_X; \ + } else if (rot == 512) { \ + tfy = DISPLAY_CENTER_Y; \ + tfx = 0; \ + } else if (rot == 768) { \ + tfy = 0; \ + tfx = DISPLAY_CENTER_X; \ + } else { \ + if ((targetX) > 0) { \ + s16 divRes = Div(SIN_24_8(rot) * 256, COS_24_8(rot)); \ + tfy = ((divRes * 15) >> 5) + DISPLAY_CENTER_Y; \ + \ + if ((targetY) > 0) { \ + if (tfy >= DISPLAY_HEIGHT) { \ + s32 sinVal; \ + tfy = DISPLAY_HEIGHT; \ + sinVal = (256 - rot) & ONE_CYCLE; \ + divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ + tfx = ((divRes * 5) >> 4) + DISPLAY_CENTER_X; \ + } else { \ + tfx = DISPLAY_WIDTH; \ + } \ + } else { \ + if (tfy < 0) { \ + s32 sinVal; \ + tfy = 0; \ + sinVal = (256 - rot) & ONE_CYCLE; \ + divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ + tfx = DISPLAY_CENTER_X - ((divRes * 5) >> 4); \ + } else { \ + tfx = DISPLAY_WIDTH; \ + } \ + } \ + \ + } else { \ + s16 divRes \ + = Div((SIN_24_8((rot - (SIN_PERIOD / 2)) & ONE_CYCLE)) * 0x100, (COS_24_8((rot - (SIN_PERIOD / 2)) & ONE_CYCLE))); \ + tfy = DISPLAY_CENTER_Y - ((divRes * 15) >> 5); \ + if ((targetY) > 0) { \ + if (tfy >= DISPLAY_HEIGHT) { \ + s32 sinVal; \ + tfy = DISPLAY_HEIGHT; \ + sinVal = (768 - rot) & ONE_CYCLE; \ + divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ + tfx = ((divRes * 5) >> 4) + DISPLAY_CENTER_X; \ + } else { \ + tfx = 0; \ + } \ + } else { \ + if (tfy < 0) { \ + s32 sinVal; \ + tfy = 0; \ + \ + sinVal = (768 - rot) & ONE_CYCLE; \ + divRes = Div(SIN_24_8(sinVal) * 256, COS_24_8(sinVal)); \ + tfx = DISPLAY_CENTER_X - ((divRes * 5) >> 4); \ + } else { \ + tfx = 0; \ + } \ + } \ + } \ + } \ + (transf)->x = tfx; \ + (transf)->y = tfy; \ + \ + (s)->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; \ + (s)->frameFlags |= SA2_LABEL(gUnknown_030054B8)++; \ + UpdateSpriteAnimation((s)); \ + TransformSprite((s), (transf)); \ + DisplaySprite((s)); \ + }) + +void CreateOpponentPositionIndicator(u8 sid) +{ + struct Task *t; + Sprite *spr; + SpriteTransform *transform; + OpponentIndicator *pi; + +#if (GAME == GAME_SA1) + t = TaskCreate(SA2_LABEL(Task_801951C), sizeof(OpponentIndicator), 0x2001, 0, TaskDestructor_OpponentPositionIndicator); +#elif (GAME == GAME_SA2) + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + t = TaskCreate(SA2_LABEL(Task_801951C), sizeof(OpponentIndicator), 0x2001, 0, SA2_LABEL(TaskDestructor_OpponentPositionIndicator)); + } else { + t = TaskCreate(SA2_LABEL(Task_8019898), sizeof(OpponentIndicator), 0x2001, 0, SA2_LABEL(TaskDestructor_OpponentPositionIndicator)); + } +#endif + + pi = TASK_DATA(t); + + pi->playerId = sid; + + spr = &pi->spr; + transform = &pi->transform; + spr->graphics.dest = RESERVED_INDICATOR_TILES_VRAM; + spr->oamFlags = SPRITE_OAM_ORDER(1); + spr->graphics.size = 0; + spr->animCursor = 0; + spr->qAnimDelay = 0; + spr->prevVariant = -1; + spr->animSpeed = SPRITE_ANIM_SPEED(1.0); + + if ((GAME == GAME_SA1) && (gGameMode != 6)) { + spr->palId = gMultiplayerCharacters[sid]; + } else { + spr->palId = sid; + } + + spr->hitboxes[0].index = -1; + spr->frameFlags = +#if (GAME == GAME_SA2) + SPRITE_FLAG(19, 1) | +#endif + SPRITE_FLAG(18, 1) | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE; + +#if (GAME == GAME_SA1) + spr->graphics.anim = SA1_ANIM_INDICATOR_SONIC; +#elif (GAME == GAME_SA2) + spr->graphics.anim = SA2_ANIM_INDICATOR_SONIC; +#endif + spr->variant = 0; + transform->qScaleX = Q(1); + transform->qScaleY = Q(1); + transform->rotation = 0; +} + +#if (GAME == GAME_SA2) +void CreateSelfPositionIndicator(void) +{ + struct Task *t; + Sprite *spr; + SelfIndicator *pi; + + t = TaskCreate(Task_SelfPositionIndicator, sizeof(SelfIndicator), 0x2000, 0, NULL); + + pi = TASK_DATA(t); + + spr = &pi->spr; + spr->graphics.dest = RESERVED_INDICATOR_TILES_VRAM; + spr->oamFlags = SPRITE_OAM_ORDER(1); + spr->graphics.size = 0; + spr->animCursor = 0; + spr->qAnimDelay = 0; + spr->prevVariant = -1; + spr->animSpeed = SPRITE_ANIM_SPEED(1.0); + spr->palId = 0; + spr->hitboxes[0].index = -1; + spr->frameFlags = SPRITE_FLAG(18, 1); + +#if (GAME == GAME_SA1) + spr->graphics.anim = SA1_ANIM_INDICATOR_SONIC; +#elif (GAME == GAME_SA2) + spr->graphics.anim = SA2_ANIM_INDICATOR_SONIC; +#endif + spr->variant = 0; + UpdateSpriteAnimation(spr); +} +#endif + +static void SA2_LABEL(Task_801951C)(void) +{ + OpponentIndicator *pi = TASK_DATA(gCurTask); + struct Task *t = gMultiplayerPlayerTasks[pi->playerId]; + MultiplayerPlayer *mpp = TASK_DATA(t); + Sprite *spr = &pi->spr; + SpriteTransform *transform = &pi->transform; + + s16 opponentX2, opponentY2; + + RETURN_IF_PLAYER_ONSCREEN(mpp->pos.x, mpp->pos.y, gCamera.x, gCamera.y); + + opponentX2 = (unsigned)(mpp->pos.x - DISPLAY_CENTER_X - gCamera.x); + opponentY2 = (unsigned)(mpp->pos.y - DISPLAY_CENTER_Y - gCamera.y); + + UPDATE_INDICATOR(opponentX2, opponentY2, spr, transform); +} + +#if (GAME == GAME_SA2) +static void Task_8019898() +{ + OpponentIndicator *pi = TASK_DATA(gCurTask); + struct Task *t = gMultiplayerPlayerTasks[pi->playerId]; + MultiplayerPlayer *mpp = TASK_DATA(t); + Sprite *spr = &pi->spr; + SpriteTransform *transform = &pi->transform; + + s32 normalizedCamX, normalizedCamY; + s16 opponentX, opponentY; + + RETURN_IF_PLAYER_ONSCREEN(mpp->pos.x, mpp->pos.y, gCamera.x, gCamera.y); + + opponentX = (unsigned)(mpp->pos.x - DISPLAY_CENTER_X - gCamera.x); + opponentY = (unsigned)(mpp->pos.y - DISPLAY_CENTER_Y - gCamera.y); + + // Only addition is from here + if (gCamera.x >= 961) { + normalizedCamX = gCamera.x - 1440; + normalizedCamY = gCamera.y - 864; + } else { + normalizedCamX = gCamera.x + 1440; + normalizedCamY = gCamera.y + 864; + } + + RETURN_IF_PLAYER_ONSCREEN(mpp->pos.x, mpp->pos.y, normalizedCamX, normalizedCamY); + + normalizedCamX = ({ mpp->pos.x - DISPLAY_CENTER_X; }) - normalizedCamX; + normalizedCamY = ({ mpp->pos.y - DISPLAY_CENTER_Y; }) - normalizedCamY; + + if (MAX(ABS(opponentX), ABS(opponentY)) > MAX(ABS(normalizedCamX), ABS(normalizedCamY))) { + opponentX = normalizedCamX; + opponentY = normalizedCamY; + } + + UPDATE_INDICATOR(opponentX, opponentY, spr, transform); +} + +static void Task_SelfPositionIndicator(void) +{ + SelfIndicator *pi = TASK_DATA(gCurTask); + Sprite *s = &pi->spr; + UpdateSpriteAnimation(s); +} +#endif + +static void TaskDestructor_OpponentPositionIndicator(struct Task *t) { } diff --git a/sa1/src/game/multiplayer/mode_select.c b/sa1/src/game/multiplayer/mode_select.c new file mode 100644 index 0000000000..e1cbdb4fa6 --- /dev/null +++ b/sa1/src/game/multiplayer/mode_select.c @@ -0,0 +1,1048 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "multi_boot.h" +#include "lib/m4a/m4a.h" +#include "game/multiplayer/communication_outcome.h" +#include "game/multiplayer/mode_select.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/save.h" +#include "game/title_screen.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/tilemaps.h" +#include "constants/text.h" + +/* NOTE: + This module was split into two, because Task_800F9BC() would compile + differently when the two functions directly above it in the ROM were in the same module. + + This is a rare agbcc behavior. + This MIGHT be resolved once Task_SinglePak() matches (because the function changed)? +*/ + +typedef enum PakModes { + PM_MULTI_PAK, + PM_SINGLE_PAK, + + PM_COUNT +} PakModes; + +typedef struct ModeSelect { + /* 0x00 */ Background bg; + /* 0x40 */ Sprite s[3]; + /* 0xD0 */ Sprite s4; + /* 0x100 */ u8 filler100[0xF8]; + /* 0x1FC */ s32 unk1F8; + /* 0x1FC */ s32 qUnk1FC; + /* 0x200 */ s16 unk200; + /* 0x202 */ u8 unk202; + /* 0x203 */ u8 mode; + /* 0x204 */ u8 unk204; + /* 0x205 */ u8 unk205; + /* 0x206 */ u8 unk206; + /* 0x207 */ u8 unk207; + /* 0x208 */ s16 qUnk208; + /* 0x20A */ u8 unk20A; + /* 0x204 */ u8 unk20B[2][4]; + /* 0x214 */ s32 frameCount; + /* 0x218 */ u8 unk218; + /* 0x219 */ u8 unk219; +} ModeSelect; /* 0x21C */ + +void Task_MultiplayerModeSelectScreenInit(void); +void sub_800E798(void); +void Task_800E868(void); +void sub_800FBF8(void); +void SA2_LABEL(sub_8081C50)(void); +void sub_8010048(void); +void Task_SinglePak(void); +void ModeSelect_InitMultiPak(void); +void Task_MultiPak(void); +void ModeSelect_InitSinglePak(void); + +extern void CreatePlayerNameInputMenu(); +const AnimId gUnknown_080BB348[UILANG_COUNT] = { SA1_ANIM_MP_GAME_PAK_MODE_JP, SA1_ANIM_MP_GAME_PAK_MODE_EN }; +const AnimId gUnknown_080BB34C[UILANG_COUNT] = { SA1_ANIM_MP_OUTCOME_MESSAGES_JP, SA1_ANIM_MP_OUTCOME_MESSAGES_EN }; +const AnimId gUnknown_080BB350[UILANG_COUNT] = { SA1_ANIM_MP_PRESS_START_JP, SA1_ANIM_MP_PRESS_START_EN }; +const VoidFn sModeInitProcs[PM_COUNT] = { ModeSelect_InitMultiPak, ModeSelect_InitSinglePak }; + +extern u8 gUnknown_03005008[MULTI_SIO_PLAYERS_MAX]; +extern u8 gMultiboot_087C0258[]; +extern u8 gMultiboot_087C22F8[]; +void sub_800FD9C(u8 *param); +void Task_800F058(void); + +void CreateMultiplayerModeSelectScreen(void) +{ + Sprite *s; + ModeSelect *modeSelect; + Background *bg; + + if (gLoadedSaveGame.unk4 == 0) { + m4aSongNumStartOrChange(MUS_CHARACTER_SELECTION); + gGameMode = 2; + CreatePlayerNameInputMenu(); + return; + } + gDispCnt = 0x1141; + gBgCntRegs[0] = 0x1E03; + modeSelect = TASK_DATA(TaskCreate(Task_MultiplayerModeSelectScreenInit, sizeof(ModeSelect), 0x2000U, 0U, NULL)); + modeSelect->unk200 = 0; + modeSelect->mode = PM_MULTI_PAK; + modeSelect->qUnk1FC = Q(0); + modeSelect->qUnk208 = Q(16); + + gBldRegs.bldCnt = 0xFF; + gBldRegs.bldY = 0x10; + + s = &modeSelect->s[0]; + s->x = 232; + s->y = 64; + s->graphics.dest = (void *)OBJ_VRAM0; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB348[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &modeSelect->s[1]; + s->x = 0; + s->y = 64; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x840); + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 860; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + bg = &modeSelect->bg; + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0; + bg->layoutVram = (void *)(BG_VRAM + 0xF000); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = (s16)(LOADED_SAVE->uiLanguage + 0x4C); + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 20; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + m4aSongNumStartOrChange(MUS_CHARACTER_SELECTION); +} + +void Task_800E648() +{ + ModeSelect *modeSelect = TASK_DATA(gCurTask); + + if (DPAD_UP & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (--modeSelect->mode >= PM_COUNT) { + modeSelect->mode = PM_SINGLE_PAK; + } + + modeSelect->qUnk1FC = 0; + } else if (DPAD_DOWN & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (++modeSelect->mode >= PM_COUNT) { + modeSelect->mode = PM_MULTI_PAK; + } + modeSelect->qUnk1FC = 0; + } + + if (A_BUTTON & gPressedKeys) { + modeSelect->unk20A = 0; + m4aSongNumStart(SE_SELECT); + + DmaFill32(3, 0, &gMultiSioSend, sizeof(gMultiSioSend)); + DmaFill32(3, 0, &gMultiSioRecv, sizeof(gMultiSioRecv)); + + gBldRegs.bldCnt = 0xFF; + gCurTask->main = Task_800E868; + } else if (B_BUTTON & gPressedKeys) { + s32 v = 1; + modeSelect->unk20A = v; + gMultiSioEnabled = FALSE; + MultiSioStop(); + MultiSioInit(0); + gCurTask->main = Task_800E868; + m4aSongNumStart(SE_RETURN); + gBldRegs.bldCnt = 0xFF; + } + sub_800E798(); +} + +void sub_800E798() +{ + Sprite *s; + s32 temp_r1; + s32 temp_r2; + s32 var_r4; + u32 var_r4_2; + + ModeSelect *modeSelect = TASK_DATA(gCurTask); + + modeSelect->qUnk1FC += Q(0.5); + if (modeSelect->qUnk1FC > Q(200)) { + modeSelect->qUnk1FC -= Q(200); + } + + s = &modeSelect->s[0]; + s->y = (modeSelect->mode * 24) + 64; + modeSelect->s[0].variant = modeSelect->mode; + UpdateSpriteAnimation(s); + var_r4 = I(modeSelect->qUnk1FC) - 200; + + while ((232 - var_r4) > 0) { + s->x = 232 - var_r4; + DisplaySprite(s); + var_r4 += 200; + } + + s = &modeSelect->s[1]; + s->y = (modeSelect->mode * 24) + 54; + for (var_r4_2 = 0; var_r4_2 < 8; var_r4_2++) { + s->x = var_r4_2 * 32; + DisplaySprite(s); + } +} + +void Task_800E868() +{ + ModeSelect *modeSelect = TASK_DATA(gCurTask); + + modeSelect->qUnk208 += Q(0.5); + if (modeSelect->qUnk208 >= Q(16)) { + modeSelect->qUnk208 = Q(16); + + if (modeSelect->unk20A != 0) { + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + m4aSongNumStop(3U); + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x20; + TaskDestroy(gCurTask); + CreateMainMenu(1); + } else { + gCurTask->main = sModeInitProcs[modeSelect->mode]; + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x20; + gMultiSioEnabled = 1; + } + } else { + gBldRegs.bldY = I(modeSelect->qUnk208); + sub_800E798(); + } +} + +void ModeSelect_InitMultiPak() +{ + Background *bg; + Sprite *s; + s32 i; + ModeSelect *modeSelect; + u8 *vram = OBJ_VRAM0; + + m4aSongNumStart(MUS_VS_PLEASE_WAIT); + modeSelect = TASK_DATA(gCurTask); + modeSelect->frameCount = (s32)(LOADED_SAVE->unk4 + gFrameCount); + + for (i = 0; i < 4; i++) { + modeSelect->unk20B[0][i] = 0; + modeSelect->unk20B[1][i] = 0; + } + s = &modeSelect->s[0]; + s->x = 120; + s->y = 33; + s->graphics.dest = vram; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB34C[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + vram += 0x540; + + s = &modeSelect->s[1]; + s->x = 101; + s->y = 41; + s->graphics.dest = vram; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = 0x378; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + vram += 0x460; + + s = &modeSelect->s[2]; + s->x = 120; + s->y = 109; + s->graphics.dest = vram; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MP_OUTCOME_MESSAGES_EN; + s->variant = 4; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + vram += 0x80; + + s = &modeSelect->s4; + s->x = 120; + s->y = 125; + s->graphics.dest = vram; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB350[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + bg = &modeSelect->bg; + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0; + bg->layoutVram = (u16 *)(BG_VRAM + 0xF000); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_MP_CONTINUE_SCREEN; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 0x1E; + bg->targetTilesY = 0x14; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) { + MultiSioStart(); + } + + modeSelect->unk206 = 0; + modeSelect->unk218 = 0; + gCurTask->main = Task_MultiPak; +} + +// TODO: Fake-match +void Task_MultiPak() +{ + s32 sp0; + s32 sp4; + s32 sp8; + s32 spC; + Sprite *s; + s32 i; + s32 var_sb; + u8 temp_r1_2; + u8 var_r7; + u8 var_sl; + ModeSelect *modeSelect; + union MultiSioData *send_recv; + u8 unk20B; + +#ifndef NON_MATCHING + register s32 r0 asm("r0"); + register s32 r2 asm("r2"); +#else + s32 r0; + s32 r2; +#endif + + sp0 = 0; + sp4 = 0; + var_sl = 0; + sp8 = 0; + var_sb = 0; + spC = 1; + if (0x81 & gMultiSioStatusFlags) { + if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(SIO_MULTI_CNT->id))) { + if (gMultiplayerMissingHeartbeats[SIO_MULTI_CNT->id]++ >= 0xB5) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[SIO_MULTI_CNT->id] = 0; + } + } + + modeSelect = TASK_DATA(gCurTask); + modeSelect->qUnk208 -= 0x80; + if (modeSelect->qUnk208 < 0) { + modeSelect->qUnk208 = 0; + } + gBldRegs.bldY = I(modeSelect->qUnk208); + + for (i = 0; i < 4; i++) { + send_recv = &gMultiSioRecv[i]; + r0 = modeSelect->unk20B[0][i]; + r2 = r0 << 1; + modeSelect->unk20B[0][i] = r2; + modeSelect->unk20B[1][i] *= 2; + if ((i == SIO_MULTI_CNT->id) || (CheckBit(gMultiSioStatusFlags, i) && (send_recv->pat0.unk0 >= 0x10))) { + r2 |= 1; + modeSelect->unk20B[0][i] = r2; + sp0 += 1; + var_sl |= 1 << i; + if (sp8 != 0) { + var_sb = 1; + } + } else { + r0 = ((vu16 *)®_SIODATA32)[i]; + r2 = r0; +#ifndef NON_MATCHING + asm("" ::"r"(r0)); +#endif + sp8 = 1; + if (!CheckBit(gMultiSioStatusFlags, i) && (r2 == 0)) { + var_sb = 1; + modeSelect->unk20B[1][i] = (u8)(1 | modeSelect->unk20B[1][i]); + if (modeSelect->unk20B[0][i] == 0) { + spC = 0; + } + } else if (modeSelect->unk20B[1][i] != 0) { + var_sb = 1; + spC = 0; + } else if (CheckBit(gMultiSioStatusFlags, i) && (send_recv->pat0.unk0 < 0x10)) { + var_sb = 1; + spC = 0; + } + } + + if (modeSelect->unk20B[0][i] != 0) { + sp4 += 1; + } + } + + if (sp4 == 0) { + sp4 = 1; + } + + send_recv = &gMultiSioRecv[0]; + if (modeSelect->unk218 == 0) { + if (((gMultiSioStatusFlags & 0x81) == 1) && ((u32)send_recv->pat0.unk0 > 0x10U)) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } else { + modeSelect->unk218 = 1; + } + } + + if ((var_sb == 0) && (send_recv->pat0.unk0 == 0x11) && (modeSelect->unk218 != 0)) { + var_r7 = 2; + gMultiplayerPseudoRandom = send_recv->pat0.unk10; + gMultiplayerConnections = send_recv->pat0.unk2; + for (i = 3; i >= 0; i--) { + send_recv = &gMultiSioRecv[i]; + if (i == SIO_MULTI_CNT->id) { + gUnknown_03005008[i] |= 0xFF; + } else if (CheckBit(gMultiSioStatusFlags, i)) { + sub_800FD9C((void *)send_recv); + gUnknown_03005008[i] = var_r7--; + } else { + gUnknown_03005008[i] |= 0xFF; + var_r7 -= 1; + } + } + modeSelect->unk200 = 0; + modeSelect->unk206 = 0; + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + modeSelect->unk219 = 0; + gCurTask->main = Task_800F058; + Task_800F058(); + return; + } else if (send_recv->pat0.unk0 > 0x12u) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } else if (2 & gPressedKeys) { + gMultiSioEnabled = 0; + MultiSioStop(); + MultiSioInit(0U); + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0; + m4aSongNumStop(3U); + m4aSongNumStart(0x6BU); + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; + TaskDestroy(gCurTask); + CreateMultiplayerModeSelectScreen(); + return; + } + + modeSelect->s[2].variant = sp4 + 3; + for (i = 0; i < 3; i++) { + s = &modeSelect->s[i]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + if (gMultiSioStatusFlags & 0x80) { + if ((sp4 > 1) && (spC != 0)) { + s = &modeSelect->s4; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + if (gMultiSioStatusFlags & 0x80) { + if (((var_sb == 0) && (sp0 > 1) && (START_BUTTON & gPressedKeys)) + || ((modeSelect->unk206 != 0) && (var_sb == 0) && (sp0 > 1))) { + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x11; + send_recv->pat0.unk2 = var_sl; + send_recv->pat0.unk4 = LOADED_SAVE->unk4; + DmaCopy32(3, &LOADED_SAVE->playerName[0], send_recv->pat0.unk8, sizeof(LOADED_SAVE->playerName)); + send_recv->pat0.unk4 = LOADED_SAVE->unk4; + send_recv->pat0.unk10 = modeSelect->frameCount; + DmaCopy32(3, &LOADED_SAVE->playerName[0], send_recv->pat0.unk8, sizeof(LOADED_SAVE->playerName)); + modeSelect->unk206 = 1; + return; + } + } + } + + if (modeSelect->unk206 != 0) { + modeSelect->unk206 = 0; + } + + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x10; + send_recv->pat0.unk4 = LOADED_SAVE->unk4; + DmaCopy32(3, &LOADED_SAVE->playerName[0], send_recv->pat0.unk8, sizeof(LOADED_SAVE->playerName)); + send_recv->pat0.unk4 = LOADED_SAVE->unk4; + DmaCopy32(3, &LOADED_SAVE->playerName[0], send_recv->pat0.unk8, sizeof(LOADED_SAVE->playerName)); +} + +// (99.87%) https://decomp.me/scratch/TdivT +NONMATCH("asm/non_matching/game/multiplayer/mode_select__Task_800F058.inc", void Task_800F058()) +{ + Sprite *s; + s32 var_r3_2; + s32 var_r3_3; + s32 var_r5; + s32 var_r6; + u16 var_r4; + u32 var_r3; + u8 *temp_r0_2; + u8 *var_r1; + u8 *var_r2; + u8 temp_r0; + u8 temp_r1; + u8 var_r7; + union MultiSioData *send_recv_r2; + union MultiSioData *send_recv_r6; + + ModeSelect *modeSelect; + + var_r6 = 0; + var_r7 = 0; + modeSelect = TASK_DATA(gCurTask); + + if (IS_MULTI_PLAYER) { + for (var_r3 = 0; var_r3 < 4; var_r3++) { + if (!GetBit(gMultiplayerConnections, var_r3)) { + break; + } + + if (!CheckBit(gMultiSioStatusFlags, var_r3)) { + if (gMultiplayerMissingHeartbeats[var_r3]++ >= 0xB5) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[var_r3] = 0; + } + } + } + + send_recv_r2 = &gMultiSioRecv[0]; + if (send_recv_r2->pat0.unk0 == 0x12) { + gGameMode = GAME_MODE_RACE; + TaskDestroy(gCurTask); + CreateMultipackOutcomeScreen(0U); + return; + } + + if (send_recv_r2->pat0.unk0 == 0x10) { + gMultiSioEnabled = 0; + MultiSioStop(); + MultiSioInit(0U); + send_recv_r2 = &gMultiSioSend; + send_recv_r2->pat0.unk0 = 0; + m4aSongNumStop(3U); + m4aSongNumStart(0x6BU); + *gBgSprites_Unknown1 = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; + TaskDestroy(gCurTask); + CreateMultiplayerModeSelectScreen(); + return; + } else { + if (gMultiSioStatusFlags & 0x80) { + if (B_BUTTON & gPressedKeys) { + gMultiSioEnabled = 0; + MultiSioStop(); + MultiSioInit(0U); + send_recv_r2 = &gMultiSioSend; + send_recv_r2->pat0.unk0 = 0; + m4aSongNumStop(3U); + m4aSongNumStart(0x6BU); + *gBgSprites_Unknown1 = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; + TaskDestroy(gCurTask); + CreateMultiplayerModeSelectScreen(); + return; + } + + if (modeSelect->unk219++ > 60) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } + + for (var_r5 = 0; var_r5 < 4; var_r5++) { + send_recv_r2 = &gMultiSioRecv[var_r5]; + modeSelect->unk20B[0][var_r5] *= 2; + if ((SIO_MULTI_CNT->id == var_r5) || (send_recv_r2->pat0.unk0 > 0x10U)) { + var_r7 |= 1 << var_r5; + } + if (modeSelect->unk20B[0][var_r5] != 0) { + var_r6 += 1; + } + } + + if (var_r6 == 0) { + var_r6 = 1; + } + + modeSelect->s[2].variant = var_r6 + 3; + for (var_r5 = 0; var_r5 < 3; var_r5++) { + s = &modeSelect->s[var_r5]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + if (gMultiSioStatusFlags & 0x80) { + send_recv_r6 = &gMultiSioSend; + send_recv_r6->pat0.unk0 = 0x12; + send_recv_r6->pat0.unk2 = var_r7; + send_recv_r6->pat0.unk4 = gLoadedSaveGame.unk4; + DmaCopy32(3, &LOADED_SAVE->playerName[0], send_recv_r6->pat0.unk8, sizeof(LOADED_SAVE->playerName)); + + for (var_r5 = 0, var_r7 = gMultiplayerConnections; var_r5 < 4; var_r5++) { + // union MultiSioData *recv = gMultiSioRecv; + if (!GetBit(var_r7, var_r5) || var_r5 == 0) { + continue; + } + + if (!CheckBit(gMultiSioStatusFlags, var_r5) || (send_recv_r2 = &gMultiSioRecv[var_r5])->pat0.unk0 != 0x11) { + goto lbl; + } + } + return; + + lbl: + send_recv_r6->pat0.unk0 = 0x11; + } else { + send_recv_r6 = &gMultiSioSend; + gMultiSioSend.pat0.unk0 = 0x11; + gMultiSioSend.pat0.unk2 = var_r7; + gMultiSioSend.pat0.unk4 = gLoadedSaveGame.unk4; + DmaCopy32(3, &LOADED_SAVE->playerName[0], send_recv_r6->pat0.unk8, sizeof(LOADED_SAVE->playerName)); + } + } +} +END_NONMATCH + +void ModeSelect_InitSinglePak() +{ + Background *bg; + Sprite *s; + s32 i; + ModeSelect *modeSelect; + u8 *vram = OBJ_VRAM0; + + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = -1; + gBgSprites_Unknown2[2][3] = 0x20; + + gDispCnt = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_1; + gBgCntRegs[0] = 0x1E03; + + modeSelect = TASK_DATA(gCurTask); + modeSelect->unk207 = 0; + s = &modeSelect->s[0]; + + s->x = 120; + s->y = 33; + s->graphics.dest = vram; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB34C[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + vram += 0x540; + + s = &modeSelect->s[1]; + s->x = 101; + s->y = 41; + s->graphics.dest = vram; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = 0x378; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + vram += 0x460; + + s = &modeSelect->s[2]; + s->x = 120; + s->y = 109; + s->graphics.dest = vram; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MP_OUTCOME_MESSAGES_EN; + s->variant = 4; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + vram += 0x80; + + s = &modeSelect->s4; + s->x = 120; + s->y = 125; + s->graphics.dest = vram; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB350[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + bg = &modeSelect->bg; + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0; + bg->layoutVram = (u16 *)(BG_VRAM + 0xF000); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_MP_CONTINUE_SCREEN; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 0x1E; + bg->targetTilesY = 0x14; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + gMultiSioEnabled = 0; + m4aSongNumStart(MUS_VS_PLEASE_WAIT); + + gMultiBootParam.masterp = gMultiboot_087C0258; + gMultiBootParam.server_type = 0; + MultiBootInit(&gMultiBootParam); + + gCurTask->main = Task_SinglePak; + + if (*(u8 *)®_SIOCNT & 0x30) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } +} + +// (93.89%) https://decomp.me/scratch/Canr3 +NONMATCH("asm/non_matching/game/multiplayer/mode_select__Task_SinglePak.inc", void Task_SinglePak()) +{ + s16 sp4; + Sprite *temp_r4; + Sprite *temp_r4_2; + s16 temp_r0; + s32 temp_r0_2; + s32 var_r6; + Background *bg; + u8 *temp_r1_3; + u8 temp_r2_2; + u8 var_r5; + void *temp_r1; + void *temp_r1_2; + ModeSelect *modeSelect; + union MultiSioData *recv; + union MultiSioData *send; + union MultiSioData *send_recv; + + var_r6 = 1; + modeSelect = TASK_DATA(gCurTask); + modeSelect->qUnk208 -= 0x80; + if (modeSelect->qUnk208 < 0) { + modeSelect->qUnk208 = 0; + } + gBldRegs.bldY = (u16)((s32)((u16)modeSelect->qUnk208 << 0x10) >> 0x18); + + for (var_r5 = 1; var_r5 < 4; var_r5++) { + if ((GetBit((s32)gMultiBootParam.response_bit, var_r5)) && GetBit((s32)gMultiBootParam.client_bit, var_r5)) { + var_r6++; + } else { + break; + } + } + + modeSelect->s[2].variant = var_r6 + 3; + for (var_r5 = 0; var_r5 < 3; var_r5++) { + temp_r4 = &modeSelect->s[var_r5]; + UpdateSpriteAnimation(temp_r4); + DisplaySprite(temp_r4); + } + + if (0xE & gMultiBootParam.client_bit) { + if ((gMultiBootParam.probe_count == 0) && (var_r6 > 1)) { + temp_r4_2 = &modeSelect->s4; + UpdateSpriteAnimation(temp_r4_2); + DisplaySprite(temp_r4_2); + } + asm(""); + } else { + modeSelect->unk207 = 0; + gFlags &= 0xFFFFBFFF; + gFlags &= 0xFFFF7FFF; + m4aSoundVSyncOn(); + } + + if ((gMultiBootParam.probe_count == 0) && (gMultiBootParam.client_bit != 0) && (8 & gPressedKeys)) { + modeSelect->unk207 = 1; + gFlags |= FLAGS_8000; + gFlags |= FLAGS_4000; + m4aMPlayAllStop(); + gFlags &= ~4; + m4aSoundVSyncOff(); + { +#ifndef NON_MATCHING + vu16 *dma = (vu16 *)®_DMA0SAD; + dma[5] &= 0xC5FF; /* REG_DMA0CNT_H */ + dma[5] &= 0x7FFF; /* REG_DMA0CNT_H */ + dma[5]; + + dma += 6; + dma[5] &= 0xC5FF; /* REG_DMA0CNT_H */ + dma[5] &= 0x7FFF; /* REG_DMA0CNT_H */ + dma[5]; + + dma += 6; + dma[5] &= 0xC5FF; /* REG_DMA2CNT_H */ + dma[5] &= 0x7FFF; /* REG_DMA2CNT_H */ + dma[5]; + + dma += 6; + dma[5] &= 0xC5FF; /* REG_DMA3CNT_H */ + dma[5] &= 0x7FFF; /* REG_DMA3CNT_H */ + dma[5]; +#else + REG_DMA0CNT_H &= 0xC5FF; + REG_DMA0CNT_H &= 0x7FFF; + REG_DMA1CNT_H &= 0xC5FF; + REG_DMA1CNT_H &= 0x7FFF; + REG_DMA2CNT_H &= 0xC5FF; + REG_DMA2CNT_H &= 0x7FFF; + REG_DMA3CNT_H &= 0xC5FF; + REG_DMA3CNT_H &= 0x7FFF; +#endif + } + + temp_r1_3 = &gMultiboot_087C0258[0xC0]; + MultiBootStartMaster(&gMultiBootParam, temp_r1_3, (uintptr_t)&gMultiboot_087C22F8 - (uintptr_t)temp_r1_3, 4U, 1); + } + if ((modeSelect->unk207 == 0) && (2 & gPressedKeys)) { + TaskDestroy(gCurTask); + CreateMultiplayerModeSelectScreen(); + return; + } + + temp_r0_2 = MultiBootMain(&gMultiBootParam); + if ((temp_r0_2 == 0x50) || (temp_r0_2 == 0x60) || (temp_r0_2 == 0x70) || (temp_r0_2 == 0x71)) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + gFlags &= 0xFFFFBFFF; + gFlags &= 0xFFFF7FFF; + m4aSoundVSyncOn(); + LinkCommunicationError(); + return; + } + + if (MultiBootCheckComplete(&gMultiBootParam) == 0) { + return; + } + + gDispCnt = 0x1341; + gBgCntRegs[0] = 0x1E02; + gBgCntRegs[1] = 0x1E03; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0x80; + + modeSelect = TASK_DATA(gCurTask); + bg = &modeSelect->bg; + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0; + bg->layoutVram = (void *)(BG_VRAM + 0xF000); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_MP_SINGLEPAK_PROGRAM_IS_BEING_SENT; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 27; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + if (LOADED_SAVE->uiLanguage != 0) { + gDispCnt |= 0x2000; + gWinRegs[4] = 2; + gWinRegs[5] = 1; + gWinRegs[0] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[2] = WIN_RANGE(32, 88); + } else { + gDispCnt &= 0xDFFF; + gWinRegs[4] = 0; + gWinRegs[5] = 0; + } + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; + + CpuFill16(0, &gBgPalette[32], 0x20); + gCurTask->main = SA2_LABEL(sub_8081C50); + + send = &gMultiSioSend; + send->pat2.unk0 = 0; + + recv = &gMultiSioRecv[0]; + recv[0].pat2.unk0 = 0; + recv[1].pat2.unk0 = 0; + recv[2].pat2.unk0 = 0; + recv[3].pat2.unk0 = 0; + + send_recv = recv; + send_recv += 3; + + send->pat0.unk2 = 0; + send->pat0.unk0 = 0xF001; + + recv = &gMultiSioRecv[0]; + recv[0].pat0.unk2 = 0; + recv[1].pat0.unk2 = 0; + recv[2].pat0.unk2 = 0; + recv[3].pat0.unk2 = 0; + modeSelect->unk204 = 0; +} +END_NONMATCH diff --git a/sa1/src/game/multiplayer/mode_select_2.c b/sa1/src/game/multiplayer/mode_select_2.c new file mode 100644 index 0000000000..000db032a6 --- /dev/null +++ b/sa1/src/game/multiplayer/mode_select_2.c @@ -0,0 +1,401 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "multi_boot.h" +#include "sio32_multi_load.h" +#include "lib/m4a/m4a.h" +#include "game/dummy_task.h" +#include "game/multiboot/collect_rings/results.h" +#include "game/multiplayer/communication_outcome.h" +#include "game/multiplayer/mode_select.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/save.h" +#include "game/stage/player_controls.h" +#include "game/stage/rings_scatter.h" +#include "game/stage/stage.h" +#include "game/title_screen.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/tilemaps.h" +#include "constants/text.h" + +/* NOTE: + This module was split into two, because sa2__sub_80818B8() would compile + differently when the two functions directly above it in the ROM were in the same module. + + This is a rare agbcc behavior. +*/ + +typedef enum PakModes { + PM_MULTI_PAK, + PM_SINGLE_PAK, + + PM_COUNT +} PakModes; + +typedef struct ModeSelect { + /* 0x00 */ Background bg; + /* 0x40 */ Sprite s[3]; + /* 0xD0 */ Sprite s4; + /* 0x100 */ u8 filler100[0xF0]; + /* 0x1F0 */ VoidFn fn1F0; + /* 0x100 */ u8 filler1F4[0x4]; + /* 0x1FC */ s32 unk1F8; + /* 0x1FC */ s32 qUnk1FC; + /* 0x200 */ s16 unk200; + /* 0x202 */ u8 unk202; + /* 0x203 */ u8 mode; + /* 0x204 */ u8 unk204; + /* 0x205 */ u8 unk205; + /* 0x206 */ u8 unk206; + /* 0x207 */ u8 unk207; + /* 0x208 */ s16 qUnk208; + /* 0x20A */ u8 unk20A; + /* 0x204 */ u8 unk20B[2][4]; + /* 0x214 */ s32 frameCount; + /* 0x218 */ u8 unk218; + /* 0x219 */ u8 unk219; +} ModeSelect; /* 0x21C */ + +typedef struct SioMultiplayerScore { + u16 unk0; + u8 unk2; + u8 unk3; + struct MultiplayerScore mps; +} SioMultiplayerScore; + +void Task_800E648(void); +void sub_800E798(void); +void sub_800FBF8(void); +void sub_800FF38(void); +void SA2_LABEL(sub_8081CC4)(void); +void Task_8010020(void); +void SA2_LABEL(sub_8081D58)(void); +void SA2_LABEL(sub_8081DB4)(); + +void sub_800FD9C(SioMultiplayerScore *param); +void Task_800F058(void); + +extern const VoidFn gUnknown_080BB3F8[9]; + +void sa2__sub_80818B8(void) +{ + u32 var_r1; + u8 temp_r4_3; + u8 var_r3; + u32 unkR6; + union MultiSioData *send_recv; + + ModeSelect *modeSelect = TASK_DATA(gCurTask); + + if ((gMultiSioStatusFlags & 0x20) && (modeSelect->unk204 < 9)) { + gCurTask->main = sub_800FBF8; + } + if (gMultiSioStatusFlags & 0x10) { + modeSelect->unk202 = 1; + } + gMultiSioSend.pat2.unk0 = gLoadedSaveGame.uiLanguage; + gMultiSioStatusFlags = MultiSioMain(&gMultiSioSend, gMultiSioRecv, modeSelect->unk202); + if (modeSelect->unk205 == 0) { + MultiSioStart(); + modeSelect->unk205 = 1; + } + + unkR6 = ((u32)(gMultiSioStatusFlags & 0xF00) >> 8); + // NOTE: Similar to macro: MultiPakHeartbeat() + for (var_r3 = 1; var_r3 < 4; var_r3++) { + if (gMultiSioStatusFlags & (1 << (var_r3 + 8))) { + if (!((1 << var_r3) & gMultiSioStatusFlags)) { + if (gMultiplayerMissingHeartbeats[var_r3]++ >= 0xB5) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + gFlags &= 0xFFFFBFFF; + gFlags &= 0xFFFF7FFF; + m4aSoundVSyncOn(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[var_r3] = 0; + } + } + + if ((unkR6 << var_r3)) { + union MultiSioData *send_recv = &gMultiSioRecv[var_r3]; + if ((send_recv->pat0.unk0 == 0x10)) { + for (var_r1 = 0; var_r1 < 4; var_r1++) { + gMultiplayerCharacters[var_r1] = 0; + gMPRingCollectWins[var_r1] = 0; + gMultiplayerRanks[var_r1] = var_r1; + gMultiplayerMissingHeartbeats[var_r1] = 0; + } + gCurTask->main = SA2_LABEL(sub_8081D58); + gDispCnt = 0x40; + return; + } + } + } + + gFlags |= 1; + temp_r4_3 = (((modeSelect->unk204 * 0x10) + 8) / 9U); + CpuFill16(0, &gBgPalette[2 * 16 + temp_r4_3], (((16 - temp_r4_3) & 0x1FFFFF) << 1)); + CpuFill16(RGB16(31, 19, 0), &gBgPalette[0x20], temp_r4_3 * 2); + if (modeSelect->unk204 != gMultiSioRecv->pat0.unk2) { + modeSelect->unk204 = gMultiSioRecv->pat0.unk2; + modeSelect->unk1F8 = 0; + } +} + +void sub_800FBF8(void) +{ + u32 var_r1; + u8 *temp_r3; + + ModeSelect *modeSelect = TASK_DATA(gCurTask); + + MultiSioStop(); + if (modeSelect->unk204 == 9) { + for (var_r1 = 0; var_r1 < 4; var_r1++) { + gMultiplayerCharacters[var_r1] = 0; + gMPRingCollectWins[var_r1] = 0; + gMultiplayerRanks[var_r1] = var_r1; + gMultiplayerMissingHeartbeats[var_r1] = 0; + } + *gIntrTable = modeSelect->fn1F0; + gMultiSioEnabled = 1; + MultiSioInit((u32)(gMultiSioStatusFlags & 0xF00) >> 8); + MultiSioStart(); + gCurTask->main = SA2_LABEL(sub_8081D58); + gDispCnt = 0x40; + return; + } + modeSelect->fn1F0 = *gIntrTable; + *gIntrTable = Sio32MultiLoadIntr; + Sio32MultiLoadInit(gMultiSioStatusFlags & 0x80, gUnknown_080BB3F8[modeSelect->unk204]); + gCurTask->main = Task_8010020; +} + +void SA2_LABEL(sub_8081200)(void) +{ + u8 i; + + gGameMode = GAME_MODE_MULTI_PLAYER_COLLECT_RINGS; + + gRingsScatterTask = NULL; + gDummyTask = NULL; + gGameStageTask = NULL; + gPlayer.spriteTask = NULL; +#if (GAME == GAME_SA1) + gPartner.spriteTask = NULL; +#endif + gCamera.movementTask = NULL; + SA2_LABEL(gUnknown_0300543C) = 0; +#ifndef COLLECT_RINGS_ROM + gGameMode = GAME_MODE_MULTI_PLAYER_COLLECT_RINGS; +#endif + gEntitiesManagerTask = NULL; + + for (i = 0; i < 4; i++) { + gMultiplayerPlayerTasks[i] = NULL; + }; + + ApplyGameStageSettings(); +#ifndef COLLECT_RINGS_ROM + gStageFlags &= ~STAGE_FLAG__ACT_START; + gPlayer.moveState &= ~MOVESTATE_IGNORE_INPUT; +#endif + gPlayer.heldInput |= gPlayerControls.jump | gPlayerControls.attack; +} + +// (66.97%) https://decomp.me/scratch/876Ux +NONMATCH("asm/non_matching/game/multiplayer/results_2__sub_800FD9C.inc", void sub_800FD9C(SioMultiplayerScore *data)) +{ + struct MultiplayerScore sp00; + // s32 ip = 0; + u32 i = 0; + u32 r3; + bool32 r6; + + struct MultiplayerScore *inScore = &data->mps; + + for (i = 0; i < ARRAY_COUNT(LOADED_SAVE->multiplayerScores); i++) { + struct MultiplayerScore *score = &LOADED_SAVE->multiplayerScores[i]; + r6 = TRUE; + r3 = 0; + + if ((u8)data->mps.playerId != (u8)score->playerId) { + r6 = FALSE; + } else { + // _0800FDD8 + while (++r3 < 12) { + if (data->mps.data.split.playerName[r3] != score->data.split.playerName[r3]) { + r6 = FALSE; + break; + } + } + // _0800FDEC + + if (r6) { + sp00 = data->mps; + + while (i > 0) { + LOADED_SAVE->multiplayerScores[i] = LOADED_SAVE->multiplayerScores[i - 1]; + i--; + } + + LOADED_SAVE->multiplayerScores[0] = sp00; + + return; + } + } + // _0800FE38 (cont.) + } + + for (i = 9; i > 0; i--) { + LOADED_SAVE->multiplayerScores[i] = LOADED_SAVE->multiplayerScores[i - 1]; + } + +#ifndef NON_MATCHING + { + u8 *ptrA, *ptrB; + ptrB = (u8 *)&inScore->data.raw; + ptrA = (u8 *)&LOADED_SAVE->multiplayerScores[0].data.raw; + for (i = 0; i < sizeof(inScore->data.raw); i++) { + *ptrA++ = *ptrB++; + } + } +#else + // This is both less error-prone and removes compile errors on modern compilers + LOADED_SAVE->multiplayerScores[0].playerId = inScore->playerId; + memcpy(LOADED_SAVE->multiplayerScores[0].data.split.playerName, inScore->data.split.playerName, + sizeof(LOADED_SAVE->multiplayerScores[0].data.split.playerName)); +#endif + + LOADED_SAVE->multiplayerScores[0].data.split.wins = 0; + LOADED_SAVE->multiplayerScores[0].data.split.losses = 0; + LOADED_SAVE->multiplayerScores[0].data.split.draws = 0; +} +END_NONMATCH + +void ShowSinglePakResults(void) +{ + u32 i; + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + gMultiplayerCharacters[i] = 0; + gMPRingCollectWins[i] = 0; + gMultiplayerRanks[i] = i; + gMultiplayerMissingHeartbeats[i] = 0; + } + + MultiSioStart(); + CreateMultiplayerSinglePakResultsScreen(0); +} + +#if (GAME == GAME_SA1) +void Task_MultiplayerModeSelectScreenInit(void) +{ + ModeSelect *modeSelect = TASK_DATA(gCurTask); + modeSelect->qUnk208 -= Q(0.5); + if (modeSelect->qUnk208 <= Q(0)) { + modeSelect->qUnk208 = Q(0); + gCurTask->main = Task_800E648; + } + + gBldRegs.bldY = I(modeSelect->qUnk208); + + sub_800E798(); +} +#endif // (GAME == GAME_SA1) + +void SA2_LABEL(sub_8081C50)(void) +{ + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + SA2_LABEL(sub_8081DB4)(); + gCurTask->main = SA2_LABEL(sub_80818B8); + MultiSioStart(); +} + +void SA2_LABEL(sub_8081C8C)(void) +{ + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + SA2_LABEL(sub_8081DB4)(); + gCurTask->main = SA2_LABEL(sub_8081CC4); +} + +#if (GAME == GAME_SA1) +void SA2_LABEL(sub_8081DB4)(void) +#elif (GAME == GAME_SA2) +void SA2_LABEL(sub_8081DB4)(struct SinglePakConnectScreen *connectScreen) +#endif +{ +#if (GAME == GAME_SA1) + ModeSelect *modeSelect = TASK_DATA(gCurTask); +#endif + +#ifdef MULTI_SIO_DI_FUNC_FAST + gIntrTable[0] = (void *)gMultiSioIntrFuncBuf; +#else + gIntrTable[0] = MultiSioIntr; +#endif + + MultiSioInit((gMultiSioStatusFlags & MULTI_SIO_ALL_CONNECTED) >> 8); +#if (GAME == GAME_SA1) + modeSelect->unk202 = 0; + modeSelect->unk205 = 0; +#elif (GAME == GAME_SA2) + connectScreen->unkF8 = 0; + connectScreen->unkF4 = 0; +#endif + gMultiSioStatusFlags = 0; +} + +void SA2_LABEL(sub_8081CC4)(void) +{ + if (gMultiSioStatusFlags & MULTI_SIO_LD_ENABLE) { + if (gMultiSioStatusFlags & MULTI_SIO_LD_SUCCESS) { + gMultiSioSend.pat0.unk2 += 1; + } + gCurTask->main = SA2_LABEL(sub_80818B8); + } + + SA2_LABEL(sub_80818B8)(); +} + +void Task_8010020(void) +{ + u32 progress = 0; + if (Sio32MultiLoadMain(&progress)) { + gCurTask->main = SA2_LABEL(sub_8081C8C); + } +} + +void SA2_LABEL(sub_8081D58)(void) +{ + TaskDestroy(gCurTask); + CreateMultiplayerSinglePakResultsScreen(0); +} + +void sub_8010060(void) +{ + if (B_BUTTON & gPressedKeys) { + m4aSongNumStart(107); + gCurTask->main = Task_800E648; + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x20; + } +} diff --git a/sa1/src/game/multiplayer/mp_player.c b/sa1/src/game/multiplayer/mp_player.c new file mode 100644 index 0000000000..376a150481 --- /dev/null +++ b/sa1/src/game/multiplayer/mp_player.c @@ -0,0 +1,2182 @@ +#include "core.h" +#include "task.h" +#include "malloc_vram.h" + +#include "lib/m4a/m4a.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "game/stage/spawn_positions.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/stage.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" + +#include "game/multiplayer/mp_player.h" +#include "game/stage/player.h" +#include "game/stage/item_tasks.h" + +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/multiplayer/mp_attack_1_effect.h" +#if (GAME == GAME_SA1) +#include "game/multiplayer/chao.h" +#include "constants/sa2_char_states.h" +#elif (GAME == GAME_SA2) +#include "game/multiplayer/mp_attack_2_effect.h" +#endif +#include "game/multiplayer/multipak_connection.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" + +// TODO: Names +#if (GAME == GAME_SA1) +#define IS_SPECIFIC_TAILS_ANIM \ + (s->graphics.anim != SA1_ANIM_CHAR(TAILS, 58) && s->graphics.anim != SA1_ANIM_CHAR(TAILS, 57) \ + && s->graphics.anim != SA1_ANIM_CHAR(TAILS, 56)) +#define IS_SPECIFIC_KNUCKLES_ANIM \ + (s->graphics.anim != SA1_ANIM_CHAR(KNUCKLES, 62) && s->graphics.anim != SA1_ANIM_CHAR(KNUCKLES, 63) \ + && s->graphics.anim != SA1_ANIM_CHAR(KNUCKLES, 64)) +#elif (GAME == GAME_SA2) +#define IS_SPECIFIC_TAILS_ANIM \ + (s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_22, CHARACTER_TAILS) \ + && s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_21, CHARACTER_TAILS) \ + && s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_20, CHARACTER_TAILS)) +#define IS_SPECIFIC_KNUCKLES_ANIM \ + (s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_19, CHARACTER_KNUCKLES) \ + && s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_20, CHARACTER_KNUCKLES) \ + && s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_21, CHARACTER_KNUCKLES)) +#endif + +u32 unused_3005838 = 0; +bool8 gShouldSpawnMPAttack2Effect = FALSE; + +void Task_CreateMultiplayerPlayer(void); +void TaskDestructor_MultiplayerPlayer(struct Task *); + +void SA2_LABEL(sub_8016D20)(void); +void SA2_LABEL(sub_801707C)(void); +void SA2_LABEL(sub_8017670)(void); +void SA2_LABEL(sub_8017C28)(void); +void SA2_LABEL(sub_8017F34)(void); +void SA2_LABEL(sub_8018120)(void); +u32 SA2_LABEL(sub_80181E0)(void); +bool32 SA2_LABEL(sub_8018300)(void); +void LaunchPlayer(s16); + +#if COLLECT_RINGS_ROM +// Can't be sure this was defined here, but it works as it +// may have something to do with the characters +const u16 gUnknown_02015B18[] = { 0x55, 0x59, 0x5D, 0x61 }; +#endif + +void CreateMultiplayerPlayer(u8 id) +{ + struct Task *t = TaskCreate(Task_CreateMultiplayerPlayer, sizeof(MultiplayerPlayer), 0x2000, 0, TaskDestructor_MultiplayerPlayer); + MultiplayerPlayer *mpp = TASK_DATA(t); + Sprite *s; + SpriteTransform *tf; + u16 *p; + u32 pid; + mpp->unk56 = id; +#if (GAME == GAME_SA1) + mpp->unk54 = 0x0; +#elif (GAME == GAME_SA2) + mpp->unk54 = 0x40; +#endif + mpp->unk44 = 0; + mpp->unk48 = 0; + mpp->unk66 = 0; + mpp->unk68 = 0; + mpp->unk6A = 0; + + if (id != SIO_MULTI_CNT->id) { + mpp->unk60 = 30; + } else { + mpp->unk60 = 0; + } + + mpp->unk57 = 128; + mpp->unk61 = 0; + mpp->unk5C = 0; + mpp->unk64 = mpp->unk56; + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + mpp->unk5C |= 2; + } + + mpp->pos.x = 0; + mpp->pos.y = 0; + +#if (GAME == GAME_SA1) +#ifndef COLLECT_RINGS_ROM + if (IS_SINGLE_PLAYER || gGameMode == GAME_MODE_RACE || gGameMode == GAME_MODE_MULTI_PLAYER) { + mpp->pos.x = gSpawnPositions[gCurrentLevel][0]; + mpp->pos.y = gSpawnPositions[gCurrentLevel][1]; + } else if (gGameMode == GAME_MODE_CHAO_HUNT) { + u32 pid = SIO_MULTI_CNT->id; + mpp->pos.x = gSpawnPositions_Modes_4_and_5[gCurrentLevel - NUM_LEVEL_IDS_SP][pid][0]; + mpp->pos.y = gSpawnPositions_Modes_4_and_5[gCurrentLevel - NUM_LEVEL_IDS_SP][pid][1]; + } else if (gGameMode == GAME_MODE_TEAM_PLAY) { + pid = SIO_MULTI_CNT->id; + if (gCurrentLevel == 16) { + mpp->pos.x = gSpawnPositions_Modes_4_and_5[gCurrentLevel - NUM_LEVEL_IDS_SP][SIO_MULTI_CNT->id][0]; + mpp->pos.y = gSpawnPositions_Modes_4_and_5[gCurrentLevel - NUM_LEVEL_IDS_SP][SIO_MULTI_CNT->id][1]; + } else { + u32 r4; + u32 i; + u32 outerBit = (gMultiplayerConnections & (0x10 << pid)) >> (pid + 4); + + r4 = 0; + for (i = 0; i < pid; i++) { + bool32 innerBit = (gMultiplayerConnections & (0x10 << i)) >> (i + 4); + if (innerBit == outerBit) { + r4++; + } + } + + if (outerBit == 0) { + r4 = -r4; + } + + mpp->pos.x = gSpawnPositions_Modes_4_and_5[gCurrentLevel - NUM_LEVEL_IDS_SP][outerBit][0] + r4 * 24; + mpp->pos.y = gSpawnPositions_Modes_4_and_5[gCurrentLevel - NUM_LEVEL_IDS_SP][outerBit][1]; + } + } else +#endif // COLLECT_RINGS_ROM + { + switch (SIO_MULTI_CNT->id) { + case 0: { + mpp->pos.x = 232; + mpp->pos.y = 829; + break; + } + case 1: { + mpp->pos.x = 1585; + mpp->pos.y = 926; + break; + } + case 2: { + mpp->pos.x = 232; + mpp->pos.y = 348; + break; + } + case 3: { + mpp->pos.x = 1585; + mpp->pos.y = 279; + break; + } + } + } +#elif (GAME == GAME_SA2) +#ifndef COLLECT_RINGS_ROM + if (IS_SINGLE_PLAYER || gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + mpp->pos.x = gSpawnPositions[gCurrentLevel][0]; + mpp->pos.y = gSpawnPositions[gCurrentLevel][1]; + } else +#endif + { + switch (SIO_MULTI_CNT->id) { + case 0: { + mpp->pos.x = 232; + mpp->pos.y = 829; + break; + } + case 1: { + mpp->pos.x = 1585; + mpp->pos.y = 279; + break; + } + case 2: { + mpp->pos.x = 1585; + mpp->pos.y = 926; + break; + } + case 3: { + mpp->pos.x = 232; + mpp->pos.y = 348; + break; + } + } + } +#endif + + s = &mpp->s; + tf = &mpp->transform; +#if (GAME == GAME_SA1) + if (mpp->unk56 != SIO_MULTI_CNT->id) { + s->graphics.dest = VramMalloc(64); + } else { + s->graphics.dest = (void *)OBJ_VRAM0; + } +#endif + s->oamFlags = SPRITE_OAM_ORDER(16); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); +#if (GAME == GAME_SA1) + s->palId = 0; +#elif (GAME == GAME_SA2) + s->palId = mpp->unk56; +#endif + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s->graphics.anim = 0; + s->variant = 0; + s->x = 0; + s->y = 0; + + tf->qScaleY = 256; + +#if (GAME == GAME_SA2) +#ifndef COLLECT_RINGS_ROM + s->graphics.anim = gPlayerCharacterIdleAnims[gMultiplayerCharacters[mpp->unk56]]; +#endif // COLLECT_RINGS_ROM + + if (mpp->unk56 != SIO_MULTI_CNT->id) { + s->graphics.dest = VramMalloc(64); + s->frameFlags |= SPRITE_FLAG_MASK_MOSAIC; + } else { + s->graphics.dest = (void *)OBJ_VRAM0; + } + + UpdateSpriteAnimation(s); +#endif // (GAME == GAME_SA2) + + gMultiplayerPlayerTasks[mpp->unk56] = t; +} + +#if (GAME == GAME_SA1) + +// TODO: Match and merge the SA1 and SA2 versions. +// (89.44%) https://decomp.me/scratch/ldYoR +NONMATCH("asm/non_matching/game/multiplayer/sa1_mp_player__Task_CreateMultiplayerPlayer.inc", void Task_CreateMultiplayerPlayer()) +{ + SpriteTransform *tf; + MultiplayerPlayer *sp4; + s32 sp8; + MultiplayerPlayer *sp14; + s32 temp_r4_2; + s32 var_sl; + struct Task **var_r5_2; + u16 temp_r1; + u16 temp_r1_3; + u16 temp_r1_4; + u16 var_r1_2; + AnimId someAnim; + u8 var_r1; + s8 var_r3_2; + u32 var_r4; + u8 temp_r1_5; + u8 temp_r2_6; + u32 temp_r3_4; + u8 temp_r4_4; + union MultiSioData *send_recv; + RoomEvent_Unknown *temp_r0_8; + + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + Sprite *s = &mpp->s; + MultiplayerPlayer *temp_r5; + + tf = &mpp->transform; + send_recv = &gMultiSioRecv[mpp->unk56]; + if (gMultiSioStatusFlags & (1 << mpp->unk56)) { + mpp->unk61 = 0; + } + if ((gMultiSioStatusFlags & (1 << mpp->unk56)) && (send_recv->pat0.unk0 == 0x1000)) { + mpp->unk61 = 0; + mpp->unk44 = send_recv->pat4.x - mpp->pos.x; + mpp->unk48 = send_recv->pat4.y - mpp->pos.y; + mpp->pos.x = send_recv->pat4.x; + mpp->pos.y = send_recv->pat4.y; + + if ((ABS(mpp->unk44) > 0x40) || (ABS(mpp->unk48) > 0x40)) { + mpp->unk66 = 0; + mpp->unk68 = 0; + } else { + mpp->unk66 = Q(mpp->unk44); + mpp->unk68 = Q(mpp->unk48); + } + + temp_r4_2 = ~mpp->unk57 & send_recv->pat4.unkA; + if (temp_r4_2 & 2) { + CreateItemTask_Invincibility(mpp->unk56); + } + if (1 & temp_r4_2) { + CreateItemTask_Shield_Normal(mpp->unk56); + } + if (temp_r4_2 & 8) { + CreateItemTask_Shield_Magnetic(mpp->unk56); + } + if (temp_r4_2 & 0x50) { + CreateItemTask_Confusion(mpp->unk56); + } + + mpp->unk57 = send_recv->pat4.unkA; + mpp->unk54 = send_recv->pat0.unk8[0]; + if (SIO_MULTI_CNT->id != mpp->unk56) { + mpp->unk64 = (u8)((u32)(0x600 & send_recv->pat0.unk8[0]) >> 9); + } else { + if (SIO_MULTI_CNT->id != mpp->unk64) { + temp_r5 = TASK_DATA(gMultiplayerPlayerTasks[mpp->unk64]); + if (SIO_MULTI_CNT->id == temp_r5->unk64) { + mpp->unk64 = (u8)SIO_MULTI_CNT->id; + gPlayer.moveState &= ~8; + gPlayer.moveState &= ~0x20; + gPlayer.moveState &= ~4; + gPlayer.moveState &= ~0x10; + gPlayer.moveState |= 2; + gPlayer.moveState &= ~0x400; + gPlayer.moveState &= ~0x100; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.SA2_LABEL(unk61) = 0; + gPlayer.SA2_LABEL(unk62) = 0; + gPlayer.charState = 4; + gPlayer.timerInvulnerability = 60; + gPlayer.moveState &= 0xFFBFFFFF; + mpp->unk5C &= ~4; + if (temp_r5->unk5C & 4) { + gPlayer.moveState &= 0xFFBFFFFF; + temp_r5->unk5C &= ~4; + } + } + } + } + if (gGameMode == 6) { + u16 unk6 = send_recv->pat1.unk6; + temp_r3_4 = send_recv->pat5.filler3[0]; + gMultiplayerCharRings[mpp->unk56] = I(unk6); + mpp->unk6A = (u16)temp_r3_4; + if (mpp->unk56 == 3) { + if (mpp->unk6A == 8) { + someAnim = 0x188; + } else if (mpp->unk6A == 0x12) { + someAnim = 0x189; + } else { + goto block_x; + } + } else { + block_x: + someAnim = gPlayerCharacterIdleAnims[mpp->unk56] + mpp->unk6A; + } + } else if ((gGameMode == 4) || (gGameMode == 5)) { + sp8 = 0; + someAnim = 0x3FF & send_recv->pat1.unk6; + if (SIO_MULTI_CNT->id != mpp->unk56) { + mpp->unk5C |= (send_recv->pat1.unk6 >> 0xC) << 0x10; + } + + for (var_r1 = 0; var_r1 < 3; var_r1++) { + if (mpp->unk5C & (0x10000 << var_r1)) { + sp8++; + } + } + + gMultiplayerCharRings[mpp->unk56] = sp8; + } else { + someAnim = send_recv->pat1.unk6; + } + temp_r4_4 = 7 & send_recv->pat4.unkB; + if ((s->graphics.anim != someAnim) || (s->variant != temp_r4_4)) { + s->hitboxes[0].index = -1; + mpp->reserved.index = -1; + } + if (4 & mpp->unk54) { + Player *p = &gPlayer; + if (mpp->unk5C & 4) { + p->moveState &= 0xFFBFFFFF; + mpp->unk5C &= ~4; + } + if ((8 & p->moveState) && (p->stoodObj == s)) { + p->moveState = (p->moveState & ~8) | 2; + } + } + s->graphics.anim = someAnim; + s->variant = temp_r4_4; + mpp->unk58[0] = ((s8)send_recv->pat4.unkB >> 3); + s->animSpeed = send_recv->pat4.unkC; + tf->rotation = send_recv->pat4.unkD * 4; + + } else { + mpp->pos.x += I(mpp->unk66); + mpp->pos.y += I(mpp->unk68); + + if (mpp->unk61++ > 30) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); +#ifndef NON_MATCHING + // NOTE: LinkCommunicationError() does NOT take any arguments, neither in SA1 nor the others. + *(volatile u8 *)&gGameMode; +#endif + LinkCommunicationError(); + return; + } + } + +block_57: + for (var_r3_2 = NUM_CHARACTERS - 1; var_r3_2 >= 0; var_r3_2--) { + if ((s16)gPlayerCharacterIdleAnims[var_r3_2] <= mpp->s.graphics.anim) { + break; + } + } + + s->x = mpp->pos.x - gCamera.x; + s->y = mpp->pos.y - gCamera.y; + tf->x = mpp->pos.x - gCamera.x; + tf->y = mpp->pos.y - gCamera.y; + if (0x800 & mpp->unk54) { + s->prevVariant = -1; + s->hitboxes[0].index = -1; + mpp->reserved.index = -1; + } + UpdateSpriteAnimation(&mpp->s); + sp4 = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + if (((gGameMode == 3) || (gGameMode == 5)) && (gMultiplayerRanks[SIO_MULTI_CNT->id] == -1)) { + var_sl = 1; + for (var_r4 = 0; var_r4 < 4 && (gMultiplayerPlayerTasks[var_r4] != NULL); var_r4++) { + u32 connection = gMultiplayerConnections; + sp14 = TASK_DATA(gMultiplayerPlayerTasks[var_r4]); + if ((((s32)((0x10 << var_r4) & connection) >> (var_r4 + 4)) + == ((s32)((0x10 << SIO_MULTI_CNT->id) & connection) >> (SIO_MULTI_CNT->id + 4))) + && !(0x100 & sp14->unk54)) { + var_sl = 0; + } + } + if (var_sl != 0) { + RoomEvent_GoalReached *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_REACHED_STAGE_GOAL; + } + } + if (!(1 & gStageFlags) && !(4 & mpp->unk54) && !(0x80 & sp4->unk57)) { + if (0x80 & gPlayer.itemEffect) { + goto block_106; + } + if (!(0x80 & mpp->unk57) && !(sp4->unk5C & 1) && (gPlayer.timerInvulnerability == 0) && !(gPlayer.moveState & 0x80)) { + if (gGameMode != 6) { + temp_r1_5 = mpp->unk56; + if (temp_r1_5 != SIO_MULTI_CNT->id) { + switch (gMultiplayerCharacters[mpp->unk56]) { + + case CHARACTER_SONIC: +#if ((GAME == GAME_SA2) || (GAME == GAME_SA3)) + case CHARACTER_CREAM: +#endif + SA2_LABEL(sub_8016D20)(); + break; + case CHARACTER_TAILS: + SA2_LABEL(sub_801707C)(); + break; + case CHARACTER_KNUCKLES: + SA2_LABEL(sub_8017670)(); + break; + case CHARACTER_AMY: + SA2_LABEL(sub_8017C28)(); + break; + } + } + } else if (mpp->unk56 != SIO_MULTI_CNT->id) { + SA2_LABEL(sub_8018120)(); + } + } else { + goto block_101; + } + } else { + block_101: + if ((0x80 & gPlayer.itemEffect) || (0x80 & mpp->unk57) || (gPlayer.timerInvulnerability != 0) || (gPlayer.moveState & 0x80) + || (gMultiplayerRanks[mpp->unk56] != -1)) { + block_106: + if (gGameMode != 6) { + if (mpp->unk56 != SIO_MULTI_CNT->id) { + if (gMultiplayerCharacters[mpp->unk56] < 3) { + s8 count = 1; + if (gMultiplayerCharacters[mpp->unk56] >= count) { + if (4 & mpp->unk5C) { + mpp->unk5C &= ~4; + if (!(0x80 & gPlayer.itemEffect)) { + gPlayer.moveState &= 0xFFBFFFFF; + } + temp_r0_8 = CreateRoomEvent(); + temp_r0_8->type = ROOMEVENT_TYPE_8; + temp_r0_8->unk1 = mpp->unk56; + temp_r0_8->unk2 = 0; + } + } + } + } + if ((8 & gPlayer.moveState) && (gPlayer.stoodObj == s)) { + gPlayer.moveState = (gPlayer.moveState & ~8) | 2; + asm(""); + mpp->unk60 = 0x1E; + } + } else if ((8 & gPlayer.moveState) && (gPlayer.stoodObj == s)) { + gPlayer.moveState = (gPlayer.moveState & ~8) | 2; + mpp->unk60 = 0x1E; + } + } + } + if (1 & mpp->unk54) { + s->frameFlags &= ~0x1F; + s->frameFlags |= (SA2_LABEL(gUnknown_030054B8)++ | 0x20); + if (2 & mpp->unk54) { + tf->qScaleX = -Q(1.0); + } else { + tf->qScaleX = +Q(1.0); + } + if (8 & mpp->unk54) { + tf->qScaleX = -tf->qScaleX; + } + TransformSprite(&mpp->s, tf); + } else { + s->frameFlags &= ~0x20; + if (2 & mpp->unk54) { + s->frameFlags |= 0x400; + } else { + s->frameFlags &= ~0x400; + } + + if (8 & mpp->unk54) { + s->frameFlags |= 0x800; + } else { + s->frameFlags &= ~0x800; + } + } + + s->frameFlags &= 0xFFFFCFFF; + s->frameFlags |= (((0x30 & mpp->unk54) >> 4) << SPRITE_FLAG_SHIFT_PRIORITY); + + if (0x40 & mpp->unk54) { + return; + } + + if ((gStageTime & 2) || (0x20 & mpp->unk57) || (((1 & mpp->unk5C) != 0)) || (gMultiplayerRanks[mpp->unk56] != -1) + || ((mpp->unk60 == 0) && !(4 & mpp->unk54) && !(mpp->unk5C & 2))) { + s->oamFlags = (mpp->unk54 & 0x80) ? 0x440 : 0x400; + s->frameFlags &= ~0x180; + + if (0x20 & mpp->unk57) { + s32 connection; + u8 mode; + if ((((gGameMode != 3) && (gGameMode != 5)) + || (connection = gMultiplayerConnections, + (((0x10 << mpp->unk56) & connection) >> (mpp->unk56 + 4)) + != ((s32)(connection & (0x10 << SIO_MULTI_CNT->id)) >> (SIO_MULTI_CNT->id + 4)))) + || (mode = gGameMode, (mode != 3) && (mode != 5))) { + if (mpp->unk60 == 0) { + if (mpp->unk56 != SIO_MULTI_CNT->id) { + s->frameFlags |= 0x100; + gDispCnt |= 0x8000; + gWinRegs[5] = 0x83F; + } + } + } + } + DisplaySprite(s); + } +} +END_NONMATCH + +#elif (GAME == GAME_SA2) +#ifndef COLLECT_RINGS_ROM +// around 70%: https://decomp.me/scratch/KNjEN +NONMATCH("asm/non_matching/game/multiplayer/mp_player__Task_CreateMultiplayerPlayer.inc", void Task_CreateMultiplayerPlayer(void)) +#else +NONMATCH("asm/non_matching/game/multiplayer/mp_player__Task_CreateMultiplayerPlayer__CollectRings.inc", + void Task_CreateMultiplayerPlayer(void)) +#endif +{ + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + Sprite *s = &mpp->s; + SpriteTransform *transform = &mpp->transform; + s32 id = mpp->unk56; + union MultiSioData *recv = &gMultiSioRecv[id]; + + u32 i; + + if ((gMultiSioStatusFlags & MULTI_SIO_RECV_ID(id))) { + mpp->unk61 = 0; + if (gMultiSioStatusFlags & MULTI_SIO_RECV_ID(id) && recv->pat0.unk0 == 0x5000) { + s32 x; + mpp->unk61 = 0; + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + mpp->unk44 = recv->pat4.x - mpp->pos.x; + mpp->unk48 = recv->pat4.y - mpp->pos.y; + mpp->pos.x = recv->pat4.x; + mpp->pos.y = recv->pat4.y; + + } else { + mpp->unk44 = recv->pat4.x - mpp->pos.x; + mpp->unk48 = recv->pat4.y - mpp->pos.y; + x = ABS(mpp->unk44); + + if (x > 15) { + x = ABS(mpp->unk48); + if (mpp->unk44 > 0 && mpp->unk48 > 0) { + mpp->unk44 = recv->pat4.x - mpp->pos.x - 1440; + mpp->unk48 = recv->pat4.y - mpp->pos.y - 864; + } else { + if (mpp->unk44 < 0 && mpp->unk48 < 0) { + mpp->unk44 = recv->pat4.x - mpp->pos.x - 1440; + mpp->unk48 = recv->pat4.y - mpp->pos.y - 864; + } + } + } + mpp->pos.x = recv->pat4.x; + mpp->pos.y = recv->pat4.y; + } + if (ABS(mpp->unk44) < 0x41) { + if (ABS(mpp->unk48) >= 0x40) { + mpp->unk66 = Q(mpp->unk44); + mpp->unk68 = Q(mpp->unk48); + } else { + mpp->unk66 = 0; + mpp->unk68 = 0; + } + } else { + mpp->unk66 = 0; + mpp->unk68 = 0; + } + { + u8 val = recv->pat4.unk10 & ~mpp->unk57; + if (SIO_MULTI_CNT->id == mpp->unk56) { + if (val & 2 && !(mpp->unk57 & 2)) { + CreateItemTask_Invincibility(mpp->unk56); + } + if (val & 0x50 && !(mpp->unk57 & 2)) { + CreateItemTask_Confusion(mpp->unk56); + } + } + } + mpp->unk57 = recv->pat4.unk10; + // TODO: not pat4 + mpp->unk54 = recv->pat4.unk8; + + if (SIO_MULTI_CNT->id != mpp->unk56) { + mpp->unk64 = ((recv->pat4.unk8) & 0x600) >> 9; + } else { + if (SIO_MULTI_CNT->id != mpp->unk64) { + MultiplayerPlayer *mpp2 = TASK_DATA(gMultiplayerPlayerTasks[mpp->unk64]); + if (SIO_MULTI_CNT->id == mpp2->unk64) { + mpp2->unk64 = SIO_MULTI_CNT->id; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.moveState &= ~MOVESTATE_4; + gPlayer.moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.moveState &= ~MOVESTATE_400; + gPlayer.moveState &= ~MOVESTATE_100; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.SA2_LABEL(unk61) = 0; + gPlayer.SA2_LABEL(unk62) = 0; + + gPlayer.charState = CHARSTATE_WALK_A; + gPlayer.moveState |= MOVESTATE_800000; + gPlayer.callback = Player_TouchGround; + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp->unk5C &= ~4; + if (mpp2->unk5C & 4) { + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp2->unk5C &= ~4; + } + } + } + } + + { + u32 anim; + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gMultiplayerCharRings[mpp->unk56] = I(recv->pat4.unk6); + mpp->unk6A = recv->pat4.unk6; + anim = gPlayerCharacterIdleAnims[mpp->unk6A]; + } else { + anim = recv->pat4.unk6; + } + + if (s->graphics.anim != anim || s->variant != (recv->pat4.unkB % 16)) { + s->hitboxes[0].index = -1; + s->hitboxes[1].index = -1; + } + + if (mpp->unk54 & 4) { + if (mpp->unk5C & 4) { + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp->unk5C &= ~4; + } + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + } + + s->graphics.anim = anim; + s->variant = recv->pat4.unk6; + mpp->unk58[0] = recv->pat4.unkB >> 4; + s->animSpeed = recv->pat4.unkC; + transform->rotation = recv->pat4.unkD << 2; + } + } else { + goto thing; + // mpp->pos.x += I(mpp->unk66); + // mpp->pos.y += I(mpp->unk68); + + // if (mpp->unk61++ > 30) { + // // TODO: macro this + // TasksDestroyAll(); + // PAUSE_BACKGROUNDS_QUEUE(); + // gUnknown_03005390 = 0; + // PAUSE_GRAPHICS_QUEUE(); + // LinkCommunicationError(); + // return; + // } + } + } else { + thing: + mpp->pos.x += I(mpp->unk66); + mpp->pos.y += I(mpp->unk68); + + if (mpp->unk61++ > 30) { + // TODO: macro this + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gUnknown_03005390 = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } + + { + s8 i; + for (i = 3; i >= 0; i--) { + if (s->graphics.anim >= gPlayerCharacterIdleAnims[i]) { + break; + } + } + + s->x = mpp->pos.x - gCamera.x; + s->y = mpp->pos.y - gCamera.y; + transform->x = mpp->pos.x - gCamera.x; + transform->y = mpp->pos.y - gCamera.y; + + if (mpp->unk54 & 0x800) { + s->prevVariant = -1; + s->hitboxes[0].index = -1; + s->hitboxes[1].index = -1; + } + UpdateSpriteAnimation(s); + } + + if (gGameMode == GAME_MODE_TEAM_PLAY && gMultiplayerRanks[SIO_MULTI_CNT->id] == -1) { + u32 someBool = TRUE; + for (i = 0; i < 4; i++) { + if (gMultiplayerPlayerTasks[i] == NULL) { + break; + } + + { + MultiplayerPlayer *mpp2 = TASK_DATA(gMultiplayerPlayerTasks[i]); + if ((gMultiplayerConnections & (0x10 << (i))) >> ((i + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4) + && !(mpp2->unk54 & 0x100)) { + + someBool = FALSE; + break; + } + } + } + + if (someBool) { + ((RoomEvent *)CreateRoomEvent())->type = 7; + } + } + + if (!(gStageFlags & 1) && !(mpp->unk54 & 0x80000004)) { + if (!(gPlayer.itemEffect & 0x80)) { + if (!(mpp->unk5C & 1) && (gPlayer.timerInvulnerability == 0) + && !(gPlayer.moveState & (MOVESTATE_IA_OVERRIDE | MOVESTATE_DEAD))) { + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (mpp->unk56 != SIO_MULTI_CNT->id) { + switch (gMultiplayerCharacters[mpp->unk56]) { + + case CHARACTER_SONIC: + case CHARACTER_CREAM: + SA2_LABEL(sub_8016D20)(); + break; + case CHARACTER_TAILS: + SA2_LABEL(sub_801707C)(); + break; + case CHARACTER_KNUCKLES: + SA2_LABEL(sub_8017670)(); + break; + case CHARACTER_AMY: + SA2_LABEL(sub_8017C28)(); + break; + } + } + } else { + if (mpp->unk56 != SIO_MULTI_CNT->id) { + SA2_LABEL(sub_8018120)(); + } + } + } + } + } else { + if ((gPlayer.itemEffect & PLAYER_ITEM_EFFECT__TELEPORT) || (mpp->unk57 & 0x80) || gPlayer.timerInvincibility == 0 + || !PLAYER_IS_ALIVE || gMultiplayerRanks[mpp->unk56] != -1) { + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (mpp->unk56 == SIO_MULTI_CNT->id && gMultiplayerCharacters[mpp->unk56] == CHARACTER_TAILS + && gMultiplayerCharacters[mpp->unk56] == CHARACTER_KNUCKLES && mpp->unk5C & 4) { + mpp->unk5C &= ~0x6; + if (!(gPlayer.itemEffect & PLAYER_ITEM_EFFECT__TELEPORT)) { + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + } + { + RoomEvent_Unknown *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_UNKNOWN; + roomEvent->unk1 = mpp->unk56; + roomEvent->unk2 = 0; + } + } + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + gPlayer.moveState &= ~(MOVESTATE_STOOD_ON_OBJ | MOVESTATE_FACING_LEFT); + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk60 = 30; + } + } else { + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + gPlayer.moveState &= ~(MOVESTATE_FLIP_WITH_MOVE_DIR | MOVESTATE_IN_AIR); + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk60 = 30; + } + } + } + } + + if (mpp->unk54 & 1) { + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; + s->frameFlags = gUnknown_030054B8++ | SPRITE_FLAG_MASK_ROT_SCALE; + if (mpp->unk54 & 2) { + transform->qScaleX = -256; + } else { + transform->qScaleX = +256; + } + + if (mpp->unk54 & 8) { + transform->qScaleX = -transform->qScaleX; + } + TransformSprite(s, transform); + } else { + s->frameFlags &= ~0x30; + if (mpp->unk54 & 2) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + } + if (mpp->unk54 & 8) { + s->frameFlags |= SPRITE_FLAG_MASK_Y_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_Y_FLIP; + } + } + + s->frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + s->frameFlags |= (mpp->unk54 & 0x30) << 8; + + if (!(mpp->unk54 & 0x40) + && ((gStageTime & 2 || mpp->unk57 & 0x20 || mpp->unk5C & 1 || gMultiplayerRanks[mpp->unk56] != -1) + || (mpp->unk60 == 0 && !(mpp->unk54 & 4) && !(mpp->unk5C & 2)))) { + s->oamFlags = SPRITE_OAM_ORDER(16); + if (mpp->unk54 & 0x80) { + s->oamFlags |= 0x40; + } + + s->frameFlags &= ~SPRITE_FLAG_MASK_OBJ_MODE; + if (mpp->unk57 & 0x20 + && (gGameMode != GAME_MODE_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) + && mpp->unk60 == 0 && mpp->unk56 != SIO_MULTI_CNT->id) { + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, 2); + gDispCnt |= DISPCNT_OBJWIN_ON; + gWinRegs[WINREG_WINOUT] = (WINOUT_WINOBJ_BG3 | WINOUT_WIN01_ALL); + } + + if ((u16)(s->x + 63) < (DISPLAY_WIDTH + 127) && (s->y > -64 && s->y < DISPLAY_HEIGHT + 64)) { + DisplaySprite(s); + } else if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if ((gCamera.x + s->x) < 0x3C1) { + s->x += 0x5A0; + transform->x += 0x5A0; + s->y += 0x360; + transform->y += 0x360; + } else { + s->x -= 0x5A0; + transform->x -= 0x5A0; + s->y -= 0x360; + transform->y -= 0x360; + } + + if ((u16)(s->x + 63) < (DISPLAY_WIDTH + 127) && (s->y > -64 && s->y < DISPLAY_HEIGHT + 64)) { + if (mpp->unk54 & 1) { + TransformSprite(s, transform); + } + DisplaySprite(s); + } + } + } + + if (gShouldSpawnMPAttackEffect != FALSE) { + CreateMPAttackEffect(); + gShouldSpawnMPAttackEffect = FALSE; + } + + if (gShouldSpawnMPAttack2Effect != FALSE) { + CreateMPAttack2Effect(); + gShouldSpawnMPAttack2Effect = FALSE; + } +} +END_NONMATCH +#endif // (GAME == GAME_SA1) + +#ifndef COLLECT_RINGS_ROM +// Sonic/Cream +void SA2_LABEL(sub_8016D20)(void) +{ + Sprite *sprPlayer = &gPlayer.spriteInfoBody->s; + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + Sprite *s = &mpp->s; + SpriteTransform *transform = &mpp->transform; + u32 val; + u8 *modePtr; + u8 *vModePtr; + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + SA2_LABEL(sub_8017F34)(); + } + +#if (GAME == GAME_SA1) + // Checks twice for gGameMode 3, 5 ! + if (((gGameMode == 3 || gGameMode == 5) + && ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) + || (gGameMode != 3 && gGameMode != 5)) +#elif (GAME == GAME_SA2) + if (gGameMode != GAME_MODE_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) +#endif + { + if (!SA2_LABEL(sub_8018300)()) { + return; + } + + if (!(mpp->unk4C & MOVESTATE_20)) { + return; + } + + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + return; + } + + if (mpp->unk60 == 0) { + if (SA2_LABEL(sub_80181E0)() != 0) { + if (mpp->unk4C & MOVESTATE_20) { + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + } + +#if (GAME == GAME_SA1) + if (s->graphics.anim != CHARSTATE_18) +#elif (GAME == GAME_SA2) + if (s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_SPIN_DASH, CHARACTER_SONIC)) +#endif + { + return; + } + + gPlayer.charState = CHARSTATE_WALK_A; +#if (GAME == GAME_SA2) + gPlayer.callback = Player_TouchGround; +#endif + gPlayer.SA2_LABEL(unk61) = 0; + gPlayer.SA2_LABEL(unk62) = 0; + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + + if (!GRAVITY_IS_INVERTED && I(gPlayer.qWorldY) > mpp->pos.y) { + mpp->unk60 = 30; + return; + } else if (GRAVITY_IS_INVERTED && I(gPlayer.qWorldY) < mpp->pos.y) { + mpp->unk60 = 30; + return; + } else if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + gPlayer.moveState &= ~MOVESTATE_FACING_LEFT; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.qSpeedGround = Q_8_8(12); + gPlayer.qSpeedAirX = Q_8_8(12); + } else { + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.qSpeedGround = -Q_8_8(12); + gPlayer.qSpeedAirX = -Q_8_8(12); + } + mpp->unk60 = 30; + } else { + if (HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1]) && HITBOX_IS_ACTIVE(s->hitboxes[1])) { + return; + } + + if (gPlayer.SA2_LABEL(unk61) != 0 && (gPlayer.character == CHARACTER_TAILS || gPlayer.character == CHARACTER_KNUCKLES)) { + return; + } + + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 1); + + if (mpp->unk4C & MOVESTATE_20 && !(val & MOVESTATE_20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + + mpp->unk4C = val; + + if (val & MOVESTATE_IGNORE_INPUT) { + mpp->unk60 = 30; + } + + if (!(val & (MOVESTATE_10000 | MOVESTATE_20 | MOVESTATE_STOOD_ON_OBJ))) { + return; + } + +#if (GAME == GAME_SA1) + if (s->graphics.anim != CHARSTATE_18) +#elif (GAME == GAME_SA2) + if (s->graphics.anim != SA2_ANIM_CHAR(SA2_CHAR_ANIM_SPIN_DASH, CHARACTER_SONIC)) +#endif + { + return; + } + gPlayer.charState = CHARSTATE_WALK_A; +#if (GAME == GAME_SA2) + gPlayer.callback = Player_TouchGround; +#endif + gPlayer.SA2_LABEL(unk61) = 0; + gPlayer.SA2_LABEL(unk62) = 0; + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + + if (!GRAVITY_IS_INVERTED && I(gPlayer.qWorldY) > mpp->pos.y) { + mpp->unk60 = 30; + return; + } else if (GRAVITY_IS_INVERTED && I(gPlayer.qWorldY) < mpp->pos.y) { + mpp->unk60 = 30; + return; + } else if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + gPlayer.moveState &= ~MOVESTATE_FACING_LEFT; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.qSpeedGround = Q(12); + gPlayer.qSpeedAirX = Q(12); + } else { + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.qSpeedGround = -Q(12); + gPlayer.qSpeedAirX = -Q(12); + } + mpp->unk60 = 30; + } + } else { + mpp->unk60--; + + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ)) { + return; + } + + if (gPlayer.stoodObj != s) { + return; + } + + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 0); + + if ((mpp->unk4C & MOVESTATE_20) && !(val & MOVESTATE_20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + + mpp->unk4C = val; + return; + } +} + +#define SOME_INVERTED_GRAVITY_MACRO (!GRAVITY_IS_INVERTED != !(mpp->unk54 & 8) || !(mpp->unk5C & 0x100) != !GRAVITY_IS_INVERTED) + +// Tails +void SA2_LABEL(sub_801707C)(void) +{ + + Sprite *playerSprite, *s; + MultiplayerPlayer *mpp; + + bool8 someBool; + u32 moveStateVal, val; + s32 result; + u8 unusedByte; + + playerSprite = &gPlayer.spriteInfoBody->s; + someBool = FALSE; + mpp = TASK_DATA(gCurTask); + s = &mpp->s; + moveStateVal = (gPlayer.moveState >> 5) & 1; + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + SA2_LABEL(sub_8017F34)(); + someBool = TRUE; + } + +#if (GAME == GAME_SA1) + // Checks twice for gGameMode 3, 5 ! + if (((gGameMode == 3 || gGameMode == 5) + && ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) + || (gGameMode != 3 && gGameMode != 5)) +#elif (GAME == GAME_SA2) + if (gGameMode != GAME_MODE_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) +#endif + { + if (SA2_LABEL(sub_8018300)() == 0) { + return; + } + + if (!(mpp->unk4C & MOVESTATE_20)) { + return; + } + + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + return; + } + + if (gPlayer.SA2_LABEL(unk61) != 0 && gPlayer.character == CHARACTER_KNUCKLES) { + return; + } + + if (mpp->unk60 == 0 || (mpp->unk5C & 4)) { + u32 someOtherBool; + + mpp->unk60 = 0; + + if (IS_SPECIFIC_TAILS_ANIM) { + if (SA2_LABEL(sub_80181E0)()) { + if (!(mpp->unk4C & 0x20)) { + return; + } + + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + return; + } + } + + if (IS_SPECIFIC_TAILS_ANIM && HITBOX_IS_ACTIVE(playerSprite->hitboxes[1]) && HITBOX_IS_ACTIVE(s->hitboxes[1])) { + return; + } + + someOtherBool = (gPlayer.moveState >> 1) & 1; + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 1); + + if ((mpp->unk4C & 0x20) && !(val & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + + mpp->unk4C = val; + + if (val & 0x200000) { + mpp->unk60 = 30; + } + + if (!(mpp->unk5C & 4)) { + if ((someOtherBool || someBool) && (val & 0x10028 && !IS_SPECIFIC_TAILS_ANIM && (!!GRAVITY_IS_INVERTED != !(mpp->unk54 & 8)))) { + + s32 y; + if (!GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_801E4E4)(MAX(I(gPlayer.qWorldY), mpp->pos.y) + gPlayer.spriteOffsetY, I(gPlayer.qWorldX), + gPlayer.layer, 8, &unusedByte, SA2_LABEL(sub_801EE64)); + } else { + result = SA2_LABEL(sub_801E4E4)(MIN(I(gPlayer.qWorldY), mpp->pos.y) - gPlayer.spriteOffsetY, I(gPlayer.qWorldX), + gPlayer.layer, -8, &unusedByte, SA2_LABEL(sub_801EE64)); + } + + if (result - gPlayer.spriteOffsetY > 0) { + gPlayer.moveState |= MOVESTATE_IA_OVERRIDE; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + + mpp->unk5C |= 4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + + { + RoomEvent_Unknown *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_8; + roomEvent->unk1 = mpp->unk56; + roomEvent->unk2 = 1; + } + + if (!GRAVITY_IS_INVERTED) { + mpp->unk5C &= ~0x100; + } else { + mpp->unk5C |= 0x100; + } + } + } + + if (!(mpp->unk5C & 4)) { + return; + } + } + +#if (GAME > GAME_SA1) + gPlayer.charState = CHARSTATE_IDLE; + gPlayer.callback = Player_TouchGround; +#else + gPlayer.charState = CHARSTATE_38; +#endif + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.SA2_LABEL(unk61) = 0; + gPlayer.SA2_LABEL(unk62) = 0; + + if (Player_TryJump(&gPlayer)) { + mpp->unk60 = 30; + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp->unk5C &= ~4; + + } else { + if (IS_SPECIFIC_TAILS_ANIM || I(gPlayer.qWorldX) <= gCamera.minX || I(gPlayer.qWorldX) >= gCamera.maxX + || SOME_INVERTED_GRAVITY_MACRO || moveStateVal != 0) { + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp->unk5C &= ~4; + gPlayer.charState = CHARSTATE_IDLE; +#if (GAME > GAME_SA1) + gPlayer.callback = Player_TouchGround; +#endif + if (SOME_INVERTED_GRAVITY_MACRO) { + gPlayer.timerInvulnerability = 60; + } + } else { + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) { + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp->unk5C &= ~4; + } else { + s32 x, y; + bool32 invertedGravity = GRAVITY_IS_INVERTED; + mpp->unk5C |= 4; + x = Q(mpp->pos.x); + + // TODO: potential macro + if (!invertedGravity) { +#if (GAME == GAME_SA1) + y = Q(mpp->pos.y + (s->hitboxes[0].b.bottom) + 17); +#elif (GAME == GAME_SA2) + y = Q(mpp->pos.y + (s->hitboxes[0].bottom) + 17); +#endif + result = SA2_LABEL(sub_801E4E4)(I(gPlayer.qWorldY) + gPlayer.spriteOffsetY, I(gPlayer.qWorldX), gPlayer.layer, 8, + &unusedByte, SA2_LABEL(sub_801EE64)); + + if (result < 0) { + y += Q(result); + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk5C &= ~4; + } + + } else { +#if (GAME == GAME_SA1) + y = Q(mpp->pos.y + (s->hitboxes[0].b.top) - 17); +#elif (GAME == GAME_SA2) + y = Q(mpp->pos.y + (s->hitboxes[0].top) - 17); +#endif + result = SA2_LABEL(sub_801E4E4)(I(gPlayer.qWorldY) - gPlayer.spriteOffsetY, I(gPlayer.qWorldX), gPlayer.layer, -8, + &unusedByte, SA2_LABEL(sub_801EE64)); + + if (result < 0) { + y -= Q(result); + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk5C &= ~4; + } + } + gPlayer.qWorldX = x; + gPlayer.qWorldY = y; + if (mpp->unk5C & 4) { +#ifndef NON_MATCHING + // thanks pidgey + u32 speed = 0; + gPlayer.qSpeedAirX = speed; + invertedGravity = GRAVITY_IS_INVERTED; + if (!invertedGravity) { + invertedGravity = FALSE; + } else { + invertedGravity = FALSE; + } + gPlayer.qSpeedAirY = speed; + asm("" ::: "r2"); +#else + gPlayer.qSpeedAirX = 0; + gPlayer.qSpeedAirY = 0; +#endif + + gPlayer.moveState &= ~MOVESTATE_20; + } + } + } + } + + if (!(mpp->unk5C & 4)) { + RoomEvent_Unknown *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_8; + roomEvent->unk1 = mpp->unk56; + roomEvent->unk2 = 0; + } + + if (!GRAVITY_IS_INVERTED) { + mpp->unk5C &= ~0x100; + } else { + mpp->unk5C |= 0x100; + } + } else { + mpp->unk60--; + + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ)) { + return; + } + + if (gPlayer.stoodObj != s) { + return; + } + + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 0); + + if ((mpp->unk4C & MOVESTATE_20) && !(val & MOVESTATE_20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + + mpp->unk4C = val; + } +} + +// Knuckles +// NOTE: Matches in SA2! +// (99.36%) https://decomp.me/scratch/cjmw6 +#if (GAME == GAME_SA1) +NONMATCH("asm/non_matching/game/multiplayer/sa1_mp_player__sa2__sub_8017670.inc", void SA2_LABEL(sub_8017670)(void)) +#else +void SA2_LABEL(sub_8017670)(void) +#endif +{ + Sprite *playerSprite, *s; + MultiplayerPlayer *mpp; + + u32 moveStateVal, val; + s32 result; + u8 unusedByte; + + playerSprite = &gPlayer.spriteInfoBody->s; + mpp = TASK_DATA(gCurTask); + s = &mpp->s; + moveStateVal = (gPlayer.moveState >> 5) & 1; + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + SA2_LABEL(sub_8017F34)(); + } + +#if (GAME == GAME_SA1) + // Checks twice for gGameMode 3, 5 ! + if (((gGameMode == 3 || gGameMode == 5) + && ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) + || (gGameMode != 3 && gGameMode != 5)) +#elif (GAME == GAME_SA2) + if (gGameMode != GAME_MODE_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) +#endif + { + if (!SA2_LABEL(sub_8018300)()) { + return; + } + + if (!(mpp->unk4C & 0x20)) { + return; + } + + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + return; + } + + if (gPlayer.SA2_LABEL(unk61) != 0 && gPlayer.character == CHARACTER_TAILS) { + return; + } + + if (mpp->unk60 == 0 || (mpp->unk5C & 4)) { + mpp->unk60 = 0; + if (IS_SPECIFIC_KNUCKLES_ANIM) { + if (SA2_LABEL(sub_80181E0)()) { + if (!(mpp->unk4C & 0x20)) { + return; + } + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + return; + } + + if (IS_SPECIFIC_KNUCKLES_ANIM && HITBOX_IS_ACTIVE(playerSprite->hitboxes[1]) && HITBOX_IS_ACTIVE(s->hitboxes[1])) { + return; + } + } + + { + s8 rect[4] = { -gPlayer.spriteOffsetX, -gPlayer.spriteOffsetY, gPlayer.spriteOffsetX, gPlayer.spriteOffsetY }; + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 1); + + if (mpp->unk4C & 0x20 && !(val & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + + mpp->unk4C = val; + + if (val & 0x200000) { + mpp->unk60 = 30; + } + + if (Coll_Player_Entity_RectIntersection(s, mpp->pos.x, mpp->pos.y, &gPlayer, (Rect8 *)rect)) { + u8 temp = ((mpp->unk54 >> 7) & 1); + if ((temp == gPlayer.layer) && !IS_SPECIFIC_KNUCKLES_ANIM && !GRAVITY_IS_INVERTED == !(mpp->unk54 & 8)) { + if ((!GRAVITY_IS_INVERTED && I(gPlayer.qWorldY) > mpp->pos.y) + || (GRAVITY_IS_INVERTED && I(gPlayer.qWorldY) < mpp->pos.y)) { + gPlayer.moveState |= MOVESTATE_IA_OVERRIDE; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.qSpeedGround = 0; + gPlayer.qSpeedAirX = 0; + gPlayer.charState = CHARSTATE_IDLE; + gPlayer.SA2_LABEL(unk61) = 0; + gPlayer.SA2_LABEL(unk62) = 0; + if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + gPlayer.moveState &= ~MOVESTATE_FACING_LEFT; + } else { + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + } + if (!(mpp->unk5C & 4)) { + { + RoomEvent_Unknown *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_8; + roomEvent->unk1 = mpp->unk56; + roomEvent->unk2 = 1; + } + if (!GRAVITY_IS_INVERTED) { + mpp->unk5C &= ~0x100; + } else { + mpp->unk5C |= 0x100; + } + } + mpp->unk5C |= 4; + } + } + } + + if (!(mpp->unk5C & 4)) { + return; + } + + if (Player_TryJump(&gPlayer) != 0) { + mpp->unk60 = 30; + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp->unk5C &= ~0x4; + return; + } + + if (IS_SPECIFIC_KNUCKLES_ANIM || I(gPlayer.qWorldX) <= gCamera.minX || I(gPlayer.qWorldX) >= gCamera.maxX + || SOME_INVERTED_GRAVITY_MACRO || moveStateVal != 0) { + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + mpp->unk5C &= ~4; + gPlayer.charState = CHARSTATE_IDLE; + if (SOME_INVERTED_GRAVITY_MACRO) { + mpp->unk60 = 30; + } + + return; + } + { + s32 x, y; + s32 playerUnk17 = gPlayer.spriteOffsetY; + bool32 gravityInverted = GRAVITY_IS_INVERTED; + // mpp->unk5C |= 4; + x = QS(mpp->pos.x); + + // TODO: potential macro + if (!(gravityInverted)) { +#if (GAME == GAME_SA1) + y = QS((mpp->pos.y + (s->hitboxes[0].b.top)) - rect[3]); + result = SA2_LABEL(sub_801F100)((mpp->pos.y + (s->hitboxes[0].b.top) - rect[3]) - playerUnk17, I(x), gPlayer.layer, -8, + SA2_LABEL(sub_801EC3C)); +#elif (GAME == GAME_SA2) + y = QS((mpp->pos.y + (s->hitboxes[0].top)) - rect[3]); + result = SA2_LABEL(sub_801F100)((mpp->pos.y + (s->hitboxes[0].top) - rect[3]) - playerUnk17, I(x), gPlayer.layer, -8, + SA2_LABEL(sub_801EC3C)); +#endif + + if (result < 0) { + y -= QS(result); + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk5C &= ~4; + } + } else { +#if (GAME == GAME_SA1) + y = QS(mpp->pos.y + (s->hitboxes[0].b.bottom) + rect[3]); + result = SA2_LABEL(sub_801F100)(((mpp->pos.y + (s->hitboxes[0].b.bottom) + rect[3]) + playerUnk17), I(x), gPlayer.layer, + 8, SA2_LABEL(sub_801EC3C)); +#elif (GAME == GAME_SA2) + y = QS(mpp->pos.y + (s->hitboxes[0].bottom) + rect[3]); + result = SA2_LABEL(sub_801F100)(((mpp->pos.y + (s->hitboxes[0].bottom) + rect[3]) + playerUnk17), I(x), gPlayer.layer, + 8, SA2_LABEL(sub_801EC3C)); +#endif + + if (result < 0) { + y += QS(result); + gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE; + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk5C &= ~4; + } + } + gPlayer.qWorldX = x; + gPlayer.qWorldY = y; + } + + if ((mpp->unk5C & 4)) { + gPlayer.moveState |= MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState &= ~MOVESTATE_4; + gPlayer.moveState &= ~MOVESTATE_IN_AIR; + + gPlayer.stoodObj = s; + gPlayer.qSpeedAirY = 0; + + if ((s->frameFlags & SPRITE_FLAG_MASK_X_FLIP)) { + gPlayer.moveState &= ~MOVESTATE_FACING_LEFT; + } else { + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + } + } + + if (!(mpp->unk5C & 4)) { + RoomEvent_Unknown *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_8; + roomEvent->unk1 = mpp->unk56; + roomEvent->unk2 = 0; + } + + if (!GRAVITY_IS_INVERTED) { + mpp->unk5C &= ~0x100; + } else { + mpp->unk5C |= 0x100; + } + } + } else { + mpp->unk60--; + + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ)) { + return; + } + + if (gPlayer.stoodObj != s) { + return; + } + + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 0); + + if ((mpp->unk4C & MOVESTATE_20) && !(val & MOVESTATE_20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + + mpp->unk4C = val; + } +} +#if (GAME == GAME_SA1) +END_NONMATCH +#endif + +void SA2_LABEL(sub_8017C28)(void) +{ + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + Sprite *s = &mpp->s; + u32 val; + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + SA2_LABEL(sub_8017F34)(); + } + +#if (GAME == GAME_SA1) + // Checks twice for gGameMode 3, 5 ! + if (((gGameMode == 3 || gGameMode == 5) + && ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) + || (gGameMode != 3 && gGameMode != 5)) +#elif (GAME == GAME_SA2) + if (gGameMode != GAME_MODE_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (mpp->unk56))) >> ((mpp->unk56 + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) +#endif + { + if (!SA2_LABEL(sub_8018300)()) { + return; + } + + if (!(mpp->unk4C & 0x20)) { + return; + } + + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + return; + } + + if (mpp->unk60 == 0) { + if (!HITBOX_IS_ACTIVE(s->hitboxes[1])) { + if (gPlayer.SA2_LABEL(unk61) != 0 && (gPlayer.character == CHARACTER_TAILS || gPlayer.character == CHARACTER_KNUCKLES)) { + return; + } + + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 1); + + if (mpp->unk4C & 0x20 && !(val & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + mpp->unk4C = val; + return; + } else { + if (gPlayer.SA2_LABEL(unk61) != 0 && (gPlayer.character == CHARACTER_TAILS || gPlayer.character == CHARACTER_KNUCKLES)) { + return; + } + val = SA2_LABEL(sub_800DA4C)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1); + if ((val & 2) && !(gPlayer.moveState & MOVESTATE_IN_AIR) && gPlayer.rotation == 0) { +#if (GAME == GAME_SA1) + if (s->graphics.anim == SA1_ANIM_CHAR(AMY, BOOSTLESS_ATTACK)) +#elif (GAME == GAME_SA2) + if (s->graphics.anim == SA2_ANIM_CHAR(SA2_CHAR_ANIM_BOOSTLESS_ATTACK, CHARACTER_AMY)) +#endif + { + LaunchPlayer(-Q_8_8(7.5)); +#ifndef NON_MATCHING + goto lab; +#else + mpp->unk60 = 30; + return; +#endif + } + +#if (GAME == GAME_SA1) + if (s->graphics.anim == SA1_ANIM_CHAR(AMY, SA2_19)) +#elif (GAME == GAME_SA2) + if (s->graphics.anim == SA2_ANIM_CHAR(SA2_CHAR_ANIM_19, CHARACTER_AMY)) +#endif + { + LaunchPlayer(-Q_8_8(10.5)); +#ifndef NON_MATCHING + goto lab; +#else + mpp->unk60 = 30; + return; +#endif + } + } + + if ((val & 1)) { + if ((val & 0x20000)) { + if (gPlayer.qSpeedAirX > 0) { + gPlayer.qSpeedAirX = -gPlayer.qSpeedAirX; + gPlayer.qSpeedGround = -gPlayer.qSpeedGround; + } + } else if ((val & 0x40000)) { + if (gPlayer.qSpeedAirX < 0) { + gPlayer.qSpeedAirX = -gPlayer.qSpeedAirX; + gPlayer.qSpeedGround = -gPlayer.qSpeedGround; + } + } + + if (val & 0x100000 && gPlayer.qSpeedAirY > 0) { + gPlayer.qSpeedAirY = -gPlayer.qSpeedAirY; + } +#ifndef NON_MATCHING + lab: +#endif + mpp->unk60 = 30; + return; + } else { + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 1); + + if (mpp->unk4C & 0x20 && !(val & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + + mpp->unk4C = val; + return; + } + } + + } else { + mpp->unk60--; + + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ)) { + return; + } + + if (gPlayer.stoodObj != s) { + return; + } + + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 0); + + if (mpp->unk4C & 0x20 && !(val & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + mpp->unk4C = val; + } +} + +void SA2_LABEL(sub_8017F34)(void) +{ + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + MultiplayerPlayer *otherMpp; + s32 result; + + if ((ABS(mpp->unk44) > 0x80) || (ABS(mpp->unk48) > 0x80)) { + gPlayer.moveState &= ~0x8; + gPlayer.moveState |= 2; + mpp->unk60 = 30; + return; + } + +#if (GAME == GAME_SA2) + otherMpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + if ((otherMpp->unk54 & 0x80) != (mpp->unk54 & 0x80)) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.stoodObj = (void *)-1; + mpp->unk64 = mpp->unk56; + return; + } +#endif + + gPlayer.qWorldX += Q(mpp->unk44); + if (!GRAVITY_IS_INVERTED) { + gPlayer.qWorldY += Q(mpp->unk48) + Q(1); + } else { + gPlayer.qWorldY += Q(mpp->unk48) - Q(2); + } + + if (mpp->unk48 < 0) { + result = SA2_LABEL(sub_801F100)(I(gPlayer.qWorldY) - gPlayer.spriteOffsetY, I(gPlayer.qWorldX), gPlayer.layer, -8, + SA2_LABEL(sub_801EC3C)); + if (result < 0) { + gPlayer.qWorldY -= Q(result); + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk60 = 30; + } + } else if (mpp->unk48 > 0) { + result = SA2_LABEL(sub_801F100)(I(gPlayer.qWorldY) + gPlayer.spriteOffsetY, I(gPlayer.qWorldX), gPlayer.layer, 8, + SA2_LABEL(sub_801EC3C)); + if (result < 0) { + gPlayer.qWorldY += Q(result); + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk60 = 30; + } + } + + if (mpp->unk44 < 0) { + result = SA2_LABEL(sub_801F100)(I(gPlayer.qWorldX) - gPlayer.spriteOffsetX, I(gPlayer.qWorldY), gPlayer.layer, -8, + SA2_LABEL(sub_801EB44)); + if (result < 0) { + gPlayer.qWorldX -= Q(result); + } + return; + } else if (mpp->unk44 > 0) { + result = SA2_LABEL(sub_801F100)(I(gPlayer.qWorldX) + gPlayer.spriteOffsetX, I(gPlayer.qWorldY), gPlayer.layer, 8, + SA2_LABEL(sub_801EB44)); + if (result < 0) { + gPlayer.qWorldX += Q(result); + } + return; + } +} +#endif // COLLECT_RINGS_ROM + +#if (GAME == GAME_SA2) +// This function is at the bottom of the file in SA1! +void SA2_LABEL(sub_8018120)(void) +{ + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + Sprite *s = &mpp->s; + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + MultiplayerPlayer *otherMpp; + gPlayer.qWorldX += Q(mpp->unk44); + gPlayer.qWorldY += Q(mpp->unk48) + Q(1); + +#if (GAME == GAME_SA2) + otherMpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + + if ((otherMpp->unk54 & 0x80) != (mpp->unk54 & 0x80)) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.stoodObj = (void *)-1; + mpp->unk64 = mpp->unk56; + } +#endif + } + + if (SA2_LABEL(sub_8018300)() && (mpp->unk4C & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + } +} +#endif // (GAME == GAME_SA2) + +#ifndef COLLECT_RINGS_ROM +bool32 SA2_LABEL(sub_80181E0)(void) +{ + Sprite *sprPlayer = &gPlayer.spriteInfoBody->s; + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + Sprite *s = &mpp->s; + + u32 val; + + if (HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1]) && HITBOX_IS_ACTIVE(s->hitboxes[1])) { + val = SA2_LABEL(sub_800DA4C)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1); + + if ((val & 1)) { + if (gPlayer.SA2_LABEL(unk61) == 0 && (val & 0x20000)) { + if (gPlayer.qSpeedAirX > 0) { + gPlayer.qSpeedAirX = -gPlayer.qSpeedAirX; + gPlayer.qSpeedGround = -gPlayer.qSpeedGround; + } + } else if (gPlayer.SA2_LABEL(unk61) == 0 && (val & 0x40000)) { + if (gPlayer.qSpeedAirX < 0) { + gPlayer.qSpeedAirX = -gPlayer.qSpeedAirX; + gPlayer.qSpeedGround = -gPlayer.qSpeedGround; + } + } + + if (val & 0x100000 && gPlayer.qSpeedAirY > 0) { + gPlayer.qSpeedAirY = -gPlayer.qSpeedAirY; + } + mpp->unk60 = 30; + return TRUE; + } + } + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + return FALSE; +} +#endif + +bool32 SA2_LABEL(sub_8018300)(void) +{ + MultiplayerPlayer *mpp; + MultiplayerPlayer *otherMPP; + Sprite *s; + Sprite *sprPlayer; + u32 val; + + sprPlayer = &gPlayer.spriteInfoBody->s; + mpp = TASK_DATA(gCurTask); + s = &mpp->s; +#if (GAME == GAME_SA1) + // spC + otherMPP = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); +#endif + + if (mpp->unk60 == 0) { + u32 val2 = SA2_LABEL(sub_800DA4C)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1); +#if (GAME == GAME_SA2) + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS && !(val2 & 3)) { + if (mpp->pos.x > 960) { + val2 = SA2_LABEL(sub_800DA4C)(s, mpp->pos.x - 1440, mpp->pos.y - 864, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1); + } else { + val2 = SA2_LABEL(sub_800DA4C)(s, mpp->pos.x + 1440, mpp->pos.y + 864, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1); + } + } +#endif + + if (val2 & 1) { + if (gPlayer.SA2_LABEL(unk61) == 0 && (val2 & 0x20000)) { + if (gPlayer.qSpeedAirX > 0) { + gPlayer.qSpeedAirX = -gPlayer.qSpeedAirX; + gPlayer.qSpeedGround = -gPlayer.qSpeedGround; + } + } else if (gPlayer.SA2_LABEL(unk61) == 0 && (val2 & 0x40000)) { + if (gPlayer.qSpeedAirX < 0) { + gPlayer.qSpeedAirX = -gPlayer.qSpeedAirX; + gPlayer.qSpeedGround = -gPlayer.qSpeedGround; + } + } + + if (val2 & 0x100000 && gPlayer.qSpeedAirY > 0) { + gPlayer.qSpeedAirY = -gPlayer.qSpeedAirY; + } + mpp->unk60 = 30; + + if (!(val2 & 2)) { + return TRUE; + } + } + if (val2 & 2) { +#if (GAME == GAME_SA1) + if ((gGameMode == 3) || (gGameMode == 5)) { + if (gMultiplayerCharacters[mpp->unk56] == 3) { + if (s->graphics.anim == SA1_ANIM_CHAR(AMY, BOOSTLESS_ATTACK) || s->graphics.anim == SA1_ANIM_CHAR(AMY, 56)) { + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__MP_SLOW_DOWN; + gPlayer.timerSpeedup = TIME(0, 10); + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__SPEED_UP; + CreateItemTask_Confusion(gPlayer.character); + m4aMPlayTempoControl(&gMPlayInfo_BGM, Q(0.5)); + } + } + } +#endif +#ifndef COLLECT_RINGS_ROM + if (val2 & 1) { + if (mpp->pos.x < I(gPlayer.qWorldX)) { + gPlayer.moveState &= ~MOVESTATE_FACING_LEFT; + } else { + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + } + SA2_LABEL(sub_800DE44)(&gPlayer); + } else +#endif + { + if (mpp->pos.x < I(gPlayer.qWorldX)) { + gPlayer.moveState |= MOVESTATE_FACING_LEFT; + } else { + gPlayer.moveState &= ~MOVESTATE_FACING_LEFT; + } + SA2_LABEL(sub_800DD54)(&gPlayer); + } + + mpp->unk60 = 30; + +#if (GAME == GAME_SA1) + if ((gGameMode == GAME_MODE_CHAO_HUNT) || (gGameMode == GAME_MODE_TEAM_PLAY)) { + if (otherMPP->unk5C & 0x70000) { + u32 i; + for (i = 0; i < ARRAY_COUNT(gChaoTasks); i++) { + if (otherMPP->unk5C & (0x10000 << i)) { + break; + } + } + otherMPP->unk5C &= ~(0x10000 << i); + + { + ChaoTask *chao = TASK_DATA(gChaoTasks[i]); + chao->unk41 = mpp->unk56; + { + RoomEvent_ChaoCollected *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_CHAO_COLLECTED; + roomEvent->id1 = i; + roomEvent->id2 = mpp->unk56; + } + } + } + } +#endif + return TRUE; + } + + if (!HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1]) && !HITBOX_IS_ACTIVE(s->hitboxes[1])) { + u32 existingMoveState = gPlayer.moveState; + Sprite *existingS = gPlayer.stoodObj; + s16 x, y; + +#if (GAME == GAME_SA1) + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1, 0); +#elif (GAME == GAME_SA2) + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1, val2 & 2); + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS && val == 0) { + gPlayer.moveState = existingMoveState; + gPlayer.stoodObj = existingS; + + if (mpp->pos.x > 960) { + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x - 1440, mpp->pos.y - 864, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1, + val); + } else { + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x + 1440, mpp->pos.y + 864, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1, + val); + } + } +#endif + + if (mpp->unk4C & 0x20 && !(val & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + mpp->unk4C = val; + if ((val & 0x200000)) { + mpp->unk60 = 30; + } + } else { + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + + if (mpp->unk4C & 0x20) { + gPlayer.moveState &= ~MOVESTATE_20; + } + } + return FALSE; + } + + mpp->unk60--; + + if (!(gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ)) { + return FALSE; + } + + if (gPlayer.stoodObj != s) { + return FALSE; + } + + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x, mpp->pos.y, mpp->unk66, mpp->unk68, mpp->unk54 >> 7 & 1, 0); + +#if (GAME == GAME_SA2) + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS && val == 0) { + if (mpp->pos.x > 960) { + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x - 1440, mpp->pos.y - 864, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1, val); + } else { + val = SA2_LABEL(sub_800D0A0)(s, mpp->pos.x + 1440, mpp->pos.y + 864, mpp->unk66, mpp->unk68, (mpp->unk54 >> 7) & 1, val); + } + } +#endif + + if (mpp->unk4C & 0x20 && !(val & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + } + mpp->unk4C = val; + + if ((val & 0x200000)) { + mpp->unk60 = 30; + } + + return FALSE; +} + +#ifndef COLLECT_RINGS_ROM +void Task_HandleLaunchPlayer(void) +{ + PlayerSpriteInfo *psi = gPlayer.spriteInfoBody; + Sprite *sprPlayer = &psi->s; + + if (sprPlayer->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + s16 *airSpeed = TASK_DATA(gCurTask); + gPlayer.moveState &= ~MOVESTATE_IGNORE_INPUT; + gPlayer.moveState &= ~MOVESTATE_800000; + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.moveState &= ~MOVESTATE_100; + gPlayer.charState = CHARSTATE_SPRING_B; + sprPlayer->prevVariant = -1; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + m4aSongNumStart(SE_SPRING); + gPlayer.qSpeedAirY = *airSpeed; + TaskDestroy(gCurTask); + return; + } + + if (gPlayer.charState != CHARSTATE_AMY_SA1_JUMP) { + gPlayer.moveState &= ~MOVESTATE_IGNORE_INPUT; + gPlayer.moveState &= ~MOVESTATE_800000; + TaskDestroy(gCurTask); + } +} +#endif + +#if (GAME == GAME_SA2) +void SA2_LABEL(sub_8018818)(void) +{ + u32 i; + if (IS_MULTI_PLAYER) { + MultiplayerPlayer *mpp; + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + if (gMultiplayerPlayerTasks[i] == NULL) { + break; + } + mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + mpp->unk5C &= ~2; + } + + gPlayer.timerInvulnerability = 120; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + } +} +#endif + +void TaskDestructor_MultiplayerPlayer(struct Task *t) +{ + MultiplayerPlayer *mpp = TASK_DATA(t); + gMultiplayerPlayerTasks[mpp->unk56] = NULL; + VramFree(mpp->s.graphics.dest); +} + +#ifndef COLLECT_RINGS_ROM +void LaunchPlayer(s16 airSpeedY) +{ + struct Task *t = TaskCreate(Task_HandleLaunchPlayer, sizeof(s16), 0x2000, 0, NULL); + s16 *airSpeed = TASK_DATA(t); + *airSpeed = airSpeedY; + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; + gPlayer.charState = CHARSTATE_AMY_SA1_JUMP; + gPlayer.moveState |= MOVESTATE_800000; +} +#endif + +#if (GAME == GAME_SA1) +// This function is about 300 lines further up in SA2! +// Sadly, you cannot use an inline function to match +void SA2_LABEL(sub_8018120)(void) +{ + MultiplayerPlayer *mpp = TASK_DATA(gCurTask); + Sprite *s = &mpp->s; + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ && gPlayer.stoodObj == s) { + MultiplayerPlayer *otherMpp; + gPlayer.qWorldX += Q(mpp->unk44); + gPlayer.qWorldY += Q(mpp->unk48) + Q(1); + +#if (GAME == GAME_SA2) + otherMpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + + if ((otherMpp->unk54 & 0x80) != (mpp->unk54 & 0x80)) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.stoodObj = (void *)-1; + mpp->unk64 = mpp->unk56; + } +#endif + } + + if (SA2_LABEL(sub_8018300)() && (mpp->unk4C & 0x20)) { + gPlayer.moveState &= ~MOVESTATE_20; + mpp->unk4C = 0; + } +} +#endif // (GAME == GAME_SA1) diff --git a/sa1/src/game/multiplayer/multiplayer_event_mgr.c b/sa1/src/game/multiplayer/multiplayer_event_mgr.c new file mode 100644 index 0000000000..a1394f8426 --- /dev/null +++ b/sa1/src/game/multiplayer/multiplayer_event_mgr.c @@ -0,0 +1,373 @@ +#include "core.h" + +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/stage/item_tasks.h" + +#include "game/multiplayer/mp_attack_1_effect.h" +#include "game/multiplayer/unk_0.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/multiplayer/finish.h" +#include "game/multiplayer/mp_player.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/player.h" + +#include "lib/m4a/m4a.h" + +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +void Task_MultiplayerEventMgr_Send(void); +void Task_MultiplayerEventMgr_Receive(void); +void ReceiveRoomEvent_ReachedStageGoal(union MultiSioData *recv, u8 i); +void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i); +void ReceiveRoomEvent_8(union MultiSioData *recv, u8 i); +void ReceiveRoomEvent_CollectChao(union MultiSioData *recv, u8 i); +typedef void (*RoomEventHandler)(union MultiSioData *recv, u8 i); + +// TODO: Improve names +#if (GAME == GAME_SA1) +#define MPEVTMGR_RECV_MASK 0x1000 +#define MPEVTMGR_RECV_PAT0_UNKE_MAX 9 +#elif (GAME == GAME_SA2) +#define MPEVTMGR_RECV_MASK 0x5000 +#define MPEVTMGR_RECV_PAT0_UNKE_MAX 8 +#endif + +const RoomEventHandler gRoomEventHandlers[] = { + [ROOMEVENT_TYPE_PLATFORM_CHANGE - 1] = ReceiveRoomEvent_PlatformChange, + [ROOMEVENT_TYPE_ITEMBOX_BREAK - 1] = ReceiveRoomEvent_ItemBoxBreak, + [ROOMEVENT_TYPE_ENEMY_DESTROYED - 1] = ReceiveRoomEvent_EnemyDestroyed, + [ROOMEVENT_TYPE_PLAYER_RING_LOSS - 1] = ReceiveRoomEvent_PlayerRingLoss, + [ROOMEVENT_TYPE_MYSTERY_ITEMBOX_BREAK - 1] = ReceiveRoomEvent_MysteryItemBoxBreak, + [ROOMEVENT_TYPE_ITEMEFFECT_APPLIED - 1] = ReceiveRoomEvent_ItemEffect, + [ROOMEVENT_TYPE_REACHED_STAGE_GOAL - 1] = ReceiveRoomEvent_ReachedStageGoal, + [ROOMEVENT_TYPE_8 - 1] = ReceiveRoomEvent_8, +#if (GAME == GAME_SA1) + [ROOMEVENT_TYPE_CHAO_COLLECTED - 1] = ReceiveRoomEvent_CollectChao, +#endif + + NULL, +}; + +void Task_MultiplayerEventMgr_Send(void) +{ + u8 id = SIO_MULTI_CNT->id; + struct MultiSioData_0_0 *send = &gMultiSioSend.pat0; + u32 something = send->unk8[0] & (0x1000 << id); + + u8 i; + + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + struct MultiSioData_0_0 *recv; + if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i))) { + return; + } else { + recv = &gMultiSioRecv[i].pat0; + if (MPEVTMGR_RECV_MASK == recv->unk0 && (something == 0) != (!(recv->unk8[0] & (0x1000 << id)))) { + return; + } + } + } + + if (gRoomEventQueueWritePos == gRoomEventQueueSendPos) { + DmaFill16(3, 0, &gMultiSioSend.pat0.unk8[3], sizeof(RoomEvent) - 1); + } else { + DmaCopy16(3, &gRoomEventQueue[gRoomEventQueueSendPos], &gMultiSioSend.pat0.unk8[3], sizeof(RoomEvent) - 1); + gRoomEventQueueSendPos = (gRoomEventQueueSendPos + 1) & 0xF; + send->unk8[0] ^= (0x1000 << id); + } +} + +void Task_MultiplayerEventMgr_Receive(void) +{ + u8 id = SIO_MULTI_CNT->id; + struct MultiSioData_0_0 *send = &gMultiSioSend.pat0; + + u8 i; + + for (i = 0; i < 4; i++) { + union MultiSioData *recv; + if (i == id) { + continue; + } + if (!GetBit(gMultiplayerConnections, i)) { + break; + } + + if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i))) { + continue; + } + + recv = &gMultiSioRecv[i]; + if (recv->pat0.unk0 == MPEVTMGR_RECV_MASK && (recv->pat0.unk8[0] & (0x1000 << i)) != (send->unk8[0] & (0x1000 << i))) { + if ((u8)(recv->pat0.unkE - 1) < MPEVTMGR_RECV_PAT0_UNKE_MAX) { + + gRoomEventHandlers[recv->pat0.unkE - 1](recv, i); + } + send->unk8[0] ^= (0x1000 << i); + } + } +} + +void ReceiveRoomEvent_ItemEffect(union MultiSioData *recv, u8 i) +{ + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + MultiplayerPlayer *us = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + + if (!(us->unk5C & 1) && PLAYER_IS_ALIVE && gMultiplayerRanks[SIO_MULTI_CNT->id] == -1) { + switch (recv->pat0.unkF) { + case 0: { + if (!IS_MP_OR_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (i))) >> ((i + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) { + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__CONFUSION; + gPlayer.timerConfusion = TIME(0, 10); + CreateItemTask_Confusion(gPlayer.character); +#if (GAME == GAME_SA2) + m4aSongNumStart(SE_ITEM_CONFUSION); +#endif + } + break; + } + + case 1: { + if ((!IS_MP_OR_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (i))) >> ((i + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4)))) { + u8 rings = 0; + u8 i; + + for (i = 0; (i < 4); i++) { + if (gMultiplayerPlayerTasks[i] == NULL) { + break; + } + + rings += gMultiplayerCharRings[i]; + } + + if ((mpp->unk5C & 0x70000) || (us->unk5C & 0x70000) || (rings == 0)) { + sub_801C704(); + } + } + + } break; + + case 4: { + if ((u8)recv->pat0.unk10 == SIO_MULTI_CNT->id && !(gPlayer.itemEffect & PLAYER_ITEM_EFFECT__TELEPORT)) { +#if (GAME == GAME_SA1) + u32 prevMoveState = gPlayer.moveState & (MOVESTATE_IGNORE_INPUT | MOVESTATE_IA_OVERRIDE); +#else + u32 prevMoveState = gPlayer.moveState & (MOVESTATE_IN_SCRIPTED | MOVESTATE_IGNORE_INPUT | MOVESTATE_IA_OVERRIDE); +#endif + if (!(prevMoveState)) { + InitializePlayer(&gPlayer); + gPlayer.qWorldX = QS(mpp->pos.x); + gPlayer.qWorldY = QS(mpp->pos.y - (s8)mpp->unk58[0]); + m4aMPlayTempoControl(&gMPlayInfo_BGM, Q(1.0)); + gPlayer.moveState = prevMoveState; + SPRITE_FLAG_CLEAR(&gPlayer.spriteInfoBody->s, PRIORITY); + SPRITE_FLAG_SET_VALUE(&gPlayer.spriteInfoBody->s, PRIORITY, 2); + + SPRITE_FLAG_CLEAR(&gPlayer.spriteInfoLimbs->s, PRIORITY); + SPRITE_FLAG_SET_VALUE(&gPlayer.spriteInfoLimbs->s, PRIORITY, 2); + + gCamera.sa2__unk50 &= ~3; + gPlayer.layer = (mpp->unk54 >> 7) & 1; + gPlayer.moveState |= MOVESTATE_IN_AIR; + mpp->unk60 = 30; + gPlayer.timerInvulnerability = TIME(0, 2); + gCamera.x = (I(gPlayer.qWorldX) + gCamera.shiftX) - DISPLAY_CENTER_X; + gCamera.y = (I(gPlayer.qWorldY) + gCamera.shiftY) - DISPLAY_CENTER_Y; +#if (GAME == GAME_SA2) + m4aSongNumStart(SE_218); +#endif + } + } + break; + } + case 5: { + if (!IS_MP_OR_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (i))) >> ((i + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) { + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__MP_SLOW_DOWN; + gPlayer.timerSpeedup = TIME(0, 10); + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__SPEED_UP; + CreateItemTask_Confusion(gPlayer.character); + m4aMPlayTempoControl(&gMPlayInfo_BGM, Q(0.5)); + } + break; + } + + case 2: { + break; + } + + case 3: { +#if (GAME == GAME_SA1) + sa2__gUnknown_030053E0 = 30; +#else + if (IS_MP_OR_TEAM_PLAY + || ((gMultiplayerConnections & (0x10 << (i))) >> ((i + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4))) { + gShouldSpawnMPAttack2Effect = TRUE; + m4aSongNumStart(SE_216); + } +#endif + } break; + } + } +} + +// (96.15%) https://decomp.me/scratch/LMpNt +NONMATCH("asm/non_matching/game/multiplayer/evt_mgr__ReceiveRoomEvent_ReachedStageGoal.inc", + void ReceiveRoomEvent_ReachedStageGoal(union MultiSioData *recv, u8 i)) +{ + u32 j; + MultiplayerPlayer *mpp; + + s32 count2 = 0; + s32 count = 0; + s32 count3 = 0; + bool8 somebool = FALSE; + mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + + for (j = 0; j < 4; j++) { + // u32 id = SIO_MULTI_CNT->id; + MultiplayerPlayer *mpp2; + if (gMultiplayerPlayerTasks[j] == NULL) { + break; + } + count++; + mpp2 = TASK_DATA(gMultiplayerPlayerTasks[j]); + if (gGameMode != GAME_MODE_MULTI_PLAYER && gGameMode != GAME_MODE_TEAM_PLAY) { +#if (GAME == GAME_SA1) + if (mpp2->unk5C & 1) +#else + if (mpp2->unk5C & 1 && gMultiplayerRanks[j] != -1) +#endif + { + count2++; + count3++; + } + } else { + if ((gMultiplayerConnections & (0x10 << (j))) >> ((j + 4)) + != (gMultiplayerConnections & (0x10 << (SIO_MULTI_CNT->id))) >> (SIO_MULTI_CNT->id + 4) + && (s8)gMultiplayerRanks[j] == 0) { + count2 = 1; + } + } + } + + if (gMultiplayerRanks[i] == -1) { + CreateMultiplayerFinishResult(i, count2); + } else { + somebool = 1; + } + + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + for (j = 0; j < 4 && gMultiplayerPlayerTasks[j] != NULL; j++) { + if (j != i && gMultiplayerRanks[j] == -1 + && (gMultiplayerConnections & (0x10 << (j))) >> ((j + 4)) == (gMultiplayerConnections & (0x10 << (i))) >> (i + 4)) { + CreateMultiplayerFinishResult(j, count2); + if (j == SIO_MULTI_CNT->id) { + Player_TransitionCancelFlyingAndBoost(&gPlayer); + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.moveState &= ~MOVESTATE_4; + gPlayer.moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + gPlayer.moveState |= MOVESTATE_IN_AIR; + gPlayer.moveState &= ~MOVESTATE_SPINDASH; + gPlayer.moveState &= ~MOVESTATE_100; + gPlayer.charState = CHARSTATE_HIT_AIR; + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.sa2__unk61 = 0; + gPlayer.sa2__unk62 = 0; + gPlayer.qSpeedGround = 0; + gPlayer.qSpeedAirX = 0; + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; + gPlayer.moveState |= MOVESTATE_FACING_LEFT; +#if (GAME == GAME_SA1) + gPlayer.charState = CHARSTATE_ACT_CLEAR_B; +#elif (GAME == GAME_SA2) + gPlayer.charState = CHARSTATE_ACT_CLEAR_A; +#endif + gPlayer.moveState |= MOVESTATE_800000; + } + } + } + } + + mpp->unk5C |= 1; + + if (count2 == 0 && !(gStageFlags & 1)) { + gStageFlags |= 4; + gCourseTime = TIME(1, 0); + }; + + if ((count3 + 1) >= (u32)(count - 1) || gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY) { + for (j = 0; j < 4; j++) { + MultiplayerPlayer *mpp2; + + if (gMultiplayerPlayerTasks[j] == NULL) { + break; + } + + mpp2 = TASK_DATA(gMultiplayerPlayerTasks[j]); + + if (j != i) { + if (gMultiplayerRanks[j] == -1) { + if (gGameMode == GAME_MODE_MULTI_PLAYER || gGameMode == GAME_MODE_TEAM_PLAY || gGameMode == GAME_MODE_TEAM_PLAY) { + CreateMultiplayerFinishResult(j, 1); + } else { + u32 temp; + RoomEvent *roomEvent; + CreateMultiplayerFinishResult(j, count - 1); +#if (GAME == GAME_SA2) + mpp2->unk5C |= 1; +#endif + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; + +#if (GAME == GAME_SA2) + temp = gRoomEventQueueWritePos; + roomEvent = &gRoomEventQueue[temp]; + gRoomEventQueueWritePos++; + gRoomEventQueueWritePos &= 0xF; + + roomEvent->type = ROOMEVENT_TYPE_REACHED_STAGE_GOAL; +#endif + } + } + } + } + + if (!somebool) { + CreateMultiplayerFinishHandler(); + } + } +} +END_NONMATCH + +struct Task *CreateMultiplayerSendEventMgr(void) +{ + struct Task *t = TaskCreate(Task_MultiplayerEventMgr_Send, 0, -2, 0, NULL); + DmaFill32(3, 0, &gMultiSioSend, sizeof(gMultiSioSend)); + DmaFill32(3, 0, &gMultiSioRecv, sizeof(gMultiSioRecv)); + DmaFill32(3, 0, &gRoomEventQueue, sizeof(gRoomEventQueue)); + gRoomEventQueueWritePos = gRoomEventQueueSendPos = 0; + return t; +} + +struct Task *CreateMultiplayerReceiveEventMgr(void) +{ + struct Task *t = TaskCreate(Task_MultiplayerEventMgr_Receive, 0, 1, 0, NULL); + DmaFill32(3, 0, &gMultiSioSend, sizeof(gMultiSioSend)); + DmaFill32(3, 0, &gMultiSioRecv, sizeof(gMultiSioRecv)); + DmaFill32(3, 0, &gRoomEventQueue, sizeof(gRoomEventQueue)); + gRoomEventQueueSendPos = 0; + gRoomEventQueueWritePos = 0; + return t; +} diff --git a/sa1/src/game/multiplayer/multiplayer_event_recv_mgr.c b/sa1/src/game/multiplayer/multiplayer_event_recv_mgr.c new file mode 100644 index 0000000000..995c920e23 --- /dev/null +++ b/sa1/src/game/multiplayer/multiplayer_event_recv_mgr.c @@ -0,0 +1,187 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/multiplayer/chao.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/stage/rings_scatter.h" +#include "game/sa1_sa2_shared/entities_manager.h" + +#include "constants/songs.h" + +void *CreateRoomEvent(void) +{ + RoomEvent *result = &gRoomEventQueue[gRoomEventQueueWritePos]; + + gRoomEventQueueWritePos = (gRoomEventQueueWritePos + 1) & 0xF; + + return result; +} + +void ReceiveRoomEvent_PlatformChange(union MultiSioData *msioData, u8 mppId) +{ + if (gEntitiesManagerTask != NULL) { + EntitiesManager *em = TASK_DATA(gEntitiesManagerTask); + // MapData *ias = em->interactables; + u32 *ias = (u32 *)em->interactables; + u16 h_regionCount; + u32 r1, r2, r2_2; + u32 offset, offset2; + ias++; // skip size + h_regionCount = *ias++; // get h_regionCount + ias++; // skip v_regionCount + r2 = msioData->pat0.unkF; + + offset = *(u32 *)(((u8 *)ias) + ((h_regionCount * msioData->pat4.unk10) * sizeof(u32)) + (r2 * sizeof(u32))); + if (offset != 0) { + MapEntity *cursor; + + // cursor's 0-pos is the same as h_regionCount + offset -= 8; + cursor = (MapEntity *)((u8 *)ias + offset); + cursor += msioData->pat4.unk11; + + if ((msioData->pat4.unk12 == 0) || ((msioData->pat4.unk12 == 1) && ((s8)cursor->x == MAP_ENTITY_STATE_INITIALIZED))) { + *(s8 *)(&cursor->x) = MAP_ENTITY_STATE_MINUS_THREE; + } + } + } +} + +void ReceiveRoomEvent_ItemBoxBreak(union MultiSioData *msioData, u8 UNUSED mppId) +{ + if (gEntitiesManagerTask != NULL) { + EntitiesManager *em = TASK_DATA(gEntitiesManagerTask); + // MapData *items = em->interactables; + u32 *items = (u32 *)em->items; + u16 h_regionCount; + u32 r2; + items++; // skip size + h_regionCount = *items++; // get h_regionCount + items++; // skip v_regionCount + r2 = msioData->pat0.unkF; + + { +#ifdef NON_MATCHING + u32 offset +#else + register u32 offset asm("r1") +#endif + = *(u32 *)(((u8 *)items) + ((h_regionCount * msioData->pat4.unk10) * sizeof(u32)) + (r2 * sizeof(u32))); + if (offset != 0) { + MapEntity_Itembox *cursor; + + // cursor's 0-pos is the same as h_regionCount + offset -= 8; + cursor = (MapEntity_Itembox *)((s8 *)items + offset); + + cursor += msioData->pat4.unk11; + + *(s8 *)(&cursor->x) = MAP_ENTITY_STATE_MINUS_THREE; + } + } + } +} + +void ReceiveRoomEvent_EnemyDestroyed(union MultiSioData *msioData, u8 UNUSED mppId) +{ + if (gEntitiesManagerTask != NULL) { + EntitiesManager *em = TASK_DATA(gEntitiesManagerTask); + // MapData *enemies = em->interactables; + u32 *enemies = (u32 *)em->enemies; + u16 h_regionCount; + u32 r2; + enemies++; // skip size + h_regionCount = *enemies++; // get h_regionCount + enemies++; // skip v_regionCount + r2 = msioData->pat0.unkF; + { +#ifdef NON_MATCHING + u32 offset +#else + register u32 offset asm("r1") +#endif + = *(u32 *)(((u8 *)enemies) + ((h_regionCount * msioData->pat4.unk10) * sizeof(u32)) + (r2 * sizeof(u32))); + if (offset != 0) { + MapEntity *cursor; + + // cursor's 0-pos is the same as h_regionCount + offset -= 8; + cursor = (MapEntity *)((u8 *)enemies + offset); + + cursor += msioData->pat4.unk11; + + *((s8 *)&cursor->x) = MAP_ENTITY_STATE_MINUS_THREE; + } + } + } +} + +void ReceiveRoomEvent_PlayerRingLoss(union MultiSioData *msioData, u8 UNUSED mppId) +{ + InitScatteringRings(msioData->pat4.x, msioData->pat4.y, msioData->pat4.numRings); +} + +void ReceiveRoomEvent_MysteryItemBoxBreak(union MultiSioData *msioData, u8 UNUSED mppId) +{ + if (gEntitiesManagerTask != NULL) { + EntitiesManager *em = TASK_DATA(gEntitiesManagerTask); + // MapData *ias = em->interactables; + u32 *ias = (u32 *)em->interactables; + u16 h_regionCount; + u32 r2; + ias++; // skip size + h_regionCount = *ias++; // get h_regionCount + ias++; // skip v_regionCount + r2 = msioData->pat0.unkF; + { +#ifdef NON_MATCHING + u32 offset +#else + register u32 offset asm("r1") +#endif + = *(u32 *)(((u8 *)ias) + ((h_regionCount * msioData->pat4.unk10) * sizeof(u32)) + (r2 * sizeof(u32))); + if (offset != 0) { + MapEntity *cursor; + + offset -= 8; + cursor = (MapEntity *)((u8 *)ias + offset); + + cursor += msioData->pat4.unk11; + + cursor->d.sData[1] = msioData->pat4.unk12; + } + } + } +} + +void ReceiveRoomEvent_8(union MultiSioData *msioData, u8 UNUSED mppId) +{ + if (SIO_MULTI_CNT->id == msioData->pat5.sioId) { +#if (GAME == GAME_SA1) + if (msioData->pat5.unk10 != 0) { + gPlayer.moveState |= MOVESTATE_10000; + } else { + gPlayer.moveState &= ~MOVESTATE_10000; + } +#endif + } +} + +#if (GAME == GAME_SA1) +void ReceiveRoomEvent_CollectChao(union MultiSioData *msioData, u8 mppId) +{ + ChaoTask *chao = TASK_DATA(gChaoTasks[msioData->pat5.sioId]); + MultiplayerPlayer *mpp; + + chao->unk41 = msioData->pat5.unk10; + mpp = TASK_DATA(gMultiplayerPlayerTasks[mppId]); + mpp->unk5C &= ~(0x10000 << msioData->pat5.sioId); + + mpp = TASK_DATA(gMultiplayerPlayerTasks[msioData->pat5.unk10]); + mpp->unk5C |= (0x10000 << msioData->pat5.sioId); + + m4aSongNumStart(SE_CHAO_HUH); +} +#endif diff --git a/sa1/src/game/multiplayer/results.c b/sa1/src/game/multiplayer/results.c new file mode 100644 index 0000000000..3bb3b988bd --- /dev/null +++ b/sa1/src/game/multiplayer/results.c @@ -0,0 +1,250 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/character_select.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/text.h" + +typedef struct MPResults { + /* 0x00 */ Background bg; + /* 0x40 */ Sprite s; + /* 0x70 */ Sprite s2; + /* 0xA0 */ u8 fillerA0[0x120]; + /* 0x1C0 */ Sprite spr1C0; + /* 0x1F0 */ u8 filler1F0[0xC]; + /* 0x200 */ s32 unk1FC; + /* 0x200 */ u16 unk200; + /* 0x200 */ u8 unk202; + /* 0x200 */ u8 unk203; + /* 0x204 */ u8 filler204[0xF]; + /* 0x213 */ u8 unk213; + /* 0x214 */ u8 filler214[0x8]; +} MPResults; /* 0x21C */ + +void Task_801874C(void); +const AnimId gUnknown_080BB488[UILANG_COUNT] = { 895, 894 }; +const u8 gUnknown_080BB48C[2][2] = { { 56, 92 }, { 64, 104 } }; + +void sub_8018538(void) +{ + MPResults *strc; + Sprite *s; + + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + gDispCnt = 0x1141; + gBgCntRegs[0] = 0x1E03; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + strc = TASK_DATA(TaskCreate(Task_801874C, sizeof(MPResults), 0x2000U, 0U, NULL)); + strc->unk200 = 0; + strc->unk203 = 0; + strc->unk1FC = 0; + strc->unk213 = 0; + + s = &strc->s; + s->x = 232; + s->y = 64; + s->graphics.dest = (void *)OBJ_VRAM0; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB488[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &strc->s2; + s->x = 0; + s->y = 64; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x2C0; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_OPTS_BLACK_RECT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &strc->spr1C0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->graphics.dest = strc->s2.graphics.dest + 0x180; + s->oamFlags = 0x80; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_VS_MENU_WAIT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + strc->bg.graphics.dest = (void *)BG_VRAM; + strc->bg.graphics.anim = 0; + strc->bg.layoutVram = (u16 *)(BG_VRAM + 0xF000); + strc->bg.unk18 = 0; + strc->bg.unk1A = 0; + strc->bg.tilemapId = LOADED_SAVE->uiLanguage + 0x54; + strc->bg.unk1E = 0; + strc->bg.unk20 = 0; + strc->bg.unk22 = 0; + strc->bg.unk24 = 0; + strc->bg.targetTilesX = 30; + strc->bg.targetTilesY = 20; + strc->bg.paletteOffset = 0; + strc->bg.flags = 0; + DrawBackground(&strc->bg); + m4aSongNumStartOrChange(MUS_006); +} + +// (99.30%) https://decomp.me/scratch/ZiBTK +NONMATCH("asm/non_matching/game/multiplayer/results__Task_801874C.inc", void Task_801874C()) +{ + Sprite *s; + s32 offsetX; + s32 var_r8; + u32 var_r3; + u32 i; + u8 temp_r5_2; + u8 temp_r7; + + MPResults *strc = TASK_DATA(gCurTask); + + if (IS_MULTI_PLAYER) { + for (var_r3 = 0; var_r3 < MULTI_SIO_PLAYERS_MAX; var_r3++) { + if (!GetBit(gMultiplayerConnections, var_r3)) { + break; + } + + if (CheckBit(gMultiSioStatusFlags, var_r3) == 0) { + if (gMultiplayerMissingHeartbeats[var_r3]++ >= 0xB5) { + TasksDestroyInPriorityRange(0U, 0xFFFFU); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[var_r3] = 0; + } + } + } + + if (gMultiSioRecv->pat0.unk0 == 0x30) { + if (strc->unk203 != gMultiSioRecv->pat0.unk2) { + m4aSongNumStart(0x6CU); + if (!(gMultiSioStatusFlags & 0x80)) { + strc->unk203 = gMultiSioRecv->pat0.unk2; + } + } + } else if (gMultiSioRecv->pat0.unk0 == 0x31) { + if (strc->unk203 != gMultiSioRecv->pat0.unk2) { + m4aSongNumStart(0x6CU); + strc->unk203 = gMultiSioRecv->pat0.unk2; + } + m4aSongNumStart(0x6AU); + + if (strc->unk203 == 0) { + gGameMode = GAME_MODE_RACE; + TaskDestroy(gCurTask); + CreateCharacterSelectionScreen((PseudoRandom32() + SIO_MULTI_CNT->id) % 4u); + } else { + gGameMode = GAME_MODE_CHAO_HUNT; + TaskDestroy(gCurTask); + CreateCharacterSelectionScreen((PseudoRandom32() + SIO_MULTI_CNT->id) % 4u); + } + return; + } + + if (gMultiSioStatusFlags & 0x80) { + s32 v; + var_r8 = 1; + v = 0x30; + gMultiSioSend.pat0.unk0 = v; + temp_r5_2 = strc->unk213; + if (temp_r5_2 == 0) { + if (DPAD_UP & gRepeatedKeys) { + m4aSongNumStart(0x6CU); + + if (--strc->unk203 > 1U) { + strc->unk203 = var_r8; + } + strc->unk1FC = 0; + } else if (DPAD_DOWN & gRepeatedKeys) { + m4aSongNumStart(0x6CU); + + if (++strc->unk203 > 1U) { + strc->unk203 = 0; + } + strc->unk1FC = 0; + } + } + + gMultiSioSend.pat0.unk2 = strc->unk203; + for (i = 1; i < 4; i++) { + if (!GetBit(gMultiplayerConnections, i)) { + break; + } + + if (gMultiSioRecv[i].pat0.unk0 != 0x30) { + var_r8 = 0; + } + } + + if (((var_r8 != 0) && (A_BUTTON & gPressedKeys)) || (strc->unk213 != 0)) { + strc->unk213 = 1; + gMultiSioSend.pat0.unk0 = 0x31; + } + } else { + s32 v = 0x30; + gMultiSioSend.pat0.unk0 = v; + s = &strc->spr1C0; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + s = &strc->s; + + temp_r7 = gUnknown_080BB48C[LOADED_SAVE->uiLanguage][strc->unk203]; + strc->unk1FC += 0x80; + if (strc->unk1FC > Q(temp_r7)) { + strc->unk1FC -= Q(temp_r7); + } + s->y = (strc->unk203 * 24) + 64; + s->variant = strc->unk203; + UpdateSpriteAnimation(s); + + offsetX = I(strc->unk1FC) - temp_r7; + while ((232 - offsetX) > 0) { + s->x = 232 - offsetX; + DisplaySprite(s); + offsetX += temp_r7; + } + + s = &strc->s2; + s->y = (strc->unk203 * 24) + 54; + for (i = 0; i < 8; i++) { + s->x = i * 32; + DisplaySprite(s); + } +} +END_NONMATCH diff --git a/sa1/src/game/multiplayer/results_2.c b/sa1/src/game/multiplayer/results_2.c new file mode 100644 index 0000000000..5296ef3666 --- /dev/null +++ b/sa1/src/game/multiplayer/results_2.c @@ -0,0 +1,724 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "bg_triangles.h" +#include "multi_sio.h" +#include "sio32_multi_load.h" // for SIO32ML_BLOCK_SIZE +#include "lib/m4a/m4a.h" +#include "data/sprite_tables.h" +#include "game/multiboot/connection.h" +#include "game/multiplayer/communication_outcome.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/save.h" +#include "game/stage/tilemap_table.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/text.h" +#include "constants/tilemaps.h" +#include "constants/zones.h" + +extern u8 gUnknown_087D7E80[0x3400]; +extern u8 gUnknown_087E3610[0x2000]; + +// TODO: Is this a "Sprite2" (Sprite with 2 hitboxes)? +typedef struct MultiplayerSinglePakResultsScreen_UNK80 { + Sprite unk0; + u8 filler30[8]; +} MultiplayerSinglePakResultsScreen_UNK80; + +typedef struct MultiplayerSinglePakResultsScreen { + Background unk0; + Background unk40; + struct MultiplayerSinglePakResultsScreen_UNK80 unk80[4]; + Sprite unk160[10]; + Sprite unk340; + Sprite unk370[3]; + Sprite unk400; + u16 unk430; + u16 unk432; + u32 unk434; + u8 actor; + u8 filler439[3]; + u32 unk43C; +} MultiplayerSinglePakResultsScreen; /* size 0x440 */ + +void SA2_LABEL(Task_808207C)(void); +void SA2_LABEL(sub_80823FC)(void); +void SA2_LABEL(Task_8082630)(void); +void SA2_LABEL(sub_808267C)(void); +void SA2_LABEL(sub_8082788)(void); +void SA2_LABEL(sub_8082AA8)(void); +void LinkCommunicationError(void); + +void LinkCommunicationError(void) +{ + m4aMPlayAllStop(); + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + gDispCnt = 0x40; + gMultiSioEnabled = FALSE; + MultiSioStop(); + MultiSioInit(0); + + gTilemapsRef = (Tilemap **)gTilemaps; + gRefSpriteTables = &gSpriteTables; + gMultiplayerMissingHeartbeats[0] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[3] = 0; + CreateMultipackOutcomeScreen(OUTCOME_CONNECTION_ERROR); +} + +// (98.42%) https://decomp.me/scratch/sWmIY +NONMATCH("asm/non_matching/game/multiplayer/results_2__CreateMultiplayerSinglePakResultsScreen.inc", + void CreateMultiplayerSinglePakResultsScreen(u32 a)) +{ + Background *bg; + Sprite *s; + u32 i; + s32 r8; + MultiplayerSinglePakResultsScreen *resultsScreen; + + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + gWinRegs[WINREG_WININ] = 0; + gWinRegs[WINREG_WINOUT] = 0; + gWinRegs[WINREG_WIN0H] = 0; + gWinRegs[WINREG_WIN0V] = 0; + gWinRegs[WINREG_WIN1H] = 0; + gWinRegs[WINREG_WIN1V] = 0; + gStageFlags = 0; + gMultiSioEnabled = 1; + gFlags &= 0xFFFFBFFF; + m4aSoundVSyncOn(); + gGameMode = GAME_MODE_MULTI_PLAYER_COLLECT_RINGS; + gFlags &= ~0x8000; + CpuFastSet(&gUnknown_087E3610, (void *)BG_VRAM, sizeof(gUnknown_087E3610)); + CpuFastSet(&gUnknown_087D7E80, (void *)EWRAM_START + 0x33000, sizeof(gUnknown_087D7E80)); + gTilemapsRef = *((Tilemap ***)(EWRAM_START + 0x33000)); + + gDispCnt = DISPCNT_OBJ_1D_MAP; + gBgCntRegs[3] = 0x5E0B; + gBgCntRegs[2] = 0x1C0C; + gBgSprites_Unknown1[2] = 0x7F; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xFF; + gBgSprites_Unknown2[2][3] = 0x20; + gBgSprites_Unknown1[3] = -1; + gBgSprites_Unknown2[3][0] = 0; + gBgSprites_Unknown2[3][1] = 0; + gBgSprites_Unknown2[3][2] = -1; + gBgSprites_Unknown2[3][3] = 0x40; + DmaFill32(3, 0, VRAM + 0x9FE0, 0x40); + DmaFill32(3, 0, VRAM + 0xFE0 + ((r8 = 3) << 14), 0x40); + + resultsScreen = TASK_DATA(TaskCreate(SA2_LABEL(Task_808207C), sizeof(MultiplayerSinglePakResultsScreen), 0x2000U, 0U, NULL)); + + bg = &resultsScreen->unk0; + resultsScreen->unk434 = a; + resultsScreen->unk430 = 0; + resultsScreen->actor = 0; + resultsScreen->unk43C = LOADED_SAVE->unk4 + gFrameCount; + bg->graphics.dest = (void *)BG_SCREEN_ADDR(16); + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(30); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = 4; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 0x1E; + bg->targetTilesY = 0x19; + bg->paletteOffset = 0; + bg->flags = r8; + DrawBackground(bg); + + for (i = 0; i < 4; i++) { + s = &resultsScreen->unk80[i].unk0; + s->x = 120; + s->y = 0x14 + (i * 0x28); + s->graphics.dest = OBJ_VRAM0 + (i << 0xB); + s->oamFlags = SPRITE_OAM_ORDER(16); + s->graphics.size = 0; + s->graphics.anim = gPlayerCharacterIdleAnims[i]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + } + + for (i = 0; i < 10; i++) { + void *vram = OBJ_VRAM0 + 0x2000 + (i * 0x80); + s = &resultsScreen->unk160[i]; + s->x = 0; + s->y = 0; + s->graphics.dest = vram; + s->oamFlags = SPRITE_OAM_ORDER(4); + s->graphics.size = 0; + s->graphics.anim = 0x380; + s->variant = (i + 3); + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x1000; + + UpdateSpriteAnimation(s); + } + + if (resultsScreen->unk434 != 0) { + for (i = 0; i < 3; i++) { + s = &resultsScreen->unk370[i]; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x2500 + (i * UNK_GFX_SIZE)); + s->x = 0; + s->y = 0; + s->oamFlags = SPRITE_OAM_ORDER(4); + s->graphics.size = 0; + s->graphics.anim = 0x380; + s->variant = i; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + } + } else { + s = &resultsScreen->unk340; + s->x = 0; + s->y = 0; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x2500; + s->oamFlags = SPRITE_OAM_ORDER(4); + s->graphics.size = 0; + s->graphics.anim = 0x380; + s->variant = 13; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + } + + if (resultsScreen->unk434 != 0) { + m4aSongNumStart(MUS_VS_RESULT); + } else { + m4aSongNumStart(MUS_VS_SCORE_OVERVIEW); + } + + gBldRegs.bldCnt = 0xFF; + gBldRegs.bldY = 0x10; +} +END_NONMATCH + +void SA2_LABEL(Task_808207C)(void) +{ + u32 i; + Sprite *s; + AnimId animValue; + struct MultiplayerSinglePakResultsScreen *resultsScreen; + gDispCnt |= 0x1800; + gMultiplayerConnections = ((gMultiSioStatusFlags & MULTI_SIO_ALL_CONNECTED) >> 8); + MultiPakHeartbeat(); + + gMultiSioSend.pat0.unk0 = COMM_DATA(0x10); + + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) { + gMultiSioSend.pat0.unk3 = MP_LANGUAGE; + } +#if COLLECT_RINGS_ROM + else if (gMultiSioRecv->pat0.unk0 == COMM_DATA(0x10)) { + gMultiplayerLanguage = gMultiSioRecv->pat0.unk3; + } +#endif + + resultsScreen = TASK_DATA(gCurTask); +#ifndef NON_MATCHING + while (0) + ; +#endif + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + if (++resultsScreen->unk430 > 0xF0) { +#if (GAME == GAME_SA2) && !defined(COLLECT_RINGS_ROM) + gFlags &= ~0x8000; +#endif + + if (resultsScreen->unk434) { + for (i = 0; i < 3; i++) { + s32 temp; + s = &resultsScreen->unk370[i]; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x2500 + (i * UNK_GFX_SIZE)); + s->x = 0; + s->y = 0; + s->oamFlags = SPRITE_OAM_ORDER(4); + s->graphics.size = 0; + +// Non match required for non japan main rom +#if !defined(NON_MATCHING) && !defined(JAPAN) +#if COLLECT_RINGS_ROM + do +#endif + { +#if (GAME == GAME_SA2) + s16 var = SA2_ANIM_MP_SINGLE_PAK_RESULTS_ROUND; + asm("" ::"r"(var)); +#endif + } +#if COLLECT_RINGS_ROM + + while (0); +#endif +#endif + +#if (GAME == GAME_SA1) + switch (MP_LANGUAGE) { + case UILANG_JAPANESE: + s->graphics.anim = SA1_ANIM_MP_SINGLE_PAK_RESULTS_CUMULATIVE; + break; + + case UILANG_ENGLISH: + default: + s->graphics.anim = SA1_ANIM_MP_SINGLE_PAK_RESULTS_ROUND; + break; + } +#elif (GAME == GAME_SA2) + switch (MP_LANGUAGE) { +#ifdef JAPAN + case LANG_DEFAULT: + s->graphics.anim = SA2_ANIM_MP_SINGLE_PAK_RESULTS_CUMULATIVE; + break; +#endif + case LANG_JAPANESE: + s->graphics.anim = SA2_ANIM_MP_SINGLE_PAK_RESULTS_CUMULATIVE; + break; +#ifdef JAPAN + case LANG_ENGLISH: +#endif + default: + s->graphics.anim = SA2_ANIM_MP_SINGLE_PAK_RESULTS_ROUND; + break; + } +#endif + + s->variant = i; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + } + } +#ifndef COLLECT_RINGS_ROM + if (gMultiSioStatusFlags & MULTI_SIO_PARENT) { + s = &resultsScreen->unk400; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + + if (resultsScreen->unk434) { + s->graphics.dest = resultsScreen->unk370[2].graphics.dest + UNK_GFX_SIZE; + } else { + s->graphics.dest = resultsScreen->unk340.graphics.dest + UNK_GFX_SIZE; + } + + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + +#if (GAME == GAME_SA1) + switch (MP_LANGUAGE) { + case UILANG_JAPANESE: + s->graphics.anim = 893; // SA1_ANIM_PRESS_START_MSG_JP; + break; + default: + s->graphics.anim = SA1_ANIM_MP_PRESS_START_EN; // SA1_ANIM_PRESS_START_MSG_EN; + break; + } +#elif (GAME == GAME_SA2) + switch (MP_LANGUAGE) { +#ifdef JAPAN + case LANG_DEFAULT: + s->graphics.anim = SA2_ANIM_PRESS_START_MSG_JP; + break; +#endif + case LANG_JAPANESE: + s->graphics.anim = SA2_ANIM_PRESS_START_MSG_JP; + break; +#ifdef JAPAN + case LANG_ENGLISH: + s->graphics.anim = SA2_ANIM_PRESS_START_MSG_EN; + break; +#endif + default: + s->graphics.anim = SA2_ANIM_PRESS_START_MSG_EN; + break; + } +#endif + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); +#if (GAME == GAME_SA1) + s->palId = 10; +#elif (GAME == GAME_SA2) + s->palId = 0; +#endif + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } +#endif + resultsScreen->unk430 = 0; + gCurTask->main = SA2_LABEL(sub_80823FC); + SA2_LABEL(sub_80823FC)(); // SA1: SA2_LABEL(sub_80823FC) + } else { +#ifndef NON_MATCHING + // This is wrong, just here to make asm correct here + resultsScreen++; + while (0) + ; + resultsScreen--; +#endif + + for (i = 0; i < 4; i++) { + if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i + 8))) { + if (gMultiplayerRanks[i] & 1) { + SA2_LABEL(sub_80078D4)(3, i * 40, (i + 1) * 40, DISPLAY_WIDTH - resultsScreen->unk430, DISPLAY_HEIGHT - i * 40); + } else { + SA2_LABEL(sub_80078D4)(3, i * 40, (i + 1) * 40, resultsScreen->unk430 - DISPLAY_WIDTH, DISPLAY_HEIGHT - i * 40); + } + } else { + if (gMultiplayerRanks[i] & 1) { + SA2_LABEL(sub_80078D4) + (3, gMultiplayerRanks[i] * 40, (gMultiplayerRanks[i] + 1) * 40, DISPLAY_WIDTH - resultsScreen->unk430, + (i * 5 - gMultiplayerRanks[i] * 5) * 8); + } else { + SA2_LABEL(sub_80078D4) + (3, gMultiplayerRanks[i] * 40, (gMultiplayerRanks[i] + 1) * 40, resultsScreen->unk430 - DISPLAY_WIDTH, + (i * 5 - gMultiplayerRanks[i] * 5) * 8); + } + } + } + } +} + +void SA2_LABEL(sub_80823FC)(void) +{ + Background *background; + u32 i; + s32 val2 = 0; + u8 val = FALSE; + struct MultiplayerSinglePakResultsScreen *resultsScreen = TASK_DATA(gCurTask); + union MultiSioData *packet; + + gMultiplayerConnections = ((gMultiSioStatusFlags & MULTI_SIO_ALL_CONNECTED) >> 8); + packet = &gMultiSioRecv[0]; + if (packet->pat0.unk0 == COMM_DATA(0x12)) { +#if (GAME == GAME_SA1) || COLLECT_RINGS_ROM + gSelectedCharacter = 0; +#else + gSelectedCharacter = SIO_MULTI_CNT->id; +#endif + if (!resultsScreen->unk434) { + background = &resultsScreen->unk40; +#if (GAME == GAME_SA2) + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; +#endif + background->graphics.dest = (void *)BG_SCREEN_ADDR(24); + background->graphics.anim = 0; + background->layoutVram = (void *)BG_SCREEN_ADDR(28); + background->unk18 = 0; + background->unk1A = 0; + +#if (GAME == GAME_SA1) + background->tilemapId = TM_LEVEL_BG(LEVEL_INDEX(ZONE_1, ACT_BOSS)); + background->unk1E = 0; + background->unk20 = MP_LANGUAGE * 4; +#elif (GAME == GAME_SA2) + background->tilemapId = TM_LEVEL_METATILES_0(LEVEL_INDEX(ZONE_1, ACT_BOSS)); + + switch (gMultiplayerLanguage) { + case 0: +#ifdef JAPAN + background->unk1E = 0; + background->unk20 = 0; +#else + background->unk1E = 0; + background->unk20 = 4; +#endif + break; + case 1: + background->unk1E = 0; + background->unk20 = 0; + break; + case 2: + default: + background->unk1E = 0; + background->unk20 = 4; + break; + } +#endif + background->unk22 = 6; + background->unk24 = 8; + background->targetTilesX = 0x12; + background->targetTilesY = 4; + background->paletteOffset = 0; + background->flags = BACKGROUND_FLAGS_BG_ID(2); + DrawBackground(background); + } + + gDispCnt |= 0x400; + resultsScreen->unk430 = 0; + if (resultsScreen->unk434) { + gBldRegs.bldCnt = 0xFF; + gCurTask->main = SA2_LABEL(Task_8082630); + SA2_LABEL(Task_8082630)(); + } else { + gCurTask->main = SA2_LABEL(sub_8082AA8); + SA2_LABEL(sub_8082AA8)(); + } + } else { + SA2_LABEL(sub_8082788)(); + +#ifndef COLLECT_RINGS_ROM + if (gMultiSioStatusFlags & MULTI_SIO_PARENT) { + DisplaySprite(&resultsScreen->unk400); + } +#endif + + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + if (!(MULTI_SIO_RECV_ID(i) & gMultiSioStatusFlags)) { + val = TRUE; + } else { + packet = &gMultiSioRecv[i]; + if (i == SIO_MULTI_CNT->id || packet->pat0.unk0 == COMM_DATA(0x10)) { + val2++; + } + } + } + packet = &gMultiSioSend; + packet->pat0.unk0 = COMM_DATA(0x10); + if (gMultiSioStatusFlags & MULTI_SIO_PARENT) { + packet->pat0.unk3 = MP_LANGUAGE; + } + + if ((gMultiSioStatusFlags & MULTI_SIO_PARENT && gPressedKeys & START_BUTTON && !val && val2 > 1) || resultsScreen->actor) { + resultsScreen->actor = 1; + packet->pat0.unk0 = COMM_DATA(0x12); + } + } +} + +void SA2_LABEL(Task_8082630)(void) +{ + struct MultiplayerSinglePakResultsScreen *resultsScreen = TASK_DATA(gCurTask); + resultsScreen->unk430 += 0x20; + SA2_LABEL(sub_8082788)(); + + if (resultsScreen->unk430 > 0x1000) { + resultsScreen->unk430 = 0x1000; + gBldRegs.bldY = 0x10; + gCurTask->main = SA2_LABEL(sub_808267C); + } + + gBldRegs.bldY = I(resultsScreen->unk430); +} + +void SA2_LABEL(sub_808267C)(void) +{ + union MultiSioData *packet; + struct MultiplayerSinglePakResultsScreen *resultsScreen = TASK_DATA(gCurTask); + + packet = &gMultiSioRecv[0]; + + if (packet->pat3.unk0 == COMM_DATA(0x80)) { + u32 i; + gMultiplayerPseudoRandom = packet->pat3.unk8; + + for (i = 0; i < 4; i++) { + gMultiplayerCharacters[i] = 0; + gMultiplayerRanks[i] = i; + } + + gFlags &= ~4; + if (resultsScreen->unk434) { + TaskDestroy(gCurTask); + CreateMultiplayerSinglePakResultsScreen(0); + } else { + TaskDestroy(gCurTask); + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + SA2_LABEL(sub_8081200)(); +#if (GAME == GAME_SA2) + GameStageStart(); +#endif + } + return; + } + + SA2_LABEL(sub_8082788)(); + packet = &gMultiSioSend; + packet->pat0.unk0 = COMM_DATA(0x51); + packet->pat0.unk2 = 0; + + if ((gMultiSioStatusFlags & MULTI_SIO_TYPE) == MULTI_SIO_PARENT) { + u8 i; + for (i = 0; i < 4; i++) { + if (GetBit(gMultiplayerConnections, i)) { + packet = &gMultiSioRecv[i]; + if (packet->pat0.unk0 != COMM_DATA(0x51)) { + return; + } + } + } + packet = &gMultiSioSend; + packet->pat3.unk0 = COMM_DATA(0x80); + packet->pat3.unk8 = resultsScreen->unk43C; + } +} + +#if (GAME == GAME_SA1) +// (99.30%) https://decomp.me/scratch/yvxpr +NONMATCH("asm/non_matching/game/multiplayer/results_2__sa2__sub_8082788.inc", void SA2_LABEL(sub_8082788)(void)) +#else +void SA2_LABEL(sub_8082788)(void) +#endif +{ + u32 i; + + Sprite *s; + struct MultiplayerSinglePakResultsScreen *resultsScreen; + + MultiPakHeartbeat(); + resultsScreen = TASK_DATA(gCurTask); + + for (i = 0; i < 4; i++) { + if (!(gMultiSioStatusFlags & MULTI_SIO_RECV_ID(i + 8))) { +#if (GAME == GAME_SA1) && !defined(NON_MATCHING) + u32 unk = gMultiplayerRanks[i] & 0x1; + asm("" ::"r"(unk)); +#endif + SA2_LABEL(sub_80078D4)(3, i * 40, (i + 1) * 40, 0, DISPLAY_HEIGHT - i * 40); + } else { + union MultiSioData *send_recv; + SA2_LABEL(sub_80078D4) + (3, gMultiplayerRanks[i] * 40, (gMultiplayerRanks[i] + 1) * 40, 0, i * 40 - gMultiplayerRanks[i] * 40); +#if (GAME == GAME_SA1) + send_recv = &gMultiSioRecv[i]; + if ((i == SIO_MULTI_CNT->id) || send_recv->pat0.unk0 > 15) +#endif + { + if (resultsScreen->unk434) { + u16 temp; + + s = &resultsScreen->unk80[i].unk0; + s->x = DISPLAY_CENTER_X; + s->y = gMultiplayerRanks[i] * 40 + 20; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &resultsScreen->unk370[gMultiplayerCharacters[i]]; + s->x = 52; + s->y = gMultiplayerRanks[i] * 40 + 20; + DisplaySprite(s); + + // TODO: Fix type + temp = Base10DigitsToHexNibbles(gMultiplayerCharRings[i]); + s = &resultsScreen->unk160[((temp) >> 8) & 0xF]; + +#if (GAME == GAME_SA1) && !defined(NON_MATCHING) + { + register s32 r7 asm("r7"); + asm("" : "=r"(r7)); + } +#endif + + if (s != &resultsScreen->unk160[0]) { + s->x = 160; + s->y = gMultiplayerRanks[i] * 40 + 20; + DisplaySprite(s); + } + + s = &resultsScreen->unk160[((temp) >> 4) & 0xF]; + + if (s != &resultsScreen->unk160[0] || (temp > 0xFF)) { + s->x = 171; + s->y = gMultiplayerRanks[i] * 40 + 20; + DisplaySprite(s); + } + + s = &resultsScreen->unk160[(temp)&0xF]; + s->x = 182; + s->y = gMultiplayerRanks[i] * 40 + 20; + DisplaySprite(s); + } else { + u16 temp; + s = &resultsScreen->unk80[i].unk0; + s->x = DISPLAY_CENTER_X; + s->y = i * 40 + 20; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (gMPRingCollectWins[i] > 99) { + temp = 99; + } else { + temp = Base10DigitsToHexNibbles(gMPRingCollectWins[i]); + } + + s = &resultsScreen->unk160[((temp) >> 4)]; + + if (s != &resultsScreen->unk160[0]) { + s->x = 160; + s->y = i * 40 + 20; + DisplaySprite(s); + } + s = &resultsScreen->unk160[temp & 0xF]; + s->x = 171; + s->y = i * 40 + 20; + DisplaySprite(s); + + s = &resultsScreen->unk340; + s->x = 197; + s->y = i * 40 + 20; + DisplaySprite(s); + } + } + } + } +} +#if (GAME == GAME_SA1) +END_NONMATCH +#endif + +void SA2_LABEL(sub_8082AA8)(void) +{ + struct MultiplayerSinglePakResultsScreen *resultsScreen = TASK_DATA(gCurTask); + + SA2_LABEL(sub_8082788)(); + if (resultsScreen->unk430++ > 0x1E) { + resultsScreen->unk430 = 0; + m4aMPlayFadeOut(&gMPlayInfo_BGM, 8); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 8); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 8); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 8); + gBldRegs.bldCnt = 0xFF; + gCurTask->main = SA2_LABEL(Task_8082630); + } +} diff --git a/sa1/src/game/multiplayer/results_b.c b/sa1/src/game/multiplayer/results_b.c new file mode 100644 index 0000000000..679185943f --- /dev/null +++ b/sa1/src/game/multiplayer/results_b.c @@ -0,0 +1,798 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "game/character_select.h" +#include "game/course_select.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/save.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/text.h" + +typedef struct MPResultsB { + /* 0x00 */ Background bg; + /* 0x40 */ Background bg2; + /* 0x80 */ Sprite s; + /* 0xB0 */ Sprite s2; + /* 0xE0 */ Sprite s3[3]; + /* 0xE0 */ Sprite s6[3]; + /* 0x200 */ Sprite spr200; + /* 0x230 */ s32 unk230; + /* 0x234 */ u16 unk234; + /* 0x236 */ s16 unk236; + /* 0x238 */ u16 unk238; + /* 0x23A */ u16 unk23A; + /* 0x23C */ s16 unk23C; + /* 0x23E */ s16 unk23E; + /* 0x240 */ u16 unk240; + /* 0x240 */ u16 unk242; + /* 0x240 */ u16 unk244; + /* 0x246 */ u8 unk246; + /* 0x247 */ u8 unk247; +} MPResultsB; /* 0x248 */ + +void Task_8018ECC(void); +void Task_8019348(void); +void Task_80196FC(void); + +extern void sub_8062F90(void); + +const u8 gUnknown_080BB484[4] = { 53, 77, 101, 125 }; + +void sub_8018AE0() +{ + void *sp4; + Background *bg; + Sprite *s; + void *temp_r0; + + MPResultsB *strc; + + sp4 = (void *)OBJ_VRAM0; + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + gDispCnt = 0x1340; + gBgCntRegs[0] = 0x1E03; + gBgCntRegs[1] = 0x1F06; + strc = TASK_DATA(TaskCreate(Task_8018ECC, sizeof(MPResultsB), 0x2000U, 0U, NULL)); + bg = &strc->bg; + strc->unk234 = 0; + strc->unk236 = 0; + strc->unk238 = 0; + strc->unk247 = 0; + strc->unk246 = 1; + strc->unk230 = 0; + strc->unk23A = 0; + strc->unk23C = 0; + strc->unk23E = 0; + strc->unk240 = 0; + + s = &strc->s; + s->x = 0; + s->y = 0x19; + s->graphics.dest = sp4; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = 894; + strc->s.variant = 2; + s->animCursor = 0; + s->qAnimDelay = 0; + strc->s.prevVariant = 0xFF; + strc->s.animSpeed = 0x10; + strc->s.palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + sp4 += 0x340; + s = &strc->s2; + s->x = 0; + s->y = 0xE; + s->graphics.dest = sp4; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 860; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + sp4 += 0x180; + s = &strc->s3[0]; + s->x = 0x35; + s->y = 0x58; + s->graphics.dest = sp4; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MP_OUTCOME_MESSAGES_EN; + s->variant = 2; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + sp4 += 0x180; + s = &strc->s3[1]; + s->x = 0xB7; + s->y = 0x58; + s->graphics.dest = sp4; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_MP_OUTCOME_MESSAGES_EN; + s->variant = 3; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + sp4 += 0x100; + s = &strc->s3[2]; + s->x = 25; + s->y = 73; + s->graphics.dest = sp4; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 858; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + sp4 += 0x380; + s = &strc->spr200; + s->x = 120; + s->y = 80; + s->graphics.dest = sp4; + s->oamFlags = 0x80; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_VS_MENU_WAIT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + bg->graphics.dest = (void *)BG_VRAM; + bg->graphics.anim = 0; + bg->layoutVram = (u16 *)(BG_VRAM + 0xF000); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = 81; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 20; + bg->paletteOffset = 0; + bg->flags = 0; + DrawBackground(bg); + + bg = &strc->bg2; + bg->graphics.dest = (void *)(BG_VRAM + 0x4000); + bg->graphics.anim = 0; + bg->layoutVram = (void *)(BG_VRAM + 0xF800); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = 82; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 32; + bg->targetTilesY = 32; + bg->paletteOffset = 0; + bg->flags = 1; + DrawBackground(bg); + + m4aSongNumStartOrChange(3U); + + gRepeatedKeys = 0; + gPressedKeys = 0; + gInput = 0; + gWinRegs[5] = 0x3F; + gBldRegs.bldCnt = 0x3F46; + gBldRegs.bldAlpha = 0xA10; + gWinRegs[2] = 0xA0; +} + +// (97.44%) https://decomp.me/scratch/nj1HT +NONMATCH("asm/non_matching/game/multiplayer/results_b__Task_8018ECC.inc", void Task_8018ECC(void)) +{ + Sprite *s; + s32 temp_r1_5; + s32 temp_r3_3; + s32 var_r1; + s32 var_r3_2; + s32 var_r4; + s32 i; + u16 *temp_r1_2; + u16 *temp_r4_4; + u16 temp_r0_2; + u32 var_r3; + s16 var_r4_2; + u8 *var_r2; + u8 temp_r0; + u8 temp_r4; + u8 var_r0; + u8 var_r0_2; + u16 recvData; + union MultiSioData *send_recv; + + MPResultsB *strc = TASK_DATA(gCurTask); + + strc->unk234++; + if (IS_MULTI_PLAYER) { + for (var_r3 = 0; var_r3 < 4; var_r3++) { + if (!GetBit(gMultiplayerConnections, var_r3)) { + break; + } + + if (!CheckBit(gMultiSioStatusFlags, var_r3)) { + if (gMultiplayerMissingHeartbeats[var_r3]++ >= 0xB5) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[var_r3] = 0; + } + } + } + + recvData = gMultiSioRecv->pat0.unk0; + if (recvData == 0x34) { + if (strc->unk246 != gMultiSioRecv->pat0.unk2) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + if (!(gMultiSioStatusFlags & 0x80)) { + strc->unk246 = gMultiSioRecv->pat0.unk2; + } + } + } else if (recvData == 0x35) { + var_r3_2 = 1; + if (gMultiSioStatusFlags & 0x80) { + for (i = 1; i < 4; i++) { + if (!GetBit(gMultiplayerConnections, i)) { + break; + } + + send_recv = &gMultiSioRecv[i]; + if (send_recv->pat0.unk0 < 0x35) { + var_r3_2 = 0; + } + } + } else { + gMultiSioSend.pat0.unk0 = recvData; + } + if (var_r3_2 != 0) { + if (strc->unk246 != gMultiSioRecv->pat0.unk2) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + strc->unk246 = gMultiSioRecv->pat0.unk2; + } + m4aSongNumStart(SE_SELECT); + if (strc->unk246 == 0) { + if (gGameMode == 2) { + gGameMode = 3; + } else { + gGameMode = 5; + } + gCurTask->main = Task_8019348; + return; + } + var_r0_2 = gGameMode; + if (gGameMode != 2) { + var_r0_2 = 4; + } + gGameMode = var_r0_2; + TaskDestroy(gCurTask); + + if (gGameMode == GAME_MODE_RACE) { + CreateCourseSelect(0U); + } else { + sub_8062F90(); + } + return; + } + } else if (recvData > 0x35U) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + LinkCommunicationError(); + return; + } + + if (gMultiSioStatusFlags & 0x80) { + var_r4 = 1; + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x34; + if (strc->unk247 == 0) { + if (0x10 & gInput) { + strc->unk246 = 1; + } else if (0x20 & gInput) { + strc->unk246 = 0; + } + } + send_recv->pat0.unk2 = strc->unk246; + + for (i = 1; i < 4; i++) { + if (!GetBit(gMultiplayerConnections, i)) { + break; + } + + if (gMultiSioRecv[i].pat0.unk0 < 0x34) { + var_r4 = 0; + } + } + if (((var_r4 != 0) && (1 & gPressedKeys)) || (strc->unk247 != 0)) { + gMultiSioSend.pat0.unk0 = 0x35; + gMultiSioSend.pat0.unk2 = strc->unk246; + strc->unk247 = 1; + } + } else { + gMultiSioSend.pat0.unk0 = 0x34; + s = &strc->spr200; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + s = &strc->s3[2]; + s->x = (strc->unk246 * 0x83) + 0x19; + strc->unk236 += 0x10; + if (strc->unk236 > 0x400) { + strc->unk236 = 0x400; + } + if (strc->unk246 == 0) { + strc->unk238 = (strc->unk238 + 1) & 0x3FF; + } else { + strc->unk238 = (strc->unk238 - 1) & 0x3FF; + } + + strc->unk23A = (strc->unk236 * COS_24_8(strc->unk238)) >> 8; + strc->unk23C = (strc->unk236 * SIN_24_8(strc->unk238)) >> 8; + strc->unk23E += strc->unk23A; + strc->unk240 += strc->unk23C; + + gBgScrollRegs[1][0] = (s16)((s32)((u16)strc->unk23E << 0x10) >> 0x18); + gBgScrollRegs[1][1] = (s16)((s32)(strc->unk240 << 0x10) >> 0x18); + strc->unk230 += 0x80; + if (strc->unk230 > Q(136)) { + strc->unk230 -= Q(136); + } + + s = &strc->s; + var_r4_2 = I(-strc->unk230); + while (var_r4_2 < DISPLAY_WIDTH) { + s->x = (s16)var_r4_2; + var_r4_2 += 136; + DisplaySprite(s); + } + + for (i = 0; i < 3; i++) { + s = &strc->s3[i]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + s = &strc->s2; + for (i = 0; i < 8; i++) { + s->x = i * 32; + DisplaySprite(s); + } +} +END_NONMATCH + +void Task_8019348(void) +{ + Sprite *s; + u8 *vram = (u8 *)OBJ_VRAM0; + + MPResultsB *strc = TASK_DATA(gCurTask); + + strc->unk246 = 1 & SIO_MULTI_CNT->id; + strc->unk247 = 0; + s = &strc->s; + s->x = 0; + s->y = 25; + s->graphics.dest = vram; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = 0x37E; + strc->s.variant = 3; + s->animCursor = 0; + s->qAnimDelay = 0; + strc->s.prevVariant = 0xFF; + strc->s.animSpeed = 0x10; + strc->s.palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + vram += 0x400; + + s = &strc->s2; + s->x = 0; + s->y = 0xE; + s->graphics.dest = vram; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x35C; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + vram += 0x180; + + s = &strc->s3[0]; + s->x = 0x2B; + s->y = 0x3D; + s->graphics.dest = vram; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x37E; + s->variant = 5; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + vram += 0x100; + + s = &strc->s3[1]; + s->x = 0x2B; + s->y = 0x55; + s->graphics.dest = vram; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x37E; + s->variant = 6; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + vram += 0x100; + + s = &strc->s3[2]; + s->x = 43; + s->y = 109; + s->graphics.dest = vram; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x37E; + s->variant = 7; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + vram += 0x100; + + s = &strc->s6[0]; + s->x = 0x2B; + s->y = 0x85; + s->graphics.dest = vram; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x37E; + s->variant = 8; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + vram += 0x100; + + s = &strc->s6[1]; + s->x = 0x4B; + s->y = 0x35; + s->graphics.dest = vram; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x359; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + vram += 0x80; + + s = &strc->s6[2]; + s->x = 0x67; + s->y = 0x61; + s->graphics.dest = vram; + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x37E; + s->variant = 4; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + gRepeatedKeys = 0; + gPressedKeys = 0; + gInput = 0; + + gBgCntRegs[2] = 0x1F05; + gBgScrollRegs[2][0] = gBgScrollRegs[1][0]; + gBgScrollRegs[2][1] = gBgScrollRegs[1][1]; + strc->unk23E = gBgScrollRegs[1][0]; + strc->unk240 = gBgScrollRegs[1][1]; + strc->unk242 = gBgScrollRegs[1][0]; + strc->unk244 = gBgScrollRegs[1][1]; + + gDispCnt |= 0x2400; + gWinRegs[4] = 0x3D; + gWinRegs[5] = 0x3B; + gBldRegs.bldCnt = 0x3F46; + + gCurTask->main = Task_80196FC; + Task_80196FC(); +} + +// (99.42%) https://decomp.me/scratch/2e0s2 +NONMATCH("asm/non_matching/game/multiplayer/results_b__Task_80196FC.inc", void Task_80196FC(void)) +{ + s32 spC = 1; + u8 sp8[2] = { 0 }; + s32 sp10; + s32 r2; + Sprite *temp_r4_10; + Sprite *temp_r6; + s16 *temp_r3; + s16 temp_r4_7; + s32 *temp_r2_5; + s32 temp_r0_3; + s32 temp_r1_3; + s32 temp_r1_4; + s32 temp_r2_2; + s32 temp_r3_2; + s32 var_r6; + s32 var_sl; + u32 var_r3; + s16 var_r5; + u8 *var_r2; + u8 temp_r0; + u8 temp_r0_2; + u8 temp_r2_4; + u8 temp_r4_3; + union MultiSioData *send_recv; + void *var_r1; + + MPResultsB *strc = TASK_DATA(gCurTask); + + if (strc->unk247 == 0) { + if (DPAD_RIGHT & gRepeatedKeys) { + if (strc->unk246 == 0) { + m4aSongNumStart(0x6CU); + } + strc->unk246 = spC; + } else if (DPAD_LEFT & gRepeatedKeys) { + if (strc->unk246 == 1) { + m4aSongNumStart(0x6CU); + } + strc->unk246 = 0; + } + } + if (IS_MULTI_PLAYER) { + for (var_r3 = 0; var_r3 < 4; var_r3++) { + if (!GetBit(gMultiplayerConnections, var_r3)) { + break; + } + + if (!CheckBit(gMultiSioStatusFlags, var_r3)) { + if (gMultiplayerMissingHeartbeats[var_r3]++ >= 0xB5) { + TasksDestroyAll(); + gBackgroundsCopyQueueCursor = gBackgroundsCopyQueueIndex; + gBgSpritesCount = 0; + gVramGraphicsCopyCursor = gVramGraphicsCopyQueueIndex; + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[var_r3] = 0; + } + } + } +block_18: + for (var_r6 = 0; var_r6 < 4; var_r6++) { + if (!GetBit(gMultiplayerConnections, var_r6)) { + break; + } + var_sl = 0xE0; + + send_recv = &gMultiSioRecv[var_r6]; + if ((u32)(u16)(send_recv->pat0.unk0 - 0x40) <= 1U) { + if (send_recv->pat0.unk0 != 0x41) { + temp_r4_10 = &strc->s3[var_r6]; // TODO: s3 has 4 elements???? + temp_r4_10->x = (send_recv->pat0.unk2 << 7) + 0x2B; + DisplaySprite(temp_r4_10); + temp_r4_10 = &strc->s6[1]; + temp_r4_10->y = gUnknown_080BB484[var_r6]; + temp_r4_10->x = (send_recv->pat0.unk2 * 0x5E) + 0x4B; + if (send_recv->pat0.unk2 == 0) { + temp_r4_10->frameFlags &= 0xFFFFFBFF; + gMultiplayerConnections &= ~(0x10 << var_r6); + asm(""); + } else { + temp_r4_10->frameFlags |= 0x400; + gMultiplayerConnections |= 0x10 << var_r6; + } + DisplaySprite(temp_r4_10); + spC = 0; + } else { + temp_r4_10 = &strc->s3[var_r6]; + DisplaySprite(temp_r4_10); + if (temp_r4_10->x == 0x2B) { + sp8[0]++; + } else { + sp8[1]++; + } + } + } else { + spC = 0; + } + } + temp_r0_2 = (u8)var_r6; + if (spC != 0) { + if ((sp8[0] == 0) || (sp8[1] == 0)) { + strc->unk247 = 0; + goto block_39; + } + TaskDestroy(gCurTask); + gFlags &= ~4; + if (gGameMode == 3) { + CreateCourseSelect(0U); + return; + } + sub_8062F90(); + return; + } +block_39: + sa2__sub_80064A8(0U, 0x74U, 0U, 0x7CU, 8U, 0xF0U); + sa2__sub_80064A8(0U, 0x7CU, 8U, 0x74U, 0x10U, 0xF0U); + + // TOOD +#ifndef NON_MATCHING + { + register volatile void *dmaSrc asm("r2") = ®_DMA3SAD; + register u8 *offsetsHBlank asm("r4") = gBgOffsetsHBlankPrimary; + asm("" ::"r"(dmaSrc)); + asm("" ::"r"(offsetsHBlank)); + { + u32 copySize = gHBlankCopySize; + register void *dmaDst asm("r1") = &(offsetsHBlank)[copySize << 4]; + register s32 v asm("r7") = 0x84000000; + asm("" ::"r"(v)); + for (var_r6 = 0; var_r6 <= 0x80; var_r6 += 0x10) { + DmaCopy32(3, gBgOffsetsHBlankPrimary, dmaDst, (gHBlankCopySize << 4)); + dmaDst += copySize; + } + } + } +#else + temp_r1_4 = gHBlankCopySize * 0x10; + for (var_r6 = 0x0; var_r6 <= 0x80; var_r6 += 0x10) { + DmaCopy32(3, gBgOffsetsHBlankPrimary, &((u8 *)gBgOffsetsHBlankPrimary)[temp_r1_4], (gHBlankCopySize << 4)); + temp_r1_4 += gHBlankCopySize * var_r6; + } +#endif + + strc->unk238 = (strc->unk238 + 1) & 0x3FF; + temp_r2_2 = (((strc->unk236 * COS_24_8(strc->unk238))) << 8) >> 16; + temp_r1_3 = (((strc->unk236 * SIN_24_8(strc->unk238))) << 8) >> 16; + strc->unk23E += temp_r2_2; + strc->unk240 += temp_r1_3; + strc->unk242 -= temp_r2_2; + strc->unk244 -= temp_r1_3; + gBgScrollRegs[1][0] = (s16)((s32)((u16)strc->unk23E << 0x10) >> 0x18); + gBgScrollRegs[1][1] = (s16)((s32)(strc->unk240 << 0x10) >> 0x18); + gBgScrollRegs[2][0] = (s16)((s32)(strc->unk242 << 0x10) >> 0x18); + gBgScrollRegs[2][1] = (s16)((s32)(strc->unk244 << 0x10) >> 0x18); + if (2 & gPressedKeys) { + m4aSongNumStart(0x6BU); + strc->unk247 = 0; + } + if ((!(DPAD_SIDEWAYS & gInput) && (A_BUTTON & gPressedKeys) + && (((strc->unk246 == 0) && ((temp_r0_2 - 1) != sp8[0])) || ((strc->unk246 == 1) && ((temp_r0_2 - 1) != sp8[1])))) + || (strc->unk247 != 0)) { + if (strc->unk247 == 0) { + m4aSongNumStart(0x6AU); + } + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x41; + send_recv->pat0.unk2 = strc->unk246; + strc->unk247 = 1; + } else { + send_recv = &gMultiSioSend; + send_recv->pat0.unk0 = 0x40; + send_recv->pat0.unk2 = strc->unk246; + } + + for (var_r6 = 0; var_r6 < 4; var_r6++) { + if (!GetBit(gMultiplayerConnections, var_r6)) { + break; + } + + if (SIO_MULTI_CNT->id != var_r6) { + send_recv = &gMultiSioRecv[var_r6]; + if (send_recv->pat0.unk0 >= 0x42) { + TasksDestroyAll(); + gBackgroundsCopyQueueCursor = gBackgroundsCopyQueueIndex; + gBgSpritesCount = 0; + gVramGraphicsCopyCursor = gVramGraphicsCopyQueueIndex; + LinkCommunicationError(); + return; + } + } + } + + temp_r4_10 = &strc->s; + temp_r2_5 = &strc->unk230; + temp_r3_2 = strc->unk230; + temp_r1_4 = temp_r3_2 + 0x80; + strc->unk230 = temp_r1_4; + if (temp_r1_4 > Q(164)) { + strc->unk230 -= Q(164); + } + + var_r5 = I(-strc->unk230); + temp_r0_3 = var_r5; + temp_r6 = &strc->s2; + while (var_r5 < DISPLAY_WIDTH) { + temp_r4_10->x = (s16)var_r5; + var_r5 += 164; + DisplaySprite(temp_r4_10); + temp_r0_3 = var_r5; + } + temp_r4_10 = &strc->s6[2]; + DisplaySprite(temp_r4_10); + + temp_r4_10 = temp_r6; + for (var_r6 = 0; var_r6 < 8; var_r6++) { + temp_r4_10->x = var_r6 * 32; + DisplaySprite(temp_r4_10); + } +} +END_NONMATCH \ No newline at end of file diff --git a/sa1/src/game/multiplayer/unk_0.c b/sa1/src/game/multiplayer/unk_0.c new file mode 100644 index 0000000000..ace6391e1e --- /dev/null +++ b/sa1/src/game/multiplayer/unk_0.c @@ -0,0 +1,287 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "game/multiplayer/unk_0.h" +#include "game/sa1_sa2_shared/globals.h" + +void Task_801C770(void); +void Task_801C810(void); +void Task_801C8D4(void); +void sub_801C9AC(void); +void sub_801C9C0(int_vcount vcount); +void TaskDestructor_801C980(struct Task *t); + +#define ROOT DISPLAY_CENTER_X +#define X_RANGE(offset) WIN_RANGE((ROOT) - (offset), (ROOT) + (offset)) + +static const winreg_t sWin0Ranges[DISPLAY_HEIGHT] = { + X_RANGE(00), // + X_RANGE(12), // + X_RANGE(00), // + X_RANGE(12), // + X_RANGE(00), // + X_RANGE(12), // + X_RANGE(00), // + X_RANGE(12), // + X_RANGE(00), // + X_RANGE(11), // + X_RANGE(00), // + X_RANGE(11), // + X_RANGE(00), // + X_RANGE(11), // + X_RANGE(00), // + X_RANGE(11), // + X_RANGE(00), // + X_RANGE(11), // + X_RANGE(15), // + X_RANGE(19), // + X_RANGE(22), // + X_RANGE(24), // + X_RANGE(27), // + X_RANGE(29), // + X_RANGE(30), // + X_RANGE(32), // + X_RANGE(34), // + X_RANGE(35), // + X_RANGE(37), // + X_RANGE(38), // + X_RANGE(39), // + X_RANGE(41), // + X_RANGE(42), // + X_RANGE(43), // + X_RANGE(44), // + X_RANGE(45), // + X_RANGE(46), // + X_RANGE(47), // + X_RANGE(48), // + X_RANGE(49), // + X_RANGE(49), // + X_RANGE(50), // + X_RANGE(51), // + X_RANGE(52), // + X_RANGE(52), // + X_RANGE(53), // + X_RANGE(54), // + X_RANGE(54), // + X_RANGE(55), // + X_RANGE(55), // + X_RANGE(56), // + X_RANGE(57), // + X_RANGE(57), // + X_RANGE(58), // + X_RANGE(58), // + X_RANGE(58), // + X_RANGE(59), // + X_RANGE(59), // + X_RANGE(60), // + X_RANGE(60), // + X_RANGE(60), // + X_RANGE(61), // + X_RANGE(61), // + X_RANGE(61), // + X_RANGE(61), // + X_RANGE(62), // + X_RANGE(62), // + X_RANGE(62), // + X_RANGE(62), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(64), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(63), // + X_RANGE(62), // + X_RANGE(62), // + X_RANGE(62), // + X_RANGE(62), // + X_RANGE(61), // + X_RANGE(61), // + X_RANGE(61), // + X_RANGE(61), // + X_RANGE(60), // + X_RANGE(60), // + X_RANGE(60), // + X_RANGE(59), // + X_RANGE(59), // + X_RANGE(58), // + X_RANGE(58), // + X_RANGE(58), // + X_RANGE(57), // + X_RANGE(57), // + X_RANGE(56), // + X_RANGE(55), // + X_RANGE(55), // + X_RANGE(54), // + X_RANGE(54), // + X_RANGE(53), // + X_RANGE(52), // + X_RANGE(52), // + X_RANGE(51), // + X_RANGE(50), // + X_RANGE(49), // + X_RANGE(49), // + X_RANGE(48), // + X_RANGE(47), // + X_RANGE(46), // + X_RANGE(45), // + X_RANGE(44), // + X_RANGE(43), // + X_RANGE(42), // + X_RANGE(41), // + X_RANGE(39), // + X_RANGE(38), // + X_RANGE(37), // + X_RANGE(35), // + X_RANGE(34), // + X_RANGE(32), // + X_RANGE(30), // + X_RANGE(29), // + X_RANGE(27), // + X_RANGE(24), // + X_RANGE(22), // + X_RANGE(19), // + X_RANGE(15), // + X_RANGE(11), // + X_RANGE(16), // + X_RANGE(11), // + X_RANGE(16), // + X_RANGE(11), // + X_RANGE(16), // + X_RANGE(11), // + X_RANGE(16), // + X_RANGE(11), // + X_RANGE(17), // + X_RANGE(12), // + X_RANGE(17), // + X_RANGE(12), // + X_RANGE(17), // + X_RANGE(12), // + X_RANGE(17), // + X_RANGE(12), // +}; + +struct Task *sub_801C704(void) +{ + struct Task *t; + UnkMP0 *strc; + + t = TaskCreate(Task_801C770, 8U, 0x2000U, 0U, TaskDestructor_801C980); + strc = TASK_DATA(t); + strc->unk2 = 0; + strc->unk4 = 600; + strc->unk6 = 0; + strc->unk0 = 64; + + gDispCnt |= DISPCNT_WIN0_ON; + gWinRegs[WINREG_WININ] = 0x1F; + gWinRegs[WINREG_WINOUT] = 63; + gBldRegs.bldCnt = 0x3FDF; + gBldRegs.bldY = 0; + + return t; +} + +void Task_801C770() +{ + u16 temp_r0; + u8 temp_r0_2; + u8 temp_r0_3; + + UnkMP0 *strc = TASK_DATA(gCurTask); + + strc->unk2 += 64; + if (strc->unk2 == 0x1000) { + gCurTask->main = Task_801C810; + } + + gBldRegs.bldY = I(strc->unk2); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(17, DISPLAY_HEIGHT - 16); + gVBlankCallbacks[gNumVBlankCallbacks++] = sub_801C9AC; + gFlags |= FLAGS_EXECUTE_VBLANK_CALLBACKS; + gHBlankCallbacks[gNumHBlankCallbacks++] = sub_801C9C0; + gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; +} + +void Task_801C810() +{ + u16 temp_r0; + u8 temp_r0_2; + u8 temp_r0_3; + + UnkMP0 *strc = TASK_DATA(gCurTask); + u32 siocnt = REG_SIOCNT_32; + + gBldRegs.bldY = I(strc->unk2); + gVBlankCallbacks[gNumVBlankCallbacks++] = sub_801C9AC; + gFlags |= FLAGS_EXECUTE_VBLANK_CALLBACKS; + gHBlankCallbacks[gNumHBlankCallbacks++] = sub_801C9C0; + gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; + + if (--strc->unk4 == 0) { + gCurTask->main = Task_801C8D4; + } + + if (gMultiplayerRanks[SIO_MULTI_CNT->id] != -1) { + TaskDestroy(gCurTask); + } +} + +void Task_801C8D4() +{ + u16 temp_r0; + u8 temp_r0_2; + u8 temp_r0_3; + + UnkMP0 *strc = TASK_DATA(gCurTask); + + strc->unk2 -= 64; + if ((strc->unk2 < 0x0) || (gMultiplayerRanks[SIO_MULTI_CNT->id] != -1)) { + TaskDestroy(gCurTask); + return; + } + + gBldRegs.bldY = I(strc->unk2); + gVBlankCallbacks[gNumVBlankCallbacks++] = sub_801C9AC; + gFlags |= FLAGS_EXECUTE_VBLANK_CALLBACKS; + gHBlankCallbacks[gNumHBlankCallbacks++] = sub_801C9C0; + gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; +} + +void TaskDestructor_801C980(struct Task *t) +{ + gDispCnt &= ~DISPCNT_WIN0_ON; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, 0); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, 0); +} + +void sub_801C9AC(void) +{ + volatile winreg_t *regs = ®_WIN0H; + *regs = sWin0Ranges[0]; +} + +void sub_801C9C0(int_vcount vcount) +{ + volatile winreg_t *reg = ®_WIN0H; + const winreg_t *src = &sWin0Ranges[vcount]; + *reg = *src; +} diff --git a/sa1/src/game/multiplayer/unk_1.c b/sa1/src/game/multiplayer/unk_1.c new file mode 100644 index 0000000000..1e2c649979 --- /dev/null +++ b/sa1/src/game/multiplayer/unk_1.c @@ -0,0 +1,449 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "bg_triangles.h" +#include "data/ui_graphics.h" +#include "game/course_select.h" +#include "game/sa1_sa2_shared/unused_level_select.h" +#include "game/gTask_03006240.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/multiplayer/unk_1.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/player.h" +#include "game/stage/stage.h" +#include "game/save.h" + +#include "constants/songs.h" +#include "constants/tilemaps.h" +#include "constants/ui_graphics.h" + +typedef struct SpriteStrc { + Sprite s; + u8 filler30[0x8]; +} SpriteStrc; + +typedef struct MPStrc1 { + /* 0x00 */ Background bg0; + /* 0x40 */ u8 filler40[0x40]; + /* 0x80 */ SpriteStrc sprites[4]; + /* 0x120 */ u8 filler160[0x2D0]; +#if WIDESCREEN_HACK + /* 0x430 */ u32 qUnk430; +#else + /* 0x430 */ u16 qUnk430; +#endif + /* 0x432 */ s16 unk432; +} MPStrc1; /* 0x434 */ + +typedef struct MPStrc2 { + /* 0x00 */ GameOverB overBs[4]; + /* 0x60 */ u16 unk60; + /* 0x60 */ u16 unk62; + /* 0x60 */ u8 *vram64; +} MPStrc2; /* 0x68 */ + +void Task_801CB80(void); +void sub_801CF08(void); +void sub_801D0CC(); +void Task_801D200(void); +void Task_801D34C(void); +void TaskDestructor_801D3C8(struct Task *t); + +extern void sub_8018AE0(void); +extern void sub_8062F90(void); + +extern u8 gUnknown_03005008[MULTI_SIO_PLAYERS_MAX]; + +void sub_801C9D8(void) +{ + MPStrc1 *strc; + Sprite *s; + struct Task *t; + u32 i; + + gWinRegs[4] = 0; + gWinRegs[5] = 0; + gWinRegs[0] = 0; + gWinRegs[2] = 0; + gWinRegs[1] = 0; + gWinRegs[3] = 0; + gDispCnt = DISPCNT_OBJ_1D_MAP; + gBgCntRegs[3] = 0x5E0B; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + gBgSprites_Unknown1[3] = 0xFF; + gBgSprites_Unknown2[3][0] = 0; + gBgSprites_Unknown2[3][1] = 0; + gBgSprites_Unknown2[3][2] = -1; + gBgSprites_Unknown2[3][3] = 0x40; + DmaFill32(3, 0, VRAM + 0xA000 - 0x20, 0x40); + t = TaskCreate(Task_801CB80, sizeof(MPStrc1), 0x2000U, 0U, NULL); + strc = TASK_DATA(t); + strc->qUnk430 = 0; + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + if (!GetBit(gMultiplayerConnections, i)) + break; + } + + if (i == 3) { + strc->unk432 = 0x14; + } else if (i == 2) { + strc->unk432 = 0x28; + } else { + strc->unk432 = 0; + } + + strc->bg0.graphics.dest = (void *)(BG_VRAM + 0x8000); + strc->bg0.graphics.anim = 0; + strc->bg0.layoutVram = (u16 *)(BG_VRAM + 0xF000); + strc->bg0.unk18 = 0; + strc->bg0.unk1A = 0; + strc->bg0.tilemapId = TM_MP_MULTIPAK_PLAYER_OVERVIEW; + strc->bg0.unk1E = 0; + strc->bg0.unk20 = 0; + strc->bg0.unk22 = 0; + strc->bg0.unk24 = 0; + strc->bg0.targetTilesX = 30; + strc->bg0.targetTilesY = 20; + strc->bg0.paletteOffset = 0; + strc->bg0.flags = 3; + DrawBackground(&strc->bg0); + + for (i = 0; i < ARRAY_COUNT(strc->sprites); i++) { + SpriteStrc *spr = &strc->sprites[i]; + Sprite *s = &spr->s; + + s->x = DISPLAY_CENTER_X; + s->y = 20 + i * 0x28; + s->graphics.dest = OBJ_VRAM0 + (i << 0xB); + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = gPlayerCharacterIdleAnims[i]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + }; + + sub_80535FC(); +} + +void Task_801CB80() +{ + u32 pid; + u32 i; + MPStrc1 *strc; + + gDispCnt |= (DISPCNT_OBJ_ON | DISPCNT_BG3_ON); + if (IS_MULTI_PLAYER) { + for (pid = 0; pid < 4; pid++) { + if (!GetBit(gMultiplayerConnections, pid)) { + break; + } + + if (!CheckBit(gMultiSioStatusFlags, pid)) { + if (gMultiplayerMissingHeartbeats[pid]++ >= 0xB5) { + TasksDestroyAll(); + gBackgroundsCopyQueueCursor = gBackgroundsCopyQueueIndex; + gBgSpritesCount = 0; + gVramGraphicsCopyCursor = gVramGraphicsCopyQueueIndex; + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[pid] = 0; + } + } + } + + strc = TASK_DATA(gCurTask); + strc->qUnk430 += Q(4); + if (strc->qUnk430 > Q(DISPLAY_WIDTH)) { + strc->qUnk430 = 0; + sub_801D0CC(); + gCurTask->main = Task_801D34C; + Task_801D34C(); + return; + } + + if (strc->unk432 != 0) { + SA2_LABEL(sub_80078D4)(3U, 0U, strc->unk432, 0xF0U, 0U); + } + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + if (!GetBit(gMultiplayerConnections, i)) { + break; + } + + if (1 & i) { + SA2_LABEL(sub_80078D4) + (3U, strc->unk432 + (i * 40), strc->unk432 + ((i + 1) * 40), (DISPLAY_WIDTH - I(strc->qUnk430)), (-strc->unk432) & 0xFF); + } else { + SA2_LABEL(sub_80078D4) + (3U, strc->unk432 + (i * 40), strc->unk432 + ((i + 1) * 40), (I(strc->qUnk430) - DISPLAY_WIDTH), (-strc->unk432) & 0xFF); + } + } + + if (strc->unk432 != 0) { + SA2_LABEL(sub_80078D4)(3U, (u8)(strc->unk432 + (i * 40)), DISPLAY_HEIGHT, DISPLAY_WIDTH, 0U); + } +} + +void Task_801CD80() +{ + MPStrc1 *strc = TASK_DATA(gCurTask); + u8 i; + + strc->qUnk430 += Q(2); + if (strc->qUnk430 > Q(16)) { + strc->qUnk430 = 0x1000; + gBldRegs.bldY = 0x10; + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + if ((gGameMode == GAME_MODE_RACE) || (gGameMode == GAME_MODE_CHAO_HUNT)) { + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + if (!GetBit(gMultiplayerConnections, i)) { + break; + } + } + + if (i < 3) { + if (gGameMode == GAME_MODE_RACE) { + gGameMode = GAME_MODE_RACE; + CreateCourseSelect(0U); + return; + } + gGameMode = 4; + sub_8062F90(); + } else { + sub_8018AE0(); + } + } else { + m4aSongNumStop(MUS_CHARACTER_SELECTION); + + if (R_BUTTON & gInput) { + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = -1; + gBgSprites_Unknown2[0][3] = 0x20; + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = -1; + gBgSprites_Unknown2[1][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = -1; + gBgSprites_Unknown2[2][3] = 0x20; + gBgSprites_Unknown1[3] = 0; + gBgSprites_Unknown2[3][0] = 0; + gBgSprites_Unknown2[3][1] = 0; + gBgSprites_Unknown2[3][2] = -1; + gBgSprites_Unknown2[3][3] = 0x20; + CreateUnusedLevelSelect(); + } else if ((gGameMode == 0) && (LOADED_SAVE->unlockedLevels[gSelectedCharacter] == 0)) { + gCurrentLevel = 0; + ApplyGameStageSettings(); + } else { + CreateCourseSelect(0U); + } + } + } else { + sub_801CF08(); + gBldRegs.bldY = I(strc->qUnk430); + } +} + +void sub_801CF08() +{ + SpriteStrc *spriteStrc; + u32 pid; + u32 i; + + MPStrc1 *strc; + + if (IS_MULTI_PLAYER) { + for (pid = 0; pid < 4; pid++) { + if (!GetBit(gMultiplayerConnections, pid)) { + break; + } + + if (CheckBit(gMultiSioStatusFlags, pid) == 0) { + if (gMultiplayerMissingHeartbeats[pid]++ >= 0xB5) { + TasksDestroyInPriorityRange(0U, 0xFFFFU); + gBackgroundsCopyQueueCursor = gBackgroundsCopyQueueIndex; + gBgSpritesCount = 0; + gVramGraphicsCopyCursor = gVramGraphicsCopyQueueIndex; + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[pid] = 0; + } + } + } + + strc = TASK_DATA(gCurTask); + if (strc->unk432 != 0) { + SA2_LABEL(sub_80078D4)(3U, 0U, strc->unk432, 240, 0U); + } + + for (i = 0; i < 4; i++) { + if (!GetBit(gMultiplayerConnections, i)) { + break; + } + + SA2_LABEL(sub_80078D4)(3U, (strc->unk432 + (i * 0x28)), (strc->unk432 + ((i + 1) * 0x28)), 0U, (-strc->unk432) & 0xFF); + + if ((i == SIO_MULTI_CNT->id) || GetBit(gMultiplayerConnections, i)) { + spriteStrc = &strc->sprites[gMultiplayerCharacters[i]]; + spriteStrc->s.x = 120; + spriteStrc->s.y = (i * 40) + 20 + strc->unk432; + UpdateSpriteAnimation(&spriteStrc->s); + DisplaySprite(&spriteStrc->s); + } + } + + if (strc->unk432 != 0) { + SA2_LABEL(sub_80078D4)(3U, (strc->unk432 + (i * 0x28)), 0xA0U, 0xF0U, 0U); + } +} + +void sub_801D0CC(void) +{ + Strc_80528AC gfx; + u8 i; + GameOverB *overB; + + MPStrc2 *strc68; + + strc68 = TASK_DATA(TaskCreate(Task_801D200, sizeof(MPStrc2), 0x2200U, 0U, TaskDestructor_801D3C8)); + gfx.uiGfxID = UIGFX_ASCII_CHARS; + gfx.unk2B = 1; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[UIGFX_60].palette; // TODO: What is this palette? + gfx.vramC = VramMalloc(0xE0U); + gfx.tilesSize = 0x1C00; + gfx.paletteSize = 0x20; + gfx.unk28 = 4; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + strc68->vram64 = gfx.vramC; + strc68->unk60 = 10; + strc68->unk62 = 20; + + for (i = 0; i < 4; i++) { + overB = &strc68->overBs[i]; + overB->qUnkA = 10; + overB->unkC = 20; + overB->unkE = 1; + overB->unk10 = 1; + overB->unk12 = 4; + overB->unk16 = 1; + overB->unk8 = 0; + } +} + +// (93.77%) https://decomp.me/scratch/9u8Fv +NONMATCH("asm/non_matching/game/multiplayer/unk_1__Task_801D200.inc", void Task_801D200()) +{ + MPStrc2 *strc; + s32 sp4; + u8 pid; + GameOverB *overB; + s32 var_r0_2; + u8 var_r6; + u8 nameChar; + + strc = TASK_DATA(gCurTask); + for (pid = 0; pid < MULTI_SIO_PLAYERS_MAX; pid++) { + if (!GetBit(gMultiplayerConnections, pid)) { + break; + } + } + + if (pid == 3) { + sp4 = 0x14; + } else { + if (pid == 2) { + sp4 = 0x28; + } else { + sp4 = 0; + } + } + + for (var_r6 = 0; var_r6 < pid; var_r6++) { + for (nameChar = 0; nameChar < MAX_PLAYER_NAME_LENGTH; nameChar++) { + overB = &strc->overBs[var_r6]; + overB->qUnkA = (nameChar * 8) + strc->unk60; + overB->unkC = (var_r6 * 40) + strc->unk62 + sp4; + + if (SIO_MULTI_CNT->id == var_r6) { + u8 character = LOADED_SAVE->playerName[nameChar]; + if (character >= 0x70 && character < 0x8A) { + overB->unkC += 8; + } + sub_8052F78((const char *)&LOADED_SAVE->playerName[nameChar], overB); + } else { + u8 character = LOADED_SAVE->multiplayerScores[gUnknown_03005008[var_r6]].data.split.playerName[nameChar]; + if (character >= 0x70 && character < 0x8A) { + overB->unkC += 8; + } + sub_8052F78((const char *)&LOADED_SAVE->multiplayerScores[gUnknown_03005008[var_r6]].data.split.playerName[nameChar], + overB); + } + } + } +} +END_NONMATCH + +void Task_801D34C() +{ + u32 pid; + u32 i; + MPStrc1 *strc = TASK_DATA(gCurTask); + + if (strc->qUnk430++ > Q(60. / 256.)) { + strc->qUnk430 = 0; + gBldRegs.bldCnt = 0xFF; + + m4aMPlayFadeOut(&gMPlayInfo_BGM, 0); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 0); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 0); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 0); + + gCurTask->main = Task_801CD80; + gCurTask->main(); + } else { + sub_801CF08(); + } +} + +void TaskDestructor_801D3C8(struct Task *t) +{ + MPStrc2 *strc = TASK_DATA(t); + VramFree(strc->vram64); +} \ No newline at end of file diff --git a/sa1/src/game/mystery_itembox.c b/sa1/src/game/mystery_itembox.c new file mode 100644 index 0000000000..dd5e03fa6d --- /dev/null +++ b/sa1/src/game/mystery_itembox.c @@ -0,0 +1,588 @@ +#include "core.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/collision.h" + +#include "game/entity.h" +#include "game/mystery_itembox.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/multiplayer/mp_player.h" +#include "game/sa1_sa2_shared/dust_cloud.h" +#include "game/sa1_sa2_shared/itembox.h" +#include "game/stage/camera.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" +#include "lib/m4a/m4a.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/player_transitions.h" +#include "constants/songs.h" +#include "constants/zones.h" + +/* While you can tell the SA2 version stems from SA1's, + * it's clear they heavily modified it during SA2's development. + * + * TODO: Maybe we should split them into their own files when merging SA1 and SA2's codebases together. + */ + +#define ITEM_ICON_DISPLAY_TIME (1 * GBA_FRAMES_PER_SECOND) +#define ITEM_ICON_DISPLAY_DELAY (int)(0.5 * GBA_FRAMES_PER_SECOND) + +#define DATABYTE_A 0 +#define DATABYTE_B 1 + +#if (GAME == GAME_SA1) +#define ITEMBOX_ANIM SA1_ANIM_ITEMBOX +#elif (GAME == GAME_SA2) +#define ITEMBOX_ANIM SA2_ANIM_ITEMBOX +#endif +typedef struct { + SpriteBase base; + Sprite box; + Sprite identifier; + SpriteTransform transform; + u32 unk78; + s16 unk7C; + s16 unk7E; + u8 unk80; + u8 rndItemIndex; + s16 unk82; +} MysteryItemBox; + +void Task_MysteryItemBox_Main0(void); +void Task_MysteryItemBox_Main1(void); +void TaskDestructor_MysteryItemBox(struct Task *); +void sub_801C69C(void); +void Task_801C2FC(void); +void Task_801C420(void); +void sub_801C130(void); +void Task_801C3A0(void); +void Task_801C4EC(void); +extern void Task_MysteryItemBox_Main1(void); + +const u8 gUnknown_080BB4D0[] = { 13, 16, 14, 13 }; +const u8 gUnknown_080BB4D4[] = { 8, 11, 8, 11 }; +const u8 gUnknown_080BB4D8[] = { 0, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 9, 10, 8, 7, 6 }; +const u8 gUnknown_080BB4E8[] = { 6, 7, 5, 4, 3, 6, 7, 5 }; +const u8 gUnknown_080BB4F0[] = { 8, 9, 10, 9 }; + +void CreateEntity_MysteryItemBox(MapEntity *me, u16 regionX, u16 regionY, u8 spriteY) +{ + Sprite *s; + MysteryItemBox *itemBox; + struct Task *t; + if ((gRandomItemBox & 7) == me->d.sData[DATABYTE_A] && me->d.sData[DATABYTE_B] <= (gRandomItemBox >> 4)) { + t = TaskCreate(Task_MysteryItemBox_Main0, sizeof(MysteryItemBox), 0x2000, 0, TaskDestructor_MysteryItemBox); + } else { + t = TaskCreate(Task_MysteryItemBox_Main1, sizeof(MysteryItemBox), 0x2000, 0, TaskDestructor_MysteryItemBox); + } + + if (me->d.sData[DATABYTE_B] <= (gRandomItemBox >> 4)) { + me->d.sData[DATABYTE_B] = (gRandomItemBox >> 4); + } + + itemBox = TASK_DATA(t); + +#if (GAME == GAME_SA1) + s = &itemBox->box; + itemBox->base.regionX = regionX; + itemBox->base.regionY = regionY; + itemBox->base.me = me; + itemBox->base.meX = me->x; + itemBox->base.id = spriteY; + itemBox->unk7E = 0; + itemBox->unk7C = 0; + itemBox->unk80 = 0; + itemBox->rndItemIndex = gMultiplayerPseudoRandom % 4u; + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + SET_MAP_ENTITY_INITIALIZED(me); +#elif (GAME == GAME_SA2) + itemBox->SA2_LABEL(unk82) = gUnknown_080E029A[gMultiplayerPseudoRandom % ARRAY_COUNT(gUnknown_080E029A)]; + itemBox->iconOffsetY = Q(0.0); + itemBox->x = TO_WORLD_POS(me->x, regionX); + itemBox->y = TO_WORLD_POS(me->y, regionY); + itemBox->base.regionX = regionX; + itemBox->base.regionY = regionY; + itemBox->base.me = me; + itemBox->base.meX = me->x; + itemBox->base.id = spriteY; + SET_MAP_ENTITY_INITIALIZED(me); +#endif + +#if (GAME == GAME_SA1) + s = &itemBox->box; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ITEMBOX); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ITEMBOX; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +#elif (GAME == GAME_SA2) + s = &itemBox->box; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->palId = 0; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->hitboxes[0].index = -1; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->graphics.dest = VramMalloc(16); + s->graphics.anim = ITEMBOX_ANIM; + s->variant = 0; + UpdateSpriteAnimation(s); +#endif + +#if (GAME == GAME_SA1) + s = &itemBox->identifier; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ITEMBOX_TYPE); + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->palId = 0; + s->oamFlags = SPRITE_OAM_ORDER(19); + s->hitboxes[0].index = -1; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->graphics.anim = SA1_ANIM_ITEMBOX_TYPE; + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + s->variant = gUnknown_080BB4D0[itemBox->rndItemIndex]; + } else { + s->variant = gUnknown_080BB4D4[itemBox->rndItemIndex]; + } + UpdateSpriteAnimation(s); +#elif (GAME == GAME_SA2) + s = &itemBox->identifier; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->palId = 0; + s->oamFlags = SPRITE_OAM_ORDER(19); + s->hitboxes[0].index = -1; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->graphics.dest = VramMalloc(4); + s->graphics.anim = gUnknown_080E02AA[gUnknown_080E029A[itemBox->unk82]][0]; + s->variant = gUnknown_080E02AA[gUnknown_080E029A[itemBox->unk82]][1]; + UpdateSpriteAnimation(s); +#endif +} + +void Task_MysteryItemBox_Main1() +{ + MapEntity *temp_r5; + s32 temp_r1_2; + u32 temp_r1; + CamCoord worldX, worldY; + MysteryItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY); + + if (me->d.sData[DATABYTE_A] == (7 & gRandomItemBox)) { + if (me->d.sData[DATABYTE_B] <= gRandomItemBox >> 4) { + me->d.sData[DATABYTE_B] = gRandomItemBox >> 4; + gCurTask->main = Task_801C420; + return; + } + } + + // TODO: Use a macro + if ((((worldX - gCamera.x) + 0x80) > (DISPLAY_WIDTH + 256u)) || ((((worldY - gCamera.y) + 0x80) < 0)) + || ((worldY - gCamera.y) > (DISPLAY_HEIGHT + 208))) { + me->x = itembox->base.meX; + TaskDestroy(gCurTask); + } +} + +void Task_MysteryItemBox_Main0() +{ + u8 sp8 = 0; + MapEntity *me; + Sprite *s; + s16 *temp_r1; + s16 *temp_r1_2; + s16 temp_r1_3; + s16 temp_r2_2; + s32 temp_r0; + CamCoord worldX; + CamCoord worldY; + u32 res; + u8 *temp_r3_2; + u8 var_r2; + RoomEvent_MysteryItemBoxBreak *roomEvent; + + MysteryItemBox *itembox = TASK_DATA(gCurTask); + + s = &itembox->box; + me = itembox->base.me; + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY); + if (me->d.sData[0] != (7 & gRandomItemBox)) { + if ((8 & gPlayer.moveState) && (gPlayer.stoodObj == s)) { + gPlayer.moveState = (gPlayer.moveState & ~8) | 2; + } + if (itembox->unk78 & 0x20) { + gPlayer.moveState &= ~0x20; + itembox->unk78 = 0U; + } + gCurTask->main = sub_801C69C; + sub_801C69C(); + return; + } + if (me->d.sData[1] > (gRandomItemBox >> 4)) { + m4aSongNumStart(0xA7U); + CreateDustCloud(worldX, worldY + itembox->unk7C); + gCurTask->main = Task_801C2FC; + itembox->unk80 = sp8; + if ((8 & gPlayer.moveState) && (gPlayer.stoodObj == s)) { + gPlayer.moveState = (gPlayer.moveState & ~8) | 2; + } + if (!(itembox->unk78 & 0x20)) { + return; + } + gPlayer.moveState &= ~0x20; + itembox->unk78 = 0U; + return; + } + + if (itembox->unk80 != 0) { + itembox->unk7C += I(itembox->unk7E); + itembox->unk7E += 0x28; + temp_r0 = SA2_LABEL(sub_801F07C)(worldY + itembox->unk7C, worldX, 1, 8, NULL, SA2_LABEL(sub_801EE64)); + if (temp_r0 < 0) { + itembox->unk7C += temp_r0; + itembox->unk80 = 0; + } + } + s->x = worldX - gCamera.x; + s->y = (worldY - gCamera.y) + itembox->unk7C; + if ((gGameMode == 3) || (gGameMode == 5)) { + for (var_r2 = 0; var_r2 < 4; var_r2++) { + struct Task **mpTasks = gMultiplayerPlayerTasks; + if (mpTasks[var_r2] == NULL) + break; + + if (var_r2 != SIO_MULTI_CNT->id) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[var_r2]); + if (mpp->unk5C & 4) { + sp8 = 1; + } + } + } + } + + if (!((0x400000 & gPlayer.moveState) && (sp8 == 0))) { + if (((gPlayer.moveState & 8) && (gPlayer.stoodObj == s)) || (gPlayer.spriteInfoBody->reserved.index == -1)) { + res = sub_80096B0(s, (s16)worldX, (worldY + itembox->unk7C), &gPlayer); + if (0x10000 & res) { + itembox->unk7E = -Q(1); + itembox->unk80 = 0xFF; + } + } else { + res = Coll_Player_Itembox(s, worldX, worldY + itembox->unk7C, &gPlayer); + if (0x10000 & res) { + itembox->unk7E = -Q(1); + itembox->unk80 = 0xFF; + } else if (0x28 & res) { + if ((gPlayer.moveState & 8) && (gPlayer.stoodObj == s)) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + m4aSongNumStart(0xA7U); + CreateDustCloud(worldX, worldY + itembox->unk7C); + gCurTask->main = sub_801C130; + itembox->unk80 = 0; + me->d.sData[1]++; + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_MYSTERY_ITEMBOX_BREAK; + roomEvent->x = (s8)itembox->base.regionX; + roomEvent->y = (s8)itembox->base.regionY; + roomEvent->id = (u8)itembox->base.id; + roomEvent->unk4 = (u8)me->d.sData[1]; + return; + } + } + itembox->unk78 = res; + } + + // TODO: Macro + if (((u16)(s->x + 128) > (DISPLAY_WIDTH + 256u)) || ((s->y + 0x80 + itembox->unk7C) < 0) + || ((s->y + itembox->unk7C) > (DISPLAY_HEIGHT + 128))) { + me->x = itembox->base.meX; + TaskDestroy(gCurTask); + return; + } + DisplaySprite(s); + s = &itembox->identifier; + s->x = worldX - gCamera.x; + s->y = (worldY - gCamera.y) + itembox->unk7C; + DisplaySprite(s); +} + +void sub_801C130() +{ + Sprite *s; + s16 *temp_r3; + s32 rnd; + s32 temp_r4_2; + RoomEvent_ItemEffect *roomEventA; + s8 var_r0; + u16 oldRingCount; + CamCoord worldX, worldY; + u8 temp_r4; + + MysteryItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + + itembox->unk7C--; + itembox->unk80++; + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY) + itembox->unk7C; + if (itembox->unk80 > 0x3BU) { + if (gGameMode != 6) { + temp_r4 = itembox->rndItemIndex; + switch (temp_r4) { + default: + case 0: + roomEventA = CreateRoomEvent(); + roomEventA->type = ROOMEVENT_TYPE_ITEMEFFECT_APPLIED; + roomEventA->effect = 0; + break; + case 1: + roomEventA = CreateRoomEvent(); + roomEventA->type = ROOMEVENT_TYPE_ITEMEFFECT_APPLIED; + roomEventA->effect = 1; + break; + case 2: + gPlayer.itemEffect |= 0x20; + gPlayer.timer24 = 0x258; + break; + } + } else { + u16 ringsInBox; + + switch (itembox->rndItemIndex) { + case 2: + case 0: + ringsInBox = ItemBox_RingAmountTable[PseudoRandom32() % 6u]; + INCREMENT_RINGS(ringsInBox); + if ((gGameMode == 6) && ((u32)gRingCount > 0xFFU)) { + gRingCount = 0xFF; + } + m4aSongNumStart(0x75U); + break; + case 1: + case 3: + roomEventA = CreateRoomEvent(); + roomEventA->type = 6; + roomEventA->effect = 3; + break; + } + } + gCurTask->main = Task_801C3A0; + itembox->unk80 = 0; + } + + s = &itembox->identifier; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + DisplaySprite(s); +} + +void Task_801C2FC() +{ + Sprite *s; + u16 *temp_r4; + u16 temp_r7; + u8 *temp_r6; + u8 temp_r2; + + MysteryItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + CamCoord worldX, worldY; + + itembox->unk7C--; + itembox->unk80++; + + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY) + itembox->unk7C; + + if (itembox->unk80 >= 60) { + gCurTask->main = Task_801C3A0; + itembox->unk80 = 0; + } + + s = &itembox->identifier; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + DisplaySprite(s); +} + +void Task_801C3A0(void) +{ + Sprite *s; + + MysteryItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + + if (++itembox->unk80 > 30) { + gCurTask->main = Task_MysteryItemBox_Main1; + } else { + CamCoord worldX, worldY; + + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY) + itembox->unk7C; + + s = &itembox->identifier; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + DisplaySprite(s); + } +} + +void Task_801C420(void) +{ + Sprite *s; + SpriteTransform *tf; + + MysteryItemBox *itembox = TASK_DATA(gCurTask); + + tf = &itembox->transform; + itembox->rndItemIndex = gMultiplayerPseudoRandom % 4u; + itembox->unk7E = 0; + itembox->unk7C = 0; + itembox->unk80 = 0; + + s = &itembox->identifier; + s->graphics.anim = SA1_ANIM_ITEMBOX_TYPE; + if (gGameMode != 6) { + s->variant = gUnknown_080BB4D0[itembox->rndItemIndex]; + } else { + s->variant = gUnknown_080BB4D4[itembox->rndItemIndex]; + } + UpdateSpriteAnimation(s); + itembox->box.frameFlags |= 0x20; + itembox->identifier.frameFlags |= 0x20; + tf->rotation = 0; + tf->qScaleX = Q(1.0); + tf->qScaleY = 0; + tf->x = 0; + tf->y = 0; + + gCurTask->main = Task_801C4EC; + Task_801C4EC(); +} + +void Task_801C4EC() +{ + MysteryItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + SpriteTransform *tf = &itembox->transform; + CamCoord worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + CamCoord worldY = TO_WORLD_POS(me->y, itembox->base.regionY); + Sprite *sprItem; + Sprite *sprBox; + + tf->x = worldX - gCamera.x; + tf->y = worldY - gCamera.y; + + tf->qScaleY += Q(8. / 256.); + if (tf->qScaleY >= Q(1.0)) { + itembox->box.frameFlags &= ~0x20; + itembox->identifier.frameFlags &= ~0x20; + tf->qScaleY = Q(1.0); + gCurTask->main = Task_MysteryItemBox_Main0; + Task_MysteryItemBox_Main0(); + } else { + itembox->box.frameFlags &= ~0x1F; + itembox->box.frameFlags |= SA2_LABEL(gUnknown_030054B8); + itembox->identifier.frameFlags &= ~0x1F; + itembox->identifier.frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + + sprBox = &itembox->box; + TransformSprite(sprBox, tf); + sprItem = &itembox->identifier; + TransformSprite(sprItem, tf); + + DisplaySprite(sprBox); + DisplaySprite(sprItem); + } +} + +void sub_801C5C4() +{ + MysteryItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + SpriteTransform *tf = &itembox->transform; + CamCoord worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + CamCoord worldY = TO_WORLD_POS(me->y, itembox->base.regionY); + Sprite *sprItem; + Sprite *sprBox; + + tf->x = worldX - gCamera.x; + tf->y = worldY - gCamera.y; + + tf->qScaleY -= Q(8. / 256.); + if (tf->qScaleY <= Q(0.0)) { + itembox->box.frameFlags &= ~0x20; + itembox->identifier.frameFlags &= ~0x20; + tf->qScaleY = Q(1.0); + gCurTask->main = Task_MysteryItemBox_Main1; + Task_MysteryItemBox_Main1(); + } else { + itembox->box.frameFlags &= ~0x1F; + itembox->box.frameFlags |= SA2_LABEL(gUnknown_030054B8); + itembox->identifier.frameFlags &= ~0x1F; + itembox->identifier.frameFlags |= SA2_LABEL(gUnknown_030054B8)++; + + sprBox = &itembox->box; + TransformSprite(sprBox, tf); + sprItem = &itembox->identifier; + TransformSprite(sprItem, tf); + + DisplaySprite(sprBox); + DisplaySprite(sprItem); + } +} + +void sub_801C69C() +{ + SpriteTransform *tf; + + MysteryItemBox *itembox = TASK_DATA(gCurTask); + + tf = &itembox->transform; + itembox->box.frameFlags |= 0x20; + itembox->identifier.frameFlags |= 0x20; + tf->rotation = 0; + tf->qScaleX = Q(1.0); + tf->qScaleY = Q(1.0); + tf->x = 0; + tf->y = 0; + gCurTask->main = sub_801C5C4; + sub_801C5C4(); +} + +void TaskDestructor_MysteryItemBox(struct Task *t) +{ + MysteryItemBox *itembox = TASK_DATA(t); + + VramFree(itembox->box.graphics.dest); + VramFree(itembox->identifier.graphics.dest); +} diff --git a/sa1/src/game/nuts_and_bolts_task.c b/sa1/src/game/nuts_and_bolts_task.c new file mode 100644 index 0000000000..6cc6ac433f --- /dev/null +++ b/sa1/src/game/nuts_and_bolts_task.c @@ -0,0 +1,71 @@ +#include "global.h" +#include "core.h" +#include "game/entity.h" +#include "malloc_vram.h" +#include "game/nuts_and_bolts_task.h" + +struct Task *CreateNutsAndBoltsTask(u16 taskFlags, void *vramTiles, u16 anim, u8 variant, TaskDestructor dtor) +{ + struct Task *t = TaskCreate(Task_NutsAndBolts, sizeof(NutsAndBolts), taskFlags, 0, dtor); + NutsAndBolts *nuts = TASK_DATA(t); + + nuts->qUnk30 = 0; + nuts->qUnk34 = 0; + nuts->qUnk38 = 0; + nuts->qUnk3A = 0; + nuts->qUnk3A = 0; + nuts->qUnk3C = 0; + nuts->qUnk3E = 0; + nuts->qUnk40 = 0; + + nuts->s.x = 0; + nuts->s.y = 0; + nuts->s.graphics.dest = vramTiles; + nuts->s.oamFlags = 0; + nuts->s.graphics.size = 0; + nuts->s.graphics.anim = anim; + nuts->s.variant = variant; + nuts->s.animCursor = 0; + nuts->s.qAnimDelay = Q(0); + nuts->s.prevVariant = -1; + nuts->s.animSpeed = SPRITE_ANIM_SPEED(1.0); + nuts->s.palId = 0; + nuts->s.hitboxes[0].index = HITBOX_STATE_INACTIVE; + nuts->s.frameFlags = SPRITE_FLAG(PRIORITY, 0); + + return t; +} + +void Task_NutsAndBolts(void) +{ + struct Task **taskPtr = &gCurTask; // TODO: Remove this by properly matching the range check-if below... + NutsAndBolts *nuts = TASK_DATA(*taskPtr); + Sprite *s = &nuts->s; + + nuts->qUnk38 += nuts->qUnk3C; + nuts->qUnk3A += nuts->qUnk3E; + nuts->qUnk30 += nuts->qUnk38; + nuts->qUnk34 += nuts->qUnk3A; + + s->x = I(nuts->qUnk30) - gCamera.x; + s->y = I(nuts->qUnk34) - gCamera.y; + + if (nuts->qUnk40 != Q(0)) { + nuts->qUnk40--; + } + + // TODO: IS_OUT_OF_CAM_RANGE() + if (((s->x < -(32)) || (s->x > DISPLAY_WIDTH + (32)) || ((s->y) - (32) > DISPLAY_HEIGHT)) + || ((UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) && (nuts->qUnk40 == Q(0)))) { + TaskDestroy(*taskPtr); + return; + } + + DisplaySprite(s); +} + +void TaskDestructor_NutsAndBolts(struct Task *t) +{ + NutsAndBolts *nuts = TASK_DATA(t); + VramFree(nuts->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/options_menu.c b/sa1/src/game/options_menu.c new file mode 100644 index 0000000000..78637946aa --- /dev/null +++ b/sa1/src/game/options_menu.c @@ -0,0 +1,806 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/options_screen.h" +#include "game/save.h" +#include "game/stage/ui.h" +#include "game/title_screen.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" +#include "constants/text.h" // for UILANG_COUNT + +typedef struct OptionsMenu { + /* 0x000 */ Sprite s0; + /* 0x030 */ Sprite sprites30[8]; + /* 0x1B0 */ Sprite s1B0; + /* 0x1E0 */ Sprite s1E0; + /* 0x210 */ Sprite s210; + /* 0x240 */ Sprite s240; + /* 0x270 */ Sprite s270; + /* 0x2A0 */ Sprite s2A0; + /* 0x2D0 */ Sprite s2D0; + /* 0x300 */ Sprite s300; + /* 0x330 */ StrcUi_805423C unk330; + /* 0x33C */ u16 unk33C; + /* 0x33E */ u8 unk33E; + /* 0x33F */ u8 unk33F; + /* 0x340 */ u8 filler340[0x4]; +} OptionsMenu; /* 0x344 */ + +void Task_OptionsMenuMain(void); +void sub_8010CB4(void); +void sub_8011104(void); +void sub_801123C(void); +void sub_801176C(void); +void TaskDestructor_OptionsMenu(struct Task *t); + +extern void sub_8012F6C(); +extern void CreatePlayerDataMenu(void); +extern void CreateSoundTest(void); +extern void CreateEmptySaveGame(void); + +extern u16 gUnknown_086CC774[16]; +extern u8 gUnknown_086CC794[0xA0]; +extern u8 gUnknown_086CC834[0x500]; + +const AnimId gUnknown_080BB36C[2] = { 866, 863 }; +const u8 gUnknown_080BB370[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; +const AnimId gUnknown_080BB378[2] = { SA1_ANIM_OPTS_PLDAT_LANG_JP, SA1_ANIM_OPTS_PLDAT_LANG_EN }; +const u8 gUnknown_080BB37C[2] = { 11, 12 }; +const u8 gUnknown_080BB37E[2] = { 8, 9 }; +const u8 gUnknown_080BB380[2] = { 13, 14 }; +const u8 gUnknown_080BB382[8] = { 0x1A, 0x0C, 0x10, 0x18, 0x14, 0x1E, 0x24, 0x08 }; +const u8 gUnknown_080BB38A[4] = { 2, 0, 3, 1 }; + +// TODO: Can accesses to this match when it's a winreg_t[2][2][2]? +const winreg_t gUnknown_080BB38E[4][2] = { + { WIN_RANGE(80, 110), WIN_RANGE(86, 102) }, + { WIN_RANGE(122, 158), WIN_RANGE(86, 102) }, + { WIN_RANGE(83, 116), WIN_RANGE(86, 102) }, + { WIN_RANGE(130, 156), WIN_RANGE(86, 102) }, +}; + +/* These functions get called when pressing A inside the options menu main screen */ +extern void OptionsSelectPlayerData(void); +extern void OptionsSelectDifficulty(void); +extern void OptionsSelectTimeUp(void); +extern void OptionsSelectSoundTest(void); +extern void OptionsSelectLanguage(void); +extern void OptionsSelectButtonConfig(void); +extern void OptionsSelectDeleteGameData(void); +extern void OptionsSelectEnd(void); +const VoidFn sOptionsSelectFuncs[] = { + OptionsSelectPlayerData, OptionsSelectDifficulty, OptionsSelectTimeUp, OptionsSelectSoundTest, + OptionsSelectLanguage, OptionsSelectButtonConfig, OptionsSelectDeleteGameData, OptionsSelectEnd, +}; + +void CreateOptionsMenu() +{ + Strc_80528AC sp4; + s8 *sp34; + Sprite *s; + StrcUi_805423C *temp_r0_4; + s8 *temp_r0; + s8 *temp_r2; + s8 var_r0; + u8 *temp_r0_2; + u8 *temp_r0_3; + u8 *temp_r1; + u8 *temp_r1_2; + u8 i; + + OptionsMenu *menu; + + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x1E03; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + sub_80535FC(); + UiGfxStackInit(); + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + menu = TASK_DATA(TaskCreate(Task_OptionsMenuMain, 0x344U, 0x2000U, 0U, TaskDestructor_OptionsMenu)); + menu->unk33F = 0; + menu->unk33C = 0; + menu->unk33E = 0; + menu->filler340[0] = 1; + + s = &menu->s0; + s->x = 0; + s->y = 0; + s->graphics.dest = VramMalloc(0x16U); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = 0x359; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + for (i = 0; i < ARRAY_COUNT(menu->sprites30); i++) { + s = &menu->sprites30[i]; + s->x = 25; + s->y = 38 + (i * 0x10); + s->graphics.dest = VramMalloc(gUnknown_080BB382[i]); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB370[i]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } + + s = &menu->s1B0; + s->x = 220; + s->y = 54; + s->graphics.dest = VramMalloc(0x10U); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB37C[LOADED_SAVE->difficultyLevel]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant |= ~0; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s1E0; + s->x = 0xDC; + s->y = 0x46; + s->graphics.dest = VramMalloc(8U); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB37E[LOADED_SAVE->timeLimitDisabled]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant |= ~0; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s210; + s->x = 220; + s->y = 102; + s->graphics.dest = VramMalloc(18); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + if (LOADED_SAVE->language > 1U) { + s->graphics.anim = 878; + s->variant = LOADED_SAVE->language - 2; + } else { + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = 10; + } + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s240; + s->x = 0xDC; + s->y = 0x76; + s->graphics.dest = VramMalloc(0x10U); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB380[LOADED_SAVE->btnConfig]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s270; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->graphics.dest = VramMalloc(0x90U); + s->oamFlags = 0; + s->graphics.size = 0; + s->graphics.anim = 877; + s->variant = gUnknown_080BB38A[LOADED_SAVE->uiLanguage]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s2A0; + s->x = 0; + s->y = 7; + s->graphics.dest = VramMalloc(12); + s->oamFlags = 0x40; + s->graphics.size = 0; + s->graphics.anim = 867; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s2D0; + s->x = 0; + s->y = 17; + s->graphics.dest = VramMalloc(0x16U); + s->oamFlags = 0; + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB378[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s300; + s->x = DISPLAY_WIDTH - 1; + s->y = DISPLAY_HEIGHT - 1; + s->graphics.dest = VramMalloc(1U); + s->oamFlags = 0; + s->graphics.size = 0; + s->graphics.anim = 0x35F; + s->variant = 0xF; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x80000; + UpdateSpriteAnimation(s); + + sp4.uiGfxID = 128; + sp4.unk2B = 1; + sp4.tiles = &gUnknown_086CC794[0]; + sp4.tilesSize = sizeof(gUnknown_086CC794); + sp4.palette = &gUnknown_086CC774[0]; + sp4.paletteSize = sizeof(gUnknown_086CC774); + sp4.layout = &gUnknown_086CC834[0]; + sp4.layoutSize = sizeof(gUnknown_086CC834); + sp4.unk28 = 0; + sp4.unk29 = 0; + sp4.unk2A = 0x15; + sub_80528AC(&sp4); + + temp_r0_4 = &menu->unk330; + temp_r0_4->unk0 = 0; + temp_r0_4->unk2 = 1; + temp_r0_4->unk4 = 2; + temp_r0_4->unk6 = 0; + temp_r0_4->unk8 = 0x100; + temp_r0_4->unkA = 0x10; + sub_805423C(temp_r0_4); + + m4aSongNumStart(MUS_OPTIONS); +} + +void Task_OptionsMenuMain() +{ + StrcUi_805423C *strc; + s32 temp_r0; + s32 temp_r0_2; + u8 *temp_r1; + u8 *temp_r1_2; + u8 *temp_r2; + u8 temp_r0_3; + u8 temp_r0_4; + u8 var_r0; + u8 var_r0_2; + + OptionsMenu *menu = TASK_DATA(gCurTask); + + strc = &menu->unk330; + menu->unk33F = 0; + gBgScrollRegs[0][0] = 0; + if (sub_805423C(strc) != 0) { + if (strc->unk4 == 2) { + if (DPAD_UP & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (--menu->unk33E > 7U) { + menu->unk33E = 7; + } + } else if (DPAD_DOWN & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (++menu->unk33E > 7) { + menu->unk33E = 0; + } + } + + if (A_BUTTON & gPressedKeys) { + m4aSongNumStart(SE_SELECT); + + if ((menu->unk33E == 0) || (menu->unk33E == 3) || (menu->unk33E == 4)) { + strc->unk4 = 1; + strc->unk6 = 0; + } else { + menu->unk33F = 1; + sOptionsSelectFuncs[menu->unk33E](); + return; + } + } else if (B_BUTTON & gPressedKeys) { + m4aSongNumStart(SE_RETURN); + OptionsSelectEnd(); + return; + } + } else if ((menu->unk33E == 0) || (menu->unk33E == 3) || (menu->unk33E == 4)) { + menu->unk33F = 1; + sOptionsSelectFuncs[menu->unk33E](); + return; + } + } + + sub_8010CB4(); +} + +void sub_8010CB4() +{ + s16 var_r0; + u8 i; + + OptionsMenu *menu = TASK_DATA(gCurTask); + Sprite *s = &menu->s0; + + s->x = 9; + s->y = (menu->unk33E * 16) + 28; + DisplaySprite(s); + + for (i = 0; i < 8; i++) { + s = &menu->sprites30[i]; + if (menu->unk33E == i) { + if (menu->unk33F != 0) { + s->palId = 1; + } else { + s->palId = 0; + } + s->x = 30; + s->y = (i * 16) + 38; + } else { + s->x = 25; + s->y = (i * 16) + 38; + } + DisplaySprite(s); + } + + s = &menu->s1B0; + s->x = 220; + s->y = 54; + s->prevVariant = -1; + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB37C[LOADED_SAVE->difficultyLevel]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &menu->s1E0; + s->x = 220; + s->y = 70; + s->prevVariant = -1; + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB37E[LOADED_SAVE->timeLimitDisabled]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &menu->s210; + s->x = 220; + s->y = 102; + DisplaySprite(s); + + s = &menu->s240; + s->x = 220; + s->y = 118; + s->prevVariant = -1; + s->graphics.anim = gUnknown_080BB36C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB380[LOADED_SAVE->btnConfig]; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &menu->s2A0; + + for (i = 0; i < 8; i++) { + s->x = i * 32; + s->y = 15; + DisplaySprite(s); + } + + s = &menu->s2D0; + if (++menu->unk33C >= 100) { + menu->unk33C -= 100; + } + + for (i = 0; i < 4; i++) { + s->x = (100 * i) - menu->unk33C; + s->y = 17; + DisplaySprite(s); + } +} + +void sub_8010E90(void) +{ + if (gRepeatedKeys & DPAD_LEFT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->difficultyLevel = DIFFICULTY_EASY; + } else if (gRepeatedKeys & DPAD_RIGHT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->difficultyLevel = DIFFICULTY_NORMAL; + } + + sub_8010CB4(); + + if (gPressedKeys & (A_BUTTON | B_BUTTON)) { + m4aSongNumStart(SE_SELECT); + gCurTask->main = Task_OptionsMenuMain; + } +} + +void sub_8010F00(void) +{ + if (gRepeatedKeys & DPAD_LEFT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->timeLimitDisabled = 1; + } else if (gRepeatedKeys & DPAD_RIGHT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->timeLimitDisabled = 0; + } + + sub_8010CB4(); + + if (gPressedKeys & (A_BUTTON | B_BUTTON)) { + m4aSongNumStart(SE_SELECT); + gCurTask->main = Task_OptionsMenuMain; + } +} + +void sub_8010F70(void) +{ + if (gRepeatedKeys & DPAD_LEFT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->btnConfig = BTNCONFIG_NORMAL; + } else if (gRepeatedKeys & DPAD_RIGHT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->btnConfig = BTNCONFIG_REVERSE; + } + + sub_8010CB4(); + + if (gPressedKeys & (A_BUTTON | B_BUTTON)) { + m4aSongNumStart(SE_SELECT); + gCurTask->main = Task_OptionsMenuMain; + } +} + +void sub_8010FDC(void) +{ + if (gRepeatedKeys & DPAD_LEFT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->uiLanguage = UILANG_ENGLISH; + } else if (gRepeatedKeys & DPAD_RIGHT) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + LOADED_SAVE->uiLanguage = UILANG_JAPANESE; + } + + sub_8010CB4(); + + if (gPressedKeys & (A_BUTTON | B_BUTTON)) { + m4aSongNumStart(SE_SELECT); + gCurTask->main = Task_OptionsMenuMain; + } +} + +void OptionsSelectDeleteGameData() +{ + OptionsMenu *menu = TASK_DATA(gCurTask); + Sprite *s = &menu->s270; + + menu->unk33F = 2; + s->variant = gUnknown_080BB38A[LOADED_SAVE->uiLanguage]; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + sub_8010CB4(); + gDispCnt |= 0x4000; + + gBldRegs.bldCnt = 0x3FBF; + gBldRegs.bldAlpha = 0x10; + gBldRegs.bldY = 12; + gWinRegs[WINREG_WIN1H] = gUnknown_080BB38E[LOADED_SAVE->uiLanguage * 2 + 1][0]; + gWinRegs[WINREG_WIN1V] = gUnknown_080BB38E[LOADED_SAVE->uiLanguage * 2 + 1][1]; + gWinRegs[WINREG_WININ] = 0x3F00; + gWinRegs[WINREG_WINOUT] = 0x1F; + + gCurTask->main = sub_8011104; +} + +void sub_8011104() +{ + Sprite *s; + u8 *temp_r4; + u8 var_r0; + s32 value; + + OptionsMenu *menu = TASK_DATA(gCurTask); + + s = &menu->s270; + if (DPAD_LEFT & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + menu->unk33F = 1; + } else if (0x10 & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + menu->unk33F = 2; + } + + gWinRegs[WINREG_WIN1H] = gUnknown_080BB38E[(menu->unk33F - 1) + (LOADED_SAVE->uiLanguage * 2)][0]; + gWinRegs[WINREG_WIN1V] = gUnknown_080BB38E[(menu->unk33F - 1) + (LOADED_SAVE->uiLanguage * 2)][1]; + + if (!(B_BUTTON & gPressedKeys)) { + if (A_BUTTON & gPressedKeys) { + if (menu->unk33F != 1) { + lbl: + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + menu->unk33F = 0; + m4aSongNumStart(SE_RETURN); + gCurTask->main = Task_OptionsMenuMain; + } else { + s->variant = gUnknown_080BB38A[LOADED_SAVE->uiLanguage + 2]; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + menu->unk33F = 2; + m4aSongNumStart(SE_SELECT); + gCurTask->main = sub_801123C; + } + } + } else { + goto lbl; + } + + DisplaySprite(s); + sub_8010CB4(); +} + +void sub_801123C() +{ + Sprite *s; + + OptionsMenu *menu = TASK_DATA(gCurTask); + + s = &menu->s270; + if (DPAD_LEFT & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + menu->unk33F = 1; + } else if (DPAD_RIGHT & gRepeatedKeys) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + menu->unk33F = 2; + } + + gWinRegs[WINREG_WIN1H] = gUnknown_080BB38E[(menu->unk33F - 1) + (LOADED_SAVE->uiLanguage * 2)][0]; + gWinRegs[WINREG_WIN1V] = gUnknown_080BB38E[(menu->unk33F - 1) + (LOADED_SAVE->uiLanguage * 2)][1]; + + if (B_BUTTON & gPressedKeys) { + goto lbl; + } else { + if (A_BUTTON & gPressedKeys) { + if (menu->unk33F != 1) { + lbl: + menu->unk33F = 2; + s->variant = gUnknown_080BB38A[LOADED_SAVE->uiLanguage]; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + m4aSongNumStart(SE_RETURN); + gCurTask->main = sub_8011104; + } else { + u16 prevIME, prevIE, prevDispstat; + s32 uiLanguage = LOADED_SAVE->uiLanguage; + + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + + prevIE = REG_IE; + prevIME = REG_IME; + prevDispstat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + + sub_8012F6C(); + REG_IE = prevIE; + REG_IE; + REG_IME = prevIME; + REG_IME; + REG_DISPSTAT = prevDispstat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + gFlags &= 0xFFFF7FFF; + m4aSongNumStart(SE_SELECT); + CreateEmptySaveGame(); + LOADED_SAVE->uiLanguage = uiLanguage; + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + menu->unk33F = 0; + m4aSongNumStart(MUS_OPTIONS); + gCurTask->main = Task_OptionsMenuMain; + } + } + } + + DisplaySprite(s); + sub_8010CB4(); +} + +void sub_80114A0() +{ + u16 prevIME, prevIE, prevDispstat; + TaskDestroy(gCurTask); + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + + prevIE = REG_IE; + prevIME = REG_IME; + prevDispstat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + + WriteSaveGame(); + + REG_IE = prevIE; + REG_IE; + REG_IME = prevIME; + REG_IME; + REG_DISPSTAT = prevDispstat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + gFlags &= 0xFFFF7FFF; + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0xFF; + gBldRegs.bldY = 0; + CreateMainMenu(1); +} + +void TaskDestructor_OptionsMenu(struct Task *t) +{ + u8 i; + + OptionsMenu *menu = TASK_DATA(t); + + VramFree(menu->s0.graphics.dest); + for (i = 0; i < 8; i++) { + VramFree(menu->sprites30[i].graphics.dest); + } + + VramFree(menu->s1B0.graphics.dest); + VramFree(menu->s1E0.graphics.dest); + VramFree(menu->s210.graphics.dest); + VramFree(menu->s240.graphics.dest); + VramFree(menu->s270.graphics.dest); + VramFree(menu->s2A0.graphics.dest); + VramFree(menu->s2D0.graphics.dest); + VramFree(menu->s300.graphics.dest); +} + +void OptionsSelectPlayerData(void) +{ + TaskDestroy(gCurTask); + CreatePlayerDataMenu(); +} + +void OptionsSelectDifficulty(void) +{ + gCurTask->main = sub_8010E90; + sub_8010CB4(); +} + +void OptionsSelectTimeUp(void) +{ + gCurTask->main = sub_8010F00; + sub_8010CB4(); +} + +void OptionsSelectSoundTest(void) +{ + m4aSongNumStop(3U); + TaskDestroy(gCurTask); + CreateSoundTest(); +} + +void OptionsSelectLanguage(void) +{ + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + CreateEditLanguageScreen(0U); +} + +void OptionsSelectButtonConfig(void) +{ + gCurTask->main = sub_8010F70; + sub_8010CB4(); +} + +void OptionsSelectEnd(void) +{ + OptionsMenu *menu = TASK_DATA(gCurTask); + StrcUi_805423C *unk330 = &menu->unk330; + + unk330->unk4 = 1; + unk330->unk6 = 0; + sub_805423C(unk330); + + gCurTask->main = sub_801176C; + sub_8010CB4(); +} + +void sub_801176C(void) +{ + OptionsMenu *menu = TASK_DATA(gCurTask); + StrcUi_805423C *unk330 = &menu->unk330; + + if (sub_805423C(unk330)) { + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + gCurTask->main = sub_80114A0; + } + sub_8010CB4(); +} diff --git a/sa1/src/game/player_data_menu.c b/sa1/src/game/player_data_menu.c new file mode 100644 index 0000000000..cfcc1aacbf --- /dev/null +++ b/sa1/src/game/player_data_menu.c @@ -0,0 +1,335 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/save.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" +#include "constants/text.h" // for UILANG_COUNT + +typedef enum EPDM_Options { + PDM_OPTION_SELECT_NAME, + PDM_OPTION_SELECT_VS_RECORD, + PDM_OPTION_SELECT_OK, + + PDM_OPTION_COUNT +} EPDM_Options; + +typedef struct PlayerDataMenu { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2[PDM_OPTION_COUNT + 1]; + /* 0xF0 */ StrcUi_805423C strcF0; + /* 0xFC */ GameOverB unkFC; + /* 0x114 */ u16 pressedKeys; + /* 0x116 */ u16 unk116; + /* 0x118 */ u8 unk118; + /* 0x119 */ u8 unk119; +} PlayerDataMenu; /* 0x11C */ + +void CreatePlayerDataMenu(); +void Task_PlayerDataMenuInit(void); +void TaskDestructor_PlayerDataMenu(struct Task *t); +void sub_8011C94(void); + +extern void CreateOptionsMenu(); +extern void CreatePlayerNameInputMenu(); +extern void CreateVsRecord(); + +void PlayerDataSelectName(void); +void PlayerDataSelectVsRecord(void); +void PlayerDataSelectOK(void); + +const AnimId sPlayerDataMenuAnims[UILANG_COUNT] = { SA1_ANIM_VS_RECORD_TEXTS_JP, SA1_ANIM_VS_RECORD_TEXTS_EN }; +const u8 sPlayerDataMenuVariants[PDM_OPTION_COUNT] = { 1, 0, 2 }; +const u8 sPlayerDataMenuYOffsets[PDM_OPTION_COUNT] = { 0x41, 0x59, 0x81 }; +const u8 sPlayerDataMenuTileCounts[PDM_OPTION_COUNT] = { 8, 18, 14 }; +const VoidFn gUnknown_080BB3D0[PDM_OPTION_COUNT] = { + PlayerDataSelectName, + PlayerDataSelectVsRecord, + PlayerDataSelectOK, +}; +const AnimId gPressStartTiles[UILANG_COUNT] = { SA1_ANIM_PRESS_START_MSG_JP, SA1_ANIM_PRESS_START_MSG_EN }; + +extern const u8 gPalette_086CCD34[0x20]; +extern const u8 gTiles_086CCD54[0xBA0]; +extern const u8 gLayout_086CD8F4[0x500]; +extern const u8 gLayout_086CDDF4[0x500]; + +void CreatePlayerDataMenu() +{ + Strc_80528AC sp4; + const UiGraphics *sp40; + Sprite *s; + StrcUi_805423C *temp_r4; + u8 i; + + struct Task *t; + PlayerDataMenu *menu; + + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x1B04; + gBldRegs.bldCnt = 0; + gBldRegs.bldAlpha = 0; + gBldRegs.bldY = 0; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + t = TaskCreate(Task_PlayerDataMenuInit, 0x11CU, 0x2000U, 0U, TaskDestructor_PlayerDataMenu); + + menu = TASK_DATA(t); + s = &menu->s; + s->x = 0; + s->y = 0; + s->graphics.dest = VramMalloc(22); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = 857; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + for (i = 0; i < PDM_OPTION_COUNT; i++) { + s = &menu->s2[i]; + s->x = 25; + s->y = sPlayerDataMenuYOffsets[i]; + s->graphics.dest = VramMalloc(sPlayerDataMenuTileCounts[i]); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = sPlayerDataMenuAnims[LOADED_SAVE->uiLanguage]; + s->variant = sPlayerDataMenuVariants[i]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } + + menu->unk116 = 0; + menu->unk118 = 0; + menu->unk119 = 0; + menu->pressedKeys = 0; + + sub_80535FC(); + + UiGfxStackInit(); + + sp4.uiGfxID = 128; + sp4.unk2B = 0; + sp4.tiles = (void *)&gTiles_086CCD54; + sp4.tilesSize = sizeof(gTiles_086CCD54); + sp4.palette = (void *)&gPalette_086CCD34; + sp4.paletteSize = sizeof(gPalette_086CCD34); + if (LOADED_SAVE->uiLanguage == 0) { + sp4.layout = gLayout_086CDDF4; + sp4.layoutSize = sizeof(gLayout_086CDDF4); + } else { + sp4.layout = gLayout_086CD8F4; + sp4.layoutSize = sizeof(gLayout_086CD8F4); + } + sp4.unk28 = 0; + sp4.unk29 = 0; + sp4.unk2A = 0x15; + sub_80528AC(&sp4); + + sp4.uiGfxID = UIGFX_ASCII_CHARS; + sp4.unk2B = 1; + sp4.tiles = gUiGraphics[sp4.uiGfxID].tiles; + sp4.palette = gUiGraphics[sp4.uiGfxID].palette; + sp4.vramC = VramMalloc(0xE0U); + sp4.tilesSize = 0x1C00; + sp4.paletteSize = 0x20; + sp4.unk28 = 1; + sp4.unk2A = 0xD; + sp4.unk0.unk4 = gUiGraphics[sp4.uiGfxID].unk8; + sp4.unk0.unk8 = gUiGraphics[sp4.uiGfxID].unkC; + sp4.unk0.unk9 = gUiGraphics[sp4.uiGfxID].unk10; + sp4.unk0.unkA = gUiGraphics[sp4.uiGfxID].unk14; + sp4.unk0.unkB = gUiGraphics[sp4.uiGfxID].unk18; + sub_80528AC(&sp4); + + s = &menu->s2[3]; + s->graphics.dest = sp4.vramC; + sp4.uiGfxID = 60; + sp4.unk2B = 2; + sp4.tiles = gUiGraphics[sp4.uiGfxID].tiles; + sp4.palette = gUiGraphics[sp4.uiGfxID].palette; + sp4.vramC = s->graphics.dest; + sp4.tilesSize = 0x20; + sp4.paletteSize = 0x20; + sp4.unk28 = 1; + sp4.unk2A = 0xC; + sp4.unk0.unk4 = gUiGraphics[sp4.uiGfxID].unk8; + sp4.unk0.unk8 = gUiGraphics[sp4.uiGfxID].unkC; + sp4.unk0.unk9 = gUiGraphics[sp4.uiGfxID].unk10; + sp4.unk0.unkA = gUiGraphics[sp4.uiGfxID].unk14; + sp4.unk0.unkB = gUiGraphics[sp4.uiGfxID].unk18; + sub_80528AC(&sp4); + + menu->unkFC.qUnkA = 0x8C; + menu->unkFC.unkC = 0x3D; + menu->unkFC.unkE = 1; + menu->unkFC.unk10 = 1; + menu->unkFC.unk12 = 1; + menu->unkFC.unk16 = 1; + menu->unkFC.unk8 = 0; + + i = 0; + temp_r4 = &menu->strcF0; + for (i = 0; i < 6; i++) { + if ((u8)(LOADED_SAVE->playerName[i] - 0x20) > 105) { + LOADED_SAVE->playerName[i] = 0x20; + } + } + + temp_r4->unk0 = 0; + temp_r4->unk2 = 1; + temp_r4->unk4 = 2; + temp_r4->unk6 = 0; + temp_r4->unk8 = 0x100; + temp_r4->unkA = 0x10; + sub_805423C(temp_r4); + m4aSongNumStart(MUS_PLAYER_DATA); +} + +void Task_PlayerDataMenuInit() +{ + StrcUi_805423C *temp_r5; + s16 temp_r7; + s32 temp_r0; + s32 temp_r0_2; + u16 temp_r1_3; + u16 temp_r6; + u8 *temp_r1; + u8 *temp_r1_2; + + PlayerDataMenu *menu = TASK_DATA(gCurTask); + + temp_r5 = &menu->strcF0; + if (sub_805423C(temp_r5) != 0) { + if (temp_r5->unk4 == 2) { + if (0x40 & gRepeatedKeys) { + m4aSongNumStart(0x6CU); + --menu->unk118; + if (menu->unk118 > 2U) { + menu->unk118 = (u8)2; + } + } else if (0x80 & gRepeatedKeys) { + m4aSongNumStart(0x6CU); + menu->unk118++; + if (menu->unk118 > 2U) { + menu->unk118 = (u8)0; + } + } + if (gPressedKeys & (A_BUTTON | B_BUTTON)) { + menu->pressedKeys = gPressedKeys; + temp_r5->unk4 = 1; + temp_r5->unk6 = 0; + if (gPressedKeys & A_BUTTON) { + m4aSongNumStart(0x6AU); + } else { + m4aSongNumStart(0x6BU); + } + } + } else { + if (1 & menu->pressedKeys) { + menu->unk119 = 1; + gUnknown_080BB3D0[menu->unk118](); + return; + } else { + if (2 & menu->pressedKeys) { + PlayerDataSelectOK(); + return; + } + } + } + } + + sub_8011C94(); +} + +void sub_8011C94() +{ + Sprite *s; + u16 *temp_r6; + u8 *temp_r1; + u8 i; + + PlayerDataMenu *menu = TASK_DATA(gCurTask); + s = &menu->s; + + s->x = 9; + s->y = sPlayerDataMenuYOffsets[menu->unk118] + (s16)-2; + DisplaySprite(s); + + for (i = 0; i < PDM_OPTION_COUNT; i++) { + s = &menu->s2[i]; + if (menu->unk118 == i) { + s->x = 30; + + if (menu->unk119 != 0) { + s->palId = 1; + } else { + s->palId = 0; + } + } else { + s->x = 25; + } + s->y = sPlayerDataMenuYOffsets[i]; + + DisplaySprite(s); + } + + for (i = 0; i < 6; i++) { + menu->unkFC.qUnkA = (u16)((i * 8) + 0x9F); + menu->unkFC.unkC = 60; + + if ((u8)(LOADED_SAVE->playerName[i] - 0x70) <= 25) { + menu->unkFC.unkC = 0x44; + } + + sub_8052F78((const char *)&LOADED_SAVE->playerName[i], &menu->unkFC); + } +} + +void PlayerDataSelectName(void) +{ + TaskDestroy(gCurTask); + CreatePlayerNameInputMenu(); +} + +void PlayerDataSelectVsRecord(void) +{ + TaskDestroy(gCurTask); + CreateVsRecord(); +} + +void PlayerDataSelectOK(void) +{ + TaskDestroy(gCurTask); + CreateOptionsMenu(); +} + +void TaskDestructor_PlayerDataMenu(struct Task *t) +{ + PlayerDataMenu *menu; + u8 i; + + menu = TASK_DATA(t); + VramFree(menu->s.graphics.dest); + + for (i = 0; i < ARRAY_COUNT(menu->s2); i++) { + VramFree(menu->s2[i].graphics.dest); + } +} diff --git a/sa1/src/game/player_name_input_menu.c b/sa1/src/game/player_name_input_menu.c new file mode 100644 index 0000000000..fecd082b79 --- /dev/null +++ b/sa1/src/game/player_name_input_menu.c @@ -0,0 +1,743 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/save.h" +#include "data/ui_graphics.h" +#include "game/multiplayer/mode_select.h" +#include "game/stage/ui.h" + +#include "constants/songs.h" + +/* NOTE(Jace): This whole module needs to be considered to be redone. */ + +typedef struct { + Strc_8052C84 unk0; + StrcUi_805423C strc18; + s16 unk24; + u8 filler26; + s16 unk28; + u8 filler2A; + u16 unk2C; + u16 filler2C; + u16 unk30; + u8 filler32[1]; + u16 unk34[16]; + s16 unk54; + u16 filler56; + u16 unk58; + u16 filler5A; + u16 unk5C; + u16 filler5E; + u16 unk60; + u16 filler62; + u16 unk64; + u16 filler66; + GraphicsData gfx68; + GraphicsData gfx74; + GraphicsData gfx80; + GraphicsData gfx8C; + GraphicsData gfx98; + GraphicsData gfxA4; + GraphicsData gfxB0; + GraphicsData gfxBC; + s16 unkC8[6][2]; + s16 unkE0[6][2]; + u16 unkF8; + u16 fillerFA; + s16 unkFC; +} PlayerNameMenu; + +void sub_8052D64(u8 *param0, Strc_8052C84 *param1); +void Task_80595DC(void); +extern u8 gUnknown_08684D3C[0x1000]; +extern u8 gUnknown_08688444[]; +extern const u8 gUnknown_08688568[4]; +extern u8 gUnknown_08685D3C[0x800]; +extern u8 gUnknown_0868653C[0x1600]; +extern void sub_805321C(u8 *param0, GameOverB *param1); +extern u8 gUnknown_0868856C[4]; +extern u16 gUnknown_08688492[]; +extern void CreatePlayerDataMenu(void); + +void sub_8058830(void); + +static inline void incUnkFC() +{ + PlayerNameMenu *menu = TASK_DATA(gCurTask); + ++menu->unkFC; +} + +// (82.53%) https://decomp.me/scratch/rFE3j +NONMATCH("asm/non_matching/game/player_name_input_menu__CreatePlayerNameInputMenu.inc", void CreatePlayerNameInputMenu(void)) +{ + Strc_80528AC sp4; + struct Task *t; + s32 temp_r3; + s32 var_r8_2; + u8 *temp_r3_2; + PlayerNameMenu *menu = NULL; + StrcUi_805423C *strc18; + Strc_8052C84 *unk0; + u8 i = 0; + + gBgCntRegs[1] = 0x1C06; + gBgCntRegs[2] = 0x1A09; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + gDispCnt = 0x3640; + gBldRegs.bldCnt = 0x1F; + gWinRegs[0] = 1; + gWinRegs[2] = 1; + + sub_80535FC(); + t = TaskCreate(sub_8058830, sizeof(PlayerNameMenu), 0x2000U, 0U, NULL); + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unk24) = 0; + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unk28) = 0; + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unk2C) = 0; + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unk30) = 0; + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unk54) = 0; + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkFC) = 0; + + unk0 = &TASK_GET_MEMBER(PlayerNameMenu, t, Strc_8052C84, unk0); + unk0->unkA = 0x1E; + unk0->unkC = 0x1E; + unk0->byteCount = 1; + unk0->unk8 = 0; + unk0->unk10 = 3; + unk0->unk16 = 1; + unk0->unk12 = 0; + + strc18 = &TASK_GET_MEMBER(PlayerNameMenu, t, StrcUi_805423C, strc18); + strc18->unk0 = 0; + strc18->unk2 = 1; + strc18->unk4 = 2; + strc18->unk6 = 0; + strc18->unk8 = 0x100; + strc18->unkA = 1; + + for (i = 0; i < (s32)ARRAY_COUNT(LOADED_SAVE->playerName); i++) { + temp_r3_2 = &LOADED_SAVE->playerName[i]; + if ((LOADED_SAVE->playerName[i] >= 0x20) && LOADED_SAVE->playerName[i] <= 0x89U) { + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkC8[i][0]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1001); + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkC8[i][1]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1002); + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkE0[i][0]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1015); + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkE0[i][1]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1016); + } else { + LOADED_SAVE->playerName[i] = 0x20; + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkC8[i][0]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1001); + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkC8[i][1]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1002); + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkE0[i][0]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1015); + TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkE0[i][1]) = (gUnknown_08688492[*temp_r3_2 - 0x20] + 0x1016); + } + } + + var_r8_2 = 5; + while ((var_r8_2 >= 0) && (LOADED_SAVE->playerName[var_r8_2] == 0x20)) { + var_r8_2 -= 1; + } + + menu->unkF8 = (s16)(var_r8_2 + 1); + UiGfxStackInit(); + + sp4.uiGfxID = 0x23; + sp4.unk2B = 0; + sp4.tiles = gUiGraphics[sp4.uiGfxID].tiles; + sp4.palette = gUiGraphics[sp4.uiGfxID].palette; + sp4.tilesSize = 0x5000; + sp4.paletteSize = 0x20; + sp4.unk28 = 0; + sp4.unk29 = 2; + sp4.layout = &gUnknown_08684D3C[0]; + sp4.layoutSize = 0x500; + sp4.unk2A = 0x15; + sp4.unk0.unk4 = gUiGraphics[sp4.uiGfxID].unk8; + sp4.unk0.unk8 = gUiGraphics[sp4.uiGfxID].unkC; + sp4.unk0.unk9 = gUiGraphics[sp4.uiGfxID].unk10; + sp4.unk0.unkA = gUiGraphics[sp4.uiGfxID].unk14; + sp4.unk0.unkB = gUiGraphics[sp4.uiGfxID].unk18; + sub_80528AC(&sp4); + + sp4.uiGfxID = 0x24; + sp4.unk2B = 1; + sp4.tiles = gUiGraphics[sp4.uiGfxID].tiles; + sp4.palette = gUiGraphics[sp4.uiGfxID].palette; + sp4.tilesSize = 0x2800; + sp4.paletteSize = 0x20; + sp4.unk28 = 0; + sp4.unk29 = 1; + sp4.layout = &gUnknown_08685D3C[0]; + sp4.layoutSize = 0x800; + sp4.unk2A = 0x15; + sp4.unk0.unk4 = gUiGraphics[sp4.uiGfxID].unk8; + sp4.unk0.unk8 = gUiGraphics[sp4.uiGfxID].unkC; + sp4.unk0.unk9 = gUiGraphics[sp4.uiGfxID].unk10; + sp4.unk0.unkA = gUiGraphics[sp4.uiGfxID].unk14; + sp4.unk0.unkB = gUiGraphics[sp4.uiGfxID].unk18; + sub_80528AC(&sp4); + + sp4.uiGfxID = 0x25; + sp4.unk2B = 1; + sp4.palette = gUiGraphics[sp4.uiGfxID].palette; + sp4.paletteSize = 0x20; + sp4.unk28 = 2; + sp4.unk29 = 1; + sp4.unk2A = 4; + sp4.unk0.unk4 = gUiGraphics[sp4.uiGfxID].unk8; + sp4.unk0.unk8 = gUiGraphics[sp4.uiGfxID].unkC; + sp4.unk0.unk9 = gUiGraphics[sp4.uiGfxID].unk10; + sp4.unk0.unkA = gUiGraphics[sp4.uiGfxID].unk14; + sp4.unk0.unkB = gUiGraphics[sp4.uiGfxID].unk18; + sub_80528AC(&sp4); + + sp4.uiGfxID = 0x26; + sp4.unk2B = 3; + sp4.tiles = gUiGraphics[sp4.uiGfxID].tiles; + sp4.palette = gUiGraphics[sp4.uiGfxID].palette; + sp4.tilesSize = 0x100; + sp4.paletteSize = 0x20; + sp4.unk28 = 0; + sp4.vramC = OBJ_VRAM0 + 0x2000; + sp4.unk2A = 0xD; + sp4.unk0.unk4 = gUiGraphics[sp4.uiGfxID].unk8; + sp4.unk0.unk8 = gUiGraphics[sp4.uiGfxID].unkC; + sp4.unk0.unk9 = gUiGraphics[sp4.uiGfxID].unk10; + sp4.unk0.unkA = gUiGraphics[sp4.uiGfxID].unk14; + sp4.unk0.unkB = gUiGraphics[sp4.uiGfxID].unk18; + sub_80528AC(&sp4); + + sub_805423C(strc18); + m4aSongNumStartOrChange(0x30U); +} +END_NONMATCH + +// TODO: This is so bad. Rewrite this entire thing. +// The generated assembly could easily be halved doing that, and complexity would be MUCH improved. +// (75.00%) https://decomp.me/scratch/WT79A +NONMATCH("asm/non_matching/game/player_name_input_menu__sub_8058830.inc", void sub_8058830()) +{ + Strc_80528AC subroutine_arg0; + s8 sp28; + s8 sp2B; + StrcUi_805423C *sp30; + struct Task *sp34; + s32 sp44; + s32 sp48; + PlayerNameMenu *sp64; + s16 temp_r0_3; + s16 temp_r0_9; + s16 temp_r2; + s32 temp_r1_15; + s32 temp_r1_17; + s32 temp_r1_30; + s32 temp_r1_41; + s32 temp_r1_42; + s32 temp_r1_44; + s32 temp_r1_45; + s32 temp_r2_2; + s32 temp_r2_3; + s32 temp_r2_4; + s32 temp_r2_5; + Strc_8052C84 *temp_r4_2; + s32 temp_r4_3; + s32 temp_r4_4; + GameOverB *temp_r4_5; + s32 temp_r4_6; + s32 temp_r5; + s32 temp_r5_2; + s32 temp_r6_3; + GraphicsData *gfx; + s32 var_r0_2; + s32 var_r0_5; + s32 var_r0_6; + s32 var_r1; + s32 var_r1_2; + s32 var_r1_3; + s32 var_r1_4; + s32 var_r7_2; + u16 temp_r0_14; + u16 temp_r0_2; + u16 temp_r1_14; + u16 temp_r2_6; + u16 temp_r4; + u16 temp_r6; + s16 temp_r8; + u16 temp_sb; + u16 temp_sl; + u16 i; + u16 pressedKeys; + u32 temp_r6_2; + u8 *temp_r3_6; + + PlayerNameMenu *menu = TASK_DATA(gCurTask); + + sp64 = menu; + pressedKeys = gPressedKeys; + sp30 = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, StrcUi_805423C, strc18); + + menu->unk2C++; + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C) > 0x20) { + menu->unk2C = 0; + } + + menu->unk30++; + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk30) > 0x2E) { + menu->unk30 = 0; + } + + menu->unkFC++; + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk30) < 60) { + sub_805423C((StrcUi_805423C *)sp30); + } else { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk30, 60); + } + + if (gInput & 0x10) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk58, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk58) + 1); + } else { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk58, 0); + } + + if (0x20 & gInput) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk5C, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk5C) + 1); + } else { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk5C, 0); + } + + if (0x40 & gInput) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk64, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk64) + 1); + } else { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk64, 0); + } + + if (0x80 & gInput) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk60, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk60) + 1); + } else { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk60, 0); + } + + temp_sb = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk24); + temp_sl = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28); + temp_r8 = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54); + + if ((DPAD_RIGHT & gPressedKeys) || (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk58) > 0xF)) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + temp_r1_15 = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk58); + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk58, temp_r1_15 - 5); + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk24, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk24) + 1); + + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24) > 9) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24, 0); + } + + pressedKeys |= DPAD_RIGHT; + } else if ((DPAD_LEFT & gPressedKeys) || (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk5C) > 0xF)) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + temp_r1_17 = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk5C); + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk5C, temp_r1_17 - 5); + + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk24, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk24) - 1); + + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24) < 0) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24, 9); + } + + pressedKeys |= DPAD_LEFT; + } + + if ((DPAD_DOWN & gPressedKeys) || ((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk60) > 0xF))) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk60) = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk60) - 5; + + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) + 1); + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) > 5) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) = 5; + + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk60, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk60) + 1); + + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) > 2) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) = 0; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) = 0; + } + } + + pressedKeys |= DPAD_DOWN; + } else if ((DPAD_UP & gPressedKeys) || (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk64) > 0xF)) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, u16, unk64, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk64) - 5); + + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) - 1; + + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) < 0) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28, 0); + + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) - 1; + + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) < 0) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28, 5); + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54, 2); + } + } + + pressedKeys |= DPAD_UP; + } + + temp_r4_2 = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, Strc_8052C84, unk0); + temp_r0_3 = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C); + if (temp_r0_3 < 0x10) { + temp_r4_2->unk0 = (s16)(((0x10 - temp_r0_3) * 6) + 0x100); + temp_r4_2->unk2 = ((0x10 - TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C)) * 6) + 0x100; + } else { + temp_r4_2->unk0 = (((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C) - 15) * 6) + 0x100); + temp_r4_2->unk2 = ((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C) - 0xF) * 6) + 0x100; + } + + temp_r2 = (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24) * 0x10) + 0x20; + temp_r4_2->unkA = temp_r2; + temp_r4_2->unkA = (s16)(temp_r2 - (((u16)temp_r4_2->unk0 - 240) >> 7)); + temp_r4_2->unkC = (s16)(((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) * 0x10) + 0x28) - (((u16)temp_r4_2->unk2 - 0xF0) >> 7)); + temp_r4_2->unk4 = 0; + temp_r4_2->unk6 = 2; + sub_8052D64((u8 *)&gUnknown_08688568[0], temp_r4_2); + + if ((gPrevInput | pressedKeys) & 0xF9) { + sp34 = gCurTask; + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfx80); + temp_r2_2 = (temp_sb << 2); + temp_r4_3 = ((s16)temp_sl + (temp_r8)) << 7; + sp44 = temp_r4_3; + temp_r1_30 = (temp_r2_2 + 10 + temp_r4_3) & 0x7FF; + // gfx->dest = temp_r1_30; + gfx->src = &gUnknown_08685D3C[temp_r1_30 & 0x3FF]; + // #define (bg) ((u8*)BG_VRAM + ((gBgCntRegs[bg] & BGCNT_CHARBASE(0x3)) << 12)) + gfx->dest = (u8 *)(BG_VRAM + temp_r1_30 + ((0x1F00 & gBgCntRegs[1]) << 3)); + gfx->size = 4; + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfx8C); + temp_r2_3 = (temp_r2_2 + 0x4A + sp44) & 0x7FF; + // gfx->dest = temp_r2_3; + gfx->src = &gUnknown_08685D3C[temp_r2_3 & 0x3FF]; + gfx->dest = (u8 *)(BG_VRAM + temp_r2_3 + ((0x1F00 & gBgCntRegs[1]) << 3)); + gfx->size = 4; + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; + } + + temp_r6 + = ((u16)((0x70000 & (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28))) + * 20) + + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24)) + * 2; + if ((gPressedKeys == 0) && (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) < 6)) { + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfx68); + temp_r2_4 = (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24) * 4) + 10; + temp_r2_5 + = (temp_r2_4 + + ((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54)) << 7)) + & 0x7FF; + gfx->src = &gUnknown_0868653C[(temp_r2_5 & 0x3FF)]; + gfx->dest = (void *)(BG_VRAM + temp_r2_5 + ((0x1F00 & gBgCntRegs[1]) * 8)); + gfx->size = 4; + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfx74); +#if PLATFORM_GBA + // TODO + gfx->dest = (u8 *)((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24)) * 4) + 0x4A; + gfx->dest + = (u8 *)((temp_r2_4 + + ((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54)) + << 7)) + & 0x7FF); + gfx->src = &gUnknown_0868653C[((uintptr_t)gfx->dest) & 0x3FF]; + gfx->dest = (void *)(VRAM + (uintptr_t)gfx->dest + ((0x1F00 & gBgCntRegs[1]) * 8)); + gfx->size = 4; + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; +#endif + } + if (0x300 & gPressedKeys) { + if (0x200 & gPressedKeys) { + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) != 0) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) - 1); + } + } else { + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) < 5) { + TASK_SET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8, TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) + 1); + } + } + } + + if ((A_BUTTON & gPressedKeys) && !(B_BUTTON & gPressedKeys)) { + switch (temp_r6) { + case 0x126: + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) != 0) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) - 1; + } + break; + case 0x128: + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) != 0) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) + 1; + } + break; + case 0x12A: + var_r1_3 = 0; + + for (i = 0; i < 6; i++) { + if ((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i][0]) - Q(16)) != 0x10DB) { + var_r1_3 |= 1; + } + } + + if (var_r1_3 != 0) { + sp30->unk6 = 0; + sp30->unk4 = 1; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkFC) = 0; + gCurTask->main = Task_80595DC; + } + break; + default: + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) < 6) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) + 1; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[temp_r2_6 + 0][0]) = temp_r6 + 0x2001; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[temp_r2_6 + 0][1]) = temp_r6 + 0x2002; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[temp_r2_6 + 2][0]) = temp_r6 + 0x2015; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[temp_r2_6 + 2][2]) = temp_r6 + 0x2016; + } + break; + } + m4aSongNumStart(SE_SELECT); + } + + if ((START_BUTTON & gPressedKeys) || ((A_BUTTON & gPressedKeys) && (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) == 6))) { + temp_r6_2 = 7 & TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54); + if (temp_r6_2 < 2) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) = 2U; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24) = 9; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) = 5; + } else { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24) = 9; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) = (s16)(7 - temp_r6_2); + } + } + + if (((A_BUTTON | B_BUTTON) & gPressedKeys) == B_BUTTON) { + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) > 0) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) - 1; + for (i = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8); i < 5; i++) { + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 0][0]) + = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 1][0]); + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 0][1]) + = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 1][1]); + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 2][0]) + = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 3][0]); + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 2][1]) + = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 3][1]); + } + + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 0][0]) = 0x20DB; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 0][1]) = 0x20DC; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 2][0]) = 0x20EF; + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i + 2][1]) = 0x20F0; + m4aSongNumStart(SE_RETURN); + } + } + UiGfxStackInit(); + temp_r0_9 = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk30); + if (temp_r0_9 <= 0x16) { + var_r0_5 = 0x17 - temp_r0_9; + } else { + var_r0_5 = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk30) - 0x17; + } + + var_r7_2 = 31 - (((u16)gSineTable[(((var_r0_5 << 5) / 23) << 5) / 60U] << 0x10) >> 0x17); + if (var_r7_2 > 31) { + var_r7_2 = 31; + } + + for (i = 0; i < 16; i++) { + temp_r5 = i * 2; + sp48 = temp_r5; + temp_r4_4 = Div(var_r7_2 * ((gUiGraphics[28].palette[i] & 0x7C00) >> 10), 0x20); + temp_r5_2 = Div(var_r7_2 * ((gUiGraphics[28].palette[i] & 0x3E0) >> 5), 0x20); + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk34[i]) + = (s16)((temp_r4_4 << 10) + (temp_r5_2 << 5) + Div(var_r7_2 * (0x1F & gUiGraphics[28].palette[i]), 0x20)); + } + + subroutine_arg0.uiGfxID = 0x25; + subroutine_arg0.unk2B = 1; + subroutine_arg0.palette = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, u16, unk34); + subroutine_arg0.paletteSize = sizeof(menu->unk34); + subroutine_arg0.unk28 = 1; + subroutine_arg0.unk29 = 1; + subroutine_arg0.unk2A = 4; + subroutine_arg0.unk0.unk4 = gUiGraphics[subroutine_arg0.uiGfxID].unk8; + subroutine_arg0.unk0.unk8 = gUiGraphics[subroutine_arg0.uiGfxID].unkC; + subroutine_arg0.unk0.unk9 = gUiGraphics[subroutine_arg0.uiGfxID].unk10; + subroutine_arg0.unk0.unkA = gUiGraphics[subroutine_arg0.uiGfxID].unk14; + subroutine_arg0.unk0.unkB = gUiGraphics[subroutine_arg0.uiGfxID].unk18; + sub_80528AC(&subroutine_arg0); + + if (((s16)TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) <= 5) + && ((((u16)(((0x70000 + & ((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28)) + << 0x10)) + >> 0x10) + * 0x14) + + TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk24)) + << 0x11) + != 0x012A0000)) { + temp_r4_5 = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GameOverB, unk0); + (&TASK_GET_MEMBER(PlayerNameMenu, gCurTask, Strc_8052C84, unk0))->unkA + = (s16)((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkF8) * 0x10) + 0x78); + + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C) > 0x10) { + var_r1_4 = 16 - TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C); + } else { + var_r1_4 = TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk2C) - 16; + } + (&TASK_GET_MEMBER(PlayerNameMenu, gCurTask, Strc_80528AC, unk0))->layoutSize = (s16)(0xD - (var_r1_4 >> 2)); + sub_805321C(&gUnknown_0868856C[0], temp_r4_5); + } + + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfx98); + gfx->src = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[0][0]); + temp_r1_41 = (((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) - 2) << 7) + 0x1E) & 0x7FF; + gfx->dest = (void *)((uintptr_t)gfx->dest + VRAM + ((0x1F00 & gBgCntRegs[1]) * 8)); + gfx->size = 0x18; + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfxA4); + gfx->src = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkE0[0][0]); + temp_r1_42 = (((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) - 2) << 7) + 0x5E) & 0x7FF; + gfx->dest = (void *)(BG_VRAM + temp_r1_42 + ((0x1F00 & gBgCntRegs[1]) * 8)); + gfx->size = sizeof(menu->unkE0); + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; + + if (temp_r8 != TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54)) { + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfxB0); + temp_r6_3 = (temp_r8 + 6) << 7; + gfx->src = &gUnknown_08685D3C[15 + (temp_r6_3 & 0x7FF)]; + temp_r4_6 = ((temp_r8 - 2) << 7); + temp_r1_44 = (temp_r4_6 + 0x1E) & 0x7FF; + gfx->dest = (void *)(temp_r1_44 + BG_VRAM + ((0x1F00 & gBgCntRegs[1]) * 8)); + gfx->size = 0x18; + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; + gfx = &TASK_GET_MEMBER(PlayerNameMenu, gCurTask, GraphicsData, gfxBC); + if (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk28) == 0) { + var_r0_6 = temp_r4_6; + } else { + var_r0_6 = temp_r6_3; + } + gfx->src = &temp_r3_6[(var_r0_6 + 0x40) & 0x7FF]; + temp_r1_45 = ((temp_r8 * 2) - 0xA2) & 0x7FF; + gfx->dest = (void *)(VRAM + temp_r1_45 + ((0x1F00 & gBgCntRegs[1]) * 8)); + gfx->size = 0x18; + gVramGraphicsCopyQueue[gVramGraphicsCopyQueueIndex] = gfx; + gVramGraphicsCopyQueueIndex = (gVramGraphicsCopyQueueIndex + 1) & 0x1F; + } + gBgScrollRegs[1][1] = ((TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unk54) * 0x10) - 0x30) & 0x1FF; +} +END_NONMATCH + +// (99.87%%) https://decomp.me/scratch/hkbKh +NONMATCH("asm/non_matching/game/player_name_input_menu__Task_80595DC.inc", void Task_80595DC(void)) +{ + u32 temp_r5; + u32 i, j; + s32 var_r7 = 0; + PlayerNameMenu *menu = TASK_DATA(gCurTask); + struct Task *t; + + sub_805423C(&menu->strc18); + + incUnkFC(); + +#ifndef NON_MATCHING + asm("ldr %0, [%1]" : "=r"(t) : "r"(&gCurTask)); +#else + t = gCurTask; +#endif + + if (TASK_GET_MEMBER(PlayerNameMenu, t, s16, unkFC) > 60) { + for (i = 0; i < 6; i++) { + temp_r5 = (TASK_GET_MEMBER(PlayerNameMenu, gCurTask, s16, unkC8[i][2]) - Q(32) - 1); + j = ((temp_r5 / 40u) * 10) + ((temp_r5 % 40u) / 2); + + if (LOADED_SAVE->playerName[i] != gUnknown_08688444[j]) { + var_r7 = 1; + LOADED_SAVE->playerName[i] = gUnknown_08688444[j]; + } + } + + if (var_r7 != 0) { + LOADED_SAVE->unk4 = (s32)gFrameCount; + { + u16 prevIME, prevIE, prevDispstat; + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + + prevIE = REG_IE; + prevIME = REG_IME; + prevDispstat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); + + WriteSaveGame(); + + REG_IE = prevIE; + REG_IE; + REG_IME = prevIME; + REG_IME; + REG_DISPSTAT = prevDispstat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + } + + gFlags &= ~FLAGS_8000; + } + TaskDestroy(gCurTask); + + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = 0xFF; + gBgSprites_Unknown2[1][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xFF; + gBgSprites_Unknown2[2][3] = 0x20; + + if (gGameMode == 2) { + CreateMultiplayerModeSelectScreen(); + return; + } + CreatePlayerDataMenu(); + } +} +END_NONMATCH diff --git a/sa1/src/game/sa1_sa2_shared/collect_ring_effect.c b/sa1/src/game/sa1_sa2_shared/collect_ring_effect.c new file mode 100644 index 0000000000..90db91fa01 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/collect_ring_effect.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "task.h" +#include "lib/m4a/m4a.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/collect_ring_effect.h" +#include "game/sa1_sa2_shared/rings_manager.h" + +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/player.h" + +#include "constants/animations.h" + +typedef struct { + Sprite s; + u8 bPanSfxLeft; + u8 unk31; +} RingEffect; + +void Task_CollectRingEffect(void); + +extern struct MP2KSongHeader se_ring_copy; + +void CreateCollectRingEffect(s16 x, s16 y) +{ + if (gActiveCollectRingEffectCount < 8) { + struct Task *t = TaskCreate(Task_CollectRingEffect, sizeof(RingEffect), 0x2000, 0, NULL); + RingEffect *re = TASK_DATA(t); + Sprite *s = &re->s; + + re->unk31 = 0; + + s->x = x; + s->y = y; + s->graphics.dest = RESERVED_RING_EFFECT_TILES_VRAM; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_RING_COLLECT_EFFECT; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + re->bPanSfxLeft = gRingCount & 1; + if (re->bPanSfxLeft) { + MPlayStart(&gMPlayInfo_SE2, &se_ring_copy); + m4aMPlayImmInit(&gMPlayInfo_SE2); + m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, 128); + m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFF, -64); + } else { + MPlayStart(&gMPlayInfo_SE1, &se_ring_copy); + m4aMPlayImmInit(&gMPlayInfo_SE1); + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, 128); + m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFF, +64); + } + + gActiveCollectRingEffectCount++; + } +} + +void Task_CollectRingEffect(void) +{ + RingEffect *re = TASK_DATA(gCurTask); + Sprite *s = &re->s; + + s16 playerX = s->x; + s16 playerY = s->y; + + s->x -= gCamera.x; + s->y -= gCamera.y; + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + DisplaySprite(s); + + gActiveCollectRingEffectCount--; + + TaskDestroy(gCurTask); +#ifdef BUG_FIX + // Prevent use-after-free + return; +#endif + } + + DisplaySprite(s); + + s->x = playerX; + s->y = playerY; +} \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/collision.c b/sa1/src/game/sa1_sa2_shared/collision.c new file mode 100644 index 0000000000..6f0d7d0eeb --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/collision.c @@ -0,0 +1,1885 @@ +#include "global.h" +#include "rect.h" +#include "sprite.h" +#include "lib/m4a/m4a.h" +#include "game/multiplayer/mp_player.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/dust_cloud.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/sa1_sa2_shared/player.h" + +#if (GAME == GAME_SA2) +#include "game/cheese.h" +#endif +#include "game/entity.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/parameters/characters.h" +#include "game/stage/player.h" +#include "game/stage/rings_scatter.h" +#include "game/stage/trapped_animals.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/player_transitions.h" +#include "constants/songs.h" +#include "constants/zones.h" + +bool32 Coll_DamageSuperSonic(Player *p); + +#if 0 // MATCH +// (Link included because of register-match) +// (100.00%) https://decomp.me/scratch/0Ro0I +u32 SA2_LABEL(sub_800C060)(Sprite *s, CamCoord sx, CamCoord sy, Player *p) +{ + s8 rectPlayer[4] = { -p->spriteOffsetX, -p->spriteOffsetY, +p->spriteOffsetX, +p->spriteOffsetY }; + + u32 result = COLL_NONE; + bool32 ip = FALSE; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[0]) || !IS_ALIVE(p)) { + return result; + } + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + ip = TRUE; + } + + if (RECT_COLLISION_2(sx, sy, &s->hitboxes[0].b, p->qWorldX, p->qWorldY, (struct Rect8 *)rectPlayer) && (p->qSpeedAirY >= 0)) { + +#ifndef NON_MATCHING + register s32 y asm("r1"); +#else + s32 y; +#endif + + rectPlayer[1] = -p->spriteOffsetY; + rectPlayer[3] = +p->spriteOffsetY; + p->moveState |= MOVESTATE_STOOD_ON_OBJ; + result |= COLL_FLAG_8; + + if (!ip) { + p->rotation = 0; + } + + p->stoodObj = s; + p->qSpeedAirY = 0; + + if (GRAVITY_IS_INVERTED) { + y = s->hitboxes[0].b.bottom; + y += sy; + y += rectPlayer[3]; + } else { + y = s->hitboxes[0].b.top; + y += sy; + y -= rectPlayer[3]; + } + y = Q(y); + p->qWorldY = Q_24_8_FRAC(p->qWorldY) + (y); + } else if (ip && !(p->moveState & MOVESTATE_STOOD_ON_OBJ)) { + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_IN_AIR; + } + + return result; +} + +bool32 sub_800C204(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p, s16 hbIndexPlayer) +{ + PlayerSpriteInfo *psi = p->spriteInfoBody; + Sprite *sprPlayer = &psi->s; + + if (!IS_ALIVE(p)) { + return FALSE; + } + + if (!HITBOX_IS_ACTIVE(s->hitboxes[hbIndex])) { + return FALSE; + } + + if (!HITBOX_IS_ACTIVE(psi->s.hitboxes[hbIndexPlayer])) { + return FALSE; + } + + if ((HB_COLLISION(sx, sy, s->hitboxes[hbIndex].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[hbIndexPlayer].b))) { + return TRUE; + } + + return FALSE; +} + +bool32 sub_800C320(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p) +{ + PlayerSpriteInfo *psi = p->spriteInfoBody; + Sprite *sprPlayer = &psi->s; + + if (!IS_ALIVE(p)) { + return FALSE; + } + + if (!HITBOX_IS_ACTIVE(s->hitboxes[hbIndex])) { + return FALSE; + } + + if (!HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1])) { + return FALSE; + } + + if ((HB_COLLISION(sx, sy, s->hitboxes[hbIndex], I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[1]))) { + Collision_AdjustPlayerSpeed(p); + return TRUE; + } + + return FALSE; +} + +bool32 IsColliding_Cheese(Sprite *sprTarget, s32 sx, s32 sy, s16 hbIndex, Player *p) +{ + if (!IS_ALIVE(p)) { + return FALSE; + } + + if (!HITBOX_IS_ACTIVE(sprTarget->hitboxes[hbIndex])) { + return FALSE; + } + + if (gCheese) { + Cheese *cheese = gCheese; + + if (!HITBOX_IS_ACTIVE(cheese->s.hitboxes[1])) { + return FALSE; + } + + if ((HB_COLLISION(sx, sy, sprTarget->hitboxes[hbIndex], I(cheese->posX), I(cheese->posY), cheese->s.hitboxes[1]))) { + return TRUE; + } + } + + return FALSE; +} + +#if (GAME == GAME_SA1) +bool32 Coll_Player_Enemy_Attack(Sprite *s, s16 sx, s16 sy, u8 hbIndex) +#elif (GAME == GAME_SA2) +bool32 sub_800C4FC(Sprite *s, s32 sx, s32 sy, u8 hbIndex) +#endif +{ + Player *player = &gPlayer; + Sprite *sprPlayer = &player->spriteInfoBody->s; + + bool32 dead; + u32 movestate; + EnemyBase *eb; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[hbIndex])) { + return FALSE; + } + + eb = TASK_DATA(gCurTask); + dead = player->moveState & MOVESTATE_DEAD; + movestate = player->moveState; + + if (!dead) { + if (IS_MULTI_PLAYER && ((s8)eb->base.me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + return TRUE; + } + + if (!(movestate & MOVESTATE_IN_SCRIPTED)) { + if (HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1])) { + if (HB_COLLISION(sx, sy, s->hitboxes[hbIndex], I(player->qWorldX), I(player->qWorldY), sprPlayer->hitboxes[1])) { + if (IS_MULTI_PLAYER) { + RoomEvent *v = CreateRoomEvent(); + v->unk0 = 3; + v->unk1 = eb->base.regionX; + v->unk2 = eb->base.regionY; + v->unk3 = eb->base.id; + } + + Collision_AdjustPlayerSpeed(player); + + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + CreateEnemyDefeatScoreAndManageLives(sx, sy); + + return TRUE; + } + } + + if (HITBOX_IS_ACTIVE(sprPlayer->hitboxes[0]) + && (HB_COLLISION(sx, sy, s->hitboxes[hbIndex], I(player->qWorldX), I(player->qWorldY), sprPlayer->hitboxes[0]))) { + if (!(player->itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + Coll_DamagePlayer(player); + } else { + if (IS_MULTI_PLAYER) { + RoomEvent *v = CreateRoomEvent(); + v->unk0 = 3; + v->unk1 = eb->base.regionX; + v->unk2 = eb->base.regionY; + v->unk3 = eb->base.id; + } + + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + CreateEnemyDefeatScoreAndManageLives(sx, sy); + + return TRUE; + } + } + } + + if (gCheese != NULL) { + Cheese *cheese = gCheese; + if (cheese->s.hitboxes[1].index != -1 + && ((HB_COLLISION(sx, sy, s->hitboxes[hbIndex], I(cheese->posX), I(cheese->posY), cheese->s.hitboxes[1])))) { + if (IS_MULTI_PLAYER) { + RoomEvent *v = CreateRoomEvent(); + v->unk0 = 3; + v->unk1 = eb->base.regionX; + v->unk2 = eb->base.regionY; + v->unk3 = eb->base.id; + } + + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + CreateEnemyDefeatScoreAndManageLives(sx, sy); + + return TRUE; + } + } + } + + return FALSE; +} + +bool32 sub_800C84C(Sprite *s, s32 sx, s32 sy) +{ + Player *p; + Sprite *sprPlayer; + bool32 result = FALSE; + + if (gPlayer.moveState & MOVESTATE_IN_SCRIPTED) { + return result; + } + + if (HITBOX_IS_ACTIVE(s->hitboxes[0])) { + p = &gPlayer; + sprPlayer = &p->spriteInfoBody->s; + + if ((!PLAYER_IS_ALIVE) || !HITBOX_IS_ACTIVE(sprPlayer->hitboxes[0])) { + return result; + } + + if ((HB_COLLISION(sx, sy, s->hitboxes[0], I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0]))) { + Coll_DamagePlayer(p); + result = TRUE; + } + } + + return result; +} + +bool32 sub_800C944(Sprite *s, s32 sx, s32 sy) +{ + bool32 result = FALSE; + + Player *p = &gPlayer; + PlayerSpriteInfo *psi = p->spriteInfoBody; + Sprite *sprPlayer = &psi->s; + + if (PLAYER_IS_ALIVE && HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1]) && (HITBOX_IS_ACTIVE(s->hitboxes[0]))) { + if (HB_COLLISION(sx, sy, s->hitboxes[0], I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[1])) { + result = TRUE; + } + } + + return result; +} + +bool32 sub_800CA20(Sprite *s, s32 sx, s32 sy, s16 hbIndex, Player *p) +{ + PlayerSpriteInfo *psi = p->spriteInfoBody; + Sprite *sprPlayer = &psi->s; + + if (IS_ALIVE(p) && (HITBOX_IS_ACTIVE(s->hitboxes[hbIndex]) && HITBOX_IS_ACTIVE(sprPlayer->hitboxes[0]))) { + if (HB_COLLISION(sx, sy, s->hitboxes[hbIndex], I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0])) { + Coll_DamagePlayer(p); + return TRUE; + } + } + + return FALSE; +} + +void Collision_AdjustPlayerSpeed(Player *p) +{ + if (p->moveState & MOVESTATE_BOOST_EFFECT_ON) { + // Also triggered on homing-attack. + // Slight boost upwards for the player. + p->transition = PLTRANS_PT8; + p->speedAirX = 0; + p->speedAirY = 0; + } else if (IS_BOSS_STAGE(gCurrentLevel)) { + s32 speedX = -(p->speedAirX >> 1); + p->speedAirY = -p->speedAirY; + // BUG: using the camera DX here is not really fair, since + // this will throw the player forwards if the camera is moving + // towards the boss. + // In reality this should use a fixed value of +Q(5) since that's + // the boss moving speed + p->speedAirX = speedX - Q(gCamera.dx); + } else if (p->speedAirY > 0) { + // Bounce off of enemies + p->speedAirY = -p->speedAirY; + } + + gPlayer.moveState |= MOVESTATE_4000; +} + +// (100.00%) https://decomp.me/scratch/verla +// TODO: Register fake-match +bool32 Coll_DamagePlayer(Player *p) +{ + if (p->timerInvincibility > 0 || p->timerInvulnerability > 0) { + return FALSE; + } + + p->timerInvulnerability = PLAYER_INVULNERABLE_DURATION; + + if (p->moveState & MOVESTATE_1000000) { + PlayerSpriteInfo *psi; + + p->layer = PLAYER_LAYER__BACK; + + p->moveState &= ~MOVESTATE_1000000; + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + p->spriteInfoBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + p->spriteInfoBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } + + if (!(p->moveState & MOVESTATE_1000000)) { + p->transition = PLTRANS_PT9; + } + + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + if (!HAS_SHIELD(p)) { + if (gRingCount != 0) { + u32 rings = gRingCount; + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#ifndef NON_MATCHING + register u32 rings2 asm("r0") = rings; +#else + u32 rings2 = rings; +#endif + if (rings > 10) { + rings2 = 10; + } + + rings = rings2; + } + + InitScatteringRings(I(p->qWorldX), I(p->qWorldY), rings); + + if (IS_MULTI_PLAYER) { + RoomEvent *unk = CreateRoomEvent(); + unk->unk0 = 4; + unk->unk1 = rings; + } + + gRingCount -= rings; + } else if (!(gStageFlags & STAGE_FLAG__DEMO_RUNNING)) { + p->moveState |= MOVESTATE_DEAD; + } + } else { + m4aSongNumStart(SE_LIFE_LOST); + p->itemEffect &= ~(PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC | PLAYER_ITEM_EFFECT__SHIELD_NORMAL); + } + + return TRUE; +} + +// Called by: Boss 3,6,7, hammerhead, platform (square), +// spikes, spring bouncy, speeding platform, +// arrow platform, spike platform +u32 sub_800CCB8(Sprite *s, s32 sx, s32 sy, Player *p) +{ + s8 rectPlayer[4] = { -p->spriteOffsetX, -p->spriteOffsetY, +p->spriteOffsetX, +p->spriteOffsetY }; + + bool32 r4 = COLL_NONE; + + u32 mask; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[0])) { + return COLL_NONE; + } + + if (!IS_ALIVE(p)) { + return COLL_NONE; + } + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->unk3C == s)) { + r4 = COLL_FLAG_1; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState |= MOVESTATE_IN_AIR; + } + + mask = sub_800CE94(s, sx, sy, (struct Rect8 *)rectPlayer, p); + + if (mask) { + if (mask & 0x10000) { + p->moveState |= MOVESTATE_STOOD_ON_OBJ; + p->moveState &= ~MOVESTATE_IN_AIR; + p->unk3C = s; + + if (r4 == 0 && s == NULL) { + p->speedGroundX = p->speedAirX; + } + } + } else if (r4) { + if (!(p->moveState & MOVESTATE_STOOD_ON_OBJ)) { + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_IN_AIR; + p->unk3C = NULL; + + if (IS_BOSS_STAGE(gCurrentLevel)) { + p->speedGroundX -= Q(gCamera.dx); + } + } + } + + return mask; +} + +// Called by IAs ramp, spring, floating spring, bounce block, spike platform +u32 sub_800CDBC(Sprite *s, s32 sx, s32 sy, Player *p) +{ + s8 rectPlayer[4] = { -p->spriteOffsetX, -p->spriteOffsetY, +p->spriteOffsetX, +p->spriteOffsetY }; + + bool32 r4 = COLL_NONE; + + u32 mask; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[0])) { + return COLL_NONE; + } + + if (!IS_ALIVE(p)) { + return COLL_NONE; + } + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->unk3C == s)) { + r4 = COLL_FLAG_1; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + } + + mask = sub_800CE94(s, sx, sy, (struct Rect8 *)rectPlayer, p); + + if (mask & 0x10000) { + p->moveState |= MOVESTATE_STOOD_ON_OBJ; + p->unk3C = s; + } else if (r4) { + p->unk3C = NULL; + + if (IS_BOSS_STAGE(gCurrentLevel)) { + p->speedGroundX -= Q(gCamera.dx); + } + } + + return mask; +} + +// Looks like each byte in the result is one value +// TODO: Remove gotos +u32 sub_800CE94(Sprite *s, s32 sx, s32 sy, struct Rect8 *inRect, Player *p) +{ + s32 px = I(p->qWorldX); + s32 py = I(p->qWorldY); + u32 result = 0; + s32 r1; + s32 r3, r6; + + if (RECT_COLLISION(sx, sy, &s->hitboxes[0].b, px, py, inRect)) { + s32 sMidX = (sx + ((s->hitboxes[0].b.left + s->hitboxes[0].b.right) >> 1)); + s32 sMidY = (sy + ((s->hitboxes[0].b.top + s->hitboxes[0].b.bottom) >> 1)); + if ((sMidX <= px)) { + r6 = (sx + s->hitboxes[0].b.right - (px + inRect->left)); + result |= COLL_FLAG_40000; + } else { + r6 = (sx + s->hitboxes[0].b.left - (px + inRect->right)); + result |= COLL_FLAG_80000; + } + + if (sMidY > py) { + r3 = sy + s->hitboxes[0].b.top - (py + inRect->bottom); + r1 = r3 + 5; + + if ((r1) > 0) { + r1 = 0; + } + result |= COLL_FLAG_10000; + } else { + r3 = sy + s->hitboxes[0].b.bottom - (py + inRect->top); + r1 = r3 + 2; + if ((r1) < 0) { + r1 = 0; + } + result |= COLL_FLAG_20000; + } + // _0800CF90 + + if (ABS(r6) < (ABS(r1))) { + result &= (COLL_FLAG_40000 | COLL_FLAG_80000); + goto temp_lbl; + } else { + result &= (COLL_FLAG_10000 | COLL_FLAG_20000); + + if (!(result & COLL_FLAG_10000)) { + goto temp_lbl; + } + } + + if (GRAVITY_IS_INVERTED) { + if (p->speedAirY > 0) { + return 0; + } + } else { + if (p->speedAirY < 0) { + return 0; + } + } + + if (!(p->moveState & MOVESTATE_IN_AIR)) { + if ((p->rotation + 0x20) & 0x40) { + p->speedGroundX = 0; + } + } + + temp_lbl: + result |= (((r6 << 8) & 0xFF00) | (r3 & 0xFF)); + if (result & 0xC0000) { + if (!(result & 0xFF00)) { + result &= 0xFFF300FF; + } + } else { + result &= 0xFFFF00FF; + } + + if (!(result & (COLL_FLAG_10000 | COLL_FLAG_20000))) { + result &= ~0xFF; + } + } + + return result; +} + +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sub_800D0A0.inc", + u32 sub_800D0A0(Sprite *s, s16 param1, s16 param2, s16 param3, s16 param4, u8 param5, u32 param6)) +{ + return 0; +} +END_NONMATCH +#endif // MATCH + +// (99.96%) https://decomp.me/scratch/BOoFv +#if (GAME == GAME_SA1) +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800DA4C.inc", + u32 SA2_LABEL(sub_800DA4C)(Sprite *opponent, s16 qOppX, s16 qOppY, UNUSED s32 param3, UNUSED s32 param4, u8 layer)) +#else +u32 SA2_LABEL(sub_800DA4C)(Sprite *opponent, s16 qOppX, s16 qOppY, UNUSED s32 param3, UNUSED s32 param4, u8 layer) +#endif +{ + MultiplayerPlayer *mpp; + Sprite *mpPlayerSprite; + u32 res2; + u32 result = COLL_NONE; + + Player *p = &gPlayer; + if (!IS_ALIVE(p)) { + return COLL_NONE; + } + +#if (GAME == GAME_SA2) + if (p->moveState & MOVESTATE_GOAL_REACHED) { + return COLL_NONE; + } +#endif + + mpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); + mpPlayerSprite = &mpp->s; + + if (layer != p->layer) { + return COLL_NONE; + } + // _0800DABC + + if ((p->qSpeedAirX == 0 && p->qSpeedAirY == 0) && HITBOX_IS_ACTIVE(opponent->hitboxes[1])) { + if (HB_COLLISION(qOppX, qOppY, opponent->hitboxes[1].b, mpp->pos.x, mpp->pos.y, mpPlayerSprite->hitboxes[0].b)) { + // _0800DB68 + result |= COLL_FLAG_2; + } + } + // _0800DB70 + if (HITBOX_IS_ACTIVE(mpPlayerSprite->hitboxes[1]) && HITBOX_IS_ACTIVE(opponent->hitboxes[0]) + && HB_COLLISION(qOppX, qOppY, opponent->hitboxes[0].b, mpp->pos.x, mpp->pos.y, mpPlayerSprite->hitboxes[1].b)) { + // _0800DC34 + if (mpp->pos.x > qOppX) { + result |= COLL_FLAG_40000; + } else { + result |= COLL_FLAG_20000; + } + // _0800DC66 + + if (mpp->pos.y > qOppY) { + result |= COLL_FLAG_10000; + } else { + result |= COLL_FLAG_100000; + } + + result |= COLL_FLAG_1; + } else if (HITBOX_IS_ACTIVE(mpPlayerSprite->hitboxes[0]) && HITBOX_IS_ACTIVE(opponent->hitboxes[1]) + && HB_COLLISION(qOppX, qOppY, opponent->hitboxes[1].b, mpp->pos.x, mpp->pos.y, mpPlayerSprite->hitboxes[0].b)) { + result |= COLL_FLAG_2; + } + + return result; +} +END_NONMATCH + +u32 Coll_Player_Entity_RectIntersection(Sprite *s, CamCoord sx, CamCoord sy, Player *p, struct Rect8 *rectPlayer) +{ + u32 result = 0; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[0]) || !IS_ALIVE(p)) { + return result; + } + + if (RECT_COLLISION(sx, sy, &s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), rectPlayer)) { + result |= COLL_FLAG_80000; + } + + return result; +} + +u32 Coll_AmyHammer_Spring(Sprite *s, s16 worldX, s16 worldY, Player *p) +{ + bool32 isColliding = FALSE; + + if (p->character == CHARACTER_AMY) { + if ((p->charState == CHARSTATE_87) || (p->charState == CHARSTATE_88) || (p->charState == CHARSTATE_89) + || (p->charState == CHARSTATE_90)) { + if (p->spriteInfoBody->s.hitboxes[1].index != HITBOX_STATE_INACTIVE) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b)) { + isColliding = TRUE; + } + } + } + } + + return isColliding; +} + +// (99.68%) https://decomp.me/scratch/jajQw +// TODO: Does this actually return a moveState? +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Spring_Sideways.inc", + u32 Coll_Player_Spring_Sideways(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p)) +{ + s8 rectDataPlayerA[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), (p->spriteOffsetX + 5), (p->spriteOffsetY - 1) }; + s8 rectDataPlayerB[4] = { -(p->spriteOffsetX + 0), (0 - p->spriteOffsetY), (p->spriteOffsetX + 0), (p->spriteOffsetY + 0) }; + Rect8 *rectPlayerB = (Rect8 *)&rectDataPlayerB[0]; + + u32 moveState = 0; + bool32 stoodOnCurrent = 0; + + if (s->hitboxes[0].index == -1) { + return moveState; + } + + if (!IS_ALIVE(p)) { + return moveState; + } + + moveState = p->moveState & MOVESTATE_IN_AIR; + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + moveState |= MOVESTATE_IN_AIR; + stoodOnCurrent = 1; + } + + if (moveState & MOVESTATE_IN_AIR) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*rectPlayerB))) { + if (sub_800C934(s, worldX, worldY, (Rect8 *)&rectDataPlayerB, stoodOnCurrent, p, &moveState)) { + return moveState; + } + } else if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*(Rect8 *)&rectDataPlayerA))) { + if (I(p->qWorldX) <= worldX) { + if (p->qSpeedAirX >= 0) { + p->qSpeedAirX = 0; + p->qWorldX = Q((worldX + s->hitboxes[0].b.left) - rectDataPlayerA[2]); + moveState |= MOVESTATE_20000; + } + } else if (p->qSpeedAirX <= 0) { + p->qSpeedAirX = 0; + p->qWorldX = Q(((worldX + s->hitboxes[0].b.right) - rectDataPlayerA[0]) + 1); + moveState |= MOVESTATE_40000; + } + } + } + + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*(Rect8 *)&rectDataPlayerA))) { + if (I(p->qWorldX) <= worldX) { + if (p->qSpeedAirX >= 0) { + moveState |= MOVESTATE_20000; + + if (p->qSpeedAirX > 0) { + moveState |= MOVESTATE_20; + moveState &= ~MOVESTATE_FACING_LEFT; + p->qWorldX = Q((worldX + s->hitboxes[0].b.left) - rectDataPlayerA[2]); + } + } + } else { + if (p->qSpeedAirX <= 0) { + moveState |= MOVESTATE_40000; + + if (p->qSpeedAirX < 0) { + moveState |= MOVESTATE_20; + moveState |= MOVESTATE_FACING_LEFT; + p->qWorldX = Q(((worldX + s->hitboxes[0].b.right) - rectDataPlayerA[0]) + 1); + } + } + } + } + + return moveState; +} +END_NONMATCH + +// (99.92%) https://decomp.me/scratch/GFpFd +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__Coll_Player_Itembox.inc", + u32 Coll_Player_Itembox(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p)) +{ + s8 rectDataPlayerA[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), (p->spriteOffsetX + 5), (p->spriteOffsetY - 1) }; + s8 rectDataPlayerB[4] = { -(p->spriteOffsetX + 0), (0 - p->spriteOffsetY), (p->spriteOffsetX + 0), (p->spriteOffsetY + 0) }; + Rect8 *rectPlayerB = (Rect8 *)&rectDataPlayerB[0]; + + u32 result; + s32 middleX; + s32 middleY; + + result = 0; + if (s->hitboxes[0].index == -1) { + return result; + } + + if (!IS_ALIVE(p)) { + return result; + } + + if (p->spriteInfoBody->s.hitboxes[1].index != -1) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b)) { + result |= 0x20; + if (p->moveState & MOVESTATE_IN_AIR) { + if (p->qSpeedAirY > 0) { + p->qSpeedAirY = -p->qSpeedAirY; + } + } + } + } + + if (p->moveState & MOVESTATE_IN_AIR) { + middleX = worldX + ((s->hitboxes[0].b.left + s->hitboxes[0].b.right) >> 1); + middleY = worldY + ((s->hitboxes[0].b.top + s->hitboxes[0].b.bottom) >> 1); + + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*rectPlayerB))) { + if ((!GRAVITY_IS_INVERTED && (I(p->qWorldY) <= middleY)) || (GRAVITY_IS_INVERTED && (I(p->qWorldY) >= middleY))) { + if ((p->character == 1) && (p->SA2_LABEL(unk61) != 0)) { + sub_80096B0(s, worldX, worldY, p); + return 0; + } else if (p->qSpeedAirY >= 0) { + result |= 8; + + if (p->qSpeedAirY > 0) { + p->qSpeedAirY = -p->qSpeedAirY; + } + } + } else if (p->qSpeedAirY < 0) { + p->qSpeedAirY = 0; + + if (!GRAVITY_IS_INVERTED) { + p->qWorldY = p->qWorldY + (Q((worldY + s->hitboxes[0].b.bottom) - rectDataPlayerB[1]) - (0xFFFFFF00 & p->qWorldY)); + } else { + p->qWorldY = p->qWorldY - (Q((worldY + s->hitboxes[0].b.bottom) - rectDataPlayerB[1]) - (0xFFFFFF00 & p->qWorldY)); + } + + result |= 0x10000; + } + } else if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*(Rect8 *)&rectDataPlayerA[0]))) { + if (I(p->qWorldX) <= middleX) { + if (p->qSpeedAirX > 0) { + p->qSpeedAirX = 0; + p->qWorldX = Q(worldX + s->hitboxes[0].b.left - rectDataPlayerA[2]); + } + } else { + if (p->qSpeedAirX < 0) { + p->qSpeedAirX = 0; + p->qWorldX = Q((worldX + s->hitboxes[0].b.right - rectDataPlayerA[0]) + 1); + } + } + } + } + + return result; +} +END_NONMATCH + +// Used by Security Gate and Breakable Wall. +u32 Coll_Player_Gate(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p, u32 arg4) +{ + u32 result = 0; + s8 rectPlayer[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), (p->spriteOffsetX + 5), (p->spriteOffsetY - 1) }; + + if (s->hitboxes[0].index == -1) { + return result; + } + + if (!IS_ALIVE(p)) { + return result; + } + + if (arg4 != 0) { + if (p->spriteInfoBody->s.hitboxes[1].index != -1) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b) + || HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*(Rect8 *)&rectPlayer[0]))) { + + result |= 8; + if ((p->moveState & MOVESTATE_IN_AIR) && (p->qSpeedAirY > 0)) { + p->qSpeedAirY = -p->qSpeedAirY; + } + + return result; + } + } + } + + sub_800CBBC(s, worldX, worldY, (Rect8 *)&rectPlayer, 0, p, &result); + return result; +} + +u32 Coll_Player_SkatingStone(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p) +{ + s32 moveState; + s32 var_sb; + + s8 rectPlayer[4] = { -p->spriteOffsetX, -p->spriteOffsetY, +p->spriteOffsetX, +p->spriteOffsetY }; + + u32 result; + + result = 0; + var_sb = 0; + + if ((s->hitboxes[0].index == -1) || (((0x80 & p->moveState) != 0))) { + return 0U; + } + + moveState = p->moveState & MOVESTATE_IN_AIR; + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState = p->moveState & ~MOVESTATE_STOOD_ON_OBJ; + moveState |= MOVESTATE_IN_AIR; + var_sb = 1; + } + + if (((moveState == 0) || !sub_800C934(s, worldX, worldY, (Rect8 *)rectPlayer, var_sb, p, &result)) + && !sub_800C934(s, worldX, worldY, (Rect8 *)rectPlayer, var_sb, p, &result)) { + if (var_sb) { + if (!(p->moveState & MOVESTATE_STOOD_ON_OBJ)) { + p->moveState = (p->moveState & ~MOVESTATE_20) | MOVESTATE_IN_AIR; + } + } + } + + return result; +} + +// sa2__sub_800C060 +// 'Coll_Player_PlatformCrumbling' name from SA2, called by many Entities in SA1! +// (86.62%) https://decomp.me/scratch/kyp0r +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sa2__800C060.inc", + u32 Coll_Player_PlatformCrumbling(Sprite *s, CamCoord sx, CamCoord sy, Player *p)) +{ + s8 rectPlayer[4] = { -p->spriteOffsetX, -p->spriteOffsetY, +p->spriteOffsetX, +p->spriteOffsetY }; + + u32 result = COLL_NONE; + bool32 ip = FALSE; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[0]) || !IS_ALIVE(p)) { + return result; + } + + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + ip = TRUE; + } + + if (RECT_COLLISION_2(sx, sy, &s->hitboxes[0].b, p->qWorldX, p->qWorldY, (struct Rect8 *)rectPlayer) && (p->qSpeedAirY >= 0)) { + +#ifndef NON_MATCHING + register s32 y asm("r1"); +#else + s32 y; +#endif + + rectPlayer[1] = -p->spriteOffsetY; + rectPlayer[3] = +p->spriteOffsetY; + p->moveState |= MOVESTATE_STOOD_ON_OBJ; + result |= COLL_FLAG_8; + +#if (GAME == GAME_SA1) + if (((p->character != CHARACTER_KNUCKLES) || (p->SA2_LABEL(unk61) != 1 && p->SA2_LABEL(unk61) != 3)) + && ((p->character != CHARACTER_AMY) || !(p->moveState & MOVESTATE_4000000) || (p->SA2_LABEL(unk62) == 0))) { + p->moveState &= ~MOVESTATE_IN_AIR; + } + + if (!ip) { + if ((p->character != CHARACTER_KNUCKLES) || ((p->SA2_LABEL(unk61) != 1) && (p->SA2_LABEL(unk61) != 3))) { + SA2_LABEL(sub_8021BE0)(p); + p->qSpeedGround = p->qSpeedAirX; + } + p->rotation = 0; + } +#endif + +#if (GAME == GAME_SA2) + if (!ip) { + p->rotation = 0; + } +#endif + + p->stoodObj = s; + p->qSpeedAirY = 0; + + if (!GRAVITY_IS_INVERTED) { + y = s->hitboxes[0].b.top; + y += sy; + y -= rectPlayer[3]; + } else { + y = s->hitboxes[0].b.bottom; + y += sy; + y += rectPlayer[3]; + } + y = Q(y); +#ifndef NON_MATCHING + asm("" : "=r"(p->qWorldY) : "r"(~0xFF), "r"(p->qWorldY), "r"(y)); +#else + p->qWorldY = Q_24_8_FRAC(p->qWorldY) + (y); +#endif + } else if (ip && !(p->moveState & MOVESTATE_STOOD_ON_OBJ)) { + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_IN_AIR; + } + + return result; +} +END_NONMATCH + +// TODO: Simplify and merge SA1 and SA2 versions! +#if (GAME == GAME_SA1) +bool32 Coll_Player_Enemy_Attack(Sprite *s, CamCoord sx, CamCoord sy) +#else +bool32 Coll_Player_Enemy_Attack(Sprite *s, CamCoord sx, CamCoord sy, u8 hbIndex) +#endif +{ +#if (GAME == GAME_SA1) + Player *player; + Sprite *sprPlayer; + + bool32 dead; + u32 movestate; + EnemyBase *eb; + s32 i; + const int hbIndex = 0; +#elif (GAME == GAME_SA2) + Player *player = &gPlayer; + Sprite *sprPlayer = &player->spriteInfoBody->s; + + bool32 dead; + u32 movestate; + EnemyBase *eb; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[hbIndex])) { + return FALSE; + } + + eb = TASK_DATA(gCurTask); + dead = player->moveState & MOVESTATE_DEAD; + movestate = player->moveState; +#endif + +#if (GAME == GAME_SA1) + i = 0; + if (!HITBOX_IS_ACTIVE(s->hitboxes[hbIndex])) { + return FALSE; + } + + i = 0; + eb = TASK_DATA(gCurTask); + do { + player = &PLAYER(i); + sprPlayer = &player->spriteInfoBody->s; +#endif + + if (!(player->moveState & MOVESTATE_DEAD)) { + if (IS_MULTI_PLAYER && ((s8)eb->base.me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + return TRUE; + } + +#if (GAME == GAME_SA2) + if (!(player->moveState & MOVESTATE_IN_SCRIPTED)) +#endif + { + if (HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1])) { + if (HB_COLLISION(sx, sy, s->hitboxes[hbIndex].b, I(player->qWorldX), I(player->qWorldY), sprPlayer->hitboxes[1].b)) { + if (IS_MULTI_PLAYER) { + RoomEvent_EnemyDestroy *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_ENEMY_DESTROYED; + roomEvent->x = eb->base.regionX; + roomEvent->y = eb->base.regionY; + roomEvent->id = eb->base.id; + } + +#if (GAME == GAME_SA1) + if (player->qSpeedAirY > 0) { + player->qSpeedAirY = -player->qSpeedAirY; + } +#else + Coll_Player_Enemy_AdjustSpeed(player); +#endif + + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + CreateEnemyDefeatScoreAndManageLives(sx, sy); + + return TRUE; + } + } + + if (HITBOX_IS_ACTIVE(sprPlayer->hitboxes[0]) + && (HB_COLLISION(sx, sy, s->hitboxes[hbIndex].b, I(player->qWorldX), I(player->qWorldY), sprPlayer->hitboxes[0].b))) { +#if (GAME == GAME_SA1) + if (player->itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY) { + if (IS_MULTI_PLAYER) { + RoomEvent_EnemyDestroy *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_ENEMY_DESTROYED; + roomEvent->x = eb->base.regionX; + roomEvent->y = eb->base.regionY; + roomEvent->id = eb->base.id; + } + + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + CreateEnemyDefeatScoreAndManageLives(sx, sy); + + return TRUE; + } else { + Coll_DamagePlayer(player); + } +#elif (GAME == GAME_SA2) + if (!(player->itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + Coll_DamagePlayer(player); + } else { + if (IS_MULTI_PLAYER) { + RoomEvent_EnemyDestroy *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_ENEMY_DESTROYED; + roomEvent->x = eb->base.regionX; + roomEvent->y = eb->base.regionY; + roomEvent->id = eb->base.id; + } + + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + CreateEnemyDefeatScoreAndManageLives(sx, sy); + + return TRUE; + } +#endif + } + } + +#if (GAME == GAME_SA2) + if (gCheese != NULL) { + Cheese *cheese = gCheese; + if (cheese->s.hitboxes[1].index != -1 + && ((HB_COLLISION(sx, sy, s->hitboxes[hbIndex], I(cheese->posX), I(cheese->posY), cheese->s.hitboxes[1])))) { + if (IS_MULTI_PLAYER) { + RoomEvent_EnemyDestroy *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_ENEMY_DESTROYED; + roomEvent->x = eb->base.regionX; + roomEvent->y = eb->base.regionY; + roomEvent->id = eb->base.id; + } + + CreateDustCloud(sx, sy); + CreateTrappedAnimal(sx, sy); + CreateEnemyDefeatScoreAndManageLives(sx, sy); + + return TRUE; + } + } +#endif + } +#if (GAME == GAME_SA1) + } while (++i < gNumSingleplayerCharacters); +#endif + return FALSE; +} + +// TODO: Simplify and merge SA1 and SA2 versions! +bool32 Coll_Player_Projectile(Sprite *s, CamCoord sx, CamCoord sy) +{ + Player *p; + Sprite *sprPlayer; + bool32 result = FALSE; + s32 i; + const s32 hbIndex = 0; + +#if (GAME == GAME_SA1) + if (HITBOX_IS_ACTIVE(s->hitboxes[hbIndex])) +#elif (GAME == GAME_SA2) + if (!(gPlayer.moveState & MOVESTATE_IN_SCRIPTED)) +#endif + { + i = 0; + do { + p = &PLAYER(i); + { + sprPlayer = &p->spriteInfoBody->s; + + if (!IS_ALIVE(p) || !HITBOX_IS_ACTIVE(sprPlayer->hitboxes[hbIndex])) { + continue; + } + + if ((HB_COLLISION(sx, sy, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0].b))) { + Coll_DamagePlayer(p); + result = TRUE; + } + } + } while (++i < gNumSingleplayerCharacters); + } + + return result; +} + +// Based on SA2's: +// u32 Coll_Player_Enemy(Sprite *s, CamCoord sx, CamCoord sy, Player *p) +EHit Coll_Player_Boss(Sprite *s, CamCoord sx, CamCoord sy, Player *p) +{ + PlayerSpriteInfo *psi = p->spriteInfoBody; + Sprite *sprPlayer = &psi->s; +#if (GAME == GAME_SA1) + const int hbIndex = 0; +#endif + + if (HITBOX_IS_ACTIVE(s->hitboxes[0])) { + if (IS_ALIVE(p)) { + if (HITBOX_IS_ACTIVE(sprPlayer->hitboxes[1]) + && HB_COLLISION(sx, sy, s->hitboxes[hbIndex].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[1].b)) { + if (p->character != CHARACTER_AMY) { + p->qSpeedAirX = -p->qSpeedAirX; + p->qSpeedAirY = -p->qSpeedAirY; + } else { + p->qSpeedAirX >>= 1; + p->qSpeedAirY = -p->qSpeedAirY; + } + + return HIT_ENEMY; + } + + if ((HITBOX_IS_ACTIVE(sprPlayer->hitboxes[0]))) { + if (HB_COLLISION(sx, sy, s->hitboxes[hbIndex].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0].b)) { + Coll_DamagePlayer(p); + return HIT_PLAYER; + } + } + } + } + + return FALSE; +} + +// Exclusively used by Boss 1 +EHit Coll_Player_Boss_1(Sprite *s, CamCoord worldX, CamCoord worldY, Player *p) +{ + Sprite *sprPlayer; + + sprPlayer = &p->spriteInfoBody->s; + + if (s->hitboxes[0].index == -1) { + return HIT_NONE; + } + + if (s->hitboxes[1].index == -1) { + return HIT_NONE; + } + + if (!IS_ALIVE(p)) { + return HIT_NONE; + } + + if (sprPlayer->hitboxes[1].index != -1) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0].b)) { + Coll_DamagePlayer(p); + return 2; + } + + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[1].b)) { + if (p->character != CHARACTER_AMY) { + p->qSpeedAirX = -p->qSpeedAirX; + p->qSpeedAirY = -p->qSpeedAirY; + } else { + p->qSpeedAirX = p->qSpeedAirX >> 1; + p->qSpeedAirY = -p->qSpeedAirY; + } + + return HIT_ENEMY; + } + } + + if (sprPlayer->hitboxes[0].index != -1) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0].b)) { + Coll_DamagePlayer(p); + return HIT_PLAYER; + } + } + + return HIT_NONE; +} + +// Exclusively used by Bosses 2 and 6 +EHit Coll_Player_Bosses_2_6(Sprite *s, s16 worldX, s16 worldY, Player *p) +{ + Sprite *sprPlayer = &p->spriteInfoBody->s; + + if (!IS_ALIVE(p)) { + return HIT_NONE; + } + + if ((sprPlayer->hitboxes[1].index != -1) && (s->hitboxes[0].index != -1) && (p->moveState & MOVESTATE_IN_AIR)) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[1].b)) { + if (p->character != CHARACTER_AMY) { + p->qSpeedAirX = -p->qSpeedAirX; + p->qSpeedAirY = -p->qSpeedAirY; + } else { + p->qSpeedAirX = p->qSpeedAirX >> 1; + p->qSpeedAirY = -p->qSpeedAirY; + } + + return HIT_ENEMY; + } + } + + if (sprPlayer->hitboxes[0].index != -1) { + if (s->hitboxes[0].index != -1) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0].b)) { + Coll_DamagePlayer(p); + return HIT_PLAYER; + } + } + + if (s->hitboxes[1].index != -1) { + if (HB_COLLISION(worldX, worldY, s->hitboxes[1].b, I(p->qWorldX), I(p->qWorldY), sprPlayer->hitboxes[0].b)) { + Coll_DamagePlayer(p); + return HIT_PLAYER; + } + } + } + + return HIT_NONE; +} + +// Exclusively used by SA1 Bosses 3, 5, Egg X and throwback bosses +EHit sub_800BF10(Sprite *s, CamCoord screenX, CamCoord screenY, Player *p) +{ + PlayerSpriteInfo *psiBody = p->spriteInfoBody; + Sprite *sprBody = &psiBody->s; + + if (HITBOX_IS_ACTIVE(s->hitboxes[0]) && IS_ALIVE(p) && HITBOX_IS_ACTIVE(sprBody->hitboxes[0])) { + if (HB_COLLISION(screenX, screenY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprBody->hitboxes[0].b)) { + Coll_DamagePlayer(p); + + return HIT_PLAYER; + } + } + + return HIT_NONE; +} + +// Exclusively used by SA1 Bosses 4, 5, Egg Drillster, Extra Boss and called in player.c +EHit sub_800BFEC(Sprite *s, CamCoord screenX, CamCoord screenY, Player *p) +{ + PlayerSpriteInfo *psiBody = p->spriteInfoBody; + Sprite *sprBody = &psiBody->s; + + if (HITBOX_IS_ACTIVE(s->hitboxes[1]) && HITBOX_IS_ACTIVE(sprBody->hitboxes[0]) && IS_ALIVE(p)) { + if (HB_COLLISION(screenX, screenY, s->hitboxes[1].b, I(p->qWorldX), I(p->qWorldY), sprBody->hitboxes[0].b)) { + if (!IS_EXTRA_STAGE(gCurrentLevel)) { + Coll_DamagePlayer(p); + } else { + Coll_DamageSuperSonic(p); + } + return HIT_PLAYER; + } + } + + return HIT_NONE; +} + +// Exclusively used by SA1 Boss 5, Extra Boss and called in player.c +EHit sub_800C0E0(Sprite *s, CamCoord screenX, CamCoord screenY, Player *p) +{ + PlayerSpriteInfo *psiBody = p->spriteInfoBody; + Sprite *sprBody = &psiBody->s; + + if (HITBOX_IS_ACTIVE(s->hitboxes[0]) && HITBOX_IS_ACTIVE(sprBody->hitboxes[1]) && IS_ALIVE(p)) { + if (HB_COLLISION(screenX, screenY, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprBody->hitboxes[1].b)) { + if (!IS_EXTRA_STAGE(gCurrentLevel)) { + if (p->character != CHARACTER_AMY) { + p->qSpeedAirX = -p->qSpeedAirX; + p->qSpeedAirY = -p->qSpeedAirY; + } else { + p->qSpeedAirX >>= 1; + p->qSpeedAirY = -p->qSpeedAirY; + } + } + + return HIT_ENEMY; + } + } + + return HIT_NONE; +} + +// (97.67%) https://decomp.me/scratch/e4jLp +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sub_800C1E8.inc", + u32 sub_800C1E8(Sprite *inSprite, Rect8 rectB, s16 sx, s16 sy, Player *p)) +{ +#ifndef NON_MATCHING + register Sprite *s asm("r4") = inSprite; // NOTE: type isn't certain +#else + Sprite *s = inSprite; // NOTE: type isn't certain +#endif + PlayerSpriteInfo *psi = p->spriteInfoBody; + Sprite *sprBody = &psi->s; + + if (IS_ALIVE(p) && (HITBOX_IS_ACTIVE(sprBody->hitboxes[0]))) { + if (HB_COLLISION(sx, sy, rectB, I(p->qWorldX), I(p->qWorldY), sprBody->hitboxes[0].b)) { + Coll_DamagePlayer(p); + return HIT_PLAYER; + } + } + + asm("" ::"r"(s)); + + return HIT_NONE; +} +END_NONMATCH + +EHit sub_800C2B8(Sprite *s, s16 sx, s16 sy, Player *p) +{ + PlayerSpriteInfo *psi = p->spriteInfoBody; + Sprite *sprBody = &psi->s; + + if (HITBOX_IS_ACTIVE(s->hitboxes[0]) && IS_ALIVE(p) && ((p->timerInvulnerability == 0) && (p->timerInvincibility == 0)) + && (HITBOX_IS_ACTIVE(sprBody->hitboxes[0]))) { + if (HB_COLLISION(sx, sy, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), sprBody->hitboxes[0].b)) { + return 2; + } + } + + return HIT_NONE; +} + +#if (GAME == GAME_SA1) +// TODO: Might be in SA3, too! +u32 sub_800C394(Sprite *s, s16 sx, s16 sy, Player *p) +{ + s8 rectPlayer[4] = { -(p->spriteOffsetX + 5), -(p->spriteOffsetY + 1), +(p->spriteOffsetX + 5), +(p->spriteOffsetY + 1) }; + + u32 result = COLL_NONE; + bool32 ip = FALSE; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[0]) || !IS_ALIVE(p)) { + return FALSE; + } + + if ((((p->moveState & MOVESTATE_JUMPING) == MOVESTATE_JUMPING) && (p->qSpeedAirY > 0) + && HB_COLLISION(sx, sy, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*(struct Rect8 *)rectPlayer))) + || (p->spriteInfoBody->s.hitboxes[1].index != HITBOX_STATE_INACTIVE + && HB_COLLISION(sx, sy, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), p->spriteInfoBody->s.hitboxes[1].b) + && !(p->moveState & (MOVESTATE_JUMPING)))) { + if (p->qSpeedAirY > 0) { + p->qSpeedAirY = -p->qSpeedAirY; + } + return TRUE; + } + + return FALSE; +} +#endif + +bool32 Coll_DamagePlayer(Player *p) +{ + if (p->timerInvincibility > 0 || p->timerInvulnerability > 0) { + return FALSE; + } + + p->timerInvulnerability = PLAYER_INVULNERABLE_DURATION; + + if ((p->qSpeedAirX < 0) || (p->qSpeedAirX == 0 && (p->moveState & MOVESTATE_FACING_LEFT))) { + p->qSpeedAirX = +Q(1.5); + } else { + p->qSpeedAirX = -Q(1.5); + } + + p->qSpeedAirY = -Q(3.0); + + if (p->moveState & MOVESTATE_IN_WATER) { + HALVE(p->qSpeedAirY); + HALVE(p->qSpeedAirX); + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_SPINDASH; + p->moveState &= ~MOVESTATE_100; + + p->charState = 15; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + { +#if !NON_MATCHING && (GAME == GAME_SA1) + u8 *ptr = &p->sa2__unk61; + u32 zero = 0; + asm("strb %0, [%1]" ::"r"(zero), "r"(ptr)); + asm("add %0, #1" : "=r"(ptr)); + asm("strb %0, [%1]" ::"r"(zero), "r"(ptr)); +#else + p->sa2__unk61 = 0; + p->sa2__unk62 = 0; +#endif + } + + if (p->moveState & MOVESTATE_1000000) { + PlayerSpriteInfo *psi; + + p->layer ^= PLAYER_LAYER__MASK; + + if (sa2__sub_8022F58(p->rotation + Q(0.5), p) < 4) { + p->layer ^= PLAYER_LAYER__MASK; + } else { + p->moveState &= ~MOVESTATE_1000000; + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + p->spriteInfoBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + p->spriteInfoBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 2); + } + } + + p->itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + if (p->playerID == 0) { + if (!HAS_SHIELD(p)) { + if (gRingCount != 0) { + RoomEvent_RingLoss *roomEvent; + u32 rings = gRingCount; + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#ifndef NON_MATCHING + register u32 rings2 asm("r0") = rings; +#else + u32 rings2 = rings; +#endif + if (rings > 10) { + rings2 = 10; + } + + rings = rings2; + } + + InitScatteringRings(I(p->qWorldX), I(p->qWorldY), rings); + + if (IS_MULTI_PLAYER) { + RoomEvent_RingLoss *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLAYER_RING_LOSS; + roomEvent->ringCount = rings; + } + + gRingCount -= rings; + } else if (!(gStageFlags & STAGE_FLAG__DEMO_RUNNING)) { + if (gGameMode == 4) { + return TRUE; + } + + if (gGameMode == 5) { + return TRUE; + } + + p->moveState |= MOVESTATE_DEAD; + } + } else { + m4aSongNumStart(SE_LIFE_LOST); + p->itemEffect &= ~(PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC | PLAYER_ITEM_EFFECT__SHIELD_NORMAL); + } + } + + return TRUE; +} + +#if (GAME == GAME_SA1) +// Equivalent to Coll_DamagePlayer. +// Super Sonic isn't "damaged" per se, just thrown back a bit. +bool32 Coll_DamageSuperSonic(Player *p) +{ + if (p->timerInvincibility > 0 || p->timerInvulnerability > 0) { + return HIT_NONE; + } + + p->timerInvulnerability = 30; + p->qSpeedAirX = -Q(3); + p->qSpeedGround = -Q(3); + p->qSpeedAirY = -Q(0); + p->sa2__unk2A = 24; + p->charState = 4; + p->sa2__unk61 = 0; + p->sa2__unk62 = 0; + + m4aSongNumStart(SE_LIFE_LOST); + + return TRUE; +} +#endif // (GAME == GAME_SA1) + +bool32 SA2_LABEL(sub_800DD54)(Player *p) +{ + if (p->timerInvincibility > 0 || p->timerInvulnerability > 0) { + return FALSE; + } + + p->timerInvulnerability = PLAYER_INVULNERABLE_DURATION; + + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedAirX = +Q(1.5); + } else { + p->qSpeedAirX = -Q(1.5); + } + + p->qSpeedAirY = -Q(3.0); + + if (p->moveState & MOVESTATE_IN_WATER) { + HALVE(p->qSpeedAirY); + HALVE(p->qSpeedAirX); + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_SPINDASH; + p->moveState &= ~MOVESTATE_100; + +#if (GAME == GAME_SA1) + p->charState = 15; +#else + p->charState = SA2_CHAR_ANIM_20; +#endif + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + { +#if !NON_MATCHING && (GAME == GAME_SA1) + u8 *ptr = &p->sa2__unk61; + u32 zero = 0; + asm("strb %0, [%1]" ::"r"(zero), "r"(ptr)); + asm("add %0, #1" : "=r"(ptr)); + asm("strb %0, [%1]" ::"r"(zero), "r"(ptr)); +#else + p->sa2__unk61 = 0; + p->sa2__unk62 = 0; +#endif + } + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#ifndef NON_MATCHING + register u32 rings asm("r4") = gRingCount; +#else + u32 rings = gRingCount; +#endif + + if (rings > 10) { + rings = 10; + } + + InitScatteringRings(I(p->qWorldX), I(p->qWorldY), rings); + gRingCount -= rings; + + { + RoomEvent_RingLoss *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLAYER_RING_LOSS; + roomEvent->ringCount = rings; + } + } + + m4aSongNumStart(SE_LIFE_LOST); + + return TRUE; +} + +// TODO: This is close to SA2_LABEL(sub_800DD54). +bool32 SA2_LABEL(sub_800DE44)(Player *p) +{ + if (p->timerInvincibility > 0 || p->timerInvulnerability > 0) { + return FALSE; + } + + p->timerInvulnerability = PLAYER_INVULNERABLE_DURATION; + + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedAirX = -Q(1.5); + } else { + p->qSpeedAirX = +Q(1.5); + } + + p->qSpeedAirY = -Q(3.0); + + if (p->moveState & MOVESTATE_IN_WATER) { + HALVE(p->qSpeedAirY); + HALVE(p->qSpeedAirX); + } + + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_SPINDASH; + p->moveState &= ~MOVESTATE_100; + +#if (GAME == GAME_SA1) + p->charState = 41; +#else + p->charState = SA2_CHAR_ANIM_20; +#endif + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + { +#if !NON_MATCHING && (GAME == GAME_SA1) + u8 *ptr = &p->sa2__unk61; + u32 zero = 0; + asm("strb %0, [%1]" ::"r"(zero), "r"(ptr)); + asm("add %0, #1" : "=r"(ptr)); + asm("strb %0, [%1]" ::"r"(zero), "r"(ptr)); +#else + p->sa2__unk61 = 0; + p->sa2__unk62 = 0; +#endif + } + +#if (GAME == GAME_SA2) + p->transition = 9; +#endif + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#ifndef NON_MATCHING + register u32 rings asm("r4") = gRingCount; +#else + u32 rings = gRingCount; +#endif + + if (rings > 5) { + rings = 5; + } + + InitScatteringRings(I(p->qWorldX), I(p->qWorldY), rings); + gRingCount -= rings; + + { + RoomEvent_RingLoss *roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_PLAYER_RING_LOSS; + roomEvent->ringCount = rings; + } + } + + m4aSongNumStart(SE_LIFE_LOST); + + return TRUE; +} + +#if (GAME == GAME_SA1) + +// INCOMPLETE! +// (92.41%) https://decomp.me/scratch/9c6nz +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sub_800C934.inc", + bool32 sub_800C934(Sprite *s, s32 x, s32 y, Rect8 *rectPlayer, u32 param4, Player *p, u32 *moveState)) +{ + bool16 gravityInverted = GRAVITY_IS_INVERTED; + // bottom = sl +#ifndef NON_MATCHING + register s32 middleY asm("sl") = y + ((s->hitboxes[0].b.top + s->hitboxes[0].b.bottom) >> 1); +#else + s32 middleY = y + ((s->hitboxes[0].b.top + s->hitboxes[0].b.bottom) >> 1); +#endif + + if (!HB_COLLISION(x, y, s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), (*rectPlayer))) { + return FALSE; + } + + if (!gravityInverted) { + if (I(p->qWorldY) > middleY) { + s32 whole = Q(s->hitboxes[0].b.bottom + y - rectPlayer->top); + p->qWorldY = *(u8 *)&p->qWorldY + whole; + asm(""); + } else { + goto test; + } + } else { + if (I(p->qWorldY) >= middleY) { + test: + if (!gravityInverted) { + p->qWorldY = Q_24_8_FRAC(p->qWorldY) + Q(s->hitboxes[0].b.top + y - rectPlayer->bottom); + } else { + p->qWorldY = Q_24_8_FRAC(p->qWorldY) + Q(s->hitboxes[0].b.bottom + y + rectPlayer->bottom); + } + + if (p->qWorldY < Q(gCamera.minY)) { + p->qWorldY = Q(gCamera.minY); + return FALSE; + } + + if (p->qWorldY >= Q(gCamera.maxY)) { + p->qWorldY = Q(gCamera.maxY); + return FALSE; + } + + if (p->qSpeedAirY < 0) { + return FALSE; + } + + rectPlayer->top = -p->spriteOffsetY; + rectPlayer->bottom = +p->spriteOffsetY; + p->qSpeedAirY = Q(0); + + if (!(p->moveState & MOVESTATE_IN_AIR) && (((p->rotation + 0x20) & 0x40) != 0)) { + p->qSpeedGround = Q(0); + } + + p->moveState |= MOVESTATE_STOOD_ON_OBJ; + *moveState |= MOVESTATE_STOOD_ON_OBJ; + + if (p->character == CHARACTER_KNUCKLES) { + if (p->SA2_LABEL(unk61) == 1 || p->SA2_LABEL(unk61) == 3) { + goto lbl; + } + } + if ((p->character != CHARACTER_AMY) || !(p->moveState & 0x04000000) || (p->SA2_LABEL(unk62) == 0)) { + p->moveState &= ~MOVESTATE_IN_AIR; + } + lbl: + p->stoodObj = s; + + if (param4 == 0) { + if (p->character != CHARACTER_KNUCKLES || (p->SA2_LABEL(unk61) != 1 && p->SA2_LABEL(unk61) != 3)) { + SA2_LABEL(sub_8021BE0)(p); + p->qSpeedGround = p->qSpeedAirX; + } + + p->rotation = 0; + } + return 1; + } else { + // 204 + p->qWorldY = Q_24_8_FRAC(p->qWorldY) + Q(s->hitboxes[0].b.top + y + rectPlayer->top); + } + } + + if (p->qWorldY < Q(gCamera.minY)) { + p->qWorldY = Q(gCamera.minY); + return FALSE; + } + + if (p->qWorldY >= Q(gCamera.maxY)) { + p->qWorldY = Q(gCamera.maxY); + return FALSE; + } + + *moveState |= MOVESTATE_10000; + + if (p->qSpeedAirY <= 0) { + p->qSpeedAirY = 0; + + if (!(p->moveState & MOVESTATE_IN_AIR)) { + if ((p->rotation + 0x20) & 0x40) { + p->qSpeedGround = 0; + } + } + + return TRUE; + } + + return FALSE; +} +END_NONMATCH + +// TODO: Check type of x/y! +// INCOMPLETE! +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sub_800CBBC.inc", + bool32 sub_800CBBC(Sprite *s, s32 x, s32 y, Rect8 *rectPlayer, u32 UNUSED param4, Player *p, u32 *param6)) +{ + s32 shbLeft = s->hitboxes[0].b.left; + s32 shbRight = s->hitboxes[0].b.right; + s32 shbMiddleH = (shbLeft + shbRight) >> 1; + + if ((((s32)(p->rotation + 0x20) & 0xC0) >> 6) & 0x1) { + return FALSE; + } + // _0800CC04 + + if (((x + shbLeft) > (I(p->qWorldX) + rectPlayer->left)) && (RECT_RIGHT(I(p->qWorldX), rectPlayer) < shbLeft)) { + return FALSE; + } + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + return FALSE; +} +END_NONMATCH + +#endif // (GAME == GAME_SA1) + +// TODO: This might be an inline. +// Code identical to beginning of sub_800C060 +#if (GAME == GAME_SA1) +u32 Coll_Player_Entity_Intersection(Sprite *s, s16 x, s16 y, Player *p) +#elif (GAME == GAME_SA2) +u32 sub_800DF38(Sprite *s, s32 x, s32 y, Player *p) +#endif +{ + // TODO: Could this match with a 'struct Rect8' instead of s8[4]? + s8 rectPlayer[4] = { -p->spriteOffsetX, -p->spriteOffsetY, +p->spriteOffsetX, +p->spriteOffsetY }; + + return Coll_Player_Entity_RectIntersection(s, x, y, p, (struct Rect8 *)&rectPlayer); +} + +#if (GAME == GAME_SA1) +u32 sub_800CE98(Sprite *s, s16 x, s16 y, Player *p) +{ + // TODO: Could this match with a 'struct Rect8' instead of s8[4]? + s8 rectPlayer[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), +(p->spriteOffsetX + 5), +(p->spriteOffsetY - 1) }; + + return Coll_Player_Entity_RectIntersection(s, x, y, p, (struct Rect8 *)&rectPlayer); +} +#endif diff --git a/sa1/src/game/sa1_sa2_shared/collision_0.c b/sa1/src/game/sa1_sa2_shared/collision_0.c new file mode 100644 index 0000000000..a977195779 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/collision_0.c @@ -0,0 +1,543 @@ +#include "global.h" +#include "rect.h" +#include "sprite.h" +#if (GAME == GAME_SA1) +#include "lib/m4a/m4a.h" +#include "game/multiplayer/mp_player.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" +#include "constants/char_states.h" +#endif +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/dust_cloud.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/sa1_sa2_shared/player.h" + +// TODO: Merge this with collision.c ! +u32 sub_80096B0(Sprite *s, CamCoord x, CamCoord y, Player *p) +{ + s8 rectOffset[4] = { -(p->spriteOffsetX + 5), (1 - p->spriteOffsetY), (p->spriteOffsetX + 5), (p->spriteOffsetY - 1) }; + s8 rectPlayer[4] = { -p->spriteOffsetX, -p->spriteOffsetY, +p->spriteOffsetX, +p->spriteOffsetY }; + u32 result = COLL_NONE; + bool32 playerIsInAir; + bool32 sb = FALSE; + + if (!HITBOX_IS_ACTIVE(s->hitboxes[0]) || !IS_ALIVE(p)) { + return result; + } + + playerIsInAir = p->moveState & MOVESTATE_IN_AIR; + if ((p->moveState & MOVESTATE_STOOD_ON_OBJ) && (p->stoodObj == s)) { + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + playerIsInAir |= MOVESTATE_IN_AIR; + sb = TRUE; + } + + if (!playerIsInAir || !sub_800C934(s, x, y, (Rect8 *)&rectPlayer[0], sb, p, &result)) { + if (!sub_800CBBC(s, x, y, (Rect8 *)&rectOffset, sb, p, &result)) { + if (!sub_800C934(s, x, y, (Rect8 *)&rectPlayer[0], sb, p, &result)) { + if (sb && !(p->moveState & MOVESTATE_STOOD_ON_OBJ)) { + p->moveState &= ~MOVESTATE_20; + p->moveState |= MOVESTATE_IN_AIR; + } + } + } + } + + return result; +} + +#if (GAME == GAME_SA1) +// (75.12%) https://decomp.me/scratch/FhZW1 +NONMATCH("asm/non_matching/game/sa1_sa2_shared/collision__sa2__sub_800D0A0.inc", + u32 SA2_LABEL(sub_800D0A0)(Sprite *s, CamCoord worldX, CamCoord worldY, s16 qSpeedX, s16 qSpeedY, u8 layer, u32 arg6)) +{ + s8 sp4[4] + = { -(gPlayer.spriteOffsetX + 5), (1 - (u8)gPlayer.spriteOffsetY), (+(gPlayer.spriteOffsetX + 5)), (gPlayer.spriteOffsetY - 1) }; + s8 sp8[4] = { -gPlayer.spriteOffsetX, -gPlayer.spriteOffsetY, +gPlayer.spriteOffsetX, +gPlayer.spriteOffsetY }; + s32 sp30 = 0; + s32 sp34 = 0; + s32 sp38; + s32 sp3C; + s32 sp40 = (u16)(0x80 & gStageFlags); + MultiplayerPlayer *mpPlayer = TASK_DATA(gCurTask); + s8 spC[4] = { -(gPlayer.spriteOffsetX + 5), 1 - mpPlayer->unk58[0], +(gPlayer.spriteOffsetX + 5), mpPlayer->unk58[0] - 1 }; + s8 sp10[4] = { + -(gPlayer.spriteOffsetX + 5), + (1 - mpPlayer->unk58[0]), + +(gPlayer.spriteOffsetX + 5), + (mpPlayer->unk58[0] - 1), + }; + + Player *p; + Player *p2; + s16 temp_r1_12; + s16 temp_r1_9; + s16 temp_r2_8; + s16 var_r1_2; + s16 var_r1_3; + s16 var_r2; + s16 var_r2_2; + s32 res; + s32 temp_r0_7; + s32 temp_r1_2; + s32 temp_r1_3; + s32 temp_r1_6; + s32 temp_r1_7; + s32 temp_r2_2; + s32 temp_r2_3; + s32 temp_r2_6; + s32 temp_r3_5; + s32 temp_r3_6; + s32 temp_r3_9; + s32 temp_r5_5; + s32 var_r1; + s8 *temp_r0; + s8 *temp_r0_13; + s8 *temp_r0_16; + s8 *temp_r0_2; + s8 *temp_r0_3; + s8 *temp_r0_5; + s8 *temp_r6_6; + s8 *temp_r6_7; + s8 *temp_r7; + s8 temp_r0_11; + s8 temp_r0_14; + s8 temp_r0_17; + s8 temp_r0_19; + s8 temp_r0_20; + s8 temp_r0_22; + s8 temp_r0_23; + s8 temp_r0_9; + s8 temp_r1; + s8 temp_r2_11; + s8 temp_r2_12; + s8 temp_r2_13; + s8 temp_r2_15; + s8 temp_r2_4; + s8 temp_r2_5; + s8 temp_r2_7; + s8 temp_r2_9; + s8 temp_r3_2; + s8 temp_r3_3; + s8 temp_r3_4; + s8 temp_r5; + s8 temp_r5_3; + s8 temp_r5_4; + s8 temp_r6; + s8 temp_r6_2; + s8 temp_r6_3; + s8 temp_r6_4; + s8 temp_r6_5; + u32 temp_r1_10; + u32 temp_r1_11; + u32 temp_r1_13; + u32 temp_r1_14; + u32 temp_r1_15; + u32 temp_r1_16; + u32 temp_r1_17; + u32 temp_r1_18; + u32 temp_r1_4; + u32 temp_r1_5; + u32 temp_r3_7; + u8 *temp_r0_4; + u8 *temp_r0_6; + u8 *temp_r4; + + if ((s->hitboxes[0].index == -1) || (gPlayer.moveState & 0x80) || ((worldX == I(gPlayer.qWorldX)) && (worldY == I(gPlayer.qWorldY)))) { + return 0; + } + sp38 = gPlayer.qWorldX; + sp3C = gPlayer.qWorldY; + p = &gPlayer; + if (layer != gPlayer.layer) { + return sp30; + } + + if ((8 & gPlayer.moveState) && (gPlayer.stoodObj == s)) { + gPlayer.moveState &= ~8; + sp34 = 1; + } + if (worldY == I(gPlayer.qWorldY)) { + goto block_105; + } + temp_r3_3 = sp10[0]; + temp_r2_2 = worldX + temp_r3_3; + temp_r0_7 = sp38 >> 8; + temp_r6 = sp8[0]; + temp_r1_2 = temp_r0_7 + temp_r6; + if (temp_r2_2 <= temp_r1_2) { + if ((temp_r2_2 + ((&sp10[0])[2] - temp_r3_3)) < temp_r1_2) { + if (temp_r2_2 < temp_r1_2) { + goto block_105; + } + goto block_15; + } + goto block_17; + } +block_15: + if ((temp_r1_2 + ((&sp8[0])[2] - temp_r6)) < temp_r2_2) { + goto block_105; + } +block_17: + temp_r3_4 = (&sp10[0])[1]; + temp_r2_3 = worldY + temp_r3_4; + temp_r6_2 = (&sp8[0])[1]; + temp_r1_3 = I(gPlayer.qWorldY) + temp_r6_2; + if (temp_r2_3 <= temp_r1_3) { + if ((temp_r2_3 + ((&sp10[0])[3] - temp_r3_4)) < temp_r1_3) { + if (temp_r2_3 < temp_r1_3) { + goto block_105; + } + goto block_21; + } + goto block_23; + } +block_21: + if ((temp_r1_3 + ((&sp8[0])[3] - temp_r6_2)) < temp_r2_3) { + goto block_105; + } +block_23: + // if (sp40 == 0) + { + if ((I(gPlayer.qWorldY) > worldY) || ((gPlayer.qSpeedAirY - qSpeedY) < 0)) { + goto block_72; + } + + if (sp40 == 0) { + temp_r3_9 = sp3C + ((((worldY + (&sp10[0])[1]) - (&sp8[0])[3]) << 8) - (gPlayer.qWorldY & 0xFFFFFF00)); + sp3C = temp_r3_9; + res = sa2__sub_801F100((temp_r3_9 >> 8) - gPlayer.spriteOffsetY, temp_r0_7, layer, -8, sa2__sub_801EC3C); + if (res < 0) { + temp_r1_17 = gPlayer.moveState & ~4; + gPlayer.moveState = temp_r1_17; + if (((gPlayer.character != 2) + || ((temp_r0_22 = (s8) * (&gPlayer.character - 0x1C), (temp_r0_22 != 1)) && (temp_r0_22 != 3))) + && ((gPlayer.character != 3) || !(temp_r1_17 & 0x04000000) || (gPlayer.SA2_LABEL(unk62) == 0))) { + gPlayer.moveState &= ~2; + } + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.charState = 4; + goto block_197; + } else { + if (!(gPlayer.moveState & 0x2)) { + sp30 |= MOVESTATE_20; + sp30 &= ~MOVESTATE_4; + } + } + sp30 |= 8; + gPlayer.moveState |= 8; + if (((gPlayer.character != 2) || ((temp_r0_23 = (s8) * (&gPlayer.character - 0x1C), (temp_r0_23 != 1)) && (temp_r0_23 != 3))) + && ((gPlayer.character != 3) || !(gPlayer.moveState & 0x04000000) || (gPlayer.SA2_LABEL(unk62) == 0))) { + gPlayer.moveState &= ~2; + } + gPlayer.stoodObj = s; + gPlayer.qSpeedAirY = 0; + gPlayer.qWorldY = sp3C; + } else { + sp3C += (Q(worldY + sp10[3] - sp8[3]) - (gPlayer.qWorldY & 0xFFFFFF00)); + res = sa2__sub_801F100((sp3C >> 8) + gPlayer.spriteOffsetY, temp_r0_7, layer, 8, sa2__sub_801EC3C); + if (res < 0) { + temp_r1_15 = gPlayer.moveState & ~4; + gPlayer.moveState = temp_r1_15; + temp_r2_12 = gPlayer.character; + if (((temp_r2_12 != 2) || ((temp_r0_19 = (s8) * (&gPlayer.character - 0x1C), (temp_r0_19 != 1)) && (temp_r0_19 != 3))) + && ((temp_r2_12 != 3) || !(temp_r1_15 & 0x04000000) || (gPlayer.SA2_LABEL(unk62) == 0))) { + gPlayer.moveState &= ~2; + } + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.qSpeedAirY = 0; + gPlayer.qWorldY += res << 8; + goto block_197; + } else { + sp30 |= 8; + gPlayer.moveState |= 8; + if (((gPlayer.character != 2) || ((temp_r0_20 = gPlayer.variant, (temp_r0_20 != 1)) && (temp_r0_20 != 3))) + && ((gPlayer.character != 3) || !(gPlayer.moveState & MOVESTATE_4000000) || (gPlayer.SA2_LABEL(unk62) == 0))) { + gPlayer.moveState &= ~2; + } + gPlayer.stoodObj = s; + gPlayer.qSpeedAirY = 0; + gPlayer.qWorldY = sp3C; + if (sp34 != 0) { + goto block_198; + } else { + goto block_70; + } + } + } + } + if ((I(gPlayer.qWorldY) <= worldY) || ((gPlayer.qSpeedAirY + qSpeedY) < 0)) { + if (sp40 == 0) { + block_72: + if ((I(gPlayer.qWorldY) <= worldY) || ((gPlayer.qSpeedAirY - qSpeedY) >= 0)) { + if (sp40 == 0) { + goto block_105; + } + goto block_76; + } + goto block_80; + } + block_76: + if ((I(gPlayer.qWorldY) > worldY) || ((gPlayer.qSpeedAirY + qSpeedY) >= 0)) { + goto block_105; + } + block_80: + if (sp40 == 0) { + res = sa2__sub_801F100(gPlayer.spriteOffsetY + I(gPlayer.qWorldY), temp_r0_7, layer, 8, sa2__sub_801EC3C); + if (res < 0) { + gPlayer.moveState &= ~4; + ; + if (((gPlayer.character != 2) || ((temp_r0_9 = (s8) * (&gPlayer.character - 0x1C), (temp_r0_9 != 1)) && (temp_r0_9 != 3))) + && ((gPlayer.character != 3) || !(gPlayer.moveState & 0x04000000) || (gPlayer.SA2_LABEL(unk62) == 0))) { + gPlayer.moveState &= ~2; + } + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.qSpeedAirY = 0; + gPlayer.qWorldY += Q(res); + } else { + gPlayer.qWorldX = sp38; + gPlayer.qWorldY = sp3C; + } + var_r1 = gPlayer.qSpeedAirY - qSpeedY; + } else { + res = sa2__sub_801F100(I(gPlayer.qWorldY) - gPlayer.spriteOffsetY, temp_r0_7, layer, -8, sa2__sub_801EC3C); + if (res < 0) { + temp_r1_5 = gPlayer.moveState & ~4; + gPlayer.moveState = temp_r1_5; + temp_r2_5 = gPlayer.character; + if (((temp_r2_5 != 2) || ((temp_r0_11 = (s8) * (&gPlayer.character - 0x1C), (temp_r0_11 != 1)) && (temp_r0_11 != 3))) + && ((temp_r2_5 != 3) || !(temp_r1_5 & 0x04000000) || (gPlayer.SA2_LABEL(unk62) == 0))) { + gPlayer.moveState &= ~2; + } + + PLAYERFN_CHANGE_SHIFT_OFFSETS(&gPlayer, 6, 14); + gPlayer.qSpeedAirY = 0; + gPlayer.qWorldY -= Q(res); + } else { + gPlayer.qWorldX = sp38; + gPlayer.qWorldY = sp3C; + } + var_r1 = gPlayer.qSpeedAirY + qSpeedY; + } + p = &gPlayer; + if (var_r1 <= 0) { + sp30 |= 0x10000; + } else { + block_105: + + if (((((p->rotation + 0x20) & 0xC0) >> 6) & 1) == 0) { + if (RECT_COLLISION(worldX, worldY, (Rect8 *)&spC[0], I(gPlayer.qWorldX), I(gPlayer.qWorldY), (Rect8 *)&sp4[0])) { + if (temp_r1_6 <= worldX) { + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + sp30 |= 0x40000; + if (p->SA2_LABEL(unk62) != 0) { + p->qSpeedAirX = 0; + } else { + sp38 = Q((worldX + spC[2]) - (s8)sp4[0]); + if (ABS(p->qSpeedAirX) > Q(4.5)) { + sp30 |= 0x200000; + if (qSpeedX < 0) { + if (arg6 != 0) { + p->qSpeedGround = qSpeedX; + p->qSpeedAirX = qSpeedX; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + p->charState = 4; + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + m4aSongNumStart(0xA1U); + goto block_197; + } else { + p->qSpeedGround = qSpeedX; + p->qSpeedAirX = qSpeedX; + p->qWorldX += 0x100; + m4aSongNumStart(0xA2U); + } + } else { + p->moveState = p->moveState | 2; + p->qSpeedAirX = -Q(1.5); + p->qSpeedAirY = -Q(3.0); + asm(""); + } + } else if (p->qSpeedAirX != 0) { + res = sa2__sub_801F100(I(sp38), I(gPlayer.qWorldY) + p->spriteOffsetX, layer, -8, sa2__sub_801EB44); + if (res < 0) { + p->moveState &= ~4; + temp_r0_16 = &p->character; + temp_r2_11 = *temp_r0_16; + if (((temp_r2_11 != 2) + || ((temp_r0_17 = (s8) * (temp_r0_16 - 0x1C), (temp_r0_17 != 1)) && (temp_r0_17 != 3))) + && ((temp_r2_11 != 3) || !(p->moveState & 0x04000000) || (*temp_r6_7 == 0))) { + gPlayer.moveState &= ~2; + p = &gPlayer; + } + Player_HandleSpriteYOffsetChange(p, 0xE); + p->spriteOffsetX = 6; + p->spriteOffsetY = 0xE; + p->qSpeedAirX = 0; + p->qWorldX -= res << 8; + } else { + temp_r1_14 = p->moveState; + if (!(2 & temp_r1_14)) { + p->moveState = (temp_r1_14 | 0x20) & ~4; + sp30 = (sp30 | 0x20) & ~4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + p->charState = CHARSTATE_14; + } + p->moveState &= ~1; + sp30 &= ~1; + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + p->qWorldX = sp38; + p->qWorldY = sp3C; + } + } + } + } else { + sp30 |= 0x40000; + if (p->SA2_LABEL(unk62) != 0) { + p->qSpeedAirX = 0; + } else { + if (ABS(qSpeedX) > Q(4.5)) { + sp30 |= 0x200000; + if (qSpeedX < 0) { + if (arg6 != 0) { + p->qSpeedGround = qSpeedX; + p->qSpeedAirX = qSpeedX; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + p->charState = 4; + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + m4aSongNumStart(0xA1U); + } else { + SA2_LABEL(sub_800DE44)(p); + m4aSongNumStart(0xA2U); + } + } else { + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + } + } + } + } + } else { + if (p->moveState & 0x1) { + sp30 |= 0x20000; + if (gPlayer.SA2_LABEL(unk62) != 0) { + p->qSpeedAirX = 0; + } else { + sp38 = ((worldX + spC[2]) - sp4[2]) << 8; + if (ABS(p->qSpeedAirX) > Q(4.5)) { + sp30 |= 0x200000; + if ((qSpeedX << 0x10) < 0) { + if (arg6 != 0) { + p->qSpeedGround = qSpeedX; + p->qSpeedAirX = qSpeedX; + Player_HandleSpriteYOffsetChange(p, 0xE); + p->spriteOffsetX = 6; + p->spriteOffsetY = 0xE; + p->charState = 4; + p->SA2_LABEL(unk61) = 0; + gPlayer.SA2_LABEL(unk62) = 0; + m4aSongNumStart(0xA1U); + goto block_197; + } + p->qSpeedGround = qSpeedX; + p->qSpeedAirX = qSpeedX; + p->qWorldX -= Q(1); + m4aSongNumStart(0xA2U); + } else { + p->moveState = temp_r3_7 | 2; + p->qSpeedAirX = Q(1.5); + p->qSpeedAirY = -Q(3.0); + } + } else if (p->qSpeedAirX != 0) { + res = sa2__sub_801F100(sp38 >> 8, p->spriteOffsetX + I(gPlayer.qWorldY), layer, +8, sa2__sub_801EB44); + if (res < 0) { + temp_r1_10 = p->moveState & ~4; + p->moveState = temp_r1_10; + temp_r0_13 = &p->character; + temp_r2_9 = *temp_r0_13; + if (((p->character != 2) || (((p->SA2_LABEL(unk61) != 1)) && (p->SA2_LABEL(unk61) != 3))) + && ((p->character != 3) || !(temp_r1_10 & 0x04000000) + || (p2 = p, (gPlayer.SA2_LABEL(unk62) == 0)))) { + gPlayer.moveState &= ~2; + } + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + gPlayer.qSpeedAirX = 0; + gPlayer.qWorldX += Q(res); + } else { + temp_r1_11 = p->moveState; + if (!(2 & temp_r1_11)) { + p->moveState = (temp_r1_11 | 0x20) & ~4; + sp30 = (sp30 | 0x20) & ~4; + p->charState = CHARSTATE_14; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + p->moveState |= 1; + sp30 |= 1; + p->qSpeedGround = temp_r6_5; + p->qSpeedAirX = temp_r6_5; + p->qWorldX = sp38 + 0x100; + p->qWorldY = sp3C; + } + } + } + } else { + p->moveState = p->moveState | 0x20000; + temp_r7 = &p->SA2_LABEL(unk62); + temp_r6_4 = *temp_r7; + if (temp_r6_4 != 0) { + p->qSpeedAirX = 0; + } else { + if (ABS(qSpeedX) > 0x480) { + sp30 |= 0x200000; + if (qSpeedX > 0) { + if (arg6 != 0) { + p->qSpeedGround = qSpeedX; + p->qSpeedAirX = qSpeedX; + Player_HandleSpriteYOffsetChange(p, 0xE); + p->spriteOffsetX = 6; + p->spriteOffsetY = 0xE; + p->charState = 4; + p->SA2_LABEL(unk61) = temp_r6_4; + *temp_r7 = temp_r6_4; + m4aSongNumStart(0xA1U); + goto block_197; + } + SA2_LABEL(sub_800DE44)(p); + m4aSongNumStart(0xA2U); + } else { + p->qSpeedGround = temp_r6_4; + p->qSpeedAirX = temp_r6_4; + } + } + } + } + } + } + } + } + } + goto block_197; + + if (sp34 == 0) { + block_70: + sa2__sub_8021BE0(&gPlayer); + gPlayer.qSpeedGround = (u16)gPlayer.qSpeedAirX; + gPlayer.rotation = 0; + } + +block_197: + if (sp34 != 0) { + block_198: + if (!(8 & gPlayer.moveState)) { + gPlayer.moveState = (gPlayer.moveState & ~0x20) | 2; + } + } + return sp30; +} +END_NONMATCH +#endif // (GAME == GAME_SA1) \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/demo_manager.c b/sa1/src/game/sa1_sa2_shared/demo_manager.c new file mode 100644 index 0000000000..381872a023 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/demo_manager.c @@ -0,0 +1,299 @@ +#include // memcpy + +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "sprite.h" +#include "task.h" + +#include "lib/m4a/m4a.h" + +#include "game/sa1_sa2_shared/demo_manager.h" +#include "game/sa1_sa2_shared/player.h" + +// TODO: add headers for these into sa1_sa2_shared +// instead of including from the main game +#include "game/save.h" +#include "game/title_screen.h" + +#include "constants/animations.h" + +#if (GAME == GAME_SA1) +#define DEMO_SPRITE_PRIO 1 +#define DEMO_OAM_ORDER 15 +#define DEMO_PLAYBACK_TIME TIME(0, 30) +#elif (GAME == GAME_SA2) +#define DEMO_SPRITE_PRIO 0 +#define DEMO_OAM_ORDER 1 +#define DEMO_PLAYBACK_TIME TIME(0, 24.5) +#endif + +typedef struct { + /* 0x00 */ Sprite textPressStart; + /* 0x30 */ Sprite textDemoPlay; + /* 0x60 */ u16 fadeBlendFactor; + /* 0x62 */ u16 tFadeout; + /* 0x64 */ bool8 playerPressedStart; + /* 0x65 */ bool8 timeLimitDisabled; +} DemoManager; + +typedef struct { + /* 0x00 */ u16 volume; + /* 0x02 */ u16 unk2; +} DemoMusicFadeout; + +void Task_DemoManagerMain(void); +void Task_DemoManagerFadeout(void); +void CreateMusicFadeoutTask(u16); +void TaskDestructor_DemoManagerMain(struct Task *); +void Task_DemoManagerMusicFadeout(void); + +void CreateDemoManager(void) +{ + u8 blendCtrl; + s8 lang; + struct Task *t; + DemoManager *dm; + Sprite *s; +#if (GAME == GAME_SA1) +#ifndef NON_MATCHING + const AnimId arr[2]; + memcpy(&arr, gPressStartTiles, sizeof(arr)); +#else + const AnimId arr[2] = { gPressStartTiles[0], gPressStartTiles[1] }; +#endif +#endif + blendCtrl = gBldRegs.bldCnt & 0xC0; +#if (GAME == GAME_SA2) + lang = LOADED_SAVE->language; +#endif + t = TaskCreate(Task_DemoManagerMain, sizeof(DemoManager), 1, 0, TaskDestructor_DemoManagerMain); + dm = TASK_DATA(t); + + dm->fadeBlendFactor = 0; + dm->tFadeout = 0; + dm->playerPressedStart = FALSE; + dm->timeLimitDisabled = LOADED_SAVE->timeLimitDisabled; + + gStageFlags |= STAGE_FLAG__DEMO_RUNNING; + + s = &dm->textPressStart; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y + 33; + +#if (GAME == GAME_SA1) + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PRESS_START_MSG_JP); + s->graphics.size = 0; + s->graphics.anim = arr[LOADED_SAVE->uiLanguage]; + s->variant = 0; +#elif (GAME == GAME_SA2) + s->graphics.dest = VramMalloc(gPressStartTiles[lang].numTiles); + s->graphics.size = 0; + s->graphics.anim = gPressStartTiles[lang].anim; + s->variant = gPressStartTiles[lang].variant; +#endif + + s->animCursor = 0; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->oamFlags = SPRITE_OAM_ORDER(DEMO_OAM_ORDER); + s->frameFlags = SPRITE_FLAG(PRIORITY, DEMO_SPRITE_PRIO); + + if (blendCtrl != BLDCNT_EFFECT_BLEND) { + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, ST_OAM_OBJ_BLEND); + } + UpdateSpriteAnimation(s); + + s = &dm->textDemoPlay; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + +#if (GAME == GAME_SA1) + s->graphics.dest = ALLOC_TILES(SA1_ANIM_DEMO_PLAY); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_DEMO_PLAY; + s->variant = 0; +#elif (GAME == GAME_SA2) + s->graphics.dest = ALLOC_TILES(ANIM_DEMO_PLAY); + s->graphics.size = 0; + s->graphics.anim = ANIM_DEMO_PLAY; + s->variant = 0; +#endif + + s->animCursor = 0; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + s->palId = 0; + s->oamFlags = SPRITE_OAM_ORDER(DEMO_OAM_ORDER); + s->frameFlags = SPRITE_FLAG(PRIORITY, DEMO_SPRITE_PRIO); + + if (blendCtrl != BLDCNT_EFFECT_BLEND) { + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, ST_OAM_OBJ_BLEND); + } + UpdateSpriteAnimation(s); +} + +void Task_DemoManagerMain(void) +{ + DemoManager *dm = TASK_DATA(gCurTask); + + if (gPhysicalInput & START_BUTTON) { + gPlayer.moveState |= MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput = 0; + + gDestroySpotlights = 1; + + dm->playerPressedStart = TRUE; + + gCurTask->main = Task_DemoManagerFadeout; + + gBldRegs.bldCnt = (BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_ALL); + gBldRegs.bldY = 0; + + gMusicManagerState.unk0 = 0xFF; +#if (GAME == GAME_SA1) + m4aMPlayFadeOut(&gMPlayInfo_BGM, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 4); +#elif (GAME == GAME_SA2) + CreateMusicFadeoutTask(64); +#endif + } else if (gCheckpointTime > (u32)DEMO_PLAYBACK_TIME) { + dm->playerPressedStart = FALSE; + + gCurTask->main = Task_DemoManagerFadeout; + + gBldRegs.bldCnt = (BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_ALL); + gBldRegs.bldY = 0; + + gMusicManagerState.unk0 = 0xFF; +#if (GAME == GAME_SA1) + m4aMPlayFadeOut(&gMPlayInfo_BGM, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 4); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 4); +#elif (GAME == GAME_SA2) + CreateMusicFadeoutTask(64); +#endif + } + +#if (GAME == GAME_SA2) + if (!(gStageFlags & STAGE_FLAG__100)) +#endif + { + Sprite *s = &dm->textPressStart; + +#if (GAME == GAME_SA1) + if (gCheckpointTime & 0x20) +#elif (GAME == GAME_SA2) + if (gStageTime & 0x20) +#endif + { + if (gBldRegs.bldY != 0) { + s->frameFlags |= SPRITE_FLAG(OBJ_MODE, ST_OAM_OBJ_BLEND); + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_OBJ_MODE; + } + +#if (GAME == GAME_SA2) + UpdateSpriteAnimation(s); +#endif + DisplaySprite(s); + } + + if (gBldRegs.bldY != 0) { + dm->textDemoPlay.frameFlags |= SPRITE_FLAG(OBJ_MODE, ST_OAM_OBJ_BLEND); + } else { + dm->textDemoPlay.frameFlags &= ~SPRITE_FLAG_MASK_OBJ_MODE; + } + + DisplaySprite(&dm->textDemoPlay); + } +} + +void Task_DemoManagerEndFadeout(void) +{ + DemoManager *dm = TASK_DATA(gCurTask); + dm->tFadeout++; + +#if (GAME == GAME_SA2) + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0); + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, 0); + m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, 0); + m4aMPlayVolumeControl(&gMPlayInfo_SE3, 0xFFFF, 0); +#endif + + if (dm->tFadeout >= 48) { + LOADED_SAVE->timeLimitDisabled = dm->timeLimitDisabled; + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + +#if (GAME == GAME_SA1) + if (!dm->playerPressedStart) { + CreateSegaLogo(); + } else { + CreateTitleScreen(TITLESCREEN_PARAM__PLAY_MUSIC); + } +#elif (GAME == GAME_SA2) + if (!dm->playerPressedStart) { + CreateTitleScreen(); + } else { + CreateTitleScreenAtPlayModeMenu(); + } +#endif + } +} + +void Task_DemoManagerFadeout(void) +{ + DemoManager *dm = TASK_DATA(gCurTask); + dm->fadeBlendFactor += Q(0.25); + + gBldRegs.bldY = dm->fadeBlendFactor >> 8; + + if (dm->fadeBlendFactor >= Q(16.0)) { + gCurTask->main = Task_DemoManagerEndFadeout; + } +} + +void TaskDestructor_DemoManagerMain(struct Task *t) +{ + DemoManager *dm = TASK_DATA(t); + VramFree(dm->textPressStart.graphics.dest); + VramFree(dm->textDemoPlay.graphics.dest); + + gDestroySpotlights = 0; + gStageFlags &= ~STAGE_FLAG__DEMO_RUNNING; +} + +#if (GAME == GAME_SA2) +void CreateMusicFadeoutTask(u16 factor) +{ + struct Task *t = TaskCreate(Task_DemoManagerMusicFadeout, sizeof(DemoMusicFadeout), 0xFFFE, 0, NULL); + DemoMusicFadeout *mf = TASK_DATA(t); + mf->volume = 0x100; + mf->unk2 = (s32)mf->volume / factor; + gMusicManagerState.unk0 = 0xFF; +} + +void Task_DemoManagerMusicFadeout(void) +{ + DemoMusicFadeout *mf = TASK_DATA(gCurTask); + + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, mf->volume); + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFF, mf->volume); + m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, mf->volume); + m4aMPlayVolumeControl(&gMPlayInfo_SE3, 0xFFFF, mf->volume); + + mf->volume -= mf->unk2; + if ((s16)mf->volume < 0) { + mf->volume = 0; + } +} +#endif diff --git a/sa1/src/game/sa1_sa2_shared/dust_cloud.c b/sa1/src/game/sa1_sa2_shared/dust_cloud.c new file mode 100644 index 0000000000..f449c9a6de --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/dust_cloud.c @@ -0,0 +1,55 @@ +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "game/stage/camera.h" + +#include "constants/animations.h" + +static void Task_DustCloud(void); + +// Create cloud that appears when defeating enemies / opening item boxes +void CreateDustCloud(s16 x, s16 y) +{ + struct Task *t = TaskCreate(Task_DustCloud, sizeof(Sprite), 0x2000, 0, NULL); + Sprite *s = TASK_DATA(t); + + s->x = x; + s->y = y; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x1000); + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_DUST_CLOUD; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +static void Task_DustCloud(void) +{ + Sprite *s = TASK_DATA(gCurTask); + s16 oldX, oldY; + + oldX = s->x; + oldY = s->y; + + s->x -= gCamera.x; + s->y -= gCamera.y; + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + DisplaySprite(s); + TaskDestroy(gCurTask); +#ifdef BUG_FIX + // Without this return, we essentially have a "use-after-free". + return; +#endif + } + + DisplaySprite(s); + + s->x = oldX; + s->y = oldY; +} \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/enemy_defeat_score.c b/sa1/src/game/sa1_sa2_shared/enemy_defeat_score.c new file mode 100644 index 0000000000..d39bab61c9 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/enemy_defeat_score.c @@ -0,0 +1,101 @@ +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "malloc_vram.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" + +#include "constants/animations.h" + +void Task_CreateEnemyDefeatScore_MoveUp(void); +void Task_CreateEnemyDefeatScore_Hold(void); +void TaskDestructor_CreateEnemyDefeatScore(struct Task *); + +typedef struct { + Sprite s; + s16 deltaY; +} EnemyDefeatScore; + +void CreateEnemyDefeatScore(s16 x, s16 y) +{ + struct Task *t + = TaskCreate(Task_CreateEnemyDefeatScore_MoveUp, sizeof(EnemyDefeatScore), 0x2000, 0, TaskDestructor_CreateEnemyDefeatScore); + EnemyDefeatScore *score = TASK_DATA(t); + Sprite *s = &score->s; + + score->deltaY = 0; + score->s.x = x; + score->s.y = y; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SCORE); + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SCORE; + s->variant = gPlayer.defeatScoreIndex; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + UpdateSpriteAnimation(s); +} + +void Task_CreateEnemyDefeatScore_MoveUp(void) +{ + EnemyDefeatScore *score = TASK_DATA(gCurTask); + Sprite *s = &score->s; + + s16 scoreX = s->x; + s16 scoreY = s->y; + + score->deltaY++; + + s->x -= gCamera.x; + s->y -= gCamera.y + score->deltaY; + + if (score->deltaY >= 60) { + gCurTask->main = Task_CreateEnemyDefeatScore_Hold; + + DisplaySprite(s); + s->x = scoreX; + s->y = scoreY - score->deltaY; + score->deltaY = 0; + } else { + DisplaySprite(s); + s->x = scoreX; + s->y = scoreY; + } +} + +void Task_CreateEnemyDefeatScore_Hold(void) +{ + EnemyDefeatScore *score = TASK_DATA(gCurTask); + Sprite *s = &score->s; + + s16 scoreX = s->x; + s16 scoreY = s->y; + + s->x -= gCamera.x; + s->y -= gCamera.y; + + score->deltaY++; + + if (score->deltaY > 30) { + TaskDestroy(gCurTask); + } else { + s->x = scoreX - gCamera.x; + s->y = scoreY - gCamera.y; + DisplaySprite(s); + s->x = scoreX; + s->y = scoreY; + } +} + +void TaskDestructor_CreateEnemyDefeatScore(struct Task *t) +{ + EnemyDefeatScore *score = TASK_DATA(t); + + VramFree(score->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/entities_manager.c b/sa1/src/game/sa1_sa2_shared/entities_manager.c new file mode 100644 index 0000000000..df300b497a --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/entities_manager.c @@ -0,0 +1,1377 @@ +#include "core.h" +#include "task.h" + +#include "malloc_ewram.h" +#include "malloc_vram.h" + +#include "lib/m4a/m4a.h" + +#include "game/sa1_sa2_shared/camera.h" +#include "game/entity.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/sa1_sa2_shared/itembox.h" + +#if (GAME == GAME_SA2) + +#include "game/sa1_sa2_shared/interactables/platform_thin.h" +#include "game/sa1_sa2_shared/interactables/ceiling_slope.h" +#include "game/sa1_sa2_shared/interactables/grind_rail.h" +#include "game/sa1_sa2_shared/interactables/platform_square.h" +#include "game/sa1_sa2_shared/interactables/platform.h" +#include "game/sa1_sa2_shared/interactables/ramp.h" +#include "game/sa1_sa2_shared/interactables/slidy_ice.h" +#include "game/sa1_sa2_shared/interactables/spring.h" +#include "game/sa1_sa2_shared/interactables/pipe.h" + +#include "game/interactables_1/windmill.h" +#include "game/interactables_1/checkpoint.h" +#include "game/interactables_1/gapped_loop.h" +#include "game/interactables_1/stage_goal.h" +#include "game/interactables_1/corkscrew.h" +#include "game/interactables_1/corkscrew_3d.h" +#include "game/interactables_1/incline_ramp.h" +#include "game/interactables_1/toggle_player_layer.h" +#include "game/interactables_1/bouncy_bar.h" +#include "game/interactables_1/spring_bouncy.h" +#include "game/interactables_1/rotating_handle.h" +#include "game/interactables_1/platform_crumbling.h" +#include "game/interactables_1/spikes.h" +#include "game/interactables_1/booster.h" +#include "game/interactables_1/decoration.h" + +#include "game/interactables_2/hot_crater/crane.h" +#include "game/interactables_2/hot_crater/dash_ring.h" +#include "game/interactables_2/hot_crater/windup_stick.h" +#include "game/interactables_2/hot_crater/floating_spring.h" +#include "game/interactables_2/hot_crater/turnaround_bar.h" +#include "game/interactables_2/hot_crater/hook_rail.h" + +#include "game/interactables_2/music_plant/note_sphere.h" +#include "game/interactables_2/music_plant/pipe_horn.h" +#include "game/interactables_2/music_plant/keyboard.h" +#include "game/interactables_2/music_plant/note_block.h" +#include "game/interactables_2/music_plant/guitar_string.h" +#include "game/interactables_2/music_plant/german_flute.h" + +#include "game/interactables_2/ice_paradise/big_snowball.h" +#include "game/interactables_2/ice_paradise/funnel_sphere.h" +#include "game/interactables_2/ice_paradise/half_pipe.h" +#include "game/interactables_2/ice_paradise/slowing_snow.h" + +#include "game/interactables_2/sky_canyon/propeller.h" +#include "game/interactables_2/sky_canyon/fan.h" +#include "game/interactables_2/sky_canyon/small_windmill.h" +#include "game/interactables_2/sky_canyon/whirlwind.h" +#include "game/interactables_2/sky_canyon/propeller_spring.h" + +#include "game/interactables_2/techno_base/light_globe.h" +#include "game/interactables_2/techno_base/light_bridge.h" +#include "game/interactables_2/techno_base/arrow_platform.h" +#include "game/interactables_2/techno_base/spike_platform.h" +#include "game/interactables_2/techno_base/bounce_block.h" + +#include "game/interactables_2/egg_utopia/pole.h" +#include "game/interactables_2/egg_utopia/flying_handle.h" +#include "game/interactables_2/egg_utopia/gravity_toggle.h" +#include "game/interactables_2/egg_utopia/cannon.h" +#include "game/interactables_2/egg_utopia/iron_ball.h" +#include "game/interactables_2/egg_utopia/speeding_platform.h" +#include "game/interactables_2/egg_utopia/launcher.h" + +#include "game/interactables_2/note_particle.h" +#include "game/interactables_2/105.h" +#include "game/interactables_2/special_ring.h" +#include "game/interactables_2/notification_ring_bonus.h" +#include "game/interactables_2/sky_canyon_init.h" + +#include "game/mystery_itembox.h" + +#include "game/enemies/kiki.h" +#include "game/enemies/kura_kura.h" +#include "game/enemies/flickey.h" +#include "game/enemies/kubinaga.h" +#include "game/enemies/hammerhead.h" +#include "game/enemies/bullet_buzzer.h" +#include "game/enemies/circus.h" +#include "game/enemies/yado.h" +#include "game/enemies/pen.h" +#include "game/enemies/gohla.h" +#include "game/enemies/bell.h" +#include "game/enemies/straw.h" +#include "game/enemies/kyura.h" +#include "game/enemies/balloon.h" +#include "game/enemies/mouse.h" +#include "game/enemies/koura.h" +#include "game/enemies/madillo.h" +#include "game/enemies/piko_piko.h" +#include "game/enemies/geji_geji.h" +#include "game/enemies/star.h" +#include "game/enemies/mon.h" +#include "game/enemies/buzzer.h" +#include "game/enemies/spinner.h" + +#include "game/assets/compressed/entities.h" +#endif + +#include "constants/songs.h" +#include "constants/zones.h" + +// Unknown task +extern void CreateEnemyDefeatScore(s16, s16); + +typedef struct Task *(*StagePreInitFunc)(void); +typedef void (*MapEntityInit)(MapEntity *, u16, u16, u8); + +struct Range { + CamCoord xLow, yLow; + CamCoord xHigh, yHigh; +}; + +struct Ranges { + struct Range a; + struct Range b; +}; + +void SA2_LABEL(Task_8008DCC)(void); +void SpawnMapEntities(); + +void SA2_LABEL(TaskDestructor_80095FC)(struct Task *); + +#define READ_START_INDEX(p, hrc, rx, ry) (*((u32 *)((((u8 *)(p)) + (((hrc) * (ry)) * (sizeof(u32)))) + ((rx) * (sizeof(u32)))))) + +#if (GAME == GAME_SA1) +extern const RLCompressed *const gSpritePosData_interactables[NUM_LEVEL_IDS]; +extern const RLCompressed *const gSpritePosData_itemboxes[NUM_LEVEL_IDS]; +extern const RLCompressed *const gSpritePosData_enemies[NUM_LEVEL_IDS]; + +extern void CreateEntity_StageGoal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_HidingUp(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_HidingDown(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Checkpoint(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Normal_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Normal_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Small_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Small_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Decoration(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_GrindRail_Start(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_GrindRail_End(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PlatformThin(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PlatformThin_Falling(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Trampoline(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PlatformCrumbling(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BounceBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_InclineRamp(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Waterfall(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_HalfPipeStart(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_HalfPipeEnd(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Shrubbery(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Booster(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Booster_SlightLeft(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Booster_SlightRight(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Interactable034(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MiniLoop_Base(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MiniLoop_StartBoost(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MiniLoop_Exit(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MiniLoop_Entrance(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Interactable039(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_WaterBridge(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_ToBeContinuedText(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_RedFlag(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_WaterBridgeSplash(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_WallPole_Left(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_WallPole_Right(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_ForcedSlide(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Booster_Wall(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BumperHexagon(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BumperRound_LinearMov(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BumperRound_CircularMov(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BumperTriHorizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BumperTriVertical(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BumperTriBig(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Flipper(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Platform_Square(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Flipper_Vertical(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BarrelOfDoomMini(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SegaSonicLetter(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PartyBalloon(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_ShipSwing(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Platform_Spiked(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Bowl(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PanelGate_Vertical(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PanelGate_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MarbleTrack_Dir(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MarbleTrack_Pipe(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MarbleTrack_Entrance(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MarbleTrack_Exit(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_ConveyorBelt(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Toggle_PlayerVisibility(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_WallBumper(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_TeleportOrb(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Flipper_SmallBlue(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Carousel(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_HookRail(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SwingingHook(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SecurityGate(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SwingRope(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SteamExhaust(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_CraneClaw(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MovingSpring(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_IronBall(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_HangBar(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SkatingStone(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Platform_SlowDescent(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_RunWheel(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Torch(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Lift(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Platform089(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Toggle_PlayerFloat(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_FerrisWheel(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BoulderSpawner(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SpikedBarrel(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_AirBubbles(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_IceBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Interactable096(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Interactable097(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_UnderwaterLavaPlatform(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_ConveyorBeltObject(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Booster_Steep(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Booster_Steep2(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SpecialSpring(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Propeller(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SmallFallBlock(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Lava(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Track(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Interactable107(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Hiding(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_ToggleGravity(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PipeEntrance(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PipeExit(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_TrackAirCorner(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Interactable113(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_BreakableWall(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MysteryItemBox(MapEntity *me, u16 regionX, u16 regionY, u8 id); + +const MapEntityInit gSpriteInits_Interactables[116] = { + /* 000 */ CreateEntity_StageGoal, + /* 001 */ CreateEntity_Spikes_Up, + /* 002 */ CreateEntity_Spikes_Down, + /* 003 */ CreateEntity_Spikes_Horizontal, // Left + /* 004 */ CreateEntity_Spikes_Horizontal, // Right + /* 005 */ CreateEntity_Spikes_HidingUp, + /* 006 */ CreateEntity_Spikes_HidingDown, + /* 007 */ CreateEntity_Checkpoint, + /* 008 */ CreateEntity_Spring_Normal_Up, + /* 009 */ CreateEntity_Spring_Normal_Down, + /* 010 */ CreateEntity_Spring_Horizontal, // Left + /* 011 */ CreateEntity_Spring_Horizontal, // Right + /* 012 */ CreateEntity_Spring_Big_Up, // Up-Left + /* 013 */ CreateEntity_Spring_Big_Up, // Up-Right + /* 014 */ CreateEntity_Spring_Small_Up, // Up-Left + /* 015 */ CreateEntity_Spring_Small_Up, // Up-Right + /* 016 */ CreateEntity_Decoration, + /* 017 */ CreateEntity_Toggle_PlayerLayer, + /* 018 */ CreateEntity_Toggle_PlayerLayer, + /* 019 */ CreateEntity_GrindRail_Start, + /* 020 */ CreateEntity_GrindRail_End, + /* 021 */ CreateEntity_PlatformThin, + /* 022 */ CreateEntity_PlatformThin_Falling, + /* 023 */ CreateEntity_Trampoline, + /* 024 */ CreateEntity_PlatformCrumbling, + /* 025 */ CreateEntity_BounceBlock, + /* 026 */ CreateEntity_InclineRamp, + /* 027 */ CreateEntity_Waterfall, // Only particles, used for "Sand Falls", too. + /* 028 */ CreateEntity_HalfPipeStart, + /* 029 */ CreateEntity_HalfPipeEnd, + /* 030 */ CreateEntity_Shrubbery, + /* 031 */ CreateEntity_Booster, + /* 032 */ CreateEntity_Booster_SlightLeft, + /* 033 */ CreateEntity_Booster_SlightRight, + /* 034 */ CreateEntity_Interactable034, + /* 035 */ CreateEntity_MiniLoop_Base, + /* 036 */ CreateEntity_MiniLoop_StartBoost, + /* 037 */ CreateEntity_MiniLoop_Exit, + /* 038 */ CreateEntity_MiniLoop_Entrance, + /* 039 */ CreateEntity_Interactable039, + /* 040 */ CreateEntity_WaterBridge, + /* 041 */ CreateEntity_ToBeContinuedText, + /* 042 */ CreateEntity_RedFlag, + /* 043 */ CreateEntity_WaterBridgeSplash, + /* 044 */ CreateEntity_WallPole_Left, + /* 045 */ CreateEntity_WallPole_Right, + /* 046 */ CreateEntity_ForcedSlide, + /* 047 */ CreateEntity_Booster_Wall, + /* 048 */ CreateEntity_BumperHexagon, + /* 049 */ CreateEntity_BumperRound_LinearMov, + /* 050 */ CreateEntity_BumperRound_CircularMov, + /* 051 */ CreateEntity_BumperTriHorizontal, + /* 052 */ CreateEntity_BumperTriVertical, + /* 053 */ CreateEntity_BumperTriBig, + /* 054 */ CreateEntity_Flipper, + /* 055 */ CreateEntity_Platform_Square, + /* 056 */ CreateEntity_Flipper_Vertical, + /* 057 */ CreateEntity_BarrelOfDoomMini, + /* 058 */ CreateEntity_SegaSonicLetter, + /* 059 */ CreateEntity_PartyBalloon, + /* 060 */ CreateEntity_ShipSwing, + /* 061 */ CreateEntity_Platform_Spiked, + /* 062 */ CreateEntity_Bowl, + /* 063 */ CreateEntity_PanelGate_Vertical, + /* 064 */ CreateEntity_PanelGate_Horizontal, + /* 065 */ CreateEntity_MarbleTrack_Dir, + /* 066 */ CreateEntity_MarbleTrack_Pipe, + /* 067 */ CreateEntity_MarbleTrack_Entrance, + /* 068 */ CreateEntity_MarbleTrack_Exit, + /* 069 */ CreateEntity_ConveyorBelt, // 069 Also used for snow in Ice Paradise + /* 070 */ CreateEntity_Toggle_PlayerVisibility, // data[0]: 0 = Visible, 1 = Invisible + /* 071 */ CreateEntity_WallBumper, + /* 072 */ CreateEntity_TeleportOrb, // Casino Paradise + /* 073 */ CreateEntity_Flipper_SmallBlue, + /* 074 */ CreateEntity_Carousel, + /* 075 */ CreateEntity_HookRail, + /* 076 */ CreateEntity_SwingingHook, + /* 077 */ CreateEntity_SecurityGate, + /* 078 */ CreateEntity_SwingRope, + /* 079 */ CreateEntity_SteamExhaust, + /* 080 */ CreateEntity_CraneClaw, + /* 081 */ CreateEntity_MovingSpring, // 081 Moving Spring + /* 082 */ CreateEntity_IronBall, + /* 083 */ CreateEntity_HangBar, + /* 084 */ CreateEntity_SkatingStone, + /* 085 */ CreateEntity_Platform_SlowDescent, + /* 086 */ CreateEntity_RunWheel, + /* 087 */ CreateEntity_Torch, // Cosmic Angel: Antigravity field elements + /* 088 */ CreateEntity_Lift, + /* 089 */ CreateEntity_Platform089, + /* 090 */ CreateEntity_Toggle_PlayerFloat, // data[0]: 0 = Whirlwind, 1 = Antigravity + /* 091 */ CreateEntity_FerrisWheel, + /* 092 */ CreateEntity_BoulderSpawner, + /* 093 */ CreateEntity_SpikedBarrel, + /* 094 */ CreateEntity_AirBubbles, + /* 095 */ CreateEntity_IceBlock, + /* 096 */ CreateEntity_Interactable096, + /* 097 */ CreateEntity_Interactable097, + /* 098 */ CreateEntity_UnderwaterLavaPlatform, + /* 099 */ CreateEntity_ConveyorBeltObject, + /* 100 */ CreateEntity_Booster_Steep, + /* 101 */ CreateEntity_Booster_Steep2, + /* 102 */ CreateEntity_SpecialSpring, + /* 103 */ CreateEntity_Propeller, + /* 104 */ CreateEntity_SmallFallBlock, // 104 (X-Zone) + /* 105 */ CreateEntity_Lava, + /* 106 */ CreateEntity_Track, + /* 107 */ CreateEntity_Interactable107, + /* 108 */ CreateEntity_Spring_Hiding, + /* 109 */ CreateEntity_ToggleGravity, + /* 110 */ CreateEntity_PipeEntrance, + /* 111 */ CreateEntity_PipeExit, + /* 112 */ CreateEntity_TrackAirCorner, + /* 113 */ CreateEntity_Interactable113, + /* 114 */ CreateEntity_BreakableWall, + /* 115 */ CreateEntity_MysteryItemBox, +}; + +extern void CreateEntity_Kiki(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Buzzer(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_GamiGami(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Rhinotank(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_KeroKero(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Senbon(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Tentou(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Fireball(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Hanabii(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Slot(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Pierrot(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Leon(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Mirror(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Wamu(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Oct(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Mole(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Yukimaru(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Yukimaru_Wall(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Drisame(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Kuraa(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PenMk1(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggHammerTank_Intro(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggHammerTank(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggPress(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggBall(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggSpider(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MechaKnuckles(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggSnake(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggWrecker(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggDrillster(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_EggX(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_SuperEggRobot(MapEntity *me, u16 regionX, u16 regionY, u8 id); + +const MapEntityInit gSpriteInits_Enemies[32] = { + /* 000 */ CreateEntity_Kiki, + /* 001 */ CreateEntity_Buzzer, + /* 002 */ CreateEntity_GamiGami, + /* 003 */ CreateEntity_Rhinotank, + /* 004 */ CreateEntity_KeroKero, + /* 005 */ CreateEntity_Senbon, + /* 006 */ CreateEntity_Tentou, + /* 007 */ CreateEntity_Fireball, + /* 008 */ CreateEntity_Hanabii, + /* 009 */ CreateEntity_Slot, + /* 010 */ CreateEntity_Pierrot, + /* 011 */ CreateEntity_Leon, + /* 012 */ CreateEntity_Mirror, + /* 013 */ CreateEntity_Wamu, + /* 014 */ CreateEntity_Oct, + /* 015 */ CreateEntity_Mole, + /* 016 */ CreateEntity_Yukimaru, + /* 017 */ CreateEntity_Yukimaru_Wall, + /* 018 */ CreateEntity_Drisame, + /* 019 */ CreateEntity_Kuraa, + /* 020 */ CreateEntity_PenMk1, + + // Bosses + /* 021 */ CreateEntity_EggHammerTank_Intro, + /* 022 */ CreateEntity_EggHammerTank, + /* 023 */ CreateEntity_EggPress, + /* 024 */ CreateEntity_EggBall, + /* 025 */ CreateEntity_EggSpider, + /* 026 */ CreateEntity_MechaKnuckles, + /* 027 */ CreateEntity_EggSnake, + /* 028 */ CreateEntity_EggWrecker, + /* 029 */ CreateEntity_EggDrillster, + /* 030 */ CreateEntity_EggX, + /* 031 */ CreateEntity_SuperEggRobot, +}; + +#define NUM_ENEMY_DEFEAT_SCORES 5 +const u16 enemyDefeatScores[NUM_ENEMY_DEFEAT_SCORES] = { + 100, 200, 400, 800, 1000, +}; + +extern void CreateEntity_Spikes_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spikes_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Normal_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Normal_Down(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Horizontal(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Spring_Big_Up(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_Toggle_PlayerLayer(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PlatformThin(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_PlatformThin_Falling(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_WaterBridge(MapEntity *me, u16 regionX, u16 regionY, u8 id); +extern void CreateEntity_MysteryItemBox(MapEntity *me, u16 regionX, u16 regionY, u8 id); + +// Used for the Single Pak, "Collect Rings" stage +const MapEntityInit gSpriteInits_InteractablesMultiplayer[] = { + /* 000 */ CreateEntity_Spikes_Up, + /* 001 */ CreateEntity_Spikes_Down, + /* 002 */ CreateEntity_Spikes_Horizontal, + /* 003 */ CreateEntity_Spikes_Horizontal, + /* 004 */ CreateEntity_Spikes_Up, + /* 005 */ CreateEntity_Spikes_Down, + /* 006 */ CreateEntity_Spring_Normal_Up, + /* 007 */ CreateEntity_Spring_Normal_Down, + /* 008 */ CreateEntity_Spring_Horizontal, + /* 009 */ CreateEntity_Spring_Horizontal, + /* 010 */ CreateEntity_Spring_Big_Up, + /* 011 */ CreateEntity_Spring_Big_Up, + /* 012 */ CreateEntity_Toggle_PlayerLayer, + /* 013 */ CreateEntity_Toggle_PlayerLayer, + /* 014 */ CreateEntity_PlatformThin, + /* 015 */ CreateEntity_PlatformThin_Falling, + /* 016 */ CreateEntity_WaterBridge, + /* 017 */ CreateEntity_MysteryItemBox, +}; + +// TODO: Is this not in SA1? +// extern const StagePreInitFunc gSpriteTileInits_PreStageEntry[NUM_LEVEL_IDS]; +#elif (GAME == GAME_SA2) +const RLCompressed *const gSpritePosData_interactables[NUM_LEVEL_IDS] = { + (void *)&zone1_act1_interactables, + (void *)&zone1_act2_interactables, + (void *)&zone1_boss_interactables, + (void *)&zone1_act2_interactables, + + (void *)&zone2_act1_interactables, + (void *)&zone2_act2_interactables, + (void *)&zone2_boss_interactables, + (void *)&zone2_act2_interactables, + + (void *)&zone3_act1_interactables, + (void *)&zone3_act2_interactables, + (void *)&zone3_boss_interactables, + (void *)&zone3_act2_interactables, + + (void *)&zone4_act1_interactables, + (void *)&zone4_act2_interactables, + (void *)&zone4_boss_interactables, + (void *)&zone4_act2_interactables, + + (void *)&zone5_act1_interactables, + (void *)&zone5_act2_interactables, + (void *)&zone5_boss_interactables, + (void *)&zone5_act2_interactables, + + (void *)&zone6_act1_interactables, + (void *)&zone6_act2_interactables, + (void *)&zone6_boss_interactables, + (void *)&zone6_act2_interactables, + + (void *)&zone7_act1_interactables, + (void *)&zone7_act2_interactables, + (void *)&zone7_boss_interactables, + (void *)&zone7_act2_interactables, + + (void *)&zone8_act1_interactables, + (void *)&zone8_act2_interactables, + (void *)&zone8_boss_interactables, + NULL, + NULL, + NULL, +}; + +const RLCompressed *const gSpritePosData_itemboxes[] = { + (void *)&zone1_act1_itemboxes, + (void *)&zone1_act2_itemboxes, + (void *)&zone1_boss_itemboxes, + (void *)&zone1_act2_itemboxes, + + (void *)&zone2_act1_itemboxes, + (void *)&zone2_act2_itemboxes, + (void *)&zone2_boss_itemboxes, + (void *)&zone2_act2_itemboxes, + + (void *)&zone3_act1_itemboxes, + (void *)&zone3_act2_itemboxes, + (void *)&zone3_boss_itemboxes, + (void *)&zone3_act2_itemboxes, + + (void *)&zone4_act1_itemboxes, + (void *)&zone4_act2_itemboxes, + (void *)&zone4_boss_itemboxes, + (void *)&zone4_act2_itemboxes, + + (void *)&zone5_act1_itemboxes, + (void *)&zone5_act2_itemboxes, + (void *)&zone5_boss_itemboxes, + (void *)&zone5_act2_itemboxes, + + (void *)&zone6_act1_itemboxes, + (void *)&zone6_act2_itemboxes, + (void *)&zone6_boss_itemboxes, + (void *)&zone6_act2_itemboxes, + + (void *)&zone7_act1_itemboxes, + (void *)&zone7_act2_itemboxes, + (void *)&zone7_boss_itemboxes, + (void *)&zone7_act2_itemboxes, + + (void *)&zone8_act1_itemboxes, + (void *)&zone8_act2_itemboxes, + (void *)&zone8_boss_itemboxes, + NULL, + NULL, + NULL, +}; +const RLCompressed *const gSpritePosData_enemies[] = { + (void *)&zone1_act1_enemies, + (void *)&zone1_act2_enemies, + (void *)&zone1_boss_enemies, + (void *)&zone1_act2_enemies, + + (void *)&zone2_act1_enemies, + (void *)&zone2_act2_enemies, + (void *)&zone2_boss_enemies, + (void *)&zone2_act2_enemies, + + (void *)&zone3_act1_enemies, + (void *)&zone3_act2_enemies, + (void *)&zone3_boss_enemies, + (void *)&zone3_act2_enemies, + + (void *)&zone4_act1_enemies, + (void *)&zone4_act2_enemies, + (void *)&zone4_boss_enemies, + (void *)&zone4_act2_enemies, + + (void *)&zone5_act1_enemies, + (void *)&zone5_act2_enemies, + (void *)&zone5_boss_enemies, + (void *)&zone5_act2_enemies, + + (void *)&zone6_act1_enemies, + (void *)&zone6_act2_enemies, + (void *)&zone6_boss_enemies, + (void *)&zone6_act2_enemies, + + (void *)&zone7_act1_enemies, + (void *)&zone7_act2_enemies, + (void *)&zone7_boss_enemies, + (void *)&zone7_act2_enemies, + + (void *)&zone8_act1_enemies, + (void *)&zone8_act2_enemies, + (void *)&zone8_boss_enemies, + NULL, + NULL, + NULL, +}; + +const MapEntityInit gSpriteInits_Interactables[] = { + CreateEntity_Toggle_PlayerLayer, + CreateEntity_Toggle_PlayerLayer, + CreateEntity_Platform, + CreateEntity_Spring_Normal_Up, + CreateEntity_Spring_Normal_Down, + CreateEntity_Spring_Normal_Right, + CreateEntity_Spring_Normal_Left, + CreateEntity_Spring_Big_UpLeft, + CreateEntity_Spring_Big_UpRight, + CreateEntity_Spring_Big_DownRight, + CreateEntity_Spring_Big_DownLeft, + CreateEntity_Spring_Small_UpRight, + CreateEntity_Spring_Small_UpLeft, + CreateEntity_PlatformThin, + CreateEntity_Decoration, + CreateEntity_Ramp, + CreateEntity_Booster, + CreateEntity_InclineRamp, + CreateEntity_BouncySpring, + CreateEntity_PlatformCrumbling, + CreateEntity_RotatingHandle, + CreateEntity_GappedLoop_Start, + CreateEntity_GappedLoop_End, + CreateEntity_Spikes_Up, + CreateEntity_Spikes_Down, + CreateEntity_Spikes_LeftRight, + CreateEntity_Spikes_LeftRight, + CreateEntity_Spikes_HidingUp, + CreateEntity_Spikes_HidingDown, + CreateEntity_Corkscrew_Start, + CreateEntity_Corkscrew_End, + CreateEntity_BouncyBar, + CreateEntity_GrindRail_Start, + CreateEntity_GrindRail_StartAir, + CreateEntity_GrindRail_EndGround, + CreateEntity_GrindRail_End_ForcedJump, + CreateEntity_GrindRail_EndAlternate, + CreateEntity_GrindRail_EndAir, + CreateEntity_GrindRail_EndGround_Left, + CreateEntity_GrindRail_EndAir_Left, + CreateEntity_Corkscrew3D_Start, + CreateEntity_Corkscrew3D_End, + CreateEntity_StageGoal, + CreateEntity_Checkpoint, + CreateEntity_CeilingSlope, + CreateEntity_Toggle_Checkpoint, + CreateEntity_Toggle_StageGoal, + CreateEntity_WindUpStick, + CreateEntity_HookRail_Unused, + CreateEntity_HookRail_Start, + CreateEntity_HookRail_End, + CreateEntity_Windmill, + CreateEntity_TurnAroundBar, + CreateEntity_Crane, + CreateEntity_DashRing, + CreateEntity_FloatingSpring_Up, + CreateEntity_Note_Sphere, + CreateEntity_Note_Block, + CreateEntity_GuitarString, + CreateEntity_Keyboard_Vertical, + CreateEntity_Keyboard_Horizontal_PushLeft, + CreateEntity_Keyboard_Horizontal_PushRight, + CreateEntity_GermanFlute, + CreateEntity_FrenchHorn_Entry, + CreateEntity_PipeInstrument_Entry, + CreateEntity_SlowingSnow, + CreateEntity_FunnelSphere, + CreateEntity_HalfPipe_End, + CreateEntity_HalfPipe_Start, + CreateEntity_BigSnowball, + CreateEntity_NoteBlock, + CreateEntity_CeilingSlope, + CreateEntity_Pipe_Start, + CreateEntity_Pipe_End, + CreateEntity_LightBridge, + CreateEntity_ArrowPlatform_Left, + CreateEntity_ArrowPlatform_Right, + CreateEntity_ArrowPlatform_Up, + CreateEntity_SpikePlatform, + CreateEntity_FallingPlatform, + CreateEntity_LightGlobe, + CreateEntity_Platform_Square, + CreateEntity_Propeller, + CreateEntity_SlidyIce, + CreateEntity_SmallWindmill, + CreateEntity_PropellerSpring, + CreateEntity_Whirlwind_A, + CreateEntity_Fan_Left, + CreateEntity_Fan_Right, + CreateEntity_Fan_Left_Periodic, + CreateEntity_Fan_Right_Periodic, + CreateEntity_Launcher_Left_GDown, + CreateEntity_Launcher_Right_GDown, + CreateEntity_Cannon, + CreateEntity_Pole, + CreateEntity_IronBall, + CreateEntity_FlyingHandle, + CreateEntity_SpeedingPlatform, + CreateEntity_Toggle_Gravity__Down, + CreateEntity_Toggle_Gravity__Up, + CreateEntity_Toggle_Gravity__Toggle, + CreateEntity_Launcher_Left_GUp, + CreateEntity_Launcher_Right_GUp, + CreateEntity_SpecialRing, + CreateEntity_Whirlwind_B, + CreateEntity_Interactable105, +}; + +const MapEntityInit gSpriteInits_Enemies[] = { + CreateEntity_Mon, CreateEntity_Kiki, CreateEntity_Buzzer, CreateEntity_Gohla, CreateEntity_KuraKura, + CreateEntity_Kubinaga, CreateEntity_PikoPiko, CreateEntity_Bell, CreateEntity_Yado, CreateEntity_Circus, + CreateEntity_Koura, CreateEntity_Madillo, CreateEntity_Straw, CreateEntity_Hammerhead, CreateEntity_Spinner, + CreateEntity_Mouse, CreateEntity_Pen, CreateEntity_GejiGeji, CreateEntity_Balloon, CreateEntity_Flickey, + CreateEntity_Kyura, CreateEntity_Star, CreateEntity_BulletBuzzer, +}; + +#define NUM_ENEMY_DEFEAT_SCORES 5 +const u16 enemyDefeatScores[NUM_ENEMY_DEFEAT_SCORES] = { + 100, 200, 400, 800, 1000, +}; + +const MapEntityInit gSpriteInits_InteractablesMultiplayer[] = { + CreateEntity_Toggle_PlayerLayer, + CreateEntity_Toggle_PlayerLayer, + CreateEntity_Spring_Normal_Up, + CreateEntity_Spring_Normal_Down, + CreateEntity_Spring_Normal_Right, + CreateEntity_Spring_Normal_Left, + CreateEntity_Spring_Big_UpLeft, + CreateEntity_Spring_Big_UpRight, + CreateEntity_Spring_Big_DownLeft, + CreateEntity_Spring_Big_DownRight, + CreateEntity_Spring_Small_UpLeft, + CreateEntity_Spring_Small_UpRight, + CreateEntity_Ramp, + CreateEntity_Spikes_Up, + CreateEntity_Spikes_Up, + CreateEntity_Spikes_Up, + CreateEntity_Spikes_Up, + CreateEntity_Spikes_Up, + CreateEntity_Spikes_Up, + CreateEntity_GrindRail_Start, + CreateEntity_GrindRail_StartAir, + CreateEntity_GrindRail_EndGround, + CreateEntity_GrindRail_End_ForcedJump, + CreateEntity_GrindRail_EndAlternate, + CreateEntity_GrindRail_EndAir, + CreateEntity_GrindRail_EndGround_Left, + CreateEntity_GrindRail_EndAir_Left, + CreateEntity_MysteryItemBox, + CreateEntity_MultiplayerTeleport, +}; + +const StagePreInitFunc gSpriteTileInits_PreStageEntry[] = { + NULL, NULL, NULL, NULL, // Leaf Forest + NULL, NULL, NULL, NULL, // Hot Crater + NULL, NULL, NULL, NULL, // Music Plant + NULL, NULL, NULL, NULL, // Ice Paradise + sub_80807CC, sub_80807CC, NULL, NULL, // Sky Canyon + NULL, NULL, NULL, NULL, // Techno Base + NULL, NULL, NULL, NULL, // Egg Utopia + NULL, NULL, NULL, NULL, // Final Zone + NULL, NULL, +}; +#endif + +void CreateStageEntitiesManager(void) +{ + void *decompBuf; + struct Task *t; + EntitiesManager *em; + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + t = TaskCreate(SA2_LABEL(Task_8008DCC), sizeof(EntitiesManager), 0x2000, 0, SA2_LABEL(TaskDestructor_80095FC)); + } else { + t = TaskCreate(SA2_LABEL(Task_8008DCC), sizeof(EntitiesManager), 0x2000, 0, NULL); + } + + em = TASK_DATA(t); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + decompBuf = EwramMalloc(gSpritePosData_interactables[gCurrentLevel]->size); + RLUnCompWram(gSpritePosData_interactables[gCurrentLevel], decompBuf); + em->interactables = decompBuf; + + decompBuf = EwramMalloc(gSpritePosData_itemboxes[gCurrentLevel]->size); + RLUnCompWram(gSpritePosData_itemboxes[gCurrentLevel], decompBuf); + em->items = decompBuf; + + decompBuf = EwramMalloc(gSpritePosData_enemies[gCurrentLevel]->size); + RLUnCompWram(gSpritePosData_enemies[gCurrentLevel], decompBuf); + em->enemies = decompBuf; + +#if (GAME == GAME_SA2) + em->preInit = NULL; + + if (gSpriteTileInits_PreStageEntry[gCurrentLevel]) { + em->preInit = gSpriteTileInits_PreStageEntry[gCurrentLevel](); + } +#endif + } else { + decompBuf = (void *)EWRAM_START + 0x3F000; + RLUnCompWram(*(void **)((void *)EWRAM_START + 0x3300C), decompBuf); + em->interactables = decompBuf; + } + + em->prevCamX = gCamera.x; + em->prevCamY = gCamera.y; + em->SA2_LABEL(unk14) = 1; + gEntitiesManagerTask = t; +} + +// NOTE: Not aligned with SA2, matches there. +// (94.91%) https://decomp.me/scratch/88ibj +NONMATCH("asm/non_matching/game/sa1_sa2_shared/ent_manager__SpawnMapEntities.inc", void SpawnMapEntities()) +{ +// Required to be here to help the stack match +#ifndef NON_MATCHING + u32 temp, space; +#endif + + if ((gStageFlags & 2) == 0) { + u32 i; + u16 regionX, regionY; + struct Range rangeData; + struct Range *range; + u32 h_regionCount, v_regionCount; + + EntitiesManager *em = TASK_DATA(gCurTask); + u32 *interactables; + u32 *itemBoxPositions; + u32 *enemyPositions; + + interactables = (u32 *)em->interactables; + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + enemyPositions = em->enemies->offsets; + itemBoxPositions = em->items->offsets; + } + + interactables++; +#ifndef NON_MATCHING + h_regionCount = (u16)(temp = *interactables++); +#else + h_regionCount = (u16)*interactables++; +#endif + v_regionCount = (u16)*interactables++; + + range = &rangeData; + range->xLow = gCamera.x - 128; + range->xHigh = gCamera.x + (DISPLAY_WIDTH + 128); + + range->yLow = gCamera.y - 128; + range->yHigh = gCamera.y + (DISPLAY_HEIGHT + 128); + + if (range->xLow < 0) { + range->xLow = 0; + } + if (range->yLow < 0) { + range->yLow = 0; + } + if (range->xHigh < 0) { + range->xHigh = 0; + } + if (range->yHigh < 0) { + range->yHigh = 0; + } + + if ((u32)range->xLow >= Q(h_regionCount)) { + range->xLow = Q(h_regionCount) - 1; + } + if ((u32)range->yLow >= Q(v_regionCount)) { + range->yLow = Q(v_regionCount) - 1; + } + + if ((u32)range->xHigh >= Q(h_regionCount)) { + range->xHigh = Q(h_regionCount) - 1; + } + + if ((u32)range->yHigh >= Q(v_regionCount)) { + range->yHigh = Q(v_regionCount) - 1; + } + + regionY = I(range->yLow); + while (Q(regionY) < range->yHigh && regionY < v_regionCount) { + regionX = I(range->xLow); + while (Q(regionX) < range->xHigh && regionX < h_regionCount) { + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)interactables + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= range->xLow && x <= range->xHigh && y >= range->yLow && y <= range->yHigh) { + gSpriteInits_Interactables[me->index](me, regionX, regionY, i); + } + } + } + } + + i = READ_START_INDEX(itemBoxPositions, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity_Itembox *me = ((void *)itemBoxPositions + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= range->xLow && x <= range->xHigh && y >= range->yLow && y <= range->yHigh) { + CreateEntity_ItemBox((void *)me, regionX, regionY, i); + } + } + } + } + + i = READ_START_INDEX(enemyPositions, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)enemyPositions + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= range->xLow && x <= range->xHigh && y >= range->yLow && y <= range->yHigh) { + gSpriteInits_Enemies[me->index](me, regionX, regionY, i); + } + } + } + } + } else { + i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)interactables + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= range->xLow && x <= range->xHigh && y >= range->yLow && y <= range->yHigh) { + gSpriteInits_InteractablesMultiplayer[me->index](me, regionX, regionY, i); + } + } + } + } + } + regionX++; + } + regionY++; + } + em->prevCamX = gCamera.x; + em->prevCamY = gCamera.y; + em->SA2_LABEL(unk14) = 0; + gCurTask->main = SA2_LABEL(Task_8008DCC); + } +} +END_NONMATCH + +#if (GAME == GAME_SA1) +// (89.13%) https://decomp.me/scratch/pvPFD +NONMATCH("asm/non_matching/game/sa1_sa2_shared/ent_manager__Task_8008DCC.inc", void SA2_LABEL(Task_8008DCC)(void)) +#else +void SA2_LABEL(Task_8008DCC)(void) +#endif +{ +#ifndef NON_MATCHING + struct Range *newRange2Ptr; +#endif + if (!(gStageFlags & 2)) { + u32 i; + + u16 regionX, regionY; + +#if (GAME == GAME_SA1) + // This matches more in SA1, but not at all in SA2, and vice versa. + struct Ranges ranges; + +#define RANGE1 ranges.a +#define RANGE2 ranges.b +#elif (GAME == GAME_SA2) + struct Range range1; + struct Range range2; + +#define RANGE1 range1 +#define RANGE2 range2 +#endif + + u32 h_regionCount, v_regionCount; + + EntitiesManager *em = TASK_DATA(gCurTask); + u32 temp, temp2, temp3, temp4; + u32 *interactables; + u32 *itemBoxPositions; + u32 *enemyPositions; + + if (em->SA2_LABEL(unk14) != 0) { + SpawnMapEntities(); + return; + } + if (ABS(gCamera.x - em->prevCamX) > 248) { + SpawnMapEntities(); + return; + } + if (ABS(gCamera.y - em->prevCamY) > 208) { + SpawnMapEntities(); + return; + } + + interactables = (u32 *)em->interactables; + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + enemyPositions = em->enemies->offsets; + itemBoxPositions = em->items->offsets; + } + + interactables++; + h_regionCount = (u16)*interactables++; + v_regionCount = (u16)*interactables++; + + if (gCamera.x > em->prevCamX) { + RANGE1.xLow = em->prevCamX + (DISPLAY_WIDTH + 128); + RANGE1.xHigh = gCamera.x + (DISPLAY_WIDTH + 128); + +#if TAS_TESTING && TAS_TESTING_WIDESCREEN_HACK && DISPLAY_WIDTH > 240 + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_3) { + // HACK: in zone 3 the TAS we are using depends on going so far off the screen + // that some IAs do not spawn and so it gets to skip them. We have to emulate + // that behaviour so that we can test the TAS in widescreen + RANGE1.xLow = em->prevCamX + (426 + 45); + RANGE1.xHigh = gCamera.x + (426 + 45); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_2)) { + // In this stage there is a pen which initialises earlier + // than the TAS expects, so this limits that + RANGE1.xLow = em->prevCamX + (426 + 80); + RANGE1.xHigh = gCamera.x + (426 + 80); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_5, ACT_1)) { + // In this stage there are some birds which initialise early + RANGE1.xLow = em->prevCamX + (240 + 128); + RANGE1.xHigh = gCamera.x + (240 + 128); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) { + // In this stage some robot bird thing jumps too early + RANGE1.xLow = em->prevCamX + (426 + 35); + RANGE1.xHigh = gCamera.x + (426 + 35); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_1)) { + // Some spike thing generates too early + RANGE1.xLow = em->prevCamX + (426 + 35); + RANGE1.xHigh = gCamera.x + (426 + 35); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_2)) { + // A grind rail generates too early + RANGE1.xLow = em->prevCamX + (426 + 40); + RANGE1.xHigh = gCamera.x + (426 + 40); + } +#endif + } else { + RANGE1.xLow = gCamera.x - 128; + RANGE1.xHigh = em->prevCamX - 128; + } + + if (em->SA2_LABEL(unk14) != 0) { + SpawnMapEntities(); + return; + } + + RANGE1.yLow = gCamera.y - 128; + RANGE1.yHigh = gCamera.y + (DISPLAY_HEIGHT + 128); + + if (gCamera.y > em->prevCamY) { + RANGE2.yLow = em->prevCamY + (DISPLAY_HEIGHT + 128); + RANGE2.yHigh = gCamera.y + (DISPLAY_HEIGHT + 128); + } else { + RANGE2.yLow = gCamera.y - 128; + RANGE2.yHigh = em->prevCamY - 128; + } + + RANGE2.xLow = gCamera.x - 128; + RANGE2.xHigh = gCamera.x + (DISPLAY_WIDTH + 128); +#if TAS_TESTING && TAS_TESTING_WIDESCREEN_HACK && DISPLAY_WIDTH > 240 + if (LEVEL_TO_ZONE(gCurrentLevel) == ZONE_3) { + RANGE2.xHigh = gCamera.x + (426 + 45); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_2)) { + RANGE2.xHigh = gCamera.x + (426 + 80); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_5, ACT_1)) { + RANGE2.xHigh = gCamera.x + (240 + 128); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) { + RANGE2.xHigh = gCamera.x + (426 + 35); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_1)) { + RANGE2.xHigh = gCamera.x + (426 + 35); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_2)) { + RANGE2.xHigh = gCamera.x + (426 + 40); + } +#endif + + if (RANGE1.xLow < 0) { + RANGE1.xLow = 0; + } + if (RANGE1.yLow < 0) { + RANGE1.yLow = 0; + } + if (RANGE1.xHigh < 0) { + RANGE1.xHigh = 0; + } + + if (RANGE1.yHigh < 0) { + RANGE1.yHigh = 0; + } + + temp2 = RANGE1.xLow; + temp = Q(h_regionCount); + if (temp2 >= temp) { + RANGE1.xLow = temp - 1; + } + + temp3 = RANGE1.yLow; + temp4 = Q(v_regionCount); + + if (temp3 >= temp4) { + RANGE1.yLow = temp4 - 1; + } + + if (RANGE1.xHigh >= temp) { + RANGE1.xHigh = temp - 1; + } + + if (RANGE1.yHigh >= temp4) { + RANGE1.yHigh = temp4 - 1; + } + + if (RANGE2.xLow < 0) { + RANGE2.xLow = 0; + } + + if (RANGE2.yLow < 0) { + RANGE2.yLow = 0; + } + + if (RANGE2.xHigh < 0) { + RANGE2.xHigh = 0; + } + + if (RANGE2.yHigh < 0) { + RANGE2.yHigh = 0; + } + + if (RANGE2.xLow >= temp) { + RANGE2.xLow = temp - 1; + } + + if (RANGE2.yLow >= temp4) { + RANGE2.yLow = temp4 - 1; + } + + if (RANGE2.xHigh >= temp) { + RANGE2.xHigh = temp - 1; + } + + if (RANGE2.yHigh >= temp4) { + RANGE2.yHigh = temp4 - 1; + } + + // Hack to fix a stack mismatch, must be placed here +#ifndef NON_MATCHING + newRange2Ptr = &RANGE2; +#endif + + if (gCamera.x != em->prevCamX && RANGE1.xLow != RANGE1.xHigh && RANGE1.yLow != RANGE1.yHigh) { + regionY = I(RANGE1.yLow); + + while (Q(regionY) < RANGE1.yHigh && regionY < v_regionCount) { + regionX = I(RANGE1.xLow); + while (Q(regionX) < RANGE1.xHigh && regionX < h_regionCount) { + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)interactables + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE1.xLow && x <= RANGE1.xHigh && y >= RANGE1.yLow && y <= RANGE1.yHigh) { + gSpriteInits_Interactables[me->index](me, regionX, regionY, i); + } + } + } + } + + i = READ_START_INDEX(itemBoxPositions, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity_Itembox *me = ((void *)itemBoxPositions + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE1.xLow && x <= RANGE1.xHigh && y >= RANGE1.yLow && y <= RANGE1.yHigh) { + CreateEntity_ItemBox((MapEntity *)me, regionX, regionY, i); + } + } + } + } + + i = READ_START_INDEX(enemyPositions, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)enemyPositions + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE1.xLow && x <= RANGE1.xHigh && y >= RANGE1.yLow && y <= RANGE1.yHigh) { + gSpriteInits_Enemies[me->index](me, regionX, regionY, i); + } + } + } + } + } else { + i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)interactables + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE1.xLow && x <= RANGE1.xHigh && y >= RANGE1.yLow && y <= RANGE1.yHigh) { + gSpriteInits_InteractablesMultiplayer[me->index](me, regionX, regionY, i); + } + } + } + } + } + regionX++; + } + regionY++; + } + } + +#ifndef NON_MATCHING + if (((gCamera.y != em->prevCamY) && ((*newRange2Ptr).yLow != (*newRange2Ptr).yHigh)) && (RANGE2.xLow != (*newRange2Ptr).xHigh)) { + regionY = I((*newRange2Ptr).yLow); + while (Q(regionY) < (*newRange2Ptr).yHigh && regionY < v_regionCount) { +#else + if (((gCamera.y != em->prevCamY) && (RANGE2.yLow != RANGE2.yHigh)) && (RANGE2.xLow != RANGE2.xHigh)) { + regionY = I(RANGE2.yLow); + while (Q(regionY) < RANGE2.yHigh && regionY < v_regionCount) { +#endif + regionX = I(RANGE2.xLow); + while (Q(regionX) < RANGE2.xHigh && regionX < h_regionCount) { + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)interactables + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE2.xLow && x <= RANGE2.xHigh && y >= RANGE2.yLow && y <= RANGE2.yHigh) { + gSpriteInits_Interactables[me->index](me, regionX, regionY, i); + } + } + } + } + + i = READ_START_INDEX(itemBoxPositions, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity_Itembox *me = ((void *)itemBoxPositions + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE2.xLow && x <= RANGE2.xHigh && y >= RANGE2.yLow && y <= RANGE2.yHigh) { + CreateEntity_ItemBox((MapEntity *)me, regionX, regionY, i); + } + } + } + } + + i = READ_START_INDEX(enemyPositions, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)enemyPositions + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE2.xLow && x <= RANGE2.xHigh && y >= RANGE2.yLow && y <= RANGE2.yHigh) { + gSpriteInits_Enemies[me->index](me, regionX, regionY, i); + } + } + } + } + } else { + i = READ_START_INDEX(interactables, h_regionCount, regionX, regionY); + if (i != 0) { + MapEntity *me = ((void *)interactables + (i - 8)); + for (i = 0; (s8)me->x != -1; me++, i++) { + if ((s8)me->x >= -2) { + CamCoord x = TO_WORLD_POS(me->x, regionX); + CamCoord y = TO_WORLD_POS(me->y, regionY); + if (x >= RANGE2.xLow && x <= RANGE2.xHigh && y >= RANGE2.yLow && y <= RANGE2.yHigh) { + gSpriteInits_InteractablesMultiplayer[me->index](me, regionX, regionY, i); + } + } + } + } + } + regionX++; + } + regionY++; + } + } + em->prevCamX = gCamera.x; + em->prevCamY = gCamera.y; + } +} +#if (GAME == GAME_SA1) +END_NONMATCH +#endif + +void CreateEnemyDefeatScoreAndManageLives(s16 x, s16 y) +{ + u32 old; + u32 temp1; + u32 temp2; + m4aSongNumStart(SE_ITEM_BOX); + + INCREMENT_SCORE(enemyDefeatScores[gPlayer.defeatScoreIndex]); + + CreateEnemyDefeatScore(x, y); + + // NOTE: This should be (ARRAY_COUNT(enemyDefeatScores) - 1) + // But padding makes it (6-1) instead of (5-1), + // hence the macro. + if (gPlayer.defeatScoreIndex < (NUM_ENEMY_DEFEAT_SCORES - 1)) { + gPlayer.defeatScoreIndex++; + } +} + +// SA2: TaskDestructor_80095E8 +void TaskDestructor_EntityShared(struct Task *t) +{ + EntityShared *entity = TASK_DATA(t); + VramFree(entity->s.graphics.dest); +} + +void SA2_LABEL(TaskDestructor_80095FC)(struct Task *t) +{ + EntitiesManager *em = TASK_DATA(t); + EwramFree(em->interactables); + EwramFree(em->items); + EwramFree(em->enemies); + gEntitiesManagerTask = NULL; +} diff --git a/sa1/src/game/sa1_sa2_shared/globals.c b/sa1/src/game/sa1_sa2_shared/globals.c new file mode 100644 index 0000000000..75686638b8 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/globals.c @@ -0,0 +1,182 @@ +#include "global.h" +#include "core.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/multiplayer/chao.h" +#include "game/multiplayer/multiplayer_event_mgr.h" + +#if (GAME == GAME_SA1) +u8 sa2__gUnknown_030053E0 = 0; +#elif (GAME == GAME_SA2) +u8 gUnknown_030053E0 = 0; +#endif +u32 gCheckpointTime = 0; +u8 gMultiplayerCharRings[MULTI_SIO_PLAYERS_MAX] = {}; +#if (GAME == GAME_SA2) +u8 gMultiplayerLanguage = 0; +#endif + +u16 ALIGNED(4) gRingCount = 0; + +#if (GAME == GAME_SA1) +struct Task *gChaoTasks[NUM_MP_CHAO] = { 0 }; +#elif (GAME == GAME_SA2) +#ifndef NON_MATCHING +u8 ALIGNED(4) unused53F4[24] = {}; +#endif +#endif + +u8 ALIGNED(4) gActiveCollectRingEffectCount = 0; + +#if (GAME == GAME_SA2) +u32 gMultiplayerIds[MULTI_SIO_PLAYERS_MAX] = {}; +#endif +u8 ALIGNED(4) gRoomEventQueueSendPos = 0; +u16 ALIGNED(4) gStageFlags = 0; +#if (GAME == GAME_SA1) +// TODO: Check type! +u8 ALIGNED(4) gUnknown_03005008[MULTI_SIO_PLAYERS_MAX] = {}; +#endif +u8 ALIGNED(4) gMPRingCollectWins[MULTI_SIO_PLAYERS_MAX] = {}; + +#if (GAME == GAME_SA2) +u8 gBossRingsRespawnCount = 0; +bool8 ALIGNED(4) gBossRingsShallRespawn = FALSE; +#endif + +u32 gMultiplayerPseudoRandom = 0; +u8 ALIGNED(4) gRoomEventQueueWritePos = 0; +s8 ALIGNED(4) SA2_LABEL(gUnknown_0300543C) = 0; +#if (GAME == GAME_SA2) +u16 ALIGNED(4) gBossCameraClampYLower = 0; +#endif +s8 ALIGNED(4) gTrappedAnimalVariant = 0; +#if (GAME == GAME_SA1) +u8 ALIGNED(4) sa2__gUnknown_030054B0 = 0; +#endif + +u8 ALIGNED(4) gNumLives = 0; +u16 ALIGNED(4) gUnknown_03005028 = 0; // Special Stage-related +u16 ALIGNED(4) sa2__gUnknown_0300544C = 0; +s32 gLevelScore = 0; + +#if (GAME == GAME_SA2) +u16 ALIGNED(16) gMultiplayerNames[MULTI_SIO_PLAYERS_MAX][MAX_PLAYER_NAME_LENGTH] = {}; +#endif +u32 gCourseTime = 0; + +#if (GAME == GAME_SA2) +CheeseTarget ALIGNED(8) gCheeseTarget = {}; +#endif + +u32 gMPStageStartFrameCount = 0; +MusicManagerState ALIGNED(8) gMusicManagerState = {}; +#if (GAME == GAME_SA2) +u8 gUnknown_030054B0 = 0; +#endif +s8 ALIGNED(4) gMultiplayerRanks[MULTI_SIO_PLAYERS_MAX] = {}; +u8 ALIGNED(4) sa2__gUnknown_030054B8 = 0; + +#if (GAME == GAME_SA1) +s8 ALIGNED(4) gTailsEnabled = 0; +#endif + +#if (GAME == GAME_SA2) +u16 ALIGNED(4) gBossCameraClampYUpper = 0; +HomingTarget gHomingTarget = {}; +#endif + +u8 ALIGNED(4) gDemoPlayCounter = 0; + +#if (GAME == GAME_SA1) +u16 ALIGNED(4) gSpecialStageReturnX = 0; +#endif + +u8 ALIGNED(4) gGameMode = 0; + +#if (GAME == GAME_SA2) +s32 ALIGNED(4) gStageGoalX = 0; +#endif + +u8 ALIGNED(4) gMultiplayerMissingHeartbeats[MULTI_SIO_PLAYERS_MAX] = {}; +#if (GAME == GAME_SA1) +u16 ALIGNED(4) gSpecialStageReturnY = 0; +#elif (GAME == GAME_SA2) +u8 ALIGNED(4) gMultiplayerUnlockedLevels = 0; +#endif +struct Task *ALIGNED(4) gEntitiesManagerTask = NULL; + +#if (GAME == GAME_SA2) +s32 ALIGNED(4) gUnknown_030054E0 = 0; +#endif + +u8 ALIGNED(4) gDestroySpotlights = 0; + +#if (GAME == GAME_SA1) +u16 ALIGNED(4) gUnknown_03005070 = 0; // Used in Sp Stage +#endif + +u8 ALIGNED(4) gRandomItemBox = 0; + +#if (GAME == GAME_SA1) +u16 ALIGNED(4) gSpecialStageCollectedRings = 0; +u16 ALIGNED(4) gUnknown_0300507C = 0; +#endif + +u8 ALIGNED(4) gDifficultyLevel = 0; +s8 ALIGNED(4) gSelectedCharacter = 0; + +#if (GAME == GAME_SA1) +s8 ALIGNED(4) gNumSingleplayerCharacters = 0; +#endif + +#if (GAME == GAME_SA2) +u8 ALIGNED(4) gSpecialRingCount = 0; +#endif + +s8 ALIGNED(4) gUsedSaveSectorID = 0; +#if (GAME == GAME_SA2) +u8 ALIGNED(4) gUnknown_030054F8 = 0; +s32 ALIGNED(4) gUnknown_030054FC = 0; +#endif + +s8 ALIGNED(4) gMultiplayerCharacters[4] = {}; +RoomEvent ALIGNED(16) gRoomEventQueue[16] = {}; +u32 gStageTime = 0; + +s8 ALIGNED(4) gMultiplayerCurrentLevel = 0; + +#if (GAME == GAME_SA2) +u8 ALIGNED(4) gMultiplayerUnlockedCharacters = 0; +#endif + +#ifndef NON_MATCHING +struct Task *ALIGNED(16) gMultiplayerPlayerTasks[MULTI_SIO_PLAYERS_MAX] = {}; +#else +struct Task *ALIGNED(4) gMultiplayerPlayerTasks[MULTI_SIO_PLAYERS_MAX] = {}; +#endif + +#if (GAME == GAME_SA1) +u8 ALIGNED(4) gUnknown_03005140 = 0; +#endif + +u8 ALIGNED(8) gBossIndex = 0; + +s8 ALIGNED(4) gCurrentLevel = 0; +u8 ALIGNED(4) gMultiplayerConnections = 0; + +#if (GAME == GAME_SA2) +bool8 ALIGNED(4) gUnknown_030055BC = 0; + +#ifndef NON_MATCHING +u32 unused_030055C0[4] = {}; +#endif + +// Maybe? +u8 gUnknown_030055D0[MULTI_SIO_PLAYERS_MAX] = {}; +u8 gNewInputCountersIndex = 0; +u8 ALIGNED(4) gUnknown_030055D8 = 0; + +// Fills available space, but size not yet confirmed +struct InputCounters ALIGNED(8) gNewInputCounters[32] = {}; + +#endif \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/itembox.c b/sa1/src/game/sa1_sa2_shared/itembox.c new file mode 100644 index 0000000000..b0df895f33 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/itembox.c @@ -0,0 +1,515 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "lib/m4a/m4a.h" + +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/dust_cloud.h" + +#include "game/entity.h" +#include "game/parameters/characters.h" +#include "game/stage/item_tasks.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/stage/terrain_collision.h" + +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/multiplayer/mp_player.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/items.h" +#include "constants/player_transitions.h" +#include "constants/songs.h" +#include "constants/zones.h" + +#define ITEM_DURATION_INVINCIBILITY TIME(0, 20) +#define ITEM_DURATION_SPEED_UP TIME(0, 20) + +typedef struct { + /* 0x00|0x00 */ SpriteBase base; + /* 0x0C|0x0C */ Sprite s; + /* 0x3C|0x3C */ Sprite sprItem; +#if (GAME == GAME_SA1) + /* 0x6C|xxxx */ s16 iconOffset; + /* 0x6E|xxxx */ s16 qUnk6E; + /* 0x70|xxxx */ u8 unk70; // frames, actually? + /* 0x71|0x76 */ u8 kind; + /* 0x72|0x77 */ u8 frames; +#elif (GAME == GAME_SA2) + /* xxxx|0x6C */ CamCoord qX; + /* xxxx|0x70 */ CamCoord qY; + /* 0x70|0x74 */ s16 iconOffset; + /* 0x71|0x76 */ u8 kind; + /* 0x72|0x77 */ u8 frames; + /* 0x78 */ bool8 noPlayerBreakRecoil; +#endif +} ItemBox; /* size: 0x7C */ + +void Task_ItemBoxMain(void); +void Task_Itembox2(void); +void Task_Itembox3(void); +void Task_Itembox4(void); +void TaskDestructor_ItemBox(struct Task *t); +#if (GAME == GAME_SA1) +const s8 ItemBox_RingAmountTable[] = { 1, 5, 10, 20, 30, 40 }; +#elif (GAME == GAME_SA2) +const u8 ItemBox_RingAmountTable[] = { 1, 5, 10, 30, 50 }; +#endif + +extern u8 gUnknown_080BB4D8[ITEM__COUNT]; +extern u8 gUnknown_080BB4E8[8]; +extern u8 gUnknown_080BB4F0[4]; + +#if (GAME == GAME_SA1) +void CreateEntity_ItemBox(MapEntity *me, u16 regionX, u16 regionY, u8 id) +{ + struct Task *t; + ItemBox *itembox; + Sprite *s, *sTemp; + + if ((gGameMode == GAME_MODE_TIME_ATTACK) && (me->index == ITEM__ONE_UP)) { + // Don't spawn 1-UPs in Time Attack mode + SET_MAP_ENTITY_INITIALIZED(me); + return; + } + + t = TaskCreate(Task_ItemBoxMain, sizeof(ItemBox), 0x2000, 0, TaskDestructor_ItemBox); + itembox = TASK_DATA(t); + s = &itembox->s; + + itembox->base.regionX = regionX; + itembox->base.regionY = regionY; + itembox->base.me = me; + itembox->base.meX = me->x; + itembox->base.id = id; + + itembox->qUnk6E = Q(0); + itembox->iconOffset = 0; + itembox->unk70 = 0; + itembox->kind = me->index; + + s->x = TO_WORLD_POS(me->x, regionX); + s->y = TO_WORLD_POS(me->y, regionY); + + SET_MAP_ENTITY_INITIALIZED(me); + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ITEMBOX); + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_ITEMBOX; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); + + sTemp = s; + s = &itembox->sprItem; + DmaCopy16(3, sTemp, s, sizeof(*s)); + s->graphics.dest = ALLOC_TILES(SA1_ANIM_ITEMBOX_TYPE); + s->graphics.anim = SA1_ANIM_ITEMBOX_TYPE; + s->variant = gUnknown_080BB4D8[itembox->kind]; + + if (itembox->kind == ITEM__ONE_UP) { + s->variant += gSelectedCharacter; + } + + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->palId = 0; + s->oamFlags = SPRITE_OAM_ORDER(19); + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + UpdateSpriteAnimation(s); +} + +// (93.66%) https://decomp.me/scratch/VxlQa +NONMATCH("asm/non_matching/game/sa1_sa2_shared/item_box__Task_ItemBoxMain.inc", void Task_ItemBoxMain(void)) +{ + bool32 sl = FALSE; + ItemBox *itembox = TASK_DATA(gCurTask); + Sprite *s = &itembox->s; + MapEntity *me = itembox->base.me; + + s16 worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + s16 worldY = TO_WORLD_POS(itembox->base.me->y, itembox->base.regionY); + s32 screenX, screenY; + + if (IS_MULTI_PLAYER && ((s8)me->x == MAP_ENTITY_STATE_MINUS_THREE)) { + m4aSongNumStart(SE_ITEM_BOX_2); + + CreateDustCloud(worldX, worldY + itembox->iconOffset); + + gCurTask->main = Task_Itembox3; + + itembox->unk70 = sl; + + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) { + if (gPlayer.stoodObj == s) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + } + } else { + s32 res; + if (itembox->unk70 != 0) { + // _0801E890 + + itembox->iconOffset += I(itembox->qUnk6E); + itembox->qUnk6E += Q(40. / 256.); + + res = SA2_LABEL(sub_801F07C)(worldY + itembox->iconOffset, worldX, 1, 8, NULL, SA2_LABEL(sub_801EE64)); + if (res < 0) { + itembox->iconOffset += res; + itembox->unk70 = 0; + } + } + // _0801E8F0 + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + itembox->iconOffset; + + if (IS_MP_OR_TEAM_PLAY) { + u8 i; + for (i = 0; (i < MULTI_SIO_PLAYERS_MAX) && (gMultiplayerPlayerTasks[i] != NULL); i++) { + if (i != SIO_MULTI_CNT->id) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + if (mpp->unk5C & 0x4) { + sl = TRUE; + } + } + } + } + // _0801E95E + + if (!(gPlayer.moveState & MOVESTATE_IA_OVERRIDE) || sl) { + // _0801E974 + + if (gNumSingleplayerCharacters > 1) { + sub_80096B0(s, worldX, worldY + itembox->iconOffset, &gPartner); + } + // _0801E998 + + if (((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) + || (gPlayer.spriteInfoBody->s.hitboxes[0].index == HITBOX_STATE_INACTIVE)) { + // _0801E9B6 + res = sub_80096B0(s, worldX, worldY + itembox->iconOffset, &gPlayer); + } else { + // _0801E9FC + res = Coll_Player_Itembox(s, worldX, worldY + itembox->iconOffset, &gPlayer); + } + + // _0801EA20 + if (res & 0x10000) { + itembox->qUnk6E = -Q(1.0); + itembox->unk70 = -1; + } else if (res & 0x28) { + // _0801EA32 + 0x8 + + if ((gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPlayer.stoodObj == s)) { + gPlayer.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPlayer.moveState &= ~MOVESTATE_20; + gPlayer.moveState |= MOVESTATE_IN_AIR; + } + + if ((gPartner.moveState & MOVESTATE_STOOD_ON_OBJ) && (gPartner.stoodObj == s)) { + gPartner.moveState &= ~MOVESTATE_STOOD_ON_OBJ; + gPartner.moveState &= ~MOVESTATE_20; + gPartner.moveState |= MOVESTATE_IN_AIR; + } + + m4aSongNumStart(SE_ITEM_BOX_2); + CreateDustCloud(worldX, worldY + itembox->iconOffset); + + gCurTask->main = Task_Itembox2; + itembox->unk70 = 0; + + if (IS_MULTI_PLAYER) { + RoomEvent_ItemBoxBreak *event = CreateRoomEvent(); + event->type = ROOMEVENT_TYPE_ITEMBOX_BREAK; + event->x = itembox->base.regionX; + event->y = itembox->base.regionY; + event->id = itembox->base.id; + } + + return; + } + } + // _0801EADC + + if (IS_OUT_OF_DISPLAY_RANGE(worldX, worldY) && IS_OUT_OF_CAM_RANGE(s->x, s->y + itembox->iconOffset)) { + SET_MAP_ENTITY_NOT_INITIALIZED(me, itembox->base.meX); + TaskDestroy(gCurTask); + return; + } + // _0801EB54 + + DisplaySprite(s); + + s = &itembox->sprItem; + + if (gGameMode == GAME_MODE_RACE || gGameMode == GAME_MODE_MULTI_PLAYER) { + if ((gStageTime >> 5) & 0x1) { + u32 kind = gUnknown_080BB4F0[gMultiplayerPseudoRandom % ARRAY_COUNT(gUnknown_080BB4F0)]; + itembox->kind = kind; + + if ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) && (kind == ITEM__MP_8)) { + itembox->kind = ITEM__MP_10; + } + } else { + // _0801EBBC + itembox->kind = gUnknown_080BB4E8[((gStageTime >> 6) + me->index) % ARRAY_COUNT(gUnknown_080BB4E8)]; + } + // _0801EBD6 + + s->variant = gUnknown_080BB4D8[itembox->kind]; + + UpdateSpriteAnimation(s); + } + // _0801EBEA + + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y + itembox->iconOffset; + DisplaySprite(s); + } +} +END_NONMATCH + +void Task_Itembox2(void) +{ + ItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + Sprite *s; + s16 worldX, worldY; + RoomEvent_ItemEffect *roomEvent; + + itembox->iconOffset--; + itembox->unk70++; + + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY) + itembox->iconOffset; + + if (itembox->unk70 >= 60) { + switch (itembox->kind) { + case ITEM__ONE_UP: { + gNumLives++; + + gMusicManagerState.unk3 = 0x10 | 0x0; + } break; + + case ITEM__SHIELD: { + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__SHIELD_NORMAL; + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC; + CreateItemTask_Shield_Normal(gPlayer.playerID); + } break; + + case ITEM__SHIELD_MAGNETIC: { + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__SHIELD_NORMAL; + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC; + CreateItemTask_Shield_Magnetic(gPlayer.playerID); + } break; + + case ITEM__INVINCIBILITY: { + if (!(gPlayer.itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + CreateItemTask_Invincibility(gPlayer.playerID); + gMusicManagerState.unk2 = 0x10 | 0x0; + } + + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__INVINCIBILITY; + gPlayer.timerInvincibility = PLAYER_INVINCIBLE_DURATION; + } break; + + case ITEM__SPEED_UP: { + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__SPEED_UP; + gPlayer.timerSpeedup = PLAYER_SPEED_UP_DURATION; + + m4aMPlayTempoControl(&gMPlayInfo_BGM, PLAYER_SPEED_UP_MUSIC_TEMPO); + + if (IS_MULTI_PLAYER) { + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__MP_SLOW_DOWN; + } + } break; + + case ITEM__RINGS_RANDOM: { + s16 rings = ItemBox_RingAmountTable[(u32)PseudoRandom32() % ARRAY_COUNT(ItemBox_RingAmountTable)]; + INCREMENT_RINGS(rings); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + m4aSongNumStart(SE_RING_COPY); + } break; + + case ITEM__RINGS_5: { + INCREMENT_RINGS(5); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + m4aSongNumStart(SE_RING_COPY); + } break; + + case ITEM__RINGS_10: { + INCREMENT_RINGS(10); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + m4aSongNumStart(SE_RING_COPY); + } break; + + case ITEM__MP_8: { + u32 nearestPlayer = 0; + u32 smallestMagnitude = 0; + u32 playerId; + struct Task **mppTasks; + + // Find the player that's closest to you + for (playerId = 0, mppTasks = gMultiplayerPlayerTasks; playerId < MULTI_SIO_PLAYERS_MAX && mppTasks[playerId] != NULL; + playerId++) { + MultiplayerPlayer *mpp; + s32 boxToPlayerX, boxToPlayerY; + s32 boxToPlayerMagnitude; + + // Don't look for your own ID + u32 sioId = (SIO_MULTI_CNT)->id; + if (playerId == sioId) + continue; + + mpp = TASK_DATA(mppTasks[playerId]); + boxToPlayerX = SQUARE(mpp->pos.x - I(gPlayer.qWorldX)); + boxToPlayerY = SQUARE(mpp->pos.y - I(gPlayer.qWorldY)); + + boxToPlayerMagnitude = boxToPlayerX + boxToPlayerY; + if (smallestMagnitude < boxToPlayerMagnitude) { + smallestMagnitude = boxToPlayerMagnitude; + nearestPlayer = playerId; + } + } + + { + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_ITEMEFFECT_APPLIED; + roomEvent->effect = 4; + roomEvent->targetPlayer = nearestPlayer; + } + } break; + + case ITEM__MP_9: { + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_ITEMEFFECT_APPLIED; + roomEvent->effect = 0; + } break; + + case ITEM__MP_10: { + roomEvent = CreateRoomEvent(); + roomEvent->type = ROOMEVENT_TYPE_ITEMEFFECT_APPLIED; + roomEvent->effect = 5; + } break; + } + + gCurTask->main = Task_Itembox4; + itembox->unk70 = 0; + } + + s = &itembox->sprItem; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + DisplaySprite(s); +} + +void Task_Itembox3(void) +{ + ItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + Sprite *s; + s16 worldX, worldY; + + itembox->iconOffset--; + itembox->unk70++; + + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY) + itembox->iconOffset; + + if (itembox->unk70 >= 60) { + gCurTask->main = Task_Itembox4; + itembox->unk70 = 0; + } + + s = &itembox->sprItem; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + DisplaySprite(s); +} + +void Task_Itembox4(void) +{ + ItemBox *itembox = TASK_DATA(gCurTask); + MapEntity *me = itembox->base.me; + Sprite *s; + s16 worldX, worldY; + + if (++itembox->unk70 > 30) { + TaskDestroy(gCurTask); + return; + } + + worldX = TO_WORLD_POS(itembox->base.meX, itembox->base.regionX); + worldY = TO_WORLD_POS(me->y, itembox->base.regionY) + itembox->iconOffset; + + s = &itembox->sprItem; + s->x = worldX - gCamera.x; + s->y = worldY - gCamera.y; + DisplaySprite(s); +} + +void TaskDestructor_ItemBox(struct Task *t) +{ + ItemBox *itembox = TASK_DATA(t); + VramFree(itembox->s.graphics.dest); + VramFree(itembox->sprItem.graphics.dest); +} + +#else +// TODO: Integrate these! + +const u16 ItemBox_MysteryIcons[13][3] = { + [ITEM__ONE_UP] = { SA2_ANIM_ITEMBOX_TYPE, 0, 4 }, [ITEM__SHIELD] = { SA2_ANIM_ITEMBOX_TYPE, 5, 4 }, + [ITEM__SHIELD_MAGNETIC] = { SA2_ANIM_ITEMBOX_TYPE, 6, 4 }, [ITEM__INVINCIBILITY] = { SA2_ANIM_ITEMBOX_TYPE, 7, 4 }, + [ITEM__SPEED_UP] = { SA2_ANIM_ITEMBOX_TYPE, 8, 4 }, [ITEM__RINGS_RANDOM] = { SA2_ANIM_ITEMBOX_TYPE, 9, 4 }, + [ITEM__RINGS_5] = { SA2_ANIM_ITEMBOX_TYPE, 10, 4 }, [ITEM__RINGS_10] = { SA2_ANIM_ITEMBOX_TYPE, 11, 4 }, + [ITEM__MP_SWAP] = { SA2_ANIM_ITEMBOX_TYPE, 13, 4 }, [ITEM__MP_CONFUSION] = { SA2_ANIM_ITEMBOX_TYPE, 14, 4 }, + [ITEM__MP_SLOWDOWN] = { SA2_ANIM_ITEMBOX_TYPE, 15, 4 }, [ITEM__MP_ATTACK] = { SA2_ANIM_ITEMBOX_TYPE, 16, 4 }, + [ITEM__MP_ATTACK_2] = { SA2_ANIM_ITEMBOX_TYPE, 12, 4 }, +}; + +const u16 ItemBox_1UpIcons[5][3] = { + { SA2_ANIM_ITEMBOX_TYPE, CHARACTER_SONIC, 4 }, { SA2_ANIM_ITEMBOX_TYPE, CHARACTER_CREAM, 4 }, + { SA2_ANIM_ITEMBOX_TYPE, CHARACTER_TAILS, 4 }, { SA2_ANIM_ITEMBOX_TYPE, CHARACTER_KNUCKLES, 4 }, + { SA2_ANIM_ITEMBOX_TYPE, CHARACTER_AMY, 4 }, +}; + +const u16 ItemBox_randTypeTable[8] = { ITEM__RINGS_RANDOM, ITEM__MP_RANDOM, ITEM__SPEED_UP, ITEM__MP_RANDOM, + ITEM__INVINCIBILITY, ITEM__MP_RANDOM, ITEM__RINGS_5, ITEM__MP_RANDOM }; + +const u16 ItemBox_subRandTypeTable[] = { ITEM__MP_SWAP, ITEM__MP_CONFUSION, ITEM__MP_SLOWDOWN, ITEM__MP_ATTACK }; + +#endif \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/magnetic_ring.c b/sa1/src/game/sa1_sa2_shared/magnetic_ring.c new file mode 100644 index 0000000000..84cef22ab2 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/magnetic_ring.c @@ -0,0 +1,101 @@ +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "rect.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/collect_ring_effect.h" +#include "game/sa1_sa2_shared/rings_manager.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/player.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +#define PLAYER_TOUCHING_RING_HB(p, hb, ringIntX, ringIntY) \ + ((((ringIntX - TILE_WIDTH) <= HB_LEFT(I(p.qWorldX), hb) && (ringIntX + TILE_WIDTH) >= HB_LEFT(I(p.qWorldX), hb)) \ + || ((ringIntX - TILE_WIDTH) >= HB_LEFT(I(p.qWorldX), hb) && HB_RIGHT(I(p.qWorldX), hb) >= (ringIntX - TILE_WIDTH))) \ + && (( \ + ((ringIntY - (TILE_WIDTH * 2)) <= HB_TOP(I(p.qWorldY), hb) && ringIntY >= HB_TOP(I(p.qWorldY), hb)) \ + || ((ringIntY - (TILE_WIDTH * 2)) >= HB_TOP(I(p.qWorldY), hb) && HB_BOTTOM(I(p.qWorldY), hb) >= (ringIntY - (TILE_WIDTH * 2)))))) + +typedef struct { + Sprite s; + s16 unk30; +} StageRing; + +void Task_MagneticRing(void); + +void CreateMagneticRing(s16 x, s16 y) +{ + struct Task *t = TaskCreate(Task_MagneticRing, sizeof(StageRing), 0x2000, 0, NULL); + StageRing *ring = TASK_DATA(t); + Sprite *s; + + ring->unk30 = 0; + + s = &ring->s; + s->x = x; + s->y = y; + + s->graphics.dest = RESERVED_RING_TILES_VRAM; + s->oamFlags = SPRITE_OAM_ORDER(15); + s->graphics.size = 0; +#if (GAME == GAME_SA1) + GET_SPRITE_ANIM(s) = SA1_ANIM_RING; +#elif (GAME == GAME_SA2) + GET_SPRITE_ANIM(s) = SA2_ANIM_RING; +#endif + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = (SPRITE_FLAG_MASK_19 | SPRITE_FLAG_MASK_18 | SPRITE_FLAG(PRIORITY, 2)); +} + +void Task_MagneticRing(void) +{ + StageRing *ring = TASK_DATA(gCurTask); + Player *p = &gPlayer; + s32 ringToPlayerX = I(p->qWorldX) - (u16)ring->s.x; + s32 ringToPlayerY = I(p->qWorldY) - (u16)ring->s.y; + + s16 sinVal = sa2__sub_8004418(ringToPlayerY, ringToPlayerX); + s16 ringX, ringY; + + ring->unk30 += 0x40; + + ring->s.x += (ring->unk30 * COS(sinVal)) >> 22; + ring->s.y += (ring->unk30 * SIN(sinVal)) >> 22; + + ringY = ring->s.y; + ringX = ring->s.x; + + if (PLAYER_TOUCHING_RING_HB(gPlayer, gPlayerBodyPSI.s.hitboxes[0].b, ringX, ringY)) { + if (PLAYER_IS_ALIVE) { + INCREMENT_RINGS(1); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) + gRingCount = 255; + } + + CreateCollectRingEffect(ringX, ringY); + } + TaskDestroy(gCurTask); + return; + } + + ring->s.x -= gCamera.x; + ring->s.y -= gCamera.y; + UpdateSpriteAnimation(&ring->s); + DisplaySprite(&ring->s); + ring->s.x = ringX; + ring->s.y = ringY; +} + +#if 01 +#endif diff --git a/sa1/src/game/sa1_sa2_shared/music_manager.c b/sa1/src/game/sa1_sa2_shared/music_manager.c new file mode 100644 index 0000000000..b3938430a0 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/music_manager.c @@ -0,0 +1,233 @@ +#include "global.h" +#include "core.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/sa1_sa2_shared/music_manager.h" + +#include "lib/m4a/m4a.h" + +#include "constants/songs.h" + +static void MusManager_UpdateBgmParams(void); +void MusManager_Fadeout(u16 fadeoutSpeed); + +#if (GAME == GAME_SA1) +const u16 gLevelSongs[] = { + MUS_NEO_GREEN_HILL__ACT_1, + MUS_NEO_GREEN_HILL__ACT_2, + MUS_SECRET_BASE__ACT_1, + MUS_SECRET_BASE__ACT_2, + MUS_CASINO_PARADISE__ACT_1, + MUS_CASINO_PARADISE__ACT_2, + MUS_ICE_MOUNTAIN__ACT_1, + MUS_ICE_MOUNTAIN__ACT_2, + MUS_ANGEL_ISLAND__ACT_1, + MUS_ANGEL_ISLAND__ACT_2, + MUS_EGG_ROCKET, + MUS_COSMIC_ANGEL, + MUS_X_ZONE, + MUS_EXTRA_BOSS, + + // MP Chao Gardens + MUS_NEO_GREEN_HILL__ACT_1, + MUS_SECRET_BASE__ACT_1, + MUS_CASINO_PARADISE__ACT_1, + MUS_COSMIC_ANGEL, +}; +#elif (GAME == GAME_SA2) +const u16 gLevelSongs[] = { + MUS_LEAF_FOREST__ACT_1, + MUS_LEAF_FOREST__ACT_2, + MUS_BOSS, + MUS_BOSS_PINCH, + MUS_HOT_CRATER__ACT_1, + MUS_HOT_CRATER__ACT_2, + MUS_BOSS, + MUS_BOSS_PINCH, + MUS_MUSIC_PLANT__ACT_1, + MUS_MUSIC_PLANT__ACT_2, + MUS_BOSS, + MUS_BOSS_PINCH, + MUS_ICE_PARADISE__ACT_1, + MUS_ICE_PARADISE__ACT_2, + MUS_BOSS, + MUS_BOSS_PINCH, + MUS_SKY_CANYON__ACT_1, + MUS_SKY_CANYON__ACT_2, + MUS_BOSS, + MUS_BOSS_PINCH, + MUS_TECHNO_BASE__ACT_1, + MUS_TECHNO_BASE__ACT_2, + MUS_BOSS, + MUS_BOSS_PINCH, + MUS_EGG_UTOPIA__ACT_1, + MUS_EGG_UTOPIA__ACT_2, + MUS_7_BOSS, + MUS_7_BOSS_PINCH, + MUS_XX__FINAL_ZONE, + MUS_TRUE_AREA_53, + MUS_FINAL_BOSS, + MUS_FINAL_BOSS_PINCH, + MUS_BOSS_KNUCKLES, + MUS_BOSS, + MUS_BOSS, + MUS_BOSS, + MUS_BOSS, + MUS_BOSS, + MUS_BOSS, + MUS_DUMMY, +}; +#endif + +// TODO: Name this gBossSongIndices +#if (GAME == GAME_SA1) +const static u16 sBossSongIndices[7] = { MUS_BOSS_FIGHT, MUS_BOSS_INTRO, MUS_BOSS_MECHA_KNUCKLES, MUS_BOSS_EGG_SNAKE, + MUS_BOSS_EGG_WRECKER, MUS_BOSS_EGG_DRILLSTER, MUS_FINAL_BOSS }; +#elif (GAME == GAME_SA2) +const static u16 sBossSongIndices[0] = {}; +#endif + +#if (GAME == GAME_SA1) +#define SET_UNK5(v) +#elif (GAME == GAME_SA2) +#define SET_UNK5(v) gMusicManagerState.unk5 = (v); +#endif + +void Task_StageMusicManager(void) +{ + struct MP2KSongHeader *songHeader = gMPlayTable[0].info->songHeader; + + if ((gMusicManagerState.unk0 == 0) && PLAYER_IS_ALIVE) { +#if (GAME == GAME_SA2) + if ((gMusicManagerState.unk1 & 0xF0) == 0x30) { + MPlayStop(&gMPlayInfo_BGM); + + gMusicManagerState.unk0 = 0xFF; + gMusicManagerState.unk1 &= 0x0F; + } else if (gMusicManagerState.fadeoutSpeed != 0) { + MusManager_Fadeout(gMusicManagerState.fadeoutSpeed); + + gMusicManagerState.unk0 = 0xFF; + gMusicManagerState.fadeoutSpeed = 0; + SET_UNK5(1); + } else +#endif + if ((songHeader == gSongTable[MUS_DROWNING].header) && (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_TRACK) + && !(gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE)) { + SET_UNK5(1); + gMusicManagerState.unk2 = 0; + gMusicManagerState.unk3 = 0; + } else if (gMusicManagerState.unk4 != 0) { + gMusicManagerState.unk4 = 0; + SET_UNK5(1); + + m4aSongNumStart(MUS_DROWNING); + } else if ((songHeader == gSongTable[MUS_INVINCIBILITY].header) && (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_TRACK) + && !(gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE) && !(gPlayer.itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + SET_UNK5(1); + m4aSongNumStop(MUS_INVINCIBILITY); + } else if ((songHeader != gSongTable[MUS_1_UP].header) && (songHeader != gSongTable[MUS_INVINCIBILITY].header) + && (gPlayer.itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY) && (gMusicManagerState.unk2 == 0)) { + gMusicManagerState.unk2 = 0; + SET_UNK5(1); + m4aSongNumStart(MUS_INVINCIBILITY); + MusManager_UpdateBgmParams(); + } else if (gMusicManagerState.unk2 != 0) { + gMusicManagerState.unk2 = 0; + SET_UNK5(1); + m4aSongNumStart(MUS_INVINCIBILITY); + } else if (gMusicManagerState.unk3 != 0) { + gMusicManagerState.unk3 = 0; + SET_UNK5(1); + m4aSongNumStart(MUS_1_UP); + } else if ((gMusicManagerState.unk1 & 0xF0) == 0x10) { + u32 unk1 = (gMusicManagerState.unk1 &= 0x0F); + +#if (GAME == GAME_SA1) + m4aSongNumStart(sBossSongIndices[gMusicManagerState.unk1]); + gMusicManagerState.unk1 |= 0x20; +#else + m4aSongNumStart(gLevelSongs[gCurrentLevel + unk1]); +#endif +#if (GAME == GAME_SA1) + } else if ((gMusicManagerState.unk1 & 0xF0) == 0x30) { + gMusicManagerState.unk1 &= 0xF; + m4aSongNumStop(sBossSongIndices[gMusicManagerState.unk1]); + + m4aSongNumStart(gLevelSongs[gCurrentLevel]); + MusManager_UpdateBgmParams(); + + if ((u8)(gMusicManagerState.unk1 - 4) > 1) { + gMusicManagerState.unk0 = 0xFF; + } + gMusicManagerState.unk1 = 0; +#endif + } else if (((gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_TRACK) == 0) || (gMPlayInfo_BGM.status & MUSICPLAYER_STATUS_PAUSE)) { + if ((gMusicManagerState.unk1 & 0xF0) == 0x20) { +#if (GAME == GAME_SA1) + m4aSongNumStart(sBossSongIndices[gMusicManagerState.unk1 & 0xF]); +#else + m4aSongNumStart(sBossSongIndices[gMusicManagerState.unk1]); +#endif + MusManager_UpdateBgmParams(); + } else { +#if (GAME == GAME_SA1) + m4aSongNumStart(gLevelSongs[gCurrentLevel]); + MusManager_UpdateBgmParams(); +#elif (GAME == GAME_SA2) + m4aSongNumStartOrContinue(gLevelSongs[gCurrentLevel + (gMusicManagerState.unk1 & 0x0F)]); + if (gMusicManagerState.unk5 != 0) { + SET_UNK5(0) + MusManager_UpdateBgmParams(); + } +#endif + } + } + } +} + +void CreateStageMusicManager(void) +{ + TaskCreate(Task_StageMusicManager, 0, 0x4000, 0, NULL); + + gMusicManagerState.unk0 = 0; + gMusicManagerState.unk1 = 0; + gMusicManagerState.unk2 = 0; + gMusicManagerState.unk3 = 0; + gMusicManagerState.unk4 = 0; +#if (GAME == GAME_SA2) + SET_UNK5(0) + gMusicManagerState.fadeoutSpeed = 0; +#endif +} + +static void MusManager_UpdateBgmParams(void) +{ + struct MP2KPlayerState *bgmInfo = &gMPlayInfo_BGM; + + m4aMPlayImmInit(bgmInfo); + m4aMPlayVolumeControl(bgmInfo, 0xFF, 4); + m4aMPlayFadeIn(bgmInfo, 4); + + if (gPlayer.itemEffect & PLAYER_ITEM_EFFECT__SPEED_UP) { + m4aMPlayTempoControl(bgmInfo, 0x200); + } +} + +#if (GAME == GAME_SA2) +void MusManager_Fadeout(u16 fadeoutSpeed) +{ +#if (GAME == GAME_SA1) + struct MusicPlayerInfo *bgmInfo = &gMPlayInfo_BGM; +#else + struct MP2KPlayerState *bgmInfo = &gMPlayInfo_BGM; +#endif + + m4aMPlayFadeOutTemporarily(bgmInfo, fadeoutSpeed / 16); + + if (gPlayer.itemEffect & PLAYER_ITEM_EFFECT__SPEED_UP) { + m4aMPlayTempoControl(bgmInfo, 0x200); + } +} +#endif diff --git a/sa1/src/game/sa1_sa2_shared/palette_loader.c b/sa1/src/game/sa1_sa2_shared/palette_loader.c new file mode 100644 index 0000000000..90640d64bc --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/palette_loader.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "task.h" +#include "game/entity.h" + +#include "game/sa1_sa2_shared/palette_loader.h" + +static void Task_StagePaletteLoader(void); + +/* + * Some sort of palette loader function. Uses the Sprite object + * but only ever called with animations which load a palette + */ + +struct Task *CreatePaletteLoaderTask(u16 priority, AnimId anim, u8 variant, TaskDestructor dtor) +{ + struct Task *t = TaskCreate(Task_StagePaletteLoader, sizeof(Sprite), priority, 0, dtor); + + Sprite *s = TASK_DATA(t); + + s->x = 0; + s->y = 0; + s->graphics.dest = NULL; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->graphics.size = 0; + s->graphics.anim = anim; + s->variant = variant; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + + return t; +} + +static void Task_StagePaletteLoader(void) +{ + Sprite *s = TASK_DATA(gCurTask); + + if (UpdateSpriteAnimation_BG(s) == 0) { + TaskDestroy(gCurTask); + } +} diff --git a/sa1/src/game/sa1_sa2_shared/pause_menu.c b/sa1/src/game/sa1_sa2_shared/pause_menu.c new file mode 100644 index 0000000000..2e30be0c61 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/pause_menu.c @@ -0,0 +1,180 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/save.h" +#include "game/time_attack/lobby.h" + +#include "constants/animations.h" +#include "constants/songs.h" + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ u16 frames; +} PauseMenu; + +void Task_PauseMenuUpdate(void); +void Task_PauseMenuInit(void); +void TaskDestructor_PauseMenu(struct Task *t); + +void CreatePauseMenu(void) +{ + if (!(gStageFlags & STAGE_FLAG__DISABLE_PAUSE_MENU)) { + // _0801A3AA + + struct Task *t = TaskCreate(Task_PauseMenuInit, sizeof(PauseMenu), -2, 4, TaskDestructor_PauseMenu); + PauseMenu *pm = TASK_DATA(t); + Sprite *s; + + pm->frames = 0; + + if (gGameMode == GAME_MODE_TIME_ATTACK) { + // Time Attack + s = &pm->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PAUSE_BACKGROUND_TA); + s->oamFlags = SPRITE_OAM_ORDER(1); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PAUSE_BACKGROUND_TA; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + + // TODO: ALLOC_TILES max of SA1_ANIM_PAUSE_TA and SA1_ANIM_PAUSE. + // NOTE: Defaults to SA1_ANIM_PAUSE, as switches to SA1_ANIM_PAUSE_TA every couple frames. + s = &pm->s2; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PAUSE_TA); + s->oamFlags = SPRITE_OAM_ORDER(1); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PAUSE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + } else { + // Not Time Attack + s = &pm->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PAUSE_BACKGROUND); + s->oamFlags = SPRITE_OAM_ORDER(1); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PAUSE_BACKGROUND; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + + // TODO: ALLOC_TILES max of SA1_ANIM_PAUSE_TA and SA1_ANIM_PAUSE. + s = &pm->s2; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PAUSE); + s->oamFlags = SPRITE_OAM_ORDER(1); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_PAUSE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + } + } +} + +void Task_PauseMenuUpdate(void) +{ + PauseMenu *pm = TASK_DATA(gCurTask); + + if (gPressedKeys & START_BUTTON) { + gFlags &= ~FLAGS_PAUSE_GAME; + m4aMPlayAllContinue(); + TaskDestroy(gCurTask); + return; + } + + if ((gGameMode == GAME_MODE_TIME_ATTACK) && (gPressedKeys & A_BUTTON)) { + gFlags &= ~FLAGS_PAUSE_GAME; + m4aSongNumStart(SE_SELECT); + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + CreateTimeAttackLobbyScreen(); + } else { + if (gBldRegs.bldY > 0) { + pm->s2.frameFlags |= SPRITE_FLAG(OBJ_MODE, 1); + pm->s.frameFlags |= SPRITE_FLAG(OBJ_MODE, 1); + } else { + pm->s2.frameFlags &= ~SPRITE_FLAG_MASK_OBJ_MODE; + pm->s.frameFlags &= ~SPRITE_FLAG_MASK_OBJ_MODE; + } + + if (gGameMode == GAME_MODE_TIME_ATTACK) { + if (++pm->frames >= GBA_FRAMES_PER_SECOND) { + pm->frames = 0; + + if (pm->s2.graphics.anim == SA1_ANIM_PAUSE) { + pm->s2.graphics.anim = SA1_ANIM_PAUSE_TA; + pm->s2.variant = LOADED_SAVE->uiLanguage; + } else { + pm->s2.graphics.anim = SA1_ANIM_PAUSE; + pm->s2.variant = 0; + } + + UpdateSpriteAnimation(&pm->s2); + } + } + + DisplaySprite(&pm->s2); + DisplaySprite(&pm->s); + } +} + +void Task_PauseMenuInit(void) +{ + u32 i; + + for (i = 0; i < ARRAY_COUNT(gMPlayTable); i++) { + if (i != gSongTable[SE_PAUSE].ms) { + MPlayStop(gMPlayTable[i].info); + } + } + + m4aSongNumStart(SE_PAUSE); + + gFlags |= FLAGS_PAUSE_GAME; + + gCurTask->main = Task_PauseMenuUpdate; +} + +void TaskDestructor_PauseMenu(struct Task *t) +{ + PauseMenu *pm = TASK_DATA(t); + VramFree(pm->s2.graphics.dest); + VramFree(pm->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/rings_manager.c b/sa1/src/game/sa1_sa2_shared/rings_manager.c new file mode 100644 index 0000000000..f5c0178d8c --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/rings_manager.c @@ -0,0 +1,436 @@ +#include +#include "global.h" +#include "core.h" +#include "malloc_ewram.h" +#include "rect.h" + +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/collect_ring_effect.h" +#include "game/sa1_sa2_shared/ring.h" +#include "game/sa1_sa2_shared/rings_manager.h" + +#include "game/entity.h" +#if (GAME == GAME_SA2) +#include "game/stage/player_super_sonic.h" +#endif + +#include "game/multiplayer/mp_player.h" + +#include "game/assets/compressed/entities.h" + +#include "constants/animations.h" + +typedef struct { + Sprite s; + void *rings; +} RingsManager; + +void Task_RingsMgrMain(void); +void TaskDestructor_8007F1C(struct Task *); + +// TODO: combine these macros with `ring.c` + +#define MP_PLAYER_TOUCHING_RING(mp, rect, ringIntX, ringIntY) \ + ((((ringIntX - TILE_WIDTH) <= RECT_LEFT(mp->pos.x, rect) && (ringIntX + TILE_WIDTH) >= RECT_LEFT(mp->pos.x, rect)) \ + || ((ringIntX - TILE_WIDTH) >= RECT_LEFT(mp->pos.x, rect) && RECT_RIGHT(mp->pos.x, rect) >= (ringIntX - TILE_WIDTH))) \ + && ((((ringIntY - (TILE_WIDTH * 2)) <= RECT_TOP(mp->pos.y, rect) && ringIntY >= RECT_TOP(mp->pos.y, rect)) \ + || ((ringIntY - (TILE_WIDTH * 2)) >= RECT_TOP(mp->pos.y, rect) \ + && RECT_BOTTOM(mp->pos.y, rect) >= (ringIntY - (TILE_WIDTH * 2)))))) + +#define PLAYER_TOUCHING_RING(p, rect, ringIntX, ringIntY) \ + ((((ringIntX - TILE_WIDTH) <= RECT_LEFT(I((p)->qWorldX), rect) && (ringIntX + TILE_WIDTH) >= RECT_LEFT(I((p)->qWorldX), rect)) \ + || ((ringIntX - TILE_WIDTH) >= RECT_LEFT(I((p)->qWorldX), rect) && RECT_RIGHT(I((p)->qWorldX), rect) >= (ringIntX - TILE_WIDTH))) \ + && ((((ringIntY - (TILE_WIDTH * 2)) <= RECT_TOP(I((p)->qWorldY), rect) && ringIntY >= RECT_TOP(I((p)->qWorldY), rect)) \ + || ((ringIntY - (TILE_WIDTH * 2)) >= RECT_TOP(I((p)->qWorldY), rect) \ + && RECT_BOTTOM(I((p)->qWorldY), rect) >= (ringIntY - (TILE_WIDTH * 2)))))) + +extern const u8 *const gSpritePosData_rings[]; + +void CreateStageRingsManager(void) +{ + struct Task *t; + RingsManager *mgr; + void **mgrRings; + Sprite *s; + u32 *ewramBuffer; + const u8 *compressedRingPosData; + u32 dataSize; + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + t = TaskCreate(Task_RingsMgrMain, sizeof(RingsManager), 0x2000, 0, TaskDestructor_8007F1C); + + compressedRingPosData = gSpritePosData_rings[gCurrentLevel]; + dataSize = (*(u32 *)compressedRingPosData) >> 8; + ewramBuffer = EwramMalloc(dataSize); + + RLUnCompWram(gSpritePosData_rings[gCurrentLevel], ewramBuffer); + } else { + t = TaskCreate(Task_RingsMgrMain, sizeof(RingsManager), 0x2000, 0, NULL); + + compressedRingPosData = (u8 *)(*MP_COLLECT_RINGS_COMPRESSED_SIZE); + dataSize = (*(u32 *)compressedRingPosData) >> 8; + dataSize = (dataSize + 3) >> 2; // Make it multiple of 4 + dataSize <<= 4; + ewramBuffer = (u32 *)(MP_COLLECT_RINGS_BUFFER + dataSize); + RLUnCompWram(MP_COLLECT_RINGS_COMPRESSED_POS_DATA[0], ewramBuffer); + } + + mgrRings = TASK_DATA(t) + offsetof(RingsManager, rings); + *mgrRings = ewramBuffer; + + s = TASK_DATA(t); + + s->x = 0; + s->y = 0; + + s->graphics.dest = RESERVED_RING_TILES_VRAM; + s->oamFlags = SPRITE_OAM_ORDER(20); + s->graphics.size = 0; +#if (GAME == GAME_SA1) + s->graphics.anim = SA1_ANIM_RING; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_RING; +#elif (GAME == GAME_SA3) + s->graphics.anim = SA3_ANIM_RING; +#endif + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = (SPRITE_FLAG(PRIORITY, 2)); +} + +// SA1 version has support for "Cheat Code Tails" +// (75.43%) https://decomp.me/scratch/e9Wqi +NONMATCH("asm/non_matching/game/stage/Task_RingsMgrMain.inc", void Task_RingsMgrMain(void)) +{ + // oam sub-frame ID? + u8 sp1C = 0; + s32 sp08; + u32 regions_x; // sp0C; + u32 regions_y; // sp10; + Player *p; + s8 rect[4] = { -gPlayer.spriteOffsetX, -gPlayer.spriteOffsetY, gPlayer.spriteOffsetX, gPlayer.spriteOffsetY }; + + s32 r4 = 0; + + if (!(gStageFlags & STAGE_FLAG__2)) { + + // _08007F60 + RingsManager *rm; + u32 *rings = *(u32 **)((uintptr_t)TASK_PTR(gCurTask->data) + offsetof(RingsManager, rings)); // sp14 + s32 *rings_header; + Sprite *s; // sp18 + const SpriteOffset *dimensions; // sp20 + u16 sl; // sl / sp40 + u16 sb; + +#if (GAME == GAME_SA2) + if (IS_BOSS_STAGE(gCurrentLevel)) { + if (gBossRingsShallRespawn && gBossRingsRespawnCount > 0) { + RLUnCompWram(gSpritePosData_rings[gCurrentLevel], rings); + gBossRingsShallRespawn = FALSE; + gBossRingsRespawnCount--; + } + } + + // _08007FBE + sp08 = FALSE; + if (gCurrentLevel == LEVEL_INDEX(ZONE_FINAL, ACT_TRUE_AREA_53)) { + u32 res = 0; // SuperSonicGetFlags() & (SUPER_FLAG__200 | SUPER_FLAG__10 | SUPER_FLAG__8 | SUPER_FLAG__4); + sp08 = TRUE; + + if (res) { + sp08 = FALSE; + } + + // _08007FE4 + // SuperSonicGetPos(&gPlayer.qWorldX, &gPlayer.qWorldY); + rect[0] = -10; + rect[1] = -10; + rect[2] = +10; + rect[3] = +10; + } + // _08007FFA +#endif + + rings = *(void **)((uintptr_t)TASK_PTR(gCurTask->data) + offsetof(RingsManager, rings)); + rm = TASK_DATA(gCurTask); + s = &rm->s; + UpdateSpriteAnimation(s); + + dimensions = s->dimensions; + rings++; + regions_x = (u16)*rings++; + regions_y = (u16)*rings++; + +#if (GAME == GAME_SA1) + for (r4 = 0; r4 < gNumSingleplayerCharacters; r4++) +#endif + { + p = (r4 == 0) ? &gPlayer : &gPartner; + + sl = (Q_24_8_TO_INT(p->qWorldY) + rect[1]) >> 8; + while (((sl <= (((Q_24_8_TO_INT(p->qWorldY) + rect[3]) - 16)) >> 8)) && (sl < regions_y)) { + sb = ((Q_24_8_TO_INT(p->qWorldX) + rect[0] - 8) >> 8); + while ((sb <= ((Q_24_8_TO_INT(p->qWorldX) + rect[2] - 8) >> 8)) && sb < regions_x) { + u32 offset = *(u32 *)((u8 *)rings + ((regions_x * sl) * sizeof(u32)) + (sb * sizeof(u32))); + + if (offset) { + MapEntity_Ring *meRing; + offset -= 8; + + meRing = (MapEntity_Ring *)&((u8 *)rings)[offset]; + + while (meRing->x != (u8)MAP_ENTITY_STATE_ARRAY_END) { + if (meRing->x != (u8)MAP_ENTITY_STATE_INITIALIZED) { + // _080080D6 + s16 rx = TO_WORLD_POS(meRing->x, sb); + s16 ry = TO_WORLD_POS(meRing->y, sl); + + if ((sp08 != FALSE) || (gCurrentLevel != 15 && IS_ALIVE(p))) { + // Player touches ring(?) + if (PLAYER_TOUCHING_RING(p, (struct Rect8 *)rect, rx, ry)) { + // _08008166 + INCREMENT_RINGS(1); + // _080081AC + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) + gRingCount = 255; + } + // _080081C0 + CreateCollectRingEffect(rx, ry); + meRing->x = (u8)MAP_ENTITY_STATE_INITIALIZED; + } + } + // _080081D2 + } + meRing++; + } + } + + sb++; + } + + sl++; + } + } + + if (IS_MULTI_PLAYER) { + u8 i; // sp30 + for (i = 0; i < 4; i++) { + u32 playerId = SIO_MULTI_CNT->id; + + if ((i != playerId) && (gMultiplayerPlayerTasks[i] != NULL)) { + // _08008258 + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + sl = (mpp->pos.y + s->hitboxes[0].b.top) >> 8; + + while (((sl) <= (((mpp->pos.y + s->hitboxes[0].b.bottom) + 8) >> 8)) && (sl < regions_y)) { + // _080082E2 + sb = ((mpp->pos.x + mpp->s.hitboxes[0].b.left) - 8) >> 8; + while ((sb <= (((mpp->pos.x + mpp->s.hitboxes[0].b.right) + 16) >> 8)) && (sb < regions_x)) { + // _080086E8 + u32 offset = *(u32 *)((u8 *)rings + ((regions_x * sl) * sizeof(u32)) + (sb * sizeof(u32))); + + if (offset != 0) { + MapEntity_Ring *meRing; + offset -= 8; + + meRing = (void *)((u8 *)rings + (offset)); + while (meRing->x != (u8)MAP_ENTITY_STATE_ARRAY_END) { + if (meRing->x != (u8)MAP_ENTITY_STATE_INITIALIZED) { + s16 ringIntX = TO_WORLD_POS(meRing->x, sb); + s16 ringIntY = TO_WORLD_POS(meRing->y, sl); + if (MP_PLAYER_TOUCHING_RING(mpp, &mpp->s.hitboxes[0].b, ringIntX, ringIntY)) { + u8 anim = s->graphics.anim - gPlayerCharacterIdleAnims[gMultiplayerCharacters[mpp->unk56]]; + if ((anim != 20 && anim != 21) || !(mpp->unk54 & 0x4)) { + CreateCollectRingEffect(ringIntX, ringIntY); + meRing->x = (u8)MAP_ENTITY_STATE_INITIALIZED; + } + } + } + meRing++; + } + } + sb++; + } + sl++; + } + } + // _08008472 = continue + } + } + // _0800847E + sl = gCamera.y >> 8; + + if ((gPlayer.itemEffect & PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC) && (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS)) { + + while (((sl << 8) < gCamera.y + DISPLAY_HEIGHT) && (sl < regions_y)) { + // _080086CC + sb = gCamera.x >> 8; + + while (((sb << 8) < (gCamera.x + DISPLAY_WIDTH))) { + // _080086E8 + u32 offset = *(u32 *)((u8 *)rings + ((regions_x * sl) * sizeof(u32)) + (sb * sizeof(u32))); + if ((sb >= regions_x)) { + break; + } + if (offset != 0) { + MapEntity_Ring *meRing; + offset -= 8; + + meRing = (void *)((u8 *)rings + (offset)); +#ifdef NON_MATCHING + goto end; + do { +#else + while (meRing->x != (u8)MAP_ENTITY_STATE_ARRAY_END) { +#endif + s16 rx, ry; + // _0800870C + if (meRing->x == (u8)MAP_ENTITY_STATE_INITIALIZED) { + meRing++; + } else { + rx = TO_WORLD_POS(meRing->x, sb); + ry = TO_WORLD_POS(meRing->y, sl); + + if (((u32)(rx - gCamera.x) + TILE_WIDTH) > (DISPLAY_WIDTH + 2 * TILE_WIDTH) || (((ry - gCamera.y)) < 0) + || (((ry - gCamera.y) - 2 * TILE_WIDTH) > DISPLAY_HEIGHT)) { + meRing++; + } else if (((rx - 64) <= Q_24_8_TO_INT(gPlayer.qWorldX)) && ((rx + 64) >= Q_24_8_TO_INT(gPlayer.qWorldX)) + && ((ry - 72) <= Q_24_8_TO_INT(gPlayer.qWorldY)) + && ((ry + 56 >= Q_24_8_TO_INT(gPlayer.qWorldY)))) { + CreateMagneticRing(rx, ry); + meRing->x = (u8)MAP_ENTITY_STATE_INITIALIZED; + meRing++; + + } else { + meRing++; + // _08008750 + if ((sp1C == 0) || s->oamBaseIndex == 0xFF) { + // _08008764 + s->oamBaseIndex = 0xFF; + + s->x = rx - gCamera.x; + s->y = ry - gCamera.y; + DisplaySprite(s); + } else { + // _08008788 + OamData *oamDat = &gOamMallocBuffer[s->oamBaseIndex]; + OamData *oamAllocated = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end == oamAllocated) + return; + + DmaCopy16(3, oamDat, oamAllocated, sizeof(OamDataShort)); + +#if !EXTENDED_OAM + // TODO: Can these be done more explicitly? + oamAllocated->all.attr1 &= 0xFE00; + oamAllocated->all.attr0 &= 0xFF00; + oamAllocated->all.attr0 += ((ry - gCamera.y) - dimensions->offsetY) & 0xFF; + oamAllocated->all.attr1 += ((rx - gCamera.x) - dimensions->offsetX) & 0x1FF; +#else + oamAllocated->split.x = ((rx - gCamera.x) - dimensions->offsetX); + oamAllocated->split.y = ((ry - gCamera.y) - dimensions->offsetY); +#endif + } + sp1C++; + } + } +#ifdef NON_MATCHING + end:; + } while (meRing->x != (u8)MAP_ENTITY_STATE_ARRAY_END); +#else + } +#endif + } + + sb++; + } + // _0800882C + sl++; + } + } else { + while (sl << 8 < (gCamera.y + DISPLAY_HEIGHT) && (sl < regions_y)) { + // _080086CC + sb = gCamera.x >> 8; + + while (sb << 8 < (gCamera.x + DISPLAY_WIDTH) && sb < regions_x) { + // _080086E8 + u32 offset = *(u32 *)((u8 *)rings + ((regions_x * sl) * sizeof(u32)) + (sb * sizeof(u32))); + + if (offset != 0) { + MapEntity_Ring *meRing; + offset -= 8; + + meRing = (void *)((u8 *)rings + (offset)); + while (meRing->x != (u8)MAP_ENTITY_STATE_ARRAY_END) { + // _0800870C + if (meRing->x == (u8)MAP_ENTITY_STATE_INITIALIZED) { + meRing++; + } else { + s16 rx = TO_WORLD_POS(meRing->x, sb); + s16 ry = TO_WORLD_POS(meRing->y, sl); + + if ((unsigned)((rx - gCamera.x) + TILE_WIDTH) > (DISPLAY_WIDTH + 2 * TILE_WIDTH) || (((ry - gCamera.y)) < 0) + || (((ry - gCamera.y) - 2 * TILE_WIDTH) > DISPLAY_HEIGHT)) { + meRing++; + } else { + meRing++; + // _08008750 + if ((sp1C == 0) || s->oamBaseIndex == 0xFF) { + // _08008764 + s->oamBaseIndex = 0xFF; + + s->x = rx - gCamera.x; + s->y = ry - gCamera.y; + DisplaySprite(s); + } else { + // _08008788 + OamData *oamDat = &gOamMallocBuffer[s->oamBaseIndex]; + OamData *oamAllocated = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end == oamAllocated) + return; + + DmaCopy16(3, oamDat, oamAllocated, 6 /*sizeof(OamDataShort)*/); + +#if !EXTENDED_OAM + // TODO: Can these be done more explicitly? + oamAllocated->all.attr1 &= 0xFE00; + oamAllocated->all.attr0 &= 0xFF00; + oamAllocated->all.attr0 += ((ry - gCamera.y) - dimensions->offsetY) & 0xFF; + oamAllocated->all.attr1 += ((rx - gCamera.x) - dimensions->offsetX) & 0x1FF; +#else + oamAllocated->split.x = ((rx - gCamera.x) - dimensions->offsetX); + oamAllocated->split.y = ((ry - gCamera.y) - dimensions->offsetY); +#endif + } + sp1C++; + } + + continue; + } + } + } + + sb++; + } + // _0800882C + sl++; + } + } + } +} +END_NONMATCH + +void TaskDestructor_8007F1C(struct Task *t) +{ + void *rings = *(void **)(TASK_DATA(t) + offsetof(RingsManager, rings)); + EwramFree(rings); +} diff --git a/sa1/src/game/sa1_sa2_shared/spot_light_beam_task.c b/sa1/src/game/sa1_sa2_shared/spot_light_beam_task.c new file mode 100644 index 0000000000..ad7b33fe2b --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/spot_light_beam_task.c @@ -0,0 +1,214 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "sprite.h" +#include "bg_triangles.h" +#include "task.h" +#include "trig.h" +#include "gba/syscall.h" +#include "game/sa1_sa2_shared/spot_light_beam_task.h" + +void Task_SpotlightBeam(void); +void TaskDestructor_SpotlightBeam(struct Task *); + +/* This task is related to spot lights in Ice Paradise. */ + +#if PORTABLE || DEBUG +void Task_SpotlightBeamDummy(void) { } +#endif +struct Task *CreateSpotlightBeamTask(void) +{ +#if PORTABLE || DEBUG + struct Task *t = TaskCreate(Task_SpotlightBeamDummy, sizeof(SpotlightBeam), 0x2000, 0, NULL); +#else + struct Task *t = TaskCreate(Task_SpotlightBeam, sizeof(SpotlightBeam), 0x2000, 0, TaskDestructor_SpotlightBeam); +#endif + SpotlightBeam *beam = TASK_DATA(t); + + beam->unk6 = 120; + beam->unk8 = 200; + beam->unk0 = 0; + beam->unk2 = 64; + beam->unk4 = 0x800; + beam->bg = 0; + beam->unkB = 32; + + return t; +} + +// NOTE: The SA1 assembly code is different to SA2's version, so the code might not be accurate! +NONMATCH("asm/non_matching/game/sa1_sa2_shared/Task_SpotlightBeam.inc", void Task_SpotlightBeam(void)) +{ + u32 sinIndex; + s32 someCos; + + SpotlightBeam *beam = TASK_DATA(gCurTask); + + if (beam->unkB != 0) { + // _08009984 + + if (beam->unk0 < Q(2.0)) { + beam->unk4 -= beam->unk2; + } else { + beam->unk4 += beam->unk2; + } + // _080099A6 + beam->unk0 = (beam->unk0 - (beam->unk4 >> 8)) & ONE_CYCLE; + + sinIndex = (beam->unk0 + beam->unkB) & ONE_CYCLE; + someCos = COS_24_8(sinIndex); + + if (someCos != 0) { + // _080099D6 + s16 divRes; + int_vcount sp08[8]; + Vec2_16 sp10; + s16 sp14[2]; + s32 sb; + s32 r5; + s32 temp; + + divRes = Div(Q(sinIndex) << 8, someCos); + sp10.x = beam->unk6 - I(beam->unk8 * divRes); + + if (sp10.x <= 0) { + sp10.x = 0; + + if (sinIndex >= 256) { + s32 newSinIndex = ((sinIndex - 256 - 512) & ONE_CYCLE); + s32 newSinValue = Q(SIN_24_8(newSinIndex)); + + divRes = Div(newSinValue, COS_24_8(newSinIndex)); + sp10.y = I(beam->unk6 * divRes); + } else { + // _08009A50 + s32 newSinIndex = ((sinIndex - 256) & ONE_CYCLE); + s32 newSinValue = SIN_24_8(newSinIndex); + + divRes = Div(newSinValue, COS_24_8(newSinIndex)); + sp10.y = I(beam->unk6 * divRes); + } + } else if (sp10.x >= DISPLAY_WIDTH) { + // _08009A86 + s32 r1; + sp10.x = DISPLAY_WIDTH; // might be DISPLAY_WIDTH? + if (sinIndex >= 256) { + r1 = sinIndex - Q(3.0); + } else { + r1 = sinIndex + sp10.x; + } + + (SIN_24_8(r1 & ONE_CYCLE)); + } else { + // _08009ADE + sp10.y = 0; + } + // _08009AE4 + sp08[0] = sp10.x; + sb = 0; + sp08[1] = sp10.y; + + // __08009AF4 + + divRes = Div((SIN_24_8(sinIndex & ONE_CYCLE) << 8), COS_24_8(sinIndex & ONE_CYCLE)); + sp08[2] = Q((beam->unk8 * divRes) - DISPLAY_HEIGHT); + sp08[3] = DISPLAY_HEIGHT; + + r5 = (beam->unk0 - beam->unkB); + r5 &= ONE_CYCLE; + + divRes = Div(SIN_24_8(r5) << 8, COS_24_8(r5)); + sp14[0] = ((beam->unk8 * divRes) >> 8) + beam->unk6; + + if (sp14[0] <= 0) { + sp14[0] = sb; + + if (r5 >= 256) { + sinIndex = r5 - Q(3.0); + } else { + sinIndex = 256 - r5; + } + + divRes = Div((SIN_24_8(sinIndex & ONE_CYCLE) << 8), COS_24_8(sinIndex & ONE_CYCLE)); + sp14[1] = beam->unk8 - ((beam->unk6 * divRes) >> 8); + } else if (sp14[0] >= DISPLAY_WIDTH) { + // _08009BD8 + sb = DISPLAY_WIDTH; + sp14[0] = DISPLAY_WIDTH; + + if (r5 >= 256) { + sinIndex = r5 - Q(3.0); + } else { + sinIndex = 256 - r5; + } + // _08009BF6 + divRes = Div((SIN_24_8(sinIndex & ONE_CYCLE) << 8), COS_24_8(sinIndex & ONE_CYCLE)); + sp14[1] = beam->unk8 - (((sb - beam->unk6) * divRes) >> 8); + + } else { + // _08009C34 + sp14[1] = 0; + } + + // _08009C3A + sp08[4] = sp14[0]; + sp08[5] = sp14[1]; + + // _08009C46 + divRes = Div(SIN_24_8(r5) << 8, COS_24_8(r5)); + sp08[6] = (((beam->unk8 - DISPLAY_HEIGHT) * divRes) >> 8) + beam->unk6; + sp08[7] = DISPLAY_HEIGHT; + + if (beam->unk0 < Q(2.0)) { + if (sp14[1] < DISPLAY_HEIGHT) { + // _08009C98 + if ((u16)sp10.y >= DISPLAY_HEIGHT) { + if (beam->bg & 0x1) { + gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp08[5], DISPLAY_HEIGHT); + } else { + // _08009CCC + gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp08[5], DISPLAY_HEIGHT); + } + + sa2__sub_8006228(beam->bg, sp08[4], sp08[5], sp08[6], sp08[7], 0); + } else { + // _08009CFC + if (beam->bg & 0x1) { + gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp08[5], DISPLAY_HEIGHT); + } else { + // _08009D1C + gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp08[5], DISPLAY_HEIGHT); + } + + sa2__sub_800724C(beam->bg, (void *)&sp08); + } + } + } else if (sp10.y < DISPLAY_HEIGHT) { + // __08009D44 + if (sp14[1] >= DISPLAY_HEIGHT) { + if (beam->bg & 0x1) { + gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp08[1], DISPLAY_HEIGHT); + } else { + // _08009D70 + gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp08[1], DISPLAY_HEIGHT); + } + + sa2__sub_80064A8(beam->bg, sp08[0], sp08[1], sp08[2], sp08[3], 0); + } else { + // _08009DA0 + if (beam->bg & 0x1) { + gWinRegs[WINREG_WIN1V] = WIN_RANGE(sp08[1], DISPLAY_HEIGHT); + } else { + // _08009D1C + gWinRegs[WINREG_WIN0V] = WIN_RANGE(sp08[1], DISPLAY_HEIGHT); + } + + sa2__sub_800724C(beam->bg, (void *)&sp08); + } + } + } + } +} +END_NONMATCH + +void TaskDestructor_SpotlightBeam(struct Task *t) { gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; } \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/spot_lights_manager.c b/sa1/src/game/sa1_sa2_shared/spot_lights_manager.c new file mode 100644 index 0000000000..6ea5e366f3 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/spot_lights_manager.c @@ -0,0 +1,124 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "game/parameters/stage.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/sa1_sa2_shared/spot_light_beam_task.h" +#include "game/sa1_sa2_shared/spot_lights_manager.h" + +typedef struct { + /* 0x00 */ struct Task *spotlightTaskA; + /* 0x04 */ struct Task *spotlightTaskB; + /* 0x08 */ s16 qBlend; +} SpotlightsManager; + +void Task_SpotlightsManagerMain(void); +void Task_801796C(void); +void TaskDestructor_SpotlightsManager(struct Task *t); + +bool32 CreateSpotlightsManager(void) +{ + if (PORTABLE || gPlayer.checkPointX > SPOTLIGHT_DESPAWN_X0) { + return FALSE; + } else { + struct Task *t = TaskCreate(Task_SpotlightsManagerMain, sizeof(SpotlightsManager), 0x2000, 0, TaskDestructor_SpotlightsManager); + SpotlightsManager *manager = TASK_DATA(t); + SpotlightBeam *beamA, *beamB; + + manager->qBlend = Q(16); + manager->spotlightTaskA = CreateSpotlightBeamTask(); + beamA = TASK_DATA(manager->spotlightTaskA); + beamA->unk6 = 60; + beamA->unk8 = 200; + beamA->unk0 = 0; + beamA->unk2 = 0x40; + beamA->unk4 = 0x40; + beamA->unk4 = 0x800; + beamA->bg = 2; + beamA->unkB = 0x20; + + manager->spotlightTaskB = CreateSpotlightBeamTask(); + beamA = TASK_DATA(manager->spotlightTaskB); + beamA->unk6 = 200; + beamA->unk8 = 240; + beamA->unk0 = 0; + beamA->unk2 = 8; + beamA->unk4 = 0x400; + beamA->bg = 3; + beamA->unkB = 0x10; + + gBldRegs.bldCnt = (BLDCNT_EFFECT_DARKEN | BLDCNT_TGT2_ALL | (BLDCNT_TGT1_ALL & ~BLDCNT_TGT1_BD)); + gBldRegs.bldY = I(manager->qBlend); + } + + return TRUE; +} + +void Task_SpotlightsManagerMain(void) +{ + SpotlightsManager *manager = TASK_DATA(gCurTask); + SpotlightBeam *beam; + s32 unkC; + + gDispCnt |= (DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + + gWinRegs[WINREG_WININ] = (WININ_WIN0_ALL & ~WININ_WIN0_CLR) | (WININ_WIN1_ALL & ~WININ_WIN1_CLR); + gWinRegs[WINREG_WINOUT] = (WININ_WIN0_ALL); + + manager->qBlend -= Q(0.25); + + if (manager->qBlend < Q(8.0)) { + manager->qBlend = Q(8.0); + } + + gBldRegs.bldY = I(manager->qBlend); + + if (I(gPlayer.qWorldX) > SPOTLIGHT_DESPAWN_X0) { + gCurTask->main = Task_801796C; + } else if ((gPlayer.moveState & MOVESTATE_DEAD) || gDestroySpotlights) { + TaskDestroy(manager->spotlightTaskA); + TaskDestroy(manager->spotlightTaskB); + TaskDestroy(gCurTask); + return; + } +} + +void Task_801796C(void) +{ + SpotlightsManager *manager = TASK_DATA(gCurTask); + + manager->qBlend -= Q(0.25); + + if (manager->qBlend < Q(0)) { + TaskDestroy(manager->spotlightTaskA); + TaskDestroy(manager->spotlightTaskB); + TaskDestroy(gCurTask); + return; + } + + if ((I(gPlayer.qWorldX) > SPOTLIGHT_DESPAWN_X1) || !PLAYER_IS_ALIVE || gDestroySpotlights) { + TaskDestroy(manager->spotlightTaskA); + TaskDestroy(manager->spotlightTaskB); + TaskDestroy(gCurTask); + return; + } + + gBldRegs.bldY = I(manager->qBlend); +} + +void TaskDestructor_SpotlightsManager(struct Task *t) +{ + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, 0); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, 0); + gWinRegs[WINREG_WIN1H] = WIN_RANGE(0, 0); + gWinRegs[WINREG_WIN1V] = WIN_RANGE(0, 0); + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; +} \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/unused_flash_task.c b/sa1/src/game/sa1_sa2_shared/unused_flash_task.c new file mode 100644 index 0000000000..efe83b56f1 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/unused_flash_task.c @@ -0,0 +1,59 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "task.h" +#include "animation_commands_bg.h" +#include "game/title_screen.h" + +#include "data/tileset_debug_ascii.h" + +static const char ALIGNED(4) sTxtFlash[] + = { 'F', 'L', 'A', 'S', 'H', 0xC5, 0xB2, 0xC4, 0x2C, 0xBE, 0xB0, 0xCC, 0xDE, 0xC3, 0xDE, 0xB7, 0xC5, 0xB2, 0xC3, 0xDE, 0xBD }; + +void Task_UnusedFlashTask(void); +void DestroyUnusedFlashTask(void); + +void CreateUnusedFlashTask(void) +{ + gDispCnt = (DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_0); + gBgCntRegs[2] = (BGCNT_SCREENBASE(30) | BGCNT_16COLOR | BGCNT_CHARBASE(0) | BGCNT_PRIORITY(1)); + DmaFill32(3, 0, VRAM, 2 * TILE_SIZE_4BPP); + + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xFF; + gBgSprites_Unknown2[2][3] = 0x40; + + { + struct Task *t = TaskCreate(Task_UnusedFlashTask, 0, 0x1000, 0, NULL); + gBgPalette[1] = RGB_WHITE; + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; + } +} + +void Task_UnusedFlashTask(void) +{ + RenderText((void *)(VRAM + 1 * TILE_SIZE_4BPP), &Tileset_DebugAscii, 1, 10, 2, sTxtFlash, 0); + + if (gPressedKeys & A_BUTTON) { + DestroyUnusedFlashTask(); + } +} + +void DestroyUnusedFlashTask(void) +{ + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xFF; + gBgSprites_Unknown2[2][3] = 0x20; + + TaskDestroy(gCurTask); + +#if (GAME == GAME_SA1) + CreateSegaLogo(); +#elif (GAME == GAME_SA2) + CreateTitleScreen(); +#endif +} \ No newline at end of file diff --git a/sa1/src/game/sa1_sa2_shared/unused_level_select.c b/sa1/src/game/sa1_sa2_shared/unused_level_select.c new file mode 100644 index 0000000000..5f52b90ac7 --- /dev/null +++ b/sa1/src/game/sa1_sa2_shared/unused_level_select.c @@ -0,0 +1,279 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "lib/m4a/m4a.h" +#include "task.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/character_select.h" + +#include "game/credits.h" +#include "game/stage/extra_stage.h" +#include "game/stage/stage.h" +#include "game/multiplayer/communication_outcome.h" +#include "game/multiplayer/multipak_connection.h" +#include "game/multiplayer/results.h" + +#if (GAME == GAME_SA2) +#include "game/bosses/common.h" +#include "game/title_screen.h" +#endif + +#if (GAME == GAME_SA1) || PORTABLE +#include "game/special_stage/main.h" +#endif + +#include "animation_commands_bg.h" +#include "data/tileset_debug_ascii.h" + +#include "constants/songs.h" + +#if (GAME == GAME_SA1) +#define LEFT_INPUT(value) (value)++ +#define RIGHT_INPUT(value) (value)-- +#else +#define LEFT_INPUT(value) (value)-- +#define RIGHT_INPUT(value) (value)++ +#endif + +typedef struct { + void *vram; + u16 unk4; + u8 levelId; +} LevelSelect; + +// TODO: static +static void Task_UnusedLevelSelectInit(void); +static void Task_Poll(void); +static void Task_CreateMultiplayer(void); +static void Task_CreateSelectedTask(void); + +// TODO: Move these into header files + +void CreateUnusedLevelSelect(void) +{ + struct Task *t = TaskCreate(Task_UnusedLevelSelectInit, sizeof(LevelSelect), 0x2000, 0, NULL); + gMultiplayerMissingHeartbeats[3] = 0; + gMultiplayerMissingHeartbeats[2] = 0; + gMultiplayerMissingHeartbeats[1] = 0; + gMultiplayerMissingHeartbeats[0] = 0; + + { + LevelSelect *levelSelect = TASK_DATA(t); + + gDispCnt = (DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_0); + gBgCntRegs[0] = (BGCNT_SCREENBASE(31) | BGCNT_16COLOR | BGCNT_CHARBASE(1) | BGCNT_PRIORITY(2)); + + levelSelect->unk4 = 0; + levelSelect->levelId = 0; + levelSelect->vram = (void *)(BG_CHAR_ADDR(1) + 1 * TILE_SIZE_4BPP); + +#if (GAME == GAME_SA2) + gBldRegs.bldY = 0; + gBldRegs.bldCnt = BLDCNT_EFFECT_NONE; + gBldRegs.bldAlpha = BLDCNT_EFFECT_NONE; + + gWinRegs[WINREG_WIN0H] = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(DISPLAY_HEIGHT, DISPLAY_HEIGHT); + + gWinRegs[WINREG_WIN1H] = WIN_RANGE(DISPLAY_WIDTH, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN1V] = WIN_RANGE(DISPLAY_HEIGHT, DISPLAY_HEIGHT); + + gWinRegs[WINREG_WININ] = 0; + gWinRegs[WINREG_WINOUT] = 0; + + gDispCnt &= ~(DISPCNT_OBJWIN_ON | DISPCNT_WIN1_ON | DISPCNT_WIN0_ON); + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; +#endif + } +} + +void Task_Poll(void) +{ + LevelSelect *levelSelect = TASK_DATA(gCurTask); + + u8 digits[5]; + + if (gPressedKeys & (START_BUTTON | A_BUTTON)) { + m4aSongNumStart(SE_SELECT); + +#if (GAME == GAME_SA1) + m4aSongNumStop(MUS_CHARACTER_SELECTION); +#endif + + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; +#if (GAME == GAME_SA1) + if (IS_MULTI_PLAYER) { + gCurTask->main = Task_CreateMultiplayer; + } else { + gCurTask->main = Task_CreateSelectedTask; + } +#else + gCurTask->main = Task_LoadStage; +#endif + } else if (gPressedKeys & B_BUTTON) { + m4aSongNumStart(SE_RETURN); + TaskDestroy(gCurTask); + +#if (GAME == GAME_SA1) + CreateCharacterSelectionScreen(0); +#endif + + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; + } else { + if (gRepeatedKeys & DPAD_LEFT) { + LEFT_INPUT(levelSelect->levelId); + } else if (gRepeatedKeys & DPAD_RIGHT) { + RIGHT_INPUT(levelSelect->levelId); + } + + numToASCII(digits, levelSelect->levelId); + RenderText(levelSelect->vram, Tileset_DebugAscii, 12, 14, 0, (char *)digits, 0); + } +} + +#if (GAME == GAME_SA1) +// (95.38%) https://decomp.me/scratch/JguNX +NONMATCH("asm/non_matching/game/sa1_sa2_shared/unused_lvl_select__Task_CreateMultiplayer.inc", void Task_CreateMultiplayer(void)) +{ + LevelSelect *levelSelect = TASK_DATA(gCurTask); + u32 i; + + if (IS_MULTI_PLAYER) { + for (i = 0; i < 4 && GetBit(gMultiplayerConnections, i); i++) { + if (!(gMultiSioStatusFlags & (1 << i))) { + if (++gMultiplayerMissingHeartbeats[i] > 180) { + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + LinkCommunicationError(); + return; + } + } else { + gMultiplayerMissingHeartbeats[i] = 0; + } + } + } + // _0800E2CE + + if (gMultiSioRecv->pat0.unk0 == 82) { + levelSelect->levelId = gMultiSioRecv->pat0.unk2; + gCurTask->main = Task_CreateSelectedTask; + return; + } + + gMultiSioSend.pat0.unk0 = 81; + gMultiSioSend.pat0.unk2 = levelSelect->levelId; + + if (gMultiSioStatusFlags & MULTI_SIO_PARENT) { + u8 j; + for (j = 0; j < 4; j++) { + if (GetBit(gMultiplayerConnections, j)) { + if (gMultiSioRecv[j].pat0.unk0 != 81) { + return; + } + } + } + gMultiSioSend.pat0.unk0 = 82; + } +} +END_NONMATCH + +void Task_CreateSelectedTask(void) +{ + LevelSelect *levelSelect = TASK_DATA(gCurTask); + u8 levelId = levelSelect->levelId; + + TaskDestroy(gCurTask); + + if (levelId == LEVEL_INDEX(ZONE_1, ACT_1)) { + gCurrentLevel = LEVEL_INDEX(ZONE_1, ACT_1); + ApplyGameStageSettings(); + } else if (levelId == 0xFF) { + CreateStaffCredits(); + } else if (levelId == 0xFE) { + CreateCongratulationsAnimation(); + } else if (levelId == 0xFD) { + CreateExtraStageResults(); + } else if (levelId == 0xFC) { + CreateMultiplayerResultsScreen(0); + } else if (levelId == 0xFB) { + CreateMultiplayerResultsScreen(1); + } else if (levelId == 0xFA) { + CreateMultiplayerResultsScreen(2); + } else if (levelId == 0xF9) { + CreateMultipackOutcomeScreen(0); + } else if (levelId == 0xF8) { + CreateMultipackOutcomeScreen(1); + } else if (levelId < NUM_LEVEL_IDS + 1) { + gCurrentLevel = levelId - 1; + + if (!(gInput & R_BUTTON)) { + ApplyGameStageSettings(); + } else { + CreateSpecialStage(); + } + } +} + +#endif // (GAME == GAME_SA1) + +static void Task_UnusedLevelSelectInit(void) +{ + LevelSelect *levelSelect = TASK_DATA(gCurTask); + gBgPalette[1] = RGB_WHITE; + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; + + levelSelect->vram += RenderText(levelSelect->vram, Tileset_DebugAscii, 6, 14, 0, "STAGE", 0); + + gCurTask->main = Task_Poll; + gCurTask->main(); +} + +#if (GAME == GAME_SA2) +static void Task_LoadStage(void) +{ + LevelSelect *levelSelect = TASK_DATA(gCurTask); + + u32 levelId = levelSelect->levelId; + u8 levelId2 = levelId; + + TaskDestroy(gCurTask); + + if (levelId == 0) { + gCurrentLevel = levelId; +#if PORTABLE + ApplyGameStageSettings(); + CreateSpecialStage(-1, -1); +#else + GameStageStart(); +#endif + } else if (levelId2 <= NUM_LEVEL_IDS) { +#if (GAME == GAME_SA2) + gActiveBossTask = NULL; +#endif + gCurrentLevel = levelId2 - 1; +#if PORTABLE + ApplyGameStageSettings(); + CreateSpecialStage(-1, -1); +#else + GameStageStart(); +#endif + } +} + +static void nullsub_8009910(void) { } +static void nullsub_8009914(void) { } +#endif diff --git a/sa1/src/game/save.c b/sa1/src/game/save.c new file mode 100644 index 0000000000..2887449b9c --- /dev/null +++ b/sa1/src/game/save.c @@ -0,0 +1,237 @@ +#include "global.h" +#include "flags.h" +#include "malloc_ewram.h" +#include "lib/agb_flash/agb_flash.h" +#include "game/save.h" + +struct SaveSectorHeader { + u32 security, version; +}; + +struct SaveSectorData { + /* 0x000 */ struct SaveSectorHeader header; + + /* 0x008 */ u8 filler8[0x424]; + + /* 0x42C */ u32 checksum; +}; + +struct SaveGame gLoadedSaveGame = {}; + +#define CalcChecksum(save) \ + ({ \ + u32 j, checksum = 0; \ + for (j = 0; j < SECTOR_CHECKSUM_OFFSET; j += sizeof(uintptr_t)) { \ + checksum += *(uintptr_t *)((void *)(save) + j); \ + } \ + checksum; \ + }) + +#define SECTOR_CHECKSUM_OFFSET offsetof(struct SaveSectorData, checksum) +#define NUM_SAVE_SECTORS 10 + +// If the sector's security field is not this value then the sector is either invalid or +// empty. +#if (GAME == GAME_SA1) +#define SECTOR_SECURITY_NUM 0x4F524950 +#elif (GAME == GAME_SA2) +#define SECTOR_SECURITY_NUM 0x4547474D +#elif (GAME == GAME_SA3) +#define SECTOR_SECURITY_NUM 0x47544E4C +#endif + +extern s8 ALIGNED(4) gUsedSaveSectorID; + +u32 CalculateChecksum(void *data); + +bool32 SaveGameExists(void) +{ + s8 sectorID = 0; + bool32 res; + gUsedSaveSectorID = -1; + + if (gFlags & FLAGS_NO_FLASH_MEMORY) { + return 0; + }; + + { // TODO: Can you integrate this block while still matching? + ReadFlash(sectorID, 0, LOADED_SAVE, sizeof(struct SaveSectorData)); + + if (LOADED_SAVE->security == SECTOR_SECURITY_NUM) { + if (LOADED_SAVE->checksum == CalculateChecksum(LOADED_SAVE)) { + gUsedSaveSectorID = sectorID; + } + } else { + sectorID = 1; + } + } + + for (; sectorID < NUM_SAVE_SECTORS; sectorID++) { + ReadFlash(sectorID, 0, LOADED_SAVE, sizeof(struct SaveSectorData)); + + if (LOADED_SAVE->security == SECTOR_SECURITY_NUM) { + if (LOADED_SAVE->checksum == CalculateChecksum(LOADED_SAVE)) { + gUsedSaveSectorID = sectorID; + } + } else { + break; + } + } + + if ((u8)gUsedSaveSectorID == 0xFF) { + gUsedSaveSectorID = -1; + res = FALSE; + } else { + ReadFlash(gUsedSaveSectorID, 0, LOADED_SAVE, sizeof(struct SaveSectorData)); + res = TRUE; + } + + return res; +} + +// (97.63%) https://decomp.me/scratch/Sq2Ec +NONMATCH("asm/non_matching/game/save__WriteSaveGame.inc", u16 WriteSaveGame(void)) +{ + s32 i; + s8 sectorID; + u16 result; + + if (gFlags & FLAGS_NO_FLASH_MEMORY) { + return 0; + }; + + if (gUsedSaveSectorID != -1) { + u8 *sectorBuffer = EwramMalloc(sizeof(struct SaveSectorData)); + bool32 sectorIsUpToDate; + ReadFlash(gUsedSaveSectorID, 0, sectorBuffer, sizeof(struct SaveSectorData)); + + sectorIsUpToDate = TRUE; + for (i = 0; i < sizeof(struct SaveSectorData); i++) { + u8 *dataBuffer = sectorBuffer + i; + u8 *dataIWRAM = (u8 *)LOADED_SAVE + i; + + if (*dataBuffer != *dataIWRAM) { + sectorIsUpToDate = FALSE; + break; + } + } + + EwramFree(sectorBuffer); + + if (sectorIsUpToDate) { + return 0; + } + } + // _08012E1C + + sectorID = gUsedSaveSectorID + 1; + if (sectorID == NUM_SAVE_SECTORS - 1) { + result = EraseFlashSector(0); + } else { + if (sectorID >= NUM_SAVE_SECTORS) { + sectorID = 0; + } + + result = EraseFlashSector(sectorID + 1); + } + + if (result == 0) { + LOADED_SAVE->security = SECTOR_SECURITY_NUM; + LOADED_SAVE->checksum = CalculateChecksum(LOADED_SAVE); + gUsedSaveSectorID = sectorID; + + result = ProgramFlashSectorAndVerifyNBytes(gUsedSaveSectorID, LOADED_SAVE, sizeof(LOADED_SAVE->security)); + } + return result; +} +END_NONMATCH + +// (100.0%) https://decomp.me/scratch/9fyQQ +bool32 RegisterTimeRecord(TimeRecord newRecord) +{ + bool32 isFirstPlace = FALSE; + + u32 i, i2; + + for (i = 0; i < TIME_RECORDS_PER_COURSE; i++) { +#ifndef NON_MATCHING + register TimeRecord record asm("r1"); +#else + TimeRecord record; +#endif + TimeRecord tempRecord; + record = LOADED_SAVE->timeRecords.table[gSelectedCharacter][gCurrentLevel][i]; + + if (newRecord < record) { + tempRecord = record; + LOADED_SAVE->timeRecords.table[gSelectedCharacter][gCurrentLevel][i] = newRecord; + + i2 = i; + while (++i2 < TIME_RECORDS_PER_COURSE) { + XOR_SWAP_WORD(LOADED_SAVE->timeRecords.table[gSelectedCharacter][gCurrentLevel][i2], tempRecord); + } + + if (i == 0) { + isFirstPlace = TRUE; + } + break; + } + } + + return isFirstPlace; +} + +s32 sub_8012F6C(void) +{ + s8 i; + + if (gFlags & FLAGS_NO_FLASH_MEMORY) { + return 0; + }; + + for (i = 0; i < NUM_SAVE_SECTORS; i++) { + s32 result = EraseFlashSector(i); + if (result != 0) { + return result; + } + } + + gUsedSaveSectorID = 0; + + return 0; +} + +u32 CalculateChecksum(void *data) { return CalcChecksum(data); } + +#if (GAME == GAME_SA2) +// Read flash data at given sector into data +// and verify integrity +static bool16 ReadSaveSectorAndVerifyChecksum(struct SaveSectorData *save, s16 sectorNum) +{ + u32 i; + u32 sum; + u32 *expected; + + ReadFlash(sectorNum, 0, save, sizeof(struct SaveSectorData)); + expected = &save->checksum; + + sum = CalcChecksum(save); + + if (*expected != sum) { + return 0; + } + + return 1; +} + +static bool16 StringEquals(u16 *string1Char, u16 *string2Char, s16 length) +{ + s16 i; + for (i = 0; i < length; i++, string1Char++, string2Char++) { + if (*string1Char != *string2Char) { + return FALSE; + } + } + return TRUE; +} +#endif diff --git a/sa1/src/game/some_task_manager.c b/sa1/src/game/some_task_manager.c new file mode 100644 index 0000000000..1c82cf915d --- /dev/null +++ b/sa1/src/game/some_task_manager.c @@ -0,0 +1,259 @@ +#include "global.h" +#include "core.h" +#include "sprite.h" +#include "malloc_vram.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/some_task_manager.h" +#include "game/stage/player_controls.h" + +#include "constants/move_states.h" + +void sub_804CD80(SomeTaskManager_60 *taskData, GfxInfo *gfx); +void sub_804CF5C(SomeTaskManager_7C *taskData, GfxInfo *gfx); + +ALIGNED(16) u16 gUnknown_030060F0[64] = { 0 }; +ALIGNED(16) u16 gUnknown_03006170[64] = { 0 }; + +void sub_804CD80(SomeTaskManager_60 *taskData, GfxInfo *gfx) +{ + Sprite *s; + SpriteTransform *transform; + + taskData->unk0 = 0; + taskData->unk2 = 0; + taskData->unk3 = 0; + taskData->unk4 = 0; + taskData->unk8 = 0; + + taskData->qUnk50 = 0; + taskData->qUnk54 = 0; + taskData->qUnk58 = 0; + taskData->qUnk5A = 0; + taskData->qUnk5C = 0; + taskData->qUnk5E = 0; + + s = &taskData->s; + transform = &taskData->transform; + + s->graphics.dest = gfx->vram; + s->graphics.anim = gfx->tileInfo.anim; + s->variant = gfx->tileInfo.variant; + s->oamFlags = 0; + s->frameFlags = 0; + s->graphics.size = 0; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + + transform->rotation = 0; + transform->qScaleX = Q(1.0); + transform->qScaleY = Q(1.0); + transform->x = 0; + transform->y = 0; + + s->hitboxes[1].index = HITBOX_STATE_INACTIVE; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; +} + +void sub_804CDF8(void) +{ + SomeTaskManager_60 *taskData = TASK_DATA(gCurTask); + Sprite *s = &taskData->s; + SpriteTransform *transform = &taskData->transform; + Camera *cam = &gCamera; + s32 screenX, screenY; + + screenX = I(taskData->qUnk50) - cam->x; + screenY = I(taskData->qUnk54) - cam->y; + + // TODO: Proper range check for Y! + if ((screenX < -32 || screenX >= DISPLAY_WIDTH + 32) || (screenY >= DISPLAY_HEIGHT + 64)) { + TaskDestroy(gCurTask); + return; + } + + transform->x = screenX; + transform->y = screenY; + + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; + + s->frameFlags |= SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + + UpdateSpriteAnimation(s); + TransformSprite(s, transform); + DisplaySprite(s); + + { // TODO: inline of sub_804CFA0? + taskData->qUnk50 += taskData->qUnk58; + taskData->qUnk54 += taskData->qUnk5A; + taskData->qUnk58 += taskData->qUnk5C; + taskData->qUnk5A += taskData->qUnk5E; + } +} + +struct Task *CreateSomeTaskManager_60_Task(GfxInfo *gfx, TaskMain proc, TaskDestructor dtor) +{ + struct Task *t = TaskCreate(proc, sizeof(SomeTaskManager_60), gCurTask->priority + 1, 0, dtor); + + sub_804CD80(TASK_DATA(t), gfx); + + return t; +} + +struct Task *CreateSomeTaskManager_7C_Task(GfxInfo *gfx, TaskMain proc, TaskDestructor dtor) +{ + struct Task *t = TaskCreate(proc, sizeof(SomeTaskManager_7C), gCurTask->priority + 1, 0, dtor); + + sub_804CF5C(TASK_DATA(t), gfx); + + return t; +} + +void sub_804CF5C(SomeTaskManager_7C *taskData, GfxInfo *gfx) +{ + sub_804CD80(&taskData->unk0, gfx); + + taskData->unk60 = 0; + taskData->unk64 = 0; + taskData->unk68 = 0; + taskData->unk6C = 0; + taskData->unk70 = 0; + taskData->unk72 = 0; + taskData->unk74 = 0; + taskData->unk76 = 0; +} + +void TaskDestructor_SomeTaskManager_60_Common(struct Task *t) +{ + SomeTaskManager_60 *taskData = TASK_DATA(t); + Sprite *s = &taskData->s; + VramFree(s->graphics.dest); +} + +void sub_804CFA0(SomeTaskManager_60 *taskData) +{ + taskData->qUnk50 += taskData->qUnk58; + taskData->qUnk54 += taskData->qUnk5A; +} + +void sub_804CFC0(SomeTaskManager_60 *taskData) +{ + taskData->qUnk58 += taskData->qUnk5C; + taskData->qUnk5A += taskData->qUnk5E; +} + +bool32 sub_804CFE0(u16 *param0, u16 param1, u16 param2) +{ + s32 v = *param0; + + if (param1 != v) { + if ((param1 - v) << 16 >= 0) { + s32 v2 = param2 + v; + *param0 = v2; + + if ((param1 - v2) << 16 < 0) { + *param0 = param1; + return TRUE; + } + } else { + // _0804D00E + s32 v2 = v - param2; + *param0 = v2; + + if ((param1 - v2) << 16 >= 0) { + *param0 = param1; + return TRUE; + } + } + + return FALSE; + } + + return TRUE; +} + +void SetFaceButtonConfig(bool32 flipFaceButtons) +{ + struct ButtonConfig *controls = &gPlayerControls; + + if (!flipFaceButtons || gStageFlags & STAGE_FLAG__DEMO_RUNNING) { + controls->jump = A_BUTTON; + controls->attack = B_BUTTON; + } else if (flipFaceButtons == TRUE) { + controls->jump = B_BUTTON; + controls->attack = A_BUTTON; + } +} + +s32 GetAirDashDirection(s32 n) +{ + u16 *data0 = gUnknown_03006170; + u16 *data1 = gUnknown_030060F0; + s32 i; + u16 *data; + + u16 mask; + u16 chkMask = *data0 & 0x30; + + // NOTE: This has to be separate for the same reason as the loop in sub_804D13C()! + data0++; + + if (chkMask == DPAD_LEFT) { + for (i = 0; i < n; i++) { + mask = data1[i] & (DPAD_LEFT ^ DPAD_ANY); + if (mask) { + return 0; + } + + chkMask = data0[i] & DPAD_LEFT; + + if (i >= 4 && chkMask != 0) { + return -1; + } + } + } else if (chkMask == DPAD_RIGHT) { + for (i = 0; i < n; i++) { + mask = data1[i] & (DPAD_RIGHT ^ DPAD_ANY); + if (mask) { + return 0; + } + + chkMask = data0[i] & DPAD_RIGHT; + + if (i >= 4 && chkMask != 0) { + return +1; + } + } + } + + return 0; +} + +void sub_804D100(void) +{ + DmaFill16(3, 0, gUnknown_030060F0, 2 * sizeof(u16)); + DmaFill16(3, 0, gUnknown_03006170, 2 * sizeof(u16)); +} + +void sub_804D13C(u16 param0) +{ + u16 *input0 = &gUnknown_030060F0[59]; + u16 *input1 = &gUnknown_03006170[59]; + s32 r4 = 58; + + do { + // NOTE: This has to be written with the variable, because + // some compilers evaluate *input0-- before *(input0 - 1) in + // *input0-- = *(input0 - 1); + u16 keys; + keys = *(input0 - 1); + *input0-- = keys; + keys = *(input1 - 1); + *input1-- = keys; + } while (--r4 >= 0); + + *input0 = param0; + *input1 = param0 & ~*(input0 + 1); +} diff --git a/sa1/src/game/sound_test.c b/sa1/src/game/sound_test.c new file mode 100644 index 0000000000..25d6c9cf48 --- /dev/null +++ b/sa1/src/game/sound_test.c @@ -0,0 +1,940 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/gTask_03006240.h" +#include "game/options_screen.h" +#include "game/save.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/songs.h" + +#ifndef BUG_FIX +#define DoSpriteTransformAndDisplay(s, tf) \ + TransformSprite(s, tf); \ + UpdateSpriteAnimation(s); \ + DisplaySprite(s); +#else +// UpdateSpriteAnimation() should be called first for initialization. +// TransformSprite() reads from a nullptr otherwise. +#define DoSpriteTransformAndDisplay(s, tf) \ + UpdateSpriteAnimation(s); \ + TransformSprite(s, tf); \ + DisplaySprite(s); +#endif + +typedef struct SoundTestState { + StrcUi_805423C strc0; + struct Task *taskC; // SoundTest114 + struct Task *task10; // SoundTest114 + struct Task *task14; // SoundTest114 + struct Task *task18; // SoundTest114 + struct Task *task1C; // SoundTest114 + struct Task *task20; // SoundTest114 + s32 unk24; + u8 unk28; + u8 unk29; + u8 unk2A; + u8 unk2B; + u8 unk2C; +} SoundTestState; /* 0x30 */ + +typedef struct SoundTest114 { + Sprite s; + SpriteTransform transform; + Sprite s2; + SpriteTransform transform2; + Sprite s3; + SpriteTransform transform3; + Sprite s4; + SpriteTransform transform4; + GameOverB overB; + s32 unk108; + u8 unk10C; + u8 unk10D; + u16 unk10E; + s8 unk110; + u8 filler111[0x3]; +} SoundTest114; + +void *sub_805E9B4(void); +void Task_SoundTestInit(void); +void sub_805F950(void); +void sub_805FAD4(void); +void sub_805FDE4(void); +void sub_805FC88(void); +void sub_805FE48(void); +void Task_TransitionOptionsMenu(void); +void Task_805FEAC(void); + +extern u8 gUnknown_0868403C[0x800]; +extern u16 sSoundTestSongIds[]; +const u8 gUnknown_0868B0CC[8] = { 0, 1, 2, 3, 4, 3, 2, 1 }; + +extern void sub_805321C(u8 *param0, GameOverB *param1); + +static inline void sub_805FF0C__inline(u8 param0) +{ + SoundTestState *state = TASK_DATA(gCurTask); + SoundTest114 *strc114 = TASK_DATA(state->task10); + strc114->unk10D = param0; + strc114->unk10E = 120; +} + +static inline void sub_805FD54__inline(u8 param0) +{ + SoundTestState *state = TASK_DATA(gCurTask); + SoundTest114 *strc114 = TASK_DATA(state->task10); + strc114->unk10D = param0; + strc114->unk10E = 120; + + { + Sprite *s = &strc114->s; + s->prevVariant = 0xFF; + s->graphics.anim = 0x357; + s->variant = 0; + UpdateSpriteAnimation(s); + } +} + +void *sub_805E9B4(void) +{ + Strc_80528AC gfx; + + UiGfxStackInit(); + + gfx.uiGfxID = 0x3D; + gfx.unk2B = 1; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x800; + gfx.paletteSize = 0x20; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.layout = gUnknown_0868403C; + gfx.layoutSize = sizeof(gUnknown_0868403C); + gfx.unk2A = 0x15; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = 0; + gfx.unk2B = 0; + gfx.tiles = gUiGraphics[0].tiles + 0x400; + gfx.palette = gUiGraphics[0].palette; + gfx.vramC = OBJ_VRAM0 + 0x3480; + gfx.tilesSize = 0x280; + gfx.paletteSize = 0x20; + gfx.unk28 = 15; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[0].unk8; + gfx.unk0.unk8 = gUiGraphics[0].unkC; + gfx.unk0.unk9 = gUiGraphics[0].unk10; + gfx.unk0.unkA = gUiGraphics[0].unk14; + gfx.unk0.unkB = gUiGraphics[0].unk18; + sub_80528AC(&gfx); + + return gfx.vramC; +} + +void CreateSoundTest(void) +{ + Sprite *s; + SpriteTransform *tf; + StrcUi_805423C *strc0; + struct Task *t; + SoundTestState *state; + SoundTest114 *temp_r1_2; + SoundTest114 *temp_r4; + u8 var_r1; + + for (var_r1 = 0; var_r1 < 10; var_r1++) { + gKeysFirstRepeatIntervals[var_r1] = 0x14; + gKeysContinuedRepeatIntervals[var_r1] = 8; + } + + sub_80535FC(); + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x1E07; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + + state = TASK_DATA(TaskCreate(Task_SoundTestInit, sizeof(SoundTestState), 0x2000U, 0U, NULL)); + strc0 = &state->strc0; + state->unk24 = 0; + state->unk28 = 0; + state->unk29 = 0; + state->unk2A = 0; + state->unk2B = 0; + state->unk2C = 0; + strc0->unk0 = 0; + strc0->unk2 = 1; + strc0->unk4 = 2; + strc0->unk6 = 0; + strc0->unk8 = 0x100; + strc0->unkA = 1; + + t = TaskCreate(sub_805F950, sizeof(SoundTest114), 0x2020U, 0U, NULL); + temp_r1_2 = TASK_DATA(t); + temp_r1_2->unk108 = 0; + temp_r1_2->unk10C = 0; + temp_r1_2->unk110 = 0; + temp_r1_2->unk10D = 0; + temp_r1_2->unk10E = 0x3C; + state->task10 = t; + + s = &temp_r1_2->s; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x0020; + s->graphics.anim = 0x357; + s->variant = 0; + s->graphics.size = 0; + s->x = 180; + s->y = 120; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + t = TaskCreate(sub_805FAD4, sizeof(SoundTest114), 0x2020U, 0U, NULL); + temp_r4 = TASK_DATA(t); + s = &temp_r4->s; + temp_r4->unk108 = 0; + temp_r4->unk10C = 0; + temp_r4->unk10D = 0; + temp_r4->unk10E = 0; + temp_r4->unk110 = 0; + state->task18 = t; + + tf = &temp_r4->transform; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x0C80; + s->graphics.anim = 0x36C; + s->variant = 0; + s->graphics.size = 0; + s->x = 0x4C; + s->y = 0x5C; + s->oamFlags = 0x480; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x3067; + tf->rotation = 0xC8; + tf->qScaleX = 0x101; + tf->qScaleY = 0x101; + tf->x = 0x4C; + tf->y = 0x5C; + DoSpriteTransformAndDisplay(s, tf); + + s = &temp_r4->s2; + tf = &temp_r4->transform2; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x0C80; + s->graphics.anim = 0x36C; + s->variant = 0; + s->graphics.size = 0; + s->x = 76; + s->y = 92; + s->oamFlags = 0x480; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x3068; + tf->rotation = 0xC8; + tf->qScaleX = 0x101; + tf->qScaleY = 0x101; + tf->x = 0x4C; + tf->y = 0x5C; + DoSpriteTransformAndDisplay(s, tf); + + s = &temp_r4->s3; + tf = &temp_r4->transform3; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x0C80; + s->graphics.anim = 0x36C; + s->variant = 0; + s->graphics.size = 0; + s->x = 0x4C; + s->y = 0x5C; + s->oamFlags = 0x480; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x3069; + tf->rotation = 0xC8; + tf->qScaleX = 0x101; + tf->qScaleY = 0x101; + tf->x = 0x4C; + tf->y = 0x5C; + DoSpriteTransformAndDisplay(s, tf); + + s = &temp_r4->s4; + tf = &temp_r4->transform4; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x0C80; + s->graphics.anim = 0x36C; + s->variant = 0; + s->graphics.size = 0; + s->x = 0x4C; + s->y = 0x5C; + s->oamFlags = 0x480; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x307B; + tf->rotation = 0xC8; + tf->qScaleX = 0x101; + tf->qScaleY = 0x101; + tf->x = 0x4C; + tf->y = 0x5C; + DoSpriteTransformAndDisplay(s, tf); + + t = TaskCreate(Task_805FEAC, sizeof(SoundTest114), 0x2020U, 0U, NULL); + temp_r1_2 = TASK_DATA(t); + s = &temp_r1_2->s; + temp_r1_2->unk108 = 0; + temp_r1_2->unk10C = 0; + temp_r1_2->unk10D = 0; + temp_r1_2->unk10E = 0; + temp_r1_2->unk110 = 0; + state->task20 = t; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x1C80; + s->graphics.anim = 0x366; + s->variant = 2; + s->graphics.size = 0; + s->x = 0x64; + s->y = 0x5D; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + t = TaskCreate(sub_805FDE4, sizeof(SoundTest114), 0x2020U, 0U, NULL); + temp_r1_2 = TASK_DATA(t); + temp_r1_2->unk108 = 0; + temp_r1_2->unk10C = 0; + temp_r1_2->unk10D = 0; + temp_r1_2->unk10E = 0; + temp_r1_2->unk110 = 0; + state->task14 = t; + + s = &temp_r1_2->s; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x2040; + s->graphics.anim = 0x366; + s->variant = 0; + s->graphics.size = 0; + s->x = 0x62; + s->y = 0x88; + s->oamFlags = 0x100; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + t = TaskCreate(sub_805FC88, sizeof(SoundTest114), 0x2040U, 0U, NULL); + temp_r1_2 = TASK_DATA(t); + temp_r1_2->unk108 = 0; + temp_r1_2->unk10C = 0; + temp_r1_2->unk10D = 0; + temp_r1_2->unk10E = 0; + temp_r1_2->unk110 = 0; + state->taskC = t; + + temp_r1_2->overB.qUnkA = 0; + temp_r1_2->overB.unkC = 0x52; + temp_r1_2->overB.unkE = 1; + temp_r1_2->overB.unk10 = 0; + temp_r1_2->overB.unk12 = 0xF; + temp_r1_2->overB.unk16 = 1; + temp_r1_2->overB.unk8 = 0x40; + + t = TaskCreate(sub_805FE48, sizeof(SoundTest114), 0x2020U, 0U, NULL); + temp_r4 = TASK_DATA(t); + s = &temp_r4->s; + temp_r4->unk108 = 0; + temp_r4->unk10C = 0; + temp_r4->unk10D = 0; + temp_r4->unk10E = 0; + temp_r4->unk110 = 0; + state->task1C = t; + + s->graphics.dest = (void *)OBJ_VRAM0 + 0x2600; + s->graphics.anim = 0x36A; + s->variant = 0; + s->graphics.size = 0; + s->x = 0; + s->y = 0; + s->oamFlags = 0x140; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &temp_r4->s2; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x3200; + s->graphics.anim = 0x369; + s->variant = 0; + s->graphics.size = 0; + s->x = 26; + s->y = 136; + s->oamFlags = 0x140; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &temp_r4->s3; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x1CC0; + s->graphics.anim = 0x367; + s->variant = 0; + s->graphics.size = 0; + s->x = 0x11; + s->y = 0x18; + s->oamFlags = 0x80; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &temp_r4->s4; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x2380; + s->graphics.anim = 0x36B; + s->variant = 0; + s->graphics.size = 0; + s->x = 0xB4; + s->y = 0x90; + s->oamFlags = 0x100; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + m4aMPlayFadeOut(&gMPlayInfo_BGM, 1U); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 1U); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 1U); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 1U); + + sub_80543A4(&state->strc0); + sub_805E9B4(); +} + +// TODO: Match without goto and the "fake-match" inline. +void Task_SoundTestInit(void) +{ + SoundTest114 *sp0; + SoundTest114 *sp4; + SoundTest114 *sp8; + SoundTest114 *spC; + SoundTest114 *sp10; + SoundTest114 *sp14; + struct Task *t; + s32 var_r0; + s32 var_r1; + struct MP2KPlayerState *mp2kState; + u32 var_r7; + u8 var_r4; + u8 var_r5; + u32 scrollX, scrollY; + + SoundTestState *state = TASK_DATA(gCurTask); + SoundTest114 *temp_r2_3; + + t = state->taskC; + sp0 = TASK_DATA(t); + sp4 = TASK_DATA(state->task10); + sp8 = TASK_DATA(state->task14); + spC = TASK_DATA(state->task18); + sp10 = TASK_DATA(state->task1C); + sp14 = TASK_DATA(state->task20); + var_r7 = state->unk24; + var_r7++; + if ((state->strc0.unk4 == 1) && ((s32)state->strc0.unk6 > 0x1FFF)) { + TaskDestroy(t); + TaskDestroy(state->task10); + TaskDestroy(state->task14); + TaskDestroy(state->task18); + TaskDestroy(state->task1C); + TaskDestroy(state->task20); + gCurTask->main = Task_TransitionOptionsMenu; + return; + } + scrollX = (u16)gBgScrollRegs[0][0] + 1; + scrollY = (u16)gBgScrollRegs[0][1] + 1; + gBgScrollRegs[0][0] = scrollX & 0xFF; + gBgScrollRegs[0][1] = scrollY & 0xFF; + var_r5 = state->unk28; + if (0x20 & gRepeatedKeys) { + if (var_r5 == 0) { + if (gLoadedSaveGame.unk424 != 0) { + var_r5 = 0x29; + } else { + var_r5 = 0x26; + } + } else { + var_r5 -= 1; + } + state->unk2B = 0xFF; + sp0->unk110 = -1; + sp0->unk10E = 8; + } else if (0x10 & gRepeatedKeys) { + if (gLoadedSaveGame.unk424 != 0) { + var_r0 = var_r5 + 1; + var_r1 = 0x2A; + } else { + var_r0 = var_r5 + 1; + var_r1 = 0x27; + } + var_r5 = (u8)Mod(var_r0, var_r1); + state->unk2B = 1; + sp0->unk110 = 1; + sp0->unk10E = 0; + } + + if (sp0->unk110 != 0) { + if (sp0->unk110 > 0) { + if (++sp0->unk10E == 8) { + sp0->unk110 = 0; + } + } else { + if (sp0->unk10E != 0) { + sp0->unk10E--; + } else { + sp0->unk110 = 0; + } + } + } + + sp0->unk10C = var_r5; + sp4->unk10C = var_r5; + sp8->unk10C = var_r5; + spC->unk10C = var_r5; + sp10->unk10C = var_r5; + sp14->unk10C = var_r5; + + state->unk28 = var_r5; + + if (var_r7 == 2) { + m4aMPlayContinue(&gMPlayInfo_BGM); + m4aMPlayContinue(&gMPlayInfo_SE1); + m4aMPlayContinue(&gMPlayInfo_SE2); + m4aMPlayContinue(&gMPlayInfo_SE3); + } + + if (sub_805423C(&state->strc0) && (A_BUTTON & gPressedKeys) && (var_r7 <= 0x78U) && !(B_BUTTON & gPressedKeys)) { + SoundTestState *state; + Sprite *s; + var_r7 = 0x79; + sub_805FD54__inline(2); + } + + if ((var_r7 > 1U) && (1 & gPressedKeys) && (state->strc0.unk4 != 1) && (var_r7 > 0x78U) && !(2 & gPressedKeys)) { + m4aMPlayFadeOut(&gMPlayInfo_BGM, 1U); + m4aMPlayFadeOut(&gMPlayInfo_SE1, 1U); + m4aMPlayFadeOut(&gMPlayInfo_SE2, 1U); + m4aMPlayFadeOut(&gMPlayInfo_SE3, 1U); + m4aSongNumStart(sSoundTestSongIds[var_r5]); + + sub_805FF0C__inline(2); + } else { + for (var_r4 = 0; var_r4 < 4; var_r4++) { + if (var_r4 == 0) { + if (gMPlayInfo_BGM.status & 0xFFFF) { + state->unk2A |= 1; + } else { + if ((1 & state->unk2A) && (var_r7 > 0x64U) && (state->strc0.unk4 != 1)) { + sub_805FF0C__inline(3); + } + state->unk2A &= ~0x1; + } + } else if (var_r4 == 1) { + if (gMPlayInfo_SE1.status & 0xFFFF) { + state->unk2A |= 2; + } else { + if ((2 & state->unk2A) && (var_r7 > 0x64U) && (state->strc0.unk4 != 1)) { + sub_805FF0C__inline(3); + } + state->unk2A &= ~0x2; + } + } else if (var_r4 == 2) { + if (gMPlayInfo_SE2.status & 0xFFFF) { + state->unk2A |= 4; + } else { + if ((4 & state->unk2A) && (var_r7 > 0x64U) && (state->strc0.unk4 != 1)) { + sub_805FF0C__inline(3); + } + state->unk2A &= ~0x4; + } + } else { + if (gMPlayInfo_SE3.status & 0xFFFF) { + state->unk2A |= 8; + } else { + if ((8 & state->unk2A) && (var_r7 > 0x64U) && (state->strc0.unk4 != 1)) { + sub_805FF0C__inline(3); + } + state->unk2A &= ~0x8; + } + } + } + } + if ((state->unk2A != 0) && (state->strc0.unk4 != 1)) { + if (var_r7 > 0x78U) { + sub_805FF0C__inline(2); + state->unk29 = 1; + } + } else { + state->unk29 = 0; + } + + if (B_BUTTON & gPressedKeys) { + if ((state->strc0.unk4 != 1) && (state->unk29 == 0) && (state->unk2C == 0) && (var_r7 > 120)) { + if (!(A_BUTTON & gPressedKeys)) { + m4aSongNumStart(SE_RETURN); + state->unk24 = 0; + state->strc0.unk4 = 1; + state->strc0.unk6 = 0x2000 - (u16)state->strc0.unk6; + state->strc0.unk8 = 0xC0; + + sub_805FF0C__inline(0); + sub_805FF0C__inline(0); + sub_805FF0C__inline(0); + } + } + if ((B_BUTTON & gPressedKeys) && (state->strc0.unk4 != 1) && (state->unk29 != 0)) { + if (state->unk2C == 0) { + for (var_r4 = 0; var_r4 < 4; var_r4++) { + if (var_r4 == 0) { + if (GetBit(state->unk2A, var_r4)) { + state->unk2C = 0xA; + m4aMPlayFadeOut(&gMPlayInfo_BGM, 1U); + } + } else if (var_r4 == 1) { + if (GetBit(state->unk2A, var_r4)) { + state->unk2C = 0xA; + m4aMPlayFadeOut(&gMPlayInfo_SE1, 1U); + } + } else if (GetBit(state->unk2A, var_r4)) { + state->unk2C = 0xA; + m4aMPlayFadeOut(&gMPlayInfo_SE3, 1U); + } + } + + goto lbl; + } + } + } + { + if (state->unk2C != 0) { + state->unk2C -= 1; + } + } +lbl: + sp0->unk10D = state->unk29; + sp8->unk10D = state->unk29; + spC->unk10D = state->unk29; + sp10->unk10D = state->unk29; + sp14->unk10D = state->unk29; + sp0->unk108 = var_r7; + sp4->unk108 = var_r7; + sp8->unk108 = var_r7; + spC->unk108 = var_r7; + sp10->unk108 = var_r7; + sp14->unk108 = var_r7; + state->unk24 = var_r7; +} + +// (94.09%) https://decomp.me/scratch/m9YNS +NONMATCH("asm/non_matching/game/sound_test__sub_805F950.inc", void sub_805F950()) +{ + s32 temp_r6; + + SoundTest114 *strc114 = TASK_DATA(gCurTask); + + temp_r6 = strc114->unk108; + if ((strc114->unk10D == 0) || ((u32)temp_r6 < 120)) { + strc114->s.x = 180; + strc114->s.y = 120; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_BYE; + strc114->s.variant = 0; + if (temp_r6 == 0x77) { + strc114->s.prevVariant = 0xFF; + strc114->unk10D = 1; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_IDLE; + strc114->s.variant = 0; + } + strc114->s.frameFlags &= ~0x400; + } else if (strc114->unk10D == 1) { + strc114->s.x = 180; + strc114->s.y = 120; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_IDLE; + strc114->s.variant = 0; + strc114->s.frameFlags &= ~0x400; + } else if (strc114->unk10D == 2) { + if (Mod(temp_r6, 250) <= 0x77) { + strc114->s.x = 164; + strc114->s.y = 120; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_SHAKE; + strc114->s.variant = 0; + strc114->s.frameFlags &= ~0x400; + } else if ((Mod(temp_r6, 250) > 124) && (Mod(temp_r6, 250) < 245)) { + strc114->s.x = 196; + strc114->s.y = 120; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_SHAKE; + strc114->s.variant = 0; + strc114->s.frameFlags |= 0x400; + } else { + strc114->s.x = 180; + strc114->s.y = 120; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_SHAKE; + strc114->s.variant = 1; + strc114->unk10E = 5; + } + } else if (strc114->unk10D == 3) { + strc114->s.x = 180; + strc114->s.y = 120; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_KISS; + strc114->s.variant = 0; + + if (--strc114->unk10E == 0) { + strc114->s.prevVariant = 0xFF; + strc114->unk10D = 1; + strc114->s.graphics.anim = SA1_ANIM_SOUNDTEST_AMY_IDLE; + strc114->s.variant = 0; + } + + strc114->s.frameFlags &= ~0x400; + } + UpdateSpriteAnimation(&strc114->s); + DisplaySprite(&strc114->s); +} +END_NONMATCH + +void sub_805FAD4() +{ + SoundTest114 *strc114 = TASK_DATA(gCurTask); + Sprite *s = &strc114->s; + SpriteTransform *tf = &strc114->transform; + + if (strc114->unk10D != 0) { + strc114->unk10E += 0x10; + strc114->unk10E &= 0x3FF; + } else { + if (strc114->unk10E != 4) { + if (strc114->unk10E < 0x200) { + strc114->unk10E += 0x10; + if (strc114->unk10E > 0x200) { + strc114->unk10E = 4; + } + } else { + strc114->unk10E += 0x10; + + if (strc114->unk10E > 0x3FF) { + strc114->unk10E = 4; + } + } + } + } + + tf->rotation = 0; + tf->qScaleX = I(SIN(strc114->unk10E)) + Q(1); + tf->qScaleY = I(SIN(strc114->unk10E)) + Q(1); + tf->x = 76; + s->x = 76; + tf->y = 92; + s->y = 92; + TransformSprite(s, tf); + DisplaySprite(s); + + s = &strc114->s2; + tf = &strc114->transform2; + tf->rotation = 0x100; + tf->qScaleX = I(SIN(strc114->unk10E)) + Q(1); + tf->qScaleY = I(SIN(strc114->unk10E)) + Q(1); + tf->x = 76; + s->x = 76; + tf->y = 92; + s->y = 92; + TransformSprite(s, tf); + DisplaySprite(s); + + s = &strc114->s3; + tf = &strc114->transform3; + tf->rotation = 0x200; + tf->qScaleX = I(SIN(strc114->unk10E)) + Q(1); + tf->qScaleY = I(SIN(strc114->unk10E)) + Q(1); + tf->x = 76; + s->x = 76; + tf->y = 92; + s->y = 92; + TransformSprite(s, tf); + DisplaySprite(s); + + s = &strc114->s4; + tf = &strc114->transform4; + tf->rotation = 0x300; + tf->qScaleX = I(SIN(strc114->unk10E)) + Q(1); + tf->qScaleY = I(SIN(strc114->unk10E)) + Q(1); + tf->x = 76; + s->x = 76; + tf->y = 92; + s->y = 92; + TransformSprite(s, tf); + DisplaySprite(s); +} + +void sub_805FC88() +{ + GameOverB *overB; + s16 *temp_r6; + s32 var_r8; + u8 temp_r5; + u8 subroutine_arg0; + SoundTest114 *strc114 = TASK_DATA(gCurTask); + + temp_r5 = strc114->unk10C + 1; + var_r8 = 0; + strc114->overB.unkC = 0x52; + if ((u32)temp_r5 > 0x63U) { + subroutine_arg0 = Div((s32)temp_r5, 100) + 0x20; + strc114->overB.qUnkA = 0x40; + sub_805321C(&subroutine_arg0, &strc114->overB); + } else { + if (temp_r5 >= 10) { + var_r8 = 5; + } else { + var_r8 = 10; + } + } + temp_r6 = &strc114->overB.qUnkA; + overB = &strc114->overB; + if ((u32)temp_r5 > 9U) { + subroutine_arg0 = (s8)(Div(Mod(temp_r5, 100), 0xA) + 0x20); + *temp_r6 = 74 - var_r8; + sub_805321C(&subroutine_arg0, overB); + } + subroutine_arg0 = (s8)(Mod(temp_r5, 0xA) + 0x20); + *temp_r6 = 84 - var_r8; + sub_805321C(&subroutine_arg0, overB); +} + +// inline +void sub_805FD54() +{ + SoundTestState *state = TASK_DATA(gCurTask); + SoundTest114 *strc114 = TASK_DATA(state->task10); + strc114->unk10D = 2; + strc114->unk10E = 120; + + { + Sprite *s = &strc114->s; + s->prevVariant = -1; + s->graphics.anim = SA1_ANIM_SOUNDTEST_AMY_SHAKE; + s->variant = 0; + UpdateSpriteAnimation(s); + } +} + +void Task_TransitionOptionsMenu(void) +{ + gDispCnt &= ~0xE000; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + TaskDestroy(gCurTask); + + CreateOptionsMenu(); +} + +void sub_805FDE4() +{ + u32 unk108; + + SoundTest114 *strc114 = TASK_DATA(gCurTask); + + unk108 = strc114->unk108; + if ((strc114->unk10D != 0) && (unk108 > 24)) { + strc114->s.prevVariant = -1; + strc114->s.variant = 0; + } else { + strc114->s.prevVariant = -1; + strc114->s.variant = 1; + } + UpdateSpriteAnimation(&strc114->s); + DisplaySprite(&strc114->s); +} + +void sub_805FE48() +{ + SoundTest114 *strc114 = TASK_DATA(gCurTask); + Sprite *s = &strc114->s; + + s = &strc114->s; + DisplaySprite(s); + + s = &strc114->s2; + DisplaySprite(s); + + s = &strc114->s3; + DisplaySprite(s); + + s = &strc114->s4; + s->frameFlags &= 0xFFFFFBFF; + DisplaySprite(s); + s->frameFlags |= 0x400; + DisplaySprite(s); +} + +void Task_805FEAC(void) +{ + SoundTest114 *strc114 = TASK_DATA(gCurTask); + Sprite *s = &strc114->s; + u8 baseX; + u32 unk108 = strc114->unk108; + + s->frameFlags &= ~0x400; + baseX = gUnknown_0868B0CC[(unk108 >> 3) % ARRAY_COUNT(gUnknown_0868B0CC)]; + s->x = baseX + 102; + DisplaySprite(s); + s->frameFlags |= 0x400; + s->x = 52 - baseX; + DisplaySprite(s); +} + +// inline +void sub_805FF0C(u8 param0) +{ + SoundTestState *state = TASK_DATA(gCurTask); + SoundTest114 *strc114 = TASK_DATA(state->task10); + strc114->unk10D = param0; + strc114->unk10E = 120; +} diff --git a/sa1/src/game/special_stage/game_2_0.c b/sa1/src/game/special_stage/game_2_0.c new file mode 100644 index 0000000000..46c03f72b4 --- /dev/null +++ b/sa1/src/game/special_stage/game_2_0.c @@ -0,0 +1,640 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/game_over.h" +#include "game/title_screen.h" +#include "game/save.h" +#include "game/special_stage/main.h" +#include "game/stage/player_controls.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" +#include "data/ui_graphics.h" + +#include "constants/animations.h" + +typedef struct Game_2_0_Sub { + union { + // TODO: This union might actually be their shared global type? + GameOverB overB; + Strc_8052C84 strc0; + } u; + s16 unk18; + u16 unk1A; +} Game_2_0_Sub; + +typedef struct Game_2_0 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + u8 unkA; + struct Task *taskC; // -> Game_2_0_Sub + struct Task *task10; // -> Game_2_0_Sub + struct Task *task14; // -> Game_2_0_Sub + s16 unk18; + u8 unk1A; +} Game_2_0; + +void sub_805BC94(u16 arg0); +void sub_805C448(u8 arg0); +void Task_805C594(void); +void Task_805C6B0(void); +void Task_805C740(void); +void Task_805C83C(void); +void TaskDestructor_nullsub_805C8FC(struct Task *t); + +// (89.77%) https://decomp.me/scratch/ZhMAK +NONMATCH("asm/non_matching/game/game2_0__sub_805BC94.inc", void sub_805BC94(u16 arg0)) +{ + Strc_80528AC sp00; + s32 sp34; + s32 sp38; + u8 temp_r0_2; + u8 temp_r5; + + if ((Div(arg0, 100) << 0x18) != 0) { + sp38 = 3; + } else { + temp_r0_2 = Div(arg0, 10); + + if (temp_r0_2 != 0) { + sp38 = 2; + } else { + sp38 = 1; + } + } + + sp00.uiGfxID = 50; + sp00.unk2B = 4; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 80 * TILE_SIZE_4BPP; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.vramC = OBJ_VRAM0 + 0x5DA0; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_STGRESULT_HEADLINE_BACK; + sp00.unk2B = 8; + sp00.tiles = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].tiles; + sp00.palette = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].palette; + sp00.tilesSize = 16 * TILE_SIZE_4BPP; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.vramC = OBJ_VRAM0 + 0x77A0; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk18); + sub_80528AC(&sp00); + + if (sp38 == 1) { + sp00.uiGfxID = 47; + } else if (sp38 == 2) { + sp00.uiGfxID = 48; + } else { + sp00.uiGfxID = 49; + } + + sp00.unk2B = 2; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 0xE00; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.vramC = OBJ_VRAM0 + 0x67A0; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + switch (sp38) { + case 3: { + sp34 = 1; + temp_r5 = (u8)Div(arg0, 100); + arg0 = (s32)(u16)Mod(arg0, 100); + if (temp_r5 != 0) { + sp34 = 0; + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = sp38; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (temp_r5 << 7); + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x69E0; + sp00.tilesSize = 0x40; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = sp38; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (temp_r5 << 7) + 0x40; + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6A60; + sp00.tilesSize = 2 * TILE_SIZE_4BPP; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + } + + temp_r5 = (u8)Div(arg0, 10); + arg0 = (s32)(u16)Mod(arg0, 10); + if ((temp_r5 != 0) || (sp34 == 0)) { + sp34 = 0; + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = sp38; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (temp_r5 << 7); + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6BA0; + sp00.tilesSize = 2 * TILE_SIZE_4BPP; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = sp38; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (temp_r5 << 7) + 0x40; + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6C20; + sp00.tilesSize = 2 * TILE_SIZE_4BPP; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + } + + temp_r5 = (u8)arg0; + if ((temp_r5 != 0) || (sp34 == 0)) { + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (temp_r5 << 7); + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6BE0; + sp00.tilesSize = 2 * TILE_SIZE_4BPP; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = gUiGraphics[UIGFX_TIMER_DIGITS].tiles + (temp_r5 << 7) + 0x40; + sp00.palette = gUiGraphics[UIGFX_TIMER_DIGITS].palette; + sp00.vramC = OBJ_VRAM0 + 0x6C60; + sp00.tilesSize = 2 * TILE_SIZE_4BPP; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + } + } break; + + case 2: { + temp_r5 = Div(arg0, 0xA); + arg0 = Mod(arg0, 0xA); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (temp_r5 << 7); + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x69E0; + sp00.tilesSize = 0xE00; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (temp_r5 << 7) + 0x40; + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6A60; + sp00.tilesSize = 0x40; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (arg0 << 7); + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6BA0; + sp00.tilesSize = 0x40; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (arg0 << 7) + 0x40; + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6c20; + sp00.tilesSize = 0x40; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + } break; + + default: { + u8 v = arg0; + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (v << 7); + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x69E0; + sp00.tilesSize = 0x40; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_TIMER_DIGITS; + sp00.unk2B = 3; + sp00.tiles = *(&gUiGraphics[UIGFX_TIMER_DIGITS].tiles) + (v << 7) + 0x40; + sp00.palette = *(&gUiGraphics[UIGFX_TIMER_DIGITS].palette); + sp00.vramC = OBJ_VRAM0 + 0x6A60; + sp00.tilesSize = 0x40; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk8); + sp00.unk0.unk8 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unkC); + sp00.unk0.unk9 = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk10); + sp00.unk0.unkA = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk14); + sp00.unk0.unkB = *(&gUiGraphics[UIGFX_TIMER_DIGITS].unk18); + sub_80528AC(&sp00); + } break; + } +} +END_NONMATCH + +void sub_805C448(u8 arg0) +{ + struct Task *t2 = NULL; + struct Task *t1 = NULL; + struct Task *t3 = NULL; + Game_2_0_Sub *sub = NULL; + Game_2_0 *strc = NULL; + + sub_80535FC(); + UiGfxStackInit(); + t1 = TaskCreate(Task_805C6B0, sizeof(Game_2_0_Sub), 0x2120U, 0U, NULL); + sub = TASK_DATA(t1); + sub->unk18 = 0; + sub->unk1A = 0; + sub->u.overB.qUnkA = 0xF0; + sub->u.overB.unkC = 0x7E; + sub->u.overB.unkE = 8; + sub->u.overB.unk10 = 8; + sub->u.overB.unk12 = 6; + sub->u.overB.unk16 = 1; + sub->u.overB.unk8 = 0xA; + t2 = TaskCreate(Task_805C740, sizeof(Game_2_0_Sub), 0x2120U, 0U, NULL); + sub = TASK_DATA(t2); + sub->unk18 = 0; + sub->unk1A = 0; + sub->u.overB.qUnkA = 0x100; + sub->u.overB.unkC = 0x80; + sub->u.overB.unkE = 9; + sub->u.overB.unk10 = 2; + sub->u.overB.unk12 = 6; + sub->u.overB.unk16 = 1; + sub->u.overB.unk8 = 0; + + if (arg0 != 0) { + Strc_8052C84 *strc0; + t3 = TaskCreate(Task_805C83C, sizeof(Game_2_0_Sub), 0x2120U, 0U, NULL); + sub = TASK_DATA(t3); + strc0 = &sub->u.strc0; + sub->unk18 = 0; + sub->unk1A = 0; + strc0->unk0 = 0x100; + strc0->unk2 = 0; + strc0->unk4 = 0; + strc0->unk6 = 0; + strc0->unkA = 0x39; + strc0->unkC = 0x49; + strc0->byteCount = 5; + strc0->unk10 = 4; + strc0->unk12 = 6; + strc0->unk16 = 1; + strc0->unk8 = 0; + } + + strc = TASK_DATA(TaskCreate(Task_805C594, sizeof(Game_2_0), 0x2100U, 0U, TaskDestructor_nullsub_805C8FC)); + strc->unk18 = 0; + strc->unk1A = arg0; + strc->task10 = t1; + strc->task14 = t2; + strc->taskC = t3; + strc->unk0 = 0; + strc->unk2 = 1; + strc->unk4 = 2; + strc->unk6 = 0; + strc->unk8 = 0x60; + strc->unkA = 1; + + if (arg0 != 0) { + sub_80543A4((StrcUi_805423C *)strc); + } +} + +void Task_805C594(void) +{ + s16 temp_r0; + s16 temp_r0_2; + s16 temp_r0_3; + s32 temp_r2; + s32 temp_r5; + u16 *r3; + Game_2_0 *strc; + Game_2_0_Sub *subA; + Game_2_0_Sub *subB; +#ifdef BUG_FIX + // NOTE: Technically this is redundant, since it's neither getting read nor set + // if strc->unk1A is not 0, but it's better to have to to prevent future bugs when editing. + Game_2_0_Sub *subR3 = NULL; +#else + Game_2_0_Sub *subR3; +#endif + + strc = TASK_DATA(gCurTask); + subA = TASK_DATA(strc->task10); + subB = TASK_DATA(strc->task14); + if (strc->unk1A != 0) { + subR3 = TASK_DATA(strc->taskC); + } + + subA->unk18 = strc->unk18; + subB->unk18 = strc->unk18; + + if (strc->unk1A != 0) { + subR3->unk18 = strc->unk18; + if (strc->unk1A != 0) { + if (strc->unk18 < 106) { + if (strc->unk18 > 20) { + sub_805423C((StrcUi_805423C *)strc); + } else { + sub_80543A4((StrcUi_805423C *)strc); + } + } + } + } + + if (++strc->unk18 > 0xFF) { + gDispCnt &= ~0xE000; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gStageFlags &= ~STAGE_FLAG__ACT_START; + gPlayer.moveState &= ~MOVESTATE_IGNORE_INPUT; + gPlayer.heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + gPartner.moveState &= ~MOVESTATE_IGNORE_INPUT; + gPartner.heldInput |= (gPlayerControls.jump | gPlayerControls.attack); + CreateSpecialStageUI(); + TaskDestroy(strc->task14); + TaskDestroy(strc->task10); + if (strc->unk1A != 0) { + TaskDestroy(strc->taskC); + } + TaskDestroy(gCurTask); + return; + } + + if (strc->unk18 == 2) { + sub_805BC94(gSpecialStageTargetRings); + } +} + +void Task_805C6B0() +{ + s16 temp_r0; + s16 temp_r0_2; + + Game_2_0_Sub *sub = TASK_DATA(gCurTask); + + if (sub->unk18 > 0xF5) { + if (sub->u.overB.qUnkA < -0x20) { + sub->u.overB.qUnkA = (u16)sub->u.overB.qUnkA + 0x20; + if (sub->u.overB.unkE != 0) { + sub->u.overB.unkE = (u16)sub->u.overB.unkE - 1; + } + } + sub->u.overB.qUnkA -= 0x1A; + } else if (sub->unk18 > 0x2D) { + sub->u.overB.unkC = 0x11; + } else if (sub->unk18 > 0x21) { + sub->u.overB.unkC = (u16)sub->u.overB.unkC - 8; + } else if (sub->unk18 > 0x19) { + sub->u.overB.qUnkA = -0x10; + } else if (sub->unk18 > 0xF) { + sub->u.overB.qUnkA -= 0x1A; + if (sub->u.overB.qUnkA < -0x10) { + sub->u.overB.qUnkA = -0x10; + } + } + + sub_8052F78(" ", &sub->u.overB); +} + +// TODO: Remove this, when memcpy/memset are inlined. +// NOTE: Until then, these have to be here for matching, because we inlined const data above. +const u8 fillerTemp_08688635[3] = { 0 }; +const u8 gUnknown_08688638[] + = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0 }; + +void Task_805C740(void) +{ + Game_2_0_Sub *sub; + +#ifndef NON_MATCHING + const char arrA[22 + 5]; + memcpy((void *)arrA, &gUnknown_08688638[0], sizeof(arrA) - 5); + memset((void *)(arrA + 22), 0, 5); +#else + // TODO: Inline the mem calls! + // const u8 arrA[16] = { /* data here */ }; + const char arrA[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0, 0, 0, 0, 0, 0 }; +#endif + + sub = TASK_DATA(gCurTask); + if (sub->unk18 > 0xF5) { + sub->u.overB.qUnkA -= 0x1C; + if (sub->u.overB.qUnkA < -0x1F) { + if (sub->u.overB.unkE != 0) { + sub->u.overB.unkE--; + } + + sub->u.overB.qUnkA += 0x20; + sub->unk1A = Mod(sub->unk1A + 1, 7); + + sub_8052F78((const char *)&arrA[sub->unk1A], &sub->u.overB); + } else { + sub_8052F78((const char *)&arrA[sub->unk1A], &sub->u.overB); + } + + } else if (sub->unk18 > 0x2D) { + sub->u.overB.unkC = 0x13U; + sub->u.overB.qUnkA -= 2; + + if (sub->u.overB.qUnkA < -0x1F) { + sub->u.overB.qUnkA += 0x20; + sub->unk1A = Mod(sub->unk1A + 1, 7); + } + + sub_8052F78((const char *)&arrA[sub->unk1A], &sub->u.overB); + } else if (sub->unk18 > 0x21) { + sub->u.overB.unkC -= 8; + sub->u.overB.qUnkA -= 2; + + if (sub->u.overB.qUnkA < -0x1F) { + sub->u.overB.qUnkA += 0x20; + sub->unk1A = Mod(sub->unk1A + 1, 7); + } + + sub_8052F78((const char *)&arrA[sub->unk1A], &sub->u.overB); + } else if (sub->unk18 > 0x19) { + sub->u.overB.qUnkA -= 2; + sub->u.overB.unkE = 9U; + + if (sub->u.overB.qUnkA < -0x1F) { + sub->u.overB.qUnkA += 0x20; + sub->unk1A = Mod(sub->unk1A + 1, 7); + } + + sub_8052F78((const char *)&arrA[sub->unk1A], &sub->u.overB); + } else if (sub->unk18 > 0xF) { + sub->u.overB.qUnkA -= 0x1C; + if (sub->u.overB.qUnkA <= 0xEF) { + sub->u.overB.unkE = (u16)(9 - (sub->u.overB.qUnkA >> 0x5)); + if (sub->u.overB.qUnkA < -0x1F) { + sub->u.overB.qUnkA += 0x20; + sub->unk1A = Mod(sub->unk1A + 1, 7); + } + sub_8052F78((const char *)&arrA[sub->unk1A], &sub->u.overB); + } + } +} + +void Task_805C83C() +{ + s16 temp_r0; + s16 temp_r0_2; + s16 temp_r0_3; + s16 temp_r1_2; + u16 temp_r1; + + Game_2_0_Sub *sub = TASK_DATA(gCurTask); + + if (sub->unk18 > 0xF5) { + sub->u.overB.unkC = 0x49; + sub->u.overB.qUnkA -= 0x1C; + if (sub->u.overB.qUnkA < -0x80) { + sub->u.overB.unkE = 0; + sub->u.overB.qUnkA = -0x80; + } else { + sub_8052F78(" !\"#$", &sub->u.overB); + } + } else if (sub->unk18 > 0x2D) { + sub->u.strc0.unk2 += 0x10; + if (sub->u.strc0.unk2 >= 0x100) { + sub->u.strc0.unk2 = 0x100; + sub->u.overB.qUnkA = 0x39; + sub->u.overB.unkC = 0x49; + + sub_8052F78(" !\"#$", &sub->u.overB); + } else { + sub->u.overB.qUnkA = 0x29; + sub->u.overB.unkC = 0x54 - (sub->u.strc0.unk2 >> 3); + sub_8052C84(" !\"#$", (Strc_8052C84 *)sub); + } + } else if (sub->unk18 > 0x21) { + sub->u.overB.qUnkA = 0x29; + sub->u.overB.unkC = 0x54 - (sub->u.strc0.unk2 >> 3); + sub->u.strc0.unk2 += 0x10; + + if (sub->u.strc0.unk2 >= 0x100) { + sub->u.strc0.unk2 = 0x100; + } + + sub_8052C84(" !\"#$", (Strc_8052C84 *)sub); + } +} + +void TaskDestructor_nullsub_805C8FC(struct Task *t) { } diff --git a/sa1/src/game/special_stage/intro.c b/sa1/src/game/special_stage/intro.c new file mode 100644 index 0000000000..c426f6a7a9 --- /dev/null +++ b/sa1/src/game/special_stage/intro.c @@ -0,0 +1,827 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/special_stage/main.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/characters.h" +#include "constants/ui_graphics.h" +#include "constants/zones.h" + +#define FRAME_RELAY_A 90 +#define FRAME_RELAY_B 150 + +typedef struct SpecialStageIntro44 { + Sprite s; + u32 unk30; + s32 qUnk34; + s32 qUnk38; + s32 qUnk3C; + s32 qUnk40; +} SpecialStageIntro44; + +// TODO: Integrate SpecialStageIntro44 into this? +typedef struct SpecialStageIntroC4 { + Sprite s; + u32 unk30; + s32 qUnk34; + s32 qUnk38; + s32 qUnk3C; + s32 qUnk40; + s32 unk44[16]; + s32 unk84[16]; +} SpecialStageIntroC4; /* 0xC4 */ + +// TODO: Integrate SpecialStageIntro44 into this? +typedef struct SpecialStageIntro64 { + Sprite s; + u32 unk30; + s32 qUnk34; + s32 qUnk38; + s32 qUnk3C; + s32 qUnk40; + s32 unk44[8]; +} SpecialStageIntro64; /* 0xC4 */ + +typedef struct SpecialStageIntro20 { + StrcUi_805423C strc0; + struct Task *taskC; // SpecialStageIntro64 + struct Task *task10; // SpecialStageIntro64 + struct Task *task14; // SpecialStageIntro64 + s16 unk18; + u8 unk1A; + s16 unk1C; + s16 unk1E; +} SpecialStageIntro20; + +typedef struct SpecialStageIntro28 { + StrcUi_805423C strc0; + struct Task *taskC; // SpecialStageIntro44 + struct Task *task10; // SpecialStageIntro44 + struct Task *task14; // SpecialStageIntro44 + struct Task *task18; // SpecialStageIntro44 + s16 unk1C; + u8 unk1E; + s16 unk20; + s16 unk22; + u8 unk24; +} SpecialStageIntro28; + +void sub_80688E4(s32 someId); +void Task_SpecialStageIntroInit(void); +void Task_8068360(void); +void Task_8069634(void); +void Task_8068948(void); +void Task_8068A78(void); +void Task_8068B10(void); +void Task_8068BB0(void); +void Task_8068CD4(void); +void sub_8068D0C(); +void Task_8069100(void); +void Task_80693D0(void); +void Task_80694E8(void); +void Task_nullsub_806954C(void); +void Task_8069550(void); +void Task_strc44_806959C(void); +void sub_805D048(u8 arg0); + +extern u16 gUnknown_0868B584[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B594[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B5A4[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B5B4[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B5C4[][NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B634[NUM_CHARACTERS][2]; +extern u16 gUnknown_0868B644[NUM_CHARACTERS][2]; +extern u16 gUnknown_086BBC34[256]; +extern u8 gUnknown_086BBE34[0x2980]; +extern u8 gUnknown_086BE7B4[0x1000]; + +extern u8 gUnknown_08487134[NUM_LEVEL_IDS]; + +void CreateSpecialStageIntro(void) +{ + struct Task *taskC; + struct Task *task10; + SpecialStageIntroC4 *temp_r0_3; + SpecialStageIntro20 *temp_r0_6; + SpecialStageIntroC4 *temp_r2; + Sprite *s; + u8 var_r5; + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + sub_80535FC(); + UiGfxStackInit(); + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x9D86; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0x128; + task10 = TaskCreate(Task_SpecialStageIntroInit, sizeof(SpecialStageIntroC4), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(task10); + s = &temp_r2->s; + s->graphics.dest = OBJ_VRAM0 + 0x20; + s->graphics.anim = gUnknown_0868B584[gSelectedCharacter][0]; + s->variant = gUnknown_0868B584[gSelectedCharacter][1]; + s->x = 120; + s->y = 180; + s->oamFlags = SPRITE_OAM_ORDER(6); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 1; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + + temp_r2->unk30 = 0; + temp_r2->qUnk3C = -Q(1); + temp_r2->qUnk40 = +Q(120); + temp_r2->qUnk34 = -Q(3.8125); + temp_r2->qUnk38 = +Q(180); + + taskC = TaskCreate(Task_8068BB0, sizeof(SpecialStageIntroC4), 0x2120U, 0U, NULL); + temp_r2 = TASK_DATA(taskC); + s = &temp_r2->s; + + temp_r2->unk30 = 0; + temp_r2->qUnk34 = 0xF; + temp_r2->qUnk38 = 0; + temp_r2->qUnk3C = 0; + temp_r2->qUnk40 = 0; + + for (var_r5 = 0; var_r5 < 16; var_r5++) { + temp_r2->unk84[var_r5] = Mod(PseudoRandom32(), 40) - 20; + temp_r2->unk44[var_r5] = Mod(PseudoRandom32(), 220) + 20; + } + + s->graphics.dest = OBJ_VRAM0 + 0x820; + s->graphics.anim = 776; + s->variant = 0; + s->x = 120; + s->y = 80; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + + temp_r0_6 = TASK_DATA(TaskCreate(Task_8068948, sizeof(SpecialStageIntro20), 0x2100U, 0U, NULL)); + temp_r0_6->unk18 = 0; + temp_r0_6->unk1A = 1; + temp_r0_6->task10 = task10; + temp_r0_6->taskC = taskC; + temp_r0_6->unk1C = 0; + temp_r0_6->unk1E = 0; + temp_r0_6->strc0.unk0 = 0; + temp_r0_6->strc0.unk2 = 1; + temp_r0_6->strc0.unk4 = 2; + temp_r0_6->strc0.unk6 = 0; + temp_r0_6->strc0.unk8 = 0x150; + temp_r0_6->strc0.unkA = 1; + sub_80543A4(&temp_r0_6->strc0); + + m4aSongNumStart(0x29U); +} + +void sub_80688E4(s32 someId) +{ + UiGfxStackInit(); + + if (someId == 1) { + Strc_80528AC gfx; + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gUnknown_086BBE34; + gfx.tilesSize = sizeof(gUnknown_086BBE34); + gfx.palette = gUnknown_086BBC34; + gfx.paletteSize = sizeof(gUnknown_086BBC34); + gfx.layout = gUnknown_086BE7B4; + gfx.layoutSize = sizeof(gUnknown_086BE7B4); + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + } +} + +void Task_8068948() +{ + SpecialStageIntroC4 *temp_r2; + SpecialStageIntroC4 *temp_r7; + struct Task *t; + Sprite *s; + u32 temp_r5; + + SpecialStageIntro20 *strc20 = TASK_DATA(gCurTask); + + temp_r7 = TASK_DATA(strc20->task10); + temp_r5 = strc20->unk18 + 1; + sub_805423C(&strc20->strc0); + sub_80688E4(temp_r5); + if (temp_r5 > FRAME_RELAY_A) { + temp_r5 = 0; // for matching + + strc20->unk18 = 0; + temp_r7->unk30 = 0U; + gBgScrollRegs[0][1] = 0; + strc20->strc0.unk0 = 0; + strc20->strc0.unk2 = 1; + strc20->strc0.unk4 = 2; + strc20->strc0.unk6 = 0; + strc20->strc0.unk8 = 0x150; + strc20->strc0.unkA = 1; + t = TaskCreate(Task_8068CD4, sizeof(SpecialStageIntroC4), 0x2120U, 0U, NULL); + strc20->task14 = t; + temp_r2 = TASK_DATA(t); + s = &temp_r2->s; + s->graphics.dest = OBJ_VRAM0 + 0xC80; + s->graphics.anim = 0x32B; + s->variant = 0; + s->x = 0x78; + s->y = 0x78; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + TaskDestroy(strc20->taskC); + strc20->task10->main = Task_8068B10; + gCurTask->main = Task_8068A78; + return; + } else { + if ((FRAME_RELAY_A - Div(0x2000, 0x150)) == temp_r5) { + strc20->strc0.unk0 = 0; + strc20->strc0.unk2 = 1; + strc20->strc0.unk4 = 1; + strc20->strc0.unk6 = 0; + strc20->strc0.unk8 = 0x150; + strc20->strc0.unkA = 1; + } + sub_805423C(&strc20->strc0); + strc20->unk18 = temp_r5; + temp_r7->unk30 = temp_r5; + } +} + +void Task_8068A78() +{ + SpecialStageIntro20 *strc20 = TASK_DATA(gCurTask); + SpecialStageIntroC4 *temp_r7; + u32 temp_r5; + + temp_r7 = TASK_DATA(strc20->task10); + temp_r5 = strc20->unk18 + 1; + if (temp_r5 > FRAME_RELAY_B) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + CreateSpecialStage(); + return; + } else { + if ((FRAME_RELAY_B - Div(0x2000, 0x150)) == temp_r5) { + strc20->strc0.unk0 = 0; + strc20->strc0.unk2 = 1; + strc20->strc0.unk4 = 1; + strc20->strc0.unk6 = 0; + strc20->strc0.unk8 = 0x150; + strc20->strc0.unkA = 1; + } + + sub_805423C(&strc20->strc0); + strc20->unk18 = (s16)temp_r5; + temp_r7->unk30 = temp_r5; + } +} + +void Task_8068B10() +{ + SpecialStageIntroC4 *strcC4 = TASK_DATA(gCurTask); + Sprite *s = &strcC4->s; + u32 temp_r6 = strcC4->unk30; + + if (temp_r6 == 0) { + s->graphics.anim = gUnknown_0868B594[gSelectedCharacter][0]; + s->variant = gUnknown_0868B594[gSelectedCharacter][1]; + s->prevVariant = -1; + strcC4->qUnk34 += -Q(5); + strcC4->qUnk38 = Q(180); + strcC4->qUnk40 = Q(150); + } + + if (temp_r6 > 40) { + strcC4->qUnk40 += strcC4->qUnk3C; + strcC4->qUnk34 += Q(0.25); + strcC4->qUnk38 += strcC4->qUnk34; + strcC4->s.x = I(strcC4->qUnk40); + strcC4->s.y = I(strcC4->qUnk38); + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_8068BB0(void) +{ + s32 sp0; + s32 *temp_r1; + s32 *temp_r5; + s32 *var_r2; + s32 *var_r3; + s32 temp_r0; + s32 temp_r0_3; + s32 temp_r0_4; + s32 var_r4; + u8 temp_r0_2; + u8 var_r8; + + SpecialStageIntroC4 *strcC4 = TASK_DATA(gCurTask); + Sprite *s = &strcC4->s; + + temp_r0 = strcC4->unk30 + 1; + strcC4->unk30++; + sp0 = temp_r0; + strcC4->s.prevVariant = -1; + UpdateSpriteAnimation(&strcC4->s); + + for (var_r8 = 0; var_r8 < 16; var_r8++) { + if ((sp0 + var_r8) & 0xF) { + strcC4->unk84[var_r8] += 0x10; + } else { + strcC4->unk84[var_r8] = Mod(PseudoRandom32(), 0x28) - 0x14; + strcC4->unk44[var_r8] = Mod(PseudoRandom32(), 0xDC) + 0x14; + } + + s->x = strcC4->unk44[var_r8]; + s->y = strcC4->unk84[var_r8]; + DisplaySprite(s); + } +} + +void Task_SpecialStageIntroInit(void) +{ + SpecialStageIntroC4 *strcC4 = TASK_DATA(gCurTask); + Sprite *s = &strcC4->s; + u16 temp_r4; + + strcC4->qUnk38 -= Q(3.8125); + s->x = I(strcC4->qUnk40); + s->y = I(strcC4->qUnk38); + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8068CD4(void) +{ + SpecialStageIntroC4 *strcC4 = TASK_DATA(gCurTask); + Sprite *s = &strcC4->s; + + if ((Div(++strcC4->unk30, 30) % 2u) == 0) { + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void sub_8068D0C(void) +{ + struct Task *tasks[4]; + Strc_80528AC gfx; + struct Task *sp44; + struct Task *sp48; + struct Task *sp4C; + struct Task *t; + SpecialStageIntro44 *temp_r2; + SpecialStageIntro44 *temp_r1; + SpecialStageIntro64 *temp_r1_2; + SpecialStageIntro28 *temp_r1_4; + Sprite *s; + u8 i; + + sub_80535FC(); + UiGfxStackInit(); + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x9D86; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0x128; + t = TaskCreate(Task_nullsub_806954C, sizeof(SpecialStageIntro44), 0x2120U, 0U, NULL); + sp44 = t; + temp_r2 = TASK_DATA(t); + s = &temp_r2->s; + s->graphics.dest = OBJ_VRAM0 + 0x20; + s->graphics.anim = gUnknown_0868B5A4[gSelectedCharacter][0]; + s->variant = gUnknown_0868B5A4[gSelectedCharacter][1]; + s->x = 0x78; + s->y = 0xB4; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + temp_r2->unk30 = 0; + temp_r2->qUnk3C = 0; + temp_r2->qUnk40 = +Q(170); + temp_r2->qUnk34 = 0x4A0; + temp_r2->qUnk38 = -Q(32); + + t = TaskCreate(Task_strc44_806959C, sizeof(SpecialStageIntro44), 0x2120U, 0U, NULL); + sp48 = t; + temp_r2 = TASK_DATA(t); + s = &temp_r2->s; + s->graphics.dest = OBJ_VRAM0 + 0x0820; + s->graphics.anim = gUnknown_0868B5B4[gSelectedCharacter][0]; + s->variant = gUnknown_0868B5B4[gSelectedCharacter][1]; + s->x = 0x12C; + s->y = 100; + s->oamFlags = 0x240; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + temp_r2->unk30 = 0; + temp_r2->qUnk3C = -Q(1); + temp_r2->qUnk40 = Q(350); + temp_r2->qUnk34 = Q(0); + temp_r2->qUnk38 = Q(100); + + t = TaskCreate(Task_strc44_806959C, sizeof(SpecialStageIntro44), 0x2120U, 0U, NULL); + sp4C = t; + temp_r2 = TASK_DATA(t); + s = &temp_r2->s; + s->graphics.dest = OBJ_VRAM0 + 0x12A0; + s->graphics.anim = 0x2E0; + s->variant = 0; + s->x = 0x15E; + s->y = 100; + s->oamFlags = 0x300; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + + temp_r2->unk30 = 0; + temp_r2->qUnk3C = -Q(1); + temp_r2->qUnk40 = Q(350); + temp_r2->qUnk34 = Q(0); + temp_r2->qUnk38 = Q(100); + for (i = 0; i < 4; i++) { + tasks[i] = TaskCreate(Task_8068360, sizeof(SpecialStageIntro64), 0x2120U, 0U, NULL); + temp_r1_2 = TASK_DATA(tasks[i]); + s = &temp_r1_2->s; + temp_r1_2->qUnk3C = 0; + if (i == 0) { + temp_r1_2->unk44[4] = Q(50); + temp_r1_2->unk44[0] = Q(80); + temp_r1_2->unk44[1] = Q(0.5); + temp_r1_2->unk44[5] = 0; + s->graphics.dest = OBJ_VRAM0 + 0x6040; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_XS; + s->variant = 0; + } else if (i == 1) { + temp_r1_2->unk44[4] = Q(100); + temp_r1_2->unk44[0] = Q(40); + temp_r1_2->unk44[1] = Q(0.25); + temp_r1_2->unk44[5] = 0U; + s->graphics.dest = OBJ_VRAM0 + 0x6180; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_S; + s->variant = 0; + } else if (i == 2) { + temp_r1_2->unk44[4] = Q(120); + temp_r1_2->unk44[0] = Q(120); + temp_r1_2->unk44[1] = Q(1.0); + temp_r1_2->unk44[5] = 0U; + s->graphics.dest = OBJ_VRAM0 + 0x6420; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_M; + s->variant = 0; + } else { + temp_r1_2->unk44[4] = Q(20); + temp_r1_2->unk44[0] = Q(160); + temp_r1_2->unk44[1] = Q(1.125); + temp_r1_2->unk44[5] = 0U; + s->graphics.dest = OBJ_VRAM0 + 0x7080; + s->graphics.anim = SA1_ANIM_SOME_CLOUD_L; + s->variant = 0; + } + s->x = 180; + s->y = 80; + s->oamFlags = SPRITE_OAM_ORDER(27); + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + } + + temp_r1_4 = TASK_DATA(TaskCreate(Task_80694E8, sizeof(SpecialStageIntro28), 0x2100U, 0U, NULL)); + + temp_r1_4->unk1C = 0; + temp_r1_4->unk1E = 1; + temp_r1_4->taskC = sp44; + temp_r1_4->task18 = sp48; + temp_r1_4->task14 = sp4C; + temp_r1_4->unk24 = 0; + temp_r1_4->unk20 = 0; + temp_r1_4->unk22 = 0; + temp_r1_4->strc0.unk0 = 0; + temp_r1_4->strc0.unk2 = 1; + temp_r1_4->strc0.unk4 = 8; + temp_r1_4->strc0.unk6 = 0; + temp_r1_4->strc0.unk8 = 0x128; + temp_r1_4->strc0.unkA = 1; + sub_805423C(&temp_r1_4->strc0); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gUnknown_086BBE34; + gfx.tilesSize = 0x2980; + gfx.palette = gUnknown_086BBC34; + gfx.paletteSize = 0x200; + gfx.layout = gUnknown_086BE7B4; + gfx.layoutSize = 0x1000; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); +} + +void Task_8069100(void) +{ + SpecialStageIntro44 *sp4; + SpecialStageIntro44 *sp8; + SpecialStageIntro44 *strc44_0; + SpecialStageIntro44 *temp_sl; + SpecialStageIntro44 *var_r7; + struct Task *t; + u32 temp_r0; + + SpecialStageIntro28 *strc28 = TASK_DATA(gCurTask); + Sprite *s; + + temp_sl = TASK_DATA(strc28->taskC); + sp4 = TASK_DATA(strc28->task18); + sp8 = TASK_DATA(strc28->task14); + temp_r0 = strc28->unk1C + 1; + if (temp_r0 == 1) { + strc44_0 = TASK_DATA(TaskCreate(Task_8069634, sizeof(SpecialStageIntro44), 0x2120U, 0U, NULL)); + s = &strc44_0->s; + s->graphics.dest = OBJ_VRAM0 + 0x3820; + s->graphics.anim = 0x2FD; + s->variant = 0; + s->x = 0x78; + s->y = 0xB4; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + strc44_0->unk30 = 0; + strc44_0->qUnk3C = -Q(1); + strc44_0->qUnk40 = temp_sl->qUnk40 - Q(8); + strc44_0->qUnk34 = Q(0); + strc44_0->qUnk38 = temp_sl->qUnk38 + Q(10); + + t = TaskCreate(Task_strc44_806959C, sizeof(SpecialStageIntro44), 0x2120U, 0U, NULL); + strc28->task10 = t; + var_r7 = TASK_DATA(t); + s = &var_r7->s; + s->graphics.dest = OBJ_VRAM0 + 0xAA0; + s->graphics.anim = gUnknown_0868B5C4[gUnknown_08487134[gCurrentLevel]][gSelectedCharacter][0]; + s->variant = gUnknown_0868B5C4[gUnknown_08487134[gCurrentLevel]][gSelectedCharacter][1]; + s->x = 0x78; + s->y = 0xB4; + s->oamFlags = 0x180; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + var_r7->unk30 = 0; + var_r7->qUnk3C = -Q(1); + var_r7->qUnk40 = temp_sl->qUnk40; + var_r7->qUnk34 = 0; + var_r7->qUnk38 = temp_sl->qUnk38; + } else { + var_r7 = TASK_DATA(strc28->task10); + } + + if (temp_r0 > 7U) { + if (sp8->qUnk38 >= Q(100)) { + sp8->qUnk38 = (s32)(sp8->qUnk38 - Q(1)); + sp4->qUnk38 = (s32)(sp4->qUnk38 - Q(1)); + temp_sl->qUnk38 -= Q(1); + var_r7->qUnk38 -= Q(1); + } + } + if (temp_r0 == 1) { + sp8->qUnk38 = (s32)(sp8->qUnk38 + 0xA00); + sp4->qUnk38 = (s32)(sp4->qUnk38 + 0xA00); + temp_sl->qUnk38 = (s32)(temp_sl->qUnk38 + 0xA00); + var_r7->qUnk38 = (s32)(var_r7->qUnk38 + 0xA00); + } + if (sub_805423C(&strc28->strc0) && (strc28->strc0.unk4 == 4)) { + if (strc28->unk24 > 0xAU) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + sub_805D048(1); + return; + } + strc28->unk24 = strc28->unk24 + 1; + } + if ((0x12C - Div(0x2000, 0x128)) == temp_r0) { + strc28->strc0.unk0 = 0; + strc28->strc0.unk2 = 1; + strc28->strc0.unk4 = 4; + strc28->strc0.unk6 = 0; + strc28->strc0.unk8 = 0x128; + strc28->strc0.unkA = 1; + } + strc28->unk1C = (s16)temp_r0; + temp_sl->unk30 = temp_r0; +} + +void Task_80693D0() +{ + SpecialStageIntro44 *strc44 = TASK_DATA(gCurTask); + Sprite *s = &strc44->s; + + if (strc44->unk30 == 0) { + s->graphics.anim = gUnknown_0868B634[gSelectedCharacter][0]; + s->variant = gUnknown_0868B634[gSelectedCharacter][1]; + s->prevVariant = -1; + strc44->qUnk38 += Q(16); + } + + strc44->qUnk40 -= Q(1); + if (strc44->qUnk40 < -Q(100)) { + strc44->qUnk40 = -Q(100); + } + + s->x = I(strc44->qUnk40); + s->y = I(strc44->qUnk38); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void sub_8069464() +{ + SpecialStageIntro44 *strc44 = TASK_DATA(gCurTask); + Sprite *s = &strc44->s; + + if (strc44->unk30 == 0) { + s->graphics.anim = gUnknown_0868B644[gSelectedCharacter][0]; + s->variant = gUnknown_0868B644[gSelectedCharacter][1]; + s->prevVariant = -1; + strc44->qUnk38 = Q(180); + } + + strc44->qUnk40 += strc44->qUnk3C; + strc44->qUnk38 += strc44->qUnk34; + + s->x = I(strc44->qUnk40); + s->y = I(strc44->qUnk38); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_80694E8() +{ + SpecialStageIntro28 *strc28 = TASK_DATA(gCurTask); + SpecialStageIntro44 *temp_r6 = TASK_DATA(strc28->taskC); + u32 temp_r4; + + temp_r4 = strc28->unk1C + 1; + sub_805423C(&strc28->strc0); + if (temp_r4 == 0x8C) { + strc28->taskC->main = Task_8069550; + } + if (temp_r4 > 0xA1U) { + m4aSongNumStart(0x2DU); + + temp_r4 = 0; + strc28->unk1C = 0; + temp_r6->unk30 = 0U; + strc28->taskC->main = Task_80693D0; + gCurTask->main = Task_8069100; + return; + } + strc28->unk1C = (s16)temp_r4; + temp_r6->unk30 = temp_r4; +} + +void Task_nullsub_806954C(void) { } + +void Task_8069550() +{ + SpecialStageIntro44 *strc44 = TASK_DATA(gCurTask); + Sprite *s = &strc44->s; + + strc44->qUnk38 += 0x4A0; + if (strc44->qUnk38 > Q(80)) { + strc44->qUnk38 = Q(80); + } + s->x = I(strc44->qUnk40); + s->y = I(strc44->qUnk38); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void sub_8069598(void) { } + +void Task_strc44_806959C() +{ + SpecialStageIntro44 *strc44 = TASK_DATA(gCurTask); + Sprite *s = &strc44->s; + + strc44->qUnk40 -= Q(1); + if (strc44->qUnk40 < -Q(100)) { + strc44->qUnk40 = -Q(100); + } + + s->x = I(strc44->qUnk40); + s->y = I(strc44->qUnk38); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +// indentical to Task_strc44_806959C +void sub_80695E8() +{ + SpecialStageIntro44 *strc44 = TASK_DATA(gCurTask); + Sprite *s = &strc44->s; + + strc44->qUnk40 -= Q(1); + if (strc44->qUnk40 < -Q(100)) { + strc44->qUnk40 = -Q(100); + } + + s->x = I(strc44->qUnk40); + s->y = I(strc44->qUnk38); + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void Task_8069634() +{ + SpecialStageIntro44 *strc44 = TASK_DATA(gCurTask); + Sprite *s = &strc44->s; + + s->x = I(strc44->qUnk40); + s->y = I(strc44->qUnk38); + + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + TaskDestroy(gCurTask); + return; + } + + s->frameFlags &= ~0x400; + DisplaySprite(s); + s->frameFlags |= 0x400; + DisplaySprite(s); +} diff --git a/sa1/src/game/special_stage/main.c b/sa1/src/game/special_stage/main.c new file mode 100644 index 0000000000..4ff0ffe5fe --- /dev/null +++ b/sa1/src/game/special_stage/main.c @@ -0,0 +1,2839 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_ewram.h" +#include "lib/m4a/m4a.h" +#include "lib/m4a/m4a_internal.h" // for MP2KSongHeader +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/palette_loader.h" +#include "game/sa1_sa2_shared/pause_menu.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/save.h" +#include "game/special_stage/main.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" + +extern struct MP2KSongHeader se_ring_copy; + +#include "constants/animations.h" +#include "constants/tilemaps.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct Strc_30055E0 { + u8 unk0; + s16 unk2; + u16 qBlend; + s32 qUnk8; + u8 fillerC[0x4]; +} Strc_30055E0; /* 0x10 */ + +typedef struct Strc_3005690 { + s32 unk0; + s32 unk4; + s32 unk8; + s16 unkC; + s16 unkE; + s16 unk10; + s16 unk12; + s16 unk14; + s16 unk16; + s16 unk18; + s16 unk1A; + s16 unk1C; + s16 unk1E; + s16 unk20; + u8 filler22[6]; + u8 unk28; + u8 unk29; + u8 unk2A; + u8 unk2B; + u8 filler2C[0x2]; + u16 unk2E; + u8 unk30; + u8 unk31; + s16 unk32; + s16 unk34; + u8 filler36[0x4]; + s16 unk3A; + s8 unk3C; + s8 unk3D; + s8 unk3E; + u8 unk3F; + u8 unk40; + u8 unk41; + u16 unk42; + u16 unk44; + u8 filler46[0x2]; + AnimId anim48; + u16 variant4A; + u8 unk4C; + u8 unk4D; + u8 filler4E[0x2]; + u16 unk50; + u16 unk52; + u16 unk54; + u8 filler56[0xA]; +} Strc_3005690; /* 0x60 */ + +typedef struct Strc_3005780 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + u8 unkA; + s16 unkC; + s16 unkE; + s16 unk10; + s8 unk12; + s8 unk13; +} Strc_3005780; + +typedef struct SpStage74 { + SpriteTransform tf; + Sprite s; + s32 unk3C; + s32 unk40; + s32 unk44; + s16 unk48; + s16 unk4A; + s16 unk4C; + s16 unk4E; + s16 unk50; + s16 unk52; + s16 unk54; + s16 unk56; + s16 unk58; + s16 unk5A; + s16 unk5C; + u8 filler5E[2]; + u16 unk60; + AnimId anim62; + u16 variant64; + u8 unk66; + u8 unk67; + s16 unk68; + u8 unk6A; + u8 unk6B; + u8 unk6C; + u8 unk6D; + s16 unk6E; + s16 unk70; + u8 filler72[2]; +} SpStage74; + +typedef struct SpStage8 { + u8 filler0[2]; + u16 unk2; + u16 unk4; + u8 unk6; +} SpStage8; + +// Stage layouts? +typedef struct SpStageC { + s16 unk0; + s16 unk2; + s32 unk4; + u16 unk8; +} SpStageC; /* 0x0C */ + +typedef struct SpStage40 { + SpriteTransform tf; + Sprite s; + void *mem; +} SpStage40; + +// Number of rings needed this round, to continue to the next / (in the last one) collect the emerald. +u16 gSpecialStageTargetRings = 0; + +void Task_80299B0(void); +void sub_8029A50(void); +void Task_8029AC4(void); +void sub_8029B74(void); +void sub_8029E0C(s16 characterId); +void sub_8029EA8(s16 unusedCharacterId); +bool32 sub_8029F30(Strc_3005690 *param0); +bool32 sub_8029FA4(Strc_3005690 *param0); +void sub_802A068(Strc_3005690 *strc5690); +void sub_802A134(Strc_3005690 *strc5690); +void sub_802A248(Strc_3005690 *strc5690); +void sub_802A4C4(Strc_3005690 *strc5690); +void Task_802A560(void); +void sub_802A688(void); +void sub_802A890(void); +void sub_802A988(void); +void Task_802AA48(void); +void sub_802AAF0(void); +void sub_802ABA0(void); +void Task_802AC50(void); +void sub_802ACF0(void); +void sub_802B008(void); +void sub_802B07C(void); +void sub_802B18C(void); +void sub_802B214(void); +void Task_802AD9C(void); +void Task_802AE40(void); +void sub_802B5DC(Sprite *s); +void sub_802B884(void); +bool32 sub_802B66C(SpStage74 *strc74, Sprite *s, s16 param2, s16 param3); +bool32 sub_802BC6C(void); +void Task_802BEDC(void); +void sub_802C04C(SpStage74 *strc74); +void sub_802C0CC(void); +void sub_802C224(void); +void sub_802C2DC(SpStage74 *strc74); +void sub_802C488(void); +typedef enum CheckpointMsg { + CHKPTMSG_PLAYER_COOL, + CHKPTMSG_PLAYER_AAARGH, + CHKPTMSG_NOT_ENOUGH_RINGS, +} CheckpointMsg; +static void CreateCheckpointMessage(u8 msg); +void sub_802C6C4(void); +void sub_802C89C(void); +void sub_802C934(void); +void UpdateObjectsAndRender(void); +void sub_802D158(void); +void sub_802D190(void); +void sub_802D1D8(void); +void sub_802D274(void); +void sub_802D464(void); +void Task_802D2BC(void); +u16 sub_802D2F4(Strc_3005690 *param0); +void sub_802D33C(void); +void Task_802D37C(void); +void sub_802D3E4(void); +void sub_802D450(void); +void sub_802D4C4(void); +void Task_802D508(void); +void TaskDestructor_802D578(struct Task *t); +void sub_802D560(void); +u8 sub_802D58C(s16 param0); +void SpStage_PlayRingSoundeffect(void); // 0x0802D5EC +void Task_SpStageInitializeSomethingAndStartMusic(void); +void Task_802D238(void); +void sub_802D66C(void); +void sub_802D680(void); +void sub_802D6FC(SpStage74 *strc74, Sprite *s); + +void sub_802BE0C(Sprite *s, SpriteTransform *tf); + +extern void sub_805C448(u8 arg0); +extern void sub_805D048(u8 arg0); +extern void sub_8068D0C(); + +extern void SetFaceButtonConfig(bool32 flipFaceButtons); + +typedef struct TfSprite { + SpriteTransform tf; + Sprite s; +} TfSprite; + +// From temporary_sound_play_task.c +extern u16 gUnknown_03005028; +extern u16 gUnknown_03005070; + +#if PLATFORM_GBA +// TODO: Insert these! +extern Background gUnknown_030055A0; +extern Strc_30055E0 gUnknown_030055E0; +extern TfSprite gUnknown_030055F0; +extern Background gUnknown_03005630; +extern s16 gUnknown_03005670[16]; +extern Strc_3005690 gUnknown_03005690; +extern u16 gUnknown_030056F0[16][2]; +extern u8 gUnknown_03005730; +extern Background gUnknown_03005740; +extern Strc_3005780 gUnknown_03005780; +extern Background gUnknown_030057A0; +extern s8 gUnknown_030057E0[32]; +extern Background gUnknown_03005800; +extern s16 gUnknown_03005840[16]; +#else +Background gUnknown_030055A0 = { 0 }; +Strc_30055E0 gUnknown_030055E0 = { 0 }; +TfSprite gUnknown_030055F0 = { 0 }; +Background gUnknown_03005630 = { 0 }; +s16 gUnknown_03005670[16] = { 0 }; +Strc_3005690 gUnknown_03005690 = { 0 }; +u16 gUnknown_030056F0[16][2] = { 0 }; +extern u8 gUnknown_03005730; +Background gUnknown_03005740 = { 0 }; +Strc_3005780 gUnknown_03005780 = { 0 }; +Background gUnknown_030057A0 = { 0 }; +s8 gUnknown_030057E0[32] = { 0 }; +Background gUnknown_03005800 = { 0 }; +s16 gUnknown_03005840[16] = { 0 }; +#endif + +extern u16 gUnknown_08487140[][2]; +extern u8 gUnknown_08487134[NUM_TIME_ATTACK_ZONES * ACTS_PER_ZONE]; + +const Background gUnknown_08486FF4 = { + .graphics = { + .src = NULL, + .dest = (void*)(BG_VRAM + 0x8000), + .size = 0, + }, + .layoutVram = (void*)(BG_VRAM + 0xE000), + .tilemapId = 54, + .targetTilesX = (256 / 8), + .targetTilesY = (256 / 8), + .flags = 0x3, + .prevScrollX = 0x7FFF, + .prevScrollY = 0x7FFF, +}; +const Background gUnknown_08487034 = { + .graphics = { + .src = NULL, + .dest = (void*)(BG_VRAM + 0x4000), + .size = 0, + }, + .layoutVram = (void*)(BG_VRAM + 0xC01A), + .tilemapId = 55, + .targetTilesX = (152 / 8), + .targetTilesY = (112 / 8), + .flags = 0x2, + .scrollX = 136, + .scrollY = 32, + .prevScrollX = 0x7FFF, + .prevScrollY = 0x7FFF, +}; +const Background gUnknown_08487074 = { + .graphics = { + .src = NULL, + .dest = (void*)(BG_VRAM + 0x4000), + .size = 0, + }, + .layoutVram = (void*)(BG_VRAM + 0xC39A), + .tilemapId = 55, + .targetTilesX = (152 / 8), + .targetTilesY = (112 / 8), + .flags = 0x9A, + .prevScrollX = 0x7FFF, + .prevScrollY = 0x7FFF, +}; +const Background gUnknown_084870B4 = { + .graphics = { + .src = NULL, + .dest = (void*)(BG_VRAM + 0x4000), + .size = 0, + }, + .layoutVram = (void*)(BG_VRAM + 0xC800), + .tilemapId = 55, + .targetTilesX = (152 / 8), + .targetTilesY = (112 / 8), + .flags = 0x11A, + .prevScrollX = 0x7FFF, + .prevScrollY = 0x7FFF, +}; +const Background gUnknown_084870F4 = { + .graphics = { + .src = NULL, + .dest = (void*)(BG_VRAM + 0x4000), + .size = 0, + }, + .layoutVram = (void*)(BG_VRAM + 0xCB80), + .tilemapId = 55, + .targetTilesX = (152 / 8), + .targetTilesY = (112 / 8), + .flags = 0x19A, + .prevScrollX = 0x7FFF, + .prevScrollY = 0x7FFF, +}; + +typedef struct HitboxS16 { + s16 left; + s16 top; + s16 right; + s16 bottom; +} HitboxS16; + +extern const s16 gUnknown_0848715C[16][2]; +extern const s16 gUnknown_08487184[16][2]; +extern const s16 gUnknown_084871C4[16][2]; +extern const s16 gUnknown_084871C4[16][2]; +extern const HitboxS16 gUnknown_08487204; +extern const HitboxS16 gUnknown_0848720C; +extern const s16 gUnknown_08487214[12][2]; +extern const s16 gUnknown_0848722C[16][3]; +extern const u16 gUnknown_0848728C[14][2]; +extern s16 gUnknown_084872E0[12][2]; +extern s16 gUnknown_08487310[8][2]; +extern s16 gUnknown_08487330[10][2]; + +extern SpStageC *gUnknown_087BF8DC[7]; +extern u16 gUnknown_084872C4[]; + +static inline void sub_802D6B4__inline(Strc_3005690 *strc5690) +{ + if ((strc5690->unk42 & gPlayerControls.jump) && !(1 & strc5690->unk29)) { + strc5690->unk20 = +Q(1); + } else { + if (!(2 & strc5690->unk29)) { + strc5690->unk20 = Q(0); + } else { + strc5690->unk20 = -Q(1); + } + } +} + +static inline void sub_802D6FC__inline(SpStage74 *strc74, Sprite *s) +{ + s->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); +} + +void CreateSpecialStage() +{ + SA2_LABEL(sub_801F044)(); + gUnknown_03005730 = 0; + gUnknown_0300507C = 0; + gSpecialStageCollectedRings = 0; + + gUnknown_03005028 = gUnknown_08487140[gUnknown_08487134[gCurrentLevel]][0]; + gUnknown_03005070 = gUnknown_08487140[gUnknown_08487134[gCurrentLevel]][1]; + gSpecialStageTargetRings = gUnknown_03005028; + + gPlayer.itemEffect &= ~0x4; + + SetFaceButtonConfig(LOADED_SAVE->btnConfig); + + sub_802D158(); + sub_802D190(); + sub_802D1D8(); + sub_8029B74(); + sub_802C934(); + + sub_805C448(1); +} + +void Task_80299B0(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Strc_30055E0 *strc55E0 = &gUnknown_030055E0; + + if (strc55E0->unk0 == 2) { + strc55E0->unk2 = 0x1A4; + strc5690->unk29 |= 1; + strc5690->unk2A = 0x40; + + gCurTask->main = sub_8029A50; + + if (gUnknown_03005028 > gSpecialStageCollectedRings) { + CreateCheckpointMessage(CHKPTMSG_NOT_ENOUGH_RINGS); + } + } + if (strc55E0->unk0 == 1) { + strc55E0->unk2 = 0x1A4; + strc5690->unk29 |= 1; + strc5690->unk2A = 0x80; + gCurTask->main = sub_802D274; + + if (gUnknown_03005070 > gSpecialStageCollectedRings) { + CreateCheckpointMessage(CHKPTMSG_NOT_ENOUGH_RINGS); + } + } +} + +void sub_8029A50(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + + if (--gUnknown_030055E0.unk2 <= 0) { + if (gUnknown_03005028 <= gSpecialStageCollectedRings) { + gUnknown_030055E0.unk0 = 0; + strc5690->unk29 &= ~0x1; + sub_802D560(); + gCurTask->main = Task_80299B0; + } else { + gStageFlags |= 0x20; + gCurTask->main = Task_8029AC4; + } + } +} + +void Task_8029AC4(void) +{ + gUnknown_030055E0.qBlend += Q(0.25); + gBldRegs.bldCnt = 0x3F9F; + gBldRegs.bldAlpha = 0; + gBldRegs.bldY = I(gUnknown_030055E0.qBlend); + + if (gUnknown_030055E0.qBlend >= Q(16)) { + gBldRegs.bldAlpha = 0x10; + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + gBldRegs.bldCnt |= 0x3F1F; + if (gUnknown_030055E0.unk0 == 2) { + sub_805D048(0); + } else if (gSpecialStageTargetRings <= gSpecialStageCollectedRings) { + sub_8068D0C(); + } else { + sub_805D048(0); + } + } +} + +void sub_8029B74(void) +{ + Strc_3005780 *strc5780 = &gUnknown_03005780; + s32 var_r0; + s32 var_r0_2; + + gDispCnt = 0x1C40; + gBgCntRegs[1] = 0x201; + gBgCntRegs[2] = 0x5806; + gBgCntRegs[3] = 0x1C0B; + strc5780->unk0 = 0x88; + strc5780->unk2 = 0x20; + strc5780->unkE = 0; + strc5780->unk4 = 0; + strc5780->unk10 = 0; + strc5780->unk6 = 0; + strc5780->unk8 = 0; + strc5780->unkC = 0; + +#ifndef NON_MATCHING + asm("" ::"r"(gBgScrollRegs)); +#endif + + var_r0 = 0x88 - strc5780->unk4; + if (var_r0 < 0) { + var_r0 += 7; + } + gBgScrollRegs[3][0] = (var_r0 >> 3); + + var_r0_2 = strc5780->unk6 + 0x20; + if (var_r0_2 < 0) { + var_r0_2 += 7; + } + gBgScrollRegs[3][1] = (s16)(var_r0_2 >> 3); + gBgScrollRegs[2][0] = 0x88; + gBgScrollRegs[2][1] = 0x20; + + gUnknown_03005630 = gUnknown_08487034; + gUnknown_030055A0 = gUnknown_08487074; + gUnknown_03005740 = gUnknown_084870B4; + gUnknown_03005800 = gUnknown_084870F4; + gUnknown_030057A0 = gUnknown_08486FF4; + + DrawBackground(&gUnknown_03005630); + DrawBackground(&gUnknown_030055A0); + DrawBackground(&gUnknown_03005740); + DrawBackground(&gUnknown_03005800); + DrawBackground(&gUnknown_030057A0); + + TaskCreate(Task_802D2BC, 0U, 0x1200U, 0U, NULL); + + // Orthogonal big lights + CreatePaletteLoaderTask(0x2000U, gUnknown_08487134[gCurrentLevel] + 0x340, 0U, NULL); + + // Diagonal small lights + CreatePaletteLoaderTask(0x2000U, gUnknown_08487134[gCurrentLevel] + 0x340, 1U, NULL); +} + +void sub_8029CDC(void) +{ + Strc_3005780 *strc5780 = &gUnknown_03005780; + Background *bg5630 = &gUnknown_03005630; + Background *bg55A0 = &gUnknown_030055A0; + Background *bg5740 = &gUnknown_03005740; + Background *bg5800 = &gUnknown_03005800; + Strc_3005690 *strc5690 = &gUnknown_03005690; + s32 temp_r0; + s32 var_r0; + s32 var_r0_2; + s32 var_r0_3; + s32 var_r0_4; +#ifndef NON_MATCHING + register s32 r1 asm("r1"); +#else + s32 r1; +#endif + u8 r2; + u32 temp_r0_2; + + strc5780->unk4 = I(-((strc5690->unk0 / 134) * 32)); + temp_r0 = (s32)(0 - (((s32)strc5690->unk4 / 94) << 5)) >> 8; + strc5780->unk6 = (s16)temp_r0; + if ((s32)(s16)temp_r0 < -0x20) { + strc5780->unk6 = -0x20; + } + if ((s32)strc5780->unk6 > 0x20) { + strc5780->unk6 = 0x20; + } + if ((s32)strc5780->unk4 < -0x20) { + strc5780->unk4 = -0x20; + } + if ((s32)strc5780->unk4 > 0x20) { + strc5780->unk4 = 0x20; + } + +#ifndef NON_MATCHING + asm("" ::"r"(gBgScrollRegs)); +#endif + + var_r0 = strc5780->unk0 - strc5780->unk4; + if (var_r0 < 0) { + var_r0 += 7; + } + gBgScrollRegs[3][0] = (s16)(var_r0 >> 3); + var_r0_2 = strc5780->unk2 + strc5780->unk6; + if (var_r0_2 < 0) { + var_r0_2 += 7; + } + gBgScrollRegs[3][1] = (s16)(var_r0_2 >> 3); + + gBgScrollRegs[2][0] = strc5780->unk0 - strc5780->unk4; + gBgScrollRegs[2][1] = strc5780->unk2 + strc5780->unk6; + + r2 = strc5780->unk12; + strc5780->unk12 = ((strc5690->unk18 >> 9) + r2) & 0x3F; + var_r0_3 = strc5780->unk12; + if (var_r0_3 < 0) { + var_r0_3 += 3; + } + bg5630->tilemapId = TM_SPECIAL_STAGE_BG_FRAME_0 + (var_r0_3 >> 2); + var_r0_4 = strc5780->unk12; + +#ifndef NON_MATCHING + asm("mov r2, r0" ::"r"(var_r0_4)); +#endif + + r1 = var_r0_4; + if (r1 < 0) { + var_r0_4 = r1 + 3; + } + bg55A0->tilemapId = (var_r0_4 >> 2) + 0x37; + bg5740->tilemapId = (var_r0_4 >> 2) + 0x37; + bg5800->tilemapId = (var_r0_4 >> 2) + 0x37; + bg5630->flags &= 0xFFF7; + DrawBackground(bg5630); + DrawBackground(bg55A0); + DrawBackground(bg5740); + DrawBackground(bg5800); +} + +void sub_8029E0C(s16 characterId) +{ + gUnknown_03005690.unk4C = characterId; // NOTE: u8 cast! + gUnknown_03005690.unk0 = 0; + gUnknown_03005690.unk4 = 0; + gUnknown_03005690.unk8 = 0; + gUnknown_03005690.unk10 = -52; + gUnknown_03005690.unk14 = 0; + gUnknown_03005690.unk16 = 0; + gUnknown_03005690.unk18 = 0x800; + gUnknown_03005690.unk1A = 0; + gUnknown_03005690.unk2B = 0; + gUnknown_03005690.unk28 = 0; + gUnknown_03005690.unk29 = 1; + gUnknown_03005690.unk2A = 0; + gUnknown_03005690.unk2E = 0; + gUnknown_03005690.unk30 = 0; + gUnknown_03005690.unk31 = 0; + gUnknown_03005690.unk40 = 1; + gUnknown_03005690.unk42 = 0; + gUnknown_03005690.unk44 = 0; + gUnknown_03005690.anim48 = SA1_CHAR_ANIM_27 + gPlayerCharacterIdleAnims[gUnknown_03005690.unk4C]; + gUnknown_03005690.variant4A = 4; + gUnknown_03005690.unk34 = 0; + gUnknown_03005690.unk3F = 0; + gUnknown_03005690.unk50 = 0; + gUnknown_03005690.unk52 = 0; + gUnknown_03005690.unk3D = 0; + gUnknown_03005690.unk3E = 0; + gUnknown_03005690.unk32 = 0; +} + +void sub_8029EA8(s16 unusedCharacterId) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf; + + s->graphics.dest = OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc5690->anim48; + s->variant = strc5690->variant4A; + s->prevVariant = -1; + s->x = DISPLAY_CENTER_X + I(strc5690->unk0); + s->y = DISPLAY_CENTER_Y - I(strc5690->unk4); + s->oamFlags = 0x180; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + + tf = &gUnknown_030055F0.tf; + tf->rotation = 0; + tf->qScaleX = Q(1); + tf->qScaleY = Q(1); + tf->x = 0; + tf->y = 0; +} + +bool32 sub_8029F30(Strc_3005690 *param0) +{ + if (!(1 & param0->unk29)) { + if (8 & param0->unk29) { + param0->unk28 = 2; + ClearBit(param0->unk29, 3); + sub_802A988(); + return TRUE; + } else if (4 & param0->unk29) { + if (param0->unk52 != param0->unk50) { + param0->unk28 = 1; + ClearBit(param0->unk29, 2); + param0->unk52 = param0->unk50; + sub_802A688(); + return TRUE; + } + } + } + + return FALSE; +} + +bool32 sub_8029FA4(Strc_3005690 *param0) +{ + if (param0->unk3E != 0) { + param0->unk3E--; + param0->unk3D = 0; + } else if (param0->unk3D != 0) { + param0->unk3D--; + + if (param0->unk44 & gPlayerControls.attack) { + sub_802ACF0(); + MPlayStop(gMPlayTable[gSongTable[42].ms].info); + CreateSpStageTrickSoundTask(MUS_SP_STAGE_TRICK, MUS_SPECIAL_STAGE); + return TRUE; + } + } else if (param0->unk44 & gPlayerControls.attack) { + if (!(1 & param0->unk29)) { + if (0x200 & param0->unk44) { + param0->unk3C = 0; + } else { + param0->unk3C = -1; + } + sub_802ABA0(); + return TRUE; + } + } + + return FALSE; +} + +void sub_802A068(Strc_3005690 *param0) +{ + s32 temp_r0; + s32 var_r0; + u16 temp_r1; + + if (0xC0 & param0->unk42) { + param0->unk1E = gUnknown_084871C4[(0xF0 & param0->unk42) >> 4][1]; + if ((param0->unk16 > 0) && (param0->unk1E < 0)) { + param0->unk16 = 0; + } + if ((param0->unk16 < 0) && (param0->unk1E > 0)) { + param0->unk16 = 0; + } + } else { + var_r0 = param0->unk16; + if (var_r0 < 0) { + var_r0 += 3; + } + + param0->unk1E = -(var_r0 >> 2); + if (param0->unk1E == 0) { + param0->unk1E = 0 - (u16)param0->unk16; + } + } + + if (0x30 & param0->unk42) { + param0->unk1C = gUnknown_084871C4[(0xF0 & param0->unk42) >> 4][0]; + if ((param0->unk14 > 0) && (param0->unk1C < 0)) { + param0->unk14 = 0; + } + if ((param0->unk14 < 0) && (param0->unk1C > 0)) { + param0->unk14 = 0; + } + } else { + var_r0 = param0->unk14; + if (var_r0 < 0) { + var_r0 += 3; + } + param0->unk1C = -(var_r0 >> 2); + if (param0->unk1C == 0) { + param0->unk1C = -param0->unk14; + } + } +} + +void sub_802A134(Strc_3005690 *param0) +{ + Sprite *s = &gUnknown_030055F0.s; + u32 var_r0; + + if (2 & param0->unk29) { + if (param0->unk18 <= Q(12)) { + param0->anim48 = SA1_CHAR_ANIM_29 + gPlayerCharacterIdleAnims[param0->unk4C]; + param0->variant4A = 0; + } else { + param0->anim48 = SA1_CHAR_ANIM_29 + gPlayerCharacterIdleAnims[param0->unk4C]; + param0->variant4A = 1; + } + } else { + if ((0xF0 & param0->unk42) != 0) { + param0->anim48 = gUnknown_08487184[((0xF0 & param0->unk42) >> 4)][0] + gPlayerCharacterIdleAnims[param0->unk4C]; + param0->variant4A = gUnknown_08487184[((0xF0 & param0->unk42) >> 4)][1]; + } else { + var_r0 = sub_802D2F4(param0); + param0->anim48 = gUnknown_0848715C[var_r0][0] + gPlayerCharacterIdleAnims[param0->unk4C]; + param0->variant4A = gUnknown_0848715C[var_r0][1]; + } + } + + if ((s->graphics.anim != param0->anim48) || (s->variant != param0->variant4A)) { + s->graphics.anim = param0->anim48; + s->variant = param0->variant4A; + s->prevVariant = -1; + } +} + +void sub_802A248(Strc_3005690 *param0) +{ + s32 param0_unk0 = param0->unk0; + s32 param0_unk4 = param0->unk4; + + param0->unk14 += param0->unk1C; + param0->unk16 += param0->unk1E; + param0->unk18 += param0->unk20; + + switch (param0->unk28) { + case 0: + case 2: + case 3: + case 4: + case 5: { + if (param0->unk14 > 0x400) { + param0->unk14 = 0x400; + } else if (param0->unk14 < -0x400) { + param0->unk14 = -0x400; + } + + if (param0->unk16 > 0x400) { + param0->unk16 = 0x400; + } else if (param0->unk16 < -0x400) { + param0->unk16 = -0x400; + } + + if (param0->unk18 <= 0xC00) { + if (param0->unk18 <= 0x7FF) { + param0->unk18 = 0x800; + } + } else { + param0->unk18 = 0xC00; + } + + if (param0->unk18 == 0x800) { + param0->unk29 &= ~2; + } else { + param0->unk29 |= 2; + } + + if (2 & param0->unk29) { + param0_unk4 = param0->unk4 >> 5; + if (param0_unk4 >= 0) { + if (param0_unk4 < param0->unk16) { + param0->unk16 = param0_unk4; + } + } else { + if (param0_unk4 > param0->unk16) { + param0->unk16 = param0_unk4; + } + } + + if (2 & param0->unk29) { + param0->unk0 += (param0->unk14 * 8) / I(param0->unk18); + param0->unk4 += (param0->unk16 * 8) / I(param0->unk18); + param0->unk0 -= (param0->unk0 >> 5); + param0->unk4 -= (param0->unk4 >> 5); + } else { + param0->unk0 += param0->unk14; + param0->unk4 += param0->unk16; + } + } else { + param0->unk0 += param0->unk14; + param0->unk4 += param0->unk16; + } + if (!(1 & param0->unk29)) { + param0->unk8 += param0->unk18; + } + } break; + + case 1: { + switch (param0->unk54) { + default: { + param0->unk0 = param0_unk0 + param0->unk14; + param0->unk4 = param0_unk4 + param0->unk16; + } break; + + case 4: { + param0->unk14 += param0->unk1C; + param0->unk16 += param0->unk1E; + + if (param0->unk14 > 0x400) { + param0->unk14 = 0x400; + } else if (param0->unk14 < -0x400) { + param0->unk14 = -0x400; + } + + if (param0->unk16 > 0x400) { + param0->unk16 = 0x400; + } else if (param0->unk16 < -0x400) { + param0->unk16 = -0x400; + } + + param0->unk14 = (param0->unk14 * I(param0->unk18)) / 8; + param0->unk16 = (param0->unk16 * I(param0->unk18)) / 8; + + param0->unk0 += param0->unk14; + param0->unk4 += param0->unk16; + } break; + + case 5: { + param0->unk14 += param0->unk1C; + param0->unk16 += param0->unk1E; + + if (param0->unk14 > 0x400) { + param0->unk14 = 0x400; + } else if (param0->unk14 < -0x400) { + param0->unk14 = -0x400; + } + + if (param0->unk16 > 0x400) { + param0->unk16 = 0x400; + } else if (param0->unk16 < -0x400) { + param0->unk16 = -0x400; + } + + param0->unk14 = (param0->unk14 * 8) / I(param0->unk18); + param0->unk16 = (param0->unk16 * 8) / I(param0->unk18); + param0->unk0 += param0->unk14; + param0->unk4 += param0->unk16; + } + } + if (!(1 & param0->unk29)) { + param0->unk8 += param0->unk18; + } + } break; + } + + if (param0->unk0 < -Q(134)) { + param0->unk0 = -Q(134); + } + if (param0->unk0 > +Q(134)) { + param0->unk0 = +Q(134); + } + if (param0->unk4 < -Q(94)) { + param0->unk4 = -Q(94); + } + if (param0->unk4 > +Q(94)) { + param0->unk4 = +Q(94); + } +} + +// (90.14%) https://decomp.me/scratch/ZDa67 +NONMATCH("asm/non_matching/game/special_stage/sub_802A4C4.inc", void sub_802A4C4(Strc_3005690 *param0)) +{ + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + s16 temp_r1; + s16 temp_r1_3; + s16 x16, y16; + s16 temp_r8; + s32 r1, r8; + s32 temp_r1_2; + + r8 = param0->unk10; + temp_r1_2 = (param0->unk10 + 0x240); + x16 = I((param0->unk0 * (param0->unk10 + 0x240)) / 576); + y16 = I((param0->unk4 * (param0->unk10 + 0x240)) / 576); + r1 = 80; + r1 -= y16; + + param0->unkC = (x16 += 120 + gUnknown_03005780.unk4); + param0->unkE = r1 -= (u16)gUnknown_03005780.unk6; + s->x = param0->unkC; + s->y = param0->unkE; + tf->x = s->x; + tf->y = s->y; + tf->rotation = 0; + tf->qScaleX = r8 + Q(1); + tf->qScaleY = r8 + Q(1); + s->frameFlags = 0x2020; +} +END_NONMATCH + +void Task_802A560(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + u32 var_r0; + + strc5690->unk42 = gInput; + strc5690->unk44 = gPressedKeys; + if (0xC0 & strc5690->unk2A) { + strc5690->unk32 = 0x78; + strc5690->unk14 = (-strc5690->unk0) / 120; + strc5690->unk16 = (-strc5690->unk4) / 120; + strc5690->unk1C = 0; + strc5690->unk1E = 0; + gCurTask->main = Task_802AE40; + Task_802AE40(); + } else { + if (!sub_8029F30(strc5690) && !sub_8029FA4(strc5690)) { + strc5690->unk12 = (strc5690->unk12 + 0x10) & 0x3FF; + strc5690->unk10 = SIN_24_8(strc5690->unk12) / 16u; + + sub_802D6B4__inline(strc5690); + + sub_802A068(strc5690); + sub_802A134(strc5690); + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } + } +} + +void sub_802A688(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + u16 index; + + index = strc5690->unk54 - 4; + strc5690->anim48 = gUnknown_08487214[index][0] + gPlayerCharacterIdleAnims[strc5690->unk4C]; + strc5690->variant4A = gUnknown_08487214[index][1]; + s->graphics.anim = strc5690->anim48; + s->variant = strc5690->variant4A; + s->prevVariant = -1; + if (2 & strc5690->unk29) { + strc5690->unk14 = (gUnknown_0848722C[index][0] * 4) / 3; + strc5690->unk16 = (gUnknown_0848722C[index][1] * 4) / 3; + strc5690->unk18 = (gUnknown_0848722C[index][2] * 4) / 3; + } else { + strc5690->unk14 = gUnknown_0848722C[index][0]; + strc5690->unk16 = gUnknown_0848722C[index][1]; + strc5690->unk18 = gUnknown_0848722C[index][2]; + } + + switch (index) { + default: { + s32 unk20; + strc5690->unk1C = -(gUnknown_0848722C[index][0] >> 7); + strc5690->unk1E = -(gUnknown_0848722C[index][1] >> 7); + strc5690->unk20 = -32; + +#ifndef NON_MATCHING + // NOTE: This works, but converts each value to double, multiplies two doubles in software and then converts them back to + // integer. + // Considering the mul values are just 1.5 and 3, this can be done as integers. + strc5690->unk14 *= 1.5; + strc5690->unk16 *= 1.5; + strc5690->unk18 *= 1.5; + strc5690->unk1C *= 3.0; + strc5690->unk1E *= 3.0; +#else + // This is now just one add and two/one shifts + strc5690->unk14 = (strc5690->unk14 * 3) >> 1; + strc5690->unk16 = (strc5690->unk16 * 3) >> 1; + strc5690->unk18 = (strc5690->unk18 * 3) >> 1; + strc5690->unk1C *= 3; + strc5690->unk1E *= 3; +#endif + unk20 = -Q(0.375); + strc5690->unk20 = unk20; + } break; + + case 0: { + strc5690->unk1C = 0; + strc5690->unk1E = 0; + strc5690->unk20 = +Q(0.25); + } break; + + case 1: { + strc5690->unk1C = 0; + strc5690->unk1E = 0; + strc5690->unk20 = -Q(0.25); + } break; + } + + if (gUnknown_03005730 == 0) { + m4aSongNumStart(SE_148); + } + + strc5690->unk29 &= ~0x6; + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + + gCurTask->main = sub_802A890; +} + +void sub_802A890(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + bool32 var_r7 = 0; + + strc5690->unk42 = gInput; + strc5690->unk44 = gPressedKeys; + + if (strc5690->unk3D != 0) { + strc5690->unk3D--; + } + + switch (strc5690->unk54) { + case 4: + if (strc5690->unk18 > 0) { + sub_802A068(strc5690); + } + break; + case 5: + sub_802A068(strc5690); + break; + } + + if (sub_8029F30(strc5690) == 0) { + if (strc5690->unk54 == 4) { + if (strc5690->unk18 >= 0x800) { + var_r7 = 1; + } + } else { + if (strc5690->unk18 <= 0x800) { + var_r7 = 1; + } + } + + if (var_r7 != 0) { + gCurTask->main = Task_802A560; + strc5690->unk28 = 0; + strc5690->unk18 = 0x800; + strc5690->unk20 = 0; + strc5690->unk3E = 0; + } + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +void sub_802A988(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + + if (gSpecialStageCollectedRings != 0) { + sub_802AAF0(); + if (gUnknown_03005730 == 0) { + m4aSongNumStart(SE_RINGS_LOST); + } + } + + strc5690->anim48 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 32; + strc5690->variant4A = 0; + + s->graphics.anim = strc5690->anim48; + s->variant = strc5690->variant4A; + s->prevVariant = 0xFF; + + strc5690->unk14 = 0; + strc5690->unk16 = 0; + strc5690->unk18 = 0x800; + strc5690->unk1C = 0; + strc5690->unk1E = 0; + strc5690->unk20 = 0; + strc5690->unk29 &= 0xFE; + strc5690->unk34 = 0x3C; + sub_802A248(strc5690); + sub_802A4C4(strc5690); + + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + + gCurTask->main = Task_802AA48; +} + +void Task_802AA48(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + u16 temp_r0; + + strc5690->unk42 = gInput; + strc5690->unk44 = gPressedKeys; + if (strc5690->unk3D != 0) { + strc5690->unk3D = (u8)strc5690->unk3D - 1; + } + + if (--strc5690->unk34 == 0) { + gCurTask->main = Task_802A560; + strc5690->unk28 = 0; + (&strc5690->unk28)[0x16] = 0; + } + if (strc5690->unk34 <= 30) { + sub_802A068(&gUnknown_03005690); + } + sub_802A248(&gUnknown_03005690); + sub_802A4C4(&gUnknown_03005690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + if (!(2 & strc5690->unk34)) { + DisplaySprite(s); + } +} + +void sub_802AAF0(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + s32 temp_r3; + SpStage74 *strc74; + u16 temp_r7; + u16 var_r5; + + if ((u32)gSpecialStageCollectedRings > 9U) { + var_r5 = 10; + gSpecialStageCollectedRings = gSpecialStageCollectedRings - 10; + } else { + var_r5 = gSpecialStageCollectedRings; + gSpecialStageCollectedRings = 0; + } + + temp_r7 = var_r5; + while (var_r5 != 0) { + strc74 = TASK_DATA(TaskCreate(sub_802C6C4, sizeof(SpStage74), 0x1500U, 0U, NULL)); + temp_r3 = var_r5 - 1; + strc74->unk6A = temp_r3; + strc74->unk6B = temp_r7; + strc74->unk3C = strc5690->unk0; + strc74->unk40 = strc5690->unk4; + strc74->unk44 = strc5690->unk8; + strc74->unk52 = 0; + strc74->unk54 = 0; + strc74->unk56 = 0; + strc74->unk58 = 0; + strc74->unk5A = 0; + strc74->unk5C = 0; + strc74->unk60 = 0; + strc74->unk68 = 0xFFFF; + var_r5 = temp_r3; + } +} + +void sub_802ABA0(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + + strc5690->anim48 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 30; + strc5690->variant4A = 0; + + s->graphics.anim = strc5690->anim48; + s->variant = strc5690->variant4A; + s->prevVariant = 0xFF; + + strc5690->unk14 = 0; + strc5690->unk16 = 0; + strc5690->unk1C = 0; + strc5690->unk1E = 0; + strc5690->unk20 = 0; + strc5690->unk28 = 3; + strc5690->unk29 |= 0x10; + strc5690->unk3A = 0x2D; + + if (gUnknown_03005730 == 0) { + m4aSongNumStart(SE_149); + } + + sub_802A248(strc5690); + sub_802A4C4(strc5690); + + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + + gCurTask->main = Task_802AC50; +} + +void Task_802AC50(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + + if (strc5690->unk3D != 0) { + strc5690->unk3D--; + } + if (sub_8029F30(strc5690) == 0) { + if (2 & strc5690->unk29) { + strc5690->unk20 = -Q(0.5); + } else { + strc5690->unk20 = 0; + } + + if (--strc5690->unk3A == 0) { + gCurTask->main = Task_802A560; + strc5690->unk29 &= ~0x10; + strc5690->unk28 = 0; + strc5690->unk3E = 0xC; + } + + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +void sub_802ACF0(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + + strc5690->anim48 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 31; + strc5690->variant4A = 0; + + s->graphics.anim = strc5690->anim48; + s->variant = strc5690->variant4A; + s->prevVariant = 0xFF; + + strc5690->unk14 = 0; + strc5690->unk16 = 0; + strc5690->unk1C = 0; + strc5690->unk1E = 0; + strc5690->unk20 = 0; + strc5690->unk28 = 4; + strc5690->unk29 |= 0x20; + + if (gUnknown_03005730 == 0) { + m4aSongNumStart(SE_149); + } + + sub_802A248(strc5690); + sub_802A4C4(strc5690); + + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + + gCurTask->main = Task_802AD9C; +} + +void Task_802AD9C(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + + if (strc5690->unk3D != 0) { + strc5690->unk3D--; + } + if (sub_8029F30(strc5690) == 0) { + if (2 & strc5690->unk29) { + strc5690->unk20 = -Q(0.5); + } else { + strc5690->unk20 = 0; + } + + if (s->frameFlags & 0x4000) { + gCurTask->main = Task_802A560; + strc5690->unk29 &= ~0x20; + strc5690->unk28 = 0; + strc5690->unk3E = 0xC; + } + + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +void Task_802AE40(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + + strc5690->unk42 = 0; + strc5690->unk44 = 0; + strc5690->unk12 = ((u16)strc5690->unk12 + 0x10) & 0x3FF; + strc5690->unk10 = (s16)((s32)((u16)gSineTable[strc5690->unk12] << 0x10) >> 0x1A); + + if (2 & strc5690->unk29) { + strc5690->unk20 = -Q(1); + } else { + strc5690->unk20 = 0; + } + + sub_802A134(strc5690); + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + + if (--strc5690->unk32 == 0) { + if (strc5690->unk2A == 0x40) { + if (gUnknown_03005028 <= gSpecialStageCollectedRings) { + strc5690->unk32 = 0x14A; + strc5690->anim48 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 0x21; + strc5690->variant4A = 0; + gCurTask->main = sub_802B07C; + CreateCheckpointMessage(CHKPTMSG_PLAYER_COOL); + } else { + strc5690->unk32 = 0; + strc5690->anim48 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 0x22; + strc5690->variant4A = 0; + gCurTask->main = sub_802B008; + sub_802B214(); + CreateCheckpointMessage(CHKPTMSG_PLAYER_AAARGH); + } + } else if (gUnknown_03005070 <= gSpecialStageCollectedRings) { + strc5690->anim48 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 0x21; + strc5690->variant4A = 0; + gCurTask->main = sub_802B18C; + m4aSongNumStart(MUS_SPECIAL_STAGE_CLEAR); + CreateCheckpointMessage(CHKPTMSG_PLAYER_COOL); + } else { + strc5690->unk32 = 0; + strc5690->anim48 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 0x22; + strc5690->variant4A = 0; + gCurTask->main = sub_802B008; + sub_802B214(); + CreateCheckpointMessage(CHKPTMSG_PLAYER_AAARGH); + } + s->graphics.anim = strc5690->anim48; + s->variant = strc5690->variant4A; + s->prevVariant = -1; + } +} + +void sub_802B008(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + + if (strc5690->unk32 > -120) { + strc5690->unk10 = --strc5690->unk32; + strc5690->unk42 = 0; + strc5690->unk44 = 0; + + if (!(2 & strc5690->unk29)) { + strc5690->unk20 = 0; + } else { + strc5690->unk20 = -Q(1.0); + } + + sub_802A068(strc5690); + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +// (98.11%) https://decomp.me/scratch/jrZYE +NONMATCH("asm/non_matching/game/special_stage/sub_802B07C.inc", void sub_802B07C(void)) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + u32 flags; + u8 *ptr; + + strc5690->unk42 = 0; + strc5690->unk44 = 0; + strc5690->unk12 = (strc5690->unk12 + 0x10) & 0x3FF; + strc5690->unk10 = SIN(strc5690->unk12) >> 10; + flags = 2 & strc5690->unk29; + ptr = &strc5690->unk29; + if (flags) { + strc5690->unk20 = -Q(1); + } else { + strc5690->unk20 = 0; + } + + sub_802A068(strc5690); + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + + if (strc5690->unk32 == 0xB4) { + gSpecialStageTargetRings = gUnknown_03005070; + TasksDestroyInPriorityRange(0x1180U, 0x1181U); + sub_805C448(0U); + } + if (strc5690->unk32 != 0) { + if (--strc5690->unk32 == 0) { + strc5690->variant4A = 1; + s->variant = 1; + s->prevVariant = 0xFF; + } + } + if (s->frameFlags & 0x4000) { + gCurTask->main = Task_802A560; + *ptr = 0; + strc5690->unk2A = 0; + strc5690->unk3E = 0xC; + } +} +END_NONMATCH + +void sub_802B18C(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s = &gUnknown_030055F0.s; + SpriteTransform *tf = &gUnknown_030055F0.tf; + u32 flags; + + strc5690->unk42 = 0; + strc5690->unk44 = 0; + strc5690->unk12 = (strc5690->unk12 + 0x10) & 0x3FF; + strc5690->unk10 = SIN_24_8(strc5690->unk12) / 16u; + + if (2 & strc5690->unk29) { + strc5690->unk20 = -Q(1); + } else { + strc5690->unk20 = 0; + } + + sub_802A068(strc5690); + sub_802A248(strc5690); + sub_802A4C4(strc5690); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); +} + +void sub_802B214(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Sprite *s; + SpriteTransform *tf; + s32 rnd; + + SpStage74 *strc74 = TASK_DATA(TaskCreate(Task_802D508, sizeof(SpStage74), 0x10FFU, 0U, NULL)); + strc74->unk3C = strc5690->unk0; + strc74->unk40 = strc5690->unk4; + strc74->unk44 = strc5690->unk8 - Q(1); + strc74->unk50 = (s16)(u16)strc5690->unk10; + strc74->unk52 = 0; + strc74->unk54 = 0; + strc74->unk56 = 0; + rnd = PseudoRandom32(); + strc74->unk58 = rnd & 0xF; + strc74->unk5A = -((0x70 & rnd) >> 4); + strc74->unk5C = -0x10; + if (rnd & 0x80) { + strc74->unk58 = -strc74->unk58; + } + strc74->unk6E = 0; + strc74->unk60 = 0xE; + strc74->anim62 = gPlayerCharacterIdleAnims[strc5690->unk4C] + 34; + strc74->variant64 = 1U; + strc74->unk67 = 0; + + s = &strc74->s; + s->graphics.dest = OBJ_VRAM0 + 0x1400; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + + strc74->unk66 = sub_802D58C(I(strc5690->unk8) - I(strc74->unk44)); + s->x = I(strc74->unk3C) + 120; + s->y = 80 - I(strc74->unk40); + s->oamFlags = SPRITE_OAM_ORDER(4); + s->qAnimDelay = 0; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = strc74->unk66 | 0x2020; + tf = &strc74->tf; + tf->rotation = 0; + tf->qScaleX = Q(0.25); + tf->qScaleY = Q(0.25); + tf->x = s->x; + tf->y = s->y; +} + +void Task_802B3E4() +{ + SpStage8 *strc8 = TASK_DATA(gCurTask); + Strc_3005690 *strc5690 = &gUnknown_03005690; + Strc_30055E0 *strc55E0 = &gUnknown_030055E0; + SpStage74 *strc74; + SpStageC *temp_r5; + u16 var_r0; + + temp_r5 = gUnknown_087BF8DC[gUnknown_08487134[gCurrentLevel]]; + if ((strc8->unk6 == 0) && (strc55E0->unk0 != 1)) { + while (temp_r5[strc8->unk2].unk4 < (I(strc5690->unk8) + 0x300)) { + if (temp_r5[strc8->unk2].unk8 == 0xFFFF) { + strc74 = TASK_DATA(TaskCreate(sub_802D33C, sizeof(SpStage74), 0x1F00U, 0U, NULL)); + strc74->unk60 = 1; + strc74->unk44 = temp_r5[strc8->unk2].unk4 << 8; + strc8->unk4 = temp_r5[strc8->unk2].unk4; + strc8->unk2 += 1; + strc8->unk6 = 1; + break; + } else if (temp_r5[strc8->unk2].unk8 == 0x7FFF) { + strc74 = TASK_DATA(TaskCreate(sub_802D33C, sizeof(SpStage74), 0x1F00U, 0U, NULL)); + strc74->unk60 = 2; + strc74->unk44 = temp_r5[strc8->unk2].unk4 << 8; + strc8->unk4 = temp_r5[strc8->unk2].unk4; + strc8->unk2++; + } else if (temp_r5[strc8->unk2].unk8 == 0) { + strc8->unk2++; + } else { + strc74 = TASK_DATA(TaskCreate(Task_802BEDC, sizeof(SpStage74), 0x1500U, 0U, NULL)); + strc74->unk60 = temp_r5[strc8->unk2].unk8; + strc74->unk3C = Q(temp_r5[strc8->unk2].unk0); + strc74->unk40 = Q(temp_r5[strc8->unk2].unk2); + strc74->unk44 = Q(temp_r5[strc8->unk2].unk4); + strc74->unk68 = (s16)strc8->unk2; + strc74->unk6D = 0xB; + strc74->unk70 = 0; + strc8->unk4 = temp_r5[strc8->unk2].unk4; + strc8->unk2++; + } + } + } +} + +void sub_802B5DC(Sprite *s) +{ + s32 i; + + if ((s->graphics.anim != 797) || (s->variant != 0)) { + for (i = 0; i < (s32)ARRAY_COUNT(gUnknown_030056F0); i++) { + if ((gUnknown_030056F0[i][0] == s->graphics.anim) && (gUnknown_030056F0[i][1] == s->variant)) { + s->frameFlags = s->frameFlags | 0xC0000; + return; + } + } + + for (i = 0; i < (s32)ARRAY_COUNT(gUnknown_030056F0); i++) { + if ((gUnknown_030056F0[i][0] == 0) && (gUnknown_030056F0[i][1] == 0)) { + gUnknown_030056F0[i][0] = s->graphics.anim; + gUnknown_030056F0[i][1] = s->variant; + return; + } + } + } +} + +// (97.41%) https://decomp.me/scratch/veYrR +NONMATCH("asm/non_matching/game/special_stage/sub_802B66C.inc", u32 sub_802B66C(SpStage74 *strc74, Sprite *s, s16 param2, s16 param3)) +{ + Sprite *spr55F0 = &gUnknown_030055F0.s; + Strc_3005690 *strc5690; + + if (s->hitboxes[0].index == -1) { + return 0U; + } + + strc5690 = &gUnknown_03005690; + if ((strc5690->unk8 >= strc74->unk44 - Q(64)) && (strc5690->unk8 <= strc74->unk44)) { + u16 unk60 = strc74->unk60; + if ((unk60 >= 4) && ((unk60 < 10) || (unk60 == 0xB))) { + if (2 & strc5690->unk29) { + if (HB_COLLISION(param2, param3, s->hitboxes[0].b, I(strc5690->unk0), I(strc5690->unk4), gUnknown_0848720C)) { + return TRUE; + } + } else if (RECT_COLLISION(param2, param3, &s->hitboxes[0].b, I(strc5690->unk0), I(strc5690->unk4), &gUnknown_08487204)) { + return TRUE; + } + } else { + if (HB_COLLISION(param2, param3, s->hitboxes[0].b, I(strc5690->unk0), I(strc5690->unk4), spr55F0->hitboxes[0].b)) { + return TRUE; + } + } + } + + return FALSE; +} +END_NONMATCH + +void sub_802B884(void) +{ + u16 temp_r0; + + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + Strc_3005690 *strc5690 = &gUnknown_03005690; + + if (1 & strc74->unk67) { + return; + } + if (1 & strc5690->unk29) { + return; + } + if (strc5690->unk28 == 2) { + return; + } + if (sub_802B66C(strc74, s, strc74->unk48, strc74->unk4A) == 0) { + return; + } + + switch (strc74->unk60) { + case 0: { + strc74->unk60 = 1; + strc74->anim62 = gUnknown_0848728C[strc74->unk60][0]; + strc74->variant64 = gUnknown_0848728C[strc74->unk60][1]; + strc74->unk67 |= 1; + strc74->unk52 = 0; + strc74->unk54 = 0; + strc74->unk56 = 0; + strc74->unk58 = 0; + strc74->unk5A = 0; + strc74->unk5C = 0; + s->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + gSpecialStageCollectedRings += 1; + SpStage_PlayRingSoundeffect(); + gCurTask->main = sub_802D3E4; + } break; + case 3: { + strc74->unk60 = 1; + strc74->anim62 = gUnknown_0848728C[strc74->unk60][0]; + strc74->variant64 = gUnknown_0848728C[strc74->unk60][1]; + strc74->unk67 |= 1; + strc74->unk52 = 0; + strc74->unk54 = 0; + strc74->unk58 = 0; + strc74->unk5A = 0; + s->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + gSpecialStageCollectedRings += 1; + SpStage_PlayRingSoundeffect(); + gCurTask->main = sub_802C224; + } break; + + case 2: { + strc74->unk67 |= 1; + if (gUnknown_03005730 == 0) { + m4aSongNumStart(SE_150); + } + sub_802C2DC(strc74); + sub_802C04C(strc74); + gCurTask->main = sub_802C488; + strc5690->unk3D = 0xA; + strc74->unk6D = 0xB; + } break; + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: { + strc5690->unk29 = 4 | strc5690->unk29; + strc5690->unk50 = (u16)strc74->unk68; + strc5690->unk54 = (u16)strc74->unk60; + } break; + + case 10: { + TaskDestroy(gCurTask); + if (gUnknown_03005730 == 0) { + m4aSongNumStart(SE_151); + } + gUnknown_0300507C += 1; + } break; + + case 11: { + strc74->unk60 = 0xC; + strc74->anim62 = gUnknown_0848728C[strc74->unk60][0]; + strc74->variant64 = gUnknown_0848728C[strc74->unk60][1]; + strc74->unk67 |= 1; + strc74->unk52 = 0; + strc74->unk54 = 0; + strc74->unk56 = 0; + strc74->unk58 = 0; + strc74->unk5A = 0; + strc74->unk5C = 0; + + s->graphics.dest = OBJ_VRAM0 + (gUnknown_084872C4[strc74->unk60] * TILE_SIZE_4BPP); + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + strc5690->unk29 |= 8; + + if (gUnknown_03005730 == 0) { + m4aSongNumStart(SE_EXPLOSION); + } + + gCurTask->main = sub_802D3E4; + } break; + } +} + +void sub_802BBF0() +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + + strc74->unk52 += strc74->unk58; + strc74->unk54 += strc74->unk5A; + strc74->unk56 += strc74->unk5C; + strc74->unk3C += strc74->unk52; + strc74->unk40 += strc74->unk54; + strc74->unk44 += strc74->unk56; +} + +NONMATCH("asm/non_matching/game/special_stage/sub_802BC6C.inc", bool32 sub_802BC6C(void)) +{ + s32 var_r0; + s32 var_r4; + s32 var_r7; + Strc_3005690 *strc5690 = &gUnknown_03005690; + + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + + strc74->unk50 = (s16)I(strc5690->unk8 - strc74->unk44); + if ((strc74->unk60 != 3) && (strc74->unk50 > 576)) { + TaskDestroy(gCurTask); + return 0; + } + + if (strc74->unk50 > 0xC0) { + return FALSE; + } + if (strc74->unk50 < -Q(3)) { + return FALSE; + } + + strc74->unk66 = sub_802D58C(strc74->unk50); + var_r7 = (strc74->unk50 + 0x300); + var_r7 >>= 3; + if (var_r7 == 0) { + var_r7 = 1; + } + var_r7 = (var_r7 * var_r7 * var_r7 * var_r7) / 408; + var_r4 = var_r7; + if (var_r7 < 0) { + var_r4 = var_r7 + 0x1FF; + } + + strc74->unk48 = ((((var_r4 >> 9) + 0x38) * strc74->unk3C) / 640) >> 8; + strc74->unk4A = ((((var_r4 >> 9) + 0x38) * strc74->unk40) / 640) >> 8; + strc74->unk4C = 120 + strc74->unk48; + strc74->unk4E = 80 - strc74->unk4A; + strc74->unk4C += gUnknown_03005780.unk4; + strc74->unk4E -= gUnknown_03005780.unk6; + s->x = strc74->unk4C; + s->y = strc74->unk4E; + tf->x = s->x; + tf->y = s->y; + + var_r0 = var_r7; + if (var_r7 < 0) { + var_r0 = var_r7 + 0x3FF; + } + + tf->qScaleX = (var_r0 >> 10) + 0x40; + tf->qScaleY = (var_r0 >> 10) + 0x40; + s->frameFlags = strc74->unk66 | 0x2020; + if (tf->qScaleX > 0x100) { + s->frameFlags |= 0x40; + } + + var_r0 = ((strc74->unk50 - 0xC0) / 32); + s->oamFlags = SPRITE_OAM_ORDER(-var_r0); + + return TRUE; +} +END_NONMATCH + +// (73.95%) https://decomp.me/scratch/2UCbe +NONMATCH("asm/non_matching/game/special_stage/sub_802BE0C.inc", void sub_802BE0C(Sprite *s, SpriteTransform *tf)) +{ + u16 sp00[8]; + const SpriteOffset *dims; + s8 temp_r7; + u32 temp_r1; + u32 temp_r1_2; + u16 *affine; + + dims = s->dimensions; + if (dims != (SpriteOffset *)-1) { + u16 *ptrSP = &sp00[0]; + *ptrSP++ = tf->qScaleX; + *ptrSP++ = tf->qScaleY; + ptrSP = &sp00[7]; + *ptrSP = s->frameFlags & 0x1F; + temp_r7 = gUnknown_030057E0[*ptrSP]; + if (temp_r7 == 0) { + gUnknown_030057E0[*ptrSP] = 0xFF; + + affine = (*ptrSP << 4) + &gOamBuffer->all.affineParam; + affine[0 * OAM_DATA_COUNT_AFFINE] = Div(0x10000, tf->qScaleX); + affine[1 * OAM_DATA_COUNT_AFFINE] = 0; + affine[2 * OAM_DATA_COUNT_AFFINE] = 0; + affine[3 * OAM_DATA_COUNT_AFFINE] = Div(0x10000, tf->qScaleY); + } + sp00[2] = tf->x - I((tf->qScaleX * (dims->offsetX - (dims->width >> 1))) + Q((dims->width >> 1))); + sp00[4] = tf->y - I((tf->qScaleY * (dims->offsetY - (dims->height >> 1))) + Q((dims->height >> 1))); + s->x = sp00[2]; + s->y = sp00[4]; + } +} +END_NONMATCH + +void Task_802BEDC(void) +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s; + + strc74->unk50 = 0; + strc74->unk52 = 0; + strc74->unk54 = 0; + strc74->unk56 = 0; + strc74->unk58 = 0; + strc74->unk5A = 0; + strc74->unk5C = 0; + strc74->anim62 = gUnknown_0848728C[strc74->unk60][0]; + strc74->variant64 = gUnknown_0848728C[strc74->unk60][1]; + strc74->unk67 = 0; + + s = &strc74->s; + s->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + strc74->unk66 = sub_802D58C((I(gUnknown_03005690.unk8) - I(strc74->unk44))); + s->x = 120 + I(strc74->unk3C); + s->y = 80 - I(strc74->unk40); + s->oamFlags = 0x7C0; + s->palId = 0; + s->frameFlags = strc74->unk66 | 0x2020; + + strc74->tf.rotation = 0; + strc74->tf.qScaleX = Q(0.25); + strc74->tf.qScaleY = Q(0.25); + strc74->tf.x = s->x; + strc74->tf.y = s->y; + gCurTask->main = Task_802D37C; + sub_802B5DC(s); + UpdateSpriteAnimation(s); + sub_802BE0C(s, &strc74->tf); +} + +void sub_802C04C(SpStage74 *strc74) +{ + s32 var_r6; + SpStage74 *newStrc74; + + for (var_r6 = 0; var_r6 < 12; var_r6++) { + newStrc74 = TASK_DATA(TaskCreate(Task_802BEDC, sizeof(SpStage74), 0x1510U, 0U, NULL)); + newStrc74->unk60 = 3; + newStrc74->unk3C = (strc74->unk3C + (gUnknown_084872E0[var_r6][0] << 6)); + newStrc74->unk40 = (strc74->unk40 + (gUnknown_084872E0[var_r6][1] << 6)); + newStrc74->unk44 = strc74->unk44; + newStrc74->unk68 = strc74->unk68; + newStrc74->unk70 = 0xF; + } +} + +void sub_802C0CC(void) +{ + s16 temp_r1_3; + s32 temp_r1_2; + s16 temp_r0_3; + u16 var_r2; + Strc_3005690 *strc5690 = &gUnknown_03005690; + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + s16 theta; + s16 x, y; + s32 v0, v1; + + x = (strc5690->unkC - strc74->unk4C); + y = (strc5690->unkE - strc74->unk4E); + + theta = sa2__sub_8004418(y, x); + strc74->unk52 += 0x15; + v0 = (strc74->unk52 * COS(theta)); + v1 = (SIN(theta)); + strc74->unk3C += v0 >> 14; + strc74->unk40 -= (strc74->unk52 * v1) >> 14; + strc74->unk5C = I(strc5690->unk8 - strc74->unk44); + temp_r0_3 = strc74->unk56 + strc74->unk5C; + + if (temp_r0_3 >= 0) { + if (temp_r0_3 > Q(14)) { + temp_r0_3 = Q(14); + } + } else if (temp_r0_3 < -Q(14)) { + temp_r0_3 = -Q(14); + } + + strc74->unk56 = temp_r0_3; + strc74->unk44 += strc74->unk56; + if ((strc5690->unk8 + 0x100) < strc74->unk44) { + strc74->unk44 = strc5690->unk8; + } + if (sub_802BC6C() != 0) { + if (strc74->unk70 != 0) { + strc74->unk70 -= 1; + } else { + sub_802B884(); + } + sub_802B5DC(s); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +void sub_802C224(void) +{ + s16 temp_r1_3; + s32 temp_r1_2; + s16 temp_r0_3; + u16 var_r2; + Strc_3005690 *strc5690 = &gUnknown_03005690; + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + s16 theta; + s16 x, y; + s32 v0, v1; + + if (s->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + gCurTask->main = sub_802D450; + return; + } + + strc74->unk5C = I(strc5690->unk8 - strc74->unk44); + + temp_r0_3 = strc74->unk56 + strc74->unk5C; + if (temp_r0_3 >= 0) { + if (temp_r0_3 > Q(14)) { + temp_r0_3 = Q(14); + } + } else if (temp_r0_3 < -Q(14)) { + temp_r0_3 = -Q(14); + } + + strc74->unk56 = temp_r0_3; + strc74->unk44 += strc74->unk56; + if ((strc5690->unk8 + 0x100) < strc74->unk44) { + strc74->unk44 = strc5690->unk8; + } + if (sub_802BC6C() != 0) { + sub_802B5DC(s); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +void sub_802C2DC(SpStage74 *strc74) +{ + s32 i; + SpStage74 *newStrc74; + Sprite *s; + + for (i = 0; i < 8; i++) { + newStrc74 = TASK_DATA(TaskCreate(sub_802D3E4, sizeof(SpStage74), 0x1510U, 0U, NULL)); + newStrc74->unk60 = 0xD; + newStrc74->unk3C = (strc74->unk3C + Q(gUnknown_08487310[i][0])); + newStrc74->unk40 = (strc74->unk40 + Q(gUnknown_08487310[i][1])); + newStrc74->unk44 = strc74->unk44; + newStrc74->unk50 = 0; + newStrc74->unk52 = (u16)gUnknown_08487310[i][0] * 8; + newStrc74->unk54 = (u16)gUnknown_08487310[i][1] * 8; + newStrc74->unk56 = 0; + newStrc74->unk58 = 0 - (newStrc74->unk52 / 32); + newStrc74->unk5A = 0 - (newStrc74->unk54 / 32); + newStrc74->unk5C = 0; + newStrc74->anim62 = gUnknown_0848728C[newStrc74->unk60][0]; + newStrc74->variant64 = gUnknown_0848728C[newStrc74->unk60][1]; + newStrc74->unk66 = strc74->unk66; + newStrc74->unk67 = 1; + s = &newStrc74->s; + s->graphics.dest = ((gUnknown_084872C4[newStrc74->unk60] << 5) + OBJ_VRAM0); + s->graphics.size = 0; + s->graphics.anim = newStrc74->anim62; + s->variant = newStrc74->variant64; + s->prevVariant = 0xFF; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = (newStrc74->unk66 | 0x2020); + s->oamFlags = SPRITE_OAM_ORDER(31); + } +} + +void sub_802C488() +{ + u16 var_r0; + u8 *temp_r1; + u8 *temp_r3; + u8 temp_r0_2; + + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + + s = &strc74->s; + if (--strc74->unk6D == 0) { + strc74->unk6D = 60; + if (gUnknown_03005690.unk28 == 4) { + strc74->anim62 = SA1_ANIM_SP_STAGE_FEEDBACK_MESSAGES; + strc74->variant64 = 1; + } else { + strc74->anim62 = SA1_ANIM_SP_STAGE_FEEDBACK_MESSAGES; + strc74->variant64 = 2; + } + + sub_802D6FC__inline(strc74, s); + s->x = 120; + s->y = 40; + s->oamFlags = SPRITE_OAM_ORDER(1); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + gCurTask->main = sub_802D4C4; + } +} + +static void CreateCheckpointMessage(u8 msg) +{ + Sprite *s; + u8 *temp_r1; + u8 var_r0; + + SpStage74 *strc74 = TASK_DATA(TaskCreate(sub_802D4C4, 0x74U, 0x1500U, 0U, NULL)); + s = &strc74->s; + + switch (msg) { + case 0: + // "COOL!" + s->y = 40; + strc74->anim62 = SA1_ANIM_SP_STAGE_PLAYER_SPEECH; + strc74->variant64 = (u16)msg; + strc74->unk60 = 5; + strc74->unk6D = 0xB4; + break; + case 1: + // "AAARGH!" + s->y = 40; + strc74->anim62 = SA1_ANIM_SP_STAGE_PLAYER_SPEECH; + strc74->variant64 = (u16)msg; + strc74->unk60 = 5; + strc74->unk6D = 0xB4; + break; + case 2: + // "Not enough rings..." + s->y = 136; + strc74->anim62 = SA1_ANIM_SP_STAGE_FEEDBACK_MESSAGES; + strc74->variant64 = 0; + strc74->unk60 = (u16)msg; + strc74->unk6D = 0x78; + break; + } + + s->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + s->x = 120; + s->oamFlags = 0x40; + s->frameFlags = 0x2000; + s->palId = 0; + s->animCursor = 0; + s->hitboxes[0].index = -1; +} + +void sub_802C6C4() +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s; + SpriteTransform *tf; + + strc74->unk50 = 0; + strc74->unk52 = gUnknown_08487330[strc74->unk6A][0]; + strc74->unk54 = gUnknown_08487330[strc74->unk6A][1]; + strc74->unk56 = 0x800; + strc74->unk58 = -(strc74->unk52 / 32); + strc74->unk5A = -(strc74->unk54 / 32); + strc74->unk5C = -(strc74->unk56 / 64); + strc74->anim62 = gUnknown_0848728C[0][0]; + strc74->variant64 = gUnknown_0848728C[0][1]; + strc74->unk67 = 0; + strc74->unk66 = sub_802D58C(I(gUnknown_03005690.unk8) - I(strc74->unk44)); + + s = &strc74->s; + s->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + s->x = 120 + I(strc74->unk3C); + s->y = +80 - I(strc74->unk40); + s->oamFlags = 0x180; + s->qAnimDelay = 0; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = strc74->unk66 | 0x2020; + + tf = &strc74->tf; + tf->rotation = 0; + tf->qScaleX = 0x100; + tf->qScaleY = 0x100; + tf->x = s->x; + tf->y = s->y; + + gCurTask->main = sub_802C89C; + + sub_802B5DC(s); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); +} + +void sub_802C89C() +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + + strc74->unk58 = -(strc74->unk52 / 32); + strc74->unk5A = -(strc74->unk54 / 32); + + sub_802BBF0(); + + if (sub_802BC6C() != 0) { + sub_802B5DC(s); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + + if (1 & strc74->unk6C++) { + DisplaySprite(s); + } + } +} + +void sub_802C934(void) +{ + s32 sp4; + SpStageC *element; + Sprite *s; + u16 var_r4; + u32 allocSize; + u8 var_r2; + u8 *temp_r6; + SpStage40 *strc40; + + element = gUnknown_087BF8DC[gUnknown_08487134[gCurrentLevel]]; + var_r4 = 0; + for (var_r2 = 0; var_r2 < 16; var_r2++) { + while (((u32)(var_r2 << 12) > (element[var_r4].unk4 + 0x300))) { + if (element[var_r4].unk8 == 0xFFFF) { + break; + } + + var_r4 += 1; + } + gUnknown_03005840[var_r2] = var_r4; + } + + allocSize = ((var_r4 >> 3) + 4) & 0xFFFC; + temp_r6 = EwramMalloc(allocSize); + DmaFill32(3, 0, temp_r6, allocSize); + strc40 = TASK_DATA(TaskCreate(UpdateObjectsAndRender, sizeof(SpStage40), 0x1300U, 0U, TaskDestructor_802D578)); + strc40->mem = temp_r6; + s = &strc40->s; + s->x = 0; + s->y = 0; + s->graphics.dest = (void *)OBJ_VRAM0 + 0x800; + s->oamFlags = 0x500; + s->graphics.size = 0; + s->graphics.anim = 0x31B; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0x2030; +} + +// (77.44%) https://decomp.me/scratch/inpcX +// This function loads all objects' positions, scales and renders them +// and the player character, and checks the collision between them. +// NOTE(Jace): I think the loops in this should have the same layout as sub_802D58C(). +NONMATCH("asm/non_matching/game/special_stage/UpdateObjectsAndRender.inc", void UpdateObjectsAndRender(void)) +{ + u16 sp4; + SpStageC *sp8; + Strc_3005690 *strc5690; + SpStage40 *strc40; + SpriteTransform *tf; + const SpriteOffset *sp18; + u8 *sp1C; + u8 sp20; + s32 sp24; + s32 sp28; + s32 sp2C; + s32 sp34; + s32 sp38; + u16 *sp3C; + u32 sp40; + OamData *temp_r0_9; + OamData *temp_r5_4; + s16 temp_r0_6; + s16 temp_r2_6; + s16 temp_r3_6; + s32 temp_r0_3; + s32 temp_r1; + s32 temp_r3; + s32 temp_r4_3; + s32 var_r0_2; + s32 var_r6; + s8 *temp_r1_7; + s8 temp_r3_4; + s8 temp_r6; + s8 temp_r6_2; + u16 *temp_r0_11; + u16 *temp_r4_6; + u16 temp_r0_2; + u16 temp_r1_2; + u16 temp_r2_7; + u16 var_sb; + u32 temp_r0_7; + u32 temp_r0_8; + u32 temp_r2_5; + u8 var_r2; + u8 var_r2_2; + u16 *temp_r5_2; + u16 *temp_r2; + u8 vall; + + Sprite *spr55F0; + Sprite *spr74; + Sprite *s; + SpStage74 *strc74; + s16 someX, someY; + + strc40 = TASK_DATA(gCurTask); + sp8 = gUnknown_087BF8DC[gUnknown_08487134[gCurrentLevel]]; + strc5690 = &gUnknown_03005690; + spr55F0 = &gUnknown_030055F0.s; + s = &strc40->s; +#if 1 + sp20 = 0; + DmaFill16(3, INT16_MAX, gUnknown_03005670, 0x20); + DmaFill16(3, 0, gUnknown_030057E0, 0x10); + sp1C = strc40->mem; +#else + sp20 = 0; + sp1C = strc40->mem; +#endif + UpdateSpriteAnimation(s); + sp18 = s->dimensions; + temp_r3 = (I(strc5690->unk8) + 0x300); + vall = (temp_r3 >> 0xC); + var_sb = gUnknown_03005840[vall]; + sp34 = I(strc5690->unk8) - 0xC0; + sp3C = &sp4; + while (sp8[var_sb].unk4 < temp_r3) { + if (((sp8[var_sb].unk8 != 0xFFFF) && !(sp8[var_sb].unk8 != 0)) || (sp8[var_sb].unk4 < sp34) + || (((((uintptr_t)(strc40 + (var_sb >> 3)) >> (7 & var_sb)) & 1) != 0))) { + u8 *ptrU8; + s32 valR3; + sp24 = Q(sp8[var_sb].unk0); + sp28 = Q(sp8[var_sb].unk2); + sp2C = Q(sp8[var_sb].unk4); + temp_r0_2 = I(strc5690->unk8) - sp8[var_sb].unk4; + var_r6 = (s32)((s16)temp_r0_2 + 0x300) >> 3; + if (var_r6 == 0) { + var_r6 = 1; + } + temp_r0_3 = (s32)(var_r6 * (var_r6 * var_r6) * var_r6) / 408; + temp_r4_3 = (temp_r0_3 / 512) + 0x38; + someX = ((temp_r4_3 * sp24) / 640) >> 8; + someY = ((temp_r4_3 * sp28) / 640) >> 8; + if (!(1 & strc5690->unk29) && (strc5690->unk28 != 2) && (I(strc5690->unk8) >= (s32)(I(sp2C) - 32)) + && (I(strc5690->unk8) <= I(sp2C)) + && HB_COLLISION(someX, someY, s->hitboxes[0].b, I(strc5690->unk0), I(strc5690->unk4), spr55F0->hitboxes[0].b)) { + strc74 = TASK_DATA(TaskCreate(sub_802D3E4, sizeof(SpStage74), 0x1500U, 0U, NULL)); + strc74->unk60 = 1; + strc74->unk3C = sp24; + strc74->unk40 = sp28; + strc74->unk44 = sp2C; + strc74->unk50 = 0; + strc74->unk52 = 0; + strc74->unk54 = 0; + strc74->unk56 = 0; + strc74->unk58 = 0; + strc74->unk5A = 0; + strc74->unk5C = 0; + strc74->anim62 = gUnknown_0848728C[strc74->unk60][0]; + strc74->variant64 = gUnknown_0848728C[strc74->unk60][1]; + + valR3 = temp_r0_2; + for (var_r2_2 = 0; var_r2_2 < 16; var_r2_2++) { + if (gUnknown_03005670[var_r2_2] == INT16_MAX) { + gUnknown_03005670[var_r2_2] = valR3; + break; + } + + if (gUnknown_03005670[var_r2_2] == valR3) { + break; + } + } + + strc74->unk66 = var_r2_2 + 1; + strc74->unk67 = 1; + spr74 = &strc74->s; + spr74->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + spr74->graphics.size = 0; + spr74->graphics.anim = strc74->anim62; + spr74->variant = strc74->variant64; + spr74->prevVariant = -1; + spr74->qAnimDelay = 0; + spr74->animSpeed = 0x10; + spr74->qAnimDelay = 0; + spr74->animSpeed = 0x10; + spr74->palId = 0; + spr74->frameFlags = strc74->unk66 | 0x2020; + spr74->oamFlags = 0x7C0; + gSpecialStageCollectedRings += 1; + SpStage_PlayRingSoundeffect(); + sp1C[var_sb >> 3] |= 1 << (var_sb & 7); + var_sb++; + } else { + for (var_r2 = 0; var_r2 < 16; var_r2++) { + if ((u16)gUnknown_03005670[var_r2] == INT16_MAX) { + gUnknown_03005670[var_r2] = temp_r0_2; + break; + } + + if (gUnknown_03005670[var_r2] == temp_r0_2) { + break; + } + } + + var_r2++; + strc40->tf.x = (120 + someX + gUnknown_03005780.unk4); + strc40->tf.y = ((+80 - gUnknown_03005780.unk6) - someY); + strc40->tf.qScaleX = (temp_r0_3 / 1024) + 64; + strc40->tf.qScaleY = (temp_r0_3 / 1024) + 64; + s->frameFlags = 0x2020 | var_r2; + if (strc40->tf.qScaleX > Q(1)) { + s->frameFlags |= 0x40; + } + s->x = strc40->tf.x - I((strc40->tf.qScaleX * (sp18->offsetX - (sp18->width >> 1))) + ((sp18->width >> 1) << 8)); + s->y = strc40->tf.y - I((strc40->tf.qScaleY * (sp18->offsetY - (sp18->height >> 1))) + ((sp18->height >> 1) << 8)); + if ((sp20 == 0) || (s->oamBaseIndex == 0xFF)) { + s->oamBaseIndex = 0xFF; + sp3C[0] = s->frameFlags & 0x1F; + if (gUnknown_030057E0[sp3C[0]] == 0) { + gUnknown_030057E0[sp3C[0]] = -1; + temp_r5_2 = (u16 *)(&gOamBuffer[sp3C[0] * 4]); + temp_r5_2[0 * OAM_DATA_COUNT_AFFINE] = Div(0x10000, strc40->tf.qScaleX); + temp_r5_2[1 * OAM_DATA_COUNT_AFFINE] = 0; + temp_r5_2[2 * OAM_DATA_COUNT_AFFINE] = 0; + temp_r5_2[3 * OAM_DATA_COUNT_AFFINE] = Div(0x10000, strc40->tf.qScaleY); + } + DisplaySprite(s); + var_sb++; + sp20++; + } else { + if (s->frameFlags & SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE) { + s->x -= (sp18->width >> 1); + s->y -= (sp18->height >> 1); + } + sp3C[0] = s->frameFlags & 0x1F; + if (gUnknown_030057E0[sp3C[0]] == 0) { + gUnknown_030057E0[sp3C[0]] = -1; + temp_r5_2 = (u16 *)(&gOamBuffer[sp3C[0] * 4]); + temp_r5_2[0 * OAM_DATA_COUNT_AFFINE] = Div(0x10000, strc40->tf.qScaleX); + temp_r5_2[1 * OAM_DATA_COUNT_AFFINE] = 0; + temp_r5_2[2 * OAM_DATA_COUNT_AFFINE] = 0; + temp_r5_2[3 * OAM_DATA_COUNT_AFFINE] = Div(0x10000, strc40->tf.qScaleY); + } + temp_r5_2 = (u16 *)&gOamMallocBuffer[s->oamBaseIndex]; + temp_r0_9 = OamMalloc(((s->oamFlags & 0x7C0) >> 6)); + if (iwram_end == temp_r0_9) { + break; + } + + DmaCopy16(3, temp_r5_2, temp_r0_9, sizeof(OamDataShort)); + + temp_r0_9->all.attr0 &= 0xFD00; + temp_r0_9->all.attr1 &= 0xC000; + temp_r0_9->all.attr0 |= (u8)s->y | ((s->frameFlags & SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE) * 8); + temp_r0_9->all.attr1 |= ((u16)s->x & 0x1FF) | ((s->frameFlags & 0x1F) << 9); + var_sb++; + sp20++; + } + } + } else { + break; + } + // continue + } + // return +} +END_NONMATCH + +void sub_802D158(void) +{ + TaskCreate(Task_SpStageInitializeSomethingAndStartMusic, 0, 0x1000, 0, NULL); + TaskCreate(sub_802D680, 0, 0x1000, 0, NULL); +} + +void sub_802D190(void) +{ + u8 *character; + u16 charId = gSelectedCharacter; + sub_8029E0C(charId); + sub_8029EA8(charId); + + character = TASK_DATA(TaskCreate(Task_802A560, sizeof(u8), 0x1100, 0, NULL)); + *character = charId; +} + +void sub_802D1D8(void) +{ + struct Task *t = TaskCreate(Task_802B3E4, sizeof(SpStage8), 0x1400, 0, NULL); + SpStage8 *strc8 = TASK_DATA(t); + strc8->unk2 = 0; + strc8->unk4 = 0; + strc8->unk6 = 0; +} + +void Task_SpStageInitializeSomethingAndStartMusic(void) +{ + gUnknown_030055E0.unk0 = 0; + gUnknown_030055E0.unk2 = 240; + gUnknown_030055E0.qBlend = Q(0); + + gCurTask->main = Task_802D238; + + m4aSongNumStart(MUS_SPECIAL_STAGE); +} + +void Task_802D238(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + + if (--gUnknown_030055E0.unk2 <= 0) { + gCurTask->main = Task_80299B0; + + strc5690->unk29 &= ~0x1; + + sub_802D560(); + } +} + +void sub_802D274(void) +{ + if (--gUnknown_030055E0.unk2 <= 0) { + gStageFlags |= 0x20; + gCurTask->main = Task_8029AC4; + } +} + +void sub_802D2A8(void) { gDispCnt |= DISPCNT_OBJ_ON | ((~DISPCNT_BG0_ON) & DISPCNT_BG_ALL_ON); } + +void Task_802D2BC(void) +{ + Strc_3005780 *strc5780 = &gUnknown_03005780; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + strc5780->unk12 = 0; + strc5780->unk13 = 8; + sub_8029CDC(); + gCurTask->main = sub_8029CDC; +} + +void nullsub_802D2F0(void) { } + +u16 sub_802D2F4(Strc_3005690 *param0) +{ + s32 temp_r2; + s32 temp_r2_2; + u16 var_r0; + u16 var_r1; + + temp_r2 = param0->unk0; + if (temp_r2 < -Q(40)) { + var_r1 = 1; + } else if (temp_r2 <= +Q(40)) { + var_r1 = 2; + } else { + var_r1 = 3; + } + + if (param0->unk4 < +Q(30)) { + if (param0->unk4 > -Q(30)) { + var_r1 += 3; + } else { + var_r1 += 6; + } + } + + return var_r1; +} + +void sub_802D33C(void) +{ + Strc_3005690 *strc5690 = &gUnknown_03005690; + Strc_30055E0 *strc55E0 = &gUnknown_030055E0; + SpStage74 *strc74 = TASK_DATA(gCurTask); + + if (strc5690->unk8 >= strc74->unk44) { + strc55E0->unk0 = strc74->unk60; + TaskDestroy(gCurTask); + } +} + +void Task_802D37C(void) +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + + sub_802D464(); + sub_802BBF0(); + if (sub_802BC6C() != 0) { + if (strc74->unk70 != 0) { + strc74->unk70 -= 1; + } else { + sub_802B884(); + } + sub_802B5DC(s); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +void sub_802D3E4(void) +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + + sub_802BBF0(); + if (sub_802BC6C() != 0) { + if (s->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + gCurTask->main = sub_802D450; + return; + } + sub_802B5DC(s); + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + gCurTask->main = sub_802D450; + } + sub_802BE0C(s, tf); + DisplaySprite(s); + } +} + +void sub_802D450(void) { TaskDestroy(gCurTask); } + +void sub_802D464(void) +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + SpStage74 *parent = TASK_DATA(TASK_PARENT(gCurTask)); + + if (strc74->unk60 == 3) { + if (parent->unk6D != 0) { + if (gUnknown_03005690.unk28 == 4) { + gCurTask->main = sub_802C0CC; + strc74->unk52 = -Q(3); + } + } else { + strc74->unk60 = 0; + } + } +} + +void sub_802D4C4(void) +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + + UpdateSpriteAnimation(s); + DisplaySprite(s); + + if (--strc74->unk6D == 0) { + gCurTask->main = sub_802D66C; + } +} + +void Task_802D508(void) +{ + SpStage74 *strc74 = TASK_DATA(gCurTask); + Sprite *s = &strc74->s; + SpriteTransform *tf = &strc74->tf; + + if (strc74->unk6E > -160) { + strc74->unk6E--; + sub_802BBF0(); + + if (sub_802BC6C() != 0) { + s->oamFlags = SPRITE_OAM_ORDER(5); + UpdateSpriteAnimation(s); + sub_802BE0C(s, tf); + DisplaySprite(s); + } + } +} + +void sub_802D560(void) +{ + s32 var_r1; + u16(*var_r0)[2]; + + var_r0 = gUnknown_030056F0; + for (var_r1 = 0; var_r1 < 16; var_r1++) { + var_r0[var_r1][0] = 0; + var_r0[var_r1][1] = 0; + } +} + +void TaskDestructor_802D578(struct Task *t) +{ + SpStage40 *strc40 = TASK_DATA(t); + EwramFree(strc40->mem); +} + +u8 sub_802D58C(s16 param0) +{ + u8 var_r3; + for (var_r3 = 0; var_r3 < 16; var_r3++) { + if (gUnknown_03005670[var_r3] == INT16_MAX) { + gUnknown_03005670[var_r3] = param0; + break; + } + + if (gUnknown_03005670[var_r3] == param0) { + break; + } + } + + var_r3++; + + return var_r3; +} + +void SpStage_PlayRingSoundeffect(void) +{ + if (1 & gSpecialStageCollectedRings) { + MPlayStart(&gMPlayInfo_SE2, &se_ring_copy); + m4aMPlayImmInit(&gMPlayInfo_SE2); + m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFFU, 0x80U); + m4aMPlayPanpotControl(&gMPlayInfo_SE2, 0xFFFFU, -0x40); + } else { + MPlayStart(&gMPlayInfo_SE1, &se_ring_copy); + m4aMPlayImmInit(&gMPlayInfo_SE1); + m4aMPlayVolumeControl(&gMPlayInfo_SE1, 0xFFFFU, 0x80U); + m4aMPlayPanpotControl(&gMPlayInfo_SE1, 0xFFFFU, 0x40); + } +} + +void sub_802D66C(void) { TaskDestroy(gCurTask); } + +void sub_802D680(void) +{ + if (!(0x20 & gStageFlags) && (START_BUTTON & gPressedKeys) && !(0x40 & gStageFlags)) { + CreatePauseMenu(); + } +} + +void sub_802D6B4(Strc_3005690 *strc5690) +{ + if ((strc5690->unk42 & gPlayerControls.jump) && !(1 & strc5690->unk29)) { + strc5690->unk20 = 0x100; + } else { + if (!(2 & strc5690->unk29)) { + strc5690->unk20 = 0; + } else { + strc5690->unk20 = 0xFF00; + } + } +} + +void sub_802D6FC(SpStage74 *strc74, Sprite *s) +{ + u8 *temp_r1; + + s->graphics.dest = (gUnknown_084872C4[strc74->unk60] << 5) + OBJ_VRAM0; + s->graphics.size = 0; + s->graphics.anim = strc74->anim62; + s->variant = strc74->variant64; + s->prevVariant = -1; + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); +} diff --git a/sa1/src/game/special_stage/temporary_sound_play_task.c b/sa1/src/game/special_stage/temporary_sound_play_task.c new file mode 100644 index 0000000000..8d27182aca --- /dev/null +++ b/sa1/src/game/special_stage/temporary_sound_play_task.c @@ -0,0 +1,116 @@ +#include "global.h" +#include "task.h" +#include "lib/m4a/m4a.h" +#include "game/special_stage/main.h" +#include "game/sa1_sa2_shared/player.h" + +#include "constants/songs.h" + +typedef struct { + struct MP2KPlayerState *songInfo; + struct MP2KSongHeader *songHeader; + u16 songId; + u16 resumeSongId; +} TrickField; + +void Task_TempSound(void); +void Task_8025884(void); +void Task_8025898(void); +void Task_SpStageTrick(void); +extern struct MP2KSongHeader mus_sp_stage_trick; + +u8 gUnknown_03005730 = 0; + +void Task_TempSound(void) +{ + TrickField *field = TASK_DATA(gCurTask); + struct MP2KPlayerState *info = field->songInfo; + u32 songStatus = info->status; + + if (((s32)songStatus < 0) || ((songStatus & 0xFFFF) == 0)) { + struct MP2KPlayerState *info2; + info2 = gMPlayTable[gSongTable[field->songId].ms].info; + + if (info2->songHeader == gSongTable[field->songId].header) { + if ((field->songHeader == gSongTable[MUS_INVINCIBILITY].header) && !(gPlayer.itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + MPlayStart(info, field->songHeader); + m4aMPlayImmInit(field->songInfo); + m4aMPlayVolumeControl(field->songInfo, 0xFF, 4); + MPlayStop(field->songInfo); + TaskDestroy(gCurTask); + return; + } else { + MPlayStart(field->songInfo, field->songHeader); + m4aMPlayImmInit(field->songInfo); + + if (gPlayer.itemEffect & PLAYER_ITEM_EFFECT__SPEED_UP) { + m4aMPlayTempoControl(&gMPlayInfo_BGM, Q(2)); + } + + m4aMPlayVolumeControl(field->songInfo, 0xFF, 4); + m4aMPlayFadeIn(field->songInfo, 4); + TaskDestroy(gCurTask); + return; + } + } + } +} + +void Task_CallTempSoundTask(void) { gCurTask->main = Task_TempSound; } + +void Task_CallSpStageTrickTask(void) { gCurTask->main = Task_SpStageTrick; } + +void Task_SpStageTrick(void) +{ + TrickField *field = TASK_DATA(gCurTask); + struct MP2KPlayerState *info = field->songInfo; + u32 songStatus = info->status; + + if (((s32)songStatus < 0) || ((songStatus & 0xFFFF) == 0)) { + struct MP2KPlayerState *resumeInfo; + m4aSongNumStartOrContinue(field->resumeSongId); + + resumeInfo = gMPlayTable[gSongTable[field->resumeSongId].ms].info; + m4aMPlayVolumeControl(resumeInfo, 0xFF, 4); + m4aMPlayFadeIn(resumeInfo, 4); + TaskDestroy(gCurTask); + + gUnknown_03005730 = 0; + } +} + +// NOTE: Seems to be unused. +void CreateTempSoundTask(u16 songId) +{ + struct MP2KPlayerState *info = gMPlayTable[gSongTable[songId].ms].info; + struct MP2KSongHeader *songHeader = info->songHeader; + + if (info->songHeader != gSongTable[songId].header) { + struct Task *t = TaskCreate(Task_CallTempSoundTask, sizeof(TrickField), 0x3000, 0, NULL); + TrickField *field = TASK_DATA(t); + + field->songInfo = info; + field->songHeader = songHeader; + field->songId = songId; + m4aSongNumStart(songId); + } +} + +void CreateSpStageTrickSoundTask(u16 expectedSongId, u16 resumeSongId) +{ + struct MP2KPlayerState *info = gMPlayTable[MUSIC_PLAYER_SE3].info; + struct MP2KSongHeader *songHeader = info->songHeader; + + if (songHeader != gSongTable[expectedSongId].header) { + struct Task *t = TaskCreate(Task_CallSpStageTrickTask, sizeof(TrickField), 0x3000, 0, NULL); + TrickField *field = TASK_DATA(t); + + field->songInfo = info; + field->songHeader = songHeader; + field->songId = expectedSongId; + field->resumeSongId = resumeSongId; + + gUnknown_03005730 = 0xFF; + MPlayStart(&gMPlayInfo_SE3, &mus_sp_stage_trick); + } +} \ No newline at end of file diff --git a/sa1/src/game/staff_credits.c b/sa1/src/game/staff_credits.c new file mode 100644 index 0000000000..7ed0c5ed1d --- /dev/null +++ b/sa1/src/game/staff_credits.c @@ -0,0 +1,418 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/collect_chaos_emeralds_msg.h" +#include "game/credits.h" +#include "game/gTask_03006240.h" +#include "game/stage/ui.h" +#include "game/save.h" +#include "game/title_screen.h" + +#include "constants/animations.h" +#include "constants/anim_sizes.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" + +extern const u8 gUnknown_0868483C[0x500]; + +const ALIGNED(4) u16 gUnknown_086886A0[12] = { + 22, 0, // + 79, 0, // + 139, 0, // + 322, 0, // + 322, 0, // + 322, 0, // +}; + +typedef struct StaffCredits { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ u8 unk60[8]; + /* 0x68 */ s16 unk68; + /* 0x6A */ s16 unk6A; + /* 0x6C */ s16 unk6C; + /* 0x6E */ s16 unk6E; + /* 0x70 */ s16 unk70; + /* 0x72 */ s16 unk72; + /* 0x74 */ s16 unk74; + /* 0x74 */ u8 unk76; + /* 0x78 */ s32 unk78; + /* 0x7C */ u32 unk7C; +} StaffCredits; + +typedef struct Credits_18 { + /* 0x00 */ StrcUi_805423C strc; + /* 0x0C */ struct Task *task1; // -> (StaffCredits *) + /* 0x10 */ struct Task *task2; // -> (StaffCredits *) + /* 0x14 */ s32 unk14; +} Credits_18; + +void sub_805E1E8(void); +void Task_805E888(void); // -> StaffCredits +void Task_805E758(void); // -> StaffCredits +void Task_805E698(void); // -> Credits_18 +void TaskDestructor_805E9B0(struct Task *t); + +extern void sub_8053370(const char *str, void *param1); + +void sub_805E1E8(void) +{ + Strc_80528AC sp00; + + sp00.unk2B = 8; + sp00.uiGfxID = 0x3B; + sp00.unk2A = 13; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.vramC = VRAM_RESERVED_STAFF_CREDITS_A; + sp00.tilesSize = 1 * TILE_SIZE_4BPP; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.paletteSize = 32; + sp00.unk28 = 15; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.unk2B = 7; + sp00.uiGfxID = 0; + sp00.unk2A = 13; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.vramC = VRAM_RESERVED_STAFF_CREDITS_A; + sp00.tilesSize = 236 * TILE_SIZE_4BPP; + sp00.palette = gUiGraphics[60].palette; + sp00.paletteSize = 32; + sp00.unk28 = 14; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_CHAR_SELECT_BLACK_BOX_2; + sp00.unk2B = 0; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 1 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 0; + sp00.unk29 = 1; + sp00.layout = gUnknown_0868483C; + sp00.layoutSize = 0; + sp00.unk2A = 5; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); +} + +void CreateStaffCredits() +{ + s32 sp4; + Sprite *s; + s32 s_2; + u16 s_3; + u16 temp_r1; + struct Task *t; + struct Task *t1; + struct Task *t2; + struct Task *t3; + StaffCredits *credits; + Credits_18 *credits18; + + TasksDestroyInPriorityRange(1U, 0x1800U); + TasksDestroyInPriorityRange(0x1801U, 0xFFFFU); + sub_80535FC(); + UiGfxStackInit(); + gDispCnt = 0x1240; + gBgCntRegs[1] = 0x1907; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + t1 = TaskCreate(Task_805E888, sizeof(StaffCredits), 0x6200U, 0U, NULL); + credits = TASK_DATA(t1); + s = &credits->s; + + credits->unk78 = 0x30; + credits->unk7C = 0; + + s->graphics.dest = VRAM_RESERVED_STAFF_CREDITS_B; + s->graphics.anim = SA1_ANIM_CREDITS_COMPANY_LOGOS; + s->variant = 0; + s->x = 0; + s->y = 0; + s->oamFlags = 0x480; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &credits->s2; + s->graphics.anim = SA1_ANIM_CREDITS_COPYRIGHT; + s->variant = 1; + s->graphics.dest = VRAM_RESERVED_STAFF_CREDITS_C; + s->x = DISPLAY_CENTER_X; + s->y = 0; + s->oamFlags = 0x480; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + t2 = TaskCreate(Task_805E758, sizeof(StaffCredits), 0x6120U, 0U, NULL); + credits = TASK_DATA(t2); + credits->unk78 = 0x30; + credits->unk7C = 0; + credits->unk6A = -0x50; + credits->unk6C = 0; + credits->unk6E = 3; + credits->unk68 = 0; + credits->unk70 = 7; + credits->unk76 = 1; + credits->unk72 = 0xE; + credits->unk74 = 5; + + t = TaskCreate(Task_805E698, sizeof(Credits_18), 0x6000U, 0U, TaskDestructor_805E9B0); + credits18 = TASK_DATA(t); + credits18->unk14 = 0x30; + credits18->task1 = t1; + credits18->task2 = t2; + credits18->strc.unk0 = 0; + credits18->strc.unk2 = 0; + credits18->strc.unk4 = 1; + credits18->strc.unk6 = 0; + credits18->strc.unk8 = 0x80; + credits18->strc.unkA = 8; + + DmaFill32(3, 0, BG_CHAR_ADDR_FROM_BGCNT(1), 0x40); + + gBgSprites_Unknown1[1] = 1; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = -1; + gBgSprites_Unknown2[1][3] = 0x14; + + gDispCnt |= 0x6000; + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, 36); + gWinRegs[WINREG_WIN1H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN1V] = WIN_RANGE(DISPLAY_HEIGHT - 28, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] = 0x3F3F; + gWinRegs[WINREG_WINOUT] = 0x1F; + gBldRegs.bldCnt = 0x1FDF; + gBldRegs.bldAlpha = 0x10; + gBldRegs.bldY = 0x10; + + sub_805E1E8(); + m4aSongNumStart(MUS_STAFF_CREDITS); +} + +void Task_805E698(void) +{ + Credits_18 *credits_18 = TASK_DATA(gCurTask); + StaffCredits *creditsB = TASK_DATA(credits_18->task2); + StaffCredits *creditsA = TASK_DATA(credits_18->task1); + u8 r2; + + if (credits_18->unk14 < 8334) { + creditsB->unk78 = credits_18->unk14; + creditsA->unk78 = credits_18->unk14; + } else { + creditsB->unk78 = 8334; + creditsA->unk78 = 8334; + } + + credits_18->unk14++; + + if (credits_18->unk14 > 8520) { + r2 = sub_805423C(&credits_18->strc); + } else { + r2 = 0; + } + + if ((credits_18->unk14 > 8550) && r2) { + gDispCnt &= ~0xE000; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + TaskDestroy(credits_18->task2); + TaskDestroy(credits_18->task1); + TaskDestroy(gCurTask); + + if (LOADED_SAVE->chaosEmeralds != ALL_ZONE_CHAOS_EMERALDS) { + CreateGetAllChaosEmeraldsMessage(); + } else { + CreateSegaLogo(); + } + } +} + +void Task_805E758() +{ + u8 sp0; + s16 *temp_r1_2; + s16 *temp_r1_3; + s16 var_r0; + s32 temp_r0; + s32 temp_r0_2; + s32 temp_r0_3; + s32 temp_r4; + s32 var_r7; + s32 var_sl; + u32 var_r8; + u8 i; + + StaffCredits *credits = TASK_DATA(gCurTask); + + temp_r4 = credits->unk78; + if (!(1 & temp_r4)) { + credits->unk7C = temp_r4 * (Div(0x143000, 0x201C) + 1); + } + + temp_r0 = I(credits->unk7C) - 0xC; + if (temp_r0 > 0x8AU) { + var_r8 = (u32)(I(credits->unk7C) - 0x86) >> 4; + var_sl = Mod(I(credits->unk7C) - 0x96, 0x10) + 8; + } else { + var_r8 = 0; + var_sl = 0; + } + var_r7 = 0x24; + if (var_r8 < 0x139) { + sp0 = 7; + } else { + sp0 = 67 - var_r8; + } + + for (i = 0; i < sp0; i++) { + if (sCreditsEntries[var_r8 + i].length != 0) { + if (temp_r0 > 0x8AU) { + s32 v = sCreditsEntries[var_r8 + i].unk2 + var_r7; + credits->unk6C = v - var_sl; + } else { + s32 v = sCreditsEntries[var_r8 + i].unk2 + 0x8A; + credits->unk6C = (v - temp_r0) + var_r7; + } + + if (credits->unk6C < 0x8B) { + credits->unk6A = 120 - (sCreditsEntries[var_r8 + i].length * 4); + credits->unk6E = sCreditsEntries[var_r8 + i].length; + credits->unk68 = (s16)(i * 0x10); + credits->unk72 = sCreditsEntries[var_r8 + i].unk1 + 0xE; + sub_8053370(sCreditsEntries[var_r8 + i].name, &credits->unk60[0]); + var_r7 += 0x10; + } else { + break; + } + } else { + var_r7 += 0x10; + } + } +} + +// (96.67%) https://decomp.me/scratch/cdKHE +NONMATCH("asm/non_matching/game/staff_credits__Task_805E888.inc", void Task_805E888()) +{ + Sprite *s; + Sprite *s2; + s16 temp_r0_4; + s32 temp_r0_2; + s32 temp_r0_3; + s32 temp_r5; + s32 temp_sl; + s32 var_r5; + u32 temp_r6; + u8 i, j; +#ifndef BUG_FIX + u8 var_r8; +#else + u8 var_r8 = 0; +#endif + + StaffCredits *credits = TASK_DATA(gCurTask); + + s = &credits->s; + s2 = &credits->s2; + temp_r5 = credits->unk78; + if (!(1 & temp_r5)) { + credits->unk7C = temp_r5 * (Div(0x143000, 0x201C) + 1); + } + + temp_r0_2 = I(credits->unk7C) - 0xC; + if (temp_r0_2 > 0x9AU) { + temp_r0_3 = temp_r0_2 - 0x8A; + temp_r6 = (u32)temp_r0_3 >> 4; + temp_sl = Mod(temp_r0_3 - 0x10, 0x10) + 4; + var_r5 = 0xFF; + + for (i = 0; i < 10; i++) { + for (j = 0; j < 4; j++) { + if (gUnknown_086886A0[j] == (temp_r6 + i)) { + var_r5 = j; + var_r8 = i; + i = 0xA; + j = 5; + } + } + } + + if (temp_r6 >= (gUnknown_086886A0[3] - 3)) { + var_r5 = 3; + var_r8 = 0; + } + + if (var_r5 != 0xFF) { + s32 yPos = (24 - temp_sl); + s->y = yPos + (var_r8 * 0x10); + + if (s->y < 0x9B) { + s32 xPos = DISPLAY_CENTER_X; + s->x = xPos; + + switch (var_r5) { + case 0: { + } break; + + case 1: + case 2: { + s->graphics.anim = 0x2E4; + s->variant = var_r5; + } break; + + default: + s->graphics.anim = 0x2E4; + s->variant = 3; + if (s->y < DISPLAY_CENTER_Y) { + s->y = DISPLAY_CENTER_Y; + } + s2->x = xPos; + s2->y = s->y + 40; + UpdateSpriteAnimation(s2); + DisplaySprite(s2); + break; + } + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + } + } +} +END_NONMATCH + +void TaskDestructor_805E9B0(struct Task *t) { } \ No newline at end of file diff --git a/sa1/src/game/stage/backgrounds/zone_1.c b/sa1/src/game/stage/backgrounds/zone_1.c new file mode 100644 index 0000000000..aeea028395 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_1.c @@ -0,0 +1,65 @@ +#include "global.h" +#include "flags.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" + +void StageBgUpdate_Zone1Acts12(s32 x, s32 UNUSED y) +{ + struct Camera *cam = &gCamera; + Background *bg; + u16 *offsets; + s32 i; + s32 r3; + + x -= cam->sa2__unk20; + + bg = &gStageBackgroundsRam.unkC0; + + gBgScrollRegs[3][0] = cam->sa2__unk52 = 0; + gBgScrollRegs[3][1] = cam->sa2__unk54 = 0; + + bg->scrollX = 0; + bg->scrollY = 0; + DrawBackground(bg); + + gFlags |= FLAGS_EXECUTE_HBLANK_COPY; + gHBlankCopyTarget = (void *)®_BG3HOFS; + gHBlankCopySize = 4; + + offsets = gBgOffsetsHBlankPrimary; + + for (i = 0; i < 8; i++) { + // Highest moving cloud (fastest) + *offsets++ = (gStageTime >> 4) & 0xFF; + *offsets++ = 0; + } + + for (i = 0; i < 16; i++) { + // 2nd highest moving cloud (slower) + *offsets++ = (gStageTime >> 5) & 0xFF; + *offsets++ = 0; + } + + for (i = 24; i < 40; i++) { + // Lowest moving cloud (slowest) + *offsets++ = (gStageTime >> 6) & 0xFF; + *offsets++ = 0; + +#ifndef NON_MATCHING + asm("" ::"r"(i)); +#endif + } + + for (; i < 88; i++) { + // Big clouds and islands (static) + *offsets++ = 0; + *offsets++ = 0; + } + + for (; i < 160; i++) { + // Water + *offsets++ = ((i - 86) * x) >> 8; + *offsets++ = 0; + } +} \ No newline at end of file diff --git a/sa1/src/game/stage/backgrounds/zone_2.c b/sa1/src/game/stage/backgrounds/zone_2.c new file mode 100644 index 0000000000..e71c148549 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_2.c @@ -0,0 +1,42 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +#define ZONE2_EXTERIOR_CAM_X(_x) Div((_x)*16, (78 * 16)) +#define ZONE2_EXTERIOR_CAM_Y(_y) (512 - DISPLAY_HEIGHT) + +extern void StageBgUpdate_Zone2_Interior(s32 x, s32 y); + +void StageBgUpdate_Zone2Act1(s32 x, s32 y) +{ + Background *bg; + const Collision *collision; + s32 xSub, ySub; + + x -= gCamera.SA2_LABEL(unk20); + y -= gCamera.SA2_LABEL(unk24); + + if (x < 1488) { + collision = gRefCollision; + + xSub = ZONE2_EXTERIOR_CAM_X(x); + gBgScrollRegs[3][0] = gCamera.SA2_LABEL(unk52) = xSub; + + ySub = ZONE2_EXTERIOR_CAM_Y(y); + gCamera.SA2_LABEL(unk54) = ySub; + gBgScrollRegs[3][1] = ySub; + } else { + StageBgUpdate_Zone2_Interior(x, y); + } +} + +void StageBgUpdate_Zone2Act2(s32 x, s32 y) +{ + x -= gCamera.SA2_LABEL(unk20); + y -= gCamera.SA2_LABEL(unk24); + + StageBgUpdate_Zone2_Interior(x, y); +} \ No newline at end of file diff --git a/sa1/src/game/stage/backgrounds/zone_2_interior.c b/sa1/src/game/stage/backgrounds/zone_2_interior.c new file mode 100644 index 0000000000..0353525fd7 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_2_interior.c @@ -0,0 +1,101 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +// (94.24%) https://decomp.me/scratch/BwRFT +NONMATCH("asm/non_matching/game/stage/backgrounds/StageBgUpdate_Zone2_Interior.inc", void StageBgUpdate_Zone2_Interior(s32 x, s32 y)) +{ + Camera *cam = &gCamera; + s32 xSub, ySub; + u32 *offsets; + s32 line, r1, r2, r3, r4, wallY; + s32 i, v; + + // Scroll BG every 4 pixels + gBgScrollRegs[3][0] = cam->sa2__unk52 = xSub = (x >> 2) % 256u; + gBgScrollRegs[3][1] = cam->sa2__unk54 = ySub = (y >> 2) % 256u; + + gFlags |= FLAGS_EXECUTE_HBLANK_COPY; + + gHBlankCopyTarget = (void *)®_BG3HOFS; + gHBlankCopySize = 4; + + offsets = gBgOffsetsHBlankPrimary; + + wallY = ySub % 64u; + r4 = 0; + + r3 = (((wallY - r4) << 16) | xSub); + + for (line = -wallY; line < -wallY + 64; line++) { + if (line >= 0) { + *offsets++ = r3; + } + } + + r4 += 64; + r3 = (((wallY - r4) << 16) | xSub); + + for (; line < -wallY + (r4 + 64); line++) { + *offsets++ = r3; + } + + r4 += 64; + r3 = (((wallY - r4) << 16) | xSub); + + for (; line < -wallY + (r4 + 64); line++) { + if (line < DISPLAY_HEIGHT) { + *offsets++ = r3; + } + } + + r4 += 64; + r3 = (((wallY - r4) << 16) | xSub); + + for (; line < -wallY + (r4 + 64); line++) { + if (line < DISPLAY_HEIGHT) { + *offsets++ = r3; + } + } + + // Three small bars + for (i = 0; i < 3; i++) { + xSub = ((x >> 1) + (i << 5)) & 0xFF; + ySub = ((y >> 1) + (i << 6)) & 0xFF; + ySub = (-ySub) & 0xFF; + offsets = gBgOffsetsHBlankPrimary; + + for (line = ySub - 16; line < ySub; line++) { + if (line < 0) { + continue; + } + + if ((line < DISPLAY_HEIGHT)) { + r3 = ((80 - ySub) << 16) | xSub; + offsets[line] = r3; + } + } + } + + xSub = (((x << 1) / 3) + (i << 5)) & 0xFF; + ySub = (((y << 1) / 3) + (i << 6) + (i << 5)) & 0xFF; + + // Bigger bar + v = (-ySub & 0xFF); + offsets = gBgOffsetsHBlankPrimary; + for (line = v - 24; line < v; line++) { + if ((line < 0)) { + continue; + } + + if (line < DISPLAY_HEIGHT) { + r3 = (((104 - v) << 16) | xSub); + offsets[line] = r3; + } + } +} +END_NONMATCH diff --git a/sa1/src/game/stage/backgrounds/zone_3.c b/sa1/src/game/stage/backgrounds/zone_3.c new file mode 100644 index 0000000000..9e7264c4f3 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_3.c @@ -0,0 +1,227 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "game/stage/camera.h" +#include "game/stage/mp_sprite_task.h" +#include "game/sa1_sa2_shared/globals.h" + +typedef struct { + /* 0x00 */ s32 qWorldX; + /* 0x04 */ s32 qWorldY; + /* 0x08 */ u8 filler08[0x10]; + Sprite s; +} CasinoParadiseFirework; + +// TODO: Get these auto-generated? +#define BG_TILEMAP_ZONE3_WIDTH 256 +#define BG_TILEMAP_ZONE3_HEIGHT 256 + +#define BG_LINE_SKY_START 0 +#define BG_LINE_SKY_END 96 +#define BG_LINE_WATER_START 96 +#define BG_LINE_WATER_END 128 +#define BG_LINE_GREENERY_PART_0 134 +#define BG_LINE_GREENERY_PART_1 140 +#define BG_LINE_GREENERY_PART_2 152 +#define BG_LINE_GREENERY_PART_3 168 +#define BG_LINE_RAILING_START 192 +#define BG_LINE_RAILING_END 256 + +extern const TileInfoFirework gTileInfoZone3Fireworks[2]; + +void TaskDestructor_MultiplayerSpriteTask(struct Task *); + +void Task_UpdateFireworkAnimation(void) +{ + CasinoParadiseFirework *firework = TASK_DATA(gCurTask); + Sprite *s = &firework->s; + struct Camera *cam = &gCamera; + + if (s->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + TaskDestroy(gCurTask); + return; + } + + s->x = firework->qWorldX - cam->sa2__unk52; + s->y = firework->qWorldY - cam->sa2__unk54; + + s->frameFlags &= ~(SPRITE_FLAG(18, 1) | SPRITE_FLAG(19, 1)); + UpdateSpriteAnimation(s); + s->frameFlags |= (SPRITE_FLAG(18, 1) | SPRITE_FLAG(19, 1)); + + s->frameFlags &= ~(SPRITE_FLAG(X_FLIP, 1) | SPRITE_FLAG(Y_FLIP, 1)); + DisplaySprite(s); + + s->frameFlags ^= SPRITE_FLAG(X_FLIP, 1); + DisplaySprite(s); + + s->frameFlags ^= SPRITE_FLAG(X_FLIP, 1); + s->frameFlags ^= SPRITE_FLAG(Y_FLIP, 1); + DisplaySprite(s); + + s->frameFlags ^= SPRITE_FLAG(X_FLIP, 1); + DisplaySprite(s); +} + +void StageBgUpdate_Zone3Acts12(s32 x, s32 y) +{ + struct Camera *cam = &gCamera; + const Collision *collision; + s32 xSub, ySub; + s32 scanline; + s32 r4; + u32 *ptr; + s32 i; + + x -= cam->sa2__unk20; + y -= cam->sa2__unk24; + + collision = gRefCollision; + + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = xSub = Div(x * 16, collision->pxWidth - DISPLAY_WIDTH); + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = ySub = Div((y << 6) + (y << 5), collision->pxHeight - DISPLAY_HEIGHT); + + // TODO: There should be a macro for this already! + r4 = ((ySub << 16) | xSub); + + gFlags |= FLAGS_EXECUTE_HBLANK_COPY; + gHBlankCopyTarget = (void *)®_BG3HOFS; + gHBlankCopySize = 4; + + { + ptr = gBgOffsetsHBlankPrimary; + DmaFill32(3, r4, ptr, DISPLAY_HEIGHT * sizeof(r4)); + + r4 = ((ySub << 16) | ((xSub + (x >> 6)) & 0xFF)); + + scanline = BG_LINE_GREENERY_PART_0 - ySub; + + ptr += scanline; + for (i = 0; (i < BG_LINE_GREENERY_PART_1 - BG_LINE_GREENERY_PART_0); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } + + { + ptr = gBgOffsetsHBlankPrimary; + + r4 = ((ySub << 16) | ((xSub + (x >> 5)) & 0xFF)); + + scanline = BG_LINE_GREENERY_PART_0 - ySub; + + ptr += scanline; + for (i = 0; (i < BG_LINE_GREENERY_PART_1 - BG_LINE_GREENERY_PART_0); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } + + { + ptr = gBgOffsetsHBlankPrimary; + + r4 = ((ySub << 16) | ((xSub + (x >> 4)) & 0xFF)); + + scanline = BG_LINE_GREENERY_PART_1 - ySub; + + ptr += scanline; + for (i = 0; (i < BG_LINE_GREENERY_PART_2 - BG_LINE_GREENERY_PART_1); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } + + { + ptr = gBgOffsetsHBlankPrimary; + + r4 = ((ySub << 16) | ((xSub + (x >> 3)) & 0xFF)); + + scanline = BG_LINE_GREENERY_PART_2 - ySub; + + ptr += scanline; + for (i = 0; (i < BG_LINE_GREENERY_PART_3 - BG_LINE_GREENERY_PART_2); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } + + { + ptr = gBgOffsetsHBlankPrimary; + + r4 = ((ySub << 16) | ((xSub + (x >> 2)) & 0xFF)); + + scanline = BG_LINE_GREENERY_PART_3 - ySub; + + ptr += scanline; + for (i = 0; (i < BG_LINE_RAILING_START - BG_LINE_GREENERY_PART_3); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } + + { + ptr = gBgOffsetsHBlankPrimary; + + r4 = ((ySub << 16) | ((xSub + (x >> 1)) & 0xFF)); + + scanline = BG_LINE_RAILING_START - ySub; + + ptr += scanline; + for (i = 0; (i < BG_LINE_RAILING_END - BG_LINE_RAILING_START); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } + + if (((gStageTime % 4u) == 0) && ((PseudoRandom32() & 0x700) == 0)) { + // Spawn Firework, at random location in the sky, randomly big or small. + struct Task *t; + CasinoParadiseFirework *firework; + Sprite *s; + s32 randX = (((u32)PseudoRandom32() & 0xFF00) >> 8) - 8; // 0 - +256 ---> -8 - +248 + s32 randY = (((u32)PseudoRandom32() & 0x7F00) >> 8) - (BG_LINE_WATER_END - BG_LINE_SKY_END); + u8 fireworkType = (((u32)PseudoRandom32() & 0x0100) >> 8); + const TileInfoFirework *tileInfo = &gTileInfoZone3Fireworks[fireworkType]; + + t = CreateMultiplayerSpriteTask(randX, randY, 0, 0, Task_UpdateFireworkAnimation, TaskDestructor_MultiplayerSpriteTask); + firework = TASK_DATA(t); + s = &firework->s; + + s->graphics.dest = VramMalloc(tileInfo->numTiles); + s->graphics.anim = tileInfo->anim; + s->variant = tileInfo->variant; + s->oamFlags = SPRITE_OAM_ORDER(31); + s->frameFlags = SPRITE_FLAG(PRIORITY, 3); + } +} diff --git a/sa1/src/game/stage/backgrounds/zone_3_firework.c b/sa1/src/game/stage/backgrounds/zone_3_firework.c new file mode 100644 index 0000000000..680db7fa1b --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_3_firework.c @@ -0,0 +1,53 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "game/stage/backgrounds/zone_3.h" +#include "game/stage/camera.h" +#include "game/stage/mp_sprite_task.h" +#include "game/sa1_sa2_shared/globals.h" + +void VBlankCallback_803F920(void) { *(vu32 *)®_BG1HOFS = 0; } + +void HBlankCallback_803F92C(int_vcount line) +{ + s32 newLine = line - 90; + + if ((newLine >= 0) && (line != DISPLAY_HEIGHT - 1)) { + u32 *ptr = gBgOffsetsHBlankSecondary; + ptr += 90; + + *(vu32 *)®_BG1HOFS = ptr[newLine]; + } else { + *(vu32 *)®_BG1HOFS = 0; + } +} + +void sub_803F968(void) +{ + struct Camera *cam = &gCamera; + + if (gStageTime & 0x1) { + cam->shiftY = ((u32)(PseudoRandom32() & 0x70000) >> 16) - 8; + } +} + +struct Task *SpawnCasinoFireworkMP(s16 x, s16 y, s32 fireworkType) +{ + const TileInfoFirework *tileInfo = &gTileInfoZone3Fireworks[fireworkType % ARRAY_COUNT(gTileInfoZone3Fireworks)]; + CasinoParadiseFirework *firework; + struct Task *t; + Sprite *s; + + t = CreateMultiplayerSpriteTask(x, y, 0, 0, Task_UpdateFireworkAnimation, TaskDestructor_MultiplayerSpriteTask); + firework = TASK_DATA(t); + s = &firework->s; + + s->graphics.dest = VramMalloc(tileInfo->numTiles); + s->graphics.anim = tileInfo->anim; + s->variant = tileInfo->variant; + s->oamFlags = SPRITE_OAM_ORDER(31); + s->frameFlags = SPRITE_FLAG(PRIORITY, 3); + + return t; +} \ No newline at end of file diff --git a/sa1/src/game/stage/backgrounds/zone_4.c b/sa1/src/game/stage/backgrounds/zone_4.c new file mode 100644 index 0000000000..fa9bd1d1ae --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_4.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/water_effects.h" + +void StageBgUpdate_Zone4Acts12(s32 x, s32 y) +{ + struct Camera *cam = &gCamera; + Background *bg; + u16 *offsets; + const Collision *coll; + s32 xSub, ySub; + s32 v; + + gBldRegs.bldCnt = (BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG0); + gBldRegs.bldAlpha = BLDALPHA_BLEND(16, 16); + + x -= cam->sa2__unk20; + y -= cam->sa2__unk24; + + // Snow layer + bg = &gStageBackgroundsRam.unk0; + + gBgScrollRegs[0][0] = ((x + (x >> 2)) + (gStageTime >> 2)) & 0xFF; + gBgScrollRegs[0][1] = y + 256; + gBgScrollRegs[0][1] = (gBgScrollRegs[0][1] - gStageTime) & 0xFF; + DrawBackground(bg); + UpdateBgAnimationTiles(bg); + + coll = gRefCollision; + + xSub = Div(x << 4, coll->pxWidth - DISPLAY_WIDTH); + cam->sa2__unk52 = xSub; + gBgScrollRegs[3][0] = xSub; + + ySub = Div(((y << 8) + (y << 6) + (y << 5)), coll->pxHeight - DISPLAY_HEIGHT); + cam->sa2__unk54 = ySub; + gBgScrollRegs[3][1] = ySub; + + if (gWater.SA2_LABEL(unk1) == 0) { + gDispCnt &= ~DISPCNT_BG0_ON; + } else { + gDispCnt |= DISPCNT_BG0_ON; + } + + if (gWater.SA2_LABEL(unk1) == 0) { + REG_DISPCNT &= ~DISPCNT_BG0_ON; + } +} diff --git a/sa1/src/game/stage/backgrounds/zone_4_init.c b/sa1/src/game/stage/backgrounds/zone_4_init.c new file mode 100644 index 0000000000..6198bcfede --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_4_init.c @@ -0,0 +1,26 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +#include "constants/tilemaps.h" + +void CreateStageBg_Zone4(void) +{ + Background *bg = &gStageBackgroundsRam.unk0; + + gBldRegs.bldAlpha = BLDALPHA_BLEND(16, 16); + + gBgCntRegs[0] = ((BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ) | (BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3)); + + *bg = gStageCameraBgTemplates[CAMBG_BACK_B_LAYER]; + bg->tilemapId = TM_ICE_PARADISE_SNOW; + bg->graphics.dest = (void *)BG_CHAR_ADDR(3); + bg->layoutVram = (void *)BG_SCREEN_ADDR(27); + bg->targetTilesX = 32; + bg->targetTilesY = 32; + + DrawBackground(bg); +} diff --git a/sa1/src/game/stage/backgrounds/zone_5.c b/sa1/src/game/stage/backgrounds/zone_5.c new file mode 100644 index 0000000000..980f818b9a --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_5.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +void StageBgUpdate_Zone5Acts12(s32 x, s32 y) +{ + Background *bg; + gDispCnt |= DISPCNT_BG0_ON; + gBldRegs.bldCnt = BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG0 | BLDCNT_TGT2_ALL; + gBldRegs.bldAlpha = BLDALPHA_BLEND(12, 16); + + bg = &gStageBackgroundsRam.unk0; + gBgScrollRegs[0][0] = (0x100 - (gStageTime / 4)) & 0xFF; + gBgScrollRegs[0][1] = 0; + DrawBackground(bg); + UpdateBgAnimationTiles(bg); +} \ No newline at end of file diff --git a/sa1/src/game/stage/backgrounds/zone_5_init.c b/sa1/src/game/stage/backgrounds/zone_5_init.c new file mode 100644 index 0000000000..eb3fa42c08 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_5_init.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +#include "constants/tilemaps.h" + +void CreateStageBg_Zone5(void) +{ + Background *bg = &gStageBackgroundsRam.unk0; + gBgCntRegs[0] + = ((BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ) | (BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3)); + + *bg = gStageCameraBgTemplates[CAMBG_BACK_B_LAYER]; + bg->tilemapId = TM_EGG_ROCKET_CLOUDS; + + DrawBackground(bg); +} diff --git a/sa1/src/game/stage/backgrounds/zone_6.c b/sa1/src/game/stage/backgrounds/zone_6.c new file mode 100644 index 0000000000..736bff7c6e --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_6.c @@ -0,0 +1,291 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "bg_triangles.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_6.h" + +// Act 1 +#define BG_LINE_OUTSIDE_START 256 + +// Act 2 +#define BG_LINE_CEILING_START 0 +#define BG_LINE_CEILING_END 120 +#define BG_LINE_BELT_A_START 120 +#define BG_LINE_BELT_A_END 136 +#define BG_LINE_WALL_A_START 136 +#define BG_LINE_WALL_A_END 176 +#define BG_LINE_BELT_B_START 176 +#define BG_LINE_BELT_B_END 192 +#define BG_LINE_WALL_B_START 192 +#define BG_LINE_WALL_B_END 232 + +void StageBgUpdate_Zone6Act1(s32 x, s32 y) +{ + Camera *cam = &gCamera; + + x -= cam->SA2_LABEL(unk20); + + if (cam->SA2_LABEL(unk50) & 0x2000) { + return; + } + + if (gBossIndex == 0) { + // Initially set BG3 to use the full 256x512 tilemap + // and set its Y-position to the launch tower in the Sunset. + gBgCntRegs[3] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[3] |= BGCNT_TXT256x512; + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C + 2); + + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = Div(x * 16, 816); + + cam->SA2_LABEL(unk54) = BG_LINE_OUTSIDE_START; + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54); + } else if (gBossIndex < 3) { + if (!(cam->SA2_LABEL(unk50) & 0x8000)) { + gBgCntRegs[3] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[3] |= BGCNT_TXT256x512; + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C + 2); + + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = Div(x * 16, 816); + + if (((-(gStageTime * 2)) & 0x1FF) == gBgScrollRegs[3][1]) { + cam->SA2_LABEL(unk50) |= 0x8000; + } + } else { + // _0803EF80 + + if (((-(gStageTime * 2)) & 0x1FF) == 0) { + gBgCntRegs[3] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[3] |= BGCNT_TXT256x256; + } + + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C + 2); + + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = 0; + + if ((gBgCntRegs[3] & BGCNT_TXTAFF_MASK) == BGCNT_TXT256x256) { + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = (-(gStageTime * 2)) & 0xFF; + } else { + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = (-(gStageTime * 2)) & 0x1FF; + } + } + } else if (gBossIndex == 3) { + if ((gBgCntRegs[3] & BGCNT_SCREENBASE_MASK) == BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C + 2)) { + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = 0; + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = (-(gStageTime * 2)) & 0xFF; + + if (((-(gStageTime * 2)) & 0x1FF) == 256) { + if ((cam->SA2_LABEL(unk50) & 0x4000)) { + // _0803F04E + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = BG_LINE_OUTSIDE_START; + + gBgCntRegs[3] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[3] |= BGCNT_TXT256x512; + + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C + 1); + } + } + } else if ((gBgCntRegs[3] & BGCNT_SCREENBASE_MASK) == BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C + 1)) { + // _0803F090 + 0x8 + u16 mask; + + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = 0; + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = (-(gStageTime * 2)) & 0x1FF; + + mask = 0x1FF; + if (((-(gStageTime * 2)) & mask) == 0) { + // _0803F0C0 + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = -((gStageTime * 2 + 256)) & mask; + + gBgCntRegs[3] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[3] |= BGCNT_TXT256x512; + + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C); + } + } else if ((gBgCntRegs[3] & BGCNT_TXTAFF_MASK) == BGCNT_TXT256x512) { + // _0803F114 + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = 0; + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = (-((gStageTime * 2) + 256)) & 0x1FF; + + if (gBgScrollRegs[3][1] < DISPLAY_HEIGHT) { + gDispCnt |= DISPCNT_BG0_ON; + + gBgCntRegs[0] = gBgCntRegs[3] & ~BGCNT_TXTAFF_MASK; + gBgCntRegs[0] |= BGCNT_TXT256x256; + + gBgCntRegs[0] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[0] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C); + + gBgScrollRegs[0][0] = cam->SA2_LABEL(unk52) = 0; + gBgScrollRegs[0][1] = cam->SA2_LABEL(unk54) = (gStageTime >> 3) & 0xFF; + + gBldRegs.bldCnt = BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_BG0; + gBldRegs.bldY = 0; + + if (IS_SINGLE_PLAYER) { + gHBlankCallbacks[gNumHBlankCallbacks++] = HBlankCallback_803FA1C; + gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; + } else { + gBgCntRegs[0] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[0] |= BGCNT_TXT256x512; + + gBgScrollRegs[0][1] = DISPLAY_HEIGHT; + } + } + // _0803F1EA + + if (gBgScrollRegs[3][1] == 0) { + // _0803F1F6 + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = (-(gStageTime * 2)) & 0xFF; + + gBgCntRegs[3] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[3] |= BGCNT_TXT256x256; + + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C); + + gBgScrollRegs[0][0] = cam->SA2_LABEL(unk52) = 0; + gBgScrollRegs[0][1] = cam->SA2_LABEL(unk54) = (gStageTime >> 1) & 0xFF; + + gBldRegs.bldCnt = BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_BG0; + gBldRegs.bldY = 0; + + if (IS_SINGLE_PLAYER) { + gHBlankCallbacks[gNumHBlankCallbacks++] = HBlankCallback_803FA1C; + gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; + } else { + gBgCntRegs[0] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[0] |= BGCNT_TXT256x512; + + gBgScrollRegs[0][1] = DISPLAY_HEIGHT; + } + } + } else { + // _0803F2A2 + gBgCntRegs[3] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[3] |= BGCNT_TXT256x256; + + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C); + + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = 0; + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = (gStageTime >> 6) & 0xFF; + + gBgCntRegs[0] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[0] |= BGCNT_TXT256x256; + + gBgCntRegs[0] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[0] |= BGCNT_SCREENBASE(CAM_SCREENBASE_BACK_C); + + gBgScrollRegs[0][0] = cam->SA2_LABEL(unk52) = 0x74; + gBgScrollRegs[0][1] = cam->SA2_LABEL(unk54) = (gStageTime >> 3) & 0xFF; + + gBldRegs.bldCnt = BLDCNT_EFFECT_LIGHTEN | BLDCNT_TGT1_BG0; + gBldRegs.bldY = 0; + + if (IS_SINGLE_PLAYER) { + gHBlankCallbacks[gNumHBlankCallbacks++] = HBlankCallback_803FA1C; + gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; + } else { + gBgCntRegs[0] &= ~BGCNT_TXTAFF_MASK; + gBgCntRegs[0] |= BGCNT_TXT256x512; + + gBgScrollRegs[0][1] = DISPLAY_HEIGHT; + } + + if (!(cam->SA2_LABEL(unk50) & 0x8000)) { + SA2_LABEL(sub_80078D4)(0, 0, 100, (u16)gBgScrollRegs[0][0], (u16)gBgScrollRegs[0][1]); + SA2_LABEL(sub_80078D4)(0, 100, 104, 0, DISPLAY_HEIGHT); + + if ((128 - ((gStageTime >> 5) & 0x7F)) > 56) { + SA2_LABEL(sub_80078D4)(0, 104, 160, 0, ((gStageTime >> 5) & 0x7F) + 160); + } else { + int_vcount v = 232 - ((gStageTime >> 5) & 0x7F); + int_vcount w; + SA2_LABEL(sub_80078D4)(0, 104, v, 0, ((gStageTime >> 5) & 0x7F) + 160); + + w = 232 - ((gStageTime >> 5) & 0x7F); + SA2_LABEL(sub_80078D4)(0, w, 160, 0, ((gStageTime >> 5) & 0x7F) + 32); + } + } + } + } +} + +void StageBgUpdate_Zone6Act2(s32 x, s32 y) +{ + struct Camera *cam = &gCamera; + const Collision *coll; +#ifndef NON_MATCHING + register s32 xSub asm("r9"); +#else + s32 xSub; +#endif + s32 ySub; + s32 scanline; + s32 r4; + u32 *ptr; + s32 i; + + x -= cam->SA2_LABEL(unk20); + y -= cam->SA2_LABEL(unk24); + + coll = gRefCollision; + + gBgScrollRegs[3][0] = cam->SA2_LABEL(unk52) = xSub = Div((x << 8) + (x << 4), coll->pxWidth - DISPLAY_WIDTH); + gBgScrollRegs[3][1] = cam->SA2_LABEL(unk54) = ySub = Div((y << 6) + (y << 3), coll->pxHeight - DISPLAY_HEIGHT); + + // TODO: There should be a macro for this already! + r4 = ((ySub << 16) | xSub); + + gFlags |= FLAGS_EXECUTE_HBLANK_COPY; + gHBlankCopyTarget = (void *)®_BG3HOFS; + gHBlankCopySize = 4; + + { + ptr = gBgOffsetsHBlankPrimary; + DmaFill32(3, r4, ptr, DISPLAY_HEIGHT * sizeof(r4)); + + r4 = ((ySub << 16) | ((xSub - (gStageTime >> 1)) & 0x1FF)); + + scanline = BG_LINE_BELT_A_START - ySub; + + ptr += scanline; + for (i = 0; i < (BG_LINE_BELT_A_END - BG_LINE_BELT_A_START); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } + + { + ptr = gBgOffsetsHBlankPrimary; + + r4 = ((ySub << 16) | (((gStageTime >> 1) + xSub) & 0x1FF)); + + scanline = BG_LINE_BELT_B_START - ySub; + + ptr += scanline; + for (i = 0; i < (BG_LINE_BELT_B_END - BG_LINE_BELT_B_START); i++) { + if ((scanline + i) >= 0) { + if ((scanline + i) >= DISPLAY_HEIGHT) { + break; + } + + *ptr++ = r4; + } + } + } +} diff --git a/sa1/src/game/stage/backgrounds/zone_6_hblank.c b/sa1/src/game/stage/backgrounds/zone_6_hblank.c new file mode 100644 index 0000000000..01f53433f1 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_6_hblank.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_6.h" + +void HBlankCallback_803FA1C(int_vcount line) +{ + if (line == 100) { + REG_BG0CNT &= ~BGCNT_TXT512x512; + REG_BG0CNT |= BGCNT_TXT256x512; + *(u32 *)®_BG0HOFS = (0 | (DISPLAY_HEIGHT << 16)); + } else if (line > 101 && line < 134) { + REG_BLDY = 16 - ((line - 101) >> 1); + } +} \ No newline at end of file diff --git a/sa1/src/game/stage/backgrounds/zone_7_act_1.c b/sa1/src/game/stage/backgrounds/zone_7_act_1.c new file mode 100644 index 0000000000..022dfe9a2e --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_7_act_1.c @@ -0,0 +1,25 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +void StageBgUpdate_Zone7Act1(s32 x, s32 y) +{ + Background *bg; + const Collision *collision; + s32 xSub, ySub; + + x -= gCamera.sa2__unk20; + y -= gCamera.sa2__unk24; + + collision = gRefCollision; + + xSub = Div(x * 64 - x * 8, collision->pxWidth - DISPLAY_WIDTH); + gBgScrollRegs[3][0] = gCamera.sa2__unk52 = xSub; + + ySub = Div((y << 4) + y * 8, collision->pxHeight - DISPLAY_HEIGHT); + gCamera.sa2__unk54 = ySub; + gBgScrollRegs[3][1] = ySub; +} diff --git a/sa1/src/game/stage/backgrounds/zone_7_act_2.c b/sa1/src/game/stage/backgrounds/zone_7_act_2.c new file mode 100644 index 0000000000..7cba765643 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_7_act_2.c @@ -0,0 +1,51 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +extern void HBlankCallback_803F92C(int_vcount line); +extern void VBlankCallback_803F920(void); + +void StageBgUpdate_Zone7Act2(void) +{ + struct Camera *cam = &gCamera; + Background *bg = &gStageBackgroundsRam.unkC0; + const Collision *collision; + u32 *offsets; + s32 i; + + gBgScrollRegs[1][0] = cam->sa2__unk52 = 0; + gBgScrollRegs[1][1] = cam->sa2__unk54 = 0; + + bg->scrollX = 0; + bg->scrollY = 0; + DrawBackground(bg); + + offsets = gBgOffsetsHBlankPrimary; + offsets += 90; // Earth is static, so skip those lines + + DmaFill32(3, (gStageTime >> 6) & 0xFF, offsets, 10 * sizeof(u32)); + offsets += 10; + + DmaFill32(3, (gStageTime >> 5) & 0xFF, offsets, 5 * sizeof(u32)); + offsets += 5; + + DmaFill32(3, (gStageTime >> 4) & 0xFF, offsets, 8 * sizeof(u32)); + offsets += 8; + + DmaFill32(3, (gStageTime >> 3) & 0xFF, offsets, 16 * sizeof(u32)); + offsets += 16; + + for (i = 1; i < 32; i++) { + *offsets++ = ((gStageTime >> 3) + ((gStageTime * i) >> 5)) & 0xFF; + } + + gHBlankCallbacks[gNumHBlankCallbacks++] = HBlankCallback_803F92C; + gFlags |= FLAGS_EXECUTE_HBLANK_CALLBACKS; + + gVBlankCallbacks[gNumVBlankCallbacks++] = VBlankCallback_803F920; + gFlags |= FLAGS_EXECUTE_VBLANK_CALLBACKS; +} diff --git a/sa1/src/game/stage/backgrounds/zone_7_act_2_init.c b/sa1/src/game/stage/backgrounds/zone_7_act_2_init.c new file mode 100644 index 0000000000..bd66440c11 --- /dev/null +++ b/sa1/src/game/stage/backgrounds/zone_7_act_2_init.c @@ -0,0 +1,17 @@ +#include "global.h" +#include "core.h" +#include "animation_commands_bg.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/backgrounds/zone_5.h" + +void CreateStageBg_Zone7_Act2(void) +{ + Background *bg; + const Collision *collision; + + DmaFill32(3, 0, BG_TILE_ADDR(128), 0x4000); + DmaFill32(3, 0, BG_TILE_ADDR(448), 0x800); + + gBgCntRegs[2] = BGCNT_TXT512x256 | BGCNT_SCREENBASE(28) | BGCNT_256COLOR | 0x5; +} diff --git a/sa1/src/game/stage/camera.c b/sa1/src/game/stage/camera.c new file mode 100644 index 0000000000..d851312c6e --- /dev/null +++ b/sa1/src/game/stage/camera.c @@ -0,0 +1,949 @@ +#include "global.h" +#include "core.h" +#include "sprite.h" +#include "animation_commands_bg.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/camera.h" +#include "game/stage/stage.h" +#include "game/stage/player.h" +#include "game/stage/terrain_collision.h" + +#if (GAME == GAME_SA1) +#include "game/multiplayer/mp_player.h" +#elif (GAME == GAME_SA2) +#include "game/stage/player_super_sonic.h" +#include "game/stage/background/dummy.h" +#include "game/stage/background/zone_1.h" +#include "game/stage/background/zone_2.h" +#include "game/stage/background/zone_3.h" +#include "game/stage/background/zone_4.h" +#include "game/stage/background/zone_5.h" +#include "game/stage/background/zone_6.h" +#include "game/stage/background/zone_7.h" +#include "game/stage/background/zone_final.h" +#endif + +#include "constants/animations.h" +#include "constants/characters.h" +#include "constants/tilemaps.h" +#include "constants/zones.h" + +// Probably a array (as it's aligned 16) +struct Backgrounds ALIGNED(16) gStageBackgroundsRam = {}; + +UNUSED u32 unused_3005950[3] = {}; + +struct Camera ALIGNED(8) gCamera = {}; +const Collision *gRefCollision = NULL; + +static void RenderMetatileLayers(s32, s32); + +// camera_destroy.h +void Task_CallUpdateCamera(void); +void TaskDestructor_Camera(struct Task *); + +#define BOSS_CAM_FRAME_DELTA_PIXELS 5 + +// NOTE: +// unk8 is a regular integer in SA1, but Q_24_8 in SA2 +#if (GAME == GAME_SA1) +#define CAM_UNK8_INT(_val) (_val) +#else +#define CAM_UNK8_INT(_val) (I(_val)) +#endif + +#define STGBG_SCRN_DIM(w, h, charBase, screenBase) \ + { \ + ((w) / TILE_WIDTH), ((h) / TILE_WIDTH), charBase, screenBase \ + } +#define STGBG_WIDTH(arr) ((arr)[0]) +#define STGBG_HEIGHT(arr) ((arr)[1]) +#define STGBG_CHARBASE(arr) ((arr)[2]) +#define STGBG_SCREENBASE(arr) ((arr)[3]) + +const Background gStageCameraBgTemplates[4] = { + [CAMBG_MAP_FRONT_LAYER] = { + .graphics = { + .src = NULL, + .dest = (void*)BG_VRAM, + .size = 0, + .anim = 0, + }, + .layoutVram = (void*)BG_SCREEN_ADDR(CAM_SCREENBASE_MAP_FRONT), + .layout = NULL, + .xTiles = 0, + .yTiles = 0, + .unk18 = 0, + .unk1A = 0, + .tilemapId = 0, + .unk1E = 0, + .unk20 = 0, + .unk22 = 0, + .unk24 = 0, + .targetTilesX = (DISPLAY_WIDTH / TILE_WIDTH) + 1, + .targetTilesY = (DISPLAY_HEIGHT / TILE_WIDTH) + 1, + .paletteOffset = 0, + .animFrameCounter = 0, + .animDelayCounter = 0, + .flags = BACKGROUND_FLAG_IS_LEVEL_MAP | BACKGROUND_FLAG_20 | BACKGROUND_DISABLE_PALETTE_UPDATE | BACKGROUND_DISABLE_TILESET_UPDATE | BACKGROUND_FLAGS_BG_ID(1), + .scrollX = 0, + .scrollY = 0, + .prevScrollX = 32767, + .prevScrollY = 32767, + .metatileMap = NULL, + .mapWidth = 0, + .mapHeight = 0, + }, + [CAMBG_MAP_BACK_LAYER] = { + .graphics = { + .src = NULL, + .dest = (void*)BG_VRAM, + .size = 0, + .anim = 0, + }, + .layoutVram = (void*)BG_SCREEN_ADDR(CAM_SCREENBASE_MAP_BACK), + .layout = NULL, + .xTiles = 0, + .yTiles = 0, + .unk18 = 0, + .unk1A = 0, + .tilemapId = 0, + .unk1E = 0, + .unk20 = 0, + .unk22 = 0, + .unk24 = 0, + .targetTilesX = (DISPLAY_WIDTH / TILE_WIDTH) + 1, + .targetTilesY = (DISPLAY_HEIGHT / TILE_WIDTH) + 1, + .paletteOffset = 0, + .animFrameCounter = 0, + .animDelayCounter = 0, + .flags = BACKGROUND_FLAG_IS_LEVEL_MAP | BACKGROUND_FLAG_20 | BACKGROUND_FLAGS_BG_ID(2), + .scrollX = 0, + .scrollY = 0, + .prevScrollX = 32767, + .prevScrollY = 32767, + .metatileMap = NULL, + .mapWidth = 0, + .mapHeight = 0, + }, + [CAMBG_BACK_A_LAYER] = { + .graphics = { + .src = NULL, + .dest = (void*)BG_SCREEN_ADDR(16), + .size = 0, + .anim = 0, + }, + .layoutVram = (void*)BG_SCREEN_ADDR(CAM_SCREENBASE_BACK_B), + .layout = NULL, + .xTiles = 0, + .yTiles = 0, + .unk18 = 0, + .unk1A = 0, + .tilemapId = 0, + .unk1E = 0, + .unk20 = 0, + .unk22 = 0, + .unk24 = 0, + .targetTilesX = 32, + .targetTilesY = 32, + .paletteOffset = 0, + .animFrameCounter = 0, + .animDelayCounter = 0, + .flags = BACKGROUND_DISABLE_PALETTE_UPDATE | BACKGROUND_FLAGS_BG_ID(3), + .scrollX = 0, + .scrollY = 0, + .prevScrollX = 32767, + .prevScrollY = 32767, + .metatileMap = NULL, + .mapWidth = 0, + .mapHeight = 0, + }, + [CAMBG_BACK_B_LAYER] = { + .graphics = { + .src = NULL, + .dest = (void*)BG_CHAR_ADDR(3), + .size = 0, + .anim = 0, + }, + .layoutVram = (void*)BG_SCREEN_ADDR(CAM_SCREENBASE_BACK_A), + .layout = NULL, + .xTiles = 0, + .yTiles = 0, + .unk18 = 0, + .unk1A = 0, + .tilemapId = 0, + .unk1E = 0, + .unk20 = 0, + .unk22 = 0, + .unk24 = 0, + .targetTilesX = 32, + .targetTilesY = 32, + .paletteOffset = 0, + .animFrameCounter = 0, + .animDelayCounter = 0, + .flags = BACKGROUND_DISABLE_PALETTE_UPDATE | BACKGROUND_FLAGS_BG_ID(0), + .scrollX = 0, + .scrollY = 0, + .prevScrollX = 32767, + .prevScrollY = 32767, + .metatileMap = NULL, + .mapWidth = 0, + .mapHeight = 0, + }, +}; + +#if (GAME == GAME_SA2) +const u16 gBossCameraYClamps[][2] = { + [ZONE_1] = { 32, DISPLAY_HEIGHT + 56 }, [ZONE_2] = { 32, DISPLAY_HEIGHT + 44 }, [ZONE_3] = { 32, DISPLAY_HEIGHT + 56 }, + [ZONE_4] = { 32, DISPLAY_HEIGHT + 48 }, [ZONE_5] = { 32, DISPLAY_HEIGHT + 48 }, [ZONE_6] = { 32, DISPLAY_HEIGHT + 72 }, + [ZONE_7] = { 32, DISPLAY_HEIGHT + 104 }, [ZONE_FINAL] = { 32, DISPLAY_HEIGHT + 104 }, [ZONE_FINAL + 1] = { 32, DISPLAY_HEIGHT + 104 }, +}; +#endif + +#if (GAME == GAME_SA1) +extern void CreateStageBg_Zone4(void); +extern void CreateStageBg_Zone5(void); +extern void CreateStageBg_Zone7_Act2(void); + +static const VoidFn sStageBgInitProcedures[NUM_LEVEL_IDS] = { + [LEVEL_INDEX(ZONE_1, ACT_1)] = NULL, + [LEVEL_INDEX(ZONE_1, ACT_2)] = NULL, + [LEVEL_INDEX(ZONE_2, ACT_1)] = NULL, + [LEVEL_INDEX(ZONE_2, ACT_2)] = NULL, + [LEVEL_INDEX(ZONE_3, ACT_1)] = NULL, + [LEVEL_INDEX(ZONE_3, ACT_2)] = NULL, + [LEVEL_INDEX(ZONE_4, ACT_1)] = CreateStageBg_Zone4, + [LEVEL_INDEX(ZONE_4, ACT_2)] = CreateStageBg_Zone4, + [LEVEL_INDEX(ZONE_5, ACT_1)] = CreateStageBg_Zone5, + [LEVEL_INDEX(ZONE_5, ACT_2)] = CreateStageBg_Zone5, + [LEVEL_INDEX(ZONE_6, ACT_1)] = NULL, + [LEVEL_INDEX(ZONE_6, ACT_2)] = NULL, + [LEVEL_INDEX(ZONE_7, ACT_1)] = NULL, + [LEVEL_INDEX(ZONE_7, ACT_2)] = CreateStageBg_Zone7_Act2, + [ACT_CHAO_HUNT_A] = NULL, + [ACT_CHAO_HUNT_B] = NULL, + [ACT_CHAO_HUNT_C] = NULL, + [ACT_CHAO_HUNT_D] = NULL, + +}; + +void StageBgUpdate_Zone1Acts12(s32, s32); +void StageBgUpdate_Zone2Act1(s32, s32); +void StageBgUpdate_Zone2Act2(s32, s32); +void StageBgUpdate_Zone3Acts12(s32, s32); +void StageBgUpdate_Zone4Acts12(s32, s32); +void StageBgUpdate_Zone5Acts12(s32, s32); +void StageBgUpdate_Zone6Act1(s32, s32); +void StageBgUpdate_Zone6Act2(s32, s32); +void StageBgUpdate_Zone7Act1(s32, s32); +void StageBgUpdate_Zone7Act2(s32, s32); +static const BgUpdate sStageBgUpdateFuncs[NUM_LEVEL_IDS] = { + [LEVEL_INDEX(ZONE_1, ACT_1)] = StageBgUpdate_Zone1Acts12, + [LEVEL_INDEX(ZONE_1, ACT_2)] = StageBgUpdate_Zone1Acts12, + [LEVEL_INDEX(ZONE_2, ACT_1)] = StageBgUpdate_Zone2Act1, + [LEVEL_INDEX(ZONE_2, ACT_2)] = StageBgUpdate_Zone2Act2, + [LEVEL_INDEX(ZONE_3, ACT_1)] = StageBgUpdate_Zone3Acts12, + [LEVEL_INDEX(ZONE_3, ACT_2)] = StageBgUpdate_Zone3Acts12, + [LEVEL_INDEX(ZONE_4, ACT_1)] = StageBgUpdate_Zone4Acts12, + [LEVEL_INDEX(ZONE_4, ACT_2)] = StageBgUpdate_Zone4Acts12, + [LEVEL_INDEX(ZONE_5, ACT_1)] = StageBgUpdate_Zone5Acts12, + [LEVEL_INDEX(ZONE_5, ACT_2)] = StageBgUpdate_Zone5Acts12, + [LEVEL_INDEX(ZONE_6, ACT_1)] = StageBgUpdate_Zone6Act1, + [LEVEL_INDEX(ZONE_6, ACT_2)] = StageBgUpdate_Zone6Act2, + [LEVEL_INDEX(ZONE_7, ACT_1)] = StageBgUpdate_Zone7Act1, + [LEVEL_INDEX(ZONE_7, ACT_2)] = StageBgUpdate_Zone7Act2, + [ACT_CHAO_HUNT_A] = StageBgUpdate_Zone1Acts12, + [ACT_CHAO_HUNT_B] = StageBgUpdate_Zone2Act2, + [ACT_CHAO_HUNT_C] = StageBgUpdate_Zone3Acts12, + [ACT_CHAO_HUNT_D] = StageBgUpdate_Zone6Act2, +}; + +static const s8 sStageBgDimensions[NUM_LEVEL_IDS][4] = { + [LEVEL_INDEX(ZONE_1, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_1, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_2, ACT_1)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_2, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_3, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_3, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_4, ACT_1)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_4, ACT_2)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_5, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_5, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_6, ACT_1)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_C), + [LEVEL_INDEX(ZONE_6, ACT_2)] = STGBG_SCRN_DIM(512, 256, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_7, ACT_1)] = STGBG_SCRN_DIM(296, 184, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_7, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [ACT_CHAO_HUNT_A] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [ACT_CHAO_HUNT_B] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [ACT_CHAO_HUNT_C] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [ACT_CHAO_HUNT_D] = STGBG_SCRN_DIM(512, 256, 2, CAM_SCREENBASE_BACK_A), +}; + +const TileInfoFirework gTileInfoZone3Fireworks[2] = { + [0] = { SA1_ANIM_FIREWORKS, 0, MAX_TILES(SA1_ANIM_FIREWORKS) }, + [1] = { SA1_ANIM_FIREWORKS_SMALL, 0, MAX_TILES(SA1_ANIM_FIREWORKS_SMALL) }, +}; +#elif (GAME == GAME_SA2) + +static const VoidFn sStageBgInitProcedures[] = { + [LEVEL_INDEX(ZONE_1, ACT_1)] = CreateStageBg_Zone1, + [LEVEL_INDEX(ZONE_1, ACT_2)] = CreateStageBg_Zone1, + [LEVEL_INDEX(ZONE_1, ACT_BOSS)] = CreateStageBg_Zone1, + [LEVEL_INDEX(ZONE_1, ACT_UNUSED)] = NULL, // Anti-Formatting + [LEVEL_INDEX(ZONE_2, ACT_1)] = CreateStageBg_Zone2, + [LEVEL_INDEX(ZONE_2, ACT_2)] = CreateStageBg_Zone2, + [LEVEL_INDEX(ZONE_2, ACT_BOSS)] = CreateStageBg_Zone2, + [LEVEL_INDEX(ZONE_2, ACT_UNUSED)] = NULL, // + [LEVEL_INDEX(ZONE_3, ACT_1)] = CreateStageBg_Zone3, + [LEVEL_INDEX(ZONE_3, ACT_2)] = CreateStageBg_Zone3, + [LEVEL_INDEX(ZONE_3, ACT_BOSS)] = CreateStageBg_Zone3, + [LEVEL_INDEX(ZONE_3, ACT_UNUSED)] = NULL, // + [LEVEL_INDEX(ZONE_4, ACT_1)] = CreateStageBg_Zone4, + [LEVEL_INDEX(ZONE_4, ACT_2)] = CreateStageBg_Zone4, + [LEVEL_INDEX(ZONE_4, ACT_BOSS)] = CreateStageBg_Dummy, + [LEVEL_INDEX(ZONE_4, ACT_UNUSED)] = NULL, // + [LEVEL_INDEX(ZONE_5, ACT_1)] = CreateStageBg_Zone5, + [LEVEL_INDEX(ZONE_5, ACT_2)] = CreateStageBg_Zone5, + [LEVEL_INDEX(ZONE_5, ACT_BOSS)] = NULL, + [LEVEL_INDEX(ZONE_5, ACT_UNUSED)] = NULL, // + [LEVEL_INDEX(ZONE_6, ACT_1)] = CreateStageBg_Zone6_Acts, + [LEVEL_INDEX(ZONE_6, ACT_2)] = CreateStageBg_Zone6_Acts, + [LEVEL_INDEX(ZONE_6, ACT_BOSS)] = CreateStageBg_Zone6_Boss, + [LEVEL_INDEX(ZONE_6, ACT_UNUSED)] = NULL, // + [LEVEL_INDEX(ZONE_7, ACT_1)] = CreateStageBg_Zone7, + [LEVEL_INDEX(ZONE_7, ACT_2)] = CreateStageBg_Zone7, + [LEVEL_INDEX(ZONE_7, ACT_BOSS)] = CreateStageBg_Zone7, + [LEVEL_INDEX(ZONE_7, ACT_UNUSED)] = NULL, // + [LEVEL_INDEX(ZONE_FINAL, ACT_XX_FINAL_ZONE)] = NULL, // This doesn't make sense... + [LEVEL_INDEX(ZONE_FINAL, ACT_TRUE_AREA_53)] = CreateStageBg_ZoneFinal_0, + [LEVEL_INDEX(ZONE_FINAL, ACT_BOSS)] = CreateStageBg_Zone1, + [LEVEL_INDEX(ZONE_FINAL, ACT_UNUSED)] = NULL, // + [LEVEL_INDEX(ZONE_UNUSED, ACT_1)] = NULL, + [LEVEL_INDEX(ZONE_UNUSED, ACT_2)] = NULL, +}; + +static const BgUpdate sStageBgUpdateFuncs[NUM_LEVEL_IDS] = { + // Zone 1 + [LEVEL_INDEX(ZONE_1, ACT_1)] = StageBgUpdate_Zone1Acts12, + [LEVEL_INDEX(ZONE_1, ACT_2)] = StageBgUpdate_Zone1Acts12, + [LEVEL_INDEX(ZONE_1, ACT_BOSS)] = StageBgUpdate_Zone1ActBoss, + [LEVEL_INDEX(ZONE_1, ACT_UNUSED)] = StageBgUpdate_Dummy, + + // Zone 2 + [LEVEL_INDEX(ZONE_2, ACT_1)] = StageBgUpdate_Zone2Acts12, + [LEVEL_INDEX(ZONE_2, ACT_2)] = StageBgUpdate_Zone2Acts12, + [LEVEL_INDEX(ZONE_2, ACT_BOSS)] = StageBgUpdate_Zone2ActBoss, + [LEVEL_INDEX(ZONE_2, ACT_UNUSED)] = StageBgUpdate_Dummy, + + // Zone 3 + [LEVEL_INDEX(ZONE_3, ACT_1)] = StageBgUpdate_Zone3Acts12, + [LEVEL_INDEX(ZONE_3, ACT_2)] = StageBgUpdate_Zone3Acts12, + [LEVEL_INDEX(ZONE_3, ACT_BOSS)] = StageBgUpdate_Zone3ActBoss, + [LEVEL_INDEX(ZONE_3, ACT_UNUSED)] = StageBgUpdate_Dummy, + + // Zone 4 + [LEVEL_INDEX(ZONE_4, ACT_1)] = StageBgUpdate_Zone4Acts12, + [LEVEL_INDEX(ZONE_4, ACT_2)] = StageBgUpdate_Zone4Acts12, + [LEVEL_INDEX(ZONE_4, ACT_BOSS)] = StageBgUpdate_Dummy, + [LEVEL_INDEX(ZONE_4, ACT_UNUSED)] = StageBgUpdate_Dummy, + + // Zone 5 + [LEVEL_INDEX(ZONE_5, ACT_1)] = StageBgUpdate_Zone5Acts12, + [LEVEL_INDEX(ZONE_5, ACT_2)] = StageBgUpdate_Zone5Acts12, + [LEVEL_INDEX(ZONE_5, ACT_BOSS)] = StageBgUpdate_Zone5ActBoss, + [LEVEL_INDEX(ZONE_5, ACT_UNUSED)] = StageBgUpdate_Dummy, + + // Zone 6 + [LEVEL_INDEX(ZONE_6, ACT_1)] = StageBgUpdate_Zone6Acts12, + [LEVEL_INDEX(ZONE_6, ACT_2)] = StageBgUpdate_Zone6Acts12, + [LEVEL_INDEX(ZONE_6, ACT_BOSS)] = StageBgUpdate_Zone6ActBoss, + [LEVEL_INDEX(ZONE_6, ACT_UNUSED)] = StageBgUpdate_Dummy, + + // Zone 7 + [LEVEL_INDEX(ZONE_7, ACT_1)] = StageBgUpdate_Zone7Acts12, + [LEVEL_INDEX(ZONE_7, ACT_2)] = StageBgUpdate_Zone7Acts12, + [LEVEL_INDEX(ZONE_7, ACT_BOSS)] = StageBgUpdate_Zone7ActBoss, + [LEVEL_INDEX(ZONE_7, ACT_UNUSED)] = StageBgUpdate_Dummy, + + // Zone Final + [LEVEL_INDEX(ZONE_FINAL, ACT_XX_FINAL_ZONE)] = StageBgUpdate_ZoneFinalActXX, + [LEVEL_INDEX(ZONE_FINAL, ACT_TRUE_AREA_53)] = StageBgUpdate_ZoneFinalActTA53, + [LEVEL_INDEX(ZONE_FINAL, ACT_BOSS)] = StageBgUpdate_Zone1Acts12, + [LEVEL_INDEX(ZONE_FINAL, ACT_UNUSED)] = StageBgUpdate_Zone2Acts12, + + // Zone Unused + [LEVEL_INDEX(ZONE_UNUSED, ACT_1)] = StageBgUpdate_Zone1Acts12, + [LEVEL_INDEX(ZONE_UNUSED, ACT_2)] = StageBgUpdate_Zone6Acts12, +}; + +static const s8 sStageBgDimensions[NUM_LEVEL_IDS][4] = { + [LEVEL_INDEX(ZONE_1, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_1, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_1, ACT_BOSS)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_1, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_2, ACT_1)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_2, ACT_2)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_2, ACT_BOSS)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_2, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_3, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_3, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_3, ACT_BOSS)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_3, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_4, ACT_1)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_4, ACT_2)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_4, ACT_BOSS)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_4, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_5, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_5, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_5, ACT_BOSS)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_5, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_6, ACT_1)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_6, ACT_2)] = STGBG_SCRN_DIM(512, 256, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_6, ACT_BOSS)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_6, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_7, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_7, ACT_2)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_7, ACT_BOSS)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_7, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_FINAL, ACT_XX_FINAL_ZONE)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_FINAL, ACT_TRUE_AREA_53)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_FINAL, ACT_BOSS)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_FINAL, ACT_UNUSED)] = STGBG_SCRN_DIM(256, 512, 2, CAM_SCREENBASE_BACK_A), + [LEVEL_INDEX(ZONE_UNUSED, ACT_1)] = STGBG_SCRN_DIM(256, 256, 2, CAM_SCREENBASE_BACK_B), + [LEVEL_INDEX(ZONE_UNUSED, ACT_2)] = STGBG_SCRN_DIM(512, 256, 2, CAM_SCREENBASE_BACK_A), +}; +#endif + +void InitCamera(u32 level) +{ + u32 txtSize; + + struct Backgrounds *bgs; + Player *player = &gPlayer; + struct Camera *camera = &gCamera; + const s8 *bgDim = sStageBgDimensions[level]; + + gDispCnt = (DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_1D_MAP); + if (IS_EXTRA_STAGE(level)) { + gDispCnt + = (DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_1); + } + +#if !WIDESCREEN_HACK + gBgCntRegs[1] = BGCNT_TXT256x256 | (BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(CAM_SCREENBASE_MAP_FRONT) | BGCNT_16COLOR | BGCNT_CHARBASE(0)); + gBgCntRegs[2] = BGCNT_TXT256x256 | (BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(CAM_SCREENBASE_MAP_BACK) | BGCNT_16COLOR | BGCNT_CHARBASE(0)); +#else + gBgCntRegs[1] = BGCNT_TXT512x512 | (BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(CAM_SCREENBASE_MAP_FRONT) | BGCNT_16COLOR | BGCNT_CHARBASE(0)); + gBgCntRegs[2] = BGCNT_TXT512x512 | (BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(CAM_SCREENBASE_MAP_BACK) | BGCNT_16COLOR | BGCNT_CHARBASE(0)); +#endif + txtSize = ((STGBG_WIDTH(bgDim) + 0x1F) >> 6 | ((STGBG_HEIGHT(bgDim) + 0x1F) >> 6) << 1) << 0xE; + gBgCntRegs[3] = txtSize | BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(STGBG_SCREENBASE(bgDim)) | BGCNT_CHARBASE(STGBG_CHARBASE(bgDim)); + + if (IS_EXTRA_STAGE(level)) { +#if (GAME == GAME_SA1) + gBgCntRegs[0] + = BGCNT_TXT256x256 | (BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(CAM_SCREENBASE_MAP_BACK) | BGCNT_16COLOR | BGCNT_CHARBASE(0)); + txtSize = ((STGBG_WIDTH(bgDim) + 0x1F) >> 6 | ((STGBG_HEIGHT(bgDim) + 0x1F) >> 6) << 1) << 0xE; + gBgCntRegs[1] = txtSize | BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(STGBG_SCREENBASE(bgDim)) | BGCNT_CHARBASE(STGBG_CHARBASE(bgDim)); +#elif (GAME == GAME_SA2) + gDispCnt = (DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_MODE_1); +#endif + } + + bgs = &gStageBackgroundsRam; + memcpy(&gStageBackgroundsRam.unk40, &gStageCameraBgTemplates[0], sizeof(Background)); + bgs->unk40.tilemapId = TM_LEVEL_METATILES_0(level); + + memcpy(&gStageBackgroundsRam.unk80, &gStageCameraBgTemplates[1], sizeof(Background)); + bgs->unk80.tilemapId = TM_LEVEL_METATILES_1(level); + +#if (GAME == GAME_SA1) + if (IS_EXTRA_STAGE(level)) { + gStageBackgroundsRam.unk80.flags &= ~BACKGROUND_FLAGS_MASK_BG_ID; + } +#endif + + memcpy(&gStageBackgroundsRam.unkC0, &gStageCameraBgTemplates[2], sizeof(Background)); + bgs->unkC0.tilemapId = TM_LEVEL_BG(level); + + bgs->unkC0.graphics.dest = (void *)BG_CHAR_ADDR(STGBG_CHARBASE(bgDim)); + bgs->unkC0.layoutVram = (void *)BG_SCREEN_ADDR(STGBG_SCREENBASE(bgDim)); + bgs->unkC0.targetTilesX = STGBG_WIDTH(bgDim); + bgs->unkC0.targetTilesY = STGBG_HEIGHT(bgDim); + +#if (GAME == GAME_SA1) + if (IS_EXTRA_STAGE(level)) { + gStageBackgroundsRam.unkC0.flags &= ~BACKGROUND_FLAGS_MASK_BG_ID; + gStageBackgroundsRam.unkC0.flags |= BACKGROUND_FLAGS_BG_ID(1); + } + + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = 0xff; + gBgSprites_Unknown2[1][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xff; + gBgSprites_Unknown2[2][3] = 0x20; +#elif (GAME == GAME_SA2) + gUnknown_03004D80[1] = 0; + gUnknown_03002280[1][0] = 0; + gUnknown_03002280[1][1] = 0; + gUnknown_03002280[1][2] = 0xff; + gUnknown_03002280[1][3] = 0x20; + gUnknown_03004D80[2] = 0; + gUnknown_03002280[2][0] = 0; + gUnknown_03002280[2][1] = 0; + gUnknown_03002280[2][2] = 0xff; + gUnknown_03002280[2][3] = 0x20; +#endif + +#if (GAME == GAME_SA1) + if (level == LEVEL_INDEX(ZONE_6, ACT_1)) { + DrawBackground(&bgs->unkC0); + DmaCopy16(3, gStageBackgroundsRam.unkC0.layout, gStageBackgroundsRam.unkC0.layoutVram, 4096); + + gBgCntRegs[3] &= ~BGCNT_SCREENBASE_MASK; + gBgCntRegs[3] |= BGCNT_SCREENBASE(STGBG_SCREENBASE(bgDim) + 2); + gStageBackgroundsRam.unkC0.layoutVram = (void *)((uintptr_t)BG_SCREEN_ADDR(STGBG_SCREENBASE(bgDim) + 2)); + gStageBackgroundsRam.unkC0.unk20 = 0x40; + } +#endif + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + bgs->unk40.flags |= BACKGROUND_UPDATE_ANIMATIONS | BACKGROUND_DISABLE_TILESET_UPDATE; + bgs->unk80.flags |= BACKGROUND_UPDATE_ANIMATIONS | BACKGROUND_DISABLE_TILESET_UPDATE; + } + +#if (GAME == GAME_SA1) + if (IS_EXTRA_STAGE(level)) { + DrawBackground(&bgs->unk80); + DrawBackground(&bgs->unkC0); + } else { + DrawBackground(&bgs->unk40); + DrawBackground(&bgs->unk80); + DrawBackground(&bgs->unkC0); + } +#elif (GAME == GAME_SA2) + if (!IS_EXTRA_STAGE(level)) { + DrawBackground(&bgs->unk40); + DrawBackground(&bgs->unk80); + DrawBackground(&bgs->unkC0); + } +#endif + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gRefCollision = gCollisionTable[level]; + } else { + gRefCollision = *(Collision **)(EWRAM_START + 0x33004); + } + + camera->minY = 0; + camera->maxY = gRefCollision->pxHeight; + camera->minX = 0; + camera->maxX = gRefCollision->pxWidth; + +#if (GAME == GAME_SA1) + camera->sa2__unk10 = I(gPlayer.qWorldX) - DISPLAY_CENTER_X; + camera->x = I(gPlayer.qWorldX) - DISPLAY_CENTER_X; + camera->sa2__unk14 = (I(gPlayer.qWorldY) + camera->sa2__unk4C) - (DISPLAY_CENTER_Y + 4); + camera->y = (I(gPlayer.qWorldY) + camera->sa2__unk4C) - (DISPLAY_CENTER_Y + 4); + + camera->sa2__unk8 = 16; + camera->sa2__unkC = 12; + camera->shiftX = 0; + camera->shiftY = 0; + camera->sa2__unk20 = 0; + camera->sa2__unk24 = 0; + camera->sa2__unk40 = 0; + camera->sa2__unk44 = 8; + camera->sa2__unk48 = 0; + camera->sa2__unk4C = 0; + camera->sa2__unk50 = 0; + camera->sa2__unk52 = 0; + camera->sa2__unk54 = 0; + camera->shakeOffsetX = 0; + camera->shakeOffsetY = 0; + camera->sa2__unk64 = gPlayer.spriteOffsetY - 4; +#elif (GAME == GAME_SA2) + if (IS_BOSS_STAGE(gCurrentLevel)) { + if (IS_EXTRA_STAGE(gCurrentLevel)) { + SuperSonicGetPos(&player->qWorldX, &player->qWorldY); + gBossCameraClampYLower = gBossCameraYClamps[ZONE_FINAL + 1][0]; + gBossCameraClampYUpper = gBossCameraYClamps[ZONE_FINAL + 1][1]; + camera->x = 600; + camera->unk10 = DISPLAY_CENTER_X; + camera->unk14 = 0; + camera->y = 0; + camera->unk64 = -4; + } else { + camera->x = I(player->qWorldX); + // TODO: Handle boss camera restrictions for large screen sizes + // for now we use the original GBA values as otherwise the boss + // goes off the screen (not sure why yet) + camera->unk10 = I(player->qWorldX) - (2 * 240); + camera->y = I(player->qWorldY) - (DISPLAY_CENTER_Y + 4); + camera->unk14 = camera->y; + camera->unk64 = player->spriteOffsetY - 4; + } + } else { + camera->x = I(player->qWorldX) - DISPLAY_CENTER_X; + camera->y = I(player->qWorldY) - (DISPLAY_CENTER_Y + 4); + + if (camera->x < 0) { + camera->x = 0; + } + + if (camera->y < 0) { + camera->y = 0; + } + + camera->unk10 = camera->x; + camera->unk14 = camera->y; + camera->unk64 = player->spriteOffsetY - 4; + } + + camera->unk8 = Q(16); + camera->unkC = 12; + camera->unk56 = 0; + camera->shiftX = 0; + camera->shiftY = 0; + camera->unk20 = 0; + camera->unk24 = 0; + camera->unk40 = 0; + camera->unk44 = 8; + camera->unk48 = 0; + camera->unk4C = 0; + camera->unk50 = 0; + camera->unk52 = 0; + camera->unk54 = 0; + camera->shakeOffsetX = 0; + camera->shakeOffsetY = 0; +#endif + + camera->movementTask = TaskCreate(Task_CallUpdateCamera, 0, 0xF00, 0, TaskDestructor_Camera); + + camera->fnBgUpdate = sStageBgUpdateFuncs[level]; + + if (sStageBgInitProcedures[level] != NULL) { + sStageBgInitProcedures[level](); + } +} + +// Only need to use the original value for these zones +#define DISPLAY_WIDTH_FOR_BOSS_TAS \ + ((LEVEL_TO_ZONE(gCurrentLevel) == ZONE_2 || LEVEL_TO_ZONE(gCurrentLevel) == ZONE_6) ? (240 / 2) : DISPLAY_CENTER_X) + +void UpdateCamera(void) +{ + Player *player = &gPlayer; + struct Camera *camera = &gCamera; + s32 newX, newY; + +#if DEBUG + if (gInput & L_BUTTON) { + s32 speed = Q(10); + if (gInput & DPAD_DOWN) + gPlayer.qWorldY += speed; + if (gInput & DPAD_UP) + gPlayer.qWorldY -= speed; + if (gInput & DPAD_RIGHT) + gPlayer.qWorldX += speed; + if (gInput & DPAD_LEFT) + gPlayer.qWorldX -= speed; + } +#endif + + newX = camera->x; + newY = camera->y; + +#if (GAME == GAME_SA2) + camera->dx = camera->x; + camera->dy = camera->y; +#endif + + newX = CLAMP(newX, camera->minX, camera->maxX - (DISPLAY_WIDTH + 1)); + newY = CLAMP(newY, camera->minY, camera->maxY - (DISPLAY_HEIGHT + 1)); + +#if (GAME == GAME_SA2) + if (IS_BOSS_STAGE(gCurrentLevel)) { + s32 delta, playerY; + if (!IS_ALIVE(player)) { + if (camera->fnBgUpdate != NULL) { + camera->fnBgUpdate(gCamera.x, gCamera.y); + } + return; + } + + if (IS_EXTRA_STAGE(gCurrentLevel)) { + SuperSonicGetPos(&player->qWorldX, &player->qWorldY); + } + + camera->sa2__unk20 += BOSS_CAM_FRAME_DELTA_PIXELS; + newX += BOSS_CAM_FRAME_DELTA_PIXELS; + +// Most TASes were written with the expection that +// the player gets pushed forwards when touching the boss +// and the camera is moving (due to a physics bug). +// So we need to emulate that behaviour on some specific +// levels +#if TAS_TESTING && TAS_TESTING_WIDESCREEN_HACK && DISPLAY_WIDTH > 240 + if (newX + (DISPLAY_WIDTH_FOR_BOSS_TAS + 1) < I(player->qWorldX)) +#else + if (newX + (DISPLAY_CENTER_X + 1) < I(player->qWorldX)) +#endif + { + if ((camera->sa2__unk20 + DISPLAY_CENTER_Y) > newX) { + s32 playerScreenX = I(player->qWorldX); +#if TAS_TESTING && TAS_TESTING_WIDESCREEN_HACK && DISPLAY_WIDTH > 240 + playerScreenX -= DISPLAY_WIDTH_FOR_BOSS_TAS; +#else + playerScreenX -= DISPLAY_CENTER_X; +#endif + camera->shiftX = playerScreenX - newX; + } else { + newX = (camera->sa2__unk20 + DISPLAY_CENTER_Y); + camera->shiftX = 0; + } + } else { + camera->shiftX = 0; + if ((newX + 96) > I(player->qWorldX)) { + newX = I(player->qWorldX); + newX -= 96; + if (newX < camera->sa2__unk20) { + newX = camera->sa2__unk20; + } + } + } + + playerY = I(player->qWorldY); + delta = playerY - newY; + if (IS_EXTRA_STAGE(gCurrentLevel)) { + if (delta <= 48) { + s32 temp = newY - 48; + newY = delta + temp; + camera->shiftY = 0; + } else if (delta >= (gBossCameraClampYUpper - 208)) { + s32 temp = newY - 112; + newY = delta + temp; + camera->shiftY = 0; + } + } else { + if (delta <= 48) { + s32 temp = newY - 48; + newY = delta + temp; + camera->shiftY = 0; + } else { + newY += 2; + } + } + newY = CLAMP(newY, gBossCameraClampYLower, gBossCameraClampYUpper - DISPLAY_HEIGHT); + + newX = newX + camera->shiftX; + newY = newY + camera->shiftY; + newX += camera->shakeOffsetX; + newY += camera->shakeOffsetY; + + } else // if !IS_BOSS_STAGE(gCurrentLevel) -> +#endif + { + if (camera->sa2__unk40 != 0) { + camera->sa2__unk40--; + } else { + s32 unk64, temp8; +#if (GAME == GAME_SA1) + if (IS_MULTI_PLAYER) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[camera->spectatorTarget]); + + if (!(camera->sa2__unk50 & 0x1)) { + camera->sa2__unk10 = (mpp->pos.x + camera->shiftX) - DISPLAY_CENTER_X; + } + + if (!(camera->sa2__unk50 & 2)) { + unk64 = camera->sa2__unk64; + temp8 = mpp->unk58[0] - 4; + if (GRAVITY_IS_INVERTED) { + temp8 = -temp8; + } + + if (unk64 != temp8) { + if (unk64 < temp8) { + unk64 += 5; + if (unk64 > temp8) { + unk64 = temp8; + } + } else { + unk64 -= 5; + if (unk64 < temp8) { + unk64 = temp8; + } + } + camera->sa2__unk64 = unk64; + } + + camera->sa2__unk14 = ((mpp->pos.y) + camera->shiftY) - DISPLAY_CENTER_Y + camera->sa2__unk4C + unk64; + } + } else +#elif (GAME == GAME_SA2) + camera->unk14 = I(player->qWorldY) + camera->shiftY - DISPLAY_CENTER_Y + camera->unk4C + unk64; +#endif + { + if (!(camera->sa2__unk50 & 1)) { + s16 airSpeedX = player->qSpeedAirX; + camera->sa2__unk10 = I(player->qWorldX) + camera->shiftX - DISPLAY_CENTER_X; +#if (GAME == GAME_SA2) + camera->unk56 = (airSpeedX + (camera->unk56 * 15)) >> 4; + camera->unk10 += (camera->unk56 >> 5); +#endif + } + if (!(camera->sa2__unk50 & 2)) { + unk64 = camera->sa2__unk64; + temp8 = player->spriteOffsetY - 4; + if (GRAVITY_IS_INVERTED) { + temp8 = -temp8; + } + + if (unk64 != temp8) { + if (unk64 < temp8) { + unk64 += 5; + if (unk64 > temp8) { + unk64 = temp8; + } + } else { + unk64 -= 5; + if (unk64 < temp8) { + unk64 = temp8; + } + } + camera->sa2__unk64 = unk64; + } + +#if (GAME == GAME_SA1) + camera->sa2__unk14 = I(player->qWorldY) + camera->shiftY - DISPLAY_CENTER_Y + camera->sa2__unk4C + unk64; +#elif (GAME == GAME_SA2) + camera->unk14 = I(player->qWorldY) + camera->shiftY - DISPLAY_CENTER_Y + camera->unk4C + unk64; +#endif + } + } + } + + if ((camera->sa2__unk10 - newX) > camera->sa2__unk44) { + s32 temp = camera->sa2__unk10 - newX - camera->sa2__unk44; + s32 temp2 = CAM_UNK8_INT(camera->sa2__unk8); + if (temp2 > temp) { + temp2 = temp; + } + newX += temp2; + } else if ((camera->sa2__unk10 - newX) < -camera->sa2__unk44) { + s32 temp = (camera->sa2__unk10 - newX) + camera->sa2__unk44; + s32 temp2 = -CAM_UNK8_INT(camera->sa2__unk8); + if (temp2 < temp) { + temp2 = temp; + } + + newX += temp2; + } + + newX = CLAMP(newX, camera->minX, camera->maxX - DISPLAY_WIDTH); + +#if (GAME == GAME_SA1) + if ((player->moveState & MOVESTATE_IN_AIR) && (player->character != CHARACTER_KNUCKLES || player->sa2__unk61 != 9)) +#elif (GAME == GAME_SA2) + if (camera->unk8 < Q(16)) { + camera->unk8 += Q(0.125); + } + + if ((player->moveState & MOVESTATE_IN_AIR) && (player->character != CHARACTER_KNUCKLES || player->unk61 != 9)) +#endif + { + camera->sa2__unk48 += 4; + camera->sa2__unk48 = MIN(camera->sa2__unk48, 24); + } else { + camera->sa2__unk48 -= 4; + camera->sa2__unk48 = MAX(camera->sa2__unk48, 0); + } + + if ((camera->sa2__unk14 - newY) > camera->sa2__unk48) { + newY += (camera->sa2__unkC > ((camera->sa2__unk14 - newY) - camera->sa2__unk48)) + ? ((camera->sa2__unk14 - newY) - camera->sa2__unk48) + : camera->sa2__unkC; + } else if ((camera->sa2__unk14 - newY) < -(camera->sa2__unk48)) { + newY += (-camera->sa2__unkC < (camera->sa2__unk14 - newY) + camera->sa2__unk48) + ? (camera->sa2__unk14 - newY) + camera->sa2__unk48 + : -camera->sa2__unkC; + } + + newY = CLAMP(newY, camera->minY, camera->maxY - DISPLAY_HEIGHT); + + // maybe a macro, these values are already clamped + newX = CLAMP(newX, camera->minX, camera->maxX - DISPLAY_WIDTH); + newY = CLAMP(newY, camera->minY, camera->maxY - DISPLAY_HEIGHT); + newX = newX + camera->shakeOffsetX; + newY = newY + camera->shakeOffsetY; + } + + camera->x = newX; + camera->y = newY; + +#if (GAME == GAME_SA2) + camera->dx -= newX; + camera->dy -= newY; +#endif + + RenderMetatileLayers(newX, newY); + + if (camera->fnBgUpdate != NULL) { + camera->fnBgUpdate(newX, newY); + } +} + +static void RenderMetatileLayers(s32 x, s32 y) +{ + Background *layer; + +#if (GAME == GAME_SA1) + if (IS_EXTRA_STAGE(gCurrentLevel)) { + s32 scrollX = (x + gStageTime * 8); + // 2688(0xA80) = + // 3072 - 600 + // Moon Zone Pixel Width - (4 * Metatile_Width) + const s32 scrollMaxX = (28 * 96); + + if (scrollX - 72 >= scrollMaxX) { + scrollX -= 72; + scrollX = Mod(scrollX, scrollMaxX) + 72; + } + + x = scrollX; + if (IS_EXTRA_STAGE(gCurrentLevel)) { + layer = &gStageBackgroundsRam.unk80; + gBgScrollRegs[0][0] = x % 8u; + gBgScrollRegs[0][1] = y % 8u; + layer->scrollX = x; + layer->scrollY = y; + DrawBackground(layer); + return; + } + } +#endif + + if (!IS_EXTRA_STAGE(gCurrentLevel)) { + layer = &gStageBackgroundsRam.unk40; + gBgScrollRegs[1][0] = x % 8u; + gBgScrollRegs[1][1] = y % 8u; + layer->scrollX = x; + layer->scrollY = y; + DrawBackground(layer); + UpdateBgAnimationTiles(layer); + + layer = &gStageBackgroundsRam.unk80; + gBgScrollRegs[2][0] = x % 8u; + gBgScrollRegs[2][1] = y % 8u; + layer->scrollX = x; + layer->scrollY = y; + DrawBackground(layer); + } +} diff --git a/sa1/src/game/stage/camera_destroy.c b/sa1/src/game/stage/camera_destroy.c new file mode 100644 index 0000000000..c833ebc006 --- /dev/null +++ b/sa1/src/game/stage/camera_destroy.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "constants/zones.h" + +static void Task_CallUpdateCameraInternal(void); + +void DestroyCameraMovementTask(void) +{ + TaskDestroy(gCamera.movementTask); + gCamera.movementTask = NULL; +} + +void TaskDestructor_Camera(struct Task *unused) +{ + s32 i; + gCamera.movementTask = NULL; + + for (i = 0; i < NUM_BACKGROUNDS; i++) { + gBgScrollRegs[i][0] = 0; + gBgScrollRegs[i][1] = 0; + } + + if (IS_EXTRA_STAGE(gCurrentLevel) && (gFlags & FLAGS_40)) { + gIntrTable[INTR_INDEX_VCOUNT] = gIntrTableTemplate[INTR_INDEX_VCOUNT]; + gFlags &= ~FLAGS_40; + } + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; +} + +void Task_CallUpdateCamera(void) +{ + gDispCnt |= (DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON); + +#if (GAME == GAME_SA2) + if (IS_EXTRA_STAGE(gCurrentLevel)) { + gDispCnt &= ~DISPCNT_BG3_ON; + } +#endif + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gDispCnt &= ~DISPCNT_WIN0_ON; + } + + gCurTask->main = Task_CallUpdateCameraInternal; +} + +static void Task_CallUpdateCameraInternal(void) +{ + UpdateCamera(); + sa2__gUnknown_030054B8 = 0x4; +} \ No newline at end of file diff --git a/sa1/src/game/stage/dust_effect_braking.c b/sa1/src/game/stage/dust_effect_braking.c new file mode 100644 index 0000000000..220bec1578 --- /dev/null +++ b/sa1/src/game/stage/dust_effect_braking.c @@ -0,0 +1,142 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/stage/dust_effect_braking.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" + +DustEffectBraking ALIGNED(8) gDustEffectBrakingTask = {}; + +void Task_BrakingDustEffect(void); +void TaskDestructor_BrakingDustEffectRelated(struct Task *); +void Task_BrakingDustEffectRelated(void); +void TaskDestructor_BrakingDustEffect(struct Task *); + +/* This generates the Dust Clouds that appear while running and then braking by + * holding the DPAD in the other direction. */ + +#if (GAME == GAME_SA2) +#define BRAKING_DUST_EFFECT_DTOR TaskDestructor_BrakingDustEffect +#else +#define BRAKING_DUST_EFFECT_DTOR NULL +#endif + +struct Task *CreateBrakingDustEffect(s32 x, s32 y) +{ + if (gDustEffectBrakingTask.t == NULL || gDustEffectBrakingTask.unk0 == 0) { + return NULL; + } else { + struct Task *t; + BrakeDustEffect *bde; + Player *p; + Sprite *s; + + gDustEffectBrakingTask.unk0--; + + t = TaskCreate(Task_BrakingDustEffect, sizeof(BrakeDustEffect), 0x4001, 0, BRAKING_DUST_EFFECT_DTOR); + + bde = TASK_DATA(t); + bde->x = x; + bde->y = y; + bde->unk4 = 0; + bde->unk6 = 0; + + s = &bde->s; + p = &gPlayer; + +#if (GAME == GAME_SA2) + if (p->moveState & MOVESTATE_GOAL_REACHED) { + s->graphics.dest = VramMalloc(15); + s->graphics.anim = SA2_ANIM_BRAKING_DUST_EFFECT; + s->variant = 0; + s->frameFlags = (SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG(X_FLIP, 1)); + } else +#endif + { + s->graphics.dest = VRAM_RESERVED_DUST_EFFECT_BRAKING; +#if (GAME == GAME_SA1) + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SMALL_DUST_PARTICLE; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_SMALL_DUST_PARTICLE; + s->variant = 0; +#endif + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->frameFlags |= ((u32)PseudoRandom32() & (SPRITE_FLAG_MASK_Y_FLIP | SPRITE_FLAG_MASK_X_FLIP)); + } + +#if (GAME == GAME_SA2) + s->graphics.size = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; +#endif + return t; + } +} + +void Task_BrakingDustEffect(void) +{ + DustEffectBraking *unk = &gDustEffectBrakingTask; + BrakeDustEffect *bde = TASK_DATA(gCurTask); + Sprite *s = &bde->s; + + if (unk->t == 0 || (s->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER)) { + unk->unk0++; + TaskDestroy(gCurTask); + return; + } else { + s->x = bde->x - gCamera.x; + s->y = bde->y - gCamera.y; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + bde->x += bde->unk4; + bde->y += bde->unk6; + } +} + +void CreateBrakingDustEffectRelatedTask(void) +{ + if (gDustEffectBrakingTask.t == NULL) { + struct Task *t = TaskCreate(Task_BrakingDustEffectRelated, 0, 0x4000, 0, TaskDestructor_BrakingDustEffectRelated); + gDustEffectBrakingTask.t = t; + gDustEffectBrakingTask.unk0 = 20; + } +} + +void DestroyBrakingDustEffectRelatedTask(void) +{ + if (gDustEffectBrakingTask.t != NULL) { + TaskDestroy(gDustEffectBrakingTask.t); + gDustEffectBrakingTask.t = NULL; + } +} + +void TaskDestructor_BrakingDustEffectRelated(struct Task *t) { gDustEffectBrakingTask.t = NULL; } + +void Task_BrakingDustEffectRelated(void) { } + +#if (GAME == GAME_SA2) +// This destructor only gets used in SA2 for the after-goal braking effect. +void TaskDestructor_BrakingDustEffect(struct Task *t) +{ + BrakeDustEffect *bde = TASK_DATA(t); + Sprite *s = &bde->s; + + if (s->graphics.anim == SA2_ANIM_BRAKING_DUST_EFFECT) { + VramFree(bde->s.graphics.dest); + } +} +#endif diff --git a/sa1/src/game/stage/dust_effect_spindash.c b/sa1/src/game/stage/dust_effect_spindash.c new file mode 100644 index 0000000000..c49e953da7 --- /dev/null +++ b/sa1/src/game/stage/dust_effect_spindash.c @@ -0,0 +1,172 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "task.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/multiplayer/mp_player.h" + +#include "constants/animations.h" + +typedef struct { + Sprite s; +} DustEffect; + +void Task_SpindashDustEffect(void); +void Task_SpindashDustEffectBig(void); +void TaskDestructor_SpindashDustEffect(struct Task *); + +struct Task *CreateSpindashDustEffect() +{ + struct Task *t = TaskCreate(Task_SpindashDustEffect, sizeof(DustEffect), 0x4001, 0, TaskDestructor_SpindashDustEffect); + + DustEffect *sde = TASK_DATA(t); + Sprite *s = &sde->s; + s->graphics.dest = VramMalloc(20); + s->graphics.size = 0; +#if (GAME == GAME_SA1) + GET_SPRITE_ANIM(s) = SA1_ANIM_SPINDASH_DUST_EFFECT; +#elif (GAME == GAME_SA2) + GET_SPRITE_ANIM(s) = SA2_ANIM_SPINDASH_DUST_EFFECT; +#endif + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +void Task_SpindashDustEffect(void) +{ + struct Camera *cam; + Player *p = &gPlayer; + s32 offY; + + if (p->spriteTask == NULL || (p->moveState & (MOVESTATE_SPINDASH | MOVESTATE_DEAD)) != MOVESTATE_SPINDASH) { + TaskDestroy(gCurTask); + return; + } else { + DustEffect *sde = TASK_DATA(gCurTask); + Sprite *s = &sde->s; + + if (p->qSpindashAccel > Q(2.0)) { +#if (GAME == GAME_SA1) + GET_SPRITE_ANIM(s) = SA1_ANIM_SPINDASH_DUST_EFFECT_BIG; +#elif (GAME == GAME_SA2) + GET_SPRITE_ANIM(s) = SA2_ANIM_SPINDASH_DUST_EFFECT_BIG; +#endif + s->variant = 0; + s->prevVariant = -1; + gCurTask->main = Task_SpindashDustEffectBig; + } + + cam = &gCamera; + offY = p->spriteOffsetY; + + if (GRAVITY_IS_INVERTED) { + offY = -offY; + } + +#if (GAME == GAME_SA2) + if (IS_MULTI_PLAYER) { + struct Task *t = gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]; + MultiplayerPlayer *mpp = TASK_DATA(t); + s->x = (mpp->pos.x - cam->x); + s->y = ((mpp->pos.y + offY) - cam->y); + } else +#endif + { + s->x = I(p->qWorldX) - cam->x; + s->y = (I(p->qWorldY) + offY) - cam->y; + } + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + } + + if (GRAVITY_IS_INVERTED) { + s->frameFlags |= SPRITE_FLAG_MASK_Y_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_Y_FLIP; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void Task_SpindashDustEffectBig(void) +{ + struct Camera *cam; + Player *p = &gPlayer; + s32 offY; + + if (p->spriteTask == NULL || (p->moveState & (MOVESTATE_SPINDASH | MOVESTATE_DEAD)) != MOVESTATE_SPINDASH) { + TaskDestroy(gCurTask); + return; + } else { + DustEffect *sde = TASK_DATA(gCurTask); + Sprite *s = &sde->s; + + if (p->qSpindashAccel <= Q(2.0)) { +#if (GAME == GAME_SA1) + GET_SPRITE_ANIM(s) = SA1_ANIM_SPINDASH_DUST_EFFECT; +#elif (GAME == GAME_SA2) + GET_SPRITE_ANIM(s) = SA2_ANIM_SPINDASH_DUST_EFFECT; +#endif + s->variant = 0; + s->prevVariant = -1; + gCurTask->main = Task_SpindashDustEffect; + } + + cam = &gCamera; + offY = p->spriteOffsetY; + + if (GRAVITY_IS_INVERTED) { + offY = -offY; + } + +#if (GAME == GAME_SA2) + if (IS_MULTI_PLAYER) { + struct Task *t = gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]; + MultiplayerPlayer *mpp = TASK_DATA(t); + s->x = (mpp->pos.x - cam->x); + s->y = ((mpp->pos.y + offY) - cam->y); + } else +#endif + { + s->x = I(p->qWorldX) - cam->x; + s->y = (I(p->qWorldY) + offY) - cam->y; + } + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + } + + if (GRAVITY_IS_INVERTED) { + s->frameFlags |= SPRITE_FLAG_MASK_Y_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_Y_FLIP; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void TaskDestructor_SpindashDustEffect(struct Task *t) +{ + DustEffect *sde = TASK_DATA(t); + VramFree(sde->s.graphics.dest); +} diff --git a/sa1/src/game/stage/grind_effect_1.c b/sa1/src/game/stage/grind_effect_1.c new file mode 100644 index 0000000000..f63d9fbee5 --- /dev/null +++ b/sa1/src/game/stage/grind_effect_1.c @@ -0,0 +1,79 @@ +#include "global.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "core.h" +#include "malloc_vram.h" +#include "task.h" + +#include "constants/animations.h" + +typedef struct { + Sprite s; +} GrindEffect; + +void Task_GrindEffect(void); +void TaskDestructor_GrindEffect(struct Task *); + +// NOTE: This effect is unused in SA2. +// It is the code for SA1's Grind effect + +struct Task *CreateGrindEffect() +{ + struct Task *t = TaskCreate(Task_GrindEffect, sizeof(GrindEffect), 0x2001, 0, TaskDestructor_GrindEffect); + + GrindEffect *spark = TASK_DATA(t); + Sprite *s = &spark->s; +#if (GAME == GAME_SA1) + s->graphics.dest = ALLOC_TILES(SA1_ANIM_GRIND_EFFECT); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_GRIND_EFFECT; +#elif (GAME == GAME_SA2) + s->graphics.dest = ALLOC_TILES(SA2_ANIM_GRIND_EFFECT); + s->graphics.size = 0; + s->graphics.anim = SA2_ANIM_GRIND_EFFECT; +#endif + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +void Task_GrindEffect(void) +{ + Player *p = &gPlayer; + + if (p->spriteTask == NULL || !(p->moveState & MOVESTATE_1000000)) { + TaskDestroy(gCurTask); + return; +#if (GAME == GAME_SA1) + } else if ((p->anim == SA1_CHAR_ANIM_GRINDING) && (p->variant == 1)) { +#elif (GAME == GAME_SA2) + } else if ((p->anim == SA2_CHAR_ANIM_GRINDING) && (p->variant == 0)) { +#endif + GrindEffect *spark = TASK_DATA(gCurTask); + Sprite *s = &spark->s; + struct Camera *cam = &gCamera; + s->x = I(p->qWorldX) - cam->x; + s->y = (I(p->qWorldY) + p->spriteOffsetY) - cam->y; + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } +} + +void TaskDestructor_GrindEffect(struct Task *t) +{ + GrindEffect *spark = TASK_DATA(t); + VramFree(spark->s.graphics.dest); +} \ No newline at end of file diff --git a/sa1/src/game/stage/item_tasks.c b/sa1/src/game/stage/item_tasks.c new file mode 100644 index 0000000000..35f3eeb97f --- /dev/null +++ b/sa1/src/game/stage/item_tasks.c @@ -0,0 +1,445 @@ +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/stage/mp_sprite_task.h" +#include "game/stage/item_tasks.h" +#include "game/multiplayer/mp_player.h" + +#include "constants/animations.h" +#include "constants/songs.h" + +typedef struct { + Sprite s; + u8 unk30; + u8 filler31[7]; +} ItemTask; /* size: 0x38 */ + +void Task_Item_Shield_Normal(void); +void Task_Item_Invincibility(void); +void Task_Item_Shield_Magnetic(void); +void Task_Item_Confusion(void); +void TaskDestructor_ItemTasks(struct Task *); + +#define ITEMTASK_GET_PLAYER_NUM(_task) \ + ({ \ + ItemTask *it = TASK_DATA(_task); \ + it->unk30; \ + }) + +struct Task *CreateItemTask_Shield_Normal(s8 playerID) +{ + struct Task *t = TaskCreate(Task_Item_Shield_Normal, sizeof(ItemTask), 0x4001, 0, TaskDestructor_ItemTasks); + ItemTask *item = TASK_DATA(t); + Sprite *s = &item->s; + + item->unk30 = playerID; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SHIELD_NORMAL); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SHIELD_NORMAL; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + m4aSongNumStart(SE_ACTIVATE_SHIELD); + + return t; +} + +struct Task *CreateItemTask_Invincibility(s8 playerID) +{ + struct Task *t = TaskCreate(Task_Item_Invincibility, sizeof(ItemTask), 0x4001, 0, TaskDestructor_ItemTasks); + ItemTask *item = TASK_DATA(t); + Sprite *s = &item->s; + + item->unk30 = playerID; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_INVINCIBILITY); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_INVINCIBILITY; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +struct Task *CreateItemTask_Shield_Magnetic(s8 playerID) +{ + struct Task *t = TaskCreate(Task_Item_Shield_Magnetic, sizeof(ItemTask), 0x4001, 0, TaskDestructor_ItemTasks); + ItemTask *item = (ItemTask *)TASK_DATA(t); + + item->unk30 = playerID; + + { + ItemTask *item2 = (ItemTask *)TASK_DATA(t); + Sprite *s = &item2->s; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SHIELD_MAGNETIC); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_SHIELD_MAGNETIC; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + + m4aSongNumStart(SE_ACTIVATE_SHIELD); + + return t; +} + +struct Task *CreateItemTask_Confusion(s8 playerID) +{ + struct Task *t = TaskCreate(Task_Item_Confusion, sizeof(ItemTask), 0x4001, 0, TaskDestructor_ItemTasks); + ItemTask *item = TASK_DATA(t); + + item->unk30 = playerID; + + { + ItemTask *item2 = (ItemTask *)TASK_DATA(t); + Sprite *s = &item2->s; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_CONFUSION); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_CONFUSION; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + + return t; +} + +// TODO: Fake-match +// (100.00%) https://decomp.me/scratch/RHonJ +void Task_Item_Shield_Normal(void) +{ + struct Task *t = gCurTask; + s8 pid = ITEMTASK_GET_PLAYER_NUM(t); + s32 pid2; + + ItemTask *item = TASK_DATA(t); + struct Camera *cam = &gCamera; + Player *p; +#ifndef NON_MATCHING + register bool32 b asm("r3"); +#else + bool32 b; +#endif + + if (IS_MULTI_PLAYER) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[pid]); + + if (!(mpp->unk57 & PLAYER_ITEM_EFFECT__SHIELD_NORMAL)) { + TaskDestroy(t); + return; + } + + item->s.x = mpp->pos.x - cam->x; + item->s.y = mpp->pos.y - cam->y; + + item->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + item->s.frameFlags |= mpp->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } else { + p = &PLAYER(pid); + + if ((p->itemEffect & (PLAYER_ITEM_EFFECT__SHIELD_NORMAL)) == 0) { + TaskDestroy(t); + return; + } + + if (!(p->itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + s32 screenX, screenY; + + screenX = I(p->qWorldX) - (u16)cam->x; + item->s.x = screenX + p->SA2_LABEL(unk7C); + + screenY = I(p->qWorldY) - (u16)cam->y; + item->s.y = screenY; + + item->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + + item->s.frameFlags |= p->spriteInfoBody->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } else { + return; + } + } + + UpdateSpriteAnimation(&item->s); + + pid2 = pid; + b = 1; + pid2 &= b; + + if (((gStageTime & 0x2) && (pid2 != b)) || (!(gStageTime & 0x2) && (pid2 != 0))) { + DisplaySprite(&item->s); + } +} + +// TODO: Fake-match +// (100.00%) https://decomp.me/scratch/zjlaf +void Task_Item_Shield_Magnetic(void) +{ + struct Task *t = gCurTask; + s8 pid = ITEMTASK_GET_PLAYER_NUM(t); + s32 pid2; + + ItemTask *item = TASK_DATA(t); + struct Camera *cam = &gCamera; + Player *p; +#ifndef NON_MATCHING + register bool32 b asm("r3"); +#else + bool32 b; +#endif + + if (IS_MULTI_PLAYER) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[pid]); + + if (!(mpp->unk57 & PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC)) { + TaskDestroy(t); + return; + } + + item->s.x = mpp->pos.x - cam->x; + item->s.y = mpp->pos.y - cam->y; + + item->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + item->s.frameFlags |= mpp->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } else { + p = &PLAYER(pid); + + if ((p->itemEffect & (PLAYER_ITEM_EFFECT__SHIELD_MAGNETIC)) == 0) { + TaskDestroy(t); + return; + } + + if (!(p->itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + s32 screenX, screenY; + + screenX = I(p->qWorldX) - (u16)cam->x; + item->s.x = screenX + p->SA2_LABEL(unk7C); + + screenY = I(p->qWorldY) - (u16)cam->y; + item->s.y = screenY; + + item->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + + item->s.frameFlags |= p->spriteInfoBody->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } else { + return; + } + } + + UpdateSpriteAnimation(&item->s); + + pid2 = pid; + b = 1; + pid2 &= b; + + if (((gStageTime & 0x2) && (pid2 != b)) || (!(gStageTime & 0x2) && (pid2 != 0))) { + DisplaySprite(&item->s); + } +} + +void sub_804BABC(void) +{ + ItemTask *item = TASK_DATA(gCurTask); + s8 pid = ITEMTASK_GET_PLAYER_NUM(gCurTask); + Sprite *s = &item->s; + struct Camera *cam = &gCamera; + s16 screenX, screenY; + u32 r2 = 0; + + if (s->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + TaskDestroy(gCurTask); + return; + } + + if (IS_MULTI_PLAYER) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[pid]); + screenX = mpp->pos.x; + screenY = mpp->pos.y; + + r2 |= mpp->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } else { + Player *p = &PLAYER(pid); + screenX = I(p->qWorldX) + p->SA2_LABEL(unk7C); + screenY = I(p->qWorldY); + + r2 |= p->spriteInfoBody->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } + + s->x = screenX - cam->x; + s->y = screenY - cam->y; + + s->frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + s->frameFlags |= r2; + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +// (98.30%) https://decomp.me/scratch/R97rp +NONMATCH("asm/non_matching/game/stage/Item_Tasks__Task_Item_Invincibility.inc", void Task_Item_Invincibility(void)) +{ + struct Task *t = gCurTask; + s32 pid = ITEMTASK_GET_PLAYER_NUM(t); + + ItemTask *item = TASK_DATA(t); + struct Camera *cam = &gCamera; + bool32 b; + s16 screenX, screenY; + u32 flags; + + if (IS_MULTI_PLAYER) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[(s8)pid]); + + if (!(mpp->unk57 & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + TaskDestroy(t); + return; + } + + screenX = mpp->pos.x; + screenY = mpp->pos.y; + + flags = mpp->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } else { + Player *p = &PLAYER(pid); + + if (!(p->itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY)) { + TaskDestroy(t); + return; + } + + screenX = I(p->qWorldX) + p->SA2_LABEL(unk7C); + screenY = I(p->qWorldY); + + flags = p->spriteInfoBody->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + } + + item->s.x = screenX - cam->x; + item->s.y = screenY - cam->y; + item->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + item->s.frameFlags |= flags; + + if ((gStageTime & 0x7) == 0) { + // Create random small "sparkle" effects during invincibility + struct Task *t; + MultiplayerSpriteTask *mpSprite; + Sprite *sprInvin; + s16 randA, randB; + + randA = ((u32)PseudoRandom32() >> 8) % 16u; +#ifndef NON_MATCHING + asm("" ::"r"(randA)); +#endif + randB = ((u32)PseudoRandom32() >> 8) % 256u; + + t = CreateMultiplayerSpriteTask(screenX + I(COS_24_8(randB * 4) * randA), screenY + I(SIN_24_8(randB * 4) * randA), 0, 0, + Task_UpdateMpSpriteTaskSprite, TaskDestructor_MultiplayerSpriteTask); + mpSprite = TASK_DATA(t); + sprInvin = &mpSprite->s; + sprInvin->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_INVINCIBILITY, 1); + sprInvin->graphics.anim = SA1_ANIM_INVINCIBILITY; + sprInvin->variant = 1; + sprInvin->oamFlags = SPRITE_OAM_ORDER(8); + sprInvin->frameFlags = SPRITE_FLAG(PRIORITY, 2); + } + + UpdateSpriteAnimation(&item->s); + + { +#ifndef NON_MATCHING + register u32 bOrig asm("r3") = 1; +#else + u32 bOrig = 1; +#endif + b = bOrig; + // ClearBit(b, pid); + b &= ~pid; + + if (((gStageTime & 0x2) && (b != bOrig)) || (!(gStageTime & 0x2) && (b != 0))) { + DisplaySprite(&item->s); + } + } +} +END_NONMATCH + +void Task_Item_Confusion(void) +{ + s8 param = ITEMTASK_GET_PLAYER_NUM(gCurTask); + ItemTask *item = TASK_DATA(gCurTask); + Sprite *s = &item->s; + u32 b; + + struct Camera *cam = &gCamera; + + if (IS_MULTI_PLAYER) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[param]); + + if (!(mpp->unk57 & (0x40 | 0x10))) { + TaskDestroy(gCurTask); + return; + } + + s->x = mpp->pos.x - cam->x; + s->y = mpp->pos.y - cam->y; + s->frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + s->frameFlags |= mpp->s.frameFlags & SPRITE_FLAG_MASK_PRIORITY; + + if (GRAVITY_IS_INVERTED) { + s->frameFlags |= 0x800; + } else { + s->frameFlags &= ~0x800; + } + + UpdateSpriteAnimation(s); + + b = param; + { +#ifndef NON_MATCHING + register u32 one asm("r3") = 1; +#else + u32 one = 1; +#endif + b &= one; + if (((gStageTime & 0x2) && (b != one)) || (!(gStageTime & 0x2) && (b != 0))) { + DisplaySprite(s); + } + } + } else { + TaskDestroy(gCurTask); + return; + } +} + +void TaskDestructor_ItemTasks(struct Task *t) +{ + ItemTask *item = TASK_DATA(t); + VramFree(item->s.graphics.dest); +} diff --git a/sa1/src/game/stage/mp_sprite_task.c b/sa1/src/game/stage/mp_sprite_task.c new file mode 100644 index 0000000000..b7ad050ef8 --- /dev/null +++ b/sa1/src/game/stage/mp_sprite_task.c @@ -0,0 +1,290 @@ +#include "global.h" +#include "malloc_vram.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/mp_sprite_task.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" + +#include "game/stage/stage.h" +#include "game/water_effects.h" +#include "game/multiplayer/mp_player.h" + +#include "constants/animations.h" + +#if (GAME == GAME_SA2) +const u16 sAnimData_StageGoalScoreBonus[][3] = { + { 36, SA2_ANIM_STAGE_GOAL_SCORE_BONUS, 1 }, { 36, SA2_ANIM_STAGE_GOAL_SCORE_BONUS, 2 }, { 36, SA2_ANIM_STAGE_GOAL_SCORE_BONUS, 3 }, + { 36, SA2_ANIM_STAGE_GOAL_SCORE_BONUS, 4 }, { 36, SA2_ANIM_STAGE_GOAL_SCORE_BONUS, 5 }, +}; +#endif + +#if (GAME == GAME_SA2) +// This function was reordered in SA2, it exists twice in this file! +struct Task *CreateMultiplayerSpriteTask(s16 x, s16 y, u8 param2, s8 param3, TaskMain main, TaskDestructor dtor) +{ + struct Task *t = TaskCreate(main, sizeof(MultiplayerSpriteTask), 0x4001, 0, dtor); + + MultiplayerSpriteTask *strc = TASK_DATA(t); + Sprite *s = &strc->s; + + strc->x = x; + strc->y = y; + strc->unk14 = param2; + strc->mpPlayerID = param3; + +#if (GAME == GAME_SA2) + strc->playerAnim = 0; + strc->playerVariant = 0; +#endif + + s->graphics.dest = NULL; + s->graphics.size = 0; + s->graphics.anim = 0; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0; + + return t; +} +#endif + +void Task_UpdateMpSpriteTaskSprite(void) +{ + MultiplayerSpriteTask *ts = TASK_DATA(gCurTask); + Sprite *s = &ts->s; + +#if (GAME == GAME_SA2) + if (!PLAYER_IS_ALIVE) { + TaskDestroy(gCurTask); + return; + } + + if ((ts->unk14 & 0x8) && ((ts->playerAnim != gPlayer.anim) || (ts->playerVariant != gPlayer.variant))) { + TaskDestroy(gCurTask); + return; + } +#endif + + if (s->frameFlags & SPRITE_FLAG_MASK_ANIM_OVER) { + TaskDestroy(gCurTask); + return; + } + + switch (ts->unk14 & 0x3) { + case 0: { + switch (ts->unk14 & 0x30) { + case 0x20: { +#if (GAME == GAME_SA1) + s8 id = ts->mpPlayerID; +#endif + if (IS_MULTI_PLAYER) { +#if (GAME == GAME_SA2) + s8 id = SIO_MULTI_CNT->id; +#endif + struct Task *tmpp = gMultiplayerPlayerTasks[id]; + MultiplayerPlayer *mpp = TASK_DATA(tmpp); +#if (GAME == GAME_SA1) + s->x = mpp->pos.x; + s->y = mpp->pos.y; +#elif (GAME == GAME_SA2) + ts->x = mpp->pos.x; + ts->y = mpp->pos.y; +#endif + } else { + Player *p = &PLAYER(id); + + ts->x = I(p->qWorldX); + ts->y = I(p->qWorldY); + } + } break; + + case 0x10: { + ts->y = gWater.currentWaterLevel; + } break; + } + + { + struct Camera *cam = &gCamera; + s->x = ts->x - cam->x; + s->y = ts->y - cam->y; + } + } break; + + case 1: { + struct Camera *cam = &gCamera; +#if (GAME == GAME_SA1) + s->x = ts->x - cam->sa2__unk52; + s->y = ts->y - cam->sa2__unk54; +#else + s->x = ts->x - cam->unk52; + s->y = ts->y - cam->unk54; +#endif + } break; + + case 2: { + s->x = ts->x; + s->y = ts->y; + } break; + } + + if (ts->unk14 & 0x40) { + if (!(gPlayer.moveState & MOVESTATE_FACING_LEFT)) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + } + } + + if (ts->unk14 & 0x80) { + if (GRAVITY_IS_INVERTED) { + s->frameFlags |= SPRITE_FLAG_MASK_Y_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_Y_FLIP; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +#if (GAME == GAME_SA1) +// This function was reordered in SA2, it exists twice in this file! +// TODO: Rename CreateMultiplayerSpriteTask ? +struct Task *CreateMultiplayerSpriteTask(s16 x, s16 y, u8 param2, s8 param3, TaskMain main, TaskDestructor dtor) +{ + struct Task *t = TaskCreate(main, sizeof(MultiplayerSpriteTask), 0x4001, 0, dtor); + + MultiplayerSpriteTask *strc = TASK_DATA(t); + Sprite *s = &strc->s; + + strc->x = x; + strc->y = y; + strc->unk14 = param2; + strc->mpPlayerID = param3; + +#if (GAME == GAME_SA2) + strc->playerAnim = 0; + strc->playerVariant = 0; +#endif + + s->graphics.dest = NULL; + s->graphics.size = 0; + s->graphics.anim = 0; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0; + + return t; +} +#endif + +#if (GAME == GAME_SA2) +struct Task *CreateStageGoalBonusPointsAnim(s32 x, s32 y, u16 score) +{ + if ((score != 100) && (score != 200) && (score != 300) && (score != 500) && (score != 800)) { + return NULL; + } else { + struct Task *t; + MultiplayerSpriteTask *ts; + Sprite *s; + t = CreateMultiplayerSpriteTask(x, y, 32, 0, Task_UpdateMpSpriteTaskSprite, TaskDestructor_MultiplayerSpriteTask); + ts = TASK_DATA(t); + + switch (score) { + case 100: { + score = 0; + } break; + + case 200: { + score = 1; + } break; + + case 300: { + score = 2; + } break; + + case 500: { + score = 3; + } break; + + case 800: { + score = 4; + } break; + } + + s = &ts->s; + s->graphics.dest = VramMalloc(sAnimData_StageGoalScoreBonus[score][0]); + s->graphics.anim = sAnimData_StageGoalScoreBonus[score][1]; + s->variant = sAnimData_StageGoalScoreBonus[score][2]; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + return t; + } +} + +static inline struct Task *CreateGrindfEffect2Sprite_inline(s16 x, s16 y) +{ + struct Task *t = CreateMultiplayerSpriteTask(x, y, 192, 0, Task_UpdateMpSpriteTaskSprite, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *ts = TASK_DATA(t); + Sprite *s = &ts->s; + + s->graphics.dest = VramMalloc(20); + s->graphics.anim = SA2_ANIM_GRIND_EFFECT; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->frameFlags = SPRITE_FLAG(PRIORITY, 1); + + return t; +} + +void CreateGrindEffect2(void) +{ + Player *p = &gPlayer; + if ((gStageTime & 0x7) == 0) { + s32 x, y; + s32 x2, y2; + + s32 yInverted = p->spriteOffsetY; + + if (GRAVITY_IS_INVERTED) { + yInverted = -yInverted; + } + + x = I(yInverted * SIN_24_8(p->rotation * 4)); + y = I(yInverted * COS_24_8(p->rotation * 4)); + + x2 = I(p->qWorldX); + y2 = I(p->qWorldY); + + x2 -= x; + y2 += y; + + CreateGrindfEffect2Sprite_inline(x2, y2); + } +} +#endif // (GAME == GAME_SA2) + +void TaskDestructor_MultiplayerSpriteTask(struct Task *t) +{ + MultiplayerSpriteTask *ts = TASK_DATA(t); + Sprite *s = &ts->s; + + VramFree(s->graphics.dest); +} + +#if (GAME == GAME_SA2) +struct Task *CreateGrindfEffect2Sprite(s16 x, s16 y) { return CreateGrindfEffect2Sprite_inline(x, y); } +#endif diff --git a/sa1/src/game/stage/player.c b/sa1/src/game/stage/player.c new file mode 100644 index 0000000000..071a24bf61 --- /dev/null +++ b/sa1/src/game/stage/player.c @@ -0,0 +1,5796 @@ +#include "global.h" +#include "trig.h" +#include "flags.h" +#include "malloc_vram.h" +#include "gba/io_reg.h" +#include "lib/m4a/m4a.h" +#include "game/amy_attack_heart_effect.h" +#include "game/multiplayer/mp_player.h" +#include "game/parameters/characters.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/music_manager.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/save.h" +#include "game/some_task_manager.h" +#include "game/stage/camera.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/dust_effect_braking.h" +#include "game/stage/dust_effect_spindash.h" +#include "game/stage/mp_sprite_task.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/player_sonic.h" +#include "game/stage/player_tails.h" +#include "game/stage/player_super_sonic.h" +#include "game/stage/rings_scatter.h" +#include "game/stage/spawn_positions.h" +#include "game/stage/stage.h" +#include "game/stage/underwater_effects.h" +#include "game/water_effects.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +Player ALIGNED(8) gPlayer = {}; +#if (GAME == GAME_SA1) +Player ALIGNED(8) gPartner = {}; +#endif + +// Potentially some extra space on player for this to be aligned 16 (should be 8) +#if (GAME == GAME_SA1) +PlayerSpriteInfo ALIGNED(16) gPartnerLimbsPSI = {}; +#endif +PlayerSpriteInfo ALIGNED(16) gPlayerLimbsPSI = {}; +PlayerSpriteInfo ALIGNED(16) gPlayerBodyPSI = {}; +#if (GAME == GAME_SA1) +PlayerSpriteInfo ALIGNED(16) gPartnerBodyPSI = {}; +#endif + +extern s16 gUnknown_084ADF78[NUM_LEVEL_IDS][2]; +extern s16 gUnknown_084ADFC0[NUM_LEVEL_IDS][2]; +extern s16 gUnknown_084AE188[9]; +extern s16 gUnknown_084AE19A[9]; + +void Player_80447D8(Player *p); +void SA2_LABEL(sub_802460C)(Player *p); + +void Player_Sonic_80473AC(Player *p); +void Player_Tails_8047BA0(Player *p); +void Player_Knuckles_8049000(Player *p); +void Player_Amy_80497AC(Player *p); + +void Player_Knuckles_GlideInit(Player *p); + +void Task_8045AD8(void); +void Task_8045B38(void); +void sub_8045DF0(Player *p); + +s32 SA2_LABEL(sub_8029BB8)(Player *p, u8 *p1, s32 *out); +void Task_PlayerMain(void); +void TaskDestructor_Player(struct Task *); +void AllocateCharacterStageGfx(Player *p, PlayerSpriteInfo *param2); +void AllocateCharacterMidAirGfx(Player *p, PlayerSpriteInfo *param2); +s32 SA2_LABEL(sub_802195C)(Player *p, u8 *p1, s32 *out); +void SA2_LABEL(sub_802486C)(Player *p, PlayerSpriteInfo *psi); +void SA2_LABEL(sub_8024B10)(Player *p, PlayerSpriteInfo *psi); +void SA2_LABEL(sub_8024F74)(Player *p, PlayerSpriteInfo *psi); + +#if (GAME == GAME_SA1) +#define UPDATE_POS_SPEEDCAP +#elif (GAME >= GAME_SA2) +#define UPDATE_POS_SPEEDCAP player->qSpeedAirY = MIN(player->qSpeedAirY, Q(PLAYER_AIR_SPEED_MAX)); +#endif + +#define PLAYERFN_UPDATE_POSITION(player) \ + { \ + player->qWorldX += player->qSpeedAirX; \ + \ + if ((gStageFlags ^ SA2_LABEL(gUnknown_0300544C)) & STAGE_FLAG__GRAVITY_INVERTED) { \ + player->qSpeedAirY = -player->qSpeedAirY; \ + } \ + \ + UPDATE_POS_SPEEDCAP; \ + \ + player->qWorldY = GRAVITY_IS_INVERTED ? player->qWorldY - player->qSpeedAirY : player->qWorldY + player->qSpeedAirY; \ + } + +#if (GAME == GAME_SA1) +#define PLAYERFN_UPDATE_AIR_FALL_SPEED(player) \ + if (!(player->moveState & MOVESTATE_IN_WATER)) { \ + player->qSpeedAirY += Q(PLAYER_GRAVITY); \ + } else { \ + player->qSpeedAirY += Q(PLAYER_GRAVITY_UNDER_WATER); \ + } +#elif (GAME == GAME_SA2) +#define PLAYERFN_UPDATE_AIR_FALL_SPEED(player) \ + if (player->moveState & MOVESTATE_IN_WATER) { \ + player->qSpeedAirY += Q(PLAYER_GRAVITY_UNDER_WATER); \ + } else { \ + player->qSpeedAirY += Q(PLAYER_GRAVITY); \ + } +#endif + +#define MACRO_8024B10_PSI_UPDATE(p, psi) \ + ({ \ + s32 x, y; \ + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { \ + psi->transform.qScaleX = -Q(1.0); \ + } else { \ + psi->transform.qScaleX = +Q(1.0); \ + } \ + if (GRAVITY_IS_INVERTED) { \ + psi->transform.qScaleX = -psi->transform.qScaleX; \ + } \ + \ + if (psi->transform.qScaleX < 0) { \ + psi->transform.x--; \ + } \ + \ + if (GRAVITY_IS_INVERTED) { \ + psi->transform.qScaleY = Q(1.0); \ + /* requires double clamp to match */ \ + psi->transform.rotation = CLAMP_SIN_PERIOD(CLAMP_SIN_PERIOD(-Q(1.0) - (psi->transform.rotation + psi->transform.qScaleY))); \ + } else { \ + psi->transform.qScaleY = Q(1.0); \ + } \ + \ + x = I(psi->transform.qScaleX * p->SA2_LABEL(unk80)); \ + y = I(psi->transform.qScaleY * p->SA2_LABEL(unk82)); \ + psi->transform.qScaleX = x; \ + psi->transform.qScaleY = y; \ + UpdateSpriteAnimation(s); \ + }) + +// >> acceleration = (sin(angle) * 3) / 32 +#define GET_ROTATED_ACCEL(angle) ((SIN_24_8((angle)*4) * 3) >> 5) +#define GET_ROTATED_ACCEL_2(angle) ((SIN_24_8((angle)*4) * 5) >> 5) +#define GET_ROTATED_ACCEL_3(angle) ((SIN_24_8((angle)*4) * 60)) + +#define PLAYERFN_UPDATE_UNK2A(player) \ + { \ + if (player->SA2_LABEL(unk2A) != 0) { \ + player->SA2_LABEL(unk2A) -= 1; \ + } else if ((player->rotation + Q(0.125)) & 0xC0) { \ + if (ABS(player->qSpeedGround) < Q(1.875)) { \ + player->qSpeedGround = 0; \ + \ + player->moveState |= MOVESTATE_IN_AIR; \ + player->SA2_LABEL(unk2A) = GBA_FRAMES_PER_SECOND / 2; \ + } \ + } \ + } + +void SA2_LABEL(sub_80213C0)(u32 UNUSED characterId, u32 UNUSED levelId, Player *player) +{ + struct Task *t; + player_0_Task *gt; + + Player *p = player; + s32 playerID = p->playerID; + +#if (GAME == GAME_SA1) + if (playerID == 0) +#endif + { +#if (GAME == GAME_SA1) + if (IS_EXTRA_STAGE(levelId)) { + p->spriteTask = TaskCreate(Task_8049898, sizeof(MaybeSuperSonic), 0x3000, 0, TaskDestructor_Player); + } else { + p->spriteTask = TaskCreate(Task_PlayerMain, sizeof(player_0_Task), 0x3000, 0, TaskDestructor_Player); + } +#endif + // NOTE: For this to work MaybeSuperSonic NEEDS to have a player_0_Task as first element! + gt = (player_0_Task *)TASK_DATA(p->spriteTask); + gt->pid = playerID; + gt->unk4 = 0; + +#if (GAME == GAME_SA2) + if (IS_MULTI_PLAYER) { + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gRingCount = 1; + } else { + gRingCount = 0; + } + } +#endif + + InitializePlayer(p); + +#if (GAME == GAME_SA2) + PLAYERFN_SET(Player_TouchGround); +#endif + + CreateBrakingDustEffectRelatedTask(); + InitPlayerHitRingsScatter(); + +#if !TAS_TESTING + if ((gInputRecorder.mode == RECORDER_RECORD)) { + InputRecorderLoadTape(); + gInputRecorder.mode = RECORDER_RECORD; + } else if (gInputRecorder.mode == RECORDER_PLAYBACK) { + InputRecorderLoadTape(); + gInputRecorder.mode = RECORDER_PLAYBACK; + } +#endif + } +#if (GAME == GAME_SA1) + else /* (playerID != PLAYER_1) */ { + // here: playerID != 0 + p->spriteTask = TaskCreate(Task_8045B38, sizeof(player_0_Task), 0x3001, 0, TaskDestructor_Player); + gt = (player_0_Task *)TASK_DATA(p->spriteTask); + gt->pid = playerID; + gt->unk4 = 0; + InitializePlayer(player); + } +#endif + +#if (GAME == GAME_SA2) + gStageGoalX = 0; + gUnknown_030054FC = 0; + gUnknown_030054E0 = 0; + + InitNewInputCounters(); +#endif + +#if PORTABLE + if (p->spriteInfoBody != NULL) +#endif + AllocateCharacterStageGfx(p, p->spriteInfoBody); +#if PORTABLE + if (p->spriteInfoLimbs != NULL) +#endif + AllocateCharacterMidAirGfx(p, p->spriteInfoLimbs); + +#if (GAME == GAME_SA1) + if (IS_EXTRA_STAGE(levelId)) { + sub_804A1B8(p); + } +#endif +} + +void AllocateCharacterStageGfx(Player *p, PlayerSpriteInfo *psi) +{ + s32 playerID = p->playerID; + Sprite *s = &psi->s; + + if (playerID == 0) { + s->graphics.dest = (void *)OBJ_VRAM0; + } else { + // TODO: Maybe find out biggest char anim size through preprocessing in the future? + s->graphics.dest = ALLOC_TILES(SA1_ANIM_SONIC_RUN); + } + + s->graphics.size = 0; + s->graphics.anim = p->anim; + s->variant = p->variant; + s->prevVariant = -1; + s->x = I(p->qWorldX); + s->y = I(p->qWorldY); +#if (GAME == GAME_SA1) + s->oamFlags = SPRITE_OAM_ORDER(16); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; +#elif (GAME == GAME_SA2) + s->oamFlags = SPRITE_OAM_ORDER(16 + playerID); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + + if (IS_MULTI_PLAYER) { + s->palId = SIO_MULTI_CNT->id; + } else { + s->palId = 0; + } +#endif + + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + if (IS_MULTI_PLAYER) { + s->frameFlags |= (SPRITE_FLAG_MASK_18 | SPRITE_FLAG_MASK_19); + } + SPRITE_FLAG_SET(s, ROT_SCALE_ENABLE); + s->frameFlags |= playerID; + + s->hitboxes[0].index = -1; + s->hitboxes[1].index = -1; + + psi->transform.rotation = 0; + psi->transform.qScaleX = +Q(1); + psi->transform.qScaleY = +Q(1); + psi->transform.x = 0; + psi->transform.y = 0; +} + +// Allocate VRAM for Tails' tails and Cream's ears while mid-air +void AllocateCharacterMidAirGfx(Player *p, PlayerSpriteInfo *param2) +{ + Sprite *s = ¶m2->s; + PlayerSpriteInfo *extraSprite = param2; + u32 character = p->character; + +#if (GAME == GAME_SA1) + if (character == CHARACTER_TAILS) { + s->graphics.dest = VramMalloc(16); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_CHAR(TAILS, SPIN_ATTACK); + extraSprite->s.variant = 1; + } +#elif (GAME >= GAME_SA2) + if (character == CHARACTER_CREAM) { + s->graphics.dest = VramMalloc(16); + s->graphics.anim = SA2_ANIM_CHAR(SA2_CHAR_ANIM_SPIN_ATTACK, CHARACTER_CREAM); + extraSprite->s.variant = 1; + } else if (character == CHARACTER_TAILS) { + s->graphics.dest = VramMalloc(16); + s->graphics.anim = SA2_ANIM_CHAR(SA2_CHAR_ANIM_SPIN_ATTACK, CHARACTER_TAILS); + extraSprite->s.variant = 1; + } +#endif + else { + return; + } + +#if (GAME == GAME_SA2) + s->graphics.size = 0; +#endif + s->prevVariant = -1; + s->x = I(p->qWorldX); + s->y = I(p->qWorldY); + s->oamFlags = SPRITE_OAM_ORDER(17); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + +#if (GAME == GAME_SA2) + if (IS_MULTI_PLAYER) { + s->palId = SIO_MULTI_CNT->id; + } else +#endif + { + s->palId = 0; + } + + s->frameFlags = +#if (GAME == GAME_SA2) + SPRITE_FLAG_MASK_18 | +#endif + (SPRITE_FLAG(PRIORITY, 2) | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG(ROT_SCALE, 4)); + + extraSprite->transform.rotation = 0; + extraSprite->transform.qScaleX = +Q(1); + extraSprite->transform.qScaleY = +Q(1); + extraSprite->transform.x = 0; + extraSprite->transform.y = 0; +} + +void SetStageSpawnPos(u32 character, u32 level, u32 playerID, Player *p) +{ + p->playerID = playerID; + p->character = character; + + if (IS_SINGLE_PLAYER || (gGameMode == GAME_MODE_RACE) || (gGameMode == GAME_MODE_MULTI_PLAYER)) { + p->checkPointX = gSpawnPositions[level][0]; + p->checkPointY = gSpawnPositions[level][1]; + } else if (gGameMode == GAME_MODE_CHAO_HUNT) { + s32 sioId = SIO_MULTI_CNT->id; + p->checkPointX = gSpawnPositions_Modes_4_and_5[level - NUM_LEVEL_IDS_SP][sioId][0]; + p->checkPointY = gSpawnPositions_Modes_4_and_5[level - NUM_LEVEL_IDS_SP][sioId][1]; + } else if (gGameMode == GAME_MODE_TEAM_PLAY) { + s32 sioId = SIO_MULTI_CNT->id; + + if (level == ACT_CHAO_HUNT_C) { + p->checkPointX = gSpawnPositions_Modes_4_and_5[level - NUM_LEVEL_IDS_SP][SIO_MULTI_CNT->id][0]; + p->checkPointY = gSpawnPositions_Modes_4_and_5[level - NUM_LEVEL_IDS_SP][SIO_MULTI_CNT->id][1]; + } else { + s32 sioMask = ((gMultiplayerConnections & (0x10 << sioId))) >> (sioId + 4); + u32 i, pid; + + for (pid = 0, i = 0; i < sioId; i++) { + u32 ithMask = ((gMultiplayerConnections & (0x10 << i))) >> (i + 4); + if (ithMask == sioMask) { + pid++; + } + } + + if (sioMask == 0) { + pid = -pid; + } + + p->checkPointX = gSpawnPositions_Modes_4_and_5[level - NUM_LEVEL_IDS_SP][sioMask][0] + pid * 24; + p->checkPointY = gSpawnPositions_Modes_4_and_5[level - NUM_LEVEL_IDS_SP][sioMask][1]; + } + } else { + switch (SIO_MULTI_CNT->id) { + case 0: { + p->checkPointX = 232; + p->checkPointY = 829; + } break; + + case 1: { + p->checkPointX = 1585; + p->checkPointY = 926; + } break; + + case 2: { + p->checkPointX = 232; + p->checkPointY = 348; + } break; + + case 3: { + p->checkPointX = 1585; + p->checkPointY = 279; + } break; + } + } + + p->SA2_LABEL(unk98) = 0; + + p->checkpointTime = 0; + + if (playerID == 0) { + p->spriteInfoBody = &gPlayerBodyPSI; + p->spriteInfoLimbs = &gPlayerLimbsPSI; + } else { + p->spriteInfoBody = &gPartnerBodyPSI; + p->spriteInfoLimbs = &gPartnerLimbsPSI; + } +} + +void InitializePlayer(Player *p) +{ +#if (GAME == GAME_SA1) +#if DEBUG + p->character = gSelectedCharacter; +#endif + + p->qWorldX = Q(p->checkPointX); + p->qWorldY = Q(p->checkPointY); + p->heldInput = gPlayerControls.jump | gPlayerControls.attack; + p->frameInput = gPlayerControls.jump | gPlayerControls.attack; +#elif (GAME == GAME_SA2) + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) && (((p->qWorldX & p->qWorldY) + 1) != 0)) { + p->qWorldX = Q(460); + } else { + p->qWorldX = Q(p->checkPointX); + } + p->qWorldY = Q(p->checkPointY); + + p->callback = Player_TouchGround; + p->heldInput = gPlayerControls.jump | gPlayerControls.attack | gPlayerControls.trick; + p->frameInput = gPlayerControls.jump | gPlayerControls.attack | gPlayerControls.trick; +#endif + + p->qSpeedAirX = 0; + p->qSpeedAirY = 0; + p->qSpeedGround = 0; + p->moveState = MOVESTATE_IGNORE_INPUT; + p->rotation = 0; + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); + p->SA2_LABEL(unk25) = 120; + p->qSpindashAccel = 0; + p->SA2_LABEL(unk29) = 0; + p->SA2_LABEL(unk28) = 0; + p->layer = PLAYER_LAYER__BACK; +#if (GAME == GAME_SA1) + p->maxSpeed = Q(4.5); +#elif (GAME == GAME_SA2) + p->maxSpeed = Q(9.0); +#endif + +#if (GAME == GAME_SA1) + p->acceleration = Q(8. / 256.); + p->deceleration = Q(96. / 256.); +#elif (GAME == GAME_SA2) + p->acceleration = Q(8. / 256.); + p->deceleration = Q(64. / 256.); +#endif + p->charState = CHARSTATE_IDLE; +#if (GAME == GAME_SA1) + p->prevCharState = 0; +#elif (GAME == GAME_SA2) + p->prevCharState = CHARSTATE_INVALID; +#endif + p->anim = -1; + p->variant = -1; + p->timerInvulnerability = 0; + p->timerInvincibility = 0; + p->timerSpeedup = 0; + p->timerConfusion = 0; + p->stoodObj = NULL; + p->itemEffect = PLAYER_ITEM_EFFECT__NONE; + p->SA2_LABEL(unk2A) = 0; + p->SA2_LABEL(unk72) = TIME(0, 6); + p->SA2_LABEL(unk7E) = 0; + p->SA2_LABEL(unk7C) = 0; + p->SA2_LABEL(unk82) = Q(1); + p->SA2_LABEL(unk80) = Q(1); + p->defeatScoreIndex = 0; + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->secondsUntilDrown = 30; + p->framesUntilDrownCountDecrement = 60; + p->SA2_LABEL(unk88) = 10; + +#if (GAME == GAME_SA2) + p->transition = 0; + p->unk6E = 0; + p->prevTransition = 0; + p->isBoosting = FALSE; + p->boostSpeed = 0; + p->unk6C = FALSE; + p->unk71 = 0; + p->unk70 = FALSE; + p->disableTrickTimer = 0; + + sub_8015750(); + sub_801561C(); + Player_HandleBoostThreshold(p); +#endif + + { + u32 *ptr = (u32 *)(&p->SA2_LABEL(unk99)[0]); + s32 i = 3; +#if (GAME == GAME_SA2) && !defined(NON_MATCHING) + register u8 *u99_r6 asm("r6") = (void *)ptr; +#endif + do { + // @BUG: agbcc compiles this to an stmia instruction, which writes aligned words, + // so the written bytes are off by one, because SA2_LABEL(unk99) isn't word-aligned! + // >> writes unk98 - unk99[14] + *ptr++ = 0; + } while (i-- != 0); +#if (GAME == GAME_SA2) && !defined(NON_MATCHING) + *u99_r6 = 0x7F; +#else + p->SA2_LABEL(unk99)[0] = 0x7F; +#endif + } + + if ((p->playerID == PLAYER_1) && IS_SINGLE_PLAYER) { + if (gCourseTime >= MAX_COURSE_TIME) { + gCheckpointTime = 0; + gCourseTime = 0; + p->checkpointTime = 0; + } else { + gCheckpointTime = p->checkpointTime; + gCourseTime = p->checkpointTime; + } + } + + switch (p->character) { + case CHARACTER_SONIC: { + p->w.sf.flags = 0; + p->w.sf.SA2_LABEL(unkAE) = 0; + p->w.sf.SA2_LABEL(unkB0) = 0; + } break; + +#if (GAME == GAME_SA2) + case CHARACTER_CREAM: { + p->w.cf.SA2_LABEL(unkAE) = 0; + p->w.cf.flyingDuration = 0; + p->w.cf.SA2_LABEL(unkB0) = 0; + } break; +#endif + + case CHARACTER_TAILS: { + p->w.tf.flags = 0; + p->w.tf.flyingDuration = 0; + p->w.tf.shift = 0; + } break; + + case CHARACTER_KNUCKLES: { + p->w.kf.flags = 0; + p->w.kf.shift = 0; + p->w.kf.SA2_LABEL(unkAE) = 0; + } break; + + case CHARACTER_AMY: { + p->w.af.flags = 0; + } break; + } +} + +#if (GAME == GAME_SA2) +// Called anytime the player actively jumps, "autojumps" through touching an IA, +// touches a Boost Pad or a Rotating Handle, touches the ground, etc. +// TODO: Find a better name. +void Player_TransitionCancelFlyingAndBoost(Player *p) +{ + if (p->moveState & MOVESTATE_20000) { + m4aSongNumStop(SE_281); + } + + p->moveState &= ~(MOVESTATE_SOME_ATTACK | MOVESTATE_10000000 | MOVESTATE_1000000 | MOVESTATE_80000 | MOVESTATE_40000 | MOVESTATE_20000 + | MOVESTATE_8000 | MOVESTATE_4000 | MOVESTATE_2000 | MOVESTATE_SPINDASH | MOVESTATE_200 | MOVESTATE_100 | MOVESTATE_20 + | MOVESTATE_FLIP_WITH_MOVE_DIR); + + p->unk61 = 0; + p->unk62 = 0; + p->unk63 = 0; + p->unk71 = 0; + p->unk70 = FALSE; + + if (p->character == CHARACTER_TAILS) { + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + + if (p->character == CHARACTER_CREAM) { + m4aSongNumStop(SE_CREAM_FLYING); + } + + if (p->character == CHARACTER_SONIC) { + p->moveState &= ~MOVESTATE_BOOST_EFFECT_ON; + } +} +#endif + +// Very similar to SA2_LABEL(sub_8029BB8) +s32 SA2_LABEL(sub_802195C)(Player *p, u8 *p1, s32 *out) +{ + u8 dummy; + s32 dummyInt; + s32 playerX, playerY; + s32 playerX2, playerY2; + u32 mask; + u8 anotherByte, anotherByte2; + s32 r5, r1; + s32 result; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + playerX2 = I(p->qWorldX) - (2 + p->spriteOffsetX); + playerY2 = I(p->qWorldY) - (p->spriteOffsetY); + + mask = p->layer; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + r5 = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask, -8, &anotherByte, SA2_LABEL(sub_801ED24)); + + playerX = I(p->qWorldX) - (2 + p->spriteOffsetX); + playerY = I(p->qWorldY) + (p->spriteOffsetY); + + mask = p->layer; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + r1 = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, -8, &anotherByte2, SA2_LABEL(sub_801ED24)); + + if (r5 < r1) { + result = r5; + *p1 = anotherByte; + *out = r1; + } else { + result = r1; + *p1 = anotherByte2; + *out = r5; + } + + return result; +} + +// Very similar to SA2_LABEL(sub_802195C) +s32 SA2_LABEL(sub_8021A34)(Player *p, u8 *p1, s32 *out) +{ + u8 dummy; + s32 dummyInt; + s32 playerX, playerY; + s32 playerX2, playerY2; + u32 mask; + u8 anotherByte, anotherByte2; + s32 r5, r1; + s32 result; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + playerX2 = I(p->qWorldX) + (2 + p->spriteOffsetX); + playerY2 = I(p->qWorldY) - (p->spriteOffsetY); + + mask = p->layer; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + r5 = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask, +8, &anotherByte, SA2_LABEL(sub_801ED24)); + + playerX = I(p->qWorldX) + (2 + p->spriteOffsetX); + playerY = I(p->qWorldY) + (p->spriteOffsetY); + + mask = p->layer; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + r1 = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, +8, &anotherByte2, SA2_LABEL(sub_801ED24)); + + if (r5 < r1) { + result = r5; + *p1 = anotherByte; + *out = r1; + } else { + result = r1; + *p1 = anotherByte2; + *out = r5; + } + + return result; +} + +// Very similar to SA2_LABEL(sub_802195C) +s32 SA2_LABEL(sub_8021B08)(Player *p, u8 *p1, s32 *out) +{ + u8 dummy; + s32 dummyInt; + s32 playerX, playerY; + s32 playerX2, playerY2; + u32 mask; + u8 anotherByte, anotherByte2; + s32 r5, r1; + s32 result; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + playerY2 = I(p->qWorldY) - (p->spriteOffsetY); + playerX2 = I(p->qWorldX) - (2 + p->spriteOffsetX); + + mask = p->layer; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + r5 = SA2_LABEL(sub_801E4E4)(playerY2, playerX2, mask, -8, &anotherByte, SA2_LABEL(sub_801EE64)); + + playerY = I(p->qWorldY) - (p->spriteOffsetY); + playerX = I(p->qWorldX) + (2 + p->spriteOffsetX); + + mask = p->layer; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + r1 = SA2_LABEL(sub_801E4E4)(playerY, playerX, mask, -8, &anotherByte2, SA2_LABEL(sub_801EE64)); + + if (r5 < r1) { + result = r5; + *p1 = anotherByte; + *out = r1; + } else { + result = r1; + *p1 = anotherByte2; + *out = r5; + } + + return result; +} + +// NOTE: Not aligned with SA2! +void SA2_LABEL(sub_8021BE0)(Player *p) +{ + if (!(p->moveState & MOVESTATE_200)) { + if (!(p->moveState & MOVESTATE_800000)) { +#if (GAME == GAME_SA2) + PLAYERFN_SET(Player_TouchGround); +#endif + p->charState = 4; + } + + if (p->moveState & MOVESTATE_4) { + p->moveState &= ~MOVESTATE_4; + Player_HandleSpriteYOffsetChange(p, 14); + } + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); + } + + p->moveState &= ~(MOVESTATE_20); + p->moveState &= ~(MOVESTATE_100); + p->moveState &= ~(MOVESTATE_SPINDASH); + + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + + p->moveState &= ~(MOVESTATE_8000); + + if (p->character == CHARACTER_TAILS) { + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + + if (p->character == CHARACTER_AMY) { + p->moveState &= ~(MOVESTATE_4000000 | MOVESTATE_2000000); + } + + p->defeatScoreIndex = 0; + +#if (GAME == GAME_SA1) + Player_804726C(p); + p->moveState &= ~(MOVESTATE_FLIP_WITH_MOVE_DIR | MOVESTATE_IN_AIR); +#endif +} + +void SA2_LABEL(sub_8021C4C)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 playerX2, playerY2; + s32 *ptr; + + u32 mask; + u32 mask2 = p->layer; + + playerX = I(p->qWorldX) - (3 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask = 0x80; + mask |= mask2; + } + + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, -8, 0, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX -= Q(result); + p->qSpeedAirX = 0; + } + + playerX2 = I(p->qWorldX) + (3 + p->spriteOffsetX); + playerY2 = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + result = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask, +8, 0, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX += Q(result); + p->qSpeedAirX = 0; + } + + ptr = &fnOut; + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } + + if (result < 0) { + s8 rotCopy; + s32 r1 = I(p->qSpeedAirY); + r1 += 6; + r1 = -r1; + + if ((result >= r1) || (fnOut >= r1)) { + s32 airY; + p->rotation = rotation; + + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY += result << 8; + + SA2_LABEL(sub_8021BE0)(p); + + if ((rotation + 32) & 0x40) { + p->qSpeedAirX = 0; + + if (p->qSpeedAirY > Q(11.8125)) { + p->qSpeedAirY = Q(11.8125); + } + } else if (!((rotation + 16) & 0x20)) { + p->qSpeedAirY = 0; + p->qSpeedGround = p->qSpeedAirX; + return; + } else { + p->qSpeedAirY >>= 1; + } + + airY = p->qSpeedAirY; + if (airY < 0) { + airY = -airY; + } + p->qSpeedGround = airY; + + rotCopy = rotation; + if (rotCopy < 0) { + p->qSpeedGround = -airY; + } + } + } +} + +void SA2_LABEL(sub_8021DB8)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 playerX2, playerY2; + s32 *ptr; + + u32 mask; + u32 mask2 = p->layer; + + playerX = I(p->qWorldX) - (3 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask = 0x80; + mask |= mask2; + } + + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, -8, 0, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX -= Q(result); + p->qSpeedAirX = 0; + } + + playerX2 = I(p->qWorldX) + (3 + p->spriteOffsetX); + playerY2 = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + result = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask, +8, 0, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX += Q(result); + p->qSpeedAirX = 0; + } + + ptr = &fnOut; + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY -= result << 8; + + if (((rotation + 32) & 0x40)) { + s8 *pt = (s8 *)&rotation; + if ((*pt - 0x40) > 0) { + s32 speed; + p->rotation = rotation; + + SA2_LABEL(sub_8021BE0)(p); + + speed = p->qSpeedAirY; + if (speed < 0) { + speed = -speed; + } + p->qSpeedGround = speed; + return; + } + } + p->qSpeedAirY = 0; + } +} + +// NOTE: Not aligned with SA2! +void SA2_LABEL(sub_8021EE4)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 playerX2, playerY2; + s32 *ptr; + u16 gravity; + + u32 mask; + u32 mask2 = p->layer; + + gravity = GRAVITY_IS_INVERTED; + if (!gravity) { + playerX = I(p->qWorldX) - (3 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, -8, NULL, SA2_LABEL(sub_801ED24)); + } else { + playerX2 = I(p->qWorldX) - (3 + p->spriteOffsetX); + playerY2 = I(p->qWorldY); + + result = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask2, -8, NULL, SA2_LABEL(sub_801ED24)); + } + + if (result <= 0) { + p->qWorldX -= Q(result); + p->qSpeedAirX = 0; + p->qSpeedGround = p->qSpeedAirY; + } + + ptr = &fnOut; + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY -= Q(result); + + if (p->qSpeedAirY < 0) { + p->qSpeedAirY = 0; + } + } else if (p->qSpeedAirY >= 0) { + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, &fnOut); + } else { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, &fnOut); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY += Q(result); + + p->rotation = rotation; + SA2_LABEL(sub_8021BE0)(p); + + p->qSpeedAirY = 0; + p->qSpeedGround = p->qSpeedAirX; + } + } +} + +// NOTE: Not aligned with SA2! +void SA2_LABEL(sub_802203C)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 playerX2, playerY2; + s32 *ptr; + u16 gravity; + + u32 mask; + u32 mask2 = p->layer; + + gravity = GRAVITY_IS_INVERTED; + if (!gravity) { + playerX = I(p->qWorldX) + (3 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, +8, NULL, SA2_LABEL(sub_801ED24)); + } else { + playerX2 = I(p->qWorldX) + (3 + p->spriteOffsetX); + playerY2 = I(p->qWorldY); + + result = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask2, +8, NULL, SA2_LABEL(sub_801ED24)); + } + + if (result <= 0) { + p->qWorldX += Q(result); + p->qSpeedAirX = 0; + p->qSpeedGround = p->qSpeedAirY; + } + + ptr = &fnOut; + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY -= Q(result); + + if (p->qSpeedAirY < 0) { + p->qSpeedAirY = 0; + } + } else if (p->qSpeedAirY >= 0) { + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, &fnOut); + } else { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, &fnOut); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY += Q(result); + + p->rotation = rotation; + SA2_LABEL(sub_8021BE0)(p); + + p->qSpeedAirY = 0; + p->qSpeedGround = p->qSpeedAirX; + } + } +} + +void SA2_LABEL(sub_8022190)(Player *p) +{ + s16 airY = p->qSpeedAirY; + u8 arcResult = (GRAVITY_IS_INVERTED) ? 0x80 : 0; + s16 airX = p->qSpeedAirX; + + if (airX || airY) { + arcResult = I(ArcTan2(airX, airY)); + } + + arcResult = (arcResult - 0x20) & 0xC0; + + switch (arcResult >> 6) { + case 0: { + SA2_LABEL(sub_8021C4C)(p); + } break; + + case 2: { + SA2_LABEL(sub_8021DB8)(p); + } break; + + case 1: { + SA2_LABEL(sub_8021EE4)(p); + } break; + + case 3: { + SA2_LABEL(sub_802203C)(p); + } break; + } +} + +#if (GAME == GAME_SA2) +void sub_8022218(Player *p) +{ + u8 rotation; + s32 sp04; + s32 res; + + // u8 *pRot = &rotation; + s32 *pSp04 = &sp04; + + if (GRAVITY_IS_INVERTED) { + res = sub_8029AC0(p, &rotation, pSp04); + } else { + res = sub_8029B0C(p, &rotation, pSp04); + } + + if (res <= 0) { + if (GRAVITY_IS_INVERTED) { + res = -res; + } + + p->qWorldY += Q(res); + p->rotation = rotation; + sub_8021BE0(p); + + p->qSpeedAirY = 0; + p->qSpeedGround = p->qSpeedAirX; + } +} + +void SA2_LABEL(sub_8022284)(Player *p) +{ + u8 rotation; + s32 sp04; + s32 res; + s32 airY; + + // u8 *pRot = &rotation; + s32 *pSp04 = &sp04; + + if (GRAVITY_IS_INVERTED) { + res = SA2_LABEL(sub_8029B0C)(p, &rotation, pSp04); + } else { + res = SA2_LABEL(sub_8029AC0)(p, &rotation, pSp04); + } + + if (res <= 0) { + if (GRAVITY_IS_INVERTED) { + res = -res; + } + + p->qWorldY -= Q(res); + p->rotation = rotation; + SA2_LABEL(sub_8021BE0)(p); + + airY = p->qSpeedAirY; + if (airY < 0) { + airY = -airY; + } + p->qSpeedGround = airY; + + if ((s8)rotation >= 0) { + p->qSpeedGround = -airY; + } + + if (p->unk6E) { + p->moveState ^= MOVESTATE_FACING_LEFT; + } + } +} +#endif + +// TODO: This seems to be called only after Knuckles hits the ground after gliding? +void SA2_LABEL(sub_8022318)(Player *p) +{ + s32 offsetY; + + if (!(p->moveState & MOVESTATE_4)) { + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); + } else { + p->moveState &= ~MOVESTATE_4; + p->charState = CHARSTATE_IDLE; + + offsetY = p->spriteOffsetY - 14; + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + if (((p->rotation + 0x40) << 24) <= 0) { + offsetY = -offsetY; + } + + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); + + p->qWorldY += Q(offsetY); + } + + p->moveState &= ~MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState &= ~MOVESTATE_100; + + p->defeatScoreIndex = 0; + +#if (GAME == GAME_SA1) + p->moveState &= ~MOVESTATE_8000; +#endif + + p->SA2_LABEL(unk25) = 120; + p->SA2_LABEL(unk61) = 0; + + if (p->charState >= CHARSTATE_KNUCKLES_GLIDE) { + p->charState = CHARSTATE_IDLE; + } +} + +void SA2_LABEL(sub_80223BC)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 playerX2, playerY2; + s32 *ptr; + + u32 mask; + u32 mask2 = p->layer; + + playerX = I(p->qWorldX) - (3 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask = 0x80; + mask |= mask2; + } + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, -8, NULL, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX -= Q(result); + p->qSpeedAirX = 0; + // TODO: Find out which character(s) call this, to use the appropriate 'flags' + p->w.sf.flags |= 0x20; + } + + playerX2 = I(p->qWorldX) + (3 + p->spriteOffsetX); + playerY2 = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + result = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask, +8, NULL, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX += Q(result); + p->qSpeedAirX = 0; + p->w.sf.flags |= 0x20; + } + + ptr = &fnOut; + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY += Q(result); + + p->rotation = rotation; + p->qSpeedAirY = 0; + p->w.sf.flags &= ~0x2; + } +} + +// Similar to SA2_LABEL(sub_80223BC) +void SA2_LABEL(sub_80224DC)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 playerX2, playerY2; + s32 *ptr; + + u32 mask; + u32 mask2 = p->layer; + + playerX = I(p->qWorldX) - (3 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask = 0x80; + mask |= mask2; + } + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, -8, NULL, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX -= Q(result); + p->qSpeedAirX = 0; + // TODO: Find out which character(s) call this, to use the appropriate 'flags' + p->w.sf.flags |= 0x20; + } + + playerX2 = I(p->qWorldX) + (3 + p->spriteOffsetX); + playerY2 = I(p->qWorldY); + + mask = mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + result = SA2_LABEL(sub_801E4E4)(playerX2, playerY2, mask, +8, NULL, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX += Q(result); + p->qSpeedAirX = 0; + p->w.sf.flags |= 0x20; + } + + ptr = &fnOut; + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY -= Q(result); + + p->qSpeedAirY = 0; + } +} + +void SA2_LABEL(sub_80225E8)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 *ptr; + u16 gravity; + + u32 mask; + u8 *mask2 = &p->layer; + + playerX = I(p->qWorldX) - (2 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = *mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, -8, NULL, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX -= Q(result); + p->qSpeedAirX = 0; + // TODO: Find out which character(s) call this, to use the appropriate 'flags' + p->w.sf.flags |= 0x20; + } + + gravity = GRAVITY_IS_INVERTED; + ptr = &fnOut; + if (gravity) { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + p->qWorldY -= Q(result); + + if (p->qSpeedAirY < 0) { + p->qSpeedAirY = 0; + } + } else if (p->qSpeedAirY >= 0) { + + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY += Q(result); + + p->rotation = rotation; + p->qSpeedAirY = 0; + p->w.sf.flags &= ~0x2; + } + } +} + +// Similar to SA2_LABEL(sub_80225E8) +void SA2_LABEL(sub_8022710)(Player *p) +{ + u8 rotation; + s32 fnOut; + s32 result; + s32 playerX, playerY; + s32 *ptr; + u16 gravity; + + u32 mask; + u8 *mask2 = &p->layer; + + playerX = I(p->qWorldX) + (2 + p->spriteOffsetX); + playerY = I(p->qWorldY); + + mask = *mask2; + if (p->qSpeedAirY < Q(3.0)) { + mask |= 0x80; + } + result = SA2_LABEL(sub_801E4E4)(playerX, playerY, mask, +8, NULL, SA2_LABEL(sub_801ED24)); + + if (result <= 0) { + p->qWorldX += Q(result); + p->qSpeedAirX = 0; + // TODO: Find out which character(s) call this, to use the appropriate 'flags' + p->w.sf.flags |= 0x20; + } + + gravity = GRAVITY_IS_INVERTED; + ptr = &fnOut; + if (gravity) { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + p->qWorldY -= Q(result); + + if (p->qSpeedAirY < 0) { + p->qSpeedAirY = 0; + } + } else if (p->qSpeedAirY >= 0) { + + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029AC0)(p, &rotation, ptr); + } else { + result = SA2_LABEL(sub_8029B0C)(p, &rotation, ptr); + } + + if (result <= 0) { + if (GRAVITY_IS_INVERTED) { + result = -result; + } + + p->qWorldY += Q(result); + + p->rotation = rotation; + p->qSpeedAirY = 0; + p->w.sf.flags &= ~0x2; + } + } +} + +void SA2_LABEL(sub_8022838)(Player *p) +{ + s16 airX = p->qSpeedAirX; + s16 airY = p->qSpeedAirY; + u8 arcResult = 0; + + if (p->moveState & MOVESTATE_STOOD_ON_OBJ) { + p->w.sf.flags &= ~0x2; + p->SA2_LABEL(unk29) = 0; + p->SA2_LABEL(unk28) = 0; + } else { + arcResult = I(ArcTan2(airX, airY)); + + arcResult = (arcResult - 0x20) & 0xC0; + + switch (arcResult >> 6) { + case 0: { + SA2_LABEL(sub_80223BC)(p); + } break; + + case 2: { + SA2_LABEL(sub_80224DC)(p); + } break; + + case 1: { + SA2_LABEL(sub_80225E8)(p); + } break; + + case 3: { + SA2_LABEL(sub_8022710)(p); + } break; + } + } +} + +// NOTE: Not aligned with SA2! +void SA2_LABEL(sub_80228C0)(Player *p) +{ + s32 val; +#if (GAME == GAME_SA1) +#endif + u8 *p29; + s32 resultB; +#ifndef NON_MATCHING + register s32 resultA asm("sl"); + register u32 r1 asm("r1"); + register u32 r0 asm("r0"); + register s32 playerX asm("r4") = p->qWorldX; + register s32 playerY asm("r9") = p->qWorldY; + register s32 rot asm("r6") = p->rotation; +#else + s32 resultA; + u32 r1; + u32 r0; + s32 playerX = p->qWorldX; + s32 playerY = p->qWorldY; + s32 rot = p->rotation; +#endif + u32 mask = p->layer; + s32 py = I(playerY); + + resultA = SA2_LABEL(sub_801E4E4)(py + p->spriteOffsetY, (playerX = I(playerX)) - (2 + p->spriteOffsetX), mask, 8, &p->SA2_LABEL(unk28), + SA2_LABEL(sub_801EE64)); + + py = py + (p->spriteOffsetY); + playerX += 2; + playerX += p->spriteOffsetX; + p29 = &p->SA2_LABEL(unk29); + resultB = SA2_LABEL(sub_801E4E4)(py, playerX, mask, 8, p29, SA2_LABEL(sub_801EE64)); + + val = resultB; + if (resultB > resultA) { + val = resultA; + } + + if (val != 0) { + if (val < 0) { + if (val < -11) { + return; + } + + playerY += Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = p->SA2_LABEL(unk29); + } + rot = r0; + } else /* val >= 0 */ { + s32 airX = p->qSpeedAirX; + + if (airX < 0) { + airX = -airX; + } + + airX = I(airX); + airX += 3; + + if (airX > 11) + airX = 11; + + if (val <= airX) { + playerY += Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = *p29; + } + rot = r0; + } else { + if (p->moveState & MOVESTATE_800) { + playerY += Q(val); + } else { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_20; + return; + } + } + } + } else { + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = p->SA2_LABEL(unk29); + } + rot = r0; + } + + p->qWorldY = playerY; + + if (!(rot & 0x1)) { + vu8 *pRot = &p->rotation; + *pRot = rot; + + if (GRAVITY_IS_INVERTED) { + // TODO: CLEANUP (effectively *pRot = -r1) + rot = *pRot; + asm("" ::"r"(rot)); + r0 = rot; + r0 += 0x40; + r0 <<= 24; + r0 = -r0; + rot = r0 >> 24; + asm("" ::"r"(r0), "r"(rot)); + r0 = rot; + r0 -= 0x40; + + *pRot = r0; + } + } +} + +// Similar to sub_80228C0, sub_8022B18 +void SA2_LABEL(sub_80229EC)(Player *p) +{ + s32 val; + u8 *p29; + s32 resultB; + s32 playerY; + s32 py; +#ifndef NON_MATCHING + register s32 resultA asm("r6"); + register u32 r1 asm("r1"); + register u32 r0 asm("r0"); + register s32 playerX asm("r4"); + register u32 mask asm("r9"); +#else + s32 resultA; + u32 r1; + u32 r0; + s32 playerX; + u32 mask; +#endif + playerX = p->qWorldX; + playerY = (p->qWorldY); + mask = p->layer; + py = I(playerY); + + resultA = SA2_LABEL(sub_801E4E4)(py - p->spriteOffsetY, (playerX = I(playerX)) + (2 + p->spriteOffsetX), mask, -8, &p->SA2_LABEL(unk28), + SA2_LABEL(sub_801EE64)); + + py = py - (p->spriteOffsetY); + playerX -= 2; + playerX -= p->spriteOffsetX; + p29 = &p->SA2_LABEL(unk29); + resultB = SA2_LABEL(sub_801E4E4)(py, playerX, mask, -8, p29, SA2_LABEL(sub_801EE64)); + + val = resultB; + if (resultB > resultA) { + val = resultA; + } + + if (val != 0) { + if (val < 0) { + if (val < -11) { + return; + } + + playerY -= Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = *p29; + } + } else /* val > 0 */ { + s32 airX = p->qSpeedAirX; + + if (airX < 0) { + airX = -airX; + } + + airX = I(airX); + airX += 3; + + if (airX > 11) + airX = 11; + + if (val <= airX) { + playerY -= Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = *p29; + } + } else { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_20; + return; + } + } + } else { + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = p->SA2_LABEL(unk29); + } + } + + r1 = r0; + p->qWorldY = playerY; + + if (!(r1 & 0x1)) { + vu8 *pRot = &p->rotation; + *pRot = r1; + + if (GRAVITY_IS_INVERTED) { + // TODO: CLEANUP (effectively *pRot = 128-r1) + r1 = *pRot; + asm("" ::"r"(r1)); + r0 = r1; + r0 += 0x40; + r0 <<= 24; + r0 = -r0; + r1 = r0 >> 24; + asm("" ::"r"(r0), "r"(r1)); + r0 = r1; + r0 -= 0x40; + + *pRot = r0; + } + } +} + +// Similar to sub_80228C0, sub_80229EC +void SA2_LABEL(sub_8022B18)(Player *p) +{ + s32 val; + u8 *p29; + s32 resultB; + s32 playerX; + s32 py; +#ifndef NON_MATCHING + register s32 resultA asm("r6"); + register u32 r1 asm("r1"); + register u32 r0 asm("r0"); + register s32 playerY asm("r4"); + register u32 mask asm("r9"); +#else + s32 resultA; + u32 r1; + u32 r0; + s32 playerY; + u32 mask; +#endif + playerX = p->qWorldX; + playerY = (p->qWorldY); + mask = p->layer; + py = I(playerX); + + resultA = SA2_LABEL(sub_801E4E4)(py - p->spriteOffsetY, (playerY = I(playerY)) - (2 + p->spriteOffsetX), mask, -8, &p->SA2_LABEL(unk28), + SA2_LABEL(sub_801ED24)); + + py = py - (p->spriteOffsetY); + playerY += 2; + playerY += p->spriteOffsetX; + p29 = &p->SA2_LABEL(unk29); + resultB = SA2_LABEL(sub_801E4E4)(py, playerY, mask, -8, p29, SA2_LABEL(sub_801ED24)); + + val = resultB; + if (resultB > resultA) { + val = resultA; + } + + if (val != 0) { + if (val < 0) { + if (val < -11) { + return; + } + + playerX -= Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = *p29; + } + } else /* val > 0 */ { + s32 airY = p->qSpeedAirY; + + if (airY < 0) { + airY = -airY; + } + + airY = I(airY); + airY += 3; + + if (airY > 11) + airY = 11; + + if (val <= airY) { + playerX -= Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = *p29; + } + } else { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_20; + return; + } + } + } else { + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = p->SA2_LABEL(unk29); + } + } + + r1 = r0; + p->qWorldX = playerX; + + if (!(r1 & 0x1)) { + vu8 *pRot = &p->rotation; + *pRot = r1; + + if (GRAVITY_IS_INVERTED) { + // TODO: CLEANUP (effectively *pRot = 128-r1) + r1 = *pRot; + asm("" ::"r"(r1)); + r0 = r1; + r0 += 0x40; + r0 <<= 24; + r0 = -r0; + r1 = r0 >> 24; + asm("" ::"r"(r0), "r"(r1)); + r0 = r1; + r0 -= 0x40; + + *pRot = r0; + } + } +} + +// Similar to sub_80228C0, sub_80229EC, sub_8022B18 +void SA2_LABEL(sub_8022C44)(Player *p) +{ + s32 val; + s32 resultB; + s32 playerX; + s32 py; + s32 resultA; + +#ifndef NON_MATCHING + register u32 r1 asm("r1"); + register u32 r0 asm("r0"); + register s32 playerY asm("r4"); + register u32 mask asm("r8"); +#else + u32 r1; + u32 r0; + s32 playerY; + u32 mask; +#endif + playerX = p->qWorldX; + playerY = (p->qWorldY); + mask = p->layer; + py = I(playerX); + + resultA = SA2_LABEL(sub_801E4E4)(py + p->spriteOffsetY, (playerY = I(playerY)) + (2 + p->spriteOffsetX), mask, +8, &p->SA2_LABEL(unk28), + SA2_LABEL(sub_801ED24)); + + py = py + (p->spriteOffsetY); + playerY -= 2; + playerY -= p->spriteOffsetX; + resultB = SA2_LABEL(sub_801E4E4)(py, playerY, mask, +8, &p->SA2_LABEL(unk29), SA2_LABEL(sub_801ED24)); + + val = resultB; + if (resultB > resultA) { + val = resultA; + } + + if (val != 0) { + if (val < 0) { + if (val < -11) { + return; + } + + playerX += Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = p->SA2_LABEL(unk29); + } + } else /* val > 0 */ { + s32 airY = p->qSpeedAirY; + + if (airY < 0) { + airY = -airY; + } + + airY = I(airY); + airY += 3; + + if (airY > 11) + airY = 11; + + if (val <= airY) { + playerX += Q(val); + + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = p->SA2_LABEL(unk29); + } + } else { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~MOVESTATE_20; + return; + } + } + } else { + if (resultA < resultB) { + r0 = p->SA2_LABEL(unk28); + } else { + r0 = p->SA2_LABEL(unk29); + } + } + + r1 = r0; + p->qWorldX = playerX; + + if (!(r1 & 0x1)) { + vu8 *pRot = &p->rotation; + *pRot = r1; + + if (GRAVITY_IS_INVERTED) { +#ifndef NON_MATCHING + r1 = *pRot; + asm("" ::"r"(r1)); + r0 = r1; + r0 += 0x40; + r0 <<= 24; + r0 = -r0; + r1 = r0 >> 24; + asm("" ::"r"(r0), "r"(r1)); + r0 = r1; + r0 -= 0x40; + + *pRot = r0; +#else + *pRot = 128 - r1; +#endif + } + } +} + +void SA2_LABEL(sub_8022D6C)(Player *p) +{ +#if (GAME == GAME_SA1) && !defined(BUG_FIX) + u8 r1; +#else + u8 r1 = 0; +#endif + if (p->moveState & MOVESTATE_STOOD_ON_OBJ) { + p->SA2_LABEL(unk29) = 0; + p->SA2_LABEL(unk28) = 0; + return; + } + + // NOTE/TODO: Not in SA1, but likely in SA3, so assuming >= GAME_SA2! +#if (GAME >= GAME_SA2) + if ((gCurrentLevel == 0) && (gWater.isActive == TRUE)) { + s32 r5 = Q(p->qWorldY) >> 16; + u32 mask = ~0x3; + s32 offsetY = p->spriteOffsetY; + s32 unk4 = gWater.currentWaterLevel; + s16 r0 = (unk4 - offsetY) & mask; + r5 &= mask; + + if ((r5 == (r0)) && (p->qSpeedAirY >= 0) && ((u8)(p->rotation + 0x18) <= 0x30) && (!(p->moveState & MOVESTATE_IN_AIR)) + && (ABS(p->qSpeedGround) >= Q(6.0))) { + SA2_LABEL(sub_80228C0)(p); + + if (p->qWorldY >= Q(r5)) { + if (!(p->moveState & MOVESTATE_20000)) { + p->moveState |= MOVESTATE_20000; + + if (IS_SINGLE_PLAYER) { + CreateRunOnWaterEffect(); + } + } + + m4aSongNumStartOrContinue(SE_281); + p->qWorldY = (r0 << 8); + p->rotation = 0; + p->moveState &= ~MOVESTATE_IN_AIR; + } else { + if (p->moveState & MOVESTATE_20000) { + m4aSongNumStop(SE_281); + } + p->moveState &= ~MOVESTATE_20000; + } + return; + } else if (p->moveState & MOVESTATE_20000) { + p->moveState &= ~MOVESTATE_20000; + m4aSongNumStop(SE_281); + } + } +#endif + + if (GRAVITY_IS_INVERTED) { + s8 rot = p->rotation; + rot += 0x40; + rot = -rot; + rot -= 0x40; + + if (rot + 0x20 > 0) { + if (rot <= 0) { + r1 = rot + 0x20; + } else { + r1 = rot + 0x1F; + } + } else { + if (rot > 0) { + r1 = rot + 0x20; + } else { + r1 = rot + 0x1F; + } + } + + switch (r1 >> 6) { + case 0: { + SA2_LABEL(sub_80228C0)(p); + } break; + + case 2: { + SA2_LABEL(sub_80229EC)(p); + } break; + + case 1: { + SA2_LABEL(sub_8022B18)(p); + } break; + + case 3: { + SA2_LABEL(sub_8022C44)(p); + } break; + } + } else { + s8 rot = p->rotation; + + if (rot + 0x20 > 0) { + if (rot <= 0) { + r1 = rot + 0x20; + } else { + r1 = rot + 0x1F; + } + } else { + if (rot > 0) { + r1 = rot + 0x20; + } else { + r1 = rot + 0x1F; + } + } + + switch (r1 >> 6) { + case 0: { + SA2_LABEL(sub_80228C0)(p); + } break; + + case 2: { + SA2_LABEL(sub_80229EC)(p); + } break; + + case 1: { + SA2_LABEL(sub_8022B18)(p); + } break; + + case 3: { + SA2_LABEL(sub_8022C44)(p); + } break; + } + } +} + +#if (GAME == GAME_SA1) +// Basically the opposite to Player_8043A2C. +// Uses the same variables, but checks are inverted. +// Player_WalkLeft ? +void Player_8043970(Player *p) +{ +#ifndef NON_MATCHING + register s32 qSpeedGround asm("r5") = p->qSpeedGround; +#else + s32 qSpeedGround = p->qSpeedGround; +#endif + s32 qMaxSpeed = p->maxSpeed; + s32 qAcceleration = p->acceleration; + s32 qDeceleration = p->deceleration; + + if (qSpeedGround <= Q(0)) { + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + p->moveState &= ~MOVESTATE_20; + p->charState = CHARSTATE_22; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + + p->moveState |= MOVESTATE_FACING_LEFT; + + qSpeedGround -= qAcceleration; + + if (qSpeedGround < -qMaxSpeed) { + qSpeedGround += qAcceleration; + + if (qSpeedGround > -qMaxSpeed) { + qSpeedGround = -qMaxSpeed; + } + + p->qSpeedGround = qSpeedGround; + } else { + p->qSpeedGround = qSpeedGround; + } + + if (!(p->moveState & (MOVESTATE_800000 | MOVESTATE_8000))) { + if (p->charState != 22) { + p->charState = CHARSTATE_WALK_A; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + } + } else { + qSpeedGround -= qDeceleration; + + if (qSpeedGround < Q(0)) { + qSpeedGround = -Q(96. / 256.); + } + + p->qSpeedGround = qSpeedGround; + + if (qSpeedGround < Q(3)) { + return; + } + + m4aSongNumStart(SE_BRAKE); + + p->charState = CHARSTATE_BRAKE; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } +} + +// Basically the opposite to Player_8043970. +// Uses the same variables, but checks are inverted. +// Player_WalkRight? +void Player_8043A2C(Player *p) +{ +#ifndef NON_MATCHING + register s32 qSpeedGround asm("r5") = p->qSpeedGround; +#else + s32 qSpeedGround = p->qSpeedGround; +#endif + s32 qMaxSpeed = p->maxSpeed; + s32 qAcceleration = p->acceleration; + s32 qDeceleration = p->deceleration; + + if (qSpeedGround >= Q(0)) { + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->moveState &= ~MOVESTATE_20; + p->charState = CHARSTATE_22; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + + p->moveState &= ~MOVESTATE_FACING_LEFT; + + qSpeedGround += qAcceleration; + + if (qSpeedGround > +qMaxSpeed) { + qSpeedGround -= qAcceleration; + + if (qSpeedGround < +qMaxSpeed) { + qSpeedGround = +qMaxSpeed; + } + + p->qSpeedGround = qSpeedGround; + } else { + p->qSpeedGround = qSpeedGround; + } + + if (!(p->moveState & (MOVESTATE_800000 | MOVESTATE_8000))) { + if (p->charState != 22) { + p->charState = CHARSTATE_WALK_A; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + } + } else { + qSpeedGround += qDeceleration; + + if (qSpeedGround > Q(0)) { + qSpeedGround = +Q(96. / 256.); + } + + p->qSpeedGround = qSpeedGround; + + if (qSpeedGround > -Q(3)) { + return; + } + + m4aSongNumStart(SE_BRAKE); + + p->charState = CHARSTATE_BRAKE; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } +} +#endif + +// (100.00%) https://decomp.me/scratch/U0r54 +s32 SA2_LABEL(sub_8022F58)(u8 param0, Player *p) +{ + u32 p0; + s32 result = 0; // maybe u8? + s32 r4; + u8 sp0[4]; + s32 sp4[4]; +#ifndef NON_MATCHING + register s32 fnRes asm("r3"); +#else + s32 fnRes; +#endif + + p->SA2_LABEL(unk29) = param0; + p->SA2_LABEL(unk28) = param0; + + p0 = (param0 + Q(0.125)) & 0xC0; + +#ifndef NON_MATCHING + asm("asr %0, %1, #6\n" : "=r"(r4) : "r"(p0)); +#else + r4 = p0 >> 6; +#endif + + switch (r4) { + case 0: { + u8 *ptr = sp0; + u8 temp; + fnRes = SA2_LABEL(sub_8029BB8)(p, ptr, &sp4[0]); + temp = *ptr; + + if (sp0[0] & 0x1) { + *ptr = result; + } else { + if (GRAVITY_IS_INVERTED) { + s32 v = -0x80 - temp; + *ptr = v; + } + } + + result = fnRes; + } break; + + case 1: { + u8 *ptr = sp0; + u8 temp; + fnRes = SA2_LABEL(sub_802195C)(p, ptr, &sp4[1]); + temp = *ptr; + + if (temp & 0x1) { + *ptr = result; + } else { + if (GRAVITY_IS_INVERTED) { + s32 v = -0x80 - temp; + *ptr = v; + } + } + + result = fnRes; + } break; + + case 2: { + u8 *ptr = sp0; + u8 temp; + fnRes = SA2_LABEL(sub_8021B08)(p, ptr, &sp4[2]); + temp = *ptr; + + if (temp & 0x1) { + *ptr = result; + } else { + if (GRAVITY_IS_INVERTED) { + s32 v = -0x80 - temp; + *ptr = v; + } + } + + result = fnRes; + } break; + + case 3: { + u8 *ptr = sp0; + u8 temp; + fnRes = SA2_LABEL(sub_8021A34)(p, ptr, &sp4[3]); + temp = *ptr; + + if (temp & 0x1) { + *ptr = result; + } else { + if (GRAVITY_IS_INVERTED) { + s32 v = -0x80 - temp; + *ptr = v; + } + } + + result = fnRes; + } break; + } + + return result; +} + +s32 SA2_LABEL(sub_802302C)(u8 param0, Player *p) +{ + s32 r3; + u32 r0; + s32 result; + u32 temp; + + s32 px = I(p->qWorldX); + s32 py = I(p->qWorldY); + + p->SA2_LABEL(unk29) = param0; + r3 = (s8)param0; +#ifndef NON_MATCHING + p->SA2_LABEL(unk28) = ((u32)param0 << 0x18) >> 0x18; +#else + p->SA2_LABEL(unk28) = param0; +#endif + + if (((param0 + Q(0.125)) << 24) > 0) { + if (r3 <= 0) { +#ifndef NON_MATCHING + asm(""); +#endif + param0 += Q(0.125); + } else { + param0 += Q(0.125) - 1; + } + } else { + if (r3 <= 0) { + param0 += Q(0.125) - 1; + } else { + param0 += Q(0.125); + } + } + + switch (param0 >> 6) { + case 0: { + s32 y = py + 2; + result = SA2_LABEL(sub_801E4E4)(y + p->spriteOffsetX, px, p->layer, +8, NULL, SA2_LABEL(sub_801EE64)); + } break; + + case 2: { + s32 y = py - 2; + result = SA2_LABEL(sub_801E4E4)(y - p->spriteOffsetX, px, p->layer, -8, NULL, SA2_LABEL(sub_801EE64)); + } break; + + case 1: { + s32 x = (px - 2); + result = SA2_LABEL(sub_801E4E4)(x - p->spriteOffsetX, py, p->layer, -8, NULL, SA2_LABEL(sub_801ED24)); + } break; + + case 3: { + s32 x = (px + 2); + result = SA2_LABEL(sub_801E4E4)(x + p->spriteOffsetX, py, p->layer, +8, NULL, SA2_LABEL(sub_801ED24)); + } break; + + default: { + result = 0; + } + } + + return result; +} + +void SA2_LABEL(sub_8023128)(Player *p) +{ + u8 r1; + u32 temp; + u8 r5; + s32 r2; + + if (p->qSpeedGround == 0) { + return; + } + + r1 = Q(0.25); + if (p->qSpeedGround >= 0) { + r1 = -Q(0.25); + } + + // without temp, the add instr. sources get switched + temp = p->rotation + r1; + r5 = temp; + + r2 = Q(SA2_LABEL(sub_802302C)(r5, p)); + + if (r2 <= 0) { + s32 rot = (r5 + Q(0.125)); + + switch ((rot & 0xC0) >> 6) { + + case 0: { + p->qWorldY += r2; + p->qSpeedAirY = 0; + } break; + + case 1: { + p->qWorldX -= r2; + p->qSpeedAirX = 0; + p->moveState |= MOVESTATE_20; + +#if (GAME == GAME_SA1) + p->moveState &= ~MOVESTATE_4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); +#endif + + p->qSpeedGround = 0; + } break; + + case 2: { + p->qWorldY -= r2; + p->qSpeedAirY = 0; + p->moveState |= MOVESTATE_IN_AIR; + } break; + + case 3: { + p->qWorldX += r2; + p->qSpeedAirX = 0; + p->moveState |= MOVESTATE_20; + +#if (GAME == GAME_SA1) + p->moveState &= ~MOVESTATE_4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); +#endif + + p->qSpeedGround = 0; + } break; + } + + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + } +} + +void SA2_LABEL(sub_80231C0)(Player *p) +{ + u8 r1; + u32 temp; + u8 r5; + s32 r2; + + if (p->qSpeedGround == 0) { + return; + } + + r1 = Q(0.25); + if (p->qSpeedGround >= 0) { + r1 = -Q(0.25); + } + + // without temp, the add instr. sources get switched + temp = p->rotation + r1; + r5 = temp; + + r2 = Q(SA2_LABEL(sub_802302C)(r5, p)); + + if (r2 <= 0) { + switch (((r5 + Q(0.125)) & 0xC0) >> 6) { + + case 0: { + p->qWorldY += r2; + p->qSpeedAirY = 0; + } break; + + case 1: { + p->qWorldX -= r2; + p->qSpeedAirX = 0; + p->moveState &= ~MOVESTATE_4; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + p->qSpeedGround = 0; + } break; + + case 2: { + p->qWorldY -= r2; + p->qSpeedAirY = 0; + p->moveState |= MOVESTATE_IN_AIR; + } break; + + case 3: { + p->qWorldX += r2; + p->qSpeedAirX = 0; + p->moveState &= ~MOVESTATE_4; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + + p->qSpeedGround = 0; + } break; + } + } +} + +// These don't appear to be in SA2 +#if (GAME == GAME_SA1) + +void Player_8043DDC(Player *p) +{ + if (p->SA2_LABEL(unk2A) == 0) { + s32 qSpeedGround; + if ((p->heldInput & DPAD_SIDEWAYS) != DPAD_RIGHT) { + if ((p->heldInput & DPAD_SIDEWAYS) == DPAD_LEFT) { + qSpeedGround = p->qSpeedGround; + + if (qSpeedGround <= Q(0)) { + p->moveState |= MOVESTATE_FACING_LEFT; + } else { + qSpeedGround -= Q(24. / 256.); + + if (qSpeedGround < Q(0)) { + qSpeedGround = -Q(96. / 256.); + qSpeedGround = qSpeedGround; + } + + p->qSpeedGround = qSpeedGround; + } + } + } else { + // _08043E14 + qSpeedGround = p->qSpeedGround; + + if (qSpeedGround >= 0) { + p->moveState &= ~MOVESTATE_FACING_LEFT; + } else { + qSpeedGround += Q(24. / 256.); + + if (qSpeedGround > Q(0)) { + qSpeedGround = +Q(96. / 256.); + qSpeedGround = qSpeedGround; + } + + p->qSpeedGround = qSpeedGround; + } + } + } + + { + s32 qHalfAccel = (p->acceleration >> 1); + s32 qSpeedGround = p->qSpeedGround; + if (qSpeedGround < 0) { + qSpeedGround += qHalfAccel; + if (qSpeedGround > Q(0)) { + qSpeedGround = Q(0); + } + + p->qSpeedGround = qSpeedGround; + } else if (qSpeedGround > 0) { + qSpeedGround -= qHalfAccel; + if (qSpeedGround < Q(0)) { + qSpeedGround = Q(0); + } + + p->qSpeedGround = qSpeedGround; + } + + if (qSpeedGround == 0) { + if (!(p->moveState & MOVESTATE_200)) { + p->moveState &= ~MOVESTATE_4; + + if (p->heldInput & DPAD_DOWN) { + p->charState = CHARSTATE_CROUCH; + } else { + p->charState = CHARSTATE_WALK_A; + } + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } else { + qSpeedGround = Q(3); + + if (p->moveState & MOVESTATE_FACING_LEFT) { + qSpeedGround = -qSpeedGround; + } + + p->qSpeedGround = qSpeedGround; + m4aSongNumStart(SE_SPIN_ATTACK); + } + } + } + + Player_80470AC(p); + SA2_LABEL(sub_8023128)(p); +} + +// TODO: Check how this differs from SA2 func sub_80232D0! +// (98.94%) https://decomp.me/scratch/KZphy +NONMATCH("asm/non_matching/game/stage/Player__Player_8043EC0.inc", void SA2_LABEL(sub_80232D0)(Player *p)) +{ + Camera *cam = &gCamera; + s32 qWorldX = p->qWorldX; + s32 qWorldY = p->qWorldY; + + if (p->playerID == PLAYER_1) { + s32 unkX = gUnknown_084ADF78[gCurrentLevel][0]; + s32 unkY; + + if ((unkX >= 0) && (qWorldX >= Q(unkX)) && (cam->SA2_LABEL(unk8) != 0) && !(cam->SA2_LABEL(unk50) & 0x1)) { + s32 r3 = gUnknown_084ADFC0[gCurrentLevel][0]; + s32 r2 = Q(r3); + qWorldX += r2; + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + gPartner.qWorldX += r2; + } + + cam->x += r3; + cam->SA2_LABEL(unk20) += r3; + } + // _08043F3E + + unkY = gUnknown_084ADF78[gCurrentLevel][1]; + + if ((unkY >= 0) && (qWorldY >= Q(unkY)) && (cam->SA2_LABEL(unkC) != 0) && !(cam->SA2_LABEL(unk50) & 0x2)) { + s32 r3 = gUnknown_084ADFC0[gCurrentLevel][1] << 8; + qWorldY += Q(r3); + + if (gNumSingleplayerCharacters == NUM_SINGLEPLAYER_CHARS_MAX) { + gPartner.qWorldY += Q(r3); + } + + cam->y += r3; + cam->SA2_LABEL(unk24) += r3; + } + } + // _08043F9C + + if ((p->moveState & (MOVESTATE_80000000 | MOVESTATE_DEAD)) != MOVESTATE_DEAD) { + // _08043F9C + 0xC + s32 qNoclipWorldX, qNoclipWorldY; + bool32 outOfBounds; + s32 qPlayerY = p->qWorldY; + + if (!(p->moveState & MOVESTATE_80000000)) { + if (!(gStageFlags & STAGE_FLAG__GRAVITY_INVERTED)) { + if (qPlayerY >= Q(gCamera.maxY) - 1) { + outOfBounds = TRUE; + } else { + outOfBounds = FALSE; + } + } else { + if (qPlayerY > Q(gCamera.minY)) { + outOfBounds = FALSE; + } else { + outOfBounds = TRUE; + } + } + + if (outOfBounds) { + // _08044004 + s32 qSpeedY; + p->moveState |= MOVESTATE_DEAD; + + if (p->moveState & MOVESTATE_IN_WATER) { + p->qSpeedAirY = -Q(PLAYER_JUMP_HEIGHT_UNDER_WATER); + } else { + p->qSpeedAirY = -Q(PLAYER_JUMP_HEIGHT); + } + // _0804401E + 0x2 + + if (!(gStageFlags & STAGE_FLAG__GRAVITY_INVERTED)) { + qWorldY = Q(cam->maxY) - 1; + } else { + qWorldY = Q(cam->minY); + } + } + } + // _08044042 + + qNoclipWorldX = qWorldX; + qNoclipWorldY = qWorldY; + + qWorldX = CLAMP(qWorldX, Q(cam->minX), Q(cam->maxX) - 1); + qWorldY = CLAMP(qWorldY, Q(cam->minY), Q(cam->maxY) - 1); + + if (qWorldX != qNoclipWorldX) { + p->qSpeedAirX = Q(0); + p->qSpeedGround = Q(0); + } + + if (qWorldY != qNoclipWorldY) { + p->qSpeedAirY = Q(0); + p->qSpeedGround = Q(0); + } + + p->qWorldX = qWorldX; + p->qWorldY = qWorldY; + } +} +END_NONMATCH + +bool32 Player_Spindash(Player *p) +{ + if (!(p->moveState & MOVESTATE_SPINDASH)) { + if ((p->charState != CHARSTATE_CROUCH) || !(p->frameInput & gPlayerControls.jump)) { + return FALSE; + } + + p->charState = CHARSTATE_SPINDASH; + m4aSongNumStart(SE_SPIN_ATTACK); + CreateSpindashDustEffect(); + + p->moveState |= MOVESTATE_SPINDASH; + + { +#ifndef NON_MATCHING + s16 qInitialAccel; + asm("mov %0, #0\n" : "=r"(qInitialAccel)); + p->qSpindashAccel = qInitialAccel; +#else + p->qSpindashAccel = Q(0); +#endif + } + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 9); + } else { + if (!(p->heldInput & DPAD_DOWN)) { + s32 qNewSpeed; + + p->moveState &= ~MOVESTATE_SPINDASH; + + qNewSpeed = !(p->moveState & MOVESTATE_2000) // + ? gUnknown_084AE188[I(p->qSpindashAccel)] + : gUnknown_084AE19A[I(p->qSpindashAccel)]; + + if (p->playerID == PLAYER_1) { + gCamera.SA2_LABEL(unk40) = 10; + } + + if (p->moveState & MOVESTATE_FACING_LEFT) { + qNewSpeed = -qNewSpeed; + } + + p->qSpeedGround = qNewSpeed; + p->moveState |= MOVESTATE_4; + + m4aSongNumStart(SE_SPINDASH_RELEASE); + p->charState = CHARSTATE_SPINATTACK; + } else { + s16 qNewAccel = p->qSpindashAccel; + + s16 qNewAccel2 = qNewAccel; + if (qNewAccel2 != Q(0)) { + qNewAccel = qNewAccel2 - (I(qNewAccel << 3)); + + if (qNewAccel <= Q(0)) { + qNewAccel = Q(0); + } + } + + if (p->charState != CHARSTATE_7) { + p->charState = CHARSTATE_SPINDASH; + } + + if (p->frameInput & gPlayerControls.jump) { + struct MP2KPlayerState *mPlayerInfo; + m4aSongNumStart(SE_SPIN_ATTACK); + + mPlayerInfo = gMPlayTable[gSongTable[SE_SPIN_ATTACK].ms].info; + m4aMPlayImmInit(mPlayerInfo); + m4aMPlayPitchControl(mPlayerInfo, 0xFFFF, (qNewAccel & ~0x7F)); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if ((p->character == CHARACTER_SONIC) || (p->character == CHARACTER_KNUCKLES)) { + p->charState = CHARSTATE_7; + } + } + + qNewAccel += Q(2.0); + qNewAccel = MAX(qNewAccel, Q(8.0)); + } + p->qSpindashAccel = qNewAccel; + } + + Player_804726C(p); + Player_8047280(p); + } + + SA2_LABEL(sub_80232D0)(p); + SA2_LABEL(sub_8022D6C)(p); + + return TRUE; +} + +#endif // (GAME == GAME_SA1) + +bool32 Player_TryJump(Player *p) +{ + u8 rot = p->rotation; + s32 r5 = 0; + s32 theta; + + if (!(p->frameInput & gPlayerControls.jump)) { + return FALSE; + } + + if (GRAVITY_IS_INVERTED) { + rot += Q(0.25); + rot = -rot; + rot -= Q(0.25); + } + + if (SA2_LABEL(sub_8022F58)(rot + Q(0.50), p) < 4) { + return FALSE; + } + + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~(MOVESTATE_1000000 | MOVESTATE_20); + p->moveState |= MOVESTATE_100; + p->moveState &= ~(MOVESTATE_800); + + switch (p->character) { + case CHARACTER_SONIC: + case CHARACTER_TAILS: + case CHARACTER_KNUCKLES: { + p->charState = CHARSTATE_SPINATTACK; + if (p->moveState & MOVESTATE_IN_WATER) { + r5 = 0x2A0; + } else { + r5 = 0x4E0; + } + } break; + + case CHARACTER_AMY: { + if (!(p->heldInput & DPAD_DOWN)) { + p->charState = CHARSTATE_85; + if (p->moveState & MOVESTATE_IN_WATER) { + r5 = 0x2A0; + } else { + r5 = 0x4E0; + } + } else { + s32 r2; + p->charState = CHARSTATE_91; + p->moveState &= ~MOVESTATE_2000000; + p->moveState |= MOVESTATE_4000000; + p->moveState &= ~MOVESTATE_100; + p->w.af.flags = 2; + if (p->moveState & MOVESTATE_IN_WATER) { + r2 = Q(2.50); + r5 = Q(0.75); + } else { + r2 = Q(4.00); + r5 = Q(1.25); + } + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedAirX = Q_MUL_NEG(r2, COS_24_8(p->rotation * 4)); + p->qSpeedAirY = Q_MUL_NEG(r2, SIN_24_8(p->rotation * 4)); + } else { + p->qSpeedAirX = +Q_MUL(r2, COS_24_8(p->rotation * 4)); + p->qSpeedAirY = +Q_MUL(r2, SIN_24_8(p->rotation * 4)); + } + } + } break; + } + + rot = p->rotation - Q(0.25); + p->qSpeedAirX += Q_MUL(r5, COS_24_8(rot * 4)); + p->qSpeedAirY += Q_MUL(r5, SIN_24_8(rot * 4)); + + m4aSongNumStart(SE_JUMP); + + if (p->character != CHARACTER_AMY) { + if (!(p->moveState & MOVESTATE_4)) { + p->moveState |= MOVESTATE_4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 9); + } else { + p->moveState |= MOVESTATE_FLIP_WITH_MOVE_DIR; + } + } + + return TRUE; +} + +// (98.55%) https://decomp.me/scratch/lAHT0 +NONMATCH("asm/non_matching/game/stage/Player__sub_8044434.inc", bool32 sub_8044434(Player *p)) +{ + u8 rot = p->rotation; + s32 r2 = 0; + + if (!(p->frameInput & gPlayerControls.jump)) { + return FALSE; + } + + if (GRAVITY_IS_INVERTED) { + rot += Q(0.25); + rot = -rot; + rot -= Q(0.25); + } + + p->layer ^= 1; + + if (SA2_LABEL(sub_8022F58)(rot + Q(0.50), p) < 4) { + p->layer ^= 1; + return FALSE; + } + + if (gPlayer.character == CHARACTER_AMY) { + m4aSongNumStop(SE_AMY_GRINDING); + } else { + m4aSongNumStop(SE_GRINDING); + } + + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~(MOVESTATE_1000000 | MOVESTATE_20); + p->moveState |= MOVESTATE_100; + p->moveState &= ~(MOVESTATE_800); + + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__TELEPORT; + + switch (p->character) { + case CHARACTER_SONIC: + case CHARACTER_TAILS: + case CHARACTER_KNUCKLES: { + p->charState = CHARSTATE_SPINATTACK; + } break; + + case CHARACTER_AMY: { + p->charState = CHARSTATE_85; + } break; + } + + if (p->moveState & MOVESTATE_IN_WATER) { + r2 = Q(2.625); + } else { + r2 = Q(4.875); + } + + rot = p->rotation - Q(0.25); + p->qSpeedAirY = Q_MUL(r2, SIN_24_8(rot * 4)); + m4aSongNumStart(SE_JUMP); + + SPRITE_FLAG_CLEAR(&p->spriteInfoBody->s, PRIORITY); + SPRITE_FLAG_SET_VALUE(&p->spriteInfoBody->s, PRIORITY, 2); + SPRITE_FLAG_CLEAR(&p->spriteInfoLimbs->s, PRIORITY); + SPRITE_FLAG_SET_VALUE(&p->spriteInfoLimbs->s, PRIORITY, 2); + + if (p->character != CHARACTER_AMY) { + if (!(p->moveState & MOVESTATE_4)) { + p->moveState |= MOVESTATE_4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 9); + } else { + p->moveState |= MOVESTATE_FLIP_WITH_MOVE_DIR; + } + } + + return TRUE; +} +END_NONMATCH + +// (91.12%) https://decomp.me/scratch/hJuDa +NONMATCH("asm/non_matching/game/stage/Player__Player_AirInputControls.inc", void Player_AirInputControls(Player *p)) +{ + s32 r5 = p->acceleration * 2; + s32 r6 = p->maxSpeed; + + if ((p->charState != CHARSTATE_HIT_AIR)) { + if (!(p->moveState & MOVESTATE_FLIP_WITH_MOVE_DIR)) { + s16 qAirSpeedS; + u16 qAirSpeedU = p->qSpeedAirX; + + if (p->heldInput & DPAD_LEFT) { + if (p->charState != CHARSTATE_BOUNCE) { + p->moveState |= MOVESTATE_FACING_LEFT; + } + + qAirSpeedS = qAirSpeedU; + qAirSpeedU = qAirSpeedS - r5; + qAirSpeedS = qAirSpeedU; + + if (qAirSpeedS < -r6) { + qAirSpeedU = qAirSpeedS + r5; + qAirSpeedS = qAirSpeedU; + + if (qAirSpeedS > -r6) { + qAirSpeedU = -r6; + } + } + } else if (p->heldInput & DPAD_RIGHT) { + if ((p->charState != CHARSTATE_BOUNCE)) { + p->moveState &= ~MOVESTATE_FACING_LEFT; + } + + qAirSpeedS = qAirSpeedU; + qAirSpeedU = qAirSpeedS + r5; + qAirSpeedS = qAirSpeedU; + + if (qAirSpeedS > r6) { + qAirSpeedU = qAirSpeedS - r5; + qAirSpeedS = qAirSpeedU; + + if (qAirSpeedS < r6) { + qAirSpeedU = r6; + } + } + } + + p->qSpeedAirX = qAirSpeedU; + } + + if ((u16)p->qSpeedAirY > (u16)(-Q(67) - 1)) { + s16 qSpeedAirX = p->qSpeedAirX; + s16 qSpeedAirXFrac = p->qSpeedAirX >> 5; + if (qSpeedAirXFrac < 0) { + qSpeedAirX -= qSpeedAirXFrac; + if (qSpeedAirX > 0) { + qSpeedAirX = 0; + } + + p->qSpeedAirX = qSpeedAirX; + } else if (qSpeedAirXFrac > 0) { + qSpeedAirX -= qSpeedAirXFrac; + + if (qSpeedAirX < 0) + qSpeedAirX = 0; + + p->qSpeedAirX = qSpeedAirX; + } + } + } +} +END_NONMATCH + +void Player_8044670(Player *p) +{ + s16 r4 = (!(p->moveState & MOVESTATE_IN_WATER)) ? -Q(3.0) : -Q(1.5); + + if (p->moveState & MOVESTATE_100) { + if (p->qSpeedAirY < r4) { + if (!(p->heldInput & gPlayerControls.jump)) { + p->qSpeedAirY = r4; + } + } else { + // Init mid-air action, if Jump button pressed + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) && (p->SA2_LABEL(unk61) == 0) && (p->frameInput & gPlayerControls.jump) + && (p->charState != CHARSTATE_HIT_AIR)) { + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->SA2_LABEL(unk61) = 1; + + switch (p->character) { + case CHARACTER_SONIC: { + Player_Sonic_InitInstaShield(p); + } break; + + case CHARACTER_TAILS: { + Player_Tails_InitFlying(p); + } break; + + case CHARACTER_KNUCKLES: { + Player_Knuckles_GlideInit(p); + } break; + + case CHARACTER_AMY: { + ; + } break; + } + } + } + } else if (!(p->moveState & MOVESTATE_200)) { + if (p->qSpeedAirY < -Q(11.8125)) { + p->qSpeedAirY = -Q(11.8125); + } + } +} + +void Player_8044750(Player *p) +{ + Camera *cam = &gCamera; + + if ((p->SA2_LABEL(unk25) == 0) || (--p->SA2_LABEL(unk25) == 0)) { + if (p->playerID == PLAYER_1) { + if (!(gStageFlags & STAGE_FLAG__GRAVITY_INVERTED)) { + if (cam->SA2_LABEL(unk4C) + cam->shiftY > -72) { + cam->SA2_LABEL(unk4C) -= 2; + } + } else { + if (cam->SA2_LABEL(unk4C) + cam->shiftY < 72) { + cam->SA2_LABEL(unk4C) += 2; + } + } + } + } else if (p->playerID == PLAYER_1) { + if (cam->SA2_LABEL(unk4C) > 0) { + cam->SA2_LABEL(unk4C) -= 2; + } else if (cam->SA2_LABEL(unk4C) < 0) { + cam->SA2_LABEL(unk4C) += 2; + } + } +} + +// TODO: Look up|down function? +// (98.79%) https://decomp.me/scratch/yy7rw +NONMATCH("asm/non_matching/game/stage/Player__Player_80447D8.inc", void Player_80447D8(Player *p)) +{ + Camera *cam = &gCamera; + + p->charState = CHARSTATE_CROUCH; + + if (p->qSpeedGround == 0) { + if ((p->SA2_LABEL(unk25) == 0) || (--p->SA2_LABEL(unk25) == 0)) { + if (p->playerID == PLAYER_1) { + if (!(gStageFlags & STAGE_FLAG__GRAVITY_INVERTED)) { + if (cam->SA2_LABEL(unk4C) + cam->shiftY < +60) { + cam->SA2_LABEL(unk4C) += 2; + } + } else { + if (cam->SA2_LABEL(unk4C) + cam->shiftY > -60) { + cam->SA2_LABEL(unk4C) -= 2; + } + } + } + } else if (p->playerID == PLAYER_1) { + if (cam->SA2_LABEL(unk4C) > 0) { + cam->SA2_LABEL(unk4C) -= 2; + } else if (cam->SA2_LABEL(unk4C) < 0) { + cam->SA2_LABEL(unk4C) += 2; + } + } + } else if (p->character != CHARACTER_AMY) { + m4aSongNumStart(SE_SPIN_ATTACK); + p->moveState |= MOVESTATE_4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 9); + p->charState = CHARSTATE_SPINATTACK; + + if (p->playerID == PLAYER_1) { + // TODO: Is this entire code block a macro? + // (also twice in sub_80448D0) + p->SA2_LABEL(unk25) = 120; + + if (p->playerID == PLAYER_1) { + if (cam->SA2_LABEL(unk4C) > 0) { + cam->SA2_LABEL(unk4C) -= 2; + asm(""); + } else if (cam->SA2_LABEL(unk4C) < 0) { + cam->SA2_LABEL(unk4C) += 2; + } + } + } + } +} +END_NONMATCH + +void sub_80448D0(Player *p) +{ + if (p->charState == CHARSTATE_12 || p->charState == CHARSTATE_13) { + if (p->playerID == PLAYER_1) { + // TODO: Is this entire code block a macro? + // (also in Player_80447D8) + p->SA2_LABEL(unk25) = 120; + + if (p->playerID == PLAYER_1) { + if (gCamera.SA2_LABEL(unk4C) > 0) { + gCamera.SA2_LABEL(unk4C) -= 2; + } else if (gCamera.SA2_LABEL(unk4C) < 0) { + gCamera.SA2_LABEL(unk4C) += 2; + } + } + } + } else { + switch (p->heldInput & DPAD_VERTICAL) { + case 0: { + if (p->playerID == PLAYER_1) { + p->SA2_LABEL(unk25) = 120; + + if (p->playerID == PLAYER_1) { + if (gCamera.SA2_LABEL(unk4C) > 0) { + gCamera.SA2_LABEL(unk4C) -= 2; + } else if (gCamera.SA2_LABEL(unk4C) < 0) { + gCamera.SA2_LABEL(unk4C) += 2; + } + } + } + + if (p->charState == CHARSTATE_CROUCH) { + p->charState = CHARSTATE_3; + } else if (p->charState == CHARSTATE_LOOK_UP) { + p->charState = CHARSTATE_11; + } + } break; + + case DPAD_UP: { + // _0804497C + if (p->qSpeedGround == 0) { + p->charState = CHARSTATE_LOOK_UP; + Player_8044750(p); + + } else if (p->playerID == PLAYER_1) { + // _08044990 + p->SA2_LABEL(unk25) = 120; + + if (p->playerID == PLAYER_1) { + if (gCamera.SA2_LABEL(unk4C) > 0) { + gCamera.SA2_LABEL(unk4C) -= 2; + } else if (gCamera.SA2_LABEL(unk4C) < 0) { + gCamera.SA2_LABEL(unk4C) += 2; + } + } + } + } break; + + case DPAD_DOWN: { + Player_80447D8(p); + } break; + } + } +} + +void sub_80449D8(Player *p) +{ + s32 qSpeedGround; + s32 rot; + s32 qMin; + + // TODO: Down | Right? Is this a bug? + if (p->heldInput & (DPAD_DOWN | DPAD_RIGHT)) { + if (((p->rotation + Q(0.375)) & 0xFF) < Q(0.75)) { + p->qSpeedGround += (SIN_24_8(p->rotation * 4) * 5) >> 5; + } + } + + qSpeedGround = p->qSpeedGround; + + if (p->heldInput & DPAD_LEFT) { + qSpeedGround -= Q(8. / 256.); + + qMin = Q(0.75); + if (qSpeedGround < qMin) { + qSpeedGround = qMin; + } + } + + qSpeedGround -= Q(8. / 256.); + + qMin = Q(0.75); + if (qSpeedGround < qMin) { + qSpeedGround = qMin; + } + + p->qSpeedGround = qSpeedGround; + + p->charState = CHARSTATE_16; + + qSpeedGround = p->qSpeedGround; + rot = p->rotation; + p->qSpeedAirX = Q_MUL(p->qSpeedGround, COS_24_8(rot * 4)); + p->qSpeedAirY = Q_MUL(p->qSpeedGround, SIN_24_8(rot * 4)); +} + +void SA2_LABEL(sub_8023878)(Player *p) +{ +#if (GAME == GAME_SA1) +#define WATER_ACTIVE_CHECK 1 +#else +#define WATER_ACTIVE_CHECK gWater.isActive == TRUE +#endif + + p->moveState &= ~MOVESTATE_1000; + if (WATER_ACTIVE_CHECK && gWater.currentWaterLevel >= 0 && (I(p->qWorldY) - 4) >= gWater.currentWaterLevel) { + if (!(p->moveState & MOVESTATE_IN_WATER)) { + p->moveState |= MOVESTATE_IN_WATER; + p->moveState |= MOVESTATE_1000; + + p->qSpeedAirX = p->qSpeedAirX >> 1; + p->qSpeedAirY = p->qSpeedAirY >> 2; + if ((p->character != CHARACTER_KNUCKLES || p->SA2_LABEL(unk61) != 9) && (s8)p->SA2_LABEL(unk88) < 1) { + p->SA2_LABEL(unk88) = 10; + CreateWaterfallSurfaceHitEffect(I(p->qWorldX), gWater.currentWaterLevel); + m4aSongNumStart(SE_WATERFALL_SURFACE_HIT); + } + } + +#if (GAME == GAME_SA1) + if (!(p->moveState & MOVESTATE_2000)) { + p->maxSpeed = Q(2.25); + p->acceleration = Q(4. / 256.); + p->deceleration = Q(48. / 256.); + } else { + p->maxSpeed = Q(3.75); + p->acceleration = Q(18. / 256.); + p->deceleration = Q(96. / 256.); + } +#endif + + if (--p->framesUntilDrownCountDecrement < 1) { + switch (p->secondsUntilDrown--) { + case 11: + if (p->playerID == PLAYER_1) { + gMusicManagerState.unk4 = 16; + } + break; + case 12: + SpawnDrowningCountdownNum(p, 5); + break; + case 10: + SpawnDrowningCountdownNum(p, 4); + break; + case 8: + SpawnDrowningCountdownNum(p, 3); + break; + case 6: + SpawnDrowningCountdownNum(p, 2); + break; + case 4: + SpawnDrowningCountdownNum(p, 1); + break; + case 2: + SpawnDrowningCountdownNum(p, 0); + break; + } + if (p->secondsUntilDrown < 0) { + p->moveState |= MOVESTATE_DEAD; + p->qSpeedAirY = 0; + SpawnAirBubbles(p->qWorldX, p->qWorldY - Q(12), 0, 1); + SpawnBubblesAfterDrowning(p); + } + p->framesUntilDrownCountDecrement = 60; + } + if (!(gStageTime % 16u) && !(PseudoRandom32() & 0x300)) { + s32 qDX = ((p->moveState & MOVESTATE_FACING_LEFT) ? -Q(4) : +Q(4)); + SpawnAirBubbles(p->qWorldX + qDX, p->qWorldY - Q(4), 0, 0); + } + } else { + if (p->moveState & MOVESTATE_IN_WATER) { + p->moveState &= ~MOVESTATE_IN_WATER; + p->moveState |= MOVESTATE_1000; + p->qSpeedAirY = p->qSpeedAirY << 1; + + if ((p->character != CHARACTER_KNUCKLES || p->SA2_LABEL(unk61) != 9) && p->SA2_LABEL(unk88) < 1) { + p->SA2_LABEL(unk88) = 10; + CreateWaterfallSurfaceHitEffect(I(p->qWorldX), gWater.currentWaterLevel); + m4aSongNumStart(SE_WATERFALL_SURFACE_HIT); + } + } +#if (GAME == GAME_SA1) + if (!(p->moveState & MOVESTATE_2000)) { + p->maxSpeed = Q(4.50); + p->acceleration = Q(8. / 256.); + p->deceleration = Q(96. / 256.); + } else { + p->maxSpeed = Q(7.50); + p->acceleration = Q(36. / 256.); + p->deceleration = Q(192. / 256.); + } +#endif + // Inline of Player_InitializeDrowning? + p->framesUntilDrownCountDecrement = 60; + p->secondsUntilDrown = 30; + +#if (GAME == GAME_SA1) + if (p->playerID == PLAYER_1) { + m4aSongNumStop(MUS_DROWNING); + } +#else + if (gMPlayTable[0].info->songHeader == gSongTable[MUS_DROWNING].header && p->playerID == PLAYER_1) { + m4aSongNumStartOrContinue(gLevelSongs[gCurrentLevel]); + } +#endif + } + + if (p->itemEffect & PLAYER_ITEM_EFFECT__SPEED_UP) { +#if (GAME == GAME_SA1) + p->maxSpeed = p->maxSpeed * 2; + p->acceleration = p->acceleration * 2; + p->deceleration = p->deceleration * 2; +#else + p->acceleration = p->acceleration * 2; + p->deceleration = p->deceleration * 2; +#endif + } else if (p->itemEffect & PLAYER_ITEM_EFFECT__MP_SLOW_DOWN) { + p->maxSpeed = p->maxSpeed >> 2; + p->acceleration = p->acceleration >> 2; + p->deceleration = p->deceleration >> 2; + } + + if (p->SA2_LABEL(unk88) != 0) { + p->SA2_LABEL(unk88)--; + } +} + +void Player_8044D74(Player *p) +{ + Sprite *sprBelow = p->stoodObj; + CamCoord sprWorldX = gCamera.x + sprBelow->x; + + s32 sprWorldSubOffsetLeft = Q(sprWorldX + sprBelow->hitboxes[0].b.left - p->spriteOffsetX + 1); + s32 sprWorldSub2; + + if ((p->qWorldX < sprWorldSubOffsetLeft) && (sprBelow->hitboxes[0].b.left != 0)) { + if ((p->moveState & MOVESTATE_FACING_LEFT)) { + p->charState = CHARSTATE_12; + } else { + p->charState = CHARSTATE_13; + } + + return; + } else { + s32 sprWorldSubOffsetRight = Q(sprWorldX + sprBelow->hitboxes[0].b.right + p->spriteOffsetX - 2); + + if ((p->qWorldX > sprWorldSubOffsetRight) && (sprBelow->hitboxes[0].b.right != 0)) { + if ((p->moveState & MOVESTATE_FACING_LEFT)) { + p->charState = CHARSTATE_13; + } else { + p->charState = CHARSTATE_12; + } + + return; + } + } + + sprWorldSub2 = Q(sprWorldX + sprBelow->hitboxes[0].b.left - p->spriteOffsetX + 2); + + if ((p->qWorldX < sprWorldSub2) || (p->qWorldX > Q(sprWorldX + sprBelow->hitboxes[0].b.right + p->spriteOffsetX - 3))) { + if (p->prevCharState == 12 || p->prevCharState == 13) { + // TODO: Are these names accurate, if charState gets get to prevCharState? + p->charState = p->prevCharState; + } + } +} + +void Player_8044E48(Player *p) +{ + s32 worldX = I(p->qWorldX); + s32 worldY = I(p->qWorldY); + s32 res; + + res = SA2_LABEL(sub_801E4E4)(worldY + p->spriteOffsetY, worldX, p->layer, +8, 0, SA2_LABEL(sub_801EE64)); + + if (res > 8) { + s32 r6; + if (GRAVITY_IS_INVERTED) { + s32 x, y; + s32 x2, y2; + y = p->spriteOffsetY; + y = worldY - y; + x = worldX - 2; + r6 = SA2_LABEL(sub_801E4E4)(y, x - p->spriteOffsetX, p->layer, -8, 0, SA2_LABEL(sub_801EE64)); + + y2 = p->spriteOffsetY; + y2 = worldY - y2; + x2 = worldX + 2; + res = SA2_LABEL(sub_801E4E4)(y2, x2 + p->spriteOffsetX, p->layer, -8, 0, SA2_LABEL(sub_801EE64)); + } else { + s32 x, y; + s32 x2, y2; + y = worldY + p->spriteOffsetY; + x = worldX - 2; + r6 = SA2_LABEL(sub_801E4E4)(y, x - p->spriteOffsetX, p->layer, +8, 0, SA2_LABEL(sub_801EE64)); + + y2 = worldY + p->spriteOffsetY; + x2 = worldX + 2; + res = SA2_LABEL(sub_801E4E4)(y2, x2 + p->spriteOffsetX, p->layer, +8, 0, SA2_LABEL(sub_801EE64)); + } + + if ((r6 > 8) && (res == 0)) { + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + p->charState = CHARSTATE_13; + } else { + p->charState = CHARSTATE_12; + } + } else if ((r6 == 0) && (res > 8)) { + if ((p->moveState & MOVESTATE_FACING_LEFT)) { + p->charState = CHARSTATE_13; + } else { + p->charState = CHARSTATE_12; + } + } + } +} + +void Player_8044F7C(Player *p) +{ + s32 qSpeed; + u8 rot; + + if ((p->SA2_LABEL(unk2A) == 0) && (p->charState != CHARSTATE_64) && (p->charState != CHARSTATE_27)) { + switch (p->heldInput & DPAD_SIDEWAYS) { + case 0: { + if (p->qSpeedGround != Q(0)) { + if ((p->charState == CHARSTATE_8) || (p->charState == CHARSTATE_BRAKE) || (p->charState == CHARSTATE_IDLE)) { + p->charState = CHARSTATE_WALK_A; + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + } else if (!(p->moveState & MOVESTATE_800000)) { + if ((p->character != CHARACTER_AMY) || !(p->moveState & MOVESTATE_200)) { + + if (p->charState == CHARSTATE_CROUCH) { + p->charState = CHARSTATE_3; + } else if (p->charState == CHARSTATE_LOOK_UP) { + p->charState = CHARSTATE_11; + } else if ((p->charState != CHARSTATE_3) && (p->charState != CHARSTATE_11)) { + p->charState = CHARSTATE_IDLE; + } + + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + } + + if (p->character == CHARACTER_AMY) { + if (p->charState == CHARSTATE_CROUCH) { + qSpeed = p->qSpeedGround; + if (qSpeed > 0) { + qSpeed -= p->deceleration; + + if (qSpeed < 0) { + qSpeed = 0; + } + } else { + qSpeed += p->deceleration; + + if ((qSpeed) > 0) { + qSpeed = 0; + } + } + p->qSpeedGround = qSpeed; + } + } + + } break; + + case DPAD_LEFT: { + Player_8043970(p); + } break; + + case DPAD_RIGHT: { + Player_8043A2C(p); + } break; + } + + if ((p->character == CHARACTER_AMY) && (p->moveState & MOVESTATE_200)) { + qSpeed = p->qSpeedGround; + if (qSpeed == Q(0)) { + qSpeed = Q(3); + if (p->moveState & MOVESTATE_FACING_LEFT) { + NEGATE(qSpeed); + } + p->qSpeedGround = qSpeed; + } + } else { + if ((!((p->rotation + Q(0.125)) & 0xC0)) && (p->qSpeedGround == 0)) { + p->moveState &= ~MOVESTATE_20; + + if (!(p->moveState & MOVESTATE_800000)) { + if ((p->charState != CHARSTATE_3) && (p->charState != CHARSTATE_11)) { + p->charState = 0; + } + + if (p->moveState & MOVESTATE_STOOD_ON_OBJ) { + Player_8044D74(p); + } else { + Player_8044E48(p); + } + } + } + } + } + + sub_80448D0(p); + + if (!(p->heldInput & DPAD_SIDEWAYS)) { + qSpeed = p->qSpeedGround; + if (qSpeed > 0) { + qSpeed -= Q(8. / 256.); + qSpeed = MAX(Q(0), qSpeed); + p->qSpeedGround = qSpeed; + } else if (qSpeed < 0) { + qSpeed += Q(8. / 256.); + qSpeed = MIN(Q(0), qSpeed); + p->qSpeedGround = qSpeed; + } + } + + qSpeed = p->qSpeedGround; + p->qSpeedAirX = Q_MUL(qSpeed, COS_24_8((rot = p->rotation) * 4)); + p->qSpeedAirY = Q_MUL(qSpeed, SIN_24_8(rot * 4)); + + SA2_LABEL(sub_8023128)(p); +} + +void Player_HandleSpriteYOffsetChange(Player *p, s32 spriteOffsetY) +{ + u8 rot; + if (p->spriteOffsetY == spriteOffsetY) { + return; + } + + rot = p->rotation; + if (GRAVITY_IS_INVERTED) { + rot += Q(1. / 4.); + rot = -rot; + rot -= Q(1. / 4.); + } + + if ((s32)(rot + Q(1. / 8.)) > 0) { + if (rot != 0) { + rot = (rot + Q(1. / 8.)) - 1; + ; + } else { + rot = Q(1. / 8.); + } + } else { + if (rot != 0) { + rot = (rot + Q(1. / 8.)); + } else { + rot = Q(1. / 8.) - 1; + } + } + + switch ((rot >> 6)) { + case 0: { + p->qWorldY -= Q(spriteOffsetY - p->spriteOffsetY); + } break; + + case 2: { + p->qWorldY += Q(spriteOffsetY - p->spriteOffsetY); + } break; + + case 1: { + p->qWorldX += Q(spriteOffsetY - p->spriteOffsetY); + } break; + + case 3: { + p->qWorldX -= Q(spriteOffsetY - p->spriteOffsetY); + } break; + } +} + +void Player_Debug_TestRingScatter(Player *p) +{ + if (p->moveState & MOVESTATE_80000000) { + s32 qSpeedGround = p->qSpeedGround; + if (gInput & DPAD_ANY) { + qSpeedGround += Q(0.125); + qSpeedGround = qSpeedGround >= Q(0) ? CLAMP(qSpeedGround, Q(0), Q(16)) : Q(0); + } else { + qSpeedGround = 0; + } + p->qSpeedGround = qSpeedGround; + + switch (gInput & DPAD_SIDEWAYS) { + case DPAD_LEFT: + p->qSpeedAirX = -qSpeedGround; + break; + + case DPAD_RIGHT: + p->qSpeedAirX = +qSpeedGround; + break; + + default: + p->qSpeedAirX = 0; + } + + switch (gInput & DPAD_VERTICAL) { + case DPAD_UP: + p->qSpeedAirY = -qSpeedGround; + break; + + case DPAD_DOWN: + p->qSpeedAirY = +qSpeedGround; + break; + + default: + p->qSpeedAirY = 0; + } + + PLAYERFN_UPDATE_POSITION(p); + SA2_LABEL(sub_80232D0)(p); + + if (gPressedKeys & B_BUTTON) { + InitScatteringRings(I(p->qWorldX), I(p->qWorldY), 1); + } + } +} + +void Task_PlayerHandleDeath(void) +{ + player_0_Task *gt = TASK_DATA(gCurTask); + u32 val = gt->unk4; + if (val == 0) { + if (IS_SINGLE_PLAYER) { + TaskDestroy(gCurTask); + + if ((!LOADED_SAVE->timeLimitDisabled + && (gCourseTime > MAX_COURSE_TIME || (gStageFlags & STAGE_FLAG__TIMER_REVERSED && gCourseTime == 0))) +#if (GAME == GAME_SA2) + || ((gGameMode == GAME_MODE_TIME_ATTACK || gGameMode == GAME_MODE_BOSS_TIME_ATTACK) && gCourseTime > MAX_COURSE_TIME) +#endif + ) { + HandleDeath(); + } else { + gRingCount = 0; +#if (GAME == GAME_SA2) + gSpecialRingCount = 0; +#endif + HandleLifeLost(); + } + } else { +#if (GAME == GAME_SA1) + if (gGameMode != GAME_MODE_CHAO_HUNT && gGameMode != GAME_MODE_TEAM_PLAY) +#endif + { + gRingCount = 0; + } + +#if (GAME == GAME_SA2) + if (gGameMode == GAME_MODE_MULTI_PLAYER) { + gRingCount = 1; + } +#endif + +#if (GAME == GAME_SA2) + gSpecialRingCount = 0; +#endif + InitializePlayer(&gPlayer); + gCamera.x = I(gPlayer.qWorldX) + gCamera.shiftX - DISPLAY_CENTER_X; + gCamera.y = I(gPlayer.qWorldY) + gCamera.shiftY - DISPLAY_CENTER_Y; + m4aMPlayTempoControl(&gMPlayInfo_BGM, 256); + gPlayer.moveState = 0; + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + + gPlayer.spriteInfoBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + gPlayer.spriteInfoBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 2); + gPlayer.spriteInfoLimbs->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + gPlayer.spriteInfoLimbs->s.frameFlags |= SPRITE_FLAG(PRIORITY, 2); + + gCamera.SA2_LABEL(unk50) &= ~0x3; + +#if (GAME == GAME_SA2) + if (gPlayer.character == CHARACTER_CREAM && gCheese != NULL) { + gCheese->posX = gPlayer.qWorldX; + gCheese->posY = gPlayer.qWorldY; + } +#endif + + gCurTask->main = Task_PlayerMain; + // gPlayer.callback = Player_TouchGround; + } + } else { + val--; + gt->unk4 = val; + } +} + +static inline bool32 DeadPlayerLeftScreen(Player *p, struct Camera *cam, s32 playerY) +{ + if (p->moveState & MOVESTATE_80000000) { + return FALSE; + } +#if (GAME == GAME_SA1) + if (!GRAVITY_IS_INVERTED) { + if (playerY >= Q(cam->y) + Q(DISPLAY_HEIGHT + 80) - 1) { + return TRUE; + } + } else { + if (playerY <= Q(cam->y - 80)) { + return TRUE; + } + } +#elif (GAME == GAME_SA2) + if (GRAVITY_IS_INVERTED) { + if (playerY <= Q(cam->y - 80)) { + return TRUE; + } + } else { + if (playerY >= Q(cam->y) + Q(DISPLAY_HEIGHT + 80) - 1) { + return TRUE; + } + } +#endif + return FALSE; +} + +void Task_PlayerDied(void) +{ + Player *p = &gPlayer; + + PlayerSpriteInfo *psi1 = gPlayer.spriteInfoBody; + PlayerSpriteInfo *psi2 = gPlayer.spriteInfoLimbs; + + if (DeadPlayerLeftScreen(&gPlayer, &gCamera, gPlayer.qWorldY)) { + player_0_Task *gt = TASK_DATA(gCurTask); + gt->unk4 = TIME(0, 1); +#if (GAME == GAME_SA2) + gPlayer.moveState |= MOVESTATE_100000; + if (IS_MULTI_PLAYER) { + sub_8024B10(p, psi1); + } +#endif + gCurTask->main = Task_PlayerHandleDeath; + return; + } + +#if (GAME == GAME_SA1) + PLAYERFN_UPDATE_POSITION(p); + PLAYERFN_UPDATE_AIR_FALL_SPEED(p); +#elif (GAME == GAME_SA2) + PLAYERFN_UPDATE_AIR_FALL_SPEED(p); + PLAYERFN_UPDATE_POSITION(p); +#endif + SA2_LABEL(sub_802486C)(p, psi1); + SA2_LABEL(sub_8024B10)(p, psi1); + SA2_LABEL(sub_8024F74)(p, psi2); +} + +void Task_PlayerMain(void) +{ + Player *p = &gPlayer; + +#if (GAME == GAME_SA2) + Player_HandleBoostThreshold(p); + sub_80298DC(p); + Player_ApplyBoostPhysics(p); + Player_HandleWalkAnim(p); + + gUnknown_030054FC = 0; + gUnknown_030054E0 = 0; + sub_802460C(p); + sub_800DF8C(p); + sub_8023878(p); + CallPlayerTransition(p); + + if (!(p->moveState & MOVESTATE_IA_OVERRIDE)) { + p->callback(p); + } else if (IS_BOSS_STAGE(gCurrentLevel)) { + sub_80232D0(p); + } + + sub_802486C(p, p->spriteInfoBody); + sub_8024B10(p, p->spriteInfoBody); + sub_8024F74(p, p->spriteInfoLimbs); + + if (p->charState != CHARSTATE_HIT_AIR && p->timerInvulnerability > 0) { + p->timerInvulnerability--; + } + + if (p->disableTrickTimer != 0) { + p->disableTrickTimer--; + } + + sub_8023748(p); + + // from boost_effect.c + sub_8015790(); + sub_80156D0(); + + p->moveState &= ~MOVESTATE_ICE_SLIDE; + gHomingTarget.squarePlayerDistance = SQUARE(128); + gHomingTarget.angle = 0; + gCheeseTarget.squarePlayerDistance = SQUARE(CHEESE_DISTANCE_MAX); + gCheeseTarget.task = NULL; +#endif + + if (p->moveState & MOVESTATE_DEAD) { + struct Camera *cam = &gCamera; + gCurTask->main = Task_PlayerDied; + p->charState = CHARSTATE_DEAD; + p->qSpeedAirX = 0; + +#if (GAME == GAME_SA2) + if (p->qSpeedAirY < -Q(4)) { + p->qSpeedAirY = -Q(2); + } else if (p->qSpeedAirY > 0) { + p->qSpeedAirY = 0; + } +#endif + + p->timerInvulnerability = 2; + p->itemEffect = 0; + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->stoodObj = NULL; + cam->SA2_LABEL(unk50) |= 3; + + if (IS_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__ACT_START; + } + + p->spriteInfoBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + p->spriteInfoBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 1); + p->SA2_LABEL(unk80) = 0x100; + p->SA2_LABEL(unk82) = 0x100; + +#if (GAME == GAME_SA1) + m4aSongNumStop(28); + m4aSongNumStop(27); + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); +#elif (GAME == GAME_SA2) + // TODO: macro IS_SONG_PLAYING(...) + if (gMPlayTable[0].info->songHeader == gSongTable[MUS_DROWNING].header) { + m4aSongNumStartOrContinue(gLevelSongs[gCurrentLevel]); + } + if (gMPlayTable[0].info->songHeader == gSongTable[MUS_INVINCIBILITY].header) { + m4aSongNumStartOrContinue(gLevelSongs[gCurrentLevel]); + } + + m4aSongNumStop(MUS_DROWNING); + + if (p->character == CHARACTER_TAILS) { + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + + if (p->character == CHARACTER_CREAM) { + m4aSongNumStop(SE_CREAM_FLYING); + } +#endif + + if (p->secondsUntilDrown < 0) { + m4aSongNumStart(192); + } else { + m4aSongNumStart(SE_LIFE_LOST); + } + } else { +#if (GAME == GAME_SA1) + SA2_LABEL(sub_802460C)(p); + SA2_LABEL(sub_8023878)(p); + + if (!(p->moveState & 0x400000)) { + switch (p->character) { + case CHARACTER_SONIC: { + Player_Sonic_80473AC(p); + } break; + + case CHARACTER_TAILS: { + Player_Tails_8047BA0(p); + } break; + + case CHARACTER_KNUCKLES: { + Player_Knuckles_8049000(p); + } break; + + case CHARACTER_AMY: { + Player_Amy_80497AC(p); + } break; + } + } +#endif + } + // 124 +#if (GAME == GAME_SA1) + SA2_LABEL(sub_802486C)(p, p->spriteInfoBody); + SA2_LABEL(sub_8024B10)(p, p->spriteInfoBody); + SA2_LABEL(sub_8024F74)(p, p->spriteInfoLimbs); + + if ((p->charState != CHARSTATE_HIT_AIR) && (p->timerInvulnerability > 0)) { + p->timerInvulnerability--; + } + + if (p->itemEffect != 0) { + if ((p->itemEffect & PLAYER_ITEM_EFFECT__SPEED_UP) && (--p->timerSpeedup == 0)) { + m4aMPlayTempoControl(&gMPlayInfo_BGM, Q(1.0)); + p->itemEffect &= ~PLAYER_ITEM_EFFECT__SPEED_UP; + } + + if ((p->itemEffect & PLAYER_ITEM_EFFECT__MP_SLOW_DOWN) && (--p->timerSpeedup == 0)) { + m4aMPlayTempoControl(&gMPlayInfo_BGM, Q(1.0)); + p->itemEffect &= ~PLAYER_ITEM_EFFECT__MP_SLOW_DOWN; + } + + if ((p->itemEffect & PLAYER_ITEM_EFFECT__INVINCIBILITY) && (--p->timerInvincibility == 0)) { + p->itemEffect &= ~PLAYER_ITEM_EFFECT__INVINCIBILITY; + m4aSongNumStop(28); + } + + if ((p->itemEffect & PLAYER_ITEM_EFFECT__20) && (--p->timer24 == 0)) { + p->itemEffect &= ~PLAYER_ITEM_EFFECT__20; + + gDispCnt &= ~0x8000; + gWinRegs[5] = 0x3F; + } + } +#endif +} + +// TODO(Jace): Could this be exclusively for the CPU Tails? +// I didn't find a way to trigger this procedure yet. +// (93.14%) https://decomp.me/scratch/CpseV +NONMATCH("asm/non_matching/game/stage/Player__Player_Tails_804571C.inc", void Player_Tails_804571C(Player *p)) +{ + u16 gravityFlag = (gStageFlags & STAGE_FLAG__GRAVITY_INVERTED); + + p->layer = gPlayer.layer; + + if (gPlayer.moveState & MOVESTATE_1000000) { + gPlayer.layer ^= 0x1; + } + + if (p->moveState & MOVESTATE_IN_WATER) { + p->charState = CHARSTATE_SWIMMING; + } else { + p->charState = CHARSTATE_FLYING; + } + + if (I(p->qWorldX) < gCamera.x - CAM_REGION_WIDTH) { + p->qWorldX = Q(gCamera.x - CAM_REGION_WIDTH); + } + + if (I(p->qWorldX) > gCamera.x + DISPLAY_WIDTH + CAM_REGION_WIDTH) { + p->qWorldX = Q(gCamera.x + DISPLAY_WIDTH + CAM_REGION_WIDTH); + } + + if (I(p->qWorldY) < gCamera.y - CAM_REGION_WIDTH) { + p->qWorldY = Q(gCamera.y - CAM_REGION_WIDTH); + } + + if (I(p->qWorldY) > gCamera.y + DISPLAY_HEIGHT + CAM_REGION_WIDTH) { + p->qWorldY = Q(gCamera.y + DISPLAY_HEIGHT + CAM_REGION_WIDTH); + } + // _080457CE + + if (((I(p->qWorldX) - 32) < I(gPlayer.qWorldX)) && ((I(p->qWorldX) + 32) > I(gPlayer.qWorldX)) + && ((!gravityFlag && ((I(p->qWorldY) - 32) < I(gPlayer.qWorldY) - 48) && ((I(p->qWorldY) + 32) > I(gPlayer.qWorldY) - 48)) + || (gravityFlag && ((I(p->qWorldY) - 32) < I(gPlayer.qWorldY) + 48) && ((I(p->qWorldY) + 32) > I(gPlayer.qWorldY) + 48))) + && (SA2_LABEL(sub_8022F58)(0, p) >= 0)) { + // _08045834 + 0xA + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_SPINDASH; + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->moveState &= ~MOVESTATE_8000; + + if (p->character == CHARACTER_TAILS) { + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + + if (p->character == CHARACTER_AMY) { + p->moveState &= ~(MOVESTATE_2000000 | MOVESTATE_4000000); + } + + p->qSpeedGround = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + + p->charState = CHARSTATE_56; + p->moveState &= ~MOVESTATE_4; + p->moveState &= ~MOVESTATE_FLIP_WITH_MOVE_DIR; + p->moveState &= ~MOVESTATE_200; + p->moveState &= ~MOVESTATE_100000; + p->moveState &= ~MOVESTATE_800000; + p->moveState &= ~MOVESTATE_DEAD; + p->moveState &= ~MOVESTATE_IGNORE_INPUT; + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + p->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + p->stoodObj = NULL; + + gCurTask->main = Task_8045B38; + } else { + s32 r2; + s32 qWorld; + s32 qDelta; + s32 world; + // _080458F8 + if ((I(p->qWorldX) + 1) < I(gPlayer.qWorldX)) { + p->qWorldX += Q(2); + p->moveState &= ~MOVESTATE_FACING_LEFT; + } else if (I(gPlayer.qWorldX) < (I(p->qWorldX) - 1)) { + p->qWorldX -= Q(2); + p->moveState |= MOVESTATE_FACING_LEFT; + } + // _08045934 + + world = I(p->qWorldY); + qDelta = p->qWorldY; + + if (!gravityFlag) { + r2 = I(gPlayer.qWorldY) - 48; + } else { + r2 = I(gPlayer.qWorldY) + 48; + } + + if (world < r2) { + qDelta = +Q(1); + } else if (r2 < world) { + qDelta = -Q(1); + } else { + return; + } + + p->qWorldY += qDelta; + } +} +END_NONMATCH + +// (90.78%) https://decomp.me/scratch/SwkK7 +NONMATCH("asm/non_matching/game/stage/Player__Task_804597C.inc", void Task_804597C(void)) +{ + PlayerSpriteInfo *psiPartnerBody = gPartner.spriteInfoBody; + PlayerSpriteInfo *psiPartnerLimbs = gPartner.spriteInfoLimbs; + s32 qPartnerWorldY = gPartner.qWorldY; + u32 qPartnerMovestate = gPartner.moveState; + Camera *cam = &gCamera; + s32 qWorld; + + if (!(qPartnerMovestate & MOVESTATE_80000000)) { + s32 r1; + + if (!GRAVITY_IS_INVERTED) { + if (qPartnerWorldY >= Q(cam->y) + Q(DISPLAY_WIDTH) - 1) { + r1 = 1; + } else { + r1 = 0; + } + } else { + if (qPartnerWorldY > Q(cam->y - DISPLAY_CENTER_Y)) { + r1 = 0; + } else { + r1 = 1; + } + } + + if (r1) { + // _080459D8 + + gPartner.qWorldX = Q(cam->x - 256); + gPartner.qWorldY = Q(cam->y - 256); + gPartner.spriteInfoBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + gPartner.spriteInfoBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 2); + gPartner.moveState &= ~MOVESTATE_20; + gPartner.moveState &= ~MOVESTATE_DEAD; + + if (gPartner.moveState & MOVESTATE_IN_WATER) { + gPartner.charState = CHARSTATE_SWIMMING; + } else { + gPartner.charState = CHARSTATE_FLYING; + } + + // Inline of Player_InitializeDrowning? + gPartner.framesUntilDrownCountDecrement = TIME(0, 1); + gPartner.secondsUntilDrown = 30; + + if (gPartner.playerID == 0) { + m4aSongNumStop(MUS_DROWNING); + } + // _08045A4E + + gCurTask->main = Task_8045AD8; + return; + } + } + // _08045A60 + + gPartner.qWorldX += gPartner.qSpeedAirX; + + if ((gStageFlags ^ SA2_LABEL(gUnknown_0300544C)) & STAGE_FLAG__GRAVITY_INVERTED) { + gPartner.qSpeedAirY = -gPartner.qSpeedAirY; + } + // _08045A80 + + if (gStageFlags & STAGE_FLAG__GRAVITY_INVERTED) { + qWorld = gPartner.qWorldY - gPartner.qSpeedAirY; + } else { + qWorld = gPartner.qWorldY + gPartner.qSpeedAirY; + } + + gPartner.qWorldY = qWorld; + + if (!(gPartner.moveState & MOVESTATE_IN_WATER)) { + gPartner.qSpeedAirY += Q(42. / 256.); + } else { + gPartner.qSpeedAirY += Q(12. / 256.); + } + + SA2_LABEL(sub_802486C)(&gPartner, psiPartnerBody); + SA2_LABEL(sub_8024B10)(&gPartner, psiPartnerBody); + SA2_LABEL(sub_8024F74)(&gPartner, psiPartnerLimbs); +} +END_NONMATCH + +void Task_8045AD8(void) +{ + Player *partner = &gPartner; + + SA2_LABEL(sub_8023878)(partner); + + if (gPartner.character == CHARACTER_TAILS) { + Player_Tails_804571C(partner); + } + + SA2_LABEL(sub_802486C)(partner, gPartner.spriteInfoBody); + SA2_LABEL(sub_8024B10)(partner, gPartner.spriteInfoBody); + SA2_LABEL(sub_8024F74)(partner, gPartner.spriteInfoLimbs); + + if (gPartner.charState != CHARSTATE_HIT_AIR) { + if (gPartner.timerInvulnerability > 0) { + gPartner.timerInvulnerability--; + } + } + + partner->SA2_LABEL(unk25) = 120; +} + +void Task_8045B38(void) +{ + Player *partner = &gPartner; + PlayerSpriteInfo *psiBody; + + if (!IS_ALIVE(partner)) { + gCurTask->main = Task_804597C; + + partner->charState = CHARSTATE_DEAD; + partner->qSpeedAirX = Q(0); + partner->timerInvulnerability = 2; + partner->itemEffect = 0; + partner->moveState &= ~MOVESTATE_20; + partner->moveState &= ~MOVESTATE_STOOD_ON_OBJ; + partner->stoodObj = NULL; + psiBody = partner->spriteInfoBody; + psiBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + psiBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 1); + partner->SA2_LABEL(unk80) = Q(1.0); + partner->SA2_LABEL(unk82) = Q(1.0); + + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + + if (partner->secondsUntilDrown < 0) { + m4aSongNumStart(SE_DROWNED); + } else { + m4aSongNumStart(SE_LIFE_LOST); + } + } else { + sub_8045DF0(partner); + SA2_LABEL(sub_8023878)(partner); + + if ((I(partner->qWorldX) < gCamera.x - CAM_REGION_WIDTH) || (I(partner->qWorldX) > gCamera.x + DISPLAY_WIDTH + CAM_REGION_WIDTH) + || (I(partner->qWorldY) < gCamera.y - CAM_REGION_WIDTH) + || (I(partner->qWorldY) > gCamera.y + DISPLAY_HEIGHT + CAM_REGION_WIDTH)) { + if (partner->character == CHARACTER_TAILS) { + if (partner->moveState & MOVESTATE_IN_WATER) { + partner->charState = CHARSTATE_SWIMMING; + } else { + partner->charState = CHARSTATE_FLYING; + } + } + + partner->moveState |= MOVESTATE_DEAD; + partner->moveState &= ~MOVESTATE_20; + + // Inline of Player_InitializeDrowning? + partner->framesUntilDrownCountDecrement = TIME(0, 1); + partner->secondsUntilDrown = 30; + + if (partner->playerID == PLAYER_1) { + m4aSongNumStop(MUS_DROWNING); + } + + gCurTask->main = Task_8045AD8; + } else if (!(partner->moveState & MOVESTATE_IA_OVERRIDE)) { + // TODO: This might be a macro. + // Task_8045B38 explicitly loads the partner data + // and that can only be Tails. + // (Unless gPartner is also used in MP matches?) + switch (partner->character) { + case CHARACTER_SONIC: { + Player_Sonic_80473AC(partner); + } break; + + case CHARACTER_TAILS: { + Player_Tails_8047BA0(partner); + } break; + + case CHARACTER_KNUCKLES: { + Player_Knuckles_8049000(partner); + } break; + + case CHARACTER_AMY: { + Player_Amy_80497AC(partner); + } break; + } + } + } + + SA2_LABEL(sub_802486C)(partner, partner->spriteInfoBody); + SA2_LABEL(sub_8024B10)(partner, partner->spriteInfoBody); + SA2_LABEL(sub_8024F74)(partner, partner->spriteInfoLimbs); + + if (partner->charState != CHARSTATE_HIT_AIR) { + if (partner->timerInvulnerability > 0) { + partner->timerInvulnerability--; + } + } + + partner->SA2_LABEL(unk25) = 120; +} + +// Confusion state related +void SA2_LABEL(sub_802460C)(Player *p) +{ + u8 r0; + u8 r1; + u8 r2; + u16 r6; + + if (IS_MULTI_PLAYER && (SIO_MULTI_CNT->id != gCamera.spectatorTarget)) { + p->heldInput = 0; + r6 = 0; + sub_804D13C(0); + } else { + r6 = p->heldInput; + + if (!(p->moveState & MOVESTATE_IGNORE_INPUT)) { + p->heldInput = gInput; + + if (IS_MULTI_PLAYER && (p->itemEffect & PLAYER_ITEM_EFFECT__CONFUSION)) { + r2 = ((p->heldInput & DPAD_ANY) >> 4); + r1 = ((gStageTime + p->timerConfusion) & 0x3); + + if (r1 == 0) { + r1 = 1; + } + + r2 <<= r1; + r0 = ((r2 >> 4) | r2); + r2 = r0 << 4; + + p->heldInput = (p->heldInput & 0xFF0F) | r2; + if (--p->timerConfusion == 0) { + p->itemEffect &= ~PLAYER_ITEM_EFFECT__CONFUSION; + } + } + + sub_804D13C(p->heldInput); + } else { + sub_804D13C(0); + } + } + + r6 ^= p->heldInput; + r6 &= p->heldInput; + p->frameInput = r6; + + if (p->heldInput & DPAD_SIDEWAYS) { + p->heldInput &= ~DPAD_VERTICAL; + } + + if (p->frameInput & DPAD_SIDEWAYS) { + p->frameInput &= ~DPAD_VERTICAL; + } +} + +// TODO: Remove gotos +void sub_8045DF0(Player *p) +{ + u16 r4 = p->heldInput; + u16 r6 = r4; + u32 r5; + + if (!(p->moveState & MOVESTATE_IGNORE_INPUT)) { + r4 = gUnknown_030060F0[20]; + + if (((p->rotation + Q(0.125)) & 0xC0) == 0) { + if ((p->qWorldX + Q(16)) < gPlayer.qWorldX) { + + if (!(r4 & DPAD_DOWN)) { + r4 |= DPAD_RIGHT; + r4 &= ~DPAD_LEFT; + } + + } else if ((p->qWorldX - Q(16)) > gPlayer.qWorldX) { + // _08045E48 + 0x8 + if (!(r4 & DPAD_DOWN)) { + r4 |= DPAD_LEFT; + r4 &= ~DPAD_RIGHT; + } + } else { + r4 &= ~(DPAD_LEFT | DPAD_RIGHT); + } + // _08045E74 + + if (!(r4 & DPAD_SIDEWAYS) && (p->qSpeedGround == Q(0)) && !(p->moveState & MOVESTATE_IN_AIR) && (p->SA2_LABEL(unk62) == 0) + && ((p->charState == 4) || (p->charState == 0)) + && !(p->moveState & (MOVESTATE_800000 | MOVESTATE_8000 | MOVESTATE_SPINDASH | MOVESTATE_200 | MOVESTATE_STOOD_ON_OBJ))) { + if (gPlayer.moveState & MOVESTATE_FACING_LEFT) { + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + p->moveState |= MOVESTATE_FACING_LEFT; + p->charState = CHARSTATE_8; + } + } else { + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->moveState &= ~MOVESTATE_FACING_LEFT; + p->charState = CHARSTATE_8; + } + } + } + } + } + // _08045EEE + r5 = r4; + r5 &= ~r6; + + if (!(p->moveState & MOVESTATE_IGNORE_INPUT)) { + switch (p->moveState & MOVESTATE_IN_AIR) { + case 0: { + if (!GRAVITY_IS_INVERTED) { + if (p->qWorldY - Q(80) > gPlayer.qWorldY) { + goto _08045FC6; + } + } else { + // _08045F38 + if (p->qWorldY + Q(80) < gPlayer.qWorldY) { + r5 |= gPlayerControls.jump; + } + } + } break; + + case MOVESTATE_IN_AIR: { + if (!GRAVITY_IS_INVERTED) { + if (p->qWorldY > gPlayer.qWorldY - Q(16)) { + goto _08045F90; + } + } else { + // _08045F7C + if (p->qWorldY < gPlayer.qWorldY + Q(16)) { + _08045F90: + if ((p->SA2_LABEL(unk61) != 0) || (p->qSpeedAirY > Q(0))) { + // _08045FA8 + if (!GRAVITY_IS_INVERTED) { + if (p->qWorldY > gPlayer.qWorldY) { + goto _08045FC6; + } + } else { + // _08045FC0 + if (p->qWorldY < gPlayer.qWorldY) { + _08045FC6: + r5 |= gPlayerControls.jump; + } + } + } else { + r4 |= gPlayerControls.jump; + } + } + } + } break; + } + } + // _08045FDA + + if (r4 & DPAD_SIDEWAYS) { + r4 &= ~DPAD_VERTICAL; + } + // _08045FE8 + + if (r5 & DPAD_SIDEWAYS) { + u16 mask = ~DPAD_VERTICAL; + r5 &= mask; + } + + // _08045FF4 + p->heldInput = r4; + p->frameInput = r5; +} + +// This function is in SA2, but looks very different in many aspects +// (99.16%) https://decomp.me/scratch/7kBSw +NONMATCH("asm/non_matching/game/stage/Player__sa2__sub_802486C.inc", void SA2_LABEL(sub_802486C)(Player *p, PlayerSpriteInfo *psi)) +{ + s32 speed; + Sprite *s = &psi->s; + + if (p->moveState & MOVESTATE_20) { + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->charState = 14; + } + + p->anim = sCharStateAnimInfo[p->charState][0]; + + if (p->charState < CHARSTATE_SHARED_COUNT) { + p->anim += gPlayerCharacterIdleAnims[p->character]; + } + p->variant = sCharStateAnimInfo[p->charState][1]; + psi->s.animSpeed = SPRITE_ANIM_SPEED(1.0); + +#if (GAME == GAME_SA1) + if ((p->qSpeedGround != Q(0)) || (p->heldInput & (DPAD_ANY | A_BUTTON | B_BUTTON))) { + p->SA2_LABEL(unk72) = TIME(0, 6); + } + +#endif + switch (p->charState) { + case 0: { + if (p->SA2_LABEL(unk72) != 0) { + p->SA2_LABEL(unk72)--; + } else { + p->anim = gPlayerCharacterIdleAnims[p->character] + 1; // SA1_CHAR_ANIM_WALK; + p->variant = 0; // p->walkAnim; + } + } break; + + case 4: { + if (ABS(p->qSpeedGround) >= Q(4.5)) { + p->anim = gPlayerCharacterIdleAnims[p->character] + 5; + p->variant = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + break; + } + } // FALLTHROUGH + + case 24: + case 25: + case 26: { + s32 v = ABS(p->qSpeedGround) >> 4; + s->animSpeed = CLAMP_32(v, SPRITE_ANIM_SPEED(0.5), SPRITE_ANIM_SPEED(1.0)); + } break; + + case 21: + case 85: { + if (p->qSpeedAirY >= -Q(1.5)) { + p->charState = CHARSTATE_18; + } + } break; + + case 9: { + if (ABS(p->qSpeedGround) < Q(1.5)) { + // _080461A2 + 0x6 + p->anim = gPlayerCharacterIdleAnims[p->character] + 7; + p->variant = 0; + } + // _080461C4 + + if ((gStageTime % 4u) == 0) { + s32 offsetY = p->spriteOffsetY; + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + CreateBrakingDustEffect(I(p->qWorldX), I(p->qWorldY) + offsetY); + } + } break; + + case 16: { + if ((((p->rotation + Q(0.125)) & 0xC0) != 0)) { + p->anim = gPlayerCharacterIdleAnims[p->character] + 44; + p->variant = 1; + p->moveState &= ~MOVESTATE_FACING_LEFT; + } + + } break; + } + + if (p->moveState & MOVESTATE_IN_WATER) { + s->animSpeed -= (s->animSpeed >> 1); + } + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + SPRITE_FLAG_SET(s, X_FLIP); + } else { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } + + if (GRAVITY_IS_INVERTED) { + SPRITE_FLAG_SET(s, Y_FLIP); + } else { + SPRITE_FLAG_CLEAR(s, Y_FLIP); + } + + if (IS_MULTI_PLAYER) { + p->SA2_LABEL(unk98) = 0; + } + + if ( +#if (GAME == GAME_SA2) + p->SA2_LABEL(unk6C) || +#endif + (s->graphics.anim != p->anim) || (s->variant != p->variant)) { +#if (GAME == GAME_SA2) + p->SA2_LABEL(unk6C) = FALSE; +#endif + s->graphics.anim = p->anim; + s->variant = p->variant; + s->prevVariant = -1; + s->hitboxes[0].index = -1; + s->hitboxes[1].index = -1; + + if (IS_MULTI_PLAYER) { + p->SA2_LABEL(unk98) = 1; + } + } + + p->prevCharState = p->charState; +} +END_NONMATCH + +// NOTE: Main thing preventing this to match are the jumps due to the +// if-else blocks setting CHARSTATE_IDLE and CHARSTATE_WALK_A. +// It "matches semantically". +// (99.99%) https://decomp.me/scratch/e9oqw +NONMATCH("asm/non_matching/game/stage/Player__sa2__sub_8024B10.inc", void SA2_LABEL(sub_8024B10)(Player *p, PlayerSpriteInfo *inPsi)) +{ + struct MultiSioData_0_4 *send; + MultiplayerPlayer *mpp; + AnimCmdResult acmdRes; + Sprite *s = &inPsi->s; + PlayerSpriteInfo *psi = inPsi; + + struct Camera *cam = &gCamera; + s16 camX = cam->x; + s16 camY = cam->y; + + // required for match +#ifndef BUG_FIX + // The prevAnim check compares to a 0xFF, not 0xFFFF! + bool32 cond = ({ + bool32 r2 = s->prevVariant == 0xFF || s->prevAnim == 0xFF; + r2; + }); +#else + bool32 cond = ({ + bool32 r2 = s->prevVariant == 0xFF || s->prevAnim == 0xFFFF; + r2; + }); +#endif + +top: + s->x = I(p->qWorldX) - camX; + s->y = I(p->qWorldY) - camY; + + psi->transform.x = I(p->qWorldX) - camX; + psi->transform.y = I(p->qWorldY) - camY; +#if (GAME == GAME_SA1) + if (p->charState == CHARSTATE_WALK_A || p->charState == 23 || p->charState == 32 || p->charState == 40) +#elif (GAME == GAME_SA2) + if (p->charState == CHARSTATE_WALK_A || p->charState == CHARSTATE_GRINDING || p->charState == CHARSTATE_ICE_SLIDE + || p->charState == CHARSTATE_WALK_B || (p->charState == CHARSTATE_CREAM_CHAO_ATTACK && p->character == CHARACTER_CREAM)) +#endif + { + if (p->charState != 32) { + psi->transform.rotation = p->rotation << 2; + } + // _08046386 + + s->frameFlags &= ~(SPRITE_FLAG_MASK_X_FLIP | SPRITE_FLAG_MASK_Y_FLIP); + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; + s->frameFlags |= p->playerID | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + + MACRO_8024B10_PSI_UPDATE(p, psi); + if (IS_SINGLE_PLAYER) { + // _08046464 + TransformSprite(s, &psi->transform); + } + } else { + // _08046474 + psi->transform.rotation = 0; + s->frameFlags &= ~(SPRITE_FLAG_MASK_ROT_SCALE_ENABLE | SPRITE_FLAG_MASK_ROT_SCALE); + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } else { + // _08046498 + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + s->x++; + } + // _080464A8 + + if (GRAVITY_IS_INVERTED) { + s->frameFlags |= SPRITE_FLAG_MASK_Y_FLIP; + } else { + s->frameFlags &= ~SPRITE_FLAG_MASK_Y_FLIP; + } + // _080464D6 + + acmdRes = UpdateSpriteAnimation(s); +#if (GAME == GAME_SA1) + if (acmdRes == ACMD_RESULT__ENDED) { + s8 oldCharState = p->charState; // sp04 + + // TODO: Seems like this is a switch-case? + if (p->charState == CHARSTATE_7) { + p->charState = CHARSTATE_SPINDASH; + } else if (p->charState == CHARSTATE_3) { + if (p->qSpeedGround != 0) { + p->charState = CHARSTATE_WALK_A; + } else { + p->charState = CHARSTATE_IDLE; + } + } else if (p->charState == CHARSTATE_11) { + p->charState = CHARSTATE_IDLE; + } else if (p->charState == CHARSTATE_22) { + p->charState = CHARSTATE_WALK_A; + } else if (p->charState == CHARSTATE_17) { + p->charState = CHARSTATE_19; + } else if (p->charState == CHARSTATE_18) { + p->charState = CHARSTATE_19; + } else if (p->charState == CHARSTATE_27) { + p->charState = CHARSTATE_WALK_A; + } else if (p->charState == CHARSTATE_74) { + // _0804652C + 0x4 + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qWorldX -= Q(p->spriteOffsetX + 3); + } else { + // _08046548 + p->qWorldX += Q(p->spriteOffsetX + 3); + } + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); + + // TODO: What is going on here? + if (GRAVITY_IS_INVERTED) { + p->qWorldY += Q(p->spriteOffsetY); + } else { + p->qWorldY -= Q(14); + } + // _0804657E + + p->charState = CHARSTATE_75; + + p->SA2_LABEL(unk62)++; + + } else if (p->charState == CHARSTATE_75) { + // _08046594 + 0x4 + p->rotation = 0; + SA2_LABEL(sub_8021BE0)(p); + } else if (p->charState == CHARSTATE_45 || p->charState == CHARSTATE_48) { + // _080465A4 + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_SPINDASH; + + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->moveState &= ~MOVESTATE_8000; + + if (p->character == CHARACTER_TAILS) { + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + // _080465E0 + + if (p->character == CHARACTER_AMY) { + p->moveState &= ~(MOVESTATE_2000000 | MOVESTATE_4000000); + } + // _080465F0 + if (p->qSpeedGround == 0) { + p->charState = CHARSTATE_IDLE; + } else { + p->charState = CHARSTATE_WALK_A; + } + } else if (p->charState == CHARSTATE_46) { + // _08046608 + 0xA + if (p->SA2_LABEL(unk63) == 1) { + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedGround = -Q(4); + } else { + p->qSpeedGround = +Q(4); + } + // _08046632 + + p->SA2_LABEL(unk62)++; + p->SA2_LABEL(unk63) = 0; + + p->charState = CHARSTATE_47; + + m4aSongNumStart(SE_SONIC_SKID_ATTACK); + } else if (p->SA2_LABEL(unk63) == 2) { + // _0804664E + 0x4 + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_SPINDASH; + + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->moveState &= ~MOVESTATE_8000; + + if (p->character == CHARACTER_TAILS) { + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + // _0804668C + + if (p->character == CHARACTER_AMY) { + p->moveState &= ~(MOVESTATE_2000000 | MOVESTATE_4000000); + } + // _0804669C + + p->qSpeedAirX = -p->qSpeedAirX; + p->qSpeedAirY = -Q(4.875); + + if (p->moveState & MOVESTATE_IN_WATER) { + p->qSpeedAirY = -Q(2.625); + } + // _080466B4 + + p->moveState |= MOVESTATE_IN_AIR; + p->moveState |= MOVESTATE_4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 9); + + p->charState = CHARSTATE_49; + + m4aSongNumStart(SE_JUMP); + } else { + // _080466F0 + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->charState = CHARSTATE_IDLE; + p->defeatScoreIndex = 0; + p->qSpeedGround = 0; + } + + } else if (p->charState == CHARSTATE_54) { + // _08046704 + 4 + p->charState = CHARSTATE_FLYING; + } else if (p->charState == CHARSTATE_58) { + p->charState = CHARSTATE_SWIMMING; + } else if (p->charState == CHARSTATE_GROUND_ATTACK) { + // _08046714 + 0x4 + + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + + if (p->qSpeedGround == 0) { + p->charState = CHARSTATE_IDLE; + } else { + p->charState = CHARSTATE_WALK_A; + } + + p->defeatScoreIndex = 0; + } else if (p->charState == CHARSTATE_64) { + SA2_LABEL(sub_8021BE0)(p); + } else if (p->charState == CHARSTATE_70) { + p->charState = CHARSTATE_71; + } else if (p->charState == CHARSTATE_76 || p->charState == CHARSTATE_77) { + // _0804674E + 0xA + + if (p->SA2_LABEL(unk63) != 0) { + s32 qSpeed; + + p->SA2_LABEL(unk62)++; + p->SA2_LABEL(unk63) = 0; + + if (p->charState == CHARSTATE_77) { + m4aSongNumStart(SE_127); + } else { + m4aSongNumStart(SE_126); + } + // _08046788 + + p->charState++; + + qSpeed = Q(3); + if (p->moveState & MOVESTATE_FACING_LEFT) { + qSpeed = -qSpeed; + } + p->qSpeedGround += qSpeed; + } else { + // _080467A6 + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->charState = CHARSTATE_IDLE; + p->defeatScoreIndex = 0; + p->qSpeedGround = 0; + } + } else if (p->charState == CHARSTATE_87) { + s32 qSpeed; + // _080467B8 + 0x4 + + if (p->SA2_LABEL(unk63) == 0) { + p->SA2_LABEL(unk62) = 0; + + if (p->qSpeedGround != 0) { + p->charState = CHARSTATE_WALK_A; + } else { + p->charState = CHARSTATE_IDLE; + } + } else { + p->SA2_LABEL(unk63) = 0; + p->SA2_LABEL(unk62)++; + p->charState = CHARSTATE_88; + + qSpeed = Q(3); + if (p->moveState & MOVESTATE_FACING_LEFT) { + qSpeed = -qSpeed; + } + p->qSpeedGround += qSpeed; + + CreateAmyAttackHeartEffect(); + } + } else if (p->charState == CHARSTATE_88) { + p->SA2_LABEL(unk62) = 0; + + if (p->qSpeedGround != 0) { + p->charState = CHARSTATE_WALK_A; + } else { + p->charState = CHARSTATE_IDLE; + } + } else if (p->charState == CHARSTATE_93) { + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + p->charState = CHARSTATE_IDLE; + p->defeatScoreIndex = 0; + } + + // _08046836 + if (p->charState != oldCharState) { + SA2_LABEL(sub_802486C)(p, inPsi); + goto top; + } + } +#endif + } + // _0804684E + + if (IS_SINGLE_PLAYER) { + // Draw Player sprite in SP modes + if (p->moveState & MOVESTATE_DEAD + || (!(p->moveState & MOVESTATE_100000) && (p->timerInvulnerability == 0 || (gStageTime & 2) == 0))) { + DisplaySprite(s); + } + +#ifndef NON_MATCHING + if (IS_SINGLE_PLAYER) +#endif + { + return; + } + } + + send = &gMultiSioSend.pat4; + mpp = TASK_DATA(gMultiplayerPlayerTasks[SIO_MULTI_CNT->id]); +#if (GAME == GAME_SA1) + send->unk0 = 0x1000; +#elif (GAME == GAME_SA2) + send->unk0 = 0x5000; +#endif + send->x = I(p->qWorldX) + p->SA2_LABEL(unk7C); + send->y = I(p->qWorldY); + send->unk6 = s->graphics.anim; + send->unkA = p->itemEffect; + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { +#if (GAME == GAME_SA2) + send->unk6 -= gPlayerCharacterIdleAnims[p->character]; +#endif + send->unk6 |= gRingCount << 8; + } +#if (GAME == GAME_SA1) + else if (gGameMode == 4 || gGameMode == 5) { + send->unk6 |= (mpp->unk5C & 0x70000) >> 4; + } +#endif + + send->unkB = s->variant | (p->spriteOffsetY << 3); + send->unkC = s->animSpeed; + send->unkD = psi->transform.rotation >> 2; + + if (s->frameFlags & SPRITE_FLAG_MASK_ROT_SCALE_ENABLE) { + send->unk8 |= 1; + } else { + send->unk8 &= ~1; + } + + if (!(p->moveState & 1)) { + send->unk8 |= 2; + } else { + send->unk8 &= ~2; + } + + if (GRAVITY_IS_INVERTED) { + send->unk8 |= 8; + } else { + send->unk8 &= ~8; + } + + if (p->moveState & MOVESTATE_DEAD || mpp->unk5C & 1 +#if (GAME == GAME_SA2) + || p->moveState & MOVESTATE_IN_SCRIPTED +#endif + || p->timerInvulnerability != 0) { + send->unk8 |= 4; + } else { + send->unk8 &= ~4; + } + + if (mpp->unk5C & 1) { + send->unk8 |= 0x100; + } else { + send->unk8 &= ~0x100; + } + + if (p->moveState & MOVESTATE_100000) { + send->unk8 |= 0x40; + } else { + send->unk8 &= ~0x40; + } + + send->unk8 &= ~0x30; + send->unk8 |= ((gPlayer.spriteInfoBody->s.frameFlags & 0x3000) >> 8); + if (p->layer != 0) { + send->unk8 |= 0x80; + } else { + send->unk8 &= ~0x80; + } + + if (cond) { + send->unk8 |= 0x800; + } else { + send->unk8 &= ~0x800; + } + + mpp->unk64 = SIO_MULTI_CNT->id; + if (gPlayer.moveState & MOVESTATE_STOOD_ON_OBJ) { + u8 i; + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + s32 id = SIO_MULTI_CNT->id; + if (id != i) { + MultiplayerPlayer *mpp2; + if (gMultiplayerPlayerTasks[i] == NULL) { + break; + } + + mpp2 = TASK_DATA(gMultiplayerPlayerTasks[i]); + if (gPlayer.stoodObj == &mpp2->s) { + mpp->unk64 = i; + } + } + } + } + + send->unk8 &= ~0x600; + send->unk8 |= (mpp->unk64 << 9); +} +END_NONMATCH + +void SA2_LABEL(sub_8024F74)(Player *p, PlayerSpriteInfo *inPsi) +{ + struct MultiSioData_0_4 *recv; + + Sprite *s = &inPsi->s; + PlayerSpriteInfo *psi = inPsi; + + struct Camera *cam = &gCamera; + s16 camX = cam->x; + s16 camY = cam->y; + + if (IS_MULTI_PLAYER) { + s32 id = SIO_MULTI_CNT->id; + recv = &gMultiSioRecv[id].pat4; + psi->transform.x = recv->x - camX; + psi->transform.y = recv->y - camY; + } else { + psi->transform.x = I(p->qWorldX) - camX; + psi->transform.y = I(p->qWorldY) - camY; + } + + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + if (p->moveState & MOVESTATE_IN_WATER) { + s->animSpeed = SPRITE_ANIM_SPEED(0.5); + } + + switch (p->character) { + case CHARACTER_AMY: + case CHARACTER_KNUCKLES: + case CHARACTER_SONIC: + break; + +#if (GAME == GAME_SA2) + case CHARACTER_CREAM: { + u16 anim = p->anim; + u16 variant = p->variant; + anim = anim - gPlayerCharacterIdleAnims[p->character]; + if (MACRO_8024F74_ANIM_CHECK(anim, variant)) { + u8 rotation = p->rotation; + p->w.cf.unkB0 = rotation; + psi->transform.rotation = rotation << 2; + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++ | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + + MACRO_8024B10_PSI_UPDATE(p, psi); + TransformSprite(s, &psi->transform); + + if (p->moveState & MOVESTATE_DEAD + || (!(p->moveState & MOVESTATE_100000) && (p->timerInvulnerability == 0 || (gStageTime & 2) == 0))) { + DisplaySprite(s); + } + } + break; + } +#endif + case CHARACTER_TAILS: { + s32 asx = p->qSpeedAirX; + s32 asy = p->qSpeedAirY; + + u16 anim = p->anim; + u16 variant = p->variant; + anim = anim - gPlayerCharacterIdleAnims[p->character]; + +#if (GAME == GAME_SA2) + if (MACRO_8024F74_ANIM_CHECK(anim, variant)) +#endif + { + u8 shift; + if (asx != 0 || asy != 0) { + shift = (I(ArcTan2(asx, asy)) + 0x40); + } else { + shift = p->moveState & MOVESTATE_FACING_LEFT ? 0xC0 : 0x40; + } + p->w.tf.shift = shift; + +#if (GAME == GAME_SA1) + if (p->charState == CHARSTATE_SPINATTACK) +#endif + { + psi->transform.rotation = shift << 2; + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++ | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + + MACRO_8024B10_PSI_UPDATE(p, psi); + TransformSprite(s, &psi->transform); + + if (p->moveState & MOVESTATE_DEAD + || (!(p->moveState & MOVESTATE_100000) && (p->timerInvulnerability == 0 || (gStageTime & 2) == 0))) { + DisplaySprite(s); + } + } + } + break; + } + } +} + +void CallSetStageSpawnPos(u32 character, u32 level, u32 playerID, Player *p) { SetStageSpawnPos(character, level, playerID, p); } + +void DestroyPlayerTasks(Player *p) +{ + TaskDestroy(p->spriteTask); + p->spriteTask = NULL; + + if (p->playerID == PLAYER_1) { + DestroyBrakingDustEffectRelatedTask(); + DestroyRingsScatterTask(); + } +} + +// Called anytime the player actively jumps, "autojumps" through touching an IA, +// touches a Boost Pad or a Rotating Handle, touches the ground, etc. +// TODO: Find a better name. +void Player_TransitionCancelFlyingAndBoost(Player *p) +{ +#if (GAME == GAME_SA1) + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_100; + p->moveState &= ~MOVESTATE_SPINDASH; + + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + + p->moveState &= ~MOVESTATE_8000; +#elif (GAME == GAME_SA2) + if (p->moveState & MOVESTATE_20000) { + m4aSongNumStop(SE_281); + } + + p->moveState &= ~(MOVESTATE_SOME_ATTACK | MOVESTATE_10000000 | MOVESTATE_1000000 | MOVESTATE_80000 | MOVESTATE_40000 | MOVESTATE_20000 + | MOVESTATE_8000 | MOVESTATE_4000 | MOVESTATE_2000 | MOVESTATE_400 | MOVESTATE_200 | MOVESTATE_100 | MOVESTATE_20 + | MOVESTATE_FLIP_WITH_MOVE_DIR); + + p->SA2_LABEL(unk61) = 0; + p->SA2_LABEL(unk62) = 0; + p->SA2_LABEL(unk63) = 0; + + p->SA2_LABEL(unk71) = 0; + p->SA2_LABEL(unk70) = FALSE; +#endif + + if (p->character == CHARACTER_TAILS) { + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } + +#if (GAME == GAME_SA1) + if (p->character == CHARACTER_AMY) { + p->moveState &= ~(MOVESTATE_4000000 | MOVESTATE_2000000); + } +#elif (GAME == GAME_SA2) + if (p->character == CHARACTER_CREAM) { + m4aSongNumStop(SE_CREAM_FLYING); + } + + if (p->character == CHARACTER_SONIC) { + p->moveState &= ~MOVESTATE_BOOST_EFFECT_ON; + } +#endif +} + +// s32 SA2_LABEL(sub_8029A28)(Player *p, u8 *p1, s32 *out) +s32 SA2_LABEL(sub_8029A28)(Player *p, u8 *p1, s32 *out) +{ + s32 result; + + u8 dummy; + + // TODO: Why is dummyInt unused? + s32 dummyInt; + s32 p1Value; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + result = SA2_LABEL(sub_802195C)(p, p1, out); + + p1Value = *p1; + + if (p1Value & 0x1) + *p1 = 0; + else { + if (GRAVITY_IS_INVERTED) { + s32 val = -0x80; + val -= p1Value; + *p1 = val; + } + } + + return result; +} + +s32 SA2_LABEL(sub_8029A74)(Player *p, u8 *p1, s32 *out) +{ + s32 result; + + u8 dummy; + + s32 dummyInt; + s32 p1Value; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + result = SA2_LABEL(sub_8021A34)(p, p1, out); + + p1Value = *p1; + + if (p1Value & 0x1) + *p1 = 0; + else { + if (GRAVITY_IS_INVERTED) { + s32 val = -0x80; + val -= p1Value; + *p1 = val; + } + } + + return result; +} + +s32 SA2_LABEL(sub_8029AC0)(Player *p, u8 *p1, s32 *out) +{ + s32 result; + + u8 dummy; + + // TODO: Why is dummyInt unused? + s32 dummyInt; + s32 p1Value; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + result = SA2_LABEL(sub_8021B08)(p, p1, out); + + p1Value = *p1; + + if (p1Value & 0x1) + *p1 = 0; + else { + if (GRAVITY_IS_INVERTED) { + s32 val = -0x80; + val -= p1Value; + *p1 = val; + } + } + + return result; +} + +s32 SA2_LABEL(sub_8029B0C)(Player *p, u8 *p1, s32 *out) +{ + s32 result; + + u8 dummy; + + // TODO: Why is dummyInt unused? + s32 dummyInt; + s32 p1Value; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + result = SA2_LABEL(sub_8029BB8)(p, p1, out); + + p1Value = *p1; + + if (p1Value & 0x1) + *p1 = 0; + else { + if (GRAVITY_IS_INVERTED) { + s32 val = -0x80; + val -= p1Value; + *p1 = val; + } + } + + return result; +} + +s32 SA2_LABEL(sub_8029B58)(Player *p, u8 *p1, s32 *out) +{ + s32 result; + + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029B0C)(p, p1, out); + } else { + result = SA2_LABEL(sub_8029AC0)(p, p1, out); + } + + return result; +} + +s32 SA2_LABEL(sub_8029B88)(Player *p, u8 *p1, s32 *out) +{ + s32 result; + + if (GRAVITY_IS_INVERTED) { + result = SA2_LABEL(sub_8029AC0)(p, p1, out); + } else { + result = SA2_LABEL(sub_8029B0C)(p, p1, out); + } + + return result; +} + +// Very similar to SA2_LABEL(sub_802195C) +s32 SA2_LABEL(sub_8029BB8)(Player *p, u8 *p1, s32 *out) +{ + u8 dummy; + s32 dummyInt; + s32 playerX, playerY; + s32 playerX2, playerY2; + u32 mask; + u8 anotherByte, anotherByte2; + s32 r5, r1; + s32 result; + + if (p1 == NULL) + p1 = &dummy; + if (out == NULL) + out = &dummyInt; + + playerY2 = I(p->qWorldY) + p->spriteOffsetY; + playerX2 = I(p->qWorldX) - (2 + p->spriteOffsetX); + + mask = p->layer; + if (p->qSpeedAirY < 0) { + mask |= 0x80; + } + + r5 = SA2_LABEL(sub_801E4E4)(playerY2, playerX2, mask, 8, &anotherByte, SA2_LABEL(sub_801EE64)); + + playerY = I(p->qWorldY) + p->spriteOffsetY; + playerX = I(p->qWorldX) + (2 + p->spriteOffsetX); + + mask = p->layer; + if (p->qSpeedAirY < 0) { + mask |= 0x80; + } + + r1 = SA2_LABEL(sub_801E4E4)(playerY, playerX, mask, 8, &anotherByte2, SA2_LABEL(sub_801EE64)); + + if (r5 < r1) { + result = r5; + *p1 = anotherByte; + *out = r1; + } else { + result = r1; + *p1 = anotherByte2; + *out = r5; + } + + return result; +} + +#if (GAME == GAME_SA2) +void SA2_LABEL(sub_8029C84)(Player *p) +{ + s32 rot = p->rotation + Q(0.25); + + if ((rot & UINT8_MAX) > INT8_MAX) + p->qSpeedGround = 0; +} +#endif + +void SA2_LABEL(sub_8029CA0)(Player *p) +{ +#if (GAME == GAME_SA1) + s32 rot; + if (((p->rotation + Q(0.375)) & 0xFF) < Q(0.75)) +#else + s32 rot = p->rotation; + if (((rot + Q(0.375)) & 0xFF) < Q(0.75)) +#endif + { +#if (GAME == GAME_SA1) + rot = GET_ROTATED_ACCEL(p->rotation); +#else + rot = GET_ROTATED_ACCEL(rot); +#endif + + if (p->qSpeedGround != 0) { + p->qSpeedGround += rot; + } + } +} + +#if (GAME == GAME_SA1) +void SA2_LABEL(sub_8029CE0)(Player *p) +{ + s8 rot; + if (((p->rotation + Q(0.375)) & 0xFF) < Q(0.75)) { + rot = GET_ROTATED_ACCEL_2(p->rotation); + + p->qSpeedGround += rot; + } +} +#else +void SA2_LABEL(sub_8029CE0)(Player *p) +{ + s32 rot = p->rotation; + if (((rot + Q(0.375)) & 0xFF) < Q(0.75)) { + s32 other = GET_ROTATED_ACCEL_2(rot); + + p->qSpeedGround += other; + } +} +#endif + +void SA2_LABEL(sub_8029D14)(Player *p) +{ +#ifndef NON_MATCHING + register s32 grndSpeed asm("r2") = p->qSpeedGround; +#else + s32 grndSpeed = p->qSpeedGround; +#endif + + if ((((p->rotation + Q(0.375)) & 0xFF) < Q(0.75)) && grndSpeed != 0) { + s32 accelInt = I(GET_ROTATED_ACCEL_3(p->rotation)); + + if (grndSpeed > 0) { + if (accelInt <= 0) { + accelInt = (accelInt >> 2); + } + } else { + if (accelInt >= 0) { + accelInt = (accelInt >> 2); + } + } + + p->qSpeedGround = grndSpeed + accelInt; + } +} + +// Code part of SA2_LABEL(sub_802A660) +// They merged Player_8047064 and Player_8047088 into one! +void Player_8047064(Player *p) +{ + s32 qSpeed = p->qSpeedGround; + if (qSpeed <= Q(0)) { + p->moveState |= MOVESTATE_FACING_LEFT; + } else if (qSpeed - Q(24. / 256.) < Q(0)) { + qSpeed = Q(96. / 256.); + p->qSpeedGround = -qSpeed; + } else { + p->qSpeedGround = qSpeed - Q(24. / 256.); + } +} + +// Code part of SA2_LABEL(sub_802A660) +// They merged Player_8047064 and Player_8047088 into one! +void Player_8047088(Player *p) +{ + s32 qSpeed = p->qSpeedGround; + if (qSpeed >= Q(0)) { + p->moveState &= ~MOVESTATE_FACING_LEFT; + } else if (qSpeed + Q(24. / 256.) > Q(0)) { + qSpeed = Q(96. / 256.); + p->qSpeedGround = +qSpeed; + } else { + p->qSpeedGround = qSpeed + Q(24. / 256.); + } +} + +void Player_80470AC(Player *p) +{ + s32 qSpeed = p->qSpeedGround; + u32 rot; +#ifndef NON_MATCHING + const s16 *sinTbl = &gSineTable[0]; + asm("" ::"r"(sinTbl)); +#endif + rot = p->rotation; + + p->qSpeedAirX = Q_MUL(qSpeed, COS_24_8(rot * 4)); + p->qSpeedAirY = Q_MUL(qSpeed, SIN_24_8(rot * 4)); +} + +void Player_UpdatePosition(Player *p) { PLAYERFN_UPDATE_POSITION(p); } + +void PlayerFn_Cmd_UpdateAirFallSpeed(Player *p) { PLAYERFN_UPDATE_AIR_FALL_SPEED(p); } + +bool32 SA2_LABEL(sub_8029DE8)(Player *p) +{ + struct Camera *cam = &gCamera; + s32 playerY = p->qWorldY; + + if (!(p->moveState & MOVESTATE_80000000)) { +#if (GAME == GAME_SA1) + if (!GRAVITY_IS_INVERTED) { + if (playerY >= Q(cam->maxY) - 1) + return TRUE; + } else { + if (playerY <= Q(cam->minY)) + return TRUE; + } +#elif (GAME == GAME_SA2) + if (GRAVITY_IS_INVERTED) { + if (playerY <= Q(cam->minY)) + return TRUE; + } else { + if (playerY >= Q(cam->maxY) - 1) + return TRUE; + } +#endif + } + + return FALSE; +} + +bool32 DeadPlayerLeftScreen_UnusedCopy(Player *p) +{ + struct Camera *cam = &gCamera; + s32 playerY = p->qWorldY; + + if (!(p->moveState & MOVESTATE_80000000)) { +#if (GAME == GAME_SA1) + if (!GRAVITY_IS_INVERTED) { + if (playerY >= Q(cam->y) + Q(DISPLAY_HEIGHT + 80) - 1) + return TRUE; + } else { + if (playerY <= Q(cam->y - 80)) + return TRUE; + } +#elif (GAME == GAME_SA2) + if (GRAVITY_IS_INVERTED) { + if (playerY <= Q(cam->y - 80)) + return TRUE; + } else { + if (playerY >= Q(cam->y) + Q(DISPLAY_HEIGHT + 80) - 1) + return TRUE; + } +#endif + } + + return FALSE; +} + +void SA2_LABEL(sub_8029ED8)(Player *p) +{ +#if (GAME == GAME_SA1) + // TODO: Is this part of the macro in SA1? + if (!(p->moveState & MOVESTATE_800)) +#endif + { + PLAYERFN_UPDATE_UNK2A(p); + } +} + +void Player_8047224(Player *p) +{ + s32 rot = (s8)p->rotation; + + if (p->charState == CHARSTATE_BOUNCE) { + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->rotation -= Q(4. / 256.); + } else { + p->rotation += Q(4. / 256.); + } + } else { + if (rot < 0) { + if (rot + 2 > 0) { + rot = 0; + } else { + rot += 2; + } + } else if (rot > 0) { + if (rot - 2 < 0) { + rot = 0; + } else { + rot -= 2; + } + } + + p->rotation = rot; + } +} + +void Player_804726C(Player *p) +{ + if (p->playerID == PLAYER_1) { + p->SA2_LABEL(unk25) = 120; + } +} + +void Player_8047280(Player *p) +{ + if (p->playerID == PLAYER_1) { + if (gCamera.SA2_LABEL(unk4C) > 0) { + gCamera.SA2_LABEL(unk4C) -= 2; + } else if (gCamera.SA2_LABEL(unk4C) < 0) { + gCamera.SA2_LABEL(unk4C) += 2; + } + } +} + +void sub_80472AC(Player *p) { p->SA2_LABEL(unk72) = TIME(0, 6); } + +void sub_80472B8(Player *p) +{ + if (!sub_8044434(p)) { + sub_80449D8(p); + SA2_LABEL(sub_80232D0)(p); + + PLAYERFN_UPDATE_POSITION(p); + + SA2_LABEL(sub_8022D6C)(p); + } +} + +void Player_InitializeDrowning(Player *p) +{ + p->framesUntilDrownCountDecrement = 60; + p->secondsUntilDrown = 30; + +#if (GAME == GAME_SA1) + if (p->playerID == PLAYER_1) { + m4aSongNumStop(MUS_DROWNING); + } +#endif +} + +void TaskDestructor_Player(struct Task *t) +{ + player_0_Task *gt = TASK_DATA(t); + Player *p; + + if (gt->pid != PLAYER_1) { + p = &gPartner; + } else { + p = &gPlayer; + } + + p->spriteTask = NULL; + + if (p->playerID != PLAYER_1) { + // Free Tails' Body + VramFree(p->spriteInfoBody->s.graphics.dest); + } + + if (p->character == CHARACTER_TAILS) { + // Free Tails' tails + VramFree(p->spriteInfoLimbs->s.graphics.dest); + } +} diff --git a/sa1/src/game/stage/player_amy.c b/sa1/src/game/stage/player_amy.c new file mode 100644 index 0000000000..0b586a1887 --- /dev/null +++ b/sa1/src/game/stage/player_amy.c @@ -0,0 +1,348 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/amy_attack_heart_effect.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/stage/dust_effect_braking.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/underwater_effects.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +/* Amy Start */ + +void Player_Amy_804948C(Player *p); + +static inline void Player_Amy_8049854_inline(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + Player_Amy_804948C(p); + Player_8044670(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); +} + +// NOTE: +// Technically this function does not appear to have been inlined, because it +// was not put anywhere as its own unused function (an (old?) GCC quirk), +// but it makes more sense to be close to Player_Amy_8049854_inline. +static inline void Player_Amy_unk_inline(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + // Player_Amy_804948C(p); // These calls missing is different to + // Player_8044670(p); // Player_Amy_8049854_inline + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); +} + +bool32 Player_Amy_8049370(Player *p) +{ + s32 qSpeed; + u8 rot; // r3 + + if ((p->frameInput & gPlayerControls.attack) && !(p->moveState & MOVESTATE_8000)) { + rot = p->rotation; + + if (!(p->heldInput & DPAD_DOWN)) { + if (((p->rotation + Q(0.25)) << 24 > Q(0)) && !(p->moveState & MOVESTATE_20)) { + p->SA2_LABEL(unk62) = 1; + p->charState = CHARSTATE_87; + CreateAmyAttackHeartEffect(); + return TRUE; + } else { + return FALSE; + } + } else { + if (GRAVITY_IS_INVERTED) { + rot += Q(0.25); + rot = -rot; + rot -= Q(0.25); + } + + if (SA2_LABEL(sub_8022F58)(rot + Q(0.5), p) < 4) { + return FALSE; + } + } + } else { + return FALSE; + } + + p->charState = CHARSTATE_86; + + qSpeed = (p->moveState & MOVESTATE_IN_WATER) ? Q(3.375) : Q(6.0); + + rot = p->rotation - Q(0.25); + p->qSpeedAirX += Q_MUL(qSpeed, COS_24_8(rot * 4)); + p->qSpeedAirY += Q_MUL(qSpeed, SIN_24_8(rot * 4)); + + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~(MOVESTATE_1000000 | MOVESTATE_20); + p->moveState |= MOVESTATE_100; + p->moveState &= ~MOVESTATE_800; + + m4aSongNumStart(SE_JUMP); + + p->moveState &= ~MOVESTATE_4000000; + p->moveState |= MOVESTATE_2000000; + + return TRUE; +} + +void Player_Amy_804948C(Player *p) +{ + if ((p->SA2_LABEL(unk62) == 0) && (p->frameInput & gPlayerControls.attack) && (p->charState != CHARSTATE_HIT_AIR)) { + p->SA2_LABEL(unk62) = 1; + + if (p->heldInput & DPAD_DOWN) { + // Downwards "Hammer Swirl" + m4aSongNumStart(SE_AMY_HAMMER_SWIRL); + p->charState = CHARSTATE_90; + p->qSpeedAirX = Q(0); + } else { + // "Super Hammer Attack" + m4aSongNumStart(SE_AMY_SUPER_HAMMER_ATTACK); + p->charState = CHARSTATE_89; + } + + CreateAmyAttackHeartEffect(); + } +} + +void Player_Amy_80494E8(Player *p) +{ + if (p->SA2_LABEL(unk62) == 0) { + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (Player_Amy_8049370(p) == 0)) { + if (!Player_TryJump(p)) { + if (!(p->moveState & MOVESTATE_200)) { + SA2_LABEL(sub_8029CA0)(p); + } else { + SA2_LABEL(sub_8029D14)(p); + } + + Player_8044F7C(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } + } + } else { + s32 qSpeed; + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + s8 unk62 = p->SA2_LABEL(unk62); + + if ((unk62 == 1) && !(p->moveState & MOVESTATE_SPINDASH) && ((p->rotation + Q(0.25)) << 24 > Q(0)) + && !(p->moveState & MOVESTATE_20) && (p->SA2_LABEL(unk63) == 0) && (p->frameInput & gPlayerControls.attack)) { + p->SA2_LABEL(unk63) = 1; + } + } + + SA2_LABEL(sub_8029CA0)(p); + + qSpeed = p->qSpeedGround; + if (qSpeed > Q(0)) { + qSpeed -= Q(0.375); + + if (qSpeed < 0) { + qSpeed = Q(0); + } + p->qSpeedGround = qSpeed; + } else if (qSpeed < Q(0)) { + qSpeed += Q(0.375); + + if (qSpeed > 0) { + qSpeed = Q(0); + } + p->qSpeedGround = qSpeed; + } + + Player_80470AC(p); + SA2_LABEL(sub_80231C0)(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } +} + +void Player_Amy_80495F0(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + sa2__sub_80232D0(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + + switch (p->SA2_LABEL(unk62)) { + case 0: { + if ((p->frameInput & gPlayerControls.attack) && (p->charState != CHARSTATE_HIT_AIR)) { + p->charState = CHARSTATE_92; + p->SA2_LABEL(unk62) = 1; + } + + SA2_LABEL(sub_8022190)(p); + } break; + + case 1: { + SA2_LABEL(sub_8022838)(p); + + if (!(p->w.kf.flags & 0x2)) { + // _08049676 +#ifndef NON_MATCHING + register s32 r0 asm("r0"); +#else + s32 r0; +#endif + + u32 isInWater = p->moveState & MOVESTATE_IN_WATER; + s32 qSpeed = Q(2); + + if (isInWater) { + qSpeed -= Q(0.75); + } + + if (p->moveState & MOVESTATE_FACING_LEFT) { + s32 r1 = -p->qSpeedAirX; + r0 = qSpeed; + if (r0 < r1) { + r0 = r1; + } + r0 = -r0; + } else { + // _0804969E + s32 r1 = +p->qSpeedAirX; + r0 = qSpeed; + if (r0 < r1) { + r0 = r1; + } + } + p->qSpeedAirX = r0; + +#ifndef NON_MATCHING + p->qSpeedGround = *(volatile s16 *)&p->qSpeedAirX; +#else + p->qSpeedGround = p->qSpeedAirX; +#endif + p->SA2_LABEL(unk62) = 2; + + m4aSongNumStart(SE_SONIC_SKID_ATTACK); + } + } break; + + case 2: { + SA2_LABEL(sub_8022838)(p); + + if (!(p->w.kf.flags & 0x2)) { + if (p->qSpeedAirX <= 0) { + p->qSpeedAirX += Q(24. / 256.); + + if (p->qSpeedAirX < Q(0)) { + goto _08049720; + } + } else { + // _080496EC + p->qSpeedAirX -= Q(24. / 256.); + + if (p->qSpeedAirX > Q(0)) { + goto _08049720; + } + } + // _080496F8 + + p->qSpeedGround = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + + SA2_LABEL(sub_8022318)(p); + + p->moveState &= ~MOVESTATE_4000000; + p->SA2_LABEL(unk2A) = 15; + + p->charState = CHARSTATE_93; + return; + } + _08049720: + // _08049720 + + { // TODO: Not direct inline of sub_8048524, but similar structure! + s32 offsetY; + u8 rot; + + if ((gStageTime % 4u) == 0) { + offsetY = p->spriteOffsetY; + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + CreateBrakingDustEffect(I(p->qWorldX), I(p->qWorldY) + offsetY); + } + + SA2_LABEL(sub_8022838)(p); + + offsetY = SA2_LABEL(sub_8029B88)(p, &rot, NULL); + if (offsetY < 7) { + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + p->qWorldY += Q(offsetY); + p->rotation = rot; + } else if (!(p->moveState & MOVESTATE_STOOD_ON_OBJ)) { + p->SA2_LABEL(unk62) = 1; + p->w.kf.flags |= 2; + } + } + } break; + } +} + +void Player_Amy_80497AC(Player *p) +{ + switch (p->moveState & MOVESTATE_IN_AIR) { + case 0: { + if (p->moveState & MOVESTATE_1000000) { + sub_80472B8(p); + } else { + Player_Amy_80494E8(p); + } + } break; + + case MOVESTATE_IN_AIR: { + switch (p->moveState & (MOVESTATE_2000000 | MOVESTATE_4000000)) { + case 0: { + Player_Amy_8049854_inline(p); + } break; + + case MOVESTATE_2000000: { + Player_Amy_unk_inline(p); + } break; + + case MOVESTATE_4000000: { + Player_Amy_80495F0(p); + } break; + } + } break; + } +} + +void Player_Amy_8049854(Player *p) { Player_Amy_8049854_inline(p); } diff --git a/sa1/src/game/stage/player_controls.c b/sa1/src/game/stage/player_controls.c new file mode 100644 index 0000000000..5a995b0766 --- /dev/null +++ b/sa1/src/game/stage/player_controls.c @@ -0,0 +1,55 @@ +#include "global.h" +#include "game/stage/player_controls.h" +#include "game/save.h" + +struct ButtonConfig gPlayerControls = {}; + +#if 0 +UNUSED void SA2_LABEL(sub_802B584)(u16 jump, u16 attack, u16 trick) +{ + struct ButtonConfig *controls = &gPlayerControls; + s16 i; + u16 config[3]; + + u16 *configs = config; + configs[0] = jump; + configs[1] = attack; + configs[2] = trick; + + for (i = 0; i < 3; i++) { + switch (config[i]) { + case 0: { + if (i == 2) + controls->jump = R_BUTTON; + else + controls->jump = A_BUTTON << i; + } break; + + case 1: { + if (i == 2) + controls->attack = R_BUTTON; + else + controls->attack = A_BUTTON << i; + } break; + + case 2: { + if (i == 2) + controls->trick = R_BUTTON; + else + controls->trick = A_BUTTON << i; + } break; + } + } + + LOADED_SAVE->buttonConfig.jump = controls->jump; + LOADED_SAVE->buttonConfig.attack = controls->attack; + LOADED_SAVE->buttonConfig.trick = controls->trick; +} + +void SetPlayerControls(u16 jump, u16 attack, u16 trick) +{ + gPlayerControls.jump = jump; + gPlayerControls.attack = attack; + gPlayerControls.trick = trick; +} +#endif diff --git a/sa1/src/game/stage/player_knuckles.c b/sa1/src/game/stage/player_knuckles.c new file mode 100644 index 0000000000..742d6a6c3c --- /dev/null +++ b/sa1/src/game/stage/player_knuckles.c @@ -0,0 +1,1172 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/stage/dust_effect_braking.h" +#include "game/stage/mp_sprite_task.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/underwater_effects.h" +#include "game/water_effects.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +/* Knuckles Start */ +extern void SA2_LABEL(sub_8022318)(Player *p); +extern void SA2_LABEL(sub_8022838)(Player *p); +void sub_80472B8(Player *p); +void Player_AirInputControls(Player *p); + +struct Task *Player_Knuckles_InitGfx_UppercutFlame(Player *p); +struct Task *Player_Knuckles_InitGfx_FloatSplash(Player *p); + +extern const u8 gCharStatesKnucklesGlideTurn[]; + +void Player_Knuckles_GlideInit(Player *p) +{ + p->moveState &= ~MOVESTATE_4; + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 6); + p->qSpeedAirY += Q(1.5); + + if (p->qSpeedAirY < 0) { + p->qSpeedAirY = 0; + } + + p->qSpeedGround = Q(3); + + if (p->moveState & MOVESTATE_IN_WATER) { + HALVE(p->qSpeedGround); + } + + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedGround = -p->qSpeedGround; + p->qSpeedAirX = p->qSpeedGround; + p->w.kf.shift = -128; + } else { + p->qSpeedAirX = p->qSpeedGround; + p->w.kf.shift = 0; + } + p->rotation = 0; + p->w.kf.flags = 0x2; +} + +void Player_Knuckles_GlideUpdateAnim(Player *p) +{ + // TODO: Maybe "w.kf.shift" is a bitfield (7:1) ? + u8 shift = p->w.kf.shift; + s32 sgnShift; + + p->moveState &= ~MOVESTATE_20; + p->moveState &= ~MOVESTATE_FACING_LEFT; + + sgnShift = (s8)shift; + if ((sgnShift % 128u) == 0) { + if (p->moveState & MOVESTATE_IN_WATER) { + p->charState = CHARSTATE_KNUCKLES_SWIM; + RandomlySpawnAirBubbles(p); + } else { + p->charState = CHARSTATE_KNUCKLES_GLIDE; + } + + if (shift == 0x80) { + p->moveState |= MOVESTATE_FACING_LEFT; + } + } else { + if (sgnShift < 0) { + shift = -sgnShift; + } + + p->charState = gCharStatesKnucklesGlideTurn[(shift & 0x7F) >> 5]; + } +} + +// TODO: Remove gotos +// (98.53%) https://decomp.me/scratch/3hZ4x +NONMATCH("asm/non_matching/game/stage/Player__sub_8048230.inc", void sub_8048230(Player *p)) +{ + s32 sp08; + u8 *knuxFlags; + s32 r6; + u8 flags; + u32 mask; + + SA2_LABEL(sub_8022838)(p); + + knuxFlags = &p->w.kf.flags; + flags = *knuxFlags; + mask = 2; + if (!(flags & 2)) { + if (p->qSpeedAirX <= Q(0)) { + p->moveState |= MOVESTATE_FACING_LEFT; + } else { + p->moveState &= ~MOVESTATE_FACING_LEFT; + } + // _08048268 + + if ((((p->rotation + Q(0.125)) & -Q(0.25)) << 24) != 0) { + if (((u8)p->w.kf.shift + 0x40) << 24 <= 0) { + p->moveState |= MOVESTATE_FACING_LEFT; + } else { + p->moveState &= ~MOVESTATE_FACING_LEFT; + } + + p->qSpeedAirY = 0; + SA2_LABEL(sub_8022318)(p); + + if (p->qSpeedGround != Q(0)) { + p->charState = CHARSTATE_WALK_A; + } else { + p->charState = CHARSTATE_IDLE; + } + } else { + // _080482C2 + p->SA2_LABEL(unk61) = 3; + p->charState = CHARSTATE_65; + m4aSongNumStart(SE_SONIC_SKID_ATTACK); + } + + } else if (*knuxFlags & 0x20) { + // _080482D8 + 0x10 + // _080482E2 + if (p->w.kf.SA2_LABEL(unkAE) >= 0) { + // _080482F2 + if (((u8)p->w.kf.shift + 0x40) << 24 <= 0) { + p->moveState |= MOVESTATE_FACING_LEFT; + r6 = SA2_LABEL(sub_8029A28)(p, NULL, &sp08); + + if (r6 == sp08) { + // _08048324 + + if (r6 != 0) { + if (GRAVITY_IS_INVERTED) { + s32 worldX, worldY; + worldY = (I(p->qWorldY) - 1); + worldY -= p->spriteOffsetY; + worldX = (I(p->qWorldX) - 1); + worldX -= p->spriteOffsetX; + + if (SA2_LABEL(sub_801E4E4)(worldY, worldX, p->layer, -8, NULL, SA2_LABEL(sub_801EE64)) < 0) { + p->SA2_LABEL(unk61) = mask; + goto _08048454; + } else { + goto lbl0; + } + } else { + // _08048378 + s32 worldX, worldY; + worldY = (I(p->qWorldY) + 1); + worldY += p->spriteOffsetY; + worldX = (I(p->qWorldX) - 1); + worldX -= p->spriteOffsetX; + + if (SA2_LABEL(sub_801E4E4)(worldY, worldX, p->layer, +8, NULL, SA2_LABEL(sub_801EE64)) < 0) { + goto _08048450; + } else { + lbl0: + p->qWorldX -= Q(r6); + + goto nullset; + } + } + } else { + goto nullset; + } + } + } else { + // _080483B4 + p->moveState &= ~MOVESTATE_FACING_LEFT; + r6 = SA2_LABEL(sub_8029A74)(p, 0, &sp08); + if (r6 != sp08) { + p->SA2_LABEL(unk61) = mask; + asm(""); + goto _08048454; + } else if (r6 != 0) { + if (!GRAVITY_IS_INVERTED) { + s32 worldX, worldY; + worldY = (I(p->qWorldY) + 1); + worldY += p->spriteOffsetY; + worldX = (I(p->qWorldX) + 1); + worldX += p->spriteOffsetX; + + if (SA2_LABEL(sub_801E4E4)(worldY, worldX, p->layer, +8, NULL, sa2__sub_801EE64) < 0) { + goto _08048450; + } + } + + p->qWorldX += Q(r6); + } + nullset: + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + p->qSpeedAirY = 0; + p->SA2_LABEL(unk61) = 4; + p->w.kf.shift = 3; + p->charState = 70; + return; + } + } + _08048450: + p->SA2_LABEL(unk61) = mask; + _08048454: + p->charState = CHARSTATE_63; + _08048458: + p->spriteOffsetX = 6; + p->spriteOffsetY = 14; + *knuxFlags |= 0x2; + } else if (!(p->heldInput & gPlayerControls.jump)) { + p->SA2_LABEL(unk61) = mask; + p->charState = CHARSTATE_63; + + if (p->qSpeedAirX <= Q(0)) { + p->moveState |= MOVESTATE_FACING_LEFT; + } else { + p->moveState &= ~MOVESTATE_FACING_LEFT; + } + + p->qSpeedAirX >>= 2; + p->spriteOffsetX = 6; + p->spriteOffsetY = 14; + } else { + Player_Knuckles_GlideUpdateAnim(p); + } +} +END_NONMATCH + +void sub_80484CC(Player *p) +{ + Player_AirInputControls(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + SA2_LABEL(sub_8022838)(p); + + if (!(p->w.kf.flags & 0x2)) { + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + p->qSpeedAirY = 0; + p->spriteOffsetX = 6; + p->spriteOffsetY = 14; + SA2_LABEL(sub_8022318)(p); + + if (((p->rotation + Q(0.125)) & 0xC0) == 0) { + p->SA2_LABEL(unk2A) = 15; + p->charState = CHARSTATE_64; + } + } +} + +// (100.0%) https://decomp.me/scratch/s2CMM +void sub_8048524(Player *inPlayer) +{ +#ifndef NON_MATCHING + register Player *p asm("r4") = inPlayer; +#else + Player *p = inPlayer; +#endif + u8 rot; + s32 sp04; + s32 offsetY; + + if ((gStageTime % 4u) == 0) { + offsetY = p->spriteOffsetY; + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + CreateBrakingDustEffect(I(p->qWorldX), I(p->qWorldY) + offsetY); + } + + SA2_LABEL(sub_8022838)(p); + + offsetY = SA2_LABEL(sub_8029B88)(p, &rot, &sp04); + if (offsetY < 12) { + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + p->qWorldY += Q(offsetY); + p->rotation = rot; + } else if (!(p->moveState & MOVESTATE_STOOD_ON_OBJ)) { +#ifndef NON_MATCHING + register u32 flag asm("r0"); + register u32 r1 asm("r1"); + register u8 *r2 asm("r2"); +#else + u32 flag; + u32 r1; + u8 *r2; +#endif + + p->SA2_LABEL(unk61) = flag = 2; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + r2 = &p->w.kf.flags; + r1 = *r2; + flag = 2; + *r2 = flag | r1; + } +} + +void sub_80485CC(Player *p) +{ + s32 offsetY; + + if (p->heldInput & gPlayerControls.jump) { + if (p->qSpeedAirX <= Q(0)) { + p->qSpeedAirX += Q(24. / 256.); + + if (p->qSpeedAirX < 0) { + sub_8048524(p); + return; + } + } else { + p->qSpeedAirX -= Q(24. / 256.); + + if (p->qSpeedAirX > 0) { + sub_8048524(p); + return; + } + } + } + // _0804860C + + p->qSpeedGround = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + + offsetY = p->spriteOffsetY - 14; + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + p->qWorldY += Q(offsetY); + + SA2_LABEL(sub_8022318)(p); + + p->SA2_LABEL(unk2A) = 15; + p->charState = CHARSTATE_3; +} + +s32 sub_8048650(Player *p) +{ + u8 arr; + + s32 result; + if (p->moveState & MOVESTATE_FACING_LEFT) { + s32 worldX, worldY; + worldX = I(p->qWorldX) - 2; + worldX -= p->spriteOffsetX; + worldY = I(p->qWorldY); + result = SA2_LABEL(sub_801E4E4)(worldX, worldY, p->layer, -8, &arr, SA2_LABEL(sub_801ED24)); + + if (arr & 0x1) { + p->rotation = +Q(0.25); + } else { + p->rotation = arr; + } + } else { + s32 worldX, worldY; + worldX = I(p->qWorldX) + 2; + worldX += p->spriteOffsetX; + worldY = I(p->qWorldY); + result = SA2_LABEL(sub_801E4E4)(worldX, worldY, p->layer, +8, &arr, SA2_LABEL(sub_801ED24)); + + if (!(arr & 0x1)) { + p->rotation = arr; + } else { + p->rotation = -Q(0.25); + } + } + + return result; +} + +// TODO: Remove gotos and register fake-match +void sub_80486E8(Player *p) +{ + u8 sp00; + s32 res; + s32 offsetY; + s32 qSpeed; + + if (p->w.kf.SA2_LABEL(unkAE) < 0) { + goto _08048924; + } + + if (p->moveState & MOVESTATE_STOOD_ON_OBJ) { + goto _08048924; + } + + // _08048710 + p->qSpeedGround = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + + if (p->charState != CHARSTATE_70) { + p->charState = CHARSTATE_71; + } + // _08048728 + + if (p->heldInput & DPAD_UP) { + // __08048738 + offsetY = Q(p->spriteOffsetY); + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + // _08048750 + + p->qWorldY -= offsetY; + res = sub_8048650(p); + p->qWorldY += offsetY; + + if (res > 2) { + goto _0804893A; + } else if (res < 0) { + goto _080488CA; + } else { + // _08048770 + offsetY = Q(9); + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + // _08048780 + + p->qWorldY -= offsetY; + res = SA2_LABEL(sub_8029AC0)(p, &sp00, NULL); + p->qWorldY += offsetY; + + if (res < 0) { + p->charState = CHARSTATE_72; + p->qWorldY -= Q(res); + + goto _08048862; + } else { + // _080487AC + p->charState = CHARSTATE_72; + qSpeed = Q(0.75); + + if (p->moveState & MOVESTATE_IN_WATER) { + qSpeed = Q(0.50); + } + // _080487C0 + + if (p->moveState & MOVESTATE_2000) { + qSpeed <<= 1; + } + // _080487CC + + p->qSpeedAirY = -qSpeed; + } + } + + goto _08048862; + } else if (p->heldInput & DPAD_DOWN) { + // _080487D2 + 0xA + offsetY = Q(p->spriteOffsetY); + + if (GRAVITY_IS_INVERTED) { + offsetY = -offsetY; + } + + p->qWorldY += offsetY; + res = sub_8048650(p); + p->qWorldY -= offsetY; + + if (res > 0) { + goto _08048924; + } + // _0804880A + + res = SA2_LABEL(sub_8029B0C)(p, &sp00, NULL); + + if (res < 0) { + p->qWorldY += Q(res); + p->rotation = sp00; + p->qSpeedGround = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + + SA2_LABEL(sub_8022318)(p); + p->charState = CHARSTATE_63; + return; + } else { + // _08048840 + p->charState = CHARSTATE_73; + + qSpeed = Q(0.75); + + if (p->moveState & MOVESTATE_IN_WATER) { + qSpeed = Q(0.50); + } + // _080487C0 + + if (p->moveState & MOVESTATE_2000) { + qSpeed <<= 1; + } + // _080487CC + + p->qSpeedAirY = +qSpeed; + } + + _08048862: + Player_8047280(p); + goto _08048876; + } else { + res = sub_8048650(p); + if (res > 0) { + goto _08048924; + } + } + // _08048876 +_08048876: + res = 1; + + if (!(p->heldInput & DPAD_VERTICAL)) { + res = SA2_LABEL(sub_8029B0C)(p, &sp00, NULL); + if (res < 0) { + p->qWorldY += Q(res); + p->rotation = sp00; + p->qSpeedGround = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + + SA2_LABEL(sub_8022318)(p); + p->charState = CHARSTATE_63; + return; + } + } + // _080488B2 + + if (res != 0) { + if (--p->w.kf.shift == 0) { + p->w.kf.shift = 3; + } + } + +_080488CA: + if (p->frameInput & gPlayerControls.jump) { +#ifndef NON_MATCHING + register s32 v asm("r1"); +#else + s32 v; +#endif + p->qSpeedAirY = -Q(2.625); + p->qSpeedAirX = +Q(3.0); + p->moveState ^= MOVESTATE_FACING_LEFT; + + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedAirX = -p->qSpeedAirX; + } + // _080488F2 + + p->moveState |= MOVESTATE_4; + p->moveState |= MOVESTATE_IN_AIR; + p->moveState |= MOVESTATE_100; + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 9); + v = 0; + p->charState = 5; + p->SA2_LABEL(unk61) = v; + } + return; +_08048924: + p->SA2_LABEL(unk61) = 2; + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); + p->charState = CHARSTATE_63; + return; +_0804893A: + p->charState = CHARSTATE_74; + + if (GRAVITY_IS_INVERTED) { + p->qWorldY += Q(p->spriteOffsetY); + } else { + p->qWorldY -= Q(p->spriteOffsetY); + } + + p->SA2_LABEL(unk61) = 5; + p->w.kf.shift = 0; +} + +// (96.50%) https://decomp.me/scratch/4vHPC +NONMATCH("asm/non_matching/game/stage/Player__sub_8048980.inc", void sub_8048980(Player *p)) +{ + s32 qSpeedGround = ABS(p->qSpeedGround); + s8 shift = p->w.kf.shift; + + if (p->SA2_LABEL(unk61) == 1) { + if (qSpeedGround < Q(3)) { + qSpeedGround += Q(6. / 256.); + } else if ((qSpeedGround < Q(18)) && ((shift & 0x7F) == 0)) { + qSpeedGround += Q(3. / 256.); + + if (p->moveState & MOVESTATE_2000) { + qSpeedGround += Q(6. / 256.); + } + } + // _080489D8 + + if (p->moveState & MOVESTATE_IN_WATER) { + s32 qSpeedCap = Q(3); + if (qSpeedGround > qSpeedCap) { + qSpeedGround -= Q(9. / 256.); + + if (p->moveState & MOVESTATE_2000) { + qSpeedGround -= Q(3. / 256.); + } + + if (qSpeedGround < qSpeedCap) { + qSpeedGround = qSpeedCap; + } + } + } + // _080489FC + + if (((u8)p->w.kf.shift + 0x40) << 24 <= 0) { + p->qSpeedGround = -qSpeedGround; + } else { + p->qSpeedGround = +qSpeedGround; + } + // _08048A18 + + if (p->heldInput & DPAD_LEFT) { + // _08048A18 + 0xC + + if ((u8)shift != 0x80) { + if (shift < 0) { + shift = -shift; + } + + shift += 2; + } + } else if (p->heldInput & DPAD_RIGHT) { + // _08048A42 + 0x8 + if (shift != 0) { + if (shift > 0) { + shift = -shift; + } + + shift += 2; + } + } else if ((shift & 0x7F) != 0) { + shift += 2; + } + // _08048A78 + p->w.kf.shift = shift; + + p->qSpeedAirX = Q_MUL(COS_24_8((u8)shift << 2), qSpeedGround); + + if (p->qSpeedAirY < Q(0.5)) { + p->qSpeedAirY += Q(24. / 256.); + } else { + p->qSpeedAirY -= Q(24. / 256.); + } + } + // _08048AB8 + + if (gCamera.SA2_LABEL(unk4C) > 0) { + gCamera.SA2_LABEL(unk4C) -= 2; + } else if (gCamera.SA2_LABEL(unk4C) < 0) { + gCamera.SA2_LABEL(unk4C) += 4; + } +} +END_NONMATCH + +bool32 sub_8048ADC(Player *p) +{ + if ((p->moveState & MOVESTATE_SPINDASH) || ((s8)(p->rotation + Q(0.25)) <= Q(0)) || (p->moveState & MOVESTATE_20) + || !(p->frameInput & gPlayerControls.attack)) { + return 0; + } else { + s32 qSpeed = Q(3); + if (p->moveState & MOVESTATE_FACING_LEFT) { + qSpeed = -qSpeed; + } + p->qSpeedGround += qSpeed; + + p->SA2_LABEL(unk62)++; + p->charState = CHARSTATE_76; + + return 1; + } +} + +bool32 sub_8048B38(Player *p) +{ + u8 rot = p->rotation; + s32 qSpeed; + + if (GRAVITY_IS_INVERTED) { + rot += Q(0.25); + rot = -rot; + rot -= Q(0.25); + } + + if (SA2_LABEL(sub_8022F58)(rot + Q(0.5), p) < 4) { + SA2_LABEL(sub_8021BE0)(p); + return FALSE; + } + + p->moveState |= MOVESTATE_IN_AIR; + p->moveState &= ~(MOVESTATE_1000000 | MOVESTATE_20); + p->moveState &= ~(MOVESTATE_800); + + /* 1st speed apply */ + if (p->moveState & MOVESTATE_IN_WATER) { + qSpeed = Q(1); + } else { + qSpeed = Q(2); + } + + rot = p->rotation - Q(0.25); // turn 90 degrees left + p->qSpeedAirX += Q_MUL(qSpeed, COS_24_8(rot * 4)); + p->qSpeedAirY += Q_MUL(qSpeed, SIN_24_8(rot * 4)); + + /* 2nd speed apply */ + if (p->moveState & MOVESTATE_FACING_LEFT) { + qSpeed = -Q(2); + } else { + qSpeed = +Q(2); + } + + rot += Q(0.25); // turn 90 degrees right (back to original) + p->qSpeedAirX += Q_MUL(qSpeed, COS_24_8(rot * 4)); + p->qSpeedAirY += Q_MUL(qSpeed, SIN_24_8(rot * 4)); + + p->charState = CHARSTATE_79; + Player_Knuckles_InitGfx_UppercutFlame(p); + + return TRUE; +} + +s32 sub_8048C3C(Player *p) +{ + switch (p->SA2_LABEL(unk62)) { + case 0: { + sub_8048ADC(p); + return p->SA2_LABEL(unk62); + } break; + + case 1: { + if (p->frameInput & gPlayerControls.attack) { + p->SA2_LABEL(unk63) = 1; + } + + return p->SA2_LABEL(unk62); + } break; + + case 2: { + if (p->frameInput & gPlayerControls.attack) { + p->SA2_LABEL(unk63) = 1; + } + + return p->SA2_LABEL(unk62); + } break; + + case 3: { + sub_8048B38(p); + return p->SA2_LABEL(unk62); + } break; + } + + return 0; +} + +void sub_8048CB0(Player *p) +{ + if (p->SA2_LABEL(unk62) == 0) { + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (sub_8048C3C(p) == 0)) { + if (Player_Spindash(p) || Player_TryJump(p)) { + return; + } + + SA2_LABEL(sub_8029CA0)(p); + Player_8044F7C(p); + } + + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } else { + SA2_LABEL(sub_8029CA0)(p); + if ((gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) && (sub_8048C3C(p) != 3)) { + s32 qSpeed = p->qSpeedGround; + + if (qSpeed > Q(0)) { + if ((qSpeed - Q(96. / 256.)) < Q(0)) { + qSpeed = 0; + } else { + qSpeed -= Q(96. / 256.); + } + + p->qSpeedGround = qSpeed; + } else if (qSpeed < Q(0)) { + if ((qSpeed + Q(96. / 256.)) > Q(0)) { + qSpeed = 0; + } else { + qSpeed += Q(96. / 256.); + } + + p->qSpeedGround = qSpeed; + } + + Player_80470AC(p); + SA2_LABEL(sub_80231C0)(p); + } + + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } +} + +void Player_Knuckles_SwimFloat_8048D74(Player *p) +{ + Water *water = &gWater; + + if (p->heldInput & DPAD_DOWN) { + p->charState = CHARSTATE_18; + p->SA2_LABEL(unk61) = 0; + return; + } else if (p->moveState & MOVESTATE_IN_WATER) { + s16 qSpeed; +#ifndef NON_MATCHING + register s32 r3 asm("r3"); +#else + s32 r3; +#endif + s32 qOldSpeed = (u16)p->qSpeedAirY - Q(24. / 256.); + p->qSpeedAirY -= Q(24. / 256.); + r3 = qOldSpeed; + qSpeed = qOldSpeed; + + if (qSpeed < -Q(1)) { + r3 = -Q(1); + } + + p->qSpeedAirY = r3; + } + + if (I(p->qWorldY) - 4 < water->currentWaterLevel) { + p->qWorldY = Q(water->currentWaterLevel + 4); + p->qSpeedAirY = 0; + p->moveState |= MOVESTATE_IN_WATER; + p->framesUntilDrownCountDecrement = GBA_FRAMES_PER_SECOND; + p->secondsUntilDrown = 30; + m4aSongNumStop(27); + } + + if (p->heldInput & DPAD_UP) { + p->charState = CHARSTATE_83; + Player_8044750(p); + } else { + Player_804726C(p); + Player_8047280(p); + + if (p->charState != CHARSTATE_KNUCKLES_FLOAT) { + Player_Knuckles_InitGfx_FloatSplash(p); + } + + p->charState = CHARSTATE_KNUCKLES_FLOAT; + } +} + +void sub_8048E34(Player *p) +{ + if (p->SA2_LABEL(unk61) == 0) { + Player_804726C(p); + Player_8047280(p); + + if (p->SA2_LABEL(unk62) == 0) { + Player_8044670(p); + + if (p->moveState & MOVESTATE_1000) { + if ((p->moveState & MOVESTATE_IN_WATER) && (p->qSpeedAirY >= Q(0))) { + p->SA2_LABEL(unk61) = 9; + p->moveState &= ~(MOVESTATE_4 | MOVESTATE_FLIP_WITH_MOVE_DIR); + p->charState = CHARSTATE_KNUCKLES_FLOAT; + Player_Knuckles_InitGfx_FloatSplash(p); + } + } + Player_AirInputControls(p); + } else { + if (p->moveState & MOVESTATE_1000) { + if ((p->moveState & MOVESTATE_IN_WATER) && (p->qSpeedAirY >= Q(0))) { + p->SA2_LABEL(unk61) = 9; + p->moveState &= ~(MOVESTATE_4 | MOVESTATE_FLIP_WITH_MOVE_DIR); + p->charState = CHARSTATE_KNUCKLES_FLOAT; + Player_Knuckles_InitGfx_FloatSplash(p); + } + } + } + + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); + } else if (p->SA2_LABEL(unk61) < 9) { + Player_804726C(p); + Player_8047280(p); + + if (p->SA2_LABEL(unk61) == 2) { + if (p->moveState & MOVESTATE_1000) { + if ((p->moveState & MOVESTATE_IN_WATER) && (p->qSpeedAirY >= Q(0))) { + p->SA2_LABEL(unk61) = 9; + p->moveState &= ~(MOVESTATE_4 | MOVESTATE_FLIP_WITH_MOVE_DIR); + p->charState = CHARSTATE_KNUCKLES_FLOAT; + Player_Knuckles_InitGfx_FloatSplash(p); + } + } + } + + sub_8048980(p); + sa2__sub_80232D0(p); + Player_UpdatePosition(p); + + switch (p->SA2_LABEL(unk61)) { + case 0: { + return; + } break; + + case 1: { + sub_8048230(p); + } break; + + case 2: { + sub_80484CC(p); + } break; + + case 3: { + sub_80485CC(p); + } break; + + case 4: { + sub_80486E8(p); + } break; + + case 5: { + return; + } break; + + case 6: { + return; + } break; + } + } else if (Player_TryJump(p)) { + p->qSpeedAirY >>= 1; + p->SA2_LABEL(unk61) = 0; + } else { + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + Player_Knuckles_SwimFloat_8048D74(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); + } +} + +void Player_Knuckles_8049000(Player *p) +{ + switch (p->moveState & MOVESTATE_JUMPING) { + case 0: { + { + sub_8048CB0(p); + } + + } break; + + case MOVESTATE_IN_AIR: { + sub_8048E34(p); + } break; + + case MOVESTATE_4: { + Player_804726C(p); + Player_8047280(p); + if (!Player_TryJump(p)) { + SA2_LABEL(sub_8029D14)(p); + Player_8043DDC(p); + + // _0804749E + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } + } break; + + case MOVESTATE_JUMPING: { + // Inline of sub_8049208? + Player_804726C(p); + Player_8047280(p); + Player_8044670(p); + + if (p->moveState & MOVESTATE_1000) { + if ((p->moveState & MOVESTATE_IN_WATER) && (p->qSpeedAirY >= Q(0))) { + p->SA2_LABEL(unk61) = 9; + p->moveState &= ~(MOVESTATE_4 | MOVESTATE_FLIP_WITH_MOVE_DIR); + + p->charState = CHARSTATE_KNUCKLES_FLOAT; + + Player_Knuckles_InitGfx_FloatSplash(p); + } + } + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); + } break; + } +} + +void Task_KnucklesFloatSplash(void) +{ + struct Task *t = gCurTask; + MultiplayerSpriteTask *mps = TASK_DATA(gCurTask); + u8 mpid = mps->mpPlayerID; + Sprite *s = &mps->s; + Camera *cam = &gCamera; + Water *water; + Player *p; + u32 mask; + + if (IS_SINGLE_PLAYER) { + p = &gPlayer; + + if (mpid != PLAYER_1) { + p = &gPartner; + } + + water = &gWater; + + if (p->charState != CHARSTATE_KNUCKLES_FLOAT) { + TaskDestroy(t); + return; + } + } else { + TaskDestroy(t); + return; + } + + s->x = (I(p->qWorldX) - cam->x) + p->SA2_LABEL(unk7C); + s->y = (I(p->qWorldY) - ({ (u16) cam->y + 4; })); + + s->frameFlags &= ~0x3000; + mask = p->spriteInfoBody->s.frameFlags & 0x3000; + s->frameFlags |= mask; + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + SPRITE_FLAG_SET(s, X_FLIP); + } else { + SPRITE_FLAG_CLEAR(s, X_FLIP); + } + + UpdateSpriteAnimation(s); + + if (water->currentWaterLevel >= 0) { + if (I(p->qWorldY) - 6 < water->currentWaterLevel) { + DisplaySprite(s); + } + } +} + +void sub_80491C4(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + + if (!Player_TryJump(p)) { + SA2_LABEL(sub_8029D14)(p); + Player_8043DDC(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } +} + +void sub_8049208(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + Player_8044670(p); + + if (p->moveState & MOVESTATE_1000) { + if ((p->moveState & MOVESTATE_IN_WATER) && (p->qSpeedAirY >= Q(0))) { + p->SA2_LABEL(unk61) = 9; + p->moveState &= ~(MOVESTATE_4 | MOVESTATE_FLIP_WITH_MOVE_DIR); + + p->charState = CHARSTATE_KNUCKLES_FLOAT; + + Player_Knuckles_InitGfx_FloatSplash(p); + } + } + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); +} + +struct Task *Player_Knuckles_InitGfx_UppercutFlame(Player *p) +{ + struct Task *t + = CreateMultiplayerSpriteTask(0, 0, 224, p->playerID, Task_UpdateMpSpriteTaskSprite, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *mps = TASK_DATA(t); + Sprite *s = &mps->s; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_KNUCKLES_UPPERCUT); + s->graphics.anim = SA1_ANIM_CHAR(KNUCKLES, ATTACK); + s->variant = 3; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +struct Task *Player_Knuckles_InitGfx_FloatSplash(Player *p) +{ + struct Task *t = CreateMultiplayerSpriteTask(0, 0, 96, p->playerID, Task_KnucklesFloatSplash, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *mps = TASK_DATA(t); + Sprite *s = &mps->s; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_KNUCKLES_FLOAT_SPLASH); + s->graphics.anim = SA1_ANIM_KNUCKLES_FLOAT_SPLASH; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +void sub_8049348(Player *p) +{ + p->SA2_LABEL(unk61) = 2; + p->charState = CHARSTATE_63; + PLAYERFN_SET_SHIFT_OFFSETS(p, 6, 14); +#ifndef NON_MATCHING + { + u32 flag; + u32 r1 = p->w.kf.flags; + asm("mov %0, #2" : "=r"(flag)); + p->w.kf.flags = flag | r1; + } +#else + // This generates the correct instruction with ANY other value, except for 2, because 2 is used in the 1st line... + p->w.kf.flags |= 2; +#endif +} + +void sub_804936C() { } diff --git a/sa1/src/game/stage/player_sonic.c b/sa1/src/game/stage/player_sonic.c new file mode 100644 index 0000000000..2e13ab8a24 --- /dev/null +++ b/sa1/src/game/stage/player_sonic.c @@ -0,0 +1,414 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/some_task_manager.h" +#include "game/stage/mp_sprite_task.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/player_sonic.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" + +/* Sonic */ + +s32 sub_8047668(Player *p); +struct Task *Player_Sonic_InitGfx_InstaShield(Player *p); + +extern bool32 Player_Spindash(Player *p); + +void Player_Sonic_80473AC(Player *p) +{ + switch (p->moveState & MOVESTATE_JUMPING) { + case 0: { + if (p->moveState & MOVESTATE_1000000) { + sub_80472B8(p); + } else { + // inline of sub_8047774 ? + if (p->SA2_LABEL(unk62) == 0) { + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (sub_8047668(p) == 0)) { + if (!Player_Spindash(p) && !Player_TryJump(p)) { + SA2_LABEL(sub_8029CA0)(p); + Player_8044F7C(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } + } + } else { + SA2_LABEL(sub_8029CA0)(p); + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + sub_8047668(p); + } + + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } + } + } break; + + case MOVESTATE_IN_AIR: { + // inline of sub_804780C + Player_804726C(p); + Player_8047280(p); + Player_8044670(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); + } break; + + case MOVESTATE_4: { + // inline of sub_804784C ? + Player_804726C(p); + Player_8047280(p); + + if (!Player_TryJump(p)) { + SA2_LABEL(sub_8029D14)(p); + Player_8043DDC(p); + + // _0804749E + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } + } break; + + case MOVESTATE_JUMPING: { + // Inline of sub_8047890? + Player_804726C(p); + Player_8047280(p); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + sub_8047714(p); + } + + Player_8044670(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); + } break; + } +} + +void Player_Sonic_StartRoll(Player *p) +{ + if (!(p->moveState & MOVESTATE_SPINDASH) && ((p->rotation + Q(0.25)) << 24 > 0) && !(p->moveState & MOVESTATE_20) + && (p->frameInput & gPlayerControls.attack)) { + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedGround = -Q(2.0); + } else { + p->qSpeedGround = +Q(2.0); + } + + p->qSpeedAirX = 0; + p->SA2_LABEL(unk62)++; + p->charState = CHARSTATE_45; + m4aSongNumStart(SE_SPIN_ATTACK); + } +} + +void Player_Sonic_UpdateRoll(Player *p) +{ + s32 qSpeed = p->qSpeedGround; + + if (qSpeed > 0) { + if ((qSpeed - Q(8. / 256.)) < 0) { + qSpeed = 0; + } else { + qSpeed -= Q(8. / 256.); + } + + p->qSpeedGround = qSpeed; + } else if (qSpeed < 0) { + if ((qSpeed + Q(8. / 256.)) > 0) { + qSpeed = 0; + } else { + qSpeed += Q(8. / 256.); + } + + p->qSpeedGround = qSpeed; + } + + Player_80470AC(p); + + if (p->qSpeedGround == Q(0)) { + p->charState = 0; + p->SA2_LABEL(unk62) = 0; + } + + // Do Somersault + if (p->frameInput & gPlayerControls.attack) { + if (p->moveState & MOVESTATE_FACING_LEFT) { + p->qSpeedGround = -Q(3); + } else { + p->qSpeedGround = +Q(3); + } + + p->SA2_LABEL(unk62)++; + p->SA2_LABEL(unk63) = 0; + p->charState = CHARSTATE_46; + + m4aSongNumStart(SE_TAILS_TAIL_SWIPE); + } + + SA2_LABEL(sub_80231C0)(p); +} + +void Player_Sonic_UpdateSomersault(Player *p) +{ + s32 qSpeed = p->qSpeedGround; + s32 v; + + if (qSpeed > 0) { + if ((qSpeed - Q(8. / 256.)) < 0) { + qSpeed = 0; + } else { + qSpeed -= Q(8. / 256.); + } + + p->qSpeedGround = qSpeed; + } else if (qSpeed < 0) { + if ((qSpeed + Q(8. / 256.)) > 0) { + qSpeed = 0; + } else { + qSpeed += Q(8. / 256.); + } + + p->qSpeedGround = qSpeed; + } + + Player_80470AC(p); + + // Figure out, what to do after somersault + v = p->SA2_LABEL(unk63); + if (v == 0) { + if (p->frameInput & gPlayerControls.attack) { + // -> Slide + p->SA2_LABEL(unk63) = 1; + } + + v = p->SA2_LABEL(unk63); + if (v == 0) { + if (p->frameInput & gPlayerControls.jump) { + // -> Spinning Backjump + p->SA2_LABEL(unk63) = 2; + } + } + } + + SA2_LABEL(sub_80231C0)(p); +} + +s32 sub_8047668(Player *p) +{ + switch (p->SA2_LABEL(unk62)) { + case 0: { + Player_Sonic_StartRoll(p); + return p->SA2_LABEL(unk62); + } break; + + case 1: { + Player_Sonic_UpdateRoll(p); + return p->SA2_LABEL(unk62); + } break; + + case 2: { + Player_Sonic_UpdateSomersault(p); + return p->SA2_LABEL(unk62); + } break; + + case 3: { + /* Update Slide */ + s32 qSpeed = p->qSpeedGround; + + if (qSpeed > 0) { + if ((qSpeed - Q(32. / 256.)) < 0) { + qSpeed = 0; + } else { + qSpeed -= Q(32. / 256.); + } + + p->qSpeedGround = qSpeed; + } else if (qSpeed < 0) { + if ((qSpeed + Q(32. / 256.)) > 0) { + qSpeed = 0; + } else { + qSpeed += Q(32. / 256.); + } + + p->qSpeedGround = qSpeed; + } + + Player_80470AC(p); + + if (p->qSpeedGround == 0) { + p->charState = CHARSTATE_48; + p->SA2_LABEL(unk62)++; + } + + SA2_LABEL(sub_80231C0)(p); + return p->SA2_LABEL(unk62); + } break; + + case 4: { + return p->SA2_LABEL(unk62); + } break; + } + + return 0; +} + +void sub_8047714(Player *p) +{ + if ((p->SA2_LABEL(unk61) == 0) && (p->moveState & MOVESTATE_100)) { + s32 res = GetAirDashDirection(10); + + if (res != 0) { + p->SA2_LABEL(unk61) = 2; + p->charState = CHARSTATE_AIR_DASH; + m4aSongNumStart(SE_SONIC_MIDAIR_SOMERSAULT); + + if (res > 0) { + p->qSpeedAirX += (p->maxSpeed >> 2); + } else if (res < 0) { + p->qSpeedAirX -= (p->maxSpeed >> 2); + } + + p->qSpeedAirY = 0; + } + } +} + +// inline +void sub_8047774(Player *p) +{ + if (p->SA2_LABEL(unk62) == 0) { + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (sub_8047668(p) == 0)) { + if (!Player_Spindash(p) && !Player_TryJump(p)) { + SA2_LABEL(sub_8029CA0)(p); + Player_8044F7C(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } + } + } else { + SA2_LABEL(sub_8029CA0)(p); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + sub_8047668(p); + } + + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } +} + +// inline +void sub_804780C(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + Player_8044670(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); +} + +// inline +void sub_804784C(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + + if (!Player_TryJump(p)) { + SA2_LABEL(sub_8029D14)(p); + Player_8043DDC(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } +} + +// inline +// identical to sub_804780C, except for the MP block +void sub_8047890(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + sub_8047714(p); + } + + Player_8044670(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); +} + +// =============== MODULE + +/* Sonic Insta Shield */ + +void Player_Sonic_InitInstaShield(Player *p) +{ + struct Task *t; + MultiplayerSpriteTask *mps; + Sprite *s; + + p->charState = CHARSTATE_43; + m4aSongNumStart(SE_SONIC_INSTA_SHIELD); + + t = Player_Sonic_InitGfx_InstaShield(p); + mps = TASK_DATA(t); + s = &mps->s; + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + s->frameFlags |= SPRITE_FLAG(X_FLIP, 1); + } else { + s->frameFlags &= ~SPRITE_FLAG(X_FLIP, 1); + } +} + +struct Task *Player_Sonic_InitGfx_InstaShield(Player *p) +{ + struct Task *t + = CreateMultiplayerSpriteTask(0, 0, 160, p->playerID, Task_UpdateMpSpriteTaskSprite, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *mps = TASK_DATA(t); + Sprite *s = &mps->s; + + s->graphics.dest = ALLOC_TILES(SA1_CHAR_ANIM_50); + s->graphics.anim = SA1_CHAR_ANIM_50; + s->variant = 1; + s->oamFlags = 0x200; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +void nullsub_804798C() { } diff --git a/sa1/src/game/stage/player_super_sonic.c b/sa1/src/game/stage/player_super_sonic.c new file mode 100644 index 0000000000..09a42094b3 --- /dev/null +++ b/sa1/src/game/stage/player_super_sonic.c @@ -0,0 +1,1683 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/amy_attack_heart_effect.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/stage/dust_effect_braking.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/player_super_sonic.h" +#include "game/enemies/boss_xtra_super_egg_robo.h" +#include "game/stage/rings_scatter.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/underwater_effects.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/vram_hardcoded.h" + +/* Start of Super Sonic ? */ +#include "game/enemies/boss_xtra_super_egg_robo.h" + +void Player_SuperSonic_80499CC(Player *p); +void sub_8049D7C(Player *p); +void Player_8049E3C(Player *p); +bool32 sub_8049BAC(Player *p); +void sub_8049FD0(Player *p); +void Player_804A0B8(Player *p); +void sub_804A1B8(Player *p); +void InitSparkleCount(void); +void Player_804A20C(Player *p); +void Player_804A254(Player *p); +void sub_804A2FC(Player *p); +void sub_804A498(s32 qWorldX, s32 qWorldY, bool32 param2); +void Task_804A54C(void); +void Task_804A71C(void); +void TaskDestructor_804A830(struct Task *); +void sub_804A854(Player *p); +void Task_804AAC4(void); +void Task_804AD0C(void); +void Task_804B370(void); +void ExtraBossCapsule_UpdateSprite(Sprite *s, s32 screenX, s32 screenY); + +// TODO: static +static s32 sSparkleCount = 0; + +extern TileInfoFirework gUnknown_084AE1B0[5]; + +extern void Task_PlayerDied(); + +void Task_8049898(void) +{ + Player *p = &gPlayer; + Camera *cam = &gCamera; + const Collision *coll = gRefCollision; + MaybeSuperSonic *super; + Sprite *s; + s32 r3; + + cam->minY = coll->pxHeight - 200; + cam->maxX = 480; + cam->shiftX = 64; + cam->shiftY = 0; + + Player_804A254(p); + + if (!IS_ALIVE(p)) { + // TODO: This is confusing. + // Inline functions imply that the player modules were split, but this implies it was one big file after all. + gCurTask->main = Task_PlayerDied; + p->charState = CHARSTATE_DEAD; + p->qSpeedAirX = Q(0); + p->timerInvulnerability = 2; + p->itemEffect = 0; + cam->SA2_LABEL(unk50) |= 3; + + if (IS_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__ACT_START; + } + + p->spriteInfoBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + p->spriteInfoBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 1); + + p->SA2_LABEL(unk80) = Q(1.0); + p->SA2_LABEL(unk82) = Q(1.0); + m4aSongNumStop(0x1C); + m4aSongNumStop(0x1B); + m4aSongNumStop(0x78); + } else if (!(p->moveState & MOVESTATE_IA_OVERRIDE)) { + sub_8049D7C(p); + } + + Player_804A20C(p); + + super = TASK_DATA(p->spriteTask); + r3 = (super->unk8 + 1) & 0xF; + + super->qXs[r3] = p->qWorldX; + super->qYs[r3] = p->qWorldY; + + super->unk8 = r3; + + Player_8049E3C(p); + + if (p->SA2_LABEL(unk2A) != 0) { + p->SA2_LABEL(unk2A)--; + } else if (p->timerInvulnerability > 0) { + p->timerInvulnerability--; + } + + Player_SuperSonic_80499CC(p); +} + +void Player_SuperSonic_80499CC(Player *p) +{ + if (!(gStageFlags & STAGE_FLAG__ACT_START)) { +#ifdef BUG_FIX + if (gExtraBossTaskData.boss) +#endif + { + if (!(gExtraBossTaskData.boss->flags58 & SER_FLAG__80)) { + if (++p->timerSpeedup >= GBA_FRAMES_PER_SECOND) { + p->timerSpeedup -= GBA_FRAMES_PER_SECOND; + + if (--gRingCount <= 10) { + m4aSongNumStart(SE_TIMER); + } + + if (gRingCount == 0) { + // TODO: Is this a macro? + gRingCount = 0; + p->moveState |= MOVESTATE_DEAD; + } + } + } + } + } +} + +void Player_SuperSonic_8049A34(Player *p) +{ + switch (p->heldInput & DPAD_SIDEWAYS) { + case 0: { + if (p->qSpeedGround != 0) { + if (p->qSpeedGround > Q(0)) { + p->qSpeedGround -= Q(96. / 256.); + + if (p->qSpeedGround < Q(0)) { + p->qSpeedGround = Q(0); + } + } else if (p->qSpeedGround < Q(0)) { + p->qSpeedGround += Q(96. / 256.); + if (p->qSpeedGround > Q(0)) { + p->qSpeedGround = Q(0); + } + } + } + } break; + + case DPAD_LEFT: { + p->qSpeedGround -= Q(36. / 256.); + + if (p->qSpeedGround < -Q(2)) { + p->qSpeedGround = -Q(2); + } + } break; + + case DPAD_RIGHT: { + p->qSpeedGround += Q(36. / 256.); + + if (p->qSpeedGround > +Q(2)) { + p->qSpeedGround = +Q(2); + } + } break; + } + + p->qSpeedAirX = p->qSpeedGround; +} + +void Player_SuperSonic_8049AB8(Player *p) +{ + s32 r0, r3; + s32 qWorldX; + + if (p->SA2_LABEL(unk62) == 0) { + if (!sub_8049BAC(p)) { + if (p->frameInput & gPlayerControls.jump) { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState |= MOVESTATE_100; + + p->qSpeedAirY -= Q(4.25); + m4aSongNumStart(SE_JUMP); + } else { + // _08049B04 + Player_SuperSonic_8049A34(p); + + qWorldX = p->qWorldX; + r3 = qWorldX; + if (p->qWorldX >= 0) { + r0 = qWorldX; + if (r0 > Q(480)) { + r0 = Q(480); + } + } else { + r0 = 0; + } + qWorldX = r0; + + if (qWorldX != r3) { + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = Q(0); + } + + p->qSpeedAirX = 0; + } + + p->qWorldX = qWorldX; + + Player_UpdatePosition(p); + Player_UpdatePosition(p); + Player_804A0B8(p); + + // TODO: Do CHARSTATE_ values have different meanings for Super Sonic? + p->charState = CHARSTATE_CROUCH; + return; + } + } + } else { + sub_804A2FC(p); + + qWorldX = p->qWorldX; + r3 = qWorldX; + if (p->qWorldX >= 0) { + r0 = qWorldX; + if (r0 > Q(480)) { + r0 = Q(480); + } + } else { + r0 = 0; + } + qWorldX = r0; + + if (qWorldX != r3) { + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = Q(0); + } + + p->qSpeedAirX = 0; + } + + p->qWorldX = qWorldX; + + Player_UpdatePosition(p); + Player_UpdatePosition(p); + Player_804A0B8(p); + + // TODO: Do CHARSTATE_ values have different meanings for Super Sonic? + p->charState = CHARSTATE_3; + return; + } +} + +// (87.78%) https://decomp.me/scratch/wiHzX +NONMATCH("asm/non_matching/game/stage/Player__sub_8049BAC.inc", bool32 sub_8049BAC(Player *p)) +{ + if ((p->SA2_LABEL(unk61) == 0) || (--p->SA2_LABEL(unk61) == 0)) { + if (p->frameInput & gPlayerControls.attack) { + p->SA2_LABEL(unk61) = 8; + p->SA2_LABEL(unk62) = 1; + p->qSpeedGround = Q(4); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + + sub_804A854(p); + m4aSongNumStart(SE_SONIC_MIDAIR_SOMERSAULT); + return TRUE; + } + } + + return FALSE; +} +END_NONMATCH + +// TODO: Fake-match +void Player_SuperSonic_8049C0C(Player *p) +{ + s32 r0; + s32 r3; + s32 qWorldX; + s32 rot; + + if (p->SA2_LABEL(unk62) == 0) { + if (!sub_8049BAC(p)) { + if (!(p->heldInput & gPlayerControls.jump) && (p->moveState & MOVESTATE_100)) { + s32 qSpeed; + r0 = p->qSpeedAirY; +#ifndef NON_MATCHING + asm("movs %0, %1" : "=r"(qSpeed) : "r"(r0)); +#else + qSpeed = r0; +#endif + + if (p->qSpeedAirY < -Q(1.5)) { + qSpeed = -Q(1.5); + } + + p->qSpeedAirY = qSpeed; + } + + switch (p->heldInput & DPAD_SIDEWAYS) { + case DPAD_LEFT: { + p->qSpeedAirX -= Q(72. / 256.); + + if (p->qSpeedAirX < -Q(2)) { + p->qSpeedAirX = -Q(2); + } + } break; + + case DPAD_RIGHT: { + p->qSpeedAirX += Q(72. / 256.); + + if (p->qSpeedAirX > +Q(2)) { + p->qSpeedAirX = +Q(2); + } + } break; + } + + qWorldX = p->qWorldX; + r3 = qWorldX; + if (p->qWorldX >= 0) { + r0 = qWorldX; + if (r0 > Q(480)) { + r0 = Q(480); + } + } else { + r0 = 0; + } + qWorldX = r0; + + if (qWorldX != r3) { + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = Q(0); + } + + p->qSpeedAirX = 0; + } + p->qWorldX = qWorldX; + + // TODO: Find out why Player_UpdatePosition is often called twice in Super Sonic code + Player_UpdatePosition(p); + Player_UpdatePosition(p); + + p->qSpeedAirY += Q(32. / 256.); + + rot = (s8)p->rotation; + if (rot < 0) { + rot += 2; + + if (rot > 0) { + rot = 0; + } + } else if (rot > 0) { + rot -= 2; + + if (rot < 0) { + rot = 0; + } + } + + p->rotation = rot; + + if (p->qSpeedAirY >= 0) { + sub_8049FD0(p); + } + + p->charState = CHARSTATE_CROUCH; + } + } else { + p->qSpeedGround -= Q(0.25); + + if (p->qSpeedGround <= Q(0)) { + p->SA2_LABEL(unk62) = Q(0); + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + } else { + p->qSpeedAirX = p->qSpeedGround; + } + + qWorldX = p->qWorldX; + r3 = qWorldX; + if (p->qWorldX >= 0) { + r0 = qWorldX; + if (r0 > Q(480)) { + r0 = Q(480); + } + } else { + r0 = 0; + } + qWorldX = r0; + + if (qWorldX != r3) { + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = Q(0); + } + + p->qSpeedAirX = 0; + } + p->qWorldX = qWorldX; + + // TODO: Find out why Player_UpdatePosition is often called twice in Super Sonic code + Player_UpdatePosition(p); + Player_UpdatePosition(p); + Player_804A0B8(p); + p->charState = CHARSTATE_3; + } +} + +void sub_8049D7C(Player *p) +{ + if (p->SA2_LABEL(unk2A) != 0) { + p->rotation -= Q(12. / 256.); + Player_UpdatePosition(p); + Player_UpdatePosition(p); + Player_804A0B8(p); + } else { + if (p->moveState & MOVESTATE_IN_AIR) { + Player_SuperSonic_8049C0C(p); + } else { + Player_SuperSonic_8049AB8(p); + } + + if ((gStageTime % 4u) == 0) { + if (PseudoRandom32() & 0x10000) { + s32 qWorldX, qWorldY; + s32 qRand; + qWorldX = p->qWorldX + (((u32)PseudoRandom32() & 0xF0000) >> 8); + qWorldY = p->qWorldY + (((u32)PseudoRandom32() & 0xF0000) >> 8) - Q(8); + qRand = (((u32)PseudoRandom32() & 0x10000) >> 16); + + sub_804A498(qWorldX, qWorldY, qRand); + } + } + } +} + +// (100.0%) https://decomp.me/scratch/S7Q8B +void Player_8049E3C(Player *p) +{ + Sprite *s = &p->spriteInfoBody->s; + PlayerSpriteInfo *psiBody = p->spriteInfoBody; + MaybeSuperSonic *superSonic; + s32 sp00; + + SPRITE_FLAG_CLEAR(s, ROT_SCALE_ENABLE); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET(s, X_FLIP); + UpdateSpriteAnimation(s); + + if (IS_ALIVE(p)) { + if (p->moveState & MOVESTATE_100000) { + return; + } + + if ((p->SA2_LABEL(unk2A) == 0) && (p->timerInvulnerability != 0) && (gStageTime & 0x2)) { + return; + } + } + + superSonic = TASK_DATA(p->spriteTask); + sp00 = superSonic->unk8; + + { + psiBody->transform.x = s->x = I(p->qWorldX) - gCamera.x; + psiBody->transform.y = s->y = I(p->qWorldY) - gCamera.y; + + if (p->charState == CHARSTATE_WALK_A) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET(s, ROT_SCALE_ENABLE); + + psiBody->transform.rotation = p->rotation * 4; + psiBody->transform.qScaleX = -Q(1); + + TransformSprite(s, &psiBody->transform); + } + + DisplaySprite(s); + } + + s->frameFlags |= (SPRITE_FLAG(18, 1) | SPRITE_FLAG(19, 1)); + + if ((gStageTime & 0x2) == 0) { + s32 r6 = 1; +#ifndef NON_MATCHING + register s32 *qXs asm("sl") = &superSonic->qXs[0]; + register s32 *qYs asm("r9") = &superSonic->qYs[0]; +#else + s32 *qXs = &superSonic->qXs[0]; + s32 *qYs = &superSonic->qYs[0]; +#endif + s32 r7 = sp00 - 2; + + for (; r6 < 4; r7 -= 2, r6++) { + s32 index = r7 % ARRAY_COUNT(superSonic->qXs); +#ifndef NON_MATCHING + // All this for an add with swapped params... + s32 x; + asm("mov r3, %1\n" + "add %0, r3, %2\n" + "ldr %0, [%0]\n" + : "=r"(x) + : "r"(qXs), "r"(index * 4)); +#else + s32 x = qXs[index]; +#endif + psiBody->transform.x = s->x = I(x) - r6 * 8 - gCamera.x; + psiBody->transform.y = s->y = I(qYs[index]) - gCamera.y; + + if (p->charState == 4) { + SPRITE_FLAG_CLEAR(s, X_FLIP); + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + SPRITE_FLAG_SET(s, ROT_SCALE_ENABLE); + SPRITE_FLAG_SET_VALUE(s, ROT_SCALE, r6); + + psiBody->transform.rotation = p->rotation * 4; + psiBody->transform.qScaleX = -Q(1); + + TransformSprite(s, &psiBody->transform); + } + + DisplaySprite(s); + } + } + + s->frameFlags &= ~(SPRITE_FLAG(18, 1) | SPRITE_FLAG(19, 1)); +} + +void sub_8049FD0(Player *p) +{ +#ifndef NON_MATCHING + register s32 x asm("r4") = gCamera.x; +#else + s32 x = gCamera.x; +#endif + s32 scrollX = (x + gStageTime * 8); + s32 y; + s32 sp08; + s32 px, py; + s32 res0; + s32 res1; + u8 layer; + // 2688(0xA80) = + // 3072 - 600 + // Moon Zone Pixel Width - (4 * Metatile_Width) + const s32 scrollMaxX = (28 * 96); + + if (scrollX - 72 >= scrollMaxX) { + scrollX -= 72; + scrollX = Mod(scrollX, scrollMaxX) + 72; + } + + px = Q(x - scrollX); + x = p->qWorldX; + x -= px; + + y = p->qWorldY; + + sp08 = p->SA2_LABEL(unk61); + layer = p->layer; + y = I(y); + py = y + p->spriteOffsetY; + x = I(x); + px = x - 2; + px -= p->spriteOffsetX; + res0 = SA2_LABEL(sub_801E4E4)(py, px, layer, +8, 0, SA2_LABEL(sub_801EE64)); + + y += p->spriteOffsetY; + x += 2; + x += p->spriteOffsetX; + res1 = SA2_LABEL(sub_801E4E4)(y, x, layer, +8, 0, SA2_LABEL(sub_801EE64)); + + if (res1 > res0) { + res1 = res0; + } + + if (res1 < 0) { + p->qWorldY += Q(res1); + p->qSpeedGround = p->qSpeedAirX; + p->qSpeedAirY = 0; + + SA2_LABEL(sub_8021BE0)(p); + + p->SA2_LABEL(unk61) = sp08; + } +} + +void Player_804A0B8(Player *p) +{ +#ifndef NON_MATCHING + register s32 x asm("r4") = gCamera.x; +#else + s32 x = gCamera.x; +#endif + s32 y; + s32 anotherY; + s32 scrollX = (x + gStageTime * 8); + s32 sp08; + s32 px, py; + s32 res0; + s32 res1; + u8 layer; + // 2688(0xA80) = + // 3072 - 600 + // Moon Zone Pixel Width - (4 * Metatile_Width) + const s32 scrollMaxX = (28 * 96); + + if (scrollX - 72 >= scrollMaxX) { + scrollX -= 72; + scrollX = Mod(scrollX, scrollMaxX) + 72; + } + + px = Q(x - scrollX); + x = p->qWorldX; + x -= px; + + y = p->qWorldY; + + layer = p->layer; + anotherY = I(y); + py = anotherY + p->spriteOffsetY; + x = I(x); + px = x - 2; + px -= p->spriteOffsetX; + res0 = SA2_LABEL(sub_801E4E4)(py, px, layer, +8, 0, SA2_LABEL(sub_801EE64)); + + anotherY += p->spriteOffsetY; + x += 2; + x += p->spriteOffsetX; + res1 = SA2_LABEL(sub_801E4E4)(anotherY, x, layer, +8, 0, SA2_LABEL(sub_801EE64)); + + if (res1 > res0) { + res1 = res0; + } + + if (res1 != 0) { + if (res1 < 0) { + if (res1 < -11) { + return; + } + + y += Q(res1); + } else { + // bc: + s32 airX = I(ABS(p->qSpeedAirX)); + + if ((airX += 11) > 11) { + airX = 11; + } + + if (res1 > airX) { + if (!(p->moveState & MOVESTATE_GOAL_REACHED)) { + p->moveState |= MOVESTATE_IN_AIR; + } else { + p->qWorldY = y; + } + + return; + } + + y += Q(res1); + } + } + + p->qWorldY = y; +} + +// Called when Super Sonic is initialized +void sub_804A1B8(Player *p) +{ + MaybeSuperSonic *superSonic = TASK_DATA(p->spriteTask); + s32 ringCount; + s32 i; + + superSonic->unk8 = 0; + ringCount = gRingCount; + + for (i = 0; i < (s32)ARRAY_COUNT(superSonic->qXs); i++) { + superSonic->qXs[i] = p->qWorldX; + superSonic->qYs[i] = p->qWorldY; + } + + gRingCount = EXTRA_BOSS__INITIAL_RING_COUNT; + + p->spriteInfoBody->s.frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + p->spriteInfoBody->s.frameFlags |= SPRITE_FLAG(PRIORITY, 1); + + InitSparkleCount(); +} + +void Player_804A20C(Player *p) +{ + Sprite *s = &p->spriteInfoBody->s; + TileInfoFirework *tileInfo = &gUnknown_084AE1B0[p->charState]; + + if ((s->graphics.anim != tileInfo->anim) || (s->variant != tileInfo->variant)) { + s->graphics.anim = tileInfo->anim; + s->variant = tileInfo->variant; + s->prevVariant = -1; + } +} + +void Player_804A254(Player *p) +{ + u16 input = p->heldInput; + + if (!(p->moveState & MOVESTATE_IGNORE_INPUT)) { + p->heldInput = gInput; + } + + input ^= p->heldInput; + input &= p->heldInput; + + p->frameInput = input; +} + +bool32 Player_SuperSonic_UnusedJump(Player *p) +{ + bool32 result; + + if (p->frameInput & gPlayerControls.jump) { + p->moveState |= MOVESTATE_IN_AIR; + p->moveState |= MOVESTATE_100; + + p->qSpeedAirY -= Q(4.25); + + m4aSongNumStart(SE_JUMP); + result = TRUE; + } else { + result = FALSE; + } + + return result; +} + +void sub_804A2B8(Player *p) +{ + switch (p->heldInput & DPAD_SIDEWAYS) { + case DPAD_LEFT: { + p->qSpeedAirX -= Q(72. / 256.); + + if (p->qSpeedAirX < -Q(2)) { + p->qSpeedAirX = -Q(2); + } + } break; + + case DPAD_RIGHT: { + p->qSpeedAirX += Q(72. / 256.); + + if (p->qSpeedAirX > +Q(2)) { + p->qSpeedAirX = +Q(2); + } + } break; + } +} + +void sub_804A2FC(Player *p) +{ + p->qSpeedGround = (p->qSpeedGround - Q(0.25)); + + if (p->qSpeedGround <= Q(0)) { + p->SA2_LABEL(unk62) = 0; + p->qSpeedAirX = Q(0); + p->qSpeedAirY = Q(0); + } else { + p->qSpeedAirX = p->qSpeedGround; + } +} + +void sub_804A320(Player *p) +{ + bool32 result; + + if (!(p->heldInput & gPlayerControls.jump) && (p->moveState & MOVESTATE_100)) { +#ifndef NON_MATCHING + register s32 r3 asm("r3"); +#else + s32 r3; +#endif + s32 qSpeed = p->qSpeedAirY; + r3 = qSpeed; + if (qSpeed < -Q(1.5)) { + r3 = -Q(1.5); + } + + p->qSpeedAirY = r3; + } +} + +void sub_804A354(Player *p) { p->qSpeedAirX = p->qSpeedGround; } + +void sub_804A35C(Player *p) +{ + s32 rot = (s8)p->rotation; + + if (rot < 0) { + rot += 2; + + if (rot > 0) { + rot = 0; + } + } else if (rot > 0) { + rot -= 2; + + if (rot < 0) { + rot = 0; + } + } + + p->rotation = rot; +} + +void sub_804A37C(Player *p) +{ + s32 r2 = p->qWorldX; + s32 r4 = r2; + s32 r0; + + if (p->qWorldX >= Q(0)) { + r0 = p->qWorldX; + + if (r0 > Q(480)) { + r0 = Q(480); + } + } else { + r0 = 0; + } + + r2 = r0; + + if (r2 != r4) { + if (!(p->moveState & MOVESTATE_IN_AIR)) { + p->qSpeedGround = 0; + } + + p->qSpeedAirX = 0; + } + + p->qWorldX = r2; +} + +void sub_804A3B8(Player *p) { p->qSpeedAirY += Q(32. / 256.); } + +void Task_804A3C0(void) +{ +#ifndef NON_MATCHING + register struct Task *t asm("r2") = gCurTask; +#else + struct Task *t = gCurTask; +#endif + SomeTaskManager_60 *mgr = TASK_DATA(t); + Sprite *s = &mgr->s; + Player *p = &gPlayer; + Camera *cam = &gCamera; + s32 x, y; + + mgr->qUnk50 = p->qWorldX; + mgr->qUnk54 = p->qWorldY; + + if (!IS_ALIVE(p) || ((mgr->unk2) && (s->frameFlags & 0x4000))) { + TaskDestroy(t); + return; + } + + if ((p->SA2_LABEL(unk62) == 0) || (p->moveState & MOVESTATE_GOAL_REACHED)) { + mgr->unk2 = 1; + + s->graphics.anim = SA1_ANIM_SUPER_SONIC_DASH; + s->variant = 1; + } + + x = I(mgr->qUnk50) - cam->x; + y = I(mgr->qUnk54) - cam->y; + + s->x = x; + s->y = y; + + if (gStageTime & 0x2) { + SPRITE_FLAG_CLEAR(s, PRIORITY); + SPRITE_FLAG_SET_VALUE(s, PRIORITY, 2); + } else { + SPRITE_FLAG_CLEAR(s, PRIORITY); + SPRITE_FLAG_SET_VALUE(s, PRIORITY, 1); + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void sub_804A498(s32 qWorldX, s32 qWorldY, bool32 param2) +{ + struct Task *t; + GfxInfo gfx; + SomeTaskManager_60 *mgr; + + if (sSparkleCount > 0) { + sSparkleCount--; + + if (param2) { + gfx.tileInfo.anim = SA1_ANIM_SUPER_SONIC_SPARKLE; + gfx.tileInfo.variant = 1; + + } else { + gfx.tileInfo.anim = SA1_ANIM_SUPER_SONIC_SPARKLE; + gfx.tileInfo.variant = 0; + } + + gfx.vram = ALLOC_TILES(SA1_ANIM_SUPER_SONIC_SPARKLE); + + t = CreateSomeTaskManager_60_Task(&gfx, Task_804A54C, TaskDestructor_804A830); + mgr = TASK_DATA(t); + mgr->qUnk50 = qWorldX; + mgr->qUnk54 = qWorldY; + mgr->qUnk58 = 0; + mgr->qUnk5C = -Q(0.25); + mgr->s.oamFlags = SPRITE_OAM_ORDER(8); + mgr->s.frameFlags = SPRITE_FLAG(X_FLIP, 1) | SPRITE_FLAG(PRIORITY, 1); + } +} + +void Task_804A54C(void) +{ + SomeTaskManager_60 *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->s; + Camera *cam = &gCamera; + s32 screenX, screenY; + + screenX = I(mgr->qUnk50) - cam->x; + screenY = I(mgr->qUnk54) - cam->y; + + if ((s->frameFlags & 0x4000) || ((screenX < -16) || screenX >= DISPLAY_WIDTH + 16)) { + TaskDestroy(gCurTask); + return; + } + + s->x = screenX; + s->y = screenY; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + mgr->qUnk50 += mgr->qUnk58; + mgr->qUnk58 += mgr->qUnk5C; +} + +void sub_804A5D8(s32 screenX, s32 screenY) +{ + struct Task *t; + SomeTaskManager_60 *mgr; + GfxInfo gfx, sp08, sp0C, sp10; + + gfx.tileInfo.anim = SA1_ANIM_WARNING; + gfx.tileInfo.variant = 0; + gfx.vram = ALLOC_TILES_VARIANT(SA1_ANIM_WARNING, 0); + t = CreateSomeTaskManager_60_Task(&gfx, Task_804A71C, TaskDestructor_SomeTaskManager_60_Common); + mgr = TASK_DATA(t); + mgr->unk0 = 0; + mgr->qUnk50 = screenX; // NOTE: Q-value set to integer + mgr->qUnk54 = screenY; // NOTE: Q-value set to integer + mgr->s.oamFlags = 0; + mgr->s.frameFlags = 0; + mgr->transform.qScaleX = Q(1); + mgr->transform.qScaleY = Q(1); + + sp08.tileInfo.anim = SA1_ANIM_WARNING; + sp08.tileInfo.variant = 1; + sp08.vram = ALLOC_TILES_VARIANT(SA1_ANIM_WARNING, 1); + t = CreateSomeTaskManager_60_Task(&sp08, Task_804A71C, TaskDestructor_SomeTaskManager_60_Common); + mgr = TASK_DATA(t); + mgr->unk0 = 1; + mgr->qUnk50 = screenX; // NOTE: Q-value set to integer + mgr->qUnk54 = screenY; // NOTE: Q-value set to integer + mgr->s.oamFlags = 0; + mgr->transform.qScaleX = Q(1); + mgr->transform.qScaleY = Q(1); + mgr->s.frameFlags = SPRITE_FLAG(18, 1); + + sp0C.tileInfo.anim = SA1_ANIM_WARNING; + sp0C.tileInfo.variant = 2; + sp0C.vram = ALLOC_TILES_VARIANT(SA1_ANIM_WARNING, 1); + t = CreateSomeTaskManager_60_Task(&sp0C, Task_804A71C, TaskDestructor_SomeTaskManager_60_Common); + mgr = TASK_DATA(t); + mgr->unk0 = 2; + mgr->qUnk50 = screenX; // NOTE: Q-value set to integer + mgr->qUnk54 = screenY; // NOTE: Q-value set to integer + mgr->s.oamFlags = 0; + mgr->transform.qScaleX = Q(1); + mgr->transform.qScaleY = Q(1); + +#ifndef NON_MATCHING + asm("lsl %0, %0, #0xB\n" + "str %0, [%1, #0x28]" ::"r"(0x80), + "r"(mgr)); +#else + mgr->s.frameFlags = SPRITE_FLAG(18, 1); +#endif + + sp10.tileInfo.anim = SA1_ANIM_WARNING; + sp10.tileInfo.variant = 3; + sp10.vram = ALLOC_TILES_VARIANT(SA1_ANIM_WARNING, 1); + t = CreateSomeTaskManager_60_Task(&sp10, Task_804A71C, TaskDestructor_SomeTaskManager_60_Common); + mgr = TASK_DATA(t); + mgr->unk0 = 3; + mgr->qUnk50 = screenX; // NOTE: Q-value set to integer + mgr->qUnk54 = screenY; // NOTE: Q-value set to integer + mgr->s.oamFlags = 0; + mgr->s.frameFlags = 0; + mgr->transform.qScaleX = Q(1); + mgr->transform.qScaleY = Q(1); + mgr->s.frameFlags = SPRITE_FLAG(18, 1); +} + +void Task_804A71C(void) +{ + SomeTaskManager_60 *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->s; + SpriteTransform *tf; + s32 x, y; + s32 v; +#ifndef NON_MATCHING + register s32 r0 asm("r0"); +#else + s32 r0; +#endif + s32 r2; + + if (mgr->unk4 >= 0xC0) { + TaskDestroy(gCurTask); + return; + } + + if ((mgr->unk4 == 0x80) && (mgr->unk0 == 0)) { +#ifdef BUG_FIX + if (gExtraBossTaskData.boss) +#endif + { + gExtraBossTaskData.boss->flags58 &= ~0x400000; + } + } + + x = I(mgr->qUnk50); + y = I(mgr->qUnk54); + + v = ((mgr->unk4 & 0x1F) << 11); + if (v != 0) { + if (v < 0x4000) { + r2 = Q(1); + + r0 = SIN_24_8(v >> 6); + + } else if (v >= 0xE000) { + // TODO: Remove ONE_CYCLE + s32 theta = (v - 0xE000) << 1; + r0 = SIN_24_8((theta >> 6) & ONE_CYCLE); + r2 = r0 + Q(1); + r0 = Q(1) - r0; + } else { + r0 = Q(1); + r2 = r0; + } + } else { + r0 = Q(1); + r2 = r0; + } + + if (r2 == 0) { + r2 = 2; + } + + if (r0 == 0) { + r0 = 2; + } + + tf = &mgr->transform; + tf->x = x; + tf->y = y; + tf->qScaleX = r2; + tf->qScaleY = r0; + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SPRITE_FLAG(ROT_SCALE_DOUBLE_SIZE, 1) | SPRITE_FLAG(ROT_SCALE_ENABLE, 1) | SA2_LABEL(gUnknown_030054B8)++; + + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); + + mgr->unk4++; +} + +void TaskDestructor_804A830(struct Task *t) +{ + SomeTaskManager_60 *mgr = TASK_DATA(t); + sSparkleCount++; + TaskDestructor_SomeTaskManager_60_Common(t); +} + +void InitSparkleCount() { sSparkleCount = 4; } + +void sub_804A854(Player *p) +{ + GfxInfo gfx; + SomeTaskManager_60 *mgr; + struct Task *t; + + gfx.tileInfo.anim = SA1_ANIM_SUPER_SONIC_DASH; + gfx.tileInfo.variant = 0; + gfx.vram = ALLOC_TILES(SA1_ANIM_SUPER_SONIC_DASH); + t = CreateSomeTaskManager_60_Task(&gfx, Task_804A3C0, TaskDestructor_SomeTaskManager_60_Common); + mgr = TASK_DATA(t); + mgr->s.oamFlags = SPRITE_OAM_ORDER(8); + mgr->s.frameFlags = SPRITE_FLAG(X_FLIP, 1) | SPRITE_FLAG(PRIORITY, 1); +} + +void sub_804A8A8(s32 qX, s32 qY, s32 param2) +{ + GfxInfo gfx; + struct Task *t; + SomeTaskManager_7C *mgr; + + switch (param2) { + case 0: { + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_ROCK0; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_ROCK0; + } break; + + case 1: { + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_ROCK1; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_ROCK1; + } break; + + case 2: { + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_ROCK2; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_ROCK2; + } break; + } + + t = CreateSomeTaskManager_7C_Task(&gfx, Task_804AAC4, NULL); + mgr = TASK_DATA(t); + mgr->unk0.unk0 = param2; + mgr->unk0.qUnk50 = qX; + mgr->unk0.qUnk54 = qY; + + if (qX == Q(512)) { + mgr->unk0.qUnk58 = -(((u32)PseudoRandom32() << 14) >> 22); + mgr->unk0.qUnk5A = ((u32)PseudoRandom32() & 0xFF00) >> 8; + } else { + mgr->unk0.qUnk58 = (((u32)PseudoRandom32() & 0x3FF00) >> 8) - 0x300; + mgr->unk0.qUnk5A = -(((u32)PseudoRandom32() & 0x3FF00) >> 8) - 0x80; + } + + if (param2 == 2) { + mgr->unk0.qUnk58 >>= 2; + mgr->unk0.qUnk5A >>= 2; + } + + mgr->unk0.qUnk5E = Q(7. / 256.); + mgr->unk70 = (u32)PseudoRandom32() >> 8; + mgr->unk72 = (((u32)PseudoRandom32() << 11) >> 19) - 0x1000; + + mgr->unk0.s.oamFlags = SPRITE_OAM_ORDER(12); + mgr->unk0.s.frameFlags = SPRITE_FLAG(PRIORITY, 1); + + if (param2 == 0) { + s32 a, b; + u32 v; + mgr->unk72 >>= 1; + + v = (u32)PseudoRandom32(); + a = mgr->unk0.transform.qScaleX; + mgr->unk0.transform.qScaleX = a - ((v & 0x4000) >> 8); + v = (u32)PseudoRandom32(); + b = mgr->unk0.transform.qScaleY; + mgr->unk0.transform.qScaleY = b - ((v & 0x4000) >> 8); + } + + if ((u32)PseudoRandom32() & 0x10000) { + mgr->unk0.transform.qScaleY = -mgr->unk0.transform.qScaleY; + } +} + +void Task_804AAC4(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + SpriteTransform *transform = &mgr->unk0.transform; + SuperEggRobo *extraBoss = gExtraBossTaskData.boss; + Player *p = &gPlayer; + Camera *cam = &gCamera; + s32 screenX, screenY; + + // TODO: 2 * DISPLAY_ does not feel correct! + if (((mgr->unk0.qUnk50 < -Q(32)) || (mgr->unk0.qUnk50 > +Q(DISPLAY_WIDTH + 240 + 32))) + || ((mgr->unk0.qUnk54 < -Q(32)) || (mgr->unk0.qUnk54 > +Q((DISPLAY_HEIGHT + 128) + 32)))) { + TaskDestroy(gCurTask); + return; + } + + screenX = I(mgr->unk0.qUnk50) - cam->x; + screenY = I(mgr->unk0.qUnk54) - cam->y; + + if (p->SA2_LABEL(unk62) != 0) { + if (sub_800C0E0(s, I(mgr->unk0.qUnk50), I(mgr->unk0.qUnk54), p) != 0) { + s32 i = 3 - mgr->unk0.unk0; + + do { + sub_804A8A8(mgr->unk0.qUnk50, mgr->unk0.qUnk54, 2); + } while (--i != 0); + + m4aSongNumStart(SE_126); + + TaskDestroy(gCurTask); + return; + } + } else if ((p->timerInvulnerability == 0) && !(extraBoss->flags58 & SER_FLAG__80)) { + sub_800BFEC(s, I(mgr->unk0.qUnk50), I(mgr->unk0.qUnk54), p); + } + + transform->x = screenX; + transform->y = screenY; + + transform->rotation = mgr->unk70 >> 6; + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++ | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + + UpdateSpriteAnimation(s); + TransformSprite(s, transform); + DisplaySprite(s); + + mgr->unk0.qUnk50 += mgr->unk0.qUnk58; + mgr->unk0.qUnk54 += mgr->unk0.qUnk5A; + mgr->unk0.qUnk58 += mgr->unk0.qUnk5C; + mgr->unk0.qUnk5A += mgr->unk0.qUnk5E; + mgr->unk70 += mgr->unk72; +} + +void Task_804AC4C(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + Camera *cam = &gCamera; + s32 screenX, screenY; + + screenX = I(mgr->unk0.qUnk50) - cam->x; + screenY = I(mgr->unk0.qUnk54) - cam->y; + + // TODO: 2 * DISPLAY_ does not feel correct! + if ((mgr->unk0.qUnk50 < -Q(32)) || (mgr->unk0.qUnk50 > +Q(DISPLAY_WIDTH + 240))) { + TaskDestroy(gCurTask); + return; + } + + ExtraBossCapsule_UpdateSprite(s, screenX, screenY); + sub_804CFA0(&mgr->unk0); + + if (--mgr->unk0.unk4 <= 0) { + s->graphics.anim = SA1_ANIM_BOSS_XTRA_CAPSULE; + s->variant = 2; + s->prevVariant = -1; + + mgr->unk0.qUnk58 = 0; + mgr->unk0.qUnk5A = 0; + + gCurTask->main = Task_804AD0C; + } +} + +void Task_804AD0C(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + SuperEggRobo *extraBoss = gExtraBossTaskData.boss; + Player *p = &gPlayer; + Camera *cam = &gCamera; + s32 screenX, screenY; + + screenX = I(mgr->unk0.qUnk50) - cam->x; + screenY = I(mgr->unk0.qUnk54) - cam->y; + + // TODO: 2 * DISPLAY_ does not feel correct! + if ((mgr->unk0.qUnk50 < -Q(32)) || (mgr->unk0.qUnk50 > +Q(DISPLAY_WIDTH + 240))) { + TaskDestroy(gCurTask); + return; + } + + switch (ExtraBoss__CapsuleGetCaptureState(mgr, s, extraBoss, p)) { + case CAPSULE_STATE__DESTROYED: { + return; + } break; + + case CAPSULE_STATE__MOVING: { + ExtraBossCapsule_UpdateSprite(s, screenX, screenY); + } break; + + case CAPSULE_STATE__CAPTURED: { + ExtraBossCapsule_UpdateSprite(s, screenX, screenY); + return; + } break; + } + + sub_804CFA0(&mgr->unk0); + + if (p->qWorldY - mgr->unk0.qUnk54 < -Q(8)) { + mgr->unk0.qUnk5A = -Q(1); + return; + } else if (p->qWorldY - mgr->unk0.qUnk54 > +Q(8)) { + mgr->unk0.qUnk5A = +Q(1); + return; + } + + mgr->unk0.qUnk58 = -Q(3); + mgr->unk0.qUnk5A = +Q(0); + + gCurTask->main = Task_804B370; +} + +void sub_804AFCC(s32 qX, s32 qY); +void Task_804AF00(void); +void Task_804B0D8(void); + +void Task_804AE14(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + Player *p = &gPlayer; + Camera *cam = &gCamera; + s32 screenX, screenY; + + if (p->timerInvulnerability != 0) { + p->moveState &= ~MOVESTATE_GOAL_REACHED; + + sub_804AFCC(mgr->unk0.qUnk50, mgr->unk0.qUnk54); + TaskDestroy(gCurTask); + return; + } + // _0804AE6C + + mgr->unk0.qUnk50 = p->qWorldX; + mgr->unk0.qUnk54 = p->qWorldY; + + screenX = I(mgr->unk0.qUnk50) - cam->x; + screenY = I(mgr->unk0.qUnk54) - cam->y; + ExtraBossCapsule_UpdateSprite(s, screenX, screenY); + + if (s->frameFlags & SPRITE_FLAG(ANIM_OVER, 1)) { + mgr->unk0.unk4 = 240; + + p->qSpeedGround = 0; + p->qSpeedAirX = 0; + p->qSpeedAirY = 0; + p->SA2_LABEL(unk62) = 0; + p->moveState |= MOVESTATE_IA_OVERRIDE; + p->moveState |= MOVESTATE_100000; + + s->graphics.anim = SA1_ANIM_BOSS_XTRA_CAPSULE; + s->variant = 1; + s->prevVariant = -1; + + gCurTask->main = Task_804AF00; + } +} + +void Task_804AF00(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + Player *p = &gPlayer; + Camera *cam = &gCamera; + s32 screenX, screenY; + + if ((p->timerInvulnerability != 0) || (--mgr->unk0.unk4 < 0)) { + p->moveState &= ~MOVESTATE_GOAL_REACHED; + p->moveState &= ~MOVESTATE_IA_OVERRIDE; + p->moveState &= ~MOVESTATE_100000; + + sub_804AFCC(mgr->unk0.qUnk50, mgr->unk0.qUnk54); + + TaskDestroy(gCurTask); + return; + } else { + u32 input; + + if (p->frameInput & DPAD_SIDEWAYS) { + mgr->unk0.unk4 -= 20; + } + + Player_804A0B8(p); + + mgr->unk0.qUnk50 = p->qWorldX + mgr->unk68; + mgr->unk0.qUnk54 = p->qWorldY; + mgr->unk68 -= mgr->unk68 >> 2; + + input = (p->frameInput & DPAD_RIGHT) << 1; + input -= (p->frameInput & DPAD_LEFT); + mgr->unk68 = (input << 5); + + ExtraBossCapsule_UpdateSprite(s, I(mgr->unk0.qUnk50) - cam->x, I(mgr->unk0.qUnk54) - cam->y); + } +} + +void sub_804AFCC(s32 qX, s32 qY) +{ + GfxInfo gfx; + SomeTaskManager_7C *mgr; + struct Task *t; + s32 i; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_CAPSULE_PART; + gfx.tileInfo.variant = 0; + gfx.vram = VRAM_RESERVED_BOSS_XTRA_CAPSULE; + + for (i = 0; i < 2; i++) { + t = CreateSomeTaskManager_7C_Task(&gfx, Task_804B0D8, NULL); + mgr = TASK_DATA(t); + + mgr->unk0.qUnk50 = qX; + mgr->unk0.qUnk54 = qY; + + mgr->unk0.qUnk58 = -((((u32)PseudoRandom32() & 0x7F00) >> 8) + 0x80); + mgr->unk0.qUnk5A = +((((u32)PseudoRandom32() & 0x7F00) >> 8) + 0x40); + mgr->unk0.qUnk5E = Q(7. / 256.); + + mgr->unk72 = (((u32)PseudoRandom32() << 13) >> 21) - Q(4); + + if (i & 1) { + mgr->unk0.transform.qScaleX = -Q(1); + mgr->unk0.qUnk58 = -mgr->unk0.qUnk58; + } + + mgr->unk0.s.oamFlags = SPRITE_OAM_ORDER(12); + mgr->unk0.s.frameFlags = SPRITE_FLAG(PRIORITY, 1); + } +} + +// TODO: Similar to Task_804AAC4, document diffs +void Task_804B0D8(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + SpriteTransform *transform = &mgr->unk0.transform; + Camera *cam = &gCamera; + s32 screenX, screenY; + + screenX = I(mgr->unk0.qUnk50) - cam->x; + screenY = I(mgr->unk0.qUnk54) - cam->y; + + // TODO: 2 * DISPLAY_ does not feel correct! + if (((mgr->unk0.qUnk50 < -Q(32)) || (mgr->unk0.qUnk50 > +Q(DISPLAY_WIDTH + 240 + 32))) + || ((mgr->unk0.qUnk54 < -Q(32)) || (mgr->unk0.qUnk54 > +Q((DISPLAY_HEIGHT + 128) + 32)))) { + TaskDestroy(gCurTask); + return; + } + + transform->x = screenX; + transform->y = screenY; + transform->rotation = mgr->unk70 >> 6; + + SPRITE_FLAG_CLEAR(s, ROT_SCALE); + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++ | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + + UpdateSpriteAnimation(s); + TransformSprite(s, transform); + DisplaySprite(s); + + mgr->unk0.qUnk50 += mgr->unk0.qUnk58; + mgr->unk0.qUnk54 += mgr->unk0.qUnk5A; + mgr->unk0.qUnk58 += mgr->unk0.qUnk5C; + mgr->unk0.qUnk5A += mgr->unk0.qUnk5E; + mgr->unk70 += mgr->unk72; +} + +// NOTE: If you change this function or use a different compiler to agbcc, +// you HAVE to remove the NON_MATCHING block. +// Best by declaring -D NON_MATCHING as a compiler flag, if it isn't set already. +// (100.0%) https://decomp.me/scratch/CSS1H +s32 ExtraBoss__CapsuleGetCaptureState(SomeTaskManager_7C *mgr, Sprite *s, SuperEggRobo *extraBoss, Player *p) +{ + u32 res; + typedef u32 (*FakematchFuncCast)(Sprite *, CamCoord, CamCoord); + if (p->moveState & MOVESTATE_GOAL_REACHED) { + return 0; + } + +#ifndef NON_MATCHING + // TODO: Fix this, holy [REDACTED]!!! + // This only works because p is still in R3 at this point in time, when using agbcc. + res = ((FakematchFuncCast)sub_800C0E0)(s, I(mgr->unk0.qUnk50), I(mgr->unk0.qUnk54)); +#else + res = sub_800C0E0(s, I(mgr->unk0.qUnk50), I(mgr->unk0.qUnk54), p); +#endif + if (res != 0) { + if (p->SA2_LABEL(unk62) != 0) { + m4aSongNumStart(SE_ITEM_BOX); + InitScatteringRings_ExtraBossCapsule(I(mgr->unk0.qUnk50), I(mgr->unk0.qUnk54), 8); + sub_804AFCC(mgr->unk0.qUnk50, mgr->unk0.qUnk54); + + TaskDestroy(gCurTask); + return CAPSULE_STATE__DESTROYED; + } else if ((p->timerInvulnerability == 0) && !(extraBoss->flags58 & SER_FLAG__80)) { + s->graphics.anim = SA1_ANIM_BOSS_XTRA_CAPSULE; + s->variant = 3; + s->prevVariant = -1; + p->moveState |= MOVESTATE_GOAL_REACHED; + + gCurTask->main = Task_804AE14; + + return CAPSULE_STATE__CAPTURED; + } + } + + return CAPSULE_STATE__MOVING; +} + +void sub_804B2BC(s32 qWorldX, s32 qWorldY) +{ + GfxInfo gfx; + struct Task *t; + SomeTaskManager_7C *mgr; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_CAPSULE; + gfx.tileInfo.variant = 0; + gfx.vram = ALLOC_TILES(SA1_ANIM_BOSS_XTRA_CAPSULE); + + t = CreateSomeTaskManager_7C_Task(&gfx, Task_804AC4C, TaskDestructor_SomeTaskManager_60_Common); + mgr = TASK_DATA(t); + + mgr->unk0.qUnk50 = qWorldX; + mgr->unk0.qUnk54 = qWorldY; + mgr->unk0.qUnk58 = -Q(1); + mgr->unk0.unk4 = 48; + mgr->unk0.s.oamFlags = SPRITE_OAM_ORDER(12); + mgr->unk0.s.frameFlags = SPRITE_FLAG(PRIORITY, 1); +} + +// TODO: Maybe not just the ring capsule? +void ExtraBossCapsule_UpdateSprite(Sprite *s, s32 screenX, s32 screenY) +{ + s->x = screenX; + s->y = screenY; + UpdateSpriteAnimation(s); + + s->frameFlags |= SPRITE_FLAG(18, 1) | SPRITE_FLAG(19, 1); + s->frameFlags |= SPRITE_FLAG(Y_FLIP, 1); + DisplaySprite(s); + + s->frameFlags &= ~(SPRITE_FLAG(18, 1) | SPRITE_FLAG(19, 1)); + s->frameFlags &= ~(SPRITE_FLAG(Y_FLIP, 1)); + DisplaySprite(s); +} + +// NOTE: Almost a complete copy of Task_804AD0C, just without lines below sub_804CFA0() call. +// TODO: Maybe this was used as an inline? +void Task_804B370(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + SuperEggRobo *extraBoss = gExtraBossTaskData.boss; + Player *p = &gPlayer; + Camera *cam = &gCamera; + s32 screenX, screenY; + + screenX = I(mgr->unk0.qUnk50) - cam->x; + screenY = I(mgr->unk0.qUnk54) - cam->y; + + // TODO: 2 * DISPLAY_ does not feel correct! + if ((mgr->unk0.qUnk50 < -Q(32)) || (mgr->unk0.qUnk50 > +Q(DISPLAY_WIDTH + 240))) { + TaskDestroy(gCurTask); + return; + } + + switch (ExtraBoss__CapsuleGetCaptureState(mgr, s, extraBoss, p)) { + case CAPSULE_STATE__DESTROYED: { + return; + } break; + + case CAPSULE_STATE__MOVING: { + ExtraBossCapsule_UpdateSprite(s, screenX, screenY); + } break; + + case CAPSULE_STATE__CAPTURED: { + ExtraBossCapsule_UpdateSprite(s, screenX, screenY); + return; + } break; + } + + sub_804CFA0(&mgr->unk0); +} + +// =============== MODULE + +void Task_804B420(void) +{ + SomeTaskManager_7C *mgr = TASK_DATA(gCurTask); + Sprite *s = &mgr->unk0.s; + SuperEggRobo *extraBoss = gExtraBossTaskData.boss; + Player *p = &gPlayer; + Camera *cam = &gCamera; + s32 scrollX; + + // TODO: 2 * DISPLAY_ does not feel correct! + if ((s->frameFlags & SPRITE_FLAG(ANIM_OVER, 1)) || ((mgr->unk0.qUnk50 < -Q(32)) || (mgr->unk0.qUnk50 > +Q(DISPLAY_WIDTH + 240 + 32)))) { + TaskDestroy(gCurTask); + return; + } + + { + s32 screenX, screenY; + s32 res; + s32 x; + s32 scrollX = cam->x; + const s32 scrollMaxX = (28 * 96); + + scrollX = (scrollX + gStageTime * 8); + + // 2688(0xA80) = + // 3072 - 600 + // Moon Zone Pixel Width - (4 * Metatile_Width) + + if (scrollX - 72 >= scrollMaxX) { + scrollX -= 72; + scrollX = Mod(scrollX, scrollMaxX) + 72; + } + // _0804B4A2 + + x = scrollX - cam->x; + + res = SA2_LABEL(sub_801F100)(I(mgr->unk0.qUnk54), I(mgr->unk0.qUnk50) + x, 1, +8, SA2_LABEL(sub_801EC3C)); + + mgr->unk0.qUnk54 += Q(res); + + screenX = I(mgr->unk0.qUnk50) - cam->x; + screenY = I(mgr->unk0.qUnk54) - cam->y; + + if ((p->SA2_LABEL(unk62) == 0) && (p->timerInvulnerability == 0) && !(extraBoss->flags58 & SER_FLAG__80)) { + sub_800BFEC(s, I(mgr->unk0.qUnk50), I(mgr->unk0.qUnk54), p); + } + + s->x = screenX; + s->y = screenY; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + mgr->unk0.qUnk50 += mgr->unk0.qUnk58; + mgr->unk0.qUnk54 += mgr->unk0.qUnk5A; + mgr->unk0.qUnk58 += mgr->unk0.qUnk5C; + mgr->unk0.qUnk5A += mgr->unk0.qUnk5E; + } +} + +// Create Laser +void sub_804B570(s32 qWorldX, s32 qWorldY) +{ + GfxInfo gfx; + struct Task *t; + SomeTaskManager_7C *mgr; + + gfx.tileInfo.anim = SA1_ANIM_BOSS_XTRA_LASER; + gfx.tileInfo.variant = 0; + gfx.vram = ALLOC_TILES(SA1_ANIM_BOSS_XTRA_LASER); + + t = CreateSomeTaskManager_7C_Task(&gfx, Task_804B420, TaskDestructor_SomeTaskManager_60_Common); + mgr = TASK_DATA(t); + + mgr->unk0.qUnk50 = qWorldX; + mgr->unk0.qUnk54 = qWorldY; + + mgr->unk0.s.oamFlags = SPRITE_OAM_ORDER(12); + mgr->unk0.s.frameFlags = SPRITE_FLAG(PRIORITY, 1); +} diff --git a/sa1/src/game/stage/player_tails.c b/sa1/src/game/stage/player_tails.c new file mode 100644 index 0000000000..b6543fc8e6 --- /dev/null +++ b/sa1/src/game/stage/player_tails.c @@ -0,0 +1,357 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/camera.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/stage/mp_sprite_task.h" +#include "game/stage/player.h" +#include "game/stage/player_controls.h" +#include "game/stage/underwater_effects.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/songs.h" +#include "constants/zones.h" + +/* Tails Start */ +void Player_Tails_8047A3C(Player *p); +s32 Player_Tails_8047B04(Player *p); + +struct Task *Player_Tails_InitGfx_TailSwipe(Player *p); + +static inline void sub_8047E94_inline(Player *p) +{ + if (p->SA2_LABEL(unk62) == 0) { + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (Player_Tails_8047B04(p) == 0)) { + if (!Player_Spindash(p) && !Player_TryJump(p)) { + SA2_LABEL(sub_8029CA0)(p); + Player_8044F7C(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } + } + } else { + SA2_LABEL(sub_8029CA0)(p); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + Player_Tails_8047B04(p); + } + + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } +} + +static inline void sub_8047F2C_inline(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + + if (p->SA2_LABEL(unk61) == 0) { + Player_8044670(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); + } else { + Player_Tails_8047A3C(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); + } +} + +static inline void sub_8047FA0_inline(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + + if (!Player_TryJump(p)) { + SA2_LABEL(sub_8029D14)(p); + Player_8043DDC(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + SA2_LABEL(sub_8022D6C)(p); + SA2_LABEL(sub_8029ED8)(p); + } +} + +static inline void sub_8047FE4_inline(Player *p) +{ + Player_804726C(p); + Player_8047280(p); + Player_8044670(p); + Player_AirInputControls(p); + SA2_LABEL(sub_80232D0)(p); + Player_UpdatePosition(p); + PlayerFn_Cmd_UpdateAirFallSpeed(p); + Player_8047224(p); + SA2_LABEL(sub_8022190)(p); +} + +static inline void sub_80480C4_inline(Player *p) +{ + if ((!(p->moveState & MOVESTATE_SPINDASH)) && (((p->rotation + Q(0.25)) << 24) > 0) && !(p->moveState & MOVESTATE_20) + && (p->frameInput & gPlayerControls.attack)) { + p->SA2_LABEL(unk62)++; + p->charState = CHARSTATE_GROUND_ATTACK; + Player_Tails_InitGfx_TailSwipe(p); + } +} + +static inline void sub_8048110_inline(Player *p) +{ + s32 qSpeed = p->qSpeedGround; + + if (qSpeed > Q(0)) { + qSpeed -= (p->deceleration >> 1); + if (qSpeed < 0) { + qSpeed = 0; + } + } else { + qSpeed += (p->deceleration >> 1); + if (qSpeed > Q(0)) { + qSpeed = 0; + } + } + + p->qSpeedGround = qSpeed; + + Player_80470AC(p); + SA2_LABEL(sub_80231C0)(p); +} + +void Player_Tails_8047990(Player *p) +{ + if (p->w.tf.flyingDuration == 0) { + p->charState = CHARSTATE_FLY_EXHAUSTED; + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } else if (p->moveState & MOVESTATE_IN_WATER) { + if (((p->heldInput & DPAD_LEFT) && !(p->moveState & MOVESTATE_FACING_LEFT)) + || ((p->heldInput & DPAD_RIGHT) && (p->moveState & MOVESTATE_FACING_LEFT))) { + p->charState = CHARSTATE_58; + } else if (p->charState != CHARSTATE_54) { + p->charState = CHARSTATE_SWIMMING; + } + + RandomlySpawnAirBubbles(p); + + m4aSongNumStop(SE_TAILS_PROPELLER_FLYING); + } else { + if (((p->heldInput & DPAD_LEFT) && !(p->moveState & MOVESTATE_FACING_LEFT)) + || ((p->heldInput & DPAD_RIGHT) && (p->moveState & MOVESTATE_FACING_LEFT))) { + p->charState = CHARSTATE_54; + } else if (p->charState != CHARSTATE_54) { + p->charState = CHARSTATE_FLYING; + } + + m4aSongNumStartOrChange(SE_TAILS_PROPELLER_FLYING); + } +} + +void Player_Tails_8047A3C(Player *p) +{ + if ((gStageTime & 0x1) != 0) { + if (p->w.tf.flyingDuration != 0) { + p->w.tf.flyingDuration--; + } + } + + if (p->SA2_LABEL(unk61) != 1) { + if (p->qSpeedAirY >= -Q(0.75)) { + p->qSpeedAirY -= Q(24. / 256.); + + if (++p->SA2_LABEL(unk61) == 32) { + p->SA2_LABEL(unk61) = 1; + } + } else { + p->SA2_LABEL(unk61) = 1; + } + } else { + // _08047A94 + if (p->frameInput & gPlayerControls.jump) { + s32 qSpeed = p->qSpeedAirY; + if (qSpeed >= -Q(0.75)) { + if (p->w.tf.flyingDuration != 0) { + p->SA2_LABEL(unk61) = 2; + } + } + } + // _08047ABA + + if (p->moveState & MOVESTATE_10000) { + p->qSpeedAirY += Q(16. / 256.); + } else { + p->qSpeedAirY += Q(8. / 256.); + } + } + // _08047AD6 + + if (p->qWorldY < Q(gCamera.minY)) { + p->qWorldY = Q(gCamera.minY); + + if (p->qSpeedAirY < Q(0)) { + p->qSpeedAirY = Q(0); + } + } + + Player_Tails_8047990(p); +} + +s32 Player_Tails_8047B04(Player *p) +{ + switch (p->SA2_LABEL(unk62)) { + case 0: { + sub_80480C4_inline(p); + return p->SA2_LABEL(unk62); + } break; + + case 1: { + sub_8048110_inline(p); + return p->SA2_LABEL(unk62); + } break; + } + return 0; +} + +void Player_Tails_8047BA0(Player *p) +{ + switch (p->moveState & MOVESTATE_JUMPING) { + case 0: { + sub_8047E94_inline(p); + } break; + + case MOVESTATE_IN_AIR: { + sub_8047F2C_inline(p); + } break; + + case MOVESTATE_4: { + sub_8047FA0_inline(p); + } break; + + case MOVESTATE_JUMPING: { + sub_8047FE4_inline(p); + } break; + } +} + +void Task_8047D04(void) +{ + MultiplayerSpriteTask *mps = TASK_DATA(gCurTask); + u8 mpid = mps->mpPlayerID; + Sprite *s = &mps->s; + SpriteTransform *tf = &mps->transform; + Camera *cam = &gCamera; + Player *p; + s32 v, w; + + if (IS_MULTI_PLAYER) { + TaskDestroy(gCurTask); + return; + } + + p = &gPlayer; + if (mpid != PLAYER_1) { + p = &gPartner; + } + + if ((p->character != CHARACTER_TAILS) || (p->charState != CHARSTATE_32) || (p->SA2_LABEL(unk99)[0] == 0x7F)) { + TaskDestroy(gCurTask); + return; + } + + tf->x = (I(p->qWorldX) - cam->x) + p->SA2_LABEL(unk7C); + tf->y = (I(p->qWorldY) - cam->y); + + s->frameFlags &= ~SPRITE_FLAG_MASK_PRIORITY; + s->frameFlags |= SPRITE_FLAG(PRIORITY, 0); + + s->frameFlags |= p->spriteInfoLimbs->s.frameFlags & 0x3000; + s->frameFlags &= ~SPRITE_FLAG_MASK_ROT_SCALE; + s->frameFlags |= SA2_LABEL(gUnknown_030054B8)++ | SPRITE_FLAG_MASK_ROT_SCALE_ENABLE; + + tf->rotation = (u8)p->w.tf.shift * 4; + tf->qScaleX = Q(1.0); + tf->qScaleY = Q(1.0); + v = p->SA2_LABEL(unk80); + w = p->SA2_LABEL(unk82); + tf->qScaleX = v; + tf->qScaleY = w; + + UpdateSpriteAnimation(s); + TransformSprite(s, tf); + DisplaySprite(s); +} + +struct Task *Player_Tails_InitGfxMarbleTrack(Player *p) +{ + struct Task *t = CreateMultiplayerSpriteTask(0, 0, 96, p->playerID, Task_8047D04, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *mps = TASK_DATA(t); + Sprite *s = &mps->s; + SpriteTransform *tf = &mps->transform; + + s->graphics.dest = ALLOC_TILES(SA1_CHAR_ANIM_MARBLE_TRACK); + s->graphics.anim = SA1_CHAR_ANIM_MARBLE_TRACK + SA1_ANIM_TAILS_IDLE; + s->variant = 1; + s->oamFlags = 0x400; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + tf->rotation = 0; + tf->qScaleX = Q(1.0); + tf->qScaleY = Q(1.0); + tf->x = 0; + tf->y = 0; + return t; +} + +void sub_8047E94(Player *p) { sub_8047E94_inline(p); } + +void sub_8047F2C(Player *p) { sub_8047F2C_inline(p); } + +void sub_8047FA0(Player *p) { sub_8047FA0_inline(p); } + +void sub_8047FE4(Player *p) { sub_8047FE4_inline(p); } + +// TODO: There are inline functions *below* Player_Tails_InitFlying and Player_Tails_InitGfx_TailSwipe, +// but also above them. The functions below get used, not in these two, but above the other inline procs. +// That does not make sense. +void Player_Tails_InitFlying(Player *p) +{ + if (p->moveState & MOVESTATE_4) { + p->moveState &= ~MOVESTATE_4; + PLAYERFN_CHANGE_SHIFT_OFFSETS(p, 6, 14); + } + + p->w.tf.flyingDuration = TIME(0, 4); + Player_Tails_8047990(p); +} + +struct Task *Player_Tails_InitGfx_TailSwipe(Player *p) +{ + struct Task *t + = CreateMultiplayerSpriteTask(0, 0, 224, p->playerID, Task_UpdateMpSpriteTaskSprite, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *mps = TASK_DATA(t); + Sprite *s = &mps->s; + + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TAILS_TAIL_SWIPE); + s->graphics.anim = SA1_ANIM_TAILS_TAIL_SWIPE; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(8); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +void sub_80480C4(Player *p) { sub_80480C4_inline(p); } + +void sub_8048110(Player *p) { sub_8048110_inline(p); } diff --git a/sa1/src/game/stage/results.c b/sa1/src/game/stage/results.c new file mode 100644 index 0000000000..f858a10adb --- /dev/null +++ b/sa1/src/game/stage/results.c @@ -0,0 +1,985 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/gTask_03006240.h" +#include "game/collect_chaos_emeralds_msg.h" +#include "game/credits.h" +#include "game/save.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/player.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" +#include "data/ui_graphics.h" + +#include "constants/ui_graphics.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct VramPtrs { + /* 0x00 */ void *vram0; + /* 0x04 */ void *vram4; +} VramPtrs; + +typedef struct StrcStgResults_34 { + /* 0x00 */ GameOverB unk0; + /* 0x18 */ s32 unk18; + /* 0x1C */ u16 unk1C; + /* 0x1E */ u16 unk1E; + /* 0x20 */ u8 unk20[0x10]; + /* 0x30 */ s32 unk30; +} StrcStgResults_34; /* 0x34 */ + +typedef struct StrcStgResults_38 { + /* 0x00 */ u16 unk0; + /* 0x02 */ u16 unk2; + /* 0x04 */ u16 unk4; + /* 0x06 */ u16 unk6; + /* 0x08 */ u16 unk8; + /* 0x0A */ u8 unkA; + /* 0x0C */ struct Task *taskC; // -> StrcStgResults_34 * + /* 0x10 */ struct Task *task10; // -> StrcStgResults_34 * + /* 0x14 */ struct Task *task14; // -> StrcStgResults_34 * + /* 0x18 */ struct Task *task18; // -> StrcStgResults_34 * + /* 0x1C */ VramPtrs vram1C; + /* 0x24 */ s16 unk24; + /* 0x28 */ s32 unk28; + /* 0x2C */ s32 unk2C; + /* 0x30 */ s32 unk30; + /* 0x34 */ u16 unk34; + /* 0x36 */ u8 unk36; +} StrcStgResults_38; /* 0x38 */ + +extern void CreateTimeAttackResult(TimeRecord record); + +extern ALIGNED(4) u8 gUnknown_08688404[11]; +extern ALIGNED(4) u8 gUnknown_0868840F[11]; +extern ALIGNED(4) u8 gUnknown_0868841C[12]; +extern ALIGNED(4) u8 gUnknown_08688428[0x19]; + +void sub_8056FE4(VramPtrs *ptrs); + +void Task_8057B74(void); +void Task_8057C3C(void); +void Task_8057D30(void); +void Task_805803C(void); + +// StrcStgResults_38 +void Task_8057888(void); +void TaskDestructor_8058344(struct Task *t); + +void sub_8056FE4(VramPtrs *arg0) +{ + Strc_80528AC sp00; + const void *var_r0; + + sp00.uiGfxID = UIGFX_STGRESULT_HEADLINE_BACK; + sp00.unk2B = 8; + sp00.tiles = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].tiles; + sp00.palette = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].palette; + sp00.tilesSize = (8 * 2) * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = (void *)BG_VRAM + 0x11000; // TODO: Create VRAM_RESERVED_ #define! + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_34; + sp00.unk2B = 2; + + if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_THE_MOON)) { + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0x1E00; + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_X_ZONE)) { + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0x1400; + } else if (gCurrentLevel & 0x1) { + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0xA00; + } else { + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + } + + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.paletteSize = 32; + sp00.unk28 = 12; + sp00.tilesSize = 0xA00; + sp00.vramC = (void *)arg0->vram0 + 0x600; // TODO: Create VRAM_RESERVED_ #define! + sp00.unk2A = 0xD; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = (gUiGraphics[sp00.uiGfxID].unkC); + sp00.unk0.unk9 = (gUiGraphics[sp00.uiGfxID].unk10); + sp00.unk0.unkA = (gUiGraphics[sp00.uiGfxID].unk14); + sp00.unk0.unkB = (gUiGraphics[sp00.uiGfxID].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = gSelectedCharacter + UIGFX_STGRESULT_SONIC; + sp00.unk2B = 2; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = (8 * 6) * TILE_SIZE_4BPP; + sp00.paletteSize = 12; + sp00.unk28 = 12; + sp00.vramC = (void *)arg0->vram0; // TODO: Create VRAM_RESERVED_ #define! + sp00.unk2A = 0xD; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = (gUiGraphics[sp00.uiGfxID].unkC); + sp00.unk0.unk9 = (gUiGraphics[sp00.uiGfxID].unk10); + sp00.unk0.unkA = (gUiGraphics[sp00.uiGfxID].unk14); + sp00.unk0.unkB = (gUiGraphics[sp00.uiGfxID].unk18); + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_ASCII_CHARS; + sp00.unk2B = 4; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0x9C0; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 2 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 0x6; + sp00.vramC = (void *)arg0->vram4 + 0x240; // TODO: Create VRAM_RESERVED_ #define! + sp00.unk2A = 0xD; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = (gUiGraphics[sp00.uiGfxID].unkC); + sp00.unk0.unk9 = (gUiGraphics[sp00.uiGfxID].unk10); + sp00.unk0.unkA = (gUiGraphics[sp00.uiGfxID].unk14); + sp00.unk0.unkB = (gUiGraphics[sp00.uiGfxID].unk18); + sub_80528AC(&sp00); + + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0xB40; + sp00.vramC = arg0->vram4 + 0x100; + sp00.tilesSize = 6 * TILE_SIZE_4BPP; + sub_80528AC(&sp00); + + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0x880; + sp00.vramC = arg0->vram4 + 0x1C0; + sp00.tilesSize = 2 * TILE_SIZE_4BPP; + sub_80528AC(&sp00); + + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0x940; + sp00.vramC = arg0->vram4 + 0x200; + sub_80528AC(&sp00); + + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0xA40; + sp00.vramC = arg0->vram4 + 0x280; + sub_80528AC(&sp00); + + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0x1240; + sp00.vramC = arg0->vram4 + 0x2C0; + sub_80528AC(&sp00); + + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + 0xC80; + sp00.vramC = arg0->vram4 + 0; + sp00.tilesSize = 8 * TILE_SIZE_4BPP; + sub_80528AC(&sp00); +} + +// (93.06%) https://decomp.me/scratch/mM5tB +NONMATCH("asm/non_matching/game/stage/results__CreateStageResults.inc", u32 CreateStageResults(u32 ringCount, u32 courseTime)) +{ + s16 temp_r2_5; + s16 var_r5_6; + s32 temp_r0_11; + s16 temp_r0_5; + s16 temp_r2_3; + StrcStgResults_38 *temp_r4; + StrcStgResults_34 *temp_r7; + StrcStgResults_34 *temp_r7_2; + s32 var_r0; + struct Task *temp_r5; + struct Task *taskLast; + struct Task *t1; + struct Task *t2; + struct Task *t0; + s32 sp10; + u32 sp14; + u32 sp18; + s32 sp1C; + u16 temp_r1_2; + u16 temp_r2; + u32 timeScore; + u32 ringScore; + s16 ringCount2 = ringCount; + bool32 isInFinalStage; + + ringScore = 100 * ringCount; + LOADED_SAVE->score += ringCount2; + gStageFlags |= 0x20; + if (gCurrentLevel == 0xA) { + gCamera.sa2__unk50 |= 0x2000; + } + if (gGameMode == 1) { + CreateTimeAttackResult(courseTime); + return 0U; + } + + isInFinalStage = 0; + if ((gSelectedCharacter == CHARACTER_SONIC) && (gCurrentLevel >= LEVEL_INDEX(ZONE_7, ACT_X_ZONE)) + && (LOADED_SAVE->chaosEmeralds == ALL_ZONE_CHAOS_EMERALDS) && (LOADED_SAVE->unlockedLevels[0] > 12) + && (LOADED_SAVE->unlockedLevels[1] > 12) && (LOADED_SAVE->unlockedLevels[2] > 12) && (LOADED_SAVE->unlockedLevels[3] > 12) + && ((LOADED_SAVE->unlockedLevels[0] != 0xF) || (gMultiplayerCurrentLevel != LEVEL_INDEX(ZONE_7, ACT_X_ZONE)))) { + isInFinalStage = 1; + } + + sp1C = isInFinalStage; + if (isInFinalStage == 0) { + temp_r2 = LOADED_SAVE->unlockedLevels[gPlayer.character]; + var_r0 = gCurrentLevel + 1; + + if (var_r0 < temp_r2) { + var_r0 = temp_r2; + } + LOADED_SAVE->unlockedLevels[gPlayer.character] = var_r0; + } + + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) { + const s32 countDown = TIME(3, 0); + if (gCheckpointTime <= +countDown) { + courseTime = 1; + } else { + courseTime = gCheckpointTime - countDown; + } + } + if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_THE_MOON)) { + m4aSongNumStart(MUS_EXTRA_CLEAR); + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_7, ACT_X_ZONE)) { + m4aSongNumStart(MUS_FINAL_CLEAR); + } else if (gCurrentLevel & 0x1) { + m4aSongNumStart(MUS_BOSS_CLEAR); + } else { + m4aSongNumStart(MUS_ACT_CLEAR); + } + + gMusicManagerState.unk0 = 0xFF; + + if (courseTime >= TIME(6, 0)) { + timeScore = 0; + } else if (courseTime >= TIME(5, 0)) { + timeScore = 500; + } else if (courseTime >= TIME(4, 0)) { + timeScore = 1000; + } else if (courseTime >= TIME(3, 0)) { + timeScore = 2000; + } else if (courseTime >= TIME(2, 0)) { + timeScore = 3000; + } else if (courseTime >= TIME(1, 30)) { + timeScore = 4000; + } else if (courseTime >= TIME(1, 0)) { + timeScore = 5000; + } else if (courseTime >= TIME(0, 50)) { + timeScore = 10000; + } else if (courseTime >= TIME(0, 30)) { + timeScore = 50000; + } else { + timeScore = 80000; + } + + if (ringScore > timeScore) { + sp10 = Div(ringScore, 100) + 75; + } else { + sp10 = Div(timeScore, 100) + 75; + } + + sp18 = ringScore; + sp14 = timeScore; + UiGfxStackInit(); + + t0 = TaskCreate(Task_8057B74, sizeof(StrcStgResults_34), 0x2120U, 0U, 0); + temp_r7 = TASK_DATA(t0); + temp_r7->unk1C = 0; + temp_r7->unk30 = sp10; + temp_r7->unk1E = 0; + temp_r7->unk0.qUnkA = 0xF0; + temp_r7->unk0.unkC = 0x7E; + temp_r7->unk0.unkE = 8; + temp_r7->unk0.unk10 = 8; + temp_r7->unk0.unk12 = 6; + temp_r7->unk0.unk16 = 1; + temp_r7->unk0.unk8 = 0xA; + + t1 = TaskCreate(Task_8057C3C, sizeof(StrcStgResults_34), 0x2120U, 0U, 0); + temp_r7 = TASK_DATA(t1); + temp_r7->unk1C = 0; + temp_r7->unk30 = sp10; + temp_r7->unk1E = 0; + temp_r7->unk0.qUnkA = 0x100; + temp_r7->unk0.unkC = 0x80; + temp_r7->unk0.unkE = 9; + temp_r7->unk0.unk10 = 2; + temp_r7->unk0.unk12 = 0xC; + temp_r7->unk0.unk16 = 1; + temp_r7->unk0.unk8 = 0; + + t2 = TaskCreate(Task_8057D30, sizeof(StrcStgResults_34), 0x2120U, 0U, 0); + temp_r7 = TASK_DATA(t2); + temp_r7->unk18 = ringScore; + temp_r7->unk1C = 0; + temp_r7->unk30 = sp10; + temp_r7->unk1E = 0; + temp_r7->unk0.qUnkA = 0x100; + temp_r7->unk0.unkC = 0x66; + temp_r7->unk0.unkE = 0x10; + temp_r7->unk0.unk10 = 4; + temp_r7->unk0.unk12 = 6; + temp_r7->unk0.unk16 = 1; + temp_r7->unk0.unk8 = 0; + + for (temp_r2_3 = 15; temp_r2_3 >= 0; temp_r2_3--) { + temp_r0_11 = Div(ringScore, 10); + temp_r7->unk20[temp_r2_3] = ((ringScore - (temp_r0_11 * 10)) + 0x20); + ringScore = temp_r0_11; + }; + + for (var_r5_6 = 11; var_r5_6 < 15; var_r5_6++) { + if (temp_r7->unk20[var_r5_6] == 0x20) { + temp_r7->unk20[var_r5_6] = 0x2BU; + } else { + break; + } + } + + for (var_r5_6 = 0; var_r5_6 < 11; var_r5_6++) { + temp_r7->unk20[var_r5_6] = gUnknown_08688404[var_r5_6]; + } + + taskLast = TaskCreate(Task_805803C, sizeof(StrcStgResults_34), 0x2120U, 0, 0); + temp_r7 = TASK_DATA(taskLast); + temp_r7->unk18 = timeScore; + temp_r7->unk1C = 0; + temp_r7->unk30 = sp10; + temp_r7->unk1E = 0; + temp_r7->unk0.qUnkA = 0x100; + temp_r7->unk0.unkC = 0x50; + temp_r7->unk0.unkE = 0x10; + temp_r7->unk0.unk10 = 4; + temp_r7->unk0.unk12 = 6; + temp_r7->unk0.unk16 = 1; + temp_r7->unk0.unk8 = 0; + + for (var_r5_6 = 15; var_r5_6 >= 0; var_r5_6--) { + temp_r0_11 = Div(timeScore, 10); + temp_r7->unk20[var_r5_6] = ((timeScore - ((temp_r0_11 * 10))) + 0x20); + timeScore = temp_r0_11; + }; + + for (var_r5_6 = 11; var_r5_6 < 15; var_r5_6++) { + if (temp_r7->unk20[var_r5_6] == 0x20) { + temp_r7->unk20[var_r5_6] = 0x2BU; + } else { + break; + } + } + + for (var_r5_6 = 0; var_r5_6 < 11; var_r5_6++) { + temp_r7->unk20[var_r5_6] = gUnknown_0868840F[var_r5_6]; + } + + // StrcStgResults_38 + temp_r5 = TaskCreate(Task_8057888, sizeof(StrcStgResults_38), 0x2100U, 0U, TaskDestructor_8058344); + temp_r4 = TASK_DATA(temp_r5); + temp_r4->unk24 = 0; + temp_r4->unk2C = sp18; + temp_r4->unk30 = sp14; + temp_r4->unk34 = 0x2D; + temp_r4->unk28 = sp10; + temp_r4->task14 = t0; + temp_r4->task18 = taskLast; + temp_r4->task10 = t1; + temp_r4->taskC = t2; + temp_r4->unk0 = 0; + temp_r4->unk2 = 0; + temp_r4->unk4 = 1; + temp_r4->unk6 = 0; + temp_r4->unk8 = 0x100; + temp_r4->unkA = 1; + temp_r4->unk36 = sp1C; + + // TODO: ALLOC_TILES() instead of VramMalloc! + temp_r4->vram1C.vram0 = VramMalloc(0x80U); + temp_r4->vram1C.vram4 = VramMalloc(0x1EU); + sub_8056FE4(&temp_r4->vram1C); + + return (sp10 + 285); +} +END_NONMATCH + +// TODO: Fix gotos. +// (100.00%) https://decomp.me/scratch/Srat8 +void Task_8057888(void) +{ + u8 i; + StrcStgResults_34 *taskC; + StrcStgResults_34 *task10; + StrcStgResults_34 *task14; + StrcStgResults_34 *task18; + u8 temp_r4; + + Player *p = &gPlayer; + Camera *cam = &gCamera; + StrcStgResults_38 *arg0; + + arg0 = TASK_DATA(gCurTask); + + task14 = TASK_DATA(arg0->task14); + task18 = TASK_DATA(arg0->task18); + task10 = TASK_DATA(arg0->task10); + taskC = TASK_DATA(arg0->taskC); + task14->unk1C = arg0->unk24; + task18->unk1C = arg0->unk24; + task10->unk1C = arg0->unk24; + taskC->unk1C = arg0->unk24; + + if (arg0->unk24 < 135) { + for (i = 0; i < 12; i++) { + if (i != 0) { + SA2_LABEL(sub_80047A0)(0U, 0x100, Div(i << 8, 12), i + 20); + } else { + SA2_LABEL(sub_80047A0)(0U, 0x100, 1, 20); + } + } + } + + if (arg0->unk24 >= 0xB5) { + if (arg0->unk2C == 0) { + if (arg0->unk30 == 0) { + goto blk_else; + } + } else { + arg0->unk2C -= 100; + INCREMENT_SCORE_A(100); + taskC->unk18 = arg0->unk2C; + } + + if (arg0->unk30 != 0) { + arg0->unk30 -= 100; + INCREMENT_SCORE_A(100); + task18->unk18 = arg0->unk30; + } + + if (arg0->unk2C == 0 && arg0->unk30 == 0) { + if (!(gCurrentLevel & 0x1)) { + p->moveState &= ~MOVESTATE_800000; + } + cam->SA2_LABEL(unk8) = 0; + cam->SA2_LABEL(unkC) = 0; + if (gSelectedCharacter == 0) { + if ((arg0->unk36 == 0) && (gCurrentLevel >= LEVEL_INDEX(ZONE_7, ACT_X_ZONE))) { + arg0->unk34 = 0x87; + } else { + arg0->unk34 = 0x2D; + } + + } else if (IS_FINAL_STAGE(gCurrentLevel)) { + arg0->unk34 = 0x87; + } else { + arg0->unk34 = 0x2D; + } + + m4aSongNumStart(SE_STAGE_RESULT_COUNTER_DONE); + } else if (Mod(gStageTime, 4) == 0) { +#ifndef NON_MATCHING + // TODO: This sound hurts a lot with the current GB channel implementation + m4aSongNumStart(SE_STAGE_RESULT_COUNTER); +#endif + } + } + goto block_inc_return; + +blk_else : { + cam->sa2__unk8 = 0; + cam->sa2__unkC = 0; + + if (((u32)I(p->qWorldX) - cam->x) + 0x40 > (DISPLAY_WIDTH + 128)) { + gPlayer.qSpeedAirX = 0; + gPlayer.qSpeedGround = 0; + + if (gNumSingleplayerCharacters == 2) { + if ((I(gPartner.qWorldX) - cam->x) > (DISPLAY_WIDTH + 64)) { + gPartner.moveState |= MOVESTATE_IA_OVERRIDE; + gPartner.moveState |= MOVESTATE_IGNORE_INPUT; + gPartner.heldInput = 0; + gPartner.frameInput = 0; + gPartner.qSpeedAirX = 0; + gPartner.qSpeedGround = 0; + } + } + } + + if (arg0->unk28 + DISPLAY_WIDTH < (u32)arg0->unk24) { + if (!IS_FINAL_OR_EXTRA_STAGE(gCurrentLevel)) { + sub_805423C((StrcUi_805423C *)arg0); + } + + if ((arg0->unk34 == 0) || (--arg0->unk34 == 0)) { + arg0->unk34 = 0; + temp_r4 = arg0->unk36; + + TaskDestroy(arg0->taskC); + TaskDestroy(arg0->task10); + TaskDestroy(arg0->task14); + TaskDestroy(arg0->task18); + TaskDestroy(gCurTask); + + if (gSelectedCharacter == 0) { + if (temp_r4 == 0) { + if (gCurrentLevel < LEVEL_INDEX(ZONE_7, ACT_X_ZONE)) { + GoToNextLevel(); + return; + } + if (!IS_EXTRA_STAGE(gCurrentLevel)) { + CreateCongratulationsAnimation(); + } + } + return; + } else { + if (IS_FINAL_STAGE(gCurrentLevel)) { + CreateCongratulationsAnimation(); + return; + } else { + GoToNextLevel(); + return; + } + } + } + } +} + +block_inc_return: + arg0->unk24++; +} + +void Task_8057B74(void) +{ + s16 temp_r0; + s16 temp_r1; + StrcStgResults_34 *arg0 = TASK_DATA(gCurTask); + + temp_r1 = arg0->unk1C; + if (temp_r1 > (u32)(arg0->unk30 + 0xE6)) { + if ((gCurrentLevel & 0x1) || (gCurrentLevel > 0xB)) { + if (arg0->unk0.qUnkA < -0x20) { + arg0->unk0.qUnkA = arg0->unk0.qUnkA + 0x20; + if (arg0->unk0.unkE != 0) { + arg0->unk0.unkE = arg0->unk0.unkE - 1; + } + } + arg0->unk0.qUnkA = arg0->unk0.qUnkA - 0x1A; + } + } else if (temp_r1 >= 50) { + arg0->unk0.unkE = 9; + arg0->unk0.unkC = 42; + } else if (temp_r1 >= 36) { + arg0->unk0.unkC -= 6; + } else if (temp_r1 >= 26) { + arg0->unk0.qUnkA = -16; + } else if (temp_r1 >= 16) { + arg0->unk0.qUnkA -= 26; + + if (arg0->unk0.qUnkA < -16) { + arg0->unk0.qUnkA = -16; + } + } + if ((u32)(arg0->unk30 + DISPLAY_WIDTH) < arg0->unk1C) { + sub_8052F78((const char *)&gUnknown_0868841C[0], &arg0->unk0); + } else { + sub_80530CC((const char *)&gUnknown_0868841C[0], &arg0->unk0); + } +} + +void Task_8057C3C(void) +{ + u8 arr[0x19]; + s16 temp_r1; + s16 temp_r2; + s16 var_r0; + StrcStgResults_34 *arg0; + +#ifndef NON_MATCHING + asm("" ::"{r}"(gUnknown_08688428) : "r0"); + asm("mov r0, %0\n" + "mov r2, %2\n" + "bl memcpy" ::"r"(arr), + "{r}"(gUnknown_08688428), "i"(sizeof(arr))); +#else + memcpy(&arr, &gUnknown_08688428, sizeof(arr)); +#endif + arg0 = TASK_DATA(gCurTask); + + temp_r1 = arg0->unk1C; + if ((u32)temp_r1 > (arg0->unk30 + 0xE6)) { + arg0->unk0.qUnkA -= Q(28. / 256.); + + if (arg0->unk0.qUnkA < -0x1F) { + if (arg0->unk0.unkE != 0) { + arg0->unk0.unkE = arg0->unk0.unkE - 1; + } + var_r0 = arg0->unk0.qUnkA + 0x20; + arg0->unk0.qUnkA = var_r0; + arg0->unk1E = Mod(arg0->unk1E + 1, 8); + } + sub_80530CC((const char *)&arr[arg0->unk1E], &arg0->unk0); + } else if (temp_r1 >= 50) { + arg0->unk0.unkC = 0x2C; + arg0->unk0.qUnkA -= Q(2. / 256.); + + if (arg0->unk0.qUnkA < -0x1F) { + arg0->unk0.qUnkA += 0x20; + arg0->unk1E = Mod(arg0->unk1E + 1, 8); + } + + sub_80530CC((const char *)&arr[arg0->unk1E], &arg0->unk0); + } else if (temp_r1 >= 36) { + arg0->unk0.unkC -= 6; + arg0->unk0.qUnkA -= Q(2. / 256.); + + if (arg0->unk0.qUnkA < -0x1F) { + arg0->unk0.qUnkA += 0x20; + arg0->unk1E = Mod(arg0->unk1E + 1, 8); + } + + sub_80530CC((const char *)&arr[arg0->unk1E], &arg0->unk0); + } else if (temp_r1 >= 26) { + arg0->unk0.qUnkA -= Q(2. / 256.); + arg0->unk0.unkE = 9; + + if (arg0->unk0.qUnkA < -0x1F) { + arg0->unk0.qUnkA += 0x20; + arg0->unk1E = Mod(arg0->unk1E + 1, 8); + } + + sub_80530CC((const char *)&arr[arg0->unk1E], &arg0->unk0); + } else if (temp_r1 >= 16) { + arg0->unk0.qUnkA -= Q(28. / 256.); + + if (arg0->unk0.qUnkA < DISPLAY_WIDTH) { + arg0->unk0.unkE = 9 - (arg0->unk0.qUnkA >> 5); + if (arg0->unk0.qUnkA < -0x1F) { + arg0->unk0.qUnkA += Q(32. / 256.); + arg0->unk1E = Mod(arg0->unk1E + 1, 8); + } + sub_80530CC((const char *)&arr[arg0->unk1E], &arg0->unk0); + } + } +} + +void Task_8057D30(void) +{ + s16 sp0; + s16 temp_r4; + s32 temp_r0_3; + s32 temp_r3; + s32 var_r7; + s16 var_r7_2; + s8 var_r6; + u16 temp_r0; + u8 *temp_r1; + + StrcStgResults_34 *arg0 = TASK_DATA(gCurTask); + + var_r7 = arg0->unk18; + temp_r0 = arg0->unk1C; + if (temp_r0 > 90) { + sp0 = temp_r0 - 90; + } else { + sp0 = 0; + } + + if (arg0->unk1C > 0x85U) { + for (var_r6 = 15; var_r6 >= 0; var_r6--) { + temp_r0_3 = Div(var_r7, 10); + arg0->unk20[var_r6] = (u8)((var_r7 - ((temp_r0_3 * 8) + (temp_r0_3 << 1))) + 0x20); + var_r7 = temp_r0_3; + } + + for (var_r6 = 11; var_r6 < 15; var_r6++) { + if (arg0->unk20[var_r6] == 0x20) { + arg0->unk20[var_r6] = 0x2B; + continue; + } + + break; + } + + for (var_r6 = 0; var_r6 < 11; var_r6++) { + arg0->unk20[var_r6] = gUnknown_08688404[var_r6]; + } + } + + if (arg0->unk1C > (u32)(arg0->unk30 + 0xE6)) { + s32 v = (arg0->unk1C - 0xE6); + var_r7_2 = (v - arg0->unk30) * 0x1C; + } else { + var_r7_2 = 0; + } + + if (sp0 > 0x96) { + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 0xA; + arg0->unk0.qUnkA = 50 - var_r7_2; + arg0->unk0.unkC = 0x66; + + if (arg0->unk0.qUnkA >= -80) { + sub_80530CC((const char *)arg0->unk20, &arg0->unk0); + } + + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 1; + + for (var_r6 = 11; var_r6 < 16; var_r6++) { + if (arg0->unk20[var_r6] != 0x2B) { + s32 v = var_r7_2 - 50; + arg0->unk0.qUnkA = (var_r6 * 8) - v; + if (arg0->unk0.qUnkA >= -8) { + sub_80530CC((const char *)&arg0->unk20[var_r6], &arg0->unk0); + } + } + } + } else if (sp0 > 0x2C) { + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 0xA; + arg0->unk0.qUnkA = 0x32; + arg0->unk0.unkC = 0x66; + sub_80530CC((const char *)arg0->unk20, &arg0->unk0); + + for (var_r6 = 11; (var_r6 < 15); var_r6++) { + if (arg0->unk20[var_r6] != 0x2B) + break; + } + + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 16 - var_r6; + arg0->unk0.qUnkA = (var_r6 * 8) - (var_r7_2 -= 50); + sub_80530CC((const char *)&arg0->unk20[var_r6], &arg0->unk0); + } else { + s32 var_sb = (u8)Div(sp0, 2); + if ((u32)var_sb > 16) { + var_sb = 16; + } + + if (var_sb != 0) { + s8 var_sl = 0; + var_r6 = 0; + + if (var_sl < var_sb) { + do { + var_r7_2 = (sp0 - (var_r6 * 2)); + + if (var_r6 < 11) { + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + } else { + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + } + + if (var_r7_2 > 0xC) { + s8 v = ((var_sl << 24) + 0x01000000) >> 24; + var_sl = v; + } else { + if ((var_r6 < 11) || (arg0->unk20[var_r6] != 0x2B)) { + arg0->unk0.unkE = 1; + arg0->unk0.unkC = Div(0x100 - (var_r7_2 * 0x15), 0x23) + 0x5E; + if (var_r7_2 == 0xC) { + *((u16 *)&arg0->unk0.unk6) = 0x1F; + } else { + *((u16 *)&arg0->unk0.unk6) = var_r7_2 + 0x14; + } + + arg0->unk0.qUnkA = (var_r6 * 8) + 0x2E; + sub_8052E40(&arg0->unk20[var_r6], (void *)&arg0->unk0); + } + } + } while (++var_r6 < (s32)var_sb); + } + + if (var_sl > 11) { + for (var_r6 = 11; (var_r6 < 15); var_r6++) { + if (arg0->unk20[var_r6] != 0x2B) + break; + } + + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = var_sl - var_r6; + arg0->unk0.unkC = 0x66; + arg0->unk0.qUnkA = (var_r6 * 8) + 0x32; + sub_80530CC((const char *)&arg0->unk20[var_r6], &arg0->unk0); + var_sl = 11; + } + + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = var_sl; + arg0->unk0.unkC = 0x66; + arg0->unk0.qUnkA = 0x32; + sub_80530CC((const char *)arg0->unk20, &arg0->unk0); + } + } +} + +void Task_805803C(void) +{ + s16 sp0; + s32 temp_r0_3; + s32 var_r7; + s16 var_r7_2; + s8 var_r6; + u16 temp_r0; + + StrcStgResults_34 *arg0 = TASK_DATA(gCurTask); + + var_r7 = arg0->unk18; + temp_r0 = arg0->unk1C; + if (temp_r0 > 60) { + sp0 = temp_r0 - 60; + } else { + sp0 = 0; + } + + if (arg0->unk1C > 0x85U) { + for (var_r6 = 15; var_r6 >= 0; var_r6--) { + temp_r0_3 = Div(var_r7, 10); + arg0->unk20[var_r6] = (u8)((var_r7 - ((temp_r0_3 * 8) + (temp_r0_3 << 1))) + 0x20); + var_r7 = temp_r0_3; + } + + for (var_r6 = 11; var_r6 < 15; var_r6++) { + if (arg0->unk20[var_r6] == 0x20) { + arg0->unk20[var_r6] = 0x2B; + continue; + } + + break; + } + + for (var_r6 = 0; var_r6 < 11; var_r6++) { + arg0->unk20[var_r6] = gUnknown_0868840F[var_r6]; + } + } + + if (arg0->unk1C > (u32)(arg0->unk30 + 0xE6)) { + s32 v = (arg0->unk1C - 0xE6); + var_r7_2 = (v - arg0->unk30) * 0x1C; + } else { + var_r7_2 = 0; + } + + if (sp0 > 0xB4) { + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 0xA; + arg0->unk0.qUnkA = 50 - var_r7_2; + arg0->unk0.unkC = 80; + + if (arg0->unk0.qUnkA >= -80) { + sub_80530CC((const char *)arg0->unk20, &arg0->unk0); + } + + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 1; + + for (var_r6 = 11; var_r6 < 16; var_r6++) { + if (arg0->unk20[var_r6] != 0x2B) { + s32 v = var_r7_2 - 50; + arg0->unk0.qUnkA = (var_r6 * 8) - v; + if (arg0->unk0.qUnkA >= -8) { + sub_80530CC((const char *)&arg0->unk20[var_r6], &arg0->unk0); + } + } + } + } else if (sp0 > 0x2C) { + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 0xA; + arg0->unk0.qUnkA = 0x32; + arg0->unk0.unkC = 80; + sub_80530CC((const char *)arg0->unk20, &arg0->unk0); + + for (var_r6 = 11; (var_r6 < 15); var_r6++) { + if (arg0->unk20[var_r6] != 0x2B) + break; + } + + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = 16 - var_r6; + arg0->unk0.qUnkA = (var_r6 * 8) - (var_r7_2 -= 50); + sub_80530CC((const char *)&arg0->unk20[var_r6], &arg0->unk0); + } else { + s32 var_sb = (u8)Div(sp0, 2); + if ((u32)var_sb > 16) { + var_sb = 16; + } + + if (var_sb != 0) { + s8 var_sl = 0; + var_r6 = 0; + + if (var_sl < var_sb) { + do { + var_r7_2 = (sp0 - (var_r6 * 2)); + + if (var_r6 < 11) { + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + } else { + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + } + + if (var_r7_2 > 0xB) { + s8 v = ((var_sl << 24) + 0x01000000) >> 24; + var_sl = v; + } else { + if ((var_r6 < 11) || (arg0->unk20[var_r6] != 0x2B)) { + arg0->unk0.unkE = 1; + arg0->unk0.unkC = Div(0x100 - (var_r7_2 * 0x15), 0x23) + 0x48; + + *((u16 *)&arg0->unk0.unk6) = var_r7_2 + 0x14; + + arg0->unk0.qUnkA = (var_r6 * 8) + 0x2E; + sub_8052E40(&arg0->unk20[var_r6], (void *)&arg0->unk0); + } + } + } while (++var_r6 < (s32)var_sb); + } + + if (var_sl > 11) { + for (var_r6 = 11; (var_r6 < 15); var_r6++) { + if (arg0->unk20[var_r6] != 0x2B) + break; + } + + arg0->unk0.unk10 = 0; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = var_sl - var_r6; + arg0->unk0.unkC = 80; + arg0->unk0.qUnkA = (var_r6 * 8) + 0x32; + sub_80530CC((const char *)&arg0->unk20[var_r6], &arg0->unk0); + var_sl = 11; + } + + arg0->unk0.unk10 = 4; + arg0->unk0.unk12 = 6; + arg0->unk0.unkE = var_sl; + arg0->unk0.unkC = 80; + arg0->unk0.qUnkA = 0x32; + sub_80530CC((const char *)arg0->unk20, &arg0->unk0); + } + } +} + +void TaskDestructor_8058344(struct Task *t) +{ + StrcStgResults_38 *results = TASK_DATA(t); + + VramFree(results->vram1C.vram0); + VramFree(results->vram1C.vram4); +} diff --git a/sa1/src/game/stage/rings_manager_scratch.txt b/sa1/src/game/stage/rings_manager_scratch.txt new file mode 100644 index 0000000000..c1e3811b5f --- /dev/null +++ b/sa1/src/game/stage/rings_manager_scratch.txt @@ -0,0 +1 @@ +// (72.49%) https://decomp.me/scratch/HdwpA diff --git a/sa1/src/game/stage/rings_scatter.c b/sa1/src/game/stage/rings_scatter.c new file mode 100644 index 0000000000..937964c7ab --- /dev/null +++ b/sa1/src/game/stage/rings_scatter.c @@ -0,0 +1,1116 @@ +#include "global.h" +#include "core.h" +#include "trig.h" +#include "lib/m4a/m4a.h" +#include "rect.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" + +#include "game/stage/rings_scatter.h" +#include "game/sa1_sa2_shared/collect_ring_effect.h" +#include "game/sa1_sa2_shared/rings_manager.h" // for RESERVED_RING_TILES_VRAM + +#include "constants/animations.h" +#include "constants/songs.h" + +// NOTE: It is possible that rings_scatter.c was part of +// player.c originally, due to it being directly above it in both, +// SA1 and SA2, but it is more organized to split them. + +#define USE_HITBOX_RECT 1 + +// TODO: Use improved version of these globaly! +#define HB_ALT_LEFT(p, hb) (I((p)->qWorldX) + (hb)->left) +#define HB_ALT_WIDTH(hb) ((hb)->right - (hb)->left) +#define HB_ALT_RIGHT(p, hb) (I((p)->qWorldX) + HB_ALT_WIDTH(hb)) +#define HB_ALT_TOP(p, hb) (I((p)->qWorldY) + (hb)->top) +#define HB_ALT_HEIGHT(hb) ((hb)->bottom - (hb)->top) +#define HB_ALT_BOTTOM(p, hb) (I((p)->qWorldY) + HB_ALT_HEIGHT(hb)) + +struct Task *gRingsScatterTask = NULL; + +void Task_RingsScatter_Singleplayer(void); +void Task_RingsScatter_MP_Singlepak(void); +void Task_RingsScatter_MP_Multipak(void); +void TaskDestructor_RingsScatter(struct Task *); + +// Called on Stage Initialization +void InitPlayerHitRingsScatter(void) +{ +#ifndef NON_MATCHING + register TaskMain taskFn asm("r0"); +#else + TaskMain taskFn; +#endif + RingsScatter *rs; + Sprite *s; + struct Task **tgtTask; + struct Task *t; + void *dmaDest; + u32 size; + +#if (GAME == GAME_SA1) + if (IS_MULTI_PLAYER) { + tgtTask = &gRingsScatterTask; + taskFn = Task_RingsScatter_MP_Multipak; + } else { + tgtTask = &gRingsScatterTask; + taskFn = Task_RingsScatter_Singleplayer; + } +#elif (GAME == GAME_SA2) + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (IS_SINGLE_PLAYER) { + tgtTask = &gRingsScatterTask; + taskFn = Task_RingsScatter_Singleplayer; + } else { + tgtTask = &gRingsScatterTask; + taskFn = Task_RingsScatter_MP_Multipak; + } + } else { + tgtTask = &gRingsScatterTask; + taskFn = Task_RingsScatter_MP_Singlepak; + } +#endif + + size = sizeof(RingsScatter); + +#ifndef NON_MATCHING + asm("" :); +#endif + + t = TaskCreate(taskFn, size, 0x2001, 0, TaskDestructor_RingsScatter); + + *tgtTask = t; + + rs = TASK_DATA(t); + + s = &rs->sprRing; + s->x = 0; + s->y = 0; + s->graphics.dest = RESERVED_RING_TILES_VRAM; + s->oamFlags = SPRITE_OAM_ORDER(20); + s->graphics.size = 0; +#if (GAME == GAME_SA1) + s->graphics.anim = SA1_ANIM_RING; +#elif (GAME == GAME_SA2) + s->graphics.anim = SA2_ANIM_RING; +#endif + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(2.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2) +#if (GAME == GAME_SA2) + | SPRITE_FLAG_MASK_18 | SPRITE_FLAG_MASK_MOSAIC +#endif + ; + rs->SA2_LABEL(unk2B6) = 0; + +#if (GAME == GAME_SA1) + if (!IS_EXTRA_STAGE(gCurrentLevel)) { + rs->SA2_LABEL(unk2B4) = 0xE0; + rs->SA2_LABEL(unk2B0) = 0x12; + } else { + rs->SA2_LABEL(unk2B4) = 0xE0; + rs->SA2_LABEL(unk2B0) = 7; + } +#else + rs->SA2_LABEL(unk2B4) = 0x94; + rs->SA2_LABEL(unk2B0) = 0x12; +#endif + + dmaDest = rs->rings; + DmaFill16(3, 0, dmaDest, sizeof(rs->rings)); +} + +void InitScatteringRings(s32 x, s32 y, s32 numRings) +{ + RingsScatter *rs = TASK_DATA(gRingsScatterTask); + ScatterRing *ring = &rs->rings[0]; + Player *p = &gPlayer; + s32 i; + s32 ip; + s32 r2, r3; + s32 velX = 0, velY = 0; + + if (numRings == 0) { + return; + } + + // Limit the displayed rings to 32 + if (numRings > MAX_SCATTERING_RINGS_COUNT_SP) { + numRings = MAX_SCATTERING_RINGS_COUNT_SP; + } + + // In Multiplayer, limit displayed rings to 16 + if (IS_MULTI_PLAYER && (numRings > MAX_SCATTERING_RINGS_COUNT_MP)) { + numRings = MAX_SCATTERING_RINGS_COUNT_MP; + } + + m4aSongNumStart(SE_RINGS_LOST); + + r3 = Q(4.53125); // 0x488 + + for (i = 0, ip = 0; i < (signed)ARRAY_COUNT(rs->rings); ring++, i++) { + if (ring->unkC == 0) { +#if (GAME == GAME_SA1) + ring->unkC = 256; +#elif (GAME == GAME_SA2) + ring->unkC = 180; +#endif + ring->unkE = p->layer; + ring->x = Q(x); + ring->y = Q(y); + + if (r3 >= 0) { + s32 r0; + + r2 = I(r3); + + if (r2 > 5) { + r0 = -r2; + r0 += 9; + } else { + r0 = r2; + } + r2 = r0; + +#if (GAME == GAME_SA1) + { + s32 index = (r3 & 0xFF) * 4; + velX = SIN(index); + velX >>= r2; + velY = COS(index); + velY >>= r2; + } +#elif (GAME == GAME_SA2) + velX = SIN((r3 & 0xFF) * 4); + velX >>= r2; + velY = COS((r3 & 0xFF) * 4); + velY >>= r2; +#endif + + velX -= (velX >> 2); + velY -= (velY >> 2); + + r3 += 0x10; + r3 |= 0x80; + } + + r2 = 0; + ring->velX = velX; + ring->velY = velY; + + if (GRAVITY_IS_INVERTED) { + ring->velY = -velY; + } + + r3 = -r3; + velX = -velX; + +#if (GAME == GAME_SA2) + ring->unk10 = r2; + + if (!(PseudoRandom32() & 0x10000)) { + ring->unk10 = 0x4; + } + + ring->unk10 |= (ip & 0x3); + +#endif + ip++; + + if (ip >= numRings) { + return; + } + } + } +} + +#if (GAME == GAME_SA1) +// TODO: Either not in SA2, or in a different place! +// Most of the structure is the same as InitScatteringRings, +// but it uses random values in more places. +// TODO: Seems to be specifically for the Extra Boss ring capsules. +void InitScatteringRings_ExtraBossCapsule(s32 x, s32 y, s32 numRings) +{ + RingsScatter *rs = TASK_DATA(gRingsScatterTask); + ScatterRing *ring = &rs->rings[0]; + Player *p = &gPlayer; + s32 i; + s32 ip; + s32 r2, r3, r7; + s32 velX = 0, velY = 0; + + if (numRings == 0) { + return; + } + + // Limit the displayed rings to 32 + if (numRings > MAX_SCATTERING_RINGS_COUNT_SP) { + numRings = MAX_SCATTERING_RINGS_COUNT_SP; + } + + // In Multiplayer, limit displayed rings to 16 + if (IS_MULTI_PLAYER && (numRings > MAX_SCATTERING_RINGS_COUNT_MP)) { + numRings = MAX_SCATTERING_RINGS_COUNT_MP; + } + + r7 = (((u32)PseudoRandom32() & 0xFF000) >> 12) | 0x10; + + for (i = 0, ip = 0; i < (signed)ARRAY_COUNT(rs->rings); ring++, i++) { + if (ring->unkC == 0) { + ring->unkC = 256; + + ring->unkE = p->layer; + ring->x = Q(x); + ring->y = Q(y); + + r3 = (((u32)PseudoRandom32() & 0x1000) >> 12) + 5; + { + s32 r0; + + { + s32 index = (r7 & 0xFF) * 4; + velX = SIN(index); + velX >>= r3; + velY = COS(index); + velY >>= r3; + } + + velX -= (velX >> 2); + velY -= (velY >> 2); + } + + if (GRAVITY_IS_INVERTED) { + velY = -velY; + } + ring->velX = +velX; + ring->velY = velY; + + { + u32 rand = PseudoRandom32(); + r7 += ((rand & 0x3F000) >> 12) + 16; + } + velX = -velX; + + ip++; + + if (ip >= numRings) { + return; + } + } + } +} + +#endif + +#if (GAME == GAME_SA1) +// (99.52%) https://decomp.me/scratch/mlP3E +NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_FlippedGravity.inc", + void RingsScatterSingleplayer_FlippedGravity(void)) +#else +void RingsScatterSingleplayer_FlippedGravity(void) +#endif +{ + RingsScatter *rs = TASK_DATA(gCurTask); + ScatterRing *ring = &rs->rings[0]; + Sprite *s = &rs->sprRing; + s32 sp08 = rs->SA2_LABEL(unk2B0); + s32 sp0C = rs->SA2_LABEL(unk2B4); + bool32 sp10 = FALSE; + s32 i; + s32 ringIntX, ringIntY; + s32 screenX, screenY; + Player *p; + Hitbox *hb; + + UpdateSpriteAnimation(s); + + for (i = 0; i < (signed)ARRAY_COUNT(rs->rings); ring++, i++) { + if (ring->unkC == 0) { + continue; + } + + ring->x += ring->velX; + ring->y += ring->velY; + + ringIntX = I(ring->x); + ringIntY = I(ring->y); + { +#ifndef NON_MATCHING + register Camera *cam asm("r4") = &gCamera; +#else + Camera *cam = &gCamera; +#endif + screenX = ringIntX - cam->x; +#if (GAME == GAME_SA2) && !(defined(NON_MATCHING)) + screenY = ({ + s32 r0 = cam->y; + register s32 r2 asm("r2") = ringIntY; + asm("" ::"r"(r2)); + r2 -= r0; + asm("" ::"r"(r2)); + r2; + }); +#else + screenY = ringIntY - cam->y; +#endif + } + + p = &gPlayer; + hb = &p->spriteInfoBody->s.hitboxes[0]; + +#if (GAME == GAME_SA1) + if (ring->unkC <= sp0C && (p->charState != 15 || p->timerInvulnerability == 0) && (p->charState != 40) && IS_ALIVE(p)) +#elif (GAME == GAME_SA2) + if (ring->unkC <= sp0C && (p->charState != SA2_CHAR_ANIM_20 || p->timerInvulnerability == 0) && IS_ALIVE(p)) +#endif + { +#if (GAME == GAME_SA1) + Rect8 *rect = &hb->b; +#elif (GAME == GAME_SA2) + Rect8 *rect = (Rect8 *)&hb->left; +#endif + if (RECT_TOUCHING_RING(I(p->qWorldX), I(p->qWorldY), ringIntX, ringIntY, rect)) { + s32 oldRingCount; + // _0801FF70 + + CreateCollectRingEffect(ringIntX, ringIntY); + + INCREMENT_RINGS(1); + // _0801FFC4 + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + ring->unkC = 0; + continue; + } + } + +#if (GAME == GAME_SA1) + // "Cheat Code" Tails + if (gNumSingleplayerCharacters == 2) { + Player *p = &gPartner; + hb = &p->spriteInfoBody->s.hitboxes[0]; + if (ring->unkC <= sp0C && (p->charState != 15 || p->timerInvulnerability == 0) && (p->charState != 40) && IS_ALIVE(p)) { + Rect8 *rect = &hb->b; + if (RECT_TOUCHING_RING(I(p->qWorldX), I(p->qWorldY), ringIntX, ringIntY, rect)) { + s32 oldRingCount; + // _0801FF70 + + CreateCollectRingEffect(ringIntX, ringIntY); + + INCREMENT_RINGS(1); + // _0801FFC4 + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + ring->unkC = 0; + continue; + } + } + } +#endif + + if (ring->velY < 0 && UNK10_CONDITION) { + s32 res = SA2_LABEL(sub_801F100)(ringIntY - (TILE_WIDTH * 2), ringIntX, ring->unkE, -8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y -= Q_24_8(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + if (rs->SA2_LABEL(unk2B6) & 0x1 && ring->velY > 0 && UNK10_CONDITION) { + s32 res = SA2_LABEL(sub_801F100)(ringIntY, ringIntX, ring->unkE, 8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y += Q_24_8(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + ring->velY -= sp08; + + if ((screenX + TILE_WIDTH) > 0 && screenX + TILE_WIDTH < (DISPLAY_WIDTH + (TILE_WIDTH * 2)) && screenY > -TILE_WIDTH + && screenY < (DISPLAY_HEIGHT + TILE_WIDTH)) { + if (ring->unkC >= 32 || (gStageTime & 0x2) == 0) { + if ((!sp10) || (s->oamBaseIndex == 0xFF)) { + s->oamBaseIndex = 0xFF; + s->x = screenX; + s->y = screenY; + DisplaySprite(s); + + sp10 = TRUE; + } else { + OamData *oam = &gOamMallocBuffer[s->oamBaseIndex]; + + OamData *oamAlloced = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end != oamAlloced) { + // NOTE: This will not work out for widescreen resolutions + u32 dimOffX, dimOffY; + DmaCopy16(3, oam, oamAlloced, sizeof(OamDataShort)); + oamAlloced->all.attr0 &= 0xFF00; + + dimOffY = screenY - (u16)s->dimensions->offsetY; + oamAlloced->all.attr0 += dimOffY & 0xFF; + + oamAlloced->all.attr1 &= 0xFE00; + + dimOffX = screenX - (u16)s->dimensions->offsetX; + oamAlloced->all.attr1 += dimOffX & 0x1FF; + } + } + } + } + + { +#if (GAME == GAME_SA2) + u16 sprFlags = ring->unk10; + ring->unk10 &= ~0x3; + ring->unk10 |= (sprFlags + 1) & 0x3; +#endif + ring->unkC--; + } + } +} +#if (GAME == GAME_SA1) +END_NONMATCH +#endif + +#if (GAME == GAME_SA1) +// (98.01%) https://decomp.me/scratch/iOeRj +NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterSingleplayer_NormalGravity.inc", + void RingsScatterSingleplayer_NormalGravity(void)) +#elif (GAME == GAME_SA2) +void RingsScatterSingleplayer_NormalGravity(void) +#endif +{ + RingsScatter *rs = TASK_DATA(gCurTask); + ScatterRing *ring = &rs->rings[0]; + Sprite *s = &rs->sprRing; + s32 sp08 = rs->SA2_LABEL(unk2B0); + s32 sp0C = rs->SA2_LABEL(unk2B4); + bool32 sp10 = FALSE; + s32 i; // sp14 + s32 ringIntX, ringIntY; + s32 screenX, screenY; + s32 bossWorldX; // Used in SA1 in the Extra Boss stage (apparently; non-matching right now) + + Player *p; + Hitbox *hb; + + UpdateSpriteAnimation(s); + + for (i = ARRAY_COUNT(rs->rings) - 1; i >= 0; ring++, i--) { + if (ring->unkC == 0) { + continue; + } + +#if (GAME == GAME_SA1) + ring->x += ring->velX; + ring->y += ring->velY; +#elif (GAME == GAME_SA2) + ring->x += ring->velX + gUnknown_030054FC; + ring->y += ring->velY + gUnknown_030054E0; +#endif + +#if (GAME == GAME_SA1) + bossWorldX = I(ring->x); + ringIntX = bossWorldX; + ringIntY = I(ring->y); + + if (IS_EXTRA_STAGE(gCurrentLevel)) { + s32 v = (ringIntX + gStageTime * 8) - 72; + if (v >= 2688) { + bossWorldX = Mod(v, 2688) + 72; + } + } +#elif (GAME == GAME_SA2) + ringIntX = I(ring->x); + bossWorldX = ringIntX; + ringIntY = I(ring->y); +#endif + + screenX = ringIntX - gCamera.x; + screenY = ringIntY - gCamera.y; + + p = &gPlayer; + hb = &p->spriteInfoBody->s.hitboxes[0]; + +#if (GAME == GAME_SA1) + if ((ring->unkC <= sp0C) && ((p->charState != 15) || (p->timerInvulnerability == 0)) && (p->charState != 40) && IS_ALIVE(p)) +#elif (GAME == GAME_SA2) + if ((ring->unkC <= sp0C) && ((p->charState != SA2_CHAR_ANIM_20) || (p->timerInvulnerability == 0)) && IS_ALIVE(p)) +#endif + { +#if (GAME == GAME_SA1) + Rect8 *rect = &hb->b; +#else + Rect8 *rect = (Rect8 *)&hb->left; +#endif + if (RECT_TOUCHING_RING(I(p->qWorldX), I(p->qWorldY), ringIntX, ringIntY, rect)) { +#if (GAME == GAME_SA1) + CreateCollectRingEffect(ringIntX, ringIntY); +#elif (GAME == GAME_SA2) + CreateCollectRingEffect(bossWorldX, ringIntY); +#endif + + INCREMENT_RINGS(1); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + ring->unkC = 0; + + continue; + } + } + +#if (GAME == GAME_SA1) + if (gNumSingleplayerCharacters == 2) { + p = &gPartner; + hb = &p->spriteInfoBody->s.hitboxes[0]; + + if ((ring->unkC <= sp0C) && ((p->charState != 15) || (p->timerInvulnerability == 0)) && (p->charState != 40) && IS_ALIVE(p)) { + Rect8 *rect = &hb->b; + + if (RECT_TOUCHING_RING(I(p->qWorldX), I(p->qWorldY), ringIntX, ringIntY, rect)) { + CreateCollectRingEffect(ringIntX, ringIntY); + + INCREMENT_RINGS(1); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + ring->unkC = 0; + + continue; + } + } + } +#endif + + if (ring->velY > 0 && UNK10_CONDITION) { +#if (GAME == GAME_SA1) + s32 res = SA2_LABEL(sub_801F100)(ringIntY, bossWorldX, ring->unkE, +8, SA2_LABEL(sub_801EC3C)); +#elif (GAME == GAME_SA2) + s32 res = SA2_LABEL(sub_801F100)(ringIntY, ringIntX, ring->unkE, +8, SA2_LABEL(sub_801EC3C)); +#endif + if (res <= 0) { + ring->y += Q_24_8(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + if (rs->SA2_LABEL(unk2B6) & 0x1 && ring->velY < 0 && UNK10_CONDITION) { +#if (GAME == GAME_SA1) + s32 res = SA2_LABEL(sub_801F100)((ringIntY - 16), bossWorldX, ring->unkE, -8, SA2_LABEL(sub_801EC3C)); +#elif (GAME == GAME_SA2) + s32 res = SA2_LABEL(sub_801F100)((ringIntY - 16), ringIntX, ring->unkE, -8, SA2_LABEL(sub_801EC3C)); +#endif + if (res <= 0) { + ring->y -= Q_24_8(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + ring->velY += sp08; + + if ((screenX + TILE_WIDTH) > 0 && screenX + TILE_WIDTH < (DISPLAY_WIDTH + (TILE_WIDTH * 2)) && (screenY > -TILE_WIDTH) + && (screenY < (DISPLAY_HEIGHT + TILE_WIDTH))) { + if (ring->unkC >= 32 || ((gStageTime & 0x2) == 0)) { + if ((!sp10) || (s->oamBaseIndex == 0xFF)) { + s->oamBaseIndex = 0xFF; + s->x = screenX; + s->y = screenY; + DisplaySprite(s); + + sp10 = TRUE; + } else { + OamData *oam = &gOamMallocBuffer[s->oamBaseIndex]; + + OamData *oamAlloced = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end != oamAlloced) { + // NOTE: This will not work out for widescreen resolutions + u32 dimOffX, dimOffY; + DmaCopy16(3, oam, oamAlloced, sizeof(OamDataShort)); + oamAlloced->all.attr0 &= 0xFF00; + + dimOffY = screenY - (u16)s->dimensions->offsetY; + oamAlloced->all.attr0 += dimOffY & 0xFF; + + oamAlloced->all.attr1 &= 0xFE00; + + dimOffX = screenX - (u16)s->dimensions->offsetX; + oamAlloced->all.attr1 += dimOffX & 0x1FF; + } + } + } + } + + { +#if (GAME == GAME_SA2) + u16 sprFlags = ring->unk10; + ring->unk10 &= ~0x3; + ring->unk10 |= (sprFlags + 1) & 0x3; +#endif + ring->unkC--; + } + } +} +END_NONMATCH + +// NOTE: VERY WRONG!!! +// A ton of code is missing here. +// (Basically a copy-paste of RingsScatterSingleplayer_FlippedGravity) +// (Not aligned with SA2!) +// (56.55%) https://decomp.me/scratch/9xEQf +NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_FlippedGravity.inc", + void RingsScatterMultipak_FlippedGravity(void)) +{ + RingsScatter *rs = TASK_DATA(gCurTask); + ScatterRing *ring = &rs->rings[0]; + Sprite *s = &rs->sprRing; + s32 sp08 = rs->SA2_LABEL(unk2B0); + s32 sp0C = rs->SA2_LABEL(unk2B4); + bool32 sp10 = FALSE; + s32 i = 0; // sp14 + s32 ringIntX; + s32 ringIntY; + s32 screenX; // sp18; + s32 screenY; // sl + Player *p; +#if USE_HITBOX_RECT + Rect8 *hb; +#else + Hitbox *hb; +#endif + + UpdateSpriteAnimation(s); + + for (i = 0; i < (signed)ARRAY_COUNT(rs->rings); ring++, i++) { + if (ring->unkC == 0) { + continue; + } + + ring->x += ring->velX; + ring->y += ring->velY; + + ringIntX = I(ring->x); + ringIntY = I(ring->y); + screenX = ringIntX - gCamera.x; + screenY = ringIntY - gCamera.y; + + p = &gPlayer; + +#if USE_HITBOX_RECT + hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].b.left; +#else + hb = &p->spriteInfoBody->s.hitboxes[0]; +#endif + if ((ring->unkC <= sp0C) && ((p->charState != 15) || (p->timerInvulnerability == 0)) && (IS_ALIVE(p)) + && ((((ringIntX - TILE_WIDTH) > HB_ALT_LEFT(p, hb)) && (HB_ALT_RIGHT(p, hb) > (ringIntX - TILE_WIDTH))) + || ((ringIntX + TILE_WIDTH) >= HB_ALT_LEFT(p, hb)) + || (((ringIntX - TILE_WIDTH) >= HB_ALT_LEFT(p, hb)) && (HB_ALT_RIGHT(p, hb) >= (ringIntX - TILE_WIDTH)))) + && ((((ringIntY - 16) > HB_ALT_TOP(p, hb)) || (ringIntY < HB_ALT_TOP(p, hb))) && ((ringIntY - 16) >= HB_ALT_TOP(p, hb))) + && (HB_ALT_BOTTOM(p, hb) >= (ringIntY - 16))) { + s32 oldRingCount; + + CreateCollectRingEffect(ringIntX, ringIntY); + + INCREMENT_RINGS(1); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + ring->unkC = 0; + ring++; + } else { + if ((ring->velY < 0) && UNK10_CONDITION) { + s32 res = SA2_LABEL(sub_801F100)((ringIntY - 16), ringIntX, ring->unkE, -8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y -= Q(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + if ((rs->SA2_LABEL(unk2B6) & 0x1) && (ring->velY > 0) && UNK10_CONDITION) { + s32 res = SA2_LABEL(sub_801F100)(ringIntY, ringIntX, ring->unkE, 8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y += Q(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + ring->velY -= sp08; + + if ((((unsigned)screenX + TILE_WIDTH - 1) < 255) && (screenY > -8) && (screenY < (DISPLAY_HEIGHT + 8))) { + if ((ring->unkC >= 32) || ((gStageTime & 0x2) == 0)) { + if ((!sp10) || (s->oamBaseIndex == 0xFF)) { + s->oamBaseIndex = 0xFF; + s->x = screenX; + s->y = screenY; + DisplaySprite(s); + + sp10 = TRUE; + } else { + OamData *oam = &gOamMallocBuffer[s->oamBaseIndex]; + + OamData *oamAlloced = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end != oamAlloced) { + // NOTE: This will not work out for widescreen resolutions + u32 dimOffX, dimOffY; + DmaCopy16(3, oam, oamAlloced, sizeof(OamDataShort)); + oamAlloced->all.attr0 &= 0xFF00; + + dimOffY = screenY - (u16)s->dimensions->offsetY; + oamAlloced->all.attr0 += dimOffY & 0xFF; + + oamAlloced->all.attr1 &= 0xFE00; + + dimOffX = screenX - (u16)s->dimensions->offsetX; + oamAlloced->all.attr1 += dimOffX & 0x1FF; + } + } + } + } + { +#if (GAME == GAME_SA2) + u16 sprFlags = ring->unk10; + ring->unk10 &= ~0x3; + ring->unk10 |= (sprFlags + 1) & 0x3; +#endif + ring->unkC--; + } + } + } +} +END_NONMATCH + +// NOTE: VERY WRONG!!! +// A ton of code is missing here. +// (Basically a copy-paste of RingsScatterSingleplayer_NormalGravity) +// (Not aligned with SA2!) +// (52.71%) https://decomp.me/scratch/6Nvv9 +NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_NormalGravity.inc", void RingsScatterMultipak_NormalGravity(void)) +{ + RingsScatter *rs = TASK_DATA(gCurTask); + ScatterRing *ring = &rs->rings[0]; + Sprite *s = &rs->sprRing; + s32 sp08 = rs->SA2_LABEL(unk2B0); + s32 sp0C = rs->SA2_LABEL(unk2B4); + bool32 sp10 = FALSE; + s32 i = 0; // sp14 + s32 ringIntX; + s32 ringIntY; + s32 screenX; // sp18; + s32 screenY; // sl + Player *p; +#if USE_HITBOX_RECT + Rect8 *hb; +#else + Hitbox *hb; +#endif + + UpdateSpriteAnimation(s); + + for (i = 0; i < (signed)ARRAY_COUNT(rs->rings); ring++, i++) { + if (ring->unkC == 0) { + continue; + } + +#if (GAME == GAME_SA1) + ring->x += ring->velX; + ring->y += ring->velY; +#elif (GAME == GAME_SA2) + ring->x += ring->velX + gUnknown_030054FC; + ring->y += ring->velY + 0x380; +#endif + + ringIntX = I(ring->x); + ringIntY = I(ring->y); + screenX = ringIntX - gCamera.x; + screenY = ringIntY - gCamera.y; + + p = &gPlayer; + +#if USE_HITBOX_RECT + hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].b; +#else + hb = &p->spriteInfoBody->s.hitboxes[0]; +#endif + if ((ring->unkC <= sp0C) && ((p->charState != 15) || (p->timerInvulnerability == 0)) && (IS_ALIVE(p)) + && ((((ringIntX - TILE_WIDTH) > HB_ALT_LEFT(p, hb)) && (HB_ALT_RIGHT(p, hb) > (ringIntX - TILE_WIDTH))) + || ((ringIntX + TILE_WIDTH) >= HB_ALT_LEFT(p, hb)) + || (((ringIntX - TILE_WIDTH) >= HB_ALT_LEFT(p, hb)) && (HB_ALT_RIGHT(p, hb) >= (ringIntX - TILE_WIDTH)))) + && ((((ringIntY - 16) > HB_ALT_TOP(p, hb)) || (ringIntY >= HB_ALT_TOP(p, hb))) && ((ringIntY - 16) >= HB_ALT_TOP(p, hb))) + && (HB_ALT_BOTTOM(p, hb) >= (ringIntY - 16))) { + s32 oldRingCount; + + CreateCollectRingEffect(ringIntX, ringIntY); + + INCREMENT_RINGS(1); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + ring->unkC = 0; + } else { + + if ((ring->velY < 0) && UNK10_CONDITION) { + s32 res = SA2_LABEL(sub_801F100)(ringIntY, ringIntX, ring->unkE, +8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y -= Q(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + if ((rs->SA2_LABEL(unk2B6) & 0x1) && (ring->velY > 0) && UNK10_CONDITION) { + s32 res = SA2_LABEL(sub_801F100)((ringIntY - 16), ringIntX, ring->unkE, -8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y += Q(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + ring->velY -= sp08; + + if ((((unsigned)screenX + TILE_WIDTH - 1) < 255) && (screenY > -8) && (screenY < (DISPLAY_HEIGHT + 8))) { + if ((ring->unkC >= 32) || ((gStageTime & 0x2) == 0)) { + if ((!sp10) || (s->oamBaseIndex == 0xFF)) { + s->oamBaseIndex = 0xFF; + s->x = screenX; + s->y = screenY; + DisplaySprite(s); + + sp10 = TRUE; + } else { + OamData *oam = &gOamMallocBuffer[s->oamBaseIndex]; + + OamData *oamAlloced = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end != oamAlloced) { + // NOTE: This will not work out for widescreen resolutions + u32 dimOffX, dimOffY; + DmaCopy16(3, oam, oamAlloced, sizeof(OamDataShort)); + oamAlloced->all.attr0 &= 0xFF00; + + dimOffY = screenY - (u16)s->dimensions->offsetY; + oamAlloced->all.attr0 += dimOffY & 0xFF; + + oamAlloced->all.attr1 &= 0xFE00; + + dimOffX = screenX - (u16)s->dimensions->offsetX; + oamAlloced->all.attr1 += dimOffX & 0x1FF; + } + } + } + } + + { +#if (GAME == GAME_SA2) + u16 sprFlags = ring->unk10; + ring->unk10 &= ~0x3; + ring->unk10 |= (sprFlags + 1) & 0x3; +#endif + ring->unkC--; + } + } + } +} + +END_NONMATCH + +#if (GAME == GAME_SA2) +// NOTE: VERY WRONG!!! +// A ton of code is missing here. +// (Basically a copy-paste of RingsScatterSingleplayer_NormalGravity) +// (54.61%) https://decomp.me/scratch/v9rXO +NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterSinglepakMain.inc", void RingsScatterSinglepakMain(void)) +{ + RingsScatter *rs = TASK_DATA(gCurTask); + ScatterRing *ring = &rs->rings[0]; + Sprite *s = &rs->sprRing; + s32 sp08 = rs->SA2_LABEL(unk2B0); + s32 sp0C = rs->SA2_LABEL(unk2B4); + bool32 sp10 = FALSE; + s32 i = 0; // sp14 + s32 ringIntX; + s32 ringIntY; + s32 screenX; // sp18; + s32 screenY; // sl + Player *p; +#if USE_HITBOX_RECT + Rect8 *hb; +#else + Hitbox *hb; +#endif + + UpdateSpriteAnimation(s); + + for (i = 0; i < (signed)ARRAY_COUNT(rs->rings); ring++, i++) { + if (ring->unkC == 0) { + continue; + } + +#if (GAME == GAME_SA1) + ring->x += ring->velX; + ring->y += ring->velY; +#elif (GAME == GAME_SA2) + ring->x += ring->velX + gUnknown_030054FC; + ring->y += ring->velY + 0x380; +#endif + + ringIntX = I(ring->x); + ringIntY = I(ring->y); + screenX = ringIntX - gCamera.x; + screenY = ringIntY - gCamera.y; + + p = &gPlayer; + +#if USE_HITBOX_RECT + hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].left; +#else + hb = &p->spriteInfoBody->s.hitboxes[0]; +#endif + if ((ring->unkC <= sp0C) && ((p->charState != SA2_CHAR_ANIM_20) || (p->timerInvulnerability == 0)) && (IS_ALIVE(p)) + && ((((ringIntX - TILE_WIDTH) > HB_ALT_LEFT(p, hb)) && (HB_ALT_RIGHT(p, hb) > (ringIntX - TILE_WIDTH))) + || ((ringIntX + TILE_WIDTH) >= HB_ALT_LEFT(p, hb)) + || (((ringIntX - TILE_WIDTH) >= HB_ALT_LEFT(p, hb)) && (HB_ALT_RIGHT(p, hb) >= (ringIntX - TILE_WIDTH)))) + && ((((ringIntY - 16) > HB_ALT_TOP(p, hb)) || (ringIntY >= HB_ALT_TOP(p, hb))) && ((ringIntY - 16) >= HB_ALT_TOP(p, hb))) + && (HB_ALT_BOTTOM(p, hb) >= (ringIntY - 16))) { + s32 oldRingCount; + + CreateCollectRingEffect(ringIntX, ringIntY); + + INCREMENT_RINGS(1); + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + if (gRingCount > 255) { + gRingCount = 255; + } + } + + ring->unkC = 0; + } else { + + if ((ring->velY < 0) && ((ring->unk10 & 0x7) == 0)) { + s32 res = SA2_LABEL(sub_801F100)(ringIntY, ringIntX, ring->unkE, +8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y -= Q(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + if ((rs->SA2_LABEL(unk2B6) & 0x1) && (ring->velY > 0) && ((ring->unk10 & 0x7) == 0)) { + s32 res = SA2_LABEL(sub_801F100)((ringIntY - 16), ringIntX, ring->unkE, -8, SA2_LABEL(sub_801EC3C)); + if (res <= 0) { + ring->y += Q(res); + ring->velY = (ring->velY >> 2) - ring->velY; + } + } + + ring->velY -= sp08; + + if ((((unsigned)screenX + TILE_WIDTH - 1) < 255) && (screenY > -8) && (screenY < (DISPLAY_HEIGHT + 8))) { + if ((ring->unkC >= 32) || ((gStageTime & 0x2) == 0)) { + if ((!sp10) || (s->oamBaseIndex == 0xFF)) { + s->oamBaseIndex = 0xFF; + s->x = screenX; + s->y = screenY; + DisplaySprite(s); + + sp10 = TRUE; + } else { + OamData *oam = &gOamMallocBuffer[s->oamBaseIndex]; + + OamData *oamAlloced = OamMalloc(GET_SPRITE_OAM_ORDER(s)); + + if (iwram_end != oamAlloced) { + // NOTE: This will not work out for widescreen resolutions + u32 dimOffX, dimOffY; + DmaCopy16(3, oam, oamAlloced, sizeof(OamDataShort)); + oamAlloced->all.attr0 &= 0xFF00; + + dimOffY = screenY - (u16)s->dimensions->offsetY; + oamAlloced->all.attr0 += dimOffY & 0xFF; + + oamAlloced->all.attr1 &= 0xFE00; + + dimOffX = screenX - (u16)s->dimensions->offsetX; + oamAlloced->all.attr1 += dimOffX & 0x1FF; + } + } + } + } + + { + u16 sprFlags = ring->unk10; + ring->unk10 &= ~0x3; + ring->unk10 |= (sprFlags + 1) & 0x3; + ring->unkC--; + } + } + } +} +END_NONMATCH +#endif + +void DestroyRingsScatterTask(void) +{ + TaskDestroy(gRingsScatterTask); + gRingsScatterTask = NULL; +} + +void Task_RingsScatter_Singleplayer(void) +{ + if (GRAVITY_IS_INVERTED) { + RingsScatterSingleplayer_FlippedGravity(); + } else { + RingsScatterSingleplayer_NormalGravity(); + } +} + +void Task_RingsScatter_MP_Multipak(void) +{ + if (GRAVITY_IS_INVERTED) { + RingsScatterMultipak_FlippedGravity(); + } else { + RingsScatterMultipak_NormalGravity(); + } +} + +#if (GAME == GAME_SA2) +void Task_RingsScatter_MP_Singlepak(void) { RingsScatterSinglepakMain(); } +#endif + +void TaskDestructor_RingsScatter(struct Task UNUSED *t) { gRingsScatterTask = NULL; } diff --git a/sa1/src/game/stage/screen_shake.c b/sa1/src/game/stage/screen_shake.c new file mode 100644 index 0000000000..c6d407040c --- /dev/null +++ b/sa1/src/game/stage/screen_shake.c @@ -0,0 +1,101 @@ +#include "global.h" +#include "core.h" +#include "trig.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/stage/screen_shake.h" + +typedef struct { + /* 0x00 */ s32 p0; + /* 0x04 */ s32 p1; + /* 0x08 */ s32 p2; + /* 0x0C */ s32 p3; + /* 0x10 */ u32 flags; + /* 0x14 */ s32 unk14; +} ScreenShake; /* size: 0x18 */ + +void Task_ScreenShake(void); +static void TaskDestructor_ScreenShake(struct Task *); + +void Task_ScreenShake(void) +{ + ScreenShake *shake = TASK_DATA(gCurTask); + + s32 factor; + s32 r2; + + if (shake->p3 == 0 || shake->p0 <= 0) { + TaskDestroy(gCurTask); + return; + } else { + struct Camera *cam = &gCamera; + + if (shake->flags & SCREENSHAKE_RANDOM_VALUE) { + factor = ((u32)(PseudoRandom32() << 15) >> 23) - 0xFF; + } else { + factor = SIN_24_8(shake->unk14); + } + + r2 = (shake->p0 * factor) >> 16; + + switch (shake->flags & SCREENSHAKE_FACTOR_MASK) { + case SCREENSHAKE_FACTOR_POSITIVE: { + r2 = +ABS(r2); + } break; + + case SCREENSHAKE_FACTOR_NEGATIVE: { + r2 = -ABS(r2); + } break; + } + + if (!(shake->flags & 0x20) || ((gStageTime % 2u) == 0)) { + if (shake->flags & SCREENSHAKE_HORIZONTAL) { + cam->shakeOffsetX = r2; + } + if (shake->flags & SCREENSHAKE_VERTICAL) { + cam->shakeOffsetY = r2; + } + } + + if (shake->p3 > 0) + shake->p3--; + + if (shake->p0 > 0) + shake->p0 -= shake->p1; + + shake->unk14 = (shake->unk14 + shake->p2) & ONE_CYCLE; + } +} + +struct Task *CreateScreenShake(u32 p0, u32 p1, u32 p2, u32 p3, u32 flags) +{ + struct Task *t = TaskCreate(Task_ScreenShake, sizeof(ScreenShake), 0xEFF, 0, TaskDestructor_ScreenShake); + + ScreenShake *shake = TASK_DATA(t); + shake->p0 = p0; + shake->p1 = p1; + shake->p2 = p2; + shake->unk14 = 0; + shake->p3 = p3; + shake->flags = flags; + + return t; +} + +static void TaskDestructor_ScreenShake(struct Task *t) +{ + ScreenShake *shake = TASK_DATA(t); + + struct Camera *cam = &gCamera; + + if (shake->flags & SCREENSHAKE_HORIZONTAL) { + cam->shakeOffsetX = 0; + } + + if (shake->flags & SCREENSHAKE_VERTICAL) { + cam->shakeOffsetY = 0; + } +} \ No newline at end of file diff --git a/sa1/src/game/stage/stage.c b/sa1/src/game/stage/stage.c new file mode 100644 index 0000000000..b6613d3c1c --- /dev/null +++ b/sa1/src/game/stage/stage.c @@ -0,0 +1,940 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "lib/m4a/m4a.h" +#include "game/game_over.h" +#include "game/multiplayer/chao.h" +#include "game/multiplayer/finish.h" +#include "game/multiplayer/indicators.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/multiplayer_event_mgr.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/sa1_sa2_shared/entities_manager.h" +#include "game/sa1_sa2_shared/music_manager.h" +#include "game/sa1_sa2_shared/palette_loader.h" +#include "game/sa1_sa2_shared/pause_menu.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/sa1_sa2_shared/rings_manager.h" +#include "game/sa1_sa2_shared/spot_light_beam_task.h" +#include "game/parameters/stage.h" +#include "game/save.h" +#include "game/stage/camera.h" +#include "game/stage/player.h" +#include "game/stage/screen_shake.h" +#include "game/stage/stage.h" +#include "game/time_attack/lobby.h" +#if (GAME == GAME_SA1) +#include "game/time_over.h" +#endif + +#include "constants/characters.h" +#include "constants/songs.h" +#include "constants/zones.h" + +typedef struct Struct_sub_80550F8 { + u8 filler0[0x27]; + bool8 screenBlank; +} Struct_sub_80550F8; /* size: 0x28 */ + +struct Task *gGameStageTask = NULL; + +void Task_GameStage(void); +void TaskDestructor_GameStage(struct Task *t); +void StageInit_MPCollectRings(void); + +// TODO: Declare in headers! +extern struct Task *sub_80550F8(void); +extern bool32 CreateSpotlightsManager(void); // Spotlight-beam related +extern void CreateChaoHuntHUD(); +extern void CreateStageWaterTask(s32 waterLevel, u32 p1, u32 mask); +extern struct Task *CreateMultiplayerChao(u8, u8); +extern void SetFaceButtonConfig(bool32); + +void SA2_LABEL(sub_801F044)(void); +#if (GAME == GAME_SA1) +void SA2_LABEL(sub_80213C0)(u32 UNUSED characterId, u32 UNUSED levelId, Player *player); + +void StageInit_Zone1Act1(void); +void StageInit_Zone1Act2(void); +void StageInit_Zone2Act1(void); +void StageInit_Zone2Act2(void); +void StageInit_Zone3Act1(void); +void StageInit_Zone3Act2(void); +void StageInit_Zone4Act1(void); +void StageInit_Zone4Act2(void); +void StageInit_Zone5Act1(void); +void StageInit_Zone5Act2(void); +void StageInit_Zone6Act1(void); +void StageInit_Zone6Act2(void); +void StageInit_Zone7Act1(void); +void StageInit_Zone7Act2(void); +void StageInit_ForestChaoGarden(void); +void StageInit_FactoryChaoGarden(void); +void StageInit_PinballChaoGarden(void); +void StageInit_SpaceChaoGarden(void); + +const VoidFn sStageInitProcs[NUM_LEVEL_IDS] = { + StageInit_Zone1Act1, StageInit_Zone1Act2, // + StageInit_Zone2Act1, StageInit_Zone2Act2, // + StageInit_Zone3Act1, StageInit_Zone3Act2, // + StageInit_Zone4Act1, StageInit_Zone4Act2, // + StageInit_Zone5Act1, StageInit_Zone5Act2, // + StageInit_Zone6Act1, StageInit_Zone6Act2, // + StageInit_Zone7Act1, StageInit_Zone7Act2, // + StageInit_ForestChaoGarden, StageInit_FactoryChaoGarden, // + StageInit_PinballChaoGarden, StageInit_SpaceChaoGarden, +}; +#elif (GAME == GAME_SA2) +void sub_80213C0(u32 UNUSED characterId, u32 UNUSED levelId, Player *player); +#endif + +void GameStageStart(void) +{ + gTrappedAnimalVariant = 0; + gBossIndex = 0; + gRingCount = 0; + gNumSingleplayerCharacters = 1; + +#if (GAME == GAME_SA1) + if (IS_MULTI_PLAYER) { + CallSetStageSpawnPos(gSelectedCharacter, gCurrentLevel, 0, &gPlayer); + } else if (IS_EXTRA_STAGE(gCurrentLevel)) { + CallSetStageSpawnPos(gSelectedCharacter, gCurrentLevel, 0, &gPlayer); + } else { + CallSetStageSpawnPos(gSelectedCharacter, gCurrentLevel, 0, &gPlayer); + + if (gTailsEnabled && (gSelectedCharacter == CHARACTER_SONIC)) { + gNumSingleplayerCharacters = 2; + CallSetStageSpawnPos(CHARACTER_TAILS, gCurrentLevel, 1, &gPartner); + } + } +#elif (GAME == GAME_SA2) + if (!IS_EXTRA_STAGE(gCurrentLevel)) { + CallSetStageSpawnPos(gSelectedCharacter, gCurrentLevel, 0, &gPlayer); + gCheese = NULL; + } +#endif + + gStageTime = 0; + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + + if (IS_MULTI_PLAYER) { + gMPStageStartFrameCount = gFrameCount; + } + + gCheckpointTime = TIME(0, 0); + +#if (GAME == GAME_SA1) + if ((gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) || (gGameMode == GAME_MODE_CHAO_HUNT)) { + gCourseTime = TIME(3, 0); + } else if (gGameMode == GAME_MODE_TEAM_PLAY) { + gCourseTime = TIME(5, 0); + } else { + gCourseTime = TIME(0, 0); + } +#elif (GAME == GAME_SA2) + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gCourseTime = TIME(0, 0); + } else { + gCourseTime = TIME(3, 0); + } +#endif + + CreateGameStage(); +} + +void CreateGameStage(void) +{ + u8 i; + u32 j; +#if (GAME == GAME_SA1) + struct Task *someTask; +#ifdef BUG_FIX + someTask = NULL; +#endif +#endif + gGameStageTask = TaskCreate(Task_GameStage, 0, 0xff00, 0, TaskDestructor_GameStage); + gActiveCollectRingEffectCount = 0; +#if (GAME == GAME_SA2) + gSpecialRingCount = 0; + gUnknown_030054B0 = 0; +#endif + + gStageFlags |= (STAGE_FLAG__DISABLE_PAUSE_MENU | STAGE_FLAG__ACT_START); + gStageFlags &= ~STAGE_FLAG__GRAVITY_INVERTED; + +#if (GAME == GAME_SA2) + gBossRingsShallRespawn = FALSE; + gBossRingsRespawnCount = BOSS_RINGS_DEFAULT_RESPAWN_COUNT; + gUnknown_030055BC = 0; +#endif + + SA2_LABEL(sub_801F044)(); + +#if (GAME == GAME_SA1) + CreateStageMusicManager(); + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + someTask = sub_80550F8(); + } + + SA2_LABEL(gUnknown_030053E0) = 0; + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + CreateChaoHuntHUD(); + } + + if (IS_MULTI_PLAYER) { + SA2_LABEL(sub_80213C0)(gSelectedCharacter, gCurrentLevel, &gPlayer); + } else if (IS_EXTRA_STAGE(gCurrentLevel)) { + SA2_LABEL(sub_80213C0)(gSelectedCharacter, gCurrentLevel, &gPlayer); + } else { + SA2_LABEL(sub_80213C0)(gSelectedCharacter, gCurrentLevel, &gPlayer); + + if (gNumSingleplayerCharacters == 2) { + SA2_LABEL(sub_80213C0)(PARTNER_CHARACTER, gCurrentLevel, &gPartner); + } + } + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + InitCamera(gCurrentLevel); + } else { + InitCamera(LEVEL_INDEX(ZONE_1, ACT_1)); + } + + gStageFlags &= ~STAGE_FLAG__2; + gStageFlags &= ~STAGE_FLAG__TIMER_REVERSED; + + if ((gGameMode != GAME_MODE_SINGLE_PLAYER) && (gGameMode != GAME_MODE_TIME_ATTACK) && (gGameMode != GAME_MODE_RACE) + && (gGameMode != GAME_MODE_MULTI_PLAYER)) { + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + } + + CreateStageRingsManager(); + CreateStageEntitiesManager(); + + if (LEVEL_TO_ZONE(gCurrentLevel) != ZONE_4) { + CreateStageWaterTask(-1, 0, 0); + } + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + sStageInitProcs[gCurrentLevel](); + + if (gCurrentLevel == LEVEL_INDEX(ZONE_2, ACT_1)) { + if (CreateSpotlightsManager()) { +#ifdef BUG_FIX + if (someTask != NULL) +#endif + { + Struct_sub_80550F8 *strc = TASK_DATA(someTask); + strc->screenBlank = 1; + } + } + } + } else { + StageInit_MPCollectRings(); + } +#elif (GAME == GAME_SA2) + SA2_LABEL(gUnknown_030053E0) = 0; + + if (!IS_EXTRA_STAGE(gCurrentLevel)) { + sub_80213C0(gSelectedCharacter, gCurrentLevel, &gPlayer); + } + + if (IS_BOSS_STAGE(gCurrentLevel)) { + gBossCameraClampYLower = gBossCameraYClamps[LEVEL_TO_ZONE(gCurrentLevel)][0]; + gBossCameraClampYUpper = gBossCameraYClamps[LEVEL_TO_ZONE(gCurrentLevel)][1]; + + if (gCurrentLevel == LEVEL_INDEX(ZONE_FINAL, ACT_XX_FINAL_ZONE)) { + CreateBossRunManager(gBossIndex); + } + + if (gCurrentLevel == LEVEL_INDEX(ZONE_FINAL, ACT_TRUE_AREA_53)) { + SuperSonicInit(); + gBossCameraClampYLower = gBossCameraYClamps[ZONE_FINAL + 1][0]; + gBossCameraClampYUpper = gBossCameraYClamps[ZONE_FINAL + 1][1]; + } + } + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + CreateStageMusicManager(); + SetupStageIntro(); + InitCamera(gCurrentLevel); + sStageInitProcs[gCurrentLevel](); + } else { + InitCamera(0); + StageInit_CollectRings(); + CreateCollectRingsTimeDisplay(); + gPlayer.moveState &= ~(MOVESTATE_IA_OVERRIDE | MOVESTATE_IGNORE_INPUT); + gStageFlags &= ~STAGE_FLAG__ACT_START; + } + + if (gCurrentLevel != LEVEL_INDEX(ZONE_1, ACT_1)) { + CreateStageWaterTask(-1, 0, 0); + } + + gStageFlags &= ~STAGE_FLAG__2; + gStageFlags &= ~STAGE_FLAG__TIMER_REVERSED; + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + } + + CreateStageRingsManager(); + CreateStageEntitiesManager(); +#endif + + SA2_LABEL(gUnknown_03001944) = 0; + SA2_LABEL(gUnknown_030017F0) = 0x100; + SA2_LABEL(gUnknown_03005394) = 0x100; + SA2_LABEL(gUnknown_03002A8C) = 0x78; + SA2_LABEL(gUnknown_03004D58) = 0x50; + SA2_LABEL(gUnknown_0300194C) = 0x78; + SA2_LABEL(gUnknown_03002820) = 0x50; + SA2_LABEL(gUnknown_03005398) = 0x80; + + if (IS_MULTI_PLAYER) { + CreateMultiplayerReceiveEventMgr(); + CreateMultiplayerSendEventMgr(); + + gRandomItemBox = 0; + + for (i = 0; i < MULTI_SIO_PLAYERS_MAX; i++) { + gMultiplayerCharRings[i] = 0; + + if (GetBit(gMultiplayerConnections, i)) { + CreateMultiplayerPlayer(i); + if (i != SIO_MULTI_CNT->id) { + CreateOpponentPositionIndicator(i); + } +#if (GAME == GAME_SA2) + else { + CreateSelfPositionIndicator(); + } +#endif + } + + gMultiplayerRanks[i] = -1; + + if (gGameMode == GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gMultiplayerCharacters[i] = i; + } + } + +#if (GAME == GAME_SA1) + if (gGameMode == GAME_MODE_CHAO_HUNT || gGameMode == GAME_MODE_TEAM_PLAY) { + for (j = 0; j < NUM_MP_CHAO; j++) { + gChaoTasks[j] = CreateMultiplayerChao((u8)(uintptr_t)gChaoTasks[j], j); + + if (gGameMode == GAME_MODE_CHAO_HUNT) { + // TODO: This check does not make sense! + break; + } + } + } +#endif + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + gPlayer.itemEffect |= PLAYER_ITEM_EFFECT__TELEPORT; + } + } else { + for (i = 0; i < 4; i++) { + gMultiplayerRanks[i] = -1; + } + } + +#if (GAME == GAME_SA2) + gCheese = NULL; + + if (gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + CreateCheese(&gPlayer); + } + + if (IS_MULTI_PLAYER && gGameMode != GAME_MODE_MULTI_PLAYER_COLLECT_RINGS) { + CreateRaceProgressIndicator(); + } +#endif +} + +void Task_GameStage(void) +{ + u16 sioId = SIO_MULTI_CNT->id; + u32 timeStep; + + if (IS_SINGLE_PLAYER) { +#if DEBUG +#include "game/character_select.h" + if (gInput & SELECT_BUTTON) { + u32 initialCharacter = CHARACTER_TAILS; + bool32 allUnlocked = TRUE; + TasksDestroyAll(); +#if (GAME == GAME_SA1) + CreateCharacterSelectionScreen(initialCharacter); +#elif (GAME == GAME_SA2) + CreateCharacterSelectionScreen(initialCharacter, allUnlocked); +#endif + return; + } +#endif + if (!(gStageFlags & STAGE_FLAG__DISABLE_PAUSE_MENU) && (gPressedKeys & START_BUTTON) && !(gStageFlags & STAGE_FLAG__DEMO_RUNNING)) { + CreatePauseMenu(); + } + gStageTime++; + timeStep = 1; + } else { + u32 framesSinceStageStart = (gFrameCount - gMPStageStartFrameCount); + timeStep = framesSinceStageStart - gStageTime; + gStageTime = framesSinceStageStart; + + if (GAME_MODE_REQUIRES_ITEM_RNG) { + if ((framesSinceStageStart & ~(0x1FF)) != ((framesSinceStageStart - timeStep) & ~(0x1FF))) { + u32 mask, rand; + u32 temp = MultiplayerPseudoRandom32(); + + if ((framesSinceStageStart & ~(0xFFF)) != ((framesSinceStageStart - timeStep) & ~(0xFFF))) { + u32 value = (gRandomItemBox >> 4) + 1; + gRandomItemBox = ((gRandomItemBox & 0xF) | (value * 16)); + } + rand = gMultiplayerPseudoRandom; + mask = 7; + gRandomItemBox = (gRandomItemBox & 0xF8) | (rand & mask); + } + + } else if ((framesSinceStageStart & ~(0x3F)) != ((framesSinceStageStart - timeStep) & ~(0x3F))) { + u32 temp = MultiplayerPseudoRandom32(); + } + + if (gCamera.SA2_LABEL(unk50) & CAM_MODE_SPECTATOR) { + + if ((gInput & (L_BUTTON | R_BUTTON)) == (L_BUTTON | R_BUTTON)) { + if (sioId != 3) { + gCamera.spectatorTarget = 3; + } else { + gCamera.spectatorTarget = 2; + } + } else if (gInput & L_BUTTON) { + if (sioId == 0) { + gCamera.spectatorTarget = 1; + } else { + gCamera.spectatorTarget = 0; + } + } else if (gInput & R_BUTTON) { + if (sioId < 2) { + gCamera.spectatorTarget = 2; + } else { + gCamera.spectatorTarget = 1; + } + } else { + gCamera.spectatorTarget = sioId; + } + } else { + gCamera.spectatorTarget = sioId; + } + + // If player is not connected, switch back to our player + if (!GetBit(gMultiplayerConnections, gCamera.spectatorTarget)) { + gCamera.spectatorTarget = sioId; + } + + if (SA2_LABEL(gUnknown_030053E0) > 0) { + SA2_LABEL(gUnknown_030053E0)--; + } + } + + SA2_LABEL(gUnknown_0300544C) = gStageFlags; + + if (gStageFlags & STAGE_FLAG__ACT_START) { + return; + } + + gCheckpointTime += timeStep; + + if (gStageFlags & STAGE_FLAG__TIMER_REVERSED) { + gCourseTime -= timeStep; + if ((s32)gCourseTime > 0) { + return; + } + + if (IS_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__ACT_START; + + if (LOADED_SAVE->timeLimitDisabled) { + return; + } + + gPlayer.itemEffect = 0; + + if (gPlayer.moveState & MOVESTATE_IN_WATER) { + gPlayer.qSpeedAirY = -Q(2.625); + } else { + gPlayer.qSpeedAirY = -Q(4.875); + } + +#if (GAME == GAME_SA1) + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) +#elif (GAME == GAME_SA2) + // NOTE(Jace): + // I wonder if the level index was hardcoded in the original source? + if (gCurrentLevel == LEVEL_INDEX(ZONE_3, ACT_BOSS)) +#endif + { + CreateScreenShake(0x800, 8, 16, -1, (SCREENSHAKE_VERTICAL | SCREENSHAKE_HORIZONTAL | SCREENSHAKE_RANDOM_VALUE)); + } + gPlayer.moveState |= MOVESTATE_DEAD; + m4aSongNumStart(SE_TIME_UP); + } else { + gStageFlags |= STAGE_FLAG__ACT_START; + CreateMultiplayerFinishHandler(); + } + } else { + gCourseTime += timeStep; + if (gCourseTime <= MAX_COURSE_TIME) { + return; + } + + if (IS_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__ACT_START; + + if (LOADED_SAVE->timeLimitDisabled && (gGameMode == GAME_MODE_SINGLE_PLAYER || IS_MULTI_PLAYER)) { + return; + } + + gPlayer.itemEffect = 0; + + if (gPlayer.moveState & MOVESTATE_IN_WATER) { + gPlayer.qSpeedAirY = -Q(2.625); + } else { + gPlayer.qSpeedAirY = -Q(4.875); + } + gPlayer.moveState |= MOVESTATE_DEAD; + m4aSongNumStart(SE_TIME_UP); + } else { + gStageFlags |= STAGE_FLAG__ACT_START; + CreateMultiplayerFinishHandler(); + } + } +} + +void HandleLifeLost(void) +{ + gStageFlags |= STAGE_FLAG__DISABLE_PAUSE_MENU; + + if (GAME_MODE_IS_TIME_ATTACK) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + + gBgSpritesCount = 0; + + PAUSE_GRAPHICS_QUEUE(); + CreateTimeAttackLobbyScreen(); +#if (GAME == GAME_SA2) + gNumLives = 2; +#endif + return; + } else { +#if (GAME == GAME_SA1) + if (IS_SINGLE_PLAYER && (--gNumLives == 0)) +#elif (GAME == GAME_SA2) + if (--gNumLives == 0) +#endif + { + gStageFlags |= STAGE_FLAG__ACT_START; + +#if (GAME == GAME_SA1) + if (SA2_LABEL(gUnknown_0300543C) > 0) { + SA2_LABEL(gUnknown_0300543C)--; + CreateGameOverScreen(OVER_CAUSE_ZERO_LIVES); + } else { + CreateGameOverScreen(OVER_CAUSE_TIME_UP); + } +#else + CreateGameOverScreen(OVER_CAUSE_ZERO_LIVES); +#endif + } else { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + + gBgSpritesCount = 0; + + PAUSE_GRAPHICS_QUEUE(); + CreateGameStage(); + } + } +} + +#if (GAME == GAME_SA1) +void HandleDeath(void) +{ + gStageFlags |= STAGE_FLAG__DISABLE_PAUSE_MENU; + + if (GAME_MODE_IS_TIME_ATTACK) { + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + + gBgSpritesCount = 0; + + PAUSE_GRAPHICS_QUEUE(); + CreateTimeAttackLobbyScreen(); + } else if (--gNumLives == 0) { + if (SA2_LABEL(gUnknown_0300543C) > 0) { + SA2_LABEL(gUnknown_0300543C)--; + CreateGameOverScreen(OVER_CAUSE_ZERO_LIVES); + } else { + s32 score = (gLevelScore < LOADED_SAVE->unk420) ? LOADED_SAVE->unk420 : gLevelScore; + + LOADED_SAVE->unk420 = score; + + CreateGameOverScreen(OVER_CAUSE_TIME_UP); + } + } else { + CreateTimeOver(); + } +} +#endif + +void GoToNextLevel(void) +{ + u16 irqEnable, irqMasterEnable, dispStat; + + TasksDestroyAll(); + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + +#if (GAME == GAME_SA1) + m4aMPlayAllStop(); + m4aSoundVSyncOff(); + + gFlags |= FLAGS_8000; + irqEnable = REG_IE; + irqMasterEnable = REG_IME; + dispStat = REG_DISPSTAT; + + REG_IE = 0; + REG_IE; + REG_IME = 0; + REG_IME; + REG_DISPSTAT = 0; + REG_DISPSTAT; + + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + + SlowDmaStop(0); + SlowDmaStop(1); + SlowDmaStop(2); + SlowDmaStop(3); +#endif + + WriteSaveGame(); + +#if (GAME == GAME_SA1) + REG_IE = irqEnable; + REG_IE; + REG_IME = irqMasterEnable; + REG_IME; + REG_DISPSTAT = dispStat; + REG_DISPSTAT; + + m4aSoundVSyncOn(); + + gFlags &= ~FLAGS_8000; +#endif + +#if (GAME == GAME_SA1) + if (gGameMode != GAME_MODE_TIME_ATTACK) +#elif (GAME == GAME_SA2) + if (gGameMode == GAME_MODE_SINGLE_PLAYER) +#endif + { + if (++gCurrentLevel < NUM_LEVEL_IDS) { + GameStageStart(); + } + } +#if (GAME == GAME_SA1) + else { + CreateTimeAttackLobbyScreen(); + } +#endif +} + +void StageInit_Zone3Act1(void) +{ + CreatePaletteLoaderTask(0x2000, 816, 0, 0); + CreatePaletteLoaderTask(0x2000, 817, 0, 0); + CreatePaletteLoaderTask(0x2000, 818, 0, 0); + CreatePaletteLoaderTask(0x2000, 824, 0, 0); + CreatePaletteLoaderTask(0x2000, 825, 0, 0); + CreatePaletteLoaderTask(0x2000, 827, 0, 0); // TODO/BUG?: Should this be 826? + CreatePaletteLoaderTask(0x2000, 827, 0, 0); + CreatePaletteLoaderTask(0x2000, 828, 0, 0); + CreatePaletteLoaderTask(0x2000, 843, 0, 0); + CreatePaletteLoaderTask(0x2000, 844, 0, 0); + CreatePaletteLoaderTask(0x2000, 826, 0, 0); // Chao Stage removes this loader + + m4aSongNumStart(MUS_CASINO_PARADISE__ACT_1); +} + +void StageInit_Zone3Act2(void) +{ + CreatePaletteLoaderTask(0x2000, 816, 0, 0); + CreatePaletteLoaderTask(0x2000, 817, 0, 0); + CreatePaletteLoaderTask(0x2000, 818, 0, 0); + CreatePaletteLoaderTask(0x2000, 824, 0, 0); + CreatePaletteLoaderTask(0x2000, 825, 0, 0); + CreatePaletteLoaderTask(0x2000, 827, 0, 0); // TODO/BUG?: Should this be 826? + CreatePaletteLoaderTask(0x2000, 827, 0, 0); + CreatePaletteLoaderTask(0x2000, 828, 0, 0); + CreatePaletteLoaderTask(0x2000, 843, 0, 0); + CreatePaletteLoaderTask(0x2000, 844, 0, 0); + CreatePaletteLoaderTask(0x2000, 826, 0, 0); + + m4aSongNumStart(MUS_CASINO_PARADISE__ACT_2); +} + +void StageInit_Zone6Act1(void) +{ + CreatePaletteLoaderTask(0x2000, 839, 0, 0); + CreatePaletteLoaderTask(0x2000, 840, 0, 0); + CreatePaletteLoaderTask(0x2000, 841, 0, 0); + CreatePaletteLoaderTask(0x2000, 842, 0, 0); + + m4aSongNumStart(MUS_EGG_ROCKET); + + if (gBossIndex > 0) { + // This section only gets called after hitting a checkpoint! + // + // Rocket "started", so don't allow player to leave. + gCamera.minX = EGG_ROCKET_LAUNCH_MIN_X; + gCamera.sa2__unk50 |= 0x8000; + gBgCntRegs[3] &= ~(BGCNT_TXT512x512); + + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + gCourseTime = TIME(5, 0); + } + } + + if (gBossIndex > 1) { + // Rocket booster removed + // + // 'maxY' set because we are "climbing" the rocket and positive Y goes down. + gCamera.maxY = EGG_ROCKET_BOOSTER_DEPART_MAX_Y; + gCamera.sa2__unk50 |= 0x8000; + gBgCntRegs[3] &= ~(BGCNT_TXT512x512); + + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + gCourseTime = TIME(5, 0); + } + } + + if (gBossIndex > 2) { + gBgCntRegs[3] &= ~(BGCNT_TXT512x512); + gCamera.sa2__unk50 |= 0x4000; + gCamera.sa2__unk50 &= ~0x8000; + gCamera.maxY = EGG_ROCKET_MIDDLE_DEPART_MAX_Y; + + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + gStageFlags |= STAGE_FLAG__TIMER_REVERSED; + gCourseTime = TIME(5, 0); + } + } +} + +void StageInit_PinballChaoGarden(void) +{ + CreatePaletteLoaderTask(0x2000, 816, 0, 0); + CreatePaletteLoaderTask(0x2000, 817, 0, 0); + CreatePaletteLoaderTask(0x2000, 818, 0, 0); + CreatePaletteLoaderTask(0x2000, 824, 0, 0); + CreatePaletteLoaderTask(0x2000, 825, 0, 0); + CreatePaletteLoaderTask(0x2000, 827, 0, 0); // TODO/BUG?: Should this be 826? + CreatePaletteLoaderTask(0x2000, 827, 0, 0); + CreatePaletteLoaderTask(0x2000, 828, 0, 0); + CreatePaletteLoaderTask(0x2000, 843, 0, 0); + CreatePaletteLoaderTask(0x2000, 844, 0, 0); + // Regular Casino Paradise loads palette anim 826 here. + + m4aSongNumStart(MUS_CASINO_PARADISE__ACT_1); +} + +void ApplyGameStageSettings(void) +{ + gLevelScore = 0; + gNumLives = 3; + SA2_LABEL(gUnknown_030054B0) = gCurrentLevel; + + if (IS_MULTI_PLAYER) { + gNumLives = 1; + } + + if ((gGameMode == GAME_MODE_TIME_ATTACK || (gGameMode == GAME_MODE_RACE) || (gGameMode == GAME_MODE_MULTI_PLAYER)) + || (gStageFlags & STAGE_FLAG__DEMO_RUNNING)) { + gDifficultyLevel = LOADED_SAVE->difficultyLevel; + LOADED_SAVE->difficultyLevel = DIFFICULTY_NORMAL; + } + + SetFaceButtonConfig(LOADED_SAVE->btnConfig); + GameStageStart(); +} + +void DestroyStageTasks(void) +{ + TaskDestroy(gGameStageTask); + gGameStageTask = NULL; + + DestroyPlayerTasks(&gPlayer); + +#if (GAME == GAME_SA1) + if (IS_SINGLE_PLAYER) { + DestroyPlayerTasks(&gPartner); + } +#endif + + DestroyCameraMovementTask(); +} + +void TaskDestructor_GameStage(struct Task *t) +{ +#if (GAME == GAME_SA1) + if ((gGameMode == GAME_MODE_TIME_ATTACK || (gGameMode == GAME_MODE_RACE) || (gGameMode == GAME_MODE_MULTI_PLAYER)) + || (gStageFlags & STAGE_FLAG__DEMO_RUNNING)) { + LOADED_SAVE->difficultyLevel = gDifficultyLevel; + } +#endif + gGameStageTask = NULL; + m4aMPlayAllStop(); +} + +void StageInit_Zone1Act1(void) +{ + CreatePaletteLoaderTask(0x2000, 814, 0, 0); + CreatePaletteLoaderTask(0x2000, 815, 0, 0); + + m4aSongNumStart(MUS_NEO_GREEN_HILL__ACT_1); +} + +void StageInit_Zone1Act2(void) +{ + CreatePaletteLoaderTask(0x2000, 814, 0, 0); + CreatePaletteLoaderTask(0x2000, 815, 0, 0); + CreatePaletteLoaderTask(0x2000, 820, 1, 0); + CreatePaletteLoaderTask(0x2000, 820, 0, 0); + + if (IS_SINGLE_PLAYER) { + gCamera.maxX = gRefCollision->pxWidth - 768; + } + + m4aSongNumStart(MUS_NEO_GREEN_HILL__ACT_2); +} + +void StageInit_Zone2Act1(void) +{ + CreatePaletteLoaderTask(0x2000, 819, 0, 0); + CreatePaletteLoaderTask(0x2000, 845, 0, 0); + CreatePaletteLoaderTask(0x2000, 849, 0, 0); + + m4aSongNumStart(MUS_SECRET_BASE__ACT_1); +} + +void StageInit_Zone2Act2(void) +{ + CreatePaletteLoaderTask(0x2000, 819, 0, 0); + CreatePaletteLoaderTask(0x2000, 845, 0, 0); + CreatePaletteLoaderTask(0x2000, 849, 0, 0); + + m4aSongNumStart(MUS_SECRET_BASE__ACT_2); +} + +void StageInit_Zone4Act1(void) +{ + CreatePaletteLoaderTask(0x2000, 822, 0, 0); + CreatePaletteLoaderTask(0x2000, 821, 0, 0); + CreateStageWaterTask(INITIAL_WATERLEVEL_ZONE_4_ACT_1, 0x7F207F20, 0); + + m4aSongNumStart(MUS_ICE_MOUNTAIN__ACT_1); +} + +void StageInit_Zone4Act2(void) +{ + CreatePaletteLoaderTask(0x2000, 822, 0, 0); + CreatePaletteLoaderTask(0x2000, 821, 0, 0); + CreateStageWaterTask(INITIAL_WATERLEVEL_ZONE_4_ACT_2, 0x7F207F20, 0); + + m4aSongNumStart(MUS_ICE_MOUNTAIN__ACT_2); +} + +void StageInit_Zone5Act1(void) +{ + CreatePaletteLoaderTask(0x2000, 823, 0, 0); + + m4aSongNumStart(MUS_ANGEL_ISLAND__ACT_1); +} + +void StageInit_Zone5Act2(void) +{ + CreatePaletteLoaderTask(0x2000, 823, 0, 0); + + m4aSongNumStart(MUS_ANGEL_ISLAND__ACT_2); +} + +void StageInit_Zone6Act2(void) +{ + CreatePaletteLoaderTask(0x2000, 829, 0, 0); + CreatePaletteLoaderTask(0x2000, 830, 0, 0); + CreatePaletteLoaderTask(0x2000, 831, 0, 0); + CreatePaletteLoaderTask(0x2000, 850, 0, 0); + CreatePaletteLoaderTask(0x2000, 851, 0, 0); + CreatePaletteLoaderTask(0x2000, 848, 0, 0); + CreatePaletteLoaderTask(0x2000, 846, 0, 0); + CreatePaletteLoaderTask(0x2000, 847, 0, 0); + + m4aSongNumStart(MUS_COSMIC_ANGEL); +} + +void StageInit_Zone7Act1(void) { m4aSongNumStart(MUS_X_ZONE); } + +void StageInit_Zone7Act2(void) { m4aSongNumStart(MUS_EXTRA_BOSS); } + +void StageInit_ForestChaoGarden(void) +{ + CreatePaletteLoaderTask(0x2000, 814, 0, 0); + CreatePaletteLoaderTask(0x2000, 815, 0, 0); + CreatePaletteLoaderTask(0x2000, 820, 1, 0); + CreatePaletteLoaderTask(0x2000, 820, 0, 0); + + m4aSongNumStart(MUS_NEO_GREEN_HILL__ACT_1); +} + +void StageInit_FactoryChaoGarden(void) +{ + CreatePaletteLoaderTask(0x2000, 819, 0, 0); + CreatePaletteLoaderTask(0x2000, 845, 0, 0); + CreatePaletteLoaderTask(0x2000, 849, 0, 0); + + m4aSongNumStart(MUS_SECRET_BASE__ACT_1); +} + +void StageInit_SpaceChaoGarden(void) +{ + CreatePaletteLoaderTask(0x2000, 829, 0, 0); + CreatePaletteLoaderTask(0x2000, 830, 0, 0); + CreatePaletteLoaderTask(0x2000, 831, 0, 0); + CreatePaletteLoaderTask(0x2000, 850, 0, 0); + CreatePaletteLoaderTask(0x2000, 851, 0, 0); + CreatePaletteLoaderTask(0x2000, 848, 0, 0); + CreatePaletteLoaderTask(0x2000, 846, 0, 0); + CreatePaletteLoaderTask(0x2000, 847, 0, 0); + + m4aSongNumStart(MUS_COSMIC_ANGEL); +} + +void StageInit_MPCollectRings(void) +{ + CreatePaletteLoaderTask(0x2000, 814, 0, 0); + CreatePaletteLoaderTask(0x2000, 815, 0, 0); + CreatePaletteLoaderTask(0x2000, 820, 1, 0); + CreatePaletteLoaderTask(0x2000, 820, 0, 0); + + m4aSongNumStart(MUS_VS_RING_RUSH_MODE); +} diff --git a/sa1/src/game/stage/terrain_collision.c b/sa1/src/game/stage/terrain_collision.c new file mode 100644 index 0000000000..ca19b06c73 --- /dev/null +++ b/sa1/src/game/stage/terrain_collision.c @@ -0,0 +1,969 @@ +#include "global.h" +#include "tilemap.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/camera.h" +#include "game/stage/player.h" + +#include "constants/zones.h" + +static ALIGNED(8) u32 gUnknown_3000410[3]; +static ALIGNED(8) u32 gUnknown_3000420[3]; + +s32 SA2_LABEL(sub_801EF94)(s32 p0, s32 p1, s32 layer); + +#define POS__NOT_MOD(i) \ + if (p3 > 0) { \ + return ~(p0 % 8u) + ((i)*TILE_WIDTH); \ + } else { \ + return (p0 % 8u) + ((i - 1) * TILE_WIDTH); \ + } + +#define NEG__NOT_MOD(i) POS__NOT_MOD(-i) + +#define NEG__INV_NOT_MOD(i) \ + if (p3 > 0) { \ + return ~(p0 % 8u) - ((i)*TILE_WIDTH); \ + } else { \ + return (p0 % 8u) - ((i + 1) * TILE_WIDTH); \ + } + +#define POS__RES_IF(i) \ + if (res > 0) { \ + res--; \ + res -= (p0 % 8u); \ + return res + ((i)*TILE_WIDTH); \ + } else { \ + return res + (p0 % 8u) + ((i)*TILE_WIDTH); \ + } + +#define NEG__RES_IF(i) POS__RES_IF(-i) + +#define POS__P3_IF(i) \ + if (p3 > 0) { \ + s32 v = (p0 % 8u); \ + res = (((i) + 1) * TILE_WIDTH); \ + return res - v; \ + } else { \ + return (p0 % 8u) + ((i)*TILE_WIDTH + 1); \ + } + +#define NEG__P3_IF(i) \ + if (p3 > 0) { \ + s32 v = (p0 % 8u); \ + res = -(((i)-1) * TILE_WIDTH + 1); \ + return res - v; \ + } else { \ + return (p0 % 8u) - ((i)*TILE_WIDTH); \ + } + +#if (GAME == GAME_SA1) +extern const Collision CollHeader_zone_1_act_1_fg; +extern const Collision CollHeader_zone_1_act_2_fg; +extern const Collision CollHeader_zone_2_act_1_fg; +extern const Collision CollHeader_zone_2_act_2_fg; +extern const Collision CollHeader_zone_3_act_1_fg; +extern const Collision CollHeader_zone_3_act_2_fg; +extern const Collision CollHeader_zone_4_act_1_fg; +extern const Collision CollHeader_zone_4_act_2_fg; +extern const Collision CollHeader_zone_5_act_1_fg; +extern const Collision CollHeader_zone_5_act_2_fg; +extern const Collision CollHeader_zone_6_act_1_fg; +extern const Collision CollHeader_zone_6_act_2_fg; +extern const Collision CollHeader_zone_7_act_1_fg; +extern const Collision CollHeader_zone_7_act_2_fg; +extern const Collision CollHeader_zone_chao_hunt_act_vs_zone_a_fg; +extern const Collision CollHeader_zone_chao_hunt_act_vs_zone_b_fg; +extern const Collision CollHeader_zone_chao_hunt_act_vs_zone_c_fg; +extern const Collision CollHeader_zone_chao_hunt_act_vs_zone_d_fg; + +const Collision *const gCollisionTable[NUM_LEVEL_IDS] = { + &CollHeader_zone_1_act_1_fg, + &CollHeader_zone_1_act_2_fg, + &CollHeader_zone_2_act_1_fg, + &CollHeader_zone_2_act_2_fg, + &CollHeader_zone_3_act_1_fg, + &CollHeader_zone_3_act_2_fg, + &CollHeader_zone_4_act_1_fg, + &CollHeader_zone_4_act_2_fg, + &CollHeader_zone_5_act_1_fg, + &CollHeader_zone_5_act_2_fg, + &CollHeader_zone_6_act_1_fg, + &CollHeader_zone_6_act_2_fg, + &CollHeader_zone_7_act_1_fg, + &CollHeader_zone_7_act_2_fg, + &CollHeader_zone_chao_hunt_act_vs_zone_a_fg, + &CollHeader_zone_chao_hunt_act_vs_zone_b_fg, + &CollHeader_zone_chao_hunt_act_vs_zone_c_fg, + &CollHeader_zone_chao_hunt_act_vs_zone_d_fg, +}; +#elif (GAME == GAME_SA2) +extern const Collision CollHeader_zone_1_act_1_fg; +extern const Collision CollHeader_zone_1_act_2_fg; +extern const Collision CollHeader_zone_1_act_boss_fg; +extern const Collision CollHeader_zone_1_act_dummy_fg; +extern const Collision CollHeader_zone_2_act_1_fg; +extern const Collision CollHeader_zone_2_act_2_fg; +extern const Collision CollHeader_zone_2_act_boss_fg; +extern const Collision CollHeader_zone_3_act_1_fg; +extern const Collision CollHeader_zone_3_act_2_fg; +extern const Collision CollHeader_zone_3_act_boss_fg; +extern const Collision CollHeader_zone_4_act_1_fg; +extern const Collision CollHeader_zone_4_act_2_fg; +extern const Collision CollHeader_zone_4_act_boss_fg; +extern const Collision CollHeader_zone_5_act_1_fg; +extern const Collision CollHeader_zone_5_act_2_fg; +extern const Collision CollHeader_zone_5_act_boss_fg; +extern const Collision CollHeader_zone_6_act_1_fg; +extern const Collision CollHeader_zone_6_act_2_fg; +extern const Collision CollHeader_zone_6_act_boss_fg; +extern const Collision CollHeader_zone_7_act_1_fg; +extern const Collision CollHeader_zone_7_act_2_fg; +extern const Collision CollHeader_zone_7_act_boss_fg; +extern const Collision CollHeader_zone_final_act_xx_fg; +extern const Collision CollHeader_zone_final_act_ta53_fg; +extern const Collision CollHeader_zone_final_act_unused_fg; + +const Collision *const gCollisionTable[] = { + &CollHeader_zone_1_act_1_fg, &CollHeader_zone_1_act_2_fg, &CollHeader_zone_1_act_boss_fg, + &CollHeader_zone_1_act_dummy_fg, &CollHeader_zone_2_act_1_fg, &CollHeader_zone_2_act_2_fg, + &CollHeader_zone_2_act_boss_fg, &CollHeader_zone_1_act_dummy_fg, &CollHeader_zone_3_act_1_fg, + &CollHeader_zone_3_act_2_fg, &CollHeader_zone_3_act_boss_fg, &CollHeader_zone_1_act_dummy_fg, + &CollHeader_zone_4_act_1_fg, &CollHeader_zone_4_act_2_fg, &CollHeader_zone_4_act_boss_fg, + &CollHeader_zone_1_act_dummy_fg, &CollHeader_zone_5_act_1_fg, &CollHeader_zone_5_act_2_fg, + &CollHeader_zone_5_act_boss_fg, &CollHeader_zone_1_act_dummy_fg, &CollHeader_zone_6_act_1_fg, + &CollHeader_zone_6_act_2_fg, &CollHeader_zone_6_act_boss_fg, &CollHeader_zone_1_act_dummy_fg, + &CollHeader_zone_7_act_1_fg, &CollHeader_zone_7_act_2_fg, &CollHeader_zone_7_act_boss_fg, + &CollHeader_zone_1_act_dummy_fg, &CollHeader_zone_final_act_xx_fg, &CollHeader_zone_final_act_ta53_fg, + &CollHeader_zone_final_act_unused_fg, +}; +#endif + +s32 SA2_LABEL(sub_801E4E4)(s32 p0, s32 p1, s32 p2, s32 p3, u8 *data, Func801F07C func) +{ + u8 dummy[4]; + u8 *dummy_p; + u8 *data1; + s32 res; + s32 it; + + if (data == NULL) + data = dummy; + + dummy_p = &dummy[0]; + dummy_p++; + data1 = dummy_p; + + res = func(p0 + p3 * 0, p1, p2, data1); + + if (res == 0) { + res = func(p0 + p3 * 1, p1, p2, data1); + + if (res == 0) { + it = p3 * 2; + res = func(p0 + it, p1, p2, data1); + + if (res == 0) { + POS__P3_IF(2); + } else if (res == 8) { + *data = *data1; + + POS__NOT_MOD(2); + } else { + *data = *data1; + + POS__RES_IF(2); + } + + } else if (res == 8) { + *data = *data1; + + POS__NOT_MOD(1); + } else { + *data = *data1; + + POS__RES_IF(1); + } + } else if (res == 8) { + *data = *data1; + + it = -p3; + + res = func(p0 + it, p1, p2, data1); + + if (res == 8) { + *data = *data1; + + it -= p3; + + res = func(p0 + it, p1, p2, data1); + + if (res == 8) { + *data = *data1; + + NEG__INV_NOT_MOD(2); + } else if (res == 0) { + NEG__P3_IF(2); + } else { + *data = *data1; + + NEG__RES_IF(2); + } + } else if (res == 0) { + NEG__NOT_MOD(0); + } else { + *data = *data1; + + NEG__RES_IF(1); + } + } else { + *data = *data1; + + if (res <= 0) { + return res + (p0 % 8u) - 0 * TILE_WIDTH; + } else { + return ((--res) - (p0 % 8u)) - 0 * TILE_WIDTH; + } + } +} + +// TODO: Check whether this is in SA3! It's not in SA1! +#if (GAME >= GAME_SA2) +// TODO: +// - Wrap this in macros where possible +// - Remove gotos +// (100.00%) https://decomp.me/scratch/s8C30 +s32 sub_801E6D4(s32 p0, s32 p1, s32 p2, s32 p3, u8 *data, Func801F07C func) +{ + u8 dummy[4]; + u8 *dummy_p; + u8 *data1; + s32 res; + s32 r4; + + if (data == NULL) + data = dummy; + + dummy_p = &dummy[0]; + dummy_p++; + data1 = dummy_p; + + res = func(p0 + p3 * 0, p1, p2, data1); + + if (res == 0) { + // 0 - _0801E70C + res = func(p0 + p3 * 1, p1, p2, data1); + + if (res == 0) { + // 1 - _0801E722 + r4 = p3 * 2; + res = func(p0 + r4, p1, p2, data1); + + if (res == 0) { + // 2 - _0801E73A + r4 += p3; + res = func(p0 + r4, p1, p2, data1); + + if (res == 0) { + // 3 - + r4 += p3; + res = func(p0 + r4, p1, p2, data1); + + if (res == 0) { + // 4 - + r4 += p3; + res = func(p0 + r4, p1, p2, data1); + + if (res == 0) { + // 5 - + POS__P3_IF(5); + } else if (res == 8) { + // 5 - _0801E78E + 0x4 + *data = *data1; + + POS__NOT_MOD(5); + } else { + // 5 - _0801E7B0 + *data = *data1; + + POS__RES_IF(5); + } + } else if (res == 8) { + // 4 - _0801E7D2 + *data = *data1; + + POS__NOT_MOD(4); + } else { + // _0801E7F4 + *data = *data1; + + POS__RES_IF(4); + } + } else if (res == 8) { + // 3 - _0801E816 + *data = *data1; + + POS__NOT_MOD(3); + } else { + // 3 - _0801E838 + *data = *data1; + + POS__RES_IF(3); + } + } else if (res == 8) { + // 2 - _0801E85A + *data = *data1; + + POS__NOT_MOD(2); + } else { + // 2 - _0801E87C + *data = *data1; + + POS__RES_IF(2); + } + } else if (res == 8) { + // 1 - _0801E89E + *data = *data1; + + POS__NOT_MOD(1); + } else { + // 1 - _0801E8BE + *data = *data1; + + POS__RES_IF(1); + } + } else if (res == 8) { + // _0801E8E6 + *data = *data1; + + r4 = -p3; + + res = func(p0 + r4, p1, p2, data1); + if (res == 8) { + // _0801E906 + *data = *data1; + r4 -= p3; + + res = func(p0 + r4, p1, p2, data1); + if (res == 8) { + // _0801E924 + *data = *data1; + r4 -= p3; + + res = func(p0 + r4, p1, p2, data1); + if (res == 8) { + // _0801E944 + *data = *data1; + r4 -= p3; + + res = func(p0 + r4, p1, p2, data1); + if (res == 8) { + *data = *data1; + r4 -= p3; + + res = func(p0 + r4, p1, p2, data1); + if (res == 8) { + *data = *data1; + r4 -= p3; + + res = func(p0 + r4, p1, p2, data1); + if (res == 8) { + *data = *data1; + + POS__NOT_MOD(-5); + } else if (res == 0) { + // _0801E9B8 + + NEG__P3_IF(5); + } else { + // _0801E9D6 + *data = *data1; + + NEG__RES_IF(5); + } + } else if (res == 0) { + // _0801E9F8 + NEG__P3_IF(4); + } else { + // _0801EA16 + *data = *data1; + + NEG__RES_IF(4); + } + } else if (res == 0) { + // _0801EA38 + NEG__P3_IF(3); + } else { + // _0801EA56 + *data = *data1; + + NEG__RES_IF(3); + } + } else { + // _0801EA78 + if (res == 0) { + _0801EA82: + NEG__P3_IF(2); + } else { + // _0801EA96 + *data = *data1; + + _0801EAA0: + NEG__RES_IF(2); + } + } + } else if (res == 0) { + // _0801EAB8 + + if (p3 > 0) { +#if 1 + goto _0801EA82; +#else + return -9 - (p0 % 8u); +#endif + } else { + return (p0 % 8u) - 2 * TILE_WIDTH; + } + } else { + *data = *data1; + + if (res > 0) { +#if 1 + goto _0801EAA0; +#else + res = (--res) - (p0 % 8u); + return res - 2 * TILE_WIDTH; +#endif + } else { + return (res + (p0 % 8u)) - 2 * TILE_WIDTH; + } + } + } else if (res == 0) { + // _0801EADE + + if (p3 > 0) { + return ~(p0 % 8u); + } else { + return (-8 | p0); + } + } else { + // _0801EAF8 + *data = *data1; + + NEG__RES_IF(1); + } + } else { + // _0801EB1A + *data = *data1; + + if (res <= 0) { + return res + (p0 % (unsigned)TILE_WIDTH); + } else { + // _0801EB2E + return (--res) - (p0 % 8u); + } + } +} +#endif + +s32 SA2_LABEL(sub_801EB44)(s32 p0, s32 p1, s32 layer) +{ + u32 r0; + s32 yPixel; + s32 mtTileIndex; + u32 tile; + s32 hv; + const Collision *coll; + s32 hIndex; + + p0 = CLAMP_32(p0, 0, gRefCollision->pxWidth - 1); + p1 = CLAMP_32(p1, 0, gRefCollision->pxHeight - 1); + + tile = SA2_LABEL(sub_801EF94)(p0, p1, layer & PLAYER_LAYER__MASK); + mtTileIndex = tile & TILE_MASK_INDEX; + + yPixel = p1 % (unsigned)TILE_WIDTH; + + if (tile & TILE_MASK_Y_FLIP) { + yPixel = (TILE_WIDTH - 1) - yPixel; + } + + coll = gRefCollision; + hIndex = (mtTileIndex * TILE_WIDTH); + hv = coll->height_map[hIndex + yPixel]; + hv &= 0xF; + + if ((hv & 0x8) == +8) { + hv |= ~0xF; + } + + if (hv == -8) { + hv = 8; + } + + if (layer & 0x80) { + s32 flags = gRefCollision->flags[mtTileIndex / (unsigned)TILE_WIDTH]; + + // 2: one tile's flags' bit-width + flags >>= ((mtTileIndex % (unsigned)TILE_WIDTH) * 2); + + if (flags & 0x1) { + hv = 0; + } + } + + if (tile & TILE_MASK_X_FLIP) { + if ((hv != TILE_WIDTH) && (hv != 0)) { + r0 = hv + TILE_WIDTH; + r0 = (hv > 0) ? hv - TILE_WIDTH : r0; + + } else { + r0 = hv; + } + hv = r0; + } + + return hv; +} + +s32 SA2_LABEL(sub_801EC3C)(s32 p0, s32 p1, s32 layer) +{ + u32 r0; + s32 xPixel; + s32 mtTileIndex; + u32 tile; + s32 hv; + const Collision *coll; + s32 hIndex; + + p1 = CLAMP_32(p1, 0, gRefCollision->pxWidth - 1); + p0 = CLAMP_32(p0, 0, gRefCollision->pxHeight - 1); + + tile = SA2_LABEL(sub_801EF94)(p1, p0, layer & PLAYER_LAYER__MASK); + mtTileIndex = tile & TILE_MASK_INDEX; + + xPixel = p1 % (unsigned)TILE_WIDTH; + + if (tile & TILE_MASK_X_FLIP) { + xPixel = (TILE_WIDTH - 1) - xPixel; + } + + coll = gRefCollision; + hIndex = (mtTileIndex * TILE_WIDTH); + hv = coll->height_map[hIndex + xPixel]; + hv >>= 4; + + if (hv == -TILE_WIDTH) { + hv = TILE_WIDTH; + } + + if (layer & PLAYER_LAYER__80) { + s32 flags = gRefCollision->flags[mtTileIndex / (unsigned)TILE_WIDTH]; + + // 2: one tile's flags' bit-width + flags >>= ((mtTileIndex % (unsigned)TILE_WIDTH) * 2); + + if (flags & 0x1) { + hv = 0; + } + } + + if (tile & TILE_MASK_Y_FLIP) { + if ((hv != TILE_WIDTH) && (hv != 0)) { + r0 = hv + TILE_WIDTH; + r0 = (hv > 0) ? hv - TILE_WIDTH : r0; + + } else { + r0 = hv; + } + hv = r0; + } + + return hv; +} + +s32 SA2_LABEL(sub_801ED24)(s32 p0, s32 p1, s32 p2, u8 *p3) +{ + u32 r0; + s32 r3; + s32 mtTileIndex; + u32 res; + const Collision *coll; + s32 hIndex; + u8 rotation; + + p0 = CLAMP_32(p0, 0, gRefCollision->pxWidth - 1); + p1 = CLAMP_32(p1, 0, gRefCollision->pxHeight - 1); + + res = SA2_LABEL(sub_801EF94)(p0, p1, p2 & 0x1); + mtTileIndex = res & 0x3FF; + + r3 = p1 % 8u; + + if (res & 0x800) { + r3 = (8 - 1) - r3; + } + + coll = gRefCollision; + hIndex = mtTileIndex * 8; + r3 = coll->height_map[hIndex + r3] % 16u; + + if ((r3 & 0x8) == +8) { + r3 |= ~0xF; + } + + if (r3 == -8) { + r3 = 8; + } + + if (p2 & 0x80) { + s32 flags = gRefCollision->flags[mtTileIndex / 8u]; + + // 2: one tile's flags' bit-width + flags >>= ((mtTileIndex % 8u) * 2); + + if (flags & 0x1) { + r3 = 0; + } + } + + if (res & 0x400) { + if ((r3 != 8) && (r3 != 0)) { + r0 = r3 + 8; + r0 = (r3 > 0) ? r3 - 8 : r0; + + } else { + r0 = r3; + } + r3 = r0; + } + + rotation = gRefCollision->tile_rotation[mtTileIndex]; + + if (res & 0x800) { + u32 v2 = -0x80 - rotation; + rotation = v2; + } + + if (res & 0x400) { + u8 v; + if (r3 != 0) { + u32 v2 = -rotation; + v = v2; + } else { + v = rotation; + } + rotation = v; + } + + *p3 = rotation; + + return r3; +} + +// TODO: Fix this register mess! +// (100.00%) https://decomp.me/scratch/sJY4g +s32 SA2_LABEL(sub_801EE64)(s32 p0in, s32 p1in, s32 p2in, u8 *p3in) +{ + // NOTE: I'm surprised it is using UNsigned ints in SA2. + // TODO: Should we consider the SA2 type a bugfix in SA1? +#if (GAME == GAME_SA1) + typedef s32 r0r1_t; +#elif (GAME == GAME_SA2) + typedef u32 r0r1_t; +#endif + +#ifndef NON_MATCHING + register r0r1_t r0 asm("r0"); + register r0r1_t r1 asm("r1"); + register s32 r3 asm("r3"); + register s32 p0 asm("r4") = p0in; + register s32 p1 asm("r5") = p1in; + register s32 r6 asm("r6"); + register s32 p2 asm("r8") = p2in; + u32 r7; + register s32 sb asm("sb"); + register u8 *p3 asm("sl") = p3in; + register s32 res asm("r4"); +#else + r0r1_t r0; + r0r1_t r1; + s32 r3; + s32 p0 = p0in; + s32 p1 = p1in; + s32 r6; + s32 p2 = p2in; + u32 r7; + s32 sb; + u8 *p3 = p3in; + s32 res; +#endif + u8 rotation; + + if (p1 >= 0) { + r0 = gRefCollision->pxWidth; + r1 = r0 - 1; + r0 = p1; + if (r0 > r1) { + r0 = r1; + } + } else { + r0 = 0; + } + p1 = r0; + // _0801EE92 + 2 + + if (p0 >= 0) { + r0 = gRefCollision->pxHeight; + r1 = r0 - 1; + r0 = p0; + if (r0 > r1) { + r0 = r1; + } + } else { + r0 = 0; + } + p0 = r0; + // _0801EEB2 + 2 + + sb = 1; + + p0 = SA2_LABEL(sub_801EF94)(p1, p0, p2 & sb); + r7 = 0x3FF; + r7 &= p0; + + r6 = 0x7; + r3 = r6; + r3 &= p1; + + r0 = 0x400; + r0 &= p0; + if (r0) { + r3 = r6 - r3; + } + // _0801EEDC + + // r3 = tileHeight + r3 = gRefCollision->height_map[(r7 << 3) + r3]; + + if ((r3 >>= 4) == -8) { + r3 = 8; + } + // _0801EEF8 + + if (p2 & 0x80) { + s32 flags = gRefCollision->flags[r7 / 8u]; + + // 2: one tile's flags' bit-width + flags >>= ((r7 & r6) * 2); + + if (flags & sb) { + r3 = 0; + } + } + // _0801EF1E + + if (p0 & 0x800) { + if ((r3 != 8) && (r3 != 0)) { + r0 = r3 + 8; + r0 = (r3 > 0) ? r3 - 8 : r0; + + } else { + r0 = r3; + } + r3 = r0; + } + // _0801EF48 + + rotation = gRefCollision->tile_rotation[r7]; + + if (p0 & 0x400) { + rotation = -rotation; + } + + if (p0 & 0x800) { + u8 v; + if (r3 != 0) { + u32 v2 = (-0x80) - rotation; + v = v2; + } else { + v = rotation; + } + rotation = v; + } + // _0801EF7E + + { +#ifndef NON_MATCHING + register u8 *r1p asm("r1") = p3; + *r1p = rotation; +#else + *p3 = rotation; +#endif + } + + return r3; +} + +// Parameter 'layer' should ONLY be 0 or 1. +// TODO: This should return a u16, representing a tile inside a metatile +// TODO: Fix this register mess! +// (100.00%) https://decomp.me/scratch/nh7WN +s32 SA2_LABEL(sub_801EF94)(s32 p0, s32 p1, s32 layer) +{ + s32 r0; +#ifndef NON_MATCHING + register s32 r1 asm("r1"); + register s32 r3 asm("r3"); + register s32 r4 asm("r4"); + register s32 r5 asm("r5"); + s32 r7; + register s32 r8 asm("r8"); +#else + s32 r1; + s32 r3; + s32 r4; + s32 r5; + s32 r7; + s32 r8; +#endif + const Collision *coll; + u32 mtIndex; + s32 i; + void *pMeta; + u16 result; + + r4 = p0 >> 3; + + if (gUnknown_3000410[0] == r4) { + r7 = gUnknown_3000410[2]; + r0 = gUnknown_3000410[1]; + } else { + s32 divRes = Div(r4, TILES_PER_METATILE_AXIS); + r1 = r4 - (divRes * TILES_PER_METATILE_AXIS); + + gUnknown_3000410[0] = r4; + gUnknown_3000410[1] = divRes; + gUnknown_3000410[2] = r1; + + r7 = gUnknown_3000410[2]; + r0 = gUnknown_3000410[1]; + } + r8 = r0; + // _0801EFCC + + r4 = p1 >> 3; + if (gUnknown_3000420[0] == r4) { + r5 = gUnknown_3000420[2]; + r3 = gUnknown_3000420[1]; + } else { + s32 divRes = Div(r4, TILES_PER_METATILE_AXIS); + r1 = r4 - (divRes * TILES_PER_METATILE_AXIS); + + r3 = divRes; + gUnknown_3000420[0] = r4; + gUnknown_3000420[1] = r3; + gUnknown_3000420[2] = r1; + + r5 = r1; + } + + coll = gRefCollision; + mtIndex = (coll->map[layer])[(r3 * coll->levelX) + r8]; + + // ((r5 << 3) + (r5 << 2)) == r5 * TILES_PER_METATILE_AXIS + r1 = ((r5 << 3) + (r5 << 2) + r7); + +#ifndef NON_MATCHING + asm("" ::"r"(r5)); +#endif + + r3 = mtIndex * 256; + mtIndex *= 32; + i = r1 * 2; + pMeta = (void *)coll->metatiles; + pMeta += r3; + pMeta += mtIndex; + pMeta += i; + result = *(u16 *)pMeta; + + return result; +} + +void SA2_LABEL(sub_801F044)(void) +{ + DmaFill32(3, 0, &gUnknown_3000410, sizeof(gUnknown_3000410)); + DmaFill32(3, 0, &gUnknown_3000420, sizeof(gUnknown_3000420)); +} + +s32 SA2_LABEL(sub_801F07C)(s32 p0, s32 p1, s32 p2, s32 p3, u8 *data, Func801F07C func) +{ + u8 dummy[4]; + u8 *dummy_p; + + s32 result; + s32 funcRes; + u8 *data1; + + if (data == NULL) + data = dummy; + + dummy_p = &dummy[0]; + dummy_p++; + data1 = dummy_p; + + funcRes = func(p0, p1, p2, data1); + + if (funcRes == 0) { + if (p3 > 0) { + result = 8 - (p0 % 8u); + } else { + result = (p0 % 8u) + 1; + } + } else if (funcRes == 8) { + *data = *data1; + + if (p3 > 0) { + result = ~(p0 % 8u); + } else { + result = (-8) | p0; + } + } else { + *data = *data1; + + if (funcRes > 0) { + funcRes--; + result = funcRes - (p0 % 8u); + } else { + result = funcRes + (p0 % 8u); + } + } + + return result; +} + +s32 SA2_LABEL(sub_801F100)(s32 p0, s32 p1, s32 p2, s32 p3, Func801F100 func) +{ + s32 result; + s32 funcRes = func(p0, p1, p2); + + if (funcRes == 0) { + if (p3 > 0) { + result = 8 - (p0 % 8u); + } else { + result = (p0 % 8u) + 1; + } + } else if (funcRes == 8) { + if (p3 > 0) { + result = ~(p0 % 8u); + } else { + result = (-8) | p0; + } + } else if (funcRes > 0) { + funcRes--; + result = funcRes - (p0 % 8u); + } else { + result = funcRes + (p0 % 8u); + } + + return result; +} diff --git a/sa1/src/game/stage/trapped_animals.c b/sa1/src/game/stage/trapped_animals.c new file mode 100644 index 0000000000..f6b3ca6725 --- /dev/null +++ b/sa1/src/game/stage/trapped_animals.c @@ -0,0 +1,402 @@ +#include "global.h" +#include "trig.h" + +#include "game/sa1_sa2_shared/globals.h" + +#include "game/stage/ui.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct { + s32 vramOffset; + u32 anim; + u32 variant; + s32 type; +} TrappedAnimalData; + +typedef struct { + s32 vramOffset; + s32 anim; + s32 variant; + s32 x; // x + s32 y; // y +} SpawnOptions; + +typedef struct { + Sprite s; + s32 x; + s32 y; + s16 unk38; + s8 flyingUp; +} FlyingAnimal; + +typedef struct { + Sprite s; + s32 x; + s32 y; + s16 moveSpeed; + s16 fallSpeed; + s8 bouncing; + u8 inAirTimer; +} BouncingAnimal; + +typedef struct { + Sprite s; + s32 x; + s32 y; + s16 moveSpeed; + s16 fallSpeed; + u8 inAirTimer; +} StaticAnimal; + +#define ANIMAL_VARIANTS_PER_ZONE 3 + +#define ANIMAL_GRAVITY Q(0.1875) +#define ANIMAL_BOUNCE_SPEED Q(4) +#define ANIMAL_BOUNCE_MOVE_SPEED Q(2) +#define ANIMAL_INITIAL_MOVE_SPEED Q(0.00390625) + +#if (GAME == GAME_SA1) +#define ANIMAL_TYPE_STATIC 0 +#define ANIMAL_TYPE_BOUNCING 1 +#define ANIMAL_TYPE_FLYING 2 +#elif (GAME == GAME_SA2) +#define ANIMAL_TYPE_STATIC 0 +#define ANIMAL_TYPE_FLYING 1 +#define ANIMAL_TYPE_BOUNCING 2 +#endif + +typedef void (*TrappedAnimalsFunc)(SpawnOptions *); + +static void CreateStaticAnimal(SpawnOptions *); +static void CreateFlyingAnimal(SpawnOptions *); +static void CreateBouncingAnimal(SpawnOptions *); + +static void Task_FlyingAnimal(void); +static void Task_StaticAnimalMain(void); +static void Task_BouncingAnimal(void); + +#define IS_ANIMAL_OUT_OF_CAM_RANGE(x, y) IS_OUT_OF_RANGE_3(x, y, 32, 32) + +#if (GAME == GAME_SA1) +const TrappedAnimalData sAnimsTrappedAnimals[NUM_ANIMAL_ZONES][ANIMAL_VARIANTS_PER_ZONE] = { + [ZONE_1] = { + { 192, SA1_ANIM_ANIMAL_SEA_OTTER, 0, ANIMAL_TYPE_STATIC}, + { 196, SA1_ANIM_ANIMAL_KOALA, 0, ANIMAL_TYPE_STATIC}, + { 200, SA1_ANIM_ANIMAL_KANGAROO, 0, ANIMAL_TYPE_BOUNCING}, + }, + [ZONE_2] = { + { 192, SA1_ANIM_ANIMAL_MOLE, 0, ANIMAL_TYPE_STATIC}, + { 196, SA1_ANIM_ANIMAL_SKUNK, 0, ANIMAL_TYPE_BOUNCING}, + { 200, SA1_ANIM_ANIMAL_ROBIN, 0, ANIMAL_TYPE_FLYING}, + }, + [ZONE_3] = { + { 192, SA1_ANIM_ANIMAL_LION, 0, ANIMAL_TYPE_STATIC}, + { 196, SA1_ANIM_ANIMAL_PEACOCK, 0, ANIMAL_TYPE_BOUNCING}, + { 200, SA1_ANIM_ANIMAL_PARROT, 0, ANIMAL_TYPE_FLYING}, + }, + [ZONE_4] = { + { 192, SA1_ANIM_ANIMAL_SEA_OTTER, 0, ANIMAL_TYPE_STATIC}, + { 196, SA1_ANIM_ANIMAL_SEAL, 0, ANIMAL_TYPE_STATIC}, + { 200, SA1_ANIM_ANIMAL_PENGUIN, 0, ANIMAL_TYPE_BOUNCING}, + }, + [ZONE_5] = { + { 192, SA1_ANIM_ANIMAL_ELEPHANT, 0, ANIMAL_TYPE_STATIC}, + { 196, SA1_ANIM_ANIMAL_LION, 0, ANIMAL_TYPE_STATIC}, + { 200, SA1_ANIM_ANIMAL_GORILLA, 0, ANIMAL_TYPE_BOUNCING}, + }, + [ZONE_6] = { + { 192, SA1_ANIM_ANIMAL_MOLE, 0, ANIMAL_TYPE_STATIC}, + { 196, SA1_ANIM_ANIMAL_DEER, 0, ANIMAL_TYPE_BOUNCING}, + { 200, SA1_ANIM_ANIMAL_RABBIT, 0, ANIMAL_TYPE_BOUNCING}, + } +}; +#elif (GAME == GAME_SA2) +static const TrappedAnimalData sAnimsTrappedAnimals[NUM_ANIMAL_ZONES][ANIMAL_VARIANTS_PER_ZONE] = { + [ZONE_1] = { + { 192, SA2_ANIM_ANIMAL_SEA_OTTER, 0, ANIMAL_TYPE_STATIC }, + { 196, SA2_ANIM_ANIMAL_KOALA, 0, ANIMAL_TYPE_STATIC }, + { 200, SA2_ANIM_ANIMAL_KANGAROO, 0, ANIMAL_TYPE_BOUNCING }, + }, + [ZONE_2] = { + { 192, SA2_ANIM_ANIMAL_MOLE, 0, ANIMAL_TYPE_STATIC }, + { 196, SA2_ANIM_ANIMAL_SKUNK, 0, ANIMAL_TYPE_BOUNCING }, + { 200, SA2_ANIM_ANIMAL_ROBIN, 0, ANIMAL_TYPE_FLYING }, + }, + [ZONE_3] = { + { 192, SA2_ANIM_ANIMAL_LION, 0, ANIMAL_TYPE_STATIC }, + { 196, SA2_ANIM_ANIMAL_PEACOCK, 0, ANIMAL_TYPE_BOUNCING }, + { 200, SA2_ANIM_ANIMAL_PARROT, 0, ANIMAL_TYPE_FLYING }, + }, + [ZONE_4] = { + { 192, SA2_ANIM_ANIMAL_SEA_OTTER, 0, ANIMAL_TYPE_STATIC }, + { 196, SA2_ANIM_ANIMAL_SEAL, 0, ANIMAL_TYPE_STATIC }, + { 200, SA2_ANIM_ANIMAL_PENGUIN, 0, ANIMAL_TYPE_BOUNCING }, + }, + [ZONE_5] = { + { 192, SA2_ANIM_ANIMAL_ELEPHANT, 0, ANIMAL_TYPE_STATIC }, + { 196, SA2_ANIM_ANIMAL_LION, 0, ANIMAL_TYPE_STATIC }, + { 200, SA2_ANIM_ANIMAL_GORILLA, 0, ANIMAL_TYPE_BOUNCING }, + }, + [ZONE_6] = { + { 192, SA2_ANIM_ANIMAL_MOLE, 0, ANIMAL_TYPE_STATIC }, + { 196, SA2_ANIM_ANIMAL_DEER, 0, ANIMAL_TYPE_BOUNCING }, + { 200, SA2_ANIM_ANIMAL_RABBIT, 0, ANIMAL_TYPE_BOUNCING }, + }, + [ZONE_7] = { + { 192, SA2_ANIM_ANIMAL_SEA_OTTER, 0, ANIMAL_TYPE_STATIC }, + { 196, SA2_ANIM_ANIMAL_KOALA, 0, ANIMAL_TYPE_STATIC }, + { 200, SA2_ANIM_ANIMAL_KANGAROO, 0, ANIMAL_TYPE_BOUNCING }, + }, +}; + +static TrappedAnimalsFunc const sTrappedAnimalSpawnFunctions[] = { + CreateStaticAnimal, + CreateFlyingAnimal, + CreateBouncingAnimal, +}; +#endif + +static void CreateFlyingAnimal(SpawnOptions *init) +{ + struct Task *t = TaskCreate(Task_FlyingAnimal, sizeof(FlyingAnimal), 0x2000, 0, NULL); + FlyingAnimal *animal = TASK_DATA(t); + Sprite *s; + animal->x = Q(init->x); + animal->y = Q(init->y); + animal->unk38 = 576; + animal->flyingUp = TRUE; + + s = &animal->s; + s->x = init->x; + s->y = init->y; + s->graphics.dest = (void *)OBJ_VRAM0 + (init->vramOffset * TILE_SIZE_4BPP); + s->oamFlags = SPRITE_OAM_ORDER(17); + s->graphics.size = 0; + s->graphics.anim = init->anim; + s->variant = init->variant; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +static void Task_FlyingAnimal(void) +{ + FlyingAnimal *animal = TASK_DATA(gCurTask); + Sprite *s = &animal->s; + + s32 sin, cos; + s32 x = animal->x; + s32 y = animal->y; + + if (animal->flyingUp) { + animal->unk38 += 6; + if (animal->unk38 > 640) { + animal->flyingUp = FALSE; + } + } else { + animal->unk38 -= 6; + if (animal->unk38 < 512) { + animal->flyingUp = TRUE; + } + } + +#if (GAME == GAME_SA1) + x += Div(COS(animal->unk38 & ONE_CYCLE), 20); + y += Div(SIN(animal->unk38 & ONE_CYCLE), 20); +#elif (GAME == GAME_SA2) + x += Div(COS(animal->unk38 & ONE_CYCLE), 20) >> 3; + y += Div(SIN(animal->unk38 & ONE_CYCLE), 20) >> 1; +#endif + + animal->x = x; + animal->y = y; + + s->x = I(x) - gCamera.x; + s->y = I(y) - gCamera.y; + + if (IS_ANIMAL_OUT_OF_CAM_RANGE(s->x, s->y)) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +static void CreateBouncingAnimal(SpawnOptions *init) +{ + struct Task *t = TaskCreate(Task_BouncingAnimal, sizeof(BouncingAnimal), 0x2000, 0, NULL); + BouncingAnimal *animal = TASK_DATA(t); + Sprite *s; + animal->x = Q(init->x); + animal->y = Q(init->y); + animal->moveSpeed = ANIMAL_INITIAL_MOVE_SPEED; + animal->fallSpeed = -ANIMAL_BOUNCE_SPEED; + animal->bouncing = FALSE; + animal->inAirTimer = 42; + + s = &animal->s; + s->x = init->x; + s->y = init->y; + s->graphics.dest = (void *)OBJ_VRAM0 + (init->vramOffset * TILE_SIZE_4BPP); + s->oamFlags = SPRITE_OAM_ORDER(17); + s->graphics.size = 0; + s->graphics.anim = init->anim; + s->variant = init->variant; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +static void Task_BouncingAnimal(void) +{ + BouncingAnimal *animal = TASK_DATA(gCurTask); + Sprite *s = &animal->s; + s32 y; + + animal->fallSpeed += ANIMAL_GRAVITY; + y = animal->y + animal->fallSpeed; + animal->y = y; + animal->x += animal->moveSpeed; + + if (animal->inAirTimer > 0) { + animal->inAirTimer--; + } else { + s32 clampedY = y + Q(SA2_LABEL(sub_801F07C)(I(animal->y), I(animal->x), 1, 8, NULL, SA2_LABEL(sub_801EE64))); + + // if hit floor + if (clampedY <= animal->y) { + animal->fallSpeed = -ANIMAL_BOUNCE_SPEED; + animal->y = clampedY; + if (animal->bouncing == FALSE) { + animal->moveSpeed = -ANIMAL_BOUNCE_MOVE_SPEED; + } + animal->bouncing = TRUE; + } + } + + s->x = I(animal->x) - gCamera.x; + s->y = I(animal->y) - gCamera.y; + + if (IS_ANIMAL_OUT_OF_CAM_RANGE(s->x, s->y)) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +static void CreateStaticAnimal(SpawnOptions *init) +{ + struct Task *t = TaskCreate(Task_StaticAnimalMain, sizeof(StaticAnimal), 0x2000, 0, NULL); + StaticAnimal *animal = TASK_DATA(t); + Sprite *s; + animal->x = Q(init->x); + animal->y = Q(init->y); + // lol + animal->moveSpeed = 0; + + animal->fallSpeed = -ANIMAL_BOUNCE_SPEED; + animal->inAirTimer = 42; + + s = &animal->s; + s->x = init->x; + s->y = init->y; + s->graphics.dest = (void *)OBJ_VRAM0 + (init->vramOffset * TILE_SIZE_4BPP); + s->oamFlags = SPRITE_OAM_ORDER(17); + s->graphics.size = 0; + s->graphics.anim = init->anim; + s->variant = init->variant; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +static void Task_StaticAnimalMain(void) +{ + StaticAnimal *animal = TASK_DATA(gCurTask); + Sprite *s = &animal->s; + s32 y; + + animal->fallSpeed += ANIMAL_GRAVITY; + y = animal->y + animal->fallSpeed; + animal->y = y; + animal->x += animal->moveSpeed; + + if (animal->inAirTimer > 0) { + animal->inAirTimer--; + } else { + s32 clampedY = y + Q(SA2_LABEL(sub_801F07C)(I(animal->y), I(animal->x), 1, 8, NULL, SA2_LABEL(sub_801EE64))); + + // if collided with floor + if (clampedY <= animal->y) { + animal->fallSpeed = 0; + animal->y = clampedY; + } + } + + s->x = I(animal->x) - gCamera.x; + s->y = I(animal->y) - gCamera.y; + + if (IS_ANIMAL_OUT_OF_CAM_RANGE(s->x, s->y)) { + TaskDestroy(gCurTask); + return; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void CreateTrappedAnimal(s16 x, s16 y) +{ + SpawnOptions options; + s8 zone = LEVEL_TO_ZONE(gCurrentLevel); + s8 type; + +#if ((GAME == GAME_SA2) || defined(BUG_FIX)) + if (zone > (s32)ARRAY_COUNT(sAnimsTrappedAnimals)) { + zone = ZONE_7; + } +#endif + + type = sAnimsTrappedAnimals[zone][gTrappedAnimalVariant].type; + options.vramOffset = sAnimsTrappedAnimals[zone][gTrappedAnimalVariant].vramOffset; + options.anim = sAnimsTrappedAnimals[zone][gTrappedAnimalVariant].anim; + options.variant = sAnimsTrappedAnimals[zone][gTrappedAnimalVariant].variant; + options.x = x; + options.y = y; + + // gTrappedAnimalVariant %= ANIMAL_VARIANTS_PER_ZONE; + if (++gTrappedAnimalVariant > (ANIMAL_VARIANTS_PER_ZONE - 1)) { + gTrappedAnimalVariant = 0; + } + +#if (GAME == GAME_SA1) + if (type != 0) { + if (type & ANIMAL_TYPE_BOUNCING) { + CreateBouncingAnimal(&options); + } else { + CreateFlyingAnimal(&options); + } + } else { + CreateStaticAnimal(&options); + } +#elif (GAME == GAME_SA2) + sTrappedAnimalSpawnFunctions[type](&options); +#endif +} diff --git a/sa1/src/game/stage/ui.c b/sa1/src/game/stage/ui.c new file mode 100644 index 0000000000..0d89af767e --- /dev/null +++ b/sa1/src/game/stage/ui.c @@ -0,0 +1,789 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "malloc_vram.h" +#include "data/ui_graphics.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/special_stage/main.h" +#include "game/gTask_03006240.h" +#include "game/multiplayer/mp_player.h" +#include "game/save.h" +#include "game/stage/ui.h" +#include "game/water_effects.h" + +#include "constants/songs.h" +#include "constants/ui_graphics.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +extern void sub_804C40C(void); // TODO: Move to correct Header! + +void StageUI_DrawTimer(u32 courseTime); +void sub_8053BAC(void); +void Task_8055458(void); +void Task_8055730(void); +void Task_8055798(void); +void Task_8055904(void); +void Task_8055998(void); +void Task_8055AA0(void); +void Task_8055B18(void); +void TaskDestructor_8055C38(struct Task *); +void TaskDestructor_StrcUI28_8055C4C(struct Task *); + +extern const char gUnknown_0865F174[]; +extern const char gUnknown_0865F178[]; + +#if 0 +// NOTE: In SA2 gMillisUnpackTable and gSecondsTable are stored as their literal values. +// ( '{5, 9}' instead of 'UI_DIGIT(5), UI_DIGIT(9)' ) +extern const u8 gMillisUnpackTable[60 * 2] = { + {UI_DIGIT(0), UI_DIGIT(0)}, + {UI_DIGIT(0), UI_DIGIT(2)}, + {UI_DIGIT(0), UI_DIGIT(3)}, + /* ... */ + {UI_DIGIT(9), UI_DIGIT(8)}, +}; + +// TODO: Rename gSecondsTable -> gSecondsUnpackTable in SA1, SA2 and (if it exists) SA3! +extern const u8 gSecondsTable[60 * 2] = { + {UI_DIGIT(0), UI_DIGIT(0)}, + {UI_DIGIT(0), UI_DIGIT(1)}, + {UI_DIGIT(0), UI_DIGIT(2)}, + /* ... */ + {UI_DIGIT(5), UI_DIGIT(9)}, +}; +#else +extern const u8 gMillisUnpackTable[60 * 2]; +extern const u8 gSecondsTable[60 * 2]; +#endif +extern const s16 sZoneTimeSecondsTable[]; +extern const u16 sZoneTimeMinutesTable[]; + +void CreateStageUI(void); +void Task_StageUIMain(void); +void Task_SpecialStageUIMain(void); +void CreateChaoHuntHUD(void); + +// (98.15%) https://decomp.me/scratch/LupqY +NONMATCH("asm/non_matching/game/stage/ui__Task_StageUIMain.inc", void Task_StageUIMain(void)) +{ + StageUI *ui; + GameOverB overB; + s32 remainder; + s32 remainder0; + StageUI_10 *unk10_A; + s32 i; + u8 *ptr; + s32 digitLives; + u8 lives; + + overB.qUnkA = -2; + overB.unkC = -1; + overB.unkE = 1; + overB.unk8 = 24; + overB.unk10 = 3; + overB.unk12 = 6; + overB.unk16 = 1; + + sub_80530CC((const char *)&gUnknown_0865F178[0], &overB); + + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + // Lives Character Icon + overB.unkC = DISPLAY_HEIGHT - 16; + overB.qUnkA = 2; + overB.unk10 = 1; + + overB.unk12 = gSelectedCharacter; + sub_80530CC((const char *)&gUnknown_0865F178[0], &overB); + } + + ui = TASK_DATA(gCurTask); + + if (gRingCount > 999) { + ui->digitsRings[0] = UI_DIGIT(9); + ui->digitsRings[1] = UI_DIGIT(9); + ui->digitsRings[2] = UI_DIGIT(9); + } else { + remainder = gRingCount; + + for (i = 0; i < 3; i++) { + remainder0 = Div(remainder, 10); + + // ui->digitsRings[2 - i] = UI_DIGIT(remainder - (remainder0 * 10)); + ui->digitsRings[2 - i] = UI_DIGIT(remainder - ((remainder0 << 3) + (remainder0 << 1))); + + remainder = remainder0; + } + } + // _0805379C + + TASK_SET_MEMBER(StageUI, gCurTask, u16, ringCount, gRingCount); + + (&TASK_GET_MEMBER(StageUI, gCurTask, StageUI_10, unk10))->unk9 = 0; + + remainder = gLevelScore; + + for (i = 8; i >= 0; i--) { + remainder0 = Div(remainder, 10); + + ui->digitsRings[i] = UI_DIGIT(remainder - ((remainder0 << 3) + (remainder0 << 1))); + + remainder = remainder0; + } + + StageUI_DrawTimer(gCourseTime); + + ptr = &TASK_GET_MEMBER(StageUI, gCurTask, u8, digitLives); + if (gNumLives > 9) { + digitLives = UI_DIGIT(9); + } else if (gNumLives != 0) { + digitLives = UI_DIGIT(gNumLives - 1); + } else { + digitLives = UI_DIGIT(0); + } + *ptr = digitLives; + + sub_8053BAC(); + + if ((LOADED_SAVE->timeLimitDisabled != TRUE) || (gGameMode != GAME_MODE_SINGLE_PLAYER)) { + if (gStageFlags & STAGE_FLAG__TIMER_REVERSED) { + if (gCourseTime < TIMER_WARNING_BEGIN) { + if ((Mod(gCourseTime, 60) == 0) && (gCourseTime != 0)) { + m4aSongNumStart(SE_TIMER); + } + } + } else { + if (gCourseTime > (MAX_COURSE_TIME - TIMER_WARNING_BEGIN)) { + if ((Mod(gCourseTime, 60) == 0) && (gCourseTime < MAX_COURSE_TIME)) { + m4aSongNumStart(SE_TIMER); + } + } + } + } +} +END_NONMATCH + +void sub_80538BC(void) +{ + Strc_80528AC sp00; + const UiGraphics *gfx; + + sp00.uiGfxID = UIGFX_ASCII_CHARS; + sp00.unk2B = 0; + + gfx = &gUiGraphics[UIGFX_ASCII_CHARS]; + sp00.tiles = gfx->tiles + 224 * TILE_SIZE_4BPP; + sp00.palette = gfx->palette; + sp00.vramC = VRAM_RESERVED_UI_DIGITS_D; + sp00.tilesSize = 22 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = gfx->unk8; + sp00.unk0.unk8 = gfx->unkC; + sp00.unk0.unk9 = gfx->unk10; + sp00.unk0.unkA = gfx->unk14; + sp00.unk0.unkB = gfx->unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_ASCII_CHARS; + sp00.unk2B = 0; + sp00.tiles = gfx->tiles + 32 * TILE_SIZE_4BPP; + sp00.palette = gfx->palette; + sp00.vramC = VRAM_RESERVED_UI_DIGITS_C; + sp00.tilesSize = 22 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.unk2A = 9; + sp00.unk0.unk4 = gfx->unk8; + sp00.unk0.unk8 = gfx->unkC; + sp00.unk0.unk9 = gfx->unk10; + sp00.unk0.unkA = gfx->unk14; + sp00.unk0.unkB = gfx->unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_UI_ICON_SONIC + gSelectedCharacter; + sp00.unk2B = 1; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = (2 * 2) * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = gSelectedCharacter; + sp00.vramC = VRAM_RESERVED_UI_DIGITS_A; + sp00.unk2A = 9; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_UI_ICON_RING; + sp00.unk2B = 3; + sp00.tiles = gUiGraphics[UIGFX_UI_ICON_RING].tiles; + sp00.palette = gUiGraphics[UIGFX_UI_ICON_RING].palette; + sp00.tilesSize = (4 * 4) * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = VRAM_RESERVED_UI_DIGITS_B; + sp00.unk2A = 9; + sp00.unk0.unk4 = gUiGraphics[UIGFX_UI_ICON_RING].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_UI_ICON_RING].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_UI_ICON_RING].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_UI_ICON_RING].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_UI_ICON_RING].unk18; + sub_80528AC(&sp00); +} + +void StageUI_DrawTimer(u32 courseTime) +{ + StageUI *ui = TASK_DATA(gCurTask); + StageUI_20 *unk20 = &ui->unk20; + + // Offset to red digits in VRAM, when "TIME UP" enabled + s16 redOffset; + + if (gStageFlags & STAGE_FLAG__TIMER_REVERSED) { + if ((gCourseTime < TIME(1, 0)) && (gStageTime & 0x10)) { + redOffset = 11; + } else { + redOffset = 0; + } + } else { + if ((gCourseTime > TIME(9, 0)) && (gStageTime & 0x10)) { + redOffset = 11; + } else { + redOffset = 0; + } + } + + if ((LOADED_SAVE->timeLimitDisabled == TRUE) && (gGameMode == GAME_MODE_SINGLE_PLAYER)) { + redOffset = 0; + } + + if (courseTime >= MAX_COURSE_TIME) { + // Frames + unk20->unk6 = UI_DIGIT(redOffset + 9); + unk20->unk5 = UI_DIGIT(redOffset + 9); + + // Seconds + unk20->unk3 = UI_DIGIT(redOffset + 9); + unk20->unk2 = UI_DIGIT(redOffset + 5); + + // Minutes + unk20->unk0 = UI_DIGIT(redOffset + 9); + } else { + s32 seconds = Div(courseTime, 60); + s32 minutes = Div(seconds, 60); + s32 r2; + + seconds -= sZoneTimeSecondsTable[minutes]; + r2 = sZoneTimeSecondsTable[seconds]; + r2 = courseTime - r2; + r2 -= sZoneTimeMinutesTable[minutes]; + + // Frames + r2 *= 2; + unk20->unk6 = redOffset + gMillisUnpackTable[r2 + 1]; + unk20->unk5 = redOffset + gMillisUnpackTable[r2 + 0]; + +#ifndef NON_MATCHING + { + register const u8 *ptr asm("r1"); + unk20->unk3 = redOffset + gSecondsTable[seconds * 2 + 1]; + ptr = &gSecondsTable[seconds * 2 + 0]; + unk20->unk2 = redOffset + *ptr; + } +#else + // Seconds + unk20->unk3 = redOffset + gSecondsTable[seconds * 2 + 1]; + unk20->unk2 = redOffset + gSecondsTable[seconds * 2 + 0]; +#endif + + // Minutes + unk20->unk0 = redOffset + gSecondsTable[minutes * 2 + 1]; + } + + // Colons + unk20->unk1 = UI_DIGIT(redOffset + 10); + unk20->unk4 = UI_DIGIT(redOffset + 10); +} + +// (95.64%) https://decomp.me/scratch/qd1UL +NONMATCH("asm/non_matching/game/stage/ui__sub_8053BAC.inc", void sub_8053BAC(void)) +{ + struct Task *t = gCurTask; + StageUI *ui = TASK_DATA(t); + u8 *ptr = &ui->digitsRings[0]; + u16 *ptr_r8 = &ui->unk48; + u8 r7 = ui->unk48; + GameOverB overB; + u8 i; + + overB.unkC = 5; + overB.unk12 = 6; + overB.unk8 = 16; + overB.unk10 = 0; + overB.unk16 = 1; + + if (gRingCount <= 9) { + overB.qUnkA = 9; + overB.unkE = 1; + + if (gRingCount == 0) { + u8 r4 = r7 + 1; + sub_80530CC((const char *)&gUnknown_0865F174[r7 >> 3], &overB); + + r4 %= 32u; + + TASK_SET_MEMBER(StageUI, gCurTask, u16, unk48, r4); + } else { + sub_80530CC((const char *)&ui->digitsRings[2], &overB); + } + } else if (gRingCount <= 99) { + overB.qUnkA = 5; + overB.unkE = 2; + sub_80530CC((const char *)&ui->digitsRings[1], &overB); + } else { + // _08053C5C + overB.qUnkA = 1; + overB.unkE = 3; + sub_80530CC((const char *)&ui->digitsRings[0], &overB); + } + // _08053C6C + + ptr += 0x10; + overB.unkC = -2; + + for (i = 0; i < 10; i++) { + if (ptr[i] != 0x20) { + break; + } + } + + if (gLevelScore != 0) { + s32 r1; + overB.unkE = (r1 = 9 - i); + overB.qUnkA = 0x51 - (r1 * 8); + sub_80530CC((const char *)&ptr[i], &overB); + } else { + // _08053CBC + overB.unkE = 1; + overB.qUnkA = 73; + sub_80530CC((const char *)&gUnknown_0865F178[0], &overB); + } + // _08053CCC + + ptr += 0x10; + overB.qUnkA = 0x19; + overB.unkC = 12; + overB.unkE = 7; + sub_80530CC((const char *)ptr, &overB); + + if (gGameMode == GAME_MODE_SINGLE_PLAYER) { + // Num Lives + ptr += 0x10; + overB.qUnkA = 22; + overB.unkC = DISPLAY_HEIGHT - 17; + overB.unkE = 1; + sub_80530CC((const char *)ptr, &overB); + } +} +END_NONMATCH + +// (99.48%) https://decomp.me/scratch/Sg21j +NONMATCH("asm/non_matching/game/stage/ui__Task_SpecialStageUIMain.inc", void Task_SpecialStageUIMain(void)) +{ + StageUI *ui = TASK_DATA(gCurTask); + u8 r7 = ui->unk48; + GameOverB overB; + StageUI_10 *unk10; + s32 remainder; + s32 remainder0; + s32 i; + s32 sb_32; + s16 sb; + s16 sl; + s16 r4; + sb_32 = ui->unk4C + 1; + + sb = sb_32; + ui->unk4C = sb_32; + sl = 114; + r4 = 90; + + if (sb >= 10 && sb < 30) { + overB.unkC = Div((sb - 10) << 6, 20) - 70; + } else if (sb >= 30) { + overB.unkC = -6; + } else { + overB.unkC = -70; + } + + overB.qUnkA = r4 + 4; + overB.unkE = 1; + overB.unk8 = 24; + overB.unk10 = 3; + overB.unk12 = 10; + overB.unk16 = 1; + + sub_80530CC(gUnknown_0865F178, &overB); + +#ifndef NON_MATCHING + ui = TASK_DATA(gCurTask); +#endif + + if (gSpecialStageCollectedRings > 999) { + ui->digitsRings[0] = UI_DIGIT(9); + ui->digitsRings[1] = UI_DIGIT(9); + ui->digitsRings[2] = UI_DIGIT(9); + } else { + // _08053DF0 + remainder = gSpecialStageCollectedRings; + for (i = 0; i < (s32)ARRAY_COUNT(ui->digitsRings); i++) { + remainder0 = Div(remainder, 10); + + ui->digitsRings[2 - i] = UI_DIGIT(remainder - ((remainder0 << 3) + (remainder0 << 1))); + + remainder = remainder0; + } + } + // _08053E24 + + TASK_SET_MEMBER(StageUI, gCurTask, u16, ringCount, gSpecialStageCollectedRings); + + if (sb >= 20 && sb < 40) { + overB.unkC = Div((sb - 20) << 6, 20) - 64; + } else if (sb >= 40) { + overB.unkC = 0; + } else { + overB.unkC = -64; + } + // _08053E6E+0x2 + + overB.unk12 = 6; + overB.unk8 = 16; + overB.unk10 = 0; + overB.unk16 = 1; + + if (gSpecialStageCollectedRings < 10) { + overB.qUnkA = r4 + Q(12. / 256.); + overB.unkE = 1; + + if (gSpecialStageCollectedRings == 0) { + sub_80530CC((const char *)&gUnknown_0865F174[r7++ >> 3], &overB); + + r7 %= 32u; + TASK_SET_MEMBER(StageUI, gCurTask, u16, unk48, r7); + } else { + sub_80530CC((const char *)&ui->digitsRings[2], &overB); + } + } else if (gSpecialStageCollectedRings < 100) { + // _08053EE2+0x4 + + overB.qUnkA = r4 + 8; + overB.unkE = 2; + + sub_80530CC((const char *)&ui->digitsRings[1], &overB); + } else { + // _08053EFC + overB.qUnkA = r4 + 4; + overB.unkE = 3; + + sub_80530CC((const char *)&ui->digitsRings[0], &overB); + } + // _08053F10 + unk10 = &TASK_GET_MEMBER(StageUI, gCurTask, StageUI_10, unk10); + + if (gSpecialStageTargetRings > 999) { + unk10->unk0[0] = UI_DIGIT(9); + unk10->unk0[1] = UI_DIGIT(9); + unk10->unk0[2] = UI_DIGIT(9); + } else { + remainder = gSpecialStageTargetRings; + for (i = 0; i < (s32)ARRAY_COUNT(unk10->unk0); i++) { + remainder0 = Div(remainder, 10); + + unk10->unk0[2 - i] = UI_DIGIT(remainder - ((remainder0 << 3) + (remainder0 << 1))); + + remainder = remainder0; + } + } + // _08053F68 + + TASK_SET_MEMBER(StageUI, gCurTask, u16, ringCount, gSpecialStageTargetRings); + + if (sb >= 15 && sb < 35) { + overB.unkC = Div((sb - 15) << 6, 20) - 52; + } else if (sb >= 35) { + overB.unkC = 12; + } else { + overB.unkC = -52; + } + // _08053FB2+0x2 + + overB.unk12 = 6; + overB.unk8 = 16; + overB.unk10 = 0; + overB.unk16 = 1; + + if (gSpecialStageTargetRings < 10) { + overB.qUnkA = sl + Q(12. / 256.); + overB.unkE = 1; + + if (gSpecialStageTargetRings == 0) { + sub_80530CC((const char *)&gUnknown_0865F174[r7++ >> 3], &overB); + + r7 %= 32u; + TASK_SET_MEMBER(StageUI, gCurTask, u16, unk48, r7); + } else { + sub_80530CC((const char *)&unk10->unk0[2], &overB); + } + } else if (gSpecialStageTargetRings < 100) { + overB.qUnkA = sl + 8; + overB.unkE = 2; + sub_80530CC((const char *)&unk10->unk0[1], &overB); + } else { + overB.qUnkA = sl + 4; + overB.unkE = 3; + sub_80530CC((const char *)&unk10->unk0[0], &overB); + } +} +END_NONMATCH + +void sub_8054068(void) +{ + Strc_80528AC sp00; + const UiGraphics *gfx; + + sp00.uiGfxID = UIGFX_ASCII_CHARS; + sp00.unk2B = 0; + + gfx = &gUiGraphics[UIGFX_ASCII_CHARS]; + sp00.tiles = gfx->tiles + 124 * TILE_SIZE_4BPP; + sp00.palette = gfx->palette; + sp00.vramC = VRAM_RESERVED_UI_DIGITS_F; + sp00.tilesSize = 6 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.unk2A = 9; + sp00.unk0.unk4 = gfx->unk8; + sp00.unk0.unk8 = gfx->unkC; + sp00.unk0.unk9 = gfx->unk10; + sp00.unk0.unkA = gfx->unk14; + sp00.unk0.unkB = gfx->unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_ASCII_CHARS; + sp00.unk2B = 0; + sp00.tiles = gfx->tiles + 32 * TILE_SIZE_4BPP; + sp00.palette = gfx->palette; + sp00.vramC = VRAM_RESERVED_UI_DIGITS_E; + sp00.tilesSize = 22 * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = gfx->unk8; + sp00.unk0.unk8 = gfx->unkC; + sp00.unk0.unk9 = gfx->unk10; + sp00.unk0.unkA = gfx->unk14; + sp00.unk0.unkB = gfx->unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_CHAR_SP_STAGE_RINGS_BG; + sp00.unk2B = 3; + sp00.tiles = gUiGraphics[UIGFX_CHAR_SP_STAGE_RINGS_BG].tiles; + sp00.palette = gUiGraphics[UIGFX_CHAR_SP_STAGE_RINGS_BG].palette; + sp00.tilesSize = (8 * 4) * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 10; + sp00.vramC = VRAM_RESERVED_UI_DIGITS_G; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_CHAR_SP_STAGE_RINGS_BG].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_CHAR_SP_STAGE_RINGS_BG].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_CHAR_SP_STAGE_RINGS_BG].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_CHAR_SP_STAGE_RINGS_BG].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_CHAR_SP_STAGE_RINGS_BG].unk18; + sub_80528AC(&sp00); +} + +void CreateStageUI(void) +{ +#ifndef NON_MATCHING + register void *dtor asm("r1") = 0; + StageUI_20 *unk20 = NULL; + register struct Task *t asm("r1") = TaskCreate(Task_StageUIMain, sizeof(StageUI), 0x2180, 0, dtor); +#else + void *dtor = 0; + StageUI_20 *unk20 = NULL; + struct Task *t = TaskCreate(Task_StageUIMain, sizeof(StageUI), 0x2180, 0, dtor); +#endif + StageUI *ui = TASK_DATA(t); + + ui->unk40 = 0; + + // Colons + ui = TASK_DATA(t); + unk20 = &ui->unk20; + unk20->unk1 = 42; + unk20->unk4 = 42; + + UiGfxStackInit(); + sub_80538BC(); +} + +// https://decomp.me/scratch/3QSHy +void CreateSpecialStageUI(void) +{ +#ifndef NON_MATCHING + register void *dtor asm("r1") = 0; + register struct Task *t asm("r1"); +#else + void *dtor = 0; + struct Task *t; +#endif + s32 zero; + StageUI *ui; + + t = TaskCreate(Task_SpecialStageUIMain, sizeof(StageUI), 0x1180, (zero = 0), dtor); + + ui = TASK_DATA(t); + ui->unk40 = zero; + +#ifndef NON_MATCHING + ui = TASK_DATA(t); +#endif + ui->unk4C = zero; + + UiGfxStackInit(); + sub_8054068(); +} + +void sub_8054238(void) { } + +bool8 sub_805423C(StrcUi_805423C *param0) +{ + u16 r2; + + if (param0->unk2 != 0) { + gDispCnt |= DISPCNT_WIN1_ON; + } else { + gDispCnt |= DISPCNT_WIN0_ON; + } + + if (param0->unkA & 0x1) { + gBldRegs.bldCnt = BLDCNT_TGT1_ALL | BLDCNT_TGT2_ALL; + gBldRegs.bldAlpha = 16; + } else if (param0->unkA & 0x10) { + gBldRegs.bldCnt = BLDCNT_TGT2_BD | BLDCNT_TGT1_ALL; + gBldRegs.bldAlpha = 0; + } else if ((u8)param0->unkA == 0) { + gBldRegs.bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3; + gBldRegs.bldAlpha = 0; + } else if (param0->unkA & 0x8) { + gBldRegs.bldCnt = BLDCNT_TGT1_ALL | BLDCNT_TGT2_ALL; + } + + if (param0->unk2 != 0) { + gWinRegs[WINREG_WIN1H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN1V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] |= WININ_WIN1_ALL; + gWinRegs[WINREG_WINOUT] |= (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ); + } else { + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] |= WININ_WIN0_ALL; + gWinRegs[WINREG_WINOUT] |= (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ); + } + + if (param0->unk4 & 0xC) { + gBldRegs.bldCnt |= 0x80; + } else { + gBldRegs.bldCnt |= 0xC0; + } + + if (param0->unk4 & (WININ_WIN0_BG0 | WININ_WIN0_BG2)) { + gBldRegs.bldY = param0->unk6 >> 8; + } else { + gBldRegs.bldY = 32 - (param0->unk6 >> 8); + } + + r2 = param0->unk6; + + if (gBldRegs.bldY >= 32) { + gBldRegs.bldY = 32; + } + + HALVE(gBldRegs.bldY); + + if (param0->unk0 != 0) { + r2 = param0->unk8; + + if (param0->unk0 >= param0->unk8) { + param0->unk0 -= r2; + } else { + param0->unk0 = 0; + } + + return FALSE; + } else { + param0->unk6 = r2 + param0->unk8; + + if (param0->unk6 >= Q(32)) { + param0->unk6 = Q(32); + return TRUE; + } + + return FALSE; + } +} + +void sub_80543A4(StrcUi_805423C *param0) +{ + u16 r2; + + if (param0->unk2 != 0) { + gDispCnt |= DISPCNT_WIN1_ON; + } else { + gDispCnt |= DISPCNT_WIN0_ON; + } + + if (param0->unkA & 0x1) { + gBldRegs.bldCnt = BLDCNT_TGT1_ALL | BLDCNT_TGT2_ALL; + gBldRegs.bldAlpha = 16; + } else if ((u8)param0->unkA == 0) { + gBldRegs.bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3; + gBldRegs.bldAlpha = 0; + } + + if (param0->unk2 != 0) { + gWinRegs[WINREG_WIN1H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN1V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] |= WININ_WIN1_ALL; + gWinRegs[WINREG_WINOUT] |= (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ); + } else { + gWinRegs[WINREG_WIN0H] = WIN_RANGE(0, DISPLAY_WIDTH); + gWinRegs[WINREG_WIN0V] = WIN_RANGE(0, DISPLAY_HEIGHT); + gWinRegs[WINREG_WININ] |= WININ_WIN0_ALL; + gWinRegs[WINREG_WINOUT] |= (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ); + } + + if (param0->unk4 & 0xC) { + gBldRegs.bldCnt |= 0x80; + } else { + gBldRegs.bldCnt |= 0xC0; + } + + if (param0->unk4 & (WININ_WIN0_BG0 | WININ_WIN0_BG2)) { + gBldRegs.bldY = param0->unk6 >> 8; + } else { + gBldRegs.bldY = 32 - (param0->unk6 >> 8); + } + + if (gBldRegs.bldY >= 32) { + gBldRegs.bldY = 32; + } + + HALVE(gBldRegs.bldY); +} diff --git a/sa1/src/game/stage/ui_rendering.c b/sa1/src/game/stage/ui_rendering.c new file mode 100644 index 0000000000..02215727a8 --- /dev/null +++ b/sa1/src/game/stage/ui_rendering.c @@ -0,0 +1,738 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "game/gTask_03006240.h" +#include "game/stage/ui.h" + +/* TODO: I guess this can be called ui_rendering.c or something like that? */ + +void Task_80536D4(void); +void TaskDestructor_80536D8(struct Task *t); + +// TODO: make static +struct Task *gTask_03006240 = NULL; +u8 tempFiller_03006244[0xC] = {}; +struct Strc_3006250 gUnknown_03006250[10] = {}; +u8 tempFiller_030062B8[0x8] = {}; +struct Strc_30063F0 gUnknown_030063C0 = {}; +u8 tempFiller_030062E4[0xC] = {}; +struct Strc_30063F0 *gUnknown_030063F0 = NULL; + +typedef struct { + u16 unk0; + u16 unk2; + u16 unk4; +} Strc_805345C; + +void sub_80528AC(Strc_80528AC *param0) +{ + struct Strc0 *strc0; + GraphicsData *gfx; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param0->unk2B]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param0->unk2B]; +#endif + + strc0->unk4 = param0->unk0.unk4; + strc0->unk8 = param0->unk0.unk8; + strc0->unk9 = param0->unk0.unk9; + strc0->unkA = param0->unk0.unkA; + strc0->unkB = param0->unk0.unkB; + + if (param0->unk2A & 0x8) { + if (param0->unk2A & 0x1) { + gfx = UiGfxStackPop(); + + if (gfx != NULL) { + gfx->src = param0->tiles; + gfx->dest = param0->vramC; + gfx->size = param0->tilesSize; + + ADD_TO_GRAPHICS_QUEUE(gfx); + } + } + + if (param0->unk2A & 0x4) { + DmaCopy16(3, param0->palette, &gObjPalette[param0->unk28 * 16], param0->paletteSize); + gFlags |= FLAGS_UPDATE_SPRITE_PALETTES; + } + + strc0->unk0 = GET_TILE_NUM_COMMON(param0->vramC, 32); + } else { + void *vram = (param0->uiGfxID & 0x80) ? BG_CHAR_ADDR_FROM_BGCNT(param0->unk29) + 0 + : BG_CHAR_ADDR_FROM_BGCNT(param0->unk29) + TILE_SIZE_4BPP; + + void *layout = ((u8 *)BG_VRAM + ((gBgCntRegs[param0->unk29] & BGCNT_SCREENBASE_MASK) << 3)); + + if (param0->unk2A & 0x1) { + gfx = UiGfxStackPop(); + + if (gfx != NULL) { + gfx->src = param0->tiles; + gfx->dest = vram; + gfx->size = param0->tilesSize; + + ADD_TO_GRAPHICS_QUEUE(gfx); + } + } + + if (param0->unk2A & 0x10) { + gfx = UiGfxStackPop(); + + if (gfx != NULL) { + gfx->src = param0->layout; + gfx->dest = layout; + gfx->size = param0->layoutSize; + + ADD_TO_GRAPHICS_QUEUE(gfx); + } + } + + if (param0->unk2A & 0x4) { + DmaCopy16(3, param0->palette, &gBgPalette[param0->unk28 * 16], param0->paletteSize); + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; + } + } +} + +// (86.06%) https://decomp.me/scratch/3jubn +NONMATCH("asm/non_matching/game/gTask_3006240__sub_8052AA4.inc", void sub_8052AA4(void)) +{ + struct Strc_30063F0 *list = &gUnknown_030063C0; + struct Strc_30063F0 *curr; + struct Strc0 *strc0; + Task_3006240 *strc; + s32 vramOffset; + void *vram; + u32 i, j; + + while (list->next != NULL) { + curr = list->next; + list = curr; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[curr->unk1C]; +#else + strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[curr->unk1C]; +#endif + vramOffset = (curr->unk14 << 6); + vramOffset += ((curr->unk10 + list->unk20) << 1); + vramOffset += ((gBgCntRegs[curr->unk18] & BGCNT_SCREENBASE(0x1F)) << 3); + vram = (u8 *)BG_VRAM + vramOffset; + + for (i = 0; i < curr->unk20; i++) { + u16 *dest; + for (j = 0, dest = vram + (strc0->unk4 * j); j < strc0->unkB; dest += 0x20, j++) { + *dest = (strc0->unk4 * FROM_UI_DIGIT(curr->unk4[j])) + i; + } + } + } + + list->next = gUnknown_030063F0; + gUnknown_030063F0->next = gUnknown_030063C0.next; + gUnknown_030063C0.next = NULL; +} +END_NONMATCH + +NONMATCH("asm/non_matching/game/gTask_3006240__unused_8052B84.inc", void unused_8052B84(s32 param0, u16 param1, u16 param2, u8 param3)) { } +END_NONMATCH + +void sub_8052C84(const char *param0, Strc_8052C84 *param1) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack; + OamData *oamStack2; + s32 a, b; + s32 sp08; + s32 r0; + s32 sl; + s32 r8; + s32 i; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + + if (((u16)param1->unk4 == 0) && (param1->unk0 == Q(1) && param1->unk2 == Q(1))) { + r8 = 0; + r0 = 0; + } else { + SA2_LABEL(sub_80047A0)(param1->unk4, param1->unk0, param1->unk2, param1->unk6); + r8 = param1->unk6; + r0 = 3; + } + + { + + for (i = 0, sl = r0 << 8; i < param1->byteCount; i++) { + OamData *oam = OamMalloc((param1->unk8) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = ((strc0->unk9 << 14)) | (param1->unkC & 0xFF) | (sl) | 0x400; + oam->all.attr1 = ((strc0->unk8 << 14) | (r8 << 9)) | ((((strc0->unkA * i) << 3) + param1->unkA) & 0x1FF); + a = (param1->unk12 << 12); + b = strc0->unk4 * FROM_UI_DIGIT(param0[i]); + a += strc0->unk0 + b; + oam->all.attr2 = +a; + } + } +} + +// (97.98%) https://decomp.me/scratch/z75P3 +NONMATCH("asm/non_matching/game/gTask_3006240__sub_8052D64.inc", void sub_8052D64(u8 *param0, Strc_8052C84 *param1)) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack; + OamData *oamStack2; + s32 a; + s32 sp08, r9; + s32 r8; + s32 r2; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + + SA2_LABEL(sub_80047A0)(param1->unk4, param1->unk0, param1->unk2, param1->unk6); + + { + s32 i; + r8 = param1->unk6; + r9 = 3; + + oamStack = &sp00; + oamStack->all.attr0 = ((r9 << 8) | (strc0->unk9 << 14)) | (param1->unkC & 0xFF); + oamStack->all.attr2 = (param1->unk12 << 12) | (strc0->unk0 & 0x3FF); + + for (i = 0, oamStack2 = &sp00; i < param1->byteCount; i++) { + OamData *oam = OamMalloc((param1->unk8) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = oamStack2->all.attr0; + oam->all.attr1 = ((strc0->unk8 << 14) | (r8 << 9)) | ((((strc0->unkA * i) << 3) + param1->unkA) & 0x1FF); + oam->all.attr2 = oamStack2->all.attr2 + strc0->unk4 * FROM_UI_DIGIT(param0[i]); + } + } +} +END_NONMATCH + +void sub_8052E40(u8 *param0, Strc_8052C84 *param1) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack, *oamStack2; + s32 a; + s32 sp08, r9; + s32 sl; + s32 r2; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + + sl = param1->unk6; + + { + s32 i; + sl = param1->unk6; + r9 = 3; + for (i = 0; i < param1->byteCount; i++) { + OamData *oam = OamMalloc((param1->unk8) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = (strc0->unk9 << 14) + (r9 << 8) + (param1->unkC & 0x1FF); + oam->all.attr1 = (strc0->unk8 << 14) + (sl << 9) + ((param1->unk0 * i) >> 5) + param1->unkA; + r2 = (param1->unk12 << 12); + r2 += strc0->unk0 + strc0->unk4 * FROM_UI_DIGIT(param0[i]); + oam->all.attr2 = +r2; + } + } +} + +// Unused? +// (88.18%) https://decomp.me/scratch/i72oQ +NONMATCH("asm/non_matching/game/gTask_3006240__sub_8052EF0.inc", void sub_8052EF0(s32 param0, Strc_8052C84 *param1)) +{ + s32 byteCount = 0; + char sp00[10]; + s32 i; + + param1->byteCount = byteCount; + + for (i = (s32)ARRAY_COUNT(sp00) - 1; i >= 0; i--) { + s16 remainder = Div(param0, 10); + sp00[i] = (param0 - ((remainder << 3) + (remainder << 1))) + 0x30; + param0 = remainder; + param1->byteCount++; + } + + for (i = 0; (i < (s32)ARRAY_COUNT(sp00)) && (sp00[i] == 0x30); i++) { + byteCount++; + param1->byteCount--; + } + + param1->unkA -= (param1->unk0 * (param1->byteCount - 1)) >> 5; + + sub_8052C84(&sp00[byteCount], param1); +} +END_NONMATCH + +// (97.64%) https://decomp.me/scratch/8KTZ5 +NONMATCH("asm/non_matching/game/gTask_3006240__sub_8052F78.inc", void sub_8052F78(const char *param0, GameOverB *param1)) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack, *oamStack2; + s32 a; + s32 sp08, r9; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + r9 = strc0->unkA * 8; + sp08 = strc0->unkB * 8; + + oamStack = &sp00; + a = (strc0->unk9 << 14) + (unsigned char)param1->unkC + 0x400; + oamStack->all.attr0 = a; + oamStack->all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + oamStack->all.attr2 = (param1->unk12 << 12) | (strc0->unk0 & 0x3FF); + + if (param1->unk16 != 0) { + s32 i; + for (i = 0; i < param1->unkE; i++) { + OamData *oam = OamMalloc((param1->unk8) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r9; + oam->all.attr2 = sp00.all.attr2 + FROM_UI_DIGIT(param0[i]) * strc0->unk4; + } + } else { + s32 i = 0; + for (i = 0; i < param1->unk14; i++) { + s32 w; + sp00.all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + w = ((s32)(-param1->qUnkA & 0x1FF) >> 7); + while (w < param1->unkE) { + OamData *oam = OamMalloc((param1->unk8) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r9; + + oam->all.attr2 = sp00.all.attr2 + FROM_UI_DIGIT(param0[w]) * strc0->unk4; + w++; + } + sp00.all.attr0 = sp08 + sp00.all.attr0; + } + } +} +END_NONMATCH + +// (97.61%) https://decomp.me/scratch/qWdSy +NONMATCH("asm/non_matching/game/gTask_3006240__sub_80530CC.inc", void sub_80530CC(const char *param0, GameOverB *param1)) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack, *oamStack2; + s32 a; + s32 sp08, r9; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + r9 = strc0->unkA * 8; + sp08 = strc0->unkB * 8; + + oamStack = &sp00; + a = (strc0->unk9 << 14) + (unsigned char)param1->unkC; + oamStack->all.attr0 = a; + oamStack->all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + oamStack->all.attr2 = (param1->unk12 << 12) | (strc0->unk0 & 0x3FF); + + if (param1->unk16 != 0) { + s32 i; + for (i = 0; i < param1->unkE; i++) { + OamData *oam = OamMalloc((param1->unk8) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r9; + oam->all.attr2 = sp00.all.attr2 + FROM_UI_DIGIT(param0[i]) * strc0->unk4; + } + } else { + s32 i = 0; + for (i = 0; i < param1->unk14; i++) { + s32 w; + sp00.all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + w = ((s32)(-param1->qUnkA & 0x1FF) >> 7); + while (w < param1->unkE) { + OamData *oam = OamMalloc((param1->unk8) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r9; + + oam->all.attr2 = sp00.all.attr2 + FROM_UI_DIGIT(param0[w]) * strc0->unk4; + w++; + } + sp00.all.attr0 = sp08 + sp00.all.attr0; + } + } +} +END_NONMATCH + +// (97.91%) https://decomp.me/scratch/3w39X +NONMATCH("asm/non_matching/game/gTask_3006240__sub_805321C.inc", void sub_805321C(u8 *param0, GameOverB *param1)) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack, *oamStack2; + s32 a; + s32 sp08, r9; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + r9 = strc0->unkA * 8; + sp08 = strc0->unkB * 8; + + oamStack = &sp00; + a = (strc0->unk9 << 14) + (unsigned char)param1->unkC; + oamStack->all.attr0 = a; + oamStack->all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + oamStack->all.attr2 = (param1->unk12 << 12) | (strc0->unk0 & 0x3FF); + + if (param1->unk16 != 0) { + s32 i; + for (i = 0; i < param1->unkE; i++) { + OamData *oam = OamMalloc((param1->unk8 + i) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r9; + oam->all.attr2 = sp00.all.attr2 + FROM_UI_DIGIT(param0[i]) * strc0->unk4; + } + } else { + s32 i = 0; + for (i = 0; i < param1->unk14; i++) { + s32 w; + sp00.all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + w = ((s32)(-param1->qUnkA & 0x1FF) >> 7); + while (w < param1->unkE) { + OamData *oam = OamMalloc((param1->unk8 + w) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r9; + + oam->all.attr2 = sp00.all.attr2 + FROM_UI_DIGIT(param0[w]) * strc0->unk4; + w++; + } + sp00.all.attr0 = sp08 + sp00.all.attr0; + } + } +} +END_NONMATCH + +// TODO: The 2nd parameter's type is just a guess! +// +// (94.91%) https://decomp.me/scratch/B60WP +NONMATCH("asm/non_matching/game/gTask_3006240__sub_8053370.inc", void sub_8053370(u8 *param0, GameOverB *param1)) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack, *oamStack2; + s32 i; + s32 a; + s32 r8; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + r8 = strc0->unkA * 8; + + oamStack = &sp00; + a = (strc0->unk9 << 14) + (unsigned char)param1->unkC; + oamStack->all.attr0 = a; + oamStack->all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + oamStack->all.attr2 = (param1->unk12 << 12) | (strc0->unk0 & 0x3FF); + + for (i = 0; i < param1->unkE; i++) { + if (param0[i] == UI_DIGIT(0)) { + sp00.all.attr1 += r8; + } else { + OamData *oam = OamMalloc((param1->unk8 + i) >> 3); + s32 v; + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r8; + + if (param0[i] > UI_DIGIT(0x40)) { + oam->all.attr0 += 8; + + v = param0[i] - 0x11; + } else { + v = FROM_UI_DIGIT(param0[i]); + } + + oam->all.attr2 = sp00.all.attr2 + v * strc0->unk4; + oam->all.attr2 &= ~0xC00; + } + } +} +END_NONMATCH + +// TODO: The 2nd parameter's type is just a guess! +// +// (97.74%) https://decomp.me/scratch/fMp61 +NONMATCH("asm/non_matching/game/gTask_3006240__sub_805345C.inc", void sub_805345C(u8 *param0, GameOverB *param1)) +{ + Strc0 *strc0; + u32 u8; + OamData sp00; + OamData *oamStack, *oamStack2; + s32 i; + s32 a; + s32 r8; + +#ifndef NON_MATCHING + strc0 = &TASK_GET_MEMBER(Task_3006240, gTask_03006240, struct Strc0, unk0[0]); + strc0 = &strc0[param1->unk10]; +#else + Task_3006240 *strc = TASK_DATA(gTask_03006240); + strc0 = &strc->unk0[param1->unk10]; +#endif + r8 = strc0->unkA * 8; + + oamStack = &sp00; + a = (strc0->unk9 << 14) + (unsigned char)param1->unkC; + oamStack->all.attr0 = a; + oamStack->all.attr1 = (strc0->unk8 << 14) + (param1->qUnkA & 0x1FF); + oamStack->all.attr2 = (param1->unk12 << 12) | (strc0->unk0 & 0x3FF) | 0x800; + + for (i = 0; i < param1->unkE; i++) { + OamData *oam = OamMalloc((param1->unk8 + i) >> 3); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = sp00.all.attr0; + oam->all.attr1 = sp00.all.attr1; + sp00.all.attr1 += r8; + oam->all.attr2 = sp00.all.attr2 + FROM_UI_DIGIT(param0[i]) * strc0->unk4; + } +} +END_NONMATCH + +void sub_8053520(u8 *param0, s32 param1, s32 param2, u8 param3, u8 param4) +{ + if (gUnknown_030063F0) { + struct Strc_30063F0 *unkStrc = gUnknown_030063F0; + + s32 i; + + for (i = 0; i < 10; i++) { + // TODO: Is 0x20 a space char (' ')? + if (param0[i] == 0x20) { + break; + } + } + + unkStrc->unk20 = i; + + if (i > 0) { + s32 j = 0; + struct Strc_30063F0 *curr; + + for (; j < unkStrc->unk20; j++) { + unkStrc->unk4[j] = param0[j]; + } + + unkStrc->unk10 = param1; + unkStrc->unk14 = param2; + unkStrc->unk18 = param3; + unkStrc->unk1C = param4; + + curr = &gUnknown_030063C0; + while (curr->next != NULL) { + curr = curr->next; + } + + curr->next = unkStrc; + gUnknown_030063F0 = unkStrc->next; + + unkStrc->next = NULL; + } + } +} + +void sub_80535C8(struct Strc0 *inTask, u8 param1) +{ + Task_3006240 *strc = TASK_DATA(gTask_03006240); + struct Strc0 *src = &strc->unk0[param1]; + + src->unk4 = inTask->unk4; + src->unk8 = inTask->unk8; + src->unk9 = inTask->unk9; + src->unkA = inTask->unkA; + src->unkB = inTask->unkB; +} + +// (94.42%) https://decomp.me/scratch/QDnYo +NONMATCH("asm/non_matching/game/gTask_3006240__sub_80535FC.inc", void sub_80535FC(void)) +{ + if (gTask_03006240 == NULL) { + struct Strc_3006250 *zeroth = &gUnknown_03006250[0]; + struct Strc_30063F0 **test = &gUnknown_030063F0; + struct Strc_30063F0 *test2 = &gUnknown_030063C0; +#ifndef NON_MATCHING + register void *taskPtr asm("ip") = Task_80536D4; +#else + void *taskPtr = Task_80536D4; +#endif + void *dtorPtr = TaskDestructor_80536D8; + struct Strc_3006250 *second = &gUnknown_03006250[ARRAY_COUNT(gUnknown_03006250) - 1]; + struct Strc_3006250 *curr = &gUnknown_03006250[ARRAY_COUNT(gUnknown_03006250) - 2]; + void *nullPtr; + + do { + curr->next = second; + + second--, curr--; + } while ((intptr_t)curr >= (intptr_t)zeroth); + + nullPtr = NULL; + gUnknown_03006250[ARRAY_COUNT(gUnknown_03006250) - 1].next = nullPtr; + *test = (void *)&gUnknown_03006250[0]; + test2->next = nullPtr; + gTask_03006240 = TaskCreate(taskPtr, sizeof(Task_3006240), 0x1800, 0, dtorPtr); + UiGfxStackInit(); + } +} +END_NONMATCH + +IwramData UiGfxStackInit(void) +{ + Task_3006240 *strc = TASK_DATA(gTask_03006240); + struct GfxSubstruct *curr = &strc->gfxList[0]; + struct GfxSubstruct *next = &strc->gfxList[1]; + IwramData offset; + s32 i; + + for (i = 0; i < (s32)ARRAY_COUNT(strc->gfxList) - 2; curr++, next++, i++) { + // Set all "active" elements + curr->next = next; + } + // Set last "active" element's next ptr to empty element + curr->next = next; + + offset = gTask_03006240->data; + strc = TASK_DATA(gTask_03006240); + strc->first = &strc->gfxList[0]; + + return offset; +} + +struct GraphicsData *UiGfxStackPop(void) +{ + Task_3006240 *strc = TASK_DATA(gTask_03006240); + struct GfxSubstruct *curr; + + curr = strc->first; + + if (curr != NULL) { + strc->first = curr->next; + } else { + return NULL; + } + + return &curr->graphics; +} + +void Task_80536D4(void) { } + +void TaskDestructor_80536D8(struct Task *t) { gTask_03006240 = NULL; } diff --git a/sa1/src/game/stage/ui_z.c b/sa1/src/game/stage/ui_z.c new file mode 100644 index 0000000000..80bf274ecf --- /dev/null +++ b/sa1/src/game/stage/ui_z.c @@ -0,0 +1,836 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "data/ui_graphics.h" +#include "game/sa1_sa2_shared/player.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/gTask_03006240.h" +#include "game/multiplayer/mp_player.h" +#include "game/multiplayer/hud.h" // CreateChaoHuntHUD +#include "game/stage/ui.h" +#include "game/stage/underwater_effects.h" +#include "game/water_effects.h" + +#include "constants/ui_graphics.h" +#include "constants/vram_hardcoded.h" +#include "constants/zones.h" + +void Task_8055458(void); +void Task_8055730(void); +void Task_8055798(void); +void Task_8055904(void); +void Task_8055998(void); +void Task_8055AA0(void); +void Task_8055B18(void); +void TaskDestructor_8055C38(struct Task *); +void TaskDestructor_StrcUI28_8055C4C(struct Task *); + +extern const char gUnknown_08688378[]; +extern const char gUnknown_08688386[]; +extern const char gUnknown_08688394[]; +extern const char gUnknown_08688398[]; +extern const char gUnknown_086883AC[]; +extern const char gUnknown_086883B0[]; +extern const char gUnknown_086883B8[]; +extern const char gUnknown_086883C4[]; +extern const char gUnknown_086883CC[24]; + +/* TODO: Different module? */ +bool32 sub_80549FC(void) +{ + bool32 result = FALSE; + + if (gSelectedCharacter == CHARACTER_KNUCKLES) { + if (gPlayer.charState >= 70 && gPlayer.charState <= 75) { + result = TRUE; + } + } + + return result; +} + +/* TODO: Different module? */ +bool32 sub_8054A28(void) +{ + bool32 result = FALSE; + + if (gSelectedCharacter == CHARACTER_KNUCKLES) { + if (gPlayer.charState >= 62 && gPlayer.charState <= 69) { + result = TRUE; + } + } + + return result; +} + +/* TODO: Different module? */ +bool32 sub_8054A54(void) +{ + bool32 result = FALSE; + + if (gSelectedCharacter == CHARACTER_AMY) { + if (gPlayer.charState >= 91 && gPlayer.charState <= 93) { + result = TRUE; + } + } + + return result; +} + +// (71.41%) https://decomp.me/scratch/T4csx +NONMATCH("asm/non_matching/game/stage/intro__LoadStageIntroGraphics.inc", void LoadStageIntroGraphics(StrcStack *param0)) +{ + Strc_80528AC sp00; // size: 0x30 + s32 act = (gCurrentLevel & 0x1); + const void *tiles; + + sp00.uiGfxID = UIGFX_STGINTRO_ZIGZAG_SONIC + gSelectedCharacter; + sp00.unk2B = 6; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 0x400; + sp00.paletteSize = 32; + sp00.unk28 = 15; + sp00.vramC = param0->vram4; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_STGINTRO_CHAR_NAMES; + sp00.unk2B = 7; + sp00.tiles = gUiGraphics[UIGFX_STGINTRO_CHAR_NAMES].tiles + (gSelectedCharacter * 0x800); + sp00.palette = gUiGraphics[UIGFX_STGINTRO_CHAR_NAMES].palette; + sp00.tilesSize = 0x800; + sp00.paletteSize = 32; + sp00.unk28 = 15; + sp00.vramC = VRAM_RESERVED_STGINTRO_CHAR_NAME; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGINTRO_CHAR_NAMES].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGINTRO_CHAR_NAMES].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGINTRO_CHAR_NAMES].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGINTRO_CHAR_NAMES].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGINTRO_CHAR_NAMES].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_STGRESULT_HEADLINE_BACK; + sp00.unk2B = 8; + sp00.tiles = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].tiles; + sp00.palette = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].palette; + sp00.tilesSize = 0x200; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram0; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGRESULT_HEADLINE_BACK].unk18; + sub_80528AC(&sp00); + + if (gCurrentLevel <= LEVEL_INDEX(ZONE_7, ACT_2)) { + sp00.uiGfxID = UIGFX_STGNAMES_JP_0; + sp00.unk2B = 9; + sp00.tiles = gUiGraphics[UIGFX_STGNAMES_JP_0].tiles + (49 * TILE_SIZE_4BPP); + sp00.palette = gUiGraphics[UIGFX_STGNAMES_JP_0].palette; + sp00.tilesSize = (12 - gUnknown_08688378[gCurrentLevel]) * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram8; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGNAMES_JP_0].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGNAMES_JP_0].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGNAMES_JP_0].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_STGNAMES_JP_0; + sp00.unk2B = 9; + sp00.tiles = gUiGraphics[UIGFX_STGNAMES_JP_0].tiles + 8 * TILE_SIZE_4BPP; + sp00.palette = gUiGraphics[UIGFX_STGNAMES_JP_0].palette; + sp00.tilesSize = 0x80; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram8 + 0x180; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGNAMES_JP_0].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGNAMES_JP_0].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGNAMES_JP_0].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_STGNAMES_JP_0; + sp00.unk2B = 9; + sp00.tiles = gUiGraphics[UIGFX_STGNAMES_JP_0].tiles + gUnknown_08688386[gCurrentLevel] * TILE_SIZE_4BPP; + sp00.palette = gUiGraphics[UIGFX_STGNAMES_JP_0].palette; + sp00.tilesSize = gUnknown_08688378[gCurrentLevel] * TILE_SIZE_4BPP; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram8 + (12 - gUnknown_08688378[gCurrentLevel]) * TILE_SIZE_4BPP; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGNAMES_JP_0].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGNAMES_JP_0].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGNAMES_JP_0].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_STGNAMES_JP_0; + sp00.unk2B = 9; + sp00.tiles = gUiGraphics[UIGFX_STGNAMES_JP_0].tiles + 0x100; + sp00.palette = gUiGraphics[UIGFX_STGNAMES_JP_0].palette; + sp00.tilesSize = 32; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram8; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGNAMES_JP_0].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGNAMES_JP_0].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGNAMES_JP_0].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGNAMES_JP_0].unk18; + sub_80528AC(&sp00); + + sp00.unk0.unk4 = 4; + sp00.unk0.unk8 = 1; + sp00.unk0.unk9 = 1; + sp00.unk0.unkA = 4; + sp00.unk0.unkB = 1; + sub_80535C8(&sp00.unk0, 9); + } else { + s32 v; + sp00.uiGfxID = 18; + sp00.unk2B = 9; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles + (gCurrentLevel - 14) * (16 * TILE_SIZE_4BPP); + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 0x200; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vram8; + sp00.unk2A = 13; + v = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk4 = v; + v = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk8 = v; + v = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unk9 = v; + v = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkA = v; + v = gUiGraphics[sp00.uiGfxID].unk18; + sp00.unk0.unkB = v; + sub_80528AC(&sp00); + } + + sp00.uiGfxID = UIGFX_STGRESULT_ACT12; + sp00.unk2B = 10; + tiles = (gUiGraphics[UIGFX_STGRESULT_ACT12].tiles + 0x100); + sp00.tiles = tiles + act * 0x80; + // sp00.palette = gUiGraphics[UIGFX_STGRESULT_ACT12].palette; + sp00.tilesSize = 0x80; + sp00.vramC = param0->vram10 + (8 * TILE_SIZE_4BPP); + sp00.unk2A = 9; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGRESULT_ACT12].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGRESULT_ACT12].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGRESULT_ACT12].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGRESULT_ACT12].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGRESULT_ACT12].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_STGRESULT_ACT12; + sp00.unk2B = 10; + sp00.tiles = gUiGraphics[UIGFX_STGRESULT_ACT12].tiles; + sp00.palette = gUiGraphics[UIGFX_STGRESULT_ACT12].palette; + sp00.tilesSize = 0x100; + sp00.vramC = param0->vram10; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[UIGFX_STGRESULT_ACT12].unk8; + sp00.unk0.unk8 = gUiGraphics[UIGFX_STGRESULT_ACT12].unkC; + sp00.unk0.unk9 = gUiGraphics[UIGFX_STGRESULT_ACT12].unk10; + sp00.unk0.unkA = gUiGraphics[UIGFX_STGRESULT_ACT12].unk14; + sp00.unk0.unkB = gUiGraphics[UIGFX_STGRESULT_ACT12].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = gUnknown_08688398[gCurrentLevel] + 19; + sp00.unk2B = 2; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[UIGFX_STGNAME_1].palette; + sp00.tilesSize = 0x700; + sp00.paletteSize = 32; + sp00.unk28 = 6; + sp00.vramC = param0->vramC; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.unk0.unk4 = 8; + sp00.unk0.unk8 = 2; + sp00.unk0.unk9 = 1; + sp00.unk0.unkA = 4; + sp00.unk0.unkB = 2; + sub_80535C8(&sp00.unk0, 2); +} +END_NONMATCH + +// Output: struct Task *t -> Struct_sub_80550F8 +// (94.00%) https://decomp.me/scratch/e0aBK +NONMATCH("asm/non_matching/game/stage/ui__sub_80550F8.inc", struct Task *sub_80550F8(void)) +{ + Strc_Ui_24 *ui_24; + Strc_Ui_28 *ui_28; + struct Task *t, *tt; + void *vram0, *vram1; + StrcStack sp04; + u8 i; + struct Task *t6; + + if ((gCurrentLevel <= LEVEL_INDEX(ZONE_7, ACT_1)) && ((gCurrentLevel & 0x1) != ACT_1) && (SA2_LABEL(gUnknown_030054B0) != gCurrentLevel) + && (!IS_EXTRA_STAGE(gCurrentLevel))) { + for (i = 0; i < 8; i++) { + OamData *oam = OamMalloc(UI_OAM_ORDER_INDEX); + + if (iwram_end == oam) { + break; + } + + oam->all.attr0 = 0x400 | 42; + oam->all.attr1 = i * 32 + ~0x7FFF; + oam->all.attr2 = 0x6080; + } + } + + sub_80535FC(); + UiGfxStackInit(); + // _08055164 + + tt = TaskCreate(Task_8055730, sizeof(Strc_Ui_24), 0x2120, 0, TaskDestructor_8055C38); + sp04.task1C = tt; + ui_24 = TASK_DATA(tt); + ui_24->unk18 = 0; + ui_24->unk20 = 1; + ui_24->unk1A = 0; + ui_24->unk0.qUnkA = -Q(80. / 256.); + ui_24->unk0.unkC = 0; + ui_24->unk0.unkE = 3; + ui_24->unk0.unk8 = 24; + ui_24->unk0.unk10 = 6; + ui_24->unk0.unk16 = 0; + ui_24->unk0.unk12 = 15; + ui_24->unk0.unk14 = 5; + ui_24->unk1C = VramMalloc(32); + sp04.vram4 = ui_24->unk1C; + ui_24->unk21 = 0; + + tt = TaskCreate(Task_8055798, sizeof(Strc_Ui_24), 0x2120, 0, NULL); + sp04.task20 = tt; + ui_24 = TASK_DATA(tt); + ui_24->unk18 = 0; + ui_24->unk20 = 0; + ui_24->unk1A = 1; + ui_24->unk0.qUnkA = +Q(20. / 256.); + ui_24->unk0.unkE = 1; + ui_24->unk0.unk8 = 24; + ui_24->unk0.unk10 = 7; + ui_24->unk0.unk12 = 15; +#if 0 + ui_24->unk0.unk16 = 3; +#else + ui_24->unk0.unk16 = 1; +#endif + ui_24->unk0.unk8 = 16; + ui_24->unk21 = 0; + + tt = TaskCreate(Task_8055904, sizeof(Strc_Ui_24), 0x2120, 0, TaskDestructor_8055C38); + sp04.task14 = tt; + ui_24 = TASK_DATA(tt); + ui_24->unk18 = 0; + ui_24->unk20 = 1; + ui_24->unk1A = 0; + ui_24->unk0.qUnkA = +Q(180. / 256.); + ui_24->unk0.unkC = 160; + ui_24->unk0.unkE = 6; + ui_24->unk0.unk10 = 10; + ui_24->unk0.unk12 = 6; + ui_24->unk0.unk16 = 1; + ui_24->unk0.unk8 = 0; + ui_24->unk1C = VramMalloc(12); + sp04.vram10 = ui_24->unk1C; + ui_24->unk21 = 0; + + tt = TaskCreate(Task_8055998, sizeof(Strc_Ui_24), 0x2120, 0, TaskDestructor_8055C38); + sp04.task18 = tt; + ui_24 = TASK_DATA(tt); + ui_24->unk18 = 0; + ui_24->unk20 = 1; + ui_24->unk1A = 0; + + if (((gCurrentLevel & 0x1) != ACT_1) && (SA2_LABEL(gUnknown_030054B0) != gCurrentLevel) && (!IS_EXTRA_STAGE(gCurrentLevel))) { + ui_24->unk0.qUnkA = -Q(16. / 256.); + ui_24->unk0.unkC = +42; + + } else { + ui_24->unk0.qUnkA = +Q(240. / 256.); + ui_24->unk0.unkC = 126; + } + + ui_24->unk0.unkE = 8; + ui_24->unk0.unk10 = 8; + ui_24->unk0.unk12 = 6; + ui_24->unk0.unk16 = 1; + ui_24->unk0.unk8 = 8; + ui_24->unk1C = VramMalloc(16); + sp04.vram0 = ui_24->unk1C; + ui_24->unk21 = 0; + + tt = TaskCreate(Task_8055AA0, sizeof(Strc_Ui_24), 0x2120, 0, TaskDestructor_8055C38); + sp04.task24 = tt; + ui_24 = TASK_DATA(tt); + ui_24->unk18 = 0; + ui_24->unk20 = 1; + ui_24->unk1A = 0; + ui_24->unk0.qUnkA = +Q(360. / 256.); + ui_24->unk0.unkC = 114; + ui_24->unk0.unkE = 4; + ui_24->unk0.unk10 = 9; + ui_24->unk0.unk12 = 6; + ui_24->unk0.unk16 = 1; + ui_24->unk0.unk8 = 0; + ui_24->unk1C = VramMalloc(16); + sp04.vram8 = ui_24->unk1C; + ui_24->unk21 = 0; + + t6 = TaskCreate(Task_8055B18, sizeof(Strc_Ui_24), 0x2120, 0, TaskDestructor_8055C38); + ui_24 = TASK_DATA(t6); + ui_24->unk18 = 0; + ui_24->unk20 = 1; + ui_24->unk1A = 0; + ui_24->unk0.qUnkA = +Q(1.0); + ui_24->unk0.unkC = 128; + ui_24->unk0.unkE = 9; + ui_24->unk0.unk10 = 2; + ui_24->unk0.unk12 = 6; + ui_24->unk0.unk16 = 1; + ui_24->unk0.unk8 = 0; + ui_24->unk1C = VramMalloc(56); + sp04.vramC = ui_24->unk1C; + ui_24->unk21 = 0; + + t = TaskCreate(Task_8055458, sizeof(Strc_Ui_28), 0x2100, 0, TaskDestructor_StrcUI28_8055C4C); + ui_28 = TASK_DATA(t); + ui_28->unk24 = 0; + ui_28->unk26 = 1; + ui_28->taskC = sp04.task1C; + ui_28->task10 = sp04.task20; + ui_28->task14 = sp04.task18; + ui_28->task18 = sp04.task24; + ui_28->task1C = sp04.task14; + ui_28->task20 = t6; + ui_28->unk0.unk0 = 0; + ui_28->unk0.unk2 = 0; + ui_28->unk0.unk4 = 2; + ui_28->unk0.unk6 = 0; + ui_28->unk0.unk8 = 96; + ui_28->unk0.unkA = 1; + ui_28->unk27 = 0; + + LoadStageIntroGraphics(&sp04); + sub_805423C(&ui_28->unk0); + + return t; +} +END_NONMATCH + +// (90.26%) https://decomp.me/scratch/eeD7q +NONMATCH("asm/non_matching/game/stage/ui__Task_8055458.inc", void Task_8055458(void)) +{ + Strc_Ui_28 *strcMain = TASK_DATA(gCurTask); + Strc_Ui_24 *strc1 = TASK_DATA(strcMain->taskC); + Strc_Ui_24 *strc2 = TASK_DATA(strcMain->task10); + Strc_Ui_24 *strc3 = TASK_DATA(strcMain->task14); + Strc_Ui_24 *strc4 = TASK_DATA(strcMain->task18); + Strc_Ui_24 *strc5 = TASK_DATA(strcMain->task1C); + Strc_Ui_24 *strc6 = TASK_DATA(strcMain->task20); + + if ((gPressedKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) && IS_SINGLE_PLAYER) { + if ((strcMain->unk24 > 35) && (strcMain->unk24 < 215)) { + strcMain->unk24 = 215; + + strcMain->unk0.unk8 = Div(0x2000 - strcMain->unk0.unk6, 10); + + if (strcMain->unk27 == 0) { + strcMain->unk26 = sub_805423C(&strcMain->unk0); + } + } + } + // _080554E8 + + strc1->unk18 = strcMain->unk24; + strc2->unk18 = strcMain->unk24; + strc3->unk18 = strcMain->unk24; + strc4->unk18 = strcMain->unk24; + strc5->unk18 = strcMain->unk24; + strc6->unk18 = strcMain->unk24; + + strc1->unk20 = strcMain->unk26; + strc2->unk20 = strcMain->unk26; + strc3->unk20 = strcMain->unk26; + strc4->unk20 = strcMain->unk26; + strc5->unk20 = strcMain->unk26; + strc6->unk20 = strcMain->unk26; + + strc1->unk21 = strcMain->unk27; + strc2->unk21 = strcMain->unk27; + strc3->unk21 = strcMain->unk27; + strc4->unk21 = strcMain->unk27; + strc5->unk21 = strcMain->unk27; + strc6->unk21 = strcMain->unk27; + + if (strcMain->unk27 == 0) { + if ((strcMain->unk24 <= 105) || !strcMain->unk26) { + if (strcMain->unk24 > 20) { + strcMain->unk26 = sub_805423C(&strcMain->unk0); + } else { + sub_80543A4(&strcMain->unk0); + } + } + } + // _080555AE + + if (++strcMain->unk24 > 225) { + // _080555BE + if (strc1->unk0.unk0 == 0) { + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } + + if (IS_MULTI_PLAYER) { + u32 i; + for (i = 0; (i < MULTI_SIO_PLAYERS_MAX) && (gMultiplayerPlayerTasks[i] != NULL); i++) { + MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); + mpp->unk5C &= ~0x2; + } + + gPlayer.timerInvulnerability = TIME(0, 2); + } + // _08055622 + + gStageFlags &= ~STAGE_FLAG__ACT_START; + gPlayer.moveState &= ~MOVESTATE_IGNORE_INPUT; + gPartner.moveState &= ~MOVESTATE_IGNORE_INPUT; + + SA2_LABEL(gUnknown_030054B0) = gCurrentLevel; + + gPlayer.itemEffect &= ~PLAYER_ITEM_EFFECT__80; + gStageFlags &= ~STAGE_FLAG__DISABLE_PAUSE_MENU; + + if (gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_1) || gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_2)) { + LoadPalette423Anim(); + sub_804C40C(); + } + + TaskDestroy(strcMain->task20); + TaskDestroy(strcMain->task1C); + TaskDestroy(strcMain->task18); + TaskDestroy(strcMain->task14); + TaskDestroy(strcMain->task10); + TaskDestroy(strcMain->taskC); + TaskDestroy(gCurTask); + + if (IS_SINGLE_PLAYER | (gGameMode == GAME_MODE_RACE) || (gGameMode == GAME_MODE_MULTI_PLAYER)) { + CreateStageUI(); + } else { + CreateChaoHuntHUD(); + } + + if (IS_EXTRA_STAGE(gCurrentLevel)) { + sub_804A5D8(Q(DISPLAY_CENTER_X), Q(DISPLAY_CENTER_Y)); + } + } else if (gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_1) || gCurrentLevel == LEVEL_INDEX(ZONE_4, ACT_2)) { + //_08055708 + sub_804C40C(); + } +} +END_NONMATCH + +void Task_8055730(void) +{ + Strc_Ui_24 *strc = TASK_DATA(gCurTask); + + if (strc->unk18 > 215) { + strc->unk0.qUnkA -= Q(8. / 256.); + } else if (strc->unk18 > 10) { + strc->unk0.qUnkA = 0; + } else if (strc->unk18 > 0) { + strc->unk0.qUnkA += Q(8. / 256.); + } + + if (((strc->unk18 >= 0) && (strc->unk18 <= 105)) || !strc->unk20 || (strc->unk21 != 0)) { + // TODO: Resolve cast! + sub_8052F78((const char *)gUnknown_086883AC, (void *)strc); + } else { + // TODO: Resolve cast! + sub_80530CC((const char *)gUnknown_086883AC, (void *)strc); + } +} + +// (65.69%) https://decomp.me/scratch/wlHG6 +NONMATCH("asm/non_matching/game/stage/ui__Task_8055798.inc", void Task_8055798(void)) +{ + Strc_Ui_24 *strc = TASK_DATA(gCurTask); + + if (strc->unk18 > 215) { + s32 r5 = 0; + s16 r6 = -Div((strc->unk18 - 215) << 7, 10); + s16 r8 = r6; + const char *r7 = gUnknown_08688394; + + for (; r5 < 4; r8 += 0x20, r6 += 0x20, r7++, r5++) { + strc->unk0.unkC = r6; + + if (r8 >= -32) { + if (((strc->unk18 >= 0) && (strc->unk18 <= 105)) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78(r7, (void *)strc); // TODO: cast + } else { + sub_80530CC(r7, (void *)strc); // TODO: cast + } + } + // _08055814 + } + } else if (strc->unk18 > 31) { + // _08055826 + 0x4 + s32 r5 = 0; + + const char *r6 = gUnknown_08688394; + + for (; r5 < 4; r6++, r5++) { + strc->unk0.unkC = r5 * 32; + + if (((strc->unk18 >= 0) && (strc->unk18 <= 105)) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78(r6, (void *)strc); // TODO: cast + } else { + sub_80530CC(r6, (void *)strc); // TODO: cast + } + } + } else if (strc->unk18 > 25) { + // _0805586E + 0x4 + + s32 r8 = (Div((strc->unk18 - 215) << 7, 6) - 176) & 0x1FF; + + s32 r5 = 0; + s16 r2 = r8; + s32 r6 = r2; + r8 = r2; + for (; r5 < 4; r2 += 0x20, r6 += 0x20, r5++) { + if (r8 > 421) { + strc->unk0.unkC = r6; + + if (r2 >= -0x20) { + if (((strc->unk18 >= 0) && (strc->unk18 <= 105)) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78((const char *)&gUnknown_08688394[r5], (void *)strc); // TODO: cast + } else { + sub_80530CC((const char *)&gUnknown_08688394[r5], (void *)strc); // TODO: cast + } + } + } + } + } +} +END_NONMATCH + +void Task_8055904(void) +{ + Strc_Ui_24 *strc = TASK_DATA(gCurTask); + + if (strc->unk18 > 215) { + if (strc->unk0.unkC < 160) { + strc->unk0.unkC += 2; + } + } else if (strc->unk18 > 35) { + strc->unk0.qUnkA = Q(180. / 256.); + strc->unk0.unkC = 144; + strc->unk0.unkE = 6; + } else if (strc->unk18 > 30) { + if (strc->unk0.unkC > 144) { + strc->unk0.unkC -= 3; + } + } + + if (gCurrentLevel <= LEVEL_INDEX(ZONE_6, ACT_2)) { + if (((strc->unk18 >= 0) && (strc->unk18 <= 105)) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78((const char *)&gUnknown_086883B0[0], (void *)strc); // TODO: cast + } else { + sub_80530CC((const char *)&gUnknown_086883B0[0], (void *)strc); // TODO: cast + } + } +} + +void Task_8055998(void) +{ + Strc_Ui_24 *strc = TASK_DATA(gCurTask); + + if (strc->unk18 > 215) { + if (strc->unk0.qUnkA < -0x20) { + strc->unk0.qUnkA += Q(32. / 256.); + + if (strc->unk0.unkE != 0) { + strc->unk0.unkE--; + } + } + + strc->unk0.qUnkA -= Q(26. / 256.); + } else if (strc->unk18 > 25) { + strc->unk0.qUnkA = -Q(16. / 256.); + } else if (strc->unk18 > 15) { + if (IS_EXTRA_STAGE(gCurrentLevel)) { + // Extra Stage + strc->unk0.unkC = 126; + strc->unk0.qUnkA -= Q(26. / 256); + + if (strc->unk0.qUnkA < -Q(16. / 256.)) { + strc->unk0.qUnkA = -Q(16. / 256.); + } + } else if ((gCurrentLevel < LEVEL_INDEX(ZONE_FINAL, ACT_THE_MOON)) && ((gCurrentLevel & 0x1) != ACT_1) + && ((SA2_LABEL(gUnknown_030054B0)) != gCurrentLevel)) { + // Singleplayer Stage + strc->unk0.qUnkA = -Q(16. / 256.); + strc->unk0.unkC += 9; + + if (strc->unk0.unkC > 126) { + strc->unk0.unkC = 126; + } + } else { + // Multiplayer Stage + strc->unk0.unkC = 126; + strc->unk0.qUnkA -= Q(26. / 256); + + if (strc->unk0.qUnkA < -Q(16. / 256.)) { + strc->unk0.qUnkA = -Q(16. / 256.); + } + } + } + + if ((strc->unk18 >= 0 && strc->unk18 <= 105) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78((const char *)&gUnknown_086883B8[0], (void *)strc); + } else { + sub_80530CC((const char *)&gUnknown_086883B8[0], (void *)strc); + } +} + +void Task_8055AA0() +{ + Strc_Ui_24 *strc = TASK_DATA(gCurTask); + + if (strc->unk18 > 215) { + strc->unk0.qUnkA -= Q(26. / 256.); + } else if (strc->unk18 > 25) { + strc->unk0.qUnkA = Q(112 / 256.); + + // TODO: Match without cast! + } else if ((u16)strc->unk18 > 15) { + strc->unk0.qUnkA -= Q(26. / 256.); + + if (strc->unk0.qUnkA < Q(112. / 256.)) { + strc->unk0.qUnkA = Q(112. / 256.); + } + } + + if ((strc->unk18 >= 0 && strc->unk18 <= 105) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78((const char *)&gUnknown_086883C4[0], (void *)strc); + } else { + sub_80530CC((const char *)&gUnknown_086883C4[0], (void *)strc); + } +} + +void Task_8055B18() +{ + // TODO: Inline the mem calls! + // const u8 arr0[16] = { /* data here */ }; + const u8 arr0[22 + 5]; + memcpy((void *)arr0, &gUnknown_086883CC[0], sizeof(arr0) - 5); + memset((void *)(arr0 + 22), 0, 5); + + { + Strc_Ui_24 *strc = TASK_DATA(gCurTask); + + if (strc->unk18 > 215) { + u16 qInitialUnkA = strc->unk0.qUnkA; + + strc->unk0.qUnkA -= Q(28. / 256.); + + if (strc->unk0.qUnkA < -Q(31. / 256.)) { + strc->unk0.unkE--; + strc->unk0.qUnkA = qInitialUnkA + Q(4. / 256.); + strc->unk1A = Mod(strc->unk1A + 1, 7); + } + + if ((strc->unk18 >= 0 && strc->unk18 <= 105) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78((const char *)&arr0[strc->unk1A], (void *)strc); + } else { + sub_80530CC((const char *)&arr0[strc->unk1A], (void *)strc); + } + } else if (strc->unk18 > 25) { + u16 qInitialUnkA = strc->unk0.qUnkA; + strc->unk0.qUnkA = qInitialUnkA - Q(2. / 256.); + strc->unk0.unkE = 9; + + if (strc->unk0.qUnkA < -Q(31. / 256.)) { + strc->unk0.qUnkA = qInitialUnkA + Q(30. / 256.); + strc->unk1A = Mod(strc->unk1A + 1, 7); + } + + if ((strc->unk18 >= 0 && strc->unk18 <= 105) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78((const char *)&arr0[strc->unk1A], (void *)strc); + } else { + sub_80530CC((const char *)&arr0[strc->unk1A], (void *)strc); + } + } else if (strc->unk18 > 15) { + // _08055BC0 + u16 qInitialUnkA; + strc->unk0.unkC = 0x80; + + qInitialUnkA = strc->unk0.qUnkA; + + strc->unk0.qUnkA -= Q(28. / 256.); + + if (strc->unk0.qUnkA < Q(240. / 256.)) { + strc->unk0.unkE = 9 - (strc->unk0.qUnkA >> 5); + + if (strc->unk0.qUnkA < -Q(31. / 256.)) { + strc->unk0.qUnkA = qInitialUnkA + 4; + strc->unk1A = Mod(strc->unk1A + 1, 7); + } + + if ((strc->unk18 >= 0 && strc->unk18 <= 105) || !strc->unk20 || (strc->unk21 != 0)) { + sub_8052F78((const char *)&arr0[strc->unk1A], (void *)strc); + } else { + sub_80530CC((const char *)&arr0[strc->unk1A], (void *)strc); + } + } + } + } +} + +void TaskDestructor_8055C38(struct Task *t) +{ + Strc_Ui_24 *strc = TASK_DATA(t); +#ifdef BUG_FIX + if (strc->unk1C != NULL) +#endif + { + VramFree(strc->unk1C); + } +} + +void TaskDestructor_StrcUI28_8055C4C(struct Task *t) { } \ No newline at end of file diff --git a/sa1/src/game/stage/underwater_effects.c b/sa1/src/game/stage/underwater_effects.c new file mode 100644 index 0000000000..0d26c93837 --- /dev/null +++ b/sa1/src/game/stage/underwater_effects.c @@ -0,0 +1,270 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "sprite.h" +#include "trig.h" + +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/camera.h" +#include "game/stage/mp_sprite_task.h" +#include "game/stage/player.h" +#include "game/stage/underwater_effects.h" +#include "game/water_effects.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" + +#define MAX_SMALL_BUBBLE_COUNT 11 + +typedef struct { + Player *p; +} DrownBubbles; + +u8 gSmallAirBubbleCount = 0; + +static void Task_DrowningCountdown(void); +static void Task_SpawnAirBubbles(void); +static void TaskDestructor_SpawnAirBubbles(struct Task *t); + +void Task_DrowningCountdown(void) +{ + MultiplayerSpriteTask *ts = TASK_DATA(gCurTask); + Sprite *s = &ts->s; + SpriteTransform *transform = &ts->transform; + + s32 r2; + + transform->x = I(ts->x); + transform->y = I(ts->y); + + r2 = ((ts->unk10 + 1) << 3); + r2 = MIN(r2, 0x100); + + transform->qScaleX = r2; + transform->qScaleY = r2; + + if (ts->unk14 & 0x1) + transform->qScaleX = -r2; + + if (ts->unk14 & 0x2) + transform->qScaleY = -transform->qScaleY; + + if ((transform->x < -32 || transform->x > DISPLAY_WIDTH + 32) || (transform->y < -32 || transform->y > DISPLAY_HEIGHT + 32) + || (ts->unk10 > 0x80)) { + TaskDestroy(gCurTask); + return; + } else if (ts->unk10 <= 0x40) { + ts->y += (-COS_24_8(ts->unk10 * 4) * ts->unkA) >> 8; + } + + ts->unk10 += 1; + + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + s->frameFlags |= (sa2__gUnknown_030054B8++ | 0x20); + + UpdateSpriteAnimation(s); + TransformSprite(s, transform); + DisplaySprite(s); +} + +struct Task *SpawnDrowningCountdownNum(Player *p, s32 countdown) +{ + struct Camera *cam = &gCamera; + struct Task *t = CreateMultiplayerSpriteTask(0, 0, 0, 0, Task_DrowningCountdown, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *ts = TASK_DATA(t); + Sprite *s; + SpriteTransform *transform; + s32 temp; + + ts->x = p->qWorldX - Q(cam->x); + ts->y = p->qWorldY - Q(cam->y); + ts->unk8 = 0; + ts->unkA = 0x120; + ts->unk10 = 0; + ts->mpPlayerID = p->playerID; + + s = &ts->s; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_DROWN_COUNTDOWN); + s->graphics.anim = SA1_ANIM_DROWN_COUNTDOWN; + s->variant = 5 - countdown; + + s->oamFlags = SPRITE_OAM_ORDER(9); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + transform = &ts->transform; + transform->rotation = 0; + transform->qScaleX = 0; + transform->qScaleY = 0; + transform->x = 0; + transform->y = 0; + + return t; +} + +// Called when air bubbles spawn underwater +struct Task *SpawnAirBubbles(s32 x, s32 y, s32 p2, s32 p3) +{ + if ((s8)gSmallAirBubbleCount > MAX_SMALL_BUBBLE_COUNT) { + return NULL; + } else { + struct Task *t; + MultiplayerSpriteTask *ts; + Sprite *s; + SpriteTransform *transform; + + gSmallAirBubbleCount++; + + t = CreateMultiplayerSpriteTask(0, 0, 0, 0, Task_SpawnAirBubbles, TaskDestructor_SpawnAirBubbles); + + ts = TASK_DATA(t); + s = &ts->s; + transform = &ts->transform; + + ts->x = x; + ts->y = y; + ts->unk8 = p2; + ts->unkA = -0x80; + ts->unk10 = 0; + ts->unk12 = 0x100; + ts->unk14 = 0; + + if (p3 == 0) { + s->graphics.dest = VRAM_RESERVED_BUBBLES_SMALL; + s->graphics.anim = SA1_ANIM_BUBBLES_SMALL; + s->variant = 0; + } else { + s->graphics.dest = VRAM_RESERVED_BUBBLES_GROUP; + s->graphics.anim = SA1_ANIM_BUBBLES_GROUP; + s->variant = 0; + + ts->unk14 = (((u32)PseudoRandom32() & 0x30000) >> 16); + } + + s->oamFlags = SPRITE_OAM_ORDER(9); + + transform->rotation = 0; + transform->qScaleX = 0; + transform->qScaleY = 0; + transform->x = 0; + transform->y = 0; + + return t; + } +} + +bool32 RandomlySpawnAirBubbles(Player *p) +{ + u32 rand, randX, randY; + + u32 result = FALSE; + + if ((gStageTime % 8u) == 0) { + rand = ((u32)PseudoRandom32() & 0x300); + if (!rand) { + randX = (((u32)PseudoRandom32() & 0xF00) >> 8); + randY = (((u32)PseudoRandom32() & 0xF00) >> 8) - 8; + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) + randX = -randX; + + SpawnAirBubbles(p->qWorldX - randX, p->qWorldY - randY, p->qSpeedAirX, ((u32)PseudoRandom32() & 0x100) >> 8); + + result = TRUE; + } + } + + return result; +} + +static void Task_SpawnAirBubbles(void) +{ + MultiplayerSpriteTask *ts = TASK_DATA(gCurTask); + Sprite *s = &ts->s; + SpriteTransform *transform = &ts->transform; + + s32 r1 = ts->x; + s32 r4 = ts->y; + s32 r2; + s32 unk10 = ts->unk10; + + r1 += SIN((unk10 & 0xFF) * 4) >> 4; + { + struct Camera *cam = &gCamera; + transform->x = I(r1) - cam->x; + transform->y = I(r4) - cam->y; + } + + r2 = ((unk10 + 1) << 4); + r2 = MIN(r2, 0x100); + + transform->qScaleX = r2; + transform->qScaleY = r2; + + if (ts->unk14 & 0x1) + transform->qScaleX = -r2; + + if (ts->unk14 & 0x2) + transform->qScaleY = -transform->qScaleY; + + if ((transform->x < -32 || transform->x > DISPLAY_WIDTH + 32) || (transform->y < -32 || transform->y > DISPLAY_HEIGHT + 32) +#if (GAME == GAME_SA2) + || (gWater.isActive != TRUE) +#endif + || (gWater.currentWaterLevel < 0) || (I(r4) - 3 < gWater.currentWaterLevel) || (ts->unk10 > 0x1E0)) { + TaskDestroy(gCurTask); + return; + } else { + ts->x += ts->unk8; + ts->y += ts->unkA; + + ts->unk8 -= (ts->unk8 >> 3); + ts->unk10 += 1; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + s->frameFlags |= (sa2__gUnknown_030054B8++ | 0x20); + + UpdateSpriteAnimation(s); + TransformSprite(s, transform); + DisplaySprite(s); + } +} + +static void Task_SpawnBubblesAfterDrowning(void) +{ + DrownBubbles *db = TASK_DATA(gCurTask); + Player *p = db->p; + + if (IS_ALIVE(p)) { + TaskDestroy(gCurTask); + return; + } else if (!(gStageTime & (0x2 | 0x1))) { + if ((PseudoRandom32() & 0x300) == 0) { + s32 r4 = ((u32)PseudoRandom32() & 0x100) >> 8; + + do { + // TODO: Maybe these could be converted to PseudoRandBetween? + u32 r3, r2, r1 = ((u32)PseudoRandom32() & 0x7FF00) >> 8; + r1 -= 0x400; + + r2 = ((u32)PseudoRandom32() & 0x7FF00) >> 8; + r2 -= 0x400; + + r3 = ((u32)PseudoRandom32() & 0x100) >> 8; + + SpawnAirBubbles(p->qWorldX + r1, p->qWorldY + r2 - 0xC00, 0, r3); + } while (r4-- != 0); + } + } +} + +struct Task *SpawnBubblesAfterDrowning(Player *p) +{ + struct Task *t = TaskCreate(Task_SpawnBubblesAfterDrowning, sizeof(Player **), 0x4001, 0, NULL); + + DrownBubbles *db = TASK_DATA(t); + db->p = p; + + return t; +} + +static void TaskDestructor_SpawnAirBubbles(struct Task *t) { gSmallAirBubbleCount--; } diff --git a/sa1/src/game/time_attack/lobby.c b/sa1/src/game/time_attack/lobby.c new file mode 100644 index 0000000000..b45e9734a6 --- /dev/null +++ b/sa1/src/game/time_attack/lobby.c @@ -0,0 +1,269 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/character_select.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/save.h" +#include "game/stage/ui.h" +#include "game/title_screen.h" + +#include "constants/songs.h" +#include "constants/text.h" + +typedef struct TimeAttackLobby { + /* 0x000 */ Sprite sprites[4]; + /* 0x0C0 */ Sprite s2; + /* 0x0F0 */ Sprite s3; + /* 0x120 */ StrcUi_805423C unk120; + /* 0x12C */ s32 qUnk12C; + /* 0x130 */ s32 qUnk130; + /* 0x134 */ u8 unk134; +} TimeAttackLobby; /* 0x138 */ + +extern AnimId gUnknown_0868B684[4][UILANG_COUNT]; +extern u8 gUnknown_0868B694[4][UILANG_COUNT]; +extern u8 gUnknown_0868B69C[4]; +extern AnimId gUnknown_0868B6A0[NUM_CHARACTERS][3]; +extern u8 gUnknown_0868B6B8[NUM_CHARACTERS][3]; +extern VoidFn gUnknown_0868B6C4[4]; +extern u16 gUnknown_086CE2F4[0x100]; +extern u8 gUnknown_086CE4F4[0x300]; +extern u8 gUnknown_086CE7F4[0x500]; + +static void Task_HandleInput(void); +void Task_806A508(void); +void sub_806A5BC(void); +void CreateCourseSelect(u8 param0); +void TaskDestructor_806A698(struct Task *t); + +void sub_806A150(void); +void CreateTimeAttackLobbyScreen(void); + +void sub_806A150(void) +{ + Strc_80528AC sp00; + sp00.uiGfxID = 128; + sp00.unk2B = 0; + sp00.tiles = &gUnknown_086CE4F4[0]; +#ifndef BUG_FIX + sp00.tilesSize = 0x500; +#else + sp00.tilesSize = sizeof(gUnknown_086CE4F4); +#endif + sp00.layout = &gUnknown_086CE7F4[0]; + sp00.layoutSize = sizeof(gUnknown_086CE7F4); + sp00.palette = &gUnknown_086CE2F4[0]; + sp00.paletteSize = sizeof(gUnknown_086CE2F4); + sp00.unk28 = 0; + sp00.unk29 = 0; + sp00.unk2A = 21; + sub_80528AC(&sp00); +} + +void CreateTimeAttackLobbyScreen(void) +{ + Sprite *s; + struct Task *t; + TimeAttackLobby *lobby; + StrcUi_805423C *unk120; + u8 i; + + m4aSongNumStart(SE_155); + + for (i = 0; i < ARRAY_COUNT(gKeysFirstRepeatIntervals); i++) { + gKeysFirstRepeatIntervals[i] = 0x14; + gKeysContinuedRepeatIntervals[i] = 8; + } + + sub_80535FC(); + gDispCnt = 0x1140; + gBgCntRegs[0] = 0x1E83; + UiGfxStackInit(); + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + + t = TaskCreate(Task_HandleInput, sizeof(TimeAttackLobby), 0x2000, 0, TaskDestructor_806A698); + lobby = TASK_DATA(t); + + unk120 = &lobby->unk120; + lobby->unk134 = 0; + lobby->qUnk130 = 0; + lobby->qUnk12C = 0; + + for (i = 0; i < ARRAY_COUNT(lobby->sprites); i++) { + s = &lobby->sprites[i]; + s->graphics.dest = VramMalloc(gUnknown_0868B69C[i]); + s->graphics.anim = gUnknown_0868B684[i][LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_0868B694[i][LOADED_SAVE->uiLanguage]; + s->x = 47; + s->y = (i * 16) + 33; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + } + + s = &lobby->s2; + s->graphics.dest = VramMalloc(4U); + s->graphics.anim = 857; + s->variant = 0; + s->x = 33; + s->y = 25; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = HITBOX_STATE_INACTIVE; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s++; + s->graphics.dest = VramMalloc(64); + s->graphics.anim = gUnknown_0868B6A0[gSelectedCharacter][0]; + s->variant = gUnknown_0868B6B8[gSelectedCharacter][0]; + s->x = 0x78; + s->y = 0x82; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2400; + unk120->unk0 = 0; + unk120->unk2 = 1; + unk120->unk4 = 2; + unk120->unk6 = 0; + unk120->unk8 = 0x100; + unk120->unkA = 0x10; + sub_805423C(unk120); + sub_806A150(); +} + +static void Task_HandleInput(void) +{ + TimeAttackLobby *lobby = TASK_DATA(gCurTask); + StrcUi_805423C *temp_r6 = &lobby->unk120; + + if (sub_805423C(temp_r6)) { + if (gRepeatedKeys & DPAD_DOWN) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (lobby->unk134 < (ARRAY_COUNT(gUnknown_0868B6C4) - 1)) { + lobby->unk134++; + } else { + lobby->unk134 = 0; + } + } else if (gRepeatedKeys & DPAD_UP) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (lobby->unk134 != 0) { + lobby->unk134--; + } else { + lobby->unk134 = (ARRAY_COUNT(gUnknown_0868B6C4) - 1); + } + } + + if (gPressedKeys & A_BUTTON) { + m4aSongNumStart(SE_SELECT); + if (lobby->unk134 != (ARRAY_COUNT(gUnknown_0868B6C4) - 1)) { + Sprite *s3 = &lobby->s3; + s3->graphics.anim = gUnknown_0868B6A0[gSelectedCharacter][1]; + s3->variant = gUnknown_0868B6B8[gSelectedCharacter][1]; + s3->prevVariant = 0xFF; + } + + temp_r6->unk4 = 1; + temp_r6->unk6 = 0; + gCurTask->main = Task_806A508; + } + } + + sub_806A5BC(); +} + +void Task_806A508(void) +{ + TimeAttackLobby *lobby = TASK_DATA(gCurTask); + + StrcUi_805423C *temp_r4 = &lobby->unk120; + + if ((lobby->qUnk12C < Q(DISPLAY_HEIGHT)) && (lobby->unk134 != 3)) { + lobby->qUnk130 += Q(32. / 256.); + lobby->qUnk12C += lobby->qUnk130; + } else if (sub_805423C(temp_r4)) { + u8 unk134; + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + unk134 = lobby->unk134; + + m4aSongNumStop(SE_155); + TaskDestroy(gCurTask); + + gUnknown_0868B6C4[unk134](); + + return; + } + + sub_806A5BC(); +} + +void sub_806A5BC(void) +{ + Sprite *s; + u8 i; + + TimeAttackLobby *lobby = TASK_DATA(gCurTask); + + for (i = 0; i < ARRAY_COUNT(lobby->sprites); i++) { + s = &lobby->sprites[i]; + DisplaySprite(s); + } + + s = &lobby->s2; + s->y = (lobby->unk134 * 16) + 25; + DisplaySprite(s); + + s++; + s->x = I(lobby->qUnk12C) + DISPLAY_CENTER_X; + if (UpdateSpriteAnimation(s) == ACMD_RESULT__ENDED) { + s->graphics.anim = gUnknown_0868B6A0[gSelectedCharacter][1]; + s->variant = gUnknown_0868B6B8[gSelectedCharacter][1]; + s->prevVariant = -1; + } + DisplaySprite(s); +} + +void sub_806A66C(void) { CreateCharacterSelectionScreen(gSelectedCharacter); } + +void sub_806A680(void) { CreateCourseSelect(0); } + +void sub_806A68C(void) { CreateTitleScreen(1); } + +void TaskDestructor_806A698(struct Task *t) +{ + TimeAttackLobby *lobby = TASK_DATA(t); + u8 i; + + for (i = 0; i < ARRAY_COUNT(lobby->sprites); i++) { + VramFree(lobby->sprites[i].graphics.dest); + } + + VramFree(lobby->s2.graphics.dest); + VramFree(lobby->s3.graphics.dest); +} diff --git a/sa1/src/game/time_attack/menu.c b/sa1/src/game/time_attack/menu.c new file mode 100644 index 0000000000..94df76a5f8 --- /dev/null +++ b/sa1/src/game/time_attack/menu.c @@ -0,0 +1,275 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "game/character_select.h" +#include "game/game_over.h" +#include "game/gTask_03006240.h" +#include "game/save.h" +#include "game/title_screen.h" // CreateMainMenu +#include "game/stage/ui.h" // sub_805423C + +#include "constants/songs.h" +#include "constants/text.h" + +typedef struct TimeAttackMenu { + StrcUi_805423C unk0; + Sprite s; + Sprite s2; + s16 unk6C; + s32 unk70; + u8 unk74; + s16 unk76; +} TimeAttackMenu; + +void Task_TimeAttackMenu(void); + +extern const u16 gUnknown_0869CAF4[0x100]; +extern const u8 gUnknown_0869CCF4[0x1C40]; +extern const u8 gUnknown_0869E934[0x500]; +extern const u16 gUnknown_0869EE34[0x100]; +extern const u8 gUnknown_0869F034[0x20C0]; +extern const u8 gUnknown_086A10F4[0x500]; + +void Task_80103C4(void); +void sub_8010580(void); +void TimeAttack_CreateStartMenu(void); +void TimeAttack_CreateRecordsMenu(void); + +extern void CreateCourseSelect(u8 param0); + +const AnimId gUnknown_080BB35C[UILANG_COUNT] = { 882, 881 }; +const u8 gUnknown_080BB360[2][UILANG_COUNT] = { { 1, 1 }, { 0, 0 } }; +const VoidFn gUnknown_080BB364[2] = { TimeAttack_CreateStartMenu, TimeAttack_CreateRecordsMenu }; + +void CreateTimeAttackMenu(void) +{ + Strc_80528AC sp4; + s32 var_r0; + struct Task *t; + TimeAttackMenu *menu; + Sprite *s; + + gDispCnt = 0x1140; + gBgCntRegs[0] = 0xF84; + gBgScrollRegs[0][1] = 0; + + t = TaskCreate(Task_TimeAttackMenu, sizeof(TimeAttackMenu), 0x2000U, 0U, NULL); + menu = TASK_DATA(t); + menu->unk70 = 0; + menu->unk6C = 0; + menu->unk74 = 0; + menu->unk76 = 0; + + s = &menu->s; + s->x = 0xE0; + s->y = 0x40; + s->graphics.dest = (void *)OBJ_VRAM0; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB35C[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB360[0][LOADED_SAVE->uiLanguage]; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &menu->s2; + s->x = 0; + s->y = 0x40; + s->graphics.dest = (void *)(OBJ_VRAM0 + 0x2000); + s->oamFlags = 0x400; + s->graphics.size = 0; + s->graphics.anim = 0x35C; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + sub_80535FC(); + UiGfxStackInit(); + sp4.uiGfxID = 0x80; + sp4.unk2B = 0; + + if (LOADED_SAVE->uiLanguage != 0) { + sp4.tiles = gUnknown_0869F034; + sp4.palette = gUnknown_0869EE34; + sp4.layout = gUnknown_086A10F4; + sp4.tilesSize = sizeof(gUnknown_0869F034); + sp4.paletteSize = sizeof(gUnknown_0869EE34); + sp4.layoutSize = sizeof(gUnknown_086A10F4); + } else { + sp4.tiles = gUnknown_0869CCF4; + sp4.palette = gUnknown_0869CAF4; + sp4.layout = gUnknown_0869E934; + sp4.tilesSize = sizeof(gUnknown_0869CCF4); + sp4.paletteSize = sizeof(gUnknown_0869CAF4); + sp4.layoutSize = sizeof(gUnknown_0869E934); + } + + sp4.unk28 = 0; + sp4.unk29 = 0; + sp4.unk2A = 0x15; + sub_80528AC(&sp4); + + menu->unk0.unk0 = 0; + menu->unk0.unk2 = 1; + menu->unk0.unk4 = 2; + menu->unk0.unk6 = 0; + menu->unk0.unk8 = 0x200; + menu->unk0.unkA = 0x10; + sub_805423C((StrcUi_805423C *)menu); + + m4aSongNumStartOrContinue(MUS_CHARACTER_SELECTION); +} + +void Task_TimeAttackMenu(void) +{ + Sprite *s; + s32 var_r5; + u8 i; + + TimeAttackMenu *menu = TASK_DATA(gCurTask); + + menu->unk70 += 0x80; + if (menu->unk70 > 0x8000) { + menu->unk70 -= 0x8000; + } + + s = &menu->s; + s->y = (menu->unk74 * 24) + 64; + menu->s.variant = gUnknown_080BB360[menu->unk74][LOADED_SAVE->uiLanguage]; + UpdateSpriteAnimation(s); + + for (var_r5 = I(menu->unk70) - 128; ((224 - var_r5) > 0); var_r5 += 128) { + s->x = 224 - var_r5; + DisplaySprite(s); + } + + s = &menu->s2; + s->y = (menu->unk74 * 24) + 54; + + for (i = 0; i < 8; i++) { + s->x = i * 32; + DisplaySprite(s); + } + + if (sub_805423C(&menu->unk0)) { + gDispCnt &= ~0xE000; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gCurTask->main = Task_80103C4; + } +} + +void Task_80103C4() +{ + Sprite *s; + Sprite *s2; + s16 temp_r4; + s32 var_r5; + u8 i; + + TimeAttackMenu *menu = TASK_DATA(gCurTask); + StrcUi_805423C *strc = &menu->unk0; + + temp_r4 = strc->unk4; + if (temp_r4 != 1) { + if (DPAD_UP & gRepeatedKeys) { + menu->unk70 = 0; + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + menu->unk74--; + if (menu->unk74 > 1U) { + menu->unk74 = 1; + } + } else if (DPAD_DOWN & gRepeatedKeys) { + menu->unk70 = 0; + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + menu->unk74++; + if (menu->unk74 > 1U) { + menu->unk74 = (s8)0; + } + } + + if (gPressedKeys & A_BUTTON) { + strc->unk4 = 1; + strc->unk6 = 0; + menu->unk76 = 1; + m4aSongNumStart(SE_SELECT); + } else if (gPressedKeys & B_BUTTON) { + strc->unk4 = 1; + strc->unk6 = 0; + menu->unk76 = 2; + m4aSongNumStart(SE_RETURN); + } + } else if (sub_805423C(&menu->unk0)) { + temp_r4 &= menu->unk76; // doesn't match without this line... + if (temp_r4 & menu->unk76) { + gUnknown_080BB364[menu->unk74](); + return; + } + + sub_8010580(); + m4aSongNumStop(MUS_CHARACTER_SELECTION); + return; + } + + menu->unk70 += 0x80; + + if (menu->unk70 > 0x8000) { + menu->unk70 -= 0x8000; + } + + s = &menu->s; + s->y = (menu->unk74 * 0x18) + 0x40; + s->variant = gUnknown_080BB360[menu->unk74][LOADED_SAVE->uiLanguage]; + UpdateSpriteAnimation(s); + + for (var_r5 = I(menu->unk70) - 128; (224 - var_r5) > 0; var_r5 += 128) { + s->x = 224 - var_r5; + DisplaySprite(s); + } + + s = &menu->s2; + s->y = (menu->unk74 * 24) + 54; + + for (i = 0; i < 8; i++) { + s->x = i * 32; + DisplaySprite(s); + } +} + +void sub_8010580(void) +{ + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; + TaskDestroy(gCurTask); + CreateMainMenu(1); +} + +void TimeAttack_CreateStartMenu(void) +{ + gGameMode = 1; + TaskDestroy(gCurTask); + CreateCharacterSelectionScreen(0U); +} + +void TimeAttack_CreateRecordsMenu(void) +{ + gGameMode = 0; + TaskDestroy(gCurTask); + CreateCourseSelect(1); +} diff --git a/sa1/src/game/time_attack/records.c b/sa1/src/game/time_attack/records.c new file mode 100644 index 0000000000..e6ca03190b --- /dev/null +++ b/sa1/src/game/time_attack/records.c @@ -0,0 +1,425 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/gTask_03006240.h" +#include "game/sa1_sa2_shared/globals.h" +#include "game/save.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/characters.h" +#include "constants/songs.h" +#include "constants/text.h" +#include "constants/zones.h" + +/* These are the records appearing after selecting / before starting to play a stage */ + +typedef struct CharacterCard { + const u8 *tiles; + s32 tilesSize; + const u16 *palette; + const u8 *layout; +} CharacterCard; + +typedef struct TimeAttackRecords { + /* 0x00 */ Sprite sprites[3]; + /* 0x90 */ Sprite s3; + /* 0xC0 */ GameOverB overB; + /* 0xD8 */ StrcUi_805423C strcD8; + /* 0xE4 */ u8 unkE4[3][8]; + /* 0xFC */ s8 unkFC[0x4]; + /* 0x100 */ s32 qUnkY; + /* 0x100 */ s32 unk104; + /* 0x100 */ s32 unk108; + /* 0x100 */ s32 unk10C; + /* 0x110 */ void *vram110; +} TimeAttackRecords; /* 0x114 */ + +void TimeAttackRecordsInitUI(u8 *vram); +void Task_806BBC0(void); +void sub_806BD24(void); +void sub_806BF04(void); +void sub_806BDC4(u8 rankIndex, struct Task *t); +void TaskDestructor_806BF38(struct Task *t); + +extern u16 gUnknown_086CC774[16]; +extern u8 gUnknown_086CC794[0xA0]; +extern u8 gUnknown_086CC834[0x500]; + +extern const u16 gCharacterCards_Sonic_Palette[]; +extern const u8 gCharacterCards_Sonic_Tiles[0x09C0]; +extern const u8 gCharacterCards_Sonic_Layout[]; +extern const u16 gUnknown_086967B4[]; +extern const u8 gUnknown_086969B4[]; +extern const u8 gUnknown_08696BF4[]; +extern const u16 gCharacterCards_Tails_Palette[]; +extern const u8 gCharacterCards_Tails_Tiles[0x680]; +extern const u8 gCharacterCards_Tails_Layout[]; +extern const u16 gUnknown_08699E74[]; +extern const u8 gUnknown_0869A074[]; +extern const u8 gUnknown_0869A2B4[]; +extern const u16 gCharacterCards_Knuckles_Palette[]; +extern const u8 gCharacterCards_Knuckles_Tiles[0x0800]; +extern const u8 gCharacterCards_Knuckles_Layout[]; +extern const u16 gUnknown_0868FA34[]; +extern const u8 gUnknown_0868FC34[]; +extern const u8 gUnknown_0868FE74[]; +extern const u16 gCharacterCards_Amy_Palette[]; +extern const u8 gCharacterCards_Amy_Tiles[0x4C0]; +extern const u8 gCharacterCards_Amy_Layout[]; +extern const u16 gUnknown_08692E34[]; +extern const u8 gUnknown_08693034[]; +extern const u8 gUnknown_08693274[]; +const CharacterCard gCharacterCards[NUM_CHARACTERS][2] = { + [CHARACTER_SONIC] = { + {gCharacterCards_Sonic_Tiles, sizeof(gCharacterCards_Sonic_Tiles), gCharacterCards_Sonic_Palette, gCharacterCards_Sonic_Layout}, + {gUnknown_086969B4, 0x500, gUnknown_086967B4, gUnknown_08696BF4}, + }, + { + {gCharacterCards_Tails_Tiles, sizeof(gCharacterCards_Tails_Tiles), gCharacterCards_Tails_Palette, gCharacterCards_Tails_Layout }, + {gUnknown_0869A074, 0x500, gUnknown_08699E74, gUnknown_0869A2B4}, + }, + { + {gCharacterCards_Knuckles_Tiles, sizeof(gCharacterCards_Knuckles_Tiles), gCharacterCards_Knuckles_Palette, gCharacterCards_Knuckles_Layout }, + {gUnknown_0868FC34, 0x500, gUnknown_0868FA34, gUnknown_0868FE74}, + }, + { + {gCharacterCards_Amy_Tiles, sizeof(gCharacterCards_Amy_Tiles), gCharacterCards_Amy_Palette, gCharacterCards_Amy_Layout }, + {gUnknown_08693034, 0x500, gUnknown_08692E34, gUnknown_08693274}, + }, +}; +extern u16 gUnknown_0868B814[NUM_TIME_ATTACK_ZONES][3]; +extern u16 gUnknown_0868B838[ACTS_PER_ZONE][3]; +extern u16 gUnknown_0868B844[UILANG_COUNT][12][3]; + +extern const s16 sZoneTimeSecondsTable[]; +extern const u16 sZoneTimeMinutesTable[]; +extern const u8 gSecondsTable[60 * 2]; +extern const u8 gMillisUnpackTable[60 * 2]; + +void TimeAttackRecordsInitUI(u8 *vram) +{ + Strc_80528AC gfx; + + gfx.uiGfxID = UIGFX_TIMER_DIGITS; + gfx.unk2B = 1; + gfx.tiles = gUiGraphics[gfx.uiGfxID].tiles; + gfx.palette = gUiGraphics[gfx.uiGfxID].palette; + gfx.tilesSize = 0x580; + gfx.paletteSize = (16 * sizeof(u16)); + gfx.unk28 = 6; + gfx.vramC = vram; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[gfx.uiGfxID].unk8; + gfx.unk0.unk8 = gUiGraphics[gfx.uiGfxID].unkC; + gfx.unk0.unk9 = gUiGraphics[gfx.uiGfxID].unk10; + gfx.unk0.unkA = gUiGraphics[gfx.uiGfxID].unk14; + gfx.unk0.unkB = gUiGraphics[gfx.uiGfxID].unk18; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gCharacterCards[gSelectedCharacter][1].tiles; + gfx.tilesSize = gCharacterCards[gSelectedCharacter][1].tilesSize; + gfx.palette = gCharacterCards[gSelectedCharacter][1].palette; + gfx.paletteSize = (256 * sizeof(u16)); + gfx.layout = gCharacterCards[gSelectedCharacter][1].layout; + gfx.layoutSize = 0x600; + gfx.unk28 = 0; + gfx.unk29 = 1; + gfx.unk2A = 0x11; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 2; + gfx.tiles = gCharacterCards[gSelectedCharacter][0].tiles; + gfx.tilesSize = gCharacterCards[gSelectedCharacter][0].tilesSize; + gfx.palette = gCharacterCards[gSelectedCharacter][0].palette; + gfx.paletteSize = (256 * sizeof(u16)); + gfx.layout = gCharacterCards[gSelectedCharacter][0].layout; + gfx.layoutSize = 0x600; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); +} + +void CreateTimeAttackRecords() +{ + struct Task *t; + GameOverB *temp_r4; + Sprite *s; + StrcUi_805423C *temp_r2; + u8 i; + void *vram; + + TimeAttackRecords *recs; + + sub_80535FC(); + UiGfxStackInit(); + gDispCnt = 0x1340; + gBgCntRegs[0] = 0x1E83; + gBgCntRegs[1] = 0x1C86; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + vram = VramMalloc(44); + TimeAttackRecordsInitUI(vram); + + t = TaskCreate(Task_806BBC0, sizeof(TimeAttackRecords), 0x2000U, 0U, TaskDestructor_806BF38); + recs = TASK_DATA(t); + temp_r2 = &recs->strcD8; + recs->unk104 = 0; + recs->unk108 = 0; + recs->unk10C = 0; + recs->vram110 = vram; + recs->unkFC[0] = 0x21; + recs->unkFC[1] = 0x22; + recs->unkFC[2] = 0x23; + + s = &recs->sprites[0]; + s->graphics.dest = VramMalloc(gUnknown_0868B814[LEVEL_TO_ZONE(gCurrentLevel)][0]); + s->graphics.anim = gUnknown_0868B814[LEVEL_TO_ZONE(gCurrentLevel)][1]; + s->variant = gUnknown_0868B814[LEVEL_TO_ZONE(gCurrentLevel)][2]; + s->x = 25; + s->y = 24; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &recs->sprites[1]; + s->graphics.dest = VramMalloc(gUnknown_0868B838[ACT_INDEX(gCurrentLevel)][0]); + s->graphics.anim = gUnknown_0868B838[ACT_INDEX(gCurrentLevel)][1]; + s->variant = gUnknown_0868B838[ACT_INDEX(gCurrentLevel)][2]; + s->x = 93; + s->y = 27; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &recs->sprites[2]; + s->graphics.dest = VramMalloc(0xCU); + s->graphics.anim = SA1_ANIM_MP_ACT_MSG_EN; + s->variant = 2; + s->x = 25; + s->y = 80; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &recs->s3; + s->graphics.dest = VramMalloc(gUnknown_0868B844[LOADED_SAVE->uiLanguage][gCurrentLevel][0]); + s->graphics.anim = gUnknown_0868B844[LOADED_SAVE->uiLanguage][gCurrentLevel][1]; + s->variant = gUnknown_0868B844[LOADED_SAVE->uiLanguage][gCurrentLevel][2]; + recs->qUnkY = -Q(90); + s->x = -90; + s->y = 48; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0x480; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + temp_r4 = &recs->overB; + temp_r4->qUnkA = 0xF0; + temp_r4->unkC = 0x8C; + temp_r4->unkE = 8; + temp_r4->unk10 = 1; + temp_r4->unk12 = 6; + temp_r4->unk16 = 1; + temp_r4->unk8 = 0x18; + + for (i = 0; i < 3; i++) { + sub_806BDC4(i, t); + } + + temp_r2->unk0 = 0; + temp_r2->unk2 = 1; + temp_r2->unk4 = 2; + temp_r2->unk6 = 0; + temp_r2->unk8 = 0x100; + temp_r2->unkA = 0x10; + sub_805423C(temp_r2); + + m4aSongNumStartOrContinue(MUS_COURSE_SELECTION); +} + +// (92.00%) https://decomp.me/scratch/vEl3F +NONMATCH("asm/non_matching/game/time_attack_records__Task_806BBC0.inc", void Task_806BBC0()) +{ + StrcUi_805423C *temp_r1; + s16 *temp_r2_2; + u16 var_r3; + s32 *temp_r0; + s32 temp_r1_2; + s32 temp_r2; + u32 var_r1; + u32 var_r7; + winreg_t *var_r2; + + u8 var_r6 = 0; + s8 sp0 = 0; + u32 var_ip = DISPLAY_HEIGHT; + s8 var_r4 = 0; + s32 temp_sb = 0; + TimeAttackRecords *recs = TASK_DATA(gCurTask); + + temp_r1 = &recs->strcD8; + var_r7 = recs->unk104; + var_r7++; + temp_r2 = recs->unk108; + temp_r2++; + recs->unk108 = temp_r2; + if (var_r7 > 0xF0U) { + gFlags &= ~4; + m4aSongNumStop(4U); + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + TaskDestroy(gCurTask); + ApplyGameStageSettings(); + return; + } + if (var_r7 == 0xD0) { + temp_r1->unk4 = 1; + temp_r1->unk6 = 0; + } else if ((3 & gPressedKeys) && (var_r7 > 0x20U) && (var_r7 <= 0xCFU)) { + var_r7 = 0xCF; + } + var_r3 = 0xFF & temp_r2; + gFlags |= 4; + gHBlankCopyTarget = (void *)®_BG0HOFS; + gHBlankCopySize = 4; + var_r2 = (void *)&((u32 *)gBgOffsetsHBlankPrimary)[var_r6]; + + while (var_r6 < var_ip) { + for (var_r1 = 0; var_r1 < 24 && (var_r6 < var_ip); var_r6++, var_r1++) { + *var_r2++ = (var_r3 & 0x1FF); + *var_r2++ = temp_sb; + } + var_r3 = (-(var_r3 + var_r4)); + var_r4 = -var_r4; + }; + recs->unk104 = (s32)var_r7; + sub_805423C(temp_r1); + sub_806BF04(); + sub_806BD24(); +} +END_NONMATCH + +void sub_806BD24() +{ + GameOverB *overB; + Sprite *s; + s16 temp_r0_2; + s32 temp_r0; + u8 i; + + TimeAttackRecords *recs = TASK_DATA(gCurTask); + + overB = &recs->overB; + for (i = 0; i < 3; i++) { + s = &recs->sprites[i]; + DisplaySprite(s); + } + s = &recs->s3; + s->x = I(recs->qUnkY); + while (s->x < 500) { + DisplaySprite(s); + s->x += 200; + } + + for (i = 0; i < 3; i++) { + overB->unkE = 1; + overB->qUnkA = 0x2C; + overB->unkC = (i * 0x10) + 0x5C; + sub_8052F78((const char *)&recs->unkFC[i], overB); + + overB->unkE = 7; + overB->qUnkA = 0x50; + sub_8052F78((const char *)&recs->unkE4[i][0], overB); + } +} + +void sub_806BDC4(u8 rankIndex, struct Task *t) +{ + s32 temp_r0_2; + s32 temp_r2; + s32 temp_r4; + u32 temp_r6; + + TimeAttackRecords *recs = TASK_DATA(t); + + temp_r6 = LOADED_SAVE->timeRecords.table[gSelectedCharacter][gCurrentLevel][rankIndex]; + if (temp_r6 >= MAX_COURSE_TIME) { + recs->unkE4[rankIndex][6] = 0x29; + recs->unkE4[rankIndex][5] = 0x29; + recs->unkE4[rankIndex][3] = 0x29; + recs->unkE4[rankIndex][2] = 0x25; + recs->unkE4[rankIndex][0] = 0x29; + } else { + temp_r4 = Div(temp_r6, 60); + temp_r0_2 = Div(temp_r4, 60); + temp_r4 = (temp_r4 - sZoneTimeSecondsTable[temp_r0_2]); + temp_r2 = ((temp_r6 - sZoneTimeSecondsTable[temp_r4]) - sZoneTimeMinutesTable[temp_r0_2]) * 2; + + recs->unkE4[rankIndex][6] = gMillisUnpackTable[temp_r2 + 1]; + recs->unkE4[rankIndex][5] = gMillisUnpackTable[temp_r2 + 0]; + recs->unkE4[rankIndex][3] = gSecondsTable[temp_r4 * 2 + 1]; + recs->unkE4[rankIndex][2] = gSecondsTable[temp_r4 * 2 + 0]; + recs->unkE4[rankIndex][0] = gSecondsTable[temp_r0_2 * 2 + 1]; + } + recs->unkE4[rankIndex][1] = 0x2A; + recs->unkE4[rankIndex][4] = 0x2A; +} + +void sub_806BF04(void) +{ + TimeAttackRecords *recs = TASK_DATA(gCurTask); + recs->qUnkY -= Q(2); + + if (recs->qUnkY < -Q(200)) { + recs->qUnkY += Q(200); + } +} + +void TaskDestructor_806BF38(struct Task *t) +{ + TimeAttackRecords *recs = TASK_DATA(t); + + VramFree(recs->sprites[0].graphics.dest); + VramFree(recs->sprites[1].graphics.dest); + VramFree(recs->sprites[2].graphics.dest); + VramFree(recs->s3.graphics.dest); + VramFree(recs->vram110); +} \ No newline at end of file diff --git a/sa1/src/game/time_attack/results.c b/sa1/src/game/time_attack/results.c new file mode 100644 index 0000000000..f79331044b --- /dev/null +++ b/sa1/src/game/time_attack/results.c @@ -0,0 +1,387 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "lib/m4a/m4a.h" +#include "game/entity.h" +#include "game/game_over.h" +#include "game/title_screen.h" +#include "game/save.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" +#include "data/ui_graphics.h" + +#include "constants/animations.h" + +typedef struct Game2_5 { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ GameOverB strc60; + /* 0x78 */ GameOverB strc78; + /* 0x90 */ GameOverB strc90; + /* 0xA8 */ StrcUi_805423C strcA8; + /* 0xB4 */ u8 unkB4[0x8]; + /* 0xBC */ u32 unkBC; + /* 0xC0 */ s32 unkC0; + /* 0xB4 */ TimeRecord recordC4; + /* 0xC8 */ u8 *vramC8; + /* 0xCC */ u8 unkCC; +} Game2_5; + +void sub_8069994(u8 *vram); +void Task_8069E50(void); +void sub_8069EE4(bool32 unk0); +void sub_8069FDC(void); +void sub_806A02C(TimeRecord record, struct Task *t); +void TaskDestructor_806A124(struct Task *t); + +extern const s16 sZoneTimeSecondsTable[]; +extern const u16 sZoneTimeMinutesTable[]; +extern const u8 gMillisUnpackTable[60 * 2]; +extern const u8 gSecondsTable[60 * 2]; + +void sub_8069994(u8 *vram) +{ + Strc_80528AC sp00; + s8 sp28; + s8 sp2A; + s8 sp2B; + u8 *sp30; + s8 *temp_r6; + u8 *var_r0; + + UiGfxStackInit(); + + sp00.uiGfxID = 32; + sp00.unk2B = 15; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 0x580; + sp00.paletteSize = 0x20; + sp00.unk28 = 6; + sp00.vramC = vram; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = 16; + sp00.unk2B = 16; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 0x200; + sp00.paletteSize = 0x20; + sp00.unk28 = 12; + sp00.vramC = OBJ_VRAM0 + 0x1000; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = 34; + sp00.unk2B = 2; + if (gCurrentLevel & 0x1) { + sp00.tiles = (gUiGraphics[sp00.uiGfxID].tiles + (80 * TILE_SIZE_4BPP)); + } else { + sp00.tiles = (gUiGraphics[sp00.uiGfxID].tiles); + } + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.paletteSize = 0x20; + sp00.unk28 = 11; + sp00.tilesSize = 0xA00; + sp00.vramC = OBJ_VRAM0 + 0x1800; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = 11 + gSelectedCharacter; + sp00.unk2B = 2; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.tilesSize = 0x600; + sp00.paletteSize = 0xC; + sp00.unk28 = 11; + sp00.vramC = OBJ_VRAM0 + 0x1200; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); +} + +void CreateTimeAttackResult(TimeRecord record) +{ + struct Task *t; + Sprite *s; + Sprite *s2; + StrcUi_805423C *strcA8; + GameOverB *var_r7; + u8 *vram; + s32 temp_r0_2; + + Game2_5 *strc; + + sub_80535FC(); + vram = VramMalloc(44); + sub_8069994(vram); + t = TaskCreate(Task_8069E50, sizeof(Game2_5), 0x2000U, 0U, TaskDestructor_806A124); + strc = TASK_DATA(t); + strcA8 = &strc->strcA8; + temp_r0_2 = RegisterTimeRecord(record); + strc->recordC4 = temp_r0_2; + if (temp_r0_2 != 0) { + m4aSongNumStart(0x131U); + strc->unkCC = 1; + } else { + m4aSongNumStart(0x132U); + strc->unkCC = 0; + } + gMusicManagerState.unk0 = 0xFF; + strc->unkBC = 0; + strc->unkC0 = 0; + strc->vramC8 = vram; + + s = &strc->s; + s->graphics.dest = VramMalloc(24); + s->graphics.anim = 884; + s->variant = 4; + s->x = 120; + s->y = 120; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->oamFlags = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s2 = &strc->s2; + s2->graphics.dest = VramMalloc(8); + s2->graphics.anim = 884; + s2->variant = 3; + s2->x = 40; + s2->y = 88; + s2->graphics.size = 0; + s2->animCursor = 0; + s2->qAnimDelay = 0; + s2->prevVariant = -1; + s2->animSpeed = 0x10; + s2->palId = 0; + s2->hitboxes[0].index = -1; + s2->oamFlags = 0x480; + s2->frameFlags = 0x2000; + UpdateSpriteAnimation(s2); + + var_r7 = &strc->strc60; + var_r7->qUnkA = 0xF0; + var_r7->unkC = 0x8C; + var_r7->unkE = 8; + var_r7->unk10 = 0x10; + var_r7->unk12 = 0xC; + var_r7->unk16 = 1; + var_r7->unk8 = 0x18; + var_r7 = &strc->strc78; + var_r7->qUnkA = 0xF0; + var_r7->unkC = 0x8C; + var_r7->unkE = 9; + var_r7->unk10 = 2; + var_r7->unk12 = 0xB; + var_r7->unk16 = 1; + var_r7->unk8 = 0; + var_r7 = &strc->strc90; + var_r7->qUnkA = 0x50; + var_r7->unkC = 0x50; + var_r7->unkE = 7; + var_r7->unk10 = 0xF; + var_r7->unk12 = 6; + var_r7->unk16 = 1; + var_r7->unk8 = 0; + + strcA8->unk0 = 0; + strcA8->unk2 = 1; + strcA8->unk4 = 1; + strcA8->unk6 = 0; + strcA8->unk8 = 0x100; + strcA8->unkA = 0x10; + sub_806A02C(record, t); +} + +void Task_8069E50() +{ + s32 *temp_r1; + s32 unkBC; + u32 var_r0; + u32 var_r1; + bool32 boolVal = FALSE; + + Game2_5 *strc = TASK_DATA(gCurTask); + StrcUi_805423C *strcA8 = &strc->strcA8; + + unkBC = strc->unkBC; + unkBC++; + strc->unkBC = unkBC; + + if (strc->unkCC != 0) { + var_r0 = 600; + var_r1 = 540; + } else { + var_r0 = 330; + var_r1 = 270; + } + + if (unkBC > var_r0) { + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + TaskDestroy(gCurTask); + GoToNextLevel(); + return; + } + + if (unkBC > var_r1) { + sub_805423C(strcA8); + boolVal = TRUE; + } + + sub_8069FDC(); + sub_8069EE4(boolVal); +} + +void sub_8069EE4(u32 unk0) +{ + GameOverB *temp_r5; + s16 temp_r0; + s32 *temp_r4_2; + u32 temp_r2; + s16 temp_r4; + Game2_5 *strc; + + const u8 arr[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x00 }; + + strc = TASK_DATA(gCurTask); + + if ((u32)strc->unkBC > 60) { + if (strc->recordC4 != 0) { + DisplaySprite(&strc->s); + } + DisplaySprite(&strc->s2); + temp_r5 = &strc->strc90; + if (unk0 != 0) { + sub_8052F78((const char *)strc->unkB4, temp_r5); + } else { + sub_80530CC((const char *)strc->unkB4, temp_r5); + } + } + temp_r5 = &strc->strc60; + temp_r4 = (u16)temp_r5->unkC; + if (unk0 != 0) { + sub_8052F78(" ", (GameOverB *)temp_r5); + } else { + sub_80530CC(" ", (GameOverB *)temp_r5); + } + + temp_r5 = &strc->strc78; + temp_r5->unkC = (s16)temp_r4 + 2; + temp_r5->qUnkA -= 2; + + if (temp_r5->qUnkA < -0x1F) { + temp_r5->qUnkA += 0x20; + strc->unkC0 = Mod(strc->unkC0 + 1, 8); + } + if (unk0 != 0) { + sub_8052F78((const char *)&arr[strc->unkC0], temp_r5); + return; + } + + sub_80530CC((const char *)&arr[strc->unkC0], temp_r5); +} + +void sub_8069FDC() +{ + GameOverB *temp_r2; + s32 temp_r1; + + Game2_5 *strc = TASK_DATA(gCurTask); + + temp_r2 = &strc->strc60; + + if (strc->unkBC > 30 && strc->unkBC < 40) { + temp_r2->unkC -= 0xC; + if (temp_r2->unkC <= 0x13) { + temp_r2->unkC = 0x14; + } + } else if (strc->unkBC < 21) { + if (strc->unkBC > 10) { + temp_r2->qUnkA -= 0x18; + if (temp_r2->qUnkA < 0) { + temp_r2->qUnkA = 0; + } + } + } +} + +// TODO: Fake-match +void sub_806A02C(TimeRecord record, struct Task *t) +{ + s32 temp_r0_2; + s32 temp_r2; + + Game2_5 *strc = TASK_DATA(t); + + if (record >= 36000) { + strc->unkB4[6] = 0x29; + strc->unkB4[5] = 0x29; + strc->unkB4[3] = 0x29; + strc->unkB4[2] = 0x25; + strc->unkB4[0] = 0x29; + } else { +#ifndef NON_MATCHING + register u8 *r1 asm("r1"); + register s16 *r2 asm("r2"); + register s32 r5 asm("r5"); +#else + u8 *r1; + s16 *r2; + s32 r5; +#endif + + r5 = Div(record, 60); + temp_r0_2 = Div(r5, 60); + r5 = (r5 - sZoneTimeSecondsTable[temp_r0_2]) * 2; + r2 = (void *)&sZoneTimeSecondsTable[r5 >> 1]; + temp_r2 = (record - *r2 - (sZoneTimeMinutesTable[temp_r0_2])) * 2; + + strc->unkB4[6] = gMillisUnpackTable[temp_r2 + 1]; + strc->unkB4[5] = gMillisUnpackTable[temp_r2 + 0]; + strc->unkB4[3] = gSecondsTable[r5 + 1]; + r1 = (u8 *)&gSecondsTable[r5 + 0]; + strc->unkB4[2] = *r1; + strc->unkB4[0] = gSecondsTable[temp_r0_2 * 2 + 1]; + } + + strc->unkB4[1] = 0x2A; + strc->unkB4[4] = 0x2A; +} + +void TaskDestructor_806A124(struct Task *t) +{ + Game2_5 *strc = TASK_DATA(t); + VramFree(strc->s.graphics.dest); + VramFree(strc->s2.graphics.dest); + VramFree(strc->vramC8); +} \ No newline at end of file diff --git a/sa1/src/game/time_attack_record.c b/sa1/src/game/time_attack_record.c new file mode 100644 index 0000000000..6c7f9cd92b --- /dev/null +++ b/sa1/src/game/time_attack_record.c @@ -0,0 +1,626 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/course_select.h" +#include "game/gTask_03006240.h" +#include "game/save.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/songs.h" +#include "constants/ui_graphics.h" + +typedef struct TimeAttackRecord_58 { + /* 0x00 */ Sprite s; + /* 0x30 */ GameOverB overB; + /* 0x48 */ s32 unk48; + /* 0x4C */ s32 unk4C; + /* 0x50 */ u8 unk50; + /* 0x51 */ u8 unk51; + /* 0x52 */ u8 unk52; + /* 0x53 */ u8 unk53; + /* 0x54 */ u8 unk54; +} TimeAttackRecord_58; + +typedef struct TimeAttackRecord_E4 { + StrcUi_805423C strc0; + Sprite s; + Sprite s2; + Sprite s3; + Sprite s4; + struct Task *taskCC; // -> TimeAttackRecord_58 + struct Task *taskD0; // -> TimeAttackRecord_58 + s32 unkD4; + s32 unkD8; + u8 unkDC; + u8 unkDD; + u8 unkDE; + u8 unkDF; + u8 unkE0; +} TimeAttackRecord_E4; + +void sub_8060C88(void); +void sub_8061144(void); +void sub_8061480(void); +void Task_8061830(void); +void sub_80613D0(void); +void TaskDestructor_806182C(struct Task *t); + +extern u16 gUnknown_0868B0D4[][2]; +extern u16 gUnknown_0868B0EC[][2]; +extern u8 gUnknown_0868B0F4[]; +extern u16 gUnknown_0868B0FC[][2]; + +extern u8 gUnknown_08690574[]; +extern u8 gUnknown_08691D74[]; +extern u16 gCharacterCards_Amy_Palette[]; +extern u8 gCharacterCards_Amy_Tiles[]; +extern u8 gCharacterCards_Amy_Layout[]; +extern u8 gUnknown_08693974[]; +extern u16 gCharacterCards_Sonic_Palette[]; +extern u8 gUnknown_086951F4[]; +extern u8 gCharacterCards_Sonic_Tiles[]; +extern u8 gCharacterCards_Sonic_Layout[]; +extern u8 gUnknown_086972F4[]; +extern u8 gUnknown_08698BF4[]; +extern u16 gCharacterCards_Tails_Palette[]; +extern u8 gCharacterCards_Tails_Layout[]; +extern u8 gUnknown_0869A9B4[]; +extern u8 gUnknown_0869C5F4[]; + +// TODO: Header +extern const s16 sZoneTimeSecondsTable[]; +extern const u16 sZoneTimeMinutesTable[]; +extern const u8 gMillisUnpackTable[60 * 2]; +extern const u8 gSecondsTable[60 * 2]; +extern void sub_805321C(u8 *param0, GameOverB *param1); +extern u8 gCharacterCards_Knuckles_Layout[]; +extern u8 gCharacterCards_Tails_Tiles[]; +extern u8 gCharacterCards_Knuckles_Tiles[]; +extern u16 gCharacterCards_Knuckles_Palette[]; + +void sub_8060C88(void) +{ + Strc_80528AC gfx; + s8 *temp_r5; + s8 *temp_r7; + + UiGfxStackInit(); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = gUnknown_086972F4; + gfx.tilesSize = 0x1900; + gfx.layout = gUnknown_08698BF4; + gfx.layoutSize = 0x500; + gfx.unk29 = 0x1; + gfx.unk2A = 0x11; + gfx.unk0.unk4 = 0; + gfx.unk0.unk8 = 0; + gfx.unk0.unk9 = 0; + gfx.unk0.unkA = 0; + gfx.unk0.unkB = 0; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gCharacterCards_Sonic_Tiles; + gfx.tilesSize = 0x9C0; + gfx.palette = gCharacterCards_Sonic_Palette; + gfx.paletteSize = 0x200; + gfx.layout = gCharacterCards_Sonic_Layout; + gfx.layoutSize = 0x500; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_TIMER_DIGITS; + gfx.unk2B = 2; + gfx.tiles = gUiGraphics[UIGFX_TIMER_DIGITS].tiles; + gfx.palette = gUiGraphics[UIGFX_TIMER_DIGITS].palette; + gfx.tilesSize = 0x580; + gfx.paletteSize = 0x20; + gfx.unk28 = 2; + gfx.vramC = (u8 *)OBJ_VRAM0 + 0x20; + gfx.unk2A = 0xD; + gfx.unk0.unk4 = gUiGraphics[UIGFX_TIMER_DIGITS].unk8; + gfx.unk0.unk8 = gUiGraphics[UIGFX_TIMER_DIGITS].unkC; + gfx.unk0.unk9 = gUiGraphics[UIGFX_TIMER_DIGITS].unk10; + gfx.unk0.unkA = gUiGraphics[UIGFX_TIMER_DIGITS].unk14; + gfx.unk0.unkB = gUiGraphics[UIGFX_TIMER_DIGITS].unk18; + sub_80528AC(&gfx); +} + +void CreateTimeAttackRecord(u8 arg0) +{ + s32 temp_r0_2; + struct Task *t; + s32 temp_r0_4; + Sprite *s; + TimeAttackRecord_E4 *strcE4; + TimeAttackRecord_58 *strc58; + s32 index; + + sub_80535FC(); + gDispCnt = 0x1340; + m4aSongNumStart(MUS_VS_RECORD); + gBgCntRegs[0] = 0x1D83; + gBgCntRegs[1] = 0x1886; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + + sub_8060C88(); + + strcE4 = TASK_DATA(TaskCreate(sub_8061144, sizeof(TimeAttackRecord_E4), 0x2000U, 0U, TaskDestructor_806182C)); + strcE4->unkD4 = 0; + strcE4->unkDE = 8; + strcE4->unkD8 = 0; + strcE4->strc0.unk0 = 0; + strcE4->strc0.unk2 = 1; + strcE4->strc0.unk4 = 2; + strcE4->strc0.unk6 = 0; + strcE4->strc0.unk8 = 0x100; + strcE4->strc0.unkA = 8; + strcE4->unkDC = 0; + strcE4->unkDD = 0; + strcE4->unkDF = 0; + strcE4->unkE0 = arg0; + + s = &strcE4->s; + s->graphics.dest = OBJ_VRAM0 + 0xC80; + s->graphics.anim = gUnknown_0868B0D4[arg0 >> 1][0]; + s->variant = gUnknown_0868B0D4[arg0 >> 1][1]; + s->graphics.size = 0; + s->x = 17; + s->y = 24; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &strcE4->s2; + s->graphics.dest = OBJ_VRAM0 + 0x1900; + s->graphics.anim = gUnknown_0868B0EC[arg0 & 1][0]; + s->variant = gUnknown_0868B0EC[arg0 & 1][1]; + s->graphics.size = 0; + s->x = 85; + s->y = 27; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &strcE4->s3; + s->graphics.dest = OBJ_VRAM0 + 0x2580; + s->graphics.anim = 884; + s->variant = 2; + s->graphics.size = 0; + s->x = 21; + s->y = 81; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + s = &strcE4->s4; + s->graphics.dest = OBJ_VRAM0 + 0x3200; + s->graphics.anim = SA1_ANIM_MENU_CURSOR; + s->variant = 0; + s->graphics.size = 0; + s->x = 20; + s->y = 80; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + t = TaskCreate(sub_8061480, sizeof(TimeAttackRecord_58), 0x2030U, 0U, NULL); + strc58 = TASK_DATA(t); + strc58->unk4C = 0; + strc58->overB.qUnkA = 0; + strc58->overB.unkC = 0; + strc58->overB.unkE = 0; + strc58->overB.unk10 = 2; + strc58->overB.unk12 = 2; + strc58->overB.unk16 = 1; + strc58->overB.unk8 = 0; + strc58->unk48 = 0; + strc58->unk50 = 0; + strc58->unk52 = 0; + strc58->unk53 = 0; + strc58->unk54 = arg0; + strcE4->taskCC = t; + + t = TaskCreate(Task_8061830, sizeof(TimeAttackRecord_58), 0x2080U, 0U, NULL); + strc58 = TASK_DATA(t); + strc58->unk4C = 0; + strc58->unk48 = 0; + strc58->unk50 = 0; + strc58->unk52 = 0; + strc58->unk53 = 0; + strc58->unk54 = arg0; + strcE4->taskD0 = t; + + s = &strc58->s; + s->graphics.dest = OBJ_VRAM0 + 0x8E0; + s->graphics.anim = 0x371; + s->variant = 8; + s->graphics.size = 0; + s->x = 20; + s->y = 61; + s->oamFlags = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0x2000; + UpdateSpriteAnimation(s); + + sub_805423C(&strcE4->strc0); + m4aSongNumStartOrContinue(MUS_VS_RECORD); +} + +// (87.95%) https://decomp.me/scratch/Bkzoh +NONMATCH("asm/non_matching/game/time_attack_record__sub_8061144.inc", void sub_8061144()) +{ + u32 var_r7 = 0; + u8 sp0 = 0; + s16 *temp_r2_6; + s32 *temp_r0_3; + s32 *temp_r2; + u32 temp_r1; + s32 temp_r2_5; + s32 temp_sb; + s8 temp_r1_2; + TimeAttackRecord_58 *temp_r0; + TimeAttackRecord_58 *temp_r0_2; + u8 *temp_r2_2; + u8 *temp_r2_3; + u8 *temp_r2_4; + u8 *temp_r3; + u8 *var_r4; + u8 temp_r0_4; + u8 var_r1; + u16 var_r3; + u16 *var_r2; + + TimeAttackRecord_E4 *strcE4 = TASK_DATA(gCurTask); + + temp_r0 = TASK_DATA(strcE4->taskCC); + temp_r0_2 = TASK_DATA(strcE4->taskD0); + temp_r2 = &strcE4->unkD8; + temp_r0_3 = &strcE4->unkD4; + temp_r1 = *temp_r2; + + temp_sb = *temp_r0_3 + 1; + *temp_r0_3 = temp_sb; + temp_r0->unk48 = temp_sb; + temp_r0_2->unk48 = temp_sb; + *temp_r2 = temp_r1; + temp_r0->unk4C = temp_r1; + temp_r0_2->unk4C = temp_r1; + + if (strcE4->unkDE == 0 && strcE4->unkDF == 0) { + if (0x10 & gRepeatedKeys) { + m4aSongNumStart(0x6CU); + strcE4->unkDE = 2; + temp_r2_2 = &strcE4->unkDC; + strcE4->unkDD = strcE4->unkDC; + strcE4->unkDC = (strcE4->unkDC + 1) & 3; + m4aSongNumStart(0x6CU); + } else if (0x20 & gRepeatedKeys) { + m4aSongNumStart(0x6CU); + strcE4->unkDE = 2; + + strcE4->unkDD = strcE4->unkDC; + strcE4->unkDC = (strcE4->unkDC - 1) & 3; + m4aSongNumStart(0x6CU); + } + + if (2 & gPressedKeys) { + m4aSongNumStart(0x6BU); + strcE4->unkDF = 1; + strcE4->strc0.unk4 = 1; + strcE4->strc0.unk6 = 0x2000 - (u16)strcE4->strc0.unk6; + m4aSongNumStart(0x6BU); + } + } else { + temp_r0_4 = strcE4->unkDE; + if (temp_r0_4 != 0) { + strcE4->unkDE = (u8)(temp_r0_4 - 1); + } + } + sub_805423C(&strcE4->strc0); + temp_r0->unk52 = strcE4->unkDE; + temp_r0_2->unk52 = strcE4->unkDE; + temp_r3 = &strcE4->unkDD; + temp_r0->unk51 = strcE4->unkDD; + temp_r0->unk50 = strcE4->unkDC; + temp_r0_2->unk51 = strcE4->unkDD; + temp_r0_2->unk50 = strcE4->unkDC; + if ((strcE4->unkDF != 0) && ((s32)strcE4->strc0.unk6 > 0x1800) && (strcE4->strc0.unk4 == 1)) { + gFlags &= ~4; + m4aSongNumStop(0xAU); + gDispCnt &= 0x1FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + TaskDestroy(strcE4->taskCC); + TaskDestroy(strcE4->taskD0); + TaskDestroy(gCurTask); + CreateCourseSelect(1U); + return; + } + + var_r3 = temp_sb; + gFlags |= 4; + gHBlankCopyTarget = (void *)®_BG0HOFS; + gHBlankCopySize = 4; + { + var_r2 = gBgOffsetsHBlankPrimary; + for (var_r7; var_r7 < DISPLAY_HEIGHT; var_r7++) { + for (var_r1 = 0; var_r7 < DISPLAY_HEIGHT && var_r1 < 24; var_r1++) { + *var_r2++ = (s16)(var_r3 & 0x1FF); + *var_r2++ = 0; + var_r7 = (u32)(u8)(var_r7 + 1); + } + temp_r1_2 = (s8)sp0; + var_r3 = (0 - (var_r3 + temp_r1_2)); + sp0 = (0 - temp_r1_2); + } + } + sub_80613D0(); +} +END_NONMATCH + +void sub_80613D0() +{ + Sprite *s; + u8 temp_r0; + u8 offsetX; + + TimeAttackRecord_E4 *strcE4 = TASK_DATA(gCurTask); + + s = &strcE4->s; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &strcE4->s2; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &strcE4->s3; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &strcE4->s4; + UpdateSpriteAnimation(s); + + temp_r0 = Div(strcE4->unkD4, 10); + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + offsetX = gUnknown_0868B0F4[temp_r0 % 8u]; + s->x = offsetX + 15; + DisplaySprite(s); + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + s->x = DISPLAY_WIDTH - (offsetX + 15); + DisplaySprite(s); +} + +// (96.12%) https://decomp.me/scratch/l6XXR +NONMATCH("asm/non_matching/game/time_attack_record__sub_8061480.inc", void sub_8061480()) +{ + Strc_80528AC gfx; + u8 sp30[8]; + TimeAttackRecord_58 *strc58; + u8 sp3C; + s32 temp_r0; + s32 temp_r0_2; + s32 temp_r2_2; + s32 temp_r4_3; + u8 var_r7_2; + s8 *var_r7; + TimeRecord temp_r5_4; + u8 *var_r0; + + strc58 = TASK_DATA(gCurTask); + + if (strc58->unk52 < 2) { + sp3C = strc58->unk50; + } else { + sp3C = strc58->unk51; + } + + if (strc58->unk52 == 1) { + UiGfxStackInit(); + if (strc58->unk50 == 0) { + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = gUnknown_086972F4; + gfx.tilesSize = 0x1900; + gfx.layout = gUnknown_08698BF4; + gfx.layoutSize = 0x500; + gfx.unk29 = 1; + gfx.unk2A = 0x11; + gfx.unk0.unk4 = 0; + gfx.unk0.unk8 = 0; + gfx.unk0.unk9 = 0; + gfx.unk0.unkA = 0; + gfx.unk0.unkB = 0; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gCharacterCards_Sonic_Tiles; + gfx.tilesSize = 0x9C0; + gfx.palette = gCharacterCards_Sonic_Palette; + gfx.paletteSize = 0x200; + gfx.layout = gCharacterCards_Sonic_Layout; + gfx.layoutSize = 0x500; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + } else if (strc58->unk50 == 1) { + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = gUnknown_0869A9B4; + gfx.tilesSize = 0x1C40; + gfx.layout = gUnknown_0869C5F4; + gfx.layoutSize = 0x500; + gfx.unk29 = 1; + gfx.unk2A = 0x11; + gfx.unk0.unk4 = 0; + gfx.unk0.unk8 = 0; + gfx.unk0.unk9 = 0; + gfx.unk0.unkA = 0; + gfx.unk0.unkB = 0; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gCharacterCards_Tails_Tiles; + gfx.tilesSize = 0x680; + gfx.palette = gCharacterCards_Tails_Palette; + gfx.paletteSize = 0x200; + gfx.layout = gCharacterCards_Tails_Layout; + gfx.layoutSize = 0x500; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + } else if (strc58->unk50 == 2) { + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = gUnknown_08690574; + gfx.tilesSize = 0x1800; + gfx.layout = gUnknown_08691D74; + gfx.layoutSize = 0x500; + gfx.unk29 = 1; + gfx.unk2A = 0x11; + gfx.unk0.unk4 = 0; + gfx.unk0.unk8 = 0; + gfx.unk0.unk9 = 0; + gfx.unk0.unkA = 0; + gfx.unk0.unkB = 0; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gCharacterCards_Knuckles_Tiles; + gfx.tilesSize = 0x7C0; + gfx.palette = gCharacterCards_Knuckles_Palette; + gfx.paletteSize = 0x200; + gfx.layout = gCharacterCards_Knuckles_Layout; + gfx.layoutSize = 0x500; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + } else { + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 1; + gfx.tiles = gUnknown_08693974; + gfx.tilesSize = 0x1880; + gfx.layout = gUnknown_086951F4; + gfx.layoutSize = 0x500; + gfx.unk29 = 1; + gfx.unk2A = 0x11; + gfx.unk0.unk4 = 0; + gfx.unk0.unk8 = 0; + gfx.unk0.unk9 = 0; + gfx.unk0.unkA = 0; + gfx.unk0.unkB = 0; + sub_80528AC(&gfx); + + gfx.uiGfxID = UIGFX_OPTIONS; + gfx.unk2B = 0; + gfx.tiles = gCharacterCards_Amy_Tiles; + gfx.tilesSize = 0x4C0; + gfx.palette = gCharacterCards_Amy_Palette; + gfx.paletteSize = 0x200; + gfx.layout = gCharacterCards_Amy_Layout; + gfx.layoutSize = 0x500; + gfx.unk28 = 0; + gfx.unk29 = 0; + gfx.unk2A = 0x15; + sub_80528AC(&gfx); + } + } + + for (var_r7_2 = 0; var_r7_2 < 3; var_r7_2++) { + struct TimeRecords *records = &LOADED_SAVE->timeRecords; + strc58->overB.unkE = 1; + sp30[0] = var_r7_2 + 0x21; + strc58->overB.qUnkA = 0x2C; + strc58->overB.unkC = (var_r7_2 << 4) + 92; + sub_805321C(sp30, &strc58->overB); + strc58->overB.unkE = 7; + strc58->overB.qUnkA = 0x54; + strc58->overB.unkC = (var_r7_2 << 4) + 92; + temp_r5_4 = records->table[sp3C][strc58->unk54][var_r7_2]; + if (temp_r5_4 >= MAX_COURSE_TIME) { + sp30[6] = 0x29U; + sp30[5] = 0x29U; + sp30[3] = 0x29U; + sp30[2] = 0x25U; + sp30[0] = 0x29; + } else { + temp_r0 = Div(temp_r5_4, 60); + temp_r0_2 = Div(temp_r0, 60); + temp_r4_3 = (temp_r0 - sZoneTimeSecondsTable[temp_r0_2]); + temp_r2_2 = ((temp_r5_4 - sZoneTimeSecondsTable[temp_r4_3]) - sZoneTimeMinutesTable[temp_r0_2]); + + sp30[6] = gMillisUnpackTable[temp_r2_2 * 2 + 1]; + sp30[5] = gMillisUnpackTable[temp_r2_2 * 2 + 0]; + sp30[3] = gSecondsTable[temp_r4_3 * 2 + 1]; + sp30[2] = gSecondsTable[temp_r4_3 * 2 + 0]; + sp30[0] = gSecondsTable[temp_r0_2 + 1]; + } + sp30[1] = 0x2A; + sp30[4] = 0x2A; + sub_805321C(sp30, &strc58->overB); + } +} +END_NONMATCH + +void TaskDestructor_806182C(struct Task *t) { } + +void Task_8061830() +{ + s32 index; + + TimeAttackRecord_58 *strc58 = TASK_DATA(gCurTask); + Sprite *s = &strc58->s; + + if (strc58->unk52 < 2) { + index = strc58->unk50; + } else { + index = strc58->unk51; + } + + s->graphics.anim = gUnknown_0868B0FC[index][0]; + s->variant = gUnknown_0868B0FC[index][1]; + s->prevVariant = -1; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} diff --git a/sa1/src/game/time_over.c b/sa1/src/game/time_over.c new file mode 100644 index 0000000000..7392597f73 --- /dev/null +++ b/sa1/src/game/time_over.c @@ -0,0 +1,149 @@ +#include "global.h" +#include "core.h" +#include "malloc_vram.h" +#include "game/game_over.h" +#include "game/time_over.h" +#include "game/entity.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" + +#include "constants/animations.h" +#include "constants/zones.h" + +typedef struct TimeOverState { + StrcUi_805423C strc0; + Sprite s; + Sprite s2; + s32 timer; +} TimeOverState; + +typedef struct TimeOverTimer { + struct Task *t; // -> TimeOverState + s16 timer; +} TimeOverTimer; + +void Task_TimeOverTimerUpdate(void); +void Task_TimeOverStateUpdate(void); +void TaskDestructor_TimeOverState(struct Task *t); +void TaskDestructor_805BC90(struct Task *t); + +void CreateTimeOver() +{ + TimeOverTimer *overTimer; + Sprite *s; + struct Task *t2 = NULL; + + struct Task *t = TaskCreate(Task_TimeOverStateUpdate, sizeof(TimeOverState), 0x2220U, 0U, TaskDestructor_TimeOverState); + TimeOverState *state = TASK_DATA(t); + StrcUi_805423C *strc0 = &state->strc0; + + state->timer = 0; + strc0->unk0 = 0; + strc0->unk2 = 1; + strc0->unk4 = 1; + strc0->unk6 = 0; + strc0->unk8 = 0x40; + strc0->unkA = 8; + + // "TIME" + s = &state->s; + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_GAME_OVER, 4); + s->graphics.size = 0; + s->frameFlags = 0; + s->x = DISPLAY_WIDTH + 60; + s->y = 60; + s->oamFlags = 3; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->graphics.anim = SA1_ANIM_GAME_OVER; + s->variant = 4; + + // "OVER" + s = &state->s2; + s->graphics.dest = ALLOC_TILES_VARIANT(SA1_ANIM_GAME_OVER, 1); + s->graphics.size = 0; + s->frameFlags = 0; + s->x = DISPLAY_WIDTH + 60; + s->y = 60; + s->oamFlags = 3; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->graphics.anim = SA1_ANIM_GAME_OVER; + s->variant = 1; + + gDispCnt &= ~0xE000; + sub_80543A4(&state->strc0); + + t2 = TaskCreate(Task_TimeOverTimerUpdate, sizeof(TimeOverTimer), 0x2200U, 0U, TaskDestructor_805BC90); + overTimer = TASK_DATA(t2); + overTimer->timer = 0; + overTimer->t = t; +} + +void Task_TimeOverTimerUpdate() +{ + TimeOverTimer *overTimer = TASK_DATA(gCurTask); + TimeOverState *state = TASK_DATA(overTimer->t); + + state->timer = overTimer->timer; + if (overTimer->timer > TIME(0, 3.5)) { + if (gCurrentLevel == LEVEL_INDEX(ZONE_6, ACT_1)) { + gCamera.SA2_LABEL(unk50) |= 0x2000; + } + sub_805423C(&state->strc0); + } + + if (++overTimer->timer > TIME(0, 5.5)) { + TaskDestroy(overTimer->t); + TaskDestroy(gCurTask); + + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + gRingCount = 0; + CreateGameStage(); + } +} + +void Task_TimeOverStateUpdate() +{ + Sprite *s; + s16 timer; + + TimeOverState *state = TASK_DATA(gCurTask); + + timer = state->timer; + if (timer > TIME(0, 2.0)) { + state->s2.x = state->s.x = DISPLAY_CENTER_X; + } else if (timer > TIME(0, 0.5)) { + state->s2.x = state->s.x = (DISPLAY_WIDTH + 60) - ((timer - TIME(0, 0.5)) * 2); + } + + s = &state->s; + UpdateSpriteAnimation(s); + DisplaySprite(s); + + s = &state->s2; + UpdateSpriteAnimation(s); + DisplaySprite(s); +} + +void TaskDestructor_TimeOverState(struct Task *t) +{ + TimeOverState *state; + + state = TASK_DATA(t); + VramFree(state->s.graphics.dest); + VramFree(state->s2.graphics.dest); + + gDispCnt &= ~0xE000; +} + +void TaskDestructor_805BC90(struct Task *t) { } \ No newline at end of file diff --git a/sa1/src/game/title_screen.c b/sa1/src/game/title_screen.c new file mode 100644 index 0000000000..1749d97e66 --- /dev/null +++ b/sa1/src/game/title_screen.c @@ -0,0 +1,882 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "trig.h" +#include "malloc_vram.h" +#include "bg_triangles.h" +#include "lib/m4a/m4a.h" +#include "game/character_select.h" +#include "game/entity.h" +#include "game/multiplayer/mode_select.h" +#include "game/options_screen.h" +#include "game/sa1_sa2_shared/collision.h" +#include "game/sa1_sa2_shared/demo_manager.h" +#include "game/save.h" +#include "game/stage/terrain_collision.h" +#include "game/stage/player.h" +#include "game/stage/stage.h" +#include "game/stage/ui.h" +#include "game/time_attack/menu.h" +#include "game/title_screen.h" +#include "game/water_effects.h" + +// LoadTinyChaoGarden +#include "../chao_garden/include/program_params.h" +#include "game/assets/compressed/roms.h" + +#include "constants/animations.h" +#include "constants/char_states.h" +#include "constants/move_states.h" +#include "constants/songs.h" +#include "constants/tilemaps.h" +#include "constants/zones.h" + +#define MENU_ITEMS_TOP_Y 93 +#define MENU_ITEMS_SPACE 14 +#define NUM_MAIN_MENU_ITEMS 5 + +void TaskDestructor_TitleScreen(struct Task *t); +void Task_800D268(); +void Task_800D450(); +void Task_MainMenu_Select(void); +void Task_LoadGameLogo(); +void Task_MainMenuInit(); +void Task_SegaLogoInit(); +void Task_SetSegaLogoTask(); +void Task_SonicTeamLogoInit(); +void Task_SwitchTo_Task_MainMenu_Select(); +void Task_800D11C(); +void sub_800D364(); +void sub_800D3E0(); +void SwitchToSonicTeamLogo(); +void sub_800D498(); +void Task_800D4B0(); +void Task_800D7EC(); +void sub_800D878(); +void Task_800DE44(); +void Task_800DEE4(); +void Task_SwitchToDemoInit(); +void Task_SwitchToMainMenu(); + +extern void CreateIntroAnimation(void); + +const ALIGNED(4) AnimId gUnknown_080BB310[UILANG_COUNT] = { SA1_ANIM_PRESS_START_MSG_JP, SA1_ANIM_PRESS_START_MSG_EN }; +const u8 gUnknown_080BB314[] = { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 }; +const u8 sTitlescreenFrameTileSizes[] = { 28, 16, 28, 20, 40 }; +const u8 gUnknown_080BB323[] = { 0, 2, 4, 6 }; +const u8 gUnknown_080BB327[] = { 0, 1, 3, 2, 0 }; +const VoidFn sMainMenuSecondaryItems[NUM_MAIN_MENU_ITEMS - 1] + = { CreateMultiplayerModeSelectScreen, CreateTimeAttackMenu, CreateOptionsMenu, LoadTinyChaoGarden }; + +typedef struct SegaLogo { + u16 unk0; + Background bg; +} SegaLogo; /* 0x44 */ + +typedef struct SonicTeamLogo { + u16 unk0; + Background bg; + s16 qFade; +} SonicTeamLogo; /* 0x48 */ + +typedef struct MainMenu { + /* 0x000 */ Sprite s; + /* 0x030 */ Sprite items[NUM_MAIN_MENU_ITEMS]; + /* 0x120 */ Background bg120; + /* 0x160 */ Background bg160; + /* 0x1A0 */ StrcUi_805423C unk1A0; + /* 0x1AC */ u16 unk1AC; + /* 0x1AE */ u8 selectedItem; + /* 0x1AF */ u8 unk1AF; + /* 0x1B0 */ s16 unk1B0; +} MainMenu; + +void CreateSegaLogo(void) +{ + struct Task *t; + SegaLogo *logo; + Background *bg; + + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gFlags |= 0x8000; + gDispCnt = DISPCNT_OBJ_1D_MAP; + gBgCntRegs[2] = 0x5E01; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + + DmaFill32(3, 0, VRAM, 64); + + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xFF; + gBgSprites_Unknown2[2][3] = 0x40; + + t = TaskCreate(Task_SetSegaLogoTask, sizeof(SegaLogo), 0x2000, 0, NULL); + + logo = TASK_DATA(t); + logo->unk0 = 0; + + bg = &logo->bg; + bg->graphics.dest = (void *)BG_CHAR_ADDR(0); + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(30); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_INTRO_PRESENTED_BY_SEGA; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 5; + bg->unk24 = 5; + bg->targetTilesX = 20; + bg->targetTilesY = 10; + bg->paletteOffset = 0; + bg->flags = BACKGROUND_FLAGS_BG_ID(2); + + DrawBackground(bg); +} + +void Task_SegaLogoInit(void) +{ + SegaLogo *logo; + + logo = TASK_DATA(gCurTask); + gDispCnt |= DISPCNT_BG2_ON; + logo->unk0++; + SA2_LABEL(sub_8007858)(2U, 0U, (160 - logo->unk0), gBgScrollRegs[2][0], (gBgScrollRegs[2][1] + 160) - logo->unk0); + SA2_LABEL(sub_80078D4)(2U, (160 - logo->unk0), 160, (u16)gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + + if (logo->unk0 == 160) { + gCurTask->main = sub_800D3E0; + logo->unk0 = 0U; + } +} + +void Task_800D11C(void) +{ + SegaLogo *logo; + + logo = TASK_DATA(gCurTask); + logo->unk0++; + SA2_LABEL(sub_80078D4)(2U, 0U, (160 - logo->unk0), gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + SA2_LABEL(sub_8007858) + (2U, (160 - logo->unk0), 160, gBgScrollRegs[2][0], (gBgScrollRegs[2][1] + 160) - logo->unk0); + + if (logo->unk0 == 160) { + gFlags &= ~0x8000; + SwitchToSonicTeamLogo(); + } +} + +void CreateSonicTeamLogo(void) +{ + struct Task *t; + SonicTeamLogo *logo; + Background *bg; + + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + gDispCnt = DISPCNT_OBJ_1D_MAP; + gBgCntRegs[2] = 0x5E01; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + + DmaFill32(3, 0, VRAM, 64); + + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xFF; + gBgSprites_Unknown2[2][3] = 0x40; + + t = TaskCreate(Task_SonicTeamLogoInit, sizeof(SonicTeamLogo), 0x2000, 0, NULL); + + logo = TASK_DATA(t); + logo->unk0 = 0; + + bg = &logo->bg; + bg->graphics.dest = (void *)BG_CHAR_ADDR(0); + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(30); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_INTRO_CREATED_BY_SONIC_TEAM; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 5; + bg->unk24 = 5; + bg->targetTilesX = 20; + bg->targetTilesY = 10; + bg->paletteOffset = 0; + bg->flags = BACKGROUND_FLAGS_BG_ID(2); + + DrawBackground(bg); +} + +void Task_800D268(void) +{ + s32 temp_r0; + s32 temp_r6; + u16 temp_r0_2; + SonicTeamLogo *logo; + + logo = TASK_DATA(gCurTask); + gDispCnt |= DISPCNT_BG2_ON; + + logo->unk0 += 2; + if (logo->unk0 < 280) { + SA2_LABEL(sub_80078D4)(2, 0, 40, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + SA2_LABEL(sub_80078D4)(2, 120, 160, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + +#if !PORTABLE + // BUG: For some reason this currently overwrites memory it shouldn't be able to access. + // Task memory gets fuzzed and the game crashes. + // (In the 2nd call to SA2_LABEL(sub_8007958) ) + if (logo->unk0 < 200) { + SA2_LABEL(sub_8007958)(2U, 40, 120, (s16)(280 - logo->unk0), -1, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + } else { + SA2_LABEL(sub_8007958)(2U, 40, (64 - logo->unk0), (280 - logo->unk0), -1, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + SA2_LABEL(sub_80078D4)(2U, (64 - logo->unk0), 120, gBgScrollRegs[2][0], gBgScrollRegs[2][1]); + } +#endif + } else { + m4aSongNumStart(SE_RING); + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + gCurTask->main = Task_800D450; + logo->unk0 = 0U; + } +} + +void sub_800D364(void) +{ + SonicTeamLogo *logo = TASK_DATA(gCurTask); + + if (gPressedKeys & (A_BUTTON | START_BUTTON)) { + gCurTask->main = Task_800D4B0; + return; + } + + logo->qFade += Q(0.5); + + if (logo->qFade > Q(16)) { + gBldRegs.bldY = Q(16); + sub_800D498(); + return; + } + gBldRegs.bldY = I(logo->qFade); +} + +void Task_SetSegaLogoTask(void) +{ + gCurTask->main = Task_SegaLogoInit; + gCurTask->main(); +} + +void sub_800D3E0(void) +{ + SegaLogo *logo = TASK_DATA(gCurTask); + + if (++logo->unk0 == 120) { + gCurTask->main = Task_800D11C; + logo->unk0 = 0U; + } +} + +void SwitchToSonicTeamLogo(void) +{ + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + TaskDestroy(gCurTask); + CreateSonicTeamLogo(); +} + +void Task_SonicTeamLogoInit(void) +{ + gCurTask->main = Task_800D268; + gCurTask->main(); +} + +void Task_800D450(void) +{ + SonicTeamLogo *logo = TASK_DATA(gCurTask); + + if (logo->unk0++ > 120) { + logo->qFade = 0; + gCurTask->main = sub_800D364; + gBldRegs.bldCnt = 0xFF; + gBldRegs.bldY = 0; + } +} + +void sub_800D498(void) +{ + TaskDestroy(gCurTask); + CreateIntroAnimation(); +} + +void Task_800D4B0(void) +{ + gFlags &= ~FLAGS_8000; + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + TaskDestroy(gCurTask); + CreateTitleScreen(1); +} + +typedef struct TitleScreen { + /* 0x00 */ Sprite s; + /* 0x30 */ Sprite s2; + /* 0x60 */ Background bg; + /* 0xA0 */ Background bg2; + /* 0xE0 */ s16 qBlend; + /* 0xE2 */ u16 unkE2; + /* 0xE4 */ s16 unkE4; + /* 0xE6 */ u16 unkE6; + /* 0xE8 */ bool8 playMusic; +} TitleScreen; + +void CreateTitleScreen(u32 playMusic) +{ + struct Task *t; + TitleScreen *title; + Sprite *s; + Background *bg; + AnimId animsPressStart[UILANG_COUNT] = { SA1_ANIM_PRESS_START_MSG_JP, SA1_ANIM_PRESS_START_MSG_EN }; + + gDispCnt = 0x41; + gBgCntRegs[2] = 0x568C | BGCNT_PRIORITY(1); + gBgCntRegs[0] = 0x1480 | BGCNT_PRIORITY(2); + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; + gBgSprites_Unknown1[2] = 0xFF; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = -1; + gBgSprites_Unknown2[2][3] = 0x20; + + DmaFill32(3, 0, BG_VRAM, 64); + DmaFill32(3, 0, BG_VRAM + 0xFFC0, 0x80); // TODO: This spills into OBJ VRAM! + + t = TaskCreate(Task_LoadGameLogo, sizeof(TitleScreen), 0x2000U, 0U, TaskDestructor_TitleScreen); + title = TASK_DATA(t); + s = &title->s; + title->unkE2 = 0; + title->qBlend = Q(16); + title->playMusic = playMusic; + gBldRegs.bldCnt = 0x20A5; + gBldRegs.bldY = I(title->qBlend); + s->x = 120; + s->y = 113; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_PRESS_START_MSG_JP); // NOTE: Technically MAX(SA1_ANIM_PRESS_START_MSG_JP, + // SA1_ANIM_PRESS_START_MSG_EN), but JP is the bigger one. + s->graphics.size = 0; + s->graphics.anim = animsPressStart[LOADED_SAVE->uiLanguage]; + s->variant = 0; + s->animCursor = 0; + s->prevVariant = -1; + s->qAnimDelay = Q(0); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->oamFlags = 0x400; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + s = &title->s2; + s->x = 0; + s->y = 134; + s->graphics.dest = ALLOC_TILES(SA1_ANIM_TITLE_COPYRIGHT); + s->graphics.size = 0; + s->graphics.anim = 780; + s->variant = UILANG_DEFAULT; // 0: Japan 2001, 1: International (2002) + s->animCursor = 0; + s->prevVariant = -1; + s->qAnimDelay = Q(0); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->oamFlags = 0x400; + s->frameFlags = 0x1000; + UpdateSpriteAnimation(s); + bg = &title->bg; + bg->graphics.dest = (void *)BG_CHAR_ADDR(0); + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(20); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_SA1_TITLE_BG; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 20; + bg->paletteOffset = 0; + bg->flags = BACKGROUND_FLAGS_BG_ID(0) | BACKGROUND_FLAG_4; + DrawBackground(bg); + + if (title->playMusic) { + m4aSongNumStart(MUS_TITLE_FANFARE); + } +} + +void Task_LoadGameLogo(void) +{ + TitleScreen *title; + Background *bg; + s16 *temp_r5; + s16 temp_r0_2; + + gDispCnt |= DISPCNT_BG0_ON | DISPCNT_OBJ_ON; + title = TASK_DATA(gCurTask); + + if (title->qBlend == Q(16)) { + bg = &title->bg2; + bg->graphics.dest = (void *)BG_CHAR_ADDR(3); + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(22); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = (TM_SA1_TITLE_LOGO_JP + LOADED_SAVE->uiLanguage); + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 24; + bg->targetTilesY = 10; + title->bg2.paletteOffset = 0; + bg->flags = BACKGROUND_FLAGS_BG_ID(2) | BACKGROUND_FLAG_4; + DrawBackground(bg); + } + title->qBlend -= 0x55; + + gBldRegs.bldY = I(title->qBlend); + + if (title->qBlend <= 0) { + title->unkE4 = 0x400; + title->unkE6 = 0xFFF0; + gBldRegs.bldY = 0; + gCurTask->main = Task_800D7EC; + } +} + +void Task_800D7EC(void) +{ + TitleScreen *title = TASK_DATA(gCurTask); + + gDispCnt |= DISPCNT_BG2_ON; + + title->unkE4 += title->unkE6; + title->unkE6 -= 8; + if (title->unkE4 < 0x100) { + title->unkE4 = 0x100; + title->unkE2 = 0; + gCurTask->main = sub_800D878; + } + + SA2_LABEL(sub_8003EE4)(0, title->unkE4, title->unkE4, 0x8D, 0x1A, 0xC0, 30, gBgAffineRegs); +} + +void sub_800D878(void) +{ + TitleScreen *title = TASK_DATA(gCurTask); + + if (++title->unkE2 > 60) { + if (gPressedKeys & START_BUTTON) { + m4aSongNumStart(SE_SELECT); + gCurTask->main = Task_SwitchToMainMenu; + return; + } + + if (!((title->unkE2 - 60) & 0x20)) { + DisplaySprite(&title->s); + } + } + + DisplaySprite(&title->s2); + + if (title->unkE2 > 900) { + gCurTask->main = Task_SwitchToDemoInit; + return; + } +} + +void CreateMainMenu(u32 param0) +{ + StrcUi_805423C *temp_r1_3; + s8 *temp_r0; + + struct Task *t; + struct MainMenu *menu; + Sprite *s; + Background *bg; + + gGameMode = 0; + SA2_LABEL(gUnknown_0300543C) = 0; + gDispCnt = 0x1541; + gBgCntRegs[2] = 0x568D; + gBgCntRegs[0] = 0x1482; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + gBgScrollRegs[2][0] = 0; + gBgScrollRegs[2][1] = 0; + + t = TaskCreate(Task_MainMenuInit, sizeof(MainMenu), 0x2000, 0, NULL); + menu = TASK_DATA(t); + s = &menu->s; + menu->unk1AC = 0; + menu->unk1AF = param0; + + s->x = DISPLAY_CENTER_X; + s->y = DISPLAY_CENTER_Y; + s->graphics.dest = (void *)BG_VRAM + 0x40; + s->graphics.size = 0; + s->graphics.anim = 1; // TODO: Why? + s->variant = 0; + s->animCursor = 0; + s->prevVariant = 0xFF; + s->qAnimDelay = Q(0); + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x10000; + + if (menu->unk1AF != 0) { + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] |= ~0; + gBgSprites_Unknown2[0][3] = 0x20; + gBgSprites_Unknown1[2] |= ~0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] |= ~0; + gBgSprites_Unknown2[2][3] = 0x20; + + DmaFill32(3, 0, BG_CHAR_ADDR_FROM_BGCNT(0), 0x40); + DmaFill32(3, 0, BG_CHAR_ADDR_FROM_BGCNT(2) + 0x3FC0, 0x80); // NOTE: Overflow to 0x4040! + } + + menu->selectedItem = 0; + bg = &menu->bg120; + bg->graphics.dest = (void *)BG_CHAR_ADDR(0); + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(20); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = TM_SA1_TITLE_BG; + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 30; + bg->targetTilesY = 20; + bg->paletteOffset = 0; + bg->flags = 4; + + if (menu->unk1AF != 0) { + DrawBackground(bg); + } + + bg = &menu->bg160; + bg->graphics.dest = (void *)BG_CHAR_ADDR(3); + bg->graphics.anim = 0; + bg->layoutVram = (void *)BG_SCREEN_ADDR(22); + bg->unk18 = 0; + bg->unk1A = 0; + bg->tilemapId = (TM_SA1_TITLE_LOGO_JP + LOADED_SAVE->uiLanguage); + bg->unk1E = 0; + bg->unk20 = 0; + bg->unk22 = 0; + bg->unk24 = 0; + bg->targetTilesX = 24; + bg->targetTilesY = 10; + bg->paletteOffset = 0; + bg->flags = 6; + + if (menu->unk1AF != 0) { + DrawBackground(bg); + } + + SA2_LABEL(sub_8003EE4)(0U, 0x100, 0x100, 0x8D, 0x1A, 0xC0, 0x1E, gBgAffineRegs); + temp_r1_3 = &menu->unk1A0; + temp_r1_3->unk0 = 0; + temp_r1_3->unk2 = 1; + temp_r1_3->unk4 = 2; + temp_r1_3->unk6 = 0; + temp_r1_3->unk8 = 0x200; + temp_r1_3->unkA = 1; + + if (menu->unk1AF != 0) { + sub_805423C(temp_r1_3); + } +} + +void Task_MainMenuInit(void) +{ + s8 *temp_r1_2; + u16 temp_r1; + bool32 someBool; + u8 i; + + MainMenu *menu = TASK_DATA(gCurTask); + Sprite *s = &menu->s; + StrcUi_805423C *strc = &menu->unk1A0; + + someBool = TRUE; + if (menu->unk1AF != 0) { + someBool = sub_805423C(strc) ? TRUE : FALSE; + } + + if (someBool) { + if (s->graphics.size == 0) { + s->x = 0; + s->y = 0; + s->graphics.dest = (void *)BG_CHAR_ADDR(4); + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_CHAO_HOVER_SIDE; + s->variant = 0; + s->animCursor = 0; + s->qAnimDelay = Q(0); + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0x400; + + gCurTask->main = Task_SwitchTo_Task_MainMenu_Select; + } + + for (i = 0; i < ARRAY_COUNT(menu->items); i++) { + s = &menu->items[i]; + s->x = DISPLAY_CENTER_X; + s->y = (i * MENU_ITEMS_SPACE) + MENU_ITEMS_TOP_Y; + s->graphics.dest = VramMalloc((u32)sTitlescreenFrameTileSizes[i]); + s->graphics.size = 0; + s->graphics.anim = gUnknown_080BB310[LOADED_SAVE->uiLanguage]; + s->variant = gUnknown_080BB314[LOADED_SAVE->uiLanguage + (i * 2)]; + s->oamFlags = 0x3C0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + } + + for (i = 0; (i < ARRAY_COUNT(gKeysFirstRepeatIntervals)); i++) { + gKeysFirstRepeatIntervals[i] = 20; + gKeysContinuedRepeatIntervals[i] = 8; + } + + gDispCnt &= 0x9FFF; + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + } +} + +void Task_MainMenu_Select(void) +{ + AnimCmdResult acmdRes; + u8 i; + + MainMenu *menu = TASK_DATA(gCurTask); + Sprite *s = &menu->s; + + if (gRepeatedKeys & DPAD_UP) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (--menu->selectedItem > NUM_MAIN_MENU_ITEMS - 1) { + menu->selectedItem = NUM_MAIN_MENU_ITEMS - 1; + } + } else if (gRepeatedKeys & DPAD_DOWN) { + m4aSongNumStart(SE_MENU_CURSOR_MOVE); + + if (++menu->selectedItem > NUM_MAIN_MENU_ITEMS - 1) { + menu->selectedItem = 0; + } + } + + s->x = 72; + s->y = (menu->selectedItem * MENU_ITEMS_SPACE) + 0x6B; + + while ((acmdRes = UpdateSpriteAnimation(s)) != ACMD_RESULT__RUNNING) { + if (acmdRes == ACMD_RESULT__ENDED) { + break; + } + } + + for (i = 0; i < ARRAY_COUNT(menu->items); i++) { + s = &menu->items[i]; + + if (i == menu->selectedItem) { + if (i != 0) { + s->palId = 1; + } else { + s->palId = i; + } + } else { + if (i != 0) { + s->palId = 0; + } else { + s->palId = 255; + } + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); + } + + if (1 & gPressedKeys) { + m4aSongNumStart(SE_SELECT); + gCurTask->main = Task_800DE44; + menu->unk1B0 = 0; + + if (menu->selectedItem == 4) { + gBldRegs.bldCnt = 0xBF; + } else { + gBldRegs.bldCnt = 0xFF; + } + + gBldRegs.bldY = 0; + } +} + +void Task_800DE44(void) +{ + u8 i; + + MainMenu *menu = TASK_DATA(gCurTask); + + menu->unk1B0 += 0x55; + + if (menu->unk1B0 >= Q(16)) { + menu->unk1B0 = Q(16); + + gCurTask->main = Task_800DEE4; + + gBgSprites_Unknown1[0] = 0; + gBgSprites_Unknown2[0][0] = 0; + gBgSprites_Unknown2[0][1] = 0; + gBgSprites_Unknown2[0][2] = 0xFF; + gBgSprites_Unknown2[0][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = 0xFF; + gBgSprites_Unknown2[2][3] = 0x20; + + gFlags &= ~4; + } + + gBldRegs.bldY = I(menu->unk1B0); + + for (i = 0; i < ARRAY_COUNT(menu->items); i++) { + DisplaySprite(&menu->items[i]); + }; +} + +void Task_800DEE4(void) +{ + u8 selectedItem; + u8 i; + + MainMenu *menu = TASK_DATA(gCurTask); + + selectedItem = menu->selectedItem; + + for (i = 0; i < ARRAY_COUNT(menu->items); i++) { + VramFree(menu->items[i].graphics.dest); + } + + TaskDestroy(gCurTask); + m4aSongNumStart(MUS_BOSS_FIGHT); + m4aMPlayImmInit(&gMPlayInfo_BGM); + m4aSongNumStop(MUS_BOSS_FIGHT); + + if (selectedItem == 0) { + gGameMode = GAME_MODE_SINGLE_PLAYER; + CreateCharacterSelectionScreen(0); + return; + } + + gDispCnt &= ~(DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + sMainMenuSecondaryItems[selectedItem - 1](); +} + +void Task_SwitchToDemoInit(void) +{ + TaskDestroy(gCurTask); + + gInputRecorder.mode = RECORDER_PLAYBACK; + gInputPlaybackData = gDemoRecordings[gDemoPlayCounter]; + gSelectedCharacter = gUnknown_080BB327[gDemoPlayCounter]; + gCurrentLevel = gUnknown_080BB323[gDemoPlayCounter]; + gDemoPlayCounter = (gDemoPlayCounter + 1) % 4u; + gGameMode = GAME_MODE_SINGLE_PLAYER; + + CreateDemoManager(); + ApplyGameStageSettings(); +} + +void Task_SwitchToMainMenu(void) +{ + TaskDestroy(gCurTask); + CreateMainMenu(0); +} + +void TaskDestructor_TitleScreen(struct Task *t) +{ +#ifdef BUG_FIX + // NOTE: This is *technically* not a bug, but it's more coherent like this. + TitleScreen *title = TASK_DATA(t); +#else + TitleScreen *title = TASK_DATA(gCurTask); +#endif + + VramFree(title->s.graphics.dest); + VramFree(title->s2.graphics.dest); +} + +void Task_SwitchTo_Task_MainMenu_Select(void) +{ + gCurTask->main = Task_MainMenu_Select; + Task_MainMenu_Select(); +} + +void LoadTinyChaoGarden(void) +{ + gFlags |= FLAGS_8000; + +#ifdef BUG_FIX + // NOTE: It also works with the other song for some reason, but this is more correct. + m4aSongNumStop(MUS_TITLE_FANFARE); +#else + // MUS_CHARACTER_SELECTION never plays in the main menu. + m4aSongNumStop(MUS_CHARACTER_SELECTION); +#endif + + m4aSoundVSyncOff(); + + LZ77UnCompWram(gMultiBootProgram_TinyChaoGarden, (void *)EWRAM_START); + TinyChaoGardenConfig[0] = LOADED_SAVE->score; + TinyChaoGardenConfig[1] = LOADED_SAVE->language; + +#if (GAME == GAME_SA1) + TinyChaoGardenConfig[2] = gFrameCount + LOADED_SAVE->checksum; +#else + TinyChaoGardenConfig[2] = ((Random() + gFrameCount) << 8) + Random(); +#endif + + SoftResetExram(0U); +} diff --git a/sa1/src/game/to_be_continued_screen.c b/sa1/src/game/to_be_continued_screen.c new file mode 100644 index 0000000000..9eace6ab0c --- /dev/null +++ b/sa1/src/game/to_be_continued_screen.c @@ -0,0 +1,185 @@ +#include "global.h" +#include "core.h" +#include "gba/defines.h" +#include "trig.h" +#include "flags.h" +#include "game/title_screen.h" + +#include "constants/animations.h" +#include "constants/vram_hardcoded.h" + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ u16 unk30; + /* 0x32 */ u16 positions[16][2]; +} ToBeContinuedScreenShrunk; + +typedef struct { + /* 0x00 */ Sprite s; + /* 0x30 */ u16 unk30; + /* 0x32 */ u16 positions[16][2]; + /* 0x74 */ struct Task *tasks74[2]; + /* 0x7C */ u16 unk7C; + /* 0x7E */ u16 unk7E; +} ToBeContinuedScreen; + +void Task_ToBeContinuedScreenInit(void); +void Task_80124C4(void); +void Task_801252C(void); +void TaskDestructor_ToBeContinuedScreen(struct Task *t); +void Task_ShrunkToBeContinuedScreenInit(void); +void TaskDestructor_8012724(struct Task *t); +struct Task *sub_80125C0(struct Task *tbcTask, u8 taskPriority); + +void CreateToBeContinuedScreen(void) +{ + struct Task *t, *t2; + ToBeContinuedScreen *tbc; + u8 i; + Sprite *s; + + gDispCnt = DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP; + t = TaskCreate(Task_ToBeContinuedScreenInit, sizeof(ToBeContinuedScreen), 0x2000, 0, TaskDestructor_ToBeContinuedScreen); + tbc = TASK_DATA(t); + s = &tbc->s; + + tbc->unk30 = 0; + tbc->unk7C = 0; + + s->x = DISPLAY_WIDTH; + s->y = DISPLAY_CENTER_Y; + + s->graphics.dest = VRAM_RESERVED_TO_BE_CONTINUED; + s->oamFlags = SPRITE_OAM_ORDER(18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_TO_BE_CONTINUED; + s->variant = 0; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + + t2 = t; + for (i = 0; i < ARRAY_COUNT(tbc->tasks74); i++) { + tbc->tasks74[i] = t2 = sub_80125C0(t2, i + 1); + } + + DmaFill32(3, ((480 << 16) | DISPLAY_CENTER_Y), tbc->positions, sizeof(tbc->positions)); + + gBgPalette[0] = RGB_BLACK; + gFlags |= FLAGS_UPDATE_BACKGROUND_PALETTES; +} + +void Task_ToBeContinuedScreenInit(void) +{ + ToBeContinuedScreen *tbc; + Sprite *s; + + gBldRegs.bldCnt = 0; + gBldRegs.bldY = 0; + + tbc = TASK_DATA(gCurTask); + tbc->unk7C = (tbc->unk7C + 8) & ONE_CYCLE; + s = &tbc->s; + + s->x = ((COS_24_8(tbc->unk7C) * 15) >> 4) + DISPLAY_CENTER_X; + + tbc->positions[tbc->unk30][0] = s->x; + tbc->positions[tbc->unk30][1] = s->y; + tbc->unk30 = (tbc->unk30 + 1) % 16u; + DisplaySprite(s); + + if (tbc->unk7C == 0x100) { + s->x = DISPLAY_CENTER_X; + tbc->unk7E = 0; + gCurTask->main = Task_80124C4; + } else if (tbc->unk7C == 0x200) { + tbc->unk7E = 0; + gCurTask->main = Task_801252C; + } +} + +void Task_80124C4(void) +{ + ToBeContinuedScreen *tbc = TASK_DATA(gCurTask); + Sprite *s = &tbc->s; + + tbc->positions[tbc->unk30][0] = s->x; + tbc->positions[tbc->unk30][1] = s->y; + tbc->unk30 = (tbc->unk30 + 1) % 16u; + DisplaySprite(s); + + if (++tbc->unk7E == GBA_FRAMES_PER_SECOND + 1) { + gCurTask->main = Task_ToBeContinuedScreenInit; + } +} + +void Task_801252C(void) +{ + ToBeContinuedScreen *tbc = TASK_DATA(gCurTask); + Sprite *s = &tbc->s; + + tbc->positions[tbc->unk30][0] = s->x; + tbc->positions[tbc->unk30][1] = s->y; + tbc->unk30 = (tbc->unk30 + 1) % 16u; + + if (++tbc->unk7E == GBA_FRAMES_PER_SECOND + 1) { + TasksDestroyAll(); + + PAUSE_BACKGROUNDS_QUEUE(); + gBgSpritesCount = 0; + PAUSE_GRAPHICS_QUEUE(); + + CreateSegaLogo(); + } +} + +struct Task *sub_80125C0(struct Task *tbcTask, u8 priority) +{ + struct Task *t; + ToBeContinuedScreenShrunk *shrunk; + ToBeContinuedScreen *tbc; + u8 i; + Sprite *s; + + t = TaskCreate(Task_ShrunkToBeContinuedScreenInit, sizeof(ToBeContinuedScreenShrunk), 0x2000 | priority, 0, TaskDestructor_8012724); + t->parent = (TaskPtr)(uintptr_t)tbcTask; + shrunk = TASK_DATA(t); + s = &shrunk->s; + + tbc = TASK_DATA(tbcTask); + shrunk->unk30 = (tbc->unk30 + 8) % 16u; + + s->x = tbc->s.x; + s->y = tbc->s.y; + + s->graphics.dest = tbc->s.graphics.dest + (56 * TILE_SIZE_4BPP); + s->oamFlags = SPRITE_OAM_ORDER(priority + 18); + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_TO_BE_CONTINUED; + s->variant = priority; + SPRITE_INIT_SCRIPT(s, 1.0); + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + + DmaFill32(3, ((480 << 16) | DISPLAY_CENTER_Y), shrunk->positions, sizeof(shrunk->positions)); + + return t; +} + +void Task_ShrunkToBeContinuedScreenInit(void) +{ + ToBeContinuedScreenShrunk *sub = TASK_DATA(gCurTask); + ToBeContinuedScreen *tbc = TASK_DATA(TASK_PARENT(gCurTask)); + + sub->s.x = tbc->positions[sub->unk30][0]; + sub->s.y = tbc->positions[sub->unk30][1]; + + sub->positions[sub->unk30][0] = sub->s.x; + sub->positions[sub->unk30][1] = sub->s.y; + sub->unk30 = (tbc->unk30 + 8) % 16u; + DisplaySprite(&sub->s); +} + +void TaskDestructor_ToBeContinuedScreen(struct Task *t) { } + +void TaskDestructor_8012724(struct Task *t) { } diff --git a/sa1/src/game/vs_record.c b/sa1/src/game/vs_record.c new file mode 100644 index 0000000000..cc2e674a71 --- /dev/null +++ b/sa1/src/game/vs_record.c @@ -0,0 +1,591 @@ +#include "global.h" +#include "core.h" +#include "lib/m4a/m4a.h" +#include "data/ui_graphics.h" +#include "game/gTask_03006240.h" +#include "game/save.h" +#include "game/stage/ui.h" + +typedef struct VsRecord_10 { + s32 unk0; + u8 unk4[8]; + s8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; +} VsRecord_10; + +typedef struct VsRecord_48 { + /* 0x00 */ StrcUi_805423C strc; + /* 0x0C */ Sprite s; + /* 0x3C */ struct Task *task3C; + /* 0x40 */ s32 unk40; + /* 0x44 */ s32 unk44; +} VsRecord_48; + +typedef struct VsRecord_F0 { + /* 0x00 */ VsRecord_10 records[10]; + /* 0xA0 */ GameOverB unkA0; + /* 0xB8 */ Sprite s; + /* 0xE8 */ s32 unkE8; + /* 0xEC */ s32 unkEC; +} VsRecord_F0; + +void SwapRecords(VsRecord_10 *a, VsRecord_10 *b); +void Task_VsRecordInit(void); +void Task_8060874(void); +void sub_806012C(void); +void CreatePlayerDataMenu(void); +void TaskDestructor_VsRecord(struct Task *t); + +extern void sub_805321C(u8 *param0, GameOverB *param1); +extern void sub_805345C(u8 *param0, GameOverB *param1); + +extern u16 gUnknown_0868B8D4[16]; +extern u8 gUnknown_0868B8F4[0x7C0]; +extern u8 gUnknown_0868C0B4[0x500]; +extern u16 gUnknown_0868C5B4[16]; +extern u8 gUnknown_0868C5D4[0x940]; +extern u8 gUnknown_0868CF14[0x500]; +extern u16 gUnknown_0868D414[16]; +extern u8 gUnknown_0868D434[0x620]; +extern u8 gUnknown_0868DA54[0x580]; +extern u16 gUnknown_0868DFD4[16]; +extern u8 gUnknown_0868DFF4[0x600]; +extern u8 gUnknown_0868E5F4[0x580]; + +void sub_805FF38(VsRecord_10 *records, u8 arg1, s16 arg2, s16 arg3) +{ + s16 sp0; + s16 sp4; + s16 temp_r1_2; + u8 var_r4; + u8 var_r5; + + var_r4 = arg2; + var_r5 = arg3; + temp_r1_2 = (records[var_r4].unkC + records[var_r5].unkC) >> 1; + while (var_r4 < var_r5) { + if (arg1 == 0) { + while (records[var_r4].unkC < temp_r1_2) { + var_r4++; + } + + while (records[var_r5].unkC > temp_r1_2) { + var_r5--; + } + } else { + while (records[var_r4].unkC > temp_r1_2) { + var_r4++; + } + + while (records[var_r5].unkC < temp_r1_2) { + var_r5--; + } + } + + if (var_r4 < var_r5) { + SwapRecords(&records[var_r4], &records[var_r5]); + var_r4++; + var_r5--; + } + } + + if (arg2 < --var_r4) { + sub_805FF38(records, arg1, arg2, var_r4); + } + + if (arg3 > ++var_r5) { + sub_805FF38(records, arg1, var_r5, arg3); + } +} + +void SwapRecords(VsRecord_10 *a, VsRecord_10 *b) +{ + VsRecord_10 temp; + u8 i; + + // Copy a -> temp + temp.unk0 = a->unk0; + temp.unkC = a->unkC; + temp.unkD = a->unkD; + temp.unkE = a->unkE; + for (i = 0; i < ARRAY_COUNT(temp.unk4); i++) { + temp.unk4[i] = a->unk4[i]; + } + + // Copy b -> a + a->unk0 = b->unk0; + a->unkC = b->unkC; + a->unkD = b->unkD; + a->unkE = b->unkE; + for (i = 0; i < ARRAY_COUNT(a->unk4); i++) { + a->unk4[i] = b->unk4[i]; + } + + // Copy temp -> b + b->unk0 = temp.unk0; + b->unkC = temp.unkC; + b->unkD = temp.unkD; + b->unkE = temp.unkE; + for (i = 0; i < ARRAY_COUNT(b->unk4); i++) { + b->unk4[i] = temp.unk4[i]; + } +} + +void sub_806012C(void) +{ + SaveGame *save = LOADED_SAVE; + Strc_80528AC sp00; + + UiGfxStackInit(); + + if (save->uiLanguage == 0) { + sp00.uiGfxID = UIGFX_OPTIONS; + sp00.unk2B = 0; + sp00.tiles = gUnknown_0868B8F4; + sp00.tilesSize = sizeof(gUnknown_0868B8F4); + sp00.palette = gUnknown_0868B8D4; + sp00.paletteSize = sizeof(gUnknown_0868B8D4); + sp00.layout = gUnknown_0868C0B4; + sp00.layoutSize = sizeof(gUnknown_0868C0B4); + sp00.unk28 = 0; + sp00.unk29 = 0; + sp00.unk2A = 21; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_OPTIONS; + sp00.unk2B = 01; + sp00.tiles = gUnknown_0868D434; + sp00.tilesSize = sizeof(gUnknown_0868D434); + sp00.palette = gUnknown_0868D414; + sp00.paletteSize = sizeof(gUnknown_0868D414); + sp00.layout = gUnknown_0868DA54; + sp00.layoutSize = sizeof(gUnknown_0868DA54); + sp00.unk28 = 1; + sp00.unk29 = 1; + sp00.unk2A = 21; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + } else { + sp00.uiGfxID = UIGFX_OPTIONS; + sp00.unk2B = 0; + sp00.tiles = gUnknown_0868C5D4; + sp00.tilesSize = sizeof(gUnknown_0868C5D4); + sp00.palette = gUnknown_0868C5B4; + sp00.paletteSize = sizeof(gUnknown_0868C5B4); + sp00.layout = gUnknown_0868CF14; + sp00.layoutSize = sizeof(gUnknown_0868CF14); + sp00.unk28 = 0; + sp00.unk29 = 0; + sp00.unk2A = 21; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = UIGFX_OPTIONS; + sp00.unk2B = 1; + sp00.tiles = gUnknown_0868DFF4; + sp00.tilesSize = sizeof(gUnknown_0868DFF4); + sp00.palette = gUnknown_0868DFD4; + sp00.paletteSize = sizeof(gUnknown_0868DFD4); + sp00.layout = gUnknown_0868E5F4; + sp00.layoutSize = sizeof(gUnknown_0868E5F4); + sp00.unk28 = 1; + sp00.unk29 = 1; + sp00.unk2A = 21; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); + } + + sp00.uiGfxID = UIGFX_ASCII_CHARS; + sp00.unk2B = 2; + sp00.tiles = gUiGraphics[0].tiles; + sp00.palette = gUiGraphics[0].palette; + sp00.vramC = OBJ_VRAM0; + sp00.tilesSize = 0x1B80; + sp00.paletteSize = 0x20; + sp00.unk28 = 2; + sp00.unk2A = 13; + sp00.unk0.unk4 = gUiGraphics[0].unk8; + sp00.unk0.unk8 = gUiGraphics[0].unkC; + sp00.unk0.unk9 = gUiGraphics[0].unk10; + sp00.unk0.unkA = gUiGraphics[0].unk14; + sp00.unk0.unkB = gUiGraphics[0].unk18; + sub_80528AC(&sp00); + + sp00.uiGfxID = 60; + sp00.unk2B = 3; + sp00.tiles = gUiGraphics[sp00.uiGfxID].tiles; + sp00.palette = gUiGraphics[sp00.uiGfxID].palette; + sp00.vramC = OBJ_VRAM0; + sp00.tilesSize = 0x20; + sp00.paletteSize = 0x20; + sp00.unk28 = 2; + sp00.unk2A = 12; + sp00.unk0.unk4 = gUiGraphics[sp00.uiGfxID].unk8; + sp00.unk0.unk8 = gUiGraphics[sp00.uiGfxID].unkC; + sp00.unk0.unk9 = gUiGraphics[sp00.uiGfxID].unk10; + sp00.unk0.unkA = gUiGraphics[sp00.uiGfxID].unk14; + sp00.unk0.unkB = gUiGraphics[sp00.uiGfxID].unk18; + sub_80528AC(&sp00); +} + +void CreateVsRecord() +{ + Sprite *s; + VsRecord_10 *temp_r2; + VsRecord_10 *temp_r5; + s32 temp_r1; + struct Task *t; + u8 i, j; + + VsRecord_48 *record48; + VsRecord_F0 *recordF0; + + sub_80535FC(); + gDispCnt = 0x1340; + m4aSongNumStop(0x30U); + m4aSongNumStart(0xAU); + gBgCntRegs[0] = 0x1F00; + gBgCntRegs[1] = 0x1E07; + gBgScrollRegs[0][0] = 0; + gBgScrollRegs[0][1] = 0; + gBgScrollRegs[1][0] = 0; + gBgScrollRegs[1][1] = 0; + sub_806012C(); + + record48 = TASK_DATA(TaskCreate(Task_VsRecordInit, sizeof(VsRecord_48), 0x2000U, 0U, TaskDestructor_VsRecord)); + record48->unk40 = 0; + record48->unk44 = 0; + record48->strc.unk0 = 0; + record48->strc.unk2 = 1; + record48->strc.unk4 = 2; + record48->strc.unk6 = 0; + record48->strc.unk8 = 0x100; + record48->strc.unkA = 8; + + t = TaskCreate(Task_8060874, sizeof(VsRecord_F0), 0x2030U, 0U, NULL); + recordF0 = TASK_DATA(t); + recordF0->unkEC = 0; + recordF0->unkA0.qUnkA = 0; + recordF0->unkA0.unkC = 0; + recordF0->unkA0.unkE = 0; + recordF0->unkA0.unk10 = 2; + recordF0->unkA0.unk12 = 2; + recordF0->unkA0.unk16 = 1; + recordF0->unkA0.unk8 = 0; + recordF0->unkE8 = 0; + record48->task3C = t; + + s = &recordF0->s; + s->graphics.dest = (void *)0x06017080; + s->graphics.anim = 0x368; + s->variant = 0; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + s = &record48->s; + s->graphics.dest = (void *)0x06016400; + s->graphics.anim = 0x2E9; + s->variant = 0; + s->oamFlags = 0; + s->graphics.size = 0; + s->animCursor = 0; + s->qAnimDelay = 0; + s->prevVariant = -1; + s->animSpeed = 0x10; + s->palId = 0; + s->hitboxes[0].index = -1; + s->frameFlags = 0; + UpdateSpriteAnimation(s); + + // TODO: There's some inconsistency regarding the types here... + DmaCopy16(3, LOADED_SAVE->multiplayerScores, recordF0, 0xA0); + + for (i = 0; i < 9; i++) { + for (j = i + 1; j < 10; j++) { + temp_r5 = &recordF0->records[i]; + temp_r2 = &recordF0->records[j]; + + if (temp_r5->unkC < temp_r2->unkC) { + SwapRecords(temp_r5, temp_r2); + } + } + } + + sub_805423C(&record48->strc); + m4aSongNumStart(0xAU); +} + +void Task_VsRecordInit() +{ + Sprite *s; + s32 temp_r0; + s32 temp_r2; + u32 var_r0; + u32 var_r1; + s32 var_r5; + s32 unk40; + + VsRecord_48 *record48 = TASK_DATA(gCurTask); + VsRecord_F0 *recordF0 = TASK_DATA(record48->task3C); + + var_r5 = record48->unk44; + unk40 = record48->unk40; + unk40++; + if ((var_r5 != 0) && (DPAD_UP & gInput)) { + var_r1 = var_r5 - Q(1); + var_r0 = I(var_r1); + var_r5 = 0; + if (var_r0 != 0) { + var_r5 = var_r1; + } + } else if (((u32)var_r5 < 0x4200) && (DPAD_DOWN & gInput)) { + var_r1 = var_r5 + Q(1); + var_r0 = I(var_r1); + var_r5 = 0x4200; + if (var_r0 < 0x4200) { + var_r5 = var_r1; + } + } + + record48->unk40 = unk40; + recordF0->unkE8 = unk40; + record48->unk44 = var_r5; + recordF0->unkEC = var_r5; + sub_805423C(&record48->strc); + + if (record48->strc.unk6 > 0x1800) { + if ((B_BUTTON & gPressedKeys) && (record48->strc.unk4 != 1)) { + m4aSongNumStart(0x6BU); + record48->strc.unk4 = 1; + record48->strc.unk6 = 0x2000 - (u16)record48->strc.unk6; + m4aSongNumStart(0x6BU); + } + if ((record48->strc.unk6 > 0x1800) && (record48->strc.unk4 == 1)) { + m4aSongNumStop(10); + TaskDestroy(record48->task3C); + TaskDestroy(gCurTask); + gBgSprites_Unknown1[1] = 0; + gBgSprites_Unknown2[1][0] = 0; + gBgSprites_Unknown2[1][1] = 0; + gBgSprites_Unknown2[1][2] = 0xFF; + gBgSprites_Unknown2[1][3] = 0x20; + gBgSprites_Unknown1[2] = 0; + gBgSprites_Unknown2[2][0] = 0; + gBgSprites_Unknown2[2][1] = 0; + gBgSprites_Unknown2[2][2] = -1; + gBgSprites_Unknown2[2][3] = 0x20; + CreatePlayerDataMenu(); + return; + } + } + + s = &record48->s; + UpdateSpriteAnimation(s); + s->x = 233; + if (var_r5 != 0) { + s->y = 70; + s->frameFlags &= 0xFFFFF7FF; + DisplaySprite(s); + } + if (var_r5 != 0x4200) { + s->y = 138; + s->frameFlags |= 0x800; + DisplaySprite(s); + } +} + +// (80.92%) https://decomp.me/scratch/QyXdU +NONMATCH("asm/non_matching/game/vs_record__Task_8060874.inc", void Task_8060874()) +{ + Sprite *s; + u32 temp_r0; + u8 temp_r0_5; + u8 var_r4; + u8 var_r5; + u8 subroutine_arg0[2]; + s32 unkEC; + SaveGame *save = LOADED_SAVE; + + VsRecord_F0 *recordF0 = TASK_DATA(gCurTask); + + unkEC = recordF0->unkEC; + temp_r0 = unkEC; + gBgScrollRegs[1][1] = ((temp_r0 >> 8) - 0x30) & 0x1FF; + recordF0->unkA0.unkE = 1; + + for (var_r5 = 0; var_r5 < 6; var_r5++) { + recordF0->unkA0.qUnkA = (var_r5 * 8) + 0x1B; + recordF0->unkA0.unkC = 32; + + if ((save->playerName[var_r5] >= 112) && (save->playerName[var_r5] < 138)) { + recordF0->unkA0.unkC = 40; + } + sub_805321C(&save->playerName[var_r5], &recordF0->unkA0); + } + + recordF0->unkA0.unkC = 0x20; + if (save->unk425 > 9U) { + subroutine_arg0[0] = (Div(save->unk425, 10) + 48); + subroutine_arg0[1] = (Mod(save->unk425, 10) + 48); + if (save->uiLanguage != 0) { + recordF0->unkA0.qUnkA = 0x5B; + } else { + recordF0->unkA0.qUnkA = 0x59; + } + recordF0->unkA0.unkE = 2; + sub_805321C(subroutine_arg0, &recordF0->unkA0); + } else { + recordF0->unkA0.unkE = 1; + subroutine_arg0[0] = (save->unk425 + 48); + if (save->uiLanguage != 0) { + recordF0->unkA0.qUnkA = 0x63; + } else { + recordF0->unkA0.qUnkA = 0x61; + } + + if (save->unk425 < 2) { + subroutine_arg0[1] = 0x8A; + sub_805321C(subroutine_arg0, &recordF0->unkA0); + recordF0->unkA0.qUnkA = 0x7E; + sub_805321C(subroutine_arg0 + 1, &recordF0->unkA0); + } else { + subroutine_arg0[0] = (s8)(save->unk425 + 48); + sub_805321C(subroutine_arg0, &recordF0->unkA0); + } + } + if (save->unk426 > 9U) { + recordF0->unkA0.unkE = 2; + subroutine_arg0[0] = Div(save->unk426, 0xA) + 48; + subroutine_arg0[1] = Mod(save->unk426, 0xA) + 48; + if (save->uiLanguage != 0) { + recordF0->unkA0.qUnkA = 0x88; + } else { + recordF0->unkA0.qUnkA = 0x89; + } + + sub_805321C(subroutine_arg0, &recordF0->unkA0); + } else { + recordF0->unkA0.unkE = 1; + if (save->uiLanguage != 0) { + recordF0->unkA0.qUnkA = 0x90; + } else { + recordF0->unkA0.qUnkA = 0x91; + } + subroutine_arg0[0] = save->unk426 + 48; + if ((save->unk426 <= 1U) && (save->uiLanguage != 0)) { + s = &recordF0->s; + s->x = 152; + s->y = 32; + s->frameFlags &= ~0x800; + DisplaySprite(s); + subroutine_arg0[1] = 0x8A; + sub_805321C(subroutine_arg0, &recordF0->unkA0); + recordF0->unkA0.qUnkA = 0xB1; + sub_805321C(&subroutine_arg0[1], &recordF0->unkA0); + } else { + sub_805321C(subroutine_arg0, &recordF0->unkA0); + } + } + + if (save->unk427 > 9U) { + recordF0->unkA0.unkE = 2; + subroutine_arg0[0] = (Div(save->unk427, 10) + 48); + subroutine_arg0[1] = (Mod(save->unk427, 10) + 48); + recordF0->unkA0.qUnkA = 0xB9; + sub_805321C(&subroutine_arg0[0], &recordF0->unkA0); + } else { + recordF0->unkA0.unkE = 1; + recordF0->unkA0.qUnkA = 0xC1; + subroutine_arg0[0] = (save->unk427 + 48); + if (save->unk427 < 2) { + subroutine_arg0[1] = 0x8A; + sub_805321C(subroutine_arg0, &recordF0->unkA0); + recordF0->unkA0.qUnkA = 0xE2; + sub_805321C(&subroutine_arg0[1], &recordF0->unkA0); + } else { + sub_805321C(&subroutine_arg0[0], &recordF0->unkA0); + } + } + + for (var_r5 = 0; var_r5 < 9; var_r5++) { + s32 v = (var_r5 + (unkEC >> 12)); + recordF0->unkA0.unkE = 1; + + for (var_r4 = 0; var_r4 < 6; var_r4++) { + recordF0->unkA0.qUnkA = (var_r4 * 8) + 60; + recordF0->unkA0.unkC = ((var_r5 * 0x10) - (((unkEC >> 8) & 0xF) - 0x38)); + if ((u8)(recordF0->records[v].unk4[var_r4] - 112) < 26) { + recordF0->unkA0.unkC = ((var_r5 * 0x10) - (((unkEC >> 8) & 0xF) - 0x38)) + 8; + } + + sub_805345C(&recordF0->records[v].unk4[var_r4], &recordF0->unkA0); + } + recordF0->unkA0.unkC = (var_r5 * 0x10) - (((unkEC >> 8) & 0xF) - 56); + temp_r0_5 = recordF0->records[v].unkC; + if (temp_r0_5 == 0xFF) { + subroutine_arg0[0] = 32; + subroutine_arg0[1] = 48; + } else { + if (recordF0->records[v].unkC > 9U) { + subroutine_arg0[0] = Div((u8)recordF0->records[v].unkC, 10) + 48; + subroutine_arg0[1] = Mod((u8)recordF0->records[v].unkC, 10) + 48; + } else { + subroutine_arg0[0] = 32; + subroutine_arg0[1] = (u8)recordF0->records[v].unkC + 48; + } + } + recordF0->unkA0.qUnkA = Q(0.5); + recordF0->unkA0.unkE = 2; + sub_805345C(subroutine_arg0, &recordF0->unkA0); + + if (recordF0->records[v].unkD > 9U) { + subroutine_arg0[0] = Div(recordF0->records[v].unkD, 10) + 48; + subroutine_arg0[1] = Mod(recordF0->records[v].unkD, 10) + 48; + } else { + subroutine_arg0[0] = 0x20; + subroutine_arg0[1] = recordF0->records[v].unkD + 48; + } + recordF0->unkA0.qUnkA = Q(160. / 256.); + sub_805345C(subroutine_arg0, &recordF0->unkA0); + + if (recordF0->records[v].unkE > 9U) { + subroutine_arg0[0] = Div(recordF0->records[v].unkE, 10) + 48; + subroutine_arg0[1] = Mod(recordF0->records[v].unkE, 10) + 48; + } else { + subroutine_arg0[0] = 0x20; + subroutine_arg0[1] = recordF0->records[v].unkE + 0x30; + } + recordF0->unkA0.qUnkA = 0xC0; + sub_805345C(subroutine_arg0, &recordF0->unkA0); + } +} +END_NONMATCH + +void TaskDestructor_VsRecord(struct Task *t) { } diff --git a/sa1/src/game/water_effects.c b/sa1/src/game/water_effects.c new file mode 100644 index 0000000000..84770c220d --- /dev/null +++ b/sa1/src/game/water_effects.c @@ -0,0 +1,514 @@ +#include "global.h" +#include "core.h" +#include "flags.h" +#include "malloc_vram.h" +#include "task.h" +#include "trig.h" +#include "bg_triangles.h" + +#if (GAME == GAME_SA2) +#include "game/boost_effect.h" +#endif +#include "game/sa1_sa2_shared/globals.h" +#include "game/stage/player.h" +#include "game/stage/camera.h" +#include "game/stage/mp_sprite_task.h" +#include "data/sprite_data.h" +#include "game/water_effects.h" + +#include "constants/animations.h" +#include "constants/zones.h" +#include "constants/vram_hardcoded.h" + +typedef struct { + /* 0x00 */ s32 x; + /* 0x04 */ s32 y; + /* 0x08 */ u8 filler0[0x14]; + /* 0x1C */ Sprite s; + /* 0x4C */ u8 filler4C[0xC]; +} RunOnWaterEffect; /* size: 0x58 */ + +// TODO: Make static again +void Task_StageWaterTask(void); +static void Task_RunOnWaterEffect(void); +void TaskDestructor_WaterSurface(struct Task *); +void SA2_LABEL(sub_8011A4C)(void); +void SA2_LABEL(VCountIntr_8011ACC)(void); +static void TaskDestructor_RunOnWaterEffect(struct Task *); + +#if (GAME == GAME_SA1) +// SA2 allocates these in the Task, to save global memory. +// Water is only used in one stage, after all. +u16 sPaletteBuffer[(16 * 2) * 16] = { 0 }; +#endif +Water gWater = { 0 }; + +#define WATER_MASK_COLOR_A 0x7BDE +#define WATER_MASK_COLOR_B 0x739C +#define WATER_MASK_A ((WATER_MASK_COLOR_A << 16) | WATER_MASK_COLOR_A) +#define WATER_MASK_B ((WATER_MASK_COLOR_B << 16) | WATER_MASK_COLOR_B) + +#define WATER_SURFACE_SPRITE_COUNT ((DISPLAY_WIDTH + 16) / 16) + +#define WATER_MASK_PALETTE_CHUNK(in, waterMask) \ + ({ \ + u32 temp1, temp2; \ + temp1 = (in); \ + temp2 = temp1; \ + temp2 = ((temp2 & WATER_MASK_A) + (((temp1 & WATER_MASK_B) + (WATER_MASK_B & (waterMask))) >> 1)); \ + temp2 >>= 1; \ + }) + +#if (GAME == GAME_SA2) +static const u16 gUnknown_080D550C[NUM_CHARACTERS] = { + SA2_ANIM_UNDERWATER_1UP_SONIC, SA2_ANIM_UNDERWATER_1UP_CREAM, SA2_ANIM_UNDERWATER_1UP_TAILS, + SA2_ANIM_UNDERWATER_1UP_KNUCKLES, SA2_ANIM_UNDERWATER_1UP_AMY, +}; +#endif + +#if (GAME == GAME_SA2) +static void inline CopyPalette(u32 *dst, u32 *src, s32 length) +{ + u32 r2 = length >> 4; + + while (r2-- > 0) { + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + } +} +#endif + +static inline void MaskPaletteWithUnderwaterColor_inline(u32 *dst, u32 *src, u32 mask, s32 size) +{ + u32 k = (size >> 4); + while (k-- > 0) { + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + } +} + +void sub_804C40C(void) +{ + Water *water = &gWater; + + MaskPaletteWithUnderwaterColor_inline((u32 *)&sPaletteBuffer[0], (u32 *)&gObjPalette[0], water->mask, 16 * 16); + MaskPaletteWithUnderwaterColor_inline((u32 *)&sPaletteBuffer[16 * 16], (u32 *)&gBgPalette[0], water->mask, 16 * 16); +} + +#if (GAME == GAME_SA2) +void InitWaterPalettes(void) +{ + u16 animId, character; + const ACmd **animation; + u32 pal; + + Water *water = &gWater; + WaterData *wd = TASK_DATA(water->t); + + if (IS_MULTI_PLAYER) { + u8 i = 0, j = 0; + for (; j < 4; j++) { + if ((gMultiplayerConnections >> j) & 0x1) { + i++; + } + } + + for (j = 0; j < i; j++) { + character = gMultiplayerCharacters[j]; + animId = gUnknown_080D550C[character]; + animation = gAnimations[animId]; + pal = animation[0]->pal.palId; +#ifndef NON_MATCHING + { + const u16 *src = gSpritePalettes[pal]; + CopyPalette((u32 *)wd->pal[j], (u32 *)src, 16); + }; +#else + CopyPalette((u32 *)wd->pal[j], (u32 *)gSpritePalettes[pal], 16); +#endif + } + } else { + character = gPlayer.character; + + animId = gUnknown_080D550C[character]; + animation = gAnimations[animId]; + pal = animation[0]->pal.palId; + CopyPalette((u32 *)wd->pal[0], (u32 *)gSpritePalettes[pal], 16); + + character = gPlayer.character; + animId = sCharacterPalettesBoostEffect[character]; + animation = gAnimations[animId]; + pal = animation[0]->pal.palId; + CopyPalette((u32 *)wd->pal[1], (u32 *)gSpritePalettes[pal], 16); + } + + animId = SA2_ANIM_PALETTE_554; + animation = gAnimations[animId]; + pal = (animation[0]->pal.palId + 4); + CopyPalette((u32 *)wd->pal[4], (u32 *)gSpritePalettes[pal], 12 * 16); + + MaskPaletteWithUnderwaterColor_inline((u32 *)wd->pal[16], (u32 *)gBgPalette, water->mask, 16 * 16); +} +#endif + +#if (GAME == GAME_SA1) +void LoadPalette423Anim(void) +{ + Sprite s; + s.graphics.dest = NULL; + s.graphics.anim = SA1_ANIM_LOAD_PALETTE_423; + s.variant = 0; + s.oamFlags = 0; + s.frameFlags = 0; + s.graphics.size = 0; + s.prevVariant = -1; + s.qAnimDelay = Q(0); + s.animSpeed = SPRITE_ANIM_SPEED(1.0); + s.palId = 0; + + UpdateSpriteAnimation(&s); +} +#endif + +void CreateStageWaterTask(s32 waterLevel, u32 p1, u32 mask) +{ + gWater.currentWaterLevel = waterLevel; + gWater.targetWaterLevel = waterLevel; + gWater.SA2_LABEL(unk2) = 0xFF; + gWater.SA2_LABEL(unk1) = -1; + gWater.unk8 = mask & 0x100; + gWater.mask = p1; + + if (waterLevel >= 0) { + Sprite *s = &gWater.s; + s->graphics.dest = VRAM_RESERVED_WATER_SURFACE; + s->graphics.size = 0; + s->graphics.anim = SA1_ANIM_WATER_SURFACE; + s->variant = 0; + s->prevVariant |= -1; + s->oamFlags = SPRITE_OAM_ORDER(0); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 0); + UpdateSpriteAnimation(s); + + gWater.t = TaskCreate(Task_StageWaterTask, sizeof(WaterData), 0xFFFE, 0, TaskDestructor_WaterSurface); + } +} + +// (91.10%) https://decomp.me/scratch/zSeoc +NONMATCH("asm/non_matching/game/water_effects__Task_StageWaterTask.inc", void Task_StageWaterTask(void)) +{ + Water *water = &gWater; + struct Camera *cam = &gCamera; + bool32 active; + Sprite *s; + u8 unk1; +#ifndef NON_MATCHING + register u8 unk2_0 asm("r0"); + register u8 unk2_2 asm("r2"); +#else + u8 unk2_0; + u8 unk2_2; +#endif + +#if (HAS_RUN_ON_WATER) + if ((gCurrentLevel == LEVEL_INDEX(ZONE_1, ACT_1)) && (I(gPlayer.qWorldX) > 6665) && (I(gPlayer.qWorldX) <= 10650)) { + water->isActive = TRUE; + } else { + water->isActive = FALSE; + } + + if (water->isActive != TRUE) { + gFlags &= ~MOVESTATE_IN_WATER; + return; + } +#endif + + if (gStageTime & 1) { + if (water->currentWaterLevel != water->targetWaterLevel) { + if (water->currentWaterLevel < water->targetWaterLevel) + water->currentWaterLevel++; + else if (water->currentWaterLevel > water->targetWaterLevel) + water->currentWaterLevel--; + } + } + + if (water->currentWaterLevel <= cam->y) { + water->SA2_LABEL(unk2) = 0; + } else if (water->currentWaterLevel < cam->y + DISPLAY_HEIGHT) { + water->SA2_LABEL(unk2) = water->currentWaterLevel - cam->y; + } else { + water->SA2_LABEL(unk2) = 0xFF; + } + + gVBlankCallbacks[gNumVBlankCallbacks++] = SA2_LABEL(sub_8011A4C); + gFlags |= FLAGS_EXECUTE_VBLANK_CALLBACKS; + + unk1 = water->SA2_LABEL(unk1) - 1; + if (unk1 < DISPLAY_HEIGHT - 1) { + s = &water->s; + s->x = -((cam->x + ((gStageTime + 1) >> 2)) & 15); + s->y = water->SA2_LABEL(unk2) + 1; + s->frameFlags |= (SPRITE_FLAG_MASK_19 | SPRITE_FLAG_MASK_18); + UpdateSpriteAnimation(s); + + if (gStageTime & 0x2) { + u16 y = s->y - 1; + if (y < DISPLAY_WIDTH - 1) { + s32 count = WATER_SURFACE_SPRITE_COUNT; + do { + DisplaySprite(s); + s->x += 16; + } while (--count >= 0); + } + } + } + + unk2_0 = (water->SA2_LABEL(unk2)); + if ((unk2_2 = unk2_0 - 1) < DISPLAY_HEIGHT - 1) { + gIntrTable[INTR_INDEX_VCOUNT] = SA2_LABEL(VCountIntr_8011ACC); + gVCountSetting = unk2_0 - 1; + gFlags |= FLAGS_40; + } else { + gIntrTable[INTR_INDEX_VCOUNT] = gIntrTableTemplate[INTR_INDEX_VCOUNT]; + gFlags &= ~FLAGS_40; + } + +#if (GAME == GAME_SA1) + if (unk2_0 >= DISPLAY_HEIGHT) { + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + } else { + s32 r3 = gStageTime * 4; + u32 r5; + s32 adder; + void *ptr; + r3 += (gBgScrollRegs[3][1] + water->SA2_LABEL(unk2) % 32u) << 6; + r3 %= 1024u; + + SA2_LABEL(sub_8007738) + (3, 0, 32, r3, 2, 64, (((gStageTime * 2 + (((gBgScrollRegs[3][1] + water->SA2_LABEL(unk2)) % 32u) << 5))) + 0x100) & ONE_CYCLE, 10, + 32, gBgScrollRegs[3][0], gBgScrollRegs[3][1]); + + for (r5 = 32, ptr = gBgOffsetsHBlankPrimary + (adder = (gHBlankCopySize << 5)); r5 < DISPLAY_HEIGHT;) { + DmaCopy32(3, gBgOffsetsHBlankPrimary, ptr, (gHBlankCopySize << 5)); + ptr += adder; + r5 += 0x20; + } + + if (water->SA2_LABEL(unk2)) { + gFlags &= ~FLAGS_EXECUTE_HBLANK_COPY; + } + } +#endif +} +END_NONMATCH + +#if (HAS_RUN_ON_WATER) +void CreateRunOnWaterEffect(void) +{ + struct Task *t = TaskCreate(Task_RunOnWaterEffect, sizeof(RunOnWaterEffect), 0x4001, 0, TaskDestructor_RunOnWaterEffect); + RunOnWaterEffect *effect = TASK_DATA(t); + Sprite *s = &effect->s; + s->graphics.dest = VramMalloc(12); + s->graphics.size = 0; + s->graphics.anim = SA2_ANIM_WATER_RUNNING_PARTICLES; + s->variant = 0; + s->prevVariant = -1; + s->oamFlags = SPRITE_OAM_ORDER(7); + s->qAnimDelay = 0; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = 0; + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); +} + +static void Task_RunOnWaterEffect(void) +{ + RunOnWaterEffect *effect = TASK_DATA(gCurTask); + Sprite *s = &effect->s; + Player *p = &gPlayer; + u32 newMovestate; + + if ((p->moveState & (MOVESTATE_20000 | MOVESTATE_DEAD)) != MOVESTATE_20000) { + TaskDestroy(gCurTask); + return; + } + + effect->x = I(p->qWorldX); + effect->y = gWater.currentWaterLevel; + + s->x = effect->x - gCamera.x; + s->y = effect->y - gCamera.y; + + if (!(p->moveState & MOVESTATE_FACING_LEFT)) { + s->frameFlags &= ~SPRITE_FLAG_MASK_X_FLIP; + } else { + s->frameFlags |= SPRITE_FLAG_MASK_X_FLIP; + } + + UpdateSpriteAnimation(s); + DisplaySprite(s); +} +#endif + +#if (GAME == GAME_SA1) +void unused_DestroygWaterTask(void) +{ + TaskDestroy(gWater.t); + gWater.t = NULL; +} +#endif + +struct Task *CreateWaterfallSurfaceHitEffect(s32 x, s32 y) +{ + struct Task *t = CreateMultiplayerSpriteTask(x, y, 0x10, 0, Task_UpdateMpSpriteTaskSprite, TaskDestructor_MultiplayerSpriteTask); + MultiplayerSpriteTask *ts = TASK_DATA(t); + Sprite *s = &ts->s; + + s->graphics.dest = VramMalloc(12); + s->graphics.anim = SA1_ANIM_WATER_FALL_HIT_SURFACE; + s->variant = 0; + s->oamFlags = SPRITE_OAM_ORDER(7); + s->frameFlags = SPRITE_FLAG(PRIORITY, 2); + + return t; +} + +// At the bottom of the file in SA1! +#if (GAME == GAME_SA2) +UNUSED void MaskPaletteWithUnderwaterColor(u32 *dst, u32 *src, u32 mask, s32 size) +{ +#ifndef NON_MATCHING + u32 k = (size >> 4); + while (k-- > 0) { + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + } +#else + MaskPaletteWithUnderwaterColor_inline(dst, src, mask, size); +#endif +} +#endif + +void TaskDestructor_WaterSurface(struct Task *t) +{ + Water *water = &gWater; + + gFlags &= ~FLAGS_40; + gIntrTable[INTR_INDEX_VCOUNT] = gIntrTableTemplate[INTR_INDEX_VCOUNT]; + water->t = NULL; + +#if (GAME == GAME_SA1) + DmaFill32(3, 0, sPaletteBuffer, 60 * 16); +#endif +} + +void SA2_LABEL(sub_8011A4C)(void) +{ + Water *water = &gWater; +#ifdef BUG_FIX + if (water->t) +#endif + { +#if (GAME == GAME_SA1) + WaterData *wd = TASK_DATA(water->t); +#endif + u32 unk2; + unk2 = water->SA2_LABEL(unk2); + water->SA2_LABEL(unk1) = unk2; + water->unk8 &= ~0x1; + + // TODO: This surely can be matched differently! + unk2 <<= 24; + + if (!unk2) { +#if (GAME == GAME_SA1) + DmaCopy32(3, &sPaletteBuffer[16 * 16], BG_PLTT, 29 * 16); + DmaCopy32(3, &sPaletteBuffer, OBJ_PLTT, OBJ_PLTT_SIZE); +#elif (GAME == GAME_SA2) + DmaCopy32(3, &wd->pal[16], PLTT, 29 * 16); + DmaCopy32(3, &wd->pal[0], OBJ_PLTT, OBJ_PLTT_SIZE); +#endif + REG_DISPCNT &= ~DISPCNT_BG0_ON; + gFlags |= (FLAGS_UPDATE_SPRITE_PALETTES | FLAGS_UPDATE_BACKGROUND_PALETTES); + } + } +} + +void SA2_LABEL(VCountIntr_8011ACC)(void) +{ + Water *water = &gWater; +#ifdef BUG_FIX + if (water->t) +#endif + { +#if (GAME == GAME_SA1) + DmaCopy32(0, &sPaletteBuffer[16 * 16], BG_PLTT, 29 * 16); + DmaCopy32(0, &sPaletteBuffer, OBJ_PLTT, OBJ_PLTT_SIZE); +#elif (GAME == GAME_SA2) + WaterData *wd = TASK_DATA(water->t); + + DmaCopy32(3, &wd->pal[16], PLTT, 29 * 16); + DmaCopy32(3, &wd->pal[0], OBJ_PLTT, OBJ_PLTT_SIZE); +#endif + + REG_DISPCNT &= ~DISPCNT_BG0_ON; + gFlags |= (FLAGS_UPDATE_SPRITE_PALETTES | FLAGS_UPDATE_BACKGROUND_PALETTES); + +#if (GAME == GAME_SA1) + { + DmaSet(0, gBgOffsetsHBlankSecondary, (void *)®_BG3HOFS, // + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | (gHBlankCopySize >> 1)); + } +#endif + REG_IF = INTR_FLAG_VCOUNT; + } +} + +// Further up in SA2! +#if (GAME == GAME_SA1) +UNUSED void MaskPaletteWithUnderwaterColor(u32 *dst, u32 *src, u32 mask, s32 size) +{ + u32 k = (size >> 4); + while (k-- > 0) { + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + *dst++ = WATER_MASK_PALETTE_CHUNK(*src++, mask); + } +} +#endif + +#if (HAS_RUN_ON_WATER) +static void TaskDestructor_RunOnWaterEffect(struct Task *t) +{ + RunOnWaterEffect *effect = TASK_DATA(t); + Sprite *s = &effect->s; + VramFree(s->graphics.dest); +} + +static void SA2_LABEL(sub_8011B54)(u32 *dst, u32 *src, s32 size) { CopyPalette(dst, src, size); } +#endif diff --git a/sa1/src/lib/agb_flash/agb_flash.c b/sa1/src/lib/agb_flash/agb_flash.c new file mode 100644 index 0000000000..83d7ca521f --- /dev/null +++ b/sa1/src/lib/agb_flash/agb_flash.c @@ -0,0 +1,395 @@ +#include "global.h" +#include "lib/agb_flash/flash_internal.h" +#include "lib/agb_flash/agb_flash.h" + +/* TODO: Revert these back to how they were originally! + We're using a hack in sym_iwram.txt right now, + to get the addresses aliged/ROM to match! +*/ +#if AGBFLASH_USE_V126 +static const u16 *gFlashMaxTime; +#endif +static u8 (*PollFlashStatus)(u8 *); +static u8 sTimerNum; +static u16 sTimerCount; +static u8 gFlashTimeoutFlag; +static vu16 *gTimerReg; +static u16 gSavedIme; + +u8 (*FlashTempA)(u8 *) = NULL; +u8 (*FlashTempB)(u8 *) = NULL; +u8 (*FlashTempC)(u8 *) = NULL; +u16 (*WaitForFlashWrite)(u8 phase, u8 *addr, u8 lastData) = NULL; +u16 (*ProgramFlashSector)(u16 sectorNum, void *src) = NULL; +const struct FlashType *gFlash = NULL; +u16 gFlashNumRemainingBytes = 0; +u16 (*EraseFlashChip)() = NULL; +u16 (*EraseFlashSector)(u16 sectorNum) = NULL; +#if !AGBFLASH_USE_V126 +const u16 *gFlashMaxTime = NULL; +#endif + +// TODO: Make sure the flash chip names are correct! +static const char AgbLibFlashVersion[] = "FLASH_V126"; +const struct FlashSetupInfo *const gSetup512KInfos[] = { + &LE39FW512, &AT29LV512, &MX29L512, &MN63F805MNP, &DefaultFlash512K, +}; + +void SetReadFlash1(u16 *dest); + +#if !AGBFLASH_USE_V126 +void SwitchFlashBank(u8 bankNum) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xB0); + FLASH_WRITE(0x0000, bankNum); +} +#endif + +#define DELAY() \ + do { \ + vu16 i; \ + for (i = 20000; i != 0; i--) \ + ; \ + } while (0) + +u16 ReadFlashId(void) +{ + u16 flashId; + u16 readFlash1Buffer[0x20]; + u8 (*readFlash1)(u8 *); + + SetReadFlash1(readFlash1Buffer); + readFlash1 = (u8(*)(u8 *))((intptr_t)readFlash1Buffer + 1); + + // Enter ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x90); + DELAY(); + + flashId = readFlash1(FLASH_BASE + 1) << 8; + flashId |= readFlash1(FLASH_BASE); + + // Leave ID mode. + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xF0); +#if !AGBFLASH_USE_V126 + FLASH_WRITE(0x5555, 0xF0); +#endif + DELAY(); + + return flashId; +} + +#if AGBFLASH_USE_V126 +u16 IdentifyFlash(void) +{ +#if PORTABLE + return TRUE; +#endif + u16 result; + u16 flashId; + const struct FlashSetupInfo *const *setupInfo; + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + flashId = ReadFlashId(); + + setupInfo = gSetup512KInfos; + result = 1; + + for (;;) { + if ((*setupInfo)->type.ids.separate.makerId == 0) + break; + + if (flashId == (*setupInfo)->type.ids.joined) { + result = 0; + break; + } + + setupInfo++; + } + + ProgramFlashSector = (*setupInfo)->programFlashSector; + EraseFlashChip = (*setupInfo)->eraseFlashChip; + EraseFlashSector = (*setupInfo)->eraseFlashSector; + WaitForFlashWrite = (*setupInfo)->WaitForFlashWrite; + gFlashMaxTime = (*setupInfo)->maxTime; + gFlash = &(*setupInfo)->type; + + return result; +} +#endif + +void FlashTimerIntr(void) +{ + if (sTimerCount != 0 && --sTimerCount == 0) + gFlashTimeoutFlag = 1; +} + +u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) +{ + if (timerNum >= 4) + return 1; + + sTimerNum = timerNum; + gTimerReg = ®_TMCNT(sTimerNum); + *intrFunc = FlashTimerIntr; + return 0; +} + +void StartFlashTimer(u8 phase) +{ + const u16 *maxTime = &gFlashMaxTime[phase * 3]; + gSavedIme = REG_IME; + REG_IME = 0; + gTimerReg[1] = 0; + REG_IE |= (INTR_FLAG_TIMER0 << sTimerNum); + gFlashTimeoutFlag = 0; + sTimerCount = *maxTime++; + *gTimerReg++ = *maxTime++; + *gTimerReg-- = *maxTime++; + REG_IF = (INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = 1; +} + +void StopFlashTimer(void) +{ + REG_IME = 0; + *gTimerReg++ = 0; + *gTimerReg-- = 0; + REG_IE &= ~(INTR_FLAG_TIMER0 << sTimerNum); + REG_IME = gSavedIme; +} + +u8 ReadFlash1(u8 *addr) { return *addr; } + +void SetReadFlash1(u16 *dest) +{ + u16 *src; + u16 i; + + PollFlashStatus = (u8(*)(u8 *))((intptr_t)dest + 1); + + src = (u16 *)ReadFlash1; + src = (u16 *)((intptr_t)src ^ 1); + + i = ((intptr_t)SetReadFlash1 - (intptr_t)ReadFlash1) >> 1; + + while (i != 0) { + *dest++ = *src++; + i--; + } +} + +#if AGBFLASH_USE_V126 +u16 WaitForFlashWrite512K_Common(u8 phase, u8 *addr, u8 lastData) +{ + u16 result = 0; + u8 status; + + StartFlashTimer(phase); + + while ((status = PollFlashStatus(addr)) != lastData) { + if (gFlashTimeoutFlag) { + if (PollFlashStatus(addr) == lastData) + break; + +// This #if seems redundant, but would make copy-pasting more hassle-free +#if AGBFLASH_USE_V126 + if (gFlash->ids.joined == 0x1cc2) +#else + if (gFlash->ids.separate.makerId == 0xc2) +#endif + FLASH_WRITE(0x5555, 0xF0); + + result = phase | 0xC000u; + break; + } + } + + StopFlashTimer(); + + return result; +} +#endif + +void ReadFlash_Core(u8 *src, u8 *dest, u32 size) +{ + while (size-- != 0) { + *dest++ = *src++; + } +} + +void ReadFlash(u16 sectorNum, u32 offset, void *dest, u32 size) +{ + u8 *src; + u16 i; + u16 readFlash_Core_Buffer[0x40]; + u16 *funcSrc; + u16 *funcDest; + void (*readFlash_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + +#if !AGBFLASH_USE_V126 + if (gFlash->romSize == FLASH_ROM_SIZE_1M) { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } +#endif + + funcSrc = (u16 *)ReadFlash_Core; + funcSrc = (u16 *)((intptr_t)funcSrc ^ 1); + funcDest = readFlash_Core_Buffer; + + i = ((intptr_t)ReadFlash - (intptr_t)ReadFlash_Core) >> 1; + + while (i != 0) { + *funcDest++ = *funcSrc++; + i--; + } + + readFlash_Core = (void (*)(u8 *, u8 *, u32))((intptr_t)readFlash_Core_Buffer + 1); + +#if AGBFLASH_USE_V126 + src = FLASH_BASE + (sectorNum << DefaultFlash512K.type.sector.shift) + offset; +#else + src = FLASH_BASE + (sectorNum << gFlash->sector.shift) + offset; +#endif + + readFlash_Core(src, dest, size); +} + +u32 VerifyFlashSector_Core(u8 *src, u8 *tgt, u32 size) +{ + while (size-- != 0) { + if (*tgt++ != *src++) + return (uintptr_t)(tgt - 1); + } + + return 0; +} + +u32 VerifyFlashSector(u16 sectorNum, u8 *src) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u16 size; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + +#if !AGBFLASH_USE_V126 + if (gFlash->romSize == FLASH_ROM_SIZE_1M) { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } +#endif + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((intptr_t)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((intptr_t)VerifyFlashSector - (intptr_t)VerifyFlashSector_Core) >> 1; + + while (i != 0) { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32(*)(u8 *, u8 *, u32))((intptr_t)verifyFlashSector_Core_Buffer + 1); + +#if AGBFLASH_USE_V126 + tgt = FLASH_BASE + (sectorNum << DefaultFlash512K.type.sector.shift); + size = DefaultFlash512K.type.sector.size; +#else + tgt = FLASH_BASE + (sectorNum << DefaultFlash512K.type.sector.shift); + size = DefaultFlash512K.type.sector.size; +#endif + + return verifyFlashSector_Core(src, tgt, size); // return 0 if verified. +} + +u32 VerifyFlashSectorNBytes(u16 sectorNum, u8 *src, u32 n) +{ + u16 i; + u16 verifyFlashSector_Core_Buffer[0x80]; + u16 *funcSrc; + u16 *funcDest; + u8 *tgt; + u32 (*verifyFlashSector_Core)(u8 *, u8 *, u32); + +#if !AGBFLASH_USE_V126 + if (gFlash->romSize == FLASH_ROM_SIZE_1M) { + SwitchFlashBank(sectorNum / SECTORS_PER_BANK); + sectorNum %= SECTORS_PER_BANK; + } +#endif + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + funcSrc = (u16 *)VerifyFlashSector_Core; + funcSrc = (u16 *)((intptr_t)funcSrc ^ 1); + funcDest = verifyFlashSector_Core_Buffer; + + i = ((intptr_t)VerifyFlashSector - (intptr_t)VerifyFlashSector_Core) >> 1; + + while (i != 0) { + *funcDest++ = *funcSrc++; + i--; + } + + verifyFlashSector_Core = (u32(*)(u8 *, u8 *, u32))((intptr_t)verifyFlashSector_Core_Buffer + 1); + +#if AGBFLASH_USE_V126 + tgt = FLASH_BASE + (sectorNum << DefaultFlash512K.type.sector.shift); +#else + tgt = FLASH_BASE + (sectorNum << gFlash->sector.shift); +#endif + + return verifyFlashSector_Core(src, tgt, n); +} + +u32 ProgramFlashSectorAndVerify(u16 sectorNum, u8 *src) +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) // 3 attempts + { + result = ProgramFlashSector(sectorNum, src); + if (result != 0) + continue; + + result = VerifyFlashSector(sectorNum, src); + if (result == 0) + break; + } + + return result; // return 0 if verified and programmed. +} + +u32 ProgramFlashSectorAndVerifyNBytes(u16 sectorNum, void *dataSrc, u32 n) +{ + u8 i; + u32 result; + + for (i = 0; i < 3; i++) { + result = ProgramFlashSector(sectorNum, dataSrc); + if (result != 0) + continue; + + result = VerifyFlashSectorNBytes(sectorNum, dataSrc, n); + if (result == 0) + break; + } + + return result; +} diff --git a/sa1/src/platform/ext/gbagfx/LICENSE b/sa1/src/platform/ext/gbagfx/LICENSE new file mode 100644 index 0000000000..b66bf81c0f --- /dev/null +++ b/sa1/src/platform/ext/gbagfx/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 YamaArashi + +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. diff --git a/sa1/src/platform/ext/gbagfx/lz.c b/sa1/src/platform/ext/gbagfx/lz.c new file mode 100644 index 0000000000..0b4da32b9c --- /dev/null +++ b/sa1/src/platform/ext/gbagfx/lz.c @@ -0,0 +1,206 @@ +// Copyright (c) 2015 YamaArashi + +#include +#include +#include "platform/ext/gbagfx/global.h" +#include "platform/ext/gbagfx/lz.h" + +unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize) +{ + if (srcSize < 4) + goto fail; + + int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; + + unsigned char *dest = malloc(destSize); + + if (dest == NULL) + goto fail; + + int srcPos = 4; + int destPos = 0; + + for (;;) { + if (srcPos >= srcSize) + goto fail; + + unsigned char flags = src[srcPos++]; + + for (int i = 0; i < 8; i++) { + if (flags & 0x80) { + if (srcPos + 1 >= srcSize) + goto fail; + + int blockSize = (src[srcPos] >> 4) + 3; + int blockDistance = (((src[srcPos] & 0xF) << 8) | src[srcPos + 1]) + 1; + + srcPos += 2; + + int blockPos = destPos - blockDistance; + + // Some Ruby/Sapphire tilesets overflow. + if (destPos + blockSize > destSize) { + blockSize = destSize - destPos; + fprintf(stderr, "Destination buffer overflow.\n"); + } + + if (blockPos < 0) + goto fail; + + for (int j = 0; j < blockSize; j++) + dest[destPos++] = dest[blockPos + j]; + } else { + if (srcPos >= srcSize || destPos >= destSize) + goto fail; + + dest[destPos++] = src[srcPos++]; + } + + if (destPos == destSize) { + *uncompressedSize = destSize; + return dest; + } + + flags <<= 1; + } + } + +fail: + FATAL_ERROR("Fatal error while decompressing LZ file.\n"); +} + +void LZDecompressUnsafe(unsigned char *src, unsigned char *dest, int *uncompressedSize) +{ + int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; + + if (dest == NULL) + goto fail; + + int srcPos = 4; + int destPos = 0; + + for (;;) { + unsigned char flags = src[srcPos++]; + + for (int i = 0; i < 8; i++) { + if (flags & 0x80) { + int blockSize = (src[srcPos] >> 4) + 3; + int blockDistance = (((src[srcPos] & 0xF) << 8) | src[srcPos + 1]) + 1; + + srcPos += 2; + + int blockPos = destPos - blockDistance; + + // Some Ruby/Sapphire tilesets overflow. + if (destPos + blockSize > destSize) { + blockSize = destSize - destPos; + fprintf(stderr, "Destination buffer overflow.\n"); + } + + if (blockPos < 0) + goto fail; + + for (int j = 0; j < blockSize; j++) + dest[destPos++] = dest[blockPos + j]; + } else { + if (destPos >= destSize) + goto fail; + + dest[destPos++] = src[srcPos++]; + } + + if (destPos == destSize) { + *uncompressedSize = destSize; + return; + } + + flags <<= 1; + } + } + +fail: + FATAL_ERROR("Fatal error while decompressing LZ file.\n"); +} + +unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance) +{ + if (srcSize <= 0) + goto fail; + + int worstCaseDestSize = 4 + srcSize + ((srcSize + 7) / 8); + + // Round up to the next multiple of four. + worstCaseDestSize = (worstCaseDestSize + 3) & ~3; + + unsigned char *dest = malloc(worstCaseDestSize); + + if (dest == NULL) + goto fail; + + // header + dest[0] = 0x10; // LZ compression type + dest[1] = (unsigned char)srcSize; + dest[2] = (unsigned char)(srcSize >> 8); + dest[3] = (unsigned char)(srcSize >> 16); + + int srcPos = 0; + int destPos = 4; + + for (;;) { + unsigned char *flags = &dest[destPos++]; + *flags = 0; + + for (int i = 0; i < 8; i++) { + int bestBlockDistance = 0; + int bestBlockSize = 0; + int blockDistance = minDistance; + + while (blockDistance <= srcPos && blockDistance <= 0x1000) { + int blockStart = srcPos - blockDistance; + int blockSize = 0; + + while (blockSize < 18 + && srcPos + blockSize < srcSize + && src[blockStart + blockSize] == src[srcPos + blockSize]) + blockSize++; + + if (blockSize > bestBlockSize) { + bestBlockDistance = blockDistance; + bestBlockSize = blockSize; + + if (blockSize == 18) + break; + } + + blockDistance++; + } + + if (bestBlockSize >= 3) { + *flags |= (0x80 >> i); + srcPos += bestBlockSize; + bestBlockSize -= 3; + bestBlockDistance--; + dest[destPos++] = (bestBlockSize << 4) | ((unsigned int)bestBlockDistance >> 8); + dest[destPos++] = (unsigned char)bestBlockDistance; + } else { + dest[destPos++] = src[srcPos++]; + } + + if (srcPos == srcSize) { + // Pad to multiple of 4 bytes. + int remainder = destPos % 4; + + if (remainder != 0) { + for (int i = 0; i < 4 - remainder; i++) + dest[destPos++] = 0; + } + + *compressedSize = destPos; + return dest; + } + } + } + +fail: + FATAL_ERROR("Fatal error while compressing LZ file.\n"); +} diff --git a/sa1/src/platform/ext/gbagfx/rl.c b/sa1/src/platform/ext/gbagfx/rl.c new file mode 100644 index 0000000000..575ff1b1dc --- /dev/null +++ b/sa1/src/platform/ext/gbagfx/rl.c @@ -0,0 +1,197 @@ +// Copyright (c) 2016 YamaArashi + +#include +#include +#include "platform/ext/gbagfx/global.h" +#include "platform/ext/gbagfx/rl.h" + +unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize) +{ + if (srcSize < 4) + goto fail; + + int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; + + unsigned char *dest = malloc(destSize); + + if (dest == NULL) + goto fail; + + int srcPos = 4; + int destPos = 0; + + for (;;) + { + if (srcPos >= srcSize) + goto fail; + + unsigned char flags = src[srcPos++]; + bool compressed = ((flags & 0x80) != 0); + + if (compressed) + { + int length = (flags & 0x7F) + 3; + unsigned char data = src[srcPos++]; + + if (destPos + length > destSize) + goto fail; + + for (int i = 0; i < length; i++) + dest[destPos++] = data; + } + else + { + int length = (flags & 0x7F) + 1; + + if (destPos + length > destSize) + goto fail; + + for (int i = 0; i < length; i++) + dest[destPos++] = src[srcPos++]; + } + + if (destPos == destSize) + { + *uncompressedSize = destSize; + return dest; + } + } + +fail: + FATAL_ERROR("Fatal error while decompressing RL file.\n"); +} + +void RLDecompressUnsafe(unsigned char *src, unsigned char *dest, int *uncompressedSize) +{ + int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; + + if (dest == NULL) + goto fail; + + int srcPos = 4; + int destPos = 0; + + for (;;) + { + unsigned char flags = src[srcPos++]; + bool compressed = ((flags & 0x80) != 0); + + if (compressed) + { + int length = (flags & 0x7F) + 3; + unsigned char data = src[srcPos++]; + + if (destPos + length > destSize) + goto fail; + + for (int i = 0; i < length; i++) + dest[destPos++] = data; + } + else + { + int length = (flags & 0x7F) + 1; + + if (destPos + length > destSize) + goto fail; + + for (int i = 0; i < length; i++) + dest[destPos++] = src[srcPos++]; + } + + if (destPos == destSize) + { + *uncompressedSize = destSize; + return; + } + } + +fail: + FATAL_ERROR("Fatal error while decompressing RL file.\n"); +} + +unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize) +{ + if (srcSize <= 0) + goto fail; + + int worstCaseDestSize = 4 + srcSize * 2; + + // Round up to the next multiple of four. + worstCaseDestSize = (worstCaseDestSize + 3) & ~3; + + unsigned char *dest = malloc(worstCaseDestSize); + + if (dest == NULL) + goto fail; + + // header + dest[0] = 0x30; // RL compression type + dest[1] = (unsigned char)srcSize; + dest[2] = (unsigned char)(srcSize >> 8); + dest[3] = (unsigned char)(srcSize >> 16); + + int srcPos = 0; + int destPos = 4; + + for (;;) + { + bool compress = false; + int uncompressedStart = srcPos; + int uncompressedLength = 0; + + while (srcPos < srcSize && uncompressedLength < (0x7F + 1)) + { + compress = (srcPos + 2 < srcSize && src[srcPos] == src[srcPos + 1] && src[srcPos] == src[srcPos + 2]); + + if (compress) + break; + + srcPos++; + uncompressedLength++; + } + + if (uncompressedLength > 0) + { + dest[destPos++] = uncompressedLength - 1; + + for (int i = 0; i < uncompressedLength; i++) + dest[destPos++] = src[uncompressedStart + i]; + } + + if (compress) + { + unsigned char data = src[srcPos]; + int compressedLength = 0; + + while (compressedLength < (0x7F + 3) + && srcPos + compressedLength < srcSize + && src[srcPos + compressedLength] == data) + { + compressedLength++; + } + + dest[destPos++] = 0x80 | (compressedLength - 3); + dest[destPos++] = data; + + srcPos += compressedLength; + } + + if (srcPos == srcSize) + { + // Pad to multiple of 4 bytes. + int remainder = destPos % 4; + + if (remainder != 0) + { + for (int i = 0; i < 4 - remainder; i++) + dest[destPos++] = 0; + } + + *compressedSize = destPos; + return dest; + } + } + +fail: + FATAL_ERROR("Fatal error while compressing RL file.\n"); +} diff --git a/sa1/src/platform/pret_sdl/README.txt b/sa1/src/platform/pret_sdl/README.txt new file mode 100644 index 0000000000..11d4506a3e --- /dev/null +++ b/sa1/src/platform/pret_sdl/README.txt @@ -0,0 +1,4 @@ +The source code in this folder is from: +https://github.com/Kurausukun/pokeemerald/tree/pc_port + +Thanks to camthesaxman, Kurausukun, Pidgey and NT_x86 for allowing us to use the code! diff --git a/sa1/src/platform/pret_sdl/sdl2.c b/sa1/src/platform/pret_sdl/sdl2.c new file mode 100644 index 0000000000..0e9a4e9582 --- /dev/null +++ b/sa1/src/platform/pret_sdl/sdl2.c @@ -0,0 +1,1953 @@ +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#include +#endif + +#include + +#include "global.h" +#include "core.h" +#include "multi_sio.h" +#include "gba/defines.h" +#include "gba/io_reg.h" +#include "gba/types.h" +#include "lib/agb_flash/flash_internal.h" +#include "platform/shared/dma.h" +#include "platform/shared/input.h" + +#if ENABLE_AUDIO +#include "platform/shared/audio/cgb_audio.h" +#endif + +#ifndef TILE_WIDTH +#define TILE_WIDTH 8 +#endif + +extern IntrFunc gIntrTable[16]; + +#if 0 +extern u16 INTR_CHECK; +extern void *INTR_VECTOR; +extern unsigned char REG_BASE[0x400]; +extern unsigned char PLTT[PLTT_SIZE]; +extern unsigned char VRAM_[VRAM_SIZE]; +extern unsigned char OAM[OAM_SIZE]; +extern unsigned char FLASH_BASE[131072]; +#endif +extern uint8_t EWRAM_START[EWRAM_SIZE]; +extern uint8_t IWRAM_START[IWRAM_SIZE]; +// TODO: REG_BASE needs to be u8, because of the address macro definitions +extern uint8_t REG_BASE[IO_SIZE]; +extern uint16_t PLTT[PLTT_SIZE / sizeof(uint16_t)]; +extern uint8_t VRAM[VRAM_SIZE]; +extern uint8_t OAM[OAM_SIZE]; +extern uint8_t FLASH_BASE[FLASH_ROM_SIZE_1M * SECTORS_PER_BANK]; +ALIGNED(256) uint16_t gameImage[DISPLAY_WIDTH * DISPLAY_HEIGHT]; +#if ENABLE_VRAM_VIEW +#define VRAM_VIEW_WIDTH (32 * TILE_WIDTH) +#define VRAM_VIEW_HEIGHT (((VRAM_SIZE / TILE_SIZE_4BPP) / 32) * TILE_WIDTH) +uint16_t vramBuffer[VRAM_VIEW_WIDTH * VRAM_VIEW_HEIGHT]; +uint8_t vramPalIdBuffer[(VRAM_VIEW_WIDTH / TILE_WIDTH) * (VRAM_VIEW_HEIGHT / TILE_WIDTH)]; +#endif + +struct scanlineData { + uint16_t layers[4][DISPLAY_WIDTH]; + uint16_t spriteLayers[4][DISPLAY_WIDTH]; + uint16_t bgcnts[4]; + uint16_t winMask[DISPLAY_WIDTH]; + // priority bookkeeping + char bgtoprio[4]; // background to priority + char prioritySortedBgs[4][4]; + char prioritySortedBgsCount[4]; +}; + +struct bgPriority { + char priority; + char subPriority; +}; + +SDL_Window *sdlWindow; +SDL_Renderer *sdlRenderer; +SDL_Texture *sdlTexture; +#if ENABLE_VRAM_VIEW +SDL_Window *vramWindow; +SDL_Renderer *vramRenderer; +SDL_Texture *vramTexture; +#endif +#define INITIAL_VIDEO_SCALE 1 +unsigned int videoScale = INITIAL_VIDEO_SCALE; +unsigned int preFullscreenVideoScale = INITIAL_VIDEO_SCALE; + +bool speedUp = false; +bool videoScaleChanged = false; +bool isRunning = true; +bool paused = false; +bool stepOneFrame = false; +bool headless = false; + +double lastGameTime = 0; +double curGameTime = 0; +double fixedTimestep = 1.0 / 60.0; // 16.666667ms +double timeScale = 1.0; +double accumulator = 0.0; + +static FILE *sSaveFile = NULL; + +extern void AgbMain(void); +void DoSoftReset(void) {}; + +void ProcessSDLEvents(void); +void VDraw(SDL_Texture *texture); +void VramDraw(SDL_Texture *texture); + +static void ReadSaveFile(char *path); +static void StoreSaveFile(void); +static void CloseSaveFile(void); + +static void UpdateInternalClock(void); + +u16 Platform_GetKeyInput(void); + +#ifdef _WIN32 +void *Platform_malloc(size_t numBytes) { return HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, numBytes); } +void Platform_free(void *ptr) { HeapFree(GetProcessHeap(), 0, ptr); } +#endif + +int main(int argc, char **argv) +{ + const char *headlessEnv = getenv("HEADLESS"); + + if (headlessEnv && strcmp(headlessEnv, "true") == 0) { + headless = true; + } + + const char *parentEnv = getenv("SIO_PARENT"); + + if (parentEnv && strcmp(parentEnv, "true") == 0) { + SIO_MULTI_CNT->id = 0; + SIO_MULTI_CNT->si = 1; + SIO_MULTI_CNT->sd = 1; + SIO_MULTI_CNT->enable = false; + } + + // Open an output console on Windows +#if (defined _WIN32) && (DEBUG != 0) + AllocConsole(); + AttachConsole(GetCurrentProcessId()); + freopen("CON", "w", stdout); +#endif + + ReadSaveFile("sa1.sav"); + + // Prevent the multiplayer screen from being drawn ( see core.c:EngineInit() ) + REG_RCNT = 0x8000; + REG_KEYINPUT = 0x3FF; + + if (headless) { + // Required or it makes an infinite loop + cgb_audio_init(48000); + AgbMain(); + return 1; + } + + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0) { + fprintf(stderr, "SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); + return 1; + } + +#ifdef TITLE_BAR + const char *title = STR(TITLE_BAR); +#else + const char *title = "SAT-R sa2"; +#endif + + sdlWindow = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, DISPLAY_WIDTH * videoScale, + DISPLAY_HEIGHT * videoScale, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE); + if (sdlWindow == NULL) { + fprintf(stderr, "Window could not be created! SDL_Error: %s\n", SDL_GetError()); + return 1; + } + +#if ENABLE_VRAM_VIEW + int mainWindowX; + int mainWindowWidth; + SDL_GetWindowPosition(sdlWindow, &mainWindowX, NULL); + SDL_GetWindowSize(sdlWindow, &mainWindowWidth, NULL); + int vramWindowX = mainWindowX + mainWindowWidth; + u16 vramWindowWidth = VRAM_VIEW_WIDTH; + u16 vramWindowHeight = VRAM_VIEW_HEIGHT; + vramWindow = SDL_CreateWindow("VRAM View", vramWindowX, SDL_WINDOWPOS_CENTERED, vramWindowWidth, vramWindowHeight, + SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE); + if (vramWindow == NULL) { + fprintf(stderr, "VRAM Window could not be created! SDL_Error: %s\n", SDL_GetError()); + return 1; + } +#endif + + sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_PRESENTVSYNC); + if (sdlRenderer == NULL) { + fprintf(stderr, "Renderer could not be created! SDL_Error: %s\n", SDL_GetError()); + return 1; + } + +#if ENABLE_VRAM_VIEW + vramRenderer = SDL_CreateRenderer(vramWindow, -1, SDL_RENDERER_PRESENTVSYNC); + if (vramRenderer == NULL) { + fprintf(stderr, "VRAM Renderer could not be created! SDL_Error: %s\n", SDL_GetError()); + return 1; + } +#endif + + SDL_SetRenderDrawColor(sdlRenderer, 0, 0, 0, 255); + SDL_RenderClear(sdlRenderer); + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); + SDL_RenderSetLogicalSize(sdlRenderer, DISPLAY_WIDTH, DISPLAY_HEIGHT); +#if ENABLE_VRAM_VIEW + SDL_SetRenderDrawColor(vramRenderer, 0, 0, 0, 255); + SDL_RenderClear(vramRenderer); + SDL_RenderSetLogicalSize(vramRenderer, vramWindowWidth, vramWindowHeight); +#endif + + sdlTexture = SDL_CreateTexture(sdlRenderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, DISPLAY_WIDTH, DISPLAY_HEIGHT); + if (sdlTexture == NULL) { + fprintf(stderr, "Texture could not be created! SDL_Error: %s\n", SDL_GetError()); + return 1; + } + +#if ENABLE_VRAM_VIEW + vramTexture = SDL_CreateTexture(vramRenderer, SDL_PIXELFORMAT_ABGR1555, SDL_TEXTUREACCESS_STREAMING, vramWindowWidth, vramWindowHeight); + if (vramTexture == NULL) { + fprintf(stderr, "Texture could not be created! SDL_Error: %s\n", SDL_GetError()); + return 1; + } +#endif + +#if ENABLE_AUDIO + SDL_AudioSpec want; + + SDL_memset(&want, 0, sizeof(want)); /* or SDL_zero(want) */ + want.freq = 48000; + want.format = AUDIO_F32; + want.channels = 2; + want.samples = (want.freq / 60); + cgb_audio_init(want.freq); + + if (SDL_OpenAudio(&want, 0) < 0) + SDL_Log("Failed to open audio: %s", SDL_GetError()); + else { + if (want.format != AUDIO_F32) /* we let this one thing change. */ + SDL_Log("We didn't get Float32 audio format."); + SDL_PauseAudio(0); + } +#endif + + VDraw(sdlTexture); +#if ENABLE_VRAM_VIEW + VramDraw(vramTexture); +#endif + AgbMain(); + + return 0; +} + +bool newFrameRequested = FALSE; + +// Every GBA frame we process the SDL events and render the number of times +// SDL requires us to for vsync. When we need another frame we break out of +// the loop via a return +void VBlankIntrWait(void) +{ + // ((struct MultiSioPacket *)gMultiSioArea.nextSendBufp) +#define HANDLE_VBLANK_INTRS() \ + ({ \ + REG_DISPSTAT |= INTR_FLAG_VBLANK; \ + RunDMAs(DMA_VBLANK); \ + if (REG_DISPSTAT & DISPSTAT_VBLANK_INTR) \ + gIntrTable[INTR_INDEX_VBLANK](); \ + REG_DISPSTAT &= ~INTR_FLAG_VBLANK; \ + }) + + if (headless) { + REG_VCOUNT = DISPLAY_HEIGHT + 1; + HANDLE_VBLANK_INTRS(); + return; + } + + bool frameAvailable = TRUE; + + while (isRunning) { + ProcessSDLEvents(); + + if (!paused || stepOneFrame) { + double dt = fixedTimestep / timeScale; // TODO: Fix speedup + + // Hack to emulate the behaviour of threaded sdl + // it will not add any new values to the accumulator + // when a new frame was requested within a frame cycle + if (!newFrameRequested) { + double deltaTime = 0; + + curGameTime = SDL_GetPerformanceCounter(); + if (stepOneFrame) { + deltaTime = dt; + } else { + deltaTime = (double)((curGameTime - lastGameTime) / (double)SDL_GetPerformanceFrequency()); + if (deltaTime > (dt * 5)) + deltaTime = dt * 5; + } + lastGameTime = curGameTime; + + accumulator += deltaTime; + } else { + newFrameRequested = FALSE; + } + + while (accumulator >= dt) { + REG_KEYINPUT = KEYS_MASK ^ Platform_GetKeyInput(); + if (frameAvailable) { + VDraw(sdlTexture); + frameAvailable = FALSE; + + HANDLE_VBLANK_INTRS(); + + accumulator -= dt; + } else { + newFrameRequested = TRUE; + return; + } + } + + if (paused && stepOneFrame) { + stepOneFrame = false; + } + } + + SDL_RenderClear(sdlRenderer); + SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL); + +#if ENABLE_VRAM_VIEW + VramDraw(vramTexture); + SDL_RenderClear(vramRenderer); + SDL_RenderCopy(vramRenderer, vramTexture, NULL, NULL); +#endif + if (videoScaleChanged) { + SDL_SetWindowSize(sdlWindow, DISPLAY_WIDTH * videoScale, DISPLAY_HEIGHT * videoScale); + videoScaleChanged = false; + } + + SDL_RenderPresent(sdlRenderer); +#if ENABLE_VRAM_VIEW + SDL_RenderPresent(vramRenderer); +#endif + } + + CloseSaveFile(); + + SDL_DestroyWindow(sdlWindow); + SDL_Quit(); + exit(0); +#undef RUN_VBLANK_INTRS +} + +static void ReadSaveFile(char *path) +{ + // Check whether the saveFile exists, and create it if not + sSaveFile = fopen(path, "r+b"); + if (sSaveFile == NULL) { + sSaveFile = fopen(path, "w+b"); + } + + fseek(sSaveFile, 0, SEEK_END); + int fileSize = ftell(sSaveFile); + fseek(sSaveFile, 0, SEEK_SET); + + // Only read as many bytes as fit inside the buffer + // or as many bytes as are in the file + int bytesToRead = (fileSize < sizeof(FLASH_BASE)) ? fileSize : sizeof(FLASH_BASE); + + int bytesRead = fread(FLASH_BASE, 1, bytesToRead, sSaveFile); + + // Fill the buffer if the savefile was just created or smaller than the buffer itself + for (int i = bytesRead; i < sizeof(FLASH_BASE); i++) { + FLASH_BASE[i] = 0xFF; + } +} + +static void StoreSaveFile() +{ + if (sSaveFile != NULL) { + fseek(sSaveFile, 0, SEEK_SET); + fwrite(FLASH_BASE, 1, sizeof(FLASH_BASE), sSaveFile); + } +} + +void Platform_StoreSaveFile(void) { StoreSaveFile(); } + +static void CloseSaveFile() +{ + if (sSaveFile != NULL) { + fclose(sSaveFile); + } +} + +// Key mappings +#define KEY_A_BUTTON SDLK_c +#define KEY_B_BUTTON SDLK_x +#define KEY_START_BUTTON SDLK_RETURN +#define KEY_SELECT_BUTTON SDLK_BACKSLASH +#define KEY_L_BUTTON SDLK_s +#define KEY_R_BUTTON SDLK_d +#define KEY_DPAD_UP SDLK_UP +#define KEY_DPAD_DOWN SDLK_DOWN +#define KEY_DPAD_LEFT SDLK_LEFT +#define KEY_DPAD_RIGHT SDLK_RIGHT + +#define HANDLE_KEYUP(key) \ + case KEY_##key: \ + keys &= ~key; \ + break; + +#define HANDLE_KEYDOWN(key) \ + case KEY_##key: \ + keys |= key; \ + break; + +static u16 keys; + +u32 fullScreenFlags = 0; +static SDL_DisplayMode sdlDispMode = { 0 }; + +void Platform_QueueAudio(const void *data, uint32_t bytesCount) +{ + if (headless) { + return; + } + // Reset the audio buffer if we are 10 frames out of sync + // If this happens it suggests there was some OS level lag + // in playing audio. The queue length should remain stable at < 10 otherwise + if (SDL_GetQueuedAudioSize(1) > (bytesCount * 10)) { + SDL_ClearQueuedAudio(1); + } + + SDL_QueueAudio(1, data, bytesCount); + // printf("Queueing %d\n, QueueSize %d\n", bytesCount, SDL_GetQueuedAudioSize(1)); +} + +void ProcessSDLEvents(void) +{ + SDL_Event event; + + while (SDL_PollEvent(&event)) { + SDL_Keycode keyCode = event.key.keysym.sym; + Uint16 keyMod = event.key.keysym.mod; + + switch (event.type) { + case SDL_QUIT: + isRunning = false; + break; + case SDL_KEYUP: + switch (event.key.keysym.sym) { + HANDLE_KEYUP(A_BUTTON) + HANDLE_KEYUP(B_BUTTON) + HANDLE_KEYUP(START_BUTTON) + HANDLE_KEYUP(SELECT_BUTTON) + HANDLE_KEYUP(L_BUTTON) + HANDLE_KEYUP(R_BUTTON) + HANDLE_KEYUP(DPAD_UP) + HANDLE_KEYUP(DPAD_DOWN) + HANDLE_KEYUP(DPAD_LEFT) + HANDLE_KEYUP(DPAD_RIGHT) + case SDLK_SPACE: + if (speedUp) { + speedUp = false; + timeScale = 1.0; + SDL_ClearQueuedAudio(1); + SDL_PauseAudio(0); + } + break; + } + break; + case SDL_KEYDOWN: + if (keyCode == SDLK_RETURN && (keyMod & KMOD_ALT)) { + fullScreenFlags ^= SDL_WINDOW_FULLSCREEN_DESKTOP; + if (fullScreenFlags & SDL_WINDOW_FULLSCREEN_DESKTOP) { + SDL_GetWindowDisplayMode(sdlWindow, &sdlDispMode); + preFullscreenVideoScale = videoScale; + } else { + SDL_SetWindowDisplayMode(sdlWindow, &sdlDispMode); + videoScale = preFullscreenVideoScale; + } + SDL_SetWindowFullscreen(sdlWindow, fullScreenFlags); + + SDL_SetWindowSize(sdlWindow, DISPLAY_WIDTH * videoScale, DISPLAY_HEIGHT * videoScale); + videoScaleChanged = FALSE; + } else + switch (event.key.keysym.sym) { + HANDLE_KEYDOWN(A_BUTTON) + HANDLE_KEYDOWN(B_BUTTON) + HANDLE_KEYDOWN(START_BUTTON) + HANDLE_KEYDOWN(SELECT_BUTTON) + HANDLE_KEYDOWN(L_BUTTON) + HANDLE_KEYDOWN(R_BUTTON) + HANDLE_KEYDOWN(DPAD_UP) + HANDLE_KEYDOWN(DPAD_DOWN) + HANDLE_KEYDOWN(DPAD_LEFT) + HANDLE_KEYDOWN(DPAD_RIGHT) + case SDLK_r: + if (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) { + DoSoftReset(); + } + break; + case SDLK_p: + if (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) { + paused = !paused; + } + break; + case SDLK_SPACE: + if (!speedUp) { + speedUp = true; + timeScale = SPEEDUP_SCALE; + SDL_PauseAudio(1); + } + break; + case SDLK_F10: + paused = true; + stepOneFrame = true; + break; + } + break; + case SDL_WINDOWEVENT: + if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) { + unsigned int w = event.window.data1; + unsigned int h = event.window.data2; + + videoScale = 0; + if (w / DISPLAY_WIDTH > videoScale) + videoScale = w / DISPLAY_WIDTH; + if (h / DISPLAY_HEIGHT > videoScale) + videoScale = h / DISPLAY_HEIGHT; + if (videoScale < 1) + videoScale = 1; + + videoScaleChanged = true; + } + break; + } + } +} + +u16 Platform_GetKeyInput(void) +{ +#ifdef _WIN32 + SharedKeys gamepadKeys = GetXInputKeys(); + + speedUp = (gamepadKeys & KEY_SPEEDUP) ? true : false; + + if (speedUp) { + timeScale = SPEEDUP_SCALE; + SDL_PauseAudio(1); + } else { + timeScale = 1.0f; + SDL_PauseAudio(0); + } + + return (gamepadKeys != 0) ? gamepadKeys : keys; +#endif + + return keys; +} + +// BIOS function implementations are based on the VBA-M source code. + +static uint32_t CPUReadMemory(const void *src) { return *(uint32_t *)src; } + +static void CPUWriteMemory(void *dest, uint32_t val) { *(uint32_t *)dest = val; } + +static uint16_t CPUReadHalfWord(const void *src) { return *(uint16_t *)src; } + +static void CPUWriteHalfWord(void *dest, uint16_t val) { *(uint16_t *)dest = val; } + +static uint8_t CPUReadByte(const void *src) { return *(uint8_t *)src; } + +static void CPUWriteByte(void *dest, uint8_t val) { *(uint8_t *)dest = val; } + +void CpuSet(const void *src, void *dst, u32 cnt) +{ + if (dst == NULL) { + puts("Attempted to CpuSet to NULL\n"); + return; + } + + int count = cnt & 0x1FFFFF; + + const u8 *source = src; + u8 *dest = dst; + + // 32-bit ? + if ((cnt >> 26) & 1) { + // assert(((uintptr_t)src & ~3) == (uintptr_t)src); + // assert(((uintptr_t)dst & ~3) == (uintptr_t)dst); + + // needed for 32-bit mode! + // source = (u8 *)((uint32_t )source & ~3); + // dest = (u8 *)((uint32_t )dest & ~3); + + // fill ? + if ((cnt >> 24) & 1) { + uint32_t value = CPUReadMemory(source); + while (count) { + CPUWriteMemory(dest, value); + dest += 4; + count--; + } + } else { + // copy + while (count) { + CPUWriteMemory(dest, CPUReadMemory(source)); + source += 4; + dest += 4; + count--; + } + } + } else { + // No align on 16-bit fill? + // assert(((uintptr_t)src & ~1) == (uintptr_t)src); + // assert(((uintptr_t)dst & ~1) == (uintptr_t)dst); + + // 16-bit fill? + if ((cnt >> 24) & 1) { + uint16_t value = CPUReadHalfWord(source); + while (count) { + CPUWriteHalfWord(dest, value); + dest += 2; + count--; + } + } else { + // copy + while (count) { + CPUWriteHalfWord(dest, CPUReadHalfWord(source)); + source += 2; + dest += 2; + count--; + } + } + } +} + +void CpuFastSet(const void *src, void *dst, u32 cnt) +{ + if (dst == NULL) { + puts("Attempted to CpuFastSet to NULL\n"); + return; + } + + int count = cnt & 0x1FFFFF; + + const u8 *source = src; + u8 *dest = dst; + + // source = (u8 *)((uint32_t )source & ~3); + // dest = (u8 *)((uint32_t )dest & ~3); + + // fill? + if ((cnt >> 24) & 1) { + uint32_t value = CPUReadMemory(source); + while (count > 0) { + // BIOS always transfers 32 bytes at a time + for (int i = 0; i < 8; i++) { + CPUWriteMemory(dest, value); + dest += 4; + } + count -= 8; + } + } else { + // copy + while (count > 0) { + // BIOS always transfers 32 bytes at a time + for (int i = 0; i < 8; i++) { + uint32_t value = CPUReadMemory(source); + CPUWriteMemory(dest, value); + source += 4; + dest += 4; + } + count -= 8; + } + } +} + +void LZ77UnCompVram(const void *src_, void *dest_) +{ + const u8 *src = (const u8 *)src_; + u8 *dest = dest_; + int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; + int srcPos = 4; + int destPos = 0; + + for (;;) { + unsigned char flags = src[srcPos++]; + + for (int i = 0; i < 8; i++) { + if (flags & 0x80) { + int blockSize = (src[srcPos] >> 4) + 3; + int blockDistance = (((src[srcPos] & 0xF) << 8) | src[srcPos + 1]) + 1; + + srcPos += 2; + + int blockPos = destPos - blockDistance; + + // Some Ruby/Sapphire tilesets overflow. + if (destPos + blockSize > destSize) { + blockSize = destSize - destPos; + // fprintf(stderr, "Destination buffer overflow.\n"); + puts("Destination buffer overflow.\n"); + } + + if (blockPos < 0) + goto fail; + + for (int j = 0; j < blockSize; j++) + dest[destPos++] = dest[blockPos + j]; + } else { + if (destPos >= destSize) + goto fail; + + dest[destPos++] = src[srcPos++]; + } + + if (destPos == destSize) { + return; + } + + flags <<= 1; + } + } + +fail: + puts("Fatal error while decompressing LZ file.\n"); +} + +void LZ77UnCompWram(const void *src, void *dst) +{ + const uint8_t *source = src; + uint8_t *dest = dst; + + uint32_t header = CPUReadMemory(source); + source += 4; + + int len = header >> 8; + + while (len > 0) { + uint8_t d = CPUReadByte(source++); + + if (d) { + for (int i = 0; i < 8; i++) { + if (d & 0x80) { + uint16_t data = CPUReadByte(source++) << 8; + data |= CPUReadByte(source++); + int length = (data >> 12) + 3; + int offset = (data & 0x0FFF); + uint8_t *windowOffset = dest - offset - 1; + for (int i2 = 0; i2 < length; i2++) { + CPUWriteByte(dest++, CPUReadByte(windowOffset++)); + len--; + if (len == 0) + return; + } + } else { + CPUWriteByte(dest++, CPUReadByte(source++)); + len--; + if (len == 0) + return; + } + d <<= 1; + } + } else { + for (int i = 0; i < 8; i++) { + CPUWriteByte(dest++, CPUReadByte(source++)); + len--; + if (len == 0) + return; + } + } + } +} + +void RLUnCompWram(const void *src, void *dest) +{ + int remaining = CPUReadMemory(src) >> 8; + int blockHeader; + int block; + src += 4; + while (remaining > 0) { + blockHeader = CPUReadByte(src); + src++; + if (blockHeader & 0x80) // Compressed? + { + blockHeader &= 0x7F; + blockHeader += 3; + block = CPUReadByte(src); + src++; + while (blockHeader-- && remaining) { + remaining--; + CPUWriteByte(dest, block); + dest++; + } + } else // Uncompressed + { + blockHeader++; + while (blockHeader-- && remaining) { + remaining--; + u8 byte = CPUReadByte(src); + src++; + CPUWriteByte(dest, byte); + dest++; + } + } + } +} + +void RLUnCompVram(const void *src, void *dest) +{ + int remaining = CPUReadMemory(src) >> 8; + int padding = (4 - remaining) & 0x3; + int blockHeader; + int block; + int halfWord = 0; + src += 4; + while (remaining > 0) { + blockHeader = CPUReadByte(src); + src++; + if (blockHeader & 0x80) // Compressed? + { + blockHeader &= 0x7F; + blockHeader += 3; + block = CPUReadByte(src); + src++; + while (blockHeader-- && remaining) { + remaining--; + if ((uintptr_t)dest & 1) { + halfWord |= block << 8; + CPUWriteHalfWord((void *)((uintptr_t)dest ^ 1), halfWord); + } else + halfWord = block; + dest++; + } + } else // Uncompressed + { + blockHeader++; + while (blockHeader-- && remaining) { + remaining--; + u8 byte = CPUReadByte(src); + src++; + if ((uintptr_t)dest & 1) { + halfWord |= byte << 8; + CPUWriteHalfWord((void *)((uintptr_t)dest ^ 1), halfWord); + } else + halfWord = byte; + dest++; + } + } + } + if ((uintptr_t)dest & 1) { + padding--; + dest++; + } + for (; padding > 0; padding -= 2, dest += 2) + CPUWriteHalfWord(dest, 0); +} + +const s16 sineTable[256] + = { (s16)0x0000, (s16)0x0192, (s16)0x0323, (s16)0x04B5, (s16)0x0645, (s16)0x07D5, (s16)0x0964, (s16)0x0AF1, (s16)0x0C7C, (s16)0x0E05, + (s16)0x0F8C, (s16)0x1111, (s16)0x1294, (s16)0x1413, (s16)0x158F, (s16)0x1708, (s16)0x187D, (s16)0x19EF, (s16)0x1B5D, (s16)0x1CC6, + (s16)0x1E2B, (s16)0x1F8B, (s16)0x20E7, (s16)0x223D, (s16)0x238E, (s16)0x24DA, (s16)0x261F, (s16)0x275F, (s16)0x2899, (s16)0x29CD, + (s16)0x2AFA, (s16)0x2C21, (s16)0x2D41, (s16)0x2E5A, (s16)0x2F6B, (s16)0x3076, (s16)0x3179, (s16)0x3274, (s16)0x3367, (s16)0x3453, + (s16)0x3536, (s16)0x3612, (s16)0x36E5, (s16)0x37AF, (s16)0x3871, (s16)0x392A, (s16)0x39DA, (s16)0x3A82, (s16)0x3B20, (s16)0x3BB6, + (s16)0x3C42, (s16)0x3CC5, (s16)0x3D3E, (s16)0x3DAE, (s16)0x3E14, (s16)0x3E71, (s16)0x3EC5, (s16)0x3F0E, (s16)0x3F4E, (s16)0x3F84, + (s16)0x3FB1, (s16)0x3FD3, (s16)0x3FEC, (s16)0x3FFB, (s16)0x4000, (s16)0x3FFB, (s16)0x3FEC, (s16)0x3FD3, (s16)0x3FB1, (s16)0x3F84, + (s16)0x3F4E, (s16)0x3F0E, (s16)0x3EC5, (s16)0x3E71, (s16)0x3E14, (s16)0x3DAE, (s16)0x3D3E, (s16)0x3CC5, (s16)0x3C42, (s16)0x3BB6, + (s16)0x3B20, (s16)0x3A82, (s16)0x39DA, (s16)0x392A, (s16)0x3871, (s16)0x37AF, (s16)0x36E5, (s16)0x3612, (s16)0x3536, (s16)0x3453, + (s16)0x3367, (s16)0x3274, (s16)0x3179, (s16)0x3076, (s16)0x2F6B, (s16)0x2E5A, (s16)0x2D41, (s16)0x2C21, (s16)0x2AFA, (s16)0x29CD, + (s16)0x2899, (s16)0x275F, (s16)0x261F, (s16)0x24DA, (s16)0x238E, (s16)0x223D, (s16)0x20E7, (s16)0x1F8B, (s16)0x1E2B, (s16)0x1CC6, + (s16)0x1B5D, (s16)0x19EF, (s16)0x187D, (s16)0x1708, (s16)0x158F, (s16)0x1413, (s16)0x1294, (s16)0x1111, (s16)0x0F8C, (s16)0x0E05, + (s16)0x0C7C, (s16)0x0AF1, (s16)0x0964, (s16)0x07D5, (s16)0x0645, (s16)0x04B5, (s16)0x0323, (s16)0x0192, (s16)0x0000, (s16)0xFE6E, + (s16)0xFCDD, (s16)0xFB4B, (s16)0xF9BB, (s16)0xF82B, (s16)0xF69C, (s16)0xF50F, (s16)0xF384, (s16)0xF1FB, (s16)0xF074, (s16)0xEEEF, + (s16)0xED6C, (s16)0xEBED, (s16)0xEA71, (s16)0xE8F8, (s16)0xE783, (s16)0xE611, (s16)0xE4A3, (s16)0xE33A, (s16)0xE1D5, (s16)0xE075, + (s16)0xDF19, (s16)0xDDC3, (s16)0xDC72, (s16)0xDB26, (s16)0xD9E1, (s16)0xD8A1, (s16)0xD767, (s16)0xD633, (s16)0xD506, (s16)0xD3DF, + (s16)0xD2BF, (s16)0xD1A6, (s16)0xD095, (s16)0xCF8A, (s16)0xCE87, (s16)0xCD8C, (s16)0xCC99, (s16)0xCBAD, (s16)0xCACA, (s16)0xC9EE, + (s16)0xC91B, (s16)0xC851, (s16)0xC78F, (s16)0xC6D6, (s16)0xC626, (s16)0xC57E, (s16)0xC4E0, (s16)0xC44A, (s16)0xC3BE, (s16)0xC33B, + (s16)0xC2C2, (s16)0xC252, (s16)0xC1EC, (s16)0xC18F, (s16)0xC13B, (s16)0xC0F2, (s16)0xC0B2, (s16)0xC07C, (s16)0xC04F, (s16)0xC02D, + (s16)0xC014, (s16)0xC005, (s16)0xC000, (s16)0xC005, (s16)0xC014, (s16)0xC02D, (s16)0xC04F, (s16)0xC07C, (s16)0xC0B2, (s16)0xC0F2, + (s16)0xC13B, (s16)0xC18F, (s16)0xC1EC, (s16)0xC252, (s16)0xC2C2, (s16)0xC33B, (s16)0xC3BE, (s16)0xC44A, (s16)0xC4E0, (s16)0xC57E, + (s16)0xC626, (s16)0xC6D6, (s16)0xC78F, (s16)0xC851, (s16)0xC91B, (s16)0xC9EE, (s16)0xCACA, (s16)0xCBAD, (s16)0xCC99, (s16)0xCD8C, + (s16)0xCE87, (s16)0xCF8A, (s16)0xD095, (s16)0xD1A6, (s16)0xD2BF, (s16)0xD3DF, (s16)0xD506, (s16)0xD633, (s16)0xD767, (s16)0xD8A1, + (s16)0xD9E1, (s16)0xDB26, (s16)0xDC72, (s16)0xDDC3, (s16)0xDF19, (s16)0xE075, (s16)0xE1D5, (s16)0xE33A, (s16)0xE4A3, (s16)0xE611, + (s16)0xE783, (s16)0xE8F8, (s16)0xEA71, (s16)0xEBED, (s16)0xED6C, (s16)0xEEEF, (s16)0xF074, (s16)0xF1FB, (s16)0xF384, (s16)0xF50F, + (s16)0xF69C, (s16)0xF82B, (s16)0xF9BB, (s16)0xFB4B, (s16)0xFCDD, (s16)0xFE6E }; + +void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count) +{ + for (s32 i = 0; i < count; i++) { + s32 cx = src[i].texX; + s32 cy = src[i].texY; + s16 dispx = src[i].scrX; + s16 dispy = src[i].scrY; + s16 rx = src[i].sx; + s16 ry = src[i].sy; + u16 theta = src[i].alpha >> 8; + s32 a = sineTable[(theta + 0x40) & 255]; + s32 b = sineTable[theta]; + + s16 dx = (rx * a) >> 14; + s16 dmx = (rx * b) >> 14; + s16 dy = (ry * b) >> 14; + s16 dmy = (ry * a) >> 14; + + dest[i].pa = dx; + dest[i].pb = -dmx; + dest[i].pc = dy; + dest[i].pd = dmy; + + s32 startx = cx - dx * dispx + dmx * dispy; + s32 starty = cy - dy * dispx - dmy * dispy; + + dest[i].dx = startx; + dest[i].dy = starty; + } +} + +void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset) +{ + for (s32 i = 0; i < count; i++) { + s16 rx = src[i].xScale; + s16 ry = src[i].yScale; + u16 theta = src[i].rotation >> 8; + + s32 a = (s32)sineTable[(theta + 64) & 255]; + s32 b = (s32)sineTable[theta]; + + s16 dx = ((s32)rx * a) >> 14; + s16 dmx = ((s32)rx * b) >> 14; + s16 dy = ((s32)ry * b) >> 14; + s16 dmy = ((s32)ry * a) >> 14; + + CPUWriteHalfWord(dest, dx); + dest += offset; + CPUWriteHalfWord(dest, -dmx); + dest += offset; + CPUWriteHalfWord(dest, dy); + dest += offset; + CPUWriteHalfWord(dest, dmy); + dest += offset; + } +} + +void SoftReset(u32 resetFlags) { } + +void SoftResetExram(u32 resetFlags) { } + +static const uint16_t bgMapSizes[][2] = { + { 32, 32 }, + { 64, 32 }, + { 32, 64 }, + { 64, 64 }, +}; + +#define mosaicBGEffectX (REG_MOSAIC & 0xF) +#define mosaicBGEffectY ((REG_MOSAIC >> 4) & 0xF) +#define mosaicSpriteEffectX ((REG_MOSAIC >> 8) & 0xF) +#define mosaicSpriteEffectY ((REG_MOSAIC >> 12) & 0xF) +#define applyBGHorizontalMosaicEffect(x) (x - (x % (mosaicBGEffectX + 1))) +#define applyBGVerticalMosaicEffect(y) (y - (y % (mosaicBGEffectY + 1))) +#define applySpriteHorizontalMosaicEffect(x) (x - (x % (mosaicSpriteEffectX + 1))) +#define applySpriteVerticalMosaicEffect(y) (y - (y % (mosaicSpriteEffectY + 1))) + +// NOTE: This is the corrected function. +static void RenderBGScanline(int bgNum, uint16_t control, uint16_t hoffs, uint16_t voffs, int lineNum, uint16_t *line) +{ + unsigned int charBaseBlock = (control >> 2) & 3; + unsigned int screenBaseBlock = (control & BGCNT_SCREENBASE_MASK) >> 8; + unsigned int bitsPerPixel = ((control >> 7) & 1) ? 8 : 4; + + // Determine background dimensions from the control register + unsigned int mapWidth = bgMapSizes[control >> 14][0]; // in tiles + unsigned int mapHeight = bgMapSizes[control >> 14][1]; // in tiles + unsigned int mapPixelWidth = mapWidth * TILE_WIDTH; + unsigned int mapPixelHeight = mapHeight * TILE_WIDTH; + + uint8_t *bgtiles = (uint8_t *)BG_CHAR_ADDR(charBaseBlock); + uint16_t *bgmap = (uint16_t *)BG_SCREEN_ADDR(screenBaseBlock); + uint16_t *pal = (uint16_t *)PLTT; + + // Apply vertical mosaic effect to the entire scanline if enabled + if (control & BGCNT_MOSAIC) { + lineNum = applyBGVerticalMosaicEffect(lineNum); + } + + // GBA hardware masks scroll registers to 9 bits (0-511) + hoffs &= 0x1FF; + voffs &= 0x1FF; + + for (unsigned int x = 0; x < DISPLAY_WIDTH; x++) { + unsigned int xx, yy; + + // Calculate the source coordinate in the background map, applying scroll and mosaic + if (control & BGCNT_MOSAIC) { + xx = applyBGHorizontalMosaicEffect(x) + hoffs; + } else { + xx = x + hoffs; + } + yy = lineNum + voffs; + + // Wrap the coordinates based on the background's actual pixel dimensions. + // This fixes issues with backgrounds that are not 256x256. + xx &= (mapPixelWidth - 1); + yy &= (mapPixelHeight - 1); + + // Convert pixel coordinates to tile coordinates + unsigned int mapX = xx / TILE_WIDTH; + unsigned int mapY = yy / TILE_WIDTH; + + // Calculate the 1D index into the tilemap. This was the primary source of bugs, + // as the original code used a hardcoded map width of 32 tiles. + unsigned int mapIndex = mapY * mapWidth + mapX; + + uint16_t entry = bgmap[mapIndex]; + unsigned int tileNum = entry & 0x3FF; + unsigned int paletteNum = (entry >> 12) & 0xF; + +#if ENABLE_VRAM_VIEW + vramPalIdBuffer[tileNum] = paletteNum; +#endif + + // Get the coordinate within the specific tile + unsigned int tileX = xx % TILE_WIDTH; + unsigned int tileY = yy % TILE_WIDTH; + + // Handle horizontal and vertical tile flipping + if (entry & (1 << 10)) + tileX = (TILE_WIDTH - 1) - tileX; // H-flip + if (entry & (1 << 11)) + tileY = (TILE_WIDTH - 1) - tileY; // V-flip + + // Calculate address of the pixel data and extract the color + if (bitsPerPixel == 4) { + uint32_t tileDataOffset = tileNum * TILE_SIZE_4BPP; + uint32_t pixelByteOffset = (tileY * TILE_WIDTH + tileX) / 2; + uint8_t pixelPair = bgtiles[tileDataOffset + pixelByteOffset]; + + uint8_t pixel; + if (tileX & 1) { + pixel = pixelPair >> 4; + } else { + pixel = pixelPair & 0xF; + } + + if (pixel != 0) { + line[x] = pal[16 * paletteNum + pixel] | 0x8000; + } + } else { // 8 bits per pixel + uint32_t tileDataOffset = tileNum * TILE_SIZE_8BPP; + uint32_t pixelByteOffset = tileY * TILE_WIDTH + tileX; + uint8_t pixel = bgtiles[tileDataOffset + pixelByteOffset]; + + if (pixel != 0) { + // For 8bpp tiles, the palette number in the tile entry is ignored. + // The pixel value is a direct index into the 256-color palette. + line[x] = pal[pixel] | 0x8000; + } + } + } +} + +static inline uint32_t getBgX(int bgNumber) +{ + if (bgNumber == 2) { + return REG_BG2X; + } else if (bgNumber == 3) { + return REG_BG3X; + } + + return 0; +} + +static inline uint32_t getBgY(int bgNumber) +{ + if (bgNumber == 2) { + return REG_BG2Y; + } else if (bgNumber == 3) { + return REG_BG3Y; + } + + return 0; +} + +static inline uint16_t getBgPA(int bgNumber) +{ + if (bgNumber == 2) { + return REG_BG2PA; + } else if (bgNumber == 3) { + return REG_BG3PA; + } + return 0; +} + +static inline uint16_t getBgPB(int bgNumber) +{ + if (bgNumber == 2) { + return REG_BG2PB; + } else if (bgNumber == 3) { + return REG_BG3PB; + } + + return 0; +} + +static inline uint16_t getBgPC(int bgNumber) +{ + if (bgNumber == 2) { + return REG_BG2PC; + } else if (bgNumber == 3) { + return REG_BG3PC; + } + + return 0; +} + +static inline uint16_t getBgPD(int bgNumber) +{ + if (bgNumber == 2) { + return REG_BG2PD; + } else if (bgNumber == 3) { + return REG_BG3PD; + } + + return 0; +} + +static void RenderRotScaleBGScanline(int bgNum, uint16_t control, uint16_t x, uint16_t y, int lineNum, uint16_t *line) +{ + vBgCnt *bgcnt = (vBgCnt *)&control; + unsigned int charBaseBlock = bgcnt->charBaseBlock; + unsigned int screenBaseBlock = bgcnt->screenBaseBlock; + unsigned int mapWidth = 1 << (4 + (bgcnt->screenSize)); // number of tiles + + uint8_t *bgtiles = (uint8_t *)(VRAM + charBaseBlock * 0x4000); + uint8_t *bgmap = (uint8_t *)(VRAM + screenBaseBlock * 0x800); + uint16_t *pal = (uint16_t *)PLTT; + + if (control & BGCNT_MOSAIC) + lineNum = applyBGVerticalMosaicEffect(lineNum); + + s16 pa = getBgPA(bgNum); + s16 pb = getBgPB(bgNum); + s16 pc = getBgPC(bgNum); + s16 pd = getBgPD(bgNum); + + int sizeX = 128; + int sizeY = 128; + + switch (bgcnt->screenSize) { + case 0: + break; + case 1: + sizeX = sizeY = 256; + break; + case 2: + sizeX = sizeY = 512; + break; + case 3: + sizeX = sizeY = 1024; + break; + } + + int maskX = sizeX - 1; + int maskY = sizeY - 1; + + int yshift = ((control >> 14) & 3) + 4; + + /*int dx = pa & 0x7FFF; + if (pa & 0x8000) + dx |= 0xFFFF8000; + int dmx = pb & 0x7FFF; + if (pb & 0x8000) + dmx |= 0xFFFF8000; + int dy = pc & 0x7FFF; + if (pc & 0x8000) + dy |= 0xFFFF8000; + int dmy = pd & 0x7FFF; + if (pd & 0x8000) + dmy |= 0xFFFF8000;*/ + + s32 currentX = getBgX(bgNum); + s32 currentY = getBgY(bgNum); + + // sign extend 28 bit number + currentX = ((currentX & (1 << 27)) ? currentX | 0xF0000000 : currentX); + currentY = ((currentY & (1 << 27)) ? currentY | 0xF0000000 : currentY); + + currentX += lineNum * pb; + currentY += lineNum * pd; + + int realX = currentX; + int realY = currentY; + + if (bgcnt->areaOverflowMode) { + for (int x = 0; x < DISPLAY_WIDTH; x++) { + int xxx = (realX >> 8) & maskX; + int yyy = (realY >> 8) & maskY; + + int tile = bgmap[(xxx >> 3) + ((yyy >> 3) << yshift)]; + + int tileX = xxx & 7; + int tileY = yyy & 7; + + uint8_t pixel = bgtiles[(tile << 6) + (tileY << 3) + tileX]; + + if (pixel != 0) { + line[x] = pal[pixel] | 0x8000; + } + + realX += pa; + realY += pc; + } + } else { + for (int x = 0; x < DISPLAY_WIDTH; x++) { + int xxx = (realX >> 8); + int yyy = (realY >> 8); + + if (xxx < 0 || yyy < 0 || xxx >= sizeX || yyy >= sizeY) { + // line[x] = 0x80000000; + } else { + int tile = bgmap[(xxx >> 3) + ((yyy >> 3) << yshift)]; + + int tileX = xxx & 7; + int tileY = yyy & 7; + + uint8_t pixel = bgtiles[(tile << 6) + (tileY << 3) + tileX]; + + if (pixel != 0) { + line[x] = pal[pixel] | 0x8000; + } + } + realX += pa; + realY += pc; + } + } + // the only way i could figure out how to get accurate mosaic on affine bgs + // luckily i dont think pokemon emerald uses mosaic on affine bgs + if (control & BGCNT_MOSAIC && mosaicBGEffectX > 0) { + for (int x = 0; x < DISPLAY_WIDTH; x++) { + uint16_t color = line[applyBGHorizontalMosaicEffect(x)]; + line[x] = color; + } + } +} + +const u8 spriteSizes[][2] = { + { 8, 16 }, + { 8, 32 }, + { 16, 32 }, + { 32, 64 }, +}; + +#define getAlphaBit(x) ((x >> 15) & 1) +#define getRedChannel(x) ((x >> 0) & 0x1F) +#define getGreenChannel(x) ((x >> 5) & 0x1F) +#define getBlueChannel(x) ((x >> 10) & 0x1F) +#define isbgEnabled(x) ((REG_DISPCNT >> 8) & 0xF) & (1 << x) + +static uint16_t alphaBlendColor(uint16_t targetA, uint16_t targetB) +{ + unsigned int eva = REG_BLDALPHA & 0x1F; + unsigned int evb = (REG_BLDALPHA >> 8) & 0x1F; + // shift right by 4 = division by 16 + unsigned int r = ((getRedChannel(targetA) * eva) + (getRedChannel(targetB) * evb)) >> 4; + unsigned int g = ((getGreenChannel(targetA) * eva) + (getGreenChannel(targetB) * evb)) >> 4; + unsigned int b = ((getBlueChannel(targetA) * eva) + (getBlueChannel(targetB) * evb)) >> 4; + + if (r > 31) + r = 31; + if (g > 31) + g = 31; + if (b > 31) + b = 31; + + return r | (g << 5) | (b << 10) | (1 << 15); +} + +static uint16_t alphaBrightnessIncrease(uint16_t targetA) +{ + unsigned int evy = (REG_BLDY & 0x1F); + unsigned int r = getRedChannel(targetA) + (31 - getRedChannel(targetA)) * evy / 16; + unsigned int g = getGreenChannel(targetA) + (31 - getGreenChannel(targetA)) * evy / 16; + unsigned int b = getBlueChannel(targetA) + (31 - getBlueChannel(targetA)) * evy / 16; + + if (r > 31) + r = 31; + if (g > 31) + g = 31; + if (b > 31) + b = 31; + + return r | (g << 5) | (b << 10) | (1 << 15); +} + +static uint16_t alphaBrightnessDecrease(uint16_t targetA) +{ + unsigned int evy = (REG_BLDY & 0x1F); + unsigned int r = getRedChannel(targetA) - getRedChannel(targetA) * evy / 16; + unsigned int g = getGreenChannel(targetA) - getGreenChannel(targetA) * evy / 16; + unsigned int b = getBlueChannel(targetA) - getBlueChannel(targetA) * evy / 16; + + if (r > 31) + r = 31; + if (g > 31) + g = 31; + if (b > 31) + b = 31; + + return r | (g << 5) | (b << 10) | (1 << 15); +} + +// outputs the blended pixel in colorOutput, the prxxx are the bg priority and +// subpriority, pixelpos is pixel offset in scanline +static bool alphaBlendSelectTargetB(struct scanlineData *scanline, uint16_t *colorOutput, char prnum, char prsub, int pixelpos, + bool spriteBlendEnabled) +{ + // iterate trough every possible bg to blend with, starting from specified priorities + // from arguments + for (unsigned int blndprnum = prnum; blndprnum <= 3; blndprnum++) { + // check if sprite is available to blend with, if sprite blending is enabled + if (spriteBlendEnabled == true && getAlphaBit(scanline->spriteLayers[blndprnum][pixelpos]) == 1) { + *colorOutput = scanline->spriteLayers[blndprnum][pixelpos]; + return true; + } + + for (unsigned int blndprsub = prsub; blndprsub < scanline->prioritySortedBgsCount[blndprnum]; blndprsub++) { + char currLayer = scanline->prioritySortedBgs[blndprnum][blndprsub]; + if (getAlphaBit(scanline->layers[currLayer][pixelpos]) == 1 && REG_BLDCNT & (1 << (8 + currLayer)) && isbgEnabled(currLayer)) { + *colorOutput = scanline->layers[currLayer][pixelpos]; + return true; + } + // if we hit a non target layer we should bail + if (getAlphaBit(scanline->layers[currLayer][pixelpos]) == 1 && isbgEnabled(currLayer) && prnum != blndprnum) { + return false; + } + } + prsub = 0; // start from zero in the next iteration + } + // no background got hit, check if backdrop is enabled and return it if enabled + // otherwise fail + if (REG_BLDCNT & BLDCNT_TGT2_BD) { + *colorOutput = *(uint16_t *)PLTT; + return true; + } else { + return false; + } +} + +#define WINMASK_BG0 (1 << 0) +#define WINMASK_BG1 (1 << 1) +#define WINMASK_BG2 (1 << 2) +#define WINMASK_BG3 (1 << 3) +#define WINMASK_OBJ (1 << 4) +#define WINMASK_CLR (1 << 5) +#define WINMASK_WINOUT (1 << 6) + +// checks if window horizontal is in bounds and takes account WIN wraparound +static bool winCheckHorizontalBounds(u16 left, u16 right, u16 xpos) +{ + if (left > right) + return (xpos >= left || xpos < right); + else + return (xpos >= left && xpos < right); +} + +extern const u8 gOamShapesSizes[12][2]; + +// Parts of this code heavily borrowed from NanoboyAdvance. +static void DrawOamSprites(struct scanlineData *scanline, uint16_t vcount, bool windowsEnabled) +{ + int i; + unsigned int x; + unsigned int y; + void *objtiles = OBJ_VRAM0; + unsigned int blendMode = (REG_BLDCNT >> 6) & 3; + bool winShouldBlendPixel = true; + + int16_t matrix[2][2] = {}; + + if (!(REG_DISPCNT & (1 << 6))) { + puts("2-D OBJ Character mapping not supported."); + } + + for (i = OAM_ENTRY_COUNT - 1; i >= 0; i--) { + OamData *oam = &((OamData *)OAM)[i]; + unsigned int width; + unsigned int height; + uint16_t *pixels; + + bool isAffine = oam->split.affineMode & 1; + bool doubleSizeOrDisabled = (oam->split.affineMode >> 1) & 1; + bool isSemiTransparent = (oam->split.objMode == 1); + bool isObjWin = (oam->split.objMode == 2); + + if (!(isAffine) && doubleSizeOrDisabled) // disable for non-affine + { + continue; + } + + s32 index = (oam->split.shape << 2) | oam->split.size; + width = gOamShapesSizes[index][0]; + height = gOamShapesSizes[index][1]; + + int rect_width = width; + int rect_height = height; + + int half_width = width / 2; + int half_height = height / 2; + + pixels = scanline->spriteLayers[oam->split.priority]; + + int32_t x = oam->split.x; + int32_t y = oam->split.y; + +#if !EXTENDED_OAM + // The regular, unextended values are 9 and 8 unsigned bits for x and y respectively. + // Once they have exceeded the screen's right or bottom, they get treated as signed values on original hardware. + // This is done so that, for example, a sprite at 0 on either axis that moves left or up will not suddenly disappear. + // + // With EXTENDED_OAM we are using signed 16 bit values, so we don't want to change the raw value. + if (x >= DISPLAY_WIDTH) + x -= 512; + if (y >= DISPLAY_HEIGHT) + y -= 256; +#endif + + if (isAffine) { + // TODO: there is probably a better way to do this + u8 matrixNum = oam->split.matrixNum * 4; + + OamData *oam1 = &((OamData *)OAM)[matrixNum]; + OamData *oam2 = &((OamData *)OAM)[matrixNum + 1]; + OamData *oam3 = &((OamData *)OAM)[matrixNum + 2]; + OamData *oam4 = &((OamData *)OAM)[matrixNum + 3]; + + matrix[0][0] = oam1->all.affineParam; + matrix[0][1] = oam2->all.affineParam; + matrix[1][0] = oam3->all.affineParam; + matrix[1][1] = oam4->all.affineParam; + + if (doubleSizeOrDisabled) // double size for affine + { + rect_width *= 2; + rect_height *= 2; + half_width *= 2; + half_height *= 2; + } + } else { + // Identity + matrix[0][0] = 0x100; + matrix[0][1] = 0; + matrix[1][0] = 0; + matrix[1][1] = 0x100; + } + + x += half_width; + y += half_height; + + // Does this sprite actually draw on this scanline? + if (vcount >= (y - half_height) && vcount < (y + half_height)) { + int local_y = (oam->split.mosaic == 1) ? applySpriteVerticalMosaicEffect(vcount) - y : vcount - y; + int number = oam->split.tileNum; + int palette = oam->split.paletteNum; + bool flipX = !isAffine && ((oam->split.matrixNum >> 3) & 1); + bool flipY = !isAffine && ((oam->split.matrixNum >> 4) & 1); + bool is8BPP = oam->split.bpp & 1; + + for (int local_x = -half_width; local_x <= half_width; local_x++) { + uint8_t *tiledata = (uint8_t *)objtiles; + uint16_t *palette = (uint16_t *)(PLTT + (0x200 / 2)); + int local_mosaicX; + int tex_x; + int tex_y; + + unsigned int global_x = local_x + x; + + if (global_x < 0 || global_x >= DISPLAY_WIDTH) + continue; + + if (oam->split.mosaic == 1) { + // mosaic effect has to be applied to global coordinates otherwise + // the mosaic will scroll + local_mosaicX = applySpriteHorizontalMosaicEffect(global_x) - x; + tex_x = ((matrix[0][0] * local_mosaicX + matrix[0][1] * local_y) >> 8) + (width / 2); + tex_y = ((matrix[1][0] * local_mosaicX + matrix[1][1] * local_y) >> 8) + (height / 2); + } else { + tex_x = ((matrix[0][0] * local_x + matrix[0][1] * local_y) >> 8) + (width / 2); + tex_y = ((matrix[1][0] * local_x + matrix[1][1] * local_y) >> 8) + (height / 2); + } + + /* Check if transformed coordinates are inside bounds. */ + + if (tex_x >= width || tex_y >= height || tex_x < 0 || tex_y < 0) + continue; + + if (flipX) + tex_x = width - tex_x - 1; + if (flipY) + tex_y = height - tex_y - 1; + + int tile_x = tex_x % 8; + int tile_y = tex_y % 8; + int block_x = tex_x / 8; + int block_y = tex_y / 8; + int block_offset = ((block_y * (REG_DISPCNT & 0x40 ? (width / 8) : 16)) + block_x); + uint16_t pixel = 0; + + if (!is8BPP) { + int tileDataIndex = (block_offset + oam->split.tileNum) * 32 + (tile_y * 4) + (tile_x / 2); + pixel = tiledata[tileDataIndex]; + if (tile_x & 1) + pixel >>= 4; + else + pixel &= 0xF; + palette += oam->split.paletteNum * 16; +#if ENABLE_VRAM_VIEW + vramPalIdBuffer[0x800 + (tileDataIndex / 32)] = 16 + oam->split.paletteNum; +#endif + } else { + pixel = tiledata[(block_offset * 2 + oam->split.tileNum) * 32 + (tile_y * 8) + tile_x]; + } + + if (pixel != 0) { + uint16_t color = palette[pixel]; + + // if sprite mode is 2 then write to the window mask instead + if (isObjWin) { + if (scanline->winMask[global_x] & WINMASK_WINOUT) + scanline->winMask[global_x] = (REG_WINOUT >> 8) & 0x3F; + continue; + } + // this code runs if pixel is to be drawn + if (global_x < DISPLAY_WIDTH && global_x >= 0) { + // check if its enabled in the window (if window is enabled) + winShouldBlendPixel = (windowsEnabled == false || scanline->winMask[global_x] & WINMASK_CLR); + + // has to be separated from the blend mode switch statement + // because of OBJ semi transparancy feature + if ((blendMode == 1 && REG_BLDCNT & BLDCNT_TGT1_OBJ && winShouldBlendPixel) || isSemiTransparent) { + uint16_t targetA = color; + uint16_t targetB = 0; + if (alphaBlendSelectTargetB(scanline, &targetB, oam->split.priority, 0, global_x, false)) { + color = alphaBlendColor(targetA, targetB); + } + } else if (REG_BLDCNT & BLDCNT_TGT1_OBJ && winShouldBlendPixel) { + switch (blendMode) { + case 2: + color = alphaBrightnessIncrease(color); + break; + case 3: + color = alphaBrightnessDecrease(color); + break; + } + } + + // write pixel to pixel framebuffer + pixels[global_x] = color | (1 << 15); + } + } + } + } + } +} + +static void DrawScanline(uint16_t *pixels, uint16_t vcount) +{ + unsigned int mode = REG_DISPCNT & 3; + unsigned char numOfBgs = (mode == 0 ? 4 : 3); + int bgnum, prnum; + struct scanlineData scanline; + unsigned int blendMode = (REG_BLDCNT >> 6) & 3; + unsigned int xpos; + + // initialize all priority bookkeeping data + memset(scanline.layers, 0, sizeof(scanline.layers)); + memset(scanline.winMask, 0, sizeof(scanline.winMask)); + memset(scanline.spriteLayers, 0, sizeof(scanline.spriteLayers)); + memset(scanline.prioritySortedBgsCount, 0, sizeof(scanline.prioritySortedBgsCount)); + + for (bgnum = 0; bgnum < numOfBgs; bgnum++) { + uint16_t bgcnt = *(uint16_t *)(REG_ADDR_BG0CNT + bgnum * 2); + uint16_t priority; + scanline.bgcnts[bgnum] = bgcnt; + scanline.bgtoprio[bgnum] = priority = (bgcnt & 3); + + char priorityCount = scanline.prioritySortedBgsCount[priority]; + scanline.prioritySortedBgs[priority][priorityCount] = bgnum; + scanline.prioritySortedBgsCount[priority]++; + } + + switch (mode) { + case 0: + // All backgrounds are text mode + for (bgnum = 3; bgnum >= 0; bgnum--) { + if (isbgEnabled(bgnum)) { + uint16_t bghoffs = *(uint16_t *)(REG_ADDR_BG0HOFS + bgnum * 4); + uint16_t bgvoffs = *(uint16_t *)(REG_ADDR_BG0VOFS + bgnum * 4); + + RenderBGScanline(bgnum, scanline.bgcnts[bgnum], bghoffs, bgvoffs, vcount, scanline.layers[bgnum]); + } + } + + break; + case 1: + // BG2 is affine + bgnum = 2; + if (isbgEnabled(bgnum)) { + RenderRotScaleBGScanline(bgnum, scanline.bgcnts[bgnum], REG_BG2X, REG_BG2Y, vcount, scanline.layers[bgnum]); + } + // BG0 and BG1 are text mode + for (bgnum = 1; bgnum >= 0; bgnum--) { + if (isbgEnabled(bgnum)) { + uint16_t bghoffs = *(uint16_t *)(REG_ADDR_BG0HOFS + bgnum * 4); + uint16_t bgvoffs = *(uint16_t *)(REG_ADDR_BG0VOFS + bgnum * 4); + + RenderBGScanline(bgnum, scanline.bgcnts[bgnum], bghoffs, bgvoffs, vcount, scanline.layers[bgnum]); + } + } + break; + default: + printf("Video mode %u is unsupported.\n", mode); + break; + } + + bool windowsEnabled = false; + u16 WIN0bottom, WIN0top, WIN0right, WIN0left; + u16 WIN1bottom, WIN1top, WIN1right, WIN1left; + bool WIN0enable, WIN1enable; + WIN0enable = false; + WIN1enable = false; + + // figure out if WIN0 masks on this scanline + if (REG_DISPCNT & DISPCNT_WIN0_ON) { + // acquire the window coordinates + + WIN0bottom = WIN_GET_HIGHER(REG_WIN0V); // y2; + WIN0top = WIN_GET_LOWER(REG_WIN0V); // y1; + WIN0right = WIN_GET_HIGHER(REG_WIN0H); // x2 + WIN0left = WIN_GET_LOWER(REG_WIN0H); // x1 + + // printf("%d, %d, %d, %d\n", WIN0bottom, WIN0top, WIN0right, WIN0left); + // figure out WIN Y wraparound and check bounds accordingly + if (WIN0top > WIN0bottom) { + if (vcount >= WIN0top || vcount < WIN0bottom) + WIN0enable = true; + } else { + if (vcount >= WIN0top && vcount < WIN0bottom) + WIN0enable = true; + } + + windowsEnabled = true; + } + // figure out if WIN1 masks on this scanline + if (REG_DISPCNT & DISPCNT_WIN1_ON) { + WIN1bottom = WIN_GET_HIGHER(REG_WIN1V); // y2; + WIN1top = WIN_GET_LOWER(REG_WIN1V); // y1; + WIN1right = WIN_GET_HIGHER(REG_WIN1H); // x2 + WIN1left = WIN_GET_LOWER(REG_WIN1H); // x1 + + if (WIN1top > WIN1bottom) { + if (vcount >= WIN1top || vcount < WIN1bottom) + WIN1enable = true; + } else { + if (vcount >= WIN1top && vcount < WIN1bottom) + WIN1enable = true; + } + + windowsEnabled = true; + } + // enable windows if OBJwin is enabled + if (REG_DISPCNT & DISPCNT_OBJWIN_ON && REG_DISPCNT & DISPCNT_OBJ_ON) { + windowsEnabled = true; + } + + // draw to pixel mask + if (windowsEnabled) { + for (xpos = 0; xpos < DISPLAY_WIDTH; xpos++) { + // win0 checks + if (WIN0enable && winCheckHorizontalBounds(WIN0left, WIN0right, xpos)) + scanline.winMask[xpos] = REG_WININ & 0x3F; + // win1 checks + else if (WIN1enable && winCheckHorizontalBounds(WIN1left, WIN1right, xpos)) + scanline.winMask[xpos] = (REG_WININ >> 8) & 0x3F; + else + scanline.winMask[xpos] = (REG_WINOUT & 0x3F) | WINMASK_WINOUT; + } + } + + if (REG_DISPCNT & DISPCNT_OBJ_ON) + DrawOamSprites(&scanline, vcount, windowsEnabled); + + // iterate trough every priority in order + for (prnum = 3; prnum >= 0; prnum--) { + for (char prsub = scanline.prioritySortedBgsCount[prnum] - 1; prsub >= 0; prsub--) { + char bgnum = scanline.prioritySortedBgs[prnum][prsub]; + // if background is enabled then draw it + if (isbgEnabled(bgnum)) { + uint16_t *src = scanline.layers[bgnum]; + // copy all pixels to framebuffer + for (xpos = 0; xpos < DISPLAY_WIDTH; xpos++) { + uint16_t color = src[xpos]; + bool winEffectEnable = true; + + if (!getAlphaBit(color)) + continue; // do nothing if alpha bit is not set + + if (windowsEnabled) { + winEffectEnable = ((scanline.winMask[xpos] & WINMASK_CLR) >> 5); + // if bg is disabled inside the window then do not draw the pixel + if (!(scanline.winMask[xpos] & 1 << bgnum)) + continue; + } + + // blending code + if (blendMode != 0 && REG_BLDCNT & (1 << bgnum) && winEffectEnable) { + uint16_t targetA = color; + uint16_t targetB = 0; + + switch (blendMode) { + case 1: { + char isSpriteBlendingEnabled = REG_BLDCNT & BLDCNT_TGT2_OBJ ? 1 : 0; + // find targetB and blend it + if (alphaBlendSelectTargetB(&scanline, &targetB, prnum, prsub + 1, xpos, isSpriteBlendingEnabled)) { + color = alphaBlendColor(targetA, targetB); + } + } break; + case 2: + color = alphaBrightnessIncrease(targetA); + break; + case 3: + color = alphaBrightnessDecrease(targetA); + break; + } + } + // write the pixel to scanline buffer output + pixels[xpos] = color; + } + } + } + // draw sprites on current priority + uint16_t *src = scanline.spriteLayers[prnum]; + for (xpos = 0; xpos < DISPLAY_WIDTH; xpos++) { + if (getAlphaBit(src[xpos])) { + // check if sprite pixel draws inside window + if (windowsEnabled && !(scanline.winMask[xpos] & WINMASK_OBJ)) + continue; + // draw the pixel + pixels[xpos] = src[xpos]; + } + } + } +} + +uint16_t *memsetu16(uint16_t *dst, uint16_t fill, size_t count) +{ + for (int i = 0; i < count; i++) { + *dst++ = fill; + } + + return 0; +} + +static void DrawFrame(uint16_t *pixels) +{ + int i; + int j; + static uint16_t scanlines[DISPLAY_HEIGHT][DISPLAY_WIDTH]; + unsigned int blendMode = (REG_BLDCNT >> 6) & 3; + + for (i = 0; i < DISPLAY_HEIGHT; i++) { + REG_VCOUNT = i; + if (((REG_DISPSTAT >> 8) & 0xFF) == REG_VCOUNT) { + REG_DISPSTAT |= INTR_FLAG_VCOUNT; + if (REG_DISPSTAT & DISPSTAT_VCOUNT_INTR) + gIntrTable[INTR_INDEX_VCOUNT](); + } + + // Render the backdrop color before the each individual scanline. + // HBlank interrupt code could have changed it inbetween lines. + memsetu16(scanlines[i], *(uint16_t *)PLTT, DISPLAY_WIDTH); + DrawScanline(scanlines[i], i); + + REG_DISPSTAT |= INTR_FLAG_HBLANK; + + RunDMAs(DMA_HBLANK); + + if (REG_DISPSTAT & DISPSTAT_HBLANK_INTR) + gIntrTable[INTR_INDEX_HBLANK](); + + REG_DISPSTAT &= ~INTR_FLAG_HBLANK; + REG_DISPSTAT &= ~INTR_FLAG_VCOUNT; + } + + // Copy to screen + for (i = 0; i < DISPLAY_HEIGHT; i++) { + uint16_t *src = scanlines[i]; + for (j = 0; j < DISPLAY_WIDTH; j++) { + pixels[i * DISPLAY_WIDTH + j] = src[j]; + } + } +} + +#if ENABLE_VRAM_VIEW +void DrawVramView(Uint16 *buffer) +{ + for (int y = 0; y < VRAM_VIEW_HEIGHT / TILE_WIDTH; y++) { + for (int x = 0; x < VRAM_VIEW_WIDTH / TILE_WIDTH; x++) { + u16 tileId = y * (VRAM_VIEW_WIDTH / TILE_WIDTH) + x; + u16 *tileBase = &buffer[(y * VRAM_VIEW_WIDTH + x) * 8]; + + for (int ty = 0; ty < TILE_WIDTH; ty++) { + for (int tx = 0; tx < TILE_WIDTH; tx += 2) { + s32 tileIndex = ty * VRAM_VIEW_WIDTH + tx; + u16 *dest = &tileBase[tileIndex]; + + int i = (ty * TILE_WIDTH + tx) / 2; + u8 *colorPtr = &((u8 *)VRAM)[tileId * 0x20 + i]; + u8 colorId = colorPtr[0]; + u8 colA = (colorId & 0xF0) >> 4; + u8 colB = (colorId & 0x0F) >> 0; + + u8 paletteId = vramPalIdBuffer[tileId]; + dest[0] = PLTT[paletteId * 16 + colB]; + dest[1] = PLTT[paletteId * 16 + colA]; + } + } + } + } +} + +void VramDraw(SDL_Texture *texture) +{ + memset(vramBuffer, 0, sizeof(vramBuffer)); + DrawVramView(vramBuffer); + SDL_UpdateTexture(texture, NULL, vramBuffer, VRAM_VIEW_WIDTH * sizeof(Uint16)); +} +#endif + +void VDraw(SDL_Texture *texture) +{ + memset(gameImage, 0, sizeof(gameImage)); + DrawFrame(gameImage); + SDL_UpdateTexture(texture, NULL, gameImage, DISPLAY_WIDTH * sizeof(Uint16)); + REG_VCOUNT = DISPLAY_HEIGHT + 1; // prep for being in VBlank period +} + +u8 BinToBcd(u8 bin) +{ + int placeCounter = 1; + u8 out = 0; + do { + out |= (bin % 10) * placeCounter; + placeCounter *= 16; + } while ((bin /= 10) > 0); + + return out; +} + +// Following functions taken from mGBA's source +u16 ArcTan(s16 i) +{ + s32 a = -((i * i) >> 14); + s32 b = ((0xA9 * a) >> 14) + 0x390; + b = ((b * a) >> 14) + 0x91C; + b = ((b * a) >> 14) + 0xFB6; + b = ((b * a) >> 14) + 0x16AA; + b = ((b * a) >> 14) + 0x2081; + b = ((b * a) >> 14) + 0x3651; + b = ((b * a) >> 14) + 0xA2F9; + + return (i * b) >> 16; +} + +u16 ArcTan2(s16 x, s16 y) +{ + if (!y) { + if (x >= 0) + return 0; + return 0x8000; + } + if (!x) { + if (y >= 0) + return 0x4000; + return 0xC000; + } + if (y >= 0) { + if (x >= 0) { + if (x >= y) + return ArcTan((y << 14) / x); + } else if (-x >= y) + return ArcTan((y << 14) / x) + 0x8000; + return 0x4000 - ArcTan((x << 14) / y); + } else { + if (x <= 0) { + if (-x > -y) + return ArcTan((y << 14) / x) + 0x8000; + } else if (x >= -y) + return ArcTan((y << 14) / x) + 0x10000; + return 0xC000 - ArcTan((x << 14) / y); + } +} + +u16 Sqrt(u32 num) +{ + if (!num) + return 0; + u32 lower; + u32 upper = num; + u32 bound = 1; + while (bound < upper) { + upper >>= 1; + bound <<= 1; + } + while (1) { + upper = num; + u32 accum = 0; + lower = bound; + while (1) { + u32 oldLower = lower; + if (lower <= upper >> 1) + lower <<= 1; + if (oldLower >= upper >> 1) + break; + } + while (1) { + accum <<= 1; + if (upper >= lower) { + ++accum; + upper -= lower; + } + if (lower == bound) + break; + lower >>= 1; + } + u32 oldBound = bound; + bound += accum; + bound >>= 1; + if (bound >= oldBound) { + bound = oldBound; + break; + } + } + return bound; +} + +int MultiBoot(struct MultiBootParam *mp) { return 0; } diff --git a/sa1/src/platform/shared/audio/README.txt b/sa1/src/platform/shared/audio/README.txt new file mode 100644 index 0000000000..11d4506a3e --- /dev/null +++ b/sa1/src/platform/shared/audio/README.txt @@ -0,0 +1,4 @@ +The source code in this folder is from: +https://github.com/Kurausukun/pokeemerald/tree/pc_port + +Thanks to camthesaxman, Kurausukun, Pidgey and NT_x86 for allowing us to use the code! diff --git a/sa1/src/platform/shared/audio/cgb_audio.c b/sa1/src/platform/shared/audio/cgb_audio.c new file mode 100644 index 0000000000..787a65f43b --- /dev/null +++ b/sa1/src/platform/shared/audio/cgb_audio.c @@ -0,0 +1,267 @@ +#include "global.h" +#include "platform/shared/audio/cgb_audio.h" +#include "platform/shared/audio/cgb_tables.h" + +static struct AudioCGB gb; +static float soundChannelPos[4]; +static const s16 *PU1Table; +static const s16 *PU2Table; +static u32 apuFrame; +static u8 apuCycle; +static u32 sampleRate; +static u16 lfsrMax[2]; +float ch4Samples; + +void cgb_audio_init(u32 rate) +{ + gb.ch1Freq = 0; + gb.ch1SweepCounter = 0; + gb.ch1SweepCounterI = 0; + gb.ch1SweepDir = 0; + gb.ch1SweepShift = 0; + for (u8 ch = 0; ch < 4; ch++) { + gb.Vol[ch] = 0; + gb.VolI[ch] = 0; + gb.Len[ch] = 0; + gb.LenI[ch] = 0; + gb.LenOn[ch] = 0; + gb.EnvCounter[ch] = 0; + gb.EnvCounterI[ch] = 0; + gb.EnvDir[ch] = 0; + gb.DAC[ch] = 0; + soundChannelPos[ch] = 0; + } + soundChannelPos[1] = 1; + PU1Table = PU0; + PU2Table = PU0; + sampleRate = rate; + gb.ch4LFSR[0] = 0x8000; + gb.ch4LFSR[1] = 0x80; + lfsrMax[0] = 0x8000; + lfsrMax[1] = 0x80; + ch4Samples = 0.0f; +} + +void cgb_set_sweep(u8 sweep) +{ + gb.ch1SweepDir = (sweep & 0x08) >> 3; + gb.ch1SweepCounter = gb.ch1SweepCounterI = (sweep & 0x70) >> 4; + gb.ch1SweepShift = (sweep & 0x07); +} + +void cgb_set_wavram() +{ + for (u8 wavi = 0; wavi < 0x10; wavi++) { + gb.WAVRAM[(wavi << 1)] = (((*(REG_ADDR_WAVE_RAM0 + wavi)) & 0xF0) >> 4) / 7.5f - 1.0f; + gb.WAVRAM[(wavi << 1) + 1] = (((*(REG_ADDR_WAVE_RAM0 + wavi)) & 0x0F)) / 7.5f - 1.0f; + } +} + +void cgb_toggle_length(u8 channel, bool8 state) { gb.LenOn[channel] = state; } + +void cgb_set_length(u8 channel, u8 length) { gb.Len[channel] = gb.LenI[channel] = length; } + +void cgb_set_envelope(u8 channel, u8 envelope) +{ + if (channel == 2) { + switch ((envelope & 0xE0)) { + case 0x00: // mute + gb.Vol[2] = gb.VolI[2] = 0; + break; + case 0x20: // full + gb.Vol[2] = gb.VolI[2] = 4; + break; + case 0x40: // half + gb.Vol[2] = gb.VolI[2] = 2; + break; + case 0x60: // quarter + gb.Vol[2] = gb.VolI[2] = 1; + break; + case 0x80: // 3 quarters + gb.Vol[2] = gb.VolI[2] = 3; + break; + } + } else { + gb.DAC[channel] = (envelope & 0xF8) > 0; + gb.Vol[channel] = gb.VolI[channel] = (envelope & 0xF0) >> 4; + gb.EnvDir[channel] = (envelope & 0x08) >> 3; + gb.EnvCounter[channel] = gb.EnvCounterI[channel] = (envelope & 0x07); + } +} + +void cgb_trigger_note(u8 channel) +{ + gb.Vol[channel] = gb.VolI[channel]; + gb.Len[channel] = gb.LenI[channel]; + if (channel != 2) + gb.EnvCounter[channel] = gb.EnvCounterI[channel]; + if (channel == 3) { + gb.ch4LFSR[0] = 0x8000; + gb.ch4LFSR[1] = 0x80; + } +} + +void cgb_audio_generate(u16 samplesPerFrame) +{ + float *outBuffer = gb.outBuffer; + switch (REG_NR11 & 0xC0) { + case 0x00: + PU1Table = PU0; + break; + case 0x40: + PU1Table = PU1; + break; + case 0x80: + PU1Table = PU2; + break; + case 0xC0: + PU1Table = PU3; + break; + } + + switch (REG_NR21 & 0xC0) { + case 0x00: + PU2Table = PU0; + break; + case 0x40: + PU2Table = PU1; + break; + case 0x80: + PU2Table = PU2; + break; + case 0xC0: + PU2Table = PU3; + break; + } + + for (u16 i = 0; i < samplesPerFrame; i++, outBuffer += 2) { + apuFrame += 512; + if (apuFrame >= sampleRate) { + apuFrame -= sampleRate; + apuCycle++; + + if ((apuCycle & 1) == 0) { // Length + for (u8 ch = 0; ch < 4; ch++) { + if (gb.Len[ch]) { + if (--gb.Len[ch] == 0 && gb.LenOn[ch]) { + REG_NR52 &= (0xFF ^ (1 << ch)); + } + } + } + } + + if ((apuCycle & 7) == 7) { // Envelope + for (u8 ch = 0; ch < 4; ch++) { + if (ch == 2) + continue; // Skip wave channel + if (gb.EnvCounter[ch]) { + if (--gb.EnvCounter[ch] == 0) { + if (gb.Vol[ch] && !gb.EnvDir[ch]) { + gb.Vol[ch]--; + gb.EnvCounter[ch] = gb.EnvCounterI[ch]; + } else if (gb.Vol[ch] < 0x0F && gb.EnvDir[ch]) { + gb.Vol[ch]++; + gb.EnvCounter[ch] = gb.EnvCounterI[ch]; + } + } + } + } + } + + if ((apuCycle & 3) == 2) { // Sweep + if (gb.ch1SweepCounterI && gb.ch1SweepShift) { + if (--gb.ch1SweepCounter == 0) { + gb.ch1Freq = REG_SOUND1CNT_X & 0x7FF; + if (gb.ch1SweepDir) { + gb.ch1Freq -= gb.ch1Freq >> gb.ch1SweepShift; + if (gb.ch1Freq & 0xF800) + gb.ch1Freq = 0; + } else { + gb.ch1Freq += gb.ch1Freq >> gb.ch1SweepShift; + if (gb.ch1Freq & 0xF800) { + gb.ch1Freq = 0; + gb.EnvCounter[0] = 0; + gb.Vol[0] = 0; + } + } + REG_NR13 = gb.ch1Freq & 0xFF; + REG_NR14 &= 0xF8; + REG_NR14 += (gb.ch1Freq >> 8) & 0x07; + gb.ch1SweepCounter = gb.ch1SweepCounterI; + } + } + } + } + // Sound generation loop + soundChannelPos[0] += freqTable[REG_SOUND1CNT_X & 0x7FF] / (sampleRate / 32); + soundChannelPos[1] += freqTable[REG_SOUND2CNT_H & 0x7FF] / (sampleRate / 32); + soundChannelPos[2] += freqTable[REG_SOUND3CNT_X & 0x7FF] / (sampleRate / 32); + while (soundChannelPos[0] >= 32) + soundChannelPos[0] -= 32; + while (soundChannelPos[1] >= 32) + soundChannelPos[1] -= 32; + while (soundChannelPos[2] >= 32) + soundChannelPos[2] -= 32; + float outputL = 0; + float outputR = 0; + if (REG_NR52 & 0x80) { + if ((gb.DAC[0]) && (REG_NR52 & 0x01)) { + if (REG_NR51 & 0x10) + outputL += gb.Vol[0] * PU1Table[(int)(soundChannelPos[0])] / 15.0f; + if (REG_NR51 & 0x01) + outputR += gb.Vol[0] * PU1Table[(int)(soundChannelPos[0])] / 15.0f; + } + if ((gb.DAC[1]) && (REG_NR52 & 0x02)) { + if (REG_NR51 & 0x20) + outputL += gb.Vol[1] * PU2Table[(int)(soundChannelPos[1])] / 15.0f; + if (REG_NR51 & 0x02) + outputR += gb.Vol[1] * PU2Table[(int)(soundChannelPos[1])] / 15.0f; + } + if ((REG_NR30 & 0x80) && (REG_NR52 & 0x04)) { + if (REG_NR51 & 0x40) + outputL += gb.Vol[2] * gb.WAVRAM[(int)(soundChannelPos[2])] / 4.0f; + if (REG_NR51 & 0x04) + outputR += gb.Vol[2] * gb.WAVRAM[(int)(soundChannelPos[2])] / 4.0f; + } + if ((gb.DAC[3]) && (REG_NR52 & 0x08)) { + bool32 lfsrMode = ((REG_NR43 & 0x08) == 8); + ch4Samples += freqTableNSE[REG_SOUND4CNT_H & 0xFF] / sampleRate; + int ch4Out = 0; + if (gb.ch4LFSR[lfsrMode] & 1) { + ch4Out++; + } else { + ch4Out--; + } + int avgDiv = 1; + while (ch4Samples >= 1) { + avgDiv++; + bool8 lfsrCarry = 0; + if (gb.ch4LFSR[lfsrMode] & 2) + lfsrCarry ^= 1; + gb.ch4LFSR[lfsrMode] >>= 1; + if (gb.ch4LFSR[lfsrMode] & 2) + lfsrCarry ^= 1; + if (lfsrCarry) + gb.ch4LFSR[lfsrMode] |= lfsrMax[lfsrMode]; + if (gb.ch4LFSR[lfsrMode] & 1) { + ch4Out++; + } else { + ch4Out--; + } + ch4Samples--; + } + float sample = ch4Out; + if (avgDiv > 1) + sample /= avgDiv; + if (REG_NR51 & 0x80) + outputL += gb.Vol[3] * sample / 15.0f; + if (REG_NR51 & 0x08) + outputR += gb.Vol[3] * sample / 15.0f; + } + } + outBuffer[0] = outputL * 0.25f; + outBuffer[1] = outputR * 0.25f; + } +} + +float *cgb_get_buffer() { return gb.outBuffer; } diff --git a/sa1/src/platform/shared/audio/m4a_sound_mixer.c b/sa1/src/platform/shared/audio/m4a_sound_mixer.c new file mode 100644 index 0000000000..8850892f33 --- /dev/null +++ b/sa1/src/platform/shared/audio/m4a_sound_mixer.c @@ -0,0 +1,932 @@ +#include "global.h" + +#include "lib/m4a/m4a_internal.h" + +#include "platform/platform.h" +#include "platform/shared/audio/cgb_audio.h" + +static inline void GenerateAudio(struct SoundMixerState *mixer, struct MixerSource *chan, struct WaveData *wav, float *pcmBuffer, + u16 samplesPerFrame, float sampleRateReciprocal); +static void SampleMixer(struct SoundMixerState *mixer, u32 scanlineLimit, u16 samplesPerFrame, float *pcmBuffer, u8 dmaCounter, + u16 maxBufSize); +static inline bool32 TickEnvelope(struct MixerSource *chan, struct WaveData *wav); +static void ChnVolSetAsm(struct MixerSource *chan, struct MP2KTrack *track); + +#define VCOUNT_VBLANK 160 +#define TOTAL_SCANLINES 228 + +#ifndef __has_builtin +#define __has_builtin(x) defined(__GNUC__) +#endif + +#if ((-1 >> 1) == -1) && __has_builtin(__builtin_ctz) +#define FLOOR_DIV_POW2(a, b) ((a) >> __builtin_ctz(b)) +#else +#define FLOOR_DIV_POW2(a, b) ((a) > 0 ? (a) / (b) : (((a) + 1 - (b)) / (b))) +#endif + +static float audioBuffer[PCM_DMA_BUF_SIZE]; +static struct SoundMixerState sSoundInfo = { 0 }; +struct SoundMixerState *SOUND_INFO_PTR = &sSoundInfo; + +void SoundMain(void) +{ + struct SoundMixerState *mixer = SOUND_INFO_PTR; + + if (mixer->lockStatus != ID_NUMBER) { + return; + } + mixer->lockStatus++; + + u32 maxScanlines = mixer->maxScanlines; + if (mixer->maxScanlines != 0) { + u32 vcount = REG_VCOUNT; + maxScanlines += vcount; + if (vcount < VCOUNT_VBLANK) { + maxScanlines += TOTAL_SCANLINES; + } + } + + if (mixer->MPlayMainHead != NULL) { + mixer->MPlayMainHead(mixer->musicPlayerHead); + } + + mixer->CgbSound(); + + s32 samplesPerFrame = mixer->samplesPerFrame; + float *pcmBuffer = mixer->pcmBuffer; + s32 dmaCounter = mixer->dmaCounter; + + if (dmaCounter > 1) { + pcmBuffer += samplesPerFrame * (mixer->framesPerDmaCycle - (dmaCounter - 1)) * 2; + } + + SampleMixer(mixer, maxScanlines, samplesPerFrame, pcmBuffer, dmaCounter, PCM_DMA_BUF_SIZE); + cgb_audio_generate(samplesPerFrame); +} + +static void SampleMixer(struct SoundMixerState *mixer, u32 scanlineLimit, u16 samplesPerFrame, float *pcmBuffer, u8 dmaCounter, + u16 maxBufSize) +{ + u32 reverb = mixer->reverb; + if (reverb) { + // The vanilla reverb effect outputs a mono sound from four sources: + // - L/R channels as they were mixer->framesPerDmaCycle frames ago + // - L/R channels as they were (mixer->framesPerDmaCycle - 1) frames ago + float *tmp1 = pcmBuffer; + float *tmp2; + if (dmaCounter == 2) { + tmp2 = mixer->pcmBuffer; + } else { + tmp2 = pcmBuffer + samplesPerFrame * 2; + } + u16 i = 0; + do { + float s = tmp1[0] + tmp1[1] + tmp2[0] + tmp2[1]; + s *= ((float)reverb / 512.0f); + tmp1[0] = tmp1[1] = s; + tmp1 += 2; + tmp2 += 2; + } while (++i < samplesPerFrame); + } else { + // memset(pcmBuffer, 0, samplesPerFrame); + // memset(pcmBuffer + maxBufSize, 0, samplesPerFrame); + for (int i = 0; i < samplesPerFrame; i++) { + float *dst = &pcmBuffer[i * 2]; + dst[1] = dst[0] = 0.0f; + } + } + + float sampleRateReciprocal = mixer->sampleRateReciprocal; + s8 numChans = mixer->numChans; + struct MixerSource *chan = mixer->chans; + + for (int i = 0; i < numChans; i++, chan++) { + struct WaveData *wav = chan->wav; + + if (scanlineLimit != 0) { + u16 vcount = REG_VCOUNT; + if (vcount < VCOUNT_VBLANK) { + vcount += TOTAL_SCANLINES; + } + if (vcount >= scanlineLimit) { + goto returnEarly; + } + } + + if (TickEnvelope(chan, wav)) { + GenerateAudio(mixer, chan, wav, pcmBuffer, samplesPerFrame, sampleRateReciprocal); + } + } +returnEarly: + mixer->lockStatus = ID_NUMBER; +} + +// Returns TRUE if channel is still active after moving envelope forward a frame +//__attribute__((target("thumb"))) +static inline bool32 TickEnvelope(struct MixerSource *chan, struct WaveData *wav) +{ + // MP2K envelope shape + // | + // (linear)^ | + // Attack / \Decay (exponential) | + // / \_ | + // / '., Sustain | + // / '.______________ | + // / '-. Echo (linear) | + // / Release (exp) ''--..|\ | + // / \ | + + u8 status = chan->status; + if ((status & 0xC7) == 0) { + return FALSE; + } + + u8 env = 0; + if ((status & 0x80) == 0) { + env = chan->data.sound.envelopeVol; + + if (status & 4) { + // Note-wise echo + --chan->data.sound.echoVol; + if (chan->data.sound.echoVol <= 0) { + chan->status = 0; + return FALSE; + } else { + return TRUE; + } + } else if (status & 0x40) { + // Release + chan->data.sound.envelopeVol = env * chan->data.sound.release / 256U; + u8 echoVol = chan->data.sound.echoVol; + if (chan->data.sound.envelopeVol > echoVol) { + return TRUE; + } else if (echoVol == 0) { + chan->status = 0; + return FALSE; + } else { + chan->status |= 4; + return TRUE; + } + } + + switch (status & 3) { + u16 newEnv; + case 2: + // Decay + chan->data.sound.envelopeVol = env * chan->data.sound.decay / 256U; + + u8 sustain = chan->data.sound.sustain; + if (chan->data.sound.envelopeVol <= sustain && sustain == 0) { + // Duplicated echo check from Release section above + if (chan->data.sound.echoVol == 0) { + chan->status = 0; + return FALSE; + } else { + chan->status |= 4; + return TRUE; + } + } else if (chan->data.sound.envelopeVol <= sustain) { + chan->data.sound.envelopeVol = sustain; + --chan->status; + } + break; + case 3: + attack: + newEnv = env + chan->data.sound.attack; + if (newEnv > 0xFF) { + chan->data.sound.envelopeVol = 0xFF; + --chan->status; + } else { + chan->data.sound.envelopeVol = newEnv; + } + break; + case 1: // Sustain + default: + break; + } + + return TRUE; + } else if (status & 0x40) { + // Init and stop cancel each other out + chan->status = 0; + return FALSE; + } else { + // Init channel + chan->status = 3; + chan->current = wav->data; + chan->data.sound.ct = wav->size; + chan->data.sound.fw = 0; + chan->data.sound.envelopeVol = 0; + if ((wav->status >> 8) & 0xC0) { + chan->status |= 0x10; + } + goto attack; + } +} + +static inline void GenerateAudio(struct SoundMixerState *mixer, struct MixerSource *chan, struct WaveData *wav, float *pcmBuffer, + u16 samplesPerFrame, float sampleRateReciprocal) +{ /*, [[[]]]) {*/ + u8 v = chan->data.sound.envelopeVol * (mixer->masterVol + 1) / 16U; + chan->data.sound.envelopeVolR = chan->rightVol * v / 256U; + chan->data.sound.envelopeVolL = chan->leftVol * v / 256U; + + s32 loopLen = 0; + s8 *loopStart; + if (chan->status & 0x10) { + loopStart = wav->data + wav->loopStart; + loopLen = wav->size - wav->loopStart; + } + s32 samplesLeftInWav = chan->data.sound.ct; + s8 *current = chan->current; + signed envR = chan->data.sound.envelopeVolR; + signed envL = chan->data.sound.envelopeVolL; + + if (chan->type & TONEDATA_TYPE_CGB) { + for (u16 i = 0; i < samplesPerFrame; i++, pcmBuffer += 2) { + s8 c = *(current++); + + pcmBuffer[1] += (c * envR) / 32768.0f; + pcmBuffer[0] += (c * envL) / 32768.0f; + if (--samplesLeftInWav == 0) { + samplesLeftInWav = loopLen; + if (loopLen != 0) { + current = loopStart; + } else { + chan->status = 0; + return; + } + } + } + + chan->data.sound.ct = samplesLeftInWav; + chan->current = current; + } else { + float finePos = chan->data.sound.fw; + float romSamplesPerOutputSample = chan->data.sound.freq * sampleRateReciprocal; + + s16 b = current[0]; + s16 m = current[1] - b; + current += 1; + + for (u16 i = 0; i < samplesPerFrame; i++, pcmBuffer += 2) { + // Use linear interpolation to calculate a value between the current sample in the wav + // and the next sample. Also cancel out the 9.23 stuff + float sample = (finePos * m) + b; + + pcmBuffer[1] += (sample * envR) / 32768.0f; + pcmBuffer[0] += (sample * envL) / 32768.0f; + + finePos += romSamplesPerOutputSample; + u32 newCoarsePos = finePos; + if (newCoarsePos != 0) { + finePos -= (int)finePos; + samplesLeftInWav -= newCoarsePos; + if (samplesLeftInWav <= 0) { + if (loopLen != 0) { + current = loopStart; + newCoarsePos = -samplesLeftInWav; + samplesLeftInWav += loopLen; + while (samplesLeftInWav <= 0) { + newCoarsePos -= loopLen; + samplesLeftInWav += loopLen; + } + b = current[newCoarsePos]; + m = current[newCoarsePos + 1] - b; + current += newCoarsePos + 1; + } else { + chan->status = 0; + return; + } + } else { + b = current[newCoarsePos - 1]; + m = current[newCoarsePos] - b; + current += newCoarsePos; + } + } + } + + chan->data.sound.fw = finePos; + chan->data.sound.ct = samplesLeftInWav; + chan->current = current - 1; + } +} + +u32 umul3232H32(u32 a, u32 b) +{ + u64 result = a; + result *= b; + return result >> 32; +} + +void SoundMainBTM(void *ptr) { CpuFill32(0, ptr, offsetof(struct MP2KTrack, cmdPtr)); } + +// Removes chan from the doubly-linked list of channels associated with chan->track. +// Gonna rename this to like "FreeChannel" or something, similar to VGMS +void MP2KClearChain(struct MixerSource *chan) +{ + struct MP2KTrack *track = chan->track; + if (chan->track == NULL) { + return; + } + struct MixerSource *next = chan->next; + struct MixerSource *prev = chan->prev; + + if (prev != NULL) { + prev->next = next; + } else { + track->chan = next; + } + + if (next != NULL) { + next->prev = prev; + } + + chan->track = NULL; +} + +static u8 ConsumeTrackByte(struct MP2KTrack *track) { return *track->cmdPtr++; } + +void MPlayJumpTableCopy(void **mplayJumpTable) +{ + for (u8 i = 0; i < 36; i++) { + mplayJumpTable[i] = gMPlayJumpTableTemplate[i]; + } +} + +// Ends the current track. (Fine as in the Italian musical word, not English) +void MP2K_event_fine(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + struct MP2KTrack *r5 = track; + for (struct MixerSource *chan = track->chan; chan != NULL; chan = chan->next) { + if (chan->status & 0xC7) { + chan->status |= 0x40; + } + ClearChain(chan); + } + track->status = 0; +} + +// Sets the track's cmdPtr to the specified address. +void MP2K_event_goto(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + u8 *cmdPtr = track->cmdPtr; + uintptr_t addr = 0; + for (size_t i = sizeof(uintptr_t) - 1; i > 0; i--) { + addr |= cmdPtr[i]; + addr <<= 8; + } + addr |= *cmdPtr; + track->cmdPtr = (u8 *)addr; +} + +// Sets the track's cmdPtr to the specified address after backing up its current position. +void MP2K_event_patt(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + u8 level = track->patternLevel; + if (level < 3) { + track->patternStack[level] = track->cmdPtr + sizeof(u8 *); + track->patternLevel++; + MP2K_event_goto(unused, track); + } else { + // Stop playing this track, as an indication to the music programmer that they need to quit + // nesting patterns so darn much. + MP2K_event_fine(unused, track); + } +} + +// Marks the end of the current pattern, if there is one, by resetting the pattern to the +// most recently saved value. +void MP2K_event_pend(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + if (track->patternLevel != 0) { + u8 index = --track->patternLevel; + track->cmdPtr = track->patternStack[index]; + } +} + +// Loops back until a REPT event has been reached the specified number of times +void MP2K_event_rept(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + if (*track->cmdPtr == 0) { + // "Repeat 0 times" == loop forever + track->cmdPtr++; + MP2K_event_goto(unused, track); + } else { + u8 repeatCount = ++track->repeatCount; + if (repeatCount < ConsumeTrackByte(track)) { + MP2K_event_goto(unused, track); + } else { + track->repeatCount = 0; + track->cmdPtr += sizeof(u8) + sizeof(u8 *); + } + } +} + +// Sets the note priority for new notes in this track. +void MP2K_event_prio(struct MP2KPlayerState *unused, struct MP2KTrack *track) { track->priority = ConsumeTrackByte(track); } + +// Sets the BPM of all tracks to the specified tempo (in beats per half-minute, because 255 as a max tempo +// kinda sucks but 510 is plenty). +void MP2K_event_tempo(struct MP2KPlayerState *player, struct MP2KTrack *track) +{ + u16 bpm = ConsumeTrackByte(track); + bpm *= 2; + player->tempoRawBPM = bpm; + player->tempoInterval = (bpm * player->tempoScale) / 256; +} + +void MP2K_event_keysh(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->keyShift = ConsumeTrackByte(track); + track->status |= 0xC; +} + +void MP2K_event_voice(struct MP2KPlayerState *player, struct MP2KTrack *track) +{ + u8 voice = *(track->cmdPtr++); + struct MP2KVoiceGroup *voicegroup = &player->voicegroup[voice]; + track->voicegroup = *voicegroup; +} + +void MP2K_event_vol(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->vol = ConsumeTrackByte(track); + track->status |= 0x3; +} + +void MP2K_event_pan(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->pan = ConsumeTrackByte(track) - 0x40; + track->status |= 0x3; +} + +void MP2K_event_bend(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->bend = ConsumeTrackByte(track) - 0x40; + track->status |= 0xC; +} + +void MP2K_event_bendr(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->bendRange = ConsumeTrackByte(track); + track->status |= 0xC; +} + +void MP2K_event_lfodl(struct MP2KPlayerState *unused, struct MP2KTrack *track) { track->lfoDelay = ConsumeTrackByte(track); } + +void MP2K_event_modt(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + u8 type = ConsumeTrackByte(track); + if (type != track->modType) { + track->modType = type; + track->status |= 0xF; + } +} + +void MP2K_event_tune(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->tune = ConsumeTrackByte(track) - 0x40; + track->status |= 0xC; +} + +void MP2K_event_port(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + + vu8 *offset = (vu8 *)(REG_ADDR_NR10 + *(track->cmdPtr++)); + *offset = ConsumeTrackByte(track); +} + +void MP2KPlayerMain(struct MP2KPlayerState *player) +{ + struct SoundMixerState *mixer = SOUND_INFO_PTR; + + if (player->lockStatus != ID_NUMBER) { + return; + } + player->lockStatus++; + + if (player->nextPlayerFunc != NULL) { + player->nextPlayerFunc(player->nextPlayer); + } + + if (player->status & MUSICPLAYER_STATUS_PAUSE) { + goto returnEarly; + } + FadeOutBody(player); + if (player->status & MUSICPLAYER_STATUS_PAUSE) { + goto returnEarly; + } + + player->tempoCounter += player->tempoInterval; + while (player->tempoCounter >= 150) { + u16 trackBits = 0; + + for (u32 i = 0; i < player->trackCount; i++) { + struct MP2KTrack *currentTrack = player->tracks + i; + struct MixerSource *chan; + if ((currentTrack->status & MPT_FLG_EXIST) == 0) { + continue; + } + trackBits |= (1 << i); + + chan = currentTrack->chan; + while (chan != NULL) { + if ((chan->status & SOUND_CHANNEL_SF_ON) == 0) { + ClearChain(chan); + } else if (chan->data.sound.gateTime != 0 && --chan->data.sound.gateTime == 0) { + chan->status |= SOUND_CHANNEL_SF_STOP; + } + chan = chan->next; + } + + if (currentTrack->status & MPT_FLG_START) { + CpuFill32(0, currentTrack, offsetof(struct MP2KTrack, cmdPtr)); + currentTrack->status = MPT_FLG_EXIST; + currentTrack->bendRange = 2; + currentTrack->volPublic = 64; + currentTrack->lfoSpeed = 22; + currentTrack->voicegroup.type = 1; + } + + while (currentTrack->wait == 0) { + u8 event = *currentTrack->cmdPtr; + if (event < 0x80) { + event = currentTrack->runningStatus; + } else { + currentTrack->cmdPtr++; + if (event >= 0xBD) { + currentTrack->runningStatus = event; + } + } + + if (event >= 0xCF) { + mixer->plynote(event - 0xCF, player, currentTrack); + } else if (event >= 0xB1) { + player->cmd = event - 0xB1; + MP2KEventFunc eventFunc = mixer->MPlayJumpTable[player->cmd]; + eventFunc(player, currentTrack); + + if (currentTrack->status == 0) { + goto nextTrack; + } + } else { + currentTrack->wait = gClockTable[event - 0x80]; + } + } + + currentTrack->wait--; + + if (currentTrack->lfoSpeed != 0 && currentTrack->modDepth != 0) { + if (currentTrack->lfoDelayCounter != 0U) { + currentTrack->lfoDelayCounter--; + goto nextTrack; + } + + currentTrack->lfoSpeedCounter += currentTrack->lfoSpeed; + + s8 r; + if (currentTrack->lfoSpeedCounter >= 0x40U && currentTrack->lfoSpeedCounter < 0xC0U) { + r = 128 - currentTrack->lfoSpeedCounter; + } else if (currentTrack->lfoSpeedCounter >= 0xC0U) { + // Unsigned -> signed casts where the value is out of range are implementation defined. + // Why not add a few extra lines to make behavior the same for literally everyone? + r = currentTrack->lfoSpeedCounter - 256; + } else { + r = currentTrack->lfoSpeedCounter; + } + r = FLOOR_DIV_POW2(currentTrack->modDepth * r, 64); + + if (r != currentTrack->modCalculated) { + currentTrack->modCalculated = r; + if (currentTrack->modType == 0) { + currentTrack->status |= MPT_FLG_PITCHG; + } else { + currentTrack->status |= MPT_FLG_VOLCHG; + } + } + } + + nextTrack:; + } + + player->clock++; + if (trackBits == 0) { + player->status = MUSICPLAYER_STATUS_PAUSE; + goto returnEarly; + } + player->status = trackBits; + player->tempoCounter -= 150; + } + + u32 i = 0; + + do { + struct MP2KTrack *track = player->tracks + i; + + if ((track->status & MPT_FLG_EXIST) == 0 || (track->status & 0xF) == 0) { + continue; + } + TrkVolPitSet(player, track); + for (struct MixerSource *chan = track->chan; chan != NULL; chan = chan->next) { + if ((chan->status & 0xC7) == 0) { + ClearChain(chan); + continue; + } + u8 cgbType = chan->type & TONEDATA_TYPE_CGB; + if (track->status & MPT_FLG_VOLCHG) { + ChnVolSetAsm(chan, track); + if (cgbType != 0) { + chan->data.cgb.cgbStatus |= 1; + } + } + if (track->status & MPT_FLG_PITCHG) { + s32 key = chan->data.sound.key + track->keyShiftCalculated; + if (key < 0) { + key = 0; + } + if (cgbType != 0) { + chan->data.cgb.freq = mixer->MidiKeyToCgbFreq(cgbType, key, track->pitchCalculated); + chan->data.cgb.cgbStatus |= 0x2; + } else { + chan->data.sound.freq = MidiKeyToFreq(chan->wav, key, track->pitchCalculated); + } + } + } + track->status &= ~0xF; + } while (++i < player->trackCount); +returnEarly:; + player->lockStatus = ID_NUMBER; +} + +void TrackStop(struct MP2KPlayerState *player, struct MP2KTrack *track) +{ + if (track->status & 0x80) { + for (struct MixerSource *chan = track->chan; chan != NULL; chan = chan->next) { + if (chan->status != 0) { + u8 cgbType = chan->type & TONEDATA_TYPE_CGB; + if (cgbType != 0) { + struct SoundMixerState *mixer = SOUND_INFO_PTR; + mixer->CgbOscOff(cgbType); + } + chan->status = 0; + } + chan->track = NULL; + } + track->chan = NULL; + } +} + +static void ChnVolSetAsm(struct MixerSource *chan, struct MP2KTrack *track) +{ + s8 forcedPan = chan->data.sound.rhythmPan; + u32 rightVolume = (u8)(forcedPan + 128) * chan->data.sound.velocity * track->volRightCalculated / 128 / 128; + if (rightVolume > 0xFF) { + rightVolume = 0xFF; + } + chan->rightVol = rightVolume; + + u32 leftVolume = (u8)(127 - forcedPan) * chan->data.sound.velocity * track->volLeftCalculated / 128 / 128; + if (leftVolume > 0xFF) { + leftVolume = 0xFF; + } + chan->leftVol = leftVolume; +} + +void MP2K_event_nxx(u8 clock, struct MP2KPlayerState *player, struct MP2KTrack *track) +{ + struct SoundMixerState *mixer = SOUND_INFO_PTR; + + // A note can be anywhere from 1 to 4 bytes long. First is always the note length... + track->gateTime = gClockTable[clock]; + if (*track->cmdPtr < 0x80) { + // Then the note name... + track->key = *(track->cmdPtr++); + if (*track->cmdPtr < 0x80) { + // Then the velocity... + track->velocity = *(track->cmdPtr++); + if (*track->cmdPtr < 0x80) { + // Then a number to add ticks to get exotic or more precise note lengths without TIE. + track->gateTime += *(track->cmdPtr++); + } + } + } + + // sp14 + s8 forcedPan = 0; + // First r4, then r9 + struct MP2KVoiceGroup *voicegroup = &track->voicegroup; + // sp8 + u8 key = track->key; + u8 type = voicegroup->type; + + if (type & (TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL)) { + u8 voicegroupIndex; + if (voicegroup->type & TONEDATA_TYPE_SPL) { + voicegroupIndex = voicegroup->data.keySplit.keySplitTable[track->key]; + } else { + voicegroupIndex = track->key; + } + + voicegroup = voicegroup->data.keySplit.group + voicegroupIndex; + if (voicegroup->type & (TONEDATA_TYPE_RHY | TONEDATA_TYPE_SPL)) { + return; + } + if (type & TONEDATA_TYPE_RHY) { + if (voicegroup->pan_sweep & 0x80) { + forcedPan = ((s8)(voicegroup->pan_sweep & 0x7F) - 0x40) * 2; + } + key = voicegroup->drumKey; + } + } + + // sp10 + u16 priority = player->priority + track->priority; + if (priority > 0xFF) { + priority = 0xFF; + } + + u8 cgbType = voicegroup->type & TONEDATA_TYPE_CGB; + struct MixerSource *chan; + + if (cgbType != 0) { + if (mixer->cgbChans == NULL) { + return; + } + // There's only one CgbChannel of a given type, so we don't need to loop to find it. + chan = mixer->cgbChans + cgbType - 1; + + // If this channel is running and not stopped, + if ((chan->status & SOUND_CHANNEL_SF_ON) && (chan->status & SOUND_CHANNEL_SF_STOP) == 0) { + // then make sure this note is higher priority (or same priority but from a later track). + if (chan->data.sound.priority > priority || (chan->data.sound.priority == priority && chan->track < track)) { + return; + } + } + } else { + u16 p = priority; + struct MP2KTrack *t = track; + bool32 foundStoppingChannel = FALSE; + chan = NULL; + u8 numChans = mixer->numChans; + struct MixerSource *currChan = mixer->chans; + + for (u8 i = 0; i < numChans; i++, currChan++) { + if ((currChan->status & SOUND_CHANNEL_SF_ON) == 0) { + // Hey, we found a completely inactive channel! Let's use that. + chan = currChan; + break; + } + + if (currChan->status & SOUND_CHANNEL_SF_STOP && !foundStoppingChannel) { + // In the absence of a completely finalized channel, we can take over one that's about to + // finalize. That's a tier above any channel that's currently playing a note. + foundStoppingChannel = TRUE; + p = currChan->data.sound.priority; + t = currChan->track; + chan = currChan; + } else if ((currChan->status & SOUND_CHANNEL_SF_STOP && foundStoppingChannel) + || ((currChan->status & SOUND_CHANNEL_SF_STOP) == 0 && !foundStoppingChannel)) { + // The channel we're checking is on the same tier, so check the priority and track order + if (currChan->data.sound.priority < p) { + p = currChan->data.sound.priority; + t = currChan->track; + chan = currChan; + } else if (currChan->data.sound.priority == p && currChan->track > t) { + t = currChan->track; + chan = currChan; + } else if (currChan->data.sound.priority == p && currChan->track == t) { + chan = currChan; + } + } + } + } + + if (chan == NULL) { + return; + } + + ClearChain(chan); + + chan->prev = NULL; + chan->next = track->chan; + if (track->chan != NULL) { + track->chan->prev = chan; + } + track->chan = chan; + chan->track = track; + + track->lfoDelayCounter = track->lfoDelay; + if (track->lfoDelay != 0) { + ClearModM(track); + } + TrkVolPitSet(player, track); + + chan->data.sound.gateTime = track->gateTime; + chan->data.sound.untransposedKey = track->key; + chan->data.sound.velocity = track->velocity; + chan->data.sound.priority = priority; + chan->data.sound.key = key; + chan->data.sound.rhythmPan = forcedPan; + chan->type = voicegroup->type; + chan->wav = voicegroup->data.sound.wav; + chan->data.sound.attack = voicegroup->data.sound.attack; + chan->data.sound.decay = voicegroup->data.sound.decay; + chan->data.sound.sustain = voicegroup->data.sound.sustain; + chan->data.sound.release = voicegroup->data.sound.release; + chan->data.sound.echoVol = track->echoVolume; + chan->data.sound.echoLen = track->echoLength; + ChnVolSetAsm(chan, track); + + // Avoid promoting keyShiftCalculated to u8 by splitting the addition into a separate statement + s16 transposedKey = chan->data.sound.key; + transposedKey += track->keyShiftCalculated; + if (transposedKey < 0) { + transposedKey = 0; + } + + if (cgbType != 0) { + // struct CgbChannel *cgbChan = (struct CgbChannel *)chan; + chan->data.cgb.length = voicegroup->cgbLength; + if (voicegroup->pan_sweep & 0x80 || (voicegroup->pan_sweep & 0x70) == 0) { + chan->data.cgb.sweep = 8; + } else { + chan->data.cgb.sweep = voicegroup->pan_sweep; + } + + chan->data.cgb.freq = mixer->MidiKeyToCgbFreq(cgbType, transposedKey, track->pitchCalculated); + } else { + chan->data.sound.freq = MidiKeyToFreq(chan->wav, transposedKey, track->pitchCalculated); + } + + chan->status = SOUND_CHANNEL_SF_START; + track->status &= ~0xF; +} + +void MP2K_event_endtie(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + u8 key = *track->cmdPtr; + if (key < 0x80) { + track->key = key; + track->cmdPtr++; + } else { + key = track->key; + } + + struct MixerSource *chan = track->chan; + while (chan != NULL) { + if (chan->status & 0x83 && (chan->status & 0x40) == 0 && chan->data.sound.untransposedKey == key) { + chan->status |= 0x40; + return; + } + chan = chan->next; + } +} + +void MP2K_event_lfos(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->lfoSpeed = *(track->cmdPtr++); + if (track->lfoSpeed == 0) { + ClearModM(track); + } +} + +void MP2K_event_mod(struct MP2KPlayerState *unused, struct MP2KTrack *track) +{ + track->modDepth = *(track->cmdPtr++); + if (track->modDepth == 0) { + ClearModM(track); + } +} + +#define MASTER_VOLUME_REDUCE 0.1 + +void m4aSoundVSync(void) +{ + struct SoundMixerState *mixer = SOUND_INFO_PTR; + if (mixer->lockStatus - ID_NUMBER <= 1) { + s32 samplesPerFrame = mixer->samplesPerFrame * 2; + float *m4aBuffer = mixer->pcmBuffer; + float *cgbBuffer = cgb_get_buffer(); + s32 dmaCounter = mixer->dmaCounter; + bool8 shouldQueue = FALSE; + + if (dmaCounter > 1) { + m4aBuffer += samplesPerFrame * (mixer->framesPerDmaCycle - (dmaCounter - 1)); + } + + for (u32 i = 0; i < samplesPerFrame; i++) { + audioBuffer[i] = (m4aBuffer[i] + cgbBuffer[i]) * MASTER_VOLUME_REDUCE; + if (audioBuffer[i] != 0) { + shouldQueue = TRUE; + } + } + + if (shouldQueue) { + Platform_QueueAudio(audioBuffer, samplesPerFrame * 4); + } + if ((s8)(--mixer->dmaCounter) <= 0) + mixer->dmaCounter = mixer->framesPerDmaCycle; + } +} diff --git a/sa1/src/platform/shared/common.c b/sa1/src/platform/shared/common.c new file mode 100644 index 0000000000..2fa7d2d50e --- /dev/null +++ b/sa1/src/platform/shared/common.c @@ -0,0 +1,54 @@ +#include "core.h" +#include "lib/agb_flash/flash_internal.h" + +ALIGNED(256) uint8_t EWRAM_START[EWRAM_SIZE] = { 0 }; +ALIGNED(256) uint8_t IWRAM_START[IWRAM_SIZE] = { 0 }; +// TODO: REG_BASE needs to be u8, because of the address macro definitions +ALIGNED(256) uint8_t REG_BASE[IO_SIZE] = { 0 }; +ALIGNED(256) ColorRaw PLTT[32 * PALETTE_LEN_4BPP] = { 0 }; +ALIGNED(256) uint8_t VRAM[VRAM_SIZE] = { 0 }; +ALIGNED(256) uint8_t OAM[OAM_SIZE] = { 0 }; +ALIGNED(256) uint8_t FLASH_BASE[FLASH_ROM_SIZE_1M * SECTORS_PER_BANK] = { 0 }; + +u16 INTR_CHECK = 0; + +void IntrMain(void); + +IntrFunc INTR_VECTOR = IntrMain; + +void IntrMain(void) +{ +#define CHECK_INTR(res, input, flags) \ + { \ + res = input & flags; \ + if (res) { \ + goto found_instr; \ + } \ + index++; \ + } + + u16 flags = REG_IE & REG_IF; + u16 flag; + + u32 index = 0; + CHECK_INTR(flag, flags, (INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL)); + CHECK_INTR(flag, flags, INTR_FLAG_VBLANK); + CHECK_INTR(flag, flags, INTR_FLAG_HBLANK); + CHECK_INTR(flag, flags, INTR_FLAG_VCOUNT); + CHECK_INTR(flag, flags, INTR_FLAG_TIMER0); + CHECK_INTR(flag, flags, INTR_FLAG_TIMER1); + CHECK_INTR(flag, flags, INTR_FLAG_TIMER2); + CHECK_INTR(flag, flags, INTR_FLAG_DMA0); + CHECK_INTR(flag, flags, INTR_FLAG_DMA1); + CHECK_INTR(flag, flags, INTR_FLAG_DMA2); + CHECK_INTR(flag, flags, INTR_FLAG_DMA3); + CHECK_INTR(flag, flags, INTR_FLAG_KEYPAD); + CHECK_INTR(flag, flags, INTR_FLAG_GAMEPAK); + +found_instr: + REG_IF = flag; + + gIntrTable[index](); + +#undef CHECK_INTR +} diff --git a/sa1/src/platform/shared/compression.c b/sa1/src/platform/shared/compression.c new file mode 100644 index 0000000000..4bc4d3679a --- /dev/null +++ b/sa1/src/platform/shared/compression.c @@ -0,0 +1,59 @@ +#if ENABLE_RL_LZ_LOGGING +#include +#endif +#include "platform/platform.h" +#include "platform/ext/gbagfx/global.h" +#include "platform/ext/gbagfx/lz.h" +#include "platform/ext/gbagfx/rl.h" + +unsigned char *Platform_LZDecompress(unsigned char *src, int srcSize) +{ + int uncompressedSize = 0; + unsigned char *dest = LZDecompress(src, srcSize, &uncompressedSize); +#if ENABLE_RL_LZ_LOGGING + printf("LZDecompress(%p, %p) stored 0x%X bytes.\n", src, dest, uncompressedSize); +#endif + + return dest; +} + +unsigned char *Platform_RLDecompress(unsigned char *src, int srcSize) +{ + int uncompressedSize = 0; + unsigned char *dest = RLDecompress(src, srcSize, &uncompressedSize); +#if ENABLE_RL_LZ_LOGGING + printf("RLDecompress(%p, %p) stored 0x%X bytes.\n", src, dest, uncompressedSize); +#endif + + return dest; +} + +void Platform_LZFree(unsigned char *dest) { free(dest); } + +void Platform_RLFree(unsigned char *dest) { free(dest); } + +/* NOTE: + * "Unsafe" versions included for compatibility. + * This is just here so it doesn't fail if someone accidentally calls + * LZUnCompWram, LZUnCompVram, RLUnCompWram or RLUnCompVram. + * + * Please do NOT call them directly if you know the size of the compressed data! + * (Use Platform_LZDecompress and Platform_RLDecompress instead!) + */ +void Platform_LZDecompressUnsafe(unsigned char *src, unsigned char *dest) +{ + int uncompressedSize = 0; + LZDecompressUnsafe(src, dest, &uncompressedSize); +#if ENABLE_RL_LZ_LOGGING + printf("LZDecompress(%p, %p) stored 0x%X bytes.\n", src, dest, uncompressedSize); +#endif +} + +void Platform_RLDecompressUnsafe(unsigned char *src, unsigned char *dest) +{ + int uncompressedSize = 0; + RLDecompressUnsafe(src, dest, &uncompressedSize); +#if ENABLE_RL_LZ_LOGGING + printf("RLDecompress(%p, %p) stored 0x%X bytes.\n", src, dest, uncompressedSize); +#endif +} diff --git a/sa1/src/platform/shared/dma.c b/sa1/src/platform/shared/dma.c new file mode 100644 index 0000000000..60ad6144ff --- /dev/null +++ b/sa1/src/platform/shared/dma.c @@ -0,0 +1,135 @@ +#include +#include "global.h" +#include "platform/shared/dma.h" + +struct DMATransfer DMAList[DMA_COUNT] = { 0 }; + +void RunDMAs(u32 type) +{ + for (int dmaNum = 0; dmaNum < DMA_COUNT; dmaNum++) { + struct DMATransfer *dma = &DMAList[dmaNum]; +#if !USE_NEW_DMA + // Regular GBA order + u32 dmaCntReg = (®_DMA0CNT)[dmaNum * 3]; +#else + // "64 bit" order + u32 dmaCntReg = (®_DMA0CNT)[dmaNum]; +#endif + if (!((dmaCntReg >> 16) & DMA_ENABLE)) { + dma->control &= ~DMA_ENABLE; + } + + if ((dma->control & DMA_ENABLE) && (((dma->control & DMA_START_MASK) >> 12) == type)) { + // printf("DMA%d src=%p, dest=%p, control=%d\n", dmaNum, dma->src, dma->dst, dma->control); + for (int i = 0; i < dma->size; i++) { + if ((dma->control) & DMA_32BIT) + *dma->dst32 = *dma->src32; + else + *dma->dst16 = *dma->src16; + + // process destination pointer changes + if (((dma->control) & DMA_DEST_MASK) == DMA_DEST_INC) { + if ((dma->control) & DMA_32BIT) + dma->dst32++; + else + dma->dst16++; + } else if (((dma->control) & DMA_DEST_MASK) == DMA_DEST_DEC) { + if ((dma->control) & DMA_32BIT) + dma->dst32--; + else + dma->dst16--; + } else if (((dma->control) & DMA_DEST_MASK) == DMA_DEST_RELOAD) // TODO + { + if ((dma->control) & DMA_32BIT) + dma->dst32++; + else + dma->dst16++; + } + + // process source pointer changes + if (((dma->control) & DMA_SRC_MASK) == DMA_SRC_INC) { + if ((dma->control) & DMA_32BIT) + dma->src32++; + else + dma->src16++; + } else if (((dma->control) & DMA_SRC_MASK) == DMA_SRC_DEC) { + if ((dma->control) & DMA_32BIT) + dma->src32--; + else + dma->src16--; + } + } + + if (dma->control & DMA_REPEAT) { + // NOTE: If we change dma->size anywhere above, we need to reset its value here. + + if (((dma->control) & DMA_DEST_MASK) == DMA_DEST_RELOAD) { +#if !USE_NEW_DMA + dma->dst = (void *)(uintptr_t)(®_DMA0DAD)[dmaNum * 3]; +#else + dma->dst = (void *)(uintptr_t)(®_DMA0DAD)[dmaNum]; +#endif + } + } else { + dma->control &= ~DMA_ENABLE; + } + } + } +} + +#ifdef DmaSet +#undef DmaSet +#endif +void DmaSet(int dmaNum, const void *src, void *dest, u32 control) +{ + if (dmaNum >= DMA_COUNT) { + fprintf(stderr, "DmaSet with invalid DMA number: dmaNum=%d, src=%p, dest=%p, control=%d\n", dmaNum, src, dest, control); + return; + } + +#if !USE_NEW_DMA + // Regular GBA order + (®_DMA0SAD)[dmaNum * 3] = (uintptr_t)src; + (®_DMA0DAD)[dmaNum * 3] = (uintptr_t)dest; + (®_DMA0CNT)[dmaNum * 3] = (size_t)control; +#else + // "64 bit" order + (®_DMA0SAD)[dmaNum] = (uintptr_t)src; + (®_DMA0DAD)[dmaNum] = (uintptr_t)dest; + (®_DMA0CNT)[dmaNum] = (size_t)control; +#endif + + struct DMATransfer *dma = &DMAList[dmaNum]; + dma->src = src; + dma->dst = dest; + dma->size = control & 0x1ffff; + dma->control = control >> 16; + + // printf("\nDMA%d: S:%p %p -> %p\n", dmaNum, src, dest, dest + dma->size); + + RunDMAs(DMA_NOW); +} + +void DmaStop(int dmaNum) +{ +#if !USE_NEW_DMA + (®_DMA0CNT)[dmaNum * 3] &= ~((DMA_ENABLE | DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT) << 16); +#else + (®_DMA0CNT)[dmaNum] &= ~((DMA_ENABLE | DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT) << 16); +#endif + + struct DMATransfer *dma = &DMAList[dmaNum]; + dma->control &= ~(DMA_ENABLE | DMA_START_MASK | DMA_DREQ_ON | DMA_REPEAT); +} + +void DmaWait(int dmaNum) +{ + vu32 *ctrlRegs = ®_DMA0CNT; +#if !USE_NEW_DMA + while (ctrlRegs[dmaNum * 3] & (DMA_ENABLE << 16)) + ; +#else + while (ctrlRegs[dmaNum] & (DMA_ENABLE << 16)) + ; +#endif +} diff --git a/sa1/src/platform/shared/input.c b/sa1/src/platform/shared/input.c new file mode 100644 index 0000000000..d6346a2d42 --- /dev/null +++ b/sa1/src/platform/shared/input.c @@ -0,0 +1,51 @@ +#ifdef _WIN32 +#include +#include +#include +#include +#include "gba/io_reg.h" +#include "gba/types.h" +#include "platform/shared/input.h" + +#define STICK_THRESHOLD 0.5f +SharedKeys GetXInputKeys() +{ + XINPUT_STATE state; + ZeroMemory(&state, sizeof(XINPUT_STATE)); + + DWORD dwResult = XInputGetState(0, &state); + SharedKeys keys = 0; + + if (dwResult == ERROR_SUCCESS) { + /* A */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_A) >> 12; + /* B */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_X) >> 13; + /* Start */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_START) >> 1; + /* Select */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK) >> 3; + /* L */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER) << 1; + /* R */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER) >> 1; + /* Up */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) << 6; + /* Down */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) << 6; + /* Left */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT) << 3; + /* Right */ keys |= (state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) << 1; + + /* Control Stick */ + float xAxis = (float)state.Gamepad.sThumbLX / (float)SHRT_MAX; + float yAxis = (float)state.Gamepad.sThumbLY / (float)SHRT_MAX; + + if (xAxis < -STICK_THRESHOLD) + keys |= DPAD_LEFT; + else if (xAxis > STICK_THRESHOLD) + keys |= DPAD_RIGHT; + if (yAxis < -STICK_THRESHOLD) + keys |= DPAD_DOWN; + else if (yAxis > STICK_THRESHOLD) + keys |= DPAD_UP; + + if (state.Gamepad.bRightTrigger > 170) { + keys |= KEY_SPEEDUP; + } + } + + return keys; +} +#endif // _WIN32 diff --git a/sa1/src/platform/shared/sio_stub.c b/sa1/src/platform/shared/sio_stub.c new file mode 100644 index 0000000000..5293b1e0cd --- /dev/null +++ b/sa1/src/platform/shared/sio_stub.c @@ -0,0 +1,4 @@ +#include "multi_sio.h" + +u32 MultiSioRecvBufChange(void) { return 0; } +void MultiSioIntr(void) { } \ No newline at end of file diff --git a/sa1/src/platform/shared/stub.c b/sa1/src/platform/shared/stub.c new file mode 100644 index 0000000000..ca49cc8c19 --- /dev/null +++ b/sa1/src/platform/shared/stub.c @@ -0,0 +1,9 @@ +/* General module of stub of functions that have not been decompiled */ + +#include "global.h" +#include "core.h" + +void *ewram_end = 0; +void *iwram_end = 0; +char gNumMusicPlayers = 4; +int gMaxLines = 0; diff --git a/sa1/src/platform/win32/opengl.c b/sa1/src/platform/win32/opengl.c new file mode 100644 index 0000000000..7919768fc9 --- /dev/null +++ b/sa1/src/platform/win32/opengl.c @@ -0,0 +1,252 @@ +#include // realloc +#include // printf +#include +#include "global.h" // TEMP for PLTT +#include "platform/shared/opengl.h" + +// NOTE: This is NOT final at all. EXPERIMENTAL!!!!! + +// TODO: Move this file into /platform/shared + +// TEMP +static GLuint sTempTextureHandles[3] = { 0 }; + +#define NUM_RGB_CHANNELS 4 +u8 tempRgbaPalette[16 * 32][NUM_RGB_CHANNELS] = {}; +u8 tempRgbaFrame[DISPLAY_WIDTH * DISPLAY_HEIGHT][NUM_RGB_CHANNELS] = {}; + +typedef struct { + u8 *data; + int width, height; +} TextureBuffer; +static TextureBuffer sDynTextureBuffer = { 0 }; + +static void TempConvertPLTTToRGBA8(void) +{ + // Convert PLTT from ABGR1555 -> RGBA8 + for (int i = 0; i < ARRAY_COUNT(tempRgbaPalette); i++) { + u16 color = PLTT[i]; + float r = (float)(color & 0x01F) / 31.0; + float g = (float)((color & 0x3E0) >> 5) / 31.0; + float b = (float)((color & 0x7C00) >> 10) / 31.0; + + tempRgbaPalette[i][0] = r * 255.0; + tempRgbaPalette[i][1] = g * 255.0; + tempRgbaPalette[i][2] = b * 255.0; + tempRgbaPalette[i][3] = 1 * 255.0; + } +} + +static u8 *TempConvertPLTTEntryToRGBA8(u8 paletteId) +{ + // Convert PLTT from ABGR1555 -> RGBA8 + u16 *pal4BPP = &PLTT[(paletteId + 16) * 16]; + + for (int i = 0; i < 16; i++) { + u16 color = pal4BPP[i]; + + float r = (float)(color & 0x01F) / 31.0; + float g = (float)((color & 0x3E0) >> 5) / 31.0; + float b = (float)((color & 0x7C00) >> 10) / 31.0; + + tempRgbaPalette[paletteId * 16 + i][0] = r * 255.0; + tempRgbaPalette[paletteId * 16 + i][1] = g * 255.0; + tempRgbaPalette[paletteId * 16 + i][2] = b * 255.0; + tempRgbaPalette[paletteId * 16 + i][3] = 1 * 255.0; + } + + return tempRgbaPalette[paletteId * 16]; +} + +// TODO: This should be done offline. +// Just load all assets in RGB8 or RGBA8 on boot. +static void TempConvert4bppToRGBA8_DynTextureBuffer(const u8 *bitmap4bpp, int width, int height, u8 paletteId) +{ + if (sDynTextureBuffer.width * sDynTextureBuffer.height < width * height) { + sDynTextureBuffer.data = realloc(sDynTextureBuffer.data, width * height * sizeof(u32)); + + if (!sDynTextureBuffer.data) { + printf("WARNING: realloc in %s failed!\n", __FUNCTION__); + return; + } else { + printf("realloc: w 0x%X, h 0x%X, full: 0x%X\n", width, height, (u32)(width * height * sizeof(u32))); + } + } + + u8 *texturePalette = TempConvertPLTTEntryToRGBA8(paletteId); + + sDynTextureBuffer.width = width; + sDynTextureBuffer.height = height; + + u16 widthInTiles = width >> 3; + + int numSourcePixels = width * height; + for (int frameY = 0; frameY < height; frameY++) { + for (int frameX = 0; frameX < width; frameX++) { + u8 colorIndex = ((frameY & 0x7) * 8 + (frameX & 0x7)); + + bool8 doShift = (colorIndex & 1); + u8 textureColorId = bitmap4bpp[colorIndex >> 1] & (0xF << (doShift * 4)); + textureColorId >>= doShift * 4; + + sDynTextureBuffer.data[colorIndex * 4 + 0] = tempRgbaPalette[textureColorId][0]; + sDynTextureBuffer.data[colorIndex * 4 + 1] = tempRgbaPalette[textureColorId][1]; + sDynTextureBuffer.data[colorIndex * 4 + 2] = tempRgbaPalette[textureColorId][2]; + sDynTextureBuffer.data[colorIndex * 4 + 3] = 0xFF; + } + } +} + +void OpenGL_OnInit() +{ + // Enable texturing + glEnable(GL_TEXTURE_2D); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + + // NOTE: Modelview matrix is a legacy feature + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glGenTextures(2, &sTempTextureHandles[0]); +} + +void OpenGL_DisplaySprite(Sprite *sprite, u8 oamPaletteNum) +{ + const SpriteOffset *dims = sprite->dimensions; + + if (dims != (void *)-1) { + // Convert vertices screenspace -> unit space + glMatrixMode(GL_PROJECTION); +#if 0 + glLoadIdentity(); +#else + float a = 2.0f / DISPLAY_WIDTH; + float b = 2.0f / DISPLAY_HEIGHT; + float projMtx[] = { a, 0, 0, 0, // + 0, b, 0, 0, // + 0, 0, 1, 0, // + -1, -1, 0, 1 }; + glLoadMatrixf(projMtx); +#endif + + TempConvert4bppToRGBA8_DynTextureBuffer(sprite->graphics.src, dims->width, dims->height, sprite->palId + oamPaletteNum); + + // glGenTextures(1, &sTempTextureHandles[2]); + glBindTexture(GL_TEXTURE_2D, sTempTextureHandles[2]); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dims->width, dims->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, sDynTextureBuffer.data); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // downscale filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // upscale filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + // glClearColor((float)tempRgbaPalette[1][0] / 255., + // (float)tempRgbaPalette[1][1] / 255., + // (float)tempRgbaPalette[1][2] / 255., + // 1.0); + // glClear(GL_COLOR_BUFFER_BIT); + + float minX = sprite->x - (dims->width >> 1); + float maxX = minX + dims->width; + + float minY = sprite->y - (dims->height >> 1); + float maxY = minY + dims->height; + + glBegin(GL_TRIANGLES); + { + glTexCoord2f(0.0, 0.0); + glVertex2f(minX, maxY); + glTexCoord2f(1.0, 1.0); + glVertex2f(maxX, minY); + glTexCoord2f(0.0, 1.0); + glVertex2f(minX, minY); + + glTexCoord2f(0.0, 0.0); + glVertex2f(minX, maxY); + glTexCoord2f(1.0, 0.0); + glVertex2f(maxX, maxY); + glTexCoord2f(1.0, 1.0); + glVertex2f(maxX, minY); + } + glEnd(); + } +} + +void OpenGL_Render(void *tempBufferPixels, int viewportWidth, int viewportHeight) +{ + glViewport(0, 0, viewportWidth, viewportHeight); + +#if 0 + // Don't convert input-vertices + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); +#else + // Convert vertices screenspace -> unit space + glMatrixMode(GL_PROJECTION); + float a = 2.0f / DISPLAY_WIDTH; + float b = 2.0f / DISPLAY_HEIGHT; + float projMtx[] = { + a, 0, 0, 0, // + 0, b, 0, 0, // + 0, 0, 1, 0, // + -1, -1, 0, 1 // + }; + glLoadMatrixf(projMtx); +#endif + + // TempConvertPLTTToRGBA8(); + + // Convert the "software-rendered" image from ABGR1555 -> RGBA8 + for (int i = 0; i < ARRAY_COUNT(tempRgbaFrame); i++) { + u16 color = ((u16 *)tempBufferPixels)[i]; + float r = (float)(color & 0x01F) / 31.0; + float g = (float)((color & 0x3E0) >> 5) / 31.0; + float b = (float)((color & 0x7C00) >> 10) / 31.0; + + tempRgbaFrame[i][0] = b * 255.0; + tempRgbaFrame[i][1] = g * 255.0; + tempRgbaFrame[i][2] = r * 255.0; + tempRgbaFrame[i][3] = 1 * 255.0; + } + + glBindTexture(GL_TEXTURE_2D, sTempTextureHandles[0]); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, tempRgbaPalette); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // downscale filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // upscale filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + glBindTexture(GL_TEXTURE_2D, sTempTextureHandles[1]); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, DISPLAY_WIDTH, DISPLAY_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, tempRgbaFrame); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // downscale filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // upscale filtering + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + glClearColor(1.0, 1.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + + glBindTexture(GL_TEXTURE_2D, sTempTextureHandles[1]); + glBegin(GL_TRIANGLES); + { + glTexCoord2f(0.0, 0.0); + glVertex2f(0.0, +DISPLAY_HEIGHT); + glTexCoord2f(1.0, 1.0); + glVertex2f(+DISPLAY_WIDTH, 0); + glTexCoord2f(0.0, 1.0); + glVertex2f(0, 0); + + glTexCoord2f(0.0, 0.0); + glVertex2f(0, DISPLAY_HEIGHT); + glTexCoord2f(1.0, 0.0); + glVertex2f(DISPLAY_WIDTH, DISPLAY_HEIGHT); + glTexCoord2f(1.0, 1.0); + glVertex2f(DISPLAY_WIDTH, 0); + } + glEnd(); +} \ No newline at end of file diff --git a/sa1/src/platform/win32/win32.c b/sa1/src/platform/win32/win32.c new file mode 100644 index 0000000000..a8bde72c5d --- /dev/null +++ b/sa1/src/platform/win32/win32.c @@ -0,0 +1,452 @@ +#include +#include + +#include "global.h" +#include "core.h" +#include "gba/io_reg.h" + +#if (RENDERER == RENDERER_OPENGL) +#include +#include "platform/shared/opengl.h" +#endif + +#include "platform/shared/input.h" + +extern void GameInit(void); + +DWORD WINAPI GameThread(void *pThreadParam); +LRESULT CALLBACK Win32_WindowCallback(HWND window, UINT message, WPARAM wParam, LPARAM lParam); +static void Win32_ProcessPendingMessages(HWND window); +static RECT Win32_GetWindowDimension(HWND Window); + +#if (RENDERER == RENDERER_OPENGL) +static void Win32_InitOpenGL(HWND window); +#endif + +static u16 ALIGNED(8) sImageBuffer[DISPLAY_WIDTH * DISPLAY_HEIGHT] = { + RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, + RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, RGB_GREEN, +}; +static BITMAPINFO sBMInfo = { 0 }; +static bool32 sRunning = TRUE; +static HWND sWindowHandle = 0; +static HDC sDeviceContext = 0; +static u16 sInputKeys = 0; + +#define ENABLE_RESIZE TRUE + +enum { DMA_NOW, DMA_VBLANK, DMA_HBLANK, DMA_SPECIAL }; + +typedef union { + struct { + u16 unused : 5; + u16 dstCtrl : 2; + u16 srcCtrl : 2; + u16 repeat : 1; + u16 is32bit : 1; + u16 pakDRQ : 1; + u16 startTiming : 2; + u16 irqAtEnd : 1; + u16 enable : 1; + } split; + + u16 raw; +} DMACtrl; + +int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nShowCmd) +{ + // Allocate a console. + // This is necessary for using print functions when using an application with the + // WinMain() entry point. +#if 1 + AllocConsole(); + AttachConsole(GetCurrentProcessId()); + freopen("CON", "w", stdout); + printf("Console initialized.\n"); +#endif + + /* Initialize the window */ + WNDCLASS WindowClass = {}; + WindowClass.style = CS_HREDRAW | CS_VREDRAW; + WindowClass.lpfnWndProc = Win32_WindowCallback; + WindowClass.hInstance = instance; + WindowClass.lpszClassName = "MainGameWindowClass"; + + if (RegisterClass(&WindowClass)) { + RECT WantedCliRect = { 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT }; +#if ENABLE_RESIZE + DWORD WantedWindowStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE; +#else + // WS_THICKFRAME disables resizing the window + DWORD WantedWindowStyle = (WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME) | WS_VISIBLE; +#endif // ENABLE_RESIZE + + // NOTE: The sizes passed to CreateWindow are not the ones to the client area RECT. + // A call to AdjustWindowRect() fixes that. + AdjustWindowRect(&WantedCliRect, WantedWindowStyle, FALSE); + + sWindowHandle + = CreateWindow(WindowClass.lpszClassName, "", WantedWindowStyle, CW_USEDEFAULT, CW_USEDEFAULT, // x, y + (WantedCliRect.right - WantedCliRect.left), (WantedCliRect.bottom - WantedCliRect.top), 0, 0, instance, 0); + + if (sWindowHandle) { + sDeviceContext = GetDC(sWindowHandle); + +#if (RENDERER == RENDERER_OPENGL) + Win32_InitOpenGL(sWindowHandle); +#endif + + sBMInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + sBMInfo.bmiHeader.biWidth = DISPLAY_WIDTH; + sBMInfo.bmiHeader.biHeight = -DISPLAY_HEIGHT; // negative biHeight: bottom->down image + sBMInfo.bmiHeader.biPlanes = 1; + sBMInfo.bmiHeader.biBitCount = 16; + sBMInfo.bmiHeader.biCompression = BI_RGB; + sBMInfo.bmiHeader.biSizeImage = 0; // 0 for uncompressed + sBMInfo.bmiHeader.biXPelsPerMeter = 0; + sBMInfo.bmiHeader.biYPelsPerMeter = 0; + sBMInfo.bmiHeader.biClrUsed = 0; + sBMInfo.bmiHeader.biClrImportant = 0; + + timeBeginPeriod(1); + + Win32_ProcessPendingMessages(sWindowHandle); + + // If this isn't set, gFlags gets set to FLAGS_200, leading to the MP menu being + // loaded instead of the main loop + REG_RCNT = 0x8000; + REG_KEYINPUT = 0x3FF; + + EngineInit(); + GameInit(); + + DWORD threadId; + +#if 01 + REG_KEYINPUT &= ~START_BUTTON; + while (sRunning) { + memset(sImageBuffer, 0, sizeof(sImageBuffer)); + + gFlags |= 0x4000; + EngineMainLoop(); + // REG_KEYINPUT ^= (A_BUTTON | START_BUTTON); + + // NOTE: This is an OR because sInputKeys can get set + // through keyboard events. + sInputKeys |= GetXInputKeys(); + + REG_KEYINPUT = ~sInputKeys; + } +#else + HANDLE GameThreadHandle = CreateThread(NULL, 0, GameThread, NULL, 0, &threadId); + WaitForSingleObject(GameThreadHandle, INFINITE); +#endif + + ReleaseDC(sWindowHandle, sDeviceContext); + } + } +} + +DWORD WINAPI GameThread(void *pThreadParam) +{ + REG_KEYINPUT &= ~START_BUTTON; + // while (sRunning) + { + gFlags |= 0x4000; + EngineMainLoop(); + REG_KEYINPUT ^= (A_BUTTON | START_BUTTON); + REG_KEYINPUT |= (DPAD_RIGHT); + } +} + +#if (RENDERER == RENDERER_OPENGL) +// From "Handmade Hero 235 - Initializing OpenGL on Windows" +// https://www.youtube.com/watch?v=5Klc9RZPG7M +static void Win32_InitOpenGL(HWND window) +{ + HDC deviceContext = GetDC(window); + + PIXELFORMATDESCRIPTOR desiredPixelFormat = {}; + PIXELFORMATDESCRIPTOR suggestedPixelFormat; + + // TODO: Find out if double-buffering is necessary for us! + desiredPixelFormat.nSize = sizeof(PIXELFORMATDESCRIPTOR); + desiredPixelFormat.nVersion = 1; + desiredPixelFormat.dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER); + desiredPixelFormat.cColorBits = 24; + desiredPixelFormat.cAlphaBits = 8; + desiredPixelFormat.iLayerType = PFD_MAIN_PLANE; + + int suggestedPixelFormatIndex = ChoosePixelFormat(deviceContext, &desiredPixelFormat); + DescribePixelFormat(deviceContext, suggestedPixelFormatIndex, sizeof(PIXELFORMATDESCRIPTOR), &suggestedPixelFormat); + SetPixelFormat(deviceContext, suggestedPixelFormatIndex, &suggestedPixelFormat); + + // RC = "Rendering Context" + HGLRC openGLRC = wglCreateContext(deviceContext); + + if (wglMakeCurrent(deviceContext, openGLRC)) { + OpenGL_OnInit(); + } else { + // LOG fail + } + + ReleaseDC(window, deviceContext); +} +#endif + +static void Win32_DisplayBufferInWindow(HDC deviceContext, int windowWidth, int windowHeight) +{ +#if (RENDERER == RENDERER_OPENGL) + OpenGL_Render(sImageBuffer, windowWidth, windowHeight); + SwapBuffers(deviceContext); +#else + StretchDIBits(deviceContext, 0, 0, windowWidth, windowHeight, 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, sImageBuffer, &sBMInfo, + DIB_RGB_COLORS, SRCCOPY); +#endif +} + +LRESULT CALLBACK Win32_WindowCallback(HWND window, UINT message, WPARAM wParam, LPARAM lParam) +{ + LRESULT result = 0; + + switch (message) { + case WM_ACTIVATEAPP: { + OutputDebugStringA("WM_ACTIVATEAPP\n"); + } break; + + case WM_CLOSE: { + sRunning = FALSE; + OutputDebugStringA("WM_CLOSE\n"); + } break; + + case WM_DESTROY: { + sRunning = FALSE; + } break; + + case WM_PAINT: { + PAINTSTRUCT Paint; + HDC paintDC = BeginPaint(window, &Paint); + RECT clientRect; + GetClientRect(window, &clientRect); + + Win32_DisplayBufferInWindow(paintDC, + clientRect.right - clientRect.left, // width + clientRect.bottom - clientRect.top // height + ); + + EndPaint(window, &Paint); + } break; + + default: { + result = DefWindowProcA(window, message, wParam, lParam); + } break; + } + return result; +} + +static u16 Win32_KeyboardKeyToGameKey(char key) +{ + switch (key) { + case 'C': { + return A_BUTTON; + } break; + + case 'X': { + return B_BUTTON; + } break; + + case VK_RETURN: { + return START_BUTTON; + } break; + + case VK_BACK: { + return SELECT_BUTTON; + } break; + + case VK_LEFT: { + return DPAD_LEFT; + } break; + + case VK_UP: { + return DPAD_UP; + } break; + + case VK_RIGHT: { + return DPAD_RIGHT; + } break; + + case VK_DOWN: { + return DPAD_DOWN; + } break; + + case 'S': { + return L_BUTTON; + } break; + + case 'D': { + return R_BUTTON; + } break; + } + + return 0; +} + +static void Win32_ProcessPendingMessages(HWND window) +{ + MSG message; + while (PeekMessage(&message, 0, 0, 0, PM_REMOVE)) { + switch (message.message) { + case WM_KEYUP: { + sInputKeys &= ~Win32_KeyboardKeyToGameKey(message.wParam); + } break; + + case WM_KEYDOWN: { + sInputKeys |= Win32_KeyboardKeyToGameKey(message.wParam); + } break; + + case WM_QUIT: { + printf("Closing"); + sRunning = FALSE; + } break; + + default: { + TranslateMessage(&message); + DispatchMessage(&message); + } break; + } + } +} + +// Converts GBA -> Win32 RGB value +#define RGB_SHIFT(value) (((value >> 10) & 0x1F) | (value & 0x3E0) | (((value & 0x1F) << 10))) + +void Platform_DisplaySprite(Sprite *sprite, u8 oamPaletteNum) +{ + if (sprite->graphics.src == NULL) + return; + +#if (RENDERER == RENDERER_OPENGL) + // TEMP - Currently the display buffer gets drawn in software, but we should load the assets as a textures and let OpenGL render + // everything + // OpenGL_DisplaySprite(sprite, oamPaletteNum); + // return; +#endif + + const SpriteOffset *dims = sprite->dimensions; + + bool32 xFlip = SPRITE_FLAG_GET(sprite, X_FLIP); + bool32 yFlip = SPRITE_FLAG_GET(sprite, Y_FLIP); + + // printf("Sprite: %d\n", sprite->graphics.anim); + + s32 x, y, sprWidth, sprHeight; + + x = sprite->x; + y = sprite->y; + + { + // TEMP - from sprite.c + sprWidth = dims->width; + sprHeight = dims->height; + if (sprite->frameFlags & SPRITE_FLAG_MASK_ROT_SCALE_ENABLE) { + if (sprite->frameFlags & SPRITE_FLAG_MASK_ROT_SCALE_DOUBLE_SIZE) { + x -= dims->width / 2; + y -= dims->height / 2; + sprWidth *= 2; + sprHeight *= 2; + } + } else { + if (sprite->frameFlags & SPRITE_FLAG_MASK_Y_FLIP) { + y -= sprHeight - dims->offsetY; + } else { + y -= dims->offsetY; + } + + if (sprite->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { + x -= sprWidth - dims->offsetX; + } else { + x -= dims->offsetX; + } + } + } + + s32 tempX = x; + s32 tempY = y; + + u16 widthInTiles = dims->width >> 3; + + for (int frameY = 0; frameY < dims->height; frameY++) { + s32 finalY = (tempY + frameY); + + if (finalY < 0) + continue; + + if (finalY >= DISPLAY_HEIGHT) + break; + + for (int frameX = 0; frameX < dims->width; frameX++) { + + s32 finalX = (tempX + frameX); + + if (finalX < 0) + continue; + + if (finalX >= DISPLAY_WIDTH) + break; + + int bufferPixelIndex = finalY * DISPLAY_WIDTH + finalX; + int imagePixelIndex = frameY * dims->width + frameX; + + if (bufferPixelIndex >= 0 && bufferPixelIndex < DISPLAY_WIDTH * DISPLAY_HEIGHT) { + u16 *pal = &PLTT[oamPaletteNum * 16 + (BG_PLTT_SIZE / 2)]; + u16 tileNumX = (frameX >> 3); + u16 tileNumY = (frameY >> 3); + u16 tileNum = tileNumY * widthInTiles + tileNumX; + u32 offset = tileNum * TILE_SIZE_4BPP; + + u8 *tile = &((u8 *)sprite->graphics.src)[offset]; + + u8 colorIndex = ((frameY & 0x7) * 8 + (frameX & 0x7)); + + bool8 doShift = (colorIndex & 1); + u8 colorId = tile[colorIndex >> 1] & (0xF << (doShift * 4)); + colorId >>= doShift * 4; + if (colorId != 0) + sImageBuffer[bufferPixelIndex] = RGB_SHIFT(pal[colorId]); + } + } + } +} + +void VBlankIntrWait() +{ + // while (sRunning) + { + // NOTE: This wouldn't work here with multiple threads, because PeekMessage() + // only gets messages in the thread the specified window was created in. + Win32_ProcessPendingMessages(sWindowHandle); + RECT clientRect; + GetClientRect(sWindowHandle, &clientRect); + static u8 test = 0; + + sImageBuffer[test++] = RGB_BLACK; + sImageBuffer[test] = RGB_GREEN; + Win32_DisplayBufferInWindow(sDeviceContext, clientRect.right - clientRect.left, clientRect.bottom - clientRect.top); + + // TODO: Remove Sleep, use high-resolution timer instead! + Sleep(10); + +#if (RENDERER == RENDERER_OPENGL) + // TODO: Don't do this here!!! + // This should be called in src/platform/shared/opengl.c + glClearColor(0.0, 0.0, 0.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); +#endif + } +} + +void *Platform_malloc(size_t numBytes) { return HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, numBytes); } + +void Platform_free(void *ptr) { HeapFree(GetProcessHeap(), 0, ptr); } + +void Platform_QueueAudio(const u8 *data, u32 numBytes) { } \ No newline at end of file diff --git a/sa1/sym_iwram.txt b/sa1/sym_iwram.txt new file mode 100644 index 0000000000..8e544adb16 --- /dev/null +++ b/sa1/sym_iwram.txt @@ -0,0 +1,87 @@ + +/**** bss ****/ +sa2/src/lib/m4a/m4a.o(.bss.code); + +. = 0x0000400; +sa2/src/multi_boot.o(.bss); +src/game/stage/terrain_collision.o(.bss); + +. = 0x00000424; +src/lib/agb_flash/agb_flash.o(.bss); + +. = 0x00000440; +*libgcc.a:(.bss); + +. = 0x00000470; +sa2/src/core.o(.data); + +. = 0x00004C60; +sa2/src/multi_sio.o(.data); +sa2/src/sio32_multi_load.o(COMMON); + +. = 0x00004FE0; +src/game/sa1_sa2_shared/globals.o(.data); + +. = 0x00005154; +src/game/special_stage/main.o(.data); + +. = 0x00005160; gLoadedSaveGame = .; + +. = 0x000055A0; gUnknown_030055A0 = .; +. = 0x000055E0; gUnknown_030055E0 = .; +. = 0x000055F0; gUnknown_030055F0 = .; +. = 0x00005630; gUnknown_03005630 = .; +. = 0x00005670; gUnknown_03005670 = .; +. = 0x00005690; gUnknown_03005690 = .; +. = 0x000056F0; gUnknown_030056F0 = .; + +. = 0x00005730; +src/game/special_stage/temporary_sound_play_task.o(.data); + +. = 0x00005740; gUnknown_03005740 = .; +. = 0x00005780; gUnknown_03005780 = .; +. = 0x000057A0; gUnknown_030057A0 = .; +. = 0x000057E0; gUnknown_030057E0 = .; /* s8[] */ +. = 0x00005800; gUnknown_03005800 = .; +. = 0x00005840; gUnknown_03005840 = .; +. = 0x00005860; +src/game/enemies/boss_6_egg_snake.o(COMMON); +. = 0x00005890; gUnknown_03005890 = .; +. = 0x000058A8; +src/game/multiplayer/chao_message.o(.bss); +src/game/dummy_task.o(.data); + +. = 0x000058C0; +src/game/stage/stage.o(.data); + +. = 0x000058D0; gStageBackgroundsRam = .; +. = 0x000059D0; gCamera = .; +. = 0x00005A0C; gRefCollision = .; +. = 0x00005A10; gDustEffectBrakingTask = .; +. = 0x00005A18; gRingsScatterTask = .; + +. = 0x00005A20; +src/game/stage/player.o(.data); +src/game/stage/player_super_sonic.o(.data); +src/game/stage/underwater_effects.o(.data); + +. = 0x00005C80; +src/game/water_effects.o(.data); + +. = 0x000060D0; +sa2/src/input_recorder.o(.data); +src/game/stage/player_controls.o(.data); +src/game/some_task_manager.o(.data); +src/game/enemies/boss_xtra_super_egg_robot.o(.data); + +. = 0x00006240; +src/game/stage/ui_rendering.o(.data); + +. = 0x00006408; +src/lib/agb_flash/agb_flash.o(.data); + +iwram_end = .; + +. = 0x00007FF0; gUnknown_03007FF0 = .; +. = 0x00007FF8; gUnknown_03007FF8 = .; +. = 0x00007FFA; SOFT_RESET_DIRECT_BUF = .; /* refd in libagbsyscall */ diff --git a/src/background.c b/src/background.c index 19346ee390..da4ea40abd 100644 --- a/src/background.c +++ b/src/background.c @@ -71,10 +71,11 @@ void DrawBackground(Background *background) ADD_TO_BACKGROUNDS_QUEUE(background); } +// TODO: The assembly is not the same between SA1 and SA2! // (85.37%) https://decomp.me/scratch/617Jb // (87.46%) https://decomp.me/scratch/1CFim // TODO: ProcessBackgroundsCopyQueue might be a good name for this function? -NONMATCH("asm/non_matching/engine/sub_8002B20.inc", bool32 sub_8002B20(void)) +NONMATCH("asm/non_matching/engine/sa2__sub_8002B20.inc", bool32 SA2_LABEL(sub_8002B20)(void)) { u16 sp00; s32 sp04 = 0; @@ -798,15 +799,15 @@ static AnimCmdResult animCmd_AddHitbox_BG(void *cursor, Sprite *s) DmaCopy32(3, &cmd->hitbox, &s->hitboxes[index].index, sizeof(Hitbox)); - if ((cmd->hitbox.left == 0) && (cmd->hitbox.top == 0) && (cmd->hitbox.right == 0) && (cmd->hitbox.bottom == 0)) { + if ((cmd->hitbox.b.left == 0) && (cmd->hitbox.b.top == 0) && (cmd->hitbox.b.right == 0) && (cmd->hitbox.b.bottom == 0)) { s->hitboxes[index].index = -1; } else { if (s->frameFlags & SPRITE_FLAG_MASK_Y_FLIP) { - XOR_SWAP(s->hitboxes[index].top, s->hitboxes[index].bottom); + XOR_SWAP(s->hitboxes[index].b.top, s->hitboxes[index].b.bottom); } if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { - XOR_SWAP(s->hitboxes[index].left, s->hitboxes[index].right); + XOR_SWAP(s->hitboxes[index].b.left, s->hitboxes[index].b.right); } } @@ -857,7 +858,7 @@ void DisplaySprite_BG(Sprite *s) // Some VBlank function // (21.30%) https://decomp.me/scratch/UfJX7 -NONMATCH("asm/non_matching/engine/sub_80039E4.inc", bool32 sub_80039E4(void)) +NONMATCH("asm/non_matching/engine/sa2__sub_80039E4.inc", bool32 SA2_LABEL(sub_80039E4)(void)) { // tilesize (could be 32 and get optimized out?) s32 sp28 = 5; @@ -1020,7 +1021,7 @@ NONMATCH("asm/non_matching/engine/sub_80039E4.inc", bool32 sub_80039E4(void)) } END_NONMATCH -void sub_8003EE4(u16 p0, s16 p1, s16 p2, s16 p3, s16 p4, s16 p5, s16 p6, BgAffineReg *affine) +void SA2_LABEL(sub_8003EE4)(u16 p0, s16 p1, s16 p2, s16 p3, s16 p4, s16 p5, s16 p6, BgAffineReg *affine) { affine->pa = (COS_24_8(p0) * (s16)Div(0x10000, p1)) >> 8; affine->pb = (SIN_24_8(p0) * (s16)Div(0x10000, p1)) >> 8; @@ -1050,7 +1051,7 @@ void sub_8003EE4(u16 p0, s16 p1, s16 p2, s16 p3, s16 p4, s16 p5, s16 p6, BgAffin // (58.36%) https://decomp.me/scratch/ClyxP // (48.23%) https://decomp.me/scratch/bDTEe #if 01 -NONMATCH("asm/non_matching/engine/sub_8004010.inc", u32 sub_8004010(void)) +NONMATCH("asm/non_matching/engine/sa2__sub_8004010.inc", u32 SA2_LABEL(sub_8004010)(void)) { u8 bgIndex = 0; u16 sp00[2]; diff --git a/src/bg_triangles.c b/src/bg_triangles.c index a6596401e4..3396334e32 100644 --- a/src/bg_triangles.c +++ b/src/bg_triangles.c @@ -24,10 +24,10 @@ typedef struct { s16 y; } Unknown; -NONMATCH("asm/non_matching/engine/unused_sub_8005C54.inc", void sub_8005C54()) { } +NONMATCH("asm/non_matching/engine/sa2__unused_sub_8005C54.inc", void sub_8005C54()) { } END_NONMATCH -NONMATCH("asm/non_matching/engine/unused_sub_8005FB4.inc", void sub_8005FB4()) { } +NONMATCH("asm/non_matching/engine/sa2__unused_sub_8005FB4.inc", void sub_8005FB4()) { } END_NONMATCH void SA2_LABEL(sub_8006228)(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u8 param5) @@ -286,10 +286,10 @@ void SA2_LABEL(sub_80064A8)(u8 bg, u8 param1, u8 param2, u8 param3, u8 param4, u } } -NONMATCH("asm/non_matching/engine/unused_sub_800672C.inc", void sub_800672C()) { } +NONMATCH("asm/non_matching/engine/sa2__unused_sub_800672C.inc", void sub_800672C()) { } END_NONMATCH -void SA2_LABEL(sub_8006DB4)(u8 bg, u8 *arg1, s32 unused, s32 arg3) +void SA2_LABEL(sub_8006DB4)(u8 bg, TriParam1 *arg1, s32 unused, s32 arg3) { s16 sp0[2]; s16 sp4[2] = { 1, 1 }; @@ -327,26 +327,26 @@ void SA2_LABEL(sub_8006DB4)(u8 bg, u8 *arg1, s32 unused, s32 arg3) } } - minVal = MIN(arg1[1], arg1[5]); - maxVal = MAX(arg1[1], arg1[5]); + minVal = MIN(arg1->unk1, arg1->unk5); + maxVal = MAX(arg1->unk1, arg1->unk5); cursor = IncCursor(cursor, minVal * gHBlankCopySize); - sp0[0] = (arg1[2] - arg1[0]); - sp4[0] = (arg1[3] - arg1[1]); + sp0[0] = (arg1->unk2 - arg1->unk0); + sp4[0] = (arg1->unk3 - arg1->unk1); spC[0] = (ABS(sp0[0]) * 2); sp10[0] = (ABS(sp4[0]) * 2); - sp0[1] = (arg1[6] - arg1[4]); - sp4[1] = (arg1[7] - arg1[5]); + sp0[1] = (arg1->unk6 - arg1->unk4); + sp4[1] = (arg1->unk7 - arg1->unk5); spC[1] = (ABS(sp0[1]) * 2); var_r0_5 = ABS(sp4[1]); sp10[1] = (var_r0_5 * 2); - sp14[0] = arg1[0]; - sp14[1] = arg1[4]; + sp14[0] = arg1->unk0; + sp14[1] = arg1->unk4; sp8[0] = -sp4[0]; sp8[1] = -sp4[1]; - if ((minVal != maxVal) && (arg1[1] < arg1[5])) { + if ((minVal != maxVal) && (arg1->unk1 < arg1->unk5)) { while (minVal < maxVal) { cursor[0] = arg3; cursor[1] = sp14[0]; @@ -406,7 +406,7 @@ void SA2_LABEL(sub_8006DB4)(u8 bg, u8 *arg1, s32 unused, s32 arg3) } } - maxVal = MIN(arg1[3], arg1[7]); + maxVal = MIN(arg1->unk3, arg1->unk7); while (minVal < maxVal) { cursor[0] = sp14[1]; @@ -455,9 +455,9 @@ void SA2_LABEL(sub_8006DB4)(u8 bg, u8 *arg1, s32 unused, s32 arg3) minVal++; } - maxVal = MAX(arg1[3], arg1[7]); + maxVal = MAX(arg1->unk3, arg1->unk7); - if (arg1[3] <= arg1[7]) { + if (arg1->unk3 <= arg1->unk7) { while (minVal < maxVal) { cursor[0] = sp14[1]; cursor[1] = 0; @@ -789,6 +789,7 @@ void SA2_LABEL(sub_8007858)(u8 param0, int_vcount minY, int_vcount maxY, u16 par } } +#if (GAME == GAME_SA2) // NOTE: Has to be below the code for matching... // But it is unused, so it might actually go somewhere else?. const u16 gUnknown_080984F8[] = { @@ -816,6 +817,12 @@ const u16 gUnknown_080984F8[] = { // Zone Extra 0x0300, 0x0080, 0x0200, 0x0098 }; +#elif (GAME == GAME_SA3) +const u16 gUnknown_082B5304[] = { + 0x0001, + 0x0001, +}; +#endif #endif void SA2_LABEL(sub_80078D4)(u8 bg, int_vcount minY, int_vcount maxY, u16 offsetEven, u16 offsetOdd) diff --git a/src/core.c b/src/core.c index af8406eca5..fceed3a0fa 100644 --- a/src/core.c +++ b/src/core.c @@ -119,7 +119,7 @@ s16 gBgScrollRegs[][2] ALIGNED(16) = {}; u16 gDispCnt = 0; u8 gKeysContinuedRepeatIntervals[10] ALIGNED(16) = {}; union MultiSioData gMultiSioSend ALIGNED(8) = {}; -u8 SA2_LABEL(gVCountSetting) = 0; +u8 gVCountSetting = 0; void *gHBlankCopyTarget ALIGNED(4) = NULL; @@ -854,7 +854,7 @@ void VBlankIntr(void) if (gFlagsPreVBlank & FLAGS_40) { REG_DISPSTAT |= DISPSTAT_VCOUNT_INTR; REG_DISPSTAT &= 0xff; - REG_DISPSTAT |= SA2_LABEL(gVCountSetting) << 8; // V-Count Setting + REG_DISPSTAT |= gVCountSetting << 8; // V-Count Setting REG_DISPSTAT &= ~DISPSTAT_VCOUNT; REG_DISPSTAT |= DISPSTAT_VCOUNT_INTR; REG_IE |= INTR_FLAG_VCOUNT; diff --git a/src/game/bosses/boss_9.c b/src/game/bosses/boss_9.c index 8ee6370948..9470bbcb45 100644 --- a/src/game/bosses/boss_9.c +++ b/src/game/bosses/boss_9.c @@ -1793,7 +1793,7 @@ bool32 sub_804EE84(Sprite *sprIn, s32 x, s32 y) return FALSE; } - if (RECT_COLLISION(x, y, &sprIn->hitboxes[1], I(qSonicX), I(qSonicY), &sprSonic->hitboxes[1])) { + if (RECT_COLLISION(x, y, &sprIn->hitboxes[1].b, I(qSonicX), I(qSonicY), &sprSonic->hitboxes[1].b)) { return TRUE; } @@ -1806,7 +1806,7 @@ bool32 sub_804EF68(Sprite *sprRocket, s32 rocketX, s32 rocketY, Sprite *sprMouth return FALSE; } - if (RECT_COLLISION(rocketX, rocketY, &sprRocket->hitboxes[1], mouthX, mouthY, &sprMouth->hitboxes[0])) { + if (RECT_COLLISION(rocketX, rocketY, &sprRocket->hitboxes[1].b, mouthX, mouthY, &sprMouth->hitboxes[0].b)) { return TRUE; } else { return FALSE; diff --git a/src/game/enemies/kiki.c b/src/game/enemies/kiki.c index 8feb19954c..0890e738f7 100644 --- a/src/game/enemies/kiki.c +++ b/src/game/enemies/kiki.c @@ -319,15 +319,15 @@ static void Task_ProjPieceMain(void) y = s->y; if ((s->hitboxes[0].index != -1) && (s2->hitboxes[0].index != -1)) { s32 x1, x2; - x1 = x + s->hitboxes[0].left; - x2 = I(gPlayer.qWorldX) + s2->hitboxes[0].left; - if ((x1 <= x2 && x1 + (s->hitboxes[0].right - s->hitboxes[0].left) >= x2) - || (x1 >= x2 && x2 + (s2->hitboxes[0].right - s2->hitboxes[0].left) >= x1)) { + x1 = x + s->hitboxes[0].b.left; + x2 = I(gPlayer.qWorldX) + s2->hitboxes[0].b.left; + if ((x1 <= x2 && x1 + (s->hitboxes[0].b.right - s->hitboxes[0].b.left) >= x2) + || (x1 >= x2 && x2 + (s2->hitboxes[0].b.right - s2->hitboxes[0].b.left) >= x1)) { s32 y1, y2; - y1 = y + s->hitboxes[0].top; - y2 = I(gPlayer.qWorldY) + s2->hitboxes[0].top; - if ((y1 <= y2 && y1 + (s->hitboxes[0].bottom - s->hitboxes[0].top) >= y2) - || (y1 >= y2 && y2 + (s2->hitboxes[0].bottom - s2->hitboxes[0].top) >= y1)) { + y1 = y + s->hitboxes[0].b.top; + y2 = I(gPlayer.qWorldY) + s2->hitboxes[0].b.top; + if ((y1 <= y2 && y1 + (s->hitboxes[0].b.bottom - s->hitboxes[0].b.top) >= y2) + || (y1 >= y2 && y2 + (s2->hitboxes[0].b.bottom - s2->hitboxes[0].b.top) >= y1)) { Coll_DamagePlayer(&gPlayer); } } diff --git a/src/game/interactables_1/spikes.c b/src/game/interactables_1/spikes.c index 91ee937bb2..3bc4aed9af 100644 --- a/src/game/interactables_1/spikes.c +++ b/src/game/interactables_1/spikes.c @@ -554,9 +554,9 @@ static bool32 HandleSpikeMovementUp(Sprite *s, MapEntity *me, Sprite_Spikes *spi } if (!GRAVITY_IS_INVERTED) { - player->qWorldY = Q(screenY + s->hitboxes[0].top - sp00[3]); + player->qWorldY = Q(screenY + s->hitboxes[0].b.top - sp00[3]); } else { - player->qWorldY = Q(screenY + s->hitboxes[0].bottom + sp00[3]); + player->qWorldY = Q(screenY + s->hitboxes[0].b.bottom + sp00[3]); } if (Coll_DamagePlayer(player)) { @@ -593,7 +593,7 @@ static bool32 HandleSpikeMovementUp(Sprite *s, MapEntity *me, Sprite_Spikes *spi if (gravityInverted) { if (flags & 0x20000) { player->qSpeedAirY = 0; - player->qWorldY = Q(screenY + s->hitboxes[0].bottom + player->spriteOffsetY); + player->qWorldY = Q(screenY + s->hitboxes[0].b.bottom + player->spriteOffsetY); player->moveState |= MOVESTATE_STOOD_ON_OBJ; player->moveState &= ~MOVESTATE_IN_AIR; player->stoodObj = s; @@ -666,7 +666,7 @@ static bool32 HandleSpikeMovementDown(Sprite *s, MapEntity *me, Sprite_Spikes *s u32 flags = Coll_Player_Platform(s, screenX, screenY, player); if (flags) { if ((flags & 0x20000) && !GRAVITY_IS_INVERTED) { - player->qWorldY = Q((screenY + s->hitboxes[0].bottom) + player->spriteOffsetY + 1); + player->qWorldY = Q((screenY + s->hitboxes[0].b.bottom) + player->spriteOffsetY + 1); player->qSpeedAirY = 0; player->qSpeedGround = 0; @@ -676,7 +676,7 @@ static bool32 HandleSpikeMovementDown(Sprite *s, MapEntity *me, Sprite_Spikes *s } } else if ((flags & 0x10000) && GRAVITY_IS_INVERTED) { // _080604D0 - player->qWorldY = Q((screenY + s->hitboxes[0].top) - player->spriteOffsetY - 1); + player->qWorldY = Q((screenY + s->hitboxes[0].b.top) - player->spriteOffsetY - 1); player->qSpeedAirY = 0; player->qSpeedGround = 0; @@ -767,9 +767,9 @@ static bool32 HandleSpikeMovementHidingUp(Sprite *s, MapEntity *me, Sprite_Spike s8 sp00[4] = { -v, 1 - player->spriteOffsetY, v, player->spriteOffsetY - 1 }; if (!GRAVITY_IS_INVERTED) { - player->qWorldY = Q((screenY + s->hitboxes[0].top) - sp00[3]); + player->qWorldY = Q((screenY + s->hitboxes[0].b.top) - sp00[3]); } else { - player->qWorldY = Q((screenY + s->hitboxes[0].bottom) + sp00[3]); + player->qWorldY = Q((screenY + s->hitboxes[0].b.bottom) + sp00[3]); } if (Coll_DamagePlayer(player)) { m4aSongNumStart(SE_SPIKES); @@ -807,7 +807,7 @@ static bool32 HandleSpikeMovementHidingUp(Sprite *s, MapEntity *me, Sprite_Spike return TRUE; } } else if ((flags & 0x20000) && GRAVITY_IS_INVERTED) { - player->qWorldY = Q(screenY + s->hitboxes[0].bottom + player->spriteOffsetY); + player->qWorldY = Q(screenY + s->hitboxes[0].b.bottom + player->spriteOffsetY); player->moveState |= MOVESTATE_STOOD_ON_OBJ; player->moveState &= ~MOVESTATE_IN_AIR; player->stoodObj = s; @@ -931,9 +931,9 @@ static bool32 HandleSpikeMovementHidingDown(Sprite *s, MapEntity *me, Sprite_Spi s8 sp00[4] = { -v, 1 - player->spriteOffsetY, v, player->spriteOffsetY - 1 }; if (!GRAVITY_IS_INVERTED) { - player->qWorldY = Q(s->hitboxes[0].bottom + screenY - sp00[1]); + player->qWorldY = Q(s->hitboxes[0].b.bottom + screenY - sp00[1]); } else { - player->qWorldY = Q(s->hitboxes[0].top + screenY + sp00[1]); + player->qWorldY = Q(s->hitboxes[0].b.top + screenY + sp00[1]); } if (!Coll_DamagePlayer(player)) { return TRUE; @@ -993,13 +993,13 @@ static u32 HandleSpikePlayerCollision(Sprite *s, s32 x, s32 y, Player *player) { u32 result; - s->hitboxes[0].left++; - s->hitboxes[0].right--; + s->hitboxes[0].b.left++; + s->hitboxes[0].b.right--; result = Coll_Player_Platform(s, x, y, player); - s->hitboxes[0].left--; - s->hitboxes[0].right++; + s->hitboxes[0].b.left--; + s->hitboxes[0].b.right++; return result; } diff --git a/src/game/interactables_2/hot_crater/floating_spring.c b/src/game/interactables_2/hot_crater/floating_spring.c index 8bce42483b..ff264984b3 100644 --- a/src/game/interactables_2/hot_crater/floating_spring.c +++ b/src/game/interactables_2/hot_crater/floating_spring.c @@ -126,7 +126,7 @@ static u32 sub_8074EF4(Sprite_FloatingSpring *floatingSpring) u32 temp = Coll_Player_Interactable(&floatingSpring->s, floatingSpring->unk3C, floatingSpring->unk40, &gPlayer); if (temp != 0) { if (I(gPlayer.qWorldY) < floatingSpring->unk40) { - gPlayer.qWorldY += Q(floatingSpring->s.hitboxes[0].top); + gPlayer.qWorldY += Q(floatingSpring->s.hitboxes[0].b.top); if (gPlayer.qSpeedAirY > 0) { gPlayer.qSpeedAirY = 0; } diff --git a/src/game/interactables_2/techno_base/spike_platform.c b/src/game/interactables_2/techno_base/spike_platform.c index afa9f38ed6..4175a52fba 100644 --- a/src/game/interactables_2/techno_base/spike_platform.c +++ b/src/game/interactables_2/techno_base/spike_platform.c @@ -194,13 +194,13 @@ static u32 sub_807AF0C(Sprite_IA78 *ia78) { if (PLAYER_IS_ALIVE) { u32 temp; - ia78->s.hitboxes[0].top -= 16; - ia78->s.hitboxes[0].bottom += 16; + ia78->s.hitboxes[0].b.top -= 16; + ia78->s.hitboxes[0].b.bottom += 16; temp = Coll_Player_Interactable(&ia78->s, ia78->unk3C, ia78->unk40, &gPlayer); - ia78->s.hitboxes[0].top += 16; - ia78->s.hitboxes[0].bottom -= 16; + ia78->s.hitboxes[0].b.top += 16; + ia78->s.hitboxes[0].b.bottom -= 16; if (temp != 0) { if (temp & 0x10000) { diff --git a/src/game/multiplayer/mp_player.c b/src/game/multiplayer/mp_player.c index ae5574eccd..e87d7bbb52 100644 --- a/src/game/multiplayer/mp_player.c +++ b/src/game/multiplayer/mp_player.c @@ -1338,7 +1338,7 @@ void SA2_LABEL(sub_801707C)(void) #if (GAME == GAME_SA1) y = Q(mpp->pos.y + (s->hitboxes[0].b.bottom) + 17); #elif (GAME == GAME_SA2) - y = Q(mpp->pos.y + (s->hitboxes[0].bottom) + 17); + y = Q(mpp->pos.y + (s->hitboxes[0].b.bottom) + 17); #endif result = SA2_LABEL(sub_801E4E4)(I(gPlayer.qWorldY) + gPlayer.spriteOffsetY, I(gPlayer.qWorldX), gPlayer.layer, 8, &unusedByte, SA2_LABEL(sub_801EE64)); @@ -1354,7 +1354,7 @@ void SA2_LABEL(sub_801707C)(void) #if (GAME == GAME_SA1) y = Q(mpp->pos.y + (s->hitboxes[0].b.top) - 17); #elif (GAME == GAME_SA2) - y = Q(mpp->pos.y + (s->hitboxes[0].top) - 17); + y = Q(mpp->pos.y + (s->hitboxes[0].b.top) - 17); #endif result = SA2_LABEL(sub_801E4E4)(I(gPlayer.qWorldY) - gPlayer.spriteOffsetY, I(gPlayer.qWorldX), gPlayer.layer, -8, &unusedByte, SA2_LABEL(sub_801EE64)); @@ -1576,8 +1576,8 @@ void SA2_LABEL(sub_8017670)(void) result = SA2_LABEL(sub_801F100)((mpp->pos.y + (s->hitboxes[0].b.top) - rect[3]) - playerUnk17, I(x), gPlayer.layer, -8, SA2_LABEL(sub_801EC3C)); #elif (GAME == GAME_SA2) - y = QS((mpp->pos.y + (s->hitboxes[0].top)) - rect[3]); - result = SA2_LABEL(sub_801F100)((mpp->pos.y + (s->hitboxes[0].top) - rect[3]) - playerUnk17, I(x), gPlayer.layer, -8, + y = QS((mpp->pos.y + (s->hitboxes[0].b.top)) - rect[3]); + result = SA2_LABEL(sub_801F100)((mpp->pos.y + (s->hitboxes[0].b.top) - rect[3]) - playerUnk17, I(x), gPlayer.layer, -8, SA2_LABEL(sub_801EC3C)); #endif @@ -1593,8 +1593,8 @@ void SA2_LABEL(sub_8017670)(void) result = SA2_LABEL(sub_801F100)(((mpp->pos.y + (s->hitboxes[0].b.bottom) + rect[3]) + playerUnk17), I(x), gPlayer.layer, 8, SA2_LABEL(sub_801EC3C)); #elif (GAME == GAME_SA2) - y = QS(mpp->pos.y + (s->hitboxes[0].bottom) + rect[3]); - result = SA2_LABEL(sub_801F100)(((mpp->pos.y + (s->hitboxes[0].bottom) + rect[3]) + playerUnk17), I(x), gPlayer.layer, + y = QS(mpp->pos.y + (s->hitboxes[0].b.bottom) + rect[3]); + result = SA2_LABEL(sub_801F100)(((mpp->pos.y + (s->hitboxes[0].b.bottom) + rect[3]) + playerUnk17), I(x), gPlayer.layer, 8, SA2_LABEL(sub_801EC3C)); #endif diff --git a/src/game/sa1_sa2_shared/collision.c b/src/game/sa1_sa2_shared/collision.c index 3f8a8bebf1..2cb8323fa1 100644 --- a/src/game/sa1_sa2_shared/collision.c +++ b/src/game/sa1_sa2_shared/collision.c @@ -27,7 +27,7 @@ u32 Coll_Player_Entity_RectIntersection(Sprite *s, s32 sx, s32 sy, Player *p, Re return result; } - if (RECT_COLLISION(sx, sy, &s->hitboxes[0], I(p->qWorldX), I(p->qWorldY), rectPlayer)) { + if (RECT_COLLISION(sx, sy, &s->hitboxes[0].b, I(p->qWorldX), I(p->qWorldY), rectPlayer)) { result |= COLL_FLAG_80000; } @@ -52,7 +52,7 @@ u32 Coll_Player_PlatformCrumbling(Sprite *s, s32 sx, s32 sy, Player *p) ip = TRUE; } - if (RECT_COLLISION_2(sx, sy, &s->hitboxes[0], p->qWorldX, p->qWorldY, (Rect8 *)rectPlayer) && (p->qSpeedAirY >= 0)) { + if (RECT_COLLISION_2(sx, sy, &s->hitboxes[0].b, p->qWorldX, p->qWorldY, (Rect8 *)rectPlayer) && (p->qSpeedAirY >= 0)) { #ifndef NON_MATCHING register s32 y asm("r1"); @@ -73,11 +73,11 @@ u32 Coll_Player_PlatformCrumbling(Sprite *s, s32 sx, s32 sy, Player *p) p->qSpeedAirY = 0; if (GRAVITY_IS_INVERTED) { - y = s->hitboxes[0].bottom; + y = s->hitboxes[0].b.bottom; y += sy; y += rectPlayer[3]; } else { - y = s->hitboxes[0].top; + y = s->hitboxes[0].b.top; y += sy; y -= rectPlayer[3]; } @@ -515,19 +515,19 @@ u32 sub_800CE94(Sprite *s, s32 sx, s32 sy, Rect8 *inRect, Player *p) s32 r1; s32 r3, r6; - if (RECT_COLLISION(sx, sy, (Rect8 *)&s->hitboxes[0].left, px, py, inRect)) { - s32 sMidX = (sx + ((s->hitboxes[0].left + s->hitboxes[0].right) >> 1)); - s32 sMidY = (sy + ((s->hitboxes[0].top + s->hitboxes[0].bottom) >> 1)); + if (RECT_COLLISION(sx, sy, (Rect8 *)&s->hitboxes[0].b.left, px, py, inRect)) { + s32 sMidX = (sx + ((s->hitboxes[0].b.left + s->hitboxes[0].b.right) >> 1)); + s32 sMidY = (sy + ((s->hitboxes[0].b.top + s->hitboxes[0].b.bottom) >> 1)); if ((sMidX <= px)) { - r6 = (sx + s->hitboxes[0].right - (px + inRect->left)); + r6 = (sx + s->hitboxes[0].b.right - (px + inRect->left)); result |= COLL_FLAG_40000; } else { - r6 = (sx + s->hitboxes[0].left - (px + inRect->right)); + r6 = (sx + s->hitboxes[0].b.left - (px + inRect->right)); result |= COLL_FLAG_80000; } if (sMidY > py) { - r3 = sy + s->hitboxes[0].top - (py + inRect->bottom); + r3 = sy + s->hitboxes[0].b.top - (py + inRect->bottom); r1 = r3 + 5; if ((r1) > 0) { @@ -535,7 +535,7 @@ u32 sub_800CE94(Sprite *s, s32 sx, s32 sy, Rect8 *inRect, Player *p) } result |= COLL_FLAG_10000; } else { - r3 = sy + s->hitboxes[0].bottom - (py + inRect->top); + r3 = sy + s->hitboxes[0].b.bottom - (py + inRect->top); r1 = r3 + 2; if ((r1) < 0) { r1 = 0; diff --git a/src/game/sa1_sa2_shared/interactables/platform_square.c b/src/game/sa1_sa2_shared/interactables/platform_square.c index b25d0fba29..aad65912ae 100644 --- a/src/game/sa1_sa2_shared/interactables/platform_square.c +++ b/src/game/sa1_sa2_shared/interactables/platform_square.c @@ -214,7 +214,7 @@ static void Task_Platform_Square(void) u32 otherRes; s32 movStateCopy = p->moveState; - s->hitboxes[0].top -= 3; + s->hitboxes[0].b.top -= 3; x = (posX + I(platform->offsetX)); y = (posY + I(platform->offsetY)); result = Coll_Player_Platform(s, x, y, p); @@ -247,13 +247,13 @@ static void Task_Platform_Square(void) if (result & 0x10000) { if (GRAVITY_IS_INVERTED) { p->qWorldY -= Q_8_8(result); - s->hitboxes[0].left += 16; - s->hitboxes[0].right -= 16; + s->hitboxes[0].b.left += 16; + s->hitboxes[0].b.right -= 16; otherRes = Coll_Player_Platform(s, posX + I(platform->offsetX), posY + I(platform->offsetY), p); - s->hitboxes[0].left -= 16; - s->hitboxes[0].right += 16; + s->hitboxes[0].b.left -= 16; + s->hitboxes[0].b.right += 16; p->qWorldY += Q_8_8(result); p->moveState = movStateCopy; @@ -326,7 +326,7 @@ static void Task_Platform_Square(void) } } - s->hitboxes[0].top += 3; + s->hitboxes[0].b.top += 3; } if (IS_OUT_OF_CAM_RANGE_TYPED(u32, posX - gCamera.x, posY - gCamera.y)) { @@ -364,13 +364,13 @@ static u32 UNUSED HandleSquarePlatformCollision(Sprite *s, s32 x, s32 y, Player { u32 result; - s->hitboxes[0].top++; - s->hitboxes[0].bottom--; + s->hitboxes[0].b.top++; + s->hitboxes[0].b.bottom--; result = Coll_Player_Platform(s, x, y, p); - s->hitboxes[0].top--; - s->hitboxes[0].bottom++; + s->hitboxes[0].b.top--; + s->hitboxes[0].b.bottom++; return result; } \ No newline at end of file diff --git a/src/game/sa1_sa2_shared/interactables/platform_thin.c b/src/game/sa1_sa2_shared/interactables/platform_thin.c index a00a8b846c..8dbffca213 100644 --- a/src/game/sa1_sa2_shared/interactables/platform_thin.c +++ b/src/game/sa1_sa2_shared/interactables/platform_thin.c @@ -442,12 +442,12 @@ static void TaskDestructor_PlatformBreakParticles(struct Task *t) static u32 HandleThinPlatformCollision(Sprite *s, s32 x, s32 y, Player *player) { u32 result; - s->hitboxes[0].top += 1; - s->hitboxes[0].bottom -= 1; + s->hitboxes[0].b.top += 1; + s->hitboxes[0].b.bottom -= 1; result = Coll_Player_Platform(s, x, y, player); - s->hitboxes[0].top -= 1; - s->hitboxes[0].bottom += 1; + s->hitboxes[0].b.top -= 1; + s->hitboxes[0].b.bottom += 1; return result; } diff --git a/src/game/sa1_sa2_shared/interactables/ramp.c b/src/game/sa1_sa2_shared/interactables/ramp.c index 9657ea1cbe..e07a5c3a0e 100644 --- a/src/game/sa1_sa2_shared/interactables/ramp.c +++ b/src/game/sa1_sa2_shared/interactables/ramp.c @@ -117,8 +117,8 @@ static void Task_Ramp(void) player->qSpeedAirX = 0; player->qSpeedGround = 0; } else if (!(ramp->unk3C & 2)) { - s32 hbLeft = screenX + s->hitboxes[0].left; - s32 hbWidth = s->hitboxes[0].right - s->hitboxes[0].left; + s32 hbLeft = screenX + s->hitboxes[0].b.left; + s32 hbWidth = s->hitboxes[0].b.right - s->hitboxes[0].b.left; s32 halfWidth = I(player->qWorldX) - hbLeft; if (halfWidth > 0) { if (halfWidth > hbWidth) { @@ -131,7 +131,7 @@ static void Task_Ramp(void) player->moveState |= MOVESTATE_IN_AIR; } else { s32 playerMiddleY = I(player->qWorldY) + player->spriteOffsetY - screenY; - s32 temp6 = I(s->hitboxes[0].top * (Q(halfWidth) / hbWidth)); + s32 temp6 = I(s->hitboxes[0].b.top * (Q(halfWidth) / hbWidth)); if (playerMiddleY >= temp6) { if (!(player->moveState & MOVESTATE_IN_AIR) && (player->qSpeedGround > Q(4)) diff --git a/src/game/sa1_sa2_shared/rings_manager.c b/src/game/sa1_sa2_shared/rings_manager.c index 2842d8e859..2243558a0a 100644 --- a/src/game/sa1_sa2_shared/rings_manager.c +++ b/src/game/sa1_sa2_shared/rings_manager.c @@ -279,11 +279,12 @@ NONMATCH("asm/non_matching/game/sa1_sa2_shared/Task_RingsMgrMain_collect_rings.i if (i != id && gMultiplayerPlayerTasks[i] != NULL) { MultiplayerPlayer *mpp = TASK_DATA(gMultiplayerPlayerTasks[i]); - for (regionY = REGION_LOWER(mpp->pos.y, mpp->s.hitboxes[0].top, 0); - regionY <= REGION_UPPER(mpp->pos.y, mpp->s.hitboxes[0].bottom, TILE_WIDTH) && regionY < v_regionCount; regionY++) { + for (regionY = REGION_LOWER(mpp->pos.y, mpp->s.hitboxes[0].b.top, 0); + regionY <= REGION_UPPER(mpp->pos.y, mpp->s.hitboxes[0].b.bottom, TILE_WIDTH) && regionY < v_regionCount; + regionY++) { - for (regionX = REGION_LOWER(mpp->pos.x, mpp->s.hitboxes[0].left, -TILE_WIDTH); - regionX <= REGION_UPPER(mpp->pos.x, mpp->s.hitboxes[0].right, TILE_WIDTH * 2) && regionX < h_regionCount; + for (regionX = REGION_LOWER(mpp->pos.x, mpp->s.hitboxes[0].b.left, -TILE_WIDTH); + regionX <= REGION_UPPER(mpp->pos.x, mpp->s.hitboxes[0].b.right, TILE_WIDTH * 2) && regionX < h_regionCount; regionX++) { u32 offset = READ_START_INDEX(rings, h_regionCount, regionX, regionY); @@ -297,7 +298,7 @@ NONMATCH("asm/non_matching/game/sa1_sa2_shared/Task_RingsMgrMain_collect_rings.i rx = TO_WORLD_POS(meRing->x, regionX); ry = TO_WORLD_POS(meRing->y, regionY); - if (RECT_TOUCHING_RING(mpp->pos.x, mpp->pos.y, rx, ry, &mpp->s.hitboxes[0])) { + if (RECT_TOUCHING_RING(mpp->pos.x, mpp->pos.y, rx, ry, &mpp->s.hitboxes[0].b)) { u8 pAnim = mpp->s.graphics.anim; u8 anims = gPlayerCharacterIdleAnims[gMultiplayerCharacters[mpp->unk56]]; u8 anim = pAnim - anims; diff --git a/src/game/stage/rings_scatter.c b/src/game/stage/rings_scatter.c index 041aa9a87d..eb899b7a18 100644 --- a/src/game/stage/rings_scatter.c +++ b/src/game/stage/rings_scatter.c @@ -400,7 +400,7 @@ void RingsScatterSingleplayer_FlippedGravity(void) hb = &p->spriteInfoBody->s.hitboxes[0]; if (ring->unkC <= sp0C && (p->charState != SA2_CHAR_ANIM_20 || p->timerInvulnerability == 0) && IS_ALIVE(p)) { - Rect8 *rect = (Rect8 *)&hb->left; + Rect8 *rect = (Rect8 *)&hb->b.left; if (RECT_TOUCHING_RING(I(p->qWorldX), I(p->qWorldY), ringIntX, ringIntY, rect)) { CreateCollectRingEffect(ringIntX, ringIntY); @@ -518,7 +518,7 @@ void RingsScatterSingleplayer_NormalGravity(void) #if (GAME == GAME_SA1) Rect8 *rect = &hb->b; #else - Rect8 *rect = (Rect8 *)&hb->left; + Rect8 *rect = (Rect8 *)&hb->b.left; #endif if (RECT_TOUCHING_RING(I(p->qWorldX), I(p->qWorldY), ringIntX, ringIntY, rect)) { CreateCollectRingEffect(bossWorldX, ringIntY); @@ -636,7 +636,7 @@ NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_Flipped p = &gPlayer; #if USE_HITBOX_RECT - hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].left; + hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].b.left; #else hb = &p->spriteInfoBody->s.hitboxes[0]; #endif @@ -754,7 +754,7 @@ NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterMultipak_NormalG p = &gPlayer; #if USE_HITBOX_RECT - hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].left; + hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].b.left; #else hb = &p->spriteInfoBody->s.hitboxes[0]; #endif @@ -881,7 +881,7 @@ NONMATCH("asm/non_matching/game/stage/rings_scatter/RingsScatterSinglepakMain_Co p = &gPlayer; #if USE_HITBOX_RECT - hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].left; + hb = (Rect8 *)&p->spriteInfoBody->s.hitboxes[0].b.left; #else hb = &p->spriteInfoBody->s.hitboxes[0]; #endif diff --git a/src/input_recorder.c b/src/input_recorder.c index 85802afa49..19563971b9 100644 --- a/src/input_recorder.c +++ b/src/input_recorder.c @@ -4,6 +4,10 @@ #include "malloc_ewram.h" #include "input_recorder.h" +// TODO: Move input recorder into sa1_sa2_shared +// It seems input recorder implementation is not infact +// part of the engine, and instead part of the sa1 game codebase + #if TAS_TESTING #if PORTABLE #include diff --git a/src/lib/agb_flash/agb_flash_at_512k.c b/src/lib/agb_flash/agb_flash_at_512k.c new file mode 100644 index 0000000000..34a88076f1 --- /dev/null +++ b/src/lib/agb_flash/agb_flash_at_512k.c @@ -0,0 +1,230 @@ +#include "global.h" +#include "gba/io_reg.h" +#include "lib/agb_flash/flash_internal.h" + +const u16 AT29LV512MaxTime[] = { + 10, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, 40, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, 0, 0, 0, + 40, 65469, TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_256CLK, +}; + +const struct FlashSetupInfo AT29LV512 = { + ProgramFlashSector_AT, // ProgramFlashSector_AT, + EraseFlashChip_AT, + EraseFlashSector_AT, + WaitForFlashWrite512K_Common, + AT29LV512MaxTime, + { + 65536, // ROM size + { + 4096, // sector size + 12, // bit shift to multiply by sector size (4096 == 1 << 12) + 16, // number of sectors + 0 // appears to be unused + }, + { 3, 3 }, // wait state setup data + { { MANUFACTURER_ATMEL, CHIP_ATMEL_AT29LV512 } } // ID + }, +}; + +u16 ProgramFlashSector_AT_2(u16, void *); +u16 EraseFlashChip_AT(void); +u16 EraseFlashSector_AT_2(u16); +u16 sub_80991FC(u8, u8 *, u8); + +const struct FlashSetupInfo gUnknown_087BF778 = { + ProgramFlashSector_AT_2, // ProgramFlashSector_AT_2, + EraseFlashChip_AT, + EraseFlashSector_AT_2, + WaitForFlashWrite512K_Common, + AT29LV512MaxTime, + { + 65536, // ROM size + { + 128, // sector size + 7, // bit shift to multiply by sector size (4096 == 1 << 12) + 512, // number of sectors + 0 // appears to be unused + }, + { 3, 3 }, // wait state setup data + { { MANUFACTURER_ATMEL, CHIP_ATMEL_AT29LV512 } } // ID + }, +}; + +// static const u32 udabest = sizeof(struct FlashSetupInfo); +u16 EraseFlashChip_AT(void) +{ + u16 result; + u16 readFlash1Buffer[0x20]; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gUnknown_087BF778.type.wait[0]; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x80); + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0x10); + + result = WaitForFlashWrite(3, FLASH_BASE, 0xFF); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 EraseFlashSector_AT_2(u16 sectorNum) +{ + u16 result; + u16 ime; + u8 *addr; + u32 size; + + addr = FLASH_BASE + (sectorNum << gUnknown_087BF778.type.sector.shift); + + ime = REG_IME; + REG_IME = 0; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + + size = gUnknown_087BF778.type.sector.size; + while (size != 0) { + *addr++ = 0xFF; + size--; + } + + addr--; + + REG_IME = ime; + + result = WaitForFlashWrite(1, addr, 0xFF); + + if (result) + result = (result & 0xFF00) | WAITCNT_SRAM_2; + + return result; +} + +u16 EraseFlashSector_AT(u16 sectorNum) +{ + u16 result; + u8 *addr; + u16 readFlash1Buffer[0x20]; + u16 i, r4; + u16 bankNum; + + if (sectorNum >= SECTORS_PER_BANK) + return 0x80FF; + + SetReadFlash1(readFlash1Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gUnknown_087BF778.type.wait[0]; + + addr = FLASH_BASE + (sectorNum << gUnknown_087BF778.type.sector.shift); + + bankNum = sectorNum << 5; + + for (i = 0; i < 32; i++) { + r4 = 2; + + while (r4 != 0 && (result = EraseFlashSector_AT_2(bankNum))) { + r4--; + } + bankNum++; + + if (result) + break; + } + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | WAITCNT_SRAM_8; + + return result; +} + +u16 ProgramFlashSector_AT_2(u16 sectorNum, void *src) +{ + u16 result; + u16 ime; + u8 *addr; + u32 size; + + addr = FLASH_BASE + (sectorNum << gUnknown_087BF778.type.sector.shift); + + ime = REG_IME; + REG_IME = 0; + + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + + size = gUnknown_087BF778.type.sector.size; + while (size != 0) { + *addr++ = *(u8 *)src++; + size--; + } + + addr--; + src--; + + REG_IME = ime; + + result = WaitForFlashWrite(1, addr, *(u8 *)src); + + return result; +} + +#if 0 +u16 ProgramByte(u8 *src, u8 *dest) +{ + FLASH_WRITE(0x5555, 0xAA); + FLASH_WRITE(0x2AAA, 0x55); + FLASH_WRITE(0x5555, 0xA0); + *dest = *src; + + return WaitForFlashWrite(1, dest, *src); +} +#endif + +static u32 VerifyEraseSector_Core(u8 *dest); +static u16 VerifyEraseSector(u8 *dest, u8 *src); + +u16 ProgramFlashSector_AT(u16 sectorNum, void *src) +{ + u16 result; + u16 bankNum; + u16 VerifyEraseSector_Core_Buffer[0x20]; + u16 i, r4; + u8 tryNum; + u8 erasesToTry; + u8 j; + + if (sectorNum >= SECTORS_PER_BANK) + return 0x80FF; + + SetReadFlash1(VerifyEraseSector_Core_Buffer); + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | gUnknown_087BF778.type.wait[0]; + bankNum = sectorNum << 5; + + gFlashNumRemainingBytes = AT29LV512.type.sector.size; + while (gFlashNumRemainingBytes) { + r4 = 2; + + while (r4 != 0 && (result = ProgramFlashSector_AT_2(bankNum, src))) { + r4--; + } + + if (result) + break; + + gFlashNumRemainingBytes -= gUnknown_087BF778.type.sector.size; + src += gUnknown_087BF778.type.sector.size; + bankNum++; + } + + REG_WAITCNT = (REG_WAITCNT & ~WAITCNT_SRAM_MASK) | 3; + return result; +} diff --git a/src/lib/agb_flash/agb_flash_le_512k.c b/src/lib/agb_flash/agb_flash_le_512k.c index 5b7e19e577..cc124ab603 100644 --- a/src/lib/agb_flash/agb_flash_le_512k.c +++ b/src/lib/agb_flash/agb_flash_le_512k.c @@ -126,8 +126,12 @@ u16 ProgramFlashSector_LE(u16 sectorNum, void *src) if (sectorNum > 15) return 0x80FF; -#if AGBFLASH_USE_V126 +#if !AGBFLASH_USE_V126 +#ifdef BUG_FIX + if (gFlash->romSize == FLASH_ROM_SIZE_1M) { +#else if (gFlash->sector.count == FLASH_ROM_SIZE_1M) { +#endif SwitchFlashBank(sectorNum / SECTORS_PER_BANK); sectorNum %= SECTORS_PER_BANK; } diff --git a/src/lib/agb_flash/agb_flash_mx_512k.c b/src/lib/agb_flash/agb_flash_mx_512k.c index e1831c5ae4..73a1ceb2b8 100644 --- a/src/lib/agb_flash/agb_flash_mx_512k.c +++ b/src/lib/agb_flash/agb_flash_mx_512k.c @@ -59,7 +59,11 @@ u16 ProgramFlashSector_MX(u16 sectorNum, void *src) u8 *dest; u16 readFlash1Buffer[0x20]; +#ifdef AGBFLASH_USE_V126 + if (sectorNum >= SECTORS_PER_BANK) +#else if (sectorNum >= gFlash->sector.count) +#endif return 0x80FF; // TODO: erase verify routine transmit diff --git a/src/sprite.c b/src/sprite.c index 01d14c9ed5..4f05b2eed9 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -350,19 +350,19 @@ static AnimCmdResult animCmd_AddHitbox(void *cursor, Sprite *s) DmaCopy32(3, &cmd->hitbox, &s->hitboxes[hitboxId].index, sizeof(Hitbox)); #if (GAME == GAME_SA3) - if (((u8)cmd->hitbox.left == (u8)cmd->hitbox.right) && (*(volatile u8 *)&cmd->hitbox.top == (u8)cmd->hitbox.bottom)) + if (((u8)cmd->hitbox.b.left == (u8)cmd->hitbox.b.right) && (*(volatile u8 *)&cmd->hitbox.b.top == (u8)cmd->hitbox.b.bottom)) #else - if ((cmd->hitbox.left == 0) && (cmd->hitbox.top == 0) && (cmd->hitbox.right == 0) && (cmd->hitbox.bottom == 0)) + if ((cmd->hitbox.b.left == 0) && (cmd->hitbox.b.top == 0) && (cmd->hitbox.b.right == 0) && (cmd->hitbox.b.bottom == 0)) #endif { s->hitboxes[hitboxId].index = -1; } else { if (s->frameFlags & SPRITE_FLAG_MASK_Y_FLIP) { - SWAP_AND_NEGATE(s->hitboxes[hitboxId].top, s->hitboxes[hitboxId].bottom); + SWAP_AND_NEGATE(s->hitboxes[hitboxId].b.top, s->hitboxes[hitboxId].b.bottom); } if (s->frameFlags & SPRITE_FLAG_MASK_X_FLIP) { - SWAP_AND_NEGATE(s->hitboxes[hitboxId].left, s->hitboxes[hitboxId].right); + SWAP_AND_NEGATE(s->hitboxes[hitboxId].b.left, s->hitboxes[hitboxId].b.right); } } @@ -841,8 +841,8 @@ UNUSED void DisplaySprites(Sprite *sprite, Vec2_16 *positions, u8 numPositions) y = sprite->y; if (sprite->frameFlags & SPRITE_FLAG_GLOBAL_OFFSET) { - x -= SA2_LABEL(gSpriteOffset).x; - y -= SA2_LABEL(gSpriteOffset).y; + x -= gSpriteOffset.x; + y -= gSpriteOffset.y; } sprWidth = sprDims->width; @@ -969,14 +969,14 @@ OamData *OamMalloc(u8 order) gOamMallocBuffer[gOamFreeIndex].split.fractional = 0xFF; // And store the start of the chain gOamMallocOrders_StartIndex[order] = gOamFreeIndex; - SA2_LABEL(gOamMallocOrders_EndIndex)[order] = gOamFreeIndex; + gOamMallocOrders_EndIndex[order] = gOamFreeIndex; } else { gOamMallocBuffer[gOamFreeIndex].split.fractional = 0xFF; // Store the next index on the previous in the chain // This is a bit of a hack cos it requires writing to the "fractional" part of the oam // but it's not used for this value - gOamMallocBuffer[SA2_LABEL(gOamMallocOrders_EndIndex)[order]].split.fractional = gOamFreeIndex; - SA2_LABEL(gOamMallocOrders_EndIndex)[order] = gOamFreeIndex; + gOamMallocBuffer[gOamMallocOrders_EndIndex[order]].split.fractional = gOamFreeIndex; + gOamMallocOrders_EndIndex[order] = gOamFreeIndex; } gOamFreeIndex++; @@ -993,7 +993,7 @@ void ProcessOamBuffers(void) s8 oamMallocIndex = gOamMallocOrders_StartIndex[layer]; while (oamMallocIndex != -1) { - u8 *debugCopyOrders = SA2_LABEL(gOamMallocCopiedOrder); + u8 *debugCopyOrders = gOamMallocCopiedOrder; DmaCopy16(3, &gOamMallocBuffer[oamMallocIndex], dstOam, sizeof(OamDataShort)); dstOam++; @@ -1046,10 +1046,10 @@ void ProcessOamBuffers(void) gOamFreeIndex = 0; if (gFlags & FLAGS_4000) { CpuFill32(-1, gOamMallocOrders_StartIndex, sizeof(gOamMallocOrders_StartIndex)); - CpuFill32(-1, SA2_LABEL(gOamMallocOrders_EndIndex), sizeof(SA2_LABEL(gOamMallocOrders_EndIndex))); + CpuFill32(-1, gOamMallocOrders_EndIndex, sizeof(gOamMallocOrders_EndIndex)); } else { DmaFill32(3, -1, gOamMallocOrders_StartIndex, sizeof(gOamMallocOrders_StartIndex)); - DmaFill32(3, -1, SA2_LABEL(gOamMallocOrders_EndIndex), sizeof(SA2_LABEL(gOamMallocOrders_EndIndex))); + DmaFill32(3, -1, gOamMallocOrders_EndIndex, sizeof(gOamMallocOrders_EndIndex)); } }